From 77b5169c9fe3da7de82847ff189856b6e249f5ca Mon Sep 17 00:00:00 2001 From: Egor Deev <67710823+IGlek@users.noreply.github.com> Date: Fri, 6 Jun 2025 18:37:39 +0300 Subject: [PATCH] v. 1.0 --- Mobiles Dataset 2025.csv | 931 ++++++++++++++++++ database.py | 313 ++++++ docs/report.docx | 0 main.py | 32 + main_window.py | 598 +++++++++++ requirements.txt | 20 + scripts/import_data.py | 263 +++++ sql/create_schema.sql | 105 ++ .../без_индексов.csv | 14 + .../без_индексов.png | Bin 0 -> 66925 bytes sql/explain_results/с_индексами.csv | 6 + sql/explain_results/с_индексами.png | Bin 0 -> 26856 bytes sql/performance_analysis.sql | 184 ++++ 13 files changed, 2466 insertions(+) create mode 100644 Mobiles Dataset 2025.csv create mode 100644 database.py create mode 100644 docs/report.docx create mode 100644 main.py create mode 100644 main_window.py create mode 100644 requirements.txt create mode 100644 scripts/import_data.py create mode 100644 sql/create_schema.sql create mode 100644 sql/explain_results/без_индексов.csv create mode 100644 sql/explain_results/без_индексов.png create mode 100644 sql/explain_results/с_индексами.csv create mode 100644 sql/explain_results/с_индексами.png create mode 100644 sql/performance_analysis.sql diff --git a/Mobiles Dataset 2025.csv b/Mobiles Dataset 2025.csv new file mode 100644 index 0000000..fa8c146 --- /dev/null +++ b/Mobiles Dataset 2025.csv @@ -0,0 +1,931 @@ +Company Name,Model Name,Mobile Weight,RAM,Front Camera,Back Camera,Processor,Battery Capacity,Screen Size,Launched Price (Pakistan),Launched Price (India),Launched Price (China),Launched Price (USA),Launched Price (Dubai),Launched Year +Apple,iPhone 16 128GB,174g,6GB,12MP,48MP,A17 Bionic,"3,600mAh",6.1 inches,"PKR 224,999","INR 79,999","CNY 5,799",USD 799,"AED 2,799",2024 +Apple,iPhone 16 256GB,174g,6GB,12MP,48MP,A17 Bionic,"3,600mAh",6.1 inches,"PKR 234,999","INR 84,999","CNY 6,099",USD 849,"AED 2,999",2024 +Apple,iPhone 16 512GB,174g,6GB,12MP,48MP,A17 Bionic,"3,600mAh",6.1 inches,"PKR 244,999","INR 89,999","CNY 6,499",USD 899,"AED 3,199",2024 +Apple,iPhone 16 Plus 128GB,203g,6GB,12MP,48MP,A17 Bionic,"4,200mAh",6.7 inches,"PKR 249,999","INR 89,999","CNY 6,199",USD 899,"AED 3,199",2024 +Apple,iPhone 16 Plus 256GB,203g,6GB,12MP,48MP,A17 Bionic,"4,200mAh",6.7 inches,"PKR 259,999","INR 94,999","CNY 6,499",USD 949,"AED 3,399",2024 +Apple,iPhone 16 Plus 512GB,203g,6GB,12MP,48MP,A17 Bionic,"4,200mAh",6.7 inches,"PKR 274,999","INR 104,999","CNY 6,999",USD 999,"AED 3,599",2024 +Apple,iPhone 16 Pro 128GB,206g,6GB,12MP / 4K,50MP + 12MP,A17 Pro,"4,400mAh",6.1 inches,"PKR 284,999","INR 99,999","CNY 6,999",USD 999,"AED 3,499",2024 +Apple,iPhone 16 Pro 256GB,206g,8GB,12MP / 4K,50MP + 12MP,A17 Pro,"4,400mAh",6.1 inches,"PKR 294,999","INR 104,999","CNY 7,099","USD 1,049","AED 3,699",2024 +Apple,iPhone 16 Pro 512GB,206g,8GB,12MP / 4K,50MP + 12MP,A17 Pro,"4,400mAh",6.1 inches,"PKR 314,999","INR 114,999","CNY 7,499","USD 1,099","AED 3,899",2024 +Apple,iPhone 16 Pro Max 128GB,221g,6GB,12MP / 4K,48MP + 12MP,A17 Pro,"4,500mAh",6.7 inches,"PKR 314,999","INR 109,999","CNY 7,499","USD 1,099","AED 3,799",2024 +Apple,iPhone 16 Pro Max 256GB,221g,8GB,12MP / 4K,48MP + 12MP,A17 Pro,"4,500mAh",6.7 inches,"PKR 324,999","INR 114,999","CNY 7,799","USD 1,199","AED 3,999",2024 +Apple,iPhone 16 Pro Max 512GB,221g,8GB,12MP / 4K,48MP + 12MP,A17 Pro,"4,500mAh",6.7 inches,"PKR 344,999","INR 124,999","CNY 8,199","USD 1,299","AED 4,199",2024 +Apple,iPhone 15 128GB,171g,6GB,12MP,48MP,A16 Bionic,"3,200mAh",6.1 inches,"PKR 204,999","INR 74,999","CNY 5,299",USD 799,"AED 2,699",2023 +Apple,iPhone 15 256GB,171g,6GB,12MP,48MP,A16 Bionic,"3,200mAh",6.1 inches,"PKR 214,999","INR 79,999","CNY 5,599",USD 849,"AED 2,999",2023 +Apple,iPhone 15 512GB,171g,6GB,12MP,48MP,A16 Bionic,"3,200mAh",6.1 inches,"PKR 224,999","INR 89,999","CNY 5,999",USD 949,"AED 3,199",2023 +Apple,iPhone 15 Plus 128GB,203g,6GB,12MP,48MP,A16 Bionic,"4,300mAh",6.7 inches,"PKR 234,999","INR 84,999","CNY 5,699",USD 899,"AED 3,199",2023 +Apple,iPhone 15 Plus 256GB,203g,6GB,12MP,48MP,A16 Bionic,"4,300mAh",6.7 inches,"PKR 244,999","INR 94,999","CNY 6,199",USD 999,"AED 3,399",2023 +Apple,iPhone 15 Plus 512GB,203g,6GB,12MP,48MP,A16 Bionic,"4,300mAh",6.7 inches,"PKR 264,999","INR 104,999","CNY 6,799","USD 1,049","AED 3,599",2023 +Apple,iPhone 15 Pro 128GB,206g,6GB,12MP / 4K,48MP + 12MP,A16 Bionic,"4,400mAh",6.1 inches,"PKR 274,999","INR 99,999","CNY 6,999","USD 1,099","AED 3,599",2023 +Apple,iPhone 15 Pro 256GB,206g,8GB,12MP / 4K,48MP + 12MP,A16 Bionic,"4,400mAh",6.1 inches,"PKR 284,999","INR 109,999","CNY 7,299","USD 1,199","AED 3,799",2023 +Apple,iPhone 15 Pro 512GB,206g,8GB,12MP / 4K,48MP + 12MP,A16 Bionic,"4,400mAh",6.1 inches,"PKR 304,999","INR 119,999","CNY 7,799","USD 1,299","AED 4,199",2023 +Apple,iPhone 15 Pro Max 128GB,221g,6GB,12MP / 4K,48MP + 12MP,A16 Bionic,"4,500mAh",6.7 inches,"PKR 314,999","INR 114,999","CNY 7,999","USD 1,199","AED 3,899",2023 +Apple,iPhone 15 Pro Max 256GB,221g,8GB,12MP / 4K,48MP + 12MP,A16 Bionic,"4,500mAh",6.7 inches,"PKR 324,999","INR 124,999","CNY 8,199","USD 1,299","AED 4,199",2023 +Apple,iPhone 15 Pro Max 512GB,221g,8GB,12MP / 4K,48MP + 12MP,A16 Bionic,"4,500mAh",6.7 inches,"PKR 344,999","INR 134,999","CNY 8,699","USD 1,399","AED 4,399",2023 +Apple,iPhone 14 128GB,172g,6GB,12MP,12MP + 12MP,A15 Bionic,"3,200mAh",6.1 inches,"PKR 184,999","INR 69,999","CNY 5,199",USD 799,"AED 2,699",2022 +Apple,iPhone 14 256GB,172g,6GB,12MP,12MP + 12MP,A15 Bionic,"3,200mAh",6.1 inches,"PKR 194,999","INR 74,999","CNY 5,599",USD 849,"AED 2,999",2022 +Apple,iPhone 14 512GB,172g,6GB,12MP,12MP + 12MP,A15 Bionic,"3,200mAh",6.1 inches,"PKR 204,999","INR 84,999","CNY 5,999",USD 949,"AED 3,199",2022 +Apple,iPhone 14 Plus 128GB,203g,6GB,12MP,12MP + 12MP,A15 Bionic,"4,325mAh",6.7 inches,"PKR 204,999","INR 79,999","CNY 5,499",USD 899,"AED 3,199",2022 +Apple,iPhone 14 Plus 256GB,203g,6GB,12MP,12MP + 12MP,A15 Bionic,"4,325mAh",6.7 inches,"PKR 214,999","INR 84,999","CNY 5,899",USD 999,"AED 3,399",2022 +Apple,iPhone 14 Plus 512GB,203g,6GB,12MP,12MP + 12MP,A15 Bionic,"4,325mAh",6.7 inches,"PKR 224,999","INR 94,999","CNY 6,299","USD 1,049","AED 3,599",2022 +Apple,iPhone 14 Pro 128GB,206g,6GB,12MP / 4K,48MP + 12MP,A16 Bionic,"4,200mAh",6.1 inches,"PKR 294,999","INR 109,999","CNY 7,199","USD 1,099","AED 3,699",2022 +Apple,iPhone 14 Pro 256GB,206g,8GB,12MP / 4K,48MP + 12MP,A16 Bionic,"4,200mAh",6.1 inches,"PKR 304,999","INR 119,999","CNY 7,499","USD 1,199","AED 3,899",2022 +Apple,iPhone 14 Pro 512GB,206g,8GB,12MP / 4K,48MP + 12MP,A16 Bionic,"4,200mAh",6.1 inches,"PKR 324,999","INR 134,999","CNY 7,999","USD 1,299","AED 4,199",2022 +Apple,iPhone 14 Pro Max 128GB,221g,6GB,12MP / 4K,48MP + 12MP,A16 Bionic,"4,500mAh",6.7 inches,"PKR 324,999","INR 124,999","CNY 8,099","USD 1,199","AED 3,999",2022 +Apple,iPhone 14 Pro Max 256GB,221g,8GB,12MP / 4K,48MP + 12MP,A16 Bionic,"4,500mAh",6.7 inches,"PKR 344,999","INR 134,999","CNY 8,499","USD 1,299","AED 4,199",2022 +Apple,iPhone 14 Pro Max 512GB,221g,8GB,12MP / 4K,48MP + 12MP,A16 Bionic,"4,500mAh",6.7 inches,"PKR 364,999","INR 144,999","CNY 8,999","USD 1,399","AED 4,499",2022 +Apple,iPhone 13 mini 128GB,140g,4GB,12MP,12MP,A15 Bionic,"2,438mAh",5.4 inches,"PKR 174,999","INR 69,900","CNY 5,199",USD 699,"AED 2,599",2021 +Apple,iPhone 13 mini 256GB,140g,4GB,12MP,12MP,A15 Bionic,"2,438mAh",5.4 inches,"PKR 184,999","INR 74,900","CNY 5,599",USD 799,"AED 2,999",2021 +Apple,iPhone 13 mini 512GB,140g,4GB,12MP,12MP,A15 Bionic,"2,438mAh",5.4 inches,"PKR 194,999","INR 84,900","CNY 5,999",USD 899,"AED 3,299",2021 +Apple,iPhone 13 128GB,174g,4GB,12MP,12MP + 12MP,A15 Bionic,"3,240mAh",6.1 inches,"PKR 194,999","INR 74,900","CNY 5,499",USD 799,"AED 2,999",2021 +Apple,iPhone 13 256GB,174g,4GB,12MP,12MP + 12MP,A15 Bionic,"3,240mAh",6.1 inches,"PKR 204,999","INR 84,900","CNY 5,899",USD 899,"AED 3,199",2021 +Apple,iPhone 13 512GB,174g,4GB,12MP,12MP + 12MP,A15 Bionic,"3,240mAh",6.1 inches,"PKR 224,999","INR 94,900","CNY 6,299",USD 999,"AED 3,599",2021 +Apple,iPhone 13 Pro 128GB,204g,6GB,12MP / 4K,12MP + 12MP + 12MP,A15 Bionic,"3,095mAh",6.1 inches,"PKR 294,999","INR 119,900","CNY 7,299",USD 999,"AED 3,999",2021 +Apple,iPhone 13 Pro 256GB,204g,6GB,12MP / 4K,12MP + 12MP + 12MP,A15 Bionic,"3,095mAh",6.1 inches,"PKR 314,999","INR 129,900","CNY 7,699","USD 1,099","AED 4,199",2021 +Apple,iPhone 13 Pro 512GB,204g,6GB,12MP / 4K,12MP + 12MP + 12MP,A15 Bionic,"3,095mAh",6.1 inches,"PKR 344,999","INR 139,900","CNY 8,199","USD 1,199","AED 4,399",2021 +Apple,iPhone 13 Pro Max 128GB,238g,6GB,12MP / 4K,12MP + 12MP + 12MP,A15 Bionic,"4,352mAh",6.7 inches,"PKR 324,999","INR 129,900","CNY 8,299","USD 1,099","AED 4,199",2021 +Apple,iPhone 13 Pro Max 256GB,238g,6GB,12MP / 4K,12MP + 12MP + 12MP,A15 Bionic,"4,352mAh",6.7 inches,"PKR 354,999","INR 139,900","CNY 8,799","USD 1,199","AED 4,399",2021 +Apple,iPhone 13 Pro Max 512GB,238g,6GB,12MP / 4K,12MP + 12MP + 12MP,A15 Bionic,"4,352mAh",6.7 inches,"PKR 384,999","INR 149,900","CNY 9,199","USD 1,399","AED 4,599",2021 +Apple,iPhone 12 mini 64GB,135g,4GB,12MP,12MP,A14 Bionic,"2,227mAh",5.4 inches,"PKR 174,999","INR 69,900","CNY 5,199",USD 699,"AED 2,599",2020 +Apple,iPhone 12 mini 128GB,135g,4GB,12MP,12MP,A14 Bionic,"2,227mAh",5.4 inches,"PKR 184,999","INR 74,900","CNY 5,599",USD 799,"AED 2,999",2020 +Apple,iPhone 12 mini 256GB,135g,4GB,12MP,12MP,A14 Bionic,"2,227mAh",5.4 inches,"PKR 194,999","INR 84,900","CNY 5,999",USD 899,"AED 3,299",2020 +Apple,iPhone 12 64GB,164g,4GB,12MP,12MP + 12MP,A14 Bionic,"2,815mAh",6.1 inches,"PKR 194,999","INR 74,900","CNY 5,499",USD 799,"AED 2,999",2020 +Apple,iPhone 12 128GB,164g,4GB,12MP,12MP + 12MP,A14 Bionic,"2,815mAh",6.1 inches,"PKR 204,999","INR 84,900","CNY 5,899",USD 899,"AED 3,199",2020 +Apple,iPhone 12 256GB,164g,4GB,12MP,12MP + 12MP,A14 Bionic,"2,815mAh",6.1 inches,"PKR 224,999","INR 94,900","CNY 6,299",USD 999,"AED 3,599",2020 +Apple,iPhone 12 Pro 128GB,189g,6GB,12MP / 4K,12MP + 12MP + 12MP,A14 Bionic,"2,815mAh",6.1 inches,"PKR 314,999","INR 119,900","CNY 7,299",USD 999,"AED 3,999",2020 +Apple,iPhone 12 Pro 256GB,189g,6GB,12MP / 4K,12MP + 12MP + 12MP,A14 Bionic,"2,815mAh",6.1 inches,"PKR 334,999","INR 129,900","CNY 7,699","USD 1,099","AED 4,199",2020 +Apple,iPhone 12 Pro 512GB,189g,6GB,12MP / 4K,12MP + 12MP + 12MP,A14 Bionic,"2,815mAh",6.1 inches,"PKR 354,999","INR 139,900","CNY 8,199","USD 1,199","AED 4,399",2020 +Apple,iPhone 12 Pro Max 128GB,228g,6GB,12MP / 4K,12MP + 12MP + 12MP,A14 Bionic,"3,687mAh",6.7 inches,"PKR 344,999","INR 129,900","CNY 8,399","USD 1,099","AED 4,199",2020 +Apple,iPhone 12 Pro Max 256GB,228g,6GB,12MP / 4K,12MP + 12MP + 12MP,A14 Bionic,"3,687mAh",6.7 inches,"PKR 364,999","INR 139,900","CNY 8,799","USD 1,199","AED 4,399",2020 +Apple,iPhone 12 Pro Max 512GB,228g,6GB,12MP / 4K,12MP + 12MP + 12MP,A14 Bionic,"3,687mAh",6.7 inches,"PKR 384,999","INR 149,900","CNY 9,199","USD 1,399","AED 4,599",2020 +Apple,iPhone 11 64GB,194g,4GB,12MP,12MP + 12MP,A13 Bionic,"3,110mAh",6.1 inches,"PKR 159,999","INR 64,900","CNY 5,499",USD 699,"AED 2,499",2019 +Apple,iPhone 11 128GB,194g,4GB,12MP,12MP + 12MP,A13 Bionic,"3,110mAh",6.1 inches,"PKR 169,999","INR 74,900","CNY 5,899",USD 799,"AED 2,999",2019 +Apple,iPhone 11 256GB,194g,4GB,12MP,12MP + 12MP,A13 Bionic,"3,110mAh",6.1 inches,"PKR 179,999","INR 84,900","CNY 6,299",USD 899,"AED 3,299",2019 +Apple,iPhone 11 Pro 64GB,188g,4GB,12MP / 4K,12MP + 12MP + 12MP,A13 Bionic,"3,046mAh",5.8 inches,"PKR 219,999","INR 99,900","CNY 6,999",USD 999,"AED 3,799",2019 +Apple,iPhone 11 Pro 256GB,188g,4GB,12MP / 4K,12MP + 12MP + 12MP,A13 Bionic,"3,046mAh",5.8 inches,"PKR 239,999","INR 109,900","CNY 7,399","USD 1,099","AED 4,199",2019 +Apple,iPhone 11 Pro 512GB,188g,4GB,12MP / 4K,12MP + 12MP + 12MP,A13 Bionic,"3,046mAh",5.8 inches,"PKR 259,999","INR 119,900","CNY 7,999","USD 1,199","AED 4,599",2019 +Apple,iPhone 11 Pro Max 64GB,226g,4GB,12MP / 4K,12MP + 12MP + 12MP,A13 Bionic,"3,969mAh",6.5 inches,"PKR 269,999","INR 109,900","CNY 7,799","USD 1,099","AED 4,399",2019 +Apple,iPhone 11 Pro Max 256GB,226g,4GB,12MP / 4K,12MP + 12MP + 12MP,A13 Bionic,"3,969mAh",6.5 inches,"PKR 289,999","INR 119,900","CNY 8,199","USD 1,199","AED 4,599",2019 +Apple,iPhone 11 Pro Max 512GB,226g,4GB,12MP / 4K,12MP + 12MP + 12MP,A13 Bionic,"3,969mAh",6.5 inches,"PKR 309,999","INR 129,900","CNY 8,799","USD 1,399","AED 4,999",2019 +Apple,iPhone X 64GB,174g,3GB,7MP,12MP + 12MP,A11 Bionic,"2,716mAh",5.8 inches,"PKR 164,999","INR 89,900","CNY 8,388",USD 999,"AED 3,799",2017 +Apple,iPhone X 256GB,174g,3GB,7MP,12MP + 12MP,A11 Bionic,"2,716mAh",5.8 inches,"PKR 184,999","INR 99,900","CNY 8,788","USD 1,099","AED 4,199",2017 +Apple,iPhone XS 64GB,177g,4GB,7MP,12MP + 12MP,A12 Bionic,"2,658mAh",5.8 inches,"PKR 219,999","INR 99,900","CNY 9,188",USD 999,"AED 3,899",2018 +Apple,iPhone XS 256GB,177g,4GB,7MP,12MP + 12MP,A12 Bionic,"2,658mAh",5.8 inches,"PKR 239,999","INR 109,900","CNY 9,788","USD 1,099","AED 4,299",2018 +Apple,iPhone XS 512GB,177g,4GB,7MP,12MP + 12MP,A12 Bionic,"2,658mAh",5.8 inches,"PKR 259,999","INR 119,900","CNY 10,388","USD 1,299","AED 4,799",2018 +Apple,iPhone XS Max 64GB,208g,4GB,7MP,12MP + 12MP,A12 Bionic,"3,174mAh",6.5 inches,"PKR 249,999","INR 109,900","CNY 10,088","USD 1,099","AED 4,399",2018 +Apple,iPhone XS Max 256GB,208g,4GB,7MP,12MP + 12MP,A12 Bionic,"3,174mAh",6.5 inches,"PKR 269,999","INR 119,900","CNY 10,688","USD 1,249","AED 4,799",2018 +Apple,iPhone XS Max 512GB,208g,4GB,7MP,12MP + 12MP,A12 Bionic,"3,174mAh",6.5 inches,"PKR 289,999","INR 129,900","CNY 11,288","USD 1,399","AED 5,099",2018 +Apple,iPhone XR 64GB,194g,3GB,7MP,12MP + 12MP,A12 Bionic,"2,942mAh",6.1 inches,"PKR 149,999","INR 64,900","CNY 6,299",USD 749,"AED 2,699",2018 +Apple,iPhone XR 128GB,194g,3GB,7MP,12MP + 12MP,A12 Bionic,"2,942mAh",6.1 inches,"PKR 159,999","INR 74,900","CNY 6,799",USD 799,"AED 3,099",2018 +Apple,iPhone XR 256GB,194g,3GB,7MP,12MP + 12MP,A12 Bionic,"2,942mAh",6.1 inches,"PKR 179,999","INR 84,900","CNY 7,299",USD 899,"AED 3,399",2018 +Apple,iPad Air 10.9-inch 64GB,458g,4GB,12MP,12MP,A14 Bionic,"7,608mAh",10.9 inches,"PKR 79,999","INR 54,900","CNY 3,299",USD 599,"AED 2,099",2020 +Apple,iPad Air 10.9-inch 256GB,458g,4GB,12MP,12MP,A14 Bionic,"7,608mAh",10.9 inches,"PKR 89,999","INR 64,900","CNY 3,699",USD 749,"AED 2,499",2020 +Apple,iPad 10.2-inch 32GB,490g,3GB,12MP,8MP,A13 Bionic,"8,612mAh",10.2 inches,"PKR 49,999","INR 29,900","CNY 2,299",USD 329,"AED 1,199",2020 +Apple,iPad 10.2-inch 128GB,490g,3GB,12MP,8MP,A13 Bionic,"8,612mAh",10.2 inches,"PKR 59,999","INR 39,900","CNY 2,699",USD 429,"AED 1,499",2020 +Apple,iPad Mini 7.9-inch 64GB,300.5g,3GB,7MP,8MP,A12 Bionic,"5,124mAh",7.9 inches,"PKR 69,999","INR 39,900","CNY 3,499",USD 399,"AED 1,499",2019 +Apple,iPad Mini 7.9-inch 256GB,300.5g,3GB,7MP,8MP,A12 Bionic,"5,124mAh",7.9 inches,"PKR 79,999","INR 49,900","CNY 3,799",USD 499,"AED 1,799",2019 +Apple,iPad Pro 11-inch 128GB,468g,4GB,7MP,12MP + 10MP,A12Z Bionic,"7,812mAh",11 inches,"PKR 149,999","INR 71,900","CNY 6,399",USD 799,"AED 2,799",2020 +Apple,iPad Pro 11-inch 256GB,468g,4GB,7MP,12MP + 10MP,A12Z Bionic,"7,812mAh",11 inches,"PKR 169,999","INR 89,900","CNY 7,199",USD 899,"AED 3,199",2020 +Apple,iPad Pro 11-inch 512GB,468g,6GB,7MP,12MP + 10MP,A12Z Bionic,"7,812mAh",11 inches,"PKR 189,999","INR 109,900","CNY 7,999","USD 1,099","AED 3,699",2020 +Apple,iPad Pro 12.9-inch 128GB,682g,6GB,7MP,12MP + 10MP,A12Z Bionic,"9,720mAh",12.9 inches,"PKR 219,999","INR 94,900","CNY 7,999",USD 999,"AED 3,799",2020 +Apple,iPad Pro 12.9-inch 256GB,682g,6GB,7MP,12MP + 10MP,A12Z Bionic,"9,720mAh",12.9 inches,"PKR 239,999","INR 109,900","CNY 8,699","USD 1,099","AED 4,199",2020 +Apple,iPad Pro 12.9-inch 512GB,682g,6GB,7MP,12MP + 10MP,A12Z Bionic,"9,720mAh",12.9 inches,"PKR 259,999","INR 119,900","CNY 9,199","USD 1,299","AED 4,599",2020 +Apple,iPad Pro 13-inch 128GB,708g,6GB,7MP,12MP + 10MP,A12Z Bionic,"10,307mAh",13 inches,"PKR 259,999","INR 119,900","CNY 8,699","USD 1,099","AED 4,499",2020 +Apple,iPad Pro 13-inch 256GB,708g,6GB,7MP,12MP + 10MP,A12Z Bionic,"10,307mAh",13 inches,"PKR 279,999","INR 139,900","CNY 9,199","USD 1,199","AED 4,799",2020 +Apple,iPad Pro 13-inch 512GB,708g,6GB,7MP,12MP + 10MP,A12Z Bionic,"10,307mAh",13 inches,"PKR 309,999","INR 159,900","CNY 9,799","USD 1,399","AED 5,299",2020 +Apple,iPad Pro 13-inch 1TB,708g,6GB,7MP,12MP + 10MP,A12Z Bionic,"10,307mAh",13 inches,"PKR 359,999","INR 179,900","CNY 10,399","USD 1,599","AED 5,799",2020 +Apple,iPad Pro 13-inch 2TB,708g,6GB,7MP,12MP + 10MP,A12Z Bionic,"10,307mAh",13 inches,"PKR 399,999","INR 199,900","CNY 11,199","USD 1,799","AED 6,099",2020 +Samsung,Galaxy S24 Ultra 128GB,234g,12GB,12MP,200MP + 12MP,Exynos 2400,5000mAh,6.8 inches,"PKR 450,000","INR 104,900","CNY 7,499","USD 1,199","AED 4,899",2024 +Samsung,Galaxy S24 Ultra 256GB,234g,12GB,12MP,200MP + 12MP,Exynos 2400,5000mAh,6.8 inches,"PKR 480,000","INR 114,900","CNY 7,999","USD 1,299","AED 5,099",2024 +Samsung,Galaxy S24+ 128GB,196g,8GB,12MP,50MP + 12MP,Exynos 2400,4800mAh,6.6 inches,"PKR 400,000","INR 89,900","CNY 6,199",USD 899,"AED 3,599",2024 +Samsung,Galaxy S24+ 256GB,196g,8GB,12MP,50MP + 12MP,Exynos 2400,4800mAh,6.6 inches,"PKR 430,000","INR 99,900","CNY 6,999",USD 999,"AED 3,799",2024 +Samsung,Galaxy S24 128GB,168g,8GB,12MP,50MP + 12MP,Exynos 2400,4000mAh,6.1 inches,"PKR 350,000","INR 79,900","CNY 5,799",USD 799,"AED 3,299",2024 +Samsung,Galaxy S24 256GB,168g,8GB,12MP,50MP + 12MP,Exynos 2400,4000mAh,6.1 inches,"PKR 380,000","INR 89,900","CNY 6,199",USD 899,"AED 3,499",2024 +Samsung,Galaxy S23 Ultra 128GB,228g,12GB,12MP,200MP + 12MP,Snapdragon 8 Gen 2,5000mAh,6.8 inches,"PKR 430,000","INR 99,900","CNY 7,299","USD 1,199","AED 4,599",2023 +Samsung,Galaxy S23 Ultra 256GB,228g,12GB,12MP,200MP + 12MP,Snapdragon 8 Gen 2,5000mAh,6.8 inches,"PKR 460,000","INR 109,900","CNY 7,999","USD 1,299","AED 4,899",2023 +Samsung,Galaxy S23+ 128GB,196g,8GB,12MP,50MP + 12MP,Snapdragon 8 Gen 2,4700mAh,6.6 inches,"PKR 360,000","INR 79,900","CNY 6,199",USD 899,"AED 3,399",2023 +Samsung,Galaxy S23+ 256GB,196g,8GB,12MP,50MP + 12MP,Snapdragon 8 Gen 2,4700mAh,6.6 inches,"PKR 390,000","INR 89,900","CNY 6,799",USD 999,"AED 3,599",2023 +Samsung,Galaxy S23 128GB,168g,8GB,12MP,50MP + 12MP,Snapdragon 8 Gen 2,3900mAh,6.1 inches,"PKR 320,000","INR 69,900","CNY 5,499",USD 799,"AED 3,099",2023 +Samsung,Galaxy S23 256GB,168g,8GB,12MP,50MP + 12MP,Snapdragon 8 Gen 2,3900mAh,6.1 inches,"PKR 350,000","INR 79,900","CNY 5,999",USD 899,"AED 3,299",2023 +Samsung,Galaxy S22 Ultra 128GB,228g,12GB,10MP,108MP + 12MP,Exynos 2200,5000mAh,6.8 inches,"PKR 420,000","INR 94,900","CNY 6,599","USD 1,099","AED 4,499",2022 +Samsung,Galaxy S22 Ultra 256GB,228g,12GB,10MP,108MP + 12MP,Exynos 2200,5000mAh,6.8 inches,"PKR 450,000","INR 104,900","CNY 7,199","USD 1,199","AED 4,799",2022 +Samsung,Galaxy S22+ 128GB,195g,8GB,10MP,50MP + 12MP,Exynos 2200,4500mAh,6.6 inches,"PKR 350,000","INR 79,900","CNY 5,999",USD 799,"AED 3,299",2022 +Samsung,Galaxy S22+ 256GB,195g,8GB,10MP,50MP + 12MP,Exynos 2200,4500mAh,6.6 inches,"PKR 380,000","INR 89,900","CNY 6,499",USD 899,"AED 3,599",2022 +Samsung,Galaxy S22 128GB,167g,8GB,10MP,50MP + 12MP,Exynos 2200,3800mAh,6.1 inches,"PKR 300,000","INR 69,900","CNY 5,499",USD 699,"AED 2,999",2022 +Samsung,Galaxy S22 256GB,167g,8GB,10MP,50MP + 12MP,Exynos 2200,3800mAh,6.1 inches,"PKR 330,000","INR 79,900","CNY 5,999",USD 799,"AED 3,199",2022 +Samsung,Galaxy Z Fold 5 256GB,254g,12GB,10MP,50MP + 12MP,Snapdragon 8 Gen 2,4400mAh,7.6 inches,"PKR 500,000","INR 154,900","CNY 11,999","USD 1,799","AED 6,999",2023 +Samsung,Galaxy Z Fold 5 512GB,254g,12GB,10MP,50MP + 12MP,Snapdragon 8 Gen 2,4400mAh,7.6 inches,"PKR 550,000","INR 174,900","CNY 12,999","USD 1,899","AED 7,499",2023 +Samsung,Galaxy Z Flip 5 256GB,187g,8GB,12MP,12MP + 12MP,Snapdragon 8 Gen 2,3700mAh,6.7 inches,"PKR 350,000","INR 94,900","CNY 7,999",USD 999,"AED 4,099",2023 +Samsung,Galaxy Z Flip 5 512GB,187g,8GB,12MP,12MP + 12MP,Snapdragon 8 Gen 2,3700mAh,6.7 inches,"PKR 380,000","INR 104,900","CNY 8,999","USD 1,099","AED 4,399",2023 +Samsung,Galaxy Z Fold 4 256GB,263g,12GB,10MP,50MP + 12MP,Snapdragon 8 Gen 1,4400mAh,7.6 inches,"PKR 480,000","INR 134,900","CNY 10,999","USD 1,799","AED 6,499",2022 +Samsung,Galaxy Z Fold 4 512GB,263g,12GB,10MP,50MP + 12MP,Snapdragon 8 Gen 1,4400mAh,7.6 inches,"PKR 530,000","INR 154,900","CNY 11,999","USD 1,899","AED 7,099",2022 +Samsung,Galaxy Z Flip 4 256GB,187g,8GB,10MP,12MP + 12MP,Snapdragon 8 Gen 1,3700mAh,6.7 inches,"PKR 320,000","INR 84,900","CNY 6,999",USD 999,"AED 3,799",2022 +Samsung,Galaxy Z Flip 4 512GB,187g,8GB,10MP,12MP + 12MP,Snapdragon 8 Gen 1,3700mAh,6.7 inches,"PKR 350,000","INR 94,900","CNY 7,999","USD 1,099","AED 4,099",2022 +Samsung,Galaxy A54 128GB,189g,6GB,32MP,50MP + 12MP,Exynos 1380,5000mAh,6.4 inches,"PKR 85,000","INR 27,999","CNY 2,199",USD 399,"AED 1,399",2023 +Samsung,Galaxy A54 256GB,189g,6GB,32MP,50MP + 12MP,Exynos 1380,5000mAh,6.4 inches,"PKR 95,000","INR 32,999","CNY 2,499",USD 449,"AED 1,499",2023 +Samsung,Galaxy A34 128GB,199g,6GB,13MP,48MP + 8MP,MediaTek Dimensity 1080,5000mAh,6.6 inches,"PKR 75,000","INR 22,999","CNY 1,799",USD 349,"AED 1,299",2023 +Samsung,Galaxy A34 256GB,199g,6GB,13MP,48MP + 8MP,MediaTek Dimensity 1080,5000mAh,6.6 inches,"PKR 85,000","INR 27,999","CNY 1,999",USD 399,"AED 1,399",2023 +Samsung,Galaxy A24 128GB,195g,6GB,13MP,50MP + 5MP,MediaTek Helio G99,5000mAh,6.5 inches,"PKR 70,000","INR 19,999","CNY 1,599",USD 299,"AED 1,199",2023 +Samsung,Galaxy A24 256GB,195g,6GB,13MP,50MP + 5MP,MediaTek Helio G99,5000mAh,6.5 inches,"PKR 80,000","INR 24,999","CNY 1,799",USD 349,"AED 1,299",2023 +Samsung,Galaxy A14 128GB,190g,4GB,13MP,50MP + 2MP,Exynos 850,5000mAh,6.6 inches,"PKR 60,000","INR 18,499","CNY 1,499",USD 249,"AED 1,099",2023 +Samsung,Galaxy A14 256GB,190g,4GB,13MP,50MP + 2MP,Exynos 850,5000mAh,6.6 inches,"PKR 70,000","INR 21,999","CNY 1,699",USD 299,"AED 1,199",2023 +Samsung,Galaxy A04 64GB,188g,4GB,5MP,50MP + 2MP,Exynos 850,5000mAh,6.5 inches,"PKR 50,000","INR 14,999","CNY 1,199",USD 199,AED 899,2022 +Samsung,Galaxy A04 128GB,188g,4GB,5MP,50MP + 2MP,Exynos 850,5000mAh,6.5 inches,"PKR 60,000","INR 18,499","CNY 1,399",USD 249,AED 999,2022 +Samsung,Galaxy M54 128GB,202g,8GB,32MP,108MP + 8MP,Exynos 1380,6000mAh,6.7 inches,"PKR 95,000","INR 23,999","CNY 2,099",USD 349,"AED 1,299",2023 +Samsung,Galaxy M54 256GB,202g,8GB,32MP,108MP + 8MP,Exynos 1380,6000mAh,6.7 inches,"PKR 105,000","INR 26,999","CNY 2,299",USD 399,"AED 1,399",2023 +Samsung,Galaxy M34 128GB,199g,6GB,13MP,50MP + 8MP,Exynos 1280,6000mAh,6.5 inches,"PKR 70,000","INR 17,999","CNY 1,699",USD 299,"AED 1,099",2023 +Samsung,Galaxy M34 256GB,199g,6GB,13MP,50MP + 8MP,Exynos 1280,6000mAh,6.5 inches,"PKR 80,000","INR 20,999","CNY 1,999",USD 349,"AED 1,199",2023 +Samsung,Galaxy M14 128GB,202g,4GB,13MP,50MP + 2MP,Exynos 850,6000mAh,6.6 inches,"PKR 60,000","INR 14,999","CNY 1,399",USD 249,AED 999,2023 +Samsung,Galaxy M14 256GB,202g,4GB,13MP,50MP + 2MP,Exynos 850,6000mAh,6.6 inches,"PKR 70,000","INR 17,999","CNY 1,599",USD 299,"AED 1,099",2023 +Samsung,Galaxy M04 64GB,188g,4GB,5MP,13MP + 2MP,MediaTek Helio P35,5000mAh,6.5 inches,"PKR 50,000","INR 12,999","CNY 1,099",USD 199,AED 899,2022 +Samsung,Galaxy M04 128GB,188g,4GB,5MP,13MP + 2MP,MediaTek Helio P35,5000mAh,6.5 inches,"PKR 60,000","INR 15,999","CNY 1,299",USD 249,AED 999,2022 +Samsung,Galaxy F54 128GB,199g,8GB,32MP,108MP + 8MP,Exynos 1380,6000mAh,6.7 inches,"PKR 85,000","INR 23,999","CNY 2,199",USD 349,"AED 1,299",2023 +Samsung,Galaxy F54 256GB,199g,8GB,32MP,108MP + 8MP,Exynos 1380,6000mAh,6.7 inches,"PKR 95,000","INR 26,999","CNY 2,399",USD 399,"AED 1,399",2023 +Samsung,Galaxy F34 128GB,190g,6GB,13MP,50MP + 8MP,Exynos 1280,6000mAh,6.5 inches,"PKR 70,000","INR 18,999","CNY 1,799",USD 299,"AED 1,099",2023 +Samsung,Galaxy F34 256GB,190g,6GB,13MP,50MP + 8MP,Exynos 1280,6000mAh,6.5 inches,"PKR 80,000","INR 21,999","CNY 1,999",USD 349,"AED 1,199",2023 +Samsung,Galaxy F14 128GB,198g,4GB,13MP,50MP + 2MP,Exynos 850,6000mAh,6.6 inches,"PKR 60,000","INR 14,999","CNY 1,399",USD 249,AED 999,2023 +Samsung,Galaxy F14 256GB,198g,4GB,13MP,50MP + 2MP,Exynos 850,6000mAh,6.6 inches,"PKR 70,000","INR 17,999","CNY 1,599",USD 299,"AED 1,099",2023 +Samsung,Galaxy Note 20 Ultra 128GB,208g,12GB,10MP,108MP + 12MP,Exynos 990,4500mAh,6.9 inches,"PKR 180,000","INR 99,999","CNY 7,999","USD 1,299","AED 4,499",2020 +Samsung,Galaxy Note 20 Ultra 256GB,208g,12GB,10MP,108MP + 12MP,Exynos 990,4500mAh,6.9 inches,"PKR 200,000","INR 1,04,999","CNY 8,499","USD 1,399","AED 4,999",2020 +Samsung,Galaxy Note 20 128GB,192g,8GB,10MP,108MP + 12MP,Exynos 990,4300mAh,6.7 inches,"PKR 150,000","INR 77,999","CNY 6,499",USD 999,"AED 3,999",2020 +Samsung,Galaxy Note 20 256GB,192g,8GB,10MP,108MP + 12MP,Exynos 990,4300mAh,6.7 inches,"PKR 170,000","INR 89,999","CNY 7,099","USD 1,099","AED 4,199",2020 +Samsung,Galaxy Note 10+ 256GB,196g,12GB,10MP,12MP + 16MP,Exynos 9825,4300mAh,6.8 inches,"PKR 160,000","INR 74,999","CNY 6,299","USD 1,099","AED 3,899",2019 +Samsung,Galaxy Note 10+ 512GB,196g,12GB,10MP,12MP + 16MP,Exynos 9825,4300mAh,6.8 inches,"PKR 180,000","INR 84,999","CNY 6,999","USD 1,199","AED 4,199",2019 +Samsung,Galaxy Note 10 256GB,168g,8GB,10MP,12MP + 16MP,Exynos 9825,3500mAh,6.3 inches,"PKR 140,000","INR 64,999","CNY 5,699",USD 949,"AED 3,699",2019 +Samsung,Galaxy Note 10 128GB,168g,8GB,10MP,12MP + 16MP,Exynos 9825,3500mAh,6.3 inches,"PKR 120,000","INR 59,999","CNY 5,199",USD 899,"AED 3,399",2019 +Samsung,Galaxy Xcover 6 Pro 128GB,235g,6GB,13MP,50MP,Exynos 1380,4050mAh,6.6 inches,"PKR 75,000","INR 28,999","CNY 2,299",USD 499,"AED 1,699",2022 +Samsung,Galaxy Xcover 5 64GB,172g,4GB,5MP,16MP,Exynos 850,3000mAh,5.3 inches,"PKR 50,000","INR 17,499","CNY 1,299",USD 249,AED 899,2020 +Samsung,Galaxy J8 64GB,191g,4GB,16MP,16MP + 5MP,Snapdragon 450,3500mAh,6.0 inches,"PKR 45,000","INR 18,990","CNY 1,699",USD 199,AED 799,2018 +Samsung,Galaxy J7 Pro 64GB,181g,3GB,13MP,13MP,Exynos 7870,3600mAh,5.5 inches,"PKR 40,000","INR 18,990","CNY 1,599",USD 179,AED 699,2017 +Samsung,Galaxy J6+ 64GB,178g,4GB,8MP,13MP + 5MP,Snapdragon 425,3300mAh,6.0 inches,"PKR 40,000","INR 15,999","CNY 1,499",USD 169,AED 699,2018 +Samsung,Galaxy J4 16GB,175g,2GB,5MP,13MP,Exynos 7570,3000mAh,5.5 inches,"PKR 25,000","INR 9,990",CNY 999,USD 129,AED 499,2018 +Samsung,Galaxy C9 Pro 64GB,189g,6GB,16MP,16MP + 8MP,Snapdragon 653,4000mAh,6.0 inches,"PKR 65,000","INR 32,990","CNY 3,099",USD 399,"AED 1,299",2016 +Samsung,Galaxy C7 Pro 64GB,165g,4GB,16MP,16MP,Snapdragon 625,3300mAh,5.7 inches,"PKR 50,000","INR 22,990","CNY 2,499",USD 299,AED 999,2017 +Samsung,Galaxy C5 32GB,143g,4GB,8MP,16MP,Snapdragon 617,2600mAh,5.2 inches,"PKR 40,000","INR 19,990","CNY 1,899",USD 249,AED 799,2016 +Samsung,Galaxy W22 5G 256GB,228g,12GB,10MP,108MP + 12MP,Snapdragon 888,4500mAh,7.6 inches,"PKR 280,000","INR 99,999","CNY 10,999","USD 1,499","AED 5,499",2021 +Samsung,Galaxy W21 5G 256GB,229g,12GB,10MP,108MP + 12MP,Snapdragon 888,4500mAh,7.6 inches,"PKR 260,000","INR 89,999","CNY 9,999","USD 1,399","AED 4,999",2020 +Samsung,Galaxy Tab S9 Ultra 256GB,732g,12GB,12MP + 12MP,13MP + 8MP,Snapdragon 8 Gen 2,11200mAh,14.6 inches,"PKR 350,000","INR 1,14,999","CNY 9,999","USD 1,199","AED 4,499",2023 +Samsung,Galaxy Tab S9+ 256GB,586g,12GB,12MP,13MP + 8MP,Snapdragon 8 Gen 2,10090mAh,12.4 inches,"PKR 280,000","INR 99,999","CNY 8,799",USD 999,"AED 3,999",2023 +Samsung,Galaxy Tab S9 128GB,498g,8GB,12MP,13MP,Snapdragon 8 Gen 2,8400mAh,11 inches,"PKR 230,000","INR 85,999","CNY 7,299",USD 799,"AED 3,299",2023 +Samsung,Galaxy Tab S9 FE 128GB,523g,6GB,12MP,8MP,Exynos 1380,8000mAh,10.9 inches,"PKR 150,000","INR 49,999","CNY 5,499",USD 549,"AED 1,999",2023 +Samsung,Galaxy Tab S8 Ultra 256GB,726g,12GB,12MP + 12MP,13MP + 6MP,Snapdragon 8 Gen 1,11200mAh,14.6 inches,"PKR 320,000","INR 1,09,999","CNY 9,499","USD 1,099","AED 4,299",2022 +Samsung,Galaxy Tab S8+ 256GB,567g,8GB,12MP,13MP + 6MP,Snapdragon 8 Gen 1,10090mAh,12.4 inches,"PKR 250,000","INR 94,999","CNY 8,299",USD 899,"AED 3,699",2022 +Samsung,Galaxy Tab S8 128GB,503g,8GB,12MP,13MP + 6MP,Snapdragon 8 Gen 1,8000mAh,11 inches,"PKR 200,000","INR 74,999","CNY 6,999",USD 699,"AED 2,999",2022 +Samsung,Galaxy Tab A9+ 128GB,480g,8GB,5MP,8MP,Snapdragon 695,7040mAh,11 inches,"PKR 100,000","INR 22,999","CNY 1,799",USD 229,AED 899,2023 +Samsung,Galaxy Tab A9 64GB,366g,4GB,2MP,8MP,MediaTek Helio G99,5100mAh,8.7 inches,"PKR 75,000","INR 16,999","CNY 1,299",USD 179,AED 699,2023 +Samsung,Galaxy Tab A8 64GB,508g,4GB,5MP,8MP,Unisoc T618,7040mAh,10.5 inches,"PKR 68,000","INR 17,999","CNY 1,499",USD 199,AED 799,2022 +Samsung,Galaxy Tab A7 Lite 32GB,366g,3GB,2MP,8MP,MediaTek Helio P22T,5100mAh,8.7 inches,"PKR 40,000","INR 11,999",CNY 999,USD 149,AED 599,2021 +Samsung,Galaxy Tab Active 5 128GB,433g,6GB,5MP,13MP,Exynos 1380,5050mAh,8 inches,"PKR 150,000","INR 54,999","CNY 3,699",USD 549,"AED 2,199",2024 +Samsung,Galaxy Tab Active 4 Pro 128GB,674g,6GB,8MP,13MP,Snapdragon 778G,7600mAh,10.1 inches,"PKR 180,000","INR 64,999","CNY 4,299",USD 649,"AED 2,599",2022 +Samsung,Galaxy Tab Active 3 64GB,426g,4GB,5MP,13MP,Exynos 9810,5050mAh,8 inches,"PKR 120,000","INR 44,999","CNY 2,999",USD 499,"AED 1,899",2020 +Samsung,Galaxy Tab E 10.1 16GB,490g,1.5GB,2MP,5MP,Spreadtrum SC8830,5000mAh,10.1 inches,"PKR 35,000","INR 9,999",CNY 899,USD 129,AED 499,2016 +Samsung,Galaxy Tab E 8.0 16GB,360g,1.5GB,2MP,5MP,Qualcomm MSM8916,5000mAh,8 inches,"PKR 28,000","INR 8,499",CNY 799,USD 99,AED 399,2016 +OnePlus,OnePlus 12 256GB,205g,12GB,32MP,50MP + 48MP,Snapdragon 8 Gen 3,5000mAh,6.7 inches,"PKR 219,999","INR 74,999","CNY 5,999",USD 799,"AED 3,199",2024 +OnePlus,OnePlus 12R 256GB,203g,12GB,16MP,50MP + 8MP,Snapdragon 8 Gen 2,4500mAh,6.7 inches,"PKR 169,999","INR 49,999","CNY 4,299",USD 699,"AED 2,599",2024 +OnePlus,OnePlus 11 256GB,205g,12GB,16MP,50MP + 48MP,Snapdragon 8 Gen 1,5000mAh,6.7 inches,"PKR 179,999","INR 54,999","CNY 4,999",USD 699,"AED 2,799",2023 +OnePlus,OnePlus 11R 256GB,202g,12GB,16MP,50MP + 8MP,Snapdragon 8 Gen 1,5000mAh,6.7 inches,"PKR 159,999","INR 44,999","CNY 3,799",USD 599,"AED 2,499",2023 +OnePlus,OnePlus Nord 3 256GB,190g,12GB,16MP,50MP + 8MP,MediaTek Dimensity 9000,5000mAh,6.74 inches,"PKR 119,999","INR 34,999","CNY 3,499",USD 499,"AED 1,999",2023 +OnePlus,OnePlus Nord CE 3 128GB,179g,8GB,16MP,50MP + 2MP,Snapdragon 782G,5000mAh,6.72 inches,"PKR 85,000","INR 22,999","CNY 2,799",USD 399,"AED 1,499",2023 +OnePlus,OnePlus Nord CE 3 Lite 128GB,195g,8GB,16MP,108MP,Snapdragon 695,5000mAh,6.72 inches,"PKR 59,999","INR 17,999","CNY 2,099",USD 299,"AED 1,199",2023 +OnePlus,OnePlus Nord N30 5G 128GB,192g,8GB,16MP,64MP + 2MP,MediaTek Dimensity 6020,5000mAh,6.72 inches,"PKR 55,000","INR 16,999","CNY 1,999",USD 249,AED 999,2023 +OnePlus,OnePlus Open 256GB,238g,16GB,32MP,48MP + 48MP,Snapdragon 8 Gen 2,4800mAh,7.8 inches,"PKR 299,999","INR 74,999","CNY 6,999","USD 1,099","AED 4,299",2024 +OnePlus,OnePlus 10 Pro 256GB,200g,12GB,32MP,50MP + 48MP,Snapdragon 8 Gen 1,5000mAh,6.7 inches,"PKR 199,999","INR 64,999","CNY 4,999",USD 899,"AED 3,299",2022 +OnePlus,OnePlus 10T 256GB,203g,12GB,16MP,50MP + 8MP,Snapdragon 8+ Gen 1,4500mAh,6.7 inches,"PKR 179,999","INR 54,999","CNY 4,699",USD 749,"AED 2,899",2022 +OnePlus,OnePlus 9 Pro 256GB,192g,12GB,16MP,48MP + 50MP,Snapdragon 888,4500mAh,6.7 inches,"PKR 179,999","INR 59,999","CNY 4,199",USD 699,"AED 2,799",2021 +OnePlus,OnePlus 9 128GB,183g,8GB,16MP,48MP + 50MP,Snapdragon 888,4500mAh,6.55 inches,"PKR 149,999","INR 39,999","CNY 3,699",USD 599,"AED 2,299",2021 +OnePlus,OnePlus 11 Pro 256GB,204g,16GB,32MP,50MP + 48MP,Snapdragon 8 Gen 2,5000mAh,6.7 inches,"PKR 219,999","INR 74,999","CNY 6,399",USD 899,"AED 3,599",2023 +OnePlus,OnePlus Nord 2T 128GB,190g,8GB,32MP,50MP + 8MP,MediaTek Dimensity 1300,4500mAh,6.43 inches,"PKR 69,999","INR 28,999","CNY 2,499",USD 399,"AED 1,699",2022 +OnePlus,OnePlus Nord 2 128GB,190g,8GB,32MP,50MP + 8MP,MediaTek Dimensity 1200-AI,4500mAh,6.43 inches,"PKR 59,999","INR 27,999","CNY 2,299",USD 349,"AED 1,499",2021 +OnePlus,OnePlus Nord N200 64GB,189g,4GB,16MP,13MP + 2MP,Snapdragon 480,5000mAh,6.49 inches,"PKR 39,999","INR 15,999","CNY 1,199",USD 199,AED 799,2021 +OnePlus,OnePlus Nord N100 64GB,185g,4GB,8MP,13MP + 2MP,Qualcomm Snapdragon 460,5000mAh,6.52 inches,"PKR 29,999","INR 12,999","CNY 1,099",USD 179,AED 699,2020 +OnePlus,OnePlus 8T Cyberpunk 2077 Edition 256GB,188g,12GB,16MP,48MP + 16MP,Snapdragon 865,4500mAh,6.55 inches,"PKR 139,999","INR 45,999","CNY 3,699",USD 749,"AED 2,999",2020 +OnePlus,OnePlus 9T 128GB,192g,8GB,16MP,48MP + 50MP,Snapdragon 888,4500mAh,6.55 inches,"PKR 159,999","INR 49,999","CNY 4,199",USD 649,"AED 2,799",2021 +OnePlus,OnePlus 8T 256GB,188g,12GB,16MP,48MP + 16MP,Snapdragon 865,4500mAh,6.55 inches,"PKR 119,999","INR 42,999","CNY 3,499",USD 599,"AED 2,499",2020 +OnePlus,OnePlus 10T 5G 256GB,203g,12GB,16MP,50MP + 8MP,Snapdragon 8+ Gen 1,4500mAh,6.7 inches,"PKR 179,999","INR 54,999","CNY 4,699",USD 749,"AED 2,899",2022 +OnePlus,OnePlus 9R 5G 128GB,189g,8GB,16MP,48MP + 5MP,Snapdragon 870,4500mAh,6.55 inches,"PKR 159,999","INR 39,999","CNY 3,499",USD 599,"AED 2,499",2021 +OnePlus,OnePlus 8 Pro 256GB,199g,12GB,16MP,48MP + 48MP,Snapdragon 865,4510mAh,6.78 inches,"PKR 159,999","INR 54,999","CNY 4,999",USD 749,"AED 2,999",2020 +OnePlus,OnePlus 8 128GB,180g,8GB,16MP,48MP + 16MP,Snapdragon 865,4300mAh,6.55 inches,"PKR 119,999","INR 41,999","CNY 3,499",USD 699,"AED 2,499",2020 +OnePlus,OnePlus Nord CE 2 Lite 128GB,195g,6GB,16MP,64MP + 2MP,MediaTek Dimensity 900,5000mAh,6.59 inches,"PKR 49,999","INR 19,999","CNY 1,799",USD 249,AED 999,2022 +OnePlus,OnePlus Nord CE 2 128GB,173g,8GB,16MP,64MP + 8MP,MediaTek Dimensity 1200,4500mAh,6.43 inches,"PKR 64,999","INR 23,999","CNY 2,499",USD 299,"AED 1,299",2022 +OnePlus,OnePlus Nord 1 128GB,184g,6GB,16MP,48MP + 5MP,Snapdragon 765G,4115mAh,6.44 inches,"PKR 49,999","INR 22,999","CNY 2,099",USD 349,"AED 1,499",2020 +OnePlus,OnePlus Nord CE 5G 128GB,170g,6GB,16MP,64MP + 8MP,Snapdragon 750G,4500mAh,6.43 inches,"PKR 54,999","INR 24,999","CNY 2,499",USD 299,"AED 1,499",2021 +OnePlus,OnePlus Nord 2 5G 128GB,189g,8GB,32MP,50MP + 8MP,MediaTek Dimensity 1200-AI,4500mAh,6.43 inches,"PKR 69,999","INR 27,999","CNY 2,499",USD 399,"AED 1,699",2021 +OnePlus,OnePlus Nord N100 5G 64GB,185g,4GB,8MP,13MP + 2MP,Qualcomm Snapdragon 460,5000mAh,6.52 inches,"PKR 29,999","INR 12,999","CNY 1,099",USD 179,AED 699,2020 +OnePlus,OnePlus Nord N10 5G 128GB,190g,6GB,16MP,64MP + 8MP,Qualcomm Snapdragon 690,4300mAh,6.49 inches,"PKR 49,999","INR 19,999","CNY 1,799",USD 299,"AED 1,099",2020 +OnePlus,OnePlus 8R 128GB,192g,8GB,16MP,48MP + 5MP,Snapdragon 865,4300mAh,6.55 inches,"PKR 119,999","INR 41,999","CNY 3,499",USD 649,"AED 2,499",2020 +OnePlus,OnePlus 7R 128GB,190g,6GB,16MP,48MP + 5MP,Snapdragon 855,3700mAh,6.41 inches,"PKR 109,999","INR 38,999","CNY 3,199",USD 599,"AED 2,399",2020 +OnePlus,OnePlus 6T McLaren Edition 256GB,185g,10GB,16MP,20MP + 16MP,Snapdragon 845,3700mAh,6.41 inches,"PKR 149,999","INR 50,999","CNY 4,699",USD 799,"AED 3,299",2018 +OnePlus,OnePlus 5T Star Wars Edition 128GB,162g,6GB,16MP,16MP + 20MP,Snapdragon 835,3300mAh,6.01 inches,"PKR 89,999","INR 34,999","CNY 3,499",USD 649,"AED 2,499",2017 +OnePlus,OnePlus 13R 128GB,210g,8GB,16MP,50MP + 8MP,Snapdragon 8 Gen 2,4500mAh,6.7 inches,"PKR 219,999","INR 74,999","CNY 6,499",USD 849,"AED 3,599",2023 +OnePlus,OnePlus 11T 128GB,202g,12GB,32MP,50MP + 48MP,Snapdragon 8 Gen 2,5000mAh,6.7 inches,"PKR 199,999","INR 74,999","CNY 5,999",USD 799,"AED 3,499",2023 +OnePlus,OnePlus 10R 128GB,205g,8GB,16MP,50MP + 16MP,MediaTek Dimensity 8100,4500mAh,6.7 inches,"PKR 169,999","INR 49,999","CNY 3,899",USD 599,"AED 2,499",2022 +OnePlus,OnePlus 7 Pro 5G 256GB,206g,12GB,16MP,48MP + 8MP,Snapdragon 855,4000mAh,6.67 inches,"PKR 169,999","INR 59,999","CNY 4,699",USD 799,"AED 3,299",2019 +OnePlus,OnePlus 6 Special Edition 128GB,177g,6GB,16MP,20MP + 16MP,Snapdragon 845,3300mAh,6.28 inches,"PKR 99,999","INR 37,999","CNY 3,499",USD 599,"AED 2,499",2018 +OnePlus,OnePlus 5 Special Edition 128GB,155g,8GB,16MP,20MP + 16MP,Snapdragon 835,3300mAh,5.5 inches,"PKR 94,999","INR 36,999","CNY 3,299",USD 599,"AED 2,399",2017 +OnePlus,OnePlus Nord X 128GB,190g,8GB,32MP,64MP + 8MP,Snapdragon 765G,4000mAh,6.44 inches,"PKR 69,999","INR 24,999","CNY 2,499",USD 299,"AED 1,299",2020 +OnePlus,OnePlus 8 Pro McLaren Edition 256GB,199g,12GB,16MP,48MP + 8MP,Snapdragon 865,4510mAh,6.78 inches,"PKR 169,999","INR 59,999","CNY 4,999",USD 899,"AED 3,599",2020 +OnePlus,OnePlus 8T Cyberpunk Edition 256GB,188g,12GB,16MP,48MP + 16MP,Snapdragon 865,4500mAh,6.55 inches,"PKR 169,999","INR 58,999","CNY 4,699",USD 799,"AED 3,299",2020 +OnePlus,OnePlus 7T Pro 5G McLaren Edition 256GB,206g,12GB,16MP,48MP + 8MP,Snapdragon 855,4085mAh,6.67 inches,"PKR 179,999","INR 69,999","CNY 5,299",USD 899,"AED 3,799",2019 +OnePlus,OnePlus 15R 128GB,210g,12GB,32MP,50MP + 8MP,Snapdragon 8 Gen 3,5000mAh,6.7 inches,"PKR 229,999","INR 74,999","CNY 6,499",USD 849,"AED 3,699",2023 +OnePlus,OnePlus 14+ 128GB,202g,8GB,16MP,64MP + 8MP,Snapdragon 8 Gen 2,4800mAh,6.55 inches,"PKR 199,999","INR 69,999","CNY 5,999",USD 799,"AED 3,499",2023 +OnePlus,OnePlus 13 Pro 256GB,215g,12GB,32MP,50MP + 48MP,Snapdragon 8 Gen 2,5000mAh,6.7 inches,"PKR 219,999","INR 74,999","CNY 6,199",USD 899,"AED 3,799",2023 +OnePlus,OnePlus 12T 5G 256GB,200g,12GB,16MP,50MP + 8MP,Snapdragon 8 Gen 2,5000mAh,6.7 inches,"PKR 219,999","INR 74,999","CNY 5,899",USD 849,"AED 3,599",2023 +OnePlus,OnePlus Pad,550g,8GB,8MP,13MP,MediaTek Dimensity 9000,9510mAh,11.61 inches,"PKR 94,999","INR 39,999","CNY 3,999",USD 499,"AED 1,799",2023 +OnePlus,OnePlus Pad 2,550g,8GB,8MP,13MP,MediaTek Dimensity 9000,9510mAh,11.61 inches,"PKR 104,999","INR 44,999","CNY 4,499",USD 549,"AED 1,999",2024 +OnePlus,OnePlus Pad Pro,610g,12GB,16MP,50MP,Snapdragon 8 Gen 3,11000mAh,12.4 inches,"PKR 169,999","INR 69,999","CNY 5,999",USD 799,"AED 2,599",2024 +Vivo,X200 128GB,223g,12GB,32MP,50MP,Dimensity 9400,6000mAh,6.78 inches,"PKR 199,999","INR 119,999","CNY 6,999",USD 999,"AED 3,699",2024 +Vivo,X200 256GB,223g,12GB,32MP,50MP,Dimensity 9400,6000mAh,6.78 inches,"PKR 219,999","INR 129,999","CNY 7,499","USD 1,099","AED 3,999",2024 +Vivo,X200 Pro 256GB,223g,16GB,32MP,200MP,Dimensity 9400,6000mAh,6.78 inches,"PKR 229,999","INR 139,999","CNY 7,999","USD 1,199","AED 4,399",2024 +Vivo,X200 Pro 512GB,223g,16GB,32MP,200MP,Dimensity 9400,6000mAh,6.78 inches,"PKR 249,999","INR 149,999","CNY 8,499","USD 1,299","AED 4,699",2024 +Vivo,X200 Pro Mini 256GB,187g,16GB,32MP,50MP,Dimensity 9400,5700mAh,6.31 inches,"PKR 189,999","INR 109,999","CNY 6,499",USD 949,"AED 3,499",2024 +Vivo,V40e 128GB,179g,8GB,44MP,64MP,Snapdragon 778G,4100mAh,6.44 inches,"PKR 79,999","INR 44,999","CNY 2,999",USD 449,"AED 1,649",2024 +Vivo,Y200 GT 128GB,190g,12GB,16MP,64MP,Dimensity 1200,5000mAh,6.58 inches,"PKR 69,999","INR 39,999","CNY 2,499",USD 399,"AED 1,499",2024 +Vivo,T3 5G 128GB,180g,8GB,16MP,50MP,Snapdragon 870,5000mAh,6.67 inches,"PKR 59,999","INR 34,999","CNY 2,299",USD 349,"AED 1,299",2024 +Vivo,Y100 5G 128GB,181g,8GB,16MP,64MP,Dimensity 900,4500mAh,6.38 inches,"PKR 54,999","INR 29,999","CNY 1,999",USD 299,"AED 1,099",2024 +Vivo,S18 Pro 256GB,189g,12GB,32MP,108MP,Snapdragon 8 Gen 2,4700mAh,6.56 inches,"PKR 99,999","INR 59,999","CNY 3,999",USD 599,"AED 2,199",2024 +Vivo,V30 Pro 128GB,192g,12GB,32MP,64MP,Dimensity 1100,4500mAh,6.44 inches,"PKR 89,999","INR 49,999","CNY 3,499",USD 549,"AED 1,999",2024 +Vivo,iQOO 12 256GB,210g,16GB,16MP,50MP,Snapdragon 8 Gen 3,5000mAh,6.78 inches,"PKR 109,999","INR 64,999","CNY 4,499",USD 699,"AED 2,599",2024 +Vivo,Z3 64GB,162g,6GB,12MP,16MP,Snapdragon 710,3315mAh,6.3 inches,"PKR 39,999","INR 22,999","CNY 1,699",USD 249,AED 899,2018 +Vivo,V9 64GB,150g,4GB,24MP,16MP,Snapdragon 626,3260mAh,6.3 inches,"PKR 34,999","INR 19,999","CNY 1,499",USD 219,AED 799,2018 +Vivo,X9 Plus 128GB,199g,6GB,20MP+8MP,16MP,Snapdragon 653,4000mAh,5.88 inches,"PKR 42,999","INR 24,999","CNY 2,199",USD 299,"AED 1,099",2017 +Vivo,Y81 32GB,146g,3GB,5MP,13MP,MediaTek Helio P22,3260mAh,6.22 inches,"PKR 22,999","INR 12,999",CNY 999,USD 149,AED 549,2018 +Vivo,X5Max 16GB,146g,2GB,5MP,13MP,Snapdragon 615,2300mAh,5.5 inches,"PKR 29,999","INR 16,999","CNY 1,299",USD 199,AED 699,2014 +Vivo,V5 Plus 64GB,158g,4GB,20MP+8MP,16MP,Snapdragon 625,3055mAh,5.5 inches,"PKR 39,999","INR 22,999","CNY 1,699",USD 249,AED 899,2017 +Vivo,Y95 64GB,163g,4GB,20MP,13MP+2MP,Snapdragon 439,4030mAh,6.22 inches,"PKR 29,999","INR 16,999","CNY 1,299",USD 199,AED 699,2018 +Vivo,V3 Max 32GB,168g,4GB,8MP,13MP,Snapdragon 652,3000mAh,5.5 inches,"PKR 24,999","INR 13,999","CNY 1,199",USD 179,AED 649,2016 +Vivo,X3S 16GB,153g,1GB,5MP,13MP,MediaTek MT6592,2000mAh,5.0 inches,"PKR 19,999","INR 10,999",CNY 899,USD 139,AED 499,2014 +Vivo,Y66 32GB,155g,3GB,16MP,13MP,Snapdragon 430,3000mAh,5.5 inches,"PKR 27,999","INR 14,999","CNY 1,199",USD 179,AED 649,2017 +Vivo,V19 128GB,176g,8GB,32MP,48MP,Qualcomm Snapdragon 712,4500mAh,6.44 inches,"PKR 49,999","INR 27,990","CNY 2,799",USD 399,"AED 1,499",2020 +Vivo,V19 256GB,176g,8GB,32MP,48MP,Qualcomm Snapdragon 712,4500mAh,6.44 inches,"PKR 54,999","INR 31,990","CNY 3,199",USD 429,"AED 1,599",2020 +Vivo,V17 Pro 128GB,201g,8GB,32MP,48MP,Qualcomm Snapdragon 675,4100mAh,6.44 inches,"PKR 54,999","INR 27,990","CNY 2,999",USD 399,"AED 1,499",2019 +Vivo,V17 Pro 256GB,201g,8GB,32MP,48MP,Qualcomm Snapdragon 675,4100mAh,6.44 inches,"PKR 59,999","INR 33,990","CNY 3,199",USD 429,"AED 1,599",2019 +Vivo,Y12s 64GB,191g,3GB,8MP,13MP,MediaTek Helio P35,5000mAh,6.51 inches,"PKR 18,999","INR 10,990",CNY 899,USD 159,AED 599,2020 +Vivo,Y12s 128GB,191g,4GB,8MP,13MP,MediaTek Helio P35,5000mAh,6.51 inches,"PKR 22,999","INR 13,990","CNY 1,099",USD 179,AED 699,2020 +Vivo,S1 Pro 128GB,185g,6GB,32MP,48MP,MediaTek Helio P65,4500mAh,6.38 inches,"PKR 39,999","INR 19,990","CNY 2,299",USD 249,AED 999,2019 +Vivo,S1 Pro 256GB,185g,6GB,32MP,48MP,MediaTek Helio P65,4500mAh,6.38 inches,"PKR 44,999","INR 24,990","CNY 2,499",USD 269,"AED 1,099",2019 +Vivo,Y11 32GB,190g,3GB,8MP,13MP,Qualcomm Snapdragon 439,5000mAh,6.35 inches,"PKR 18,499","INR 10,999",CNY 899,USD 149,AED 599,2019 +Vivo,Y11 64GB,190g,3GB,8MP,13MP,Qualcomm Snapdragon 439,5000mAh,6.35 inches,"PKR 22,499","INR 13,490","CNY 1,099",USD 169,AED 649,2019 +Vivo,V15 128GB,190g,6GB,32MP,48MP,MediaTek Helio P70,4000mAh,6.53 inches,"PKR 34,999","INR 22,990","CNY 2,199",USD 299,"AED 1,099",2019 +Vivo,V15 256GB,190g,6GB,32MP,48MP,MediaTek Helio P70,4000mAh,6.53 inches,"PKR 39,999","INR 26,990","CNY 2,399",USD 319,"AED 1,199",2019 +Vivo,X27 Pro 128GB,190g,8GB,32MP,48MP,Qualcomm Snapdragon 710,4000mAh,6.39 inches,"PKR 59,999","INR 35,990","CNY 3,499",USD 499,"AED 1,799",2019 +Vivo,X27 Pro 256GB,190g,8GB,32MP,48MP,Qualcomm Snapdragon 710,4000mAh,6.39 inches,"PKR 64,999","INR 39,990","CNY 3,799",USD 549,"AED 1,999",2019 +Vivo,Y30 128GB,193g,4GB,8MP,13MP,MediaTek Helio P35,5000mAh,6.47 inches,"PKR 24,999","INR 14,990","CNY 1,499",USD 199,AED 749,2020 +Vivo,Y30 64GB,193g,3GB,8MP,13MP,MediaTek Helio P35,5000mAh,6.47 inches,"PKR 19,999","INR 11,990","CNY 1,299",USD 169,AED 649,2020 +Vivo,Z1 Pro 64GB,159g,4GB,16MP,16MP,Qualcomm Snapdragon 712,4500mAh,6.53 inches,"PKR 29,999","INR 18,990","CNY 1,799",USD 249,AED 899,2019 +Vivo,Z1 Pro 128GB,159g,6GB,16MP,16MP,Qualcomm Snapdragon 712,4500mAh,6.53 inches,"PKR 34,999","INR 22,990","CNY 2,099",USD 299,AED 999,2019 +Vivo,X21 128GB,156g,6GB,12MP,12MP,Qualcomm Snapdragon 660,3200mAh,6.28 inches,"PKR 39,999","INR 24,990","CNY 2,299",USD 349,"AED 1,199",2018 +Vivo,X21 64GB,156g,4GB,12MP,12MP,Qualcomm Snapdragon 660,3200mAh,6.28 inches,"PKR 34,999","INR 21,990","CNY 1,899",USD 299,AED 999,2018 +Vivo,V23e 128GB,172g,8GB,50MP,64MP,MediaTek Helio G96,4050mAh,6.44 inches,"PKR 39,999","INR 20,999","CNY 1,799",USD 299,"AED 1,099",2021 +Vivo,V23e 256GB,172g,8GB,50MP,64MP,MediaTek Helio G96,4050mAh,6.44 inches,"PKR 44,999","INR 24,999","CNY 1,999",USD 349,"AED 1,199",2021 +Vivo,Y33s 128GB,182g,8GB,16MP,50MP,MediaTek Helio G80,5000mAh,6.58 inches,"PKR 34,999","INR 17,999","CNY 1,699",USD 239,AED 899,2021 +Vivo,Y33s 64GB,182g,4GB,16MP,50MP,MediaTek Helio G80,5000mAh,6.58 inches,"PKR 29,999","INR 14,999","CNY 1,299",USD 179,AED 799,2021 +Vivo,X60 Pro 256GB,190g,12GB,32MP,48MP,Qualcomm Snapdragon 870,4200mAh,6.56 inches,"PKR 109,999","INR 44,999","CNY 3,999",USD 899,"AED 1,999",2021 +Vivo,X60 Pro 512GB,190g,12GB,32MP,48MP,Qualcomm Snapdragon 870,4200mAh,6.56 inches,"PKR 119,999","INR 49,999","CNY 4,199",USD 999,"AED 2,099",2021 +Vivo,V20 Pro 128GB,173g,8GB,44MP,64MP,Qualcomm Snapdragon 765G,4000mAh,6.44 inches,"PKR 49,999","INR 25,999","CNY 2,699",USD 499,"AED 1,499",2020 +Vivo,V20 Pro 256GB,173g,8GB,44MP,64MP,Qualcomm Snapdragon 765G,4000mAh,6.44 inches,"PKR 54,999","INR 29,999","CNY 2,999",USD 549,"AED 1,699",2020 +Vivo,Y75 5G 128GB,179g,8GB,16MP,50MP,MediaTek Dimensity 700,5000mAh,6.58 inches,"PKR 54,999","INR 21,999","CNY 2,199",USD 349,"AED 1,299",2021 +Vivo,Y75 5G 256GB,179g,8GB,16MP,50MP,MediaTek Dimensity 700,5000mAh,6.58 inches,"PKR 59,999","INR 25,999","CNY 2,499",USD 399,"AED 1,499",2021 +Vivo,Y53s 128GB,190g,6GB,16MP,64MP,MediaTek Helio G80,5000mAh,6.58 inches,"PKR 34,999","INR 16,999","CNY 1,699",USD 229,AED 899,2021 +Vivo,Y53s 64GB,190g,6GB,16MP,64MP,MediaTek Helio G80,5000mAh,6.58 inches,"PKR 29,999","INR 13,999","CNY 1,299",USD 179,AED 799,2021 +Vivo,V15 Pro 128GB,185g,6GB,32MP,48MP,Qualcomm Snapdragon 675,3700mAh,6.39 inches,"PKR 44,999","INR 25,999","CNY 2,499",USD 399,"AED 1,499",2019 +Vivo,V15 Pro 256GB,185g,6GB,32MP,48MP,Qualcomm Snapdragon 675,3700mAh,6.39 inches,"PKR 49,999","INR 29,999","CNY 2,799",USD 449,"AED 1,699",2019 +Vivo,X70 Pro 128GB,185g,8GB,32MP,50MP,MediaTek Dimensity 1200,4450mAh,6.56 inches,"PKR 99,999","INR 39,999","CNY 4,299",USD 749,"AED 2,099",2021 +Vivo,X70 Pro 256GB,185g,8GB,32MP,50MP,MediaTek Dimensity 1200,4450mAh,6.56 inches,"PKR 109,999","INR 44,999","CNY 4,699",USD 799,"AED 2,299",2021 +Vivo,T1 5G 128GB,181g,6GB,16MP,50MP,Qualcomm Snapdragon 695,5000mAh,6.58 inches,"PKR 39,999","INR 17,999","CNY 1,799",USD 269,AED 999,2022 +Vivo,T1 5G 256GB,181g,8GB,16MP,50MP,Qualcomm Snapdragon 695,5000mAh,6.58 inches,"PKR 44,999","INR 21,999","CNY 1,999",USD 319,"AED 1,099",2022 +Vivo,X30 Pro 128GB,199g,8GB,32MP,64MP,Qualcomm Snapdragon 855,4200mAh,6.44 inches,"PKR 109,999","INR 47,999","CNY 4,599",USD 899,"AED 2,299",2019 +Vivo,X30 Pro 256GB,199g,8GB,32MP,64MP,Qualcomm Snapdragon 855,4200mAh,6.44 inches,"PKR 119,999","INR 54,999","CNY 5,199",USD 949,"AED 2,499",2019 +Vivo,V27 128GB,182g,8GB,50MP,50MP,MediaTek Dimensity 8200,4600mAh,6.78 inches,"PKR 79,999","INR 29,999","CNY 2,999",USD 599,"AED 1,699",2023 +Vivo,V27 256GB,182g,8GB,50MP,50MP,MediaTek Dimensity 8200,4600mAh,6.78 inches,"PKR 84,999","INR 32,999","CNY 3,199",USD 649,"AED 1,899",2023 +Vivo,V27 Pro 128GB,182g,8GB,50MP,50MP,MediaTek Dimensity 8200,4600mAh,6.78 inches,"PKR 89,999","INR 34,999","CNY 3,299",USD 699,"AED 1,899",2023 +Vivo,V27 Pro 256GB,182g,8GB,50MP,50MP,MediaTek Dimensity 8200,4600mAh,6.78 inches,"PKR 94,999","INR 37,999","CNY 3,499",USD 749,"AED 2,099",2023 +Vivo,V25 Pro 128GB,190g,8GB,32MP,64MP,MediaTek Dimensity 1300,4830mAh,6.56 inches,"PKR 79,999","INR 25,999","CNY 2,799",USD 599,"AED 1,599",2022 +Vivo,V25 Pro 256GB,190g,8GB,32MP,64MP,MediaTek Dimensity 1300,4830mAh,6.56 inches,"PKR 85,999","INR 29,999","CNY 2,999",USD 649,"AED 1,799",2022 +Vivo,X90 Pro 256GB,221g,12GB,32MP,50MP,MediaTek Dimensity 9200,4870mAh,6.78 inches,"PKR 199,999","INR 69,999","CNY 6,999","USD 1,099","AED 3,999",2022 +Vivo,X90 Pro 512GB,221g,12GB,32MP,50MP,MediaTek Dimensity 9200,4870mAh,6.78 inches,"PKR 229,999","INR 79,999","CNY 7,499","USD 1,199","AED 4,499",2022 +Vivo,Y100 128GB,190g,8GB,16MP,64MP,MediaTek Dimensity 900,4500mAh,6.44 inches,"PKR 59,999","INR 19,999","CNY 1,999",USD 399,"AED 1,199",2023 +Vivo,Y100 256GB,190g,8GB,16MP,64MP,MediaTek Dimensity 900,4500mAh,6.44 inches,"PKR 64,999","INR 22,999","CNY 2,199",USD 449,"AED 1,399",2023 +Vivo,T2 Series 128GB,190g,8GB,16MP,64MP,Qualcomm Snapdragon 695,4500mAh,6.44 inches,"PKR 49,999","INR 15,999","CNY 1,699",USD 299,AED 999,2023 +Vivo,T2 Series 256GB,190g,8GB,16MP,64MP,Qualcomm Snapdragon 695,4500mAh,6.44 inches,"PKR 54,999","INR 18,999","CNY 1,799",USD 349,"AED 1,099",2023 +Vivo,V23 5G 128GB,179g,8GB,50MP,64MP,MediaTek Dimensity 920,4200mAh,6.44 inches,"PKR 69,999","INR 27,999","CNY 2,799",USD 499,"AED 1,499",2022 +Vivo,V23 5G 256GB,179g,8GB,50MP,64MP,MediaTek Dimensity 920,4200mAh,6.44 inches,"PKR 74,999","INR 32,999","CNY 3,199",USD 549,"AED 1,699",2022 +Vivo,X80 256GB,206g,12GB,32MP,50MP,MediaTek Dimensity 9000,4700mAh,6.78 inches,"PKR 179,999","INR 59,999","CNY 5,999",USD 899,"AED 3,499",2022 +Vivo,X80 512GB,206g,12GB,32MP,50MP,MediaTek Dimensity 9000,4700mAh,6.78 inches,"PKR 199,999","INR 69,999","CNY 6,499",USD 999,"AED 3,999",2022 +Vivo,Y21 128GB,182g,4GB,8MP,13MP,MediaTek Helio P35,5000mAh,6.51 inches,"PKR 29,999","INR 12,999","CNY 1,299",USD 199,AED 699,2021 +Vivo,Y21 64GB,182g,4GB,8MP,13MP,MediaTek Helio P35,5000mAh,6.51 inches,"PKR 26,999","INR 9,999","CNY 1,099",USD 179,AED 599,2021 +Vivo,Pad 128GB,498g,6GB,8MP,13MP,Snapdragon 870,8040mAh,11 inches,"PKR 64,999","INR 34,999","CNY 2,499",USD 329,"AED 1,199",2022 +Vivo,Pad 2 256GB,535g,8GB,8MP,50MP,MediaTek Dimensity 1200,8040mAh,11 inches,"PKR 74,999","INR 39,999","CNY 3,199",USD 399,"AED 1,399",2023 +Vivo,Pad Air 128GB,510g,6GB,8MP,13MP,Snapdragon 870,8040mAh,10.4 inches,"PKR 58,999","INR 31,999","CNY 2,199",USD 279,AED 999,2023 +Vivo,Pad 3 128GB,500g,6GB,8MP,13MP,Snapdragon 750G,8040mAh,11 inches,"PKR 62,999","INR 34,999","CNY 2,399",USD 349,"AED 1,199",2023 +Vivo,Pad 3 Pro 256GB,550g,8GB,8MP,50MP,Snapdragon 888,8040mAh,12.3 inches,"PKR 84,999","INR 45,999","CNY 3,599",USD 449,"AED 1,599",2023 +Vivo,Pad 4 Pro 256GB,560g,8GB,8MP,50MP,MediaTek Dimensity 9000,8040mAh,12.9 inches,"PKR 94,999","INR 49,999","CNY 4,299",USD 499,"AED 1,799",2024 +iQOO,Pad 128GB,520g,6GB,8MP,13MP,Snapdragon 870,8040mAh,11 inches,"PKR 69,999","INR 37,999","CNY 2,699",USD 349,"AED 1,299",2023 +iQOO,Pad 2 256GB,540g,8GB,8MP,50MP,Snapdragon 888,8040mAh,12.3 inches,"PKR 79,999","INR 43,999","CNY 3,499",USD 399,"AED 1,499",2024 +iQOO,Pad 2 Pro 256GB,555g,8GB,8MP,50MP,Snapdragon 8 Gen 1,8040mAh,12.3 inches,"PKR 89,999","INR 49,999","CNY 3,899",USD 449,"AED 1,699",2024 +Oppo,Find N3 512GB,239g,12GB,32MP,48MP + 64MP + 48MP,Snapdragon 8 Gen 2,4805mAh,7.82 inches,"PKR 299,999","INR 159,999","CNY 9,999","USD 1,399","AED 5,199",2023 +Oppo,Find N3 Flip 256GB,198g,12GB,32MP,50MP + 32MP + 48MP,MediaTek Dimensity 9200,4300mAh,6.8 inches,"PKR 199,999","INR 109,999","CNY 6,999",USD 999,"AED 3,699",2023 +Oppo,Find X8 Pro 256GB,210g,12GB,32MP,50MP + 50MP + 50MP,Snapdragon 8 Gen 2,5000mAh,6.8 inches,"PKR 249,999","INR 139,999","CNY 8,999","USD 1,299","AED 4,799",2024 +Oppo,Find X8 256GB,195g,8GB,32MP,50MP + 50MP,Snapdragon 8 Gen 2,4800mAh,6.7 inches,"PKR 199,999","INR 119,999","CNY 7,499","USD 1,099","AED 4,099",2024 +Oppo,Reno13 F 4G 256GB,192g,8GB,32MP,50MP + 8MP + 2MP,MediaTek Helio G100,5800mAh,6.67 inches,"PKR 79,999","INR 44,999","CNY 3,499",USD 499,"AED 1,899",2025 +Oppo,Reno13 F 256GB,192g,8GB,32MP,50MP + 8MP + 2MP,MediaTek Helio G100,5800mAh,6.67 inches,"PKR 79,999","INR 44,999","CNY 3,499",USD 499,"AED 1,899",2025 +Oppo,Reno13 Pro 512GB,210g,12GB,50MP,50MP + 50MP + 8MP,MediaTek Dimensity 8350,5800mAh,6.83 inches,"PKR 129,999","INR 69,999","CNY 5,999",USD 799,"AED 2,999",2025 +Oppo,Reno13 256GB,200g,12GB,50MP,50MP + 8MP,MediaTek Dimensity 8350,5600mAh,6.59 inches,"PKR 99,999","INR 54,999","CNY 4,999",USD 699,"AED 2,599",2025 +Oppo,Reno12 F 4G 256GB,187g,8GB,32MP,50MP + 8MP + 2MP,Snapdragon 685,5000mAh,6.7 inches,"PKR 69,999","INR 39,999","CNY 3,199",USD 449,"AED 1,699",2024 +Oppo,Reno12 F 256GB,187g,8GB,32MP,50MP + 8MP + 2MP,Snapdragon 685,5000mAh,6.7 inches,"PKR 69,999","INR 39,999","CNY 3,199",USD 449,"AED 1,699",2024 +Oppo,Reno12 Pro 512GB,190g,12GB,32MP,50MP + 32MP + 8MP,MediaTek Dimensity 8200,4600mAh,6.74 inches,"PKR 119,999","INR 64,999","CNY 5,499",USD 749,"AED 2,799",2024 +Oppo,Reno12 256GB,185g,8GB,32MP,50MP + 8MP,MediaTek Dimensity 7050,5000mAh,6.7 inches,"PKR 89,999","INR 49,999","CNY 3,999",USD 599,"AED 2,199",2024 +Oppo,Reno11 F 256GB,185g,8GB,32MP,64MP + 8MP + 2MP,MediaTek Dimensity 7050,5000mAh,6.7 inches,"PKR 79,999","INR 44,999","CNY 3,499",USD 499,"AED 1,899",2024 +Oppo,Reno11 Pro 512GB,190g,12GB,32MP,50MP + 32MP + 8MP,MediaTek Dimensity 8200,4600mAh,6.74 inches,"PKR 109,999","INR 59,999","CNY 4,999",USD 699,"AED 2,599",2024 +Oppo,A5 Pro 256GB,180g,8GB,16MP,50MP + 2MP,Dimensity 7300,6000mAh,6.7 inches,"PKR 89,999","INR 49,999","CNY 3,999",USD 599,"AED 2,199",2024 +Oppo,A5 Pro 512GB,186g,12GB,16MP,50MP + 2MP,Dimensity 7300,6000mAh,6.7 inches,"PKR 99,999","INR 54,999","CNY 4,499",USD 699,"AED 2,499",2024 +Oppo,A80 256GB,186g,8GB,8MP,50MP + 2MP,Dimensity 6300,5100mAh,6.67 inches,"PKR 79,999","INR 44,999","CNY 3,499",USD 499,"AED 1,899",2024 +Oppo,A3 4G 128GB,186g,4GB,5MP,50MP,Snapdragon 6s 4G Gen 1,5000mAh,6.7 inches,"PKR 59,999","INR 34,999","CNY 2,999",USD 399,"AED 1,499",2024 +Oppo,A3x 4G 128GB,186g,4GB,8MP,8MP + 2MP,Snapdragon 6s 4G Gen 1,5100mAh,6.67 inches,"PKR 64,999","INR 36,999","CNY 3,199",USD 449,"AED 1,699",2024 +Oppo,A3x 4G 256GB,186g,6GB,8MP,8MP + 2MP,Snapdragon 6s 4G Gen 1,5100mAh,6.67 inches,"PKR 69,999","INR 39,999","CNY 3,499",USD 499,"AED 1,899",2024 +Oppo,A3 128GB,186g,4GB,5MP,50MP,Snapdragon 6s 4G Gen 1,5000mAh,6.7 inches,"PKR 59,999","INR 34,999","CNY 2,999",USD 399,"AED 1,499",2024 +Oppo,A3x 128GB,186g,4GB,8MP,8MP + 2MP,Snapdragon 6s 4G Gen 1,5100mAh,6.67 inches,"PKR 64,999","INR 36,999","CNY 3,199",USD 449,"AED 1,699",2024 +Oppo,A3x 256GB,186g,6GB,8MP,8MP + 2MP,Snapdragon 6s 4G Gen 1,5100mAh,6.67 inches,"PKR 69,999","INR 39,999","CNY 3,499",USD 499,"AED 1,899",2024 +Oppo,A3 128GB,186g,4GB,5MP,50MP,Snapdragon 6s 4G Gen 1,5000mAh,6.7 inches,"PKR 59,999","INR 34,999","CNY 2,999",USD 399,"AED 1,499",2024 +Oppo,A60 128GB,186g,8GB,8MP,50MP + 2MP,Snapdragon 680 4G,5000mAh,6.67 inches,"PKR 69,999","INR 39,999","CNY 3,199",USD 449,"AED 1,699",2024 +Oppo,A60 256GB,186g,8GB,8MP,50MP + 2MP,Snapdragon 680 4G,5000mAh,6.67 inches,"PKR 74,999","INR 42,999","CNY 3,499",USD 499,"AED 1,899",2024 +Oppo,K12 Plus 256GB,192g,8GB,16MP,50MP,Snapdragon 7 Gen 3,6400mAh,6.7 inches,"PKR 109,999","INR 59,999","CNY 4,999",USD 699,"AED 2,599",2024 +Oppo,K12 Plus 512GB,192g,12GB,16MP,50MP,Snapdragon 7 Gen 3,6400mAh,6.7 inches,"PKR 119,999","INR 64,999","CNY 5,499",USD 799,"AED 2,999",2024 +Oppo,F27 128GB,175g,8GB,32MP,64MP + 2MP,Dimensity 7050,5000mAh,6.7 inches,"PKR 79,999","INR 44,999","CNY 3,499",USD 499,"AED 1,899",2024 +Oppo,F27 256GB,175g,8GB,32MP,64MP + 2MP,Dimensity 7050,5000mAh,6.7 inches,"PKR 84,999","INR 47,999","CNY 3,799",USD 549,"AED 2,099",2024 +Oppo,F27 Pro+ 256GB,177g,8GB,32MP,64MP + 2MP,Dimensity 7050,5000mAh,6.7 inches,"PKR 89,999","INR 49,999","CNY 3,999",USD 599,"AED 2,199",2024 +Oppo,F27 Pro+ 512GB,177g,12GB,32MP,64MP + 2MP,Dimensity 7050,5000mAh,6.7 inches,"PKR 99,999","INR 54,999","CNY 4,499",USD 699,"AED 2,499",2024 +Oppo,F25 Pro 128GB,173g,8GB,32MP,64MP + 2MP,Snapdragon 778G,4500mAh,6.55 inches,"PKR 74,999","INR 42,999","CNY 3,499",USD 549,"AED 1,999",2023 +Oppo,F25 Pro 256GB,173g,8GB,32MP,64MP + 2MP,Snapdragon 778G,4500mAh,6.55 inches,"PKR 79,999","INR 44,999","CNY 3,799",USD 599,"AED 2,199",2023 +Oppo,Pad 3 128GB,533g,8GB,8MP,13MP,Dimensity 8350,9510mAh,11.6 inches,"PKR 99,999","INR 54,999","CNY 4,499",USD 699,"AED 2,499",2024 +Oppo,Pad 3 256GB,533g,12GB,8MP,13MP,Dimensity 8350,9510mAh,11.6 inches,"PKR 109,999","INR 59,999","CNY 4,999",USD 799,"AED 2,799",2024 +Oppo,Pad 3 Pro 256GB,586g,12GB,8MP,13MP,Snapdragon 8 Gen 3,9510mAh,12.1 inches,"PKR 119,999","INR 64,999","CNY 5,499",USD 899,"AED 3,299",2024 +Oppo,Pad 3 Pro 512GB,586g,16GB,8MP,13MP,Snapdragon 8 Gen 3,9510mAh,12.1 inches,"PKR 129,999","INR 69,999","CNY 5,999",USD 999,"AED 3,699",2024 +Oppo,Pad Neo 128GB,520g,6GB,8MP,13MP,Snapdragon 870,8360mAh,11 inches,"PKR 79,999","INR 44,999","CNY 3,499",USD 499,"AED 1,899",2023 +Oppo,Pad Neo 256GB,520g,8GB,8MP,13MP,Snapdragon 870,8360mAh,11 inches,"PKR 89,999","INR 49,999","CNY 3,999",USD 599,"AED 2,199",2023 +Oppo,Find X7 Ultra 256GB,221g,12GB,32MP,50MP + 50MP + 50MP,Snapdragon 8 Gen 3,5000mAh,6.82 inches,"PKR 199,999","INR 109,999","CNY 7,999","USD 1,199","AED 4,399",2024 +Oppo,Find X7 Ultra 512GB,221g,16GB,32MP,50MP + 50MP + 50MP,Snapdragon 8 Gen 3,5000mAh,6.82 inches,"PKR 219,999","INR 119,999","CNY 8,999","USD 1,299","AED 4,799",2024 +Oppo,Find X7 256GB,206g,12GB,32MP,50MP + 50MP + 64MP,Dimensity 9300,5000mAh,6.78 inches,"PKR 179,999","INR 99,999","CNY 6,999","USD 1,099","AED 3,999",2024 +Oppo,Find X7 512GB,206g,16GB,32MP,50MP + 50MP + 64MP,Dimensity 9300,5000mAh,6.78 inches,"PKR 199,999","INR 109,999","CNY 7,999","USD 1,199","AED 4,399",2024 +Oppo,Find X6 Pro 256GB,218g,12GB,32MP,50MP + 50MP + 50MP,Snapdragon 8 Gen 2,5000mAh,6.82 inches,"PKR 169,999","INR 94,999","CNY 6,499",USD 999,"AED 3,699",2023 +Oppo,Find X6 Pro 512GB,218g,16GB,32MP,50MP + 50MP + 50MP,Snapdragon 8 Gen 2,5000mAh,6.82 inches,"PKR 189,999","INR 104,999","CNY 7,499","USD 1,099","AED 4,099",2023 +Oppo,Find X6 256GB,207g,12GB,32MP,50MP + 50MP + 50MP,Dimensity 9200,4800mAh,6.74 inches,"PKR 149,999","INR 84,999","CNY 5,999",USD 899,"AED 3,299",2023 +Oppo,Find X6 512GB,207g,16GB,32MP,50MP + 50MP + 50MP,Dimensity 9200,4800mAh,6.74 inches,"PKR 169,999","INR 94,999","CNY 6,999",USD 999,"AED 3,699",2023 +Oppo,Find X5 Pro 256GB,218g,12GB,32MP,50MP + 50MP + 13MP,Snapdragon 8 Gen 1,5000mAh,6.7 inches,"PKR 159,999","INR 89,999","CNY 5,999",USD 899,"AED 3,299",2022 +Oppo,Find X5 Pro 512GB,218g,16GB,32MP,50MP + 50MP + 13MP,Snapdragon 8 Gen 1,5000mAh,6.7 inches,"PKR 179,999","INR 99,999","CNY 6,999",USD 999,"AED 3,699",2022 +Oppo,Find X5 256GB,196g,8GB,32MP,50MP + 50MP + 13MP,Snapdragon 888,4800mAh,6.55 inches,"PKR 139,999","INR 79,999","CNY 4,999",USD 799,"AED 2,999",2022 +Oppo,Find N2 Flip 256GB,191g,8GB,32MP,50MP + 8MP,Dimensity 9000+,4300mAh,6.8 inches,"PKR 149,999","INR 84,999","CNY 5,999",USD 899,"AED 3,299",2023 +Oppo,Find N2 Flip 512GB,191g,12GB,32MP,50MP + 8MP,Dimensity 9000+,4300mAh,6.8 inches,"PKR 169,999","INR 94,999","CNY 6,999",USD 999,"AED 3,699",2023 +Oppo,Find N2 256GB,233g,12GB,32MP,50MP + 48MP + 32MP,Snapdragon 8+ Gen 1,4520mAh,7.1 inches,"PKR 179,999","INR 99,999","CNY 6,999","USD 1,099","AED 3,999",2022 +Oppo,Reno10 5G 128GB,180g,8GB,32MP,64MP + 32MP + 8MP,Dimensity 7050,"5,000mAh",6.7 inches,"PKR 129,999","INR 38,999","CNY 2,699",USD 499,"AED 1,899",2023 +Oppo,Reno10 5G 256GB,180g,8GB,32MP,64MP + 32MP + 8MP,Dimensity 7050,"5,000mAh",6.7 inches,"PKR 149,999","INR 42,999","CNY 2,999",USD 549,"AED 2,099",2023 +Oppo,Reno10 Pro 5G 256GB,186g,12GB,32MP,50MP + 32MP + 8MP,Snapdragon 778G,"4,600mAh",6.7 inches,"PKR 169,999","INR 44,999","CNY 3,499",USD 599,"AED 2,299",2023 +Oppo,Reno10 Pro+ 5G 256GB,194g,16GB,32MP,50MP + 64MP + 8MP,Snapdragon 8+ Gen 1,"4,700mAh",6.74 inches,"PKR 199,999","INR 54,999","CNY 3,999",USD 699,"AED 2,599",2023 +Oppo,Reno9 5G 128GB,174g,8GB,32MP,64MP + 2MP,Snapdragon 778G,"4,500mAh",6.7 inches,"PKR 109,999","INR 32,999","CNY 2,399",USD 449,"AED 1,699",2022 +Oppo,Reno9 5G 256GB,174g,12GB,32MP,64MP + 2MP,Snapdragon 778G,"4,500mAh",6.7 inches,"PKR 129,999","INR 36,999","CNY 2,699",USD 499,"AED 1,899",2022 +Oppo,Reno9 Pro 5G 256GB,184g,16GB,32MP,50MP + 8MP,Dimensity 8100,"4,500mAh",6.7 inches,"PKR 159,999","INR 42,999","CNY 3,299",USD 599,"AED 2,199",2022 +Oppo,Reno9 Pro+ 5G 256GB,192g,16GB,32MP,50MP + 8MP + 2MP,Snapdragon 8+ Gen 1,"4,700mAh",6.7 inches,"PKR 189,999","INR 52,999","CNY 3,799",USD 649,"AED 2,499",2022 +Oppo,Reno8 5G 128GB,179g,8GB,32MP,50MP + 8MP + 2MP,Dimensity 1300,"4,500mAh",6.4 inches,"PKR 89,999","INR 29,999","CNY 2,199",USD 399,"AED 1,499",2022 +Oppo,Reno8 5G 256GB,179g,12GB,32MP,50MP + 8MP + 2MP,Dimensity 1300,"4,500mAh",6.4 inches,"PKR 99,999","INR 34,999","CNY 2,499",USD 449,"AED 1,699",2022 +Oppo,Reno8 Pro 5G 256GB,183g,12GB,32MP,50MP + 8MP + 2MP,Dimensity 8100,"4,500mAh",6.7 inches,"PKR 129,999","INR 42,999","CNY 3,099",USD 549,"AED 1,999",2022 +Oppo,Reno8 Pro+ 5G 256GB,195g,12GB,32MP,50MP + 8MP + 2MP,Dimensity 8100,"4,500mAh",6.7 inches,"PKR 139,999","INR 46,999","CNY 3,399",USD 599,"AED 2,199",2022 +Oppo,Reno7 5G 128GB,173g,8GB,32MP,64MP + 8MP + 2MP,Dimensity 900,"4,500mAh",6.4 inches,"PKR 79,999","INR 28,999","CNY 1,999",USD 349,"AED 1,299",2021 +Oppo,Reno7 5G 256GB,173g,12GB,32MP,64MP + 8MP + 2MP,Dimensity 900,"4,500mAh",6.4 inches,"PKR 89,999","INR 32,999","CNY 2,199",USD 399,"AED 1,499",2021 +Oppo,Reno7 Pro 5G 256GB,180g,12GB,32MP,50MP + 8MP + 2MP,Dimensity 1200,"4,500mAh",6.55 inches,"PKR 109,999","INR 39,999","CNY 2,799",USD 499,"AED 1,799",2021 +Oppo,Reno6 5G 128GB,182g,8GB,32MP,64MP + 8MP + 2MP,Dimensity 900,"4,300mAh",6.43 inches,"PKR 79,999","INR 29,999","CNY 2,399",USD 349,"AED 1,299",2021 +Oppo,Reno6 5G 256GB,182g,12GB,32MP,64MP + 8MP + 2MP,Dimensity 900,"4,300mAh",6.43 inches,"PKR 89,999","INR 32,999","CNY 2,699",USD 399,"AED 1,499",2021 +Oppo,Reno6 Pro 5G 128GB,177g,8GB,32MP,64MP + 8MP + 2MP + 2MP,Dimensity 1200,"4,500mAh",6.55 inches,"PKR 99,999","INR 39,999","CNY 2,999",USD 449,"AED 1,699",2021 +Oppo,Reno6 Pro 5G 256GB,177g,12GB,32MP,64MP + 8MP + 2MP + 2MP,Dimensity 1200,"4,500mAh",6.55 inches,"PKR 109,999","INR 44,999","CNY 3,299",USD 499,"AED 1,899",2021 +Oppo,Reno6 Pro+ 5G 256GB,188g,12GB,32MP,50MP + 13MP + 16MP + 2MP,Snapdragon 870,"4,500mAh",6.55 inches,"PKR 129,999","INR 49,999","CNY 3,999",USD 599,"AED 2,199",2021 +Oppo,Reno5 5G 128GB,180g,8GB,32MP,64MP + 8MP + 2MP + 2MP,Snapdragon 765G,"4,300mAh",6.43 inches,"PKR 69,999","INR 26,999","CNY 2,099",USD 299,"AED 1,099",2020 +Oppo,Reno5 5G 256GB,180g,12GB,32MP,64MP + 8MP + 2MP + 2MP,Snapdragon 765G,"4,300mAh",6.43 inches,"PKR 79,999","INR 29,999","CNY 2,399",USD 349,"AED 1,299",2020 +Oppo,Reno5 Pro 5G 128GB,173g,8GB,32MP,64MP + 8MP + 2MP + 2MP,Dimensity 1000+,"4,350mAh",6.55 inches,"PKR 89,999","INR 32,999","CNY 2,799",USD 399,"AED 1,499",2020 +Oppo,Reno5 Pro 5G 256GB,173g,12GB,32MP,64MP + 8MP + 2MP + 2MP,Dimensity 1000+,"4,350mAh",6.55 inches,"PKR 99,999","INR 36,999","CNY 3,099",USD 449,"AED 1,699",2020 +Oppo,Reno5 Pro+ 5G 256GB,184g,12GB,32MP,50MP + 16MP + 13MP + 2MP,Snapdragon 865,"4,500mAh",6.55 inches,"PKR 119,999","INR 44,999","CNY 3,799",USD 599,"AED 2,099",2020 +Oppo,Reno4 5G 128GB,183g,8GB,32MP,48MP + 8MP + 2MP + 2MP,Snapdragon 765G,"4,000mAh",6.43 inches,"PKR 59,999","INR 24,999","CNY 1,899",USD 299,AED 999,2020 +Oppo,Reno4 5G 256GB,183g,8GB,32MP,48MP + 8MP + 2MP + 2MP,Snapdragon 765G,"4,000mAh",6.43 inches,"PKR 69,999","INR 26,999","CNY 2,199",USD 349,"AED 1,199",2020 +Oppo,Reno4 Pro 5G 256GB,172g,12GB,32MP,48MP + 13MP + 12MP,Snapdragon 765G,"4,000mAh",6.55 inches,"PKR 99,999","INR 39,999","CNY 3,299",USD 499,"AED 1,799",2020 +Oppo,Reno3 5G 128GB,181g,8GB,32MP,64MP + 8MP + 2MP + 2MP,Dimensity 1000L,"4,025mAh",6.4 inches,"PKR 49,999","INR 22,999","CNY 1,799",USD 249,AED 899,2019 +Oppo,Reno3 5G 256GB,181g,12GB,32MP,64MP + 8MP + 2MP + 2MP,Dimensity 1000L,"4,025mAh",6.4 inches,"PKR 59,999","INR 26,999","CNY 2,099",USD 299,"AED 1,099",2019 +Oppo,Reno3 Pro 5G 256GB,171g,12GB,32MP,48MP + 13MP + 8MP + 2MP,Snapdragon 765G,"4,025mAh",6.5 inches,"PKR 79,999","INR 34,999","CNY 3,299",USD 499,"AED 1,799",2019 +Oppo,A59 5G 128GB,186g,6GB,8MP,13MP + 2MP,MediaTek Dimensity 6020,"5,000mAh",6.56 inches,"PKR 39,999","INR 14,999","CNY 1,699",USD 199,"AED 1,000",2023 +Oppo,A59 5G 256GB,186g,8GB,8MP,13MP + 2MP,MediaTek Dimensity 6020,"5,000mAh",6.56 inches,"PKR 44,999","INR 16,999","CNY 1,899",USD 229,"AED 1,200",2023 +Oppo,A58 5G 256GB,188g,8GB,8MP,50MP + 2MP,MediaTek Dimensity 700,"5,000mAh",6.56 inches,"PKR 49,999","INR 19,000","CNY 1,699",USD 249,"AED 1,300",2022 +Oppo,A57 5G 128GB,186g,6GB,8MP,13MP + 2MP,MediaTek Dimensity 810,"5,000mAh",6.56 inches,"PKR 34,999","INR 15,999","CNY 1,599",USD 219,"AED 1,100",2022 +Oppo,A56 5G 128GB,189g,6GB,8MP,13MP + 2MP,MediaTek Dimensity 700,"5,000mAh",6.5 inches,"PKR 32,999","INR 14,999","CNY 1,499",USD 199,"AED 1,000",2021 +Oppo,A55 5G 128GB,186g,6GB,8MP,13MP + 2MP + 2MP,MediaTek Dimensity 700,"5,000mAh",6.5 inches,"PKR 29,999","INR 13,999","CNY 1,399",USD 189,AED 950,2021 +Oppo,A54 5G 128GB,190g,6GB,16MP,48MP + 8MP + 2MP + 2MP,Qualcomm Snapdragon 480,"5,000mAh",6.5 inches,"PKR 34,999","INR 15,999","CNY 1,599",USD 219,"AED 1,100",2021 +Oppo,A53 5G 128GB,175g,4GB,8MP,16MP + 2MP + 2MP,MediaTek Dimensity 720,"4,040mAh",6.5 inches,"PKR 27,999","INR 12,999","CNY 1,299",USD 179,AED 900,2020 +Oppo,A52 5G 128GB,184g,4GB,8MP,12MP + 8MP + 2MP + 2MP,MediaTek Dimensity 720,"4,000mAh",6.5 inches,"PKR 25,999","INR 11,999","CNY 1,199",USD 169,AED 850,2020 +Oppo,A51 5G 128GB,186g,4GB,8MP,13MP + 2MP + 2MP,MediaTek Dimensity 700,"4,000mAh",6.5 inches,"PKR 23,999","INR 10,999","CNY 1,099",USD 149,AED 800,2020 +Oppo,A50 5G 128GB,185g,4GB,8MP,13MP + 2MP,MediaTek Dimensity 700,"4,000mAh",6.5 inches,"PKR 21,999","INR 9,999",CNY 999,USD 139,AED 750,2020 +Oppo,A49 5G 128GB,185g,4GB,8MP,13MP + 2MP,MediaTek Dimensity 700,"4,000mAh",6.5 inches,"PKR 19,999","INR 8,999",CNY 899,USD 129,AED 700,2020 +Oppo,A40 128GB,186g,4GB,5MP,50MP,Qualcomm Snapdragon 6s Gen 1,"5,100mAh",6.67 inches,"PKR 39,999","INR 19,999","CNY 1,499",USD 199,"AED 1,000",2024 +Oppo,A40 256GB,186g,6GB,5MP,50MP,Qualcomm Snapdragon 6s Gen 1,"5,100mAh",6.67 inches,"PKR 44,999","INR 22,999","CNY 1,799",USD 229,"AED 1,200",2024 +Oppo,K11x 128GB,195g,8GB,16MP,108MP + 2MP,Qualcomm Snapdragon 695,"5,000mAh",6.72 inches,"PKR 59,999","INR 18,000","CNY 1,499",USD 199,"AED 1,000",2023 +Oppo,K11x 256GB,195g,12GB,16MP,108MP + 2MP,Qualcomm Snapdragon 695,"5,000mAh",6.72 inches,"PKR 64,999","INR 20,000","CNY 1,699",USD 229,"AED 1,200",2023 +Oppo,K10x 128GB,195g,6GB,16MP,64MP + 2MP + 2MP,Qualcomm Snapdragon 695,"5,000mAh",6.59 inches,"PKR 54,999","INR 16,990","CNY 1,499",USD 199,"AED 1,000",2022 +Oppo,K10x 256GB,195g,8GB,16MP,64MP + 2MP + 2MP,Qualcomm Snapdragon 695,"5,000mAh",6.59 inches,"PKR 59,999","INR 18,990","CNY 1,699",USD 229,"AED 1,200",2022 +Oppo,K10 5G 128GB,205g,8GB,16MP,64MP + 8MP + 2MP,MediaTek Dimensity 8000-Max,"5,000mAh",6.59 inches,"PKR 64,999","INR 19,999","CNY 1,799",USD 249,"AED 1,300",2022 +Oppo,K9x 128GB,194g,6GB,16MP,64MP + 2MP + 2MP,MediaTek Dimensity 810,"5,000mAh",6.5 inches,"PKR 49,999","INR 15,999","CNY 1,499",USD 199,"AED 1,000",2021 +Oppo,K9x 256GB,194g,8GB,16MP,64MP + 2MP + 2MP,MediaTek Dimensity 810,"5,000mAh",6.5 inches,"PKR 54,999","INR 17,999","CNY 1,699",USD 229,"AED 1,200",2021 +Oppo,K9 Pro 5G 128GB,180g,8GB,16MP,64MP + 8MP + 2MP,MediaTek Dimensity 1200,"4,500mAh",6.43 inches,"PKR 69,999","INR 24,999","CNY 2,199",USD 299,"AED 1,500",2021 +Oppo,K9 Pro 5G 256GB,180g,12GB,16MP,64MP + 8MP + 2MP,MediaTek Dimensity 1200,"4,500mAh",6.43 inches,"PKR 74,999","INR 27,999","CNY 2,499",USD 329,"AED 1,700",2021 +Oppo,K9 5G 128GB,172g,8GB,32MP,64MP + 8MP + 2MP,Qualcomm Snapdragon 768G,"4,300mAh",6.43 inches,"PKR 59,999","INR 22,999","CNY 1,999",USD 279,"AED 1,400",2021 +Oppo,K9 5G 256GB,172g,8GB,32MP,64MP + 8MP + 2MP,Qualcomm Snapdragon 768G,"4,300mAh",6.43 inches,"PKR 64,999","INR 24,999","CNY 2,199",USD 299,"AED 1,500",2021 +Oppo,K7x 128GB,194g,6GB,16MP,48MP + 8MP + 2MP + 2MP,MediaTek Dimensity 720,"5,000mAh",6.5 inches,"PKR 44,999","INR 14,999","CNY 1,499",USD 199,"AED 1,000",2020 +Oppo,K7 5G 128GB,180g,8GB,32MP,48MP + 8MP + 2MP + 2MP,Qualcomm Snapdragon 765G,"4,025mAh",6.4 inches,"PKR 49,999","INR 19,999","CNY 1,999",USD 279,"AED 1,400",2020 +Oppo,K7 5G 256GB,180g,8GB,32MP,48MP + 8MP + 2MP + 2MP,Qualcomm Snapdragon 765G,"4,025mAh",6.4 inches,"PKR 54,999","INR 21,999","CNY 2,199",USD 299,"AED 1,500",2020 +Oppo,K11x 128GB,195g,8GB,16MP,108MP + 2MP,Qualcomm Snapdragon 695,"5,000mAh",6.72 inches,"PKR 59,999","INR 18,000","CNY 1,499",USD 199,"AED 1,000",2023 +Oppo,K11x 256GB,195g,12GB,16MP,108MP + 2MP,Qualcomm Snapdragon 695,"5,000mAh",6.72 inches,"PKR 64,999","INR 20,000","CNY 1,699",USD 229,"AED 1,200",2023 +Oppo,K11 128GB,184g,8GB,16MP,64MP + 8MP + 2MP,Qualcomm Snapdragon 782G,"5,000mAh",6.7 inches,"PKR 69,999","INR 21,999","CNY 1,899",USD 259,"AED 1,300",2023 +Oppo,K11 256GB,184g,12GB,16MP,64MP + 8MP + 2MP,Qualcomm Snapdragon 782G,"5,000mAh",6.7 inches,"PKR 74,999","INR 24,999","CNY 2,199",USD 299,"AED 1,500",2023 +Oppo,K10x 128GB,195g,6GB,16MP,64MP + 2MP + 2MP,Qualcomm Snapdragon 695,"5,000mAh",6.59 inches,"PKR 54,999","INR 16,990","CNY 1,499",USD 199,"AED 1,000",2022 +Oppo,K10x 256GB,195g,8GB,16MP,64MP + 2MP + 2MP,Qualcomm Snapdragon 695,"5,000mAh",6.59 inches,"PKR 59,999","INR 18,990","CNY 1,699",USD 229,"AED 1,200",2022 +Oppo,K10 5G 128GB,205g,8GB,16MP,64MP + 8MP + 2MP,MediaTek Dimensity 8000-Max,"5,000mAh",6.59 inches,"PKR 64,999","INR 19,999","CNY 1,799",USD 249,"AED 1,300",2022 +Oppo,K10 5G 256GB,205g,12GB,16MP,64MP + 8MP + 2MP,MediaTek Dimensity 8000-Max,"5,000mAh",6.59 inches,"PKR 69,999","INR 22,999","CNY 2,099",USD 279,"AED 1,500",2022 +Oppo,K9x 128GB,194g,6GB,16MP,64MP + 2MP + 2MP,MediaTek Dimensity 810,"5,000mAh",6.5 inches,"PKR 49,999","INR 15,999","CNY 1,499",USD 199,"AED 1,000",2021 +Oppo,K9x 256GB,194g,8GB,16MP,64MP + 2MP + 2MP,MediaTek Dimensity 810,"5,000mAh",6.5 inches,"PKR 54,999","INR 17,999","CNY 1,699",USD 229,"AED 1,200",2021 +Oppo,K9 Pro 5G 128GB,180g,8GB,16MP,64MP + 8MP + 2MP,MediaTek Dimensity 1200,"4,500mAh",6.43 inches,"PKR 69,999","INR 24,999","CNY 2,199",USD 299,"AED 1,500",2021 +Oppo,K9 Pro 5G 256GB,180g,12GB,16MP,64MP + 8MP + 2MP,MediaTek Dimensity 1200,"4,500mAh",6.43 inches,"PKR 74,999","INR 27,999","CNY 2,499",USD 329,"AED 1,700",2021 +Oppo,K9 5G 128GB,172g,8GB,32MP,64MP + 8MP + 2MP,Qualcomm Snapdragon 768G,"4,300mAh",6.43 inches,"PKR 59,999","INR 22,999","CNY 1,999",USD 279,"AED 1,400",2021 +Oppo,K9 5G 256GB,172g,8GB,32MP,64MP + 8MP + 2MP,Qualcomm Snapdragon 768G,"4,300mAh",6.43 inches,"PKR 64,999","INR 24,999","CNY 2,199",USD 299,"AED 1,500",2021 +Oppo,K7x 128GB,194g,6GB,16MP,48MP + 8MP + 2MP + 2MP,MediaTek Dimensity 720,"5,000mAh",6.5 inches,"PKR 44,999","INR 14,999","CNY 1,499",USD 199,"AED 1,000",2020 +Oppo,K7 5G 128GB,180g,8GB,32MP,48MP + 8MP + 2MP + 2MP,Qualcomm Snapdragon 765G,"4,025mAh",6.4 inches,"PKR 49,999","INR 19,999","CNY 1,999",USD 279,"AED 1,400",2020 +Realme,GT 7 Pro 128GB,222.8g,12GB,16MP,50MP + 50MP + 8MP,Qualcomm Snapdragon 8 Elite,"6,500mAh",6.78 inches,"PKR 139,999","INR 59,999","CNY 3,400",USD 470,"AED 1,725",2024 +Realme,GT 7 Pro 256GB,222.8g,16GB,16MP,50MP + 50MP + 8MP,Qualcomm Snapdragon 8 Elite,"6,500mAh",6.78 inches,"PKR 149,999","INR 65,999","CNY 3,600",USD 500,"AED 1,840",2024 +Realme,GT 6 128GB,191g,8GB,32MP,50MP + 8MP + 50MP,Qualcomm Snapdragon 8s Gen 3,"5,500mAh",6.78 inches,"PKR 89,999","INR 37,999","CNY 2,800",USD 380,"AED 1,400",2023 +Realme,GT 6 256GB,191g,12GB,32MP,50MP + 8MP + 50MP,Qualcomm Snapdragon 8s Gen 3,"5,500mAh",6.78 inches,"PKR 94,999","INR 39,999","CNY 2,900",USD 400,"AED 1,460",2023 +Realme,GT 6 512GB,191g,16GB,32MP,50MP + 8MP + 50MP,Qualcomm Snapdragon 8s Gen 3,"5,500mAh",6.78 inches,"PKR 99,999","INR 41,999","CNY 3,000",USD 420,"AED 1,520",2023 +Realme,GT 6T 128GB,191g,8GB,32MP,50MP + 8MP,Qualcomm Snapdragon 7 Plus Gen 3,"5,500mAh",6.78 inches,"PKR 84,999","INR 28,756","CNY 2,700",USD 360,"AED 1,330",2023 +Realme,GT 6T 256GB,191g,8GB,32MP,50MP + 8MP,Qualcomm Snapdragon 7 Plus Gen 3,"5,500mAh",6.78 inches,"PKR 89,999","INR 30,999","CNY 2,800",USD 380,"AED 1,400",2023 +Realme,14 Pro+ 5G 256GB,184g,12GB,16MP,50MP + 8MP + 50MP,Qualcomm Snapdragon 7s Gen 3,"6,000mAh",6.83 inches,"PKR 94,999","INR 34,999","CNY 2,600",USD 340,"AED 1,250",2025 +Realme,14 Pro+ 5G 512GB,184g,12GB,16MP,50MP + 8MP + 50MP,Qualcomm Snapdragon 7s Gen 3,"6,000mAh",6.83 inches,"PKR 99,999","INR 36,999","CNY 2,800",USD 360,"AED 1,320",2025 +Realme,14 Pro 5G 128GB,184g,8GB,16MP,50MP + 8MP,MediaTek Dimensity 7300 Energy,"5,800mAh",6.7 inches,"PKR 79,999","INR 29,999","CNY 2,400",USD 320,"AED 1,150",2025 +Realme,14 Pro 5G 256GB,184g,8GB,16MP,50MP + 8MP,MediaTek Dimensity 7300 Energy,"5,800mAh",6.7 inches,"PKR 84,999","INR 31,999","CNY 2,500",USD 340,"AED 1,210",2025 +Realme,14x 5G 128GB,190g,6GB,16MP,48MP + 2MP + 2MP,Qualcomm Snapdragon 7s Gen 2,"5,500mAh",6.6 inches,"PKR 64,999","INR 24,999","CNY 2,000",USD 270,AED 970,2025 +Realme,14x 5G 256GB,190g,8GB,16MP,48MP + 2MP + 2MP,Qualcomm Snapdragon 7s Gen 2,"5,500mAh",6.6 inches,"PKR 69,999","INR 26,999","CNY 2,100",USD 290,"AED 1,030",2025 +Realme,13+ 5G 128GB,185g,8GB,16MP,50MP + 2MP,MediaTek Dimensity 7200,"5,000mAh",6.5 inches,"PKR 59,999","INR 22,999","CNY 1,800",USD 250,AED 900,2024 +Realme,13+ 5G 256GB,185g,8GB,16MP,50MP + 2MP,MediaTek Dimensity 7200,"5,000mAh",6.5 inches,"PKR 64,999","INR 24,999","CNY 1,900",USD 270,AED 970,2024 +Realme,13 5G 128GB,190g,6GB,16MP,50MP + 2MP,MediaTek Dimensity 6100+,"5,000mAh",6.6 inches,"PKR 49,999","INR 18,999","CNY 1,500",USD 220,AED 800,2024 +Realme,13 5G 256GB,190g,8GB,16MP,50MP + 2MP,MediaTek Dimensity 6100+,"5,000mAh",6.6 inches,"PKR 54,999","INR 20,999","CNY 1,600",USD 240,AED 860,2024 +Realme,13 Pro 5G 128GB,192g,8GB,16MP,50MP + 8MP + 2MP,Qualcomm Snapdragon 7s Gen 2,"5,200mAh",6.7 inches,"PKR 74,999","INR 27,999","CNY 2,200",USD 300,"AED 1,070",2024 +Realme,13 Pro 5G 256GB,192g,12GB,16MP,50MP + 8MP + 2MP,Qualcomm Snapdragon 7s Gen 2,"5,200mAh",6.7 inches,"PKR 79,999","INR 29,999","CNY 2,400",USD 320,"AED 1,140",2024 +Realme,13 Pro+ 5G 256GB,195g,12GB,32MP,50MP + 8MP + 50MP,Qualcomm Snapdragon 7+ Gen 2,"5,500mAh",6.78 inches,"PKR 94,999","INR 34,999","CNY 2,800",USD 360,"AED 1,320",2024 +Realme,13 Pro+ 5G 512GB,195g,16GB,32MP,50MP + 8MP + 50MP,Qualcomm Snapdragon 7+ Gen 2,"5,500mAh",6.78 inches,"PKR 99,999","INR 36,999","CNY 3,000",USD 380,"AED 1,390",2024 +Realme,P1 Speed 5G 128GB,185g,8GB,16MP,64MP + 2MP,MediaTek Dimensity 8100,"5,100mAh",6.7 inches,"PKR 54,999","INR 19,999","CNY 1,800",USD 250,AED 900,2024 +Realme,P1 Speed 5G 256GB,185g,12GB,16MP,64MP + 2MP,MediaTek Dimensity 8100,"5,100mAh",6.7 inches,"PKR 59,999","INR 21,999","CNY 1,900",USD 270,AED 960,2024 +Realme,P2 Pro 5G 256GB,188g,12GB,32MP,50MP + 8MP + 50MP,Qualcomm Snapdragon 7+ Gen 3,"5,500mAh",6.78 inches,"PKR 89,999","INR 32,999","CNY 2,500",USD 340,"AED 1,210",2024 +Realme,P2 Pro 5G 512GB,188g,16GB,32MP,50MP + 8MP + 50MP,Qualcomm Snapdragon 7+ Gen 3,"5,500mAh",6.78 inches,"PKR 94,999","INR 34,999","CNY 2,700",USD 360,"AED 1,280",2024 +Realme,P1 5G 128GB,184g,6GB,16MP,50MP + 2MP,MediaTek Dimensity 6100+,"5,000mAh",6.6 inches,"PKR 44,999","INR 16,999","CNY 1,400",USD 200,AED 720,2024 +Realme,P1 5G 256GB,184g,8GB,16MP,50MP + 2MP,MediaTek Dimensity 6100+,"5,000mAh",6.6 inches,"PKR 49,999","INR 18,999","CNY 1,500",USD 220,AED 780,2024 +Realme,P1 Pro 5G 128GB,190g,8GB,16MP,64MP + 2MP,Qualcomm Snapdragon 7s Gen 1,"5,200mAh",6.7 inches,"PKR 59,999","INR 22,999","CNY 1,900",USD 270,AED 960,2024 +Realme,P1 Pro 5G 256GB,190g,12GB,16MP,64MP + 2MP,Qualcomm Snapdragon 7s Gen 1,"5,200mAh",6.7 inches,"PKR 64,999","INR 24,999","CNY 2,000",USD 290,"AED 1,020",2024 +Realme,Narzo 70 Turbo 5G 128GB,200g,8GB,16MP,50MP + 2MP,MediaTek Dimensity 810,"5,000mAh",6.6 inches,"PKR 54,999","INR 19,999","CNY 1,700",USD 240,AED 860,2024 +Realme,Narzo 70 Turbo 5G 256GB,200g,8GB,16MP,50MP + 2MP,MediaTek Dimensity 810,"5,000mAh",6.6 inches,"PKR 59,999","INR 21,999","CNY 1,800",USD 260,AED 920,2024 +Realme,Narzo N61 128GB,195g,6GB,16MP,50MP + 2MP,MediaTek Helio G99,"5,000mAh",6.5 inches,"PKR 39,999","INR 14,999","CNY 1,200",USD 180,AED 660,2024 +Realme,Narzo N63 128GB,193g,6GB,16MP,50MP + 2MP,MediaTek Helio G88,"5,000mAh",6.5 inches,"PKR 37,999","INR 13,999","CNY 1,100",USD 160,AED 600,2024 +Realme,Narzo N65 5G 128GB,198g,8GB,16MP,50MP + 2MP,MediaTek Dimensity 700,"5,000mAh",6.6 inches,"PKR 47,999","INR 17,999","CNY 1,500",USD 210,AED 780,2024 +Realme,Narzo 70 5G 128GB,198g,8GB,16MP,50MP + 2MP,MediaTek Dimensity 810,"5,200mAh",6.6 inches,"PKR 52,999","INR 19,499","CNY 1,600",USD 230,AED 830,2024 +Realme,C75 128GB,190g,6GB,8MP,50MP + 2MP,MediaTek Helio G85,"5,000mAh",6.6 inches,"PKR 37,999","INR 13,999","CNY 1,100",USD 160,AED 600,2024 +Realme,C75 256GB,190g,8GB,8MP,50MP + 2MP,MediaTek Helio G85,"5,000mAh",6.6 inches,"PKR 42,999","INR 15,999","CNY 1,200",USD 180,AED 660,2024 +Realme,C61 128GB,189g,4GB,8MP,50MP + 2MP,Unisoc T612,"5,000mAh",6.5 inches,"PKR 32,999","INR 11,999",CNY 900,USD 130,AED 500,2024 +Realme,C67 128GB,195g,6GB,8MP,50MP + 2MP,MediaTek Helio G88,"5,000mAh",6.6 inches,"PKR 39,999","INR 14,999","CNY 1,200",USD 170,AED 620,2024 +Realme,C67 256GB,195g,8GB,8MP,50MP + 2MP,MediaTek Helio G88,"5,000mAh",6.6 inches,"PKR 44,999","INR 16,999","CNY 1,300",USD 190,AED 680,2024 +Realme,C65 128GB,192g,6GB,8MP,50MP + 2MP,Qualcomm Snapdragon 680,"5,000mAh",6.6 inches,"PKR 37,999","INR 13,999","CNY 1,100",USD 160,AED 600,2024 +Realme,C65 256GB,192g,8GB,8MP,50MP + 2MP,Qualcomm Snapdragon 680,"5,000mAh",6.6 inches,"PKR 42,999","INR 15,999","CNY 1,200",USD 180,AED 660,2024 +Realme,C63 128GB,191g,6GB,8MP,50MP + 2MP,MediaTek Helio G85,"5,000mAh",6.6 inches,"PKR 36,999","INR 13,499","CNY 1,050",USD 150,AED 580,2024 +Realme,C55 128GB,189g,6GB,8MP,64MP + 2MP,MediaTek Helio G88,"5,000mAh",6.72 inches,"PKR 39,999","INR 14,999","CNY 1,200",USD 170,AED 620,2023 +Realme,C55 256GB,189g,8GB,8MP,64MP + 2MP,MediaTek Helio G88,"5,000mAh",6.72 inches,"PKR 44,999","INR 16,999","CNY 1,300",USD 190,AED 680,2023 +Realme,Note 60x 128GB,198g,6GB,16MP,50MP + 2MP,MediaTek Dimensity 6100+,"5,200mAh",6.6 inches,"PKR 47,999","INR 17,999","CNY 1,500",USD 210,AED 780,2024 +Realme,Note 60 128GB,196g,6GB,16MP,50MP + 2MP,MediaTek Dimensity 810,"5,200mAh",6.6 inches,"PKR 49,999","INR 18,999","CNY 1,600",USD 220,AED 820,2024 +Realme,Note 60 256GB,196g,8GB,16MP,50MP + 2MP,MediaTek Dimensity 810,"5,200mAh",6.6 inches,"PKR 54,999","INR 20,999","CNY 1,700",USD 240,AED 880,2024 +Realme,Note 50 128GB,195g,6GB,16MP,50MP + 2MP,MediaTek Helio G99,"5,000mAh",6.5 inches,"PKR 42,999","INR 15,999","CNY 1,200",USD 170,AED 620,2024 +Realme,GT 7 128GB,199g,8GB,16MP,50MP + 8MP + 2MP,Qualcomm Snapdragon 8 Gen 2,"5,200mAh",6.8 inches,"PKR 124,999","INR 47,999","CNY 3,200",USD 440,"AED 1,620",2024 +Realme,GT 7 256GB,199g,12GB,16MP,50MP + 8MP + 2MP,Qualcomm Snapdragon 8 Gen 2,"5,200mAh",6.8 inches,"PKR 139,999","INR 53,999","CNY 3,600",USD 500,"AED 1,800",2024 +Realme,Neo 7 128GB,193g,8GB,16MP,64MP + 8MP + 2MP,MediaTek Dimensity 8200,"5,000mAh",6.7 inches,"PKR 79,999","INR 30,999","CNY 2,400",USD 330,"AED 1,200",2024 +Realme,Neo 7 256GB,193g,12GB,16MP,64MP + 8MP + 2MP,MediaTek Dimensity 8200,"5,000mAh",6.7 inches,"PKR 94,999","INR 36,999","CNY 2,800",USD 380,"AED 1,400",2024 +Realme,P2 Pro 5G 128GB,195g,8GB,16MP,50MP + 8MP,MediaTek Dimensity 9200,"5,100mAh",6.7 inches,"PKR 84,999","INR 32,999","CNY 2,500",USD 350,"AED 1,250",2024 +Realme,P2 Pro 5G 256GB,195g,12GB,16MP,50MP + 8MP,MediaTek Dimensity 9200,"5,100mAh",6.7 inches,"PKR 99,999","INR 38,999","CNY 2,900",USD 400,"AED 1,400",2024 +Realme,Pad 64GB,440g,4GB,8MP,8MP,MediaTek Helio G80,"7,100mAh",10.4 inches,"PKR 57,999","INR 19,999","CNY 1,400",USD 200,AED 740,2021 +Realme,Pad 128GB,440g,6GB,8MP,8MP,MediaTek Helio G80,"7,100mAh",10.4 inches,"PKR 64,999","INR 22,999","CNY 1,600",USD 230,AED 850,2021 +Realme,Pad 2 128GB,482g,6GB,8MP,8MP,MediaTek Helio G99,"8,360mAh",11.5 inches,"PKR 74,999","INR 27,999","CNY 2,000",USD 280,"AED 1,050",2023 +Realme,Pad 2 256GB,482g,8GB,8MP,8MP,MediaTek Helio G99,"8,360mAh",11.5 inches,"PKR 84,999","INR 31,999","CNY 2,300",USD 320,"AED 1,200",2023 +Realme,Pad 2 Lite 64GB,466g,4GB,8MP,8MP,MediaTek Helio G85,"7,100mAh",10.4 inches,"PKR 54,999","INR 18,999","CNY 1,300",USD 190,AED 700,2023 +Realme,Pad 2 Lite 128GB,466g,6GB,8MP,8MP,MediaTek Helio G85,"7,100mAh",10.4 inches,"PKR 61,999","INR 20,999","CNY 1,500",USD 210,AED 770,2023 +Realme,Pad X 64GB,499g,4GB,8MP,13MP,Qualcomm Snapdragon 695,"8,340mAh",11 inches,"PKR 79,999","INR 29,999","CNY 2,200",USD 310,"AED 1,150",2022 +Realme,Pad X 128GB,499g,6GB,8MP,13MP,Qualcomm Snapdragon 695,"8,340mAh",11 inches,"PKR 89,999","INR 33,999","CNY 2,500",USD 350,"AED 1,300",2022 +Realme,Pad Mini 32GB,372g,3GB,5MP,8MP,Unisoc T616,"6,400mAh",8.7 inches,"PKR 44,999","INR 15,999","CNY 1,100",USD 160,AED 600,2022 +Realme,Pad Mini 64GB,372g,4GB,5MP,8MP,Unisoc T616,"6,400mAh",8.7 inches,"PKR 49,999","INR 17,999","CNY 1,300",USD 180,AED 660,2022 +Realme,Pad Slim 64GB,440g,4GB,8MP,8MP,MediaTek Helio G80,"7,100mAh",10.4 inches,"PKR 56,999","INR 19,499","CNY 1,350",USD 200,AED 730,2022 +Realme,Pad Slim 128GB,440g,6GB,8MP,8MP,MediaTek Helio G80,"7,100mAh",10.4 inches,"PKR 62,999","INR 21,999","CNY 1,550",USD 220,AED 800,2022 +Realme,TechLife Pad Neo 64GB,465g,4GB,8MP,8MP,MediaTek Helio G85,"7,200mAh",10.5 inches,"PKR 59,999","INR 20,999","CNY 1,400",USD 210,AED 770,2024 +Realme,TechLife Pad Neo 128GB,465g,6GB,8MP,8MP,MediaTek Helio G85,"7,200mAh",10.5 inches,"PKR 64,999","INR 22,999","CNY 1,600",USD 230,AED 850,2024 +Xiaomi,Xiaomi 15 Pro 256GB,210g,12GB,32MP,50MP (Main) + 50MP (Ultra-wide) + 50MP (Telephoto),Snapdragon 8 Elite,"6,100mAh",6.73 inches,"PKR 199,999","INR 89,999","CNY 5,299",USD 799,"AED 3,299",2024 +Xiaomi,Xiaomi 15 Pro 512GB,210g,16GB,32MP,50MP (Main) + 50MP (Ultra-wide) + 50MP (Telephoto),Snapdragon 8 Elite,"6,100mAh",6.73 inches,"PKR 219,999","INR 99,999","CNY 5,799",USD 899,"AED 3,699",2024 +Xiaomi,Xiaomi 15 Pro 1TB,210g,16GB,32MP,50MP (Main) + 50MP (Ultra-wide) + 50MP (Telephoto),Snapdragon 8 Elite,"6,100mAh",6.73 inches,"PKR 239,999","INR 109,999","CNY 6,499",USD 999,"AED 4,099",2024 +Xiaomi,Xiaomi 15 256GB,190g,12GB,32MP,50MP (Main) + 50MP (Ultra-wide),Snapdragon 8 Elite,"5,400mAh",6.36 inches,"PKR 179,999","INR 79,999","CNY 4,299",USD 699,"AED 2,899",2024 +Xiaomi,Xiaomi 15 512GB,190g,16GB,32MP,50MP (Main) + 50MP (Ultra-wide),Snapdragon 8 Elite,"5,400mAh",6.36 inches,"PKR 199,999","INR 89,999","CNY 4,799",USD 799,"AED 3,299",2024 +Xiaomi,Xiaomi 14T Pro 256GB,209g,12GB,32MP,50MP (Main) + 50MP (Ultra-wide) + 50MP (Telephoto),Dimensity 9300+,"5,000mAh",6.67 inches,"PKR 169,999","INR 74,999","CNY 3,999",USD 634.99,"AED 2,699",2024 +Xiaomi,Xiaomi 14T Pro 512GB,209g,12GB,32MP,50MP (Main) + 50MP (Ultra-wide) + 50MP (Telephoto),Dimensity 9300+,"5,000mAh",6.67 inches,"PKR 189,999","INR 84,999","CNY 4,299",USD 790.77,"AED 2,999",2024 +Xiaomi,Xiaomi 14T Pro 1TB,209g,12GB,32MP,50MP (Main) + 50MP (Ultra-wide) + 50MP (Telephoto),Dimensity 9300+,"5,000mAh",6.67 inches,"PKR 209,999","INR 94,999","CNY 4,799",USD 899,"AED 3,299",2024 +Xiaomi,Xiaomi 14T 256GB,195g,12GB,32MP,50MP (Main) + 50MP (Ultra-wide),Dimensity 8300-Ultra,"5,000mAh",6.67 inches,"PKR 149,999","INR 69,999","CNY 3,499",USD 599,"AED 2,499",2024 +Xiaomi,Xiaomi 14T 512GB,195g,12GB,32MP,50MP (Main) + 50MP (Ultra-wide),Dimensity 8300-Ultra,"5,000mAh",6.67 inches,"PKR 169,999","INR 79,999","CNY 3,799",USD 699,"AED 2,799",2024 +Xiaomi,Xiaomi 14 Pro 256GB,206g,12GB,32MP,50MP (Main) + 50MP (Ultra-wide) + 50MP (Telephoto),Snapdragon 8 Gen 3,"5,000mAh",6.73 inches,"PKR 189,999","INR 84,999","CNY 4,799",USD 799,"AED 3,299",2023 +Xiaomi,Xiaomi 14 Pro 512GB,206g,12GB,32MP,50MP (Main) + 50MP (Ultra-wide) + 50MP (Telephoto),Snapdragon 8 Gen 3,"5,000mAh",6.73 inches,"PKR 209,999","INR 94,999","CNY 5,299",USD 899,"AED 3,699",2023 +Xiaomi,Xiaomi 14 256GB,189g,12GB,32MP,50MP (Main) + 50MP (Ultra-wide),Snapdragon 8 Gen 3,"4,610mAh",6.36 inches,"PKR 169,999","INR 74,999","CNY 3,999",USD 699,"AED 2,899",2023 +Xiaomi,Xiaomi 14 512GB,189g,12GB,32MP,50MP (Main) + 50MP (Ultra-wide),Snapdragon 8 Gen 3,"4,610mAh",6.36 inches,"PKR 189,999","INR 84,999","CNY 4,499",USD 799,"AED 3,299",2023 +Xiaomi,Redmi Note 14 Pro+ 5G 128GB,205g,8GB,16MP,200MP (Main) + 8MP (Ultra-wide) + 2MP (Macro),Snapdragon 7s Gen 3,"5,110mAh",6.67 inches,"PKR 89,999","INR 29,999","CNY 2,499",USD 374.90,"AED 1,499",2024 +Xiaomi,Redmi Note 14 Pro+ 5G 256GB,205g,12GB,16MP,200MP (Main) + 8MP (Ultra-wide) + 2MP (Macro),Snapdragon 7s Gen 3,"5,110mAh",6.67 inches,"PKR 99,999","INR 32,999","CNY 2,799",USD 399.00,"AED 1,599",2024 +Xiaomi,Redmi Note 14 Pro+ 5G 512GB,205g,16GB,16MP,200MP (Main) + 8MP (Ultra-wide) + 2MP (Macro),Snapdragon 7s Gen 3,"5,110mAh",6.67 inches,"PKR 109,999","INR 35,999","CNY 3,099",USD 429.00,"AED 1,699",2024 +Xiaomi,Redmi Note 14 Pro 5G 128GB,195g,8GB,16MP,108MP (Main) + 8MP (Ultra-wide) + 2MP (Macro),MediaTek Dimensity 7300-Ultra,"5,500mAh",6.67 inches,"PKR 79,999","INR 27,999","CNY 2,199",USD 349.00,"AED 1,399",2024 +Xiaomi,Redmi Note 14 Pro 5G 256GB,195g,12GB,16MP,108MP (Main) + 8MP (Ultra-wide) + 2MP (Macro),MediaTek Dimensity 7300-Ultra,"5,500mAh",6.67 inches,"PKR 89,999","INR 30,999","CNY 2,499",USD 379.00,"AED 1,499",2024 +Xiaomi,Redmi Note 14 Pro 4G 128GB,190g,6GB,16MP,108MP (Main) + 8MP (Ultra-wide) + 2MP (Macro),Qualcomm Snapdragon 732G,"5,000mAh",6.67 inches,"PKR 69,999","INR 24,999","CNY 1,999",USD 299.00,"AED 1,199",2024 +Xiaomi,Redmi Note 14 Pro 4G 256GB,190g,8GB,16MP,108MP (Main) + 8MP (Ultra-wide) + 2MP (Macro),Qualcomm Snapdragon 732G,"5,000mAh",6.67 inches,"PKR 79,999","INR 27,999","CNY 2,299",USD 329.00,"AED 1,299",2024 +Xiaomi,Redmi Note 14 5G 128GB,185g,6GB,16MP,50MP (Main) + 8MP (Ultra-wide) + 2MP (Macro),MediaTek Dimensity 7025-Ultra,"5,000mAh",6.67 inches,"PKR 59,999","INR 21,999","CNY 1,799",USD 279.00,"AED 1,099",2024 +Xiaomi,Redmi Note 14 5G 256GB,185g,8GB,16MP,50MP (Main) + 8MP (Ultra-wide) + 2MP (Macro),MediaTek Dimensity 7025-Ultra,"5,000mAh",6.67 inches,"PKR 69,999","INR 24,999","CNY 2,099",USD 309.00,"AED 1,199",2024 +Xiaomi,Redmi Note 14 4G 128GB,180g,4GB,16MP,50MP (Main) + 8MP (Ultra-wide) + 2MP (Macro),Qualcomm Snapdragon 680,"5,000mAh",6.67 inches,"PKR 49,999","INR 18,999","CNY 1,599",USD 249.00,AED 999,2024 +Xiaomi,Redmi Note 14 4G 256GB,180g,6GB,16MP,50MP (Main) + 8MP (Ultra-wide) + 2MP (Macro),Qualcomm Snapdragon 680,"5,000mAh",6.67 inches,"PKR 59,999","INR 21,999","CNY 1,899",USD 279.00,"AED 1,099",2024 +Xiaomi,Redmi 14C 5G 64GB,195g,4GB,8MP,50MP (Main) + 2MP (Depth),MediaTek Dimensity 700,"5,000mAh",6.5 inches,"PKR 39,999","INR 14,999","CNY 1,299",USD 199.00,AED 799,2024 +Xiaomi,Redmi 14C 5G 128GB,195g,6GB,8MP,50MP (Main) + 2MP (Depth),MediaTek Dimensity 700,"5,000mAh",6.5 inches,"PKR 44,999","INR 16,999","CNY 1,499",USD 229.00,AED 899,2024 +Lenovo,Legion Y70 128GB,209g,8GB,16MP,50MP,Snapdragon 8+ Gen 1,"5,100mAh",6.67 inches,"PKR 139,999","INR 49,999","CNY 3,299",USD 499,"AED 1,899",2022 +Lenovo,Legion Y70 256GB,209g,12GB,16MP,50MP,Snapdragon 8+ Gen 1,"5,100mAh",6.67 inches,"PKR 159,999","INR 54,999","CNY 3,699",USD 549,"AED 2,099",2022 +Lenovo,Legion Y70 512GB,209g,16GB,16MP,50MP,Snapdragon 8+ Gen 1,"5,100mAh",6.67 inches,"PKR 179,999","INR 59,999","CNY 4,199",USD 599,"AED 2,299",2022 +Lenovo,K14 Plus 64GB,198g,4GB,8MP,48MP,Unisoc T700,"5,000mAh",6.5 inches,"PKR 29,999","INR 10,999","CNY 1,299",USD 199,AED 749,2022 +Lenovo,K14 Plus 128GB,198g,6GB,8MP,48MP,Unisoc T700,"5,000mAh",6.5 inches,"PKR 34,999","INR 12,999","CNY 1,499",USD 229,AED 849,2022 +Lenovo,K13 Pro 128GB,200g,6GB,16MP,64MP,Snapdragon 662,"5,000mAh",6.8 inches,"PKR 39,999","INR 14,999","CNY 1,699",USD 249,AED 949,2021 +Lenovo,K13 32GB,190g,2GB,5MP,13MP,Unisoc SC9863A,"5,000mAh",6.52 inches,"PKR 19,999","INR 7,499",CNY 999,USD 149,AED 549,2021 +Lenovo,K13 Note 64GB,200g,4GB,8MP,48MP,Snapdragon 460,"5,000mAh",6.5 inches,"PKR 29,999","INR 11,999","CNY 1,299",USD 199,AED 749,2021 +Lenovo,K10 Plus 64GB,172g,4GB,16MP,13MP,Snapdragon 632,"4,050mAh",6.22 inches,"PKR 24,999","INR 10,999","CNY 1,199",USD 179,AED 699,2019 +Lenovo,A6 Note 32GB,172g,3GB,5MP,13MP,Helio P22,"4,000mAh",6.09 inches,"PKR 19,999","INR 9,999",CNY 999,USD 149,AED 549,2019 +Lenovo,K10 Note 64GB,164g,4GB,16MP,16MP,Snapdragon 710,"4,050mAh",6.3 inches,"PKR 29,999","INR 13,999","CNY 1,499",USD 219,AED 799,2019 +Lenovo,K10 Note 128GB,164g,6GB,16MP,16MP,Snapdragon 710,"4,050mAh",6.3 inches,"PKR 34,999","INR 15,999","CNY 1,699",USD 249,AED 899,2019 +Lenovo,Z6 Pro 128GB,185g,6GB,32MP,48MP,Snapdragon 855,"4,000mAh",6.39 inches,"PKR 69,999","INR 39,999","CNY 2,899",USD 429,"AED 1,599",2019 +Lenovo,Z6 Pro 256GB,185g,8GB,32MP,48MP,Snapdragon 855,"4,000mAh",6.39 inches,"PKR 79,999","INR 44,999","CNY 3,299",USD 479,"AED 1,799",2019 +Lenovo,Z5 Pro 64GB,210g,6GB,16MP,16MP,Snapdragon 710,"3,350mAh",6.39 inches,"PKR 49,999","INR 21,400","CNY 1,998",USD 299,"AED 1,099",2018 +Motorola,Edge 50 Fusion 128GB,168g,8GB,32MP,50MP,Snapdragon 7 Gen 1,"5,000mAh",6.7 inches,"PKR 139,999","INR 29,999","CNY 2,499",USD 499,"AED 1,899",2024 +Motorola,Edge 50 Fusion 256GB,168g,12GB,32MP,50MP,Snapdragon 7 Gen 1,"5,000mAh",6.7 inches,"PKR 159,999","INR 34,999","CNY 2,799",USD 549,"AED 2,099",2024 +Motorola,Edge 50 Pro 128GB,186g,8GB,50MP,50MP,Snapdragon 7 Gen 3,"4,500mAh",6.7 inches,"PKR 169,999","INR 34,999","CNY 2,999",USD 549,"AED 2,099",2024 +Motorola,Edge 50 Pro 256GB,186g,12GB,50MP,50MP,Snapdragon 7 Gen 3,"4,500mAh",6.7 inches,"PKR 189,999","INR 39,999","CNY 3,299",USD 599,"AED 2,299",2024 +Motorola,Razr 128GB,192g,8GB,32MP,50MP,Snapdragon 8+ Gen 1,"3,500mAh","6.7 inches (main), 2.7 inches (external)","PKR 199,999","INR 59,999","CNY 5,999",USD 999,"AED 3,699",2023 +Motorola,Razr 256GB,192g,12GB,32MP,50MP,Snapdragon 8+ Gen 1,"3,500mAh","6.7 inches (main), 2.7 inches (external)","PKR 219,999","INR 64,999","CNY 6,499","USD 1,099","AED 3,999",2023 +Motorola,G84 5G 128GB,166g,8GB,16MP,50MP,Snapdragon 695,"5,000mAh",6.5 inches,"PKR 79,999","INR 19,999","CNY 1,799",USD 299,"AED 1,099",2023 +Motorola,G84 5G 256GB,166g,12GB,16MP,50MP,Snapdragon 695,"5,000mAh",6.5 inches,"PKR 89,999","INR 22,999","CNY 1,999",USD 349,"AED 1,299",2023 +Motorola,Moto G Stylus 64GB,195g,4GB,16MP,50MP,MediaTek Helio G88,"5,000mAh",6.8 inches,"PKR 49,999","INR 21,999","CNY 1,499",USD 199,AED 799,2023 +Motorola,Moto G Stylus 128GB,195g,6GB,16MP,50MP,MediaTek Helio G88,"5,000mAh",6.8 inches,"PKR 54,999","INR 24,999","CNY 1,699",USD 249,AED 899,2023 +Motorola,One Vision 3 128GB,180g,6GB,25MP,48MP,Exynos 9609,"3,500mAh",6.3 inches,"PKR 39,999","INR 19,999","CNY 1,399",USD 299,"AED 1,099",2024 +Motorola,One Vision 3 256GB,180g,8GB,25MP,48MP,Exynos 9609,"3,500mAh",6.3 inches,"PKR 44,999","INR 22,999","CNY 1,599",USD 349,"AED 1,299",2024 +Motorola,Edge 50 Lite 128GB,170g,6GB,32MP,64MP,Snapdragon 695,"5,000mAh",6.7 inches,"PKR 59,999","INR 27,999","CNY 2,199",USD 399,"AED 1,499",2024 +Motorola,Edge 50 Lite 256GB,170g,8GB,32MP,64MP,Snapdragon 695,"5,000mAh",6.7 inches,"PKR 64,999","INR 29,999","CNY 2,399",USD 449,"AED 1,699",2024 +Motorola,Moto E40 Plus 64GB,198g,4GB,8MP,48MP,Unisoc T700,"5,000mAh",6.5 inches,"PKR 29,999","INR 11,999","CNY 1,299",USD 199,AED 749,2023 +Motorola,Moto E40 Plus 128GB,198g,6GB,8MP,48MP,Unisoc T700,"5,000mAh",6.5 inches,"PKR 34,999","INR 13,999","CNY 1,499",USD 229,AED 849,2023 +Motorola,Moto G Power 64GB,206g,4GB,16MP,50MP,Snapdragon 662,"5,000mAh",6.6 inches,"PKR 39,999","INR 17,999","CNY 1,599",USD 249,AED 949,2022 +Motorola,Moto G Power 128GB,206g,6GB,16MP,50MP,Snapdragon 662,"5,000mAh",6.6 inches,"PKR 44,999","INR 19,999","CNY 1,799",USD 279,"AED 1,049",2022 +Motorola,Moto G Play 32GB,203g,3GB,5MP,13MP,MediaTek Helio G25,"5,000mAh",6.5 inches,"PKR 24,999","INR 9,999",CNY 999,USD 149,AED 549,2022 +Motorola,Moto G Play 64GB,203g,4GB,5MP,13MP,MediaTek Helio G25,"5,000mAh",6.5 inches,"PKR 29,999","INR 11,999","CNY 1,199",USD 179,AED 649,2022 +Motorola,Moto G75 5G 128GB,205g,8GB,16MP,50MP,Snapdragon 6 Gen 3,"5,000mAh",6.78 inches,"PKR 89,999","INR 34,999","CNY 2,699",USD 320,"AED 1,175",2024 +Motorola,Moto G75 5G 256GB,205g,8GB,16MP,50MP,Snapdragon 6 Gen 3,"5,000mAh",6.78 inches,"PKR 99,999","INR 39,999","CNY 2,999",USD 370,"AED 1,350",2024 +Motorola,Moto S50 128GB,190g,8GB,32MP,64MP,MediaTek Dimensity 8100,"4,500mAh",6.7 inches,"PKR 79,999","INR 29,999","CNY 2,499",USD 300,"AED 1,100",2024 +Motorola,Moto S50 256GB,190g,12GB,32MP,64MP,MediaTek Dimensity 8100,"4,500mAh",6.7 inches,"PKR 89,999","INR 34,999","CNY 2,799",USD 350,"AED 1,275",2024 +Motorola,Edge 50 Neo 256GB,171g,8GB,32MP,50MP,MediaTek Dimensity 7300,"4,310mAh",6.4 inches,"PKR 99,999","INR 39,999","CNY 2,999",USD 400,"AED 1,500",2024 +Motorola,Edge 50 Neo 512GB,171g,12GB,32MP,50MP,MediaTek Dimensity 7300,"4,310mAh",6.4 inches,"PKR 109,999","INR 44,999","CNY 3,299",USD 450,"AED 1,675",2024 +Motorola,Moto G55 128GB,182g,8GB,16MP,50MP,MediaTek Dimensity 7025,"5,000mAh",6.49 inches,"PKR 69,999","INR 26,999","CNY 2,199",USD 270,"AED 1,000",2024 +Motorola,Moto G55 256GB,182g,8GB,16MP,50MP,MediaTek Dimensity 7025,"5,000mAh",6.49 inches,"PKR 79,999","INR 29,999","CNY 2,499",USD 320,"AED 1,175",2024 +Motorola,Moto G35 128GB,188g,4GB,16MP,50MP,Unisoc T760,"5,000mAh",6.72 inches,"PKR 49,999","INR 18,999","CNY 1,599",USD 200,AED 750,2024 +Motorola,Moto G35 256GB,188g,8GB,16MP,50MP,Unisoc T760,"5,000mAh",6.72 inches,"PKR 59,999","INR 22,999","CNY 1,899",USD 250,AED 925,2024 +Motorola,Moto G45 128GB,183g,6GB,16MP,50MP,Snapdragon 6s Gen 3,"5,000mAh",6.5 inches,"PKR 59,999","INR 22,999","CNY 1,899",USD 250,AED 925,2024 +Motorola,Moto G45 256GB,183g,8GB,16MP,50MP,Snapdragon 6s Gen 3,"5,000mAh",6.5 inches,"PKR 69,999","INR 26,999","CNY 2,199",USD 300,"AED 1,100",2024 +Motorola,Edge 50 256GB,180g,8GB,32MP,50MP,Snapdragon 7s Gen 2,"4,700mAh",6.7 inches,"PKR 109,999","INR 44,999","CNY 3,299",USD 450,"AED 1,675",2024 +Motorola,Edge 50 512GB,180g,12GB,32MP,50MP,Snapdragon 7s Gen 2,"4,700mAh",6.7 inches,"PKR 119,999","INR 49,999","CNY 3,599",USD 500,"AED 1,850",2024 +Motorola,Razr 50 Ultra 512GB,189g,12GB,32MP,50MP,Snapdragon 8+ Gen 1,"4,000mAh","6.9 inches (internal), 4.0 inches (external)","PKR 249,999","INR 99,999","CNY 7,999","USD 1,199","AED 4,399",2024 +Motorola,Razr 50 256GB,188g,8GB,32MP,50MP,Snapdragon 7 Gen 1,"3,800mAh","6.7 inches (internal), 3.6 inches (external)","PKR 199,999","INR 79,999","CNY 5,999",USD 999,"AED 3,699",2024 +Motorola,Moto G85 128GB,173g,8GB,32MP,50MP,Snapdragon 6s Gen 3,"5,000mAh",6.67 inches,"PKR 79,999","INR 29,999","CNY 2,499",USD 320,"AED 1,175",2024 +Motorola,Moto G85 256GB,173g,12GB,32MP,50MP,Snapdragon 6s Gen 3,"5,000mAh",6.67 inches,"PKR 89,999","INR 34,999","CNY 2,799",USD 370,"AED 1,350",2024 +Motorola,S50 Neo 256GB,170g,8GB,32MP,50MP,MediaTek Dimensity 7200,"4,300mAh",6.5 inches,"PKR 69,999","INR 26,999","CNY 2,199",USD 300,"AED 1,100",2024 +Motorola,S50 Neo 512GB,170g,12GB,32MP,50MP,MediaTek Dimensity 7200,"4,300mAh",6.5 inches,"PKR 79,999","INR 29,999","CNY 2,499",USD 350,"AED 1,275",2024 +Motorola,Moto E14 64GB,180g,4GB,8MP,13MP,Unisoc T606,"5,000mAh",6.5 inches,"PKR 29,999","INR 11,999",CNY 999,USD 150,AED 550,2024 +Motorola,Moto E14 128GB,180g,4GB,8MP,13MP,Unisoc T606,"5,000mAh",6.5 inches,"PKR 34,999","INR 13,999","CNY 1,199",USD 180,AED 650,2024 +Motorola,Edge 256GB,174g,8GB,32MP,50MP,Snapdragon 7s Gen 2,"4,700mAh",6.7 inches,"PKR 109,999","INR 44,999","CNY 3,299",USD 450,"AED 1,675",2024 +Motorola,Edge 512GB,174g,12GB,32MP,50MP,Snapdragon 7s Gen 2,"4,700mAh",6.7 inches,"PKR 119,999","INR 49,999","CNY 3,599",USD 500,"AED 1,850",2024 +Motorola,Moto X50 Ultra 512GB,198g,12GB,60MP,200MP,Snapdragon 8 Gen 3,"5,000mAh",6.9 inches,"PKR 299,999","INR 119,999","CNY 8,999","USD 1,499","AED 5,499",2024 +Motorola,Moto G Stylus 5G 256GB,195g,6GB,16MP,50MP,Snapdragon 6 Gen 1,"5,000mAh",6.8 inches,"PKR 69,999","INR 26,999","CNY 2,199",USD 300,"AED 1,100",2024 +Motorola,Moto G Stylus 5G 512GB,195g,8GB,16MP,50MP,Snapdragon 6 Gen 1,"5,000mAh",6.8 inches,"PKR 79,999","INR 29,999","CNY 2,499",USD 350,"AED 1,275",2024 +Motorola,Edge 50 Ultra 512GB,198g,12GB,60MP,200MP,Snapdragon 8 Gen 3,"5,000mAh",6.9 inches,"PKR 299,999","INR 119,999","CNY 8,999","USD 1,499","AED 5,499",2024 +Motorola,Edge 30 Fusion 128GB,168g,8GB,32MP,50MP,Snapdragon 888+ 5G,"4,400mAh",6.55 inches,"PKR 119,999","INR 49,999","CNY 3,999",USD 699,"AED 2,599",2022 +Motorola,Edge 30 Fusion 256GB,168g,12GB,32MP,50MP,Snapdragon 888+ 5G,"4,400mAh",6.55 inches,"PKR 129,999","INR 54,999","CNY 4,299",USD 749,"AED 2,799",2022 +Motorola,Edge 30 Neo 128GB,155g,6GB,32MP,64MP,Snapdragon 695 5G,"4,020mAh",6.28 inches,"PKR 89,999","INR 34,999","CNY 2,499",USD 499,"AED 1,799",2022 +Motorola,Edge 30 Neo 256GB,155g,8GB,32MP,64MP,Snapdragon 695 5G,"4,020mAh",6.28 inches,"PKR 99,999","INR 39,999","CNY 2,799",USD 549,"AED 1,999",2022 +Motorola,Moto G82 5G 128GB,173g,6GB,16MP,50MP,Snapdragon 695 5G,"5,000mAh",6.6 inches,"PKR 64,999","INR 24,999","CNY 1,999",USD 399,"AED 1,499",2022 +Motorola,Moto G82 5G 256GB,173g,8GB,16MP,50MP,Snapdragon 695 5G,"5,000mAh",6.6 inches,"PKR 74,999","INR 29,999","CNY 2,299",USD 449,"AED 1,699",2022 +Motorola,Moto G62 5G 128GB,184g,4GB,16MP,50MP,Snapdragon 480+ 5G,"5,000mAh",6.5 inches,"PKR 54,999","INR 19,999","CNY 1,599",USD 349,"AED 1,299",2022 +Motorola,Moto G62 5G 256GB,184g,6GB,16MP,50MP,Snapdragon 480+ 5G,"5,000mAh",6.5 inches,"PKR 64,999","INR 24,999","CNY 1,899",USD 399,"AED 1,499",2022 +Motorola,Moto G42 128GB,175g,4GB,16MP,50MP,Snapdragon 680 4G,"5,000mAh",6.4 inches,"PKR 44,999","INR 16,999","CNY 1,399",USD 299,"AED 1,099",2022 +Motorola,Moto G32 128GB,184g,4GB,16MP,50MP,Snapdragon 680 4G,"5,000mAh",6.5 inches,"PKR 39,999","INR 14,999","CNY 1,299",USD 279,AED 999,2022 +Motorola,Moto E32s 64GB,185g,3GB,8MP,16MP,MediaTek Helio G37,"5,000mAh",6.5 inches,"PKR 29,999","INR 11,999",CNY 999,USD 199,AED 749,2022 +Motorola,Moto E22i 32GB,169g,2GB,5MP,16MP,MediaTek Helio G37,"4,020mAh",6.5 inches,"PKR 24,999","INR 9,999",CNY 899,USD 179,AED 699,2022 +Motorola,Moto E22 64GB,169g,4GB,5MP,16MP,MediaTek Helio G37,"4,020mAh",6.5 inches,"PKR 27,999","INR 10,999",CNY 999,USD 199,AED 749,2022 +Motorola,Moto G22 64GB,185g,4GB,16MP,50MP,MediaTek Helio G37,"5,000mAh",6.5 inches,"PKR 34,999","INR 12,999","CNY 1,199",USD 249,AED 899,2022 +Huawei,P50,181g,8GB,13MP,50MP,Snapdragon 888 4G,"4,100mAh",6.5 inches,"PKR 129,999","INR 59,999","CNY 4,488",USD 699,"AED 2,599",2021 +Huawei,P50 Pro,195g,8GB,13MP,50MP,Snapdragon 888 4G,"4,360mAh",6.6 inches,"PKR 149,999","INR 79,999","CNY 5,988",USD 899,"AED 3,299",2021 +Huawei,P50 Pocket,190g,8GB,10.7MP,40MP,Snapdragon 888 4G,"4,000mAh",6.9 inches (unfolded),"PKR 199,999","INR 129,999","CNY 8,988","USD 1,299","AED 4,799",2021 +Huawei,Mate 40E,188g,8GB,13MP,64MP,Kirin 990E 5G,"4,200mAh",6.5 inches,"PKR 139,999","INR 69,999","CNY 4,599",USD 799,"AED 2,999",2021 +Huawei,Mate X2,295g,8GB,16MP,50MP,Kirin 9000 5G,"4,500mAh",8.0 inches (unfolded),"PKR 349,999","INR 249,999","CNY 17,999","USD 2,699","AED 9,999",2021 +Huawei,Nova 9,175g,8GB,32MP,50MP,Snapdragon 778G 4G,"4,300mAh",6.57 inches,"PKR 89,999","INR 37,999","CNY 2,699",USD 499,"AED 1,899",2021 +Huawei,Nova 9 Pro,186g,8GB,Dual 32MP,50MP,Snapdragon 778G 4G,"4,000mAh",6.72 inches,"PKR 109,999","INR 44,999","CNY 3,499",USD 599,"AED 2,199",2021 +Huawei,P50E,181g,8GB,13MP,50MP,Snapdragon 778G 4G,"4,100mAh",6.5 inches,"PKR 119,999","INR 54,999","CNY 4,088",USD 649,"AED 2,399",2022 +Huawei,Mate Xs 2,255g,8GB,10.7MP,50MP,Snapdragon 888 4G,"4,600mAh",7.8 inches (unfolded),"PKR 299,999","INR 199,999","CNY 14,999","USD 2,499","AED 8,999",2022 +Huawei,Mate 50,202g,8GB,13MP,50MP,Snapdragon 8+ Gen 1 4G,"4,460mAh",6.7 inches,"PKR 169,999","INR 84,999","CNY 6,299",USD 999,"AED 3,699",2022 +Huawei,Mate 50 Pro,205g,8GB,13MP,50MP,Snapdragon 8+ Gen 1 4G,"4,700mAh",6.74 inches,"PKR 189,999","INR 99,999","CNY 7,299","USD 1,199","AED 4,399",2022 +Huawei,Nova 10,168g,8GB,60MP,50MP,Snapdragon 778G 4G,"4,000mAh",6.67 inches,"PKR 99,999","INR 39,999","CNY 2,699",USD 499,"AED 1,899",2022 +Huawei,Nova 10 Pro,191g,8GB,Dual 60MP,50MP,Snapdragon 778G 4G,"4,500mAh",6.78 inches,"PKR 119,999","INR 49,999","CNY 3,499",USD 599,"AED 2,199",2022 +Huawei,Nova 10 SE,184g,8GB,16MP,108MP,Snapdragon 680 4G,"4,500mAh",6.67 inches,"PKR 79,999","INR 34,999","CNY 2,299",USD 399,"AED 1,499",2022 +Huawei,P60,197g,8GB,13MP,48MP (wide) + 13MP (ultrawide) + 48MP (telephoto),Snapdragon 8+ Gen 1 4G,"4,815mAh",6.67 inches,"PKR 169,999","INR 84,999","CNY 6,988",USD 999,"AED 3,699",2023 +Huawei,P60 Pro,200g,8GB / 12GB,13MP,48MP (wide) + 13MP (ultrawide) + 48MP (telephoto),Snapdragon 8+ Gen 1 4G,"4,815mAh",6.67 inches,"PKR 189,999","INR 99,999","CNY 7,988","USD 1,099","AED 4,199",2023 +Huawei,P60 Art,206g,8GB / 12GB,13MP,48MP (wide) + 40MP (ultrawide) + 48MP (telephoto),Snapdragon 8+ Gen 1 4G,"5,100mAh",6.73 inches,"PKR 219,999","INR 119,999","CNY 8,988","USD 1,299","AED 4,799",2023 +Huawei,Mate X3,239g,12GB,8MP,50MP (wide) + 13MP (ultrawide) + 12MP (periscope telephoto),Snapdragon 8+ Gen 1 4G,"4,800mAh",7.85 inches (unfolded),"PKR 349,999","INR 249,999","CNY 13,999","USD 2,499","AED 9,999",2023 +Huawei,Mate 60,209g,12GB,13MP,50MP (wide) + 12MP (ultrawide) + 12MP (telephoto),Kirin 9000S,"4,750mAh",6.7 inches,"PKR 199,999","INR 109,999","CNY 6,999","USD 1,099","AED 4,099",2023 +Huawei,Mate 60 Pro,225g,12GB,13MP,50MP (wide) + 40MP (ultrawide) + 48MP (telephoto),Kirin 9000S,"5,000mAh",6.82 inches,"PKR 229,999","INR 129,999","CNY 7,999","USD 1,299","AED 4,699",2023 +Huawei,Mate 60 Pro+,235g,12GB,13MP,50MP (wide) + 48MP (ultrawide) + 48MP (telephoto),Kirin 9000S,"5,200mAh",6.82 inches,"PKR 249,999","INR 149,999","CNY 8,999","USD 1,499","AED 5,199",2023 +Huawei,Nova 11,168g,8GB,60MP,50MP (wide) + 8MP (ultrawide),Snapdragon 778G 4G,"4,500mAh",6.7 inches,"PKR 89,999","INR 44,999","CNY 2,999",USD 499,"AED 1,899",2023 +Huawei,Nova 11 Pro,188g,8GB,60MP (ultrawide) + 8MP (telephoto),50MP (wide) + 8MP (ultrawide),Snapdragon 778G 4G,"4,500mAh",6.78 inches,"PKR 109,999","INR 54,999","CNY 3,499",USD 599,"AED 2,199",2023 +Huawei,Nova 11 Ultra,188g,12GB,60MP (ultrawide) + 8MP (telephoto),50MP (wide) + 8MP (ultrawide),Snapdragon 778G 4G,"4,500mAh",6.78 inches,"PKR 129,999","INR 64,999","CNY 3,999",USD 699,"AED 2,499",2023 +Huawei,Pura 70,220g,12GB,13MP,50MP + 13MP + 12MP,Kirin 9010,"4,900mAh",6.8 inches,"PKR 169,999","INR 84,999","CNY 6,988",USD 999,"AED 3,699",2024 +Huawei,Pura 70 Pro,220g,12GB,13MP,50MP + 12.5MP + 48MP,Kirin 9010,"5,050mAh",6.8 inches,"PKR 189,999","INR 99,999","CNY 7,988","USD 1,099","AED 4,199",2024 +Huawei,Pura 70 Pro+,220g,12GB,13MP,50MP + 12.5MP + 48MP,Kirin 9010,"5,050mAh",6.8 inches,"PKR 209,999","INR 114,999","CNY 8,988","USD 1,199","AED 4,699",2024 +Huawei,Pura 70 Ultra,226g,16GB,13MP,50MP + 40MP + 50MP,Kirin 9010,"5,200mAh",6.8 inches,"PKR 229,999","INR 129,999","CNY 9,988","USD 1,299","AED 5,199",2024 +Huawei,Mate 70,220g,12GB,13MP,50MP + 12MP,Kirin 9010,"4,900mAh",6.7 inches,"PKR 179,999","INR 89,999","CNY 5,499",USD 899,"AED 3,399",2024 +Huawei,Mate 70 Pro,220g,12GB,13MP,50MP + 12MP + 40MP,Kirin 9010,"5,000mAh",6.8 inches,"PKR 199,999","INR 104,999","CNY 6,499",USD 999,"AED 3,899",2024 +Huawei,Mate 70 Pro+,220g,12GB,13MP,50MP + 12MP + 40MP,Kirin 9010,"5,000mAh",6.8 inches,"PKR 219,999","INR 119,999","CNY 7,499","USD 1,099","AED 4,399",2024 +Huawei,Mate X6,241g,12GB,8MP,50MP + 13MP + 12MP,Kirin 9010,"4,800mAh",7.93 inches,"PKR 349,999","INR 249,999","CNY 12,999","USD 2,499","AED 9,999",2024 +Huawei,Nova 12,168g,8GB,60MP,50MP + 8MP,Kirin 9000S,"4,500mAh",6.7 inches,"PKR 89,999","INR 44,999","CNY 2,999",USD 499,"AED 1,899",2024 +Huawei,Nova 12 Pro,188g,8GB,60MP + 8MP,50MP + 8MP,Kirin 9000S,"4,500mAh",6.78 inches,"PKR 109,999","INR 54,999","CNY 3,499",USD 599,"AED 2,199",2024 +Huawei,Mate XT 256GB,245g,12GB,13MP,50MP + 12MP + 48MP,Kirin 9010,"5,000mAh",7.92 inches,"PKR 359,999","INR 259,999","CNY 13,499","USD 2,599","AED 10,499",2024 +Huawei,Mate XT 512GB,245g,12GB,13MP,50MP + 12MP + 48MP,Kirin 9010,"5,000mAh",7.92 inches,"PKR 389,999","INR 274,999","CNY 14,499","USD 2,799","AED 11,099",2024 +Huawei,Nova 13 256GB,170g,8GB,50MP,50MP + 8MP,Kirin 9000S,"4,600mAh",6.7 inches,"PKR 94,999","INR 47,999","CNY 3,199",USD 529,"AED 1,999",2024 +Huawei,Nova 13 512GB,170g,8GB,50MP,50MP + 8MP,Kirin 9000S,"4,600mAh",6.7 inches,"PKR 109,999","INR 54,999","CNY 3,699",USD 599,"AED 2,299",2024 +Huawei,Nova 13 Pro 256GB,190g,8GB,60MP + 8MP,50MP + 8MP,Kirin 9000S,"4,600mAh",6.78 inches,"PKR 119,999","INR 59,999","CNY 3,999",USD 649,"AED 2,399",2024 +Huawei,Nova 13 Pro 512GB,190g,8GB,60MP + 8MP,50MP + 8MP,Kirin 9000S,"4,600mAh",6.78 inches,"PKR 134,999","INR 67,999","CNY 4,499",USD 729,"AED 2,699",2024 +Nokia,G42 5G 128GB,193g,4GB,8MP,50MP,Snapdragon 480+,"5,000mAh",6.56 inches,"PKR 74,999","INR 18,999","CNY 1,499",USD 229,AED 849,2023 +Nokia,G20 64GB,197g,4GB,8MP,48MP,MediaTek G35,"5,050mAh",6.52 inches,"PKR 48,999","INR 12,499",CNY 999,USD 169,AED 629,2021 +Nokia,G20 128GB,197g,4GB,8MP,48MP,MediaTek G35,"5,050mAh",6.52 inches,"PKR 54,999","INR 13,999","CNY 1,199",USD 189,AED 699,2021 +Nokia,C32 64GB,199g,3GB,8MP,50MP,Unisoc SC9863A,"5,000mAh",6.52 inches,"PKR 39,999","INR 9,999",CNY 899,USD 139,AED 499,2023 +Nokia,C32 128GB,199g,4GB,8MP,50MP,Unisoc SC9863A,"5,000mAh",6.52 inches,"PKR 44,999","INR 10,999",CNY 999,USD 159,AED 549,2023 +Nokia,G21 64GB,190g,4GB,8MP,50MP,Unisoc T606,"5,050mAh",6.5 inches,"PKR 46,999","INR 11,999","CNY 1,099",USD 169,AED 619,2022 +Nokia,G21 128GB,190g,6GB,8MP,50MP,Unisoc T606,"5,050mAh",6.5 inches,"PKR 52,999","INR 13,999","CNY 1,299",USD 189,AED 699,2022 +Nokia,C22 64GB,190g,2GB,8MP,13MP,Unisoc SC9863A,"5,000mAh",6.5 inches,"PKR 34,999","INR 8,499",CNY 799,USD 119,AED 449,2023 +Nokia,C22 128GB,190g,3GB,8MP,13MP,Unisoc SC9863A,"5,000mAh",6.5 inches,"PKR 38,999","INR 9,499",CNY 899,USD 139,AED 499,2023 +Nokia,G400 128GB,198g,6GB,16MP,48MP,Snapdragon 480,"5,000mAh",6.58 inches,"PKR 79,999","INR 22,999","CNY 1,799",USD 239,AED 899,2022 +Sony,Xperia 1 IV 256GB,185g,12GB,12MP,12MP,Snapdragon 8 Gen 1,"5,000mAh",6.5 inches,"PKR 429,999","INR 119,999","CNY 7,299","USD 1,599","AED 5,799",2022 +Sony,Xperia 5 IV 128GB,172g,8GB,12MP,12MP,Snapdragon 8 Gen 1,"5,000mAh",6.1 inches,"PKR 319,999","INR 89,999","CNY 5,999",USD 999,"AED 3,799",2022 +Sony,Xperia 10 IV 128GB,161g,6GB,8MP,12MP,Snapdragon 695,"5,000mAh",6.0 inches,"PKR 179,999","INR 49,999","CNY 3,299",USD 499,"AED 1,799",2022 +Sony,Xperia 1 V 256GB,187g,12GB,12MP,48MP,Snapdragon 8 Gen 2,"5,000mAh",6.5 inches,"PKR 449,999","INR 124,999","CNY 7,999","USD 1,699","AED 5,999",2023 +Sony,Xperia 5 V 128GB,178g,8GB,12MP,48MP,Snapdragon 8 Gen 2,"5,000mAh",6.1 inches,"PKR 339,999","INR 94,999","CNY 6,299","USD 1,099","AED 4,099",2023 +Sony,Xperia 10 V 128GB,164g,6GB,8MP,48MP,Snapdragon 695,"5,000mAh",6.1 inches,"PKR 199,999","INR 54,999","CNY 3,699",USD 599,"AED 1,999",2023 +Sony,Xperia 1 VI 256GB,190g,12GB,12MP,48MP,Snapdragon 8 Gen 3,"5,000mAh",6.5 inches,"PKR 469,999","INR 129,999","CNY 8,499","USD 1,799","AED 6,199",2024 +Sony,Xperia 5 VI 128GB,180g,8GB,12MP,48MP,Snapdragon 8 Gen 3,"5,000mAh",6.1 inches,"PKR 349,999","INR 99,999","CNY 6,599","USD 1,199","AED 4,399",2024 +Sony,Xperia 10 VI 128GB,167g,6GB,8MP,48MP,Snapdragon 7 Gen 1,"5,000mAh",6.1 inches,"PKR 209,999","INR 59,999","CNY 3,999",USD 699,"AED 2,199",2024 +Nokia,T21,466g,4GB,8MP,8MP,Unisoc T612,8200mAh,10.4 inches,"PKR 52,000","INR 17,999","CNY 1,250","USD 396,22",AED 870,2022 +Huawei,MatePad Pro 12.2 512GB,508g,12GB,16MP,"13MP (f/1.8, AF)",Kirin 9000S,"10,100mAh",12.2 inches,"PKR 161,500","INR 49,990","CNY 4,799",USD 999,"AED 2,199",2024 +Huawei,MatePad Pro 13.2 512GB,580g,12GB,16MP,"13MP (f/1.8, AF)",Kirin 9000S,"10,100mAh",13.2 inches,"PKR 197,000","INR 58,590","CNY 5,199",USD 877,"AED 2,199",2024 +Google,Pixel 3a 64GB,147g,4GB,8MP,12.2MP,Snapdragon 670,"3,000mAh",5.6 inches,"PKR 69,999","INR 39,999","CNY 2,899",USD 399,"AED 1,599",2019 +Google,Pixel 3a XL 64GB,167g,4GB,8MP,12.2MP,Snapdragon 670,"3,700mAh",6.0 inches,"PKR 79,999","INR 44,999","CNY 3,299",USD 479,"AED 1,799",2019 +Google,Pixel 4 64GB,162g,6GB,8MP,12.2MP,Snapdragon 855,"2,800mAh",5.7 inches,"PKR 119,999","INR 59,999","CNY 4,799",USD 799,"AED 3,199",2019 +Google,Pixel 4 XL 64GB,193g,6GB,8MP,12.2MP,Snapdragon 855,"3,700mAh",6.3 inches,"PKR 139,999","INR 69,999","CNY 5,499",USD 899,"AED 3,599",2019 +Google,Pixel 4a 128GB,143g,6GB,8MP,12.2MP,Snapdragon 730G,"3,140mAh",5.8 inches,"PKR 89,999","INR 31,999","CNY 2,999",USD 349,"AED 1,399",2020 +Google,Pixel 4a 5G 128GB,168g,6GB,8MP,12.2MP,Snapdragon 765G,"3,885mAh",6.2 inches,"PKR 109,999","INR 37,999","CNY 3,799",USD 499,"AED 1,999",2020 +Google,Pixel 5 128GB,151g,8GB,8MP,12.2MP,Snapdragon 765G,"4,080mAh",6.0 inches,"PKR 139,999","INR 49,999","CNY 4,599",USD 699,"AED 2,799",2020 +Google,Pixel 5a 128GB,183g,6GB,8MP,12.2MP,Snapdragon 765G,"4,680mAh",6.34 inches,"PKR 109,999","INR 42,999","CNY 3,999",USD 449,"AED 1,799",2021 +Google,Pixel 6 128GB,207g,8GB,8MP,50MP,Google Tensor,"4,614mAh",6.4 inches,"PKR 159,999","INR 59,999","CNY 5,999",USD 699,"AED 2,999",2021 +Google,Pixel 6 Pro 256GB,210g,12GB,11.1MP,50MP,Google Tensor,"5,003mAh",6.71 inches,"PKR 199,999","INR 79,999","CNY 7,199",USD 899,"AED 3,499",2021 +Google,Pixel 6a 128GB,178g,6GB,8MP,12.2MP,Google Tensor,"4,410mAh",6.1 inches,"PKR 129,999","INR 43,999","CNY 4,299",USD 449,"AED 1,999",2022 +Google,Pixel 7 128GB,197g,8GB,10.8MP,50MP,Google Tensor G2,"4,355mAh",6.3 inches,"PKR 169,999","INR 64,999","CNY 6,199",USD 599,"AED 2,399",2022 +Google,Pixel 7 Pro 256GB,212g,12GB,10.8MP,50MP,Google Tensor G2,"5,000mAh",6.7 inches,"PKR 229,999","INR 89,999","CNY 7,999",USD 899,"AED 3,599",2022 +Google,Pixel 7a 128GB,193g,8GB,10.8MP,64MP,Google Tensor G2,"4,385mAh",6.1 inches,"PKR 139,999","INR 44,999","CNY 4,599",USD 499,"AED 2,199",2023 +Google,Pixel 8 128GB,187g,8GB,10.5MP,50MP,Google Tensor G3,"4,575mAh",6.2 inches,"PKR 179,999","INR 69,999","CNY 6,399",USD 699,"AED 2,799",2023 +Google,Pixel 8 Pro 256GB,213g,12GB,10.5MP,50MP,Google Tensor G3,"5,050mAh",6.7 inches,"PKR 249,999","INR 99,999","CNY 8,499",USD 999,"AED 3,999",2023 +Google,Pixel 8a 128GB,194g,8GB,10.5MP,64MP,Google Tensor G3,"4,385mAh",6.1 inches,"PKR 149,999","INR 49,999","CNY 4,999",USD 549,"AED 2,399",2024 +Google,Pixel 9 128GB,195g,8GB,10.8MP,50MP,Google Tensor G4,"4,600mAh",6.3 inches,"PKR 189,999","INR 74,999","CNY 6,599",USD 799,"AED 3,199",2024 +Google,Pixel 9 Pro 256GB,216g,12GB,10.8MP,50MP,Google Tensor G4,"5,050mAh",6.7 inches,"PKR 259,999","INR 109,999","CNY 8,799","USD 1,099","AED 4,199",2024 +Google,Pixel 9 Pro XL 512GB,222g,16GB,10.8MP,50MP,Google Tensor G4,"5,250mAh",6.8 inches,"PKR 299,999","INR 129,999","CNY 9,799","USD 1,299","AED 4,999",2024 +Google,Pixel 9 Pro Fold 512GB,250g,16GB,10.8MP,50MP,Google Tensor G4,"5,500mAh",7.6 inches,"PKR 399,999","INR 179,999","CNY 13,999","USD 1,799","AED 6,999",2024 +Tecno,Spark Go 1S 64GB,190g,4GB,8MP,13MP,MediaTek Helio A22,"5,000mAh",6.6 inches,"PKR 27,999","INR 9,999",CNY 799,USD 129,AED 499,2024 +Tecno,Megapad 11 256GB,450g,8GB,13MP,50MP,MediaTek G99,"8,000mAh",11 inches,"PKR 69,999","INR 29,999","CNY 2,499",USD 349,"AED 1,299",2024 +Tecno,Pop 9 4G 64GB,195g,3GB,5MP,8MP,Unisoc SC9863A,"5,000mAh",6.52 inches,"PKR 22,999","INR 7,499",CNY 599,USD 99,AED 399,2024 +Tecno,Megapad 128GB,420g,6GB,12MP,50MP,MediaTek Helio G80,"7,500mAh",10.9 inches,"PKR 59,999","INR 24,999","CNY 2,299",USD 299,"AED 1,099",2024 +Tecno,Camon 30S 256GB,198g,8GB,32MP,50MP,MediaTek Dimensity 810,"5,200mAh",6.8 inches,"PKR 89,999","INR 39,999","CNY 3,199",USD 499,"AED 1,999",2024 +Tecno,Spark 30C 5G 128GB,200g,6GB,16MP,50MP,MediaTek Dimensity 6100+,"5,000mAh",6.6 inches,"PKR 39,999","INR 14,999","CNY 1,199",USD 199,AED 749,2024 +Tecno,Spark 30 5G 128GB,195g,6GB,16MP,50MP,MediaTek Dimensity 6020,"5,000mAh",6.6 inches,"PKR 42,999","INR 16,999","CNY 1,399",USD 229,AED 849,2024 +Tecno,Pop 9 64GB,190g,3GB,5MP,8MP,Unisoc SC9832E,"5,000mAh",6.52 inches,"PKR 21,999","INR 6,999",CNY 549,USD 89,AED 349,2024 +Tecno,Spark 30 Pro 256GB,205g,8GB,32MP,50MP,MediaTek Helio G99,"5,200mAh",6.8 inches,"PKR 54,999","INR 19,999","CNY 1,799",USD 269,AED 999,2024 +Tecno,Spark 30 128GB,192g,4GB,16MP,50MP,MediaTek Helio G85,"5,000mAh",6.6 inches,"PKR 34,999","INR 12,999","CNY 1,099",USD 179,AED 699,2024 +Tecno,Phantom V Fold2 512GB,280g,12GB,32MP,64MP,MediaTek Dimensity 9200+,"5,500mAh",7.85 inches,"PKR 399,999","INR 169,999","CNY 12,999","USD 1,799","AED 6,999",2024 +Tecno,Phantom V Flip2 256GB,195g,8GB,32MP,50MP,MediaTek Dimensity 8050,"4,300mAh",6.9 inches,"PKR 159,999","INR 79,999","CNY 5,999",USD 999,"AED 3,999",2024 +Tecno,Pova 6 Neo 5G 256GB,225g,8GB,16MP,50MP,MediaTek Dimensity 810,"6,000mAh",6.8 inches,"PKR 69,999","INR 29,999","CNY 2,499",USD 349,"AED 1,299",2024 +Tecno,Spark 30C 128GB,190g,4GB,16MP,50MP,MediaTek Helio G85,"5,000mAh",6.6 inches,"PKR 32,999","INR 11,999",CNY 999,USD 149,AED 599,2024 +Tecno,Spark Go 1 64GB,195g,3GB,5MP,8MP,Unisoc SC9863A,"5,000mAh",6.52 inches,"PKR 22,999","INR 7,499",CNY 599,USD 99,AED 399,2024 +Tecno,Camon 30S Pro 512GB,202g,12GB,50MP,108MP,MediaTek Dimensity 9200,"5,200mAh",6.9 inches,"PKR 159,999","INR 79,999","CNY 6,999","USD 1,099","AED 4,199",2024 +Tecno,Spark 20P 128GB,195g,4GB,16MP,50MP,MediaTek Helio G85,"5,000mAh",6.6 inches,"PKR 37,999","INR 13,999","CNY 1,199",USD 179,AED 699,2024 +Tecno,Spark 20 Pro 5G 256GB,210g,8GB,32MP,50MP,MediaTek Dimensity 810,"5,200mAh",6.8 inches,"PKR 59,999","INR 24,999","CNY 2,299",USD 329,"AED 1,199",2024 +Tecno,Pova 6 Neo 256GB,230g,8GB,16MP,50MP,MediaTek Helio G99,"6,000mAh",6.8 inches,"PKR 55,999","INR 22,999","CNY 1,899",USD 299,"AED 1,099",2024 +Tecno,Camon 30 Premier 512GB,210g,12GB,50MP,108MP,MediaTek Dimensity 9200,"5,200mAh",6.9 inches,"PKR 179,999","INR 89,999","CNY 7,499","USD 1,199","AED 4,499",2024 +Tecno,Camon 30 Pro 512GB,205g,12GB,50MP,64MP,MediaTek Dimensity 8200,"5,200mAh",6.8 inches,"PKR 129,999","INR 64,999","CNY 5,499",USD 899,"AED 3,299",2024 +Tecno,Camon 30 5G 256GB,198g,8GB,32MP,50MP,MediaTek Dimensity 810,"5,000mAh",6.7 inches,"PKR 89,999","INR 39,999","CNY 3,199",USD 499,"AED 1,999",2024 +Tecno,Camon 30 128GB,195g,6GB,32MP,50MP,MediaTek Helio G99,"5,000mAh",6.7 inches,"PKR 69,999","INR 29,999","CNY 2,499",USD 349,"AED 1,299",2024 +Tecno,Pova 6 Pro 512GB,230g,12GB,32MP,64MP,MediaTek Dimensity 8100,"6,000mAh",6.9 inches,"PKR 159,999","INR 79,999","CNY 6,999","USD 1,099","AED 4,199",2024 +Tecno,Spark 20 Pro+ 256GB,210g,8GB,32MP,50MP,MediaTek Helio G99,"5,200mAh",6.8 inches,"PKR 54,999","INR 19,999","CNY 1,799",USD 269,AED 999,2024 +Tecno,Spark 20 Pro 128GB,195g,6GB,16MP,50MP,MediaTek Helio G85,"5,000mAh",6.6 inches,"PKR 39,999","INR 14,999","CNY 1,199",USD 199,AED 749,2024 +Tecno,Spark 20 128GB,192g,4GB,16MP,50MP,MediaTek Helio G85,"5,000mAh",6.6 inches,"PKR 34,999","INR 12,999","CNY 1,099",USD 179,AED 699,2024 +Tecno,Spark 20C 128GB,190g,4GB,16MP,50MP,MediaTek Helio G85,"5,000mAh",6.6 inches,"PKR 32,999","INR 11,999",CNY 999,USD 149,AED 599,2024 +Tecno,Spark Go 2024 64GB,195g,3GB,5MP,8MP,Unisoc SC9863A,"5,000mAh",6.52 inches,"PKR 22,999","INR 7,499",CNY 599,USD 99,AED 399,2024 +Tecno,Pop 8 64GB,195g,3GB,5MP,8MP,Unisoc SC9832E,"5,000mAh",6.52 inches,"PKR 21,999","INR 6,999",CNY 549,USD 89,AED 349,2024 +Tecno,Camon 20s Pro 5G 512GB,202g,12GB,50MP,108MP,MediaTek Dimensity 9200,"5,200mAh",6.9 inches,"PKR 159,999","INR 79,999","CNY 6,999","USD 1,099","AED 4,199",2024 +Tecno,Camon 20s Pro 256GB,202g,12GB,50MP,108MP,MediaTek Dimensity 810,"5,200mAh",6.9 inches,"PKR 129,999","INR 59,999","CNY 4,999",USD 899,"AED 3,499",2024 +Tecno,Camon 20s 256GB,200g,8GB,32MP,50MP,MediaTek Helio G99,"5,000mAh",6.7 inches,"PKR 79,999","INR 34,999","CNY 2,799",USD 449,"AED 1,799",2024 +Tecno,Camon 20 Premier 512GB,205g,12GB,50MP,108MP,MediaTek Dimensity 8200,"5,200mAh",6.8 inches,"PKR 149,999","INR 74,999","CNY 6,499","USD 1,049","AED 3,999",2024 +Tecno,Camon 20 Pro 5G 256GB,200g,8GB,32MP,50MP,MediaTek Dimensity 810,"5,000mAh",6.7 inches,"PKR 89,999","INR 39,999","CNY 3,199",USD 499,"AED 1,999",2024 +Tecno,Camon 20 Pro 128GB,198g,6GB,32MP,50MP,MediaTek Helio G99,"5,000mAh",6.7 inches,"PKR 69,999","INR 29,999","CNY 2,499",USD 349,"AED 1,299",2024 +Tecno,Camon 20 128GB,195g,6GB,32MP,50MP,MediaTek Helio G99,"5,000mAh",6.7 inches,"PKR 69,999","INR 29,999","CNY 2,499",USD 349,"AED 1,299",2024 +Tecno,Pova 5G 512GB,240g,8GB,32MP,50MP,MediaTek Dimensity 900,"6,000mAh",6.9 inches,"PKR 119,999","INR 54,999","CNY 4,499",USD 699,"AED 2,799",2024 +Tecno,Pova 5 256GB,230g,8GB,16MP,50MP,MediaTek Helio G99,"6,000mAh",6.8 inches,"PKR 59,999","INR 24,999","CNY 2,299",USD 329,"AED 1,199",2024 +Infinix,Xpad,450g,6GB,8MP,13MP,MediaTek Helio G99,"7,000mAh",10.1 inches,"PKR 54,999","INR 21,999","CNY 1,999",USD 299,"AED 1,099",2024 +Infinix,Xpad 5G,470g,8GB,16MP,50MP,MediaTek Dimensity 810,"8,000mAh",10.4 inches,"PKR 79,999","INR 29,999","CNY 2,499",USD 399,"AED 1,499",2024 +Infinix,Xpad Lite,420g,4GB,5MP,8MP,Unisoc T606,"6,000mAh",9.7 inches,"PKR 39,999","INR 14,999","CNY 1,399",USD 219,AED 799,2024 +Infinix,Xpad Pro,480g,12GB,32MP,50MP,MediaTek Dimensity 9200,"9,000mAh",11.0 inches,"PKR 99,999","INR 39,999","CNY 3,499",USD 549,"AED 1,999",2024 +Infinix,Hot 50,192g,6GB,8MP,50MP,MediaTek Helio G85,"5,000mAh",6.78 inches,"PKR 39,999","INR 14,999","CNY 1,399",USD 219,AED 799,2024 +Infinix,Hot 50i,190g,4GB,8MP,50MP,Unisoc T606,"5,000mAh",6.6 inches,"PKR 32,999","INR 12,499","CNY 1,199",USD 179,AED 699,2024 +Infinix,Hot 50 5G,195g,8GB,16MP,50MP,MediaTek Dimensity 810,"5,200mAh",6.78 inches,"PKR 48,999","INR 18,999","CNY 1,799",USD 289,"AED 1,049",2024 +Infinix,Hot 50 Pro,194g,8GB,16MP,50MP,MediaTek Helio G99,"5,000mAh",6.8 inches,"PKR 45,999","INR 17,999","CNY 1,699",USD 269,AED 999,2024 +Infinix,Hot 50 Pro+,196g,12GB,32MP,108MP,MediaTek Dimensity 9200,"5,300mAh",6.9 inches,"PKR 64,999","INR 24,999","CNY 2,499",USD 379,"AED 1,399",2024 +Infinix,GT 20 Pro,198g,12GB,32MP,108MP,MediaTek Dimensity 8200,"5,500mAh",6.9 inches,"PKR 89,999","INR 32,999","CNY 2,999",USD 449,"AED 1,699",2024 +Infinix,Note 40X 5G,198g,8GB,32MP,108MP,MediaTek Dimensity 7200,"5,200mAh",6.8 inches,"PKR 64,999","INR 23,999","CNY 2,299",USD 349,"AED 1,299",2024 +Infinix,Note 40S,196g,8GB,32MP,50MP,MediaTek Helio G99,"5,000mAh",6.78 inches,"PKR 42,999","INR 16,999","CNY 1,799",USD 279,AED 999,2024 +Infinix,Note 40 5G,195g,8GB,32MP,108MP,MediaTek Dimensity 8100,"5,200mAh",6.8 inches,"PKR 54,999","INR 19,999","CNY 1,999",USD 319,"AED 1,099",2024 +Infinix,Note 40 Pro 5G,195g,12GB,32MP,108MP,MediaTek Dimensity 9000,"5,300mAh",6.8 inches,"PKR 72,999","INR 27,999","CNY 2,499",USD 399,"AED 1,499",2024 +Infinix,Note 40 Racing Edition,196g,12GB,32MP,108MP,MediaTek Dimensity 9200,"5,500mAh",6.9 inches,"PKR 89,999","INR 32,999","CNY 2,999",USD 449,"AED 1,699",2024 +Infinix,Hot 40,196g,8GB,32MP,50MP,MediaTek Helio G88,"5,000mAh",6.78 inches,"PKR 35,999","INR 12,499","CNY 1,199",USD 199,AED 749,2023 +Infinix,Hot 40i,195g,4GB,8MP,13MP,Unisoc T606,"5,000mAh",6.6 inches,"PKR 28,999","INR 10,999",CNY 999,USD 159,AED 599,2023 +Infinix,Hot 40 Pro,195g,8GB,32MP,108MP,MediaTek Helio G99,"5,000mAh",6.78 inches,"PKR 39,999","INR 14,999","CNY 1,399",USD 229,AED 849,2023 +Infinix,Zero 40,195g,12GB,50MP,108MP,MediaTek Dimensity 8200,"5,000mAh",6.78 inches,"PKR 69,999","INR 24,999","CNY 2,199",USD 349,"AED 1,299",2024 +Infinix,Zero 40 5G,195g,12GB,50MP,108MP,MediaTek Dimensity 8200,"5,000mAh",6.78 inches,"PKR 74,999","INR 27,999","CNY 2,299",USD 379,"AED 1,399",2024 +Infinix,Zero Flip,190g,8GB,32MP,108MP,Qualcomm Snapdragon 778G,"4,500mAh",6.7 inches,"PKR 89,999","INR 32,999","CNY 2,499",USD 399,"AED 1,499",2024 +Infinix,Note 40,190g,8GB,32MP,108MP,MediaTek Helio G99,"5,000mAh",6.78 inches,"PKR 45,999","INR 17,999","CNY 1,799",USD 279,AED 999,2024 +Infinix,Note 40 Pro,190g,12GB,32MP,108MP,MediaTek Dimensity 8100,"5,000mAh",6.78 inches,"PKR 59,999","INR 22,999","CNY 2,199",USD 329,"AED 1,199",2024 +Infinix,Hot 30 128GB,196g,8GB,8MP,50MP,MediaTek Helio G88,"5,000mAh",6.78 inches,"PKR 35,999","INR 12,499","CNY 1,199",USD 199,AED 749,2023 +Infinix,Hot 30i 128GB,191g,4GB,8MP,13MP,Unisoc T606,"5,000mAh",6.6 inches,"PKR 28,999","INR 10,999",CNY 999,USD 159,AED 599,2023 +Infinix,Hot 30i NFC 128GB,191g,4GB,8MP,13MP,Unisoc T606,"5,000mAh",6.6 inches,"PKR 29,999","INR 11,499",CNY 999,USD 159,AED 599,2023 +Infinix,Hot 30 Play 128GB,205g,4GB,8MP,16MP,MediaTek Helio G37,"6,000mAh",6.82 inches,"PKR 30,999","INR 11,999","CNY 1,099",USD 179,AED 649,2023 +Infinix,Hot 30 5G 128GB,202g,8GB,8MP,50MP,MediaTek Dimensity 810,"5,000mAh",6.78 inches,"PKR 41,999","INR 17,999","CNY 1,499",USD 239,AED 899,2023 +Infinix,Zero 30 256GB,185g,8GB,50MP,108MP,MediaTek Dimensity 8020,"5,000mAh",6.78 inches,"PKR 69,999","INR 26,999","CNY 2,199",USD 349,"AED 1,299",2023 +Infinix,Zero 30 5G 256GB,185g,12GB,50MP,108MP,MediaTek Dimensity 8020,"5,000mAh",6.78 inches,"PKR 74,999","INR 29,999","CNY 2,299",USD 379,"AED 1,399",2023 +Infinix,GT 10 Pro 256GB,187g,8GB,32MP,108MP,MediaTek Dimensity 8050,"5,000mAh",6.67 inches,"PKR 84,999","INR 32,999","CNY 2,599",USD 399,"AED 1,499",2023 +Infinix,Hot 12 128GB,195g,6GB,8MP,13MP,MediaTek Helio G85,"5,000mAh",6.82 inches,"PKR 28,999","INR 11,499","CNY 1,099",USD 179,AED 649,2022 +Infinix,Hot 12 Play 128GB,209g,4GB,8MP,13MP,Unisoc T610,"6,000mAh",6.82 inches,"PKR 24,999","INR 10,499",CNY 999,USD 159,AED 599,2022 +Infinix,Hot 12 Pro 128GB,191g,8GB,8MP,50MP,Unisoc T616,"5,000mAh",6.6 inches,"PKR 31,999","INR 12,999","CNY 1,199",USD 199,AED 749,2022 +Infinix,Hot 12i 64GB,190g,4GB,8MP,13MP,MediaTek Helio A22,"5,000mAh",6.6 inches,"PKR 22,999","INR 9,999",CNY 899,USD 139,AED 499,2022 +Infinix,Hot 20 128GB,198g,6GB,8MP,50MP,MediaTek Helio G85,"5,000mAh",6.82 inches,"PKR 30,999","INR 12,999","CNY 1,199",USD 199,AED 749,2022 +Infinix,Hot 20 Play 128GB,209g,4GB,8MP,13MP,MediaTek Helio G37,"6,000mAh",6.82 inches,"PKR 25,999","INR 10,999",CNY 999,USD 159,AED 599,2022 +Infinix,Hot 20s 128GB,202g,8GB,8MP,50MP,MediaTek Helio G96,"5,000mAh",6.78 inches,"PKR 34,999","INR 14,999","CNY 1,399",USD 219,AED 799,2022 +Infinix,Hot 20 5G 128GB,204g,6GB,8MP,50MP,MediaTek Dimensity 810,"5,000mAh",6.6 inches,"PKR 38,999","INR 16,999","CNY 1,499",USD 239,AED 899,2022 +Infinix,Hot 20i 64GB,195g,4GB,8MP,13MP,MediaTek Helio G25,"5,000mAh",6.6 inches,"PKR 21,999","INR 9,499",CNY 899,USD 139,AED 499,2022 +Infinix,Hot 10T 128GB,205g,4GB,8MP,48MP,MediaTek Helio G70,"5,000mAh",6.82 inches,"PKR 23,999","INR 10,499",CNY 999,USD 149,AED 549,2021 +Infinix,Hot 10S 128GB,211g,6GB,8MP,48MP,MediaTek Helio G85,"6,000mAh",6.82 inches,"PKR 25,999","INR 11,999","CNY 1,099",USD 169,AED 599,2021 +Infinix,Hot 10S NFC 128GB,211g,6GB,8MP,48MP,MediaTek Helio G85,"6,000mAh",6.82 inches,"PKR 26,999","INR 12,499","CNY 1,199",USD 179,AED 649,2021 +Infinix,Hot 10 Lite 64GB,195g,3GB,8MP,13MP,MediaTek Helio A25,"5,000mAh",6.6 inches,"PKR 19,999","INR 7,999",CNY 699,USD 109,AED 399,2020 +Infinix,Hot 10 Play 64GB,207g,4GB,8MP,13MP,MediaTek Helio G25,"6,000mAh",6.82 inches,"PKR 22,999","INR 9,499",CNY 899,USD 139,AED 499,2021 +Infinix,Hot 11 128GB,201g,4GB,8MP,13MP,MediaTek Helio G70,"5,200mAh",6.6 inches,"PKR 24,999","INR 10,999",CNY 999,USD 159,AED 599,2021 +Infinix,Hot 11 Play 128GB,209g,4GB,8MP,13MP,MediaTek Helio G35,"6,000mAh",6.82 inches,"PKR 25,999","INR 11,499","CNY 1,099",USD 169,AED 649,2021 +Infinix,Hot 11s 128GB,205g,6GB,8MP,50MP,MediaTek Helio G88,"5,000mAh",6.78 inches,"PKR 27,999","INR 12,999","CNY 1,299",USD 189,AED 699,2021 +Infinix,Smart HD 32GB,195g,2GB,5MP,8MP,MediaTek Helio A20,"5,000mAh",6.1 inches,"PKR 15,999","INR 5,999",CNY 499,USD 79,AED 299,2020 +Infinix,Note 8i 128GB,210g,6GB,8MP,48MP,MediaTek Helio G80,"5,200mAh",6.78 inches,"PKR 29,999","INR 12,999","CNY 1,199",USD 199,AED 749,2020 +Infinix,Hot 10 Lite 64GB,195g,3GB,8MP,13MP,MediaTek Helio A25,"5,000mAh",6.6 inches,"PKR 19,999","INR 7,999",CNY 699,USD 109,AED 399,2020 +Infinix,Note 8 128GB,210g,6GB,16MP,64MP,MediaTek Helio G80,"5,200mAh",6.95 inches,"PKR 34,999","INR 15,999","CNY 1,499",USD 229,AED 899,2020 +Infinix,Zero 8i 128GB,210g,8GB,16MP,48MP,MediaTek Helio G90T,"4,500mAh",6.85 inches,"PKR 39,999","INR 17,999","CNY 1,599",USD 249,AED 999,2020 +Infinix,Hot 10 128GB,204g,4GB,8MP,16MP,MediaTek Helio G70,"5,200mAh",6.78 inches,"PKR 24,999","INR 10,999",CNY 999,USD 159,AED 599,2020 +Infinix,Zero 8 128GB,205g,8GB,48MP,64MP,MediaTek Helio G90T,"4,500mAh",6.85 inches,"PKR 44,999","INR 19,999","CNY 1,799",USD 279,"AED 1,099",2020 +Infinix,Smart 5 64GB,195g,3GB,8MP,13MP,MediaTek Helio A20,"5,000mAh",6.6 inches,"PKR 18,999","INR 7,499",CNY 599,USD 99,AED 349,2020 +Honor,9X Lite,175g,4GB,8MP,48MP,Kirin 710F,"3,750mAh",6.5 inches,"PKR 39,999","INR 15,999","CNY 1,499",USD 219,AED 799,2020 +Honor,30,185g,8GB,32MP,40MP,Kirin 985 5G,"4,000mAh",6.53 inches,"PKR 74,999","INR 29,999","CNY 2,999",USD 449,"AED 1,599",2020 +Honor,30 Pro,190g,8GB,32MP,50MP,Kirin 990 5G,"4,000mAh",6.57 inches,"PKR 94,999","INR 39,999","CNY 3,999",USD 599,"AED 2,199",2020 +Honor,30 Pro+,192g,12GB,32MP,50MP,Kirin 990 5G,"4,000mAh",6.57 inches,"PKR 109,999","INR 45,999","CNY 4,499",USD 699,"AED 2,599",2020 +Honor,30S,190g,6GB,16MP,64MP,Kirin 820 5G,"4,000mAh",6.5 inches,"PKR 54,999","INR 22,999","CNY 2,299",USD 349,"AED 1,299",2020 +Honor,X10,203g,6GB,16MP,40MP,Kirin 820 5G,"4,300mAh",6.63 inches,"PKR 48,999","INR 19,999","CNY 2,099",USD 319,"AED 1,149",2020 +Honor,X10 Max,227g,8GB,8MP,48MP,MediaTek Dimensity 800,"5,000mAh",7.09 inches,"PKR 64,999","INR 25,999","CNY 2,499",USD 379,"AED 1,399",2020 +Honor,Play 4,213g,6GB,16MP,64MP,MediaTek Dimensity 800,"4,300mAh",6.81 inches,"PKR 49,999","INR 21,999","CNY 2,299",USD 349,"AED 1,249",2020 +Honor,Play 4 Pro,213g,8GB,32MP,40MP,Kirin 990 5G,"4,200mAh",6.57 inches,"PKR 74,999","INR 29,999","CNY 3,499",USD 549,"AED 1,999",2020 +Honor,10X Lite,206g,4GB,8MP,48MP,Kirin 710A,"5,000mAh",6.67 inches,"PKR 34,999","INR 13,999","CNY 1,499",USD 229,AED 849,2020 +Honor,V40,189g,8GB,16MP,50MP,MediaTek Dimensity 1000+,"4,000mAh",6.72 inches,"PKR 89,999","INR 37,999","CNY 3,999",USD 599,"AED 2,199",2021 +Honor,50,175g,8GB,32MP,108MP,Qualcomm Snapdragon 778G,"4,300mAh",6.57 inches,"PKR 89,999","INR 37,999","CNY 2,699",USD 549,"AED 2,049",2021 +Honor,50 Pro,187g,8GB,32MP,108MP,Qualcomm Snapdragon 778G,"4,000mAh",6.72 inches,"PKR 109,999","INR 44,999","CNY 3,699",USD 649,"AED 2,499",2021 +Honor,50 SE,191g,8GB,16MP,108MP,MediaTek Dimensity 900,"4,000mAh",6.78 inches,"PKR 74,999","INR 29,999","CNY 2,399",USD 449,"AED 1,699",2021 +Honor,X20,192g,6GB,16MP,64MP,MediaTek Dimensity 900,"4,300mAh",6.67 inches,"PKR 64,999","INR 25,999","CNY 2,299",USD 379,"AED 1,399",2021 +Honor,X20 SE,179g,6GB,16MP,64MP,MediaTek Dimensity 700,"4,000mAh",6.6 inches,"PKR 54,999","INR 22,999","CNY 1,799",USD 299,"AED 1,199",2021 +Honor,Play 5,179g,8GB,16MP,64MP,MediaTek Dimensity 800U,"3,800mAh",6.53 inches,"PKR 49,999","INR 19,999","CNY 2,099",USD 319,"AED 1,149",2021 +Honor,Play 5T,191g,6GB,8MP,13MP,Unisoc T610,"5,000mAh",6.5 inches,"PKR 34,999","INR 14,999","CNY 1,499",USD 219,AED 799,2021 +Honor,Magic3,202g,8GB,13MP,50MP,Qualcomm Snapdragon 888,"4,600mAh",6.76 inches,"PKR 159,999","INR 64,999","CNY 4,599",USD 899,"AED 3,299",2021 +Honor,Magic3 Pro,213g,8GB,13MP,50MP,Qualcomm Snapdragon 888+,"4,600mAh",6.76 inches,"PKR 189,999","INR 74,999","CNY 5,499","USD 1,099","AED 3,999",2021 +Honor,Magic3 Pro+,236g,12GB,13MP,50MP,Qualcomm Snapdragon 888+,"4,600mAh",6.76 inches,"PKR 219,999","INR 84,999","CNY 6,499","USD 1,299","AED 4,599",2021 +Honor,60,179g,8GB,32MP,108MP,Qualcomm Snapdragon 778G,"4,800mAh",6.67 inches,"PKR 99,999","INR 41,999","CNY 2,699",USD 549,"AED 2,049",2021 +Honor,60 Pro,192g,8GB,50MP,108MP,Qualcomm Snapdragon 778G+,"4,800mAh",6.78 inches,"PKR 124,999","INR 49,999","CNY 3,699",USD 649,"AED 2,599",2021 +Honor,60 SE,191g,8GB,16MP,64MP,MediaTek Dimensity 900,"4,300mAh",6.67 inches,"PKR 74,999","INR 29,999","CNY 2,399",USD 449,"AED 1,699",2021 +Honor,X30,189g,6GB,16MP,48MP,Qualcomm Snapdragon 695,"4,800mAh",6.81 inches,"PKR 69,999","INR 27,999","CNY 2,099",USD 379,"AED 1,299",2021 +Honor,X30i,175g,6GB,16MP,48MP,MediaTek Dimensity 810,"4,000mAh",6.7 inches,"PKR 54,999","INR 22,999","CNY 1,799",USD 299,"AED 1,099",2021 +Honor,X30 Max,228g,8GB,8MP,64MP,MediaTek Dimensity 900,"5,000mAh",7.09 inches,"PKR 89,999","INR 35,999","CNY 2,399",USD 499,"AED 1,899",2021 +Honor,Play 6,190g,6GB,5MP,13MP,MediaTek MT6762G Helio G25,"5,000mAh",6.52 inches,"PKR 29,999","INR 12,999","CNY 1,199",USD 179,AED 699,2022 +Honor,Play 6T,198g,6GB,5MP,13MP,MediaTek Dimensity 700,"5,000mAh",6.74 inches,"PKR 39,999","INR 16,999","CNY 1,499",USD 229,AED 799,2022 +Honor,Magic4,199g,8GB,12MP,50MP,Qualcomm Snapdragon 8 Gen 1,"4,800mAh",6.81 inches,"PKR 179,999","INR 72,999","CNY 4,699",USD 899,"AED 3,299",2022 +Honor,Magic4 Pro,215g,8GB,12MP,50MP,Qualcomm Snapdragon 8 Gen 1,"4,600mAh",6.81 inches,"PKR 209,999","INR 84,999","CNY 5,499","USD 1,099","AED 3,999",2022 +Honor,Magic4 Ultimate,242g,12GB,12MP,50MP,Qualcomm Snapdragon 8 Gen 1,"4,600mAh",6.81 inches,"PKR 249,999","INR 99,999","CNY 6,799","USD 1,299","AED 4,599",2022 +Honor,Magic V,288g,12GB,42MP,50MP,Qualcomm Snapdragon 8 Gen 1,"4,750mAh",7.9 inches,"PKR 349,999","INR 149,999","CNY 9,999","USD 1,799","AED 6,599",2022 +Honor,70,178g,8GB,32MP,54MP,Qualcomm Snapdragon 778G+,"4,800mAh",6.67 inches,"PKR 119,999","INR 46,999","CNY 2,699",USD 549,"AED 2,099",2022 +Honor,70 Pro,192g,8GB,50MP,54MP,MediaTek Dimensity 8000,"4,500mAh",6.78 inches,"PKR 149,999","INR 59,999","CNY 3,699",USD 699,"AED 2,699",2022 +Honor,70 Pro+,209g,12GB,50MP,54MP,MediaTek Dimensity 9000,"4,500mAh",6.78 inches,"PKR 179,999","INR 69,999","CNY 4,299",USD 799,"AED 3,199",2022 +Honor,X40,172g,6GB,8MP,50MP,Qualcomm Snapdragon 695,"5,100mAh",6.67 inches,"PKR 64,999","INR 26,999","CNY 1,499",USD 299,"AED 1,099",2022 +Honor,X40i,175g,6GB,8MP,50MP,MediaTek Dimensity 700,"4,000mAh",6.7 inches,"PKR 49,999","INR 22,999","CNY 1,799",USD 279,AED 999,2022 +Honor,Play 7,196g,4GB,5MP,13MP,MediaTek Helio G37,"5,200mAh",6.74 inches,"PKR 29,999","INR 12,499","CNY 1,099",USD 159,AED 599,2023 +Honor,Play 7T,199g,6GB,5MP,13MP,MediaTek Dimensity 6020,"5,200mAh",6.74 inches,"PKR 34,999","INR 14,999","CNY 1,299",USD 199,AED 749,2023 +Honor,Magic5,204g,8GB,12MP,50MP,Qualcomm Snapdragon 8 Gen 2,"5,100mAh",6.81 inches,"PKR 199,999","INR 79,999","CNY 4,999",USD 999,"AED 3,599",2023 +Honor,Magic5 Pro,219g,12GB,12MP,50MP,Qualcomm Snapdragon 8 Gen 2,"5,100mAh",6.81 inches,"PKR 249,999","INR 99,999","CNY 6,199","USD 1,199","AED 4,399",2023 +Honor,Magic5 Ultimate,234g,16GB,12MP,50MP,Qualcomm Snapdragon 8 Gen 2,"5,450mAh",6.81 inches,"PKR 299,999","INR 119,999","CNY 7,499","USD 1,399","AED 5,199",2023 +Honor,Magic Vs,267g,12GB,16MP,50MP,Qualcomm Snapdragon 8+ Gen 1,"5,000mAh",7.9 inches,"PKR 369,999","INR 149,999","CNY 9,999","USD 1,699","AED 6,199",2023 +Honor,80,180g,8GB,32MP,160MP,Qualcomm Snapdragon 782G,"4,800mAh",6.67 inches,"PKR 119,999","INR 46,999","CNY 2,699",USD 549,"AED 2,099",2022 +Honor,80 Pro,193g,12GB,50MP,160MP,Qualcomm Snapdragon 8+ Gen 1,"4,800mAh",6.78 inches,"PKR 169,999","INR 69,999","CNY 4,199",USD 799,"AED 3,099",2022 +Honor,80 SE,175g,8GB,32MP,64MP,MediaTek Dimensity 900,"4,600mAh",6.67 inches,"PKR 84,999","INR 34,999","CNY 1,999",USD 399,"AED 1,599",2022 +Honor,X50,185g,6GB,8MP,108MP,Qualcomm Snapdragon 6 Gen 1,"5,800mAh",6.78 inches,"PKR 74,999","INR 28,999","CNY 1,599",USD 299,"AED 1,099",2023 +Honor,X50i,179g,6GB,8MP,100MP,MediaTek Dimensity 6020,"4,500mAh",6.7 inches,"PKR 54,999","INR 21,999","CNY 1,399",USD 249,AED 899,2023 +Honor,Play 8,191g,4GB,5MP,13MP,MediaTek Helio G36,"5,000mAh",6.52 inches,"PKR 27,999","INR 11,499",CNY 999,USD 149,AED 549,2023 +Honor,Play 8T,195g,6GB,5MP,50MP,MediaTek Dimensity 6100+,"5,200mAh",6.74 inches,"PKR 32,999","INR 13,999","CNY 1,199",USD 189,AED 699,2023 +Honor,Magic6,203g,8GB,12MP,50MP,Qualcomm Snapdragon 8 Gen 3,"5,200mAh",6.81 inches,"PKR 219,999","INR 89,999","CNY 5,499","USD 1,099","AED 3,999",2024 +Honor,Magic6 Pro,219g,12GB,12MP,50MP,Qualcomm Snapdragon 8 Gen 3,"5,500mAh",6.81 inches,"PKR 269,999","INR 109,999","CNY 6,999","USD 1,299","AED 4,699",2024 +Honor,Magic6 Ultimate,234g,16GB,12MP,50MP,Qualcomm Snapdragon 8 Gen 3,"5,550mAh",6.81 inches,"PKR 319,999","INR 129,999","CNY 8,199","USD 1,499","AED 5,499",2024 +Honor,Magic V2,231g,12GB,16MP,50MP,Qualcomm Snapdragon 8 Gen 2,"5,000mAh",7.92 inches,"PKR 389,999","INR 159,999","CNY 10,999","USD 1,899","AED 6,999",2024 +Honor,90,183g,12GB,50MP,200MP,Qualcomm Snapdragon 7 Gen 1,"5,000mAh",6.7 inches,"PKR 139,999","INR 54,999","CNY 2,999",USD 599,"AED 2,199",2023 +Honor,90 Pro,192g,12GB,50MP,200MP,Qualcomm Snapdragon 8+ Gen 1,"5,000mAh",6.78 inches,"PKR 169,999","INR 64,999","CNY 3,999",USD 699,"AED 2,799",2023 +Honor,90 SE,175g,8GB,32MP,64MP,MediaTek Dimensity 900,"4,600mAh",6.67 inches,"PKR 84,999","INR 34,999","CNY 1,999",USD 399,"AED 1,599",2023 +Honor,X60,185g,6GB,8MP,108MP,Qualcomm Snapdragon 6 Gen 1,"5,800mAh",6.78 inches,"PKR 74,999","INR 28,999","CNY 1,599",USD 299,"AED 1,099",2023 +Honor,X60i,179g,6GB,8MP,100MP,MediaTek Dimensity 6020,"4,500mAh",6.7 inches,"PKR 54,999","INR 21,999","CNY 1,399",USD 249,AED 899,2023 +Honor,Play 9,191g,4GB,5MP,13MP,MediaTek Helio G36,"5,000mAh",6.52 inches,"PKR 27,999","INR 11,499",CNY 999,USD 149,AED 549,2023 +Honor,Play 9T,195g,6GB,5MP,50MP,MediaTek Dimensity 6100+,"5,200mAh",6.74 inches,"PKR 32,999","INR 13,999","CNY 1,199",USD 189,AED 699,2023 +Honor,Magic7,203g,8GB,12MP,50MP,Qualcomm Snapdragon 8 Gen 3,"5,200mAh",6.81 inches,"PKR 219,999","INR 89,999","CNY 5,499","USD 1,099","AED 3,999",2024 +Honor,Magic7 Pro,219g,12GB,12MP,50MP,Qualcomm Snapdragon 8 Gen 3,"5,500mAh",6.81 inches,"PKR 269,999","INR 109,999","CNY 6,999","USD 1,299","AED 4,699",2024 +Honor,Magic7 Ultimate,234g,16GB,12MP,50MP,Qualcomm Snapdragon 8 Gen 3,"5,550mAh",6.81 inches,"PKR 319,999","INR 129,999","CNY 8,199","USD 1,499","AED 5,499",2024 +Honor,Magic V3,231g,12GB,16MP,50MP,Qualcomm Snapdragon 8 Gen 2,"5,000mAh",7.92 inches,"PKR 389,999","INR 159,999","CNY 10,999","USD 1,899","AED 6,999",2024 +Honor,Pad 6,460g,4GB,2MP,5MP,Qualcomm Snapdragon 662,"5,100mAh",10.1 inches,"PKR 49,999","INR 17,999","CNY 1,299",USD 199,AED 749,2020 +Honor,Pad X6,460g,3GB,2MP,5MP,MediaTek MT8768T,"5,100mAh",9.7 inches,"PKR 39,999","INR 14,999",CNY 999,USD 159,AED 599,2020 +Honor,Pad 7,460g,4GB,2MP,5MP,MediaTek Helio G80,"5,100mAh",10.1 inches,"PKR 54,999","INR 19,999","CNY 1,399",USD 229,AED 849,2021 +Honor,Tablet V7,480g,6GB,8MP,13MP,MediaTek Dimensity 800,"7,250mAh",10.4 inches,"PKR 84,999","INR 34,999","CNY 2,199",USD 399,"AED 1,499",2021 +Honor,Tablet V7 Pro,485g,8GB,8MP,13MP,MediaTek Dimensity 1300T,"7,250mAh",11.0 inches,"PKR 109,999","INR 44,999","CNY 2,899",USD 499,"AED 1,799",2021 +Honor,Pad 8,520g,6GB,5MP,5MP,Qualcomm Snapdragon 680,"7,250mAh",12.0 inches,"PKR 69,999","INR 24,999","CNY 1,599",USD 299,"AED 1,099",2022 +Honor,Pad X8,460g,4GB,2MP,5MP,MediaTek Helio G80,"5,100mAh",10.1 inches,"PKR 44,999","INR 16,999","CNY 1,199",USD 189,AED 699,2022 +Honor,Pad X8 Lite,450g,3GB,2MP,5MP,MediaTek MT8786,"5,000mAh",9.7 inches,"PKR 34,999","INR 12,999",CNY 999,USD 149,AED 549,2022 +Honor,Pad V8,510g,6GB,5MP,13MP,MediaTek Dimensity 8020,"7,250mAh",11.0 inches,"PKR 94,999","INR 39,999","CNY 2,499",USD 449,"AED 1,599",2023 +Honor,Pad V8 Pro,530g,8GB,8MP,13MP,MediaTek Dimensity 9000,"8,500mAh",12.1 inches,"PKR 129,999","INR 54,999","CNY 3,599",USD 649,"AED 2,299",2023 +Honor,Pad 9,550g,8GB,8MP,13MP,Qualcomm Snapdragon 6 Gen 1,"8,300mAh",12.1 inches,"PKR 84,999","INR 34,999","CNY 2,299",USD 399,"AED 1,499",2024 +Honor,Pad 9 Pro,560g,12GB,8MP,13MP,MediaTek Dimensity 8100,"9,000mAh",12.6 inches,"PKR 109,999","INR 44,999","CNY 2,999",USD 499,"AED 1,799",2024 +Honor,Pad X9,495g,6GB,5MP,8MP,Qualcomm Snapdragon 685,"7,250mAh",11.5 inches,"PKR 59,999","INR 22,999","CNY 1,599",USD 299,"AED 1,099",2023 +Honor,Pad X8 Pro,460g,4GB,2MP,5MP,MediaTek Helio G80,"5,100mAh",10.1 inches,"PKR 44,999","INR 16,999","CNY 1,199",USD 189,AED 699,2023 +Honor,MagicPad 13,590g,12GB,8MP,13MP,Qualcomm Snapdragon 8+ Gen 1,"10,000mAh",13.0 inches,"PKR 149,999","INR 64,999","CNY 3,999",USD 799,"AED 2,999",2023 +Honor,MagicPad 2,580g,16GB,12MP,16MP,Qualcomm Snapdragon 8 Gen 2,"10,500mAh",13.2 inches,"PKR 179,999","INR 74,999","CNY 4,499",USD 899,"AED 3,299",2024 +Honor,Pad X8a,450g,4GB,2MP,5MP,MediaTek MT8786,"5,000mAh",9.7 inches,"PKR 34,999","INR 12,999",CNY 999,USD 149,AED 549,2023 +Honor,Pad X8a Kids Edition,460g,3GB,2MP,5MP,MediaTek MT8786,"5,100mAh",9.7 inches,"PKR 29,999","INR 10,999",CNY 799,USD 129,AED 499,2023 +Honor,Pad X9 Pro,505g,8GB,8MP,13MP,Qualcomm Snapdragon 7s Gen 2,"8,000mAh",11.6 inches,"PKR 79,999","INR 29,999","CNY 2,199",USD 399,"AED 1,499",2024 +Honor,Pad V9,530g,8GB,8MP,13MP,MediaTek Dimensity 9000,"8,500mAh",12.1 inches,"PKR 129,999","INR 54,999","CNY 3,599",USD 649,"AED 2,299",2024 +Honor,Pad GT Pro,610g,12GB,12MP,16MP,Qualcomm Snapdragon 8 Gen 3,"10,500mAh",13.5 inches,"PKR 199,999","INR 84,999","CNY 4,999",USD 999,"AED 3,799",2024 +Honor,Pad X10,475g,6GB,5MP,8MP,Qualcomm Snapdragon 685,"8,850mAh",12.1 inches,"PKR 74,999","INR 29,999","CNY 2,299",USD 399,"AED 1,499",2024 +Honor,Pad X10 Pro,485g,8GB,8MP,13MP,Qualcomm Snapdragon 7s Gen 2,"9,000mAh",12.6 inches,"PKR 94,999","INR 39,999","CNY 2,999",USD 499,"AED 1,799",2024 +Honor,MagicPad 3,590g,12GB,12MP,16MP,Qualcomm Snapdragon 8 Gen 3,"10,500mAh",13.0 inches,"PKR 149,999","INR 64,999","CNY 3,999",USD 799,"AED 2,999",2024 +Honor,Pad V10,530g,8GB,8MP,13MP,MediaTek Dimensity 9000,"8,500mAh",12.1 inches,"PKR 129,999","INR 54,999","CNY 3,599",USD 649,"AED 2,299",2024 +POCO,F2 Pro 128GB,219g,6GB,20MP,64MP,Snapdragon 865,4700mAh,6.67 inches,"PKR 99,999","INR 37,999","CNY 2,999",USD 499,"AED 1,999",2020 +POCO,M2 Pro 64GB,209g,4GB,16MP,48MP,Snapdragon 720G,5000mAh,6.67 inches,"PKR 34,999","INR 13,999","CNY 1,399",USD 199,AED 799,2020 +POCO,X3 NFC 128GB,215g,6GB,20MP,64MP,Snapdragon 732G,5160mAh,6.67 inches,"PKR 39,999","INR 16,999","CNY 1,599",USD 229,AED 899,2020 +POCO,M3 64GB,198g,4GB,8MP,48MP,Snapdragon 662,6000mAh,6.53 inches,"PKR 24,999","INR 10,999",CNY 999,USD 149,AED 599,2020 +POCO,F3 128GB,196g,6GB,20MP,48MP,Snapdragon 870,4520mAh,6.67 inches,"PKR 69,999","INR 29,999","CNY 2,499",USD 349,"AED 1,399",2021 +POCO,X3 Pro 128GB,215g,6GB,20MP,48MP,Snapdragon 860,5160mAh,6.67 inches,"PKR 49,999","INR 18,999","CNY 1,799",USD 249,AED 999,2021 +POCO,M3 Pro 5G 64GB,190g,4GB,8MP,48MP,MediaTek Dimensity 700,5000mAh,6.5 inches,"PKR 29,999","INR 13,999","CNY 1,199",USD 199,AED 799,2021 +POCO,F3 GT 128GB,205g,6GB,16MP,64MP,MediaTek Dimensity 1200,5065mAh,6.67 inches,"PKR 79,999","INR 25,999","CNY 2,299",USD 399,"AED 1,499",2021 +POCO,X3 GT 128GB,193g,6GB,16MP,64MP,MediaTek Dimensity 1100,5000mAh,6.6 inches,"PKR 44,999","INR 21,999","CNY 1,899",USD 279,"AED 1,099",2021 +POCO,M4 Pro 5G 128GB,195g,4GB,16MP,50MP,MediaTek Dimensity 810,5000mAh,6.6 inches,"PKR 34,999","INR 14,999","CNY 1,499",USD 219,AED 849,2021 +POCO,F4 128GB,195g,6GB,20MP,64MP,Snapdragon 870,4500mAh,6.67 inches,"PKR 74,999","INR 27,999","CNY 2,399",USD 349,"AED 1,399",2022 +POCO,F4 GT 128GB,210g,8GB,20MP,64MP,Snapdragon 8 Gen 1,4700mAh,6.67 inches,"PKR 99,999","INR 39,999","CNY 3,299",USD 499,"AED 1,999",2022 +POCO,X4 Pro 5G 128GB,205g,6GB,16MP,108MP,Snapdragon 695,5000mAh,6.67 inches,"PKR 54,999","INR 18,999","CNY 1,999",USD 299,"AED 1,199",2022 +POCO,M4 Pro 128GB,179g,6GB,16MP,64MP,MediaTek Helio G96,5000mAh,6.43 inches,"PKR 39,999","INR 14,999","CNY 1,499",USD 219,AED 849,2022 +POCO,M5 128GB,201g,4GB,5MP,50MP,MediaTek Helio G99,5000mAh,6.58 inches,"PKR 29,999","INR 12,499","CNY 1,299",USD 199,AED 799,2022 +POCO,M5s 128GB,178.8g,4GB,13MP,64MP,MediaTek Helio G95,5000mAh,6.43 inches,"PKR 34,999","INR 13,999","CNY 1,399",USD 229,AED 899,2022 +POCO,F5 128GB,181g,6GB,16MP,64MP,Snapdragon 7+ Gen 2,5000mAh,6.67 inches,"PKR 79,999","INR 29,999","CNY 2,299",USD 349,"AED 1,299",2023 +POCO,F5 Pro 256GB,204g,8GB,20MP,64MP,Snapdragon 8+ Gen 1,5160mAh,6.67 inches,"PKR 99,999","INR 39,999","CNY 3,299",USD 499,"AED 1,899",2023 +POCO,X5 128GB,189g,6GB,13MP,48MP,Snapdragon 695,5000mAh,6.67 inches,"PKR 54,999","INR 18,999","CNY 1,799",USD 279,"AED 1,099",2023 +POCO,X5 Pro 128GB,181g,6GB,16MP,108MP,Snapdragon 778G,5000mAh,6.67 inches,"PKR 64,999","INR 22,999","CNY 2,199",USD 329,"AED 1,199",2023 +POCO,M6 64GB,199g,4GB,8MP,50MP,MediaTek Helio G88,5000mAh,6.58 inches,"PKR 29,999","INR 12,999","CNY 1,299",USD 199,AED 799,2023 +POCO,M6 Pro 128GB,202g,6GB,8MP,50MP,Snapdragon 4 Gen 1,5000mAh,6.79 inches,"PKR 34,999","INR 14,999","CNY 1,499",USD 219,AED 849,2023 +POCO,X6 128GB,193g,6GB,16MP,64MP,MediaTek Dimensity 8100,5000mAh,6.67 inches,"PKR 59,999","INR 21,999","CNY 2,299",USD 349,"AED 1,299",2024 +POCO,X6 Pro 256GB,205g,8GB,20MP,108MP,MediaTek Dimensity 8300,5000mAh,6.67 inches,"PKR 69,999","INR 24,999","CNY 2,599",USD 399,"AED 1,499",2024 +POCO,F6 128GB,190g,6GB,20MP,64MP,Snapdragon 8 Gen 2,5000mAh,6.67 inches,"PKR 89,999","INR 34,999","CNY 2,999",USD 449,"AED 1,699",2024 +POCO,F6 Pro 256GB,210g,8GB,20MP,108MP,Snapdragon 8+ Gen 2,5160mAh,6.67 inches,"PKR 109,999","INR 44,999","CNY 3,499",USD 549,"AED 1,999",2024 +POCO,C65 64GB,190g,4GB,5MP,50MP,MediaTek Helio G85,5000mAh,6.5 inches,"PKR 24,999","INR 10,999",CNY 999,USD 149,AED 599,2024 +POCO,X7 128GB,195g,6GB,16MP,64MP,MediaTek Dimensity 8200,5000mAh,6.67 inches,"PKR 64,999","INR 22,999","CNY 2,199",USD 329,"AED 1,199",2025 +POCO,X7 Pro 256GB,207g,8GB,20MP,108MP,MediaTek Dimensity 8400,6000mAh,6.67 inches,"PKR 79,999","INR 27,999","CNY 2,699",USD 399,"AED 1,499",2025 +POCO,M7 5G 128GB,198g,6GB,8MP,50MP,MediaTek Dimensity 7025,5110mAh,6.67 inches,"PKR 39,999","INR 15,999","CNY 1,599",USD 229,AED 899,2024 +Poco,Pad 5G 128GB,571g,8GB,8MP,8MP,Snapdragon 7s Gen 2,"10,000mAh",12.1 inches,"PKR 66,220","INR 23,999","CNY 2,099",USD 280,"AED 1,029",2024 +Poco,Pad 5G 256GB,571g,8GB,8MP,8MP,Snapdragon 7s Gen 2,"10,000mAh",12.1 inches,"PKR 71,220","INR 25,999","CNY 2,299",USD 300,"AED 1,099",2024 +Samsung,Galaxy Z Fold6 256GB,239g,12GB,"10MP, 4MP (UDC)",50MP,Snapdragon 8 Gen 3,4400mAh,7.6 inches,"PKR 604,999","INR 164,999","?13,999","USD 1,899","AED 7,199",2024 +Samsung,Galaxy Z Fold6 512GB,239g,12GB,"10MP, 4MP (UDC)",50MP,Snapdragon 8 Gen 3,4400mAh,7.6 inches,"PKR 544,999","INR 176,999","CNY 15,999",USD 1719,"AED 7,699",2024 +Samsung,Galaxy Z Fold6 1TB,239g,12GB,"10MP, 4MP (UDC)",50MP,Snapdragon 8 Gen 3,4400mAh,7.6 inches,Not available,"INR 200,999","CNY 17,999?","USD 2,259","AED 8,699",2024 diff --git a/database.py b/database.py new file mode 100644 index 0000000..d85582e --- /dev/null +++ b/database.py @@ -0,0 +1,313 @@ +# db/database.py +import psycopg2 +from psycopg2.extras import RealDictCursor +from typing import List, Dict, Any, Optional +import logging +from contextlib import contextmanager + +logger = logging.getLogger(__name__) + +class Database: + """ + Класс для управления подключением к PostgreSQL и выполнения операций + Использует паттерн Singleton для единственного экземпляра подключения + """ + + _instance = None + + def __new__(cls, *args, **kwargs): + if cls._instance is None: + cls._instance = super().__new__(cls) + return cls._instance + + def __init__(self, host='localhost', port=5432, database='mobile_devices_db', + user='admin', password='password'): + if not hasattr(self, 'initialized'): + self.connection_params = { + 'host': host, + 'port': port, + 'database': database, + 'user': user, + 'password': password + } + self.connection = None + self.initialized = True + + def connect(self): + """Установка соединения с БД""" + try: + self.connection = psycopg2.connect(**self.connection_params) + logger.info("✅ Подключение к БД установлено") + return True + except Exception as e: + logger.error(f"❌ Ошибка подключения к БД: {e}") + return False + + def disconnect(self): + """Закрытие соединения с БД""" + if self.connection: + self.connection.close() + logger.info("🔒 Соединение с БД закрыто") + + @contextmanager + def get_cursor(self, dict_cursor=True): + """ + Контекстный менеджер для безопасной работы с курсором + """ + cursor_factory = RealDictCursor if dict_cursor else None + cursor = self.connection.cursor(cursor_factory=cursor_factory) + try: + yield cursor + self.connection.commit() + except Exception as e: + self.connection.rollback() + logger.error(f"❌ Ошибка выполнения запроса: {e}") + raise + finally: + cursor.close() + + # === CRUD операции для Companies === + + def get_all_companies(self) -> List[Dict[str, Any]]: + """Получение всех компаний""" + with self.get_cursor() as cursor: + cursor.execute(""" + SELECT c.company_id, c.company_name, COUNT(m.model_id) as models_count + FROM companies c + LEFT JOIN models m ON c.company_id = m.company_id + GROUP BY c.company_id, c.company_name + ORDER BY c.company_name + """) + return cursor.fetchall() + + def add_company(self, company_name: str) -> int: + """Добавление новой компании""" + with self.get_cursor() as cursor: + cursor.execute( + "INSERT INTO companies (company_name) VALUES (%s) RETURNING company_id", + (company_name,) + ) + return cursor.fetchone()['company_id'] + + def update_company(self, company_id: int, company_name: str): + """Обновление названия компании""" + with self.get_cursor() as cursor: + cursor.execute( + "UPDATE companies SET company_name = %s WHERE company_id = %s", + (company_name, company_id) + ) + + def delete_company(self, company_id: int): + """Удаление компании (каскадно удалит все модели)""" + with self.get_cursor() as cursor: + cursor.execute("DELETE FROM companies WHERE company_id = %s", (company_id,)) + + # === CRUD операции для Models === + + def get_all_models(self, company_id: Optional[int] = None) -> List[Dict[str, Any]]: + """Получение всех моделей (опционально по компании)""" + query = """ + SELECT + m.model_id, m.model_name, c.company_name, + m.mobile_weight, m.ram, m.front_camera, + m.back_camera, pr.processor_name, m.battery_capacity, + m.screen_size, m.launched_year, + COUNT(DISTINCT p.region_id) as price_regions + FROM models m + JOIN companies c ON m.company_id = c.company_id + LEFT JOIN processors pr ON m.processor_id = pr.processor_id + LEFT JOIN prices p ON m.model_id = p.model_id + """ + + params = [] + if company_id: + query += " WHERE m.company_id = %s" + params.append(company_id) + + query += " GROUP BY m.model_id, c.company_name, pr.processor_name ORDER BY c.company_name, m.model_name" + + with self.get_cursor() as cursor: + cursor.execute(query, params) + return cursor.fetchall() + + def get_model_by_id(self, model_id: int) -> Dict[str, Any]: + """Получение модели по ID""" + with self.get_cursor() as cursor: + cursor.execute(""" + SELECT m.*, c.company_name, pr.processor_name + FROM models m + JOIN companies c ON m.company_id = c.company_id + LEFT JOIN processors pr ON m.processor_id = pr.processor_id + WHERE m.model_id = %s + """, (model_id,)) + return cursor.fetchone() + + def add_model(self, model_data: Dict[str, Any]) -> int: + """Добавление новой модели""" + # Сначала получаем или создаем процессор + processor_id = None + if model_data.get('processor_name'): + processor_id = self.get_or_create_processor(model_data['processor_name']) + + with self.get_cursor() as cursor: + cursor.execute(""" + INSERT INTO models + (model_name, company_id, processor_id, mobile_weight, + ram, front_camera, back_camera, battery_capacity, + screen_size, launched_year) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + RETURNING model_id + """, ( + model_data['model_name'], + model_data['company_id'], + processor_id, + model_data.get('mobile_weight'), + model_data.get('ram'), + model_data.get('front_camera'), + model_data.get('back_camera'), + model_data.get('battery_capacity'), + model_data.get('screen_size'), + model_data.get('launched_year') + )) + return cursor.fetchone()['model_id'] + + def update_model(self, model_id: int, model_data: Dict[str, Any]): + """Обновление модели""" + # Получаем или создаем процессор + processor_id = None + if model_data.get('processor_name'): + processor_id = self.get_or_create_processor(model_data['processor_name']) + + with self.get_cursor() as cursor: + cursor.execute(""" + UPDATE models SET + model_name = %s, + company_id = %s, + processor_id = %s, + mobile_weight = %s, + ram = %s, + front_camera = %s, + back_camera = %s, + battery_capacity = %s, + screen_size = %s, + launched_year = %s + WHERE model_id = %s + """, ( + model_data['model_name'], + model_data['company_id'], + processor_id, + model_data.get('mobile_weight'), + model_data.get('ram'), + model_data.get('front_camera'), + model_data.get('back_camera'), + model_data.get('battery_capacity'), + model_data.get('screen_size'), + model_data.get('launched_year'), + model_id + )) + + def delete_model(self, model_id: int): + """Удаление модели""" + with self.get_cursor() as cursor: + cursor.execute("DELETE FROM models WHERE model_id = %s", (model_id,)) + + # === CRUD операции для Prices === + + def get_model_prices(self, model_id: int) -> List[Dict[str, Any]]: + """Получение всех цен для модели""" + with self.get_cursor() as cursor: + cursor.execute(""" + SELECT p.price_id, p.model_id, p.region_id, + r.region_name, p.price, p.currency + FROM prices p + JOIN regions r ON p.region_id = r.region_id + WHERE p.model_id = %s + ORDER BY r.region_name + """, (model_id,)) + return cursor.fetchall() + + def add_or_update_price(self, model_id: int, region_id: int, price: float): + """Добавление или обновление цены""" + with self.get_cursor() as cursor: + cursor.execute(""" + INSERT INTO prices (model_id, region_id, price) + VALUES (%s, %s, %s) + ON CONFLICT (model_id, region_id) + DO UPDATE SET price = EXCLUDED.price + """, (model_id, region_id, price)) + + def delete_price(self, price_id: int): + """Удаление цены""" + with self.get_cursor() as cursor: + cursor.execute("DELETE FROM prices WHERE price_id = %s", (price_id,)) + + # === Вспомогательные методы === + + def get_or_create_processor(self, processor_name: str) -> int: + """Получение или создание процессора""" + with self.get_cursor() as cursor: + cursor.execute( + "SELECT processor_id FROM processors WHERE processor_name = %s", + (processor_name,) + ) + result = cursor.fetchone() + + if result: + return result['processor_id'] + else: + cursor.execute( + "INSERT INTO processors (processor_name) VALUES (%s) RETURNING processor_id", + (processor_name,) + ) + return cursor.fetchone()['processor_id'] + + def get_all_regions(self) -> List[Dict[str, Any]]: + """Получение всех регионов""" + with self.get_cursor() as cursor: + cursor.execute("SELECT * FROM regions ORDER BY region_name") + return cursor.fetchall() + + def get_all_processors(self) -> List[Dict[str, Any]]: + """Получение всех процессоров""" + with self.get_cursor() as cursor: + cursor.execute("SELECT * FROM processors ORDER BY processor_name") + return cursor.fetchall() + + # === Методы для аналитики === + + def get_price_statistics(self) -> List[Dict[str, Any]]: + """Получение статистики цен по регионам""" + with self.get_cursor() as cursor: + cursor.execute(""" + SELECT + r.region_name, + COUNT(p.price_id) as models_count, + AVG(p.price) as avg_price, + MIN(p.price) as min_price, + MAX(p.price) as max_price + FROM prices p + JOIN regions r ON p.region_id = r.region_id + GROUP BY r.region_name + ORDER BY avg_price DESC + """) + return cursor.fetchall() + + def search_models(self, search_text: str) -> List[Dict[str, Any]]: + """Поиск моделей по тексту""" + search_pattern = f"%{search_text}%" + with self.get_cursor() as cursor: + cursor.execute(""" + SELECT DISTINCT + m.model_id, m.model_name, c.company_name, + m.ram, m.battery_capacity, m.launched_year + FROM models m + JOIN companies c ON m.company_id = c.company_id + WHERE + m.model_name ILIKE %s OR + c.company_name ILIKE %s OR + m.ram ILIKE %s OR + m.battery_capacity ILIKE %s + ORDER BY c.company_name, m.model_name + LIMIT 100 + """, (search_pattern, search_pattern, search_pattern, search_pattern)) + return cursor.fetchall() \ No newline at end of file diff --git a/docs/report.docx b/docs/report.docx new file mode 100644 index 0000000..e69de29 diff --git a/main.py b/main.py new file mode 100644 index 0000000..f446e7c --- /dev/null +++ b/main.py @@ -0,0 +1,32 @@ +import sys +import logging +from PyQt6.QtWidgets import QApplication +from PyQt6.QtCore import Qt + +from main_window import MainWindow + +# Настройка логирования +logging.basicConfig( + level=logging.INFO, + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' +) + +def main(): + app = QApplication(sys.argv) + + # Настройки приложения + app.setApplicationName("Mobile Devices Manager") + app.setOrganizationName("Moscow Polytech") + + # Устанавливаем стиль + app.setStyle('Fusion') + + # Создаем и показываем главное окно + window = MainWindow() + window.show() + + # Запускаем цикл обработки событий + sys.exit(app.exec()) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/main_window.py b/main_window.py new file mode 100644 index 0000000..874b4d7 --- /dev/null +++ b/main_window.py @@ -0,0 +1,598 @@ +# ui/main_window.py +import sys +from PyQt6.QtWidgets import ( + QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, + QTableWidget, QTableWidgetItem, QPushButton, QTabWidget, + QLabel, QLineEdit, QComboBox, QSpinBox, QMessageBox, + QDialog, QFormLayout, QDialogButtonBox, QHeaderView, + QToolBar, QStatusBar, QGroupBox, QTextEdit, QInputDialog +) +from PyQt6.QtCore import Qt, QTimer, pyqtSignal +from PyQt6.QtGui import QAction, QIcon, QFont +from typing import Optional, Dict, Any +import logging + +# Импортируем наш модуль БД +from database import Database + +logger = logging.getLogger(__name__) + +# Маппинг валют по регионам +CURRENCY_MAP = { + 'Pakistan': ('PKR', '₨'), + 'India': ('INR', '₹'), + 'China': ('CNY', '¥'), + 'USA': ('USD', '$'), + 'Dubai': ('AED', 'د.إ') +} + +class ModelDialog(QDialog): + """Диалог для добавления/редактирования модели""" + + def __init__(self, parent=None, model_data=None): + super().__init__(parent) + self.model_data = model_data + self.db = Database() + self.init_ui() + + def init_ui(self): + self.setWindowTitle("Добавить модель" if not self.model_data else "Редактировать модель") + self.setModal(True) + self.setMinimumWidth(500) + + layout = QFormLayout() + + # Поля формы + self.company_combo = QComboBox() + companies = self.db.get_all_companies() + for company in companies: + self.company_combo.addItem(company['company_name'], company['company_id']) + + self.model_name_edit = QLineEdit() + self.weight_edit = QLineEdit() + self.ram_edit = QLineEdit() + self.front_camera_edit = QLineEdit() + self.back_camera_edit = QLineEdit() + self.processor_edit = QLineEdit() + self.battery_edit = QLineEdit() + self.screen_edit = QLineEdit() + self.year_spin = QSpinBox() + self.year_spin.setRange(2000, 2030) + self.year_spin.setValue(2024) + + # Добавляем поля в форму + layout.addRow("Компания:", self.company_combo) + layout.addRow("Название модели:", self.model_name_edit) + layout.addRow("Вес:", self.weight_edit) + layout.addRow("RAM:", self.ram_edit) + layout.addRow("Фронтальная камера:", self.front_camera_edit) + layout.addRow("Основная камера:", self.back_camera_edit) + layout.addRow("Процессор:", self.processor_edit) + layout.addRow("Батарея:", self.battery_edit) + layout.addRow("Размер экрана:", self.screen_edit) + layout.addRow("Год выпуска:", self.year_spin) + + # Заполняем данные при редактировании + if self.model_data: + self.model_name_edit.setText(self.model_data.get('model_name', '')) + self.weight_edit.setText(self.model_data.get('mobile_weight', '')) + self.ram_edit.setText(self.model_data.get('ram', '')) + self.front_camera_edit.setText(self.model_data.get('front_camera', '')) + self.back_camera_edit.setText(self.model_data.get('back_camera', '')) + self.processor_edit.setText(self.model_data.get('processor_name', '')) + self.battery_edit.setText(self.model_data.get('battery_capacity', '')) + self.screen_edit.setText(self.model_data.get('screen_size', '')) + if self.model_data.get('launched_year'): + self.year_spin.setValue(self.model_data['launched_year']) + + # Устанавливаем компанию + for i in range(self.company_combo.count()): + if self.company_combo.itemData(i) == self.model_data.get('company_id'): + self.company_combo.setCurrentIndex(i) + break + + # Кнопки + buttons = QDialogButtonBox( + QDialogButtonBox.StandardButton.Ok | + QDialogButtonBox.StandardButton.Cancel + ) + buttons.accepted.connect(self.accept) + buttons.rejected.connect(self.reject) + + layout.addRow(buttons) + self.setLayout(layout) + + def get_data(self) -> Dict[str, Any]: + """Получение данных из формы""" + return { + 'company_id': self.company_combo.currentData(), + 'model_name': self.model_name_edit.text(), + 'mobile_weight': self.weight_edit.text() or None, + 'ram': self.ram_edit.text() or None, + 'front_camera': self.front_camera_edit.text() or None, + 'back_camera': self.back_camera_edit.text() or None, + 'processor_name': self.processor_edit.text() or None, + 'battery_capacity': self.battery_edit.text() or None, + 'screen_size': self.screen_edit.text() or None, + 'launched_year': self.year_spin.value() + } + + +class PriceDialog(QDialog): + """Диалог для управления ценами модели""" + + def __init__(self, parent=None, model_id=None, model_name=""): + super().__init__(parent) + self.model_id = model_id + self.model_name = model_name + self.db = Database() + self.init_ui() + self.load_prices() + + def init_ui(self): + self.setWindowTitle(f"Цены для: {self.model_name}") + self.setModal(True) + self.setMinimumSize(600, 400) + + layout = QVBoxLayout() + + # Таблица цен + self.prices_table = QTableWidget() + self.prices_table.setColumnCount(4) + self.prices_table.setHorizontalHeaderLabels(["Регион", "Цена", "Валюта", "Действия"]) + self.prices_table.setSortingEnabled(True) + + # Настройка размеров столбцов + header = self.prices_table.horizontalHeader() + header.setSectionResizeMode(0, QHeaderView.ResizeMode.ResizeToContents) + header.setSectionResizeMode(1, QHeaderView.ResizeMode.ResizeToContents) + header.setSectionResizeMode(2, QHeaderView.ResizeMode.ResizeToContents) + header.setSectionResizeMode(3, QHeaderView.ResizeMode.Stretch) + + layout.addWidget(self.prices_table) + + # Форма добавления цены + add_group = QGroupBox("Добавить/Обновить цену") + add_layout = QHBoxLayout() + + self.region_combo = QComboBox() + regions = self.db.get_all_regions() + for region in regions: + self.region_combo.addItem(region['region_name'], region['region_id']) + + self.price_edit = QLineEdit() + self.price_edit.setPlaceholderText("Цена") + + add_btn = QPushButton("Добавить/Обновить") + add_btn.clicked.connect(self.add_update_price) + + add_layout.addWidget(QLabel("Регион:")) + add_layout.addWidget(self.region_combo) + add_layout.addWidget(QLabel("Цена:")) + add_layout.addWidget(self.price_edit) + add_layout.addWidget(add_btn) + + add_group.setLayout(add_layout) + layout.addWidget(add_group) + + # Кнопка закрытия + close_btn = QPushButton("Закрыть") + close_btn.clicked.connect(self.close) + layout.addWidget(close_btn) + + self.setLayout(layout) + + def format_price(self, price: float, region_name: str) -> str: + """Форматирование цены с правильным символом валюты""" + currency_code, currency_symbol = CURRENCY_MAP.get(region_name, ('USD', '$')) + return f"{currency_symbol}{price:,.2f}" + + def load_prices(self): + """Загрузка цен из БД""" + prices = self.db.get_model_prices(self.model_id) + self.prices_table.setRowCount(len(prices)) + + for row, price_data in enumerate(prices): + # Регион + region_item = QTableWidgetItem(price_data['region_name']) + region_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter) + self.prices_table.setItem(row, 0, region_item) + + # Цена с правильной валютой + price_str = self.format_price(price_data['price'], price_data['region_name']) + price_item = QTableWidgetItem(price_str) + price_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter) + self.prices_table.setItem(row, 1, price_item) + + # Код валюты + currency_code, _ = CURRENCY_MAP.get(price_data['region_name'], ('USD', '$')) + currency_item = QTableWidgetItem(currency_code) + currency_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter) + self.prices_table.setItem(row, 2, currency_item) + + # Кнопка удаления + delete_btn = QPushButton("Удалить") + delete_btn.clicked.connect(lambda checked, pid=price_data['price_id']: self.delete_price(pid)) + self.prices_table.setCellWidget(row, 3, delete_btn) + + def add_update_price(self): + """Добавление или обновление цены""" + try: + region_id = self.region_combo.currentData() + price = float(self.price_edit.text()) + + self.db.add_or_update_price(self.model_id, region_id, price) + self.load_prices() + self.price_edit.clear() + + QMessageBox.information(self, "Успех", "Цена успешно обновлена!") + except ValueError: + QMessageBox.warning(self, "Ошибка", "Введите корректную цену!") + except Exception as e: + QMessageBox.critical(self, "Ошибка", f"Ошибка при обновлении цены: {str(e)}") + + def delete_price(self, price_id): + """Удаление цены""" + reply = QMessageBox.question( + self, "Подтверждение", + "Вы уверены, что хотите удалить эту цену?", + QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No + ) + + if reply == QMessageBox.StandardButton.Yes: + try: + self.db.delete_price(price_id) + self.load_prices() + QMessageBox.information(self, "Успех", "Цена удалена!") + except Exception as e: + QMessageBox.critical(self, "Ошибка", f"Ошибка при удалении: {str(e)}") + + +class MainWindow(QMainWindow): + """Главное окно приложения""" + + def __init__(self): + super().__init__() + self.db = Database() + self.init_ui() + self.connect_to_db() + + def init_ui(self): + self.setWindowTitle("Датасет мобильных устройств") + self.setGeometry(100, 100, 1200, 600) + + # Центральный виджет + central_widget = QWidget() + self.setCentralWidget(central_widget) + + # Основной layout + layout = QVBoxLayout(central_widget) + + # Создаем панель инструментов + self.create_toolbar() + + # Создаем вкладки + self.tabs = QTabWidget() + + # Вкладка компаний + self.companies_tab = self.create_companies_tab() + self.tabs.addTab(self.companies_tab, "🏢 Компании") + + # Вкладка моделей + self.models_tab = self.create_models_tab() + self.tabs.addTab(self.models_tab, "📱 Модели") + + # Вкладка аналитики + self.analytics_tab = self.create_analytics_tab() + self.tabs.addTab(self.analytics_tab, "📊 Аналитика") + + layout.addWidget(self.tabs) + + # Статусная строка + self.status_bar = QStatusBar() + self.setStatusBar(self.status_bar) + self.status_bar.showMessage("Готов к работе") + + def create_toolbar(self): + """Создание панели инструментов""" + toolbar = QToolBar() + self.addToolBar(toolbar) + + # Действия + refresh_action = QAction("🔄 Обновить", self) + refresh_action.triggered.connect(self.refresh_data) + toolbar.addAction(refresh_action) + + toolbar.addSeparator() + + add_model_action = QAction("➕ Добавить модель", self) + add_model_action.triggered.connect(self.add_model) + toolbar.addAction(add_model_action) + + def create_companies_tab(self) -> QWidget: + """Создание вкладки компаний""" + widget = QWidget() + layout = QVBoxLayout(widget) + + # Панель управления + control_panel = QHBoxLayout() + + add_company_btn = QPushButton("➕ Добавить компанию") + add_company_btn.clicked.connect(self.add_company) + control_panel.addWidget(add_company_btn) + + control_panel.addStretch() + layout.addLayout(control_panel) + + # Таблица компаний + self.companies_table = QTableWidget() + self.companies_table.setColumnCount(3) + self.companies_table.setHorizontalHeaderLabels(["ID", "Название компании", "Кол-во моделей"]) + self.companies_table.setSortingEnabled(True) + + # Настройка размеров столбцов + header = self.companies_table.horizontalHeader() + header.setSectionResizeMode(0, QHeaderView.ResizeMode.ResizeToContents) + header.setSectionResizeMode(1, QHeaderView.ResizeMode.Stretch) + header.setSectionResizeMode(2, QHeaderView.ResizeMode.ResizeToContents) + + layout.addWidget(self.companies_table) + + return widget + + def create_models_tab(self) -> QWidget: + """Создание вкладки моделей""" + widget = QWidget() + layout = QVBoxLayout(widget) + + # Панель поиска + search_panel = QHBoxLayout() + + self.search_edit = QLineEdit() + self.search_edit.setPlaceholderText("🔍 Поиск по названию, компании, RAM...") + self.search_edit.textChanged.connect(self.search_models) + search_panel.addWidget(self.search_edit) + + layout.addLayout(search_panel) + + # Таблица моделей + self.models_table = QTableWidget() + self.models_table.setColumnCount(11) + self.models_table.setHorizontalHeaderLabels([ + "ID", "Компания", "Модель", "RAM", "Батарея", + "Экран", "Год", "Регионов с ценами", "Действия", "", "" + ]) + self.models_table.setSortingEnabled(True) + + # Настройка размеров столбцов + header = self.models_table.horizontalHeader() + # ID - минимальный размер + header.setSectionResizeMode(0, QHeaderView.ResizeMode.ResizeToContents) + # Компания и Модель - расширяемые + header.setSectionResizeMode(1, QHeaderView.ResizeMode.Stretch) + header.setSectionResizeMode(2, QHeaderView.ResizeMode.Stretch) + # Характеристики - по содержимому + for i in range(3, 8): + header.setSectionResizeMode(i, QHeaderView.ResizeMode.ResizeToContents) + # Кнопки действий - фиксированные + for i in range(8, 11): + header.setSectionResizeMode(i, QHeaderView.ResizeMode.Fixed) + header.resizeSection(i, 120) + + layout.addWidget(self.models_table) + + return widget + + def create_analytics_tab(self) -> QWidget: + """Создание вкладки аналитики""" + widget = QWidget() + layout = QVBoxLayout(widget) + + # Статистика по регионам + stats_group = QGroupBox("📊 Статистика цен по регионам") + stats_layout = QVBoxLayout() + + self.stats_text = QTextEdit() + self.stats_text.setReadOnly(True) + self.stats_text.setFont(QFont("Consolas", 10)) + stats_layout.addWidget(self.stats_text) + + refresh_stats_btn = QPushButton("🔄 Обновить статистику") + refresh_stats_btn.clicked.connect(self.update_statistics) + stats_layout.addWidget(refresh_stats_btn) + + stats_group.setLayout(stats_layout) + layout.addWidget(stats_group) + + return widget + + def connect_to_db(self): + """Подключение к БД""" + if self.db.connect(): + self.status_bar.showMessage("✅ Подключено к БД") + self.refresh_data() + else: + QMessageBox.critical(self, "Ошибка", "Не удалось подключиться к БД!") + + def refresh_data(self): + """Обновление всех данных""" + self.load_companies() + self.load_models() + self.update_statistics() + self.status_bar.showMessage("✅ Данные обновлены") + + def load_companies(self): + """Загрузка списка компаний""" + companies = self.db.get_all_companies() + self.companies_table.setRowCount(len(companies)) + + for row, company in enumerate(companies): + # ID + id_item = QTableWidgetItem(str(company['company_id'])) + id_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter) + self.companies_table.setItem(row, 0, id_item) + + # Название + name_item = QTableWidgetItem(company['company_name']) + name_item.setTextAlignment(Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter) + self.companies_table.setItem(row, 1, name_item) + + # Количество моделей + count_item = QTableWidgetItem(str(company['models_count'])) + count_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter) + self.companies_table.setItem(row, 2, count_item) + + def load_models(self, search_text=""): + """Загрузка списка моделей""" + if search_text: + models = self.db.search_models(search_text) + else: + models = self.db.get_all_models() + + self.models_table.setRowCount(len(models)) + + for row, model in enumerate(models): + # ID + id_item = QTableWidgetItem(str(model['model_id'])) + id_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter) + self.models_table.setItem(row, 0, id_item) + + # Компания + company_item = QTableWidgetItem(model['company_name']) + company_item.setTextAlignment(Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter) + self.models_table.setItem(row, 1, company_item) + + # Модель + model_item = QTableWidgetItem(model['model_name']) + model_item.setTextAlignment(Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter) + self.models_table.setItem(row, 2, model_item) + + # RAM + ram_item = QTableWidgetItem(model.get('ram', '')) + ram_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter) + self.models_table.setItem(row, 3, ram_item) + + # Батарея + battery_item = QTableWidgetItem(model.get('battery_capacity', '')) + battery_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter) + self.models_table.setItem(row, 4, battery_item) + + # Экран + screen_item = QTableWidgetItem(model.get('screen_size', '')) + screen_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter) + self.models_table.setItem(row, 5, screen_item) + + # Год + year_item = QTableWidgetItem(str(model.get('launched_year', ''))) + year_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter) + self.models_table.setItem(row, 6, year_item) + + # Регионов с ценами + regions_item = QTableWidgetItem(str(model.get('price_regions', 0))) + regions_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter) + self.models_table.setItem(row, 7, regions_item) + + # Кнопки действий + edit_btn = QPushButton("✏️ Редакт.") + edit_btn.clicked.connect(lambda checked, mid=model['model_id']: self.edit_model(mid)) + self.models_table.setCellWidget(row, 8, edit_btn) + + price_btn = QPushButton("💰 Цены") + price_btn.clicked.connect( + lambda checked, mid=model['model_id'], name=model['model_name']: + self.manage_prices(mid, name) + ) + self.models_table.setCellWidget(row, 9, price_btn) + + delete_btn = QPushButton("🗑️ Удалить") + delete_btn.clicked.connect(lambda checked, mid=model['model_id']: self.delete_model(mid)) + self.models_table.setCellWidget(row, 10, delete_btn) + + def add_company(self): + """Добавление новой компании""" + name, ok = QInputDialog.getText(self, "Новая компания", "Введите название компании:") + if ok and name: + try: + self.db.add_company(name) + self.refresh_data() + QMessageBox.information(self, "Успех", f"Компания '{name}' добавлена!") + except Exception as e: + QMessageBox.critical(self, "Ошибка", f"Ошибка при добавлении: {str(e)}") + + def add_model(self): + """Добавление новой модели""" + dialog = ModelDialog(self) + if dialog.exec() == QDialog.DialogCode.Accepted: + try: + model_data = dialog.get_data() + self.db.add_model(model_data) + self.refresh_data() + QMessageBox.information(self, "Успех", "Модель добавлена!") + except Exception as e: + QMessageBox.critical(self, "Ошибка", f"Ошибка при добавлении: {str(e)}") + + def edit_model(self, model_id): + """Редактирование модели""" + model_data = self.db.get_model_by_id(model_id) + dialog = ModelDialog(self, model_data) + + if dialog.exec() == QDialog.DialogCode.Accepted: + try: + updated_data = dialog.get_data() + self.db.update_model(model_id, updated_data) + self.refresh_data() + QMessageBox.information(self, "Успех", "Модель обновлена!") + except Exception as e: + QMessageBox.critical(self, "Ошибка", f"Ошибка при обновлении: {str(e)}") + + def delete_model(self, model_id): + """Удаление модели""" + reply = QMessageBox.question( + self, "Подтверждение", + "Вы уверены, что хотите удалить эту модель?", + QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No + ) + + if reply == QMessageBox.StandardButton.Yes: + try: + self.db.delete_model(model_id) + self.refresh_data() + QMessageBox.information(self, "Успех", "Модель удалена!") + except Exception as e: + QMessageBox.critical(self, "Ошибка", f"Ошибка при удалении: {str(e)}") + + def manage_prices(self, model_id, model_name): + """Управление ценами модели""" + dialog = PriceDialog(self, model_id, model_name) + dialog.exec() + self.refresh_data() + + def search_models(self, text): + """Поиск моделей""" + self.load_models(text) + + def update_statistics(self): + """Обновление статистики""" + try: + stats = self.db.get_price_statistics() + + stats_text = "📊 СТАТИСТИКА ЦЕН ПО РЕГИОНАМ\n" + "="*60 + "\n\n" + + for stat in stats: + region_name = stat['region_name'] + currency_code, currency_symbol = CURRENCY_MAP.get(region_name, ('USD', '$')) + + stats_text += f"🌍 {region_name} ({currency_code}):\n" + stats_text += f" • Моделей с ценами: {stat['models_count']}\n" + stats_text += f" • Средняя цена: {currency_symbol}{stat['avg_price']:,.2f}\n" + stats_text += f" • Минимальная цена: {currency_symbol}{stat['min_price']:,.2f}\n" + stats_text += f" • Максимальная цена: {currency_symbol}{stat['max_price']:,.2f}\n\n" + + self.stats_text.setText(stats_text) + except Exception as e: + self.stats_text.setText(f"Ошибка при загрузке статистики: {str(e)}") + + def closeEvent(self, event): + """Обработка закрытия окна""" + self.db.disconnect() + event.accept() \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..bf77dc8 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,20 @@ +# requirements.txt +# Зависимости для курсового проекта "Мобильные устройства" + +# Работа с базой данных PostgreSQL +psycopg2-binary==2.9.9 + +# GUI фреймворк +PyQt6==6.6.1 +PyQt6-Qt6==6.6.1 +PyQt6-sip==13.6.0 + +# Работа с данными +pandas==2.1.4 +numpy==1.26.2 + +# Для работы с CSV +openpyxl==3.1.2 # Опционально, для Excel файлов + +# Логирование (встроено в Python, но можно расширить) +# colorlog==6.8.0 # Опционально, для цветного вывода логов \ No newline at end of file diff --git a/scripts/import_data.py b/scripts/import_data.py new file mode 100644 index 0000000..f004aca --- /dev/null +++ b/scripts/import_data.py @@ -0,0 +1,263 @@ +import pandas as pd +import psycopg2 +from psycopg2.extras import execute_values +import re +from typing import Optional, Dict, Tuple +import logging + +# Настройка логирования +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') +logger = logging.getLogger(__name__) + +class MobileDataImporter: + """Класс для импорта данных из CSV в PostgreSQL с нормализацией""" + + def __init__(self, db_config: Dict[str, str]): + """ + Инициализация импортера + + Args: + db_config: Словарь с параметрами подключения к БД + """ + self.db_config = db_config + self.conn = None + self.cursor = None + self.company_cache = {} + self.processor_cache = {} + self.region_cache = {} + + def connect(self): + """Установка соединения с БД""" + try: + self.conn = psycopg2.connect(**self.db_config) + self.cursor = self.conn.cursor() + logger.info("✅ Успешное подключение к БД") + except Exception as e: + logger.error(f"❌ Ошибка подключения к БД: {e}") + raise + + def disconnect(self): + """Закрытие соединения с БД""" + if self.cursor: + self.cursor.close() + if self.conn: + self.conn.close() + logger.info("🔒 Соединение с БД закрыто") + + def parse_price(self, price_str: str) -> Optional[float]: + """ + Парсинг строки с ценой + + Args: + price_str: Строка с ценой (может содержать символы валюты) + + Returns: + Числовое значение цены или None + """ + if pd.isna(price_str) or price_str == '': + return None + + # Удаляем все символы кроме цифр и точки + price_str = str(price_str) + price_clean = re.sub(r'[^\d.]', '', price_str) + + try: + return float(price_clean) if price_clean else None + except ValueError: + logger.warning(f"⚠️ Не удалось распарсить цену: {price_str}") + return None + + def get_or_create_company(self, company_name: str) -> int: + """Получение или создание компании""" + if company_name in self.company_cache: + return self.company_cache[company_name] + + # Проверяем существование + self.cursor.execute( + "SELECT company_id FROM companies WHERE company_name = %s", + (company_name,) + ) + result = self.cursor.fetchone() + + if result: + company_id = result[0] + else: + # Создаем новую компанию + self.cursor.execute( + "INSERT INTO companies (company_name) VALUES (%s) RETURNING company_id", + (company_name,) + ) + company_id = self.cursor.fetchone()[0] + logger.info(f"➕ Добавлена компания: {company_name}") + + self.company_cache[company_name] = company_id + return company_id + + def get_or_create_processor(self, processor_name: str) -> Optional[int]: + """Получение или создание процессора""" + if pd.isna(processor_name) or processor_name == '': + return None + + if processor_name in self.processor_cache: + return self.processor_cache[processor_name] + + # Проверяем существование + self.cursor.execute( + "SELECT processor_id FROM processors WHERE processor_name = %s", + (processor_name,) + ) + result = self.cursor.fetchone() + + if result: + processor_id = result[0] + else: + # Создаем новый процессор + self.cursor.execute( + "INSERT INTO processors (processor_name) VALUES (%s) RETURNING processor_id", + (processor_name,) + ) + processor_id = self.cursor.fetchone()[0] + logger.info(f"➕ Добавлен процессор: {processor_name}") + + self.processor_cache[processor_name] = processor_id + return processor_id + + def load_regions(self): + """Загрузка регионов в кэш""" + self.cursor.execute("SELECT region_id, region_name FROM regions") + for region_id, region_name in self.cursor.fetchall(): + self.region_cache[region_name] = region_id + logger.info(f"📍 Загружено регионов: {len(self.region_cache)}") + + def import_data(self, csv_path: str): + """ + Основной метод импорта данных + + Args: + csv_path: Путь к CSV файлу + """ + logger.info(f"📂 Начинаем импорт из файла: {csv_path}") + + # Читаем CSV + df = pd.read_csv(csv_path, encoding='cp1252') + logger.info(f"📊 Загружено строк: {len(df)}") + + # Загружаем регионы + self.load_regions() + + # Обрабатываем каждую строку + models_count = 0 + prices_count = 0 + + for idx, row in df.iterrows(): + try: + # Получаем или создаем компанию + company_id = self.get_or_create_company(row['Company Name']) + + # Получаем или создаем процессор + processor_id = self.get_or_create_processor(row['Processor']) + + # Проверяем существование модели + self.cursor.execute( + """SELECT model_id FROM models + WHERE model_name = %s AND company_id = %s""", + (row['Model Name'], company_id) + ) + existing_model = self.cursor.fetchone() + + if existing_model: + model_id = existing_model[0] + else: + # Вставляем модель + self.cursor.execute( + """INSERT INTO models + (model_name, company_id, processor_id, mobile_weight, + ram, front_camera, back_camera, battery_capacity, + screen_size, launched_year) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + RETURNING model_id""", + ( + row['Model Name'], + company_id, + processor_id, + row['Mobile Weight'] if pd.notna(row['Mobile Weight']) else None, + row['RAM'] if pd.notna(row['RAM']) else None, + row['Front Camera'] if pd.notna(row['Front Camera']) else None, + row['Back Camera'] if pd.notna(row['Back Camera']) else None, + row['Battery Capacity'] if pd.notna(row['Battery Capacity']) else None, + row['Screen Size'] if pd.notna(row['Screen Size']) else None, + int(row['Launched Year']) if pd.notna(row['Launched Year']) else None + ) + ) + model_id = self.cursor.fetchone()[0] + models_count += 1 + + # Вставляем цены для всех регионов + price_columns = [ + ('Pakistan', 'Launched Price (Pakistan)'), + ('India', 'Launched Price (India)'), + ('China', 'Launched Price (China)'), + ('USA', 'Launched Price (USA)'), + ('Dubai', 'Launched Price (Dubai)') + ] + + for region_name, price_column in price_columns: + price = self.parse_price(row[price_column]) + if price is not None: + region_id = self.region_cache[region_name] + + # Проверяем существование цены + self.cursor.execute( + """SELECT price_id FROM prices + WHERE model_id = %s AND region_id = %s""", + (model_id, region_id) + ) + + if not self.cursor.fetchone(): + self.cursor.execute( + """INSERT INTO prices (model_id, region_id, price) + VALUES (%s, %s, %s)""", + (model_id, region_id, price) + ) + prices_count += 1 + + # Коммитим каждые 100 записей + if (idx + 1) % 100 == 0: + self.conn.commit() + logger.info(f"💾 Обработано строк: {idx + 1}") + + except Exception as e: + logger.error(f"❌ Ошибка при обработке строки {idx}: {e}") + self.conn.rollback() + continue + + # Финальный коммит + self.conn.commit() + logger.info(f""" + ✅ Импорт завершен успешно! + 📱 Добавлено моделей: {models_count} + 💰 Добавлено цен: {prices_count} + 🏢 Компаний в БД: {len(self.company_cache)} + 🔧 Процессоров в БД: {len(self.processor_cache)} + """) + + +# Использование скрипта +if __name__ == "__main__": + # Конфигурация подключения к БД + db_config = { + 'host': 'localhost', + 'port': 5432, + 'database': 'mobile_devices_db', + 'user': 'admin', + 'password': 'password' # Замените на ваш пароль + } + + # Создаем импортер и выполняем импорт + importer = MobileDataImporter(db_config) + + try: + importer.connect() + importer.import_data('Mobiles Dataset 2025.csv') # Укажите путь к вашему файлу + finally: + importer.disconnect() \ No newline at end of file diff --git a/sql/create_schema.sql b/sql/create_schema.sql new file mode 100644 index 0000000..226e90e --- /dev/null +++ b/sql/create_schema.sql @@ -0,0 +1,105 @@ +-- Создание базы данных +-- Инструкция: Выполните этот скрипт в pgAdmin или psql под пользователем postgres +CREATE DATABASE mobile_devices_db + WITH + OWNER = postgres + ENCODING = 'UTF8' + CONNECTION LIMIT = -1; + +-- Подключитесь к созданной БД +\c mobile_devices_db; + +-- 1. Таблица компаний-производителей +CREATE TABLE companies ( + company_id SERIAL PRIMARY KEY, + company_name VARCHAR(100) NOT NULL UNIQUE +); + +-- 2. Таблица процессоров (справочник) +CREATE TABLE processors ( + processor_id SERIAL PRIMARY KEY, + processor_name VARCHAR(200) NOT NULL UNIQUE +); + +-- 3. Таблица моделей устройств +CREATE TABLE models ( + model_id SERIAL PRIMARY KEY, + model_name VARCHAR(200) NOT NULL, + company_id INTEGER NOT NULL REFERENCES companies(company_id) ON DELETE CASCADE, + processor_id INTEGER REFERENCES processors(processor_id) ON DELETE SET NULL, + mobile_weight VARCHAR(50), + ram VARCHAR(50), + front_camera VARCHAR(100), + back_camera VARCHAR(100), + battery_capacity VARCHAR(50), + screen_size VARCHAR(50), + launched_year INTEGER CHECK (launched_year >= 2000 AND launched_year <= 2030), + UNIQUE(company_id, model_name) +); + +-- 4. Таблица регионов/стран +CREATE TABLE regions ( + region_id SERIAL PRIMARY KEY, + region_name VARCHAR(50) NOT NULL UNIQUE, + region_code VARCHAR(10) UNIQUE +); + +-- 5. Таблица цен в различных регионах +CREATE TABLE prices ( + price_id SERIAL PRIMARY KEY, + model_id INTEGER NOT NULL REFERENCES models(model_id) ON DELETE CASCADE, + region_id INTEGER NOT NULL REFERENCES regions(region_id) ON DELETE CASCADE, + price DECIMAL(10,2) CHECK (price >= 0), + currency VARCHAR(10) DEFAULT 'USD', + UNIQUE(model_id, region_id) +); + +-- 6. Создание индексов для оптимизации производительности +-- Эти индексы пока не создаем (для выполнения задания с EXPLAIN ANALYZE) +-- CREATE INDEX idx_models_company_id ON models(company_id); +-- CREATE INDEX idx_models_launched_year ON models(launched_year); +-- CREATE INDEX idx_prices_model_id ON prices(model_id); +-- CREATE INDEX idx_prices_region_id ON prices(region_id); +-- CREATE INDEX idx_companies_name ON companies(company_name); +-- CREATE INDEX idx_models_name ON models(model_name); + +-- 7. Вставка начальных данных для регионов +INSERT INTO regions (region_name, region_code) VALUES + ('Pakistan', 'PK'), + ('India', 'IN'), + ('China', 'CN'), + ('USA', 'US'), + ('Dubai', 'AE'); + +-- 8. Создание представлений для удобства работы +CREATE VIEW mobile_full_info AS +SELECT + m.model_id, + c.company_name, + m.model_name, + m.mobile_weight, + m.ram, + m.front_camera, + m.back_camera, + pr.processor_name, + m.battery_capacity, + m.screen_size, + m.launched_year +FROM models m +JOIN companies c ON m.company_id = c.company_id +LEFT JOIN processors pr ON m.processor_id = pr.processor_id; + +-- 9. Представление для анализа цен по регионам +CREATE VIEW regional_prices AS +SELECT + c.company_name, + m.model_name, + r.region_name, + p.price, + p.currency, + m.launched_year +FROM prices p +JOIN models m ON p.model_id = m.model_id +JOIN companies c ON m.company_id = c.company_id +JOIN regions r ON p.region_id = r.region_id +ORDER BY c.company_name, m.model_name, r.region_name; \ No newline at end of file diff --git a/sql/explain_results/без_индексов.csv b/sql/explain_results/без_индексов.csv new file mode 100644 index 0000000..c11f22a --- /dev/null +++ b/sql/explain_results/без_индексов.csv @@ -0,0 +1,14 @@ +"QUERY PLAN" +"Sort (cost=44.76..44.84 rows=31 width=245) (actual time=0.216..0.217 rows=18 loops=1)" +" Sort Key: c.company_name, m.model_name" +" Sort Method: quicksort Memory: 25kB" +" -> Hash Join (cost=17.20..43.99 rows=31 width=245) (actual time=0.055..0.180 rows=18 loops=1)" +" Hash Cond: (m.company_id = c.company_id)" +" -> Seq Scan on models m (cost=0.00..26.71 rows=31 width=31) (actual time=0.038..0.159 rows=18 loops=1)" +" Filter: (((ram)::text ~~ '%8GB%'::text) AND ((battery_capacity)::text ~~ '%5000%'::text))" +" Rows Removed by Filter: 896" +" -> Hash (cost=13.20..13.20 rows=320 width=222) (actual time=0.010..0.010 rows=19 loops=1)" +" Buckets: 1024 Batches: 1 Memory Usage: 9kB" +" -> Seq Scan on companies c (cost=0.00..13.20 rows=320 width=222) (actual time=0.004..0.005 rows=19 loops=1)" +"Planning Time: 0.155 ms" +"Execution Time: 0.234 ms" diff --git a/sql/explain_results/без_индексов.png b/sql/explain_results/без_индексов.png new file mode 100644 index 0000000000000000000000000000000000000000..09cb15e46b67fcad743b8ce4acdfdd16d4109f02 GIT binary patch literal 66925 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 literal 0 HcmV?d00001 diff --git a/sql/explain_results/с_индексами.csv b/sql/explain_results/с_индексами.csv new file mode 100644 index 0000000..f6d9b1a --- /dev/null +++ b/sql/explain_results/с_индексами.csv @@ -0,0 +1,6 @@ +"schemaname","n_tup_ins","n_tup_upd","n_tup_del","seq_scan","seq_tup_read","idx_scan","idx_tup_fetch" +"public","19","0","0","33","589","934","915" +"public","914","0","0","32","27420","5520","4702" +"public","4569","0","0","26","109656","4750","565" +"public","5","0","0","9","30","4594","4594" +"public","217","0","0","8","1302","1141","924" diff --git a/sql/explain_results/с_индексами.png b/sql/explain_results/с_индексами.png new file mode 100644 index 0000000000000000000000000000000000000000..39b1d6468f6bba56f24e7095a94a621d2f4231e1 GIT binary patch literal 26856 zcmZ5{WmsIxwk^TkgA?3>yL*rT!KDe>xHRq_+?^o7-Jx-J_u%dUf;%++IA`yB-}l~+ zB~`0*)T&uy&YBgjtSEzqOoR*t1%>ui_KPYM6b#+_dp#oj`#q*kZTbE2!AVs{0;+0~ z(k$-x{{dP77?ePu*bAUn0By25mnD;y3}js{cCZ9=KXvYbsviU&jP7hXeoxyvs3 z0pD9&sPcLRL}PE`08Pr5<>g4W^y*Pw^i->5_Tu zgwwqu#AjxbMnpyiAG|$nzWr`IUfm>IjS7x*-VkWQbc2&a|J^)@#Z zef^EUZ4Taq1{j%{nFIW%tel)U4-XH~MstLn#EWTN*+u8lh!m&dxyoAy*?xGBT?T$H z8X4te?bW>O?BdxXKIHMT{VfGFAR8Npw^twC7DuTJ$>yx&!gWjBPEGZ~c9*(Md zdd%u)`W>F7q_Pd6Gcz;jN^w?tZLVnf($Uz(E3|ZU2r%%dn8gCgEPjibf^I>rSAX+k z-`lA5?Hk(JdK(?r_!?EL5aqLmhR)D~8)(XNqDx0xJB=;uY`Ly@<$RDBa=ciLa!h7- z;jz1^|4GQ5oH}KBdAWD%m!FIV>BD;SqO8~j^S zNr$zt$R|P(?`BL%5!>xu*xo_gUw0Yy-i%JCP!R|fZ3vZMu(J1ptM^4eS*AaWUrJh9 znzE9>PSa(Ng-vY_Ldh>|jLs-g_nnEiM*L2e%k$y4GI<57hJ$2QjpsJ*hL08b{{_>) zsgs!Ey$zU33Kf-=KugQ7FQKy5j;fIuTlHu~h=)uiRoD`U6hQ=4W~8$cfx<@g{~ICg zrTG2<^Zjc96_=bMWMn$T;$o|(SHsb2if(J=+8cVtv3(r1q0_|-ckxcLW`QiC(pOm* z4drKwtuhH30&96p3v5c(1y0TbP`DxV?l*|n4_itCxqEILvx>DpOo{T znu0Km0Ilkdy*LRg2>;aG4|Z<(^KVL{REw!__yqAz0Azy&q(chLo5q*u?1Vi`vbM$E zn;=Y;84Js!hG#Sux_Y4qCbnp>3CZGcpU{cbBdd}LYAWPYLkp*A-)|4R_0vK2!;fG( zEc(^fS)Y=ny42>`?eXK+r_v^32~E4cs(ZX%H_ThWisj*|piWx(>=?X$U5e4mg5FYt z2(Q+5Ps+4L4D){LM%Wl7qoAtx1rVADsu9Rjp4l3sK7^u zB5})eK)Tq3=nyNq>wfI|Ub=tAKU=0a=Na0wD z(fqNv{W0@og(+JD{fmzp`${;(T>gb3egf1kuBo1`pn=rznL_t$3-GixV5j zDYV7*qF0zA^A`RJS4UVAN!=9bu?XodTc zz#UfsRW;T4$949CP4zIRHvcR$umcGUMyzP}ax2xZQrjS-Z>=z82LdX|KAL|MV>0<7 z$LmqZ|m)<$XZ2C#K=slJH{R)dJ@J7KZ5(20Aqjn4%H>_FOEq z?FFc+2E0%IkKEkckkh8kAcXs_H^M%k6{5bcEh-69q4L^9-?E(%mJ>aWV;bkP+0@_{ ze6OV&_)!#=9e@$)tHyqCR~2GFpbGyenJk6z*dJb&9oc7=lc!RW8F3Lr&rAL&hkE~t zVv^uA8O$axGGtOJu*JUYu$6mZeUL()VYUa-V%c){@&@+IC&wg{BBRX>KtXb949@m`6|#}gV}y@1keRYdn}HxLZ> zN>C~*b23B+yf&it2K}%?(g8lzda6tw4T!qcdB(%ETp1tN-H0vaDK~FZ-kplTk7@5b zd8PJ5%rlm>ceQpQKWSfp|V3zPo zjp@rilQya%d`_vBj?2$*`B7f;BKX3K`Tf{|Rr9P)yTvQ|M`6vC*C+X~fljWw4o|_7 zH?*|9xE6@9KD`|spd%$ECv_e_A0Z|FW}AhirOJ2x&pA@2@JD0#n%4UqSo|q!3YJ&I zt3TLF?(c%!&^Vu(FUM8N4G}BDyjve?$~S!|K)ZM;hDJ#~IeNPh%{X zWL}y>w%jSs83HdYB#b=hHfgk}xPUJJ3j}Tv0M?a;I_dWSITRa;7Ds&r=$(jZdy%53 z_(N#grI61&ctf@gjtWj~flpHNojx+SlM+5@=0#?`7O9eTyB3_56nK*+x6$+3bKt3# zteEPlw}|3F(GOD6Og!hp2ttG*rmU^vj{I0}kZKsS3FSdqD~6cGTJ5Mj?ta;d1K+9> zuRD`tRetM0#i5-(TpR@y5L?x%8&;nI2)yA#9C#n2S=U&9NdSprLiNi$hF|vKflnS@ zX=r!Xc6kt{%b5FF3HBGUXH(0$u%h^*>g7IxD*0PYa=Dupn_>eUe5f7L9>BqqV;}f7 z228zZc2_`T#2sM`9&Td@bn7(O~EJ&^EE(~@%w7L%Sg7MC$b0ua*$$u z>1yGiNa!2!=>0dT-%hp!k4ee*x3;fctj1`yMVr9B&vv2M80B>&-I@g!eBy$Pu%Zvd5=PjN80hvx?!Lc zVKqK$-<0;cXm=U(F#+?#nVvjnDq;FU#~ZsQ`l7t@dV0rO?1u|Nk+Au4Wk}nqSg(Ma zsqPErVnX%r*{nRUG)d;P6_3nrRsvfTm+Mi%-u&|HVUzkc1YF!lIWA^;h?+qEYzQ zDMws9T*)4t^~tQWWysQZi&r$sbxceWC=3yM;~M5cV!CbH#Qd?l)hvEJ)_}iaW5*B_If&RA0gi4hcNFnG+2Z*aR*L}0Z>|Bzw&tc z3&}I|^RgF{KS$&1wWHgG#P95v?X}|IV*|n2C9Rm6Sv}p={H(=BCvVIsBixNLG1f)Q zpoyyhNxKcZtIhpxc+=~xbE^+c2LW3{E7oZNl{g?mCh6Y$0Zd3V_;-7!Gc8Dt>sYbp{?89{f zTmWUd2Ul7%S;jw)A4wqT3=ZN_fP^nof48!KlObEu>attZ-JgfEWR5U4^`I#CG986| z6emQsT^|VCO#8gsJs9B)Frqen<2k2$9Q{33z#@&zqt94sWQ=Eyci-($5xYw^Blhj1 zoNb*;X@nBJvTGYA+Yro5&gwN@PJkXG%^Bx0_; z@5fh7xZIJ4DU+vVbU5=f>>;b6wt~}@*c79N*^0>Ptww3-X>&Q)*c&A`iJK{QwKgb> zyPN5Xmovuj-m5JxH6doqt(@YJ=|H^XY2#(?*~;TnO#k5a652-lsKe&zB}r)M*!Mn&O`BBm@3I% z%{Y)-p%}gXjJPQ`J-KhOdPY-N;94@~w zZ9G|!#bmZcL3@xz5$wW$N=`U820JoX>)dCUj6}jF2QGE_G2$F<(g6*;v12k{u{CP!XJOH4qhK zSH+YR^Z7s10@r{qG?Ld{a+KqBZxw7dXfJD9w7WL3*%Nd?eve{*ipLm-;34bDi~FID z@)BrcT2U(90OropV7W8YLoIk=`Wb9|2*3G*99H-o&TB*BjwA3Pe{@o&XCrhIpr=W% zJh7prr&sAMS}r*c>QqrevO25v>l-B$@kgn-X~2ZETr*0^8d3uv>H!?c!5P9!IIqGG z)H@L=56+FnD8H`Q z!~}!t9ncC*Bjwl@8x8a^uT*cj9U+UKpQeR{K&14h&LWy3@$PrBrn45f;DspTV@~FIDXd3j;VO>5{&{{lC#5m z^KzhqUR}sI%A8sE#erW_QM0Z!4-y8OIpa{?AP{M(hjkqMj!< z?H9w?wyhrj#rfDJ^UamKOq{ze$(OpGzcp`eU!44$-)cidPGpjVXmQXf5;i}7p^$Iw zNtj`-h9@Tn38S0V`89tuCdzCIwfU`9)-kSwJEW-^W;$f7J1&|YJ!0Zb^_4RfU_rbn zOxs?RtU{(~&K2dqTTQ>X6Z4t1rq$WBE09ng^}18^hfnsoW%U^!7|F* zP#_CC7Nc@}gHH1tmX`a#gp;h?5}kL|g)9W0<8#oo4ChVv?x$TgvpDsV z6Lw-PquZW+(CumXhf2?EqVK*#%jpw3s}NfV5)Lh*pI{~}??5R>z_f7%mT7#2FFCDa zQY|`guw76kH`oz7pE-UCH2&5@lPUevSZ0~ zPQiR4L)z@dQ~=``T@1+$3Fb=yla^~q&)f7YV7<&~hwpdJXb2^U$vD`g zYc?`S_|eHIIvTCtzX_p-7k}P*o+IG9sg%~2BWZkgq1k~9etm6;FyN|UWzNmMDpTq? z%3pB&dmP1XyOTxRxj2$|?t+)hwXmuxNyhWB?^TPYUw1}63Q2T)A$|Ud!I<5(J!X)W zs9uKT((l)*thoG6NyxrCm}V#SgaXf)>UBBdEik}t%L?7WM_IJ$NvcJ;pZB{p5scu7 zvlDyiLb5imtYQK9-d%A?b;p=>XgLreZq)7IE-BAoN^p30IS<5_uE3Ka<|6w)~fxY7iA|QrkBV(SA{*Ku!A^+ z@Qn!sl(Ex6b-j@2jtVDOW8;rY1%gBINkW=?#^&J@esQdgx0SAao{t&L;=Q51)zlv<;Yy15aV7jv-1RIY;%s08ACMH z=UX=unm>Q0usgb5@*KyYBiP;g!LD@epA9{*SQnQ$hCvMOm*r`;ze5%Kk+NjT<4CHOE>(4`kjk?>_>vv5BK(cFcDb=N zZ+V-!BR7mz$FTiUdl#yg)wb7mWk~qkQSl${&Df9B)JiUSWyh|9nLAXU*qIbT%9r); z3R_rqss9|1(x&o{F2`Sc9NQA2fz4$N?Vg$- zioLu`obRbkXL4}7>%QoGp8W*p{Co4bdeZ8UF?!TNGSp$-D}6>;gW?K#Yzb!}2B5xc zB=`9$Dx}Yv@~Pc-kPX{S=kj*9XoPHQl$X1X<78y&<1Dz7OUtW){XP=HU(~R-g}RwG zB`Snl(i+MjWCq)Pu>GP)4Zb%!Eo^(-q^vO+=?oD;ZDP&;@g^v_+_g&|SlC9UpM^uI zOVIm$O?GafCS2h3TRsONkNmdgN1es$g@>VwIlMk4;_f#m3Fz4>`XofYe=#hTxWT zdJ-VS2#{Yr#9yR!p^13AMw9T%pg6Rx=(}r>Y7)+=ZY}uDI*jyvqSBKDZ)jvp$eLCp zR#sL-!)wnsd&GCxMTOjRx4MTF`H{KDWskkAx zi4Z5vI|hSYlb`RlC3mhz{7=uH_g*v-eRt6$j?UTLBVeAB&jYgAQU5$e(mj=ndB<~P zm`pqyD{=c^uH2#hPa5CT=Jo~gUSRNQFkZq0)0ZO*{P^1!8WJbc7;?A96G;bc5A=l2 z7hc=er9Ou|H1EwNc!NFc?qP!DTK$Tk?@C=Rjk-<-9#@;P6GxF0tr6v&t4Tyu+nB|n zR&w@N*cdQy}h z{dQ2KA`C|DUqR^bN}#pSmxE&GwXY7rr#JBzIv?|Oi|EB4!}B3`qq3;RNLFKmT;Hr0 z8y`~``6_b9X?PN`E|Pxn!G~-wihDF~+V52{$mrYhuxw@_KZ$=rOfwGg$$lorx2x^X z+Wh;3cIkp9``AWdQQC~R))CfUfV=f|!92C}kkfXpBBgJvt|999EG4%>|E-o(C$?bc z9@JsW2QT6@hBn#j_3-w+s?v1f8w<_2FXiU#Uw(KhNFlNILBi`xODK%}Atr`9|0)<> zF(#p+PPU_8DXA`Ws5u_2s@u1mq>x0g+`Vhb3&@T8R-FIGA2ylgof?FpVryQ|q)hEF z`E5e+LYh~hcxN4$qD_%25~6pt+UdW^9JNRcKM8b?Il&g}rNnvCBFy__vY(A?#}U@Z zxt6Dz9&5&dP0j664Wr7B4#0~o7-rc{@ji;5%9zuiL{8s2+ofO5Ey`f_elopp7;XC8 zXR=MWEnkj9@?%AM{obAofck3n`YTFm&xNXdj}YVfpAdnM!9z`kE+C{3QDJPJj&Xgxp;BIg`>BKKsrJLjd>vn! z3OpkZ{Vu-x)@_llEvzLgf0f=dq47SeEy*GY{|U^3p+*kO@fC5iAJ!8OsHa6_m&k9U z1%(YoH!yg^Y*^42%G|CNu+bh?C%T8ElMO3e2qxr~cDLhxy8kVMJmB(5I&iJb^|#&y zvO5MgF`YXCSeN&;Gc68M)D2=!Rs<5QEh1iJmj{Ch;FULQ3_$#sXEb?U&~Q8h(f#Xn zoTefCJ=U+C1`L`z@9IpNNKs-Cc=PRIR0tbyXytD2Kxlyl{6+DvR=+!%q3NAG5;3kU za9|~*_XeeeOuhGFE^4sKKSoj0@HJnwB_8 zo27fkL^T9+GhQ9%rZBvAyh}fBPaAGKRMPIhnEr&Ot<^`{8P?|&^q7bz{Fe zwQ2XJTQXGeO3w#3yI+x9d0sj!$pWs_Xdh^@y=stM1WC0fBro=Ld1YBh#Z^6#{!q#Hh5KtyJreXL5#Yd?FbAoaFZe`?z}OZLy^B zDz;At_+mX6gy{qKc783{tg>D%xihc3&QsNDtF{tOk)&lFW566(a?kYD;a$>83-b7u ze-Sqma108{wd7ILGUAq3yih~cv=a)D_=#pOaLBpxRc9ZT!Zx9o54?&_(B`@#87rxVzN)zaM0h<) zl`ZaS#(<=>av^0QneZLqZ;;F2XIjAt{z2tpS_sw69yx3@W-&KmkN&kI{d4;DZ9V$R zszGRf^-caPX;Iif$-^YX4B`&$w}hFYsIhTv zcf`C+fr716#4bj|p9j7irY<$+*zz=?3J^w=0}oTLpc6C^D7IKtD*pU3B;T7?aX3M@ zY3QtP9B&<&Z_OGU?P3iwwf(%c1xMUDRw;xKo~~s?W?)VF48G#_YerK(i)8Fd3Y+j- zAJVkw9CM}sUCpZ4oNL~9_FLOu-v_R&YsJkGO7a2 zyM%CTLUP8=jc*Iw>y< zeTYbcVtV0%)j@~kfXwL^is{GH^n~Nu9ie;!gZz@?sr1}C_?8u&Kd#bN%k?%bxl1;S z7ZO*OKNlIB?|`jV+3&_Qb_aTIp5>T+9m31|rm*0ZXCR;xC^wVl607~(bCTKf*yCTT zzx)v>r(NiE(kpS_>a*q%>Yf&cLt5ap0JN!TJa=_Toh8ztaOG)E){O3{dfo@#uIkLU zmV#2KwA;o5296)+Ia2xQlN_{|VSpVa{VnN@7hAmO-p%@`-A6FKE^fnJ*)gYn`WSa3 zr$sME6(J%@CyZ_1b#Dvnl2R7008A%ts2}9rQSuA3$JH2Eb5EEY9=r^ji;r4qdfHuC zswbB<-J&l;I{)VVM~amT)A3Xc7TO|7b(ga@FU@}FSb{XL>8 zA=!!bV7>lTV6vbT(?9S5WAlJ)C(4>En1b9H>uxWtXG}E6Cj$4i9IvP8oV&k$RFn>j zrtvi_!<@=jZn0a*YKM-`((58I+gVEBH)={#4F`%|Wt7Ws?_itwIu*O!FB;odYi{)}MN$@}Y{no^)P#-lqunk(QyO z)h({*V~*mU2To!)3db65GvQU+l$Lzj8Cp3VJgwA$2tn?;!u#i$^qm^XXNSu!Ne8TN zKly)E2(`Z9vXBsb8TR|YM&<~{3)0d1 z)cn{g@jft|$y#HNUx`tZ3ysD|8f{NI5l0XWVBMSiJX}T_TO*@*Z=|$L7b+7H+s_xt z*%M8B++w#Nru+pj5S||#B;ntqe-ayY-^KMoY2k3fSlfWSCXxWoo+{M=bf{U7KhC?#R2oKNo3y!8lFa_j)pn0v2KM8SUIqq{C|oW z5YJUgWy+Yp10MYjI12{dBB{#Y@zW`vBO%xgw6x*bJ){znkS#JKQiE#5(NK>L>X2O< z82eF)-!`i)XoN)U=AeyWbuN&8-%(4}x2_HnbwncI!oHz3Bbpv-)(pM!<=BDZ2Ip|a+fu1)Tjl- zvtCariv;y)n`l-L(g`>O^1@-uM)h09zZ-XzH9`~|e$}f}{J{X6o-UJvg_n25X`B~t zaK5>u8m+sUVwC-Ks2B>Hw_X@cQ9J%^b^p;Y-sZ>7ie)J?>k*w!)F3fwL;?=P=xYIM z!7@7lmx!DMVaQFVF^1%jj6rmFn+k+787}{o7%fQx84efi`$jE-V@^u_r7dVifhX<` z8kZXlT4%(FIlfyVgIXXb7hSDlb+Q7VSc+@KT^;^`)$lg`d#L6yGq6-v5_eHi-o`^k zblHe&H*vg<#q zCwm@$k$wPA7`qtNLNIF(V=c-hn~(7p)}BSBEv%`(smC*b64*eZQ%=g5Mq6#Z%*|bl ze$2J7UWnfJX;drzT>bcZ8;5qpPIzF^n0l7aEe{NIhV7Do5Nmd(ta2<9g8<{{ zRpRWR6udw^1iRj=hxss5)8;v;GS?>8#2AAwiW9Oy{ey;O_}2pBF5X2FSPxjbOHuE)@AFCz*R=; znMZ7L%F4TuE?(O0cpg3U)?}`JE0DkEH|uS207Im=`3k*_Hr&aclH z?Ug-@d1fH+MsI58_EN(AD+_Rw&LKLcytvu*(*y&n-ff~@OS?t;w1;z|Jd)^hcma;( z(Tp!M#ZNhkl(7MZOGjU_V51keoeJA8ehwd5qf?0@q`a&TTsI&^jXep<%_rFh*N#RwO4Mc^w`Q z_Kaq}`vPjM1vk=E+MZT0sJv3h&n50jn2zxWz8jEGHj$h8z_vfuhIe)X9_od0n^<-$ z9N8^tBFg=9eN}nsV@~tN&iQjYXfsn-nzk;}DJRm6FbKQ8#~w{2wo>TXQta@;M`ciK ztjVjyWcb+(js{gZ>r6N10*+%RjaIkzo3GMK!*p6mhgvN+WZs$JoYE2ez_k5E?NRLr zlHWytP(tFQyjwJ!ij;$m=zDi_myQtr(>0I7f0L<(y3Es3CB^;gv*zBa>-Z0QL}XW} zKls;OZHB?Q^v{=DSa&()e;n!9ne!eYy;_;*k2cMI=^J{H3IS%a1Ao zUslcs-tJCD>=w0ot2s}$|M9;I;)-3s*?A!Ex|_CdtrN29!q;kBEVvW@pZpV@-?jP* zayW&pRE++CAZ+_cH3hq<|9{;3<_i;We2~3)@l+y(21*}=@TDm3*2VUMYH(=3T?Ump zM*P$F8HH#T8t>B;ZU?!@&by0?8~@l8;t-64-KC1cFdTfBq@F;8{MuUVuGh!ozH$$4 zp_6iEcgGzcULvg3$uOs*i$B!ucE}Q&a!^I>;i=1bd>yt(cl%+iH6hg^r%nX(QL@Y!8I zdW?jvlEiX-5;S&$Wku2A3+(kBhw!Gsl<+zo!wO81xqdJAPho5oW$sPc1l)45#KY-vqHk$LaVk&JYA( zN2*o0-K`BN*=X`#cr5oJ3Dma660Cd`#x3`q(KlgjzZ#Rx8xBC^SpmrdUpNbH-ov z*xPGYdeKQ^QvYvsqrm%TUD)>}1vF#L#LnIs09lm8dh`^kBJiTTX!yFLnwN&tO9jJT z@yx~}6+~&|A!K`(9uz0qhA97{j}hABfR`8CY&-BkL$(P%k1$gXt`H zM^aV+>iBodMIEcmXfk4uG^p1y7zg?QuJ0Ff`pt^20!J511p*c^j>GII#I{tol1Z%CJ+HAub(?iGL&Cv9TfPBamOp*ukwR(KA@e z=N~aCPe^R$g~23h!9AWz%K4sQP9RhR=>xRi-{~yX@Z#0foLu&#rwSCzZ-}4Jo@6ryilQNlys-1QVn|=A{5u`IOYlNsvGMCSNM@gF8ElZ<^!7I>7#Zn-&0NiyVM?OawzU=_SAP#=?p%`AxOyz zVn=gI=yHPZyQJa(E8=Obm>mucKcbqjgLmqY1vv@r8Bs2m+q)r~l->Q%t`&`fD+`qf z8p~goMiv8m&eolU2||Ifb*^`tmlEq$d~NtLwI9Jw1VhQ()wUR!q|oOZgu~4gljNRr zUtZ>UVt~4jHMe0JXOOVS~XDx;N@;SU_{lgQ@l z)p$JqfKQ_l=R+1uh|%2qQG$3e^o>osFAJR7j4(pYVdmelw&?!+5MEbY{m&7U9M+; zvqqEp%EAG#N#P=})Y$u(H#!F`IdFK!5un={)RS$cHAWBZLX!T&qw^YukvCFR#QzSxq%C2JW{~a7~wP_IDNR1qokPNc#1W1)h;e_u`lJvHQMCGUf41`WI8fgjZx! zcqY5SXbu@NW(DJ`4 zvr&hro%VisO**YVAVwrMJB|@3CI)Wz2Xy0{^A634(uq5*H%c2`P!GShVF)UP*M(&@ zRKD&X=!?HTe5u$9z39k}a!haSQ)@U(9{DQ#6PcbmA( zN!WZOC)q3!k(R>y)(Ey%oONi5fBBlq8su=%*E8l728>7K;k zwFBFgBHg$1>QeAR&Z2&xj(6q7-$OSi)qEa)*l*8d@CjYiSCNWhq8IynwOIS@AT>Z& zIGpd2z&TH{SREsmGh|jii(rA1Oxt-$jJS}ZE$7T0YGVVw^?T0IcOo5$Uq)7Y0mVg6 zNTHqGYdGRc05OM148&228gSr~Ne$WV%XDI(p?5K2{i#G3z!MR_`T#&Si5xuS(~81$ zwzsQbMsyYV5d^}bOb+L!72btalY)y-uU@k}3n;}R#{5e!v!eBNXZ$RZj1srmil6p& z>|Nk7@yO_`EA~yU1W9|7boLBRh)RjJ8xc*{;Vo`b<}{(S54esmO=C>exK`|}5MInI z6zR~??PP-lzs53zx$ZS_JP=VmYlGTKoDX+`6*~dQt&U}>x{y4^C~^a{g8p+ptiL>c~LFT zsUh@t^g-xvsqKl&!DdG`bR?^)Vae~(xBo#5yh)p68-i9TF)Cw6^+@L+&P%hl*gpK=8epIEzk&*Y)Kt`At zinmui|M#p47cE^`pzl0&4yPy)E%pD#^AW8F)!>nxl)vt&XS>lhe3i8cP<R-^i`*!MwOztI`4fW!u!m+p2J6kuCJ+g6y)A{ zP#_cAnmwm|fAbGrmLNJ-9rcstjJQ_A$LzsA1^#~(1k0iYJ-MYG3`T?N z&{e2XHioXWh~}TG4hk#^u86)2+t1J5&yUB|y@8v|S)zP;x~i#kbcyo3yTROa{roQO zjV@iMxz2GSks34NrRVo$>e0oR`7(vdZcZH|a- znrFQXxrYRi!?*FNA_^^p6~7u75jK5b98!Y5R+dciSR`sJxaG3mD-X71S);A$GZa<4 z2;#Nk?{3vUU?y8IcQv=CKlw3U3|S_nVoulj4M>PO{gLhpv*gqwugVdH)?x_+ zW7zI+fOPQ#kcv#3wTxlIFG4~9bdY`Bs52@>?De|H{=6KD=KEXZ@eCdu#+bFfxE!gl ziZ(iC%fdrOZ6l+EXg!KqHf9t2+HZr#XQPMzA@eB79fa^hwSfS3CnB@XRutZfA}Yro zi$;ZrZnqSpS}vIM;O5RizZ5j_t@N>_Hd(a-aqF5ntxtWlp7Dp)#vgx;~)8I z_ThM92X3|l(UK$m15WaH+I|*HG4<)X%~MNzr7d+fBKr58ZU4SXlMp3m@)E{w9OZTU zrb)aodY)G}u*o>JcU1H|J|1WrB?Aw2W!409 zbnlMNK&er&-7EM(7zZZzEP%AB@Yugi(6xMu6cKQ z?O0C``AcB~pOAY4S715WAw;oZbATyUMTTenr42;$nkkv@hbtbs=v*a<+_% z<)44uJO=S;%p|oSb4bHM(fEX0glQWhf*uMfXykCH5AaYSLiZ`v)r`9#b@Vd}FJtSBW$<|@R;|MyL*s0n+ zgteK4TsjRfZ~a;d2JTubeK6Y%8XA5!`!v`hbha1$8qk>4mrxC* zaYWe^A6FV>;Jg>(>E`a8ckYCH!{rHm!Lsu%(;Xy29w#sgKFR}S;2&U4DB5HNin2uG z6uU!nz-rFJ4U5oCx)0;!cCsixJ7Xe{X#yFFn2`KYlIs)2S!g{=zRP?y zG9F9G3mgwOXwU3X(FRFQKd@N9KR2X%;2ge3@?>GM22Wj?UL5|6>0dwGX`ig#(zVg_ zMLZ`NhJtU~;@_jJ{Ol*^-MmLdafEBTX!~KYe+W+UlgZW=0-Z9gNi=)d(-m%Qn`GY? zSh|_2JjdSvCa>gMMO7UI4`D=>38636&&Nh|&06x3;wuWW8WF>_O*5=)Y*JiDM`6TzP^%SJVg4o;JPX4veP zLL_v-2yGk`(<#^OQlMrtf@wJVWveNmRU7ZKC)h7FiHklZpl%j!<{*YuO?w8PWCNK+7HK z!^h57;=7EJAY+I*#O!Sdv8FS0=SXgCwtY(7a_957lWC@5(w$;leP*6?&vyx`g*>c| zoXTI7ZqKCc-LaRxF8H-ia7Od3j|ayWI4X;fnhygqV_36MiRIxDSQPGlr>LpLQox6^ z5IXf$N>CZqg#phGU%p1dSPdtc-Hmv?Fcr6wgc64|dVmpha*lHy9xXFGW3uf~E;OE) zulqvQZ1cJuB5gBIjY2`yf0i58icZ!n^lKD{rNJqxX%i!Y!BxDixdRs@ue#A7GPo-s ztnL{}|K@^)C}F22V-W8-X|vkIT6(Z_=+8*n zgUE9vKeCUnQ7Y21ZB4ALp;EyIL%k<86sa{D zEvq`s0pnYQCm!n$3SW2?Ki1sNtsyH#&VnRbru`csO)5OLDQP)xajmvvckJ({rhYYK zd}%ubH2R?R_V*Bp9+<2iLZ_kydwxo zbJ0VgiW2NE)|6HWTb(u7E%RV)aJP)_rOMyRQzOdDIkvnV}*yKjfZb|6tK5{3E zIspt1U#V;cVe(jW6{K`ZRvdjw=(s*^7@6G=jFr?A9~!u-@W+6|%^xwI4VBmZZtb(beg~gBpT0hERJx?ESiQ*Vh2m=*-_-|J zm|e@mDV4YRgbYzC5ISI3e*KIjSlpmMg4Jk=MjJ>&>u2d}^nV&V>#(Ta{aq`P(hS`l z(kb2D&CoG)NJ&XacejMn(jg@cLl1(4ba$t8opGz*z0dEQeXhfwb8#_?HEXW*-tYZ9 zpVeJY$#*LLzEOx8%lo=QLDfgfKS@2aOXpP8^w zFw9gy`)J&$A9D3mK~aKMd;Hf;<}`| z@Ob73obJ(f9q&c#kMR%H`Xc@5Y~C%sBSTsLQ1i^gbiTce?P~G;!}38tyfH)VdOcaQ z*oW=!w?e#XyWs=87T)_nckKD)i8))WE{gj@N2DePqHxqZuY=SssYge9-HL^B%%Atx z=@(q!o#`va#YQlr6=?oI7zX&qx5OlXCtW<+F6F<#q=0kJ zCCqIs*YH0u`4XkzW3O z+t9)>C49TnuJ%1+^~~^-W1Y-&)jw(`+;msnBfP`oIH&pwN_Joq3yYAoH8bbP zotM4!531!CVP<7y(D;k^X5nvvRjQDUG3qweCh+@6F%F@V3C7vjb0tH5A1ZhZ3YDZn z?+}sX4uk$2J#X_u4&WakQ#9n@`=e3tb67mYTiapViK0GBqqcu+Vt2*+Eii(zKLfiuA=$1V4F>4N^d5h6h zl)LYW$bVMAnha%zXE+2*?5CPI#{Qx$oz}YL?`b?HH=G>izE}Yj#mVOjcn6*LB9kgQ z=W(HHhod)~AYLVOnd&M)xi@2c?pb^81TN^vm8F`;5&+#hn(x3Ah|{5mN)RY}ea+=u z>JHqMFr7s!TF^AIvL#lmw2jelk%uaT6@!{5o7|oZco3Yu!ivWBVbH#3@S;Bz} z!lT;5!Q*Mnodep$Q9-Z%+=%81i$8kgh&0mRhss|6c>QnM;{4xf3mbTAX4I4kr7eMG zB-7mF^tTEUf$Scw+|+C4%q5aAQtmL~5)x#>$q`6))>f?jYa)92Kj*E>!&P;29cHY) zxdg6F(n@>^VGZ5jZ3crLT1kfD&Ve!}6A>;mLLzuw*!w)0KM55SqpQdt z-L#L5q5GU571(wjIRkkvS20g>^3W8rzM^ndNhX~>mTNZ==NnbnN+61eKF>;&UO>1d z+S`_xnpI%?Fj)>Q4t-U^q+?Qj#j#R-3)8GoD?hQys^HqP;itrOCw19(^zj#7h5}@_ zPA5~okYBzcAYW5GK|^2HUJHaBSz)CRps(Yk?irBEtFFH&R`No0_g1cR{7U<|!>)k&nE?3$~vXLgBrjYp|5zWp)}?<9U48SPgPyG6T)7 z2fb!@lU=N>{}O`ta*w34cTlj#J?y&uGb-YhZPs0oBTl$s)SSmDj;loSbxxbW$&?}; zw?0bvDkystvJ`JLAllAbJhjdN($uQyYfO+kxvK3S#ZG7fj|E-*Ven1ZI&)IBB`|5&g)dD*nU{! zmMX3ozE5LSKt8hk7)yLS0j z7Z(AJiBEGj-~&G!0Oof%B0*M+;$);%ehIVX^5Cw2`4vpWn3>=n9|A$EkS|9%$eE%{ z=oX77abv*F+IyV4O0d~G-mT_Hh+G=`TX#g-3`>*c*wC_10N@)KQ2$r6K*A8zsG{0j zgmvzhLGK1AvQPXLYY`nS3^!WJ_vOSe?eLjMr}frl8Jo`gzT{zV_u72YyD3&9h)=Bn z@YjvsH!qd`_A&N@w6@f1i#lo5=E_;-%%S=9?DA2yAqr9|3w$O=>`$OiZT)BnEMVl5V$2#|`J+I~O z2d2DH%dKLACW4rV`Cc^u^wwk@+z`gpY4!Tqqov4@u;aWL(`x!-e{?xHO8;LiC{wvOBjmu)=epXV&Skl1*!&t&om0D1VJo#KUmI%^MCIwU?WGLm0+ zMcyRBz@lkY4mh}$$8&|pVS=#U@;r|S8=-2HHc)PcPYn+Bgv6irDs#8&K@vV@MwJ8V zk@j$8b;ZfJf-15b>_d)ef~a4|G9&i}`d3?kVA%aBz2^rR>Guv{Kc-#h@Mts%KGEh7 ze!iE?)5qcg!V_`XE!4`)ZM{BawV~k|(64*8)W&h5Rqj$ozD&f(p0*-?023U_BI;9# zo%3b;bs5?IQC;P+-n=0mFde3-ZBuqBZ$UQ0z!agwtE+k|3UZ#1nG}*tuT6`|7|h|E zfeGtBHR%C4BNV`UjNO!tmHS@%!v`y{A4vY%4ZY`Z5&Fsga~>7_j&L?Us`Nx6HXJ;d zC(kR24}3ICMy|K^bxEux&3!)Ps?2hA(Ldhk(+dY*r2afa@{A2)*C5`mp$6l}n@!t& z#3Vg@m_b=^5ZAwo3?(L*a!h<4q}l_?12w*pT4hW$nYO43WAkvNJ#A`ZxPz?TH@m_L zZ$mb4KJ${soQL$`uN;i*>HIZ9l&{ ztvGZrZ~Lbcw!CQvsctxJTIk)(@5P=t0237D)NxVTKp%AmimhWXZ%n` zURTvZGrNdiw~hknt;3lZZ0^&JblgXc9OkWM5H8alSI9969l2rXR-e30t&YFLS}NX3QF;|;Tjn60*yfhG->du}W!NHK=2!x!UyF3vt(XT00ZQGrZ>iPCCLfBxMuA&UCQ%s_7#CfRD(;+J%c;kmd zc2k;7neryDH<_pCYW>uj_|r&=YPa3CFPc03>qz8B`>1rYz&268&XRGf>R=oI^b&NO^OM;K#It2sefs=hC?N#*0z94>D;&u4iH!Mlq{W2<)`(3J@ zGKyH*_C_Mo^O~!cmLJZ(z%k`syzJ3;R1EC>krWQWwgN2j6~3cKAj5cP1|0PehBo{X!MZ4ZU)gBs{p!mQu0c|Zz|Mzh67-%qpks2G!S?($dKXmv@8MLv z=GLNbjt>@^M+=&U0m=BcVy=eecGte#Ad3U{`4>cZpIuuig)9cWyvza5oF|+KDdp~e zZOn2yytgS=T2cCthpmf{U$aZp?CzJz-8woLgMBbtjc4<1Mr*MRRCZ8i@GdF|{S=j~ z)xq?|mkdX8pHk0`ut*>3{x_0>`*9z}7uQOUNG;~3Jsb{M6qt z-J{kKc!2KyHhki=a}1E+7z&Q|xuA;fZTIstTQ-(8Z>8>KW0Yb${hF2hFssb)y55Aj zz1Z9~#kyD!;X+jjB`bk*=6e0*b7C{+)UsW`BbRIbm#{>=l|L{XfE`aZ1=gY2vA<n)VwuMLr6* zuAd??VHy7pk2xqR7o6zgM7=<0AeYRVI8;KDoN2`f7Nk%HjO)3&uVp&6mt1{MCQoW` zM)4#2=u6Xg^YP>AgNckYk_})No9XTv(tLY&%AuGL36b5G>!)1TAvdA%hAy#nE|kcVK%nL)ESQnU5`?eBEEZMjpwy2@I|hN-J3;H z%!s%rIo~{C-cbK&f4_5@DMf566DDonsZXt>sl`zDJ zj0i*X?lxGb5nBN)Xx-T z_BP{6jOh%>x)Ycmqb&71c?A_*rBUSIIEp>)-mL(y)_P#Pj`+-X)M{S`Oqj4maPB52 zyTjJY`xbjd7~{C$in9vC4?i<3()Zs`Dn}GZvvoTV$9&$OFM?}-vD5<14GB=XbeYf8 zvLx={E8ODV%+;Q$S-|Ay{1}+2P&b;`q6%ewcUcA8v5H;T!3$|7(fLjmz?jAW_!b5X zy!|b#cqI0d043Hdu9{7aj8AU3gcG4apdvM9%t)QZPa%l=6Ld$w&i<+SQzIIJA>vj zGmlvT5@Q7A%t=&Kw-_9L4I%k)O<8s0p3$Ucfq|3Xc;AL8E%60^D}iGp*a)l{!i(1? zKu!~Lb51dq?OgUWAn8*#5Qs)r^keAUeQG423vTu!o%etBKH&l*+A>Ll*g?%}6~o=o zB%j6$-u;2`MM^_#I%R7k^18S3Yvi` za)<`k(h(E(Z8{dvtH)Mf(a)3qyRxKkuRx>aalMdL9rj^Hn+rnBH&mSmM?Af zM8=sO+lnAD(6wIwHQH+S3xZA)Ji%gv0qUF6B6@E@CTn6L_UzQ_IT!>hl70m58t;m7iHG70q`iy zCxwXT2q$ix%cK2dAqN5&}<$!)@6!ldb1HxSN55h3m1}OLC`dbt6_v57&Wx2zix~N zm~3NKpwUmr@-(%nCK^igpgIcWg~V%V=Fbg$-bD2l7I_xT&9BGvJa$XpoWNOtN#lL~ z$D{5pF6TrH=8QBGn$wg*KqLDihJ=<0mLg=JX^;h}?K~E|1N`{#-$|Sp%7q zv}`N3uZ^mF+4k)YZW3+~jzZ%)#__^YR)3{Xv2)8ZhN9CCqeh4AlL8tE#oO?s>HHW^w5K1%GtTQtPgY;*r8-=ub+6p8#+)&5D4{o*U$sbLI(YVx9I6rBwn z3!;7t0Fr}4ck}+vsln4|kO6!7`EdEZ9=_=Uh45kG)-|X+12gn~*LTxYR6!aXjB06B zy?x)hw5#B5_Kg@dbCzrBum@vcT*gWCAE8lJMTDW&Z^75$eNZ(&+Ng6$TM!`>uXOBYRIBgHCDO&ao_*^ym+UY8V7Url9g`PA@^Ea>>md?xyiNGyPy=|C zH)K`Y-(@Gd`Slxm)lVrs1~(ET&4~Rv8w6b&t+jjaA;w@!%@3WIy9B^3=4f+vzd`fV z)@or6xf^#H&gjPp4xiz~k)a8s6&l#R4CPD2lKe8{&R zvMpSk6P#`~1=ob-OpsEE**}tsKi?N!wjx-vg3xyE7(F~Nq}*JsT=Orx)jy{QigJG2 zZ+XZl>4%c)|CUgC$?k;UY1m7``3}-CR+Csjz)|g`fl~X;(gghISnUr&gvTZ8t|VzK zqvB8LK%T!e4EcHtfAC}}!gDR3KvK2p1UpVy`s+kb)f~__bjW}a4KXTdZ?3cu-1cZY_C3sjUVRh|C8#EP+Kop#-83~OT`4mpMh=e5L82SSRne%?7|5ghA*Kmk z-|w@6PQqXFfggu4Z$=!sL`&^L{Nqr03({D#8BWZiaQ$E<46dca83>OPGdQ%-?AEds z0hj7hsoos&4=*oVIuB8)2%h#l^=wyv`2w!D3-xknfc6d6`(lVx>9Mabrj1YM9XpWF zkNls?9wP2tx*#TgiWzN5v6}}6(Zj=v|1XJf$XBB9J9dRg5n7~AI`t=7wd>QY>*4}) z3_DKo$A!F=Hax0k;jfGO;}<4rk^n!bLlSZRq|ja*{Pza)+# zlQ!=v9`OfULQ52A|4~E}o66zSX`LP*%=!V1tkO|eHEgqGR83`k0n>48mGoD|zw>Pr z-zJ9?kitwL&qZdUGy?B-XCAjNWO3-`i8_*ydd zwt zg5VlrF@=`Ddc+Bz6ALD9Yd}Emxuuz8&;hM_3B5*R+|R&$JJ^#-#J|qWlrF5PL|`NH zAJvedW&^i>H$x)L%D$;ySLwYkkx-;Cb!+$+aXR*{maUmF(^t-A%(bkSIIpkp+2S7@ zeev_Hm-iMhe}y}G9ux)q$at2B*~mv~Bkrr68u2m6WuhRD5-+T=BTCYUw(khh2scpf z(l(X5%LD>hKs(CsH_a+W4n-{&AIfSxWlNk(Ey2GXhiCGa4lP%qtiHhhnE!Ru{^gH5 z9&1&9Mwdj42QkXp;CEFH(fNTFa8a*E0~B=6``9YxT`9Q(VQF|9c%MCgzLx(2kfgl% zr!|rs{n7u$>Uxasdh@f~T;yu*dSds{Fsg+NW@4h)P00PKje5WtA(DRaUe+vbml0X% z*-Rv-$NRj6q&3Fykr`Of(XS>+I}&Ct=FHo`v@rwN`EZC_nbNx$8rnV`j3@pwa8>_$ zWDOmRaV9kjO@##sKc3&^rtEC@Ttv7MZ-tZiN~;Ml3L<9*w-(d5)!k1@@879sEsaN4ctRz0~LX;sT^K?3k}B z?%AGjHWMWE`gzd_zyg#QEN#7mmez(YYj2P^2Piryl!;JOm>$`1kJ}z_-49}}X!v?j9VGOmZ@>8%W#TD}y?S@_b~h&lCkaa43Dm)bPS`A3C$)^J6jjlYcP zZd2~m=OJNj9oi?$!@+ehTWlfu6s_pvjdd30R1k`Vmyqp3A^MXt@Ed%sV{1&sw!+x2 zi<1FWYUQu%k@+4doU{`uK8VS#xcT0!RUWzlK-z7N&!S6N-wb5En*E@h2y{^ zmtOoxWi8sWCiDrGj-DfK#p!(7VO;U(VMes-uM3fxz!e%-bdSHN6u0p+EUdVVL6v&< z9e1>0sG}F&Elz-9CgH-M@4ku~o962PMjF7^WRP1y4~rv3qbUC#C{8KnN4uPPh=$CA z&&XP7Cv}o}jb{^Xgd6H{6_sRP$L{tCE+q|D!Ya%p(FXqV@KcO4NnHIjDo03ZtGZ@} zUNv?t0f^Yo`dE=JnJi9v?uD}vXB`XQ*LO&1l{r1_y}5{vPv_^#0op9iR=ilOr&$9~RP6j`_X4udXBebX7LfOaY zAqD14(cs^jh3nWJE6>=lu9Tlkq^R6dexV;%|-mYz%qKBU<;kDecAx1@}bIY za8Sh=cs@-}{FMRWsECU8kxBk`4y@p{Q)pVEDN2!0cduF|?)MDQF22ql=I!bqY6(t$ zIOX*b%c5TF$MA2hH-BZ0w^nm{UZhf235w}N0>6h?#mfq17|}!fC~unzbLuM7DD*s8 zfM_D;Og*gI-e)@G!u}XAIw4?;7Ly=XTSiLplfH- zX&*JuN$g^Huw@p?@3+S3LPr<0xPSxae5BjnAg|Fv`Srql9) z-g_ibjQJa_O`^a;*oVBGej(ZRUcIDJN^1YikVroX=wQb7;GHh&;3}hNQRf}-uR;n4 zGx|`v3t&Uv)~|dcS7Kiepw5iY)siUMAjiE z;Y|^$5@6L&(x#yciSKsE6S>bWd_PI>=H9V{k#=2a z3*v3th%gm8Pmt0-nxluR0=KXiP^$R;14e6ldGZfS=ROUzr7U&K3Rc`ek>fBkIm=rb4dI8aCKL#3h=#|`&w90yWLXL z?F)M(zmU0`iM5q!l1dBjb8`wKX?YVNjE@W(vT>WefFaqGy?Z6crvkwbGrs;*$s~dK z0MH+D48tgW93LyyOUW`nS_o}|Se|$@;v$&oPz@Bp%3L0aH#fC@VXPv2|LF=ydnLw} zMQTp2#(VkYCDL7zS`YvC#_Q7p%pA7T&&%POIH@4u4B9Hbv44wt!M%{)9eY9u(hPnk z{9tI-&r0EP4ui&L80Cp56lGlyKg{xnk1#G`<*d$p~PKk#)lQ=Uwj5FUUKx zHK%|bDGv7|S@Dv3vZW23m3wkxWuK@sgrU!Py+>l|IVejCDcjGzh>XS7iig0u_p~jY zb;VEsoZ(3E6TR5`6#Uk*`-k0fCVEG%mh8=rL#lN+@*GFsSY8Tr;E>M;4}i4a*A=G$ zq?NQ2}+ZWbjkr--oGy r3wZce`9U0cF}584UY5gOKP?j9lh=e5JwcyN^h{1lS+Y{xB=CO$%;Y~~ literal 0 HcmV?d00001 diff --git a/sql/performance_analysis.sql b/sql/performance_analysis.sql new file mode 100644 index 0000000..67d956a --- /dev/null +++ b/sql/performance_analysis.sql @@ -0,0 +1,184 @@ +-- =============================================== +-- 3.1. EXPLAIN ANALYZE БЕЗ ИНДЕКСОВ +-- =============================================== + +-- Инструкция: Выполните эти запросы в pgAdmin после импорта данных + +-- 1️⃣ Простой SELECT по названию компании (без индекса) +EXPLAIN ANALYZE +SELECT c.company_name, COUNT(m.model_id) as models_count +FROM companies c +LEFT JOIN models m ON c.company_id = m.company_id +WHERE c.company_name LIKE 'Samsung%' +GROUP BY c.company_name; + +-- 2️⃣ JOIN запрос для получения всех моделей с ценами (без индексов) +EXPLAIN ANALYZE +SELECT + c.company_name, + m.model_name, + m.ram, + m.battery_capacity, + r.region_name, + p.price +FROM models m +JOIN companies c ON m.company_id = c.company_id +JOIN prices p ON m.model_id = p.model_id +JOIN regions r ON p.region_id = r.region_id +WHERE c.company_name = 'Apple' +ORDER BY m.model_name, r.region_name; + +-- 3️⃣ Сложный запрос с множественными JOIN и фильтрацией +EXPLAIN ANALYZE +SELECT + c.company_name, + m.model_name, + pr.processor_name, + m.launched_year, + AVG(p.price) as avg_price, + COUNT(DISTINCT r.region_id) as regions_count +FROM models m +JOIN companies c ON m.company_id = c.company_id +LEFT JOIN processors pr ON m.processor_id = pr.processor_id +JOIN prices p ON m.model_id = p.model_id +JOIN regions r ON p.region_id = r.region_id +WHERE m.launched_year >= 2023 +GROUP BY c.company_name, m.model_name, pr.processor_name, m.launched_year +HAVING AVG(p.price) > 500 +ORDER BY avg_price DESC; + +-- 4️⃣ Запрос поиска по характеристикам устройств +EXPLAIN ANALYZE +SELECT + c.company_name, + m.model_name, + m.ram, + m.battery_capacity +FROM models m +JOIN companies c ON m.company_id = c.company_id +WHERE m.ram LIKE '%8GB%' + AND m.battery_capacity LIKE '%5000%' +ORDER BY c.company_name, m.model_name; + +-- =============================================== +-- СОХРАНИТЕ РЕЗУЛЬТАТЫ EXPLAIN ANALYZE! +-- =============================================== + +-- =============================================== +-- 3.2. СОЗДАНИЕ ИНДЕКСОВ И ПОВТОРНЫЙ АНАЛИЗ +-- =============================================== + +-- Создаем оптимальные индексы для наших запросов +CREATE INDEX idx_companies_name ON companies(company_name); +CREATE INDEX idx_models_company_id ON models(company_id); +CREATE INDEX idx_models_launched_year ON models(launched_year); +CREATE INDEX idx_prices_model_id ON prices(model_id); +CREATE INDEX idx_prices_region_id ON prices(region_id); + +-- Составные индексы для сложных запросов +CREATE INDEX idx_models_ram_battery ON models(ram, battery_capacity); +CREATE INDEX idx_prices_model_region ON prices(model_id, region_id); + +-- Функциональные индексы для LIKE запросов +CREATE INDEX idx_companies_name_pattern ON companies(company_name varchar_pattern_ops); + +-- Статистика по индексам +SELECT + schemaname, + tablename, + indexname, + idx_scan, + idx_tup_read, + idx_tup_fetch +FROM pg_stat_user_indexes +WHERE schemaname = 'public' +ORDER BY idx_scan DESC; + +-- =============================================== +-- ПОВТОРЯЕМ ВСЕ ЗАПРОСЫ С ИНДЕКСАМИ +-- =============================================== + +-- 1️⃣ Простой SELECT по названию компании (С ИНДЕКСОМ) +EXPLAIN ANALYZE +SELECT c.company_name, COUNT(m.model_id) as models_count +FROM companies c +LEFT JOIN models m ON c.company_id = m.company_id +WHERE c.company_name LIKE 'Samsung%' +GROUP BY c.company_name; + +-- 2️⃣ JOIN запрос для получения всех моделей с ценами (С ИНДЕКСАМИ) +EXPLAIN ANALYZE +SELECT + c.company_name, + m.model_name, + m.ram, + m.battery_capacity, + r.region_name, + p.price +FROM models m +JOIN companies c ON m.company_id = c.company_id +JOIN prices p ON m.model_id = p.model_id +JOIN regions r ON p.region_id = r.region_id +WHERE c.company_name = 'Apple' +ORDER BY m.model_name, r.region_name; + +-- 3️⃣ Сложный запрос с множественными JOIN и фильтрацией (С ИНДЕКСАМИ) +EXPLAIN ANALYZE +SELECT + c.company_name, + m.model_name, + pr.processor_name, + m.launched_year, + AVG(p.price) as avg_price, + COUNT(DISTINCT r.region_id) as regions_count +FROM models m +JOIN companies c ON m.company_id = c.company_id +LEFT JOIN processors pr ON m.processor_id = pr.processor_id +JOIN prices p ON m.model_id = p.model_id +JOIN regions r ON p.region_id = r.region_id +WHERE m.launched_year >= 2023 +GROUP BY c.company_name, m.model_name, pr.processor_name, m.launched_year +HAVING AVG(p.price) > 500 +ORDER BY avg_price DESC; + +-- 4️⃣ Запрос поиска по характеристикам устройств (С ИНДЕКСАМИ) +EXPLAIN ANALYZE +SELECT + c.company_name, + m.model_name, + m.ram, + m.battery_capacity +FROM models m +JOIN companies c ON m.company_id = c.company_id +WHERE m.ram LIKE '%8GB%' + AND m.battery_capacity LIKE '%5000%' +ORDER BY c.company_name, m.model_name; + +-- =============================================== +-- АНАЛИЗ ЭФФЕКТИВНОСТИ ИНДЕКСОВ +-- =============================================== + +-- Размер индексов +SELECT + schemaname, + tablename, + indexname, + pg_size_pretty(pg_relation_size(indexrelid)) AS index_size +FROM pg_stat_user_indexes +WHERE schemaname = 'public' +ORDER BY pg_relation_size(indexrelid) DESC; + +-- Статистика использования таблиц +SELECT + schemaname, + tablename, + n_tup_ins, + n_tup_upd, + n_tup_del, + seq_scan, + seq_tup_read, + idx_scan, + idx_tup_fetch +FROM pg_stat_user_tables +WHERE schemaname = 'public' +ORDER BY seq_scan DESC; \ No newline at end of file