diff --git a/DEPS b/DEPS index be17f65..6fc5dc7 100644 --- a/DEPS +++ b/DEPS
@@ -171,7 +171,7 @@ # luci-go CIPD package version. # Make sure the revision is uploaded by infra-packagers builder. # https://ci.chromium.org/p/infra-internal/g/infra-packagers/console - 'luci_go': 'git_revision:b022173f8069cf8001d4cf2a87ce7c5f0eae220f', + 'luci_go': 'git_revision:83c3df996b224edf5061840744395707a0e513e7', # This can be overridden, e.g. with custom_vars, to build clang from HEAD # instead of downloading the prebuilt pinned revision. @@ -195,11 +195,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'dd16cb59745a5b53ca0a4aad53eff4b9a8ce4ec5', + 'skia_revision': 'ec598d5b00eb6dedef78218156aaee2de56b6da4', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': '8727abed3a840e39bbebeaa541d756c21e996776', + 'v8_revision': 'e6a7fb5319a1d0bf2759cc829a621fa929b11f71', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -207,7 +207,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '37457d086ed36644b29336b786d1ada4d87817e0', + 'angle_revision': '68c424fe42405e8459aae786f4f57930f6af0ca8', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -266,7 +266,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': '11880b30c36028e6d7c1d923d3c9a605d01790c9', + 'devtools_frontend_revision': '3a2a148556532971556981cc5ab97f0eea5b74f3', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libprotobuf-mutator # and whatever else without interference from each other. @@ -318,7 +318,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': '4099f6552592575360ad630e5c00e4978335f89d', + 'dawn_revision': 'd6498a41ab4e01926b05dd567e5209dd5c6a61ca', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -800,6 +800,11 @@ 'condition': 'checkout_android', }, + 'src/third_party/barhopper': { + 'url': 'https://chrome-internal.googlesource.com/chrome/deps/barhopper.git' + '@' + '47934f2c634ca9a0a512ad160b47f3108649a390', + 'condition': 'checkout_src_internal and checkout_chromeos', + }, + 'src/third_party/bazel': { 'packages': [ { @@ -896,7 +901,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '8d7201bc3c3cac1a5262639b47f1835d4d7a9255', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'd949c910de8c04a1cfaa99a937eb05ba30185c36', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), @@ -1327,7 +1332,7 @@ 'packages': [ { 'package': 'fuchsia/third_party/aemu/linux-amd64', - 'version': 'MmVx5bSYBPwzS-Yz8BzRNOj0ReywWVFMBNUn8Nk37YkC' + 'version': 'QxDL1Bk85zKmALn9xHGhro_uZAytSTHjJ--QwZLaT7oC' }, ], 'condition': 'host_os == "linux" and checkout_fuchsia', @@ -1471,7 +1476,7 @@ }, 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'aef8a21a695c099faea26a5748f45b2d136258bc', + Var('webrtc_git') + '/src.git' + '@' + '1eb3e4c9ba5c5c943ca22cfadd190e186ad38f06', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1509,7 +1514,7 @@ 'packages': [ { 'package': 'skia/tools/goldctl/linux-amd64', - 'version': 'KS0vcfHGwNGOUpfZjf2qjxLk_Ab7qh3iQyA7Td9WfEwC', + 'version': 'XNeE-uWpzXzcRoD6ylUJHEbIn411jlyiRNiGMUlyH9wC', }, ], 'dep_type': 'cipd', @@ -1519,7 +1524,7 @@ 'packages': [ { 'package': 'skia/tools/goldctl/windows-amd64', - 'version': 'kIrRtMsJjy2dsd5vfikJtfXXZk1zkN3lql3PtSU1kG4C', + 'version': '1qkV-5d6qu6v6W60NcAt1E8QDBmBNVS9ndWZPH93OVwC', }, ], 'dep_type': 'cipd', @@ -1543,7 +1548,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@e1e4781e5ec2c96eb56e98781eb8e91907f6a507', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@b0c99c387b3830e62481fde0c0e53ab0722b2ab3', 'condition': 'checkout_src_internal', },
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd index cce93c4..e0640554 100644 --- a/ash/ash_strings.grd +++ b/ash/ash_strings.grd
@@ -1166,6 +1166,12 @@ <message name="IDS_ASH_STATUS_TRAY_LOW_POWER_CHARGER_MESSAGE_SHORT" desc="The message body of a notification indicating that a low-current USB charger has been connected, short version."> Your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> may not charge while it is turned on. </message> + <message name="IDS_ASH_STATUS_TRAY_LOW_POWER_ADAPTER_TITLE" desc="The title of a notification indicating that a low-current USB adapter has been connected."> + Low-power adapter connected + </message> + <message name="IDS_ASH_STATUS_TRAY_LOW_POWER_ADAPTER_MESSAGE_SHORT" desc="The message body of a notification indicating that a low-current USB adapter has been connected on a device without a battery, short version."> + Your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> may experience lower performance. Use a certified <ph name="PREFERRED_MINIMUM_POWER">$2<ex>60</ex></ph>W or higher USB-C power adapter. + </message> <message name="IDS_ASH_STATUS_TRAY_CHARGING_FROM_DUAL_ROLE_TITLE" desc="The message title of a notification indicating that the device is being charged by a connected dual-role USB Type-C device."> Charging from <ph name="POWER_SOURCE">$1<ex>USB-C device (left port)</ex></ph> </message>
diff --git a/ash/ash_strings_grd/IDS_ASH_STATUS_TRAY_LOW_POWER_ADAPTER_MESSAGE_SHORT.png.sha1 b/ash/ash_strings_grd/IDS_ASH_STATUS_TRAY_LOW_POWER_ADAPTER_MESSAGE_SHORT.png.sha1 new file mode 100644 index 0000000..3ca8c271 --- /dev/null +++ b/ash/ash_strings_grd/IDS_ASH_STATUS_TRAY_LOW_POWER_ADAPTER_MESSAGE_SHORT.png.sha1
@@ -0,0 +1 @@ +794fb8fbb79f320090e562f85e16fe9c972421ea \ No newline at end of file
diff --git a/ash/ash_strings_grd/IDS_ASH_STATUS_TRAY_LOW_POWER_ADAPTER_TITLE.png.sha1 b/ash/ash_strings_grd/IDS_ASH_STATUS_TRAY_LOW_POWER_ADAPTER_TITLE.png.sha1 new file mode 100644 index 0000000..3ca8c271 --- /dev/null +++ b/ash/ash_strings_grd/IDS_ASH_STATUS_TRAY_LOW_POWER_ADAPTER_TITLE.png.sha1
@@ -0,0 +1 @@ +794fb8fbb79f320090e562f85e16fe9c972421ea \ No newline at end of file
diff --git a/ash/public/cpp/external_arc/message_center/arc_notification_content_view_unittest.cc b/ash/public/cpp/external_arc/message_center/arc_notification_content_view_unittest.cc index f0741f8..c7f82834 100644 --- a/ash/public/cpp/external_arc/message_center/arc_notification_content_view_unittest.cc +++ b/ash/public/cpp/external_arc/message_center/arc_notification_content_view_unittest.cc
@@ -589,14 +589,16 @@ ActivateArcNotification(); EXPECT_EQ(surface()->window(), GetFocusedWindow()); - MockKeyboardDelegate delegate; - EXPECT_CALL(delegate, CanAcceptKeyboardEventsForSurface(surface())) + auto delegate = std::make_unique<MockKeyboardDelegate>(); + auto* delegate_ptr = delegate.get(); + EXPECT_CALL(*delegate, CanAcceptKeyboardEventsForSurface(surface())) .WillOnce(testing::Return(true)); exo::Seat seat; - auto keyboard = std::make_unique<exo::Keyboard>(&delegate, &seat); + auto keyboard = std::make_unique<exo::Keyboard>(std::move(delegate), &seat); ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_A, true)); + EXPECT_CALL(*delegate_ptr, + OnKeyboardKey(testing::_, ui::DomCode::US_A, true)); seat.set_physical_code_for_currently_processing_event_for_testing( ui::DomCode::US_A); generator.PressKey(ui::VKEY_A, 0); @@ -615,13 +617,15 @@ CreateAndShowNotificationView(notification); EXPECT_FALSE(GetFocusedWindow()); - MockKeyboardDelegate delegate; - EXPECT_CALL(delegate, CanAcceptKeyboardEventsForSurface(surface())).Times(0); + auto delegate = std::make_unique<MockKeyboardDelegate>(); + auto* delegate_ptr = delegate.get(); + EXPECT_CALL(*delegate_ptr, CanAcceptKeyboardEventsForSurface(surface())) + .Times(0); exo::Seat seat; - auto keyboard = std::make_unique<exo::Keyboard>(&delegate, &seat); + auto keyboard = std::make_unique<exo::Keyboard>(std::move(delegate), &seat); ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, testing::_, testing::_)) + EXPECT_CALL(*delegate_ptr, OnKeyboardKey(testing::_, testing::_, testing::_)) .Times(0); seat.set_physical_code_for_currently_processing_event_for_testing( ui::DomCode::US_A);
diff --git a/ash/public/cpp/holding_space/holding_space_constants.h b/ash/public/cpp/holding_space/holding_space_constants.h index a5274770..98c28abb 100644 --- a/ash/public/cpp/holding_space/holding_space_constants.h +++ b/ash/public/cpp/holding_space/holding_space_constants.h
@@ -36,6 +36,10 @@ constexpr int kHoldingSpacePinnedFilesContainerId = 1; constexpr int kHoldingSpaceRecentFilesContainerId = 2; +// The maximum allowed time age for files restored into holding space model. +// This is not enforced for pinned items. +const base::TimeDelta kMaxFileAge = base::TimeDelta::FromDays(1); + } // namespace ash #endif // ASH_PUBLIC_CPP_HOLDING_SPACE_HOLDING_SPACE_CONSTANTS_H_
diff --git a/ash/strings/ash_strings_af.xtb b/ash/strings/ash_strings_af.xtb index 0f75dc0..b65876a7 100644 --- a/ash/strings/ash_strings_af.xtb +++ b/ash/strings/ash_strings_af.xtb
@@ -340,6 +340,7 @@ <translation id="4450893287417543264">Moenie weer wys nie</translation> <translation id="445864333228800152">Goeienaand</translation> <translation id="4458688154122353284">Stop skermopname</translation> +<translation id="4472575034687746823">Kom aan die gang</translation> <translation id="4477350412780666475">Volgende snit</translation> <translation id="4477892968187500306">Hierdie toestel kan programme bevat wat nie deur Google geverifieer is nie.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -399,6 +400,7 @@ <translation id="5207949376430453814">Lig tekskaret uit</translation> <translation id="5208059991603368177">Aan</translation> <translation id="5222676887888702881">Meld af</translation> +<translation id="5234764350956374838">Verwerp</translation> <translation id="523505283826916779">Toeganklikheidsinstellings</translation> <translation id="5260676007519551770">Lessenaar 4</translation> <translation id="5283198616748585639">Voeg 1 min. by</translation>
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb index 1eb3ac98..f2d9517f 100644 --- a/ash/strings/ash_strings_am.xtb +++ b/ash/strings/ash_strings_am.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">ዳግም አታሳይ</translation> <translation id="445864333228800152">ደህን አመሹ ፣</translation> <translation id="4458688154122353284">የማያ ገጽ ቀረጻን አቁም</translation> +<translation id="4472575034687746823">ይጀምሩ</translation> <translation id="4477350412780666475">ቀጣይ ትራክ</translation> <translation id="4477892968187500306">ይህ መሣሪያ በGoogle ያልተረጋገጡ መተግበሪያዎችን ሊይዝ ይችላል።</translation> <translation id="4479639480957787382">ኢተርኔት</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">የጽሑፍ ድፋቱን አድምቅ</translation> <translation id="5208059991603368177">አብራ</translation> <translation id="5222676887888702881">ዘግተህ ውጣ</translation> +<translation id="5234764350956374838">አሰናብት</translation> <translation id="523505283826916779">የተደራሽነት ቅንብሮች</translation> <translation id="5260676007519551770">ዴስክ 4</translation> <translation id="5283198616748585639">1 ደቂቃ ያክሉ</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb index ae0ab84..b9312a1 100644 --- a/ash/strings/ash_strings_ar.xtb +++ b/ash/strings/ash_strings_ar.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">عدم الإظهار مرة أخرى</translation> <translation id="445864333228800152">مساء الخير،</translation> <translation id="4458688154122353284">إيقاف تسجيل الشاشة</translation> +<translation id="4472575034687746823">الخطوات الأولى</translation> <translation id="4477350412780666475">المقطع الصوتي التالي</translation> <translation id="4477892968187500306">يمكن أن يتضمّن هذا الجهاز تطبيقات لم تتحقّق منها Google.</translation> <translation id="4479639480957787382">إيثرنت</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">تمييز علامة إقحام النص</translation> <translation id="5208059991603368177">مُفعَّل</translation> <translation id="5222676887888702881">تسجيل الخروج</translation> +<translation id="5234764350956374838">تجاهل</translation> <translation id="523505283826916779">إعدادات إمكانية الدخول</translation> <translation id="5260676007519551770">مكتب 4</translation> <translation id="5283198616748585639">إضافة دقيقة واحدة</translation>
diff --git a/ash/strings/ash_strings_as.xtb b/ash/strings/ash_strings_as.xtb index ed5ed00..9ca007c 100644 --- a/ash/strings/ash_strings_as.xtb +++ b/ash/strings/ash_strings_as.xtb
@@ -338,6 +338,7 @@ <translation id="4450893287417543264">পুনৰ নেদেখুৱাব</translation> <translation id="445864333228800152">শুভ সন্ধ্যা,</translation> <translation id="4458688154122353284">স্ক্ৰীন ৰেকৰ্ডিং কৰা বন্ধ কৰক</translation> +<translation id="4472575034687746823">আৰম্ভ কৰক</translation> <translation id="4477350412780666475">পৰৱৰ্তী ট্ৰেক</translation> <translation id="4477892968187500306">এই ডিভাইচটোত Googleএ সত্যাপন নকৰা এপ্সমূহ থাকিব পাৰে।</translation> <translation id="4479639480957787382">ইথাৰনেট</translation> @@ -397,6 +398,7 @@ <translation id="5207949376430453814">পাঠৰ কেৰেট হাইলাইট কৰক</translation> <translation id="5208059991603368177">অন আছে</translation> <translation id="5222676887888702881">ছাইন আউট কৰক</translation> +<translation id="5234764350956374838">অগ্ৰাহ্য কৰক</translation> <translation id="523505283826916779">সাধ্য সুবিধাৰ ছেটিংসমূহ</translation> <translation id="5260676007519551770">ডেস্ক ৪</translation> <translation id="5283198616748585639">১ মিনিট যোগ কৰক</translation>
diff --git a/ash/strings/ash_strings_az.xtb b/ash/strings/ash_strings_az.xtb index a110d48..d8ed2abe 100644 --- a/ash/strings/ash_strings_az.xtb +++ b/ash/strings/ash_strings_az.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Daha göstərməyin</translation> <translation id="445864333228800152">Axşamınız xeyir,</translation> <translation id="4458688154122353284">Ekran çəkilişini dayandırın</translation> +<translation id="4472575034687746823">Başlayın</translation> <translation id="4477350412780666475">Növbəti trek</translation> <translation id="4477892968187500306">Bu cihaz Google tərəfindən doğrulanmamış tətbiqlər ehtiva edə bilər.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Mətn karetini vurğulayın</translation> <translation id="5208059991603368177">Aktiv</translation> <translation id="5222676887888702881">Hesabdan çıxın</translation> +<translation id="5234764350956374838">Kənarlaşdırın</translation> <translation id="523505283826916779">Əlçatımlılıq ayarları</translation> <translation id="5260676007519551770">Masa 4</translation> <translation id="5283198616748585639">1 dəqiqə əlavə edin</translation>
diff --git a/ash/strings/ash_strings_be.xtb b/ash/strings/ash_strings_be.xtb index a2f5550..f63b406 100644 --- a/ash/strings/ash_strings_be.xtb +++ b/ash/strings/ash_strings_be.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Больш не паказваць</translation> <translation id="445864333228800152">Добры вечар,</translation> <translation id="4458688154122353284">Спыніць запіс экрана</translation> +<translation id="4472575034687746823">Пачаць</translation> <translation id="4477350412780666475">Наступны трэк</translation> <translation id="4477892968187500306">На гэтай прыладзе могуць знаходзіцца праграмы, якія не былі спраўджаны Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Указваць на курсор рэдагавання тэксту</translation> <translation id="5208059991603368177">Уключана</translation> <translation id="5222676887888702881">Выйсці</translation> +<translation id="5234764350956374838">Адхіліць</translation> <translation id="523505283826916779">Налады спецыяльных магчымасцей</translation> <translation id="5260676007519551770">Стол 4</translation> <translation id="5283198616748585639">Дадаць 1 хвіліну</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb index 84e2e9e..d32c7ef 100644 --- a/ash/strings/ash_strings_bg.xtb +++ b/ash/strings/ash_strings_bg.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Да не се показва отново</translation> <translation id="445864333228800152">Добър вечер,</translation> <translation id="4458688154122353284">Спиране на записа на екрана</translation> +<translation id="4472575034687746823">Първи стъпки</translation> <translation id="4477350412780666475">Следващ запис</translation> <translation id="4477892968187500306">На това устройство може да са инсталирани приложения, които не са потвърдени от Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Открояване на точката на вмъкване в текста</translation> <translation id="5208059991603368177">Вкл.</translation> <translation id="5222676887888702881">Изход</translation> +<translation id="5234764350956374838">Отхвърляне</translation> <translation id="523505283826916779">Настройки за достъпност</translation> <translation id="5260676007519551770">Работен кът 4</translation> <translation id="5283198616748585639">Добавяне на 1 мин</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb index ced2d8b..909271d 100644 --- a/ash/strings/ash_strings_bn.xtb +++ b/ash/strings/ash_strings_bn.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">আর দেখতে চাই না</translation> <translation id="445864333228800152">শুভ সন্ধ্যা,</translation> <translation id="4458688154122353284">স্ক্রিন রেকর্ডিং বন্ধ করুন</translation> +<translation id="4472575034687746823">শুরু করুন</translation> <translation id="4477350412780666475">পরের ট্র্যাক চালান</translation> <translation id="4477892968187500306">Google যাচাই করেনি এমন অ্যাপও এই ডিভাইসে থাকে পারে।</translation> <translation id="4479639480957787382">ইথারনেট</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">পাঠ্যের কার্সার হাইলাইট করুন</translation> <translation id="5208059991603368177">চালু আছে</translation> <translation id="5222676887888702881">সাইন-আউট করুন</translation> +<translation id="5234764350956374838">খারিজ</translation> <translation id="523505283826916779">অ্যাক্সেসিবিলিটি সেটিংস</translation> <translation id="5260676007519551770">ডেস্ক ৪</translation> <translation id="5283198616748585639">১ মিনিট যোগ করুন</translation>
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb index 1c5ba27..cf463c0 100644 --- a/ash/strings/ash_strings_bs.xtb +++ b/ash/strings/ash_strings_bs.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Ne prikazuj ponovo</translation> <translation id="445864333228800152">Dobro veče,</translation> <translation id="4458688154122353284">Zaustavljanje snimanja ekrana</translation> +<translation id="4472575034687746823">Započnite</translation> <translation id="4477350412780666475">Sljedeća numera</translation> <translation id="4477892968187500306">Ovaj uređaj može sadržavati aplikacije koje Google nije potvrdio.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Istakni kursor u tekstu</translation> <translation id="5208059991603368177">Uključeno</translation> <translation id="5222676887888702881">Odjava</translation> +<translation id="5234764350956374838">Odbaci</translation> <translation id="523505283826916779">Postavke pristupačnosti</translation> <translation id="5260676007519551770">Radna površina 4</translation> <translation id="5283198616748585639">Dodaj 1 min</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb index d368e6ca..552a3ff 100644 --- a/ash/strings/ash_strings_ca.xtb +++ b/ash/strings/ash_strings_ca.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">No ho tornis a mostrar</translation> <translation id="445864333228800152">Bon vespre,</translation> <translation id="4458688154122353284">Atura la gravació de pantalla</translation> +<translation id="4472575034687746823">Comença</translation> <translation id="4477350412780666475">Pista següent</translation> <translation id="4477892968187500306">Aquest dispositiu pot contenir aplicacions que Google no ha verificat.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Ressalta la marca d'inserció de text</translation> <translation id="5208059991603368177">Activat</translation> <translation id="5222676887888702881">Tanca la sessió</translation> +<translation id="5234764350956374838">Ignora</translation> <translation id="523505283826916779">Configuració d'accessibilitat</translation> <translation id="5260676007519551770">Escriptori 4</translation> <translation id="5283198616748585639">Afegeix 1 minut</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb index 6cc5751..ad25c45 100644 --- a/ash/strings/ash_strings_cs.xtb +++ b/ash/strings/ash_strings_cs.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Tuto zprávu již nezobrazovat</translation> <translation id="445864333228800152">Dobrý večer,</translation> <translation id="4458688154122353284">Zastavit nahrávání obrazovky</translation> +<translation id="4472575034687746823">Začít</translation> <translation id="4477350412780666475">Další skladba</translation> <translation id="4477892968187500306">Toto zařízení může obsahovat aplikace, které nebyly ověřeny Googlem.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Zvýraznit textový kurzor</translation> <translation id="5208059991603368177">Zap</translation> <translation id="5222676887888702881">Odhlásit se</translation> +<translation id="5234764350956374838">Zavřít</translation> <translation id="523505283826916779">Nastavení usnadnění přístupu</translation> <translation id="5260676007519551770">Plocha 4</translation> <translation id="5283198616748585639">Přidat 1 min</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb index 35af259..894f6ad 100644 --- a/ash/strings/ash_strings_da.xtb +++ b/ash/strings/ash_strings_da.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Vis ikke igen</translation> <translation id="445864333228800152">Godaften</translation> <translation id="4458688154122353284">Stop skærmoptagelse</translation> +<translation id="4472575034687746823">Kom godt i gang</translation> <translation id="4477350412780666475">Næste nummer</translation> <translation id="4477892968187500306">Denne enhed indeholder muligvis apps, der ikke er blevet bekræftet af Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Fremhæv tekstmarkør</translation> <translation id="5208059991603368177">Til</translation> <translation id="5222676887888702881">Log ud</translation> +<translation id="5234764350956374838">Luk</translation> <translation id="523505283826916779">Indstillinger for hjælpefunktioner</translation> <translation id="5260676007519551770">Skrivebord 4</translation> <translation id="5283198616748585639">Tilføj 1 minut</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb index 0cfb646..55547a7 100644 --- a/ash/strings/ash_strings_de.xtb +++ b/ash/strings/ash_strings_de.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Nicht mehr anzeigen</translation> <translation id="445864333228800152">Guten Abend,</translation> <translation id="4458688154122353284">Bildschirmaufzeichnung beenden</translation> +<translation id="4472575034687746823">Jetzt starten</translation> <translation id="4477350412780666475">Nächster Titel</translation> <translation id="4477892968187500306">Auf diesem Gerät befinden sich möglicherweise Apps, die nicht von Google geprüft wurden.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Textcursor hervorheben</translation> <translation id="5208059991603368177">An</translation> <translation id="5222676887888702881">Abmelden</translation> +<translation id="5234764350956374838">Schließen</translation> <translation id="523505283826916779">Einstellungen für Bedienungshilfen</translation> <translation id="5260676007519551770">Desktop 4</translation> <translation id="5283198616748585639">1 min hinzufügen</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb index a6e53246..f4e858d 100644 --- a/ash/strings/ash_strings_el.xtb +++ b/ash/strings/ash_strings_el.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Να μην εμφανιστεί ξανά</translation> <translation id="445864333228800152">Καλησπέρα,</translation> <translation id="4458688154122353284">Διακοπή εγγραφής οθόνης</translation> +<translation id="4472575034687746823">Έναρξη</translation> <translation id="4477350412780666475">Επόμενο κομμάτι</translation> <translation id="4477892968187500306">Αυτή η συσκευή μπορεί να περιέχει εφαρμογές που δεν έχουν επαληθευτεί από την Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Επισήμανση δρομέα κειμένου</translation> <translation id="5208059991603368177">Ενεργό</translation> <translation id="5222676887888702881">Έξοδος</translation> +<translation id="5234764350956374838">Παράβλεψη</translation> <translation id="523505283826916779">Ρυθμίσεις προσβασιμότητας</translation> <translation id="5260676007519551770">Γραφείο 4</translation> <translation id="5283198616748585639">Προσθήκη 1 λεπτού</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb index 82706575..74255b7 100644 --- a/ash/strings/ash_strings_en-GB.xtb +++ b/ash/strings/ash_strings_en-GB.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Don't show again</translation> <translation id="445864333228800152">Good evening,</translation> <translation id="4458688154122353284">Stop screen recording</translation> +<translation id="4472575034687746823">Get started</translation> <translation id="4477350412780666475">Next track</translation> <translation id="4477892968187500306">This device may contain apps that haven't been verified by Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Highlight text caret</translation> <translation id="5208059991603368177">On</translation> <translation id="5222676887888702881">Sign out</translation> +<translation id="5234764350956374838">Dismiss</translation> <translation id="523505283826916779">Accessibility settings</translation> <translation id="5260676007519551770">Desk 4</translation> <translation id="5283198616748585639">Add 1 min</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb index c0c2de6..ca6c324f 100644 --- a/ash/strings/ash_strings_es-419.xtb +++ b/ash/strings/ash_strings_es-419.xtb
@@ -340,6 +340,7 @@ <translation id="4450893287417543264">No volver a mostrar</translation> <translation id="445864333228800152">Buenas noches:</translation> <translation id="4458688154122353284">Detener la grabación de pantalla</translation> +<translation id="4472575034687746823">Comenzar</translation> <translation id="4477350412780666475">Siguiente pista</translation> <translation id="4477892968187500306">Es posible que este dispositivo incluya apps que Google no verificó.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -399,6 +400,7 @@ <translation id="5207949376430453814">Destacar el símbolo de intercalación de texto</translation> <translation id="5208059991603368177">Sí</translation> <translation id="5222676887888702881">Salir</translation> +<translation id="5234764350956374838">Descartar</translation> <translation id="523505283826916779">Configuración de accesibilidad</translation> <translation id="5260676007519551770">Escritorio 4</translation> <translation id="5283198616748585639">Agregar 1 min</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb index 56a2ab2..161bdf1a 100644 --- a/ash/strings/ash_strings_es.xtb +++ b/ash/strings/ash_strings_es.xtb
@@ -340,6 +340,7 @@ <translation id="4450893287417543264">No volver a mostrar</translation> <translation id="445864333228800152">Buenas noches,</translation> <translation id="4458688154122353284">Detener grabación de pantalla</translation> +<translation id="4472575034687746823">Empezar</translation> <translation id="4477350412780666475">Pista siguiente</translation> <translation id="4477892968187500306">Es posible que este dispositivo contenga aplicaciones que no han sido verificadas por Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -399,6 +400,7 @@ <translation id="5207949376430453814">Resaltar el símbolo de intercalación del texto</translation> <translation id="5208059991603368177">Sí</translation> <translation id="5222676887888702881">Cerrar sesión</translation> +<translation id="5234764350956374838">Cerrar</translation> <translation id="523505283826916779">Configuración de accesibilidad</translation> <translation id="5260676007519551770">Escritorio 4</translation> <translation id="5283198616748585639">Añadir 1 minuto</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb index 6a57fac4..d7a2092 100644 --- a/ash/strings/ash_strings_et.xtb +++ b/ash/strings/ash_strings_et.xtb
@@ -340,6 +340,7 @@ <translation id="4450893287417543264">Ära kuva uuesti</translation> <translation id="445864333228800152">Tere õhtust!</translation> <translation id="4458688154122353284">Peata ekraani salvestamine</translation> +<translation id="4472575034687746823">Alustamine</translation> <translation id="4477350412780666475">Järgmine lugu</translation> <translation id="4477892968187500306">See seade võib sisaldada rakendusi, mida Google pole kinnitanud.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -399,6 +400,7 @@ <translation id="5207949376430453814">Tekstisisestusmärgi esiletõstmine</translation> <translation id="5208059991603368177">Sees</translation> <translation id="5222676887888702881">Logi välja</translation> +<translation id="5234764350956374838">Loobu</translation> <translation id="523505283826916779">Juurdepääsuseaded</translation> <translation id="5260676007519551770">Töölaud 4</translation> <translation id="5283198616748585639">Lisa 1 min</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb index 7980b96..439d15d 100644 --- a/ash/strings/ash_strings_eu.xtb +++ b/ash/strings/ash_strings_eu.xtb
@@ -340,6 +340,7 @@ <translation id="4450893287417543264">Ez erakutsi berriro</translation> <translation id="445864333228800152">Arratsalde on:</translation> <translation id="4458688154122353284">Utzi pantaila grabatzeari</translation> +<translation id="4472575034687746823">Hasi erabiltzen</translation> <translation id="4477350412780666475">Hurrengo pista</translation> <translation id="4477892968187500306">Baliteke Google-k egiaztatu ez dituen aplikazioak egotea gailuan.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -399,6 +400,7 @@ <translation id="5207949376430453814">Nabarmendu testu-kurtsorea</translation> <translation id="5208059991603368177">Aktibatuta</translation> <translation id="5222676887888702881">Amaitu saioa</translation> +<translation id="5234764350956374838">Baztertu</translation> <translation id="523505283826916779">Erabilerraztasun-ezarpenak</translation> <translation id="5260676007519551770">4. lan-eremua</translation> <translation id="5283198616748585639">Gehitu 1 minutu</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb index 19a31a7..d891561 100644 --- a/ash/strings/ash_strings_fa.xtb +++ b/ash/strings/ash_strings_fa.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">دیگر نشان داده نشود</translation> <translation id="445864333228800152">عصر بهخیر،</translation> <translation id="4458688154122353284">توقف ضبط صفحهنمایش</translation> +<translation id="4472575034687746823">شروع به کار</translation> <translation id="4477350412780666475">آهنگ بعدی</translation> <translation id="4477892968187500306">ممکن است این دستگاه حاوی برنامههایی باشد که Google آنها را تأیید نکرده است.</translation> <translation id="4479639480957787382">اترنت</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">برجسته کردن هشتک نوشتار</translation> <translation id="5208059991603368177">روشن</translation> <translation id="5222676887888702881">خروج از سیستم</translation> +<translation id="5234764350956374838">رد کردن</translation> <translation id="523505283826916779">تنظیمات دسترسپذیری</translation> <translation id="5260676007519551770">میز ۴</translation> <translation id="5283198616748585639">افزودن ۱ دقیقه</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb index 0f9df551..eb6bd44b 100644 --- a/ash/strings/ash_strings_fi.xtb +++ b/ash/strings/ash_strings_fi.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Älä näytä uudelleen</translation> <translation id="445864333228800152">Hyvää iltaa</translation> <translation id="4458688154122353284">Lopeta näytön tallennus</translation> +<translation id="4472575034687746823">Aloita</translation> <translation id="4477350412780666475">Seuraava kappale</translation> <translation id="4477892968187500306">Laitteessa voi olla sovelluksia, joita Google ei ole vahvistanut.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Korosta tekstikursori</translation> <translation id="5208059991603368177">Päällä</translation> <translation id="5222676887888702881">Kirjaudu ulos</translation> +<translation id="5234764350956374838">Hylkää</translation> <translation id="523505283826916779">Esteettömyysasetukset</translation> <translation id="5260676007519551770">Pöytä 4</translation> <translation id="5283198616748585639">Lisää 1 min</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb index 9e85f37e..d4ff8fee 100644 --- a/ash/strings/ash_strings_fil.xtb +++ b/ash/strings/ash_strings_fil.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Huwag ipakitang muli</translation> <translation id="445864333228800152">Magandang gabi,</translation> <translation id="4458688154122353284">Ihinto ang pag-record ng screen</translation> +<translation id="4472575034687746823">Magsimula</translation> <translation id="4477350412780666475">Susunod na Track</translation> <translation id="4477892968187500306">Posibleng naglalaman ang device na ito ng mga app na hindi pa nave-verify ng Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">I-highlight ang text caret</translation> <translation id="5208059991603368177">Naka-on</translation> <translation id="5222676887888702881">Mag-sign out</translation> +<translation id="5234764350956374838">Huwag pansinin</translation> <translation id="523505283826916779">Mga setting ng accessibility</translation> <translation id="5260676007519551770">Desk 4</translation> <translation id="5283198616748585639">Magdagdag ng 1 minuto</translation>
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb index 9513ca2c..780c9a2 100644 --- a/ash/strings/ash_strings_fr-CA.xtb +++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Ne plus afficher</translation> <translation id="445864333228800152">Bonsoir,</translation> <translation id="4458688154122353284">Arrêter l'enregistrement de l'écran</translation> +<translation id="4472575034687746823">Premiers pas</translation> <translation id="4477350412780666475">Chanson suivante</translation> <translation id="4477892968187500306">Cet appareil pourrait contenir des applications qui n'ont pas été vérifiées par Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Mettre le point d'insertion de texte en surbrillance</translation> <translation id="5208059991603368177">Activé</translation> <translation id="5222676887888702881">Déconnexion</translation> +<translation id="5234764350956374838">Fermer</translation> <translation id="523505283826916779">Paramètres d'accessibilité</translation> <translation id="5260676007519551770">Bureau 4</translation> <translation id="5283198616748585639">Ajouter 1 minute</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb index 7756ab2e..899b370 100644 --- a/ash/strings/ash_strings_fr.xtb +++ b/ash/strings/ash_strings_fr.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Ne plus afficher</translation> <translation id="445864333228800152">Bonsoir,</translation> <translation id="4458688154122353284">Arrêter l'enregistrement de l'écran</translation> +<translation id="4472575034687746823">Premiers pas</translation> <translation id="4477350412780666475">Titre suivant</translation> <translation id="4477892968187500306">Cet appareil peut contenir des applications qui n'ont pas été validées par Google.</translation> <translation id="4479639480957787382">Ethernet </translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Mettre le curseur de texte en surbrillance</translation> <translation id="5208059991603368177">Activé</translation> <translation id="5222676887888702881">Déconnexion</translation> +<translation id="5234764350956374838">Ignorer</translation> <translation id="523505283826916779">Paramètres d'accessibilité</translation> <translation id="5260676007519551770">Bureau 4</translation> <translation id="5283198616748585639">Ajouter une minute</translation>
diff --git a/ash/strings/ash_strings_gl.xtb b/ash/strings/ash_strings_gl.xtb index 9c1d879f..7c49172 100644 --- a/ash/strings/ash_strings_gl.xtb +++ b/ash/strings/ash_strings_gl.xtb
@@ -340,6 +340,7 @@ <translation id="4450893287417543264">Non mostrar outra vez</translation> <translation id="445864333228800152">Bo serán!</translation> <translation id="4458688154122353284">Deter gravación da pantalla</translation> +<translation id="4472575034687746823">Comezar</translation> <translation id="4477350412780666475">Pista seguinte</translation> <translation id="4477892968187500306">Este dispositivo pode conter aplicacións non verificadas por Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -399,6 +400,7 @@ <translation id="5207949376430453814">Destacar o cursor de texto</translation> <translation id="5208059991603368177">Activado</translation> <translation id="5222676887888702881">Pechar sesión</translation> +<translation id="5234764350956374838">Rexeitar</translation> <translation id="523505283826916779">Configuración de accesibilidade</translation> <translation id="5260676007519551770">Escritorio 4</translation> <translation id="5283198616748585639">Engadir 1 min</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb index 2b5f822b..4d200e7 100644 --- a/ash/strings/ash_strings_gu.xtb +++ b/ash/strings/ash_strings_gu.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">ફરી બતાવશો નહીં</translation> <translation id="445864333228800152">ગુડ ઇવનિંગ,</translation> <translation id="4458688154122353284">સ્ક્રીન રેકોર્ડિંગ બંધ કરો</translation> +<translation id="4472575034687746823">પ્રારંભ કરો</translation> <translation id="4477350412780666475">આગલો ટ્રૅક</translation> <translation id="4477892968187500306">આ ડિવાઇસમાં એવી ઍપ હોય શકે કે જેની Google દ્વારા ચકાસણી કરવામાં આવી છે.</translation> <translation id="4479639480957787382">ઇથરનેટ</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">ટેક્સ્ટ કૅરેટને હાઇલાઇટ કરો</translation> <translation id="5208059991603368177">ચાલુ</translation> <translation id="5222676887888702881">સાઇન આઉટ</translation> +<translation id="5234764350956374838">કાઢી નાખો</translation> <translation id="523505283826916779">ઍક્સેસિબિલિટી સેટિંગ્સ</translation> <translation id="5260676007519551770">ડેસ્ક 4</translation> <translation id="5283198616748585639">1 મિનિટ ઉમેરો</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb index 0bb04fd3..dc665c83 100644 --- a/ash/strings/ash_strings_hi.xtb +++ b/ash/strings/ash_strings_hi.xtb
@@ -340,6 +340,7 @@ <translation id="4450893287417543264">फिर से न दिखाएं</translation> <translation id="445864333228800152">गुड ईवनिंग,</translation> <translation id="4458688154122353284">स्क्रीन को रिकॉर्ड करना बंद करें</translation> +<translation id="4472575034687746823">शुरू करें</translation> <translation id="4477350412780666475">अगला ट्रैक</translation> <translation id="4477892968187500306">इस डिवाइस में ऐसे ऐप्लिकेशन हो सकते हैं जिनकी Google ने पुष्टि नहीं की है.</translation> <translation id="4479639480957787382">ईथरनेट</translation> @@ -399,6 +400,7 @@ <translation id="5207949376430453814">लेख कैरेट हाइलाइट करें</translation> <translation id="5208059991603368177">चालू करें</translation> <translation id="5222676887888702881">साइन आउट करें</translation> +<translation id="5234764350956374838">खारिज करें</translation> <translation id="523505283826916779">सुलभता सेटिंग</translation> <translation id="5260676007519551770">डेस्क 4</translation> <translation id="5283198616748585639">एक मिनट जोड़ें</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb index 90705bb..a7d9dea 100644 --- a/ash/strings/ash_strings_hr.xtb +++ b/ash/strings/ash_strings_hr.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Ne prikazuj ponovo</translation> <translation id="445864333228800152">Dobra večer,</translation> <translation id="4458688154122353284">Zaustavite snimanje zaslona</translation> +<translation id="4472575034687746823">Početak korištenja</translation> <translation id="4477350412780666475">Sljedeća pjesma</translation> <translation id="4477892968187500306">Uređaj sadrži aplikacije koje nije potvrdio Google.</translation> <translation id="4479639480957787382">Eternet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Istakni znak za umetanje teksta</translation> <translation id="5208059991603368177">Uključeno</translation> <translation id="5222676887888702881">Odjava</translation> +<translation id="5234764350956374838">Odbaci</translation> <translation id="523505283826916779">Postavke pristupačnosti</translation> <translation id="5260676007519551770">Radna površina 4</translation> <translation id="5283198616748585639">Dodaj 1 min</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb index cc68d52..8e2cd68 100644 --- a/ash/strings/ash_strings_hu.xtb +++ b/ash/strings/ash_strings_hu.xtb
@@ -340,6 +340,7 @@ <translation id="4450893287417543264">Ne jelenjen meg többé</translation> <translation id="445864333228800152">Jó estét!</translation> <translation id="4458688154122353284">Képernyőfelvétel leállítása</translation> +<translation id="4472575034687746823">Kezdő lépések</translation> <translation id="4477350412780666475">Következő szám</translation> <translation id="4477892968187500306">Ez az eszköz olyan alkalmazásokat tartalmazhat, amelyeket nem hagyott jóvá a Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -399,6 +400,7 @@ <translation id="5207949376430453814">Szövegbeszúrási pont kiemelése</translation> <translation id="5208059991603368177">Be</translation> <translation id="5222676887888702881">Kijelentkezés</translation> +<translation id="5234764350956374838">Elvetés</translation> <translation id="523505283826916779">Kisegítő beállítások</translation> <translation id="5260676007519551770">4. asztal</translation> <translation id="5283198616748585639">1 perc hozzáadása</translation>
diff --git a/ash/strings/ash_strings_hy.xtb b/ash/strings/ash_strings_hy.xtb index 5be36590..7f97745 100644 --- a/ash/strings/ash_strings_hy.xtb +++ b/ash/strings/ash_strings_hy.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Այլևս ցույց չտալ</translation> <translation id="445864333228800152">Բարի երեկո,</translation> <translation id="4458688154122353284">Դադարեցնել էկրանի տեսագրումը</translation> +<translation id="4472575034687746823">Սկսել աշխատանքը</translation> <translation id="4477350412780666475">Հաջորդ կատարումը</translation> <translation id="4477892968187500306">Այս սարքում կարող են լինել հավելվածներ, որոնք չեն ստուգվել Google-ի կողմից։</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Ընդգծել տեքստի նշորդը</translation> <translation id="5208059991603368177">Միացված է</translation> <translation id="5222676887888702881">Դուրս գրվել</translation> +<translation id="5234764350956374838">Փակել</translation> <translation id="523505283826916779">Հատուկ գործառույթների կարգավորումներ</translation> <translation id="5260676007519551770">Աշխատասեղան 4</translation> <translation id="5283198616748585639">Ավելացնել 1 րոպե</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb index 18e83a3f..4f824ca1a 100644 --- a/ash/strings/ash_strings_id.xtb +++ b/ash/strings/ash_strings_id.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Jangan tampilkan lagi</translation> <translation id="445864333228800152">Selamat sore,</translation> <translation id="4458688154122353284">Hentikan perekaman layar</translation> +<translation id="4472575034687746823">Memulai</translation> <translation id="4477350412780666475">Lagu Berikutnya</translation> <translation id="4477892968187500306">Perangkat ini dapat memuat aplikasi yang belum diverifikasi oleh Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Sorot tempat penyisipan teks</translation> <translation id="5208059991603368177">Aktif</translation> <translation id="5222676887888702881">Logout</translation> +<translation id="5234764350956374838">Tutup</translation> <translation id="523505283826916779">Setelan aksesibilitas</translation> <translation id="5260676007519551770">Halaman kerja 4</translation> <translation id="5283198616748585639">Tambahkan 1 mnt</translation>
diff --git a/ash/strings/ash_strings_is.xtb b/ash/strings/ash_strings_is.xtb index 9173e38..c9cd185 100644 --- a/ash/strings/ash_strings_is.xtb +++ b/ash/strings/ash_strings_is.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Ekki sýna þetta aftur</translation> <translation id="445864333228800152">Gott kvöld,</translation> <translation id="4458688154122353284">Stöðva skjáupptöku</translation> +<translation id="4472575034687746823">Hefjast handa</translation> <translation id="4477350412780666475">Næsta lag</translation> <translation id="4477892968187500306">Þetta tæki kann að innihalda forrit sem hafa ekki verið staðfest af Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Auðkenna textainnskotsmerki</translation> <translation id="5208059991603368177">Kveikt</translation> <translation id="5222676887888702881">Skrá út</translation> +<translation id="5234764350956374838">Hunsa</translation> <translation id="523505283826916779">Aðgengisstillingar</translation> <translation id="5260676007519551770">Skrifborð 4</translation> <translation id="5283198616748585639">Bæta 1 mín. við</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb index 0c90c89..875b4f3d 100644 --- a/ash/strings/ash_strings_it.xtb +++ b/ash/strings/ash_strings_it.xtb
@@ -340,6 +340,7 @@ <translation id="4450893287417543264">Non mostrare più</translation> <translation id="445864333228800152">Buonasera,</translation> <translation id="4458688154122353284">Interrompi registrazione dello schermo</translation> +<translation id="4472575034687746823">Come iniziare</translation> <translation id="4477350412780666475">Traccia successiva</translation> <translation id="4477892968187500306">Questo dispositivo potrebbe contenere app che non sono state verificate da Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -399,6 +400,7 @@ <translation id="5207949376430453814">Evidenzia il cursore di testo</translation> <translation id="5208059991603368177">On</translation> <translation id="5222676887888702881">Esci</translation> +<translation id="5234764350956374838">Ignora</translation> <translation id="523505283826916779">Impostazioni di accessibilità</translation> <translation id="5260676007519551770">Scrivania 4</translation> <translation id="5283198616748585639">Aggiungi 1 min</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb index 23d9830..59539781 100644 --- a/ash/strings/ash_strings_iw.xtb +++ b/ash/strings/ash_strings_iw.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">אין להציג שוב</translation> <translation id="445864333228800152">ערב טוב,</translation> <translation id="4458688154122353284">הפסקה של הקלטת המסך</translation> +<translation id="4472575034687746823">תחילת העבודה</translation> <translation id="4477350412780666475">הטראק הבא</translation> <translation id="4477892968187500306">המכשיר הזה עשוי להכיל אפליקציות שלא אומתו על-ידי Google.</translation> <translation id="4479639480957787382">אתרנט</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">הדגשה של סמן הטקסט</translation> <translation id="5208059991603368177">פועל</translation> <translation id="5222676887888702881">יציאה</translation> +<translation id="5234764350956374838">סגור</translation> <translation id="523505283826916779">הגדרות נגישות</translation> <translation id="5260676007519551770">שולחן עבודה 4</translation> <translation id="5283198616748585639">הוספת דקה</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb index 6405affce..a958f1a 100644 --- a/ash/strings/ash_strings_ja.xtb +++ b/ash/strings/ash_strings_ja.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">次回から表示しない</translation> <translation id="445864333228800152">こんばんは</translation> <translation id="4458688154122353284">画面の録画を停止</translation> +<translation id="4472575034687746823">利用を開始</translation> <translation id="4477350412780666475">次の曲</translation> <translation id="4477892968187500306">このデバイスには Google が確認していないアプリがインストールされている可能性があります。</translation> <translation id="4479639480957787382">イーサネット</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">テキスト カーソルをハイライト表示する</translation> <translation id="5208059991603368177">オン</translation> <translation id="5222676887888702881">ログアウト</translation> +<translation id="5234764350956374838">閉じる</translation> <translation id="523505283826916779">ユーザー補助機能の設定</translation> <translation id="5260676007519551770">デスク 4</translation> <translation id="5283198616748585639">1 分追加</translation>
diff --git a/ash/strings/ash_strings_ka.xtb b/ash/strings/ash_strings_ka.xtb index 39903ba..b50f85a 100644 --- a/ash/strings/ash_strings_ka.xtb +++ b/ash/strings/ash_strings_ka.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">აღარ გამოჩნდეს</translation> <translation id="445864333228800152">საღამო მშვიდობის,</translation> <translation id="4458688154122353284">ეკრანის ჩაწერის შეწყვეტა</translation> +<translation id="4472575034687746823">დაწყება</translation> <translation id="4477350412780666475">შემდეგი ჩანაწერი</translation> <translation id="4477892968187500306">ამ მოწყობილობაზე შეიძლება იყოს Google-ის მიერ შეუმოწმებელი აპები.</translation> <translation id="4479639480957787382">ეთერნეთი</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">ტექსტის კურსორის გამოყოფა</translation> <translation id="5208059991603368177">ჩართვა</translation> <translation id="5222676887888702881">გამოსვლა</translation> +<translation id="5234764350956374838">გაუქმება</translation> <translation id="523505283826916779">მარტივი წვდომის პარამეტრები</translation> <translation id="5260676007519551770">დესკტოპი 4</translation> <translation id="5283198616748585639">1 წუთის დამატება</translation>
diff --git a/ash/strings/ash_strings_kk.xtb b/ash/strings/ash_strings_kk.xtb index b0a5da9..b0cc8ccb 100644 --- a/ash/strings/ash_strings_kk.xtb +++ b/ash/strings/ash_strings_kk.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Қайта көрсетілмесін</translation> <translation id="445864333228800152">Қайырлы кеш!</translation> <translation id="4458688154122353284">Экран жазуды тоқтату</translation> +<translation id="4472575034687746823">Іске кірісу</translation> <translation id="4477350412780666475">Келесі аудиотрек</translation> <translation id="4477892968187500306">Құрылғыда Google растамаған қолданбалар болуы мүмкін.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Мәтін курсорын бөлектеу</translation> <translation id="5208059991603368177">Қосулы</translation> <translation id="5222676887888702881">Шығу</translation> +<translation id="5234764350956374838">Жабу</translation> <translation id="523505283826916779">Арнайы мүмкіндіктер параметрлері</translation> <translation id="5260676007519551770">4-ші жұмыс үстелі</translation> <translation id="5283198616748585639">1 мин қосу</translation>
diff --git a/ash/strings/ash_strings_km.xtb b/ash/strings/ash_strings_km.xtb index 57f13b8..62ee580 100644 --- a/ash/strings/ash_strings_km.xtb +++ b/ash/strings/ash_strings_km.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">កុំបង្ហាញម្ដងទៀត</translation> <translation id="445864333228800152">សាយណ្ហសួស្ដី</translation> <translation id="4458688154122353284">បញ្ឈប់ការថតអេក្រង់</translation> +<translation id="4472575034687746823">ចាប់ផ្ដើម</translation> <translation id="4477350412780666475">សំនៀងបន្ទាប់</translation> <translation id="4477892968187500306">ឧបករណ៍នេះអាចមានកម្មវិធីដែលមិនត្រូវបានផ្ទៀងផ្ទាត់ដោយ Google។</translation> <translation id="4479639480957787382">ខ្សែអ៊ីនធឺណិត</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">រំលេចសញ្ញាអត្ថបទ</translation> <translation id="5208059991603368177">បើក</translation> <translation id="5222676887888702881">ចាកចេញ</translation> +<translation id="5234764350956374838">ច្រានចោល</translation> <translation id="523505283826916779">ការកំណត់លទ្ធភាពប្រើប្រាស់</translation> <translation id="5260676007519551770">តុទី 4</translation> <translation id="5283198616748585639">បន្ថែម 1 នាទី</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb index 308c675..7ce464e 100644 --- a/ash/strings/ash_strings_kn.xtb +++ b/ash/strings/ash_strings_kn.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">ಮತ್ತೊಮ್ಮೆ ತೋರಿಸಬೇಡಿ</translation> <translation id="445864333228800152">ಶುಭ ಸಂಜೆ,</translation> <translation id="4458688154122353284">ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ನಿಲ್ಲಿಸಿ</translation> +<translation id="4472575034687746823">ಪ್ರಾರಂಭ</translation> <translation id="4477350412780666475">ಮುಂದಿನ ಟ್ರ್ಯಾಕ್</translation> <translation id="4477892968187500306">Google ನಿಂದ ದೃಢೀಕರಿಸದ ಆ್ಯಪ್ಗಳನ್ನು ಈ ಸಾಧನವು ಒಳಗೊಂಡಿರಬಹುದು.</translation> <translation id="4479639480957787382">ಈಥರ್ನೆಟ್</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">ಪಠ್ಯದಲ್ಲಿ ಕೆರೆಟ್ ಅನ್ನು ಎದ್ದುಗಾಣಿಸಿ</translation> <translation id="5208059991603368177">ಆನ್ ಮಾಡಿ</translation> <translation id="5222676887888702881">ಸೈನ್ ಔಟ್</translation> +<translation id="5234764350956374838">ವಜಾಗೊಳಿಸಿ</translation> <translation id="523505283826916779">ಪ್ರವೇಶಿಸುವಿಕೆ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> <translation id="5260676007519551770">ಡೆಸ್ಕ್ 4</translation> <translation id="5283198616748585639">1 ನಿಮಿಷ ಸೇರಿಸಿ</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb index 74f6e5fb..8fb298e 100644 --- a/ash/strings/ash_strings_ko.xtb +++ b/ash/strings/ash_strings_ko.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">다시 표시하지 않음</translation> <translation id="445864333228800152">편안한 저녁 보내세요</translation> <translation id="4458688154122353284">화면 녹화 중지</translation> +<translation id="4472575034687746823">시작하기</translation> <translation id="4477350412780666475">다음 트랙</translation> <translation id="4477892968187500306">이 기기에는 Google에서 확인하지 않은 앱이 설치되어 있을 수 있습니다.</translation> <translation id="4479639480957787382">이더넷</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">텍스트 캐럿 강조표시</translation> <translation id="5208059991603368177">켜짐</translation> <translation id="5222676887888702881">로그아웃</translation> +<translation id="5234764350956374838">닫기</translation> <translation id="523505283826916779">접근성 설정</translation> <translation id="5260676007519551770">데스크 4</translation> <translation id="5283198616748585639">1분 추가</translation>
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb index b04e4db..45929599 100644 --- a/ash/strings/ash_strings_ky.xtb +++ b/ash/strings/ash_strings_ky.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Экинчи көрүнбөсүн</translation> <translation id="445864333228800152">Кутмандуу кечиңиз менен,</translation> <translation id="4458688154122353284">Экрандан видео жаздырууну токтотуу</translation> +<translation id="4472575034687746823">Баштаңыз</translation> <translation id="4477350412780666475">Кийинки трек</translation> <translation id="4477892968187500306">Бул түзмөктө Google текшербеген колдонмолор болушу мүмкүн.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Текст киргизүү учурунда курсор баса белгиленсин</translation> <translation id="5208059991603368177">Күйүк</translation> <translation id="5222676887888702881">Чыгуу</translation> +<translation id="5234764350956374838">Этибарга албоо</translation> <translation id="523505283826916779">Атайын мүмкүнчүлүктөрдү жөндөө</translation> <translation id="5260676007519551770">4-иш такта</translation> <translation id="5283198616748585639">1 мүн. кошуу</translation>
diff --git a/ash/strings/ash_strings_lo.xtb b/ash/strings/ash_strings_lo.xtb index e179070..982a58b 100644 --- a/ash/strings/ash_strings_lo.xtb +++ b/ash/strings/ash_strings_lo.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">ຢ່າສະແດງອີກ</translation> <translation id="445864333228800152">ສະບາຍດີຕອນແລງ,</translation> <translation id="4458688154122353284">ຢຸດການບັນທຶກໜ້າຈໍ</translation> +<translation id="4472575034687746823">ເລີ່ມຕົ້ນ</translation> <translation id="4477350412780666475">ເພງຕໍ່ໄປ</translation> <translation id="4477892968187500306">ອຸປະກອນນີ້ອາດຈະປະກອບມີແອັບທີ່ບໍ່ໄດ້ຜ່ານການຢັ້ງຢືນຈາກ Google.</translation> <translation id="4479639480957787382">ອີເທີເນັດ</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">ໝາຍເຄື່ອງໝາຍກຸບຂໍ້ຄວາມ</translation> <translation id="5208059991603368177">ເປີດ</translation> <translation id="5222676887888702881">ອອກຈາກລະບົບ</translation> +<translation id="5234764350956374838">ປ່ອຍໄປ</translation> <translation id="523505283826916779">ການຕັ້ງຄ່າການເຂົ້າເຖິງ</translation> <translation id="5260676007519551770">ໂຕະ 4</translation> <translation id="5283198616748585639">ເພີ່ມ 1 ນາທີ</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb index dfe8d909..d78307a 100644 --- a/ash/strings/ash_strings_lt.xtb +++ b/ash/strings/ash_strings_lt.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Daugiau neberodyti</translation> <translation id="445864333228800152">Labas vakaras,</translation> <translation id="4458688154122353284">Sustabdyti ekrano įrašymą</translation> +<translation id="4472575034687746823">Pradėkite</translation> <translation id="4477350412780666475">Kitas takelis</translation> <translation id="4477892968187500306">Šiame įrenginyje gali būti programų, kurių „Google“ nepatvirtino.</translation> <translation id="4479639480957787382">Eternetas</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Paryškinti teksto žymeklį</translation> <translation id="5208059991603368177">Įjungti</translation> <translation id="5222676887888702881">Atsijungti</translation> +<translation id="5234764350956374838">Atsisakyti</translation> <translation id="523505283826916779">Pasiekiamumo nustatymai</translation> <translation id="5260676007519551770">4 pultas</translation> <translation id="5283198616748585639">Pridėti 1 min.</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb index 22ab4797..666d13d 100644 --- a/ash/strings/ash_strings_lv.xtb +++ b/ash/strings/ash_strings_lv.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Vairs nerādīt</translation> <translation id="445864333228800152">Labvakar!</translation> <translation id="4458688154122353284">Apturēt ekrāna ierakstīšanu</translation> +<translation id="4472575034687746823">Sākt darbu</translation> <translation id="4477350412780666475">Nākamais ieraksts</translation> <translation id="4477892968187500306">Iespējams, šajā ierīcē ir lietotnes, ko uzņēmums Google nav verificējis.</translation> <translation id="4479639480957787382">tīkls Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Izcelt teksta ievietošanas punktu</translation> <translation id="5208059991603368177">Ieslēgts</translation> <translation id="5222676887888702881">Izrakstīties</translation> +<translation id="5234764350956374838">Nerādīt</translation> <translation id="523505283826916779">Pieejamības iestatījumi</translation> <translation id="5260676007519551770">4. galds</translation> <translation id="5283198616748585639">Pievienot 1 min</translation>
diff --git a/ash/strings/ash_strings_mk.xtb b/ash/strings/ash_strings_mk.xtb index 6612c34..8adfd579 100644 --- a/ash/strings/ash_strings_mk.xtb +++ b/ash/strings/ash_strings_mk.xtb
@@ -340,6 +340,7 @@ <translation id="4450893287417543264">Не прикажувај повторно</translation> <translation id="445864333228800152">Добровечер,</translation> <translation id="4458688154122353284">Запрете со снимање на екранот</translation> +<translation id="4472575034687746823">Започнете</translation> <translation id="4477350412780666475">Следна песна</translation> <translation id="4477892968187500306">Уредов може да содржи апликации што не се потврдени од Google.</translation> <translation id="4479639480957787382">Етернет</translation> @@ -399,6 +400,7 @@ <translation id="5207949376430453814">Нагласи го каретот за текст</translation> <translation id="5208059991603368177">Вклучено</translation> <translation id="5222676887888702881">Одјави се</translation> +<translation id="5234764350956374838">Отфрли</translation> <translation id="523505283826916779">Поставки за пристапност</translation> <translation id="5260676007519551770">Биро 4</translation> <translation id="5283198616748585639">Додај 1 мин.</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb index f17f8c2..ddb022c 100644 --- a/ash/strings/ash_strings_ml.xtb +++ b/ash/strings/ash_strings_ml.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">വീണ്ടും കാണിക്കരുത്</translation> <translation id="445864333228800152">ഗുഡ് ഈവനിംഗ്,</translation> <translation id="4458688154122353284">സ്ക്രീൻ റെക്കോർഡിംഗ് നിർത്തുക</translation> +<translation id="4472575034687746823">ആരംഭിക്കാം</translation> <translation id="4477350412780666475">അടുത്ത ട്രാക്ക്</translation> <translation id="4477892968187500306">Google പരിശോധിച്ചുറപ്പിച്ചിട്ടില്ലാത്ത ആപ്പുകൾ ഈ ഉപകരണത്തിൽ അടങ്ങിയിരിക്കാം.</translation> <translation id="4479639480957787382">എതെര്നെറ്റ്</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">ടെക്സ്റ്റ് കാരറ്റ് ഹൈലൈറ്റ് ചെയ്യുക</translation> <translation id="5208059991603368177">ഓണാണ്</translation> <translation id="5222676887888702881">സൈൻ ഔട്ട് ചെയ്യുക</translation> +<translation id="5234764350956374838">ഡിസ്മിസ്സ് ചെയ്യുക</translation> <translation id="523505283826916779">ഉപയോഗസഹായി ക്രമീകരണങ്ങൾ</translation> <translation id="5260676007519551770">ഡെസ്ക് 4</translation> <translation id="5283198616748585639">ഒരു മിനിറ്റ് ചേർക്കുക</translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb index 0fbaa03..a4207f8 100644 --- a/ash/strings/ash_strings_mn.xtb +++ b/ash/strings/ash_strings_mn.xtb
@@ -340,6 +340,7 @@ <translation id="4450893287417543264">Дахиж бүү харуул</translation> <translation id="445864333228800152">Оройн мэнд,</translation> <translation id="4458688154122353284">Дэлгэцийн үйлдэл бичихийг зогсоох</translation> +<translation id="4472575034687746823">Эхлүүлэх</translation> <translation id="4477350412780666475">Дараагийн бичлэг</translation> <translation id="4477892968187500306">Энэ төхөөрөмж нь Google-н баталгаажуулаагүй аппыг агуулж болзошгүй.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -399,6 +400,7 @@ <translation id="5207949376430453814">Текст оруулах тэмдгийг тодруулах</translation> <translation id="5208059991603368177">Асаалттай</translation> <translation id="5222676887888702881">Гарах</translation> +<translation id="5234764350956374838">Хэрэгсэхгүй болго</translation> <translation id="523505283826916779">Нэвтрэх боломжит байдлын тохиргоо</translation> <translation id="5260676007519551770">Дэлгэц 4</translation> <translation id="5283198616748585639">1 минут нэмэх</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb index 088e2dd..541b143 100644 --- a/ash/strings/ash_strings_mr.xtb +++ b/ash/strings/ash_strings_mr.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">पुन्हा दाखवू नका</translation> <translation id="445864333228800152">शुभ संध्याकाळ,</translation> <translation id="4458688154122353284">स्क्रीन रेकॉर्डिंग थांबवा</translation> +<translation id="4472575034687746823">सुरुवात करा</translation> <translation id="4477350412780666475">पुढील ट्रॅक</translation> <translation id="4477892968187500306">या डिव्हाइसवर कदाचित Google ने पडताळणी न केलेल्या ॲप्सचा समावेश असू शकतो.</translation> <translation id="4479639480957787382">इथरनेट</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">मजकूर कॅरेट हायलाइट करा</translation> <translation id="5208059991603368177">सुरू करा</translation> <translation id="5222676887888702881">साइन आउट करा</translation> +<translation id="5234764350956374838">डिसमिस करा</translation> <translation id="523505283826916779">ॲक्सेसिबिलिटी सेटिंग्ज</translation> <translation id="5260676007519551770">डेस्क ४</translation> <translation id="5283198616748585639">एक मिनिट जोडा</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb index 51e3e41..fd89acf 100644 --- a/ash/strings/ash_strings_ms.xtb +++ b/ash/strings/ash_strings_ms.xtb
@@ -340,6 +340,7 @@ <translation id="4450893287417543264">Jangan tunjukkan lagi</translation> <translation id="445864333228800152">Selamat petang,</translation> <translation id="4458688154122353284">Hentikan rakaman skrin</translation> +<translation id="4472575034687746823">Bermula</translation> <translation id="4477350412780666475">Lagu Seterusnya</translation> <translation id="4477892968187500306">Peranti ini mungkin mengandungi apl yang belum disahkan oleh Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -399,6 +400,7 @@ <translation id="5207949376430453814">Serlahkan karet teks</translation> <translation id="5208059991603368177">Hidup</translation> <translation id="5222676887888702881">Log keluar</translation> +<translation id="5234764350956374838">Ketepikan</translation> <translation id="523505283826916779">Tetapan kebolehcapaian</translation> <translation id="5260676007519551770">Meja 4</translation> <translation id="5283198616748585639">Tambah 1 min</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb index 22c0186..1e2aca5 100644 --- a/ash/strings/ash_strings_my.xtb +++ b/ash/strings/ash_strings_my.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">ထပ်မပြပါနှင့်</translation> <translation id="445864333228800152">မင်္ဂလာ ညနေခင်းပါ၊</translation> <translation id="4458688154122353284">ဖန်သားပြင်ရိုက်ကူးမှု ရပ်ရန်</translation> +<translation id="4472575034687746823">စကြရအောင်</translation> <translation id="4477350412780666475">နောက်တစ်ပုဒ်</translation> <translation id="4477892968187500306">ဤစက်တွင် Google က အတည်ပြုမထားသော အက်ပ်များ ပါဝင်နိုင်သည်။</translation> <translation id="4479639480957787382">အီတာနက်</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">စာရိုက်ထည့်ရန်အကွက်ကို မြင်သာထင်သာဖြစ်အောင်ပြုလုပ်ရန်</translation> <translation id="5208059991603368177">ဖွင့်ထားသည်</translation> <translation id="5222676887888702881">ထွက်ခွာရန်</translation> +<translation id="5234764350956374838">ပယ်ရန်</translation> <translation id="523505283826916779">ရယူသုံးနိုင်မှု ဆက်တင်များ</translation> <translation id="5260676007519551770">စာရေးခုံ ၄</translation> <translation id="5283198616748585639">၁ မိနစ် တိုးရန်</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb index 849510a..c70728a 100644 --- a/ash/strings/ash_strings_ne.xtb +++ b/ash/strings/ash_strings_ne.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">फेरि नदेखाउनुहोस्</translation> <translation id="445864333228800152">नमस्ते,</translation> <translation id="4458688154122353284">स्क्रिन रेकर्ड गर्ने कार्य रोक्नुहोस्</translation> +<translation id="4472575034687746823">सुरु गर्नुहोस्</translation> <translation id="4477350412780666475">अर्को ट्र्याक</translation> <translation id="4477892968187500306">यो यन्त्रमा Google ले पुष्टि नगरेका एपहरू हुन सक्छन्।</translation> <translation id="4479639480957787382">इथरनेट</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">पाठको क्योरटलाई हाइलाइट</translation> <translation id="5208059991603368177">अन छ</translation> <translation id="5222676887888702881">साइन आउट गर्नुहोस्</translation> +<translation id="5234764350956374838">खारेज गर्नुहोस्</translation> <translation id="523505283826916779">पहुँचक्षमता सेटिङहरू</translation> <translation id="5260676007519551770">डेस्क ४</translation> <translation id="5283198616748585639">१ मिनट थप्नुहोस्</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb index 220ea70..8f71d430 100644 --- a/ash/strings/ash_strings_nl.xtb +++ b/ash/strings/ash_strings_nl.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Niet meer tonen</translation> <translation id="445864333228800152">Goedenavond,</translation> <translation id="4458688154122353284">Schermopname stoppen</translation> +<translation id="4472575034687746823">Aan de slag</translation> <translation id="4477350412780666475">Volgend nummer</translation> <translation id="4477892968187500306">Dit apparaat bevat mogelijk apps die niet zijn geverifieerd door Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Tekstcursor markeren</translation> <translation id="5208059991603368177">Aan</translation> <translation id="5222676887888702881">Uitloggen</translation> +<translation id="5234764350956374838">Sluiten</translation> <translation id="523505283826916779">Toegankelijkheidsinstellingen</translation> <translation id="5260676007519551770">Bureau 4</translation> <translation id="5283198616748585639">1 min toevoegen</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb index a2e9528..66c3f3c9 100644 --- a/ash/strings/ash_strings_no.xtb +++ b/ash/strings/ash_strings_no.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Ikke vis igjen</translation> <translation id="445864333228800152">God kveld</translation> <translation id="4458688154122353284">Avslutt skjermopptak</translation> +<translation id="4472575034687746823">Kom i gang</translation> <translation id="4477350412780666475">Neste spor</translation> <translation id="4477892968187500306">Denne enheten kan ha apper som ikke er verifisert av Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Fremhev tekstinnsettingspunktet</translation> <translation id="5208059991603368177">På</translation> <translation id="5222676887888702881">Logg av</translation> +<translation id="5234764350956374838">Lukk</translation> <translation id="523505283826916779">Tilgjengelighetsinnstillinger</translation> <translation id="5260676007519551770">Skrivebord 4</translation> <translation id="5283198616748585639">Legg til 1 min</translation>
diff --git a/ash/strings/ash_strings_or.xtb b/ash/strings/ash_strings_or.xtb index a27181ee..bcae2a6 100644 --- a/ash/strings/ash_strings_or.xtb +++ b/ash/strings/ash_strings_or.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">ଆଉ ଦେଖାନ୍ତୁ ନାହିଁ</translation> <translation id="445864333228800152">ଶୁଭ ସନ୍ଧ୍ୟା,</translation> <translation id="4458688154122353284">ସ୍କ୍ରିନ୍ ରେକର୍ଡିଂ ବନ୍ଦ କରନ୍ତୁ</translation> +<translation id="4472575034687746823">ଆରମ୍ଭ କରନ୍ତୁ</translation> <translation id="4477350412780666475">ପରବର୍ତ୍ତୀ ଟ୍ରାକ୍</translation> <translation id="4477892968187500306">ଏହି ଡିଭାଇସ୍ରେ ଏପରି ଆପ୍ସ ଥାଇପାରେ ଯାହା Google ଦ୍ୱାରା ଯାଞ୍ଚ କରାଯାଇନାହିଁ।</translation> <translation id="4479639480957787382">ଇଥର୍ନେଟ୍</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">ଟେକ୍ସଟ୍ କ୍ୟାରେଟ୍ ହାଇଲାଇଟ୍ କରନ୍ତୁ</translation> <translation id="5208059991603368177">ଚାଲୁ ଅଛି</translation> <translation id="5222676887888702881">ସାଇନ୍ ଆଉଟ୍ କରନ୍ତୁ</translation> +<translation id="5234764350956374838">ଖାରଜ କରନ୍ତୁ</translation> <translation id="523505283826916779">ଆକ୍ସେସିବିଲିଟୀ ସେଟିଂସ୍</translation> <translation id="5260676007519551770">ଡେସ୍କ 4</translation> <translation id="5283198616748585639">1 ମିନିଟ୍ ଯୋଗ କରନ୍ତୁ</translation>
diff --git a/ash/strings/ash_strings_pa.xtb b/ash/strings/ash_strings_pa.xtb index 7adb929..3947bcb 100644 --- a/ash/strings/ash_strings_pa.xtb +++ b/ash/strings/ash_strings_pa.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">ਦੁਬਾਰਾ ਨਾ ਦਿਖਾਓ</translation> <translation id="445864333228800152">ਸਤਿ ਸ੍ਰੀ ਅਕਾਲ,</translation> <translation id="4458688154122353284">ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ ਬੰਦ ਕਰੋ</translation> +<translation id="4472575034687746823">ਸ਼ੁਰੂਆਤ ਕਰੋ</translation> <translation id="4477350412780666475">ਅਗਲਾ ਟਰੈਕ</translation> <translation id="4477892968187500306">ਇਸ ਡੀਵਾਈਸ ਵਿੱਚ ਸ਼ਾਇਦ ਅਜਿਹੀਆਂ ਐਪਾਂ ਹੋਣ ਜਿਨ੍ਹਾਂ ਦੀ ਪੁਸ਼ਟੀ Google ਨੇ ਨਹੀਂ ਕੀਤੀ ਹੈ।</translation> <translation id="4479639480957787382">ਈਥਰਨੈਟ</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">ਲਿਖਤ ਕੈਰੇਟ ਨੂੰ ਉਜਾਗਰ ਕਰੋ</translation> <translation id="5208059991603368177">ਚਾਲੂ ਹੈ</translation> <translation id="5222676887888702881">ਸਾਈਨ-ਆਊਟ ਕਰੋ</translation> +<translation id="5234764350956374838">ਬਰਖ਼ਾਸਤ ਕਰੋ</translation> <translation id="523505283826916779">ਪਹੁੰਚਯੋਗਤਾ ਸੈਟਿੰਗਾਂ</translation> <translation id="5260676007519551770">ਡੈਸਕ 4</translation> <translation id="5283198616748585639">1 ਮਿੰਟ ਸ਼ਾਮਲ ਕਰੋ</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb index 8d674e2..287db5f 100644 --- a/ash/strings/ash_strings_pl.xtb +++ b/ash/strings/ash_strings_pl.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Nie pokazuj ponownie</translation> <translation id="445864333228800152">Dobry wieczór,</translation> <translation id="4458688154122353284">Zatrzymaj nagrywanie ekranu</translation> +<translation id="4472575034687746823">Rozpocznij</translation> <translation id="4477350412780666475">Następny utwór</translation> <translation id="4477892968187500306">Na tym urządzeniu mogą być zainstalowane aplikacje niezweryfikowane przez Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Podświetlaj kursor tekstu</translation> <translation id="5208059991603368177">Włączono</translation> <translation id="5222676887888702881">Wyloguj się</translation> +<translation id="5234764350956374838">Zamknij</translation> <translation id="523505283826916779">Ustawienia ułatwień dostępu</translation> <translation id="5260676007519551770">Biurko 4</translation> <translation id="5283198616748585639">Dodaj 1 min</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb index f7463b8..aced0c2b 100644 --- a/ash/strings/ash_strings_pt-BR.xtb +++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Não mostrar novamente</translation> <translation id="445864333228800152">Boa noite,</translation> <translation id="4458688154122353284">Parar gravação da tela</translation> +<translation id="4472575034687746823">Primeiros passos</translation> <translation id="4477350412780666475">Próxima faixa</translation> <translation id="4477892968187500306">O dispositivo pode conter apps que não foram verificados pelo Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Destacar cursor de texto</translation> <translation id="5208059991603368177">Ativado</translation> <translation id="5222676887888702881">Sair</translation> +<translation id="5234764350956374838">Dispensar</translation> <translation id="523505283826916779">Configurações de acessibilidade</translation> <translation id="5260676007519551770">Espaço de trabalho 4</translation> <translation id="5283198616748585639">Adicionar 1 min</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb index 3253499..7bcf09f 100644 --- a/ash/strings/ash_strings_pt-PT.xtb +++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Não mostrar de novo</translation> <translation id="445864333228800152">Boa noite,</translation> <translation id="4458688154122353284">Parar gravação de ecrã</translation> +<translation id="4472575034687746823">Começar</translation> <translation id="4477350412780666475">Faixa seguinte</translation> <translation id="4477892968187500306">Este dispositivo pode conter aplicações que não foram validadas pela Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Realçar cursor do texto</translation> <translation id="5208059991603368177">Ativado</translation> <translation id="5222676887888702881">Terminar sessão</translation> +<translation id="5234764350956374838">Ignorar</translation> <translation id="523505283826916779">Definições de acessibilidade</translation> <translation id="5260676007519551770">Secretária 4</translation> <translation id="5283198616748585639">Adicionar 1 min</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb index 71aabf0..5dbecb5 100644 --- a/ash/strings/ash_strings_ro.xtb +++ b/ash/strings/ash_strings_ro.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Nu mai afișa</translation> <translation id="445864333228800152">Bună seara!</translation> <translation id="4458688154122353284">Oprește înregistrarea ecranului</translation> +<translation id="4472575034687746823">Începeți</translation> <translation id="4477350412780666475">Melodia următoare</translation> <translation id="4477892968187500306">Dispozitivul poate conține aplicații care nu au fost verificate de Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Evidențiază cursorul pentru text</translation> <translation id="5208059991603368177">Activată</translation> <translation id="5222676887888702881">Deconectează-te</translation> +<translation id="5234764350956374838">Închide</translation> <translation id="523505283826916779">Setări de accesibilitate</translation> <translation id="5260676007519551770">Desktop 4</translation> <translation id="5283198616748585639">Adaugă 1 min.</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb index ba84111..ddffbfbe 100644 --- a/ash/strings/ash_strings_ru.xtb +++ b/ash/strings/ash_strings_ru.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Больше не показывать</translation> <translation id="445864333228800152">Добрый вечер!</translation> <translation id="4458688154122353284">Остановить запись с экрана</translation> +<translation id="4472575034687746823">Начало работы</translation> <translation id="4477350412780666475">Следующий трек</translation> <translation id="4477892968187500306">На устройстве могут быть приложения, не проверенные Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Выделять курсор при вводе текста</translation> <translation id="5208059991603368177">Включено</translation> <translation id="5222676887888702881">Выйти</translation> +<translation id="5234764350956374838">Закрыть</translation> <translation id="523505283826916779">Настройки специальных возможностей</translation> <translation id="5260676007519551770">Рабочий стол 4</translation> <translation id="5283198616748585639">Добавить 1 мин.</translation>
diff --git a/ash/strings/ash_strings_si.xtb b/ash/strings/ash_strings_si.xtb index 32e264ec..1c214c9 100644 --- a/ash/strings/ash_strings_si.xtb +++ b/ash/strings/ash_strings_si.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">නැවත නොපෙන්වන්න</translation> <translation id="445864333228800152">සුබ සන්ධ්යාවක්,</translation> <translation id="4458688154122353284">තිරය පටිගත කිරීම නවත්වන්න</translation> +<translation id="4472575034687746823">අරඹන්න</translation> <translation id="4477350412780666475">ඊළඟ ඛණ්ඩය</translation> <translation id="4477892968187500306">මෙම උපාංගයට Google විසින් සත්යාපන නොකෙරුණු යෙදුම් අඩංගු විය හැක.</translation> <translation id="4479639480957787382">ඊදර්නෙට්</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">පෙළ කාකපාදය උද්දීපනය කරන්න</translation> <translation id="5208059991603368177">ක්රියාත්මකයි</translation> <translation id="5222676887888702881">පිටවීම</translation> +<translation id="5234764350956374838">ඉවත් කරන්න</translation> <translation id="523505283826916779">ප්රවේශ්යතා පසුතල</translation> <translation id="5260676007519551770">4 වෙනි මේසය</translation> <translation id="5283198616748585639">1 විනාඩියක් එක් කරන්න</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb index ef4cb9c6..9bddb044 100644 --- a/ash/strings/ash_strings_sk.xtb +++ b/ash/strings/ash_strings_sk.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Nabudúce nezobrazovať</translation> <translation id="445864333228800152">Dobrý večer,</translation> <translation id="4458688154122353284">Zastaviť nahrávanie obrazovky</translation> +<translation id="4472575034687746823">Začíname</translation> <translation id="4477350412780666475">Ďalšia stopa</translation> <translation id="4477892968187500306">Toto zariadenie môže obsahovať aplikácie, ktoré neboli overené Googlom.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Zvýrazniť textový kurzor</translation> <translation id="5208059991603368177">Zapnutý</translation> <translation id="5222676887888702881">Odhlásiť sa</translation> +<translation id="5234764350956374838">Ignorovať</translation> <translation id="523505283826916779">Nastavenia zjednodušenia prístupu</translation> <translation id="5260676007519551770">4. plocha</translation> <translation id="5283198616748585639">Pridať 1 minútu</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb index 7aec4cfb..004ef2f 100644 --- a/ash/strings/ash_strings_sl.xtb +++ b/ash/strings/ash_strings_sl.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Tega ne prikaži več</translation> <translation id="445864333228800152">Dober večer,</translation> <translation id="4458688154122353284">Ustavitev snemanja zaslona</translation> +<translation id="4472575034687746823">Kako začeti</translation> <translation id="4477350412780666475">Naslednja skladba</translation> <translation id="4477892968187500306">Ta naprava morda vsebuje aplikacije, ki jih ni preveril Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Označitev kazalke v besedilu</translation> <translation id="5208059991603368177">Vklopljeno</translation> <translation id="5222676887888702881">Odjava</translation> +<translation id="5234764350956374838">Opusti</translation> <translation id="523505283826916779">Nastavitve funkcij za ljudi s posebnimi potrebami</translation> <translation id="5260676007519551770">Namizje 4</translation> <translation id="5283198616748585639">Dodaj 1 min</translation>
diff --git a/ash/strings/ash_strings_sq.xtb b/ash/strings/ash_strings_sq.xtb index 2d4b62d..79081772 100644 --- a/ash/strings/ash_strings_sq.xtb +++ b/ash/strings/ash_strings_sq.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Mos e shfaq përsëri</translation> <translation id="445864333228800152">Mirëmbrëma,</translation> <translation id="4458688154122353284">Ndalo regjistrimin e ekranit</translation> +<translation id="4472575034687746823">Fillo</translation> <translation id="4477350412780666475">Kënga tjetër</translation> <translation id="4477892968187500306">Kjo pajisje mund të përmbajë aplikacione që nuk janë verifikuar nga Google.</translation> <translation id="4479639480957787382">Eternet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Thekso kursorin e tekstit</translation> <translation id="5208059991603368177">Aktive</translation> <translation id="5222676887888702881">Dil</translation> +<translation id="5234764350956374838">Hiq dorë</translation> <translation id="523505283826916779">Cilësimet e qasjes</translation> <translation id="5260676007519551770">Tavolina e punës 4</translation> <translation id="5283198616748585639">Shto 1 minutë</translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb index 59b4724..9f65a34 100644 --- a/ash/strings/ash_strings_sr-Latn.xtb +++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Ne prikazuj ponovo</translation> <translation id="445864333228800152">Dobro veče,</translation> <translation id="4458688154122353284">Zaustavite snimanje ekrana</translation> +<translation id="4472575034687746823">Započnimo</translation> <translation id="4477350412780666475">Sledeća pesma</translation> <translation id="4477892968187500306">Ovaj uređaj može da sadrži aplikacije koje Google nije verifikovao.</translation> <translation id="4479639480957787382">Eternet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Istakni kursor za tekst</translation> <translation id="5208059991603368177">Uključeno</translation> <translation id="5222676887888702881">Odjavi me</translation> +<translation id="5234764350956374838">Odbaci</translation> <translation id="523505283826916779">Podešavanja pristupačnosti</translation> <translation id="5260676007519551770">Radna površina 4</translation> <translation id="5283198616748585639">Dodaj 1 min</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb index 7748261e..3919eb9 100644 --- a/ash/strings/ash_strings_sr.xtb +++ b/ash/strings/ash_strings_sr.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Не приказуј поново</translation> <translation id="445864333228800152">Добро вече,</translation> <translation id="4458688154122353284">Зауставите снимање екрана</translation> +<translation id="4472575034687746823">Започнимо</translation> <translation id="4477350412780666475">Следећа песма</translation> <translation id="4477892968187500306">Овај уређај може да садржи апликације које Google није верификовао.</translation> <translation id="4479639480957787382">Етернет</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Истакни курсор за текст</translation> <translation id="5208059991603368177">Укључено</translation> <translation id="5222676887888702881">Одјави ме</translation> +<translation id="5234764350956374838">Одбаци</translation> <translation id="523505283826916779">Подешавања приступачности</translation> <translation id="5260676007519551770">Радна површина 4</translation> <translation id="5283198616748585639">Додај 1 мин</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb index 8755d36c..2d4fc6b 100644 --- a/ash/strings/ash_strings_sv.xtb +++ b/ash/strings/ash_strings_sv.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Visa inte igen</translation> <translation id="445864333228800152">Hej!</translation> <translation id="4458688154122353284">Stoppa skärminspelningen</translation> +<translation id="4472575034687746823">Kom igång</translation> <translation id="4477350412780666475">Nästa spår</translation> <translation id="4477892968187500306">Den här enheten kan innehålla appar som inte har verifierats av Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Markera textmarkören</translation> <translation id="5208059991603368177">På</translation> <translation id="5222676887888702881">Logga ut</translation> +<translation id="5234764350956374838">Stäng</translation> <translation id="523505283826916779">Inställningar för tillgänglighet</translation> <translation id="5260676007519551770">Skrivbord 4</translation> <translation id="5283198616748585639">Lägg till en min</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb index afd11aa..0c81f72 100644 --- a/ash/strings/ash_strings_sw.xtb +++ b/ash/strings/ash_strings_sw.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Usionyeshe tena</translation> <translation id="445864333228800152">Habari za jioni,</translation> <translation id="4458688154122353284">Acha kunasa skrini</translation> +<translation id="4472575034687746823">Anza</translation> <translation id="4477350412780666475">Wimbo Unaofuata</translation> <translation id="4477892968187500306">Huenda kifaa hiki kina programu ambazo hazijathibitishwa na Google.</translation> <translation id="4479639480957787382">Ethaneti</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Angazia kareti ya maandishi</translation> <translation id="5208059991603368177">Yamewashwa</translation> <translation id="5222676887888702881">Ondoka</translation> +<translation id="5234764350956374838">Ondoa</translation> <translation id="523505283826916779">Mipangilio ya ufikiaji</translation> <translation id="5260676007519551770">Eneokazi la 4</translation> <translation id="5283198616748585639">Ongeza dakika 1</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb index d53b303..ca5cf1f 100644 --- a/ash/strings/ash_strings_ta.xtb +++ b/ash/strings/ash_strings_ta.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">மீண்டும் காட்டாதே</translation> <translation id="445864333228800152">மாலை வணக்கம்,</translation> <translation id="4458688154122353284">ஸ்கிரீனை ரெக்கார்டு செய்வதை நிறுத்து</translation> +<translation id="4472575034687746823">தொடங்குக</translation> <translation id="4477350412780666475">அடுத்த டிராக்</translation> <translation id="4477892968187500306">Googleளால் சரிபார்க்கப்படாத ஆப்ஸ் இந்தச் சாதனத்தில் இருக்கக்கூடும்.</translation> <translation id="4479639480957787382">ஈத்தர்நெட்</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">உரைச் சுட்டியைத் தனிப்படுத்து</translation> <translation id="5208059991603368177">இயக்கு</translation> <translation id="5222676887888702881">வெளியேறு</translation> +<translation id="5234764350956374838">நிராகரி</translation> <translation id="523505283826916779">அணுகல்தன்மை அமைப்புகள்</translation> <translation id="5260676007519551770">மேசை 4</translation> <translation id="5283198616748585639">1 நிமிடத்தைச் சேர்</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb index ddd1eda..dd97d51 100644 --- a/ash/strings/ash_strings_te.xtb +++ b/ash/strings/ash_strings_te.xtb
@@ -340,6 +340,7 @@ <translation id="4450893287417543264">మళ్లీ చూపవద్దు</translation> <translation id="445864333228800152">గుడ్ ఈవెనింగ్,</translation> <translation id="4458688154122353284">స్క్రీన్ రికార్డింగ్ను ఆపివేయి</translation> +<translation id="4472575034687746823">ప్రారంభించండి</translation> <translation id="4477350412780666475">తర్వాతి ట్రాక్</translation> <translation id="4477892968187500306">ఈ పరికరంలో Google ధృవీకరించని యాప్లు ఉండవచ్చు.</translation> <translation id="4479639480957787382">ఈథర్నెట్</translation> @@ -399,6 +400,7 @@ <translation id="5207949376430453814">వచన కర్సర్ గుర్తును హైలైట్ చేయి</translation> <translation id="5208059991603368177">ఆన్ చేయి</translation> <translation id="5222676887888702881">సైన్ ఔట్</translation> +<translation id="5234764350956374838">తొలగించు</translation> <translation id="523505283826916779">యాక్సెస్ సెట్టింగ్లు</translation> <translation id="5260676007519551770">డెస్క్ 4</translation> <translation id="5283198616748585639">1 నిమి జోడించు</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb index 8926a58..8b6058bf 100644 --- a/ash/strings/ash_strings_th.xtb +++ b/ash/strings/ash_strings_th.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">ไม่ต้องแสดงอีก</translation> <translation id="445864333228800152">สวัสดียามเย็น</translation> <translation id="4458688154122353284">หยุดการอัดหน้าจอ</translation> +<translation id="4472575034687746823">เริ่มต้น</translation> <translation id="4477350412780666475">แทร็กถัดไป</translation> <translation id="4477892968187500306">อุปกรณ์นี้อาจมีแอปที่ยังไม่ได้รับการยืนยันจาก Google</translation> <translation id="4479639480957787382">อีเทอร์เน็ต</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">ไฮไลต์เครื่องหมาย Caret ของข้อความ</translation> <translation id="5208059991603368177">เปิด</translation> <translation id="5222676887888702881">ออกจากระบบ</translation> +<translation id="5234764350956374838">ปิด</translation> <translation id="523505283826916779">การตั้งค่าสำหรับการเข้าถึง</translation> <translation id="5260676007519551770">โต๊ะที่ 4</translation> <translation id="5283198616748585639">เพิ่ม 1 นาที</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb index 72c2bba4..0d23b843 100644 --- a/ash/strings/ash_strings_tr.xtb +++ b/ash/strings/ash_strings_tr.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Bir daha gösterme</translation> <translation id="445864333228800152">İyi akşamlar,</translation> <translation id="4458688154122353284">Ekran kaydını durdur</translation> +<translation id="4472575034687746823">Başlayın</translation> <translation id="4477350412780666475">Sonraki Parça</translation> <translation id="4477892968187500306">Bu cihaz Google tarafından doğrulanmamış uygulamalar içerebilir.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Metin imlecini vurgula</translation> <translation id="5208059991603368177">Açık</translation> <translation id="5222676887888702881">Çıkış</translation> +<translation id="5234764350956374838">Kapat</translation> <translation id="523505283826916779">Erişilebilirlik ayarları</translation> <translation id="5260676007519551770">Çalışma Masası 4</translation> <translation id="5283198616748585639">1 dk ekle</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb index 6151568..731c506 100644 --- a/ash/strings/ash_strings_uk.xtb +++ b/ash/strings/ash_strings_uk.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Більше не показувати</translation> <translation id="445864333228800152">Доброго вечора!</translation> <translation id="4458688154122353284">Зупинити запис екрана</translation> +<translation id="4472575034687746823">Початок роботи</translation> <translation id="4477350412780666475">Наступна композиція</translation> <translation id="4477892968187500306">На цьому пристрої можуть бути додатки, які не були перевірені Google.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Підсвічувати місце введення тексту</translation> <translation id="5208059991603368177">Увімкнено</translation> <translation id="5222676887888702881">Вийти</translation> +<translation id="5234764350956374838">Закрити</translation> <translation id="523505283826916779">Налаштування доступності</translation> <translation id="5260676007519551770">Робочий стіл 4</translation> <translation id="5283198616748585639">Додати 1 хв</translation>
diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb index c164fff..726060b 100644 --- a/ash/strings/ash_strings_ur.xtb +++ b/ash/strings/ash_strings_ur.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">دوبارہ نہ دکھائیں</translation> <translation id="445864333228800152">شام بخیر،</translation> <translation id="4458688154122353284">اسکرین ریکارڈنگ روکیں</translation> +<translation id="4472575034687746823">شروع کریں</translation> <translation id="4477350412780666475">اگلا ٹریک</translation> <translation id="4477892968187500306">یہ آلہ ایسی ایپس پر مشتمل ہو سکتا ہے جو Google کے ذریعے تصدیق شدہ نہیں ہیں۔</translation> <translation id="4479639480957787382">ایتھرنیٹ</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">متن کیرٹ کو نمایاں کریں</translation> <translation id="5208059991603368177">آن</translation> <translation id="5222676887888702881">سائن آؤٹ</translation> +<translation id="5234764350956374838">برخاست کریں</translation> <translation id="523505283826916779">ایکسیسبیلٹی کی ترتیبات</translation> <translation id="5260676007519551770">ڈیسک 4</translation> <translation id="5283198616748585639">1 منٹ شامل کریں</translation>
diff --git a/ash/strings/ash_strings_uz.xtb b/ash/strings/ash_strings_uz.xtb index cc7142fb..92678e2 100644 --- a/ash/strings/ash_strings_uz.xtb +++ b/ash/strings/ash_strings_uz.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Boshqa ko‘rsatilmasin</translation> <translation id="445864333228800152">Xayrli kech,</translation> <translation id="4458688154122353284">Ekranni yozib olishni toʻxtatish</translation> +<translation id="4472575034687746823">Boshlash</translation> <translation id="4477350412780666475">Keyingi trek</translation> <translation id="4477892968187500306">Bu qurilmada Google tomonidan tekshirilmagan ilovalar boʻlishi mumkin.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Matn kiritish joyi ajratib ko‘rsatilsin</translation> <translation id="5208059991603368177">Yoniq</translation> <translation id="5222676887888702881">Tizimdan chiqish</translation> +<translation id="5234764350956374838">Yopish</translation> <translation id="523505283826916779">Maxsus imkoniyatlar sozlamalari</translation> <translation id="5260676007519551770">Desk 4</translation> <translation id="5283198616748585639">1 daqiqa qoʻshish</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb index 2379c9c..c699432 100644 --- a/ash/strings/ash_strings_vi.xtb +++ b/ash/strings/ash_strings_vi.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Không hiển thị lại</translation> <translation id="445864333228800152">Xin chào!</translation> <translation id="4458688154122353284">Dừng ghi màn hình</translation> +<translation id="4472575034687746823">Bắt đầu</translation> <translation id="4477350412780666475">Bản nhạc tiếp theo</translation> <translation id="4477892968187500306">Thiết bị này có thể chứa những ứng dụng mà Google chưa xác minh.</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Đánh dấu điểm chèn văn bản</translation> <translation id="5208059991603368177">Bật</translation> <translation id="5222676887888702881">Đăng xuất</translation> +<translation id="5234764350956374838">Bỏ qua</translation> <translation id="523505283826916779">Hỗ trợ tiếp cận</translation> <translation id="5260676007519551770">Không gian làm việc 4</translation> <translation id="5283198616748585639">Thêm 1 phút</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb index 42c4adc..e5d933c1 100644 --- a/ash/strings/ash_strings_zh-CN.xtb +++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">不再显示</translation> <translation id="445864333228800152">晚上好!</translation> <translation id="4458688154122353284">停止屏幕录制</translation> +<translation id="4472575034687746823">开始使用</translation> <translation id="4477350412780666475">下一曲</translation> <translation id="4477892968187500306">此设备可能包含未经 Google 验证的应用。</translation> <translation id="4479639480957787382">以太网</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">突出显示文本插入符号</translation> <translation id="5208059991603368177">开启</translation> <translation id="5222676887888702881">退出</translation> +<translation id="5234764350956374838">关闭</translation> <translation id="523505283826916779">无障碍设置</translation> <translation id="5260676007519551770">桌面 4</translation> <translation id="5283198616748585639">加 1 分钟</translation>
diff --git a/ash/strings/ash_strings_zh-HK.xtb b/ash/strings/ash_strings_zh-HK.xtb index 2fe6082..479135f 100644 --- a/ash/strings/ash_strings_zh-HK.xtb +++ b/ash/strings/ash_strings_zh-HK.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">不要再顯示</translation> <translation id="445864333228800152">晚安,</translation> <translation id="4458688154122353284">停止螢幕錄影</translation> +<translation id="4472575034687746823">開始使用</translation> <translation id="4477350412780666475">下一首曲目</translation> <translation id="4477892968187500306">此裝置可能包含未經 Google 驗證的的應用程式。</translation> <translation id="4479639480957787382">以太網絡</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">突顯文字插入符號</translation> <translation id="5208059991603368177">開啟</translation> <translation id="5222676887888702881">登出</translation> +<translation id="5234764350956374838">關閉</translation> <translation id="523505283826916779">協助工具設定</translation> <translation id="5260676007519551770">桌面 4</translation> <translation id="5283198616748585639">增加 1 分鐘</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb index e4348a7..4bb7ef3 100644 --- a/ash/strings/ash_strings_zh-TW.xtb +++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">不要再顯示</translation> <translation id="445864333228800152">晚安,</translation> <translation id="4458688154122353284">停止錄製螢幕畫面</translation> +<translation id="4472575034687746823">開始使用</translation> <translation id="4477350412780666475">下一首曲目</translation> <translation id="4477892968187500306">這個裝置可能包含尚未經 Google 驗證的應用程式。</translation> <translation id="4479639480957787382">乙太網路</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">醒目顯示文字插入點</translation> <translation id="5208059991603368177">開啟</translation> <translation id="5222676887888702881">登出</translation> +<translation id="5234764350956374838">關閉</translation> <translation id="523505283826916779">無障礙設定</translation> <translation id="5260676007519551770">桌面 4</translation> <translation id="5283198616748585639">增加 1 分鐘</translation>
diff --git a/ash/strings/ash_strings_zu.xtb b/ash/strings/ash_strings_zu.xtb index c987ac5..697429bf9 100644 --- a/ash/strings/ash_strings_zu.xtb +++ b/ash/strings/ash_strings_zu.xtb
@@ -339,6 +339,7 @@ <translation id="4450893287417543264">Ungabonisi futhi</translation> <translation id="445864333228800152">Sawubona,</translation> <translation id="4458688154122353284">Misa ukuqopha isikrini</translation> +<translation id="4472575034687746823">Qalisa</translation> <translation id="4477350412780666475">Ithrekhi elandelayo</translation> <translation id="4477892968187500306">Le divayisi ingaqukatha izinhlelo zokusebenza ezingaqinisekisiwe i-Google.</translation> <translation id="4479639480957787382">I-Ethernet</translation> @@ -398,6 +399,7 @@ <translation id="5207949376430453814">Gqamisa ikharethi yombhalo</translation> <translation id="5208059991603368177">Vuliwe</translation> <translation id="5222676887888702881">Phuma ngemvume</translation> +<translation id="5234764350956374838">Cashisa</translation> <translation id="523505283826916779">Izulungiselelo zokufinyelela</translation> <translation id="5260676007519551770">Ifafula 4</translation> <translation id="5283198616748585639">Engeza iminithi elingu-1</translation>
diff --git a/ash/system/holding_space/holding_space_tray.cc b/ash/system/holding_space/holding_space_tray.cc index 8b0445e..509c85a 100644 --- a/ash/system/holding_space/holding_space_tray.cc +++ b/ash/system/holding_space/holding_space_tray.cc
@@ -137,7 +137,6 @@ init_params.delegate = this; init_params.parent_window = GetBubbleWindowContainer(); init_params.anchor_view = GetBubbleAnchor(); - init_params.insets = GetTrayBubbleInsets(); init_params.shelf_alignment = shelf()->alignment(); init_params.preferred_width = kHoldingSpaceWidth; init_params.close_on_deactivate = true; @@ -147,6 +146,7 @@ // Create and customize bubble view. TrayBubbleView* bubble_view = new TrayBubbleView(init_params); bubble_view->set_anchor_view_insets(GetBubbleAnchorInsets()); + bubble_view->set_margins(GetSecondaryBubbleInsets()); // Add pinned files container. pinned_files_container_ =
diff --git a/ash/system/power/power_notification_controller.cc b/ash/system/power/power_notification_controller.cc index be46891..7a9c8e9 100644 --- a/ash/system/power/power_notification_controller.cc +++ b/ash/system/power/power_notification_controller.cc
@@ -11,6 +11,7 @@ #include "ash/system/power/battery_notification.h" #include "ash/system/power/dual_role_notification.h" #include "base/command_line.h" +#include "base/i18n/number_formatting.h" #include "base/logging.h" #include "base/numerics/safe_conversions.h" #include "ui/base/l10n/l10n_util.h" @@ -133,18 +134,28 @@ // Check if the notification needs to be created. if (show && !usb_charger_was_connected_ && !usb_notification_dismissed_) { + bool on_battery = PowerStatus::Get()->IsBatteryPresent(); std::unique_ptr<Notification> notification = CreateSystemNotification( message_center::NOTIFICATION_TYPE_SIMPLE, kUsbNotificationId, - l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_LOW_POWER_CHARGER_TITLE), - ui::SubstituteChromeOSDeviceType( - IDS_ASH_STATUS_TRAY_LOW_POWER_CHARGER_MESSAGE_SHORT), + l10n_util::GetStringUTF16( + on_battery ? IDS_ASH_STATUS_TRAY_LOW_POWER_CHARGER_TITLE + : IDS_ASH_STATUS_TRAY_LOW_POWER_ADAPTER_TITLE), + on_battery + ? ui::SubstituteChromeOSDeviceType( + IDS_ASH_STATUS_TRAY_LOW_POWER_CHARGER_MESSAGE_SHORT) + : l10n_util::GetStringFUTF16( + IDS_ASH_STATUS_TRAY_LOW_POWER_ADAPTER_MESSAGE_SHORT, + ui::GetChromeOSDeviceName(), + base::FormatDouble( + PowerStatus::Get()->GetPreferredMinimumPower(), 0)), base::string16(), GURL(), message_center::NotifierId( message_center::NotifierType::SYSTEM_COMPONENT, kNotifierPower), message_center::RichNotificationData(), new UsbNotificationDelegate(this), kNotificationLowPowerChargerIcon, message_center::SystemNotificationWarningLevel::WARNING); - notification->set_pinned(true); + notification->set_pinned(on_battery); + notification->set_never_timeout(!on_battery); message_center_->AddNotification(std::move(notification)); return true; }
diff --git a/ash/system/power/power_notification_controller_unittest.cc b/ash/system/power/power_notification_controller_unittest.cc index c72e219..c4e5360 100644 --- a/ash/system/power/power_notification_controller_unittest.cc +++ b/ash/system/power/power_notification_controller_unittest.cc
@@ -9,6 +9,7 @@ #include <string> #include "ash/test/ash_test_base.h" +#include "base/strings/utf_string_conversions.h" #include "chromeos/dbus/power_manager/power_supply_properties.pb.h" #include "ui/message_center/fake_message_center.h" @@ -261,6 +262,38 @@ EXPECT_EQ(1, message_center()->remove_count()); } +TEST_F(PowerNotificationControllerTest, + MaybeShowUsbChargerNotification_NoBattery) { + // Notification does not show when powered by AC (including high-power + // USB PD. + PowerSupplyProperties ac_connected = DefaultPowerSupplyProperties(); + ac_connected.set_external_power( + power_manager::PowerSupplyProperties_ExternalPower_AC); + ac_connected.set_battery_state( + power_manager::PowerSupplyProperties_BatteryState_NOT_PRESENT); + EXPECT_FALSE(MaybeShowUsbChargerNotification(ac_connected)); + EXPECT_EQ(0, message_center()->add_count()); + EXPECT_EQ(0, message_center()->remove_count()); + + // Notification shows when powered by low-power USB. + PowerSupplyProperties usb_connected = DefaultPowerSupplyProperties(); + usb_connected.set_external_power( + power_manager::PowerSupplyProperties_ExternalPower_USB); + usb_connected.set_battery_state( + power_manager::PowerSupplyProperties_BatteryState_NOT_PRESENT); + EXPECT_TRUE(MaybeShowUsbChargerNotification(usb_connected)); + EXPECT_EQ(1, message_center()->add_count()); + EXPECT_EQ(0, message_center()->remove_count()); + auto* notification = + message_center()->FindVisibleNotificationById("usb-charger"); + ASSERT_TRUE(notification); + EXPECT_TRUE(notification->never_timeout()); + EXPECT_FALSE(notification->pinned()); + EXPECT_NE(std::string::npos, + notification->message().find(base::ASCIIToUTF16("60W"))) + << notification->message(); +} + TEST_F(PowerNotificationControllerTest, MaybeShowDualRoleNotification) { PowerSupplyProperties discharging = DefaultPowerSupplyProperties(); discharging.set_supports_dual_role_devices(true);
diff --git a/ash/system/power/power_status.cc b/ash/system/power/power_status.cc index 89bad6ae..c957d41 100644 --- a/ash/system/power/power_status.cc +++ b/ash/system/power/power_status.cc
@@ -485,6 +485,11 @@ } } +double PowerStatus::GetPreferredMinimumPower() const { + // TODO(b/160854398): Return the value from the proto once it's ready. + return 60.0; +} + PowerStatus::PowerStatus() { chromeos::PowerManagerClient::Get()->AddObserver(this); chromeos::PowerManagerClient::Get()->RequestStatusUpdate();
diff --git a/ash/system/power/power_status.h b/ash/system/power/power_status.h index 94066b5c..af0e7245 100644 --- a/ash/system/power/power_status.h +++ b/ash/system/power/power_status.h
@@ -213,6 +213,9 @@ // For example, "53% - 5:00 left". base::string16 GetInlinedStatusString() const; + // Returns the device's preferred minimum power input in watts (W). + double GetPreferredMinimumPower() const; + // Updates |proto_|. Does not notify observers. void SetProtoForTesting(const power_manager::PowerSupplyProperties& proto);
diff --git a/ash/wm/overview/scoped_overview_transform_window.cc b/ash/wm/overview/scoped_overview_transform_window.cc index fa4e306..5b9411e 100644 --- a/ash/wm/overview/scoped_overview_transform_window.cc +++ b/ash/wm/overview/scoped_overview_transform_window.cc
@@ -170,7 +170,7 @@ // Add this as |aura::WindowObserver| for observing |kHideInOverviewKey| // property changes. - transient->AddObserver(this); + window_observer_.Add(transient); // Hide transient children which have been specified to be hidden in // overview mode. @@ -218,12 +218,13 @@ transient->ClearProperty(kIsShowingInOverviewKey); DCHECK(event_targeting_blocker_map_.contains(transient)); event_targeting_blocker_map_.erase(transient); - transient->RemoveObserver(this); } if (!IsMinimized()) UpdateRoundedCorners(/*show=*/false); aura::client::GetTransientWindowClient()->RemoveObserver(this); + + window_observer_.RemoveAll(); } // static @@ -525,7 +526,7 @@ // Add this as |aura::WindowObserver| for observing |kHideInOverviewKey| // property changes. - transient_child->AddObserver(this); + window_observer_.Add(transient_child); } void ScopedOverviewTransformWindow::OnWindowPropertyChanged( @@ -566,7 +567,9 @@ transient_child->ClearProperty(kIsShowingInOverviewKey); DCHECK(event_targeting_blocker_map_.contains(transient_child)); event_targeting_blocker_map_.erase(transient_child); - transient_child->RemoveObserver(this); + + if (window_observer_.IsObserving(transient_child)) + window_observer_.Remove(transient_child); } // static
diff --git a/ash/wm/overview/scoped_overview_transform_window.h b/ash/wm/overview/scoped_overview_transform_window.h index e59a135..3aaa59cd7b 100644 --- a/ash/wm/overview/scoped_overview_transform_window.h +++ b/ash/wm/overview/scoped_overview_transform_window.h
@@ -203,6 +203,8 @@ std::unique_ptr<ScopedOverviewHideWindows> hidden_transient_children_; + ScopedObserver<aura::Window, aura::WindowObserver> window_observer_{this}; + base::WeakPtrFactory<ScopedOverviewTransformWindow> weak_ptr_factory_{this}; };
diff --git a/base/android/android_image_reader_compat.cc b/base/android/android_image_reader_compat.cc index a64a38d..2a5f823b 100644 --- a/base/android/android_image_reader_compat.cc +++ b/base/android/android_image_reader_compat.cc
@@ -9,6 +9,7 @@ #include "base/android/build_info.h" #include "base/feature_list.h" #include "base/logging.h" +#include "base/strings/string_util.h" #define LOAD_FUNCTION(lib, func) \ do { \ @@ -33,6 +34,18 @@ return is_supported_; } +// static +bool AndroidImageReader::LimitAImageReaderMaxSizeToOne() { + // Using MIBOX for both MiBox 4k and MiBox S 4k devices. + std::string disabled_model = "MIBOX"; + const std::string model(base::android::BuildInfo::GetInstance()->model()); + if (base::StartsWith(model, disabled_model, + base::CompareCase::INSENSITIVE_ASCII)) { + return true; + } + return false; +} + AndroidImageReader::AndroidImageReader() { is_supported_ = LoadFunctions(); }
diff --git a/base/android/android_image_reader_compat.h b/base/android/android_image_reader_compat.h index 77d5458..296f600 100644 --- a/base/android/android_image_reader_compat.h +++ b/base/android/android_image_reader_compat.h
@@ -27,6 +27,11 @@ // the required functions are loaded. bool IsSupported(); + // Some devices do not support more than 1 image to be acquired from the + // AImageReader.(crbug.com/1051705). This method returns true for those + // devices. + static bool LimitAImageReaderMaxSizeToOne(); + // Naming convention of all the below functions are chosen to exactly match // the function names in the NDK. void AImage_delete(AImage* image);
diff --git a/build/android/gyp/java_cpp_strings.py b/build/android/gyp/java_cpp_strings.py index 498e05e3..561acb2 100755 --- a/build/android/gyp/java_cpp_strings.py +++ b/build/android/gyp/java_cpp_strings.py
@@ -14,18 +14,6 @@ from util import java_cpp_utils -def _ToUpper(match): - return match.group(1).upper() - - -def _GetClassName(source_path): - name = os.path.basename(os.path.abspath(source_path)) - (name, _) = os.path.splitext(name) - name = re.sub(r'_([a-z])', _ToUpper, name) - name = re.sub(r'^(.)', _ToUpper, name) - return name - - class _String(object): def __init__(self, name, value, comments): @@ -61,8 +49,8 @@ # in the file to be parsed. class StringFileParser(object): SINGLE_LINE_COMMENT_RE = re.compile(r'\s*(// [^\n]*)') - STRING_RE = re.compile(r'\s*const char k(.*)\[\]\s*=\s*(?:(".*"))?') - VALUE_RE = re.compile(r'\s*("[^"]*")') + STRING_RE = re.compile(r'\s*const char k(.*)\[\]\s*=') + VALUE_RE = re.compile(r'\s*("(?:\"|[^"])*")\s*;') def __init__(self, lines, path=''): self._lines = lines @@ -75,6 +63,14 @@ self._current_value = '' self._strings = [] + def _ExtractVariable(self, line): + match = StringFileParser.STRING_RE.match(line) + return match.group(1) if match else None + + def _ExtractValue(self, line): + match = StringFileParser.VALUE_RE.search(line) + return match.group(1) if match else None + def _Reset(self): self._current_comments = [] self._current_name = '' @@ -89,9 +85,9 @@ self._Reset() def _ParseValue(self, line): - value_line = StringFileParser.VALUE_RE.match(line) - if value_line: - self._current_value = value_line.groups()[0] + current_value = self._ExtractValue(line) + if current_value is not None: + self._current_value = current_value self._AppendString() else: self._Reset() @@ -108,11 +104,12 @@ return False def _ParseString(self, line): - string_line = StringFileParser.STRING_RE.match(line) - if string_line: - self._current_name = string_line.groups()[0] - if string_line.groups()[1]: - self._current_value = string_line.groups()[1] + current_name = self._ExtractVariable(line) + if current_name is not None: + self._current_name = current_name + current_value = self._ExtractValue(line) + if current_value is not None: + self._current_value = current_value self._AppendString() else: self._in_string = True
diff --git a/build/android/gyp/java_cpp_strings_tests.py b/build/android/gyp/java_cpp_strings_tests.py index 64f0f79..3b31141 100755 --- a/build/android/gyp/java_cpp_strings_tests.py +++ b/build/android/gyp/java_cpp_strings_tests.py
@@ -46,7 +46,7 @@ self.assertEqual(2, len(strings[1].comments.split('\n'))) def testStringValues(self): - test_data = """ + test_data = r""" // Single line string constants. const char kAString[] = "a-value"; const char kNoComment[] = "no-comment"; @@ -67,13 +67,23 @@ const char kAStringWithAVeryLongNameThatWillHaveToWrap2[] = "a-string-with-a-very-long-name-that-will-have-to-wrap2"; -// This is erroneous and should be ignored. +const char kStringWithEscapes[] = "tab\tquote\"newline\n"; +const char kStringWithEscapes2[] = + "tab\tquote\"newline\n"; + +const char kEmptyString[] = ""; + +// These are valid C++ but not currently supported by the script. const char kInvalidLineBreak[] = "invalid-line-break"; + +const char kConcatenateMultipleStringLiterals[] = + "first line" + "second line"; """.split('\n') strings = java_cpp_strings.StringFileParser(test_data).Parse() - self.assertEqual(6, len(strings)) + self.assertEqual(9, len(strings)) self.assertEqual('A_STRING', strings[0].name) self.assertEqual('"a-value"', strings[0].value) self.assertEqual('NO_COMMENT', strings[1].name) @@ -90,6 +100,12 @@ strings[5].name) self.assertEqual('"a-string-with-a-very-long-name-that-will-have-to-wrap2"', strings[5].value) + self.assertEqual('STRING_WITH_ESCAPES', strings[6].name) + self.assertEqual(r'"tab\tquote\"newline\n"', strings[6].value) + self.assertEqual('STRING_WITH_ESCAPES2', strings[7].name) + self.assertEqual(r'"tab\tquote\"newline\n"', strings[7].value) + self.assertEqual('EMPTY_STRING', strings[8].name) + self.assertEqual('""', strings[8].value) def testTreatWebViewLikeOneWord(self): test_data = """
diff --git a/build/android/pylib/utils/gold_utils_test.py b/build/android/pylib/utils/gold_utils_test.py index 3499484..4b7a601 100755 --- a/build/android/pylib/utils/gold_utils_test.py +++ b/build/android/pylib/utils/gold_utils_test.py
@@ -47,10 +47,18 @@ call_args = cmd_mock.call_args[0][0] self.assertIn('diff', call_args) assertArgWith(self, call_args, '--corpus', 'corpus') - assertArgWith(self, call_args, '--instance', 'instance') + # TODO(skbug.com/10610): Remove the -public once we go back to using the + # non-public instance, or add a second test for testing that the correct + # instance is chosen if we decide to support both depending on what the + # user is authenticated for. + assertArgWith(self, call_args, '--instance', 'instance-public') assertArgWith(self, call_args, '--input', 'png_file') assertArgWith(self, call_args, '--test', 'name') - assertArgWith(self, call_args, '--work-dir', self._working_dir) + # TODO(skbug.com/10611): Re-add this assert and remove the check for the + # absence of the directory once we switch back to using the proper working + # directory. + # assertArgWith(self, call_args, '--work-dir', self._working_dir) + self.assertNotIn(self._working_dir, call_args) i = call_args.index('--out-dir') # The output directory should be a subdirectory of the working directory. self.assertIn(self._working_dir, call_args[i + 1])
diff --git a/build/skia_gold_common/skia_gold_session.py b/build/skia_gold_common/skia_gold_session.py index 5f80f4b8..9ad90d65 100644 --- a/build/skia_gold_common/skia_gold_session.py +++ b/build/skia_gold_common/skia_gold_session.py
@@ -5,6 +5,7 @@ import logging import os +import shutil import subprocess import sys import tempfile @@ -325,25 +326,39 @@ 'tests locally.') output_dir = self._CreateDiffOutputDir() - diff_cmd = [ - GOLDCTL_BINARY, - 'diff', - '--corpus', - self._corpus, - '--instance', - self._instance, - '--input', - png_file, - '--test', - name, - '--work-dir', - self._working_dir, - '--out-dir', - output_dir, - ] - rc, stdout = self._RunCmdForRcAndOutput(diff_cmd) - self._StoreDiffLinks(name, output_manager, output_dir) - return rc, stdout + # TODO(skbug.com/10611): Remove this temporary work dir and instead just use + # self._working_dir once `goldctl diff` stops clobbering the auth files in + # the provided work directory. + temp_work_dir = tempfile.mkdtemp() + # shutil.copytree() fails if the destination already exists, so use a + # subdirectory of the temporary directory. + temp_work_dir = os.path.join(temp_work_dir, 'diff_work_dir') + try: + shutil.copytree(self._working_dir, temp_work_dir) + diff_cmd = [ + GOLDCTL_BINARY, + 'diff', + '--corpus', + self._corpus, + '--instance', + # TODO(skbug.com/10610): Decide whether to use the public or + # non-public instance once authentication is fixed for the non-public + # instance. + str(self._instance) + '-public', + '--input', + png_file, + '--test', + name, + '--work-dir', + temp_work_dir, + '--out-dir', + output_dir, + ] + rc, stdout = self._RunCmdForRcAndOutput(diff_cmd) + self._StoreDiffLinks(name, output_manager, output_dir) + return rc, stdout + finally: + shutil.rmtree(os.path.realpath(os.path.join(temp_work_dir, '..'))) def GetTriageLinks(self, name): """Gets the triage links for the given image.
diff --git a/cc/animation/animation_host.cc b/cc/animation/animation_host.cc index d2154f1..723274a83 100644 --- a/cc/animation/animation_host.cc +++ b/cc/animation/animation_host.cc
@@ -127,6 +127,12 @@ SetNeedsPushProperties(); } +void AnimationHost::SetHasCanvasInvalidation(bool has_canvas_invalidation) { + // TODO(crbug.com/1111392): send this value to LayerTreeHostImpl for + // constructing a canvas frame sequence tracker. + has_canvas_invalidation_ = has_canvas_invalidation; +} + void AnimationHost::UpdateRegisteredElementIds(ElementListType changed_list) { for (auto map_entry : element_to_animations_map_) { if (mutator_host_client()->IsElementInPropertyTrees(map_entry.first,
diff --git a/cc/animation/animation_host.h b/cc/animation/animation_host.h index 534f8c0c6..6644c07d 100644 --- a/cc/animation/animation_host.h +++ b/cc/animation/animation_host.h
@@ -221,6 +221,8 @@ bool current_frame_had_raf, bool next_frame_has_pending_raf); + void SetHasCanvasInvalidation(bool has_canvas_invalidation); + private: explicit AnimationHost(ThreadInstance thread_instance); @@ -272,6 +274,7 @@ size_t main_thread_animations_count_ = 0; bool current_frame_had_raf_ = false; bool next_frame_has_pending_raf_ = false; + bool has_canvas_invalidation_ = false; PendingThroughputTrackerInfos pending_throughput_tracker_infos_;
diff --git a/chrome/VERSION b/chrome/VERSION index 97f15f3..d31d333 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=87 MINOR=0 -BUILD=4267 +BUILD=4268 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 615a0b71..af878e9 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -2115,6 +2115,7 @@ "include_64_bit_webview", "is_64_bit_browser", "is_base_module", + "module_descs", "resource_ids_provider_dep", "static_library_provider", "static_library_synchronized_proguard", @@ -2757,6 +2758,9 @@ target_type = "android_app_bundle_module" is_base_module = true version_code = _version_code + if (enable_chrome_module) { + module_descs = _module_descs + } if (!_is_trichrome || !defined(invoker.static_library_synchronized_proguard) || @@ -2787,12 +2791,6 @@ version_code = _version_code if (enable_chrome_module) { chrome_deps = [ "//chrome/android:app_hooks_java" ] - if (enable_arcore) { - chrome_deps += [ - "//chrome/browser/android/vr:ar_java", - "//third_party/arcore-android-sdk-client:com_google_ar_core_java", - ] - } if (!_is_trichrome) { chrome_deps += [ "//chrome/android:monochrome_java" ] }
diff --git a/chrome/android/chrome_common_shared_library.gni b/chrome/android/chrome_common_shared_library.gni index 91cb849..472583b0 100644 --- a/chrome/android/chrome_common_shared_library.gni +++ b/chrome/android/chrome_common_shared_library.gni
@@ -8,7 +8,6 @@ import("//build/config/compiler/compiler.gni") import("//build/partitioned_shared_library.gni") import("//chrome/android/modules/buildflags.gni") -import("//chrome/android/modules/chrome_bundle_tmpl.gni") import("//device/vr/buildflags/buildflags.gni") # TODO(cjgrant): Remove these variables once downstream stops using them. @@ -40,14 +39,9 @@ # When _collect_inputs_only && !(!_is_webview && enable_vr). not_needed([ "_export_java_symbols" ]) - # TODO(crbug.com/1126301): Fix symbol table warnings from deps using - # -fsymbol-partition when they are merged into the main lib. - # Whether to merge all module deps into the main library. - _merge_modules = _is_monochrome && enable_chrome_module - # Create a partitioned libraries if the build config supports it, and the # invoker has supplied module descriptors. - _generate_partitions = !_merge_modules && defined(invoker.module_descs) && + _generate_partitions = defined(invoker.module_descs) && use_native_partitions && !_collect_inputs_only _module_descs = [] if (defined(invoker.module_descs)) { @@ -127,7 +121,7 @@ deps += _module_desc.native_deps } } - } else if (_collect_inputs_only || _merge_modules) { + } else if (_collect_inputs_only) { foreach(_module_desc, _module_descs) { if (defined(_module_desc.native_deps)) { deps += _module_desc.native_deps
diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni index 9749bf9..d103a5e 100644 --- a/chrome/android/chrome_public_apk_tmpl.gni +++ b/chrome/android/chrome_public_apk_tmpl.gni
@@ -12,6 +12,7 @@ import("//build/util/version.gni") import("//chrome/android/chrome_common_shared_library.gni") import("//chrome/android/features/dev_ui/dev_ui_module.gni") +import("//chrome/android/modules/chrome_bundle_tmpl.gni") import("//chrome/common/features.gni") import("//device/vr/buildflags/buildflags.gni") import("//weblayer/variables.gni") @@ -416,10 +417,42 @@ # static library target to provide certain shared library deps, and that # this target should not package webview deps. template("monochrome_public_common_apk_or_module_tmpl") { + _is_bundle_module = defined(invoker.target_type) && + invoker.target_type == "android_app_bundle_module" + _enable_chrome_module = + _is_bundle_module && invoker.is_base_module && enable_chrome_module + + # If the chrome module is enabled, collect shared libraries from all other + # DFMs and add them as loadable modules to the base module. + if (_enable_chrome_module) { + _module_descs = [] + if (defined(invoker.module_descs)) { + _module_descs = invoker.module_descs + } + _chrome_module_shared_lib_deps = [] + _chrome_module_loadable_modules = [] + _arch = "" + _toolchain = "" + if (android_64bit_target_cpu) { + if (invoker.is_64_bit_browser) { + _arch = "_64" + } else { + _toolchain = "($android_secondary_abi_toolchain)" + } + } + _base_target_name = "libmonochrome${_arch}" + foreach(_module_desc, _module_descs) { + if (defined(_module_desc.native_deps) && _module_desc.native_deps != []) { + _lib_target = "//chrome/android:${_base_target_name}_${_module_desc.name}${_toolchain}" + _chrome_module_shared_lib_deps += [ _lib_target ] + _lib_out_dir = get_label_info(_lib_target, "root_out_dir") + _chrome_module_loadable_modules += [ "${_lib_out_dir}/${_base_target_name}_${_module_desc.name}_partition.so" ] + } + } + } + chrome_public_common_apk_or_module_tmpl(target_name) { _overrides = { - _is_bundle_module = defined(invoker.target_type) && - invoker.target_type == "android_app_bundle_module" if (_is_bundle_module) { assert( defined(invoker.is_base_module), @@ -500,6 +533,37 @@ } } + # Add all loadable modules and shared libraries from DFMs. + if (_enable_chrome_module) { + if (!defined(data_deps)) { + data_deps = [] + } + data_deps += _chrome_module_shared_lib_deps + _loadable_modules_32_bit = [] + _loadable_modules_64_bit = [] + foreach(_module_desc, _module_descs) { + if (defined(_module_desc.loadable_modules_32_bit)) { + _loadable_modules_32_bit += _module_desc.loadable_modules_32_bit + } + if (defined(_module_desc.loadable_modules_64_bit)) { + _loadable_modules_64_bit += _module_desc.loadable_modules_64_bit + } + } + + if (android_64bit_target_cpu) { + if (invoker.is_64_bit_browser) { + loadable_modules += + _loadable_modules_64_bit + _chrome_module_loadable_modules + } else { + secondary_abi_loadable_modules += + _loadable_modules_32_bit + _chrome_module_loadable_modules + } + } else { + loadable_modules += + _loadable_modules_32_bit + _chrome_module_loadable_modules + } + } + if (is_monochrome) { product_config_java_packages = [ "org.chromium.chrome.browser",
diff --git a/chrome/android/expectations/lint-suppressions.xml b/chrome/android/expectations/lint-suppressions.xml index 0f3d357..e139f3b 100644 --- a/chrome/android/expectations/lint-suppressions.xml +++ b/chrome/android/expectations/lint-suppressions.xml
@@ -274,6 +274,20 @@ <ignore regexp="The resource `R.string.accessibility_close_tab_group_button` appears to be unused"/> <ignore regexp="The resource `R.string.accessibility_close_tab_group_button_with_group_name` appears to be unused"/> <ignore regexp="The resource `R.string.accessibility_expand_tab_group_with_group_name` appears to be unused"/> + + <!-- crbug.com/1128074 remove this line and following 9 lines after the bug is resolved --> + <ignore regexp="The resource `R.string.reading_list_title` appears to be unused"/> + <ignore regexp="The resource `R.string.reading_list_read` appears to be unused"/> + <ignore regexp="The resource `R.string.reading_list_unread` appears to be unused"/> + <ignore regexp="The resource `R.string.reading_list_ready_for_offline` appears to be unused"/> + <ignore regexp="The resource `R.string.reading_list_mark_as_read` appears to be unused"/> + <ignore regexp="The resource `R.string.reading_list_share` appears to be unused"/> + <ignore regexp="The resource `R.string.reading_list_reminder_notification_title` appears to be unused"/> + <ignore regexp="The resource `R.string.reading_list_reminder_notification_subtitle` appears to be unused"/> + <ignore regexp="The resource `R.string.reading_list_unread_page_count` appears to be unused"/> + <ignore regexp="The resource `R.string.reading_list_intro_text` appears to be unused"/> + <ignore regexp="The resource `R.string.reading_list_find_in_bookmarks` appears to be unused"/> + <!-- Old-style and new-style WebAPKs use same resources for simplicity. Old-style WebAPKs do not use R.style.SplashTheme but new-style WebAPKs do. TODO(crbug.com/971254): Remove suppression once old-style WebAPKs are deprecated. -->
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_nl.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_nl.xtb index faa5eaa7..9871345 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_nl.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_nl.xtb
@@ -11,7 +11,7 @@ <translation id="3399357656427473483">De lijst met gegevens die moeten worden ingevuld als je tikt.</translation> <translation id="4092349052316400070">Adres invullen</translation> <translation id="4660011489602794167">Toetsenbord weergeven</translation> -<translation id="5016175294846053194">Suggesties via automatisch aanvullen zijn beschikbaar boven het toetsenbord</translation> +<translation id="5016175294846053194">Suggesties via automatisch invullen zijn beschikbaar boven het toetsenbord</translation> <translation id="5088366526685584589">Opgeslagen adressen weergeven</translation> <translation id="5441504010984421144">De lijst met gegevens die moeten worden ingevuld als je tikt, is op volledige hoogte geopend.</translation> <translation id="6393156038355142111">Sterk wachtwoord voorstellen</translation>
diff --git a/chrome/android/java/res/layout/share_sheet_content.xml b/chrome/android/java/res/layout/share_sheet_content.xml index eab1884..898acfde 100644 --- a/chrome/android/java/res/layout/share_sheet_content.xml +++ b/chrome/android/java/res/layout/share_sheet_content.xml
@@ -16,16 +16,6 @@ android:layout_height="wrap_content" android:minHeight="@dimen/min_touch_target_size" android:orientation="vertical"> - <TextView - android:id="@+id/message" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:minHeight="48dp" - android:paddingStart="16dp" - android:gravity="center_vertical" - android:background="@color/default_bg_color_blue" - android:textAppearance="@style/TextAppearance.TextSmall.Primary.Inverse" - android:visibility="gone"/> <RelativeLayout android:id="@+id/preview_header"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java b/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java index 1831bdb5..51a5f2c7 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java
@@ -262,13 +262,6 @@ new AppRestrictionsProvider(ContextUtils.getApplicationContext())); } - // TODO(zmin): Delete once the internal code is migrated. - public void registerPolicyProviders( - org.chromium.policy.CombinedPolicyProvider combinedProvider) { - combinedProvider.registerProvider( - new AppRestrictionsProvider(ContextUtils.getApplicationContext())); - } - /** * TODO(crbug.com/1102812) : Remove this method after updating the downstream to use the new * method {@link getOfflinePagesCctAllowlist} instead.
diff --git a/chrome/android/modules/chrome_bundle_tmpl.gni b/chrome/android/modules/chrome_bundle_tmpl.gni index ac0484a..9b84399d 100644 --- a/chrome/android/modules/chrome_bundle_tmpl.gni +++ b/chrome/android/modules/chrome_bundle_tmpl.gni
@@ -73,6 +73,12 @@ android_manifest_dep = "${invoker.base_module_target}__android_manifest__split" java_deps = [ "//chrome/android:chrome_all_java" ] + _java_deps + if (enable_arcore) { + java_deps += [ + "//chrome/browser/android/vr:ar_java", + "//third_party/arcore-android-sdk-client:com_google_ar_core_java", + ] + } pak_deps = _pak_deps paks = _paks if (defined(invoker.chrome_deps)) {
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 190d79e..78986b3 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -5906,6 +5906,12 @@ <message name="IDS_INCOGNITOWINDOW_PROMO_3" desc="Variations option 4. Text shown on promotional UI appearing next to the App Menu button, which encourages users to use it."> To browse privately, click the dots icon menu to open an incognito window </message> + <message name="IDS_LIVE_CAPTION_PROMO" desc="Text shown on promotional UI appearing next to the global media controls button"> + Get captions for your media + </message> + <message name="IDS_LIVE_CAPTION_PROMO_SCREENREADER" desc="Text announced encouraging users to open live caption"> + Get captions for your media by enabling Live Caption in settings + </message> <message name="IDS_NEWTAB_PROMO_0" desc="Variations option 1. Text shown on promotional UI appearing next to the New Tab button, which encourages users to use it."> Open a new tab with one click </message>
diff --git a/chrome/app/generated_resources_grd/IDS_LIVE_CAPTION_PROMO.png.sha1 b/chrome/app/generated_resources_grd/IDS_LIVE_CAPTION_PROMO.png.sha1 new file mode 100644 index 0000000..65fd782c --- /dev/null +++ b/chrome/app/generated_resources_grd/IDS_LIVE_CAPTION_PROMO.png.sha1
@@ -0,0 +1 @@ +7a566f94e78d5c397925c5ef4094678799afde22 \ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_LIVE_CAPTION_PROMO_SCREENREADER.png.sha1 b/chrome/app/generated_resources_grd/IDS_LIVE_CAPTION_PROMO_SCREENREADER.png.sha1 new file mode 100644 index 0000000..65fd782c --- /dev/null +++ b/chrome/app/generated_resources_grd/IDS_LIVE_CAPTION_PROMO_SCREENREADER.png.sha1
@@ -0,0 +1 @@ +7a566f94e78d5c397925c5ef4094678799afde22 \ No newline at end of file
diff --git a/chrome/app/os_settings_search_tag_strings.grdp b/chrome/app/os_settings_search_tag_strings.grdp index d3fbffd7..439de6a 100644 --- a/chrome/app/os_settings_search_tag_strings.grdp +++ b/chrome/app/os_settings_search_tag_strings.grdp
@@ -886,10 +886,10 @@ <message name="IDS_OS_SETTINGS_TAG_LANGUAGES_ADD_INPUT_METHOD" translateable="false" desc="Text for search result item which, when clicked, navigates the user to input settings, with the option to add input methods (keyboard layouts and input method editors)."> Add input methods </message> - <message name="IDS_OS_SETTINGS_TAG_LANGUAGES_SPELL_CHECK" translateable="false" desc="Text for search result item which, when clicked, navigates the user to input settings, with all the options for spell check settings"> + <message name="IDS_OS_SETTINGS_TAG_LANGUAGES_SPELL_CHECK" desc="Text for search result item which, when clicked, navigates the user to input settings, with all the options for spell check settings"> Spell check </message> - <message name="IDS_OS_SETTINGS_TAG_LANGUAGES_EDIT_DICTIONARY" translateable="false" desc="Text for search result item which, when clicked, navigates the user to edit dictionary page."> + <message name="IDS_OS_SETTINGS_TAG_LANGUAGES_EDIT_DICTIONARY" desc="Text for search result item which, when clicked, navigates the user to edit dictionary page."> Customize spell check </message> <message name="IDS_OS_SETTINGS_TAG_LANGUAGES_INPUT_METHODS" desc="Text for search result item which, when clicked, navigates the user to input settings, with the option to enable/disable input in supported languages.">
diff --git a/chrome/app/os_settings_search_tag_strings_grdp/IDS_OS_SETTINGS_TAG_LANGUAGES_EDIT_DICTIONARY.png.sha1 b/chrome/app/os_settings_search_tag_strings_grdp/IDS_OS_SETTINGS_TAG_LANGUAGES_EDIT_DICTIONARY.png.sha1 new file mode 100644 index 0000000..17c8a39 --- /dev/null +++ b/chrome/app/os_settings_search_tag_strings_grdp/IDS_OS_SETTINGS_TAG_LANGUAGES_EDIT_DICTIONARY.png.sha1
@@ -0,0 +1 @@ +8ca157e406de71582ed87d8f00796bdd392bdf24 \ No newline at end of file
diff --git a/chrome/app/os_settings_search_tag_strings_grdp/IDS_OS_SETTINGS_TAG_LANGUAGES_SPELL_CHECK.png.sha1 b/chrome/app/os_settings_search_tag_strings_grdp/IDS_OS_SETTINGS_TAG_LANGUAGES_SPELL_CHECK.png.sha1 new file mode 100644 index 0000000..7e4583664 --- /dev/null +++ b/chrome/app/os_settings_search_tag_strings_grdp/IDS_OS_SETTINGS_TAG_LANGUAGES_SPELL_CHECK.png.sha1
@@ -0,0 +1 @@ +f6c7864b02955dbcfb226ab3e498de47c48cdeaf \ No newline at end of file
diff --git a/chrome/app/os_settings_strings.grdp b/chrome/app/os_settings_strings.grdp index a6e37c30..3d0aaa20 100644 --- a/chrome/app/os_settings_strings.grdp +++ b/chrome/app/os_settings_strings.grdp
@@ -287,7 +287,7 @@ Input methods </message> <message name="IDS_OS_SETTINGS_LANGUAGES_OPEN_OPTIONS_PAGE_LABEL" translateable="false" desc="Title for the button to open the options page for a input method (keyboard layout and input method editor)."> - Open options page for <ph name="INPUT_METHOD_NAME">$1<ex>US keyboard</ex></ph> + Open options page for <ph name="INPUT_METHOD_NAME">$1<ex>US keyboard</ex></ph> </message> <message name="IDS_OS_SETTINGS_LANGUAGES_ADD_INPUT_METHOD_LABEL" translateable="false" desc="Button under the list of input methods which opens a dialog that lets the user add keyboard layouts and input method editors."> Add input methods @@ -304,46 +304,49 @@ <message name="IDS_OS_SETTINGS_LANGUAGES_SEARCH_INPUT_METHODS_LABEL" translateable="false" desc="Placeholder in the input field to search keyboard layouts or input method editors."> Search input methods </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_TITLE" translateable="false" desc="Title for the section containing all the options for spell check settings. The options include picking between using the system's spell check or using Google's web service and a list of the enabled languages which support spell checking."> + <message name="IDS_OS_SETTINGS_LANGUAGES_INPUT_METHOD_NOT_ALLOWED" translateable="false" desc="Tooltip for policy icon when an keyboard layout or input method editor is not allowed."> + Your administrator doesn't allow this input method + </message> + <message name="IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_TITLE" desc="Title for the section containing all the options for spell check settings. The options include picking between using the system's spell check or using Google's web service and a list of the enabled languages which support spell checking."> Spell check </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_ENHANCED_LABEL" translateable="false" desc="Label for enhanced spell check toggle, the type of spell check that sends the text the user types to Google spelling service. It is important that it is communicated that the text the user types will be sent to Google."> - Enhanced spell check in Chrome browser only (text is sent to Google) + <message name="IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_ENHANCED_LABEL" desc="Label for enhanced spell check toggle, the type of spell check that sends the text the user types to Google spelling service. It is important that it is communicated that the text the user types will be sent to Google."> + Enhanced spell check in Chrome browser (text is sent to Google for spelling suggestions) </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGES_LIST_TITLE" translateable="false" desc="Title for the list of languages that support spell check, from which users can enable or disable spell check for."> + <message name="IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGES_LIST_TITLE" desc="Title for the list of languages that support spell check, from which users can enable or disable spell check for."> Spell check languages </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGES_LIST_DESCRIPTION" translateable="false" desc="Description for the list of languages that support spell check, from which users can enable or disable spell check for."> + <message name="IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGES_LIST_DESCRIPTION" desc="Description for the list of languages that support spell check, from which users can enable or disable spell check for."> Languages available for spell check is based on your languages settings </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_FAILED" translateable="false" desc="Error message when spell check dictionary download fails."> + <message name="IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_FAILED" desc="Error message when spell check dictionary download fails."> Couldn’t download spell check dictionary </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_RETRY_LABEL" translateable="false" desc="Label for the button to retry spell check dictionary download."> + <message name="IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_RETRY_LABEL" desc="Label for the button to retry spell check dictionary download."> Try again </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_RETRY_DESCRIPTION" translateable="false" desc="Description read by screenreader for the button to retry spell check dictionary download."> + <message name="IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_RETRY_DESCRIPTION" desc="Description read by screenreader for the button to retry spell check dictionary download."> Couldn’t download spell check dictionary for <ph name="LANGUAGE">$1<ex>English</ex></ph>. Try again. </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_EDIT_DICTIONARY_LABEL" translateable="false" desc="Label for the section for users to add custom words for no spell check."> + <message name="IDS_OS_SETTINGS_LANGUAGES_EDIT_DICTIONARY_LABEL" desc="Label for the section for users to add words that they don’t want get flagged by the spell check."> Customize spell check </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_EDIT_DICTIONARY_DESCRIPTION" translateable="false" desc="Description for the section for users to add custom words for no spell check."> + <message name="IDS_OS_SETTINGS_LANGUAGES_EDIT_DICTIONARY_DESCRIPTION" desc="Description for the section for users to add words that they don’t want get flagged by the spell check."> Add words you want spell check to skip </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_BUTTON_LABEL" translateable="false" desc="Description for the button for users to add custom words for no spell check."> + <message name="IDS_OS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_BUTTON_LABEL" desc="Label for button to add a new word."> Add word </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_DUPLICATE_ERROR" translateable="false" desc="Error message displayed to the user when the word is duplicated in the text input used to add a new word to the custom spell check dictionary."> + <message name="IDS_OS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_DUPLICATE_ERROR" desc="Error message displayed to the user when the word is duplicated in the text input used to add a new word to the custom spell check dictionary."> Word already added </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_LENGTH_ERROR" translateable="false" desc="Error message displayed to the user when the word is too long in the text input used to add a new word to the custom spell check dictionary."> + <message name="IDS_OS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_LENGTH_ERROR" desc="Error message displayed to the user when the word is too long in the text input used to add a new word to the custom spell check dictionary."> Use 99 letters or fewer for new words </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_DELETE_DICTIONARY_WORD_TOOLTIP" translateable="false" desc="Description for the tooltip that appear when users hover over the icon to delete a custom words."> + <message name="IDS_OS_SETTINGS_LANGUAGES_DELETE_DICTIONARY_WORD_TOOLTIP" desc="Message shown over the button to delete a custom word."> Delete word </message> - <message name="IDS_OS_SETTINGS_LANGUAGES_NO_DICTIONARY_WORDS_LABEL" translateable="false" desc="Description for the label that appear when there are no custom words in the dictionary."> + <message name="IDS_OS_SETTINGS_LANGUAGES_NO_DICTIONARY_WORDS_LABEL" desc="Placeholder that is shown when there are no custom words in the list of saved custom words dictionary."> Saved custom words will appear here </message> <message name="IDS_OS_SETTINGS_LANGUAGES_LIST_TITLE" desc="Title for the list of the user's preferred written languages."> @@ -1211,6 +1214,12 @@ <message name="IDS_SETTINGS_CROSTINI_SHARED_USB_DEVICES_LIST_EMPTY_MESSAGE" desc="Message shown when there are no avaiable USB devices."> Available USB devices will appear here. </message> + <message name="IDS_SETTINGS_CROSTINI_SHARED_USB_DEVICES_IN_USE" desc="Dialog title describing that a USB device is currently in use."> + Device in use + </message> + <message name="IDS_SETTINGS_CROSTINI_SHARED_USB_DEVICES_REASSIGN" desc="Confirmation explaining to users that reassigning a USB device from being attached from one VM to another could cause errors."> + "<ph name="USB_DEVICE_NAME">$1<ex>Nexus 5</ex></ph>" is in use. Reassigning the device while it's in use could cause errors. Are you sure you want to continue? + </message> <message name="IDS_SETTINGS_CROSTINI_ARC_ADB_TITLE" desc="Title of ARC ADB sideloading section."> Develop Android apps </message> @@ -2574,8 +2583,11 @@ <message name="IDS_SETTINGS_POWER_IDLE_DISPLAY_ON" desc="In Device Settings > Power, menu item for idle behavior that prevents the screen from turning off and prevents the device from sleeping. String must be short enough to fit in a drop-down menu."> Keep display on </message> - <message name="IDS_SETTINGS_POWER_IDLE_OTHER" desc="In Device Settings > Power, menu item for custom idle behavior."> - Other + <message name="IDS_SETTINGS_POWER_IDLE_SHUT_DOWN" desc="In Device Settings > Power, menu item for idle behavior that shuts the device down when idle."> + Shut down + </message> + <message name="IDS_SETTINGS_POWER_IDLE_STOP_SESSION" desc="In Device Settings > Power, menu item for idle behavior that stops the session when idle."> + Sign out </message> <message name="IDS_SETTINGS_POWER_LID_CLOSED_SLEEP_LABEL" desc="In Device Settings > Power, label for suspending when cover is closed."> Sleep when cover is closed @@ -3075,6 +3087,15 @@ <message name="IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_REMOVE_SHARING" desc="Tooltip to show when hovering on the remove icon for a Parallels shared folder."> Stop sharing </message> + <message name="IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_REMOVE_FAILURE_DIALOG_MESSAGE" desc="Message to show user when unsharing a Parallels shared folder fails. Do not translate 'Parallels Desktop'"> + Couldn't unshare because an application is using this folder. The folder will be unshared when Parallels Desktop is next shut down. + </message> + <message name="IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_REMOVE_FAILURE_DIALOG_TITLE" desc="Title of the error dialog shown to a user when unsharing a Parallels shared folder fails."> + Unshare failed + </message> + <message name="IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_REMOVE_FAILURE_TRY_AGAIN" desc="Button text in the dialog shown when unsharing a Parallels shared folder fails. Pressing this button will attempt to unshare the folder again."> + Try again + </message> <message name="IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_LIST_EMPTY_MESSAGE" desc="Message shown when the user has not yet shared any folders in Parallels."> Shared folders will appear here </message> @@ -3090,6 +3111,12 @@ <message name="IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_USB_DEVICES_LIST_EMPTY_MESSAGE" desc="Message shown when there are no avaiable USB devices."> Available USB devices will appear here. </message> + <message name="IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_USB_DEVICES_IN_USE" desc="Dialog title describing that a USB device is currently in use."> + Device in use + </message> + <message name="IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_USB_DEVICES_REASSIGN" desc="Confirmation explaining to users that reassigning a USB device from being attached from one VM to another could cause errors."> + "<ph name="USB_DEVICE_NAME">$1<ex>Nexus 5</ex></ph>" is in use. Reassigning the device while it's in use could cause errors. Are you sure you want to continue? + </message> <!-- Storage --> <message name="IDS_SETTINGS_STORAGE_TITLE" desc="In Device Settings, the title for storage management.">
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_BUTTON_LABEL.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_BUTTON_LABEL.png.sha1 new file mode 100644 index 0000000..a9ce865d --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_BUTTON_LABEL.png.sha1
@@ -0,0 +1 @@ +e6180ff90492704465ad491b66d9487e34f2e663 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_DUPLICATE_ERROR.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_DUPLICATE_ERROR.png.sha1 new file mode 100644 index 0000000..a9ce865d --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_DUPLICATE_ERROR.png.sha1
@@ -0,0 +1 @@ +e6180ff90492704465ad491b66d9487e34f2e663 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_LENGTH_ERROR.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_LENGTH_ERROR.png.sha1 new file mode 100644 index 0000000..68a3739 --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_LENGTH_ERROR.png.sha1
@@ -0,0 +1 @@ +6056229a2aed1231f1a6d606ff1e004572d40266 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_DELETE_DICTIONARY_WORD_TOOLTIP.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_DELETE_DICTIONARY_WORD_TOOLTIP.png.sha1 new file mode 100644 index 0000000..a9ce865d --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_DELETE_DICTIONARY_WORD_TOOLTIP.png.sha1
@@ -0,0 +1 @@ +e6180ff90492704465ad491b66d9487e34f2e663 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_FAILED.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_FAILED.png.sha1 new file mode 100644 index 0000000..9201ca9 --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_FAILED.png.sha1
@@ -0,0 +1 @@ +6f65363e7166a29104e848db00efffd84dea9cf4 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_RETRY_DESCRIPTION.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_RETRY_DESCRIPTION.png.sha1 new file mode 100644 index 0000000..9201ca9 --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_RETRY_DESCRIPTION.png.sha1
@@ -0,0 +1 @@ +6f65363e7166a29104e848db00efffd84dea9cf4 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_RETRY_LABEL.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_RETRY_LABEL.png.sha1 new file mode 100644 index 0000000..9201ca9 --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_RETRY_LABEL.png.sha1
@@ -0,0 +1 @@ +6f65363e7166a29104e848db00efffd84dea9cf4 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_EDIT_DICTIONARY_DESCRIPTION.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_EDIT_DICTIONARY_DESCRIPTION.png.sha1 new file mode 100644 index 0000000..a9ce865d --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_EDIT_DICTIONARY_DESCRIPTION.png.sha1
@@ -0,0 +1 @@ +e6180ff90492704465ad491b66d9487e34f2e663 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_EDIT_DICTIONARY_LABEL.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_EDIT_DICTIONARY_LABEL.png.sha1 new file mode 100644 index 0000000..a9ce865d --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_EDIT_DICTIONARY_LABEL.png.sha1
@@ -0,0 +1 @@ +e6180ff90492704465ad491b66d9487e34f2e663 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_NO_DICTIONARY_WORDS_LABEL.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_NO_DICTIONARY_WORDS_LABEL.png.sha1 new file mode 100644 index 0000000..fb3bddc --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_NO_DICTIONARY_WORDS_LABEL.png.sha1
@@ -0,0 +1 @@ +80c69c6cee50495cf1198d8350f597607db47353 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_ENHANCED_LABEL.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_ENHANCED_LABEL.png.sha1 new file mode 100644 index 0000000..350d611f --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_ENHANCED_LABEL.png.sha1
@@ -0,0 +1 @@ +85bdf87318dfe964d249488014ea84fee36fc47c \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGES_LIST_DESCRIPTION.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGES_LIST_DESCRIPTION.png.sha1 new file mode 100644 index 0000000..350d611f --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGES_LIST_DESCRIPTION.png.sha1
@@ -0,0 +1 @@ +85bdf87318dfe964d249488014ea84fee36fc47c \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGES_LIST_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGES_LIST_TITLE.png.sha1 new file mode 100644 index 0000000..350d611f --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGES_LIST_TITLE.png.sha1
@@ -0,0 +1 @@ +85bdf87318dfe964d249488014ea84fee36fc47c \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_TITLE.png.sha1 new file mode 100644 index 0000000..350d611f --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_TITLE.png.sha1
@@ -0,0 +1 @@ +85bdf87318dfe964d249488014ea84fee36fc47c \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_REMOVE_FAILURE_DIALOG_MESSAGE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_REMOVE_FAILURE_DIALOG_MESSAGE.png.sha1 new file mode 100644 index 0000000..04f962d --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_REMOVE_FAILURE_DIALOG_MESSAGE.png.sha1
@@ -0,0 +1 @@ +ec0fdd89ab5d4afc79c7e65d463ecece4925ac68 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_REMOVE_FAILURE_DIALOG_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_REMOVE_FAILURE_DIALOG_TITLE.png.sha1 new file mode 100644 index 0000000..04f962d --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_REMOVE_FAILURE_DIALOG_TITLE.png.sha1
@@ -0,0 +1 @@ +ec0fdd89ab5d4afc79c7e65d463ecece4925ac68 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_REMOVE_FAILURE_TRY_AGAIN.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_REMOVE_FAILURE_TRY_AGAIN.png.sha1 new file mode 100644 index 0000000..04f962d --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_REMOVE_FAILURE_TRY_AGAIN.png.sha1
@@ -0,0 +1 @@ +ec0fdd89ab5d4afc79c7e65d463ecece4925ac68 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_USB_DEVICES_IN_USE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_USB_DEVICES_IN_USE.png.sha1 new file mode 100644 index 0000000..b635fc1f0 --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_USB_DEVICES_IN_USE.png.sha1
@@ -0,0 +1 @@ +e35f1ed0b95833f5b1417ab90fe568efed19a1c2 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_USB_DEVICES_REASSIGN.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_USB_DEVICES_REASSIGN.png.sha1 new file mode 100644 index 0000000..b635fc1f0 --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_USB_DEVICES_REASSIGN.png.sha1
@@ -0,0 +1 @@ +e35f1ed0b95833f5b1417ab90fe568efed19a1c2 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_CROSTINI_SHARED_USB_DEVICES_IN_USE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_CROSTINI_SHARED_USB_DEVICES_IN_USE.png.sha1 new file mode 100644 index 0000000..b635fc1f0 --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_CROSTINI_SHARED_USB_DEVICES_IN_USE.png.sha1
@@ -0,0 +1 @@ +e35f1ed0b95833f5b1417ab90fe568efed19a1c2 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_CROSTINI_SHARED_USB_DEVICES_REASSIGN.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_CROSTINI_SHARED_USB_DEVICES_REASSIGN.png.sha1 new file mode 100644 index 0000000..b635fc1f0 --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_CROSTINI_SHARED_USB_DEVICES_REASSIGN.png.sha1
@@ -0,0 +1 @@ +e35f1ed0b95833f5b1417ab90fe568efed19a1c2 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_POWER_IDLE_SHUT_DOWN.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_POWER_IDLE_SHUT_DOWN.png.sha1 new file mode 100644 index 0000000..3fdefea --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_POWER_IDLE_SHUT_DOWN.png.sha1
@@ -0,0 +1 @@ +ca79ca2ef86436d8aca69b8e3070ec567a4fc19e \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_POWER_IDLE_STOP_SESSION.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_POWER_IDLE_STOP_SESSION.png.sha1 new file mode 100644 index 0000000..469a4b3e --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_POWER_IDLE_STOP_SESSION.png.sha1
@@ -0,0 +1 @@ +ea140c2a0bb159764075042c2d61be720df2631a \ No newline at end of file
diff --git a/chrome/app/resources/chromium_strings_fi.xtb b/chrome/app/resources/chromium_strings_fi.xtb index 6380ed3..7555c70 100644 --- a/chrome/app/resources/chromium_strings_fi.xtb +++ b/chrome/app/resources/chromium_strings_fi.xtb
@@ -102,7 +102,7 @@ <translation id="4748217263233248895">Chromiumin tärkeä tietoturvapäivitys on asennettu. Käynnistä selain uudelleen – palautamme avoimet välilehdet.</translation> <translation id="4750035648288509542">Melkein ajan tasalla. Viimeistele päivitys käynnistämällä Chromium uudelleen. Incognito-ikkunoita ei avata uudelleen.</translation> <translation id="4788777615168560705">Chromium ei voi tarkistaa salasanojasi. Yritä uudelleen 24 tunnin kuluttua tai <ph name="BEGIN_LINK" />tarkista salasanat Google-tililtä<ph name="END_LINK" />.</translation> -<translation id="479167709087336770">Tämä käyttää samaa oikeinkirjoituksen tarkistusta kuin Google Haku. Selaimeen kirjoittamasi teksti lähetetään Googlelle. Voit muuttaa tätä milloin tahansa asetuksista.</translation> +<translation id="479167709087336770">Tämä käyttää samaa oikeinkirjoituksen tarkistusta kuin Google Haku. Selaimeen kirjoittamasi teksti lähetetään Googlelle. Voit vaihtaa valintasi milloin tahansa asetuksista.</translation> <translation id="4888717733111232871">Chromiumin saapuvien yhteyksien sääntö, joka sallii mDNS-liikenteen.</translation> <translation id="4893632094755846570">Tämä poistaa pysyvästi selausdatasi tältä laitteelta. Jos haluat palauttaa datan myöhemmin, kirjaudu Chromiumiin tällä tilillä:</translation> <translation id="4943838377383847465">Chromium on käynnissä taustalla</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb index dbe86ce..ff056c7c 100644 --- a/chrome/app/resources/generated_resources_af.xtb +++ b/chrome/app/resources/generated_resources_af.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Lees en verander al jou data op jou rekenaar en die webwerwe wat jy besoek</translation> <translation id="1430915738399379752">Druk uit</translation> <translation id="1431188203598586230">Finale sagtewareopdatering</translation> +<translation id="1431402976894535801">Keer dat werwe weet wanneer jy teenwoordig is</translation> <translation id="1431432486300429272">Google sal dalk jou blaaigeskiedenis gebruik om Search en ander Google-dienste te personaliseer. Jy of jou ouer kan dit enige tyd verander by myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Bestuur soekenjins</translation> <translation id="1433811987160647649">Vra voordat toegang verkry word</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Onbekende toestel [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Hierdie eienaarrekening moet die eerste rekening wees waarby in 'n veelvuldige aanmeldsessie aangemeld word.</translation> <translation id="150411034776756821">Verwyder <ph name="SITE" /></translation> +<translation id="1504311855864906891">Kry onderskrifte vir jou media</translation> <translation id="1504551620756424144">Gedeelde vouers is in Windows beskikbaar by <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Soekenjin</translation> <translation id="1507170440449692343">Hierdie bladsy word gekeer om by jou kamera in te gaan.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Jy moet dieselfde wagfrase twee keer invoer</translation> <translation id="1652326691684645429">Aktiveer Nabydeling</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Voeg die drukker by Google Wolk-drukker sodat jy van enige plek af kan druk.}other{Voeg # drukkers by Google Wolk-drukker sodat jy van enige plek af kan druk.}}</translation> +<translation id="1653575510930452864">Kopieer skakel na teks</translation> <translation id="1656528038316521561">Agtergrondondeursigtigheid</translation> <translation id="1657406563541664238">Help om <ph name="PRODUCT_NAME" /> te verbeter deur gebruikstatistiek en omvalverslae outomaties na Google te stuur</translation> <translation id="1657937299377480641">Vra jou ouer om jou toestemming te gee om weer aan te meld vir toegang tot opvoedkundige hulpbronne</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">CA-kompromie</translation> <translation id="2182058453334755893">Gekopieer na jou knipbord</translation> <translation id="2184515124301515068">Laat Chrome kies wanneer webwerwe klank kan speel (aanbeveel)</translation> +<translation id="2187243482123994665">Gebruikerteenwoordigheid</translation> <translation id="2187675480456493911">Is met ander toestelle in jou rekening gesinkroniseer. Instellings wat deur ander gebruikers gewysig is, sal nie gesinkroniseer word nie. <ph name="LINK_BEGIN" />Kom meer te wete<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Bedienersertifikaat-invoerfout</translation> <translation id="2187906491731510095">Uitbreidings is opgedateer</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Voer 4-syfer-PIN (0000-9999) in</translation> <translation id="2399939490305346086">Sekuriteitsleutel se aanmelddata</translation> <translation id="2400664245143453337">Onmiddellike opdatering word vereis</translation> -<translation id="2407481962792080328">Hierdie kenmerk word aangeskakel wanneer jy by jou Google-rekening aanmeld</translation> <translation id="2408018932941436077">Stoor tans kaart</translation> <translation id="2408955596600435184">Voer jou PIN in</translation> <translation id="241082044617551207">Onbekende inprop</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963">Onbekende produk <ph name="PRODUCT_ID" /> vanaf verkoper <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Die volgende dienste help om jou data veilg te hou. Jy kan hierdie kenmerke enige tyd afskakel.</translation> <translation id="3164329792803560526">Deel tans hierdie oortjie met <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Vra as 'n werf wil weet wanneer jy teenwoordig is</translation> <translation id="3165390001037658081">Sommige diensverskaffers kan hierdie funksie blokkeer.</translation> <translation id="316652501498554287">G Suite for Education-rekeninge</translation> <translation id="3169472444629675720">Discover</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">Skep 'n nuwe profiel vir werk?</translation> <translation id="452750746583162491">Gaan jou gesinkroniseerde data na</translation> <translation id="4530494379350999373">Oorsprong</translation> +<translation id="4531924570968473143">Wie wil jy graag by hierdie <ph name="DEVICE_TYPE" /> voeg?</translation> <translation id="4532646538815530781">Hierdie werf gebruik tans bewegingsensors.</translation> <translation id="4533846798469727141">Sê nou "Hey Google"</translation> <translation id="4533985347672295764">CPU-tyd</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">Oortjiesoektog</translation> <translation id="465878909996028221">Slegs http-, https- en lêerprotokolle word gesteun om blaaiers te herlei.</translation> <translation id="4659077111144409915">Primêre rekening</translation> +<translation id="4659126640776004816">Hierdie kenmerk word aangeskakel wanneer jy by jou Google-rekening aanmeld.</translation> <translation id="4660476621274971848">Het weergawe "<ph name="EXPECTED_VERSION" />" verwag, maar weergawe was "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">Verander tans grootte</translation> <translation id="4661407454952063730">Programdata kan enige data wees wat 'n program gestoor het (gegrond op ontwikkelaarinstellings), insluitend data soos kontakte, boodskappe en foto's.</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">Voorstelle</translation> <translation id="475088594373173692">Eerste gebruiker</translation> <translation id="4751476147751820511">Beweging- of ligsensors</translation> -<translation id="4752124003533492687">Maak Instellings oop om <ph name="USB_DEVICE_NAME" /> te koppel</translation> <translation id="4756378406049221019">Stop/Herlaai</translation> <translation id="4756388243121344051">Geskiedenis</translation> <translation id="4759238208242260848">Aflaaie</translation> @@ -3979,6 +3984,7 @@ <translation id="5804241973901381774">Toestemmings</translation> <translation id="5805697420284793859">Vensterbestuurder</translation> <translation id="5806773519584576205">0° (Verstek)</translation> +<translation id="5808664694611589238">{0,plural, =1{Maak gas toe}other{Maak gas toe}}</translation> <translation id="5810809306422959727">Hierdie rekening kwalifiseer nie vir ouerkontroles nie</translation> <translation id="5812674658566766066">Vou alles uit</translation> <translation id="5814126672212206791">Verbindingtipe</translation> @@ -4436,6 +4442,7 @@ <translation id="6344170822609224263">Gaan by lys netwerkverbindings in</translation> <translation id="6344576354370880196">Gestoorde drukkers</translation> <translation id="6345418402353744910">Jou gebruikernaam en wagwoord word vir die instaanbediener <ph name="PROXY" /> vereis sodat die admin jou netwerk kan opstel</translation> +<translation id="6345878117466430440">Merk as gelees</translation> <translation id="6349101878882523185">Installeer <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Sinkronisering werk tans nie. Probeer afmeld en weer aanmeld.</translation> <translation id="6351063337294363751">Jy kan jou blaaidata van hierdie kieslys af uitvee</translation> @@ -5022,6 +5029,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 met RSA-enkripsie</translation> <translation id="7075625805486468288">Bestuur HTTPS/SSL-sertifikate en -instellings</translation> <translation id="7076293881109082629">Meld tans aan</translation> +<translation id="7076878155205969899">Demp klank</translation> <translation id="7077829361966535409">Die aanmeldbladsy kon nie met die huidige instaanbedienerinstellings gelaai word nie. <ph name="GAIA_RELOAD_LINK_START" />Probeer asseblief weer om aan te meld<ph name="GAIA_RELOAD_LINK_END" />, of gebruik ander <ph name="PROXY_SETTINGS_LINK_START" />instaanbedienerinstellings<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Alle netwerke</translation> <translation id="708060913198414444">Kopieer oudioadres</translation> @@ -5042,7 +5050,6 @@ <translation id="7099337801055912064">Kan nie groot PPD laai nie. Maksimum grootte is 250 KB.</translation> <translation id="7102687220333134671">Outomatiese opdaterings is aangeskakel</translation> <translation id="7102832101143475489">Die versoek het uitgetel</translation> -<translation id="7105390788077117391">USB-voorkeure</translation> <translation id="710640343305609397">Maak netwerkinstellings oop</translation> <translation id="7108338896283013870">Versteek</translation> <translation id="7108668606237948702">enter</translation> @@ -5072,7 +5079,6 @@ <translation id="7136694880210472378">Maak verstek</translation> <translation id="7136984461011502314">Welkom by <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Iets is fout. Probeer weer deur ander prente te kies.</translation> -<translation id="7138678301420049075">Ander</translation> <translation id="713888829801648570">Jammer, jou wagwoord kon nie geverifieer word nie, want jy is vanlyn.</translation> <translation id="7140928199327930795">Geen ander beskikbare toestelle nie.</translation> <translation id="7141105143012495934">Kon nie aanmeld nie omdat jou rekeningbesonderhede nie gehaal kon word nie. Kontak jou administrateur of probeer weer.</translation> @@ -5179,6 +5185,7 @@ <translation id="7280649757394340890">Teks-na-spraak-steminstellings</translation> <translation id="7280877790564589615">Toestemming versoek</translation> <translation id="7282992757463864530">Inligtingbalk</translation> +<translation id="7284411326658527427">Elke persoon kan hul rekening personaliseer en data privaat hou.</translation> <translation id="7287143125007575591">Toegang geweier.</translation> <translation id="7287411021188441799">Laai verstekagtergrond terug</translation> <translation id="7288013116963835700">Verwyder Linux vir <ph name="DEVICE_TYPE" /></translation> @@ -5755,6 +5762,7 @@ <translation id="7963826112438303517">Jou Assistent gebruik hierdie opnames en jou gesproke versoeke om jou stemmodel, wat net geberg word op toestelle waar jy Voice Match aangeskakel het, te skep en op te dateer. Bekyk of lei stemaktiwiteit weer op in Assistent-instellings.</translation> <translation id="7966241909927244760">Kopieer prentadres</translation> <translation id="7968072247663421402">Verskafferopsies</translation> +<translation id="7968198493605442410">Kopieer skakel na teks</translation> <translation id="7968742106503422125">Lees en verander data wat jy kopieer en plak</translation> <translation id="7968833647796919681">Aktiveer prestasiedataversameling</translation> <translation id="7968982339740310781">Bekyk details</translation> @@ -6134,6 +6142,7 @@ <translation id="8428213095426709021">Instellings</translation> <translation id="8428271547607112339">Voeg skoolrekening by</translation> <translation id="8428628598981198790">Jou sekuriteitsleutel kan nie met hierdie werf gebruik word nie</translation> +<translation id="8428634594422941299">Het dit</translation> <translation id="84297032718407999">Jy sal oor <ph name="LOGOUT_TIME_LEFT" /> afgemeld word</translation> <translation id="8431190899827883166">Wys tikke</translation> <translation id="8431909052837336408">Verander SIM-PIN</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index 0e8dfe1e..4b22c450 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">በጎበኟቸው ድር ጣቢያዎች ላይ ያለው ሁሉም ውሂብዎን ያነብባል እና ይቀይራል</translation> <translation id="1430915738399379752">አትም</translation> <translation id="1431188203598586230">የመጨረሻ የሶፍትዌር ዝማኔ</translation> +<translation id="1431402976894535801">ጣቢያዎችን እርስዎ የሚገኙ በሚሆኑበት ጊዜ እንዳያውቁ ያግዷቸው</translation> <translation id="1431432486300429272">Google ፍለጋን እና ሌሎች የGoogle አገልግሎቶችን ግላዊነት ለማላበስ ሲል የአሰሳ ታሪክዎን ሊጠቀም ይችላል። እርስዎ ወይም ወላጅዎ ይህን በማንኛውም ጊዜ myaccount.google.com/activitycontrols/search ላይ መቀየር ትችላላችሁ</translation> <translation id="1432581352905426595">የፍለጋ ፕሮግራሞችን ያቀናብሩ</translation> <translation id="1433811987160647649">ከመድረስ በፊት ጠይቅ</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">የማይታወቅ መሣሪያ [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">ይህ የባለቤት መለያ በበርካታ መለያ በሚገባበት ክፍለ-ጊዜ ውስጥ የመጀመሪያው የገባ መለያ መሆን አለበት።</translation> <translation id="150411034776756821"><ph name="SITE" />ን አስወግድ</translation> +<translation id="1504311855864906891">ለእርስዎ ሚዲያ መግለጫ ጽሑፎችን ያግኙ</translation> <translation id="1504551620756424144">የተጋሩ አቃፊዎች <ph name="BASE_DIR" /> ላይ በWindows ላይ ይገኛሉ።</translation> <translation id="1506061864768559482">የፍለጋ ፕሮግራም</translation> <translation id="1507170440449692343">ይህ ገጽ ካሜራዎን እንዳይደርስበት ታግዷል።</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">ተመሳሳዩ የይለፍ ሐረጉን ሁለት ጊዜ ማስገባት አለብዎት</translation> <translation id="1652326691684645429">የአቅራቢያ ማጋሪያን ያንቁ</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{ከማንኛውም ቦታ ሆነው ማተም እንዲችሉ አታሚውን ወደ Google Cloud አታሚ ያክሉ።}one{ከማንኛውም ቦታ ሆነው ማተም እንዲችሉ # አታሚዎችን ወደ Google Cloud አታሚ ያክሉ።}other{ከማንኛውም ቦታ ሆነው ማተም እንዲችሉ # አታሚዎችን ወደ Google Cloud አታሚ ያክሉ።}}</translation> +<translation id="1653575510930452864">አገናኝን ወደ ጽሑፍ ቅዳ</translation> <translation id="1656528038316521561">የበስተጀርባ ብርሃን-ከልነት</translation> <translation id="1657406563541664238">የአጠቃቀም ስታቲክሶችን እና የስንኩል ሪፖርቶችን ወደ Google በቀጥታ በመላክ <ph name="PRODUCT_NAME" />ን የተሻለ ለማድረግ እገዛ ያድርጉ።</translation> <translation id="1657937299377480641">የለትምህርታዊ ግብዓቶች መዳረሻን እንዲያገኙ እንደገና ወደ መለያ ለመግባት ወላጅ ፈቃድ እንዲሰጠዎት ይጠይቋቸው</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">CA Compromise</translation> <translation id="2182058453334755893">ወደ የእርስዎ ቅንጥብ ሰሌዳ ላይ ተቀድቷል</translation> <translation id="2184515124301515068">Chrome ጣቢያዎች መቼ ድምጽን ማጫወት እንደሚችሉ እንዲመርጥ ይፍቀዱ (የሚመከር)</translation> +<translation id="2187243482123994665">የተጠቃሚ ተገኝነት</translation> <translation id="2187675480456493911">በመለያዎ ላይ ካሉ ሌሎች መሣሪያዎች ጋር ሰምሯል። በሌሎች ተጠቃሚዎች የተቀየሩ ቅንብሮች አይሰምሩም። <ph name="LINK_BEGIN" />የበለጠ ለመረዳት<ph name="LINK_END" /></translation> <translation id="2187895286714876935">የአገልጋይ ዕውቅና ማረጋገጫ ስህተት</translation> <translation id="2187906491731510095">ቅጥያዎች ተዘምነዋል</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">ባለ4 አኃዝ ፒን (0000-9999) ያስገቡ</translation> <translation id="2399939490305346086">የደህንነት ቁልፍ በመለያ መግቢያ ውሂብ</translation> <translation id="2400664245143453337">አስቸኳይ ዝማኔ ያስፈልጋል</translation> -<translation id="2407481962792080328">ወደ የእርስዎ የ Google መለያ ሲገቡ፣ ይህ ባህሪ ይበራል</translation> <translation id="2408018932941436077">ካርድን በማስቀመጥ ላይ</translation> <translation id="2408955596600435184">የእርስዎን ፒን ያስገቡ</translation> <translation id="241082044617551207">ያልታወቀ ተሰኪ</translation> @@ -1829,6 +1832,7 @@ <translation id="3163201441334626963">ያልታወቀ ምርት <ph name="PRODUCT_ID" /> ከ<ph name="VENDOR_ID" /> ሻጭ</translation> <translation id="3163254451837720982">የሚከተሉት አገልግሎቶች ውሂብዎን ደህንነቱ የተጠበቀ እና ጥብቅ ለማድረግ ያግዛሉ። እነዚህን ባህሪዎች በማንኛውም ጊዜ ማጥፋት ይችላሉ።</translation> <translation id="3164329792803560526">ወደ <ph name="APP_NAME" /> ይህን ትር በማጋራት ላይ</translation> +<translation id="3165371858310906303">አንድ ጣቢያ እርስዎ የሚገኙ በሚሆኑበት ጊዜ ማወቅ ሲፈልግ ጠይቅ</translation> <translation id="3165390001037658081">አንዳንድ የአገልግሎት አቅራቢዎች ይህን ባህሪ ሊያግዱት ይችላሉ።</translation> <translation id="316652501498554287">የG Suite for Education መለያዎች</translation> <translation id="3169472444629675720">Discover</translation> @@ -2944,6 +2948,7 @@ <translation id="4527186207340858212">ለስራ አዲስ መገለጫ ይፈጠር?</translation> <translation id="452750746583162491">የሰመረ ውሂብዎን ይገምግሙ</translation> <translation id="4530494379350999373">መነሻ</translation> +<translation id="4531924570968473143">ማንን ወደዚህ <ph name="DEVICE_TYPE" /> ማከል ይፈልጋል?</translation> <translation id="4532646538815530781">ይህ ጣቢያ የእንቅስቃሴ ዳሳሾችን እየተጠቀመ ነው።</translation> <translation id="4533846798469727141">አሁን «Hey Google» ይበሉ</translation> <translation id="4533985347672295764">የሲፒዩ ጊዜ</translation> @@ -3063,6 +3068,7 @@ <translation id="4657810666108475055">የትር ፍለጋ</translation> <translation id="465878909996028221">http፣ https እና ፋይል ፕሮቶኮሎች ብቻ ለአሳሽ አቅጣጫ መቀየሮች ይደገፋሉ።</translation> <translation id="4659077111144409915">ዋና መለያ</translation> +<translation id="4659126640776004816">ወደ የእርስዎ የ Google መለያ ሲገቡ፣ ይህ ባህሪ ይበራል።</translation> <translation id="4660476621274971848">የተጠበቀው ስሪት «<ph name="EXPECTED_VERSION" />» ነበር፣ ግን ስሪቱ «<ph name="NEW_ID" />» ነበር</translation> <translation id="4660540330091848931">መጠንን በመቀየር ላይ</translation> <translation id="4661407454952063730">የመተግበሪያ ውሂብ እንደ እውቂያዎች፣ መልዕክቶች እና ፎቶዎች ያለ ውሂብ ጨምሮ አንድ መተግበሪያ ያስቀመጠው ማንኛውም ውሂብ (በገንቢ ቅንብሮች የሚወሰን) ሊሆን ይችላል።</translation> @@ -3128,7 +3134,6 @@ <translation id="4750394297954878236">የአስተያየት ጥቆማዎች</translation> <translation id="475088594373173692">የመጀመሪያ ተጠቃሚ</translation> <translation id="4751476147751820511">የእንቅስቃሴ ወይም የብርሃን ዳሳሾች</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" />ን ለማገናኘት ቅንብሮችን ይክፈቱ</translation> <translation id="4756378406049221019">አስቁም/ዳግም ጫን</translation> <translation id="4756388243121344051">&ታሪክ</translation> <translation id="4759238208242260848">የወረዱ</translation> @@ -3975,6 +3980,7 @@ <translation id="5804241973901381774">ፍቃዶች</translation> <translation id="5805697420284793859">የWindow አስተዳዳሪ</translation> <translation id="5806773519584576205">0° (ነባሪ)</translation> +<translation id="5808664694611589238">{0,plural, =1{እንግዳን ዝጋ}one{እንግዳን ዝጋ}other{እንግዳን ዝጋ}}</translation> <translation id="5810809306422959727">ይህ መለያ ለወላጅ መቆጣጠሪያዎች ብቁ አይደለም</translation> <translation id="5812674658566766066">ሁሉንም ዘርጋ</translation> <translation id="5814126672212206791">የግንኙነት ዓይነት</translation> @@ -4432,6 +4438,7 @@ <translation id="6344170822609224263">የአውታረ መረብ ግንኙነቶች ዝርዝር ይደርሳል</translation> <translation id="6344576354370880196">የተቀመጡ አታሚዎች</translation> <translation id="6345418402353744910">አስተዳዳሪው አውታረ መረብዎን ማዋቀር እንዲችል የእርስዎን የተጠቃሚ ስም እና የይለፍ ቃል ለተኪው <ph name="PROXY" /> ያስፈልጋሉ።</translation> +<translation id="6345878117466430440">እንደተነበበ ምልክት አድርግ</translation> <translation id="6349101878882523185"><ph name="APP_NAME" />ን ይጫኑ</translation> <translation id="6349170655202535379">ስምረት እየሰራ አይደለም። ዘግተው ወጥተው እና ተመልሰው ለመግባት ይሞክሩ።</translation> <translation id="6351063337294363751">የእርስዎን የአሰሳ አደራረግ ውሂብ ከዚህ ምናሌ ላይ ማጽዳት ይችላሉ</translation> @@ -5018,6 +5025,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 ከRSA ምስጠራ ጋር</translation> <translation id="7075625805486468288">የኤችቲቲፒኤስ/ኤስኤስኤል ዕውቅና ማረጋገጫዎችን እና ቅንብሮችን ያቀናብሩ</translation> <translation id="7076293881109082629">በመግባት ላይ</translation> +<translation id="7076878155205969899">ድምጽን ዝጋ</translation> <translation id="7077829361966535409">የመግቢያ ገጹ የአሁኑ የተኪ ቅንብሮች ተጠቅሞ መጫን አልቻለም። እባክዎ <ph name="GAIA_RELOAD_LINK_START" />እንደገና ለመግባት ይሞክሩ<ph name="GAIA_RELOAD_LINK_END" /> ወይም ደግሞ የተለየ <ph name="PROXY_SETTINGS_LINK_START" />የተኪ ቅንብሮች<ph name="PROXY_SETTINGS_LINK_END" />ን ይጠቀሙ።</translation> <translation id="7078120482318506217">ሁሉም አውታረ መረቦች</translation> <translation id="708060913198414444">የኦዲዮ አድራሻ &ቅዳ</translation> @@ -5038,7 +5046,6 @@ <translation id="7099337801055912064">ትልቅ PPDን መጫን አልተቻለም። ከፍተኛው መጠን 250 ኪባ ነው።</translation> <translation id="7102687220333134671">ራስ-ሰር ዝማኔዎች በርተዋል</translation> <translation id="7102832101143475489">ጥያቄው ጊዜውን ጨርሷል</translation> -<translation id="7105390788077117391">የዩኤስቢ ምርጫዎች</translation> <translation id="710640343305609397">የአውታረ መረብ ቅንብሮችን ይክፈቱ</translation> <translation id="7108338896283013870">ደብቅ</translation> <translation id="7108668606237948702">ያስገቡ</translation> @@ -5068,7 +5075,6 @@ <translation id="7136694880210472378">ነባሪ አድርግ</translation> <translation id="7136984461011502314">ወደ <ph name="PRODUCT_NAME" /> እንኳን ደህና መጡ</translation> <translation id="7136993520339022828">አንድ ስህተት አለ። ሌሎች ምስሎችን ከመምረጥዎ በፊት እባክዎ እንደገና ይሞክሩ።</translation> -<translation id="7138678301420049075">ሌላ</translation> <translation id="713888829801648570">ይቅርታ፣ ከመስመር ውጪ ስለሆነ የይለፍ ቃልዎ ሊረጋገጥ አልቻለም።</translation> <translation id="7140928199327930795">ሌሎች የሚገኙ ምንም መሣሪያዎች የሉም።</translation> <translation id="7141105143012495934">የእርስዎ መለያ ዝርዝሮች ተመልሰው ሊገኙ ሳላልቻሉ መግባት አልተሳካም። እባክዎ የእርስዎን አስተዳዳሪ ያነጋግሩ ወይም እንደገና ይሞክሩ።</translation> @@ -5175,6 +5181,7 @@ <translation id="7280649757394340890">የጽሑፍ-ወደ-ንግግር ድምጽ ቅንብሮች</translation> <translation id="7280877790564589615">ፈቃድ ተጠይቋል</translation> <translation id="7282992757463864530">የመረጃ አሞሌ</translation> +<translation id="7284411326658527427">እያንዳንዱ ሰው መለያቸውን የግል ማድረግ እና ውሂብን የግል አድርገው ማቆየት ይችላሉ።</translation> <translation id="7287143125007575591">መዳረሻ ተክልክሏል።</translation> <translation id="7287411021188441799">ወደነበረበት ነባሪ ዳራ መልስ</translation> <translation id="7288013116963835700">ለ<ph name="DEVICE_TYPE" /> Linuxን አስወግድ</translation> @@ -5751,6 +5758,7 @@ <translation id="7963826112438303517">የእርስዎ ረዳት እነዚህን ቅጂዎች እና የቃል ጥያቄዎችዎን የድምጽዎን ሞዴል ለመፍጠር እና ለማዘመን ይጠቀምባቸዋል፣ ይህም Voice Match ባነቁባቸው መሣሪያዎች ላይ ብቻ የሚከማች ነው። በረዳት ቅንብሮች ውስጥ የድምጽ እንቅስቃሴን ይይመልከቱ ወይም ዳግም ያሰልጥኑ።</translation> <translation id="7966241909927244760">የምስል አድራሻ &ቅዳ</translation> <translation id="7968072247663421402">የአቅራቢ አማራጮች</translation> +<translation id="7968198493605442410">አገናኝን ወደ ጽሑፍ ቅዳ</translation> <translation id="7968742106503422125">እርስዎ የሚቀዱትን እና የሚለጥፉትን ማንበብ እና መቀየር</translation> <translation id="7968833647796919681">የአፈጻጸም የውሂብ መሰብሰብ አንቃ</translation> <translation id="7968982339740310781">ዝርዝሮችን ይመልከቱ</translation> @@ -6135,6 +6143,7 @@ <translation id="8428213095426709021">ቅንብሮች</translation> <translation id="8428271547607112339">የትምህርት ቤት መለያ አክል</translation> <translation id="8428628598981198790">የደህንነት ቅቁልፍዎ በዚህ ጣቢያ ላይ መጠቀም አይቻልም</translation> +<translation id="8428634594422941299">ገባኝ</translation> <translation id="84297032718407999">በ<ph name="LOGOUT_TIME_LEFT" /> ውስጥ ዘግተው እንዲወጡ ይደረጋሉ</translation> <translation id="8431190899827883166">መታ ማድረጎችን አሳይ</translation> <translation id="8431909052837336408">የሲም ፒን ይለውጡ</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index 1822508..a19544b6 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">جهاز غير معروف [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">يجب أن يكون حساب المالك هذا أول حساب يتم تسجيل الدخول إليه في جلسة تسجيل دخول متعدد.</translation> <translation id="150411034776756821">إزالة <ph name="SITE" /></translation> +<translation id="1504311855864906891">الحصول على مقاطع شرح وترجمة للوسائط</translation> <translation id="1504551620756424144">تتوفّر المجلّدات المشترَكة في Windows على <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">محرك البحث</translation> <translation id="1507170440449692343">تم حظر دخول هذه الصفحة إلى الكاميرا التابعة لك.</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">أدخِل رقم التعريف الشخصي المكوَّن من 4 أرقام (0000-9999).</translation> <translation id="2399939490305346086">بيانات تسجيل الدخول على مفتاح الأمان</translation> <translation id="2400664245143453337">مطلوب التحديث فورًا</translation> -<translation id="2407481962792080328">عند تسجيل الدخول إلى حسابك على Google، يتم تفعيل هذه الميزة.</translation> <translation id="2408018932941436077">جارٍ حفظ البطاقة</translation> <translation id="2408955596600435184">إدخال رقم التعريف الشخصي</translation> <translation id="241082044617551207">مكوّن إضافي غير محدّد</translation> @@ -3063,6 +3063,7 @@ <translation id="4657810666108475055">علامة تبويب البحث</translation> <translation id="465878909996028221">يمكن إعادة توجيه المتصفّح باستخدام بروتوكولات الملف وhttp وhttps فقط.</translation> <translation id="4659077111144409915">الحساب الأساسي</translation> +<translation id="4659126640776004816">عند تسجيل الدخول إلى حسابك على Google، يتم تفعيل هذه الميزة.</translation> <translation id="4660476621274971848">الإصدار المتوقع "<ph name="EXPECTED_VERSION" />"، ولكن الإصدار كان "<ph name="NEW_ID" />".</translation> <translation id="4660540330091848931">جارٍ تغيير الحجم</translation> <translation id="4661407454952063730">تشمل بيانات التطبيق أيّ بيانات حفظها هذا التطبيق (بناءً على إعدادات مطوّر البرامج)، بما في ذلك بيانات مثل جهات الاتصال والرسائل والصور.</translation> @@ -3128,7 +3129,6 @@ <translation id="4750394297954878236">الاقتراحات</translation> <translation id="475088594373173692">المستخدم الأول</translation> <translation id="4751476147751820511">أجهزة استشعار الإضاءة أو الحركة</translation> -<translation id="4752124003533492687">يُرجى الانتقال إلى "الإعدادات" لربط الجهاز <ph name="USB_DEVICE_NAME" />.</translation> <translation id="4756378406049221019">إيقاف/تحديث</translation> <translation id="4756388243121344051">ال&سجل</translation> <translation id="4759238208242260848">الملفات التي تم تنزيلها</translation> @@ -5020,6 +5020,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 مع ترميز RSA</translation> <translation id="7075625805486468288">إدارة إعدادات وشهادات HTTPS/طبقة المقابس الآمنة</translation> <translation id="7076293881109082629">تسجيل الدخول</translation> +<translation id="7076878155205969899">كتم الصوت</translation> <translation id="7077829361966535409">تعذّر تحميل صفحة تسجيل الدخول باستخدام إعدادات الخادم الوكيل الحالية. يُرجى <ph name="GAIA_RELOAD_LINK_START" />إعادة محاولة تسجيل الدخول<ph name="GAIA_RELOAD_LINK_END" />، أو استخدام <ph name="PROXY_SETTINGS_LINK_START" />إعدادات خادم وكيل<ph name="PROXY_SETTINGS_LINK_END" /> مختلفة.</translation> <translation id="7078120482318506217">جميع الشبكات</translation> <translation id="708060913198414444">ن&سخ عنوان الصوت</translation> @@ -5040,7 +5041,6 @@ <translation id="7099337801055912064">يتعذّر تحميل ملف PPD كبير الحجم. الحد الأقصى للحجم هو 250 كيلوبايت.</translation> <translation id="7102687220333134671">تم تفعيل التحديثات التلقائية</translation> <translation id="7102832101143475489">انتهت مهلة الطلب</translation> -<translation id="7105390788077117391">إعدادات USB المُفضَّلة</translation> <translation id="710640343305609397">فتح إعدادات الشبكة</translation> <translation id="7108338896283013870">إخفاء</translation> <translation id="7108668606237948702">إدخال</translation> @@ -5070,7 +5070,6 @@ <translation id="7136694880210472378">جعل الخيار تلقائيًا</translation> <translation id="7136984461011502314">مرحبًا بك في <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">حدث خطأ. يُرجى إعادة المحاولة عن طريق اختيار صور أخرى.</translation> -<translation id="7138678301420049075">أخرى</translation> <translation id="713888829801648570">عفوًا، لا يمكن التحقق من كلمة المرور لأنك بلا إنترنت.</translation> <translation id="7140928199327930795">لا توجد أجهزة أخرى متاحة.</translation> <translation id="7141105143012495934">فشل تسجيل الدخول، نظرًا لعدم القدرة على استرداد تفاصيل حسابك، يُرجى الاتصال بالمسؤول أو إعادة المحاولة.</translation> @@ -6133,6 +6132,7 @@ <translation id="8428213095426709021">الإعدادات</translation> <translation id="8428271547607112339">إضافة حساب المؤسسة التعليمية</translation> <translation id="8428628598981198790">لا يمكن استخدام مفتاح الأمان مع هذا الموقع الإلكتروني</translation> +<translation id="8428634594422941299">حسنًا</translation> <translation id="84297032718407999">سيتم تسجيل خروجك خلال <ph name="LOGOUT_TIME_LEFT" />.</translation> <translation id="8431190899827883166">عرض النقرات</translation> <translation id="8431909052837336408">تغيير رمز PIN لشريحة SIM</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb index 0ff21bc..090b0dfd 100644 --- a/chrome/app/resources/generated_resources_as.xtb +++ b/chrome/app/resources/generated_resources_as.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">অজ্ঞাত ডিভাইচ [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">গৰাকীৰ এই একাউণ্টটো একাধিকবাৰ ছাইন ইন কৰা কোনো ছেশ্বনত প্ৰথমতে ছাইন ইন কৰা একাউণ্ট হ’ব লাগিব।</translation> <translation id="150411034776756821"><ph name="SITE" /> আঁতৰাওক</translation> +<translation id="1504311855864906891">আপোনাৰ মিডিয়াৰ বাবে কেপশ্বন লাভ কৰক</translation> <translation id="1504551620756424144">শ্বেয়াৰ কৰা ফ’ল্ডাৰসমূহ Windowsৰ <ph name="BASE_DIR" />ত উপলব্ধ।</translation> <translation id="1506061864768559482">সন্ধান ইঞ্জিন</translation> <translation id="1507170440449692343">এই পৃষ্ঠাটোৰ আপোনাৰ কেমেৰাৰ এক্সেছ অৱৰোধ কৰি ৰখা হৈছিল।</translation> @@ -1187,7 +1188,6 @@ <translation id="2396783860772170191">৪টা অংকৰ পিনটো দিয়ক (০০০০-৯৯৯৯)</translation> <translation id="2399939490305346086">সুৰক্ষা চাবিৰ ছাইন-ইন ডেটা</translation> <translation id="2400664245143453337">তাৎক্ষণিকভাৱে আপডে’ট কৰাৰ প্ৰয়োজন</translation> -<translation id="2407481962792080328">আপুনি Google একাউণ্টত ছাইন ইন কৰিলে এই সুবিধাটো অন কৰা হয়</translation> <translation id="2408018932941436077">কাৰ্ডখন ছেভ কৰি থকা হৈছে</translation> <translation id="2408955596600435184">আপোনাৰ পিন দিয়ক</translation> <translation id="241082044617551207">অজ্ঞাত প্লাগইন</translation> @@ -1284,6 +1284,7 @@ <translation id="2505127913256479918">নিৰীক্ষণত থকা এই একাউণ্টটো অতি সোনকালে আঁতৰোৱা হ’ব</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{স্ক্ৰীণ #}one{স্ক্ৰীণ #}other{স্ক্ৰীণ #}}</translation> <translation id="2505402373176859469"><ph name="TOTAL_SIZE" />ৰ <ph name="RECEIVED_AMOUNT" /></translation> +<translation id="250642123108534012">তেওঁলোকৰ ডিভাইচত নিকটৱৰ্তী শ্বেয়াৰ কৰাৰ সুবিধাটো খোলা থাকিলে আপোনাৰ ওচৰে-পাজৰে থকা ডিভাইচসমূহ</translation> <translation id="250704661983564564">ডিছপ্লে’ৰ ব্যৱস্থাপনা</translation> <translation id="2507253002925770350">টিকেট আঁতৰোৱা হ’ল</translation> <translation id="2507397597949272797"><ph name="NAME" /> পজ কৰা হৈছে</translation> @@ -3058,6 +3059,7 @@ <translation id="4657810666108475055">টেবত কৰা সন্ধান</translation> <translation id="465878909996028221">ব্ৰাউজাৰ পুনৰ্নিৰ্দেশৰ বাবে কেৱল http, https আৰু ফাইলৰ প্ৰট'কলসমূহহে সমৰ্থিত।</translation> <translation id="4659077111144409915">প্ৰাথমিক একাউণ্ট</translation> +<translation id="4659126640776004816">আপুনি Google একাউণ্টত ছাইন ইন কৰিলে এই সুবিধাটো অন কৰা হয়।</translation> <translation id="4660476621274971848">"<ph name="EXPECTED_VERSION" />" সংস্কৰণৰ অনুমান কৰা হৈছিল কিন্তু সংস্কৰণটো "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">আকাৰ সলনি কৰি থকা হৈছে</translation> <translation id="4661407454952063730">এপ্ ডেটা সর্ম্পকসূচী, বার্তাসমূহ আৰু ফট’সমূহ আদিকে ধৰি এপ্ এটাই ছেভ কৰা যিকোনো ডেটা (বিকাশকৰ্তা ছেটিংসমূহৰ ওপৰত নির্ভৰ কৰি) হ’ব পাৰে।</translation> @@ -3123,7 +3125,6 @@ <translation id="4750394297954878236">পৰামৰ্শ</translation> <translation id="475088594373173692">প্ৰথম ব্যৱহাৰকাৰী</translation> <translation id="4751476147751820511">গতি বা পোহৰ ধৰা পেলাব পৰা ছেন্সৰ</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" /> সংযোগ কৰিবলৈ ছেটিংসমূহ খোলক</translation> <translation id="4756378406049221019">বন্ধ কৰক/পুনৰ ল'ড কৰক</translation> <translation id="4756388243121344051">&ইতিহাস</translation> <translation id="4759238208242260848">ডাউনল'ডসমূহ</translation> @@ -3131,6 +3132,7 @@ <translation id="4762718786438001384">ডিভাইচৰ ডিস্কত ঠাই একেবাৰে কম আছে</translation> <translation id="4763408175235639573">আপুনি এই পৃষ্ঠাটো চাওঁতে তলৰ কুকিসমূহ ছেট কৰা হৈছিল</translation> <translation id="4765582662863429759">আপোনাৰ ফনৰ পৰা Chromebookলৈ পাঠ ৰিলে’ কৰিবলৈ Android Messagesক অনুমতি দিয়ে</translation> +<translation id="476598255842811483">আপোনাৰ ডিভাইচত আপুনি নিকটৱৰ্তী শ্বেয়াৰ কৰাৰ সুবিধাটো নোখোলা পৰ্যন্ত কোনেও নোৱাৰে</translation> <translation id="4768332406694066911">আপোনাক চিনি পোৱা এই প্ৰতিষ্ঠানবোৰে প্ৰদান কৰা প্ৰমাণপত্ৰ আছে</translation> <translation id="477647109558161443">ডেস্কটপৰ শ্বৰ্টকাট সৃষ্টি কৰক</translation> <translation id="4776917500594043016"><ph name="USER_EMAIL_ADDRESS" />ৰ পাছৱর্ড</translation> @@ -5007,6 +5009,7 @@ <translation id="7075513071073410194">RSA এনক্রিপশ্বনৰ সৈতে PKCS #1 MD5</translation> <translation id="7075625805486468288">HTTPS/SSL প্ৰমাণপত্ৰ আৰু ছেটিংসমূহ পৰিচালনা কৰক</translation> <translation id="7076293881109082629">ছাইন ইন কৰি থকা হৈছে</translation> +<translation id="7076878155205969899">ধ্বনি মিউট কৰক</translation> <translation id="7077829361966535409">ছাইন ইন কৰা পৃষ্ঠায়ে বৰ্তমানৰ প্ৰক্সি ছেটিং ব্যৱহাৰ কৰি ল’ড হ’ব নোৱাৰিলে। অনুগ্ৰহ কৰি <ph name="GAIA_RELOAD_LINK_START" />পুনৰ ছাইন ইন কৰিবলৈ চেষ্টা কৰক<ph name="GAIA_RELOAD_LINK_END" /> বা অন্য <ph name="PROXY_SETTINGS_LINK_START" />প্ৰক্সি ছেটিংসমূহ<ph name="PROXY_SETTINGS_LINK_END" /> ব্যৱহাৰ কৰক।</translation> <translation id="7078120482318506217">সকলো নেটৱৰ্ক</translation> <translation id="708060913198414444">অডিঅ' ঠিকনা প্ৰতি&লিপি কৰক</translation> @@ -5027,7 +5030,6 @@ <translation id="7099337801055912064">ডাঙৰ PPD ল‘ড কৰিব পৰা নগ‘ল। সৰ্বোচ্চ আকাৰ ২৫০ কেবি</translation> <translation id="7102687220333134671">স্বয়ংক্ৰিয়ভাৱে হোৱা আপডে’টৰ সুবিধাটো অন কৰা হ’ল</translation> <translation id="7102832101143475489">অনুৰোধটোৰ সময় উকলিল</translation> -<translation id="7105390788077117391">ইউএছবিৰ অগ্ৰাধিকাৰসমূহ</translation> <translation id="710640343305609397">নেটৱৰ্ক ছেটিংসমূহ খোলক</translation> <translation id="7108668606237948702">দিয়ক</translation> <translation id="7109543803214225826">শ্বৰ্টকাট আঁতৰোৱা হ’ল</translation> @@ -5056,7 +5058,6 @@ <translation id="7136694880210472378">ডিফ’ল্ট হিচাপে ছেট কৰক</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> লৈ স্বাগতম</translation> <translation id="7136993520339022828">কিবা আসোঁৱাহ হৈছে। অন্য প্ৰতিচ্ছবি বাছনি কৰি পুনৰ চেষ্টা কৰক।</translation> -<translation id="7138678301420049075">অন্য</translation> <translation id="713888829801648570">দুঃখিত, আপুনি অফলাইন হৈ থকাৰ কাৰণে আপোনাৰ পাছৱর্ড সত্যাপন কৰিব পৰা নগ’ল।</translation> <translation id="7140928199327930795">উপলব্ধ অন্য ডিভাইচ নহয়।</translation> <translation id="7141105143012495934">আপোনাৰ একাউণ্টৰ সবিশেষ পুনৰুদ্ধাৰ কৰিব নোৱাৰাৰ বাবে ছাইন ইন কৰিব পৰা নগ’ল। অনুগ্ৰহ কৰি আপোনাৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক বা আকৌ চেষ্টা কৰক।</translation> @@ -5654,6 +5655,7 @@ <translation id="786073089922909430">সেৱা: <ph name="ARC_PROCESS_NAME" /></translation> <translation id="7861215335140947162">&ডাউনল'ডসমূহ</translation> <translation id="7864539943188674973">ব্লুটুথ অক্ষম কৰক</translation> +<translation id="7866352732146932341">আপোনাৰ ডিভাইচত নিকটৱৰ্তী শ্বেয়াৰ কৰাৰ সুবিধাটো খোলা থাকিলে আপোনাৰ ওচৰে-পাজৰে থকা ডিভাইচসমূহ</translation> <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - যোৰা লগোৱা আছে</translation> <translation id="7870730066603611552">ছেটআপৰ পিছত ছিংকৰ বিকল্পসমূহৰ পৰ্যালোচনা কৰক</translation> <translation id="7870790288828963061">কিঅ'স্ক এপৰ কোনো নতুন সংস্কৰণ পোৱা নাই। আপডে'ট কৰিবলৈ একো নাই। অনুগ্ৰহ কৰি USB ষ্টিক আঁতৰাওক।</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb index 7a89562d..00776add 100644 --- a/chrome/app/resources/generated_resources_az.xtb +++ b/chrome/app/resources/generated_resources_az.xtb
@@ -425,6 +425,7 @@ <translation id="1500297251995790841">Naməlum cihaz [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Bu sahib hesabı çoxsaylı giriş sessiyasında ilk girilmiş hesab olmalıdır.</translation> <translation id="150411034776756821"><ph name="SITE" /> saytını silin</translation> +<translation id="1504311855864906891">Medianız üçün altyazılar əldə edin</translation> <translation id="1504551620756424144">Paylaşılmış qovluqlar <ph name="BASE_DIR" /> ünvanındakı Windows'da əlçatandır.</translation> <translation id="1506061864768559482">Axtarış mühərriki</translation> <translation id="1507170440449692343">Bu səhifə ilə kameranıza daxil olma bloklandı.</translation> @@ -1186,7 +1187,6 @@ <translation id="2396783860772170191">4 rəqəmli kodu daxil edin (0000-9999)</translation> <translation id="2399939490305346086">Təhlükəsizlik açarının giriş datası</translation> <translation id="2400664245143453337">Dərhal güncəlləmə tələb edilir</translation> -<translation id="2407481962792080328">Google Hesabınıza daxil olduqda, bu xüsusiyyət aktivləşir</translation> <translation id="2408018932941436077">Kart yadda saxlanılır</translation> <translation id="2408955596600435184">PİN kodunuzu daxil edin</translation> <translation id="241082044617551207">Naməlum plaqin</translation> @@ -3059,6 +3059,7 @@ <translation id="4657810666108475055">Tab axtarışı</translation> <translation id="465878909996028221">Yalnız http, https və fayl protokolları brauzer yönləndirməsini dəstəkləyir.</translation> <translation id="4659077111144409915">Əsas hesab</translation> +<translation id="4659126640776004816">Google Hesabınıza daxil olduqda, bu xüsusiyyət aktivləşir.</translation> <translation id="4660476621274971848">Gözlənilən versiya "<ph name="EXPECTED_VERSION" />" olsa da, versiya "<ph name="NEW_ID" />" idi.</translation> <translation id="4660540330091848931">Ölçüsü dəyişilir</translation> <translation id="4661407454952063730">Tətbiq datası kontaktlar, mesajlar və fotolar daxil olmaqla, tətbiq tərəfindən yadda saxlanılan (developer ayarlarından asılı olaraq) istənilən data ola bilər.</translation> @@ -3124,7 +3125,6 @@ <translation id="4750394297954878236">Təkliflər</translation> <translation id="475088594373173692">İlk istifadəçi</translation> <translation id="4751476147751820511">Hərəkət və ışıq sensorları</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" /> cihazını qoşmaq üçün Ayarları açın</translation> <translation id="4756378406049221019">Dayandırın/Yenidən yükləyin</translation> <translation id="4756388243121344051">&Tarixçə</translation> <translation id="4759238208242260848">Endirmələr</translation> @@ -5012,6 +5012,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 RSA Şifrələmə ilə</translation> <translation id="7075625805486468288">HTTPS/SSL sertifikatları və ayarlarınızı idarə edin</translation> <translation id="7076293881109082629">Hesaba giriş</translation> +<translation id="7076878155205969899">Səsləri səssiz rejimə keçirin</translation> <translation id="7077829361966535409">Hesaba giriş səhifəsi cari proksi ayarlarını istifadə edərək yüklənə bilmədi. <ph name="GAIA_RELOAD_LINK_START" />Yenidən hesaba girin<ph name="GAIA_RELOAD_LINK_END" />, və ya fərqli <ph name="PROXY_SETTINGS_LINK_START" />proksi ayarları<ph name="PROXY_SETTINGS_LINK_END" /> istifadə edin.</translation> <translation id="7078120482318506217">Bütün şəbəkələr</translation> <translation id="708060913198414444">Audio ünvanını kopyalayın</translation> @@ -5032,7 +5033,6 @@ <translation id="7099337801055912064">Böyük PPD əlavə etmək mümkün deyil. Maksimum ölçü 250kB-dır.</translation> <translation id="7102687220333134671">Avtomatik yeniliklər aktiv edildi</translation> <translation id="7102832101143475489">Sorğunun vaxtı bitib</translation> -<translation id="7105390788077117391">USB tərcihləri</translation> <translation id="710640343305609397">Şəbəkə ayarlarını açın</translation> <translation id="7108338896283013870">Gizlədin</translation> <translation id="7108668606237948702">enter</translation> @@ -5062,7 +5062,6 @@ <translation id="7136694880210472378">Defolt edin</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> məhsuluna xoş gəlmisiniz</translation> <translation id="7136993520339022828">Xəta baş verdi. Fərqli şəkil seçin və yenidən cəhd edin.</translation> -<translation id="7138678301420049075">Digər</translation> <translation id="713888829801648570">Üzr istəyirik, oflayn olduğunuz üçün parolunuz doğrulana bilməz.</translation> <translation id="7140928199327930795">Başqa əlçatan cihaz yoxdur.</translation> <translation id="7141105143012495934">Sign-sizin hesab ayrıntıları alına bilməz, çünki uğursuz oldu. Sizin administratoru ilə əlaqə və ya yenidən cəhd edin.</translation> @@ -6123,6 +6122,7 @@ <translation id="8428213095426709021">Ayarlar</translation> <translation id="8428271547607112339">Məktəb hesabı əlavə edin</translation> <translation id="8428628598981198790">Təhlükəsizlik açarından bu saytda istifadə edə bilməzsiniz</translation> +<translation id="8428634594422941299">Anladım</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> ərzində çıxış edəcəksiniz</translation> <translation id="8431190899827883166">Tabları göstərin</translation> <translation id="8431909052837336408">SIM PIN kodu dəyişin</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb index 40fa5814..9b501ec 100644 --- a/chrome/app/resources/generated_resources_be.xtb +++ b/chrome/app/resources/generated_resources_be.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">Невядомая прылада [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">У сеансе з уваходам у некалькі ўліковых запісаў гэты ўліковы запіс уладальніка павінен быць першым.</translation> <translation id="150411034776756821">Выдаліць <ph name="SITE" /></translation> +<translation id="1504311855864906891">Ствараць субцітры для медыязмесціва</translation> <translation id="1504551620756424144">Абагуленыя папкі даступныя ў сістэме Windows у каталозе "<ph name="BASE_DIR" />".</translation> <translation id="1506061864768559482">Пошукавая сістэма</translation> <translation id="1507170440449692343">Гэтай старонцы быў заблакіраваны доступ да вашай камеры.</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">Увядзіце 4-значны PIN-код (0000–9999)</translation> <translation id="2399939490305346086">Уліковыя даныя ключа бяспекі</translation> <translation id="2400664245143453337">Патрабуецца неадкладнае абнаўленне</translation> -<translation id="2407481962792080328">Гэта функцыя будзе ўключацца пры ўваходзе ва Уліковы запіс Google</translation> <translation id="2408018932941436077">Ідзе захаванне даных карткі</translation> <translation id="2408955596600435184">Увядзіце PIN-код</translation> <translation id="241082044617551207">Невядомая ўбудова</translation> @@ -3066,6 +3066,7 @@ <translation id="4657810666108475055">Пошук укладак</translation> <translation id="465878909996028221">Для перанакіравання з браўзера падтрымліваюцца толькі пратаколы "http", "https" і "file".</translation> <translation id="4659077111144409915">Асноўны ўліковы запіс</translation> +<translation id="4659126640776004816">Гэта функцыя будзе ўключацца пры ўваходзе ва Уліковы запіс Google.</translation> <translation id="4660476621274971848">Чакалася версія "<ph name="EXPECTED_VERSION" />", фактычная версія – "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">Змяненне памеру</translation> <translation id="4661407454952063730">Даныя праграм – гэта любыя даныя, якія захоўваюцца праграмай (у залежнасці ад налад распрацоўшчыка), у тым ліку кантакты, паведамленні і фота.</translation> @@ -3131,7 +3132,6 @@ <translation id="4750394297954878236">Прапановы</translation> <translation id="475088594373173692">Першы карыстальнік</translation> <translation id="4751476147751820511">Датчыкі руху або святла</translation> -<translation id="4752124003533492687">Каб падключыць прыладу "<ph name="USB_DEVICE_NAME" />", адкрыйце Налады</translation> <translation id="4756378406049221019">Спыніць/Перазагрузіць</translation> <translation id="4756388243121344051">&Гісторыя</translation> <translation id="4759238208242260848">Спампоўкі</translation> @@ -5021,6 +5021,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 з шыфраваннем RSA</translation> <translation id="7075625805486468288">Кіраванне наладамі і сертыфікатамі HTTPS/SSL</translation> <translation id="7076293881109082629">Уваход</translation> +<translation id="7076878155205969899">Выключыць гук</translation> <translation id="7077829361966535409">Не ўдалося загрузіць старонку ўваходу пры бягучых наладах проксі-сервера. <ph name="GAIA_RELOAD_LINK_START" />Паўтарыце спробу ўваходу<ph name="GAIA_RELOAD_LINK_END" /> або скарыстайце іншыя <ph name="PROXY_SETTINGS_LINK_START" />налады проксі-сервера<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Усе сеткі</translation> <translation id="708060913198414444">К&апіраваць адрас аўдыя</translation> @@ -5041,7 +5042,6 @@ <translation id="7099337801055912064">Не ўдалося загрузіць вялікі файл PPD. Максімальны памер – 250 КБ.</translation> <translation id="7102687220333134671">Аўтаматычныя абнаўленні ўключаны</translation> <translation id="7102832101143475489">Запыт пратэрмінаваны</translation> -<translation id="7105390788077117391">Параметры USB</translation> <translation id="710640343305609397">Адкрыць налады сеткі</translation> <translation id="7108338896283013870">Схаваць</translation> <translation id="7108668606237948702">Enter</translation> @@ -5071,7 +5071,6 @@ <translation id="7136694880210472378">Зрабіць стандартнай пошукавай сістэмай</translation> <translation id="7136984461011502314">Вітаем у <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Адбылася памылка. Выберыце іншы відарыс і паўтарыце спробу.</translation> -<translation id="7138678301420049075">Іншыя</translation> <translation id="713888829801648570">На жаль пароль спраўдзіць не ўдалося: вы па-за сеткай.</translation> <translation id="7140928199327930795">Няма іншых даступных прылад.</translation> <translation id="7141105143012495934">Уваход не выкананы: не ўдалося атрымаць даныя ўліковага запісу. Звярніцеся да адміністратара або паўтарыце спробу.</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index 3201e21..b9155565 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Четене и промяна на всичките ви данни на компютъра и в посещаваните от вас уебсайтове</translation> <translation id="1430915738399379752">Печат</translation> <translation id="1431188203598586230">Последна софтуерна актуализация</translation> +<translation id="1431402976894535801">Блокиране на сайтовете, така че да не знаят дали присъствате</translation> <translation id="1431432486300429272">Възможно е да използваме историята ви на сърфиране, за да персонализираме търсенето и други услуги на Google. Вие или някой от родителите ви можете да промените това по всяко време на адрес myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Управление на търсещите машини</translation> <translation id="1433811987160647649">Извеждане на запитване преди осъществяване на достъп</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Неизвестно устройство [<ph name="VENDOR_ID" />: <ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Този профил на собственик трябва да е първият, в който да се влезе, при сесия с централизиран вход.</translation> <translation id="150411034776756821">Премахване на <ph name="SITE" /></translation> +<translation id="1504311855864906891">Показване на надписи за мултимедийното съдържание</translation> <translation id="1504551620756424144">Споделените папки са налични в Windows в <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Търсеща машина</translation> <translation id="1507170440449692343">Достъпът на тази страница до камерата ви е блокиран.</translation> @@ -566,6 +568,7 @@ <translation id="1651008383952180276">Трябва да въведете един и същ пропуск два пъти</translation> <translation id="1652326691684645429">Активиране на „Споделяне наблизо“</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Добавете принтера към Google Отпечатване в облак, за да можете да печатате от всяко място.}other{Добавете # принтера към Google Отпечатване в облак, за да можете да печатате от всяко място.}}</translation> +<translation id="1653575510930452864">Копиране на връзка към текста</translation> <translation id="1656528038316521561">Плътност на фона</translation> <translation id="1657406563541664238">Помогнете ни да подобрим <ph name="PRODUCT_NAME" /> като автоматично изпращате на Google статистически данни за използването му и сигнали за сривове</translation> <translation id="1657937299377480641">За да влезете отново с цел достъп до образователни ресурси, помолете родител да ви предостави разрешение</translation> @@ -999,6 +1002,7 @@ <translation id="2178614541317717477">Компрометиране на сертифициращия орган</translation> <translation id="2182058453334755893">Копирано в буферната памет</translation> <translation id="2184515124301515068">Нека Chrome избира кога сайтовете да могат да възпроизвеждат звук (препоръчително)</translation> +<translation id="2187243482123994665">Присъствие на потребителя</translation> <translation id="2187675480456493911">Мрежата е синхронизирана с другите устройства в профила ви. Настройките, променени от други потребители, няма да се синхронизират. <ph name="LINK_BEGIN" />Научете повече<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Грешка при импортирането на сертификат на сървър</translation> <translation id="2187906491731510095">Разширенията бяха актуализирани</translation> @@ -1187,7 +1191,6 @@ <translation id="2396783860772170191">Въведете 4-цифрен ПИН (0000 – 9999)</translation> <translation id="2399939490305346086">Данни за вход от ключа за сигурност</translation> <translation id="2400664245143453337">Изисква се незабавна актуализация</translation> -<translation id="2407481962792080328">Когато влезете в профила си в Google, тази функция се включва</translation> <translation id="2408018932941436077">Картата се запазва</translation> <translation id="2408955596600435184">Въведете своя ПИН</translation> <translation id="241082044617551207">Неизвестна приставка</translation> @@ -1827,6 +1830,7 @@ <translation id="3163201441334626963">Неизвестен продукт <ph name="PRODUCT_ID" /> от доставчик <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Следните услуги помагат за защитата и безопасността на данните ви. Можете да изключите тези функции по всяко време.</translation> <translation id="3164329792803560526">Този раздел се споделя с(ъс) <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Извеждане на запитване, когато сайт иска да знае дали присъствате</translation> <translation id="3165390001037658081">Някои оператори може да блокират тази функция.</translation> <translation id="316652501498554287">Профили в G Suite for Education</translation> <translation id="3169472444629675720">Discover</translation> @@ -2946,6 +2950,7 @@ <translation id="4527186207340858212">Да се създаде ли нов потребителски профил за служебни цели?</translation> <translation id="452750746583162491">Преглед на синхронизираните ви данни</translation> <translation id="4530494379350999373">Произход</translation> +<translation id="4531924570968473143">Кого искате да добавите към това устройство <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Този сайт използва сензорите за движение.</translation> <translation id="4533846798469727141">Сега кажете „Hey Google“</translation> <translation id="4533985347672295764">Процесорно време</translation> @@ -3065,6 +3070,7 @@ <translation id="4657810666108475055">Търсене на раздели</translation> <translation id="465878909996028221">Само протоколите http, https и file се поддържат за пренасочвания на браузъра.</translation> <translation id="4659077111144409915">Основен профил</translation> +<translation id="4659126640776004816">Когато влезете в профила си в Google, тази функция се включва.</translation> <translation id="4660476621274971848">Очакваната версия е <ph name="EXPECTED_VERSION" />, но тя бе <ph name="NEW_ID" /></translation> <translation id="4660540330091848931">Преоразмерява се</translation> <translation id="4661407454952063730">Данните на приложенията могат да бъдат всяка запазена от тях информация (въз основа на настройките за програмисти), включително контакти, съобщения и снимки.</translation> @@ -3130,7 +3136,6 @@ <translation id="4750394297954878236">Предложения</translation> <translation id="475088594373173692">Първи потребител</translation> <translation id="4751476147751820511">Сензори за движение или светлина</translation> -<translation id="4752124003533492687">Отворете настройките, за да свържете <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Спиране/презареждане</translation> <translation id="4756388243121344051">&История</translation> <translation id="4759238208242260848">Изтегляния</translation> @@ -3978,6 +3983,7 @@ <translation id="5804241973901381774">Разрешения</translation> <translation id="5805697420284793859">Мениджър на прозорците</translation> <translation id="5806773519584576205">0° (по подразбиране)</translation> +<translation id="5808664694611589238">{0,plural, =1{Затваряне на прозореца в режим на гост}other{Затваряне на прозорците в режим на гост}}</translation> <translation id="5810809306422959727">Този профил не отговаря на условията за родителски контроли</translation> <translation id="5812674658566766066">Разгъване на всички</translation> <translation id="5814126672212206791">Тип на връзката</translation> @@ -4435,6 +4441,7 @@ <translation id="6344170822609224263">Достъп до списъка с мрежови връзки</translation> <translation id="6344576354370880196">Запазени принтери</translation> <translation id="6345418402353744910">Потребителското име и паролата ви се изискват за прокси сървъра <ph name="PROXY" />, така че администраторът да може да конфигурира мрежата ви</translation> +<translation id="6345878117466430440">Означаване като прочетено</translation> <translation id="6349101878882523185">Инсталиране на <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Синхронизирането не работи. Опитайте да излезете от профила си и отново да влезете в него.</translation> <translation id="6351063337294363751">Можете да изчистите данните за сърфирането си от това меню</translation> @@ -5021,6 +5028,7 @@ <translation id="7075513071073410194">PKCS 1 MD5 с RSA шифроване</translation> <translation id="7075625805486468288">Управление на настройките и HTTPS/SSL сертификатите</translation> <translation id="7076293881109082629">Влизате</translation> +<translation id="7076878155205969899">Спиране на звука</translation> <translation id="7077829361966535409">Зареждането на страницата за вход посредством текущите настройки на прокси сървъра не бе успешно. Моля, <ph name="GAIA_RELOAD_LINK_START" />опитайте отново да влезете в профила си<ph name="GAIA_RELOAD_LINK_END" /> или използвайте други <ph name="PROXY_SETTINGS_LINK_START" />настройки<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Всички мрежи</translation> <translation id="708060913198414444">К&опиране на адреса на аудиозаписа</translation> @@ -5041,7 +5049,6 @@ <translation id="7099337801055912064">PPD файлът е твърде голям, за да бъде зареден. Максималният размер е 250 КБ.</translation> <translation id="7102687220333134671">Автоматичните актуализации са включени</translation> <translation id="7102832101143475489">Времето за изчакване на заявката изтече</translation> -<translation id="7105390788077117391">Предпочитания за USB</translation> <translation id="710640343305609397">Отваряне на настройките за мрежата</translation> <translation id="7108338896283013870">Скриване</translation> <translation id="7108668606237948702">enter</translation> @@ -5071,7 +5078,6 @@ <translation id="7136694880210472378">Задаване като основна</translation> <translation id="7136984461011502314">Добре дошли в <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Възникна грешка. Моля, опитайте отново, като изберете други изображения.</translation> -<translation id="7138678301420049075">Друго</translation> <translation id="713888829801648570">За съжаление, паролата ви не можа да бъде потвърдена, защото сте офлайн.</translation> <translation id="7140928199327930795">Няма други налични устройства.</translation> <translation id="7141105143012495934">Влизането не бе успешно, тъй като данните за профила ви не можаха да се извлекат. Моля, свържете се с администратора си или опитайте отново.</translation> @@ -5178,6 +5184,7 @@ <translation id="7280649757394340890">Настройки за гласовете за синтезиран говор</translation> <translation id="7280877790564589615">Изисква се разрешение</translation> <translation id="7282992757463864530">Информационна лента</translation> +<translation id="7284411326658527427">Всеки човек има възможност да персонализира профила си и да запази данните си частни.</translation> <translation id="7287143125007575591">Достъпът е отказан.</translation> <translation id="7287411021188441799">Възстановяване на стандартния фон</translation> <translation id="7288013116963835700">Премахване на Linux за <ph name="DEVICE_TYPE" /></translation> @@ -5754,6 +5761,7 @@ <translation id="7963826112438303517">Асистент използва тези записи и гласовите ви заявки, за да създаде и актуализира гласовия ви модел, който се съхранява само на устройствата, на които сте включили Voice Match. Можете да прегледате гласовата активност или да обучите отново гласовия модел от настройките на Асистент.</translation> <translation id="7966241909927244760">К&опиране на адреса на изображението</translation> <translation id="7968072247663421402">Опции за доставчика</translation> +<translation id="7968198493605442410">Копиране на връзка към текста</translation> <translation id="7968742106503422125">Четене и промяна на данните, които копирате и поставяте</translation> <translation id="7968833647796919681">Активиране на събирането на данни за ефективността</translation> <translation id="7968982339740310781">Преглед на подробностите</translation> @@ -6134,6 +6142,7 @@ <translation id="8428213095426709021">Настройки</translation> <translation id="8428271547607112339">Нов училищен профил</translation> <translation id="8428628598981198790">Ключът ви за сигурност не може да се използва с този сайт</translation> +<translation id="8428634594422941299">Разбрах</translation> <translation id="84297032718407999">Ще излезете от профила си след <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Показване на докосванията</translation> <translation id="8431909052837336408">Промяна на ПИН за SIM картата</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index 39b270c..9352245 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">অজানা ডিভাইস [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">একাধিক সাইন-ইন সেশনে এই মালিক অ্যাকাউন্টটি প্রথম সাইন-ইন অ্যাকাউন্ট হতে হবে৷</translation> <translation id="150411034776756821"><ph name="SITE" /> সরান</translation> +<translation id="1504311855864906891">আপনার মিডিয়ার জন্য ক্যাপশন পেয়ে যান</translation> <translation id="1504551620756424144">শেয়ার করা ফোল্ডার, Windows-এর মধ্যে <ph name="BASE_DIR" />-এ পাওয়া যাবে।</translation> <translation id="1506061864768559482">সার্চ ইঞ্জিন</translation> <translation id="1507170440449692343">এই পৃষ্ঠাটিকে আপনার ক্যামেরা অ্যাক্সেস করা থেকে অবরুদ্ধ করা হয়েছে৷</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">৪ সংখ্যার পিন লিখুন (০০০০-৯৯৯৯)</translation> <translation id="2399939490305346086">নিরাপত্তা কীয়ের সাইন-ইন ডেটা</translation> <translation id="2400664245143453337">খুব তাড়াতাড়ি আপডেট করা দরকার</translation> -<translation id="2407481962792080328">আপনার Google অ্যাকাউন্টে সাইন-ইন করলে এই ফিচারটি চালু হয়ে যাবে</translation> <translation id="2408018932941436077">কার্ড সেভ করা হচ্ছে</translation> <translation id="2408955596600435184">আপনার পিন লিখুন</translation> <translation id="241082044617551207">অজানা প্লাগ-ইন</translation> @@ -3064,6 +3064,7 @@ <translation id="4657810666108475055">ট্যাব সার্চ করার বিকল্প</translation> <translation id="465878909996028221">ব্রাউজার রিডাইরেক্টের জন্য শুধুমাত্র http, https ও ফাইল প্রটোকল কাজ করে।</translation> <translation id="4659077111144409915">প্রাথমিক অ্যাকাউন্ট</translation> +<translation id="4659126640776004816">আপনার Google অ্যাকাউন্টে সাইন-ইন করলে এই ফিচারটি চালু হয়ে যাবে।</translation> <translation id="4660476621274971848">"<ph name="EXPECTED_VERSION" />" ভার্সনটি হওয়া উচিত ছিল, কিন্তু ভার্সনটি হল "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">রিসাইজ করা হচ্ছে</translation> <translation id="4661407454952063730">অ্যাপ ডেটা হল পরিচিতি, মেসেজ এবং ফটোর মতো যেকোনও ডেটা যা কোনও অ্যাপ (ডেভেলপার সেটিংসের উপরে ভিত্তি করে) সেভ করে রাখে।</translation> @@ -3129,7 +3130,6 @@ <translation id="4750394297954878236">প্রস্তাবনা</translation> <translation id="475088594373173692">প্রথম ব্যবহারকারী</translation> <translation id="4751476147751820511">মোশন বা হালকা সেন্সর</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" />-কে কানেক্ট করতে 'সেটিংস' খুলুন</translation> <translation id="4756378406049221019">বন্ধ করুন/রিলোড করুন</translation> <translation id="4756388243121344051">&ইতিহাস</translation> <translation id="4759238208242260848">ডাউনলোড</translation> @@ -5021,6 +5021,7 @@ <translation id="7075513071073410194">RSA এনক্রিপশান সহ PKCS #1 MD5</translation> <translation id="7075625805486468288">HTTPS/SSL শংসাপত্র এবং সেটিংস পরিচালনা করুন</translation> <translation id="7076293881109082629">প্রবেশ করুন হচ্ছে</translation> +<translation id="7076878155205969899">সাউন্ড মিউট করুন</translation> <translation id="7077829361966535409">সাইন-ইন পৃষ্ঠাটি বর্তমান প্রক্সি সেটিংস ব্যবহার করে লোড করা যায়নি৷ অনুগ্রহ করে <ph name="GAIA_RELOAD_LINK_START" />আবার সাইন-ইনের চেষ্টা করুন<ph name="GAIA_RELOAD_LINK_END" /> অথবা অন্য কোনও <ph name="PROXY_SETTINGS_LINK_START" />প্রক্সি সেটিংস<ph name="PROXY_SETTINGS_LINK_END" /> ব্যবহার করুন৷</translation> <translation id="7078120482318506217">সকল নেটওয়ার্কগুলি</translation> <translation id="708060913198414444">অ&ডিও ঠিকানা কপি করুন</translation> @@ -5041,7 +5042,6 @@ <translation id="7099337801055912064">বড় পিপিডি লোড করা যাবে না। সর্বাধিক সাইজ ২৫০ কেবি।</translation> <translation id="7102687220333134671">অটোমেটিক আপডেট চালু করা হয়েছে</translation> <translation id="7102832101143475489">অনুরোধের সময় শেষ হয়ে গেছে</translation> -<translation id="7105390788077117391">ইউএসবি সংক্রান্ত পছন্দ</translation> <translation id="710640343305609397">নেটওয়ার্ক সেটিংস খুলুন</translation> <translation id="7108338896283013870">লুকান</translation> <translation id="7108668606237948702">লিখুন</translation> @@ -5071,7 +5071,6 @@ <translation id="7136694880210472378">ডিফল্ট করুন</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" />-তে আপনাকে স্বাগতম</translation> <translation id="7136993520339022828">একটি সমস্যা হয়েছে। অনুগ্রহ করে অন্য একটি ছবি বেছে নিয়ে আবার চেষ্টা করুন।</translation> -<translation id="7138678301420049075">অন্যান্য</translation> <translation id="713888829801648570">দুঃখিত, আপনি অফলাইনে থাকায় আপনার পাসওয়ার্ড যাচাই করা যায়নি৷</translation> <translation id="7140928199327930795">অন্য কোনো উপলব্ধ ডিভাইস নেই৷</translation> <translation id="7141105143012495934">আপনার অ্যাকাউন্টের বিশদ বিবরণ পুনরুদ্ধার করতে না পারায় সাইন-ইন ব্যর্থ হয়েছে। অনুগ্রহ করে আপনার প্রশাসকের সাথে যোগাযোগ করুন অথবা আবার চেষ্টা করুন।</translation> @@ -6132,6 +6131,7 @@ <translation id="8428213095426709021">সেটিংস</translation> <translation id="8428271547607112339">স্কুলের অ্যাকাউন্ট যোগ করুন</translation> <translation id="8428628598981198790">এই সাইটে আপনার নিরাপত্তা কী ব্যবহার করা যাবে না</translation> +<translation id="8428634594422941299">বুঝেছি</translation> <translation id="84297032718407999">আপনি <ph name="LOGOUT_TIME_LEFT" />-এ সাইন-আউট হয়ে যাবেন</translation> <translation id="8431190899827883166">ট্যাপগুলি দেখুন</translation> <translation id="8431909052837336408">সিম পিন পরিবর্তন করুন</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb index 22b4a90..a714685 100644 --- a/chrome/app/resources/generated_resources_bs.xtb +++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">Nepoznat uređaj [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Ovaj vlasnik računa mora biti prvi prijavljeni račun u sesiji višestruke prijave.</translation> <translation id="150411034776756821">Ukloni <ph name="SITE" /></translation> +<translation id="1504311855864906891">Preuzmite titlove za svoje medije</translation> <translation id="1504551620756424144">Dijeljeni folderi su dostupni u Windowsu na <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Pretraživač</translation> <translation id="1507170440449692343">Ovoj stranici je blokiran pristup vašoj kameri.</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">Unesite četverocifreni pin (0000–9999)</translation> <translation id="2399939490305346086">Podaci za prijavu sigurnosnog ključa</translation> <translation id="2400664245143453337">Potrebno je odmah ažurirati</translation> -<translation id="2407481962792080328">Kada se prijavite na Google račun, ova funkcija se uključuje</translation> <translation id="2408018932941436077">Pohranjivanje kartice</translation> <translation id="2408955596600435184">Unesite PIN</translation> <translation id="241082044617551207">Nepoznati dodatak</translation> @@ -3066,6 +3066,7 @@ <translation id="4657810666108475055">Pretraživanje kartica</translation> <translation id="465878909996028221">Za preusmjeravanja preglednika su podržani samo protokoli http, https i protokoli za fajlove.</translation> <translation id="4659077111144409915">Primarni račun</translation> +<translation id="4659126640776004816">Kada se prijavite na Google račun, ova funkcija se uključuje.</translation> <translation id="4660476621274971848">Očekivana je verzija "<ph name="EXPECTED_VERSION" />", ali je bila verzija "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">Promjena veličine je u toku</translation> <translation id="4661407454952063730">Podaci aplikacija mogu biti bilo koji podaci koje je aplikacija sačuvala (na osnovu postavki programera), uključujući podatke kao što su kontakti, poruke i fotografije.</translation> @@ -3131,7 +3132,6 @@ <translation id="4750394297954878236">Prijedlozi</translation> <translation id="475088594373173692">Prvi korisnik</translation> <translation id="4751476147751820511">Senzori pokreta ili svjetla</translation> -<translation id="4752124003533492687">Otvorite postavke da povežete uređaj <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Zaustavi/učitaj ponovo</translation> <translation id="4756388243121344051">&Historija</translation> <translation id="4759238208242260848">Preuzimanja</translation> @@ -5021,6 +5021,7 @@ <translation id="7075513071073410194">PKCS br. 1 MD5 sa RSA šifriranjem</translation> <translation id="7075625805486468288">Upravljajte HTTPS/SSL potvrdama i postavkama</translation> <translation id="7076293881109082629">Prijavljivanje</translation> +<translation id="7076878155205969899">Isključivanje zvuka</translation> <translation id="7077829361966535409">Učitavanje stranice za prijavu nije uspjelo s trenutnim postavkama proksi servera. <ph name="GAIA_RELOAD_LINK_START" />Pokušajte se ponovo prijaviti<ph name="GAIA_RELOAD_LINK_END" /> ili koristite druge <ph name="PROXY_SETTINGS_LINK_START" />postavke za proksi server<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Sve mreže</translation> <translation id="708060913198414444">K&opiraj adresu audiozapisa</translation> @@ -5041,7 +5042,6 @@ <translation id="7099337801055912064">Nije moguće učitati veliki PPD. Maksimalna veličina je 250 kB.</translation> <translation id="7102687220333134671">Automatska su ažuriranja uključena</translation> <translation id="7102832101143475489">Zahtjev je istekao.</translation> -<translation id="7105390788077117391">Postavke USB-a</translation> <translation id="710640343305609397">Otvori postavke mreže</translation> <translation id="7108338896283013870">Sakrij</translation> <translation id="7108668606237948702">enter</translation> @@ -5071,7 +5071,6 @@ <translation id="7136694880210472378">Postavi kao zadano</translation> <translation id="7136984461011502314">Dobro došli u <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Došlo je do greške. Pokušajte ponovo odabirom drugih slika.</translation> -<translation id="7138678301420049075">Drugo</translation> <translation id="713888829801648570">Žao nam je, ne možemo potvrditi vašu lozinku jer ste van mreže.</translation> <translation id="7140928199327930795">Nema drugih dostupnih uređaja.</translation> <translation id="7141105143012495934">Prijava nije uspjela jer nije bilo moguće preuzeti vaše podatke računa. Kontaktirajte administratora ili pokušajte ponovo.</translation> @@ -6134,6 +6133,7 @@ <translation id="8428213095426709021">Postavke</translation> <translation id="8428271547607112339">Dodaj školski račun</translation> <translation id="8428628598981198790">Sigurnosni ključ se ne može koristiti s ovom web lokacijom</translation> +<translation id="8428634594422941299">Shvaćam</translation> <translation id="84297032718407999">Bit ćete odjavljeni za <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Prikaži dodire</translation> <translation id="8431909052837336408">Promijeni PIN za SIM</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index add22ae..e0dc4433 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Llegir i canviar totes les dades de l'ordinador i els llocs web que es visitin</translation> <translation id="1430915738399379752">Imprimeix</translation> <translation id="1431188203598586230">Darrera actualització de programari</translation> +<translation id="1431402976894535801">Bloqueja els llocs web perquè no sàpiguen quan estàs present</translation> <translation id="1431432486300429272">És possible que Google utilitzi el teu historial de navegació per personalitzar la Cerca i altres serveis de Google. Tu o els teus pares podeu canviar aquesta opció de configuració sempre que vulgueu des de myaccount.google.com/activitycontrols/search.</translation> <translation id="1432581352905426595">Gestiona els motors de cerca</translation> <translation id="1433811987160647649">Pregunta abans d'accedir</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Dispositiu desconegut [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Aquest compte de propietari ha de ser el primer compte amb la sessió iniciada en un inici de sessió múltiple.</translation> <translation id="150411034776756821">Suprimeix <ph name="SITE" /></translation> +<translation id="1504311855864906891">Obtén subtítols per al teu contingut multimèdia</translation> <translation id="1504551620756424144">Les carpetes compartides estan disponibles a Windows a <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Motor de cerca</translation> <translation id="1507170440449692343">Aquesta pàgina no té permís per accedir a la càmera.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Has d'escriure la mateixa frase de contrasenya dues vegades</translation> <translation id="1652326691684645429">Activa Compartició Nearby</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Afegiu la impressora a Google Cloud Print per poder imprimir des de qualsevol lloc.}other{Afegiu # impressores a Google Cloud Print per poder imprimir des de qualsevol lloc.}}</translation> +<translation id="1653575510930452864">Copia l'enllaç a text</translation> <translation id="1656528038316521561">Opacitat del fons</translation> <translation id="1657406563541664238">Ajuda'ns a millorar <ph name="PRODUCT_NAME" /> enviant estadístiques d'ús i informes d'error a Google automàticament.</translation> <translation id="1657937299377480641">Per tornar a iniciar la sessió per accedir als recursos educatius, has de demanar permís als teus pares</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">Compromís de CA</translation> <translation id="2182058453334755893">S'ha copiat al porta-retalls</translation> <translation id="2184515124301515068">Deixa que Chrome triï quan poden reproduir so els llocs web (opció recomanada)</translation> +<translation id="2187243482123994665">Presència d'usuari</translation> <translation id="2187675480456493911">Està sincronitzada amb altres dispositius del teu compte. Les opcions de configuració que modifiquin altres usuaris no se sincronitzaran. <ph name="LINK_BEGIN" />Més informació<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Error d'importació del certificat del servidor</translation> <translation id="2187906491731510095">S'han actualitzat les extensions</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Introdueix un PIN de 4 dígits (0000-9999)</translation> <translation id="2399939490305346086">Dades d'inici de sessió de la clau de seguretat</translation> <translation id="2400664245143453337">Cal una actualització immediatament</translation> -<translation id="2407481962792080328">En iniciar la sessió al Compte de Google, aquesta funció està sempre activada</translation> <translation id="2408018932941436077">S'està desant la targeta</translation> <translation id="2408955596600435184">Introdueix el PIN</translation> <translation id="241082044617551207">Connector desconegut</translation> @@ -1286,7 +1289,7 @@ <translation id="2505127913256479918">Aquest compte supervisat se suprimirà aviat</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{Pantalla #}other{Pantalla #}}</translation> <translation id="2505402373176859469"><ph name="RECEIVED_AMOUNT" /> de <ph name="TOTAL_SIZE" /></translation> -<translation id="250642123108534012">Els dispositius a prop teu quan la funció Compartició Nearby està oberta al seu dispositiu</translation> +<translation id="250642123108534012">Els dispositius a prop teu quan la funció Compartició Nearby estigui oberta en aquests dispositius</translation> <translation id="250704661983564564">Disposició de les pantalles</translation> <translation id="2507253002925770350">S'ha suprimit el tiquet</translation> <translation id="2507397597949272797"><ph name="NAME" /> està en pausa</translation> @@ -1829,6 +1832,7 @@ <translation id="3163201441334626963">Producte desconegut <ph name="PRODUCT_ID" /> del proveïdor <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Els serveis següents ajuden a protegir les teves dades. Pots desactivar aquestes funcions en qualsevol moment.</translation> <translation id="3164329792803560526">S'està compartint aquesta pestanya amb <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Pregunta'm quan un lloc web vulgui saber quan estic present</translation> <translation id="3165390001037658081">Alguns operadors de telefonia mòbil poden bloquejar aquesta funció.</translation> <translation id="316652501498554287">Comptes de G Suite for Education</translation> <translation id="3169472444629675720">Discover</translation> @@ -2945,6 +2949,7 @@ <translation id="4527186207340858212">Vols crear un perfil nou per a la feina?</translation> <translation id="452750746583162491">Revisa les teves dades sincronitzades</translation> <translation id="4530494379350999373">Origen</translation> +<translation id="4531924570968473143">A qui t'agradaria afegir al dispositiu <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Aquest lloc web utilitza sensors de moviment.</translation> <translation id="4533846798469727141">Ara digues "Ok Google"</translation> <translation id="4533985347672295764">Temps de la CPU</translation> @@ -3064,6 +3069,7 @@ <translation id="4657810666108475055">Cerca de pestanyes</translation> <translation id="465878909996028221">Les redireccions del navegador només admeten els protocols http, https i de fitxers.</translation> <translation id="4659077111144409915">Compte principal</translation> +<translation id="4659126640776004816">En iniciar la sessió al Compte de Google, aquesta funció està sempre activada.</translation> <translation id="4660476621274971848">La versió esperada era <ph name="EXPECTED_VERSION" />, però la que hi havia era <ph name="NEW_ID" /></translation> <translation id="4660540330091848931">S'està canviant la mida</translation> <translation id="4661407454952063730">Les dades de les aplicacions poden ser qualsevol mena de dada que hagi desat una aplicació (en funció de la configuració del desenvolupador), com ara els contactes, els missatges i les fotos.</translation> @@ -3129,7 +3135,6 @@ <translation id="4750394297954878236">Suggeriments</translation> <translation id="475088594373173692">Primer usuari</translation> <translation id="4751476147751820511">Sensors de moviment o de llum</translation> -<translation id="4752124003533492687">Obre Configuració per connectar <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Atura/Torna a carregar</translation> <translation id="4756388243121344051">&Historial</translation> <translation id="4759238208242260848">Baixades</translation> @@ -3978,6 +3983,7 @@ <translation id="5804241973901381774">Permisos</translation> <translation id="5805697420284793859">Gestor de finestres</translation> <translation id="5806773519584576205">0° (valor predeterminat)</translation> +<translation id="5808664694611589238">{0,plural, =1{Tanca les finestres de convidat}other{Tanca les finestres de convidat}}</translation> <translation id="5810809306422959727">Aquest compte no és apte per als controls parentals</translation> <translation id="5812674658566766066">Desplega-ho tot</translation> <translation id="5814126672212206791">Tipus de connexió</translation> @@ -4435,6 +4441,7 @@ <translation id="6344170822609224263">Accedir a la llista de connexions de xarxa</translation> <translation id="6344576354370880196">Impressores desades</translation> <translation id="6345418402353744910">El servidor intermediari <ph name="PROXY" /> requereix el teu nom d'usuari i la teva contrasenya perquè l'administrador pugui configurar la xarxa</translation> +<translation id="6345878117466430440">Marca com a llegit</translation> <translation id="6349101878882523185">Instal·la <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">La sincronització no funciona. Tanca la sessió i torna-la a iniciar.</translation> <translation id="6351063337294363751">Pots esborrar les dades de navegació des d'aquest menú</translation> @@ -5021,6 +5028,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 amb encriptació RSA</translation> <translation id="7075625805486468288">Gestiona els certificats i la configuració d'HTTPS/SSL</translation> <translation id="7076293881109082629">Inicia la sessió</translation> +<translation id="7076878155205969899">Silencia el so</translation> <translation id="7077829361966535409">La pàgina d'inici de sessió no s'ha pogut carregar amb la configuració de servidor intermediari actual. <ph name="GAIA_RELOAD_LINK_START" />Proveu de tornar a iniciar la sessió<ph name="GAIA_RELOAD_LINK_END" /> o utilitzeu una <ph name="PROXY_SETTINGS_LINK_START" />configuració de servidor intermediari<ph name="PROXY_SETTINGS_LINK_END" /> diferent.</translation> <translation id="7078120482318506217">Totes les xarxes</translation> <translation id="708060913198414444">C&opia l'adreça de l'àudio</translation> @@ -5041,7 +5049,6 @@ <translation id="7099337801055912064">No es poden carregar fitxers PPD grans. La mida màxima és de 250 kB.</translation> <translation id="7102687220333134671">Les actualitzacions automàtiques estan activades</translation> <translation id="7102832101143475489">S'ha esgotat el temps d'espera de la sol·licitud</translation> -<translation id="7105390788077117391">Preferències d'USB</translation> <translation id="710640343305609397">Obre la configuració de la xarxa</translation> <translation id="7108338896283013870">Amaga</translation> <translation id="7108668606237948702">retorn</translation> @@ -5071,7 +5078,6 @@ <translation id="7136694880210472378">Estableix com a predeterminat</translation> <translation id="7136984461011502314">Benvingut a <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">S'ha produït un error. Tria altres imatges per torna-ho a provar.</translation> -<translation id="7138678301420049075">Altres</translation> <translation id="713888829801648570">La contrasenya no s'ha pogut verificar perquè no estàs connectat a Internet.</translation> <translation id="7140928199327930795">No hi ha cap altre dispositiu disponible.</translation> <translation id="7141105143012495934">S'ha produït un problema en iniciar la sessió perquè no s'ha pogut recuperar la informació del compte. Contacteu amb l'administrador o torneu a provar-ho.</translation> @@ -5178,6 +5184,7 @@ <translation id="7280649757394340890">Configuració de la veu de text a parla</translation> <translation id="7280877790564589615">Permís sol·licitat</translation> <translation id="7282992757463864530">Barra d'informació</translation> +<translation id="7284411326658527427">Cada persona pot personalitzar el seu compte i mantenir la privadesa de les dades.</translation> <translation id="7287143125007575591">Accés denegat.</translation> <translation id="7287411021188441799">Restaura el fons predeterminat</translation> <translation id="7288013116963835700">Suprimeix Linux a <ph name="DEVICE_TYPE" /></translation> @@ -5671,7 +5678,7 @@ <translation id="786073089922909430">Servei: <ph name="ARC_PROCESS_NAME" /></translation> <translation id="7861215335140947162">&Baixades</translation> <translation id="7864539943188674973">Desactiva el Bluetooth</translation> -<translation id="7866352732146932341">Els dispositius a prop teu quan la funció Compartició Nearby està oberta al teu dispositiu</translation> +<translation id="7866352732146932341">Els dispositius a prop teu quan la funció Compartició Nearby estigui oberta al teu dispositiu</translation> <translation id="786957569166715433"><ph name="DEVICE_NAME" />: vinculat</translation> <translation id="7870730066603611552">Mostra les opcions de sincronització en finalitzar la configuració</translation> <translation id="7870790288828963061">No s'ha trobat cap aplicació de Quiosc amb una versió més nova. No hi ha res per actualitzar. Extraieu la memòria USB.</translation> @@ -5754,6 +5761,7 @@ <translation id="7963826112438303517">L'Assistent utilitza aquestes gravacions i les sol·licituds de veu per crear i actualitzar el teu model de veu, que només es desa als dispositius en què has activat Voice Match. Consulta l'activitat de veu o torna a entrenar el model a Configuració de l'Assistent.</translation> <translation id="7966241909927244760">C&opia l'adreça de la imatge</translation> <translation id="7968072247663421402">Opcions de proveïdors</translation> +<translation id="7968198493605442410">Copia l'enllaç a text</translation> <translation id="7968742106503422125">Llegir i modificar les dades que copies i enganxes</translation> <translation id="7968833647796919681">Activa la recollida de dades de rendiment</translation> <translation id="7968982339740310781">Mostra els detalls</translation> @@ -6134,6 +6142,7 @@ <translation id="8428213095426709021">Configuració</translation> <translation id="8428271547607112339">Afegeix un compte de centre educatiu</translation> <translation id="8428628598981198790">La clau de seguretat no es pot fer servir en aquest lloc web</translation> +<translation id="8428634594422941299">D'acord</translation> <translation id="84297032718407999">Es tancarà la sessió d'aquí a <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Mostra els tocs</translation> <translation id="8431909052837336408">Canvia el PIN de la SIM</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index b4e05f35..4603ac8 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Číst a upravovat všechna data v počítači a na navštívených webech</translation> <translation id="1430915738399379752">Tisk</translation> <translation id="1431188203598586230">Poslední aktualizace softwaru</translation> +<translation id="1431402976894535801">Nedovolit webům zjistit, kdy jste aktivní</translation> <translation id="1431432486300429272">Google může tvoji historii procházení používat k personalizaci Vyhledávání a dalších služeb Google. Toto chování můžeš ty nebo tvoji rodiče kdykoliv změnit na stránce myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Spravovat vyhledávače</translation> <translation id="1433811987160647649">Před přístupem se zeptat</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Neznámé zařízení [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Účet tohoto vlastníka musí být v relaci multiprofilu přihlášen jako první.</translation> <translation id="150411034776756821">Odebrat web <ph name="SITE" /></translation> +<translation id="1504311855864906891">Generovat k médiím titulky</translation> <translation id="1504551620756424144">Sdílené složky jsou ve Windows k dispozici v adresáři <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Vyhledávač</translation> <translation id="1507170440449692343">Přístup této stránky k vaší kameře je zablokován.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Musíte zadat dvakrát stejnou heslovou frázi</translation> <translation id="1652326691684645429">Aktivovat Sdílení nablízko</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Přidejte tiskárnu do služby Google Cloud Print a tiskněte odkudkoli.}few{Přidejte # tiskárny do služby Google Cloud Print a tiskněte odkudkoli.}many{Přidejte # tiskárny do služby Google Cloud Print a tiskněte odkudkoli.}other{Přidejte # tiskáren do služby Google Cloud Print a tiskněte odkudkoli.}}</translation> +<translation id="1653575510930452864">Kopírovat odkaz na text</translation> <translation id="1656528038316521561">Neprůhlednost pozadí</translation> <translation id="1657406563541664238">Pomozte <ph name="PRODUCT_NAME" /> zlepšit tím, že budete Googlu automaticky zasílat statistiky o využívání a zprávy o selhání aplikace</translation> <translation id="1657937299377480641">Jestli se chceš znovu přihlásit kvůli přístupu ke vzdělávacím materiálům, požádej rodiče, aby ti udělili oprávnění</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">Ohrožení bezpečnosti certifikační autority</translation> <translation id="2182058453334755893">Zkopírováno do schránky</translation> <translation id="2184515124301515068">Nechat Chrome zvolit, kdy weby mohou přehrávat zvuk (doporučeno)</translation> +<translation id="2187243482123994665">Aktivita uživatele</translation> <translation id="2187675480456493911">Synchronizuje se s jinými zařízeními v účtu. Změny nastavení provedené jinými uživateli se nesynchronizují. <ph name="LINK_BEGIN" />Další informace<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Chyba při importu certifikátu serveru</translation> <translation id="2187906491731510095">Rozšíření byla aktualizována</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Zadejte čtyřmístný kód PIN (0000–9999)</translation> <translation id="2399939490305346086">Přihlašovací údaje na bezpečnostním klíči</translation> <translation id="2400664245143453337">Je vyžadována okamžitá aktualizace</translation> -<translation id="2407481962792080328">Když se přihlásíte k účtu Google, je tato funkce zapnutá</translation> <translation id="2408018932941436077">Ukládání karty</translation> <translation id="2408955596600435184">Zadejte PIN</translation> <translation id="241082044617551207">Neznámý plugin</translation> @@ -1829,6 +1832,7 @@ <translation id="3163201441334626963">Neznámý produkt <ph name="PRODUCT_ID" /> od dodavatele <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Následující služby vám pomáhají ochránit a zabezpečit data. Tyto funkce můžete kdykoli vypnout.</translation> <translation id="3164329792803560526">Tato karta je sdílena s aplikací <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Zeptat se, když chce web vědět, kdy jste aktivní</translation> <translation id="3165390001037658081">Někteří operátoři mohou tuto funkci blokovat.</translation> <translation id="316652501498554287">Účty G Suite pro vzdělávání</translation> <translation id="3169472444629675720">Discover</translation> @@ -2945,6 +2949,7 @@ <translation id="4527186207340858212">Vytvořit nový profil pro práci?</translation> <translation id="452750746583162491">Zkontrolovat synchronizovaná data</translation> <translation id="4530494379350999373">Původ</translation> +<translation id="4531924570968473143">Koho chcete do tohoto zařízení <ph name="DEVICE_TYPE" /> přidat?</translation> <translation id="4532646538815530781">Tento web používá senzory pohybu.</translation> <translation id="4533846798469727141">Teď řekněte „Ok Google“</translation> <translation id="4533985347672295764">Doba využití procesoru</translation> @@ -3064,6 +3069,7 @@ <translation id="4657810666108475055">Vyhledávání v kartách</translation> <translation id="465878909996028221">U přesměrování prohlížeče jsou podporovány pouze protokoly http, https a file.</translation> <translation id="4659077111144409915">Primární účet</translation> +<translation id="4659126640776004816">Když se přihlásíte k účtu Google, tato funkce se zapne.</translation> <translation id="4660476621274971848">Byla očekávána verze <ph name="EXPECTED_VERSION" />, ale použita byla verze <ph name="NEW_ID" /></translation> <translation id="4660540330091848931">Probíhá změna velikosti</translation> <translation id="4661407454952063730">Data aplikací mohou zahrnovat jakákoliv data, která uložila aplikace (v závislosti na nastavení vývojáře), včetně dat, jako jsou kontakty, zprávy a fotky.</translation> @@ -3129,7 +3135,6 @@ <translation id="4750394297954878236">Návrhy</translation> <translation id="475088594373173692">První uživatel</translation> <translation id="4751476147751820511">Senzory pohybu nebo světla</translation> -<translation id="4752124003533492687">Otevřete Nastavení a připojte zařízení <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Zastavit / načíst znovu</translation> <translation id="4756388243121344051">Historie</translation> <translation id="4759238208242260848">Stažené soubory</translation> @@ -3976,6 +3981,7 @@ <translation id="5804241973901381774">Oprávnění</translation> <translation id="5805697420284793859">Správce oken</translation> <translation id="5806773519584576205">0° (výchozí)</translation> +<translation id="5808664694611589238">{0,plural, =1{Zavřít okna hosta}few{Zavřít okna hosta}many{Zavřít okna hosta}other{Zavřít okna hosta}}</translation> <translation id="5810809306422959727">Tento účet nemůže používat rodičovskou kontrolu</translation> <translation id="5812674658566766066">Rozbalit vše</translation> <translation id="5814126672212206791">Typ připojení</translation> @@ -4433,6 +4439,7 @@ <translation id="6344170822609224263">Zobrazení seznamu síťových připojení</translation> <translation id="6344576354370880196">Uložené tiskárny</translation> <translation id="6345418402353744910">Proxy <ph name="PROXY" /> vyžaduje zadání uživatelského jména a hesla, aby administrátor mohl nastavit síť</translation> +<translation id="6345878117466430440">Označit jako přečtené</translation> <translation id="6349101878882523185">Nainstalovat aplikaci <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Synchronizace nefunguje. Zkuste se odhlásit a znovu přihlásit.</translation> <translation id="6351063337294363751">Z této nabídky lze vymazat údaje o prohlížení</translation> @@ -5019,6 +5026,7 @@ <translation id="7075513071073410194">Šifrování PKCS #1 MD5 s RSA</translation> <translation id="7075625805486468288">Správa certifikátů a nastavení protokolů HTTPS/SSL</translation> <translation id="7076293881109082629">Přihlášení</translation> +<translation id="7076878155205969899">Vypnout zvuk</translation> <translation id="7077829361966535409">Přihlašovací stránku se pomocí aktuálního nastavení proxy serveru nepodařilo načíst. <ph name="GAIA_RELOAD_LINK_START" />Zkuste se prosím přihlásit znovu<ph name="GAIA_RELOAD_LINK_END" />, nebo použijte jiné <ph name="PROXY_SETTINGS_LINK_START" />nastavení proxy serveru<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Všechny sítě</translation> <translation id="708060913198414444">K&opírovat adresu zvukového souboru</translation> @@ -5039,7 +5047,6 @@ <translation id="7099337801055912064">Soubor PPD nelze načíst, protože je příliš velký. Maximální povolená velikost je 250 kB.</translation> <translation id="7102687220333134671">Automatické aktualizace jsou zapnuté</translation> <translation id="7102832101143475489">Časový limit požadavku vypršel</translation> -<translation id="7105390788077117391">Předvolby USB</translation> <translation id="710640343305609397">Otevřít nastavení sítě</translation> <translation id="7108338896283013870">Skrýt</translation> <translation id="7108668606237948702">enter</translation> @@ -5069,7 +5076,6 @@ <translation id="7136694880210472378">Nastavit jako výchozí</translation> <translation id="7136984461011502314">Vítá vás <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Došlo k chybě. Vyberte jiné obrázky a zkuste to znovu.</translation> -<translation id="7138678301420049075">Ostatní</translation> <translation id="713888829801648570">Je nám líto, ale heslo nebylo možné ověřit, protože jste offline.</translation> <translation id="7140928199327930795">Nejsou k dispozici žádná další zařízení.</translation> <translation id="7141105143012495934">Přihlášení selhalo, protože se nepodařilo načíst podrobnosti účtu. Kontaktujte administrátora nebo to zkuste znovu.</translation> @@ -5176,6 +5182,7 @@ <translation id="7280649757394340890">Nastavení hlasu převodu textu na řeč</translation> <translation id="7280877790564589615">Jsou požadována oprávnění</translation> <translation id="7282992757463864530">Informační panel</translation> +<translation id="7284411326658527427">Každý uživatel si může svůj účet přizpůsobit a chránit soukromí svých dat.</translation> <translation id="7287143125007575591">Přístup byl odepřen.</translation> <translation id="7287411021188441799">Obnovit výchozí pozadí</translation> <translation id="7288013116963835700">Odstranit Linux pro zařízení <ph name="DEVICE_TYPE" /></translation> @@ -5752,6 +5759,7 @@ <translation id="7963826112438303517">Asistent pomocí těchto záznamů a vašich hlasových požadavků vytváří a aktualizuje hlasový model, který se ukládá jen v zařízeních, v nichž máte zapnutou funkci Voice Match. Hlasovou aktivitu můžete zobrazit nebo obnovit v nastavení Asistenta.</translation> <translation id="7966241909927244760">K&opírovat adresu obrázku</translation> <translation id="7968072247663421402">Možnosti poskytovatele</translation> +<translation id="7968198493605442410">Kopírovat odkaz na text</translation> <translation id="7968742106503422125">Číst a upravovat data, která kopírujete a vkládáte</translation> <translation id="7968833647796919681">Aktivovat shromažďování údajů o výkonu</translation> <translation id="7968982339740310781">Zobrazit podrobnosti</translation> @@ -6131,6 +6139,7 @@ <translation id="8428213095426709021">Nastavení</translation> <translation id="8428271547607112339">Přidat školní účet</translation> <translation id="8428628598981198790">Váš bezpečnostní klíč na tomto webu nelze použít</translation> +<translation id="8428634594422941299">Rozumím</translation> <translation id="84297032718407999">Za <ph name="LOGOUT_TIME_LEFT" /> budete odhlášeni</translation> <translation id="8431190899827883166">Zobrazovat klepnutí</translation> <translation id="8431909052837336408">Změnit PIN SIM karty</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index 591872a5d4..da148c86a 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">Ukendt enhed [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Denne ejerkonto skal være den første konto, der logges ind på i en loginsession med flere brugere.</translation> <translation id="150411034776756821">Fjern <ph name="SITE" /></translation> +<translation id="1504311855864906891">Få undertekster til dine medier</translation> <translation id="1504551620756424144">Delte mapper er tilgængelige i Windows via <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Søgemaskine</translation> <translation id="1507170440449692343">Denne side er blokeret fra at få adgang til dit kamera.</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">Angiv den firecifrede pinkode (0000-9999)</translation> <translation id="2399939490305346086">Logindata på sikkerhedsnøglen</translation> <translation id="2400664245143453337">Kræver omgående opdatering</translation> -<translation id="2407481962792080328">Når du logger ind på din Google-konto, er denne funktion aktiveret</translation> <translation id="2408018932941436077">Gemmer kort</translation> <translation id="2408955596600435184">Angiv din pinkode</translation> <translation id="241082044617551207">Ukendt plugin</translation> @@ -3066,6 +3066,7 @@ <translation id="4657810666108475055">Fanesøgning</translation> <translation id="465878909996028221">Det er kun http, https og filprotokoller, der kan omdirigeres til en alternativ browser.</translation> <translation id="4659077111144409915">Primær konto</translation> +<translation id="4659126640776004816">Når du logger ind på din Google-konto, er denne funktion aktiveret.</translation> <translation id="4660476621274971848">Den forventede version var "<ph name="EXPECTED_VERSION" />", men versionen viste sig at være "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">Justerer størrelsen</translation> <translation id="4661407454952063730">Appdata kan være alle former for data, som en app har gemt (afhængigt af udviklerens indstillinger). Det kan f.eks. være data for kontakter, beskeder og billeder.</translation> @@ -3131,7 +3132,6 @@ <translation id="4750394297954878236">Forslag</translation> <translation id="475088594373173692">Første bruger</translation> <translation id="4751476147751820511">Bevægelses- eller lyssensorer</translation> -<translation id="4752124003533492687">Åbn Indstillinger for at tilslutte <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Stop/genindlæs</translation> <translation id="4756388243121344051">&Historik</translation> <translation id="4759238208242260848">Downloads</translation> @@ -5022,6 +5022,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 med RSA-kryptering</translation> <translation id="7075625805486468288">Administrer HTTPS-/SSL-certifikater og -indstillinger</translation> <translation id="7076293881109082629">Login</translation> +<translation id="7076878155205969899">Slå lyden fra</translation> <translation id="7077829361966535409">Loginsiden kunne ikke indlæses med de aktuelle proxyindstillinger. <ph name="GAIA_RELOAD_LINK_START" />Prøv at logge ind igen<ph name="GAIA_RELOAD_LINK_END" />, eller brug nogle andre <ph name="PROXY_SETTINGS_LINK_START" />proxyindstillinger<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Alle netværk</translation> <translation id="708060913198414444">K&opiér webadressen til lyden</translation> @@ -5042,7 +5043,6 @@ <translation id="7099337801055912064">Den store PPD-fil kan ikke indlæses. Filen må ikke fylde mere end 250 kB.</translation> <translation id="7102687220333134671">Automatiske opdateringer er slået til</translation> <translation id="7102832101143475489">Der opstod timeout for anmodningen</translation> -<translation id="7105390788077117391">Præferencer for USB</translation> <translation id="710640343305609397">Åbn netværksindstillingerne</translation> <translation id="7108338896283013870">Skjul</translation> <translation id="7108668606237948702">enter</translation> @@ -5072,7 +5072,6 @@ <translation id="7136694880210472378">Gør til standard</translation> <translation id="7136984461011502314">Velkommen til <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Der opstod en fejl. Prøv igen ved at vælge andre billeder.</translation> -<translation id="7138678301420049075">Andet</translation> <translation id="713888829801648570">Din adgangskode blev ikke bekræftet, fordi du er offline.</translation> <translation id="7140928199327930795">Der er ingen andre tilgængelige enheder.</translation> <translation id="7141105143012495934">Login mislykkedes, da dine kontooplysninger ikke kunne hentes. Kontakt din administrator, eller prøv igen.</translation> @@ -6134,6 +6133,7 @@ <translation id="8428213095426709021">Indstillinger</translation> <translation id="8428271547607112339">Tilføj skolekonto</translation> <translation id="8428628598981198790">Din sikkerhedsnøgle kan ikke bruges på dette website</translation> +<translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">Du logges ud om <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Vis tryk</translation> <translation id="8431909052837336408">Skift pinkode til SIM-kort</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 0d13615..b25d014f 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">Unbekanntes Gerät [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Dieses Inhaberkonto muss in einer Sitzung mit Mehrfachanmeldung das erste angemeldete Konto sein.</translation> <translation id="150411034776756821"><ph name="SITE" /> entfernen</translation> +<translation id="1504311855864906891">Untertitel für Ihre Medien</translation> <translation id="1504551620756424144">Freigegebene Ordner sind auf Windows-Geräten unter <ph name="BASE_DIR" /> verfügbar.</translation> <translation id="1506061864768559482">Suchmaschine</translation> <translation id="1507170440449692343">Diese Seite darf nicht auf Ihre Kamera zugreifen.</translation> @@ -1187,7 +1188,6 @@ <translation id="2396783860772170191">Geben Sie die 4-stellige PIN ein (0000–9999)</translation> <translation id="2399939490305346086">Anmeldedaten auf Sicherheitsschlüssel</translation> <translation id="2400664245143453337">Sofortiges Update erforderlich</translation> -<translation id="2407481962792080328">Wenn Sie sich in Ihrem Google-Konto anmelden, ist diese Funktion eingeschaltet</translation> <translation id="2408018932941436077">Karte wird gespeichert</translation> <translation id="2408955596600435184">PIN eingeben</translation> <translation id="241082044617551207">Unbekanntes Plug-in</translation> @@ -1283,6 +1283,7 @@ <translation id="2505127913256479918">Dieses gemeinsam verwaltete Konto wird bald entfernt</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{Bildschirm #}other{Bildschirm #}}</translation> <translation id="2505402373176859469"><ph name="RECEIVED_AMOUNT" /> von <ph name="TOTAL_SIZE" /></translation> +<translation id="250642123108534012">Geräte in der Nähe, wenn Nearby Share darauf geöffnet ist</translation> <translation id="250704661983564564">Displayanordnung</translation> <translation id="2507253002925770350">Ticket entfernt</translation> <translation id="2507397597949272797"><ph name="NAME" /> pausiert</translation> @@ -3061,6 +3062,7 @@ <translation id="4657810666108475055">Tab-Suche</translation> <translation id="465878909996028221">Nur HTTP-, HTTPS- und Dateiprotokolle werden für Browserweiterleitungen unterstützt.</translation> <translation id="4659077111144409915">Primäres Konto</translation> +<translation id="4659126640776004816">Wenn Sie sich in Ihrem Google-Konto anmelden, ist diese Funktion eingeschaltet.</translation> <translation id="4660476621274971848">Erwartete Version: "<ph name="EXPECTED_VERSION" />", tatsächliche Version "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">Größenanpassung läuft</translation> <translation id="4661407454952063730">App-Daten können alle Daten sein, die eine App aufgrund der Einstellungen des Entwicklers gespeichert hat, wie z. B. Kontakte, Nachrichten und Fotos.</translation> @@ -3126,7 +3128,6 @@ <translation id="4750394297954878236">Vorschläge</translation> <translation id="475088594373173692">Erster Nutzer</translation> <translation id="4751476147751820511">Bewegungs- oder Lichtsensoren</translation> -<translation id="4752124003533492687">Bitte die Einstellungen öffnen, um <ph name="USB_DEVICE_NAME" /> zu verbinden</translation> <translation id="4756378406049221019">Stopp/Neu laden</translation> <translation id="4756388243121344051">&Verlauf</translation> <translation id="4759238208242260848">Downloads</translation> @@ -3134,6 +3135,7 @@ <translation id="4762718786438001384">Speicherplatz auf Gerät äußerst niedrig</translation> <translation id="4763408175235639573">Beim Anzeigen dieser Seite wurden die folgenden Cookies eingerichtet</translation> <translation id="4765582662863429759">Zulassen, dass Android Messages SMS von Ihrem Smartphone an Ihr Chromebook übermittelt</translation> +<translation id="476598255842811483">Niemand, solange Nearby Share auf Ihrem Gerät nicht geöffnet ist</translation> <translation id="4768332406694066911">Ihre Zertifikate dieser Organisationen identifizieren Sie</translation> <translation id="477647109558161443">Desktopverknüpfung erstellen</translation> <translation id="4776917500594043016">Passwort für <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -5015,6 +5017,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 mit RSA-Verschlüsselung</translation> <translation id="7075625805486468288">HTTPS/SSL-Zertifikate und -Einstellungen verwalten</translation> <translation id="7076293881109082629">Anmeldung</translation> +<translation id="7076878155205969899">Ton stummschalten</translation> <translation id="7077829361966535409">Die Anmeldeseite konnte mit den aktuellen Proxy-Einstellungen nicht geladen werden. <ph name="GAIA_RELOAD_LINK_START" />Versuchen Sie erneut, sich anzumelden<ph name="GAIA_RELOAD_LINK_END" />, oder verwenden Sie andere <ph name="PROXY_SETTINGS_LINK_START" />Proxy-Einstellungen<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Alle Netzwerke</translation> <translation id="708060913198414444">Audioadresse k&opieren</translation> @@ -5035,7 +5038,6 @@ <translation id="7099337801055912064">Große PPD-Datei kann nicht geladen werden. Die Maximalgröße beträgt 250 KB.</translation> <translation id="7102687220333134671">Automatische Updates sind aktiviert</translation> <translation id="7102832101143475489">Zeitüberschreitung bei der Anfrage</translation> -<translation id="7105390788077117391">USB-Einstellungen</translation> <translation id="710640343305609397">Netzwerkeinstellungen öffnen</translation> <translation id="7108338896283013870">Ausblenden</translation> <translation id="7108668606237948702">Eingabe</translation> @@ -5065,7 +5067,6 @@ <translation id="7136694880210472378">Als Standard festlegen</translation> <translation id="7136984461011502314">Herzlich willkommen bei <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Ein Fehler ist aufgetreten. Versuchen Sie es noch einmal mit anderen Bildern.</translation> -<translation id="7138678301420049075">Sonstiges</translation> <translation id="713888829801648570">Ihr Passwort konnte nicht überprüft werden, da Sie offline sind.</translation> <translation id="7140928199327930795">Keine weiteren Geräte vorhanden</translation> <translation id="7141105143012495934">Sie konnten nicht angemeldet werden, weil Ihre Kontodetails nicht abgerufen werden konnten. Bitte wenden Sie sich an Ihren Administrator oder versuchen Sie es erneut.</translation> @@ -5665,6 +5666,7 @@ <translation id="786073089922909430">Dienst: <ph name="ARC_PROCESS_NAME" /></translation> <translation id="7861215335140947162">&Downloads</translation> <translation id="7864539943188674973">Bluetooth deaktivieren</translation> +<translation id="7866352732146932341">Geräte in der Nähe, wenn Nearby Share auf Ihrem Gerät geöffnet ist</translation> <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – gekoppelt</translation> <translation id="7870730066603611552">Synchronisierungsoptionen nach der Einrichtung überprüfen</translation> <translation id="7870790288828963061">Es wurden keine Kiosk-Apps mit neuerer Version gefunden. Es sind keine Updates vorhanden. Bitte entfernen Sie den USB-Stick.</translation> @@ -6126,6 +6128,7 @@ <translation id="8428213095426709021">Einstellungen</translation> <translation id="8428271547607112339">Konto einer Bildungseinrichtung hinzufügen</translation> <translation id="8428628598981198790">Ihr Sicherheitsschlüssel kann bei dieser Website nicht verwendet werden</translation> +<translation id="8428634594422941299">Ok</translation> <translation id="84297032718407999">Sie werden in <ph name="LOGOUT_TIME_LEFT" /> abgemeldet</translation> <translation id="8431190899827883166">Fingertipps anzeigen</translation> <translation id="8431909052837336408">PIN für SIM-Karte ändern</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index 8ddea20..63fab8cc 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Ανάγνωση και αλλαγή όλων των δεδομένων σας στον υπολογιστή σας και τους ιστότοπους που επισκέπτεστε</translation> <translation id="1430915738399379752">Εκτύπωση</translation> <translation id="1431188203598586230">Τελική ενημέρωση λογισμικού</translation> +<translation id="1431402976894535801">Να μην επιτρέπεται σε ιστοτόπους να γνωρίζουν πότε είστε ενεργοί.</translation> <translation id="1431432486300429272">Η Google μπορεί να χρησιμοποιήσει το ιστορικό περιήγησής σας για να εξατομικεύσει την Αναζήτηση και άλλες Υπηρεσίες Google. Εσύ ή ο γονέας σου μπορείτε να αλλάξετε αυτήν τη ρύθμιση ανά πάσα στιγμή στη διεύθυνση myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Διαχείριση μηχανών αναζήτησης</translation> <translation id="1433811987160647649">Ερώτηση πριν από την πρόσβαση</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Άγνωστη συσκευή [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Αυτός ο λογαριασμός κατόχου θα πρέπει να είναι ο πρώτος συνδεδεμένος λογαριασμός σε μια περίοδο σύνδεσης πολλαπλών συνδέσεων.</translation> <translation id="150411034776756821">Κατάργηση ιστοτόπου <ph name="SITE" /></translation> +<translation id="1504311855864906891">Λάβετε υπότιτλους για τα μέσα σας</translation> <translation id="1504551620756424144">Οι κοινόχρηστοι φάκελοι είναι διαθέσιμοι στα Windows στη θέση <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Μηχανή αναζήτησης</translation> <translation id="1507170440449692343">Αυτή η σελίδα δεν έχει πρόσβαση στην κάμερά σας.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Πρέπει να εισαγάγετε δύο φορές την ίδια φράση πρόσβασης</translation> <translation id="1652326691684645429">Ενεργοποίηση Κοινοποίησης κοντά</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Προσθέστε τον εκτυπωτή στο Google Cloud Print, για να μπορείτε να εκτυπώνετε όπου και αν βρίσκεστε.}other{Προσθέστε # εκτυπωτές στο Google Cloud Print, για να μπορείτε να εκτυπώνετε όπου και αν βρίσκεστε.}}</translation> +<translation id="1653575510930452864">Αντιγραφή συνδέσμου σε κείμενο</translation> <translation id="1656528038316521561">Αδιαφάνεια φόντου</translation> <translation id="1657406563541664238">Συμβάλετε στη βελτίωση του <ph name="PRODUCT_NAME" /> στέλνοντας αυτόματα στην Google στατιστικά στοιχεία χρήσης και αναφορές σφαλμάτων</translation> <translation id="1657937299377480641">Για να συνδεθείτε ξανά για πρόσβαση σε εκπαιδευτικούς πόρους, ζητήστε από έναν γονέα να σας δώσει άδεια.</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">Παραβίαση αρχής έκδοσης πιστοποιητικών</translation> <translation id="2182058453334755893">Αντιγράφηκε στο πρόχειρό σας</translation> <translation id="2184515124301515068">Επιτρέψτε στο Chrome να επιλέξει πότε οι ιστότοποι μπορούν να αναπαράγουν ήχο (συνιστάται)</translation> +<translation id="2187243482123994665">Παρουσία χρήστη</translation> <translation id="2187675480456493911">Έγινε συγχρονισμός με άλλες συσκευές στον λογαριασμό σας. Οι ρυθμίσεις που τροποποιούνται από άλλους χρήστες δεν θα συγχρονίζονται. <ph name="LINK_BEGIN" />Μάθετε περισσότερα<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Σφάλμα εισαγωγής του πιστοποιητικού διακομιστή </translation> <translation id="2187906491731510095">Οι επεκτάσεις ενημερώθηκαν</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Εισαγάγετε έναν 4ψήφιο PIN (0000-9999).</translation> <translation id="2399939490305346086">Δεδομένα σύνδεσης κλειδιού ασφαλείας</translation> <translation id="2400664245143453337">Απαιτείται άμεση ενημέρωση</translation> -<translation id="2407481962792080328">Αυτή η λειτουργία ενεργοποιείται όταν συνδέεστε στον Λογαριασμό σας Google.</translation> <translation id="2408018932941436077">Γίνεται αποθήκευση της κάρτας</translation> <translation id="2408955596600435184">Εισαγάγετε το PIN</translation> <translation id="241082044617551207">Άγνωστη προσθήκη</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963">Άγνωστο προϊόν <ph name="PRODUCT_ID" /> από τον πάροχο υπηρεσιών <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Οι ακόλουθες υπηρεσίες συμβάλλουν στη διατήρηση της ασφάλειας και της προστασίας των δεδομένων σας. Μπορείτε να απενεργοποιήσετε αυτές τις λειτουργίες ανά πάσα στιγμή.</translation> <translation id="3164329792803560526">Κοινοποίηση αυτής της καρτέλας σε <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Να γίνεται ερώτηση όταν ένας ιστότοπος θέλει να γνωρίζει πότε είστε ενεργοί.</translation> <translation id="3165390001037658081">Ορισμένες εταιρείες κινητής τηλεφωνίας ενδέχεται να αποκλείσουν αυτήν τη λειτουργία.</translation> <translation id="316652501498554287">Λογαριασμοί G Suite for Education</translation> <translation id="3169472444629675720">Discover</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">Δημιουργία νέου προφίλ για εργασία;</translation> <translation id="452750746583162491">Έλεγχος συγχρονισμένων δεδομένων</translation> <translation id="4530494379350999373">Προέλευση</translation> +<translation id="4531924570968473143">Θέλετε να γίνει προσθήκη σε αυτήν τη συσκευή <ph name="DEVICE_TYPE" />;</translation> <translation id="4532646538815530781">Αυτός ο ιστότοπος χρησιμοποιεί αισθητήρες κίνησης.</translation> <translation id="4533846798469727141">Τώρα πείτε "Hey Google"</translation> <translation id="4533985347672295764">Χρόνος CPU</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">Αναζήτηση καρτελών</translation> <translation id="465878909996028221">Για τις ανακατευθύνσεις προγράμματος περιήγησης υποστηρίζονται μόνο http, https και πρωτόκολλα αρχείων.</translation> <translation id="4659077111144409915">Κύριος λογαριασμός</translation> +<translation id="4659126640776004816">Αυτή η λειτουργία ενεργοποιείται όταν συνδέεστε στον Λογαριασμό σας Google.</translation> <translation id="4660476621274971848">Αναμενόταν η έκδοση "<ph name="EXPECTED_VERSION" />", ωστόσο η έκδοση ήταν η "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">Αλλαγή μεγέθους</translation> <translation id="4661407454952063730">Τα δεδομένα εφαρμογής μπορεί να είναι οποιουδήποτε είδους δεδομένα που έχουν αποθηκευτεί από μια εφαρμογή (με βάση τις ρυθμίσεις προγραμματιστή), συμπεριλαμβανομένων δεδομένων, όπως είναι οι επαφές, τα μηνύματα και οι φωτογραφίες.</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">Προτάσεις</translation> <translation id="475088594373173692">Πρώτος χρήστης</translation> <translation id="4751476147751820511">Αισθητήρες κίνησης ή φωτός</translation> -<translation id="4752124003533492687">Ανοίξτε τις Ρυθμίσεις για να συνδέσετε το <ph name="USB_DEVICE_NAME" />.</translation> <translation id="4756378406049221019">Διακοπή/Επανάληψη φόρτωσης</translation> <translation id="4756388243121344051">&Ιστορικό</translation> <translation id="4759238208242260848">Λήψεις</translation> @@ -3979,6 +3984,7 @@ <translation id="5804241973901381774">Άδειες</translation> <translation id="5805697420284793859">Διαχείριση παραθύρου</translation> <translation id="5806773519584576205">0° (Προεπιλογή)</translation> +<translation id="5808664694611589238">{0,plural, =1{Κλείσιμο παραθύρου επισκέπτη}other{Κλείσιμο παραθύρου επισκέπτη}}</translation> <translation id="5810809306422959727">Αυτός ο λογαριασμός δεν είναι κατάλληλος για γονικούς ελέγχους</translation> <translation id="5812674658566766066">Ανάπτυξη όλων</translation> <translation id="5814126672212206791">Τύπος σύνδεσης</translation> @@ -4436,6 +4442,7 @@ <translation id="6344170822609224263">Λίστα πρόσβασης για συνδέσεις δικτύου</translation> <translation id="6344576354370880196">Αποθηκευμένοι εκτυπωτές</translation> <translation id="6345418402353744910">Το όνομα χρήστη και ο κωδικός πρόσβασης απαιτούνται για τον διακομιστή μεσολάβησης <ph name="PROXY" />, έτσι ώστε ο διαχειριστής να μπορεί να διαμορφώσει το δίκτυό σας.</translation> +<translation id="6345878117466430440">Επισήμανση ως αναγνωσμένο</translation> <translation id="6349101878882523185">Εγκατάσταση εφαρμογής <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Ο συγχρονισμός δεν λειτουργεί. Δοκιμάστε να αποσυνδεθείτε και να συνδεθείτε ξανά.</translation> <translation id="6351063337294363751">Μπορείτε να διαγράψετε τα δεδομένα περιήγησης από αυτό το μενού</translation> @@ -5022,6 +5029,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 με κρυπτογράφηση RSA</translation> <translation id="7075625805486468288">Διαχειριστείτε τα πιστοποιητικά HTTPS/SSL και τις ρυθμίσεις</translation> <translation id="7076293881109082629">Σύνδεση</translation> +<translation id="7076878155205969899">Σίγαση ήχου</translation> <translation id="7077829361966535409">Αποτυχία φόρτωσης σελίδας σύνδεσης με χρήση των τρεχουσών ρυθμίσεων διακομιστή μεσολάβησης. <ph name="GAIA_RELOAD_LINK_START" />Δοκιμάστε να συνδεθείτε ξανά<ph name="GAIA_RELOAD_LINK_END" />, ή χρησιμοποιήστε διαφορετικές <ph name="PROXY_SETTINGS_LINK_START" />ρυθμίσεις διακομιστή μεσολάβησης<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Όλα τα δίκτυα</translation> <translation id="708060913198414444">Α&ντιγραφή διεύθυνσης ήχου</translation> @@ -5042,7 +5050,6 @@ <translation id="7099337801055912064">Δεν είναι δυνατή η φόρτωση μεγάλου PPD. Το μέγιστο μέγεθος είναι 250 KB.</translation> <translation id="7102687220333134671">Οι αυτόματες ενημερώσεις είναι ενεργοποιημένες</translation> <translation id="7102832101143475489">Το χρονικό όριο αιτήματος έληξε</translation> -<translation id="7105390788077117391">Προτιμήσεις USB</translation> <translation id="710640343305609397">Άνοιγμα ρυθμίσεων δικτύου</translation> <translation id="7108338896283013870">Απόκρυψη</translation> <translation id="7108668606237948702">enter</translation> @@ -5072,7 +5079,6 @@ <translation id="7136694880210472378">Ορισμός ως προεπιλογής</translation> <translation id="7136984461011502314">Καλώς ορίσατε στο <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Προέκυψε κάποιο σφάλμα. Προσπαθήστε ξανά επιλέγοντας άλλες εικόνες.</translation> -<translation id="7138678301420049075">Άλλο</translation> <translation id="713888829801648570">Δυστυχώς, δεν ήταν δυνατή η επαλήθευση του κωδικού πρόσβασής σας διότι είστε εκτός σύνδεσης.</translation> <translation id="7140928199327930795">Δεν υπάρχουν άλλες διαθέσιμες συσκευές.</translation> <translation id="7141105143012495934">Η σύνδεση απέτυχε επειδή δεν ήταν δυνατή η ανάκτηση των στοιχείων του λογαριασμού σας. Επικοινωνήστε με τον διαχειριστή σας ή προσπαθήστε ξανά.</translation> @@ -5179,6 +5185,7 @@ <translation id="7280649757394340890">Ρυθμίσεις φωνής μετατροπής κειμένου σε ομιλία</translation> <translation id="7280877790564589615">Αίτημα άδειας</translation> <translation id="7282992757463864530">Γραμμή πληροφοριών</translation> +<translation id="7284411326658527427">Κάθε άτομο μπορεί να εξατομικεύσει τον λογαριασμό του και να διατηρήσει ιδιωτικά τα δεδομένα του.</translation> <translation id="7287143125007575591">Δεν επιτρέπεται η πρόσβαση.</translation> <translation id="7287411021188441799">Επαναφορά προεπιλεγμένου φόντου</translation> <translation id="7288013116963835700">Κατάργηση Linux για <ph name="DEVICE_TYPE" /></translation> @@ -5755,6 +5762,7 @@ <translation id="7963826112438303517">Ο Βοηθός σας χρησιμοποιεί αυτές τις ηχογραφήσεις και τα εκφωνημένα αιτήματά σας για να δημιουργήσει και να ενημερώσει το φωνητικό μοντέλο σας, το οποίο αποθηκεύεται μόνο σε συσκευές στις οποίες έχετε ενεργοποιήσει το Voice Match. Προβάλετε ή εκπαιδεύστε ξανά τη φωνητική δραστηριότητα στις Ρυθμίσεις Βοηθού.</translation> <translation id="7966241909927244760">Α&ντιγραφή της διεύθυνσης εικόνας</translation> <translation id="7968072247663421402">Επιλογές παρόχων</translation> +<translation id="7968198493605442410">Αντιγραφή συνδέσμου σε κείμενο</translation> <translation id="7968742106503422125">Ανάγνωση και τροποποίηση των δεδομένων που αντιγράφετε και επικολλάτε</translation> <translation id="7968833647796919681">Ενεργοποίηση συλλογής δεδομένων απόδοσης</translation> <translation id="7968982339740310781">Προβολή λεπτομερειών</translation> @@ -6135,6 +6143,7 @@ <translation id="8428213095426709021">Ρυθμίσεις</translation> <translation id="8428271547607112339">Προσθήκη σχολικού λογαριασμού</translation> <translation id="8428628598981198790">Το κλειδί ασφαλείας σας δεν μπορεί να χρησιμοποιηθεί με αυτόν τον ιστότοπο.</translation> +<translation id="8428634594422941299">Το κατάλαβα</translation> <translation id="84297032718407999">Θα αποσυνδεθείτε σε <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Εμφάνιση πατημάτων</translation> <translation id="8431909052837336408">Αλλαγή αριθμού PIN της κάρτας SIM</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index a57ef35b..56990305 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Read and change all your data on your computer and the websites that you visit</translation> <translation id="1430915738399379752">Print</translation> <translation id="1431188203598586230">Final software update</translation> +<translation id="1431402976894535801">Block sites from knowing when you're present</translation> <translation id="1431432486300429272">Google may use your browsing history to personalise Search and other Google services. You or your parent can change this at any time at myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Manage search engines</translation> <translation id="1433811987160647649">Ask before accessing</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Unknown device [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">This owner account has to be the first signed-in account in a multiple sign-in session.</translation> <translation id="150411034776756821">Remove <ph name="SITE" /></translation> +<translation id="1504311855864906891">Get captions for your media</translation> <translation id="1504551620756424144">Shared folders are available in Windows at <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Search engine</translation> <translation id="1507170440449692343">This page has been blocked from accessing your camera.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">You must enter the same passphrase twice</translation> <translation id="1652326691684645429">Enable Nearby Share</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Add the printer to Google Cloud Print so that you can print from anywhere.}other{Add # printers to Google Cloud Print so that you can print from anywhere.}}</translation> +<translation id="1653575510930452864">Copy link to text</translation> <translation id="1656528038316521561">Background opacity</translation> <translation id="1657406563541664238">Help make <ph name="PRODUCT_NAME" /> better by automatically sending usage statistics and crash reports to Google.</translation> <translation id="1657937299377480641">To sign in again for access to educational resources, ask a parent to give you permission</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">CA Compromise</translation> <translation id="2182058453334755893">Copied to your Clipboard</translation> <translation id="2184515124301515068">Let Chrome choose when sites can play sound (recommended)</translation> +<translation id="2187243482123994665">User presence</translation> <translation id="2187675480456493911">Synced with other devices on your account. Settings modified by other users will not be synced. <ph name="LINK_BEGIN" />Learn more<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Server Certificate Import Error</translation> <translation id="2187906491731510095">Extensions updated</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Enter 4-digit pin (0000-9999)</translation> <translation id="2399939490305346086">Security key sign-in data</translation> <translation id="2400664245143453337">Immediate update required</translation> -<translation id="2407481962792080328">When you sign in to your Google account, this feature is turned on</translation> <translation id="2408018932941436077">Saving card</translation> <translation id="2408955596600435184">Enter your PIN</translation> <translation id="241082044617551207">Unknown plug-in</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963">Unknown product <ph name="PRODUCT_ID" /> from vendor <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">The following services help keep your data safe and secure. You can turn these features off at any time.</translation> <translation id="3164329792803560526">Sharing this tab to <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Ask when a site wants to know when you're present</translation> <translation id="3165390001037658081">Some operators might block this feature.</translation> <translation id="316652501498554287">G Suite for Education accounts</translation> <translation id="3169472444629675720">Discover</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">Create a new profile for work?</translation> <translation id="452750746583162491">Review your synced data</translation> <translation id="4530494379350999373">Origin</translation> +<translation id="4531924570968473143">Who would you like to add to this <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">This site is using motion sensors.</translation> <translation id="4533846798469727141">Now say "Hey Google"</translation> <translation id="4533985347672295764">CPU Time</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">Tab search</translation> <translation id="465878909996028221">Only http, https and file protocols are supported for browser redirects.</translation> <translation id="4659077111144409915">Primary account</translation> +<translation id="4659126640776004816">When you sign in to your Google account, this feature is turned on.</translation> <translation id="4660476621274971848">Expected version '<ph name="EXPECTED_VERSION" />', but version was '<ph name="NEW_ID" />'</translation> <translation id="4660540330091848931">Resizing</translation> <translation id="4661407454952063730">App data can be any data that an app has saved (based on developer settings), including data such as contacts, messages and photos.</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">Suggestions</translation> <translation id="475088594373173692">First user</translation> <translation id="4751476147751820511">Motion or light sensors</translation> -<translation id="4752124003533492687">Open Settings to connect <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Stop/Reload</translation> <translation id="4756388243121344051">&History</translation> <translation id="4759238208242260848">Downloads</translation> @@ -3978,6 +3983,7 @@ <translation id="5804241973901381774">Permissions</translation> <translation id="5805697420284793859">Window manager</translation> <translation id="5806773519584576205">0° (Default)</translation> +<translation id="5808664694611589238">{0,plural, =1{Close guest}other{Close guest}}</translation> <translation id="5810809306422959727">This account isn't eligible for parental controls</translation> <translation id="5812674658566766066">Expand all</translation> <translation id="5814126672212206791">Connection type</translation> @@ -4435,6 +4441,7 @@ <translation id="6344170822609224263">Access list of network connections</translation> <translation id="6344576354370880196">Saved printers</translation> <translation id="6345418402353744910">Your username and password are required for the proxy <ph name="PROXY" /> so that the admin can configure your network</translation> +<translation id="6345878117466430440">Mark as read</translation> <translation id="6349101878882523185">Install <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Sync isn’t working. Try signing out and back in again.</translation> <translation id="6351063337294363751">You can clear your browsing data from this menu</translation> @@ -5021,6 +5028,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 With RSA Encryption</translation> <translation id="7075625805486468288">Manage HTTPS/SSL certificates and settings</translation> <translation id="7076293881109082629">Signing in</translation> +<translation id="7076878155205969899">Mute sound</translation> <translation id="7077829361966535409">The sign-in page failed to load using the current proxy settings. Please <ph name="GAIA_RELOAD_LINK_START" />try to sign in again<ph name="GAIA_RELOAD_LINK_END" /> or use different <ph name="PROXY_SETTINGS_LINK_START" />proxy settings<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">All networks</translation> <translation id="708060913198414444">C&opy audio address</translation> @@ -5041,7 +5049,6 @@ <translation id="7099337801055912064">Can’t load large PPD. Maximum size is 250 KB.</translation> <translation id="7102687220333134671">Automatic updates are turned on</translation> <translation id="7102832101143475489">The request timed out</translation> -<translation id="7105390788077117391">USB preferences</translation> <translation id="710640343305609397">Open network settings</translation> <translation id="7108338896283013870">Hide</translation> <translation id="7108668606237948702">enter</translation> @@ -5071,7 +5078,6 @@ <translation id="7136694880210472378">Make default</translation> <translation id="7136984461011502314">Welcome to <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">There's an error. Please try again by choosing other images.</translation> -<translation id="7138678301420049075">Other</translation> <translation id="713888829801648570">Sorry, your password could not be verified because you are offline.</translation> <translation id="7140928199327930795">No other available devices.</translation> <translation id="7141105143012495934">Sign-in failed because your account details could not be retrieved. Please contact your administrator or try again.</translation> @@ -5178,6 +5184,7 @@ <translation id="7280649757394340890">Text-to-Speech voice settings</translation> <translation id="7280877790564589615">Permission requested</translation> <translation id="7282992757463864530">Infobar</translation> +<translation id="7284411326658527427">Each person can personalise their account and keep data private.</translation> <translation id="7287143125007575591">Access denied</translation> <translation id="7287411021188441799">Restore default background</translation> <translation id="7288013116963835700">Remove Linux for <ph name="DEVICE_TYPE" /></translation> @@ -5754,6 +5761,7 @@ <translation id="7963826112438303517">Your Assistant uses these recordings and your spoken requests to create and update your voice model, which is only stored on devices where you've turned on Voice Match. View or retrain voice activity in Assistant Settings.</translation> <translation id="7966241909927244760">C&opy Image Address</translation> <translation id="7968072247663421402">Provider options</translation> +<translation id="7968198493605442410">Copy link to text</translation> <translation id="7968742106503422125">Read and modify data that you copy and paste</translation> <translation id="7968833647796919681">Enable performance data collection</translation> <translation id="7968982339740310781">View details</translation> @@ -6134,6 +6142,7 @@ <translation id="8428213095426709021">Settings</translation> <translation id="8428271547607112339">Add school account</translation> <translation id="8428628598981198790">Your security key can't be used with this site</translation> +<translation id="8428634594422941299">Got it</translation> <translation id="84297032718407999">You'll be signed out in <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Show taps</translation> <translation id="8431909052837336408">Change SIM PIN</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index 3aeae4b..c06c157 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Leer y cambiar todos los datos de la computadora y los sitios web que visites</translation> <translation id="1430915738399379752">Imprimir</translation> <translation id="1431188203598586230">Actualización final de software</translation> +<translation id="1431402976894535801">No permitir que los sitios sepan cuando estás presente</translation> <translation id="1431432486300429272">Es posible que Google use tu historial de navegación para personalizar la Búsqueda y otros servicios de Google. Tú y tu padre o madre podrán cambiar esta configuración en cualquier momento, en myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Administrar motores de búsqueda</translation> <translation id="1433811987160647649">Preguntar antes de acceder</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Dispositivo desconocido [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">El propietario de esta cuenta requiere que sea la primera a la que se acceda al crear una sesión de acceso múltiple.</translation> <translation id="150411034776756821">Quitar <ph name="SITE" /></translation> +<translation id="1504311855864906891">Obtén subtítulos para tu contenido multimedia</translation> <translation id="1504551620756424144">Las carpetas compartidas están disponibles en Windows, en <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Motor de búsqueda</translation> <translation id="1507170440449692343">Esta página no tiene permiso para acceder a la cámara.</translation> @@ -566,6 +568,7 @@ <translation id="1651008383952180276">Debes ingresar la misma frase de contraseña dos veces</translation> <translation id="1652326691684645429">Habilitar Compartir con Nearby</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Agrega la impresora a Google Cloud Print para poder imprimir desde todas partes.}other{Agrega # impresoras a Google Cloud Print para poder imprimir desde todas partes.}}</translation> +<translation id="1653575510930452864">Copiar vínculo al texto</translation> <translation id="1656528038316521561">Opacidad del fondo</translation> <translation id="1657406563541664238">Ayúdanos a <ph name="PRODUCT_NAME" /> mejorar enviando automáticamente estadísticas de uso e informes de fallos a Google.</translation> <translation id="1657937299377480641">Pídele permiso a tu padre o madre para ingresar de nuevo a la cuenta que te permita acceder a recursos educativos</translation> @@ -999,6 +1002,7 @@ <translation id="2178614541317717477">Compromiso de entidad de certificación</translation> <translation id="2182058453334755893">Se copió en tu portapapeles</translation> <translation id="2184515124301515068">Permitir que Chrome elija cuándo los sitios pueden reproducir sonido (recomendado)</translation> +<translation id="2187243482123994665">Presencia del usuario</translation> <translation id="2187675480456493911">La red está sincronizada con otros dispositivos de tu cuenta. No se sincronizarán las opciones de configuración que modifiquen otros usuarios. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Error en el servidor de importación de certificado</translation> <translation id="2187906491731510095">Se actualizaron las extensiones</translation> @@ -1187,7 +1191,6 @@ <translation id="2396783860772170191">Ingresa un PIN de 4 dígitos (0000-9999)</translation> <translation id="2399939490305346086">Datos de acceso de la llave de seguridad</translation> <translation id="2400664245143453337">Se requiere una actualización inmediata</translation> -<translation id="2407481962792080328">Esta función se activa cuando accedes a tu Cuenta de Google</translation> <translation id="2408018932941436077">Guardando la tarjeta</translation> <translation id="2408955596600435184">Ingresa tu PIN</translation> <translation id="241082044617551207">Complemento desconocido</translation> @@ -1827,6 +1830,7 @@ <translation id="3163201441334626963">Producto desconocido <ph name="PRODUCT_ID" /> del proveedor <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Los siguientes servicios permiten proteger tus datos. Puedes desactivar estas funciones en cualquier momento.</translation> <translation id="3164329792803560526">Compartiendo esta pestaña en <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Preguntar cuando un sitio quiera saber si estás presente</translation> <translation id="3165390001037658081">Es posible que algunos proveedores bloqueen esta función.</translation> <translation id="316652501498554287">Cuentas de G Suite for Education</translation> <translation id="3169472444629675720">Discover</translation> @@ -2944,6 +2948,7 @@ <translation id="4527186207340858212">¿Deseas crear un nuevo perfil de trabajo?</translation> <translation id="452750746583162491">Revisa tus datos sincronizados</translation> <translation id="4530494379350999373">Origen</translation> +<translation id="4531924570968473143">¿A quién quieres agregar a este dispositivo <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Este sitio está usando los sensores de movimiento.</translation> <translation id="4533846798469727141">Ahora di "Ok Google"</translation> <translation id="4533985347672295764">Tiempo de CPU</translation> @@ -3063,6 +3068,7 @@ <translation id="4657810666108475055">Búsqueda de pestañas</translation> <translation id="465878909996028221">Solo se admiten los protocolos http, https y de archivo para las redirecciones a navegadores.</translation> <translation id="4659077111144409915">Cuenta principal</translation> +<translation id="4659126640776004816">Esta función se activa cuando accedes a tu Cuenta de Google.</translation> <translation id="4660476621274971848">Se esperaba la versión "<ph name="EXPECTED_VERSION" />", pero la versión fue "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">Cambiando el tamaño</translation> <translation id="4661407454952063730">Los datos de las apps abarcan cualquier información guardada por una app (según la configuración del desarrollador), incluidos contactos, mensajes y fotos.</translation> @@ -3128,7 +3134,6 @@ <translation id="4750394297954878236">Sugerencias</translation> <translation id="475088594373173692">Primer usuario</translation> <translation id="4751476147751820511">Sensores de luz o movimiento</translation> -<translation id="4752124003533492687">Abre la Configuración para conectar el dispositivo <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Detener/volver a cargar</translation> <translation id="4756388243121344051">&Historial</translation> <translation id="4759238208242260848">Descargas</translation> @@ -3975,6 +3980,7 @@ <translation id="5804241973901381774">Permisos</translation> <translation id="5805697420284793859">Administrador de ventanas</translation> <translation id="5806773519584576205">0° (predeterminado)</translation> +<translation id="5808664694611589238">{0,plural, =1{Cerrar la ventana de la sesión de invitado}other{Cerrar las ventanas de la sesión de invitado}}</translation> <translation id="5810809306422959727">Esta cuenta no es apta para los Controles parentales</translation> <translation id="5812674658566766066">Expandir todo</translation> <translation id="5814126672212206791">Tipo de conexión</translation> @@ -4432,6 +4438,7 @@ <translation id="6344170822609224263">Acceder a la lista de conexiones de red</translation> <translation id="6344576354370880196">Impresoras guardadas</translation> <translation id="6345418402353744910">Para que el administrador pueda configurar tu red, proporciona tu nombre de usuario y contraseña para el proxy <ph name="PROXY" />.</translation> +<translation id="6345878117466430440">Marcar como leído</translation> <translation id="6349101878882523185">Instalar <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">La sincronización no funciona. Intenta salir y volver a acceder.</translation> <translation id="6351063337294363751">Puedes borrar los datos de navegación desde este menú</translation> @@ -5018,6 +5025,7 @@ <translation id="7075513071073410194">PKCS N. º 1 MD5 con encriptación RSA</translation> <translation id="7075625805486468288">Administra la configuración y los certificados HTTPS/SSL</translation> <translation id="7076293881109082629">Accediendo</translation> +<translation id="7076878155205969899">Silenciar sonido</translation> <translation id="7077829361966535409">No se pudo cargar la página de acceso a la cuenta con la configuración de proxy actual. <ph name="GAIA_RELOAD_LINK_START" />Intenta volver a acceder<ph name="GAIA_RELOAD_LINK_END" /> o utiliza otra <ph name="PROXY_SETTINGS_LINK_START" />configuración de proxy<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Todas las redes</translation> <translation id="708060913198414444">Copiar dirección del audio</translation> @@ -5038,7 +5046,6 @@ <translation id="7099337801055912064">No se pueden cargar archivos PPD grandes. El tamaño máximo es 250 kB.</translation> <translation id="7102687220333134671">Las actualizaciones automáticas están activadas</translation> <translation id="7102832101143475489">Se agotó el tiempo de espera de la solicitud</translation> -<translation id="7105390788077117391">Preferencias de USB</translation> <translation id="710640343305609397">Abrir la configuración de red</translation> <translation id="7108338896283013870">Ocultar</translation> <translation id="7108668606237948702">ingresar</translation> @@ -5068,7 +5075,6 @@ <translation id="7136694880210472378">Configurar como predeterminado</translation> <translation id="7136984461011502314">Bienvenido a <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Se produjo un error. Elige otras imágenes y vuelve a intentarlo.</translation> -<translation id="7138678301420049075">Otros</translation> <translation id="713888829801648570">La contraseña no se pudo verificar porque no tienes conexión a Internet.</translation> <translation id="7140928199327930795">No hay otros dispositivos disponibles.</translation> <translation id="7141105143012495934">Se produjo un error de acceso porque no se pudieron recuperar los datos de tu cuenta. Comunícate con el administrador o vuelve a intentarlo.</translation> @@ -5175,6 +5181,7 @@ <translation id="7280649757394340890">Configuración de la voz en la función de texto a voz</translation> <translation id="7280877790564589615">Permiso solicitado</translation> <translation id="7282992757463864530">Barra de información</translation> +<translation id="7284411326658527427">Cada persona podrá personalizar su cuenta y proteger la privacidad de sus datos.</translation> <translation id="7287143125007575591">Acceso denegado</translation> <translation id="7287411021188441799">Restablecer fondo predeterminado</translation> <translation id="7288013116963835700">Quitar Linux de <ph name="DEVICE_TYPE" /></translation> @@ -5751,6 +5758,7 @@ <translation id="7963826112438303517">El Asistente usa estas grabaciones y tus solicitudes de voz para crear y actualizar tu modelo de voz, que solo se almacenará en los dispositivos en los que hayas activado Voice Match. Puedes consultar o volver a entrenar tu actividad de voz en la configuración del Asistente.</translation> <translation id="7966241909927244760">Copiar dirección de la imagen</translation> <translation id="7968072247663421402">Opciones del proveedor</translation> +<translation id="7968198493605442410">Copiar vínculo al texto</translation> <translation id="7968742106503422125">Leer y modificar los datos copiados y pegados</translation> <translation id="7968833647796919681">Habilitar recopilación de datos de rendimiento</translation> <translation id="7968982339740310781">Ver los detalles</translation> @@ -6131,6 +6139,7 @@ <translation id="8428213095426709021">Configuración</translation> <translation id="8428271547607112339">Agregar una cuenta de una institución educativa</translation> <translation id="8428628598981198790">Tu llave de seguridad no se puede usar en este sitio</translation> +<translation id="8428634594422941299">Entendido</translation> <translation id="84297032718407999">Saldrás de la cuenta en <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Mostrar presiones</translation> <translation id="8431909052837336408">Cambiar el PIN de la tarjeta SIM</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index 725a7ce..9b2ed366 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Leer y modificar todos tus datos en tu ordenador y en los sitios web que visites</translation> <translation id="1430915738399379752">Imprimir</translation> <translation id="1431188203598586230">Última actualización de software</translation> +<translation id="1431402976894535801">Impedir que los sitios web para impedir que sepan cuándo estás activo</translation> <translation id="1431432486300429272">Google puede utilizar tu historial de navegación para personalizar la Búsqueda y otros Servicios de Google. Tú o tus padres podéis cambiar esta opción en cualquier momento desde myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Administrar buscadores</translation> <translation id="1433811987160647649">Preguntar antes de acceder</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Dispositivo desconocido [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">La cuenta de este propietario debe ser la primera cuenta que ha iniciado sesión en un inicio de sesión múltiple.</translation> <translation id="150411034776756821">Quitar <ph name="SITE" /></translation> +<translation id="1504311855864906891">Obtener subtítulos para tu contenido multimedia</translation> <translation id="1504551620756424144">En Windows, las carpetas compartidas están disponibles en <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Buscador</translation> <translation id="1507170440449692343">Esta página no tiene permiso para acceder a la cámara</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Debes introducir la misma frase de contraseña dos veces</translation> <translation id="1652326691684645429">Habilitar Compartir con Nearby</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Añade la impresora a Google Cloud Print para que puedas imprimir desde cualquier parte.}other{Añade # impresoras a Google Cloud Print para que puedas imprimir desde cualquier parte.}}</translation> +<translation id="1653575510930452864">Copiar enlace al texto</translation> <translation id="1656528038316521561">Opacidad del fondo</translation> <translation id="1657406563541664238">Ayúdanos a mejorar <ph name="PRODUCT_NAME" /> enviando estadísticas de uso e informes sobre fallos.</translation> <translation id="1657937299377480641">Para iniciar sesión de nuevo para acceder a recursos educativos, pídele permiso a tu padre o madre</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">Compromiso de entidad emisora de certificados</translation> <translation id="2182058453334755893">Se ha copiado en tu portapapeles</translation> <translation id="2184515124301515068">Permitir que Chrome elija cuándo los sitios web pueden reproducir sonidos (recomendado)</translation> +<translation id="2187243482123994665">Presencia del usuario</translation> <translation id="2187675480456493911">La red está sincronizada con otros dispositivos de tu cuenta. Los ajustes modificados por otros usuarios no se sincronizarán. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Error de importación del certificado de servidor</translation> <translation id="2187906491731510095">Se han actualizado las extensiones</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Introduce el PIN de 4 dígitos (0000-9999)</translation> <translation id="2399939490305346086">Datos de inicio de sesión de la llave de seguridad</translation> <translation id="2400664245143453337">Es necesario actualizar de inmediato</translation> -<translation id="2407481962792080328">Esta función se activará cuando inicies sesión en tu cuenta de Google</translation> <translation id="2408018932941436077">Guardando tarjeta</translation> <translation id="2408955596600435184">Introduce tu PIN</translation> <translation id="241082044617551207">Complemento desconocido</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963">Producto <ph name="PRODUCT_ID" /> del proveedor <ph name="VENDOR_ID" /> desconocido</translation> <translation id="3163254451837720982">Los siguientes servicios te ayudan a mantener tus datos seguros y protegidos. Puedes inhabilitar estas funciones en cualquier momento.</translation> <translation id="3164329792803560526">Compartiendo esta pestaña con <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Preguntar cuando un sitio web quiera saber si estás activo</translation> <translation id="3165390001037658081">Es posible que algunos operadores bloqueen esta función.</translation> <translation id="316652501498554287">Cuentas de G Suite para Centros Educativos</translation> <translation id="3169472444629675720">Discover</translation> @@ -2946,6 +2950,7 @@ <translation id="4527186207340858212">¿Quieres crear un nuevo perfil de trabajo?</translation> <translation id="452750746583162491">Revisar los datos sincronizados</translation> <translation id="4530494379350999373">Origen</translation> +<translation id="4531924570968473143">¿A quién quieres añadir a este <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Este sitio web está usando sensores de movimiento.</translation> <translation id="4533846798469727141">Ahora di "Ok Google"</translation> <translation id="4533985347672295764">Tiempo de uso de la CPU</translation> @@ -3065,6 +3070,7 @@ <translation id="4657810666108475055">Búsqueda de pestañas</translation> <translation id="465878909996028221">Las redirecciones de navegador solo son compatibles con los protocolos HTTP, HTTPS y de archivo.</translation> <translation id="4659077111144409915">Cuenta principal</translation> +<translation id="4659126640776004816">Esta función se activará cuando inicies sesión en tu cuenta de Google.</translation> <translation id="4660476621274971848">Se esperaba la versión "<ph name="EXPECTED_VERSION" />", pero se ha detectado la versión "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">Cambiando tamaño</translation> <translation id="4661407454952063730">Los datos de aplicaciones abarcan cualquier tipo de información que guarden las aplicaciones (en función de la configuración de los desarrolladores), incluidos datos como contactos, mensajes y fotos.</translation> @@ -3130,7 +3136,6 @@ <translation id="4750394297954878236">Sugerencias</translation> <translation id="475088594373173692">Primer usuario</translation> <translation id="4751476147751820511">Sensores de luz o movimiento</translation> -<translation id="4752124003533492687">Abre Configuración para conectar <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Detener/Volver a cargar</translation> <translation id="4756388243121344051">&Historial</translation> <translation id="4759238208242260848">Descargas</translation> @@ -3977,6 +3982,7 @@ <translation id="5804241973901381774">Permisos</translation> <translation id="5805697420284793859">Administrador de ventanas</translation> <translation id="5806773519584576205">0° (Predeterminado)</translation> +<translation id="5808664694611589238">{0,plural, =1{Cerrar invitado}other{Cerrar invitado}}</translation> <translation id="5810809306422959727">Esta cuenta no es apta para el control parental</translation> <translation id="5812674658566766066">Mostrar todo</translation> <translation id="5814126672212206791">Tipo de conexión</translation> @@ -4434,6 +4440,7 @@ <translation id="6344170822609224263">Accede a la lista de conexiones de red</translation> <translation id="6344576354370880196">Impresoras guardadas</translation> <translation id="6345418402353744910">El proxy <ph name="PROXY" /> necesita tu nombre de usuario y tu contraseña para que el administrador pueda configurar tu red</translation> +<translation id="6345878117466430440">Marcar como leído</translation> <translation id="6349101878882523185">Instalar <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">La sincronización no funciona. Prueba a cerrar sesión y volver a iniciarla.</translation> <translation id="6351063337294363751">En este menú puedes borrar los datos de navegación</translation> @@ -5020,6 +5027,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 con cifrado RSA</translation> <translation id="7075625805486468288">Administra la configuración y los certificados HTTPS/SSL</translation> <translation id="7076293881109082629">Iniciando sesión</translation> +<translation id="7076878155205969899">Silenciar sonido</translation> <translation id="7077829361966535409">No se ha podido cargar la página de inicio de sesión con la configuración de proxy actual. <ph name="GAIA_RELOAD_LINK_START" />Intenta iniciar sesión de nuevo<ph name="GAIA_RELOAD_LINK_END" /> o utiliza otra <ph name="PROXY_SETTINGS_LINK_START" />configuración de proxy<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Todas las redes</translation> <translation id="708060913198414444">C&opiar dirección de audio</translation> @@ -5040,7 +5048,6 @@ <translation id="7099337801055912064">No se pueden cargar archivos PPD grandes. El tamaño máximo es 250 kB.</translation> <translation id="7102687220333134671">Las actualizaciones automáticas están activadas</translation> <translation id="7102832101143475489">Se ha agotado el tiempo de espera de la solicitud</translation> -<translation id="7105390788077117391">Preferencias de USB</translation> <translation id="710640343305609397">Abrir configuración de red</translation> <translation id="7108338896283013870">Ocultar</translation> <translation id="7108668606237948702">intro</translation> @@ -5070,7 +5077,6 @@ <translation id="7136694880210472378">Elegir como predeterminado</translation> <translation id="7136984461011502314">Te damos la bienvenida a <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Se ha producido un error. Selecciona otras imágenes e inténtalo de nuevo.</translation> -<translation id="7138678301420049075">Otro</translation> <translation id="713888829801648570">La contraseña no se ha podido verificar porque no te has conectado a Internet.</translation> <translation id="7140928199327930795">No hay otros dispositivos disponibles.</translation> <translation id="7141105143012495934">Se ha producido un error al iniciar sesión porque no ha sido posible recuperar la información de la cuenta. Ponte en contacto con el administrador o vuelve a intentarlo.</translation> @@ -5177,6 +5183,7 @@ <translation id="7280649757394340890">Ajustes de voz de síntesis de voz</translation> <translation id="7280877790564589615">Permiso solicitado</translation> <translation id="7282992757463864530">Barra de información</translation> +<translation id="7284411326658527427">Cada perfil puede personalizar su cuenta y mantener la privacidad de sus datos.</translation> <translation id="7287143125007575591">Acceso denegado</translation> <translation id="7287411021188441799">Recuperar fondo predeterminado</translation> <translation id="7288013116963835700">Eliminar Linux de <ph name="DEVICE_TYPE" /></translation> @@ -5753,6 +5760,7 @@ <translation id="7963826112438303517">Tu Asistente utiliza estas grabaciones y tus solicitudes de voz para crear y actualizar tu modelo de voz, que solo se almacena en los dispositivos en los que hayas activado Voice Match. Puedes ver o volver a entrenar tu actividad de voz en la configuración del Asistente.</translation> <translation id="7966241909927244760">C&opiar dirección de imagen</translation> <translation id="7968072247663421402">Opciones de proveedor</translation> +<translation id="7968198493605442410">Copiar enlace al texto</translation> <translation id="7968742106503422125">Leer y modificar los datos que se copian y se pegan</translation> <translation id="7968833647796919681">Habilitar recogida de datos de rendimiento</translation> <translation id="7968982339740310781">Ver detalles</translation> @@ -6133,6 +6141,7 @@ <translation id="8428213095426709021">Configuración</translation> <translation id="8428271547607112339">Añadir cuenta de centro educativo</translation> <translation id="8428628598981198790">No puedes utilizar tu llave de seguridad en este sitio web</translation> +<translation id="8428634594422941299">Entendido</translation> <translation id="84297032718407999">Tu sesión se cerrará en <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Mostrar toques</translation> <translation id="8431909052837336408">Cambiar PIN de la tarjeta SIM</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index 6589b325..0191405 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">Tundmatu seade [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">See omaniku konto peab olema esimene sisselogitud konto mitmele kontole sisselogimise seansil.</translation> <translation id="150411034776756821">Eemalda sait <ph name="SITE" /></translation> +<translation id="1504311855864906891">Hangi meediasisu jaoks subtiitrid</translation> <translation id="1504551620756424144">Windowsis on jagatud kaustad saadaval asukohas <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Otsingumootor</translation> <translation id="1507170440449692343">Sellel lehel on juurdepääs teie kaamerale blokeeritud.</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">Sisestage 4-kohaline PIN-kood (0000–9999)</translation> <translation id="2399939490305346086">Turvavõtmel olevad sisselogimisandmed</translation> <translation id="2400664245143453337">Kohene värskendamine on nõutav</translation> -<translation id="2407481962792080328">Kui logite oma Google'i kontole sisse, lülitatakse see funktsioon sisse</translation> <translation id="2408018932941436077">Kaardi salvestamine</translation> <translation id="2408955596600435184">Sisestage PIN-kood</translation> <translation id="241082044617551207">Tundmatu pistikprogramm</translation> @@ -3066,6 +3066,7 @@ <translation id="4657810666108475055">Vahelehtede otsing</translation> <translation id="465878909996028221">Brauseri ümbersuunamiste puhul toetatakse ainult HTTP-d, HTTPS-i ja failiprotokolle.</translation> <translation id="4659077111144409915">Peamine konto</translation> +<translation id="4659126640776004816">Kui logite oma Google'i kontole sisse, lülitatakse see funktsioon sisse.</translation> <translation id="4660476621274971848">Eeldatav versioon oli „<ph name="EXPECTED_VERSION" />”, kuid versioon oli „<ph name="NEW_ID" />”</translation> <translation id="4660540330091848931">Suuruse muutmine</translation> <translation id="4661407454952063730">Rakenduse andmed võivad olla mis tahes andmed, mille rakendus on salvestanud (arendaja seadete põhjal), sh näiteks kontaktid, sõnumid ja fotod.</translation> @@ -3131,7 +3132,6 @@ <translation id="4750394297954878236">Soovitused</translation> <translation id="475088594373173692">Esimene kasutaja</translation> <translation id="4751476147751820511">Liikumis- või valgusandurid</translation> -<translation id="4752124003533492687">Avage menüü Seaded, et ühendada <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Peata / laadi uuesti</translation> <translation id="4756388243121344051">&Ajalugu</translation> <translation id="4759238208242260848">Allalaadimised</translation> @@ -5021,6 +5021,7 @@ <translation id="7075513071073410194">PKCS 1 MD5 koos RSA krüpteerimisega</translation> <translation id="7075625805486468288">HTTPS-/SSL-sertifikaatide ja seadete haldamine</translation> <translation id="7076293881109082629">Sisselogimine</translation> +<translation id="7076878155205969899">Vaigistab heli</translation> <translation id="7077829361966535409">Sisselogimislehte ei saanud praeguste puhverserveri seadetega laadida. <ph name="GAIA_RELOAD_LINK_START" />Proovige uuesti sisse logida<ph name="GAIA_RELOAD_LINK_END" /> või kasutage teisi <ph name="PROXY_SETTINGS_LINK_START" />puhverserveri seadeid<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Kõik võrgud</translation> <translation id="708060913198414444">K&opeeri heli aadress</translation> @@ -5041,7 +5042,6 @@ <translation id="7099337801055912064">Suurt PPD-d ei saa laadida. Maksimaalne suurus on 250 kB.</translation> <translation id="7102687220333134671">Automaatsed värskendused on sisse lülitatud</translation> <translation id="7102832101143475489">Taotlus aegus</translation> -<translation id="7105390788077117391">USB eelistused</translation> <translation id="710640343305609397">Ava võrguseaded</translation> <translation id="7108338896283013870">Peida</translation> <translation id="7108668606237948702">sisestusklahv</translation> @@ -5071,7 +5071,6 @@ <translation id="7136694880210472378">Muuda vaikevalikuks</translation> <translation id="7136984461011502314">Tere tulemast rakendusse <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Ilmnes viga. Uuesti proovimiseks valige muud pildid.</translation> -<translation id="7138678301420049075">Muu</translation> <translation id="713888829801648570">Kahjuks ei saa teie parooli kinnitada, kuna olete offlainis.</translation> <translation id="7140928199327930795">Saadaval pole ühtegi muud seadet.</translation> <translation id="7141105143012495934">Sisselogimine ebaõnnestus, kuna teie konto üksikasju ei saanud tuua. Võtke ühendust administraatoriga või proovige uuesti.</translation> @@ -6134,6 +6133,7 @@ <translation id="8428213095426709021">Seaded</translation> <translation id="8428271547607112339">Lisa koolikonto</translation> <translation id="8428628598981198790">Teie turvavõtit ei saa sellel saidil kasutada</translation> +<translation id="8428634594422941299">Selge</translation> <translation id="84297032718407999">Teid logitakse välja <ph name="LOGOUT_TIME_LEFT" /> pärast</translation> <translation id="8431190899827883166">Puudutuste kuvamine</translation> <translation id="8431909052837336408">Muuda SIM-kaardi PIN-koodi</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb index ac12d693..e402d3f 100644 --- a/chrome/app/resources/generated_resources_eu.xtb +++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">Identifikatu ezin den gailua [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Saio anitzeko saioetan, jabeak hasi behar du kontua lehendabizi.</translation> <translation id="150411034776756821">Kendu <ph name="SITE" /></translation> +<translation id="1504311855864906891">Lortu azpitituluak multimedia-edukirako</translation> <translation id="1504551620756424144">Karpeta partekatuak Windows-eko direktorio honetan daude: <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Bilatzailea</translation> <translation id="1507170440449692343">Orriari kamera atzitzeko aukera blokeatu zaio.</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">Idatzi lau digituko PIN kodea (0000-9999)</translation> <translation id="2399939490305346086">Segurtasun-giltzako saioa hasteko datuak</translation> <translation id="2400664245143453337">Berehala eguneratu behar da</translation> -<translation id="2407481962792080328">Google-ko kontuan saioa hastean, aktibatu egiten da eginbide hau</translation> <translation id="2408018932941436077">Txartela gordetzen</translation> <translation id="2408955596600435184">Idatzi PIN kodea</translation> <translation id="241082044617551207">Plugin ezezaguna</translation> @@ -3066,6 +3066,7 @@ <translation id="4657810666108475055">Fitxa-bilaketa</translation> <translation id="465878909996028221">HTTP, HTTPS eta fitxategi-protokoloak soilik onartzen dira arakatzaileen birbideratzeak gauzatzeko.</translation> <translation id="4659077111144409915">Kontu nagusia</translation> +<translation id="4659126640776004816">Google-ko kontuan saioa hastean, aktibatu egiten da eginbide hau.</translation> <translation id="4660476621274971848">"<ph name="EXPECTED_VERSION" />" bertsioa espero zen, baina "<ph name="NEW_ID" />" da bertsioa</translation> <translation id="4660540330091848931">Tamaina aldatzen</translation> <translation id="4661407454952063730">Aplikazioek gordetako datu guztiak sartzen dira aplikazioetako datuetan (garatzaileen ezarpenen arabera), kontaktuak, mezuak eta argazkiak barne.</translation> @@ -3131,7 +3132,6 @@ <translation id="4750394297954878236">Iradokizunak</translation> <translation id="475088594373173692">Lehen erabiltzailea</translation> <translation id="4751476147751820511">Mugimenduaren eta argiaren sentsoreak</translation> -<translation id="4752124003533492687">Ireki ezarpenak <ph name="USB_DEVICE_NAME" /> konektatzeko</translation> <translation id="4756378406049221019">Gelditu / Kargatu berriro</translation> <translation id="4756388243121344051">&Historia</translation> <translation id="4759238208242260848">Deskargak</translation> @@ -5021,6 +5021,7 @@ <translation id="7075513071073410194">PKCS #1 MD5, RSA enkriptatzearekin</translation> <translation id="7075625805486468288">Kudeatu HTTPS/SSL ziurtagiriak eta ezarpenak</translation> <translation id="7076293881109082629">Saioa hasten</translation> +<translation id="7076878155205969899">Desaktibatu audioa</translation> <translation id="7077829361966535409">Ezin izan da kargatu saioa hasteko orria uneko proxy-ezarpenekin. <ph name="GAIA_RELOAD_LINK_START" />Saiatu saioa berriro hasten<ph name="GAIA_RELOAD_LINK_END" /> edo erabili beste <ph name="PROXY_SETTINGS_LINK_START" />proxy-ezarpen<ph name="PROXY_SETTINGS_LINK_END" /> batzuk.</translation> <translation id="7078120482318506217">Sare guztiak</translation> <translation id="708060913198414444">K&opiatu audioaren helbidea</translation> @@ -5041,7 +5042,6 @@ <translation id="7099337801055912064">Ezin da kargatu PPD fitxategia handiegia delako. Gehienez 250 KB-koa izan daiteke.</translation> <translation id="7102687220333134671">Aktibatuta daude eguneratze automatikoak</translation> <translation id="7102832101143475489">Gainditu egin da eskaeraren denbora-muga</translation> -<translation id="7105390788077117391">USB hobespenak</translation> <translation id="710640343305609397">Ireki sarearen ezarpenak</translation> <translation id="7108338896283013870">Ezkutatu</translation> <translation id="7108668606237948702">sartu tekla</translation> @@ -5071,7 +5071,6 @@ <translation id="7136694880210472378">Ezarri lehenetsi gisa</translation> <translation id="7136984461011502314">Ongi etorri <ph name="PRODUCT_NAME" /> programara</translation> <translation id="7136993520339022828">Errore bat gertatu da. Saiatu berriro beste irudi batzuk hautatuta.</translation> -<translation id="7138678301420049075">Beste bat</translation> <translation id="713888829801648570">Ezin izan da pasahitza egiaztatu ez zaudelako Internetera konektatuta.</translation> <translation id="7140928199327930795">Ez dago erabilgarri dagoen bestelako gailurik.</translation> <translation id="7141105143012495934">Ezin izan da hasi saioa, ezin izan direlako eskuratu kontuaren xehetasunak. Jarri administratzailearekin harremanetan edo saiatu berriro.</translation> @@ -6133,6 +6132,7 @@ <translation id="8428213095426709021">Ezarpenak</translation> <translation id="8428271547607112339">Gehitu ikastetxeko kontua</translation> <translation id="8428628598981198790">Daukazun segurtasun-giltza ezin da erabili webgune honetan</translation> +<translation id="8428634594422941299">Ados</translation> <translation id="84297032718407999">Saioa amaituko egingo da <ph name="LOGOUT_TIME_LEFT" /> igarotakoan</translation> <translation id="8431190899827883166">Erakutsi sakatutakoa</translation> <translation id="8431909052837336408">Aldatu SIM txartelaren PIN kodea</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index 08c292b..18cc16e2 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">خواندن و تغییر همه دادهها در رایانهتان و وبسایتهایی که بازدید میکنید</translation> <translation id="1430915738399379752">چاپ</translation> <translation id="1431188203598586230">بهروزرسانی نرمافزار نهایی</translation> +<translation id="1431402976894535801">مسدود کردن سایتها برای اطلاع از وضعیت حضور شما</translation> <translation id="1431432486300429272">Google ممکن است از سابقه مرورتان برای شخصیسازی جستجو و سایر سرویسهای Google استفاده کند. شما یا ولیتان میتوانید هرزمان که خواستید این مورد را در myaccount.google.com/activitycontrols/search تغییر دهید</translation> <translation id="1432581352905426595">مدیریت موتورهای جستجو</translation> <translation id="1433811987160647649">پیش از دسترسی سؤال شود</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">دستگاه نامشخص [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">این حساب مالک باید اولین حسابی باشد که در یک جلسه ورود به سیستم چندگانه به سیستم وارد میشود.</translation> <translation id="150411034776756821">حذف <ph name="SITE" /></translation> +<translation id="1504311855864906891">دریافت زیرنویس ناشنوایان برای رسانهها</translation> <translation id="1504551620756424144">پوشههای همرسانیشده در Windows در <ph name="BASE_DIR" /> دردسترس هستند.</translation> <translation id="1506061864768559482">موتور جستجو</translation> <translation id="1507170440449692343">این صفحه از دسترسی به دوربین شما بازداشته شده است.</translation> @@ -566,6 +568,7 @@ <translation id="1651008383952180276">باید همان عبارت عبور را دو بار وارد کنید</translation> <translation id="1652326691684645429">فعال کردن «همرسانی با اطراف»</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{چاپگر را به Google Cloud Print اضافه کنید تا بتوانید از هر کجا چاپ کنید.}one{# چاپگر را به Google Cloud Print اضافه کنید تا بتوانید از هر کجا چاپ کنید.}other{# چاپگر را به Google Cloud Print اضافه کنید تا بتوانید از هر کجا چاپ کنید.}}</translation> +<translation id="1653575510930452864">کپی کردن پیوند به نوشتار</translation> <translation id="1656528038316521561">ماتی پسزمینه</translation> <translation id="1657406563541664238">با ارسال خودکار آمار استفاده و گزارشهای خرابی به Google، به بهتر شدن <ph name="PRODUCT_NAME" /> کمک کنید.</translation> <translation id="1657937299377480641">برای ورود دوباره به سیستم بهمنظور دسترسی به منابع آموزشی، از ولی خود بخواهید به شما اجازه بدهد</translation> @@ -999,6 +1002,7 @@ <translation id="2178614541317717477">بی اعتبارشدن CA</translation> <translation id="2182058453334755893">در بریدهدان کپی شد</translation> <translation id="2184515124301515068">Chrome انتخاب کند سایتها چه موقع صدا پخش کنند (توصیه میشود)</translation> +<translation id="2187243482123994665">حضور کاربر</translation> <translation id="2187675480456493911">با دستگاههای دیگر در حسابتان همگامسازی شده است. تنظیماتی که دیگر کاربران تغییر دادهاند همگامسازی نخواهد شد. <ph name="LINK_BEGIN" />بیشتر بدانید<ph name="LINK_END" /></translation> <translation id="2187895286714876935">خطای وارد کردن مجوز سرور</translation> <translation id="2187906491731510095">افزونهها بهروزرسانی شدند</translation> @@ -1187,7 +1191,6 @@ <translation id="2396783860772170191">پین ۴ رقمی را وارد کنید (۹۹۹۹-۰۰۰۰)</translation> <translation id="2399939490305346086">دادههای ورود به سیستم کلید امنیتی</translation> <translation id="2400664245143453337">بهروزرسانی فوری الزامی است</translation> -<translation id="2407481962792080328">وقتی به «حساب Google» خود وارد میشوید، این ویژگی روشن میشود</translation> <translation id="2408018932941436077">درحال ذخیره کارت</translation> <translation id="2408955596600435184">پین را وارد کنید</translation> <translation id="241082044617551207">افزایه ناشناس</translation> @@ -1827,6 +1830,7 @@ <translation id="3163201441334626963">محصول نامشخص <ph name="PRODUCT_ID" /> از فروشنده <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">سرویسهای زیر به ایمن و محفوظ نگه داشتن دادههایتان کمک میکنند. هرزمان که بخواهید میتوانید این ویژگیها را خاموش کنید.</translation> <translation id="3164329792803560526">درحال همرسانی این برگه با <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">وقتی سایتی میخواهد از وضعیت حضور شما مطلع شود سؤال شود</translation> <translation id="3165390001037658081">برخی شرکتهای مخابراتی ممکن است این قابلیت را مسدود کنند.</translation> <translation id="316652501498554287">حسابهای G Suite for Education</translation> <translation id="3169472444629675720">کشف کردن</translation> @@ -2944,6 +2948,7 @@ <translation id="4527186207340858212">نمایه جدیدی برای کار ایجاد شود؟</translation> <translation id="452750746583162491">مرور دادههای همگامسازیشده</translation> <translation id="4530494379350999373">مبدأ</translation> +<translation id="4531924570968473143">چه شخصی را میخواهید به این <ph name="DEVICE_TYPE" /> اضافه کنید؟</translation> <translation id="4532646538815530781">این سایت از حسگرهای حرکتی استفاده میکند</translation> <translation id="4533846798469727141">اکنون بگویید «Hey Google»</translation> <translation id="4533985347672295764">زمان پردازش CPU</translation> @@ -3063,6 +3068,7 @@ <translation id="4657810666108475055">جستجوی برگه</translation> <translation id="465878909996028221">فقط پروتکلهای فایل، http و https برای ویژگی هدایت کردن مرورگر پشتیبانی میشوند.</translation> <translation id="4659077111144409915">حساب اصلی</translation> +<translation id="4659126640776004816">وقتی به «حساب Google» خود وارد میشوید، این ویژگی روشن میشود.</translation> <translation id="4660476621274971848">نسخه موردانتظار «<ph name="EXPECTED_VERSION" />» است، اما نسخه «<ph name="NEW_ID" />» بود</translation> <translation id="4660540330091848931">درحال تغییر اندازه</translation> <translation id="4661407454952063730">دادههای برنامه میتوانند هر دادهای باشند که برنامه (براساس تنظیمات برنامهنویس) ذخیره کرده است، ازجمله دادههایی مانند مخاطبین، پیامها، و عکسها.</translation> @@ -3128,7 +3134,6 @@ <translation id="4750394297954878236">پیشنهادات</translation> <translation id="475088594373173692">کاربر اول</translation> <translation id="4751476147751820511">حسگرهای نوری یا حرکتی</translation> -<translation id="4752124003533492687">برای اتصال <ph name="USB_DEVICE_NAME" />، «تنظیمات» را باز کنید</translation> <translation id="4756378406049221019">توقف/تازهسازی</translation> <translation id="4756388243121344051">&سابقه</translation> <translation id="4759238208242260848">بارگیریها</translation> @@ -3975,6 +3980,7 @@ <translation id="5804241973901381774">مجوزها</translation> <translation id="5805697420284793859">مدیر پنجره</translation> <translation id="5806773519584576205">۰ درجه (پیشفرض)</translation> +<translation id="5808664694611589238">{0,plural, =1{بستن پنجره مهمان}one{بستن پنجره مهمان}other{بستن پنجرههای مهمان}}</translation> <translation id="5810809306422959727">این حساب برای کنترلهای والدین واجد شرایط نیست</translation> <translation id="5812674658566766066">بزرگ کردن همه</translation> <translation id="5814126672212206791">نوع اتصال</translation> @@ -4432,6 +4438,7 @@ <translation id="6344170822609224263">فهرست دسترسی از اتصالات شبکه</translation> <translation id="6344576354370880196">چاپگرهای ذخیرهشده</translation> <translation id="6345418402353744910">وارد کردن نام کاربری و گذرواژه برای پراکسی <ph name="PROXY" /> الزامی است تا سرپرست بتواند شبکهتان را پیکربندی کند</translation> +<translation id="6345878117466430440">علامتگذاری بهعنوان خواندهشده</translation> <translation id="6349101878882523185">نصب <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">همگامسازی کار نمیکند. از سیستم خارج شوید و دوباره به آن وارد شوید.</translation> <translation id="6351063337294363751">میتوانید دادههای مرور را از این منو پاک کنید</translation> @@ -5018,6 +5025,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 با رمزگذاری RSA</translation> <translation id="7075625805486468288">مدیریت گواهیها و تنظیمات HTTPS/SSL</translation> <translation id="7076293881109082629">در حال ورود به سیستم</translation> +<translation id="7076878155205969899">بیصدا کردن</translation> <translation id="7077829361966535409">بارگیری صفحه ورود به سیستم با استفاده از تنظمیات کنونی پروکسی انجام نشد. لطفاً <ph name="GAIA_RELOAD_LINK_START" />دوباره به سیستم وارد شوید<ph name="GAIA_RELOAD_LINK_END" /> یا از <ph name="PROXY_SETTINGS_LINK_START" />تنظمیات پروکسی<ph name="PROXY_SETTINGS_LINK_END" /> متفاوتی استفاده نمایید.</translation> <translation id="7078120482318506217">تمام شبکهها</translation> <translation id="708060913198414444">کپی آدرس صوت</translation> @@ -5038,7 +5046,6 @@ <translation id="7099337801055912064">فایل PPD بزرگ است و بار نمیشود. حداکثر اندازه ۲۵۰ کیلوبایت است.</translation> <translation id="7102687220333134671">بهروزرسانیهای خودکار روشن هستند</translation> <translation id="7102832101143475489">درنگ درخواست تمام شد</translation> -<translation id="7105390788077117391">اولویتهای USB</translation> <translation id="710640343305609397">بازکردن تنظیمات شبکه</translation> <translation id="7108338896283013870">عدم نمایش</translation> <translation id="7108668606237948702">Enter</translation> @@ -5068,7 +5075,6 @@ <translation id="7136694880210472378">پیشفرض قرار دادن</translation> <translation id="7136984461011502314">به <ph name="PRODUCT_NAME" /> خوش آمدید</translation> <translation id="7136993520339022828">خطایی روی داده است. لطفاً با انتخاب تصاویر دیگر دوباره امتحان کنید.</translation> -<translation id="7138678301420049075">دیگر</translation> <translation id="713888829801648570">متأسفیم، گذرواژهتان قابل تأیید نیست، زیرا آفلاین هستید.</translation> <translation id="7140928199327930795">هیچ دستگاه دیگری در دسترس نیست.</translation> <translation id="7141105143012495934">به دلیل اینکه جزئيات حساب شما بازیابی نشد، ورود به سیستم ناموفق بود. لطفاً با سرپرستتان تماس بگیرید یا دوباره امتحان کنید.</translation> @@ -5175,6 +5181,7 @@ <translation id="7280649757394340890">تنظیمات صدای نوشتار به گفتار</translation> <translation id="7280877790564589615">مجوز درخواست شد</translation> <translation id="7282992757463864530">نوار اطلاعات</translation> +<translation id="7284411326658527427">هر فرد میتواند حسابش را شخصیسازی کند و دادهها را خصوصی نگه دارد.</translation> <translation id="7287143125007575591">دسترسی رد شد.</translation> <translation id="7287411021188441799">بازیابی پسزمینه پیشفرض</translation> <translation id="7288013116963835700">برداشتن Linux در <ph name="DEVICE_TYPE" /></translation> @@ -5751,6 +5758,7 @@ <translation id="7963826112438303517">«دستیار» از این موارد ضبطشده و درخواستهای گفتاریتان برای ایجاد و بهروزرسانی مدل صوتیتان استفاده میکند؛ این مدل فقط در دستگاههایی ذخیره میشود که Voice Match در آنها روشن شده است. برای مشاهده یا آموزش مجدد فعالیت صوتی، به «تنظیمات دستیار» بروید.</translation> <translation id="7966241909927244760">کپی آدرس تصویر</translation> <translation id="7968072247663421402">گزینههای ارائهدهنده</translation> +<translation id="7968198493605442410">کپی کردن پیوند به نوشتار</translation> <translation id="7968742106503422125">خواندن و اصلاح دادههایی که کپی و جایگذاری میکنید</translation> <translation id="7968833647796919681">فعال کردن جمعآوری دادههای عملکرد</translation> <translation id="7968982339740310781">مشاهدهٔ جزئیات</translation> @@ -6131,6 +6139,7 @@ <translation id="8428213095426709021">تنظیمات</translation> <translation id="8428271547607112339">افزودن حساب محل تحصیل</translation> <translation id="8428628598981198790">نمیتوان از کلید امنیتیتان در این سایت استفاده کرد.</translation> +<translation id="8428634594422941299">متوجه شدم</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> دیگر از سیستم خارج میشوید</translation> <translation id="8431190899827883166">نمایش ضربهها</translation> <translation id="8431909052837336408">تغییر پین سیم</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index 77fe790a..d8e18c7 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">Tuntematon laite [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Tämän omistajatilin täytyy olla ensimmäinen sisään kirjautuva tili useiden tilien istunnossa.</translation> <translation id="150411034776756821">Poista <ph name="SITE" /></translation> +<translation id="1504311855864906891">Median tekstitys</translation> <translation id="1504551620756424144">Jaettujen kansioiden sijainti Windowsissa: <ph name="BASE_DIR" /></translation> <translation id="1506061864768559482">Hakukone</translation> <translation id="1507170440449692343">Tältä sivulta on estetty kameran käyttö.</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">Lisää nelinumeroinen PIN-koodi (0000–9999)</translation> <translation id="2399939490305346086">Suojausavaimen kirjautumisdata</translation> <translation id="2400664245143453337">Päivitys vaaditaan välittömästi</translation> -<translation id="2407481962792080328">Tämä ominaisuus otetaan käyttöön, kun kirjaudut Google-tilillesi</translation> <translation id="2408018932941436077">Tallennetaan korttia</translation> <translation id="2408955596600435184">Lisää PIN-koodi</translation> <translation id="241082044617551207">Tuntematon laajennus</translation> @@ -3063,6 +3063,7 @@ <translation id="4657810666108475055">Välilehtihaku</translation> <translation id="465878909996028221">Selainten uudelleenohjaukset tukevat vain http-, https- ja tiedostoprotokollia.</translation> <translation id="4659077111144409915">Ensisijainen tili</translation> +<translation id="4659126640776004816">Tämä ominaisuus otetaan käyttöön, kun kirjaudut Google-tilillesi.</translation> <translation id="4660476621274971848">Versiota <ph name="EXPECTED_VERSION" /> odotettiin, mutta versio oli <ph name="NEW_ID" />.</translation> <translation id="4660540330091848931">Muutetaan kokoa</translation> <translation id="4661407454952063730">Sovellusdata voi olla mitä tahansa dataa, jota sovellus on tallentanut (kehittäjän asetusten perusteella), mukaan lukien yhteystietoja, viestejä ja valokuvia.</translation> @@ -3128,7 +3129,6 @@ <translation id="4750394297954878236">Ehdotukset</translation> <translation id="475088594373173692">Ensimmäinen käyttäjä</translation> <translation id="4751476147751820511">Liike- tai valotunnistimet</translation> -<translation id="4752124003533492687">Yhdistä <ph name="USB_DEVICE_NAME" /> avaamalla Asetukset</translation> <translation id="4756378406049221019">Pysäytä/päivitä</translation> <translation id="4756388243121344051">&Historia</translation> <translation id="4759238208242260848">Lataukset</translation> @@ -5020,6 +5020,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 ja RSA-salaus</translation> <translation id="7075625805486468288">Hallitse HTTPS/SSL-varmenteita ja ‑asetuksia.</translation> <translation id="7076293881109082629">Kirjautuminen</translation> +<translation id="7076878155205969899">Mykistä ääni</translation> <translation id="7077829361966535409">Kirjautumissivun lataaminen epäonnistui nykyisillä välityspalvelimen asetuksilla. <ph name="GAIA_RELOAD_LINK_START" />Kirjaudu sisään uudelleen<ph name="GAIA_RELOAD_LINK_END" /> tai muokkaa <ph name="PROXY_SETTINGS_LINK_START" />välityspalvelimen asetuksia<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Kaikki verkot</translation> <translation id="708060913198414444">K&opioi äänen osoite</translation> @@ -5040,7 +5041,6 @@ <translation id="7099337801055912064">PPD on liian suuri ladattavaksi. Enimmäiskoko on 250 kt.</translation> <translation id="7102687220333134671">Automaattiset päivitykset ovat käytössä.</translation> <translation id="7102832101143475489">Pyyntö aikakatkaistiin</translation> -<translation id="7105390788077117391">USB-asetukset</translation> <translation id="710640343305609397">Avaa verkkoasetukset</translation> <translation id="7108338896283013870">Piilota</translation> <translation id="7108668606237948702">kirjoita</translation> @@ -5070,7 +5070,6 @@ <translation id="7136694880210472378">Aseta oletukseksi</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> – Tervetuloa</translation> <translation id="7136993520339022828">Tapahtui virhe. Valitse muita kuvia ja yritä uudelleen.</translation> -<translation id="7138678301420049075">Muu</translation> <translation id="713888829801648570">Salasanaasi ei voi vahvistaa, koska olet offline-tilassa.</translation> <translation id="7140928199327930795">Ei muita käytettävissä olevia laitteita.</translation> <translation id="7141105143012495934">Sisäänkirjautuminen epäonnistui, koska tilitietojasi ei löytynyt. Ota yhteyttä järjestelmänvalvojaan tai yritä uudelleen.</translation> @@ -6132,6 +6131,7 @@ <translation id="8428213095426709021">Asetukset</translation> <translation id="8428271547607112339">Lisää koulutili</translation> <translation id="8428628598981198790">Suojausavaintasi ei voi käyttää tällä sivustolla</translation> +<translation id="8428634594422941299">Selvä</translation> <translation id="84297032718407999">Sinut kirjataan ulos <ph name="LOGOUT_TIME_LEFT" /> päästä</translation> <translation id="8431190899827883166">Näytä kosketus</translation> <translation id="8431909052837336408">Vaihda SIM-kortin PIN-koodi</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb index 98f5cc83..d4a86ba 100644 --- a/chrome/app/resources/generated_resources_fil.xtb +++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">Hindi kilalang device [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Ang account ng may-ari na ito ay dapat ang unang naka-sign in na account sa isang session ng multiple na pag-sign in.</translation> <translation id="150411034776756821">Alisin ang <ph name="SITE" /></translation> +<translation id="1504311855864906891">Kumuha ng mga caption para sa iyong media</translation> <translation id="1504551620756424144">Available ang mga nakabahaging folder sa Windows sa <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Search engine</translation> <translation id="1507170440449692343">Na-block ang pahinang ito sa pag-a-access sa iyong camera.</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">Ilagay ang 4 na digit na pin (0000-9999)</translation> <translation id="2399939490305346086">Data ng pag-sign in ng security key</translation> <translation id="2400664245143453337">Kinakailangan ng agarang update</translation> -<translation id="2407481962792080328">Kapag nag-sign in ka sa iyong Google Account, mao-on ang feature na ito</translation> <translation id="2408018932941436077">Sine-save ang card</translation> <translation id="2408955596600435184">Ilagay ang iyong PIN</translation> <translation id="241082044617551207">Hindi kilalang plugin</translation> @@ -3066,6 +3066,7 @@ <translation id="4657810666108475055">Paghahanap sa tab</translation> <translation id="465878909996028221">Tanging http, https at file protocol ang sinusuportahan para sa mga pag-redirect ng browser.</translation> <translation id="4659077111144409915">Pangunahing account</translation> +<translation id="4659126640776004816">Kapag nag-sign in ka sa iyong Google Account, mao-on ang feature na ito.</translation> <translation id="4660476621274971848">"<ph name="EXPECTED_VERSION" />" ang inaasahang bersyon, ngunit "<ph name="NEW_ID" />" ang bersyon</translation> <translation id="4660540330091848931">Nire-resize</translation> <translation id="4661407454952063730">Ang data ng app ay puwedeng anumang data na na-save ng isang app (batay sa mga setting ng developer), kabilang ang data tulad ng mga contact, mensahe, at larawan.</translation> @@ -3131,7 +3132,6 @@ <translation id="4750394297954878236">Mga Suhestyon</translation> <translation id="475088594373173692">Unang user</translation> <translation id="4751476147751820511">Mga motion o light sensor</translation> -<translation id="4752124003533492687">Buksan ang Mga Setting para ikonekta ang <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Ihinto/I-reload</translation> <translation id="4756388243121344051">&History</translation> <translation id="4759238208242260848">Mga Download </translation> @@ -5021,6 +5021,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 na May RSA Encryption</translation> <translation id="7075625805486468288">Pamahalaan ang mga certificate at setting ng HTTPS/SSL</translation> <translation id="7076293881109082629">Nagsa-sign in</translation> +<translation id="7076878155205969899">I-mute ang tunog</translation> <translation id="7077829361966535409">Nabigong ma-load ang pahina sa pag-sign in gamit ang mga kasalukuyang setting ng proxy. Mangyaring <ph name="GAIA_RELOAD_LINK_START" />subukang mag-sign in muli<ph name="GAIA_RELOAD_LINK_END" />, o gumamit ng ibang <ph name="PROXY_SETTINGS_LINK_START" />mga setting ng proxy<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Lahat ng network</translation> <translation id="708060913198414444">K&opyahin ang address ng audio</translation> @@ -5041,7 +5042,6 @@ <translation id="7099337801055912064">Hindi makapag-load ng malaking PPD. 250kB ang maximum na laki.</translation> <translation id="7102687220333134671">Naka-on ang mga awtomatikong update</translation> <translation id="7102832101143475489">Nag-time out ang kahilingan</translation> -<translation id="7105390788077117391">Mga kagustuhans sa USB</translation> <translation id="710640343305609397">Buksan ang mga network setting</translation> <translation id="7108338896283013870">Itago</translation> <translation id="7108668606237948702">enter</translation> @@ -5071,7 +5071,6 @@ <translation id="7136694880210472378">Gawing default</translation> <translation id="7136984461011502314">Maligayang Pagdating sa <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Mayroong error. Pakisubukang muli sa pamamagitan ng pagpili ng iba pang larawan.</translation> -<translation id="7138678301420049075">Iba pa</translation> <translation id="713888829801648570">Paumanhin, hindi ma-verify ang iyong password dahil offline ka.</translation> <translation id="7140928199327930795">Walang ibang available na mga device.</translation> <translation id="7141105143012495934">Hindi nakapag-sign dahil hindi maibalik ang mga detalye ng iyong account. Mangyaring makipag-ugnayan sa iyong administrator o subukang muli.</translation> @@ -6134,6 +6133,7 @@ <translation id="8428213095426709021">Mga Setting</translation> <translation id="8428271547607112339">Magdagdag ng pampaaralang account</translation> <translation id="8428628598981198790">Hindi puwedeng gamitin ang iyong security key sa site na ito</translation> +<translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">Masa-sign out ka sa loob ng <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Ipakita ang mga pag-tap</translation> <translation id="8431909052837336408">Palitan ang PIN ng SIM</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb index 9f9a6d5..09dc9c49 100644 --- a/chrome/app/resources/generated_resources_fr-CA.xtb +++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Lire et modifier toutes vos données sur votre appareil et sur les sites Web que vous consultez</translation> <translation id="1430915738399379752">Imprimer</translation> <translation id="1431188203598586230">Dernière mise à jour logicielle</translation> +<translation id="1431402976894535801">Empêcher les sites de savoir lorsque vous êtes présent</translation> <translation id="1431432486300429272">Google peut utiliser ton historique de navigation pour personnaliser la recherche et d'autres services Google. Toi ou ton parent pouvez modifier cela en tout temps sur la page myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Gérer les moteurs de recherche</translation> <translation id="1433811987160647649">Demander avant d'accéder</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Appareil inconnu [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Ce compte de propriétaire doit être le premier compte à être connecté lors de sessions de connexion multicompte.</translation> <translation id="150411034776756821">Supprimer <ph name="SITE" /></translation> +<translation id="1504311855864906891">Générer les sous-titres pour vos contenus multimédias</translation> <translation id="1504551620756424144">Sous Windows, les dossiers partagés sont accessibles ici : <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Moteur de recherche</translation> <translation id="1507170440449692343">L'accès à votre caméra est bloqué pour cette page.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Vous devez entrer deux fois la même phrase de passe</translation> <translation id="1652326691684645429">Activer la fonctionnalité Partage à proximité</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Ajoutez l'imprimante à Google Cloud Print pour imprimer des documents où que vous soyez.}one{Ajoutez # imprimante à Google Cloud Print pour imprimer des documents où que vous soyez.}other{Ajoutez # imprimantes à Google Cloud Print pour imprimer des documents où que vous soyez.}}</translation> +<translation id="1653575510930452864">Copier le lien en format texte</translation> <translation id="1656528038316521561">Opacité de l'arrière-plan</translation> <translation id="1657406563541664238">Aidez-nous à améliorer <ph name="PRODUCT_NAME" /> en envoyant automatiquement des statistiques d'utilisation et des rapports d'erreur à Google</translation> <translation id="1657937299377480641">Pour te connecter à nouveau afin d'accéder aux ressources éducatives, demande à un parent de te donner l'autorisation</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">Autorité de certification compromise</translation> <translation id="2182058453334755893">Copié dans votre presse-papiers</translation> <translation id="2184515124301515068">Autoriser Chrome à choisir lorsque des sites peuvent faire jouer du son (recommandé)</translation> +<translation id="2187243482123994665">Présence de l'utilisateur</translation> <translation id="2187675480456493911">Synchronisé avec d'autres appareils associés à votre compte. Les modifications apportées par d'autres utilisateurs ne seront pas synchronisées. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Erreur d'importation du certificat serveur</translation> <translation id="2187906491731510095">Extensions mises à jour</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Entrez votre NIP de quatre chiffres (0000 à 9999)</translation> <translation id="2399939490305346086">Données de connexion de la clé de sécurité</translation> <translation id="2400664245143453337">Une mise à jour immédiate est requise</translation> -<translation id="2407481962792080328">Lorsque vous vous connecterez à votre compte Google, cette fonctionnalité sera activée</translation> <translation id="2408018932941436077">Enregistrement de la carte en cours…</translation> <translation id="2408955596600435184">Entrez votre NIP</translation> <translation id="241082044617551207">Plugiciel inconnu</translation> @@ -1831,6 +1834,7 @@ <translation id="3163201441334626963">Produit inconnu <ph name="PRODUCT_ID" /> du fournisseur <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Les services suivants permettent de protéger vos données. Vous pouvez les désactiver à tout moment.</translation> <translation id="3164329792803560526">Onglet partagé avec <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Demander une autorisation quand un site veut savoir lorsque vous êtes présent</translation> <translation id="3165390001037658081">Certains opérateurs peuvent bloquer cette fonctionnalité.</translation> <translation id="316652501498554287">Comptes G Suite for Education</translation> <translation id="3169472444629675720">Découvrir</translation> @@ -2948,6 +2952,7 @@ <translation id="4527186207340858212">Créer un profil pour le travail?</translation> <translation id="452750746583162491">Examiner vos données synchronisées</translation> <translation id="4530494379350999373">Origine</translation> +<translation id="4531924570968473143">Qui souhaitez-vous ajouter à cet <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Ce site utilise des capteurs de mouvement.</translation> <translation id="4533846798469727141">Maintenant dites « Hey Google »</translation> <translation id="4533985347672295764">Temps CPU</translation> @@ -3067,6 +3072,7 @@ <translation id="4657810666108475055">Recherche d'onglet</translation> <translation id="465878909996028221">Seuls les protocoles http, https et de fichiers sont pris en charge pour les redirections de navigateur.</translation> <translation id="4659077111144409915">Compte principal</translation> +<translation id="4659126640776004816">Lorsque vous vous connecterez à votre compte Google, cette fonctionnalité sera activée.</translation> <translation id="4660476621274971848">Version « <ph name="NEW_ID" /> » reçue au lieu de la version « <ph name="EXPECTED_VERSION" /> » attendue</translation> <translation id="4660540330091848931">Redimensionnement en cours…</translation> <translation id="4661407454952063730">Les données d'application correspondent à toutes les données enregistrées par une application (en fonction des paramètres définis par le concepteur), y compris les données comme les contacts, les messages et les photos.</translation> @@ -3132,7 +3138,6 @@ <translation id="4750394297954878236">Suggestions</translation> <translation id="475088594373173692">Premier utilisateur</translation> <translation id="4751476147751820511">Capteurs de mouvement ou de luminosité</translation> -<translation id="4752124003533492687">Ouvrez le menu Paramètres pour connecter <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Arrêter/Actualiser</translation> <translation id="4756388243121344051">&Historique</translation> <translation id="4759238208242260848">Téléchargements</translation> @@ -3979,6 +3984,7 @@ <translation id="5804241973901381774">Autorisations</translation> <translation id="5805697420284793859">Gestionnaire de fenêtres</translation> <translation id="5806773519584576205">0° (par défaut)</translation> +<translation id="5808664694611589238">{0,plural, =1{Fermer la fenêtre d'invité}one{Fermer la fenêtre d'invité}other{Fermer les fenêtres d'invité}}</translation> <translation id="5810809306422959727">Ce compte n'est pas admissible aux contrôles parentaux</translation> <translation id="5812674658566766066">Tout développer</translation> <translation id="5814126672212206791">Type de connexion</translation> @@ -4436,6 +4442,7 @@ <translation id="6344170822609224263">Accéder à la liste de connexions réseau</translation> <translation id="6344576354370880196">Imprimantes enregistrées</translation> <translation id="6345418402353744910">Votre nom d'utilisateur et votre mot de passe sont requis pour le mandataire <ph name="PROXY" /> afin que l'administrateur puisse configurer votre réseau</translation> +<translation id="6345878117466430440">Marquer comme lu</translation> <translation id="6349101878882523185">Installer <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">La synchronisation ne fonctionne pas. Essayez de vous déconnecter et de vous reconnecter.</translation> <translation id="6351063337294363751">Vous pouvez effacer vos données de navigation à partir de ce menu</translation> @@ -5022,6 +5029,7 @@ <translation id="7075513071073410194">PKCS n° 1 MD5 avec chiffrement RSA</translation> <translation id="7075625805486468288">Gérer les certificats et paramètres HTTPS/SSL</translation> <translation id="7076293881109082629">Connexion en cours</translation> +<translation id="7076878155205969899">Désactiver le son</translation> <translation id="7077829361966535409">Échec du chargement de la page de connexion avec les paramètres de mandataire actuels. Veuillez <ph name="GAIA_RELOAD_LINK_START" />essayer de vous reconnecter<ph name="GAIA_RELOAD_LINK_END" /> ou utiliser d'autres <ph name="PROXY_SETTINGS_LINK_START" />paramètres de mandataire<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Tous les réseaux</translation> <translation id="708060913198414444">C&opier l'adresse de l'audio</translation> @@ -5042,7 +5050,6 @@ <translation id="7099337801055912064">Impossible de charger un PPD volumineux. La taille maximale est de 250 k.</translation> <translation id="7102687220333134671">Les mises à jour automatiques sont activées</translation> <translation id="7102832101143475489">Le délai de traitement de la demande a expiré</translation> -<translation id="7105390788077117391">Préférences USB</translation> <translation id="710640343305609397">Ouvrir les paramètres réseau</translation> <translation id="7108338896283013870">Masquer</translation> <translation id="7108668606237948702">Entrée</translation> @@ -5072,7 +5079,6 @@ <translation id="7136694880210472378">Utiliser par défaut</translation> <translation id="7136984461011502314">Bienvenue dans <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Une erreur s'est produite. Veuillez réessayer en choisissant d'autres images.</translation> -<translation id="7138678301420049075">Autre</translation> <translation id="713888829801648570">Désolés, votre mot de passe n'a pas pu être vérifié parce que vous êtes déconnecté(e).</translation> <translation id="7140928199327930795">Aucun autre périphérique accessible.</translation> <translation id="7141105143012495934">La connexion a échoué, car les détails de votre compte n'ont pas pu être récupérés. Veuillez communiquer avec votre administrateur ou réessayer.</translation> @@ -5179,6 +5185,7 @@ <translation id="7280649757394340890">Paramètres vocaux de synthèse vocale</translation> <translation id="7280877790564589615">Autorisation demandée</translation> <translation id="7282992757463864530">Barre d'information</translation> +<translation id="7284411326658527427">Et chaque personne peut personnaliser son compte et garder ses données privées.</translation> <translation id="7287143125007575591">Accès refusé.</translation> <translation id="7287411021188441799">Rétablir l'arrière-plan par défaut</translation> <translation id="7288013116963835700">Supprimer Linux pour <ph name="DEVICE_TYPE" /></translation> @@ -5755,6 +5762,7 @@ <translation id="7963826112438303517">L'Assistant Google utilise ces enregistrements et vos commandes vocales pour créer et actualiser le modèle de votre voix, qui est stocké uniquement sur les appareils sur lesquels vous avez activé la fonction Voice Match. Vous pouvez la réenregistrer ou afficher votre activité vocale dans les paramètres de l'Assistant Google.</translation> <translation id="7966241909927244760">C&opier l'adresse de l'image</translation> <translation id="7968072247663421402">Options de fournisseur</translation> +<translation id="7968198493605442410">Copier le lien en format texte</translation> <translation id="7968742106503422125">Accéder aux données que vous copiez et collez et les modifier</translation> <translation id="7968833647796919681">Activer la collecte de données de performances</translation> <translation id="7968982339740310781">Afficher les détails</translation> @@ -6134,6 +6142,7 @@ <translation id="8428213095426709021">Paramètres</translation> <translation id="8428271547607112339">Ajouter un compte scolaire</translation> <translation id="8428628598981198790">Votre clé de sécurité ne peut pas être utilisée avec ce site</translation> +<translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">Vous serez déconnecté dans <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Afficher les éléments sélectionnés</translation> <translation id="8431909052837336408">Modifier le NIP de la carte SIM</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index 41ba4a6..181600b 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Accéder à toutes vos données sur votre ordinateur et sur les sites Web que vous consultez et les modifier</translation> <translation id="1430915738399379752">Imprimer</translation> <translation id="1431188203598586230">Dernière mise à jour logicielle</translation> +<translation id="1431402976894535801">Empêcher les sites de savoir quand vous êtes là</translation> <translation id="1431432486300429272">Google peut utiliser votre historique de navigation pour personnaliser la recherche et d'autres services Google. Tes parents ou toi pouvez modifier ce paramètre à tout moment sur la page myaccount.google.com/activitycontrols/search.</translation> <translation id="1432581352905426595">Gérer les moteurs de recherche</translation> <translation id="1433811987160647649">Demander avant d'accéder</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Appareil inconnu [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Ce compte de propriétaire doit être le premier compte à être connecté lors de sessions de connexion multicompte.</translation> <translation id="150411034776756821">Supprimer <ph name="SITE" /></translation> +<translation id="1504311855864906891">Générer des sous-titres pour vos contenus multimédias</translation> <translation id="1504551620756424144">Les dossiers partagés sont disponibles sous Windows dans <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Moteur de recherche</translation> <translation id="1507170440449692343">L'accès à votre caméra est bloqué pour cette page</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Vous devez saisir deux fois la même phrase secrète</translation> <translation id="1652326691684645429">Activer le Partage à proximité</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Ajoutez l'imprimante à Google Cloud Print pour imprimer des documents où que vous soyez.}one{Ajoutez # imprimante à Google Cloud Print pour imprimer des documents où que vous soyez.}other{Ajoutez # imprimantes à Google Cloud Print pour imprimer des documents où que vous soyez.}}</translation> +<translation id="1653575510930452864">Créer un lien</translation> <translation id="1656528038316521561">Opacité de l'arrière-plan</translation> <translation id="1657406563541664238">Nous aider à améliorer <ph name="PRODUCT_NAME" /> en envoyant automatiquement les statistiques d'utilisation et les rapports d'erreur à Google</translation> <translation id="1657937299377480641">Pour te reconnecter afin d'accéder à des ressources pédagogiques, demande à un de tes parents de t'accorder l'autorisation</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">Autorité de certification compromise</translation> <translation id="2182058453334755893">Copié dans le presse-papiers</translation> <translation id="2184515124301515068">Chrome détermine quand activer le son des sites (recommandé)</translation> +<translation id="2187243482123994665">Présence de l'utilisateur</translation> <translation id="2187675480456493911">Ce réseau est synchronisé avec d'autres appareils associés à votre compte. En revanche, les modifications apportées par ces utilisateurs ne seront pas synchronisées. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Erreur d'importation du certificat serveur</translation> <translation id="2187906491731510095">Extensions mises à jour</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Saisissez un code à quatre chiffres (entre 0000 et 9999)</translation> <translation id="2399939490305346086">Données de connexion sur la clé de sécurité</translation> <translation id="2400664245143453337">Mise à jour immédiate requise</translation> -<translation id="2407481962792080328">Lorsque vous vous connectez à votre compte Google, cette fonctionnalité est activée</translation> <translation id="2408018932941436077">Enregistrement de la carte…</translation> <translation id="2408955596600435184">Saisissez votre code.</translation> <translation id="241082044617551207">Plug-in inconnu</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963">Produit inconnu <ph name="PRODUCT_ID" /> du fournisseur <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Les services suivants permettent de protéger vos données. Vous pouvez les désactiver à tout moment.</translation> <translation id="3164329792803560526">Partage de l'onglet avec <ph name="APP_NAME" />…</translation> +<translation id="3165371858310906303">Demander quand un site souhaite savoir si vous êtes là</translation> <translation id="3165390001037658081">Certains opérateurs peuvent bloquer cette fonctionnalité.</translation> <translation id="316652501498554287">Comptes G Suite for Education</translation> <translation id="3169472444629675720">Discover</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">Créer un profil pour le travail ?</translation> <translation id="452750746583162491">Examiner vos données synchronisées</translation> <translation id="4530494379350999373">Origine</translation> +<translation id="4531924570968473143">Qui souhaitez-vous ajouter à cet appareil <ph name="DEVICE_TYPE" /> ?</translation> <translation id="4532646538815530781">Ce site utilise des capteurs de mouvement.</translation> <translation id="4533846798469727141">Maintenant, dites "OK Google"</translation> <translation id="4533985347672295764">Temps CPU</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">Recherche dans les onglets</translation> <translation id="465878909996028221">Seuls les protocoles http et https, ainsi que les protocoles de fichiers, sont compatibles avec les redirections de navigateur.</translation> <translation id="4659077111144409915">Compte principal</translation> +<translation id="4659126640776004816">Lorsque vous vous connectez à votre compte Google, cette fonctionnalité est activée.</translation> <translation id="4660476621274971848">Version <ph name="NEW_ID" /> reçue au lieu de la version <ph name="EXPECTED_VERSION" /> attendue</translation> <translation id="4660540330091848931">Redimensionnement…</translation> <translation id="4661407454952063730">Les données de l'application peuvent désigner toutes les données enregistrées par une application (en fonction des paramètres définis par le développeur), y compris celles comme les contacts, les messages et les photos.</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">Suggestions</translation> <translation id="475088594373173692">Premier utilisateur</translation> <translation id="4751476147751820511">Capteurs de mouvement ou de lumière</translation> -<translation id="4752124003533492687">Ouvrir les paramètres pour connecter le <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Arrêter/Actualiser</translation> <translation id="4756388243121344051">&Historique</translation> <translation id="4759238208242260848">Téléchargements</translation> @@ -3979,6 +3984,7 @@ <translation id="5804241973901381774">Autorisations</translation> <translation id="5805697420284793859">Gestionnaire de fenêtres</translation> <translation id="5806773519584576205">0° (par défaut)</translation> +<translation id="5808664694611589238">{0,plural, =1{Fermer la fenêtre ouverte en tant qu'invité}one{Fermer la fenêtre ouverte en tant qu'invité}other{Fermer les fenêtres ouvertes en tant qu'invité}}</translation> <translation id="5810809306422959727">Ce compte n'est pas éligible au contrôle parental</translation> <translation id="5812674658566766066">Tout développer</translation> <translation id="5814126672212206791">Type de connexion</translation> @@ -4436,6 +4442,7 @@ <translation id="6344170822609224263">Accéder à la liste des connexions réseau</translation> <translation id="6344576354370880196">Imprimantes enregistrées</translation> <translation id="6345418402353744910">Votre nom d'utilisateur et votre mot de passe sont requis pour le proxy <ph name="PROXY" /> afin que l'administrateur puisse configurer votre réseau</translation> +<translation id="6345878117466430440">Marquer comme lu</translation> <translation id="6349101878882523185">Installer <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">La synchronisation ne fonctionne pas. Essayez de vous déconnecter, puis de vous reconnecter.</translation> <translation id="6351063337294363751">Vous pouvez effacer vos données de navigation à partir de ce menu.</translation> @@ -5022,6 +5029,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 avec chiffrement RSA</translation> <translation id="7075625805486468288">Gérer les certificats et paramètres HTTPS/SSL</translation> <translation id="7076293881109082629">Connexion</translation> +<translation id="7076878155205969899">Couper le son</translation> <translation id="7077829361966535409">Échec du chargement de la page de connexion avec les paramètres de proxy actuels. Veuillez <ph name="GAIA_RELOAD_LINK_START" />essayer de vous reconnecter<ph name="GAIA_RELOAD_LINK_END" /> ou utiliser d'autres <ph name="PROXY_SETTINGS_LINK_START" />paramètres de proxy<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Tous les réseaux</translation> <translation id="708060913198414444">C&opier l'adresse audio</translation> @@ -5042,7 +5050,6 @@ <translation id="7099337801055912064">Impossible de charger un fichier PPD volumineux. Le fichier ne doit pas dépasser 250 Ko.</translation> <translation id="7102687220333134671">Les mises à jour automatiques sont activées</translation> <translation id="7102832101143475489">Le délai imparti à la demande est dépassé</translation> -<translation id="7105390788077117391">Préférences USB</translation> <translation id="710640343305609397">Ouvrir les paramètres réseau</translation> <translation id="7108338896283013870">Masquer</translation> <translation id="7108668606237948702">saisir la clé</translation> @@ -5072,7 +5079,6 @@ <translation id="7136694880210472378">Utiliser par défaut</translation> <translation id="7136984461011502314">Bienvenue dans <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Une erreur s'est produite. Veuillez réessayer en sélectionnant d'autres images.</translation> -<translation id="7138678301420049075">Autre</translation> <translation id="713888829801648570">Votre mot de passe n'a pas pu être vérifié, car votre appareil est hors connexion.</translation> <translation id="7140928199327930795">Aucun autre périphérique disponible</translation> <translation id="7141105143012495934">Échec de la connexion, car il est impossible de récupérer les informations relatives à votre compte. Veuillez contacter votre administrateur ou réessayer.</translation> @@ -5179,6 +5185,7 @@ <translation id="7280649757394340890">Paramètres de voix de la synthèse vocale</translation> <translation id="7280877790564589615">Autorisation demandée</translation> <translation id="7282992757463864530">Barre d'informations</translation> +<translation id="7284411326658527427">Chaque personne pourra personnaliser son compte et préserver la confidentialité de ses données.</translation> <translation id="7287143125007575591">Accès refusé.</translation> <translation id="7287411021188441799">Restaurer l'arrière-plan par défaut</translation> <translation id="7288013116963835700">Supprimer Linux de <ph name="DEVICE_TYPE" /></translation> @@ -5755,6 +5762,7 @@ <translation id="7963826112438303517">L'Assistant s'appuie sur ces enregistrements et sur vos requêtes énoncées pour créer et mettre à jour votre empreinte vocale, laquelle n'est stockée que sur les appareils où vous avez activé Voice Match. Vous pouvez la réenregistrer ou afficher votre activité vocale dans les paramètres de l'Assistant.</translation> <translation id="7966241909927244760">C&opier l'adresse de l'image</translation> <translation id="7968072247663421402">Options liées au fournisseur</translation> +<translation id="7968198493605442410">Créer un lien</translation> <translation id="7968742106503422125">Lire et modifier les données que vous copiez-collez</translation> <translation id="7968833647796919681">Activer la collecte de données relatives aux performances</translation> <translation id="7968982339740310781">Afficher les détails</translation> @@ -6135,6 +6143,7 @@ <translation id="8428213095426709021">Paramètres</translation> <translation id="8428271547607112339">Ajouter un compte scolaire</translation> <translation id="8428628598981198790">Impossible d'utiliser votre clé de sécurité sur ce site</translation> +<translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">Vous allez être déconnecté dans <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Afficher les éléments sélectionnés</translation> <translation id="8431909052837336408">Modifier le code de la SIM</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb index 6508e34c..ce7944d3 100644 --- a/chrome/app/resources/generated_resources_gl.xtb +++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">Dispositivo descoñecido [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Esta conta de propietario debe ser a primeira en que se inicie sesión cando se realice un inicio de sesión múltiple.</translation> <translation id="150411034776756821">Eliminar <ph name="SITE" /></translation> +<translation id="1504311855864906891">Subtitular o teu contido multimedia</translation> <translation id="1504551620756424144">En Windows, os cartafoles compartidos están en <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Motor de busca</translation> <translation id="1507170440449692343">Bloqueouse o acceso desta páxina á túa cámara.</translation> @@ -1189,7 +1190,6 @@ <translation id="2396783860772170191">Introduce o PIN de 4 díxitos (0000-9999)</translation> <translation id="2399939490305346086">Datos de inicio de sesión da chave de seguranza</translation> <translation id="2400664245143453337">Requírese unha actualización de inmediato</translation> -<translation id="2407481962792080328">Cando inicies sesión na túa Conta de Google, activarase esta función</translation> <translation id="2408018932941436077">Gardando tarxeta</translation> <translation id="2408955596600435184">Introduce o PIN</translation> <translation id="241082044617551207">Plugin descoñecido</translation> @@ -3065,6 +3065,7 @@ <translation id="4657810666108475055">Busca de pestanas</translation> <translation id="465878909996028221">Só se poden redirixir a outro navegador os URL que utilicen os protocolos http, https e de ficheiro.</translation> <translation id="4659077111144409915">Conta principal</translation> +<translation id="4659126640776004816">Cando inicies sesión na túa Conta de Google, activarase esta función.</translation> <translation id="4660476621274971848">A versión esperada era "<ph name="EXPECTED_VERSION" />", pero a obtida foi "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">Cambiando tamaño</translation> <translation id="4661407454952063730">Os datos das aplicacións poden incluír calquera tipo de información que gardase unha aplicación (baseándose na configuración do programador), incluídos os contactos, as mensaxes e as fotos.</translation> @@ -3130,7 +3131,6 @@ <translation id="4750394297954878236">Suxestións</translation> <translation id="475088594373173692">Primeiro usuario</translation> <translation id="4751476147751820511">Sensores de movemento ou de luz</translation> -<translation id="4752124003533492687">Para conectar <ph name="USB_DEVICE_NAME" />, abre Configuración</translation> <translation id="4756378406049221019">Deter/Volver cargar</translation> <translation id="4756388243121344051">&Historial</translation> <translation id="4759238208242260848">Descargas</translation> @@ -5020,6 +5020,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 con cifrado RSA</translation> <translation id="7075625805486468288">Xestiona a configuración e os certificados HTTPS/SSL</translation> <translation id="7076293881109082629">Iniciando sesión</translation> +<translation id="7076878155205969899">Silencia o son</translation> <translation id="7077829361966535409">Non se puido cargar a páxina de inicio de sesión coa configuración de proxy actual. <ph name="GAIA_RELOAD_LINK_START" />Tenta volver iniciar sesión<ph name="GAIA_RELOAD_LINK_END" /> ou utiliza unha <ph name="PROXY_SETTINGS_LINK_START" />configuración de proxy<ph name="PROXY_SETTINGS_LINK_END" /> diferente.</translation> <translation id="7078120482318506217">Todas as redes</translation> <translation id="708060913198414444">C&opiar enderezo de audio</translation> @@ -5040,7 +5041,6 @@ <translation id="7099337801055912064">Non se poden cargar PPD grandes. O tamaño máximo é de 250 kB.</translation> <translation id="7102687220333134671">As actualizacións automáticas están activadas</translation> <translation id="7102832101143475489">Esgotouse o tempo de espera da solicitude</translation> -<translation id="7105390788077117391">Preferencias de USB</translation> <translation id="710640343305609397">Abrir configuración de rede</translation> <translation id="7108338896283013870">Ocultar</translation> <translation id="7108668606237948702">intro</translation> @@ -5070,7 +5070,6 @@ <translation id="7136694880210472378">Converter en predeterminado</translation> <translation id="7136984461011502314">Dámosche a benvida a <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Produciuse un erro. Escolle outras imaxes e téntao de novo.</translation> -<translation id="7138678301420049075">Outros</translation> <translation id="713888829801648570">Non se puido verificar o teu contrasinal debido a que estás sen conexión.</translation> <translation id="7140928199327930795">Non hai ningún outro dispositivo dispoñible.</translation> <translation id="7141105143012495934">Produciuse un erro no inicio de sesión porque non se puideron recuperar os datos da túa conta. Ponte en contacto co administrador ou téntao de novo.</translation> @@ -6132,6 +6131,7 @@ <translation id="8428213095426709021">Configuración</translation> <translation id="8428271547607112339">Engadir conta escolar</translation> <translation id="8428628598981198790">Non se pode utilizar a túa chave de seguranza con este sitio</translation> +<translation id="8428634594422941299">De acordo</translation> <translation id="84297032718407999">Pecharase a túa sesión dentro de <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Mostrar toques</translation> <translation id="8431909052837336408">Cambiar PIN da SIM</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index fb7e922..51a6a25f 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">અજાણ્યું ઉપકરણ [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">આ માલિક એકાઉન્ટ દ્વારા એકથી વધુ સાઇન ઇન સત્રમાં પહેલા સાઇન ઇન કરનાર એકાઉન્ટ હોવું જોઈએ.</translation> <translation id="150411034776756821"><ph name="SITE" /> ને દૂર કરો</translation> +<translation id="1504311855864906891">તમારા મીડિયા માટે કૅપ્શન મેળવો</translation> <translation id="1504551620756424144">શેર કરેલા ફોલ્ડરો Windowsમાં <ph name="BASE_DIR" />પર ઉપલબ્ધ હોય છે.</translation> <translation id="1506061864768559482">શોધ એન્જિન</translation> <translation id="1507170440449692343">આ પૃષ્ઠને તમારા કૅમેરાને ઍક્સેસ કરવાથી અવરોધિત કરવામાં આવ્યું છે.</translation> @@ -1186,7 +1187,6 @@ <translation id="2396783860772170191">4 અંકનો પિન (0000-9999) દાખલ કરો</translation> <translation id="2399939490305346086">સુરક્ષા કોડનો સાઇન ઇન ડેટા</translation> <translation id="2400664245143453337">તાત્કાલિક અપડેટ આવશ્યક છે</translation> -<translation id="2407481962792080328">જ્યારે તમે તમારા Google એકાઉન્ટમાં સાઇન ઇન કરો છો, ત્યારે આ સુવિધા ચાલુ કરવામાં આવે છે</translation> <translation id="2408018932941436077">કાર્ડ સાચવી રહ્યાં છીએ</translation> <translation id="2408955596600435184">તમારો PIN દાખલ કરો</translation> <translation id="241082044617551207">અજ્ઞાત પ્લગિન</translation> @@ -3062,6 +3062,7 @@ <translation id="4657810666108475055">ટૅબની શોધ</translation> <translation id="465878909996028221">બ્રાઉઝર રીડાયરેક્ટ માટે માત્ર http, https અને ફાઇલ પ્રોટોકૉલ સમર્થિત છે.</translation> <translation id="4659077111144409915">પ્રાથમિક એકાઉન્ટ</translation> +<translation id="4659126640776004816">જ્યારે તમે તમારા Google એકાઉન્ટમાં સાઇન ઇન કરો છો, ત્યારે આ સુવિધા ચાલુ કરવામાં આવે છે.</translation> <translation id="4660476621274971848">અપેક્ષિત વર્ઝન "<ph name="EXPECTED_VERSION" />" છે, પરંતુ વર્ઝન "<ph name="NEW_ID" />" હતું.</translation> <translation id="4660540330091848931">કદ બદલી રહ્યાં છીએ</translation> <translation id="4661407454952063730">ઍપનો ડેટા એ (ડેવલપર સેટિંગના આધારે) ઍપમાં સાચવેલો કોઈપણ ડેટા હોઈ શકે છે, જેમાં સંપર્કો, સંદેશા અને ફોટા જેવો સંભવિત રૂપે સંવેદનશીલ ડેટાનો સમાવેશ થાય છે.</translation> @@ -3127,7 +3128,6 @@ <translation id="4750394297954878236">સૂચનો</translation> <translation id="475088594373173692">પ્રથમ વપરાશકર્તા</translation> <translation id="4751476147751820511">મોશન અથવા લાઇટ સેન્સર</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" />ને કનેક્ટ કરવા માટે, સેટિંગ ખોલો</translation> <translation id="4756378406049221019">રોકો/ફરીથી લોડ કરો</translation> <translation id="4756388243121344051">&ઇતિહાસ</translation> <translation id="4759238208242260848">ડાઉનલોડ્સ</translation> @@ -5019,6 +5019,7 @@ <translation id="7075513071073410194">RSA એન્ક્રિપ્શનવાળું PKCS #1 MD5</translation> <translation id="7075625805486468288">HTTPS/SSL પ્રમાણપત્રો અને સેટિંગ્સ સંચાલિત કરો</translation> <translation id="7076293881109082629">સાઇન ઇન કરી રહ્યું છે</translation> +<translation id="7076878155205969899">સાઉન્ડ મ્યૂટ કરો</translation> <translation id="7077829361966535409">સાઇન-ઇન પેજ વર્તમાન પ્રૉક્સી સેટિંગનો ઉપયોગ કરીને લોડ થવામાં નિષ્ફળ થયું. કૃપા કરીને <ph name="GAIA_RELOAD_LINK_START" />ફરીથી સાઇન ઇન કરવાનો પ્રયાસ કરો<ph name="GAIA_RELOAD_LINK_END" /> અથવા જુદા <ph name="PROXY_SETTINGS_LINK_START" />પ્રૉક્સી સેટિંગ<ph name="PROXY_SETTINGS_LINK_END" />નો ઉપયોગ કરો.</translation> <translation id="7078120482318506217">તમામ નેટવર્ક્સ</translation> <translation id="708060913198414444">ઑડિઓ સરનામું કૉ&પિ કરો</translation> @@ -5039,7 +5040,6 @@ <translation id="7099337801055912064">વિશાળ PPD લોડ કરી શકતાં નથી. મહત્તમ કદ 250 kB છે.</translation> <translation id="7102687220333134671">સ્વચલિત અપડેટ ચાલુ કરેલ છે</translation> <translation id="7102832101143475489">વિનંતીનો સમય સમાપ્ત થઈ ગયો</translation> -<translation id="7105390788077117391">USBની પસંદગીઓ</translation> <translation id="710640343305609397">નેટવર્ક સેટિંગ ખોલો</translation> <translation id="7108338896283013870">છુપાવો</translation> <translation id="7108668606237948702">Enter</translation> @@ -5069,7 +5069,6 @@ <translation id="7136694880210472378">ડિફૉલ્ટ બનાવો</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> માં આપનું સ્વાગત છે</translation> <translation id="7136993520339022828">તેમાં એક ભૂલ છે. કૃપા કરીને અન્ય છબી પસંદ કરીને ફરી પ્રયત્ન કરો.</translation> -<translation id="7138678301420049075">અન્ય</translation> <translation id="713888829801648570">માફ કરશો, તમારો પાસવર્ડ ચકાસી શકાયો નથી કારણ કે તમે ઑફલાઇન છો.</translation> <translation id="7140928199327930795">કોઈ અન્ય ઉપલબ્ધ ઉપકરણો નથી.</translation> <translation id="7141105143012495934">સાઇન ઇન નિષ્ફળ થયું કારણ કે તમારી એકાઉન્ટ વિગતો પાછી મેળવી શકાઈ નથી. કૃપા કરીને તમારા એડમિનનો સંપર્ક કરો અથવા ફરી પ્રયાસ કરો.</translation> @@ -6126,6 +6125,7 @@ <translation id="8428213095426709021">સેટિંગ્સ</translation> <translation id="8428271547607112339">શાળાનું એકાઉન્ટ ઉમેરો</translation> <translation id="8428628598981198790">આ સાઇટ સાથે તમારા સુરક્ષા કોડનો ઉપયોગ કરી શકાતો નથી</translation> +<translation id="8428634594422941299">સમજાઈ ગયું</translation> <translation id="84297032718407999">તમે <ph name="LOGOUT_TIME_LEFT" />માં સાઇન આઉટ થઈ જશો</translation> <translation id="8431190899827883166">ટૅપ બતાવો</translation> <translation id="8431909052837336408">SIM નો PIN બદલો</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index d2dee17..2e4d0d5 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">अज्ञात डिवाइस [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">किसी एक से ज़्यादा साइन-इन वाले सत्र में इस मालिक खाते को पहला साइन-इन खाता होना चाहिए.</translation> <translation id="150411034776756821"><ph name="SITE" /> को निकालें</translation> +<translation id="1504311855864906891">अपनी मीडिया के लिए कैप्शन पाएं</translation> <translation id="1504551620756424144">शेयर किए गए फ़ोल्डर, Windows में <ph name="BASE_DIR" /> पर उपलब्ध हैं.</translation> <translation id="1506061864768559482">सर्च इंजन</translation> <translation id="1507170440449692343">इस पेज को आपका कैमरा ऐक्सेस करने से अवरोधित कर दिया गया है.</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">चार अंकों वाला पिन (0000-9999) डालें</translation> <translation id="2399939490305346086">सुरक्षा कुंजी पर साइन इन का डेटा</translation> <translation id="2400664245143453337">तुरंत अपडेट करने की ज़रूरत है</translation> -<translation id="2407481962792080328">जब आप अपने Google खाते में लॉग इन करते हैं, तो यह सुविधा चालू हो जाती है</translation> <translation id="2408018932941436077">कार्ड को सेव किया जा रहा है</translation> <translation id="2408955596600435184">अपना पिन डालें</translation> <translation id="241082044617551207">अज्ञात प्लग इन</translation> @@ -3065,6 +3065,7 @@ <translation id="4657810666108475055">टैब की खोज</translation> <translation id="465878909996028221">ब्राउज़र रीडायरेक्ट के लिए सिर्फ़ एचटीटीपी, एचटीटीपीएस और फ़ाइल प्रोटोकॉल काम करते हैं.</translation> <translation id="4659077111144409915">प्राथमिक खाता</translation> +<translation id="4659126640776004816">जब आप अपने Google खाते में लॉग इन करते हैं, तो यह सुविधा चालू हो जाती है.</translation> <translation id="4660476621274971848">अपेक्षित वर्शन "<ph name="EXPECTED_VERSION" />" है, लेकिन वर्शन "<ph name="NEW_ID" />" था</translation> <translation id="4660540330091848931">साइज़ बदला जा रहा है</translation> <translation id="4661407454952063730">ऐप्लिकेशन से जुड़े डेटा में ऐसा कोई भी डेटा शामिल हो सकता है जिसे किसी ऐप्लिकेशन ने (डेवलपर सेटिंग के आधार पर) सेव किया है. इसमें संपर्क, मैसेज (एसएमएस) और फ़ोटो जैसा डेटा भी शामिल है.</translation> @@ -3130,7 +3131,6 @@ <translation id="4750394297954878236">सुझाव</translation> <translation id="475088594373173692">पहला उपयोगकर्ता</translation> <translation id="4751476147751820511">गति या लाइट सेंसर</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" /> को कनेक्ट करने के लिए 'सेटिंग' खोलें</translation> <translation id="4756378406049221019">रोकें/फिर से लोड करें</translation> <translation id="4756388243121344051">&इतिहास</translation> <translation id="4759238208242260848">डाउनलोड</translation> @@ -5020,6 +5020,7 @@ <translation id="7075513071073410194">RSA सुरक्षित करने के तरीके के साथ PKCS #1 MD5</translation> <translation id="7075625805486468288">HTTPS/SSL प्रमाणपत्र और सेटिंग प्रबंधित करें</translation> <translation id="7076293881109082629">प्रवेश किया जा रहा है...</translation> +<translation id="7076878155205969899">आवाज़ म्यूट करें</translation> <translation id="7077829361966535409">मौजूदा प्रॉक्सी सेटिंग के इस्तेमाल करने से साइन इन पेज लोड नहीं हो सका. कृपया <ph name="GAIA_RELOAD_LINK_START" />फिर साइन इन करने की कोशिश करें<ph name="GAIA_RELOAD_LINK_END" />, या अलग-अलग <ph name="PROXY_SETTINGS_LINK_START" />प्रॉक्सी सेटिंग<ph name="PROXY_SETTINGS_LINK_END" /> का इस्तेमाल करें.</translation> <translation id="7078120482318506217">सभी नेटवर्क</translation> <translation id="708060913198414444">ऑडियो के पते को कॉ&पी करें</translation> @@ -5040,7 +5041,6 @@ <translation id="7099337801055912064">बड़ा पीपीडी लोड नहीं किया जा सकता. आकार 250 केबी से ज़्यादा नहीं होना चाहिए.</translation> <translation id="7102687220333134671">ऑटोमैटिक अपडेट चालू हैं</translation> <translation id="7102832101143475489">अनुरोध का समय खत्म हो गया</translation> -<translation id="7105390788077117391">यूएसबी प्राथमिकताएं</translation> <translation id="710640343305609397">नेटवर्क सेटिंग खोलें</translation> <translation id="7108338896283013870">छुपाएं</translation> <translation id="7108668606237948702">enter</translation> @@ -5070,7 +5070,6 @@ <translation id="7136694880210472378">डिफ़ॉल्ट बनाएं</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> में आपका स्वागत है</translation> <translation id="7136993520339022828">कोई गड़बड़ी हुई है. कृपया दूसरी इमेज चुनकर फिर से कोशिश करें.</translation> -<translation id="7138678301420049075">अन्य</translation> <translation id="713888829801648570">क्षमा करें, आपका पासवर्ड सत्यापित नहीं किया जा सका क्योंकि आप ऑफ़लाइन हैं.</translation> <translation id="7140928199327930795">कोई अन्य उपलब्ध डिवाइस नहीं हैं.</translation> <translation id="7141105143012495934">साइन इन नहीं हो पाया क्योंकि आपके खाते की जानकारी फिर से नहीं पाई जा सकी. कृपया अपने एडमिन से संपर्क करें या फिर से कोशिश करें.</translation> @@ -6132,6 +6131,7 @@ <translation id="8428213095426709021">सेटिंग</translation> <translation id="8428271547607112339">स्कूल वाला खाता जोड़ें</translation> <translation id="8428628598981198790">इस साइट में आपकी सुरक्षा कुंजी का इस्तेमाल नहीं किया जा सकता</translation> +<translation id="8428634594422941299">समझ लिया</translation> <translation id="84297032718407999">आपको <ph name="LOGOUT_TIME_LEFT" /> में साइन आउट कर दिया जाएगा</translation> <translation id="8431190899827883166">टैप दिखाएं</translation> <translation id="8431909052837336408">SIM पिन बदलें</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index a2d1c45d..78fd73e6 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">Nepoznati uređaj [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Vlasnik ovog računa mora biti prvi prijavljeni račun u sesiji s višestrukom prijavom.</translation> <translation id="150411034776756821">Ukloni <ph name="SITE" /></translation> +<translation id="1504311855864906891">Prikazivanje titlova za medijske podatke</translation> <translation id="1504551620756424144">Dijeljene mape dostupne su na Windowsima na <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Tražilica</translation> <translation id="1507170440449692343">Stranici je zabranjen pristup vašoj kameri.</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">Unesite četveroznamenkasti PIN (0000 – 9999)</translation> <translation id="2399939490305346086">Podaci za prijavu na sigurnosnom ključu</translation> <translation id="2400664245143453337">Odmah je potrebno ažuriranje</translation> -<translation id="2407481962792080328">Kad se prijavite na svoj Google račun, ta je značajka uključena</translation> <translation id="2408018932941436077">Spremanje kartice</translation> <translation id="2408955596600435184">Unesite PIN</translation> <translation id="241082044617551207">Nepoznati dodatak</translation> @@ -3066,6 +3066,7 @@ <translation id="4657810666108475055">Pretraživanje kartice</translation> <translation id="465878909996028221">Za preusmjeravanja preglednika podržani su samo protokoli http i https te datotečni protokoli.</translation> <translation id="4659077111144409915">Primarni račun</translation> +<translation id="4659126640776004816">Kad se prijavite na Google račun, ova je značajka uključena.</translation> <translation id="4660476621274971848">Očekivana je verzija "<ph name="EXPECTED_VERSION" />", no verzija je bila "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">Promjena veličine</translation> <translation id="4661407454952063730">Podaci aplikacije mogu biti bilo koji podaci koje je aplikacija spremila (na temelju postavki razvojnog programera), uključujući podatke kao što su kontakti, poruke i fotografije.</translation> @@ -3131,7 +3132,6 @@ <translation id="4750394297954878236">Prijedlozi</translation> <translation id="475088594373173692">Prvi korisnik</translation> <translation id="4751476147751820511">Senzori pokreta ili osvjetljenja</translation> -<translation id="4752124003533492687">Otvorite Postavke da biste povezali uređaj <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Zaustavi / ponovno učitaj</translation> <translation id="4756388243121344051">&Povijest</translation> <translation id="4759238208242260848">Preuzimanje</translation> @@ -5021,6 +5021,7 @@ <translation id="7075513071073410194">PKCS br. 1 MD5 s RSA enkripcijom</translation> <translation id="7075625805486468288">Upravljanje HTTPS/SSL certifikatima i postavkama</translation> <translation id="7076293881109082629">Prijava</translation> +<translation id="7076878155205969899">Isključivanje zvuka</translation> <translation id="7077829361966535409">Nije uspjelo učitavanje stranice za prijavu pomoću trenutačnih postavki proxy poslužitelja. <ph name="GAIA_RELOAD_LINK_START" />Pokušajte se ponovo prijaviti<ph name="GAIA_RELOAD_LINK_END" /> ili upotrijebite druge <ph name="PROXY_SETTINGS_LINK_START" />postavke proxy poslužitelja<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Sve mreže</translation> <translation id="708060913198414444">K&opiraj adresu audiozapisa</translation> @@ -5041,7 +5042,6 @@ <translation id="7099337801055912064">Nije moguće učitati veliki PPD. Maksimalna veličina iznosi 250 KB.</translation> <translation id="7102687220333134671">Automatska su ažuriranja uključena</translation> <translation id="7102832101143475489">Zahtjev je istekao</translation> -<translation id="7105390788077117391">Postavke USB-a</translation> <translation id="710640343305609397">Otvorite postavke mreže</translation> <translation id="7108338896283013870">Sakrij preglednik</translation> <translation id="7108668606237948702">enter</translation> @@ -5071,7 +5071,6 @@ <translation id="7136694880210472378">Postavi kao zadano</translation> <translation id="7136984461011502314">Dobro došli u <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Došlo je do pogreške. Pokušajte ponovo kasnije odabirom drugih slika.</translation> -<translation id="7138678301420049075">Ostalo</translation> <translation id="713888829801648570">Nažalost, vašu zaporku nije moguće provjeriti jer ste offline.</translation> <translation id="7140928199327930795">Nema drugih dostupnih uređaja.</translation> <translation id="7141105143012495934">Prijava nije uspjela jer nisu dohvaćeni podaci o vašem računu. Obratite se administratoru ili pokušajte ponovo.</translation> @@ -6134,6 +6133,7 @@ <translation id="8428213095426709021">Postavke</translation> <translation id="8428271547607112339">Dodavanje školskog računa</translation> <translation id="8428628598981198790">Vaš sigurnosni ključ ne može se upotrebljavati s tom web-lokacijom</translation> +<translation id="8428634594422941299">Shvaćam</translation> <translation id="84297032718407999">Odjavit ćete se za <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Prikaži dodire</translation> <translation id="8431909052837336408">Promjena PIN-a za SIM</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index 70b5b24c..dd50eb1 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">Ismeretlen eszköz [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Ennek a tulajdonosi fióknak kell lennie az első bejelentkezett fióknak a többfiókos bejelentkezés munkamenete során.</translation> <translation id="150411034776756821"><ph name="SITE" /> eltávolítása</translation> +<translation id="1504311855864906891">Feliratokat jeleníthet meg a médiatartalmakhoz</translation> <translation id="1504551620756424144">A megosztott mappák a következő helyen találhatók a Windows rendszerben: <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Keresőmotor</translation> <translation id="1507170440449692343">Az oldal nem férhet hozzá az Ön kamerájához.</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">Adjon meg egy négyjegyű PIN-kódot (0000–9999)</translation> <translation id="2399939490305346086">Biztonsági hardverkulcs bejelentkezési adatai</translation> <translation id="2400664245143453337">Azonnali frissítés szükséges</translation> -<translation id="2407481962792080328">Amikor bejelentkezik Google-fiókjába, a rendszer bekapcsolja ezt a funkciót</translation> <translation id="2408018932941436077">Kártya mentése folyamatban</translation> <translation id="2408955596600435184">PIN-kód megadása</translation> <translation id="241082044617551207">Ismeretlen beépülő modul</translation> @@ -3065,6 +3065,7 @@ <translation id="4657810666108475055">Keresés a lapok között</translation> <translation id="465878909996028221">A böngészőátirányítások esetén csak a http-, https- és fájlprotokollok támogatottak.</translation> <translation id="4659077111144409915">Elsődleges fiók</translation> +<translation id="4659126640776004816">Amikor bejelentkezik Google-fiókjába, a rendszer bekapcsolja ezt a funkciót.</translation> <translation id="4660476621274971848">A várt verzió „<ph name="EXPECTED_VERSION" />”, de a kapott verzió „<ph name="NEW_ID" />”</translation> <translation id="4660540330091848931">Átméretezés</translation> <translation id="4661407454952063730">Alkalmazásadat lehet az alkalmazás által mentett bármilyen adat (a fejlesztő által megadott beállításoktól függően) – például névjegy, üzenet vagy fotó is.</translation> @@ -3130,7 +3131,6 @@ <translation id="4750394297954878236">Javaslatok</translation> <translation id="475088594373173692">Első felhasználó</translation> <translation id="4751476147751820511">Mozgás- és fényérzékelők</translation> -<translation id="4752124003533492687">Nyissa meg a Beállításokat a(z) <ph name="USB_DEVICE_NAME" /> csatlakoztatásához</translation> <translation id="4756378406049221019">Leállítás/Újratöltés</translation> <translation id="4756388243121344051">&Előzmények</translation> <translation id="4759238208242260848">Letöltések</translation> @@ -5022,6 +5022,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 RSA titkosítással</translation> <translation id="7075625805486468288">HTTPS/SSL-tanúsítványok és -beállítások kezelése</translation> <translation id="7076293881109082629">Bejelentkezés</translation> +<translation id="7076878155205969899">Hang némítása</translation> <translation id="7077829361966535409">A bejelentkezési oldalt a jelenlegi proxybeállítások mellett nem lehetett betölteni. Kérjük, <ph name="GAIA_RELOAD_LINK_START" />próbáljon újra bejelentkezni<ph name="GAIA_RELOAD_LINK_END" />, vagy használjon más <ph name="PROXY_SETTINGS_LINK_START" />proxybeállításokat<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Minden hálózat</translation> <translation id="708060913198414444">Audi&ocím másolása</translation> @@ -5042,7 +5043,6 @@ <translation id="7099337801055912064">Nem használható túl nagy PPD. A maximális méret 250 kB.</translation> <translation id="7102687220333134671">Az automatikus frissítések be vannak kapcsolva</translation> <translation id="7102832101143475489">A kérelem lejárt</translation> -<translation id="7105390788077117391">USB-beállítások</translation> <translation id="710640343305609397">Hálózati beállítások megnyitása</translation> <translation id="7108338896283013870">Elrejtés</translation> <translation id="7108668606237948702">enter</translation> @@ -5072,7 +5072,6 @@ <translation id="7136694880210472378">Legyen alapértelmezett</translation> <translation id="7136984461011502314">Üdvözli a <ph name="PRODUCT_NAME" />!</translation> <translation id="7136993520339022828">Hiba történt. Próbálkozzon újra úgy, hogy más képeket választ.</translation> -<translation id="7138678301420049075">Egyéb</translation> <translation id="713888829801648570">Jelszavát nem tudtuk ellenőrizni, mert offline állapotban van.</translation> <translation id="7140928199327930795">Nincs más elérhető eszköz.</translation> <translation id="7141105143012495934">A bejelentkezés nem sikerült, mert a fiókadatokat nem sikerült lekérni. Kérjük, forduljon rendszergazdájához, vagy próbálja újra.</translation> @@ -6135,6 +6134,7 @@ <translation id="8428213095426709021">Beállítások</translation> <translation id="8428271547607112339">Iskolai fiók felvétele</translation> <translation id="8428628598981198790">Biztonsági hardverkulcsa nem használható ezzel a webhellyel</translation> +<translation id="8428634594422941299">Értem</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> múlva kijelentkezteti a rendszer</translation> <translation id="8431190899827883166">Koppintások megjelenítése</translation> <translation id="8431909052837336408">SIM-kártya PIN-kódjának módosítása</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb index 59891858..459155ad 100644 --- a/chrome/app/resources/generated_resources_hy.xtb +++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">Անհայտ սարք [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Բազմակի մուտքի աշխատաշրջանում տիրոջ հաշիվը պետք է առաջին մուտք գործած հաշիվը լինի:</translation> <translation id="150411034776756821">Հեռացնել <ph name="SITE" /> կայքը</translation> +<translation id="1504311855864906891">Ավելացրեք ենթագրեր մեդիա բովանդակությանը</translation> <translation id="1504551620756424144">Ընդհանուր պանակները Windows-ում հասանելի են այստեղ՝ <ph name="BASE_DIR" />։</translation> <translation id="1506061864768559482">Որոնիչ</translation> <translation id="1507170440449692343">Այս էջին արգելված է օգտագործել ձեր տեսախցիկը:</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">Մուտքագրեք քառանիշ կոդը (0000-9999)</translation> <translation id="2399939490305346086">Անվտանգության բանալու մուտքային տվյալներ</translation> <translation id="2400664245143453337">Անհապաղ թարմացրեք օպերացիոն համակարգը</translation> -<translation id="2407481962792080328">Այս գործառույթը միանում է, երբ դուք մտնում եք Google հաշիվ</translation> <translation id="2408018932941436077">Քարտը պահվում է</translation> <translation id="2408955596600435184">Մուտքագրեք ձեր PIN կոդը</translation> <translation id="241082044617551207">Անհայտ փլագին</translation> @@ -3066,6 +3066,7 @@ <translation id="4657810666108475055">Ներդիրների որոնում</translation> <translation id="465878909996028221">Դիտարկիչի վերահասցեավորման համար աջակցվում են միայն http, https և ֆայլային հաղորդակարգերը</translation> <translation id="4659077111144409915">Հիմնական հաշիվ</translation> +<translation id="4659126640776004816">Այս գործառույթը միանում է, երբ դուք մտնում եք Google հաշիվ:</translation> <translation id="4660476621274971848">Սպասված տարբերակը՝ «<ph name="EXPECTED_VERSION" />», ստացված տարբերակը՝ «<ph name="NEW_ID" />»</translation> <translation id="4660540330091848931">Չափի փոխում</translation> <translation id="4661407454952063730">Հավելվածների տվյալները բոլոր այն տվյալներն են, որոնք հավելվածը պահել է ծրագրավորողի կարգավորումների հիման վրա։ Դրանց թվում կարող են լինել կոնտակտները, հաղորդագրությունները և լուսանկարները։</translation> @@ -3131,7 +3132,6 @@ <translation id="4750394297954878236">Առաջարկներ</translation> <translation id="475088594373173692">Առաջին օգտատեր</translation> <translation id="4751476147751820511">Շարժման և լուսավորության տվիչներ</translation> -<translation id="4752124003533492687">Բացեք կարգավորումները՝ <ph name="USB_DEVICE_NAME" /> սարքը միացնելու համար</translation> <translation id="4756378406049221019">Դադարեցնել/թարմացնել</translation> <translation id="4756388243121344051">&Պատմություն</translation> <translation id="4759238208242260848">Ներբեռնումներ</translation> @@ -5024,6 +5024,7 @@ <translation id="7075513071073410194">PKCS #1 MD5` RSA գաղտնագրումով</translation> <translation id="7075625805486468288">HTTPS կամ SSL հավաստագրերի և կարգավորումների կառավարում</translation> <translation id="7076293881109082629">Մուտք</translation> +<translation id="7076878155205969899">Անջատել ձայնը</translation> <translation id="7077829361966535409">Պրոքսի-սերվերի ընթացիկ կարգավորումների միջոցով մուտքի էջի բեռնումը չհաջողվեց: <ph name="GAIA_RELOAD_LINK_START" />Փորձեք նորից մուտք գործել<ph name="GAIA_RELOAD_LINK_END" /> կամ օգտագործեք <ph name="PROXY_SETTINGS_LINK_START" />պրոքսի-սերվերի այլ կարգավորումներ<ph name="PROXY_SETTINGS_LINK_END" />:</translation> <translation id="7078120482318506217">Բոլոր ցանցերը</translation> <translation id="708060913198414444">Պատճենել ձայնանյութի հասցեն</translation> @@ -5044,7 +5045,6 @@ <translation id="7099337801055912064">Չհաջողվեց բեռնել PPD ֆայլը: Այն չպետք է գերազանցի 250 ԿԲ-ը:</translation> <translation id="7102687220333134671">Ինքնաթարմացումը միացված է</translation> <translation id="7102832101143475489">Հարցումը մշակելու ժամանակը սպառվել է</translation> -<translation id="7105390788077117391">USB-ի կարգավորումներ</translation> <translation id="710640343305609397">Բացել ցանցի կարգավորումները</translation> <translation id="7108338896283013870">Թաքցնել</translation> <translation id="7108668606237948702">enter</translation> @@ -5074,7 +5074,6 @@ <translation id="7136694880210472378">Դարձնել կանխադրված</translation> <translation id="7136984461011502314">Բարի գալուստ <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Սխալ առաջացավ: Ընտրեք այլ պատկերներ և նորից փորձեք:</translation> -<translation id="7138678301420049075">Այլ</translation> <translation id="713888829801648570">Ներեցեք, ձեր գաղտնաբառը հնարավոր չէ հաստատել, քանի որ դուք միացած չեք ցանցին:</translation> <translation id="7140928199327930795">Այլ մատչելի սարքեր չկան:</translation> <translation id="7141105143012495934">Մուտքը չհաջողվեց, քանի որ ձեր հաշվի տվյալները չհաջողվեց առբերել: Կապվեք ադմինիստրատորի հետ կամ նորից փորձեք:</translation> @@ -6135,6 +6134,7 @@ <translation id="8428213095426709021">Կարգավորումներ</translation> <translation id="8428271547607112339">Ավելացնել ուսումնական հաշիվ</translation> <translation id="8428628598981198790">Անվտանգության ձեր բանալին չի կարող օգտագործվել այս կայքի հետ</translation> +<translation id="8428634594422941299">Պարզ է</translation> <translation id="84297032718407999">Դուք դուրս կգրվեք <ph name="LOGOUT_TIME_LEFT" />ից</translation> <translation id="8431190899827883166">Ցույց տալ հպումները</translation> <translation id="8431909052837336408">Փոխեք SIM քարտի PIN կոդը</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index e3eb362..40d8af8 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Membaca dan mengubah semua data Anda di komputer dan situs web yang dikunjungi</translation> <translation id="1430915738399379752">Cetak</translation> <translation id="1431188203598586230">Update software terakhir</translation> +<translation id="1431402976894535801">Blokir situs agar tidak mengetahui status kehadiran Anda</translation> <translation id="1431432486300429272">Google dapat menggunakan histori penjelajahanmu untuk mempersonalisasi Penelusuran dan layanan Google lainnya. Kamu atau orang tuamu dapat mengubahnya kapan saja di myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Kelola mesin telusur</translation> <translation id="1433811987160647649">Tanyakan sebelum mengakses</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Perangkat tidak dikenal [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Akun pemilik ini harus akun yang masuk pertama dalam sesi fitur masuk banyak akun.</translation> <translation id="150411034776756821">Hapus <ph name="SITE" /></translation> +<translation id="1504311855864906891">Dapatkan teks untuk media Anda</translation> <translation id="1504551620756424144">Folder bersama tersedia di Windows di <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Mesin telusur</translation> <translation id="1507170440449692343">Halaman ini telah diblokir agar tidak dapat mengakses kamera Anda.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Anda harus memasukkan frasa sandi yang sama dua kali</translation> <translation id="1652326691684645429">Aktifkan Berbagi Langsung</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Tambahkan printer ke Google Cloud Print agar Anda dapat mencetak dari mana saja.}other{Tambahkan # printer ke Google Cloud Print agar Anda dapat mencetak dari mana saja.}}</translation> +<translation id="1653575510930452864">Salin Link ke Teks</translation> <translation id="1656528038316521561">Opasitas latar belakang</translation> <translation id="1657406563541664238">Bantu menjadikan <ph name="PRODUCT_NAME" /> lebih baik dengan mengirim statistik penggunaan dan laporan kerusakan secara otomatis ke Google</translation> <translation id="1657937299377480641">Agar dapat login lagi untuk mengakses materi pendidikan, minta izin kepada orang tuamu</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">CA Mencurigakan</translation> <translation id="2182058453334755893">Disalin ke Papan Klip Anda</translation> <translation id="2184515124301515068">Izinkan Chrome memilih kapan situs dapat memutar suara (direkomendasikan)</translation> +<translation id="2187243482123994665">Kehadiran pengguna</translation> <translation id="2187675480456493911">Disinkronkan dengan perangkat lain di akun Anda. Setelan yang diubah oleh pengguna lain tidak akan disinkronkan. <ph name="LINK_BEGIN" />Pelajari lebih lanjut<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Kesalahan Impor Sertifikat Server</translation> <translation id="2187906491731510095">Ekstensi diupdate</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Masukkan PIN 4 digit (0000-9999)</translation> <translation id="2399939490305346086">Data login kunci keamanan</translation> <translation id="2400664245143453337">Perlu update segera</translation> -<translation id="2407481962792080328">Saat login ke Akun Google Anda, fitur ini akan diaktifkan</translation> <translation id="2408018932941436077">Menyimpan kartu</translation> <translation id="2408955596600435184">Masukkan PIN</translation> <translation id="241082044617551207">Plugin tidak dikenal</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963">Produk <ph name="PRODUCT_ID" /> tak dikenal dari vendor <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Layanan berikut ini membantu menjaga data Anda tetap aman. Anda dapat menonaktifkan fitur ini kapan saja.</translation> <translation id="3164329792803560526">Membagikan tab ini ke <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Tanyakan saat situs ingin mengetahui status kehadiran Anda</translation> <translation id="3165390001037658081">Beberapa operator mungkin memblokir fitur ini.</translation> <translation id="316652501498554287">Akun G Suite for Education</translation> <translation id="3169472444629675720">Discover</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">Buat profil baru untuk kerja?</translation> <translation id="452750746583162491">Tinjau data Anda yang disinkronkan</translation> <translation id="4530494379350999373">Asal</translation> +<translation id="4531924570968473143">Siapa yang ingin Anda tambahkan ke <ph name="DEVICE_TYPE" /> ini?</translation> <translation id="4532646538815530781">Situs ini menggunakan sensor gerakan.</translation> <translation id="4533846798469727141">Sekarang ucapkan "Hai Google"</translation> <translation id="4533985347672295764">Waktu CPU</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">Penelusuran tab</translation> <translation id="465878909996028221">Hanya protokol file, http, dan https yang didukung untuk pengalihan browser.</translation> <translation id="4659077111144409915">Akun utama</translation> +<translation id="4659126640776004816">Saat login ke Akun Google Anda, fitur ini akan diaktifkan.</translation> <translation id="4660476621274971848">Versi yang diharapkan "<ph name="EXPECTED_VERSION" />", namun versinya adalah "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">Mengubah ukuran</translation> <translation id="4661407454952063730">Data aplikasi dapat berupa data yang telah disimpan oleh aplikasi (berdasarkan setelan developer), termasuk data seperti kontak, pesan, dan foto.</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">Saran</translation> <translation id="475088594373173692">Pengguna pertama</translation> <translation id="4751476147751820511">Sensor gerakan atau cahaya</translation> -<translation id="4752124003533492687">Buka Setelan untuk menghubungkan <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Hentikan/Muat Ulang</translation> <translation id="4756388243121344051">&Riwayat</translation> <translation id="4759238208242260848">Download</translation> @@ -3978,6 +3983,7 @@ <translation id="5804241973901381774">Izin</translation> <translation id="5805697420284793859">Window manager</translation> <translation id="5806773519584576205">0° (Default)</translation> +<translation id="5808664694611589238">{0,plural, =1{Tutup jendela tamu}other{Tutup jendela tamu}}</translation> <translation id="5810809306422959727">Akun ini tidak memenuhi syarat kontrol orang tua</translation> <translation id="5812674658566766066">Luaskan semua</translation> <translation id="5814126672212206791">Jenis sambungan</translation> @@ -4435,6 +4441,7 @@ <translation id="6344170822609224263">Mengakses daftar koneksi jaringan</translation> <translation id="6344576354370880196">Printer tersimpan</translation> <translation id="6345418402353744910">Perlu nama pengguna dan sandi Anda untuk proxy <ph name="PROXY" /> agar admin dapat mengonfigurasi jaringan Anda</translation> +<translation id="6345878117466430440">Tandai telah dibaca</translation> <translation id="6349101878882523185">Instal <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Sinkronisasi tidak berjalan. Coba keluar dan masuk lagi.</translation> <translation id="6351063337294363751">Anda dapat menghapus data penjelajahan dari menu ini</translation> @@ -5021,6 +5028,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 Dengan Enkripsi RSA</translation> <translation id="7075625805486468288">Mengelola sertifikat dan setelan HTTPS/SSL</translation> <translation id="7076293881109082629">Sedang masuk</translation> +<translation id="7076878155205969899">Mematikan suara</translation> <translation id="7077829361966535409">Halaman proses masuk gagal dimuat menggunakan setelan proxy saat ini. <ph name="GAIA_RELOAD_LINK_START" />Coba masuk lagi nanti<ph name="GAIA_RELOAD_LINK_END" />, atau gunakan <ph name="PROXY_SETTINGS_LINK_START" />setelan proxy yang lain<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Semua jaringan</translation> <translation id="708060913198414444">S&alin alamat audio</translation> @@ -5041,7 +5049,6 @@ <translation id="7099337801055912064">Tidak dapat memuat PPD yang besar. Ukuran maksimumnya adalah 250 kB.</translation> <translation id="7102687220333134671">Update otomatis diaktifkan</translation> <translation id="7102832101143475489">Waktu permintaan habis</translation> -<translation id="7105390788077117391">Preferensi USB</translation> <translation id="710640343305609397">Buka setelan jaringan</translation> <translation id="7108338896283013870">Sembunyikan</translation> <translation id="7108668606237948702">masuk</translation> @@ -5071,7 +5078,6 @@ <translation id="7136694880210472378">Jadikan default</translation> <translation id="7136984461011502314">Selamat datang di <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Terjadi error. Coba lagi dengan memilih gambar lain.</translation> -<translation id="7138678301420049075">Lainnya</translation> <translation id="713888829801648570">Maaf, sandi Anda tidak dapat diverifikasi karena Anda tidak tersambung ke internet.</translation> <translation id="7140928199327930795">Tidak ada perangkat lain.</translation> <translation id="7141105143012495934">Proses masuk gagal karena detail akun Anda tidak dapat diambil. Hubungi administrator Anda atau coba lagi.</translation> @@ -5178,6 +5184,7 @@ <translation id="7280649757394340890">Setelan suara Text-to-Speech</translation> <translation id="7280877790564589615">Izin diminta</translation> <translation id="7282992757463864530">Infobar</translation> +<translation id="7284411326658527427">Setiap pengguna dapat mempersonalisasi akunnya dan menjaga privasi datanya.</translation> <translation id="7287143125007575591">Akses ditolak.</translation> <translation id="7287411021188441799">Pulihkan background default</translation> <translation id="7288013116963835700">Hapus Linux dari <ph name="DEVICE_TYPE" /></translation> @@ -5754,6 +5761,7 @@ <translation id="7963826112438303517">Asisten menggunakan rekaman ini dan permintaan lisan Anda untuk membuat dan memperbarui model suara Anda, yang disimpan hanya pada perangkat dengan Voice Match yang telah diaktifkan. Lihat atau latih ulang aktivitas suara di Setelan Asisten.</translation> <translation id="7966241909927244760">S&alin Alamat Gambar</translation> <translation id="7968072247663421402">Opsi penyedia</translation> +<translation id="7968198493605442410">Salin link ke teks</translation> <translation id="7968742106503422125">Mengakses dan mengubah data yang Anda salin dan tempel</translation> <translation id="7968833647796919681">Mengaktifkan koleksi data kinerja</translation> <translation id="7968982339740310781">Lihat detail</translation> @@ -6134,6 +6142,7 @@ <translation id="8428213095426709021">Setelan</translation> <translation id="8428271547607112339">Tambahkan akun sekolah</translation> <translation id="8428628598981198790">Kunci keamanan Anda tidak dapat digunakan dengan situs ini</translation> +<translation id="8428634594422941299">Mengerti</translation> <translation id="84297032718407999">Anda akan logout dalam <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Show taps</translation> <translation id="8431909052837336408">Ubah PIN SIM</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb index 9a9f0d0f..fb165e58 100644 --- a/chrome/app/resources/generated_resources_is.xtb +++ b/chrome/app/resources/generated_resources_is.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Lesa og breyta öllum gögnum í tölvunni og á vefsvæðum sem þú heimsækir</translation> <translation id="1430915738399379752">Prenta</translation> <translation id="1431188203598586230">Síðasta hugbúnaðaruppfærslan</translation> +<translation id="1431402976894535801">Lokar fyrir það að vefsvæði viti hvenær þú ert á staðnum</translation> <translation id="1431432486300429272">Google notar hugsanlega vefskoðunarferilinn þinn til að sérsníða leitina og aðra þjónustu Google. Þú eða foreldri þitt getur breytt þessu hvenær sem er á myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Stjórna leitarvélum</translation> <translation id="1433811987160647649">Spyrja fyrir notkun</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Óþekkt tæki [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Þessi eigandareikningur verður að vera fyrsti innskráði reikningurinn í lotu fyrir margar innskráningar.</translation> <translation id="150411034776756821">Fjarlægja <ph name="SITE" /></translation> +<translation id="1504311855864906891">Fá skjátexta fyrir efnið þitt</translation> <translation id="1504551620756424144">Samnýttar möppur eru aðgengilegar í Windows á <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Leitarvél</translation> <translation id="1507170440449692343">Þessari síðu var bannað að fá aðgang að myndavélinni þinni.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Þú verður að slá sama aðgangsorðið inn tvisvar</translation> <translation id="1652326691684645429">Kveikja á Nærdeilingu</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Bættu prentaranum við Google skýjaprentun til að prenta hvaðan sem er.}one{Bættu # prentara við Google skýjaprentun til að prenta hvaðan sem er.}other{Bættu # prenturum við Google skýjaprentun til að prenta hvaðan sem er.}}</translation> +<translation id="1653575510930452864">Afrita tengil í texta</translation> <translation id="1656528038316521561">Gagnsæi bakgrunns</translation> <translation id="1657406563541664238">Hjálpa til við að bæta <ph name="PRODUCT_NAME" /> með því að senda sjálfkrafa talnagögn um notkun og tilkynningar um hrun til Google</translation> <translation id="1657937299377480641">Til að skrá þig inn aftur og fá aðgang að menntabrunnum skaltu biðja foreldri um að gefa þér leyfi</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">CA-öryggisbrestur</translation> <translation id="2182058453334755893">Afritað á klippiborðið</translation> <translation id="2184515124301515068">Leyfa Chrome að velja hvenær vefsvæði geta spilað hljóð (ráðlagt)</translation> +<translation id="2187243482123994665">Viðvera notanda</translation> <translation id="2187675480456493911">Samstillt við önnur tæki á reikningnum. Breytingar annarra notenda á stillingum verða ekki samstilltar. <ph name="LINK_BEGIN" />Frekari upplýsingar<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Villa við innflutning á vottorði þjóns</translation> <translation id="2187906491731510095">Viðbætur uppfærðar</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Færðu inn 4 stafa PIN-númer (0000-9999)</translation> <translation id="2399939490305346086">Innskráningargögn öryggislykils</translation> <translation id="2400664245143453337">Uppfæra þarf tafarlaust</translation> -<translation id="2407481962792080328">Kveikt er á þessum eiginleika þegar þú skráir þig inn á Google reikninginn þinn</translation> <translation id="2408018932941436077">Vistar kort</translation> <translation id="2408955596600435184">Sláðu inn PIN-númerið þitt</translation> <translation id="241082044617551207">Óþekkt viðbót</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963">Óþekkt vara <ph name="PRODUCT_ID" /> frá framleiðandanum <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Eftirfarandi þjónusta hjálpar til við að tryggja öryggi gagnanna þinna. Þú getur slökkt á þessum eiginleikum hvenær sem er.</translation> <translation id="3164329792803560526">Deilir þessum flipa með <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Spyrja þegar vefsvæði vill vita af því þegar þú ert á staðnum</translation> <translation id="3165390001037658081">Sum símafyrirtæki gætu lokað á þennan eiginleika.</translation> <translation id="316652501498554287">Reikningar G Suite fyrir skóla</translation> <translation id="3169472444629675720">Discover</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">Viltu búa til nýjan prófíl fyrir vinnuna?</translation> <translation id="452750746583162491">Fara yfir samstillt gögn</translation> <translation id="4530494379350999373">Uppruni</translation> +<translation id="4531924570968473143">Hverjum viltu bæta við þetta <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Þetta vefsvæði notar hreyfiskynjara.</translation> <translation id="4533846798469727141">Segðu nú „Hey Google“</translation> <translation id="4533985347672295764">Örgjörvatími</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">Flipaleit</translation> <translation id="465878909996028221">Einungis http, https and samskiptareglur skráa eru studdar fyrir framsendingu vafra.</translation> <translation id="4659077111144409915">Aðalreikningur</translation> +<translation id="4659126640776004816">Kveikt er á þessum eiginleika þegar þú skráir þig inn á Google reikninginn þinn.</translation> <translation id="4660476621274971848">Búist var við útgáfunni „<ph name="EXPECTED_VERSION" />“ en útgáfan er „<ph name="NEW_ID" />“</translation> <translation id="4660540330091848931">Breytir stærð</translation> <translation id="4661407454952063730">Forritsgögn eru hvers kyns gögn sem forrit hefur vistað (eftir stillingum þróunaraðila), þar á meðal gögn á borð við tengiliði, skilaboð og myndir.</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">Tillögur</translation> <translation id="475088594373173692">Fyrsti notandi</translation> <translation id="4751476147751820511">Hreyfi- eða birtuskynjarar</translation> -<translation id="4752124003533492687">Opnaðu stillingarnar til að tengja <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Stöðva/endurhlaða</translation> <translation id="4756388243121344051">Ferill</translation> <translation id="4759238208242260848">Niðurhal</translation> @@ -3978,6 +3983,7 @@ <translation id="5804241973901381774">Heimildir</translation> <translation id="5805697420284793859">Gluggastjórnun</translation> <translation id="5806773519584576205">0° (sjálfgefið)</translation> +<translation id="5808664694611589238">{0,plural, =1{Loka gesti}one{Loka gestum}other{Loka gestum}}</translation> <translation id="5810809306422959727">Þessi reikningur er ekki gjaldgengur fyrir barnalæsingar</translation> <translation id="5812674658566766066">Stækka allt</translation> <translation id="5814126672212206791">Gerð tengingar</translation> @@ -4435,6 +4441,7 @@ <translation id="6344170822609224263">Fá aðgang að lista yfir nettengingar</translation> <translation id="6344576354370880196">Vistaðir prentarar</translation> <translation id="6345418402353744910">Staðgengilsþjónninn <ph name="PROXY" /> þarf notandanafnið þitt og aðgangsorð til að stjórnandinn geti stillt netkerfið þitt</translation> +<translation id="6345878117466430440">Merkja sem lesið</translation> <translation id="6349101878882523185">Setja upp <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Samstilling virkar ekki. Prófaðu að skrá þig út og inn aftur.</translation> <translation id="6351063337294363751">Þú getur hreinsað vefskoðunargögn í þessari valmynd</translation> @@ -5021,6 +5028,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 með RSA-dulkóðun</translation> <translation id="7075625805486468288">Hafa umsjón með HTTPS/SSL-vottorðum og stillingum</translation> <translation id="7076293881109082629">Skráir inn</translation> +<translation id="7076878155205969899">Þagga hljóð</translation> <translation id="7077829361966535409">Ekki tókst að hlaða innskráningarsíðuna með því að nota núverandi proxy-stillingar. <ph name="GAIA_RELOAD_LINK_START" />Reyndu aftur að skrá þig inn<ph name="GAIA_RELOAD_LINK_END" /> eða notaðu aðrar <ph name="PROXY_SETTINGS_LINK_START" />proxy-stillingar<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Öll netkerfi</translation> <translation id="708060913198414444">A&frita slóð hljóðs</translation> @@ -5041,7 +5049,6 @@ <translation id="7099337801055912064">Ekki er hægt að hlaða inn stórri PPD-skrá. Hámarksstærð er 250 kB.</translation> <translation id="7102687220333134671">Nú er kveikt á sjálfvirkum uppfærslum</translation> <translation id="7102832101143475489">Beiðnin rann út á tíma</translation> -<translation id="7105390788077117391">USB-stillingar</translation> <translation id="710640343305609397">Opna netstillingar</translation> <translation id="7108338896283013870">Fela</translation> <translation id="7108668606237948702">enter</translation> @@ -5071,7 +5078,6 @@ <translation id="7136694880210472378">Gera sjálfgefið</translation> <translation id="7136984461011502314">Velkomin(n) í <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Villa kom upp. Reyndu aftur með því að velja aðrar myndir.</translation> -<translation id="7138678301420049075">Annað</translation> <translation id="713888829801648570">Því miður var ekki hægt að staðfesta aðgangsorðið þitt vegna þess að engin nettenging er fyrir hendi.</translation> <translation id="7140928199327930795">Engin önnur tiltæk tæki.</translation> <translation id="7141105143012495934">Innskráning mistókst vegna þess að ekki tókst að sækja reikningsupplýsingar. Hafðu samband við kerfisstjóra eða reyndu aftur.</translation> @@ -5178,6 +5184,7 @@ <translation id="7280649757394340890">Raddstillingar talgervils</translation> <translation id="7280877790564589615">Heimildar krafist</translation> <translation id="7282992757463864530">Upplýsingastika</translation> +<translation id="7284411326658527427">Hver einstaklingur getur sérsniðið reikninginn sinn og tryggt öryggi gagna.</translation> <translation id="7287143125007575591">Aðgangur ekki veittur.</translation> <translation id="7287411021188441799">Endurheimta sjálfgefinn bakgrunn</translation> <translation id="7288013116963835700">Fjarlægja Linux fyrir <ph name="DEVICE_TYPE" /></translation> @@ -5754,6 +5761,7 @@ <translation id="7963826112438303517">Hjálparinn notar þessar upptökur og raddbeiðnir þínar til að búa til og uppfæra raddlíkanið þitt, sem aðeins er geymt í tækjum sem eru með Voice Match uppsett. Skoðaðu eða endurgerðu raddvirkni í stillingum hjálparans.</translation> <translation id="7966241909927244760">A&frita slóð myndar</translation> <translation id="7968072247663421402">Valkostir þjónustuveitu</translation> +<translation id="7968198493605442410">Afrita tengil í texta</translation> <translation id="7968742106503422125">Lesa og breyta gögnum sem þú afritar og límir</translation> <translation id="7968833647796919681">Virkja söfnun gagna um afköst</translation> <translation id="7968982339740310781">Skoða upplýsingar</translation> @@ -6133,6 +6141,7 @@ <translation id="8428213095426709021">Stillingar</translation> <translation id="8428271547607112339">Bæta við skólareikningi</translation> <translation id="8428628598981198790">Ekki er hægt að nota öryggislykilinn þinn með þessu vefsvæði</translation> +<translation id="8428634594422941299">Ég skil</translation> <translation id="84297032718407999">Þú verður skráð(ur) út eftir <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Sýna snertingar</translation> <translation id="8431909052837336408">Breyta PIN-númeri SIM-korts</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index 39bea11..5e7191b 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Lettura e modifica di tutti i dati sul computer e sui siti web visitati</translation> <translation id="1430915738399379752">Stampa</translation> <translation id="1431188203598586230">Aggiornamento software finale</translation> +<translation id="1431402976894535801">Impedisci ai siti di sapere quando sei presente</translation> <translation id="1431432486300429272">Google può utilizzare la tua cronologia di navigazione per personalizzare la Ricerca e altri servizi Google. Tu o uno dei tuoi genitori potete cambiare questa impostazione in qualsiasi momento all'indirizzo myaccount.google.com/activitycontrols/search.</translation> <translation id="1432581352905426595">Gestisci motori di ricerca</translation> <translation id="1433811987160647649">Chiedi prima di accedere</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Dispositivo sconosciuto [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Questo account proprietario deve essere il primo account registrato in una sessione con accesso simultaneo.</translation> <translation id="150411034776756821">Rimuovi <ph name="SITE" /></translation> +<translation id="1504311855864906891">Crea sottotitoli per i tuoi contenuti multimediali</translation> <translation id="1504551620756424144">Le cartelle condivise sono disponibili su Windows al percorso <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Motore di ricerca</translation> <translation id="1507170440449692343">A questa pagina è stato impedito l'accesso alla webcam.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Devi inserire la stessa passphrase due volte</translation> <translation id="1652326691684645429">Attiva Condivisione nelle vicinanze</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Aggiungi la stampante a Google Cloud Print per poter stampare ovunque.}other{Aggiungi # stampanti a Google Cloud Print per poter stampare ovunque.}}</translation> +<translation id="1653575510930452864">Copia link nel testo</translation> <translation id="1656528038316521561">Opacità sfondo</translation> <translation id="1657406563541664238">Aiutaci a migliorare <ph name="PRODUCT_NAME" /> inviando automaticamente a Google le statistiche sull'utilizzo e segnalazioni sugli arresti anomali</translation> <translation id="1657937299377480641">Per eseguire di nuovo l'accesso per accedere a risorse didattiche, chiedi l'autorizzazione a uno dei tuoi genitori</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">Compromesso CA</translation> <translation id="2182058453334755893">Copia negli appunti eseguita</translation> <translation id="2184515124301515068">Consenti a Chrome di scegliere quando i siti possono riprodurre audio (opzione consigliata)</translation> +<translation id="2187243482123994665">Presenza dell'utente</translation> <translation id="2187675480456493911">Sincronizzata con altri dispositivi sul tuo account. Le impostazioni modificate da altri utenti non verranno sincronizzate. <ph name="LINK_BEGIN" />Ulteriori informazioni<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Errore di importazione del certificato del server</translation> <translation id="2187906491731510095">Estensioni aggiornate</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Inserisci il PIN di 4 cifre (0000-9999)</translation> <translation id="2399939490305346086">Dati di accesso del token di sicurezza</translation> <translation id="2400664245143453337">È richiesto l'aggiornamento immediato</translation> -<translation id="2407481962792080328">Questa funzionalità viene attivata quando accedi al tuo Account Google</translation> <translation id="2408018932941436077">Salvataggio della carta</translation> <translation id="2408955596600435184">Inserisci il codice PIN</translation> <translation id="241082044617551207">Plug-in sconosciuto</translation> @@ -1829,6 +1832,7 @@ <translation id="3163201441334626963">Prodotto sconosciuto <ph name="PRODUCT_ID" /> del fornitore <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">I seguenti servizi aiutano a mantenere i tuoi dati protetti e sicuri. Puoi disattivare questa funzionalità in qualsiasi momento.</translation> <translation id="3164329792803560526">Condivisione di questa scheda con <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Chiedi conferma quando un sito vuole sapere quando sei presente</translation> <translation id="3165390001037658081">La funzione potrebbe essere bloccata da alcuni operatori.</translation> <translation id="316652501498554287">Account G Suite for Education</translation> <translation id="3169472444629675720">Discover</translation> @@ -2946,6 +2950,7 @@ <translation id="4527186207340858212">Creare un nuovo profilo di lavoro?</translation> <translation id="452750746583162491">Verifica i tuoi dati sincronizzati</translation> <translation id="4530494379350999373">Origine</translation> +<translation id="4531924570968473143">Chi vorresti aggiungere a questo dispositivo <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Questo sito usa sensori di movimento.</translation> <translation id="4533846798469727141">Ora dì "Ok Google"</translation> <translation id="4533985347672295764">Tempo di CPU</translation> @@ -3065,6 +3070,7 @@ <translation id="4657810666108475055">Tab Search</translation> <translation id="465878909996028221">Per i reindirizzamenti del browser sono supportati solo http, https e i protocolli di file.</translation> <translation id="4659077111144409915">Account principale</translation> +<translation id="4659126640776004816">Questa funzionalità viene attivata quando accedi al tuo Account Google.</translation> <translation id="4660476621274971848">Versione prevista: "<ph name="EXPECTED_VERSION" />", versione rilevata: "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">Ridimensionamento</translation> <translation id="4661407454952063730">Per dati delle app si intende qualsiasi dato salvato da un'app (in base alle impostazioni dello sviluppatore), inclusi dati come contatti, messaggi e foto.</translation> @@ -3130,7 +3136,6 @@ <translation id="4750394297954878236">Suggerimenti</translation> <translation id="475088594373173692">Primo utente</translation> <translation id="4751476147751820511">Sensori di movimento o della luce</translation> -<translation id="4752124003533492687">Apri le Impostazioni per collegare <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Interrompi/Ricarica</translation> <translation id="4756388243121344051">&Cronologia</translation> <translation id="4759238208242260848">Download</translation> @@ -3977,6 +3982,7 @@ <translation id="5804241973901381774">Autorizzazioni</translation> <translation id="5805697420284793859">Gestione finestre</translation> <translation id="5806773519584576205">0° (valore predefinito)</translation> +<translation id="5808664694611589238">{0,plural, =1{Chiudi ospite}other{Chiudi ospite}}</translation> <translation id="5810809306422959727">Questo account non è idoneo per la funzionalità Controllo genitori</translation> <translation id="5812674658566766066">Espandi tutto</translation> <translation id="5814126672212206791">Tipo di connessione</translation> @@ -4434,6 +4440,7 @@ <translation id="6344170822609224263">Accesso all'elenco di connessioni di rete</translation> <translation id="6344576354370880196">Stampanti salvate</translation> <translation id="6345418402353744910">È necessario indicare il nome utente e la password per il proxy <ph name="PROXY" /> affinché l'amministratore possa configurare la tua rete</translation> +<translation id="6345878117466430440">Segna come letto</translation> <translation id="6349101878882523185">Installa <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">La sincronizzazione non funziona. Prova a uscire e ad accedere di nuovo.</translation> <translation id="6351063337294363751">Puoi cancellare i tuoi dati di navigazione da questo menu</translation> @@ -5020,6 +5027,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 con crittografia RSA</translation> <translation id="7075625805486468288">Gestisci certificati e impostazioni HTTPS/SSL</translation> <translation id="7076293881109082629">Accesso</translation> +<translation id="7076878155205969899">Disattiva audio</translation> <translation id="7077829361966535409">Caricamento della pagina di accesso non riuscito utilizzando le impostazioni proxy correnti. <ph name="GAIA_RELOAD_LINK_START" />Prova ad accedere di nuovo<ph name="GAIA_RELOAD_LINK_END" /> o utilizza altre <ph name="PROXY_SETTINGS_LINK_START" />impostazioni proxy<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Tutte le reti</translation> <translation id="708060913198414444">C&opia l'indirizzo dell'audio</translation> @@ -5040,7 +5048,6 @@ <translation id="7099337801055912064">Impossibile caricare il file PPD. Dimensioni massime: 250 kB.</translation> <translation id="7102687220333134671">Gli aggiornamenti automatici sono attivi</translation> <translation id="7102832101143475489">La richiesta è scaduta</translation> -<translation id="7105390788077117391">Preferenze USB</translation> <translation id="710640343305609397">Apri impostazioni di rete</translation> <translation id="7108338896283013870">Nascondi</translation> <translation id="7108668606237948702">invio</translation> @@ -5070,7 +5077,6 @@ <translation id="7136694880210472378">Imposta come predefinito</translation> <translation id="7136984461011502314">Benvenuto in <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Si è verificato un errore. Riprova scegliendo altre immagini.</translation> -<translation id="7138678301420049075">Altro</translation> <translation id="713888829801648570">Spiacenti, impossibile verificare la password perché sei offline.</translation> <translation id="7140928199327930795">Non ci sono altri dispositivi disponibili.</translation> <translation id="7141105143012495934">Accesso non riuscito perché non è stato possibile recuperare i dati dell'account. Contatta l'amministratore o riprova.</translation> @@ -5177,6 +5183,7 @@ <translation id="7280649757394340890">Impostazioni voce per sintesi vocale</translation> <translation id="7280877790564589615">Richiesta di autorizzazione</translation> <translation id="7282992757463864530">Barra delle informazioni</translation> +<translation id="7284411326658527427">Ogni persona potrà personalizzare il proprio account e tenere privati i dati.</translation> <translation id="7287143125007575591">Accesso negato.</translation> <translation id="7287411021188441799">Ripristina sfondo predefinito</translation> <translation id="7288013116963835700">Rimuovi Linux per il dispositivo <ph name="DEVICE_TYPE" /></translation> @@ -5753,6 +5760,7 @@ <translation id="7963826112438303517">L'assistente usa queste registrazioni e le tue richieste vocali per creare e aggiornare il tuo modello vocale, che viene memorizzato soltanto sui dispositivi in cui hai attivato Voice Match. Visualizza o reimposta l'attività vocale nelle Impostazioni dell'assistente.</translation> <translation id="7966241909927244760">C&opia l'indirizzo dell'immagine</translation> <translation id="7968072247663421402">Opzioni fornitore</translation> +<translation id="7968198493605442410">Copia link nel testo</translation> <translation id="7968742106503422125">Lettura e modifica dei dati copiati e incollati</translation> <translation id="7968833647796919681">Attiva raccolta di dati sul rendimento</translation> <translation id="7968982339740310781">Mostra dettagli</translation> @@ -6132,6 +6140,7 @@ <translation id="8428213095426709021">Impostazioni</translation> <translation id="8428271547607112339">Aggiungi account della scuola</translation> <translation id="8428628598981198790">Impossibile utilizzare il tuo token di sicurezza con questo sito</translation> +<translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">Verrai disconnesso tra <ph name="LOGOUT_TIME_LEFT" />.</translation> <translation id="8431190899827883166">Mostra tocchi</translation> <translation id="8431909052837336408">Cambia il PIN della SIM</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index 0b75996..d4f1529 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">לקרוא ולשנות את כל הנתונים במחשב שלך ובאתרים שבהם אתה מבקר</translation> <translation id="1430915738399379752">הדפסה</translation> <translation id="1431188203598586230">עדכון התוכנה האחרון</translation> +<translation id="1431402976894535801">אתרים לא יוכלו לדעת על זמני הנוכחות שלך</translation> <translation id="1431432486300429272">Google עשויה להשתמש בהיסטוריית הגלישה שלך כדי להתאים אישית את החיפוש ושירותים אחרים של Google. לך ולהורים יש אפשרות לשנות זאת מתי שתרצו בכתובת myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">נהל מנועי חיפוש</translation> <translation id="1433811987160647649">שאלה לפני גישה</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">מכשיר לא ידוע [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">החשבון של בעלים זה צריך להיות החשבון הראשון שאליו נכנסים בעת כניסה לפעילות באתר מחשבונות מרובים.</translation> <translation id="150411034776756821">הסרה של <ph name="SITE" /></translation> +<translation id="1504311855864906891">הצגת כתוביות עבור המדיה שלך</translation> <translation id="1504551620756424144">התיקיות המשותפות זמינות ב-Windows בספרייה <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">מנוע חיפוש</translation> <translation id="1507170440449692343">דף זה נחסם לגישה למצלמה שלך.</translation> @@ -566,6 +568,7 @@ <translation id="1651008383952180276">עליך להזין אותו ביטוי סיסמה פעמיים</translation> <translation id="1652326691684645429">הפעלה של 'שיתוף בקרבת מקום'</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{הוסף את המדפסת אל Google Cloud Print כך שתוכל להדפיס מכל מקום.}two{הוסף # מדפסות אל Google Cloud Print כך שתוכל להדפיס מכל מקום.}many{הוסף # מדפסות אל Google Cloud Print כך שתוכל להדפיס מכל מקום.}other{הוסף # מדפסות אל Google Cloud Print כך שתוכל להדפיס מכל מקום.}}</translation> +<translation id="1653575510930452864">העתקת הקישור לטקסט</translation> <translation id="1656528038316521561">שקיפות רקע</translation> <translation id="1657406563541664238">עזור להפוך את <ph name="PRODUCT_NAME" /> לטוב יותר, על ידי שליחה אוטומטית של נתוני שימוש ודוחות קריסה אל Google</translation> <translation id="1657937299377480641">כדי להיכנס מחדש לצורך גישה למקורות מידע חינוכיים, יש לבקש הרשאה מהורה</translation> @@ -999,6 +1002,7 @@ <translation id="2178614541317717477">רשות האישורים (CA) בסכנה</translation> <translation id="2182058453334755893">הועתק אל הלוח</translation> <translation id="2184515124301515068">Chrome יקבע מתי אתרים יכולים להפעיל צלילים (מומלץ)</translation> +<translation id="2187243482123994665">נוכחות משתמש</translation> <translation id="2187675480456493911">בוצע סנכרון עם מכשירים אחרים בחשבון שלך. הגדרות ששונו על-ידי משתמשים אחרים לא יסונכרנו. <ph name="LINK_BEGIN" />מידע נוסף<ph name="LINK_END" /></translation> <translation id="2187895286714876935">שגיאת ייבוא של אישור שרת</translation> <translation id="2187906491731510095">התוספים עודכנו</translation> @@ -1187,7 +1191,6 @@ <translation id="2396783860772170191">יש להזין קוד אימות בן 4 ספרות (0000-9999)</translation> <translation id="2399939490305346086">נתוני כניסה במפתח אבטחה</translation> <translation id="2400664245143453337">דרוש עדכון מידי</translation> -<translation id="2407481962792080328">התכונה הזו מופעלת בעת הכניסה לחשבון Google</translation> <translation id="2408018932941436077">שמירת הכרטיס מתבצעת</translation> <translation id="2408955596600435184">הזן את מספר ה-PIN</translation> <translation id="241082044617551207">פלאגין לא ידוע</translation> @@ -1828,6 +1831,7 @@ <translation id="3163201441334626963">מוצר לא ידוע <ph name="PRODUCT_ID" /> מהספק <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">השירותים הבאים עוזרים בהגנה על הנתונים שלך. ניתן להשבית את התכונות האלה בכל שלב.</translation> <translation id="3164329792803560526">המערכת משתפת את הכרטיסייה הזו עם <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">תוצג שאלה כשאתר ירצה לדעת על זמני הנוכחות שלך</translation> <translation id="3165390001037658081">ייתכן שספקים מסוימים חוסמים את התכונה הזו.</translation> <translation id="316652501498554287">חשבונות G Suite for Education</translation> <translation id="3169472444629675720">Discover</translation> @@ -2945,6 +2949,7 @@ <translation id="4527186207340858212">ליצור פרופיל חדש לעבודה?</translation> <translation id="452750746583162491">סקירת הנתונים המסונכרנים</translation> <translation id="4530494379350999373">מקור</translation> +<translation id="4531924570968473143">את מי ברצונך להוסיף אל <ph name="DEVICE_TYPE" /> זה?</translation> <translation id="4532646538815530781">באתר הזה נעשה שימוש בחיישני תנועה.</translation> <translation id="4533846798469727141">עכשיו אומרים "Hey Google"</translation> <translation id="4533985347672295764">זמן CPU (יחידת עיבוד מרכזית)</translation> @@ -3064,6 +3069,7 @@ <translation id="4657810666108475055">חיפוש בכרטיסייה</translation> <translation id="465878909996028221">בהפניה של דפדפן לכתובת URL אחרת, נתמכים רק הפרוטוקולים http, https ו-file.</translation> <translation id="4659077111144409915">חשבון ראשי</translation> +<translation id="4659126640776004816">התכונה הזו מופעלת בעת הכניסה לחשבון Google.</translation> <translation id="4660476621274971848">הגירסה הצפויה היא "<ph name="EXPECTED_VERSION" />", אבל הגירסה הייתה "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">שינוי הגודל מתבצע</translation> <translation id="4661407454952063730">נתוני אפליקציות הם כל הנתונים שנשמרים באפליקציות (בהתאם להגדרות של המפתחים), כולל נתונים כמו אנשי קשר, הודעות ותמונות.</translation> @@ -3129,7 +3135,6 @@ <translation id="4750394297954878236">הצעות</translation> <translation id="475088594373173692">משתמש ראשון</translation> <translation id="4751476147751820511">חיישני תנועה או אור</translation> -<translation id="4752124003533492687">יש להיכנס להגדרות כדי לחבר את <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">עצור/טען מחדש</translation> <translation id="4756388243121344051">&היסטוריה</translation> <translation id="4759238208242260848">הורדות</translation> @@ -3976,6 +3981,7 @@ <translation id="5804241973901381774">הרשאות</translation> <translation id="5805697420284793859">מנהל החלונות</translation> <translation id="5806773519584576205">0° (ברירת מחדל)</translation> +<translation id="5808664694611589238">{0,plural, =1{סגירת חלון אורח}two{סגירת חלונות אורח}many{סגירת חלונות אורח}other{סגירת חלונות אורח}}</translation> <translation id="5810809306422959727">החשבון הזה לא מתאים לבקרת הורים</translation> <translation id="5812674658566766066">הרחבת הכול</translation> <translation id="5814126672212206791">סוג חיבור</translation> @@ -4433,6 +4439,7 @@ <translation id="6344170822609224263">גישה לרשימת החיבורים לרשת</translation> <translation id="6344576354370880196">מדפסות שמורות</translation> <translation id="6345418402353744910">עליך להזין את שם המשתמש והסיסמה שלך כדי שמנהל מערכת יוכל להגדיר את הרשת שלך בשרת ה-proxy <ph name="PROXY" /></translation> +<translation id="6345878117466430440">סימון כפריט שנקרא</translation> <translation id="6349101878882523185">התקן את <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">הסנכרון לא פועל. נסה לצאת ולהיכנס שוב.</translation> <translation id="6351063337294363751">בתפריט זה ניתן לנקות את נתוני הגלישה</translation> @@ -5019,6 +5026,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 עם הצפנת RSA</translation> <translation id="7075625805486468288">נהל אישורים והגדרות של HTTPS/SSL</translation> <translation id="7076293881109082629">כניסה</translation> +<translation id="7076878155205969899">השתקת צלילים</translation> <translation id="7077829361966535409">טעינת דף הכניסה באמצעות הגדרות שרת ה-proxy הנוכחיות נכשלה. <ph name="GAIA_RELOAD_LINK_START" />נסה להיכנס שוב<ph name="GAIA_RELOAD_LINK_END" /> או השתמש ב<ph name="PROXY_SETTINGS_LINK_START" />הגדרות שונות לשרת ה-proxy<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">כל הרשתות</translation> <translation id="708060913198414444">העתק כתובת &אודיו</translation> @@ -5039,7 +5047,6 @@ <translation id="7099337801055912064">לא ניתן לטעון קובץ PPD גדול. הגודל המקסימלי הוא 250 kB.</translation> <translation id="7102687220333134671">עדכונים אוטומטיים מופעלים</translation> <translation id="7102832101143475489">תם פרק הזמן שהוקצב לבקשה</translation> -<translation id="7105390788077117391">העדפות USB</translation> <translation id="710640343305609397">פתיחת הגדרות רשת</translation> <translation id="7108338896283013870">הסתרה</translation> <translation id="7108668606237948702">הזן</translation> @@ -5069,7 +5076,6 @@ <translation id="7136694880210472378">הפוך לברירת מחדל</translation> <translation id="7136984461011502314">ברוך הבא ל-<ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">קרתה שגיאה. יש לנסות שוב על-ידי בחירת תמונות אחרות.</translation> -<translation id="7138678301420049075">אחר</translation> <translation id="713888829801648570">מצטערים, לא ניתן לאמת את סיסמתך מכיוון שאתה במצב לא מקוון.</translation> <translation id="7140928199327930795">אין מכשירים זמינים נוספים.</translation> <translation id="7141105143012495934">הכניסה נכשלה מפני שלא ניתן היה לאחזר את פרטי החשבון. צור קשר עם מנהל המערכת או נסה שוב.</translation> @@ -5176,6 +5182,7 @@ <translation id="7280649757394340890">הגדרות קול של המרת טקסט לדיבור</translation> <translation id="7280877790564589615">התבקשה הרשאה</translation> <translation id="7282992757463864530">סרגל מידע</translation> +<translation id="7284411326658527427">כל משתמש יכול להתאים אישית את החשבון שלו ולהגן על פרטיות הנתונים.</translation> <translation id="7287143125007575591">אין גישה</translation> <translation id="7287411021188441799">שחזור רקע ברירת מחדל</translation> <translation id="7288013116963835700">הסרת Linux עבור <ph name="DEVICE_TYPE" /></translation> @@ -5751,6 +5758,7 @@ <translation id="7963826112438303517">ה-Assistant משתמש בהקלטות האלה ובבקשות קוליות כדי ליצור ולעדכן את תבנית הקול שלך. התבנית נשמרת רק במכשירים שבהם התכונה Voice Match מופעלת. אפשר להציג את הפעילות הקולית או לשמור אותה דרך ההגדרות של Assistant.</translation> <translation id="7966241909927244760">העתק כתובת &תמונה</translation> <translation id="7968072247663421402">אפשרויות ספק</translation> +<translation id="7968198493605442410">העתקת הקישור לטקסט</translation> <translation id="7968742106503422125">קריאה ושינוי של נתונים שאתה מעתיק ומדביק</translation> <translation id="7968833647796919681">הפעל איסוף של נתוני ביצועים</translation> <translation id="7968982339740310781">הצג פרטים</translation> @@ -6133,6 +6141,7 @@ <translation id="8428213095426709021">הגדרות</translation> <translation id="8428271547607112339">הוספת חשבון בית ספרי</translation> <translation id="8428628598981198790">לא ניתן להשתמש במפתח האבטחה שלך באתר הזה</translation> +<translation id="8428634594422941299">הבנתי</translation> <translation id="84297032718407999">בעוד <ph name="LOGOUT_TIME_LEFT" /> תבוצע יציאה מהחשבון</translation> <translation id="8431190899827883166">הצגת הקשות</translation> <translation id="8431909052837336408">שנה את מספר ה-PIN של ה-SIM</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index efcce90d..58acebe 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">不明なデバイス [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">この所有者アカウントは、マルチログイン セッションで最初にログインするアカウントである必要があります。</translation> <translation id="150411034776756821"><ph name="SITE" /> を削除</translation> +<translation id="1504311855864906891">メディアの字幕を生成する</translation> <translation id="1504551620756424144">共有フォルダは Windows では <ph name="BASE_DIR" /> にあります。</translation> <translation id="1506061864768559482">検索エンジン</translation> <translation id="1507170440449692343">このページはカメラへのアクセスを禁止されています。</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">4 桁の PIN(0000~9999)を入力してください</translation> <translation id="2399939490305346086">セキュリティ キーのログインデータ</translation> <translation id="2400664245143453337">今すぐ更新が必要です</translation> -<translation id="2407481962792080328">この機能は Google アカウントにログインすると有効になります</translation> <translation id="2408018932941436077">カードを保存しています</translation> <translation id="2408955596600435184">PIN を入力してください</translation> <translation id="241082044617551207">不明なプラグイン</translation> @@ -3066,6 +3066,7 @@ <translation id="4657810666108475055">タブ検索</translation> <translation id="465878909996028221">ブラウザのリダイレクトでは、http、https、file プロトコルのみサポートされています。</translation> <translation id="4659077111144409915">メイン アカウント</translation> +<translation id="4659126640776004816">この機能は Google アカウントにログインすると有効になります。</translation> <translation id="4660476621274971848">バージョン「<ph name="EXPECTED_VERSION" />」が必要ですが、バージョン「<ph name="NEW_ID" />」が検出されました</translation> <translation id="4660540330091848931">サイズを変更しています</translation> <translation id="4661407454952063730">アプリのデータとは、(デベロッパーの設定に基づいて)アプリが保存したデータのことで、連絡先、メッセージ、写真などのデータが含まれます。</translation> @@ -3131,7 +3132,6 @@ <translation id="4750394297954878236">候補</translation> <translation id="475088594373173692">最初のユーザー</translation> <translation id="4751476147751820511">モーション センサーまたは光センサー</translation> -<translation id="4752124003533492687">「<ph name="USB_DEVICE_NAME" />」を接続するには、[設定] を開いてください</translation> <translation id="4756378406049221019">停止 / 再読み込み</translation> <translation id="4756388243121344051">履歴(&H)</translation> <translation id="4759238208242260848">ダウンロード</translation> @@ -5021,6 +5021,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 with RSA 暗号化</translation> <translation id="7075625805486468288">HTTPS / SSL の証明書と設定を管理します</translation> <translation id="7076293881109082629">ログイン中</translation> +<translation id="7076878155205969899">音声をミュートする</translation> <translation id="7077829361966535409">現在のプロキシ設定を使用してログイン ページを読み込むことができませんでした。<ph name="GAIA_RELOAD_LINK_START" />もう一度ログイン<ph name="GAIA_RELOAD_LINK_END" />してみるか、別の<ph name="PROXY_SETTINGS_LINK_START" />プロキシ設定<ph name="PROXY_SETTINGS_LINK_END" />を使用してみてください。</translation> <translation id="7078120482318506217">すべてのネットワーク</translation> <translation id="708060913198414444">オーディオ アドレスをコピー(&C)</translation> @@ -5041,7 +5042,6 @@ <translation id="7099337801055912064">サイズの大きい PPD は読み込めません。最大サイズは 250 KB です。</translation> <translation id="7102687220333134671">自動更新が有効です</translation> <translation id="7102832101143475489">リクエストがタイムアウトになりました</translation> -<translation id="7105390788077117391">USB の設定</translation> <translation id="710640343305609397">ネットワーク設定を開く</translation> <translation id="7108338896283013870">非表示</translation> <translation id="7108668606237948702">Enter</translation> @@ -5071,7 +5071,6 @@ <translation id="7136694880210472378">デフォルトに設定</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> へようこそ</translation> <translation id="7136993520339022828">エラーが発生しました。別の画像を選択して、もう一度お試しください。</translation> -<translation id="7138678301420049075">その他</translation> <translation id="713888829801648570">オフラインになっているためパスワードを確認できませんでした。</translation> <translation id="7140928199327930795">利用可能なデバイスは他にありません。</translation> <translation id="7141105143012495934">アカウントの詳細を取得できなかったためログインできませんでした。管理者に問い合わせるか、もう一度お試しください。</translation> @@ -6134,6 +6133,7 @@ <translation id="8428213095426709021">設定</translation> <translation id="8428271547607112339">学校用アカウントを追加</translation> <translation id="8428628598981198790">お使いのセキュリティ キーはこのサイトでは使用できません</translation> +<translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">あと <ph name="LOGOUT_TIME_LEFT" />でログアウトします</translation> <translation id="8431190899827883166">タップを表示</translation> <translation id="8431909052837336408">SIM PIN を変更</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb index f4d7f77..541ae07 100644 --- a/chrome/app/resources/generated_resources_ka.xtb +++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">უცნობი მოწყობილობა [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">მფლობელის ეს ანგარიში გახდეს პირველი შესული ანგარიში მრავალპროფილიან სესიაში.</translation> <translation id="150411034776756821"><ph name="SITE" />-ის ამოშლა</translation> +<translation id="1504311855864906891">იხილეთ თქვენი მედიაფაილების სუბტიტრები</translation> <translation id="1504551620756424144">გაზიარებული საქაღალდეები Windows-ში ხელმისაწვდომია აქ: <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">საძიებო სისტემა</translation> <translation id="1507170440449692343">ამ გვერდზე უკვე დაბლოკილია თქვენს კამერაზე წვდომა.</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">შეიყვანეთ 4-ციფრიანი PIN-კოდი (0000-9999)</translation> <translation id="2399939490305346086">უსაფრთხოების გასაღების სისტემაში შესვლის მონაცემები</translation> <translation id="2400664245143453337">საჭიროა გადაუდებელი განახლება</translation> -<translation id="2407481962792080328">თქვენს Google ანგარიშში შესვლისას ეს ფუნქცია ჩართული იქნება</translation> <translation id="2408018932941436077">მიმდინარეობს ბარათის შენახვა</translation> <translation id="2408955596600435184">შეიყვანეთ თქვენი PIN-კოდი</translation> <translation id="241082044617551207">უცნობი დანამატი</translation> @@ -3065,6 +3065,7 @@ <translation id="4657810666108475055">ჩანართებში ძიება</translation> <translation id="465878909996028221">ბრაუზერის გადამისამართებისთვის მხარდაჭერილია მხოლოდ http, https და ფაილების პროტოკოლები.</translation> <translation id="4659077111144409915">ძირითადი ანგარიში</translation> +<translation id="4659126640776004816">თქვენს Google ანგარიშში შესვლისას ეს ფუნქცია ჩართული იქნება.</translation> <translation id="4660476621274971848">მოსალოდნელი ვერსია: „<ph name="EXPECTED_VERSION" />“, მიღებული ვერსია: „<ph name="NEW_ID" />“</translation> <translation id="4660540330091848931">მიმდინარეობს ზომის შეცვლა</translation> <translation id="4661407454952063730">აპების მონაცემებად შეიძლება ჩაითვალოს ამა თუ იმ აპის მიერ შენახული ნებისმიერი სახის მონაცემი (დეველოპერის პარამეტრების მიხედვით), მათ შორის, ისეთი მონაცემები, როგორიცაა კონტაქტები, შეტყობინებები და ფოტოები.</translation> @@ -3130,7 +3131,6 @@ <translation id="4750394297954878236">შემოთავაზებები</translation> <translation id="475088594373173692">პირველი მომხმარებელი</translation> <translation id="4751476147751820511">მოძრაობის ან განათების სენსორები</translation> -<translation id="4752124003533492687">გახსენით პარამეტრები, <ph name="USB_DEVICE_NAME" /> რომ დააკავშიროთ</translation> <translation id="4756378406049221019">შეწყვეტა/გადატვირთვა</translation> <translation id="4756388243121344051">&ისტორია</translation> <translation id="4759238208242260848">ჩამოტვირთვები</translation> @@ -5020,6 +5020,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 RSA დაშიფვრით</translation> <translation id="7075625805486468288">HTTPS/SSL სერტიფიკატებისა და პარამეტრების მართვა</translation> <translation id="7076293881109082629">მიმდინარეობს სისტემაში შესვლა</translation> +<translation id="7076878155205969899">ხმის დადუმება</translation> <translation id="7077829361966535409">ვერ მოხერხდა სისტემაში შესვლის გვერდის ჩამოტვირთვა არსებული პროქსი პარამეტრების გამოყენებით. გთხოვთ <ph name="GAIA_RELOAD_LINK_START" />სდაცეთ შესვლა კიდევ ერთხელ<ph name="GAIA_RELOAD_LINK_END" />, ან გამოიყენეთ სხვა <ph name="PROXY_SETTINGS_LINK_START" />პროქსის პარამეტრები<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">ყველა ქსელი</translation> <translation id="708060913198414444">აუდიოს მისამართის კ&ოპირება</translation> @@ -5040,7 +5041,6 @@ <translation id="7099337801055912064">დიდი ზომის PPD-ის ჩატვირთვა ვერ მოხერხდება. მაქსიმალური ზომაა 250 კბაიტი.</translation> <translation id="7102687220333134671">ავტომატური განახლებები ჩართულია</translation> <translation id="7102832101143475489">მოთხოვნის დრო ამოიწურა</translation> -<translation id="7105390788077117391">USB-ის პარამეტრები</translation> <translation id="710640343305609397">ქსელის პარამეტრების გახსნა</translation> <translation id="7108338896283013870">დამალვა</translation> <translation id="7108668606237948702">შეყვანა</translation> @@ -5070,7 +5070,6 @@ <translation id="7136694880210472378">აქციეთ ნაგულისხმევად</translation> <translation id="7136984461011502314">მოგესალმებათ <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">წარმოიქმნა შეცდომა. ცადეთ ხელახლა სხვა სურათების არჩევით.</translation> -<translation id="7138678301420049075">სხვა</translation> <translation id="713888829801648570">სამწუხაროდ, თქვენი პაროლის გადამოწმება ვერ მოხერხდა, რადგან თქვენ ოფლაინში ხართ.</translation> <translation id="7140928199327930795">სხვა ხელმისაწვდომი მოწყობილობები არ არის.</translation> <translation id="7141105143012495934">შესვლა ვერ მოხერხდა, რადგან თქვენი ანგარიშის შესახებ დეტალების მიღება შეუძლებელია. გთხოვთ, დაუკავშირდეთ ადმინისტრატორს ან სცადოთ ხელახლა.</translation> @@ -6131,6 +6130,7 @@ <translation id="8428213095426709021">პარამეტრები</translation> <translation id="8428271547607112339">სასწავლებლის ანგარიშის დამატება</translation> <translation id="8428628598981198790">თქვენი უსაფრთხოების გასაღების ამ საიტზე გამოყენება ვერ მოხერხდება</translation> +<translation id="8428634594422941299">გასაგებია</translation> <translation id="84297032718407999">სისტემიდან თქვენს გამოსვლამდე დარჩა <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">შეხებების ჩვენება</translation> <translation id="8431909052837336408">SIM ბარათის PIN-კოდის შეცვლა</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb index 0033f20..73d4bf2b 100644 --- a/chrome/app/resources/generated_resources_kk.xtb +++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">Белгісіз құрылғы [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Бұл иеленуші есептік жазбасы көп кіру сеансында алғашқы жүйеге кірген есептік жазба болуы керек.</translation> <translation id="150411034776756821"><ph name="SITE" /> сайтын өшіру</translation> +<translation id="1504311855864906891">Мультимедиалық файлға субтитр жасау</translation> <translation id="1504551620756424144">Ортақ қалталарды Windows жүйесінде <ph name="BASE_DIR" /> каталогінен таба аласыз.</translation> <translation id="1506061864768559482">Іздеу жүйесі</translation> <translation id="1507170440449692343">Бұл бетке камераны пайдалануға тыйым салынған.</translation> @@ -1187,7 +1188,6 @@ <translation id="2396783860772170191">4 таңбалы PIN кодын (0000-9999) енгізіңіз.</translation> <translation id="2399939490305346086">Қауіпсіздік кілтіне кіру деректері</translation> <translation id="2400664245143453337">Дереу жаңарту қажет</translation> -<translation id="2407481962792080328">Google есептік жазбаңызға кіргенде, бұл функция қосылады.</translation> <translation id="2408018932941436077">Карта сақталуда</translation> <translation id="2408955596600435184">PIN кодын енгізіңіз</translation> <translation id="241082044617551207">Белгісіз плагин</translation> @@ -3063,6 +3063,7 @@ <translation id="4657810666108475055">Қойындыны іздеу</translation> <translation id="465878909996028221">Тек http, https және файл протоколдары браузер бағытын ауыстырады.</translation> <translation id="4659077111144409915">Негізгі есептік жазба</translation> +<translation id="4659126640776004816">Google есептік жазбаңызға кіргенде, бұл функция қосылады.</translation> <translation id="4660476621274971848">"<ph name="NEW_ID" />" нұсқасы күтілген "<ph name="EXPECTED_VERSION" />" нұсқасына сәйкес келмейді</translation> <translation id="4660540330091848931">Көлемі өзгертілуде.</translation> <translation id="4661407454952063730">Қолданба деректеріне контактілер, хабарлар және фотосуреттер сияқты қолданба сақтаған (әзірлеуші параметрлеріне байланысты) кез келген дерек жатуы мүмкін.</translation> @@ -3128,7 +3129,6 @@ <translation id="4750394297954878236">Ұсыныстар</translation> <translation id="475088594373173692">Алғашқы пайдаланушы</translation> <translation id="4751476147751820511">Қозғалыс не жарық датчиктері</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" /> құрылғысына қосылу үшін параметрлерді ашыңыз.</translation> <translation id="4756378406049221019">Тоқтату/Қайта жүктеу</translation> <translation id="4756388243121344051">&Тарих</translation> <translation id="4759238208242260848">Жүктеп алынғандар</translation> @@ -5018,6 +5018,7 @@ <translation id="7075513071073410194">RSA шифрлауы бар PKCS #1 MD5</translation> <translation id="7075625805486468288">HTTPS/SSL сертификаттары мен параметрлерін басқару</translation> <translation id="7076293881109082629">Кіру</translation> +<translation id="7076878155205969899">Дыбысын өшіру</translation> <translation id="7077829361966535409">Кіру бетін ағымдық прокси параметрлері арқылы жүктеу сәтсіз аяқталды. <ph name="GAIA_RELOAD_LINK_START" />Қайта кіріп көріңіз<ph name="GAIA_RELOAD_LINK_END" /> немесе басқа <ph name="PROXY_SETTINGS_LINK_START" />прокси параметрлерін<ph name="PROXY_SETTINGS_LINK_END" /> пайдаланыңыз.</translation> <translation id="7078120482318506217">Барлық желілер</translation> <translation id="708060913198414444">Аудиофайл мекенжайын к&өшіру</translation> @@ -5038,7 +5039,6 @@ <translation id="7099337801055912064">Үлкен PPD файлын жүктеу мүмкін емес. Көлемі 250 Кб-тан аспауы керек.</translation> <translation id="7102687220333134671">Автоматты жаңарту қосулы</translation> <translation id="7102832101143475489">Сұрау уақыты өтіп кетті</translation> -<translation id="7105390788077117391">USB параметрлері</translation> <translation id="710640343305609397">Желі параметрлерін ашу</translation> <translation id="7108338896283013870">Жасыру</translation> <translation id="7108668606237948702">enter</translation> @@ -5068,7 +5068,6 @@ <translation id="7136694880210472378">Әдепкі қылу</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> өніміне қош келдіңіз</translation> <translation id="7136993520339022828">Қате шықты. Басқа суреттерді таңдап көріңіз.</translation> -<translation id="7138678301420049075">Басқа</translation> <translation id="713888829801648570">Кешіріңіз, құпия сөзіңізді растау мүмкін емес, себебі сіз желіде емессіз.</translation> <translation id="7140928199327930795">Басқа қолжетімді құрылғылар жоқ.</translation> <translation id="7141105143012495934">Кірілмеді, себебі есептік жазба мәліметтерін шығарып алу мүмкін емес. Әкімшіңізге хабарласыңыз немесе әрекетті қайталаңыз.</translation> @@ -6130,6 +6129,7 @@ <translation id="8428213095426709021">Параметрлер</translation> <translation id="8428271547607112339">Оқу есептік жазбасын енгізу</translation> <translation id="8428628598981198790">Қауіпсіздік кілтіңізді осы сайтпен пайдалану мүмкін емес</translation> +<translation id="8428634594422941299">Түсінікті</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> өткеннен кейін есептік жазбадан шығасыз</translation> <translation id="8431190899827883166">Түрту қимылын көрсету</translation> <translation id="8431909052837336408">SIM PIN кодын өзгерту</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb index f8fe01e..f524a238 100644 --- a/chrome/app/resources/generated_resources_km.xtb +++ b/chrome/app/resources/generated_resources_km.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">អាន និងប្តូរទិន្នន័យរបស់អ្នកទាំងអស់នៅលើកុំព្យូទ័ររបស់អ្នក និងគេហទំព័រដែលអ្នកទៅកាន់</translation> <translation id="1430915738399379752">បោះពុម្ព</translation> <translation id="1431188203598586230">កំណែកម្មវិធីចុងក្រោយ</translation> +<translation id="1431402976894535801">ទប់ស្កាត់គេហទំព័រមិនឱ្យដឹងអំពីពេលវេលាដែលអ្នកមានវត្តមាន</translation> <translation id="1431432486300429272">Google អាចប្រើប្រវត្តិរុករកតាមអ៊ីនធឺណិតរបស់អ្នក ដើម្បីធ្វើឱ្យការស្វែងរក និងសេវាកម្ម Google ផ្សេងទៀតស្របនឹងអ្នក។ អ្នក ឬមាតាបិតារបស់អ្នកអាចប្ដូរវាបានគ្រប់ពេលតាមរយៈ myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">គ្រប់គ្រងម៉ាស៊ីនស្វែងរក</translation> <translation id="1433811987160647649">សួរមុនចូលប្រើ</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">ឧបករណ៍មិនស្គាល់ [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">ម្ចាស់គណនីត្រូវចូលគណនីជាមុនសិននៅក្នុងវេនចូលច្រើន.</translation> <translation id="150411034776756821">លុប <ph name="SITE" /></translation> +<translation id="1504311855864906891">ទទួលបានអក្សររត់សម្រាប់មេឌៀរបស់អ្នក</translation> <translation id="1504551620756424144">មានថតដែលបានចែករំលែកនៅក្នុង Windows នៅ <ph name="BASE_DIR" />។</translation> <translation id="1506061864768559482">ម៉ាស៊ីនស្វែងរក</translation> <translation id="1507170440449692343">ទំព័រនេះត្រូវបានរារាំងពីការចូលប្រើកាមេរ៉ារបស់អ្នក។</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">អ្នកត្រូវតែបញ្ចូលឃ្លាសម្ងាត់ដូចគ្នាពីរដង</translation> <translation id="1652326691684645429">បើកការចែករំលែកនៅជិត</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{បន្ថែមម៉ាស៊ីនបោះពុម្ពទៅ Google Cloud Print ដូច្នេះអ្នកអាចបោះពុម្ពពីគ្រប់ទីកន្លែង។}other{បន្ថែមម៉ាស៊ីនបោះពុម្ព # ទៅ Google Cloud Print ដូច្នេះអ្នកអាចបោះពុម្ពពីគ្រប់ទីកន្លែង។}}</translation> +<translation id="1653575510930452864">ចម្លងតំណទៅអត្ថបទ</translation> <translation id="1656528038316521561">ភាពស្រអាប់ផ្ទៃខាងក្រោយ</translation> <translation id="1657406563541664238">ជួយធ្វើឲ្យ <ph name="PRODUCT_NAME" /> ប្រសើរជាងមុនដោយការផ្ញើស្ថិតិការប្រើប្រាស់ និងរបាយការណ៍គាំងទៅ Google ដោយស្វ័យប្រវត្តិ។</translation> <translation id="1657937299377480641">ដើម្បីចូលគណនីម្ដងទៀត ដើម្បីចូលប្រើធនធានអប់រំ សូមស្នើសុំការអនុញ្ញាតពីមាតាបិតារបស់អ្នក</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">CA សម្រួល</translation> <translation id="2182058453334755893">បានចម្លងទៅក្នុងឃ្លីបបតរបស់អ្នក</translation> <translation id="2184515124301515068">អនុញ្ញាតឱ្យ Chrome ជ្រើសរើសថាតើពេលណាដែលគេហទំព័រអាចចាក់សំឡេងបាន (បានណែនាំ)</translation> +<translation id="2187243482123994665">វត្តមានរបស់អ្នកប្រើប្រាស់</translation> <translation id="2187675480456493911">បានធ្វើសមកាលកម្មជាមួយឧបករណ៍ផ្សេងទៀតនៅលើគណនីរបស់អ្នក។ ការកំណត់ដែលបានកែប្រែដោយអ្នកប្រើប្រាស់ផ្សេងទៀតនឹងមិនត្រូវបានធ្វើសមកាលកម្មទេ។ <ph name="LINK_BEGIN" />ស្វែងយល់បន្ថែម<ph name="LINK_END" /></translation> <translation id="2187895286714876935">កំហុសឆ្គងការនាំចូលវិញ្ញាបនប័ត្រម៉ាស៊ីនមេ</translation> <translation id="2187906491731510095">បានដំឡើងជំនាន់កម្មវិធីបន្ថែម</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">បញ្ចូលកូដ pin 4 ខ្ទង់ (0000-9999)</translation> <translation id="2399939490305346086">ទិន្នន័យចូលគណនីរបស់សោសុវត្ថិភាព</translation> <translation id="2400664245143453337">តម្រូវឱ្យមានការដំឡើងកំណែភ្លាមៗ</translation> -<translation id="2407481962792080328">នៅពេលអ្នកចូលគណនី Google របស់អ្នក មុខងារនេះត្រូវបានបើក</translation> <translation id="2408018932941436077">កំពុងរក្សាទុកបណ្ណ</translation> <translation id="2408955596600435184">បញ្ចូលកូដ PIN របស់អ្នក</translation> <translation id="241082044617551207">កម្មវិធីជំនួយដែលមិនស្គាល់</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963">មិនស្គាល់ផលិតផល <ph name="PRODUCT_ID" /> ពីអ្នកលក់ <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">សេវាកម្មខាងក្រោមជួយរក្សាទិន្នន័យរបស់អ្នកឱ្យមានសុវត្ថិភាព។ អ្នកអាចបិទមុខងារទាំងនេះបានគ្រប់ពេល។</translation> <translation id="3164329792803560526">កំពុងចែករំលែកផ្ទាំងនេះទៅ <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">សួរនៅពេលគេហទំព័រចង់ដឹងអំពីពេលវេលាដែលអ្នកមានវត្តមាន</translation> <translation id="3165390001037658081">ក្រុមហ៊ុនបម្រើសេវាទូរសព្ទមួយចំនួនអាចនឹងទប់ស្កាត់មុខងារនេះ។</translation> <translation id="316652501498554287">គណនី G Suite សម្រាប់ការអប់រំ</translation> <translation id="3169472444629675720">Discover</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">បង្កើតកម្រងព័ត៌មានថ្មីសម្រាប់ការងារឬ?</translation> <translation id="452750746583162491">ពិនិត្យមើលទិន្នន័យដែលបានធ្វើសមកាលកម្មរបស់អ្នក</translation> <translation id="4530494379350999373">ប្រភពដើម</translation> +<translation id="4531924570968473143">តើអ្នកចង់បញ្ចូលនរណាទៅក្នុង <ph name="DEVICE_TYPE" /> នេះ?</translation> <translation id="4532646538815530781">គេហទំព័រនេះកំពុងប្រើឧបករណ៍ចាប់ចលនា។</translation> <translation id="4533846798469727141">ឥឡូវនេះ សូមនិយាយថា "Hey Google"</translation> <translation id="4533985347672295764">ម៉ោង CPU</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">ការស្វែងរកផ្ទាំង</translation> <translation id="465878909996028221">មានតែប្រូតូកូល http, https និងឯកសារប៉ុណ្ណោះដែលស្គាល់ការបញ្ជូនបន្តកម្មវិធីរុករកតាមអ៊ីនធឺណិត។</translation> <translation id="4659077111144409915">គណនីចម្បង</translation> +<translation id="4659126640776004816">នៅពេលអ្នកចូលគណនី Google របស់អ្នក មុខងារនេះត្រូវបានបើក។</translation> <translation id="4660476621274971848">កំណែដែលបានរំពឹងទុកគឺ "<ph name="EXPECTED_VERSION" />" ប៉ុន្តែកំណែជាក់ស្ដែង "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">កំពុងប្ដូរទំហំ</translation> <translation id="4661407454952063730">ទិន្នន័យកម្មវិធីអាចជាទិន្នន័យទាំងឡាយដែលកម្មវិធីបានរក្សាទុក (ផ្អែកលើការកំណត់របស់អ្នកអភិវឌ្ឍន៍) រួមទាំងទិន្នន័យដូចជា ទំនាក់ទំនង សារ និងរូបថតជាដើម។</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">ការផ្តល់យោបល់</translation> <translation id="475088594373173692">អ្នកប្រើដំបូង</translation> <translation id="4751476147751820511">ឧបករណ៍ចាប់សញ្ញាពន្លឺ ឬចលនា</translation> -<translation id="4752124003533492687">បើកការកំណត់ ដើម្បីភ្ជាប់ <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">បញ្ឈប់/ផ្ទុកឡើងវិញ</translation> <translation id="4756388243121344051">ប្រវត្តិ</translation> <translation id="4759238208242260848">ទាញយក</translation> @@ -3979,6 +3984,7 @@ <translation id="5804241973901381774">ការអនុញ្ញាត</translation> <translation id="5805697420284793859">កម្មវិធីគ្រប់គ្រងវិនដូ</translation> <translation id="5806773519584576205">0° (លំនាំដើម)</translation> +<translation id="5808664694611589238">{0,plural, =1{បិទផ្ទាំងភ្ញៀវ}other{បិទផ្ទាំងភ្ញៀវ}}</translation> <translation id="5810809306422959727">គណនីនេះមិនអាចប្រើការគ្រប់គ្រងដោយមាតាបិតាបានទេ</translation> <translation id="5812674658566766066">ពង្រីកទាំងអស់</translation> <translation id="5814126672212206791">ប្រភេទនៃការតភ្ជាប់</translation> @@ -4436,6 +4442,7 @@ <translation id="6344170822609224263">ចូលប្រើបញ្ជីនៃការភ្ជាប់បណ្តាញ</translation> <translation id="6344576354370880196">ម៉ាស៊ីនបោះពុម្ពដែលបានរក្សាទុក</translation> <translation id="6345418402353744910">តម្រូវឱ្យមានពាក្យសម្ងាត់ និងឈ្មោះអ្នកប្រើប្រាស់របស់អ្នកសម្រាប់ប្រូកស៊ី <ph name="PROXY" /> ដើម្បីអាចឱ្យអ្នកគ្រប់គ្រងកំណត់រចនាសម្ព័ន្ធបណ្ដាញរបស់អ្នក</translation> +<translation id="6345878117466430440">សម្គាល់ថាបានអានហើយ</translation> <translation id="6349101878882523185">ដំឡើង <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">សមកាលកម្មមិនដំណើរការទេ សូមសាកល្បងចាកចេញពីគណនី ហើយចូលមកវិញម្តងទៀត។</translation> <translation id="6351063337294363751">អ្នកអាចជម្រះទិន្នន័យរុករករបស់អ្នកចេញពីម៉ឺនុយនេះបាន</translation> @@ -5022,6 +5029,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 ជាមួយនឹងការអ៊ីនគ្រីប RSA</translation> <translation id="7075625805486468288">គ្រប់គ្រងវិញ្ញាបនបត្រ HTTPS/SSL និងការកំណត់</translation> <translation id="7076293881109082629">កំពុងចូល</translation> +<translation id="7076878155205969899">បិទសំឡេង</translation> <translation id="7077829361966535409">ទំព័រចូលបានបរាជ័យក្នុងការដំណើរការ ដោយប្រើការកំណត់ប្រូកស៊ីបច្ចុប្បន្ន។ សូម <ph name="GAIA_RELOAD_LINK_START" />ព្យាយាមចូលម្តងទៀត<ph name="GAIA_RELOAD_LINK_END" /> ឬប្រើ <ph name="PROXY_SETTINGS_LINK_START" />ការកំណត់ប្រូកស៊ី<ph name="PROXY_SETTINGS_LINK_END" /> ដទៃ។</translation> <translation id="7078120482318506217">បណ្តាញទាំងអស់</translation> <translation id="708060913198414444">ថតចម្លងអាសយដ្ឋានសំឡេង</translation> @@ -5042,7 +5050,6 @@ <translation id="7099337801055912064">មិនអាចផ្ទុក PPD ទំហំធំបានទេ។ ទំហំអតិបរមាគឺ 250 គីឡូបៃ។</translation> <translation id="7102687220333134671">ការធ្វើបច្ចុប្បន្នភាពដោយស្វ័យប្រវត្តិបានបើកហើយ</translation> <translation id="7102832101143475489">សំណើបានអស់ម៉ោង</translation> -<translation id="7105390788077117391">ចំណូលចិត្ត USB</translation> <translation id="710640343305609397">បើកការកំណត់បណ្ដាញ</translation> <translation id="7108338896283013870">លាក់</translation> <translation id="7108668606237948702">បញ្ចូល</translation> @@ -5072,7 +5079,6 @@ <translation id="7136694880210472378">ដាក់ជាលំនាំដើម</translation> <translation id="7136984461011502314">ស្វាគមន៍មកកាន់ <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">មានបញ្ហា។ សូមព្យាយាមម្ដងទៀត ដោយជ្រើសរើសរូបភាពផ្សេង។</translation> -<translation id="7138678301420049075">ផ្សេងទៀត</translation> <translation id="713888829801648570">សូមទោស ពាក្យសម្ងាត់របស់អ្នកមិនអាចត្រូវបានផ្ទៀងផ្ទាត់ទេ ពីព្រោះអ្នកនៅក្រៅបណ្តាញ។</translation> <translation id="7140928199327930795">គ្មានឧបករណ៍ផ្សេងទៀតទេ។</translation> <translation id="7141105143012495934">បានបរាជ័យក្នុងការចូលពីព្រោះមិនអាចទាញយកព័ត៌មានលម្អិតគណនីរបស់អ្នកបានទេ។ សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក ឬព្យាយាមម្តងទៀត។</translation> @@ -5179,6 +5185,7 @@ <translation id="7280649757394340890">ការកំណត់សំឡេងអត្ថបទទៅជាការនិយាយ</translation> <translation id="7280877790564589615">ការអនុញ្ញាតត្រូវបានស្នើ</translation> <translation id="7282992757463864530">របារព័ត៌មាន</translation> +<translation id="7284411326658527427">មនុស្សម្នាក់ៗអាចកំណត់គណនីរបស់គេជាលក្ខណៈផ្ទាល់ខ្លួន និងរក្សាទិន្នន័យជាលក្ខណៈឯកជន។</translation> <translation id="7287143125007575591">បានបដិសេធការចូលប្រើ។</translation> <translation id="7287411021188441799">ស្ដារផ្ទៃខាងក្រោយលំនាំដើម</translation> <translation id="7288013116963835700">លុប Linux សម្រាប់ <ph name="DEVICE_TYPE" /></translation> @@ -5755,6 +5762,7 @@ <translation id="7963826112438303517">ជំនួយការរបស់អ្នកប្រើការថតសំឡេងទាំងនេះ និងសំណើដែលបាននិយាយរបស់អ្នក ដើម្បីបង្កើត និងធ្វើបច្ចុប្បន្នភាពគំរូសំឡេងរបស់អ្នកដែលត្រូវបានរក្សាទុកនៅលើឧបករណ៍ដែលអ្នកបានបើកកម្មវិធី Voice Match ប៉ុណ្ណោះ។ មើល ឬបង្ហាត់សកម្មភាពសំឡេងឡើងវិញនៅក្នុងការកំណត់ជំនួយការ។</translation> <translation id="7966241909927244760">ថតចម្លងអាសយដ្ឋានរូបភាព</translation> <translation id="7968072247663421402">ជម្រើសក្រុមហ៊ុនផ្ដល់សេវា</translation> +<translation id="7968198493605442410">ចម្លងតំណទៅអត្ថបទ</translation> <translation id="7968742106503422125">អាន និងកែសម្រួលទិន្នន័យដែលអ្នកចម្លង និងបិទភ្ជាប់</translation> <translation id="7968833647796919681">បើកដំណើរការការប្រមូលទិន្នន័យប្រតិបត្តិការ</translation> <translation id="7968982339740310781">មើលព័ត៌មានលំអិត</translation> @@ -6134,6 +6142,7 @@ <translation id="8428213095426709021">ការកំណត់</translation> <translation id="8428271547607112339">បញ្ចូលគណនីសាលារៀន</translation> <translation id="8428628598981198790">មិនអាចប្រើសោសុវត្ថិភាពរបស់អ្នកជាមួយគេហទំព័រនេះបានទេ</translation> +<translation id="8428634594422941299">យល់ហើយ</translation> <translation id="84297032718407999">អ្នកនឹងត្រូវបានបង្ខំឱ្យចាកចេញក្នុងរយៈពេល <ph name="LOGOUT_TIME_LEFT" /> ទៀត</translation> <translation id="8431190899827883166">បង្ហាញការចុច</translation> <translation id="8431909052837336408">ប្ដូរកូដ PIN ស៊ីមកាត</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index d86a1cb..fc6a865 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">ಅಪರಿಚಿತ ಸಾಧನ [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">ಬಹು ಸೈನ್-ಇನ್ ಸೆಷನ್ನಲ್ಲಿ ಈ ಮಾಲೀಕರ ಖಾತೆಯೇ ಮೊದಲ ಸೈನ್-ಇನ್ ಮಾಡಿದ ಖಾತೆ ಆಗಿರಬೇಕು.</translation> <translation id="150411034776756821"><ph name="SITE" /> ತೆಗೆದುಹಾಕಿ</translation> +<translation id="1504311855864906891">ನಿಮ್ಮ ಮಾಧ್ಯಮಕ್ಕಾಗಿ ಶೀರ್ಷಿಕೆಗಳನ್ನು ಪಡೆಯಿರಿ</translation> <translation id="1504551620756424144">ಹಂಚಿಕೊಂಡ ಫೋಲ್ಡರ್ಗಳು Windows ನಲ್ಲಿ <ph name="BASE_DIR" /> ಆಯ್ಕೆಯ ಅಡಿಯಲ್ಲಿ ಲಭ್ಯವಿರುತ್ತವೆ.</translation> <translation id="1506061864768559482">ಹುಡುಕಾಟ ಇಂಜಿನ್</translation> <translation id="1507170440449692343">ನಿಮ್ಮ ಕ್ಯಾಮೆರಾವನ್ನು ಪ್ರವೇಶಿಸುವುದರಿಂದ ಈ ಪುಟವನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ.</translation> @@ -1191,7 +1192,6 @@ <translation id="2396783860772170191">4 ಅಂಕಿಯ ಪಿನ್ (0000-9999) ಅನ್ನು ನಮೂದಿಸಿ</translation> <translation id="2399939490305346086">ಭದ್ರತೆ ಕೀ ಸೈನ್-ಇನ್ ಡೇಟಾ</translation> <translation id="2400664245143453337">ಕೂಡಲೇ ಅಪ್ಡೇಟ್ ಮಾಡಬೇಕಿದೆ</translation> -<translation id="2407481962792080328">ನಿಮ್ಮ Google ಖಾತೆಗೆ ನೀವು ಸೈನ್ ಇನ್ ಮಾಡಿದಾಗ, ಈ ವೈಶಿಷ್ಟ್ಯವು ಆನ್ ಆಗುತ್ತದೆ</translation> <translation id="2408018932941436077">ಕಾರ್ಡ್ ಅನ್ನು ಉಳಿಸಲಾಗುತ್ತಿದೆ</translation> <translation id="2408955596600435184">ನಿಮ್ಮ ಪಿನ್ ನಮೂದಿಸಿ</translation> <translation id="241082044617551207">ಅಪರಿಚಿತ ಪ್ಲಗ್-ಇನ್</translation> @@ -3066,6 +3066,7 @@ <translation id="4657810666108475055">ಟ್ಯಾಬ್ ಹುಡುಕಾಟ</translation> <translation id="465878909996028221">http, https ಮತ್ತು ಫೈಲ್ ಪ್ರೊಟೊಕಾಲ್ಗಳು ಮಾತ್ರವೇ ಬ್ರೌಸರ್ ಮರುನಿರ್ದೇಶನಗಳಿಗೆ ಬೆಂಬಲಿತವಾಗಿವೆ.</translation> <translation id="4659077111144409915">ಪ್ರಾಥಮಿಕ ಖಾತೆ</translation> +<translation id="4659126640776004816">ನಿಮ್ಮ Google ಖಾತೆಗೆ ನೀವು ಸೈನ್ ಇನ್ ಮಾಡಿದಾಗ, ಈ ವೈಶಿಷ್ಟ್ಯವು ಆನ್ ಆಗುತ್ತದೆ.</translation> <translation id="4660476621274971848">ನಿರೀಕ್ಷಿತ ಆವೃತ್ತಿ "<ph name="EXPECTED_VERSION" />", ಆದರೆ ಆವೃತ್ತಿಯು "<ph name="NEW_ID" />" ಆಗಿದೆ</translation> <translation id="4660540330091848931">ಮರುಗಾತ್ರಗೊಳಿಸಲಾಗುತ್ತಿದೆ</translation> <translation id="4661407454952063730">ಆ್ಯಪ್ ಡೇಟಾವು ಸಂಪರ್ಕಗಳು, ಸಂದೇಶಗಳು ಮತ್ತು ಫೋಟೋಗಳ ಡೇಟಾವನ್ನು ಒಳಗೊಂಡ ಹಾಗೆ, ಆ್ಯಪ್ನಲ್ಲಿ ಉಳಿಸಿದ ಯಾವುದೇ ಡೇಟಾ (ಡೆವಲಪರ್ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಆಧರಿಸಿ) ಆಗಿರಬಹುದು.</translation> @@ -3131,7 +3132,6 @@ <translation id="4750394297954878236">ಸಲಹೆಗಳು</translation> <translation id="475088594373173692">ಮೊದಲ ಬಳಕೆದಾರ</translation> <translation id="4751476147751820511">ಚಲನೆ ಅಥವಾ ಬೆಳಕಿನ ಸೆನ್ಸರ್ಗಳು</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" /> ಅನ್ನು ಕನೆಕ್ಟ್ ಮಾಡಲು ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಿರಿ</translation> <translation id="4756378406049221019">ನಿಲ್ಲಿಸಿ/ಪುನಃ ಲೋಡ್ ಮಾಡಿ</translation> <translation id="4756388243121344051">&ಇತಿಹಾಸ</translation> <translation id="4759238208242260848">ಡೌನ್ಲೋಡ್ಗಳು</translation> @@ -5024,6 +5024,7 @@ <translation id="7075513071073410194">RSA ಎನ್ಕ್ರಿಪ್ಶನ್ನೊಂದಿಗೆ PKCS #1 MD5</translation> <translation id="7075625805486468288">HTTPS/SSL ಪ್ರಮಾಣಪತ್ರಗಳು ಮತ್ತು ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ನಿರ್ವಹಿಸಿ</translation> <translation id="7076293881109082629">ಸೈನ್ ಇನ್ ಮಾಡಲಾಗುತ್ತಿದೆ</translation> +<translation id="7076878155205969899">ಧ್ವನಿಯನ್ನು ಮ್ಯೂಟ್ ಮಾಡಿ</translation> <translation id="7077829361966535409">ಪ್ರಸ್ತುತ ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಲೋಡ್ ಮಾಡುವಲ್ಲಿ ಸೈನ್-ಇನ್ ಪುಟವು ವಿಫಲವಾಗಿದೆ. ದಯವಿಟ್ಟು <ph name="GAIA_RELOAD_LINK_START" />ಮತ್ತೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ<ph name="GAIA_RELOAD_LINK_END" />, ಅಥವಾ ಬೇರೆಯ <ph name="PROXY_SETTINGS_LINK_START" />ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು<ph name="PROXY_SETTINGS_LINK_END" /> ಬಳಸಿ.</translation> <translation id="7078120482318506217">ಎಲ್ಲಾ ನೆಟ್ವರ್ಕ್ಗಳು</translation> <translation id="708060913198414444">ಆಡಿಯೋ ವಿಳಾಸವನ್ನು ನ&ಕಲಿಸಿ</translation> @@ -5044,7 +5045,6 @@ <translation id="7099337801055912064">ದೊಡ್ಡ ಗಾತ್ರದ PPD ಅನ್ನು ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಗರಿಷ್ಠ ಗಾತ್ರ 250 kB ಆಗಿದೆ.</translation> <translation id="7102687220333134671">ಸ್ವಯಂಚಾಲಿತ ಅಪ್ಡೇಟ್ಗಳನ್ನು ಆನ್ ಮಾಡಲಾಗಿದೆ</translation> <translation id="7102832101143475489">ವಿನಂತಿಯ ಅವಧಿ ಮೀರಿದೆ</translation> -<translation id="7105390788077117391">USB ಆದ್ಯತೆಗಳು</translation> <translation id="710640343305609397">ನೆಟ್ವರ್ಕ್ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಿರಿ</translation> <translation id="7108338896283013870">ಮರೆಮಾಡಿ</translation> <translation id="7108668606237948702">ನಮೂದಿಸಿ</translation> @@ -5074,7 +5074,6 @@ <translation id="7136694880210472378">ಡಿಫಾಲ್ಟ್ ಮಾಡಿ</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> ಗೆ ಸ್ವಾಗತ</translation> <translation id="7136993520339022828">ದೋಷವಿದೆ. ಇತರ ಚಿತ್ರಗಳನ್ನು ಆಯ್ಕೆಮಾಡುವ ಮೂಲಕ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation> -<translation id="7138678301420049075">ಇತರೆ</translation> <translation id="713888829801648570">ಕ್ಷಮಿಸಿ, ನೀವು ಆಫ್ಲೈನ್ನಲ್ಲಿರುವ ಕಾರಣ ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಪರಿಶೀಲಿಸಲಾಗುವುದಿಲ್ಲ.</translation> <translation id="7140928199327930795">ಇತರ ಯಾವುದೇ ಲಭ್ಯ ಸಾಧನಗಳಿಲ್ಲ.</translation> <translation id="7141105143012495934">ನಿಮ್ಮ ಖಾತೆ ವಿವರಗಳನ್ನು ಹಿಂಪಡೆಯಲು ಸಾಧ್ಯವಾಗದಿರುವುದರಿಂದ ಸೈನ್ ಇನ್ ವಿಫಲವಾಗಿದೆ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ ಅಥವಾ ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ.</translation> @@ -6133,6 +6132,7 @@ <translation id="8428213095426709021">ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> <translation id="8428271547607112339">ಶಾಲೆಯ ಖಾತೆಯನ್ನು ಸೇರಿಸಿ</translation> <translation id="8428628598981198790">ನಿಮ್ಮ ಭದ್ರತೆ ಕೀ ಅನ್ನು ಈ ಸೈಟ್ ಜೊತೆಗೆ ಬಳಸಲಾಗುವುದಿಲ್ಲ</translation> +<translation id="8428634594422941299">ಅರ್ಥವಾಯಿತು</translation> <translation id="84297032718407999">ಇಷ್ಟು ಸಮಯ ಆದ ಮೇಲೆ ನಿಮ್ಮನ್ನು ಸೈನ್ ಔಟ್ ಮಾಡಲಾಗುತ್ತದೆ: <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">ಟ್ಯಾಪ್ ಪಾಯಿಂಟ್ಗಳನ್ನು ತೋರಿಸಿ</translation> <translation id="8431909052837336408">ಸಿಮ್ ಪಿನ್ ಬದಲಾಯಿಸು</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index 7a3a3369..406d09ee 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">알 수 없는 기기[<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">이 소유자 계정이 멀티 로그인 세션에서 처음으로 로그인하는 계정이 되어야 합니다.</translation> <translation id="150411034776756821"><ph name="SITE" /> 삭제</translation> +<translation id="1504311855864906891">미디어 자막 가져오기</translation> <translation id="1504551620756424144"><ph name="BASE_DIR" />에서 Windows의 공유 폴더를 사용할 수 있습니다.</translation> <translation id="1506061864768559482">검색엔진</translation> <translation id="1507170440449692343">카메라 액세스가 차단된 페이지입니다.</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">4자리 PIN(0000~9999) 입력</translation> <translation id="2399939490305346086">보안 키 로그인 데이터</translation> <translation id="2400664245143453337">즉시 업데이트 필요</translation> -<translation id="2407481962792080328">Google 계정에 로그인하면 이 기능이 사용 설정됩니다.</translation> <translation id="2408018932941436077">카드 저장 중</translation> <translation id="2408955596600435184">PIN 입력</translation> <translation id="241082044617551207">알 수 없는 플러그인</translation> @@ -3064,6 +3064,7 @@ <translation id="4657810666108475055">탭 검색</translation> <translation id="465878909996028221">http, https 및 파일 프로토콜에만 브라우저 리디렉션이 지원됩니다.</translation> <translation id="4659077111144409915">기본 계정</translation> +<translation id="4659126640776004816">Google 계정에 로그인하면 이 기능이 사용 설정됩니다.</translation> <translation id="4660476621274971848">'<ph name="EXPECTED_VERSION" />' 버전을 예상했으나 '<ph name="NEW_ID" />' 버전이 표시되었습니다</translation> <translation id="4660540330091848931">크기 조정 중</translation> <translation id="4661407454952063730">앱 데이터에는 연락처, 메시지, 사진을 비롯하여 앱에서 개발자 설정에 따라 저장한 모든 데이터가 포함될 수 있습니다.</translation> @@ -3129,7 +3130,6 @@ <translation id="4750394297954878236">추천</translation> <translation id="475088594373173692">첫 번째 사용자</translation> <translation id="4751476147751820511">모션 또는 조도 센서</translation> -<translation id="4752124003533492687">설정을 열어 <ph name="USB_DEVICE_NAME" />에 연결하세요.</translation> <translation id="4756378406049221019">중지/새로고침</translation> <translation id="4756388243121344051">방문 기록(&H)</translation> <translation id="4759238208242260848">다운로드</translation> @@ -5019,6 +5019,7 @@ <translation id="7075513071073410194">PKCS #1 MD5(RSA 암호화 사용)</translation> <translation id="7075625805486468288">HTTPS/SSL 인증서 및 설정 관리</translation> <translation id="7076293881109082629">로그인</translation> +<translation id="7076878155205969899">음소거</translation> <translation id="7077829361966535409">현재 프록시 설정을 사용하여 로그인 페이지를 로드하지 못했습니다. <ph name="GAIA_RELOAD_LINK_START" />다시 로그인<ph name="GAIA_RELOAD_LINK_END" />하거나 다른 <ph name="PROXY_SETTINGS_LINK_START" />프록시 설정<ph name="PROXY_SETTINGS_LINK_END" />을 사용합니다.</translation> <translation id="7078120482318506217">모든 네트워크</translation> <translation id="708060913198414444">오디오 주소 복사(&O)</translation> @@ -5039,7 +5040,6 @@ <translation id="7099337801055912064">큰 PPD를 로드할 수 없습니다. 최대 크기는 250KB입니다.</translation> <translation id="7102687220333134671">자동 업데이트가 사용 설정되어 있습니다.</translation> <translation id="7102832101143475489">요청 제한 시간 초과</translation> -<translation id="7105390788077117391">USB 환경설정</translation> <translation id="710640343305609397">네트워크 설정 열기</translation> <translation id="7108338896283013870">숨기기</translation> <translation id="7108668606237948702">입력</translation> @@ -5069,7 +5069,6 @@ <translation id="7136694880210472378">기본으로 설정</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" />에 오신 것을 환영합니다.</translation> <translation id="7136993520339022828">오류가 발생했습니다. 다른 이미지를 선택하고 다시 시도해 보세요.</translation> -<translation id="7138678301420049075">기타</translation> <translation id="713888829801648570">죄송합니다. 인터넷에 연결되어 있지 않아 비밀번호를 확인할 수 없습니다.</translation> <translation id="7140928199327930795">다른 사용 가능한 기기가 없습니다.</translation> <translation id="7141105143012495934">계정 세부정보를 가져올 수 없어 로그인할 수 없습니다. 관리자에게 문의하거나 다시 시도해 주세요.</translation> @@ -6132,6 +6131,7 @@ <translation id="8428213095426709021">설정</translation> <translation id="8428271547607112339">학교 계정 추가</translation> <translation id="8428628598981198790">이 사이트에서 보안 키를 사용할 수 없습니다</translation> +<translation id="8428634594422941299">확인</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> 후 로그아웃됩니다</translation> <translation id="8431190899827883166">탭한 항목 표시</translation> <translation id="8431909052837336408">SIM PIN 변경</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index eaa643a1..29f6e78 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">Белгисиз түзмөк [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Бир нече профилге кирүү сеансында ушул негизги каттоо эсеби биринчи кириши керек.</translation> <translation id="150411034776756821"><ph name="SITE" /> сайтын алып салуу</translation> +<translation id="1504311855864906891">Медиа файлыңыздын коштомо жазууларын түзүңүз</translation> <translation id="1504551620756424144">Бөлүшүлгөн папкалар Windows'то <ph name="BASE_DIR" /> бөлүмүндө жеткиликтүү.</translation> <translation id="1506061864768559482">Издөө каражаты</translation> <translation id="1507170440449692343">Бул беттин камераңызды пайдалануу мүмкүнчүлүгү бөгөттөлгөн.</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">4 сандан турган pin кодду киргизиңиз (0000-9999)</translation> <translation id="2399939490305346086">Коопсуздук ачкычынын кирүү дайындары</translation> <translation id="2400664245143453337">Дароо жаңыртуу талап кылынат</translation> -<translation id="2407481962792080328">Google аккаунтуңузга киргенде, бул функция күйгүзүлөт</translation> <translation id="2408018932941436077">Карта сакталууда</translation> <translation id="2408955596600435184">PIN кодуңузду киргизиңиз</translation> <translation id="241082044617551207">Белгисиз плагин</translation> @@ -1287,7 +1287,7 @@ <translation id="2505127913256479918">Бул көзөмөлдөгөн аккаунт жакында өчүрүлөт</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{#-экран}other{#-экран}}</translation> <translation id="2505402373176859469"><ph name="TOTAL_SIZE" /> ичинен <ph name="RECEIVED_AMOUNT" /></translation> -<translation id="250642123108534012">Nearby Share функциясы түзмөгүндө ачык болгон мезгилдеги жаныңыздагы түзмөктөр</translation> +<translation id="250642123108534012">Жаныңыздагы Nearby Share функциясы ачык түзмөктөр</translation> <translation id="250704661983564564">Дисплейдеги нерселерди жайгаштыруу</translation> <translation id="2507253002925770350">Билет өчүрүлдү</translation> <translation id="2507397597949272797"><ph name="NAME" /> тындырылды</translation> @@ -3066,6 +3066,7 @@ <translation id="4657810666108475055">Өтмөктө издөө</translation> <translation id="465878909996028221">Серепчидеги башка дарекке багыттамада http, https жана файл протоколдору гана колдоого алынат.</translation> <translation id="4659077111144409915">Негизги аккаунт</translation> +<translation id="4659126640776004816">Google аккаунтуңузга киргенде, бул функция күйгүзүлөт.</translation> <translation id="4660476621274971848">Күтүлүп жаткан версия – "<ph name="EXPECTED_VERSION" />" болчу, бирок "<ph name="NEW_ID" />" версиясы алынып калды</translation> <translation id="4660540330091848931">Өлчөмү өзгөртүлүүдө</translation> <translation id="4661407454952063730">Колдонмо тууралуу маалыматка иштеп чыгуучунун жөндөөлөрүнүн негизинде сакталган бардык маалымат, анын ичинде байланыштар, билдирүүлөр жана сүрөттөр кириши мүмкүн.</translation> @@ -3131,7 +3132,6 @@ <translation id="4750394297954878236">Сунуштар</translation> <translation id="475088594373173692">Биринчи колдонуучу</translation> <translation id="4751476147751820511">Кыймыл же жарык сенсорлору</translation> -<translation id="4752124003533492687">Жөндөөлөрдү ачып, <ph name="USB_DEVICE_NAME" /> менен байланыштырыңыз</translation> <translation id="4756378406049221019">Токтотуу/Кайра жүктөө</translation> <translation id="4756388243121344051">&Таржымал</translation> <translation id="4759238208242260848">Жүктөлүп алынгандар</translation> @@ -3139,7 +3139,7 @@ <translation id="4762718786438001384">Түзмөктүн дискинде бош орун өтө аз</translation> <translation id="4763408175235639573">Бул барак каралганда төмөнкү кукилер коюлган</translation> <translation id="4765582662863429759">Android жазышууларындагы билдирүүлөрдү телефонуңуздан Chromebook'уңузга өткөрүп берип турат</translation> -<translation id="476598255842811483">Nearby Share түзмөгүңүздө ачылмайынча эч ким көрбөйт</translation> +<translation id="476598255842811483">Түзмөгүңүздө Nearby Share ачылмайынча эч ким көрбөйт</translation> <translation id="4768332406694066911">Сизде ушул уюмдардын сиздин аныктыгыңызды текшерген тастыктамалары бар</translation> <translation id="477647109558161443">Иш тактадагы кыска жолду түзүү</translation> <translation id="4776917500594043016"><ph name="USER_EMAIL_ADDRESS" /> үчүн сырсөз</translation> @@ -5021,6 +5021,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 RSA шифрлөөсү менен</translation> <translation id="7075625805486468288">HTTPS/SSL тастыктамаларды жана жөндөөлөрдү башкарыңыз</translation> <translation id="7076293881109082629">Кирүү</translation> +<translation id="7076878155205969899">Үнүн басуу</translation> <translation id="7077829361966535409">Кирүү бети учурдагы прокси жөндөөлөрү аркылуу жүктөлбөй койду. <ph name="GAIA_RELOAD_LINK_START" />Кайра кирип көрүңүз<ph name="GAIA_RELOAD_LINK_END" /> же башка <ph name="PROXY_SETTINGS_LINK_START" />прокси жөндөөлөрүн<ph name="PROXY_SETTINGS_LINK_END" /> пайдаланыңыз.</translation> <translation id="7078120482318506217">Бардык тармактар</translation> <translation id="708060913198414444">А&удио дарегин көчүрүү</translation> @@ -5041,7 +5042,6 @@ <translation id="7099337801055912064">Көлөмдүү PPD жүктөлбөйт. Көлөмү 250 Кб ашпашы керек.</translation> <translation id="7102687220333134671">Автоматтык жаңыртуулар күйгүзүлгөн</translation> <translation id="7102832101143475489">Сурамдын күтүү мөөнөтү аяктады</translation> -<translation id="7105390788077117391">USB'нин параметрлери</translation> <translation id="710640343305609397">Тармактын жөндөөлөрүн ачуу</translation> <translation id="7108338896283013870">Жашыруу</translation> <translation id="7108668606237948702">enter</translation> @@ -5071,7 +5071,6 @@ <translation id="7136694880210472378">Демейки кылуу</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> кош келиңиз</translation> <translation id="7136993520339022828">Ката кетти. Башка сүрөттөрдү тандап, кайталап көрүңүз.</translation> -<translation id="7138678301420049075">Башка</translation> <translation id="713888829801648570">Кечиресиз, офлайн режиминде болгонуңуздан улам, сырсөзүңүз текшерилген жок.</translation> <translation id="7140928199327930795">Жеткиликтүү башка түзмөк жок.</translation> <translation id="7141105143012495934">Аккаунтуңуздун чоо-жайы алынбай койгондуктан, аккаунтка кире албай калдыңыз. Администраторуңузга кайрылыңыз же кайталап көрүңүз.</translation> @@ -5671,7 +5670,7 @@ <translation id="786073089922909430">Кызмат: <ph name="ARC_PROCESS_NAME" /></translation> <translation id="7861215335140947162">&Жүктөлүп алынгандар</translation> <translation id="7864539943188674973">Bluetooth'ду өчүрүп коюу</translation> -<translation id="7866352732146932341">Nearby Share функциясы түзмөгүңүздө ачык болгон мезгилдеги жаныңыздагы түзмөктөр</translation> +<translation id="7866352732146932341">Түзмөгүңүздө Nearby Share функциясы ачылган учурда жакын турган түзмөктөр</translation> <translation id="786957569166715433"><ph name="DEVICE_NAME" /> жупташты</translation> <translation id="7870730066603611552">Сеанс башталгандан кийин шайкештирүү параметрлерин карап чыгуу</translation> <translation id="7870790288828963061">Жаңыраак версиядагы Kiosk колдонмолору табылган жок. Жаңыртыла турган эч нерсе жок. USB түзмөгүн сууруп салыңыз.</translation> @@ -6133,6 +6132,7 @@ <translation id="8428213095426709021">Жөндөөлөр</translation> <translation id="8428271547607112339">Мектеп аккаунтун кошуу</translation> <translation id="8428628598981198790">Коопсуздук ачкычыңызды бул сайтта колдонууга болбойт</translation> +<translation id="8428634594422941299">Түшүнүктүү</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> кийин тутумдан автоматтык түрдө чыгарыласыз</translation> <translation id="8431190899827883166">Басылган жерлерди көрсөтүү</translation> <translation id="8431909052837336408">SIM картанын PIN кодун өзгөртүү</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb index 137f118..ea73549 100644 --- a/chrome/app/resources/generated_resources_lo.xtb +++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">ອຸປະກອນທີ່ບໍ່ຮູ້ຈັກ [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">ບັນຊີຜູ້ເປັນເຈົ້າຂອງຕ້ອງເປັນບັນຊີລົງຊື່ເຂົ້າໃຊ້ທໍາອິດຢູ່ໃນຊ່ວງເວລາເຂົ້າໃຊ້ການລົງຊື່ເຂົ້າໃຊ້ຫຼາຍອັນ.</translation> <translation id="150411034776756821">ລຶບ <ph name="SITE" /> ອອກ</translation> +<translation id="1504311855864906891">ຮັບຄຳບັນຍາຍສຳລັບສື່ຂອງທ່ານ</translation> <translation id="1504551620756424144">ໂຟນເດີທີ່ໃຊ້ຮ່ວມກັນສາມາດໃຊ້ໄດ້ໃນ Windows ທີ່ <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">ເຄື່ອງຈັກຄົ້ນຫາ</translation> <translation id="1507170440449692343">ໜ້ານີ້ຖືກບລັອກຈາກການເຂົ້າໃຊ້ກ້ອງຖ່າຍຮູບຂອງທ່ານ.</translation> @@ -1188,7 +1189,6 @@ <translation id="2396783860772170191">ປ້ອນ PIN 4 ຕົວເລກ (0000-9999)</translation> <translation id="2399939490305346086">ຂໍ້ມູນການເຂົ້າສູ່ລະບົບໃນກະແຈຄວາມປອດໄພ</translation> <translation id="2400664245143453337">ຈໍາເປັນຕ້ອງອັບເດດໃນທັນທີ</translation> -<translation id="2407481962792080328">ຄຸນສົມບັດນີ້ຈະເປີດໃຊ້ເມື່ອທ່ານເຂົ້າສູ່ລະບົບບັນຊີ Google ຂອງທ່ານ</translation> <translation id="2408018932941436077">ກຳລັງບັນທຶກບັດ</translation> <translation id="2408955596600435184">ປ້ອນລະຫັດ PIN ຂອງທ່ານ</translation> <translation id="241082044617551207">ປລັກອິນທີ່ບໍ່ຮູ້ຈັກ</translation> @@ -3064,6 +3064,7 @@ <translation id="4657810666108475055">ການຊອກຫາໃນແຖບ</translation> <translation id="465878909996028221">ການປ່ຽນເສັ້ນທາງໂປຣແກຣມທ່ອງເວັບຮອງຮັບສະເພາະແຕ່ http, https ແລະ ໂປຣໂຕຄໍໄຟລ໌ເທົ່ານັ້ນ.</translation> <translation id="4659077111144409915">ບັນຊີຫຼັກ</translation> +<translation id="4659126640776004816">ຄຸນສົມບັດນີ້ຈະເປີດໃຊ້ເມື່ອທ່ານເຂົ້າສູ່ລະບົບບັນຊີ Google ຂອງທ່ານ.</translation> <translation id="4660476621274971848">ເວີຊັນທີ່ຄາດໄວ້ "<ph name="EXPECTED_VERSION" />", ແຕ່ເວີຊັນທີ່ຕິດຕັ້ງແມ່ນ "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">ກຳລັງປັບຂະໜາດ</translation> <translation id="4661407454952063730">ຂໍ້ມູນແອັບອາດເປັນຂໍ້ມູນໃດກໍໄດ້ທີ່ແອັບບັນທຶກໄວ້ (ໂດຍຂຶ້ນກັບການຕັ້ງຄ່າຂອງນັກພັດທະນາ), ຮວມທັງຂໍ້ມູນຕ່າງໆ ເຊັ່ນ: ລາຍຊື່ຜູ້ຕິດຕໍ່, ຂໍ້ຄວາມ ແລະ ຮູບພາບ.</translation> @@ -3129,7 +3130,6 @@ <translation id="4750394297954878236">ຄໍາແນະນໍາ</translation> <translation id="475088594373173692">ຜູ້ໃຊ້ທໍາອິດ</translation> <translation id="4751476147751820511">ເຊັນເຊີກວດຈັບການເຄື່ອນໄຫວ ຫຼື ແສງ</translation> -<translation id="4752124003533492687">ເປີດການຕັ້ງຄ່າເພື່ອເຊື່ອມຕໍ່ <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">ຢຸດ/ໂຫຼດຄືນໃໝ່</translation> <translation id="4756388243121344051">ປະຫວັດ</translation> <translation id="4759238208242260848">ດາວໂຫຼດ</translation> @@ -5019,6 +5019,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 ດ້ວຍການໃສ່ລະຫັດ RSA</translation> <translation id="7075625805486468288">ຈັດການໃບຢັ້ງຢືນ ແລະ ການຕັ້ງຄ່າ HTTPS/SSL</translation> <translation id="7076293881109082629">ກໍາລັງເຂົ້າລະບົບ</translation> +<translation id="7076878155205969899">ປິດສຽງ</translation> <translation id="7077829361966535409">ໜ້າລົງຊື່ເຂົ້າໃຊ້ທີ່ໃຊ້ການຕັ້ງຄ່າພຣັອກຊີປະຈຸບັນໂຫຼດບໍ່ໄດ້. ກະລຸນາ <ph name="GAIA_RELOAD_LINK_START" />ລອງລົງຊື່ເຂົ້າໃຊ້ອີກ<ph name="GAIA_RELOAD_LINK_END" />, ຫຼືໃຊ້ <ph name="PROXY_SETTINGS_LINK_START" />ການຕັ້ງຄ່າພຣັອກຊີ<ph name="PROXY_SETTINGS_LINK_END" /> ອື່ນ.</translation> <translation id="7078120482318506217">ທຸກເຄືອຂ່າຍ</translation> <translation id="708060913198414444">ອັດສຳເນົາທີ່ຢູ່ສຽງ</translation> @@ -5039,7 +5040,6 @@ <translation id="7099337801055912064">ບໍ່ສາມາດໂຫຼດ PPD ທີ່ມີຂະໜາດໃຫຍ່ໄດ້. ຂະໜາດສູງສຸດແມ່ນ 250 kB.</translation> <translation id="7102687220333134671">ການອັບເດດອັດຕະໂນມັດເປີດຢູ່</translation> <translation id="7102832101143475489">ຄຳຂໍໝົດເວລາແລ້ວ</translation> -<translation id="7105390788077117391">ການຕັ້ງຄ່າ USB</translation> <translation id="710640343305609397">ເປີດການຕັ້ງຄ່າເຄືອຂ່າຍ</translation> <translation id="7108338896283013870">ເຊື່ອງ</translation> <translation id="7108668606237948702">ປ້ອນເຂົ້າ</translation> @@ -5069,7 +5069,6 @@ <translation id="7136694880210472378">ເຮັດເປັນຄ່າມາດຕະຖານ</translation> <translation id="7136984461011502314">ຍິນດີຕ້ອນຮັບສູ່ <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">ເກີດຄວາມຜິດພາດ. ກະລຸນາລອງອີກຄັ້ງໂດຍການເລືອກຮູບພາບອື່ນ.</translation> -<translation id="7138678301420049075">ອື່ນໆ</translation> <translation id="713888829801648570">ຂໍອະໄພ, ບໍ່ສາມາດກວດສອບລະຫັດຜ່ານຂອງທ່ານໄດ້ ເພາະວ່າທ່ານອອຟລາຍນ໌.</translation> <translation id="7140928199327930795">ບໍ່ມີອຸປະກອນທີ່ມີໃຫ້ອື່ນໆ.</translation> <translation id="7141105143012495934">ລົງຊື່ເຂົ້າໃຊ້ບໍ່ສຳເລັດ ເພາະວ່າບໍ່ສາມາດກູ້ຄືນລາຍລະອຽດບັນຊີຂອງທ່ານໄດ້. ກະລຸນາຕິດຕໍ່ຜູ້ຄວບຄຸມຂອງທ່ານ ຫຼື ລອງໃໝ່ອີກ.</translation> @@ -6130,6 +6129,7 @@ <translation id="8428213095426709021">ການຕັ້ງຄ່າ</translation> <translation id="8428271547607112339">ເພີ່ມບັນຊີໂຮງຮຽນ</translation> <translation id="8428628598981198790">ບໍ່ສາມາດໃຊ້ກະແຈຄວາມປອດໄພຂອງທ່ານກັບເວັບໄຊນີ້ໄດ້</translation> +<translation id="8428634594422941299">ເຂົ້າໃຈແລ້ວ</translation> <translation id="84297032718407999">ທ່ານຈະຖືກນຳອອກຈາກລະບົບໃນ <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">ສະແດງການແຕະ</translation> <translation id="8431909052837336408">ປ່ຽນ SIM PIN</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index 5540abc..d7feedf 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Skaityti ir keisti visus jūsų duomenis kompiuteryje ir lankomose svetainėse</translation> <translation id="1430915738399379752">Spausdinti</translation> <translation id="1431188203598586230">Paskutinis programinės įrangos naujinys</translation> +<translation id="1431402976894535801">Neleisti svetainėms žinoti, kada esate</translation> <translation id="1431432486300429272">„Google“ gali naudoti jūsų naršymo istoriją, kad suasmenintų Paiešką ir kitas „Google“ paslaugas. Jūs arba jūsų tėvai galite tai bet kada pakeisti adresu myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Tvarkyti paieškos sistemas</translation> <translation id="1433811987160647649">Klausti prieš pasiekiant</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Nežinomas įrenginys [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Kelių paskyrų sesijoje pirmiausia turi būti prisijungta naudojant šią savininko paskyrą.</translation> <translation id="150411034776756821">Pašalinti <ph name="SITE" /></translation> +<translation id="1504311855864906891">Medijos subtitrų gavimas</translation> <translation id="1504551620756424144">Bendrinami aplankai pasiekiami sistemoje „Windows“ adresu <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Paieškos variklis</translation> <translation id="1507170440449692343">Šis puslapis užblokuotas, kad nepasiektų jūsų fotoaparato.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Reikia dukart įvesti tą pačią slaptafrazę</translation> <translation id="1652326691684645429">Įjungti Bendrinimo netoliese funkciją</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Pridėkite spausdintuvą prie „Google“ spausdinimo iš debesies, kad galėtumėte spausdinti iš bet kurios vietos.}one{Pridėkite # spausdintuvą prie „Google“ spausdinimo iš debesies, kad galėtumėte spausdinti iš bet kurios vietos.}few{Pridėkite # spausdintuvus prie „Google“ spausdinimo iš debesies, kad galėtumėte spausdinti iš bet kurios vietos.}many{Pridėkite # spausdintuvo prie „Google“ spausdinimo iš debesies, kad galėtumėte spausdinti iš bet kurios vietos.}other{Pridėkite # spausdintuvų prie „Google“ spausdinimo iš debesies, kad galėtumėte spausdinti iš bet kurios vietos.}}</translation> +<translation id="1653575510930452864">Kopijuoti nuorodą į tekstą</translation> <translation id="1656528038316521561">Fono nepermatomumas</translation> <translation id="1657406563541664238">Padėkite tobulinti „<ph name="PRODUCT_NAME" />“ automatiškai siųsdami „Google“ naudojimo statistiką ir trikčių ataskaitas</translation> <translation id="1657937299377480641">Jei norite vėl prisijungti, kad galėtumėte pasiekti švietimo išteklius, paprašykite vieno iš tėvų suteikti leidimą</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">CA pažeidimo galimybė</translation> <translation id="2182058453334755893">Nukopijuota į iškarpinę</translation> <translation id="2184515124301515068">Leisti „Chrome“ pasirinkti, kada svetainės gali leisti garsą (rekomenduojama)</translation> +<translation id="2187243482123994665">Naudotojo buvimas</translation> <translation id="2187675480456493911">Sinchronizuojama su kitais įrenginiais jūsų paskyroje. Kitų naudotojų pakeisti nustatymai nebus sinchronizuojami. <ph name="LINK_BEGIN" />Sužinokite daugiau<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Serverio sertifikato importavimo klaida</translation> <translation id="2187906491731510095">Plėtiniai atnaujinti</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Įveskite 4 skaitmenų PIN kodą (0000–9999)</translation> <translation id="2399939490305346086">Saugos rakto prisijungimo duomenys</translation> <translation id="2400664245143453337">Reikia nedelsiant atnaujinti</translation> -<translation id="2407481962792080328">Prisijungus prie „Google“ paskyros, ši funkcija yra įjungta</translation> <translation id="2408018932941436077">Išsaugoma kortelė</translation> <translation id="2408955596600435184">Įveskite PIN kodą</translation> <translation id="241082044617551207">Nežinomas papildinys</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963">Nežinomas produktas „<ph name="PRODUCT_ID" />“ iš teikėjo „<ph name="VENDOR_ID" />“</translation> <translation id="3163254451837720982">Toliau nurodytos paslaugos padeda apsaugoti jūsų duomenis. Galite išjungti šias funkcijas bet kuriuo metu.</translation> <translation id="3164329792803560526">Bendrinamas šis skirtukas su „<ph name="APP_NAME" />“</translation> +<translation id="3165371858310906303">Klausti, kai svetainė nori žinoti, kada esate</translation> <translation id="3165390001037658081">Kai kurie operatoriai gali blokuoti šią funkciją.</translation> <translation id="316652501498554287">„G Suite for Education“ paskyros</translation> <translation id="3169472444629675720">Discover</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">Sukurti naują darbo profilį?</translation> <translation id="452750746583162491">Peržiūrėti sinchronizuotus duomenis</translation> <translation id="4530494379350999373">Kilmė</translation> +<translation id="4531924570968473143">Ką norite pridėti prie šio įrenginio (<ph name="DEVICE_TYPE" />)?</translation> <translation id="4532646538815530781">Šioje svetainėje naudojami judesio jutikliai.</translation> <translation id="4533846798469727141">Dabar pasakykite „Hey Google“</translation> <translation id="4533985347672295764">Centrinio procesoriaus laikas</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">Skirtuko paieška</translation> <translation id="465878909996028221">Į kitą naršyklę galima peradresuoti tik „http“, „https“ ir failų protokolus.</translation> <translation id="4659077111144409915">Pagrindinė paskyra</translation> +<translation id="4659126640776004816">Prisijungus prie „Google“ paskyros, ši funkcija yra įjungta.</translation> <translation id="4660476621274971848">Versija turėjo būti <ph name="EXPECTED_VERSION" />, o buvo pateikta <ph name="NEW_ID" /></translation> <translation id="4660540330091848931">Dydžio keitimas</translation> <translation id="4661407454952063730">Programos duomenys gali būti bet kokie programos išsaugoti duomenys (atsižvelgiant į kūrėjo nustatymus), įskaitant kontaktus, pranešimus ir nuotraukas.</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">Pasiūlymai</translation> <translation id="475088594373173692">Pirmas naudotojas</translation> <translation id="4751476147751820511">Judesio arba šviesos jutikliai</translation> -<translation id="4752124003533492687">Atidarykite skiltį „Nustatymai“, kad prijungtumėte „<ph name="USB_DEVICE_NAME" />“</translation> <translation id="4756378406049221019">Stabdyti / įkelti iš naujo</translation> <translation id="4756388243121344051">&Istorija</translation> <translation id="4759238208242260848">Atsisiuntimai</translation> @@ -3979,6 +3984,7 @@ <translation id="5804241973901381774">Leidimai</translation> <translation id="5805697420284793859">Langų tvarkytuvė</translation> <translation id="5806773519584576205">0° (numatytasis)</translation> +<translation id="5808664694611589238">{0,plural, =1{Uždaryti svečio langus}one{Uždaryti svečio langus}few{Uždaryti svečio langus}many{Uždaryti svečio langus}other{Uždaryti svečio langus}}</translation> <translation id="5810809306422959727">Šioje paskyroje tėvų kontrolės naudoti negalima</translation> <translation id="5812674658566766066">Išskleisti viską</translation> <translation id="5814126672212206791">Ryšio tipas</translation> @@ -4436,6 +4442,7 @@ <translation id="6344170822609224263">Pasiekti tinklo ryšių sąrašą</translation> <translation id="6344576354370880196">Išsaugoti spausdintuvai</translation> <translation id="6345418402353744910">Reikia nurodyti tarpinio serverio „<ph name="PROXY" />“ naudotojo vardą ir slaptažodį, kad administratorius galėtų sukonfigūruoti tinklą</translation> +<translation id="6345878117466430440">Žymėti kaip skaitytą</translation> <translation id="6349101878882523185">Įdiegti <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Sinchronizavimas neveikia. Bandykite atsijungti ir vėl prisijungti.</translation> <translation id="6351063337294363751">Galite išvalyti naršymo duomenis iš šio meniu</translation> @@ -5022,6 +5029,7 @@ <translation id="7075513071073410194">PKCS Nr. 1 MD5 su RSA šifruote</translation> <translation id="7075625805486468288">Tvarkykite HTTPS / SSL sertifikatus ir nustatymus</translation> <translation id="7076293881109082629">Prisijungimas</translation> +<translation id="7076878155205969899">Nutildyti garsą</translation> <translation id="7077829361966535409">Įkeliant prisijungimo puslapį naudojant dabartinius įgaliotojo serverio nustatymus įvyko klaida. <ph name="GAIA_RELOAD_LINK_START" />Bandykite prisijungti dar kartą<ph name="GAIA_RELOAD_LINK_END" /> arba nustatykite kitus <ph name="PROXY_SETTINGS_LINK_START" />įgaliotojo serverio nustatymus<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Visi tinklai</translation> <translation id="708060913198414444">K&opijuoti garso įrašo adresą</translation> @@ -5042,7 +5050,6 @@ <translation id="7099337801055912064">Nepavyko įkelti didelio PPD. Didžiausias galimas dydis yra 250 KB.</translation> <translation id="7102687220333134671">Automatiniai naujiniai įjungti</translation> <translation id="7102832101143475489">Baigėsi skirtasis užklausos laikas</translation> -<translation id="7105390788077117391">USB nuostatos</translation> <translation id="710640343305609397">Atidaryti tinklo nustatymus</translation> <translation id="7108338896283013870">Slėpti</translation> <translation id="7108668606237948702">įvesti</translation> @@ -5072,7 +5079,6 @@ <translation id="7136694880210472378">Padaryti numatytuoju</translation> <translation id="7136984461011502314">Sveiki! Tai - <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Įvyko klaida. Bandykite dar kartą, pasirinkdami kitus vaizdus.</translation> -<translation id="7138678301420049075">Kitas</translation> <translation id="713888829801648570">Apgailestaujame, slaptažodžio patikrinti nepavyko, nes esate neprisijungę.</translation> <translation id="7140928199327930795">Nėra kitų pasiekiamų įrenginių.</translation> <translation id="7141105143012495934">Nepavyko prisijungti, nes negalima gauti išsamios paskyros informacijos. Susisiekite su administratoriumi arba bandykite dar kartą.</translation> @@ -5179,6 +5185,7 @@ <translation id="7280649757394340890">Teksto į kalbą balso nustatymai</translation> <translation id="7280877790564589615">Prašoma leidimo</translation> <translation id="7282992757463864530">Informacinė juosta</translation> +<translation id="7284411326658527427">Kiekvienas asmuo gali suasmeninti paskyrą ir privačiai saugoti duomenis.</translation> <translation id="7287143125007575591">Prieiga atmesta.</translation> <translation id="7287411021188441799">Atkurti numatytąjį foną</translation> <translation id="7288013116963835700">Pašalinti „Linux“ iš „<ph name="DEVICE_TYPE" />“</translation> @@ -5755,6 +5762,7 @@ <translation id="7963826112438303517">Šiuos įrašus ir jūsų sakomas užklausas „Google Assistant“ naudoja jūsų balso modeliui kurti ir atnaujinti, kuris saugomas tik tuose įrenginiuose, kuriuose įjungėte funkciją „Voice Match“. Peržiūrėkite arba iš naujo nustatykite balso veiklą „Google Assistant“ skiltyje „Nustatymai“.</translation> <translation id="7966241909927244760">K&opijuoti vaizdo adresą</translation> <translation id="7968072247663421402">Teikėjo parinktys</translation> +<translation id="7968198493605442410">Kopijuoti nuorodą į tekstą</translation> <translation id="7968742106503422125">Skaityti ir keisti kopijuojamus ir įklijuojamus duomenis</translation> <translation id="7968833647796919681">Įgalinti našumo duomenų rinkimą</translation> <translation id="7968982339740310781">Žiūrėti išsamią informaciją</translation> @@ -6135,6 +6143,7 @@ <translation id="8428213095426709021">Nustatymai</translation> <translation id="8428271547607112339">Pridėti mokyklos paskyrą</translation> <translation id="8428628598981198790">Saugos rakto negalima naudoti šioje svetainėje</translation> +<translation id="8428634594422941299">Supratau</translation> <translation id="84297032718407999">Būsite atjungti po <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Rodyti palietimus</translation> <translation id="8431909052837336408">SIM kortelės PIN kodo pakeitimas</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index 034c0db4..50c752f 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">Nezināma ierīce [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Vairākkārtējas pierakstīšanās sesijā šim īpašnieka kontam ir jābūt pirmajam kontam, kurā jāpierakstās.</translation> <translation id="150411034776756821">Noņemt vietni <ph name="SITE" /></translation> +<translation id="1504311855864906891">Subtitru rādīšana multivides saturā</translation> <translation id="1504551620756424144">Kopīgotās mapes operētājsistēmā Windows ir pieejamas šeit: <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Meklētājprogramma</translation> <translation id="1507170440449692343">Šīs lapas piekļuve jūsu kamerai ir bloķēta.</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">Ievadiet 4 ciparu PIN (0000–9999)</translation> <translation id="2399939490305346086">Drošības atslēgas pierakstīšanās dati</translation> <translation id="2400664245143453337">Nepieciešama tūlītēja atjaunināšana</translation> -<translation id="2407481962792080328">Kad pierakstāties savā Google kontā, šī funkcija ir ieslēgta.</translation> <translation id="2408018932941436077">Karte tiek saglabāta.</translation> <translation id="2408955596600435184">Ievadiet PIN kodu</translation> <translation id="241082044617551207">Nezināms spraudnis</translation> @@ -3066,6 +3066,7 @@ <translation id="4657810666108475055">Meklēšana cilnēs</translation> <translation id="465878909996028221">Pārlūkprogrammas novirzīšanai tiek atbalstīti tikai http, https un failu protokoli.</translation> <translation id="4659077111144409915">Primārais konts</translation> +<translation id="4659126640776004816">Kad pierakstāties savā Google kontā, šī funkcija ir ieslēgta.</translation> <translation id="4660476621274971848">Paredzētā versija bija <ph name="EXPECTED_VERSION" />, bet faktiskā versija bija <ph name="NEW_ID" />.</translation> <translation id="4660540330091848931">Notiek lieluma mainīšana</translation> <translation id="4661407454952063730">Lietotņu dati var būt jebkādi lietotņu saglabātie dati (atkarībā no izstrādātāja iestatījumiem), tostarp kontaktpersonas, ziņojumi un fotoattēli.</translation> @@ -3131,7 +3132,6 @@ <translation id="4750394297954878236">Ieteikumi</translation> <translation id="475088594373173692">Pirmais lietotājs</translation> <translation id="4751476147751820511">Kustību vai gaismas sensori</translation> -<translation id="4752124003533492687">Atveriet iestatījumus, lai izveidotu savienojumu ar ierīci <ph name="USB_DEVICE_NAME" />.</translation> <translation id="4756378406049221019">Pārtraukt/ielādēt atkārtoti</translation> <translation id="4756388243121344051">Vēsture</translation> <translation id="4759238208242260848">Lejupielādes</translation> @@ -5021,6 +5021,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 ar RSA šifrējumu</translation> <translation id="7075625805486468288">Pārvaldīt HTTPS/SSL sertifikātus un iestatījumus</translation> <translation id="7076293881109082629">Pierakstīšanās</translation> +<translation id="7076878155205969899">Izslēgt skaņu</translation> <translation id="7077829361966535409">Pierakstīšanās lapu neizdevās ielādēt, izmantojot pašreizējos starpniekservera iestatījumus. <ph name="GAIA_RELOAD_LINK_START" />Mēģiniet pierakstīties vēlreiz<ph name="GAIA_RELOAD_LINK_END" /> vai izmantojiet citus <ph name="PROXY_SETTINGS_LINK_START" />starpniekservera iestatījumus<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Visi tīkli</translation> <translation id="708060913198414444">Kopēt audio adresi</translation> @@ -5041,7 +5042,6 @@ <translation id="7099337801055912064">Nevar ielādēt lielu PPD failu. Maksimālais lielums ir 250 kB.</translation> <translation id="7102687220333134671">Automātiskie atjauninājumi ir ieslēgti.</translation> <translation id="7102832101143475489">Iestājās pieprasījuma noildze.</translation> -<translation id="7105390788077117391">USB preferences</translation> <translation id="710640343305609397">Atvērt tīkla iestatījumus</translation> <translation id="7108338896283013870">Slēpt</translation> <translation id="7108668606237948702">ievadīt</translation> @@ -5071,7 +5071,6 @@ <translation id="7136694880210472378">Iestatīt par noklusējumu</translation> <translation id="7136984461011502314">Laipni lūdzam programmā <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Radās kļūda. Izvēlieties citus attēlus, lai mēģinātu vēlreiz.</translation> -<translation id="7138678301420049075">Cits</translation> <translation id="713888829801648570">Diemžēl jūsu paroli nevarēja verificēt, jo ierīce darbojas bezsaistes režīmā.</translation> <translation id="7140928199327930795">Nav citu pieejamu ierīču.</translation> <translation id="7141105143012495934">Neizdevās pierakstīties, jo nevarēja izgūt konta informāciju. Lūdzu, sazinieties ar administratoru vai mēģiniet vēlreiz.</translation> @@ -6133,6 +6132,7 @@ <translation id="8428213095426709021">Iestatījumi</translation> <translation id="8428271547607112339">Pievienot skolas kontu</translation> <translation id="8428628598981198790">Jūsu drošības atslēgu nevar izmantot ar šo vietni</translation> +<translation id="8428634594422941299">Labi</translation> <translation id="84297032718407999">Jūs tiksiet izrakstīts pēc šāda laika: <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Pieskārienu rādīšana</translation> <translation id="8431909052837336408">SIM kartes PIN mainīšana</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb index 413753c9..a829890 100644 --- a/chrome/app/resources/generated_resources_mk.xtb +++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Прочитајте ги и променете ги сите ваши податоци на веб-локациите што ги посетувате</translation> <translation id="1430915738399379752">Печати</translation> <translation id="1431188203598586230">Последно софтверско ажурирање</translation> +<translation id="1431402976894535801">Не дозволувајте сајтовите да знаат кога сте присутни</translation> <translation id="1431432486300429272">Google може да ја користи историјата на прелистување за да го персонализира „Пребарување“ и другите услуги на Google. Ти или родителот може да го промените ова во секое време на myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Управувајте со пребарувачи</translation> <translation id="1433811987160647649">Прашај пред да пристапиш</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Непознат уред [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Оваа сметка на сопственик треба да биде првата пријавена сметка во сесија со повеќекратно пријавување.</translation> <translation id="150411034776756821">Отстрани <ph name="SITE" /></translation> +<translation id="1504311855864906891">Ставете титлови на вашите аудиовизуелни содржини</translation> <translation id="1504551620756424144">Споделените папки се достапни во Windows на <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Пребарувач</translation> <translation id="1507170440449692343">Страницата е блокирана да не пристапува до фотоапаратот.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Мора да ја внесете истата лозинка двапати</translation> <translation id="1652326691684645429">Овозможете „Споделување во близина“</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Додајте го печатачот во Печатење во облакот на Google за да може да печатите од каде било.}one{Додајте # печатач во Печатење во облакот на Google за да може да печатите од каде било.}other{Додајте # печатачи во Печатење во облакот на Google за да може да печатите од каде било.}}</translation> +<translation id="1653575510930452864">Копирајте го линкот до текстот</translation> <translation id="1656528038316521561">Непроѕирност на заднината</translation> <translation id="1657406563541664238">Помогнете да го подобриме <ph name="PRODUCT_NAME" /> со автоматско испраќање статистика за користење и извештај за пад до Google</translation> <translation id="1657937299377480641">За да се најавиш повторно за пристап до едукативни ресурси, побарај дозвола од родителот</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">ЦА е изложен на ризик</translation> <translation id="2182058453334755893">Копирано во привремената меморија</translation> <translation id="2184515124301515068">Дозволете му на Chrome да избира кога сајтовите може да пуштаат звук (се препорачува)</translation> +<translation id="2187243482123994665">Присуство на корисник</translation> <translation id="2187675480456493911">Синхронизирано со други уреди на вашата сметка. Поставките што другите корисници ги измениле нема да се синхронизираат. <ph name="LINK_BEGIN" />Дознајте повеќе<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Грешка при увезување сертификат на сервер</translation> <translation id="2187906491731510095">Ажурирани екстензии</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Внесете 4-цифрен PIN (0000-9999)</translation> <translation id="2399939490305346086">Податоци за најавување на безбедносниот клуч</translation> <translation id="2400664245143453337">Потребно е итно ажурирање</translation> -<translation id="2407481962792080328">Функцијава е вклучена кога ќе се најавите на сметката на Google</translation> <translation id="2408018932941436077">Се зачувува картичката</translation> <translation id="2408955596600435184">Внесете го вашиот PIN</translation> <translation id="241082044617551207">Непознат приклучок</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963">Непознат производ <ph name="PRODUCT_ID" /> од продавачот <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Следниве услуги помагаат чувањето на вашите податоци да биде безбедно и сигурно. Функцииве може да ги исклучите во секое време.</translation> <translation id="3164329792803560526">Картичкава се споделува на <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Прашувај кога некој сајт сака да знае кога сте присутни</translation> <translation id="3165390001037658081">Некои оператори може да ја блокираат функцијава.</translation> <translation id="316652501498554287">Сметки на G Suite for Education</translation> <translation id="3169472444629675720">Откриј</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">Да се создаде нов работен профил?</translation> <translation id="452750746583162491">Прегледајте ги синхронизираните податоци</translation> <translation id="4530494379350999373">Потекло</translation> +<translation id="4531924570968473143">Кого сакате да го додадете на овој <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Овој сајт користи сензори за движење.</translation> <translation id="4533846798469727141">Сега кажете „Hey Google“</translation> <translation id="4533985347672295764">Време на процесор</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">Пребарување во картичка</translation> <translation id="465878909996028221">Само http, https и протоколите за датотеки се поддржани за пренасочувања на прелистувачот.</translation> <translation id="4659077111144409915">Примарна сметка</translation> +<translation id="4659126640776004816">Функцијава е вклучена кога ќе се најавите на сметката на Google.</translation> <translation id="4660476621274971848">Очекувана верзија „<ph name="EXPECTED_VERSION" />“, но верзијата беше „<ph name="NEW_ID" />“</translation> <translation id="4660540330091848931">Се менува големината</translation> <translation id="4661407454952063730">Податоци од апликација се сите податоци што ги зачувала некоја апликација (според поставките на програмерот), вклучувајќи податоци како што се контакти, пораки и фотографии.</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">Предлози</translation> <translation id="475088594373173692">Прв корисник</translation> <translation id="4751476147751820511">Сензори за движење или светлина</translation> -<translation id="4752124003533492687">Отворете „Поставки“ за да го поврзете уредот <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Сопри/Вчитај повторно</translation> <translation id="4756388243121344051">&Историја</translation> <translation id="4759238208242260848">Преземања</translation> @@ -3978,6 +3983,7 @@ <translation id="5804241973901381774">Дозволи</translation> <translation id="5805697420284793859">Управник со прозорци</translation> <translation id="5806773519584576205">0° (стандардно)</translation> +<translation id="5808664694611589238">{0,plural, =1{Затвори го гостинскиот прозорец}one{Затвори ги гостинските прозорци}other{Затвори ги гостинските прозорци}}</translation> <translation id="5810809306422959727">Сметкава не ги исполнува условите за родителски контроли</translation> <translation id="5812674658566766066">Прошири ги сите</translation> <translation id="5814126672212206791">Тип врска</translation> @@ -4435,6 +4441,7 @@ <translation id="6344170822609224263">Список со пристап до мрежни врски</translation> <translation id="6344576354370880196">Зачувани печатачи</translation> <translation id="6345418402353744910">Корисничкото име и лозинката се задолжителни за прокси-серверот <ph name="PROXY" /> за да може администраторот да ја конфигурира вашата мрежа</translation> +<translation id="6345878117466430440">Означете како прочитано</translation> <translation id="6349101878882523185">Инсталирај <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Синхронизацијата не функционира. Обидете се да се одјавите и да се најавите повторно.</translation> <translation id="6351063337294363751">Од ова мени може да ги исчистите податоците од прелистувањето</translation> @@ -5021,6 +5028,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 Со шифрирање РСА</translation> <translation id="7075625805486468288">Управувајте со сертификатите и поставките на HTTPS/SSL</translation> <translation id="7076293881109082629">Пријавување</translation> +<translation id="7076878155205969899">Го исклучува звукот</translation> <translation id="7077829361966535409">Страницата за пријавување не успеа да се вчита со користење на тековните поставки за прокси. <ph name="GAIA_RELOAD_LINK_START" />Обидете се да се пријавите повторно<ph name="GAIA_RELOAD_LINK_END" /> или користете поинакви <ph name="PROXY_SETTINGS_LINK_START" />поставки за прокси<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Сите мрежи</translation> <translation id="708060913198414444">К&опирај ја адресата на аудиото</translation> @@ -5041,7 +5049,6 @@ <translation id="7099337801055912064">Не може да се вчита голема PPD-датотека. Максималната големина е 250 KB.</translation> <translation id="7102687220333134671">Автоматските ажурирања се вклучени</translation> <translation id="7102832101143475489">Барањето истече</translation> -<translation id="7105390788077117391">Поставки за USB</translation> <translation id="710640343305609397">Отвори ги мрежните поставки</translation> <translation id="7108338896283013870">Сокриј</translation> <translation id="7108668606237948702">enter</translation> @@ -5071,7 +5078,6 @@ <translation id="7136694880210472378">Направи стандардно</translation> <translation id="7136984461011502314">Добре дојдовте во <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Грешка. Обидете се повторно со избирање други слики.</translation> -<translation id="7138678301420049075">Друго</translation> <translation id="713888829801648570">Извинете, вашата лозинка не може да се провери бидејќи сте исклучени.</translation> <translation id="7140928199327930795">Нема други достапни уреди.</translation> <translation id="7141105143012495934">Најавувањето не успеа бидејќи не можеа да се вчитаат деталите за вашата сметка. Контактирајте со администраторот или обидете се повторно.</translation> @@ -5178,6 +5184,7 @@ <translation id="7280649757394340890">Гласовни поставки за „Од текст во говор“</translation> <translation id="7280877790564589615">Побарана е дозвола</translation> <translation id="7282992757463864530">Лента со информации</translation> +<translation id="7284411326658527427">Секое лице може да ја персонализира својата сметка и да ја задржи приватноста на податоците.</translation> <translation id="7287143125007575591">Пристапот е одбиен.</translation> <translation id="7287411021188441799">Врати ја стандардната заднина</translation> <translation id="7288013116963835700">Отстрани го Linux за <ph name="DEVICE_TYPE" /></translation> @@ -5754,6 +5761,7 @@ <translation id="7963826112438303517">Вашиот „Помошник“ ги користи снимкиве и изговорените барања за да го создаде и ажурира вашиот гласовен модел, којшто се складира само на уредите на кои сте ја вклучиле Voice Match. Прегледајте ја или повторно обучете ја активноста со глас во „Поставките за Помошникот“.</translation> <translation id="7966241909927244760">К&опирај ја адресата на сликата</translation> <translation id="7968072247663421402">Опции за операторот</translation> +<translation id="7968198493605442410">Копирајте го линкот до текстот</translation> <translation id="7968742106503422125">Читање на податоците што ги копирате</translation> <translation id="7968833647796919681">Овозможи собирање податоци за учинок</translation> <translation id="7968982339740310781">Погледнете детали</translation> @@ -6136,6 +6144,7 @@ <translation id="8428213095426709021">Поставки</translation> <translation id="8428271547607112339">Додајте училишна сметка</translation> <translation id="8428628598981198790">Вашиот безбедносен клуч не може да се користи со овој сајт</translation> +<translation id="8428634594422941299">Сфатив</translation> <translation id="84297032718407999">Ќе ве одјавиме за <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Прикажувај допири</translation> <translation id="8431909052837336408">Променете PIN на SIM-картичката</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index f4cc3ff..7be7f1e 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">പരിചിതമല്ലാത്ത ഉപകരണം [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">ഒന്നിലധികം സൈൻ ഇൻ സെഷനിൽ സൈൻ ഇൻ ചെയ്തിരിക്കുന്ന ആദ്യ അക്കൗണ്ട്, ഈ ഉടമ അക്കൗണ്ടായിരിക്കണം.</translation> <translation id="150411034776756821"><ph name="SITE" /> നീക്കംചെയ്യുക</translation> +<translation id="1504311855864906891">നിങ്ങളുടെ മീഡിയയ്ക്കായി അടിക്കുറിപ്പുകൾ നേടൂ</translation> <translation id="1504551620756424144">പങ്കിട്ട ഫോൾഡറുകൾ Windows-ലെ <ph name="BASE_DIR" /> എന്നതിൽ ലഭ്യമാണ്.</translation> <translation id="1506061864768559482">തിരയൽ യന്ത്രം</translation> <translation id="1507170440449692343">നിങ്ങളുടെ ക്യാമറ ആക്സസ്സുചെയ്യുന്നതിൽ നിന്ന് ഈ പേജിനെ തടഞ്ഞു.</translation> @@ -1187,7 +1188,6 @@ <translation id="2396783860772170191">4 അക്ക പിൻ നൽകുക (0000-9999)</translation> <translation id="2399939490305346086">സുരക്ഷാ കീയുടെ സൈൻ ഇൻ ഡാറ്റ</translation> <translation id="2400664245143453337">ഉടൻ അപ്ഡേറ്റ് ആവശ്യമാണ്</translation> -<translation id="2407481962792080328">നിങ്ങൾ Google അക്കൗണ്ടിൽ സൈൻ ഇൻ ചെയ്യുമ്പോൾ ഈ ഫീച്ചർ ഓണാകും</translation> <translation id="2408018932941436077">കാർഡ് സംരക്ഷിക്കുന്നു</translation> <translation id="2408955596600435184">നിങ്ങളുടെ പിൻ നൽകുക</translation> <translation id="241082044617551207">അജ്ഞാത പ്ലഗ് ഇൻ</translation> @@ -3062,6 +3062,7 @@ <translation id="4657810666108475055">ടാബ് തിരയൽ</translation> <translation id="465878909996028221">http, https എന്നിവയും ഫയൽ പ്രോട്ടോകോളുകളും മാത്രമേ ബ്രൗസർ റീഡയറക്റ്റുകളിൽ പിന്തുണയ്ക്കൂ.</translation> <translation id="4659077111144409915">പ്രാഥമിക അക്കൗണ്ട്</translation> +<translation id="4659126640776004816">നിങ്ങളുടെ Google അക്കൗണ്ടിൽ സൈൻ ഇൻ ചെയ്യുമ്പോൾ ഈ ഫീച്ചർ ഓണാകും.</translation> <translation id="4660476621274971848">പ്രതീക്ഷിച്ച പതിപ്പ് "<ph name="EXPECTED_VERSION" />" ആണ്, എന്നാൽ ലഭിച്ച പതിപ്പ് "<ph name="NEW_ID" />" ആയിരുന്നു</translation> <translation id="4660540330091848931">വലുപ്പം മാറ്റുന്നു</translation> <translation id="4661407454952063730">ആപ്പ് ഡാറ്റ എന്നത് കോൺടാക്റ്റുകൾ, സന്ദേശങ്ങൾ, ഫോട്ടോകൾ എന്നിവ ഉൾപ്പെടെ ആപ്പ് സംരക്ഷിച്ചിട്ടുള്ള ഏതൊരു ഡാറ്റയും (ഡെവലപ്പർ ക്രമീകരണം അടിസ്ഥാനമാക്കി) ആകാം.</translation> @@ -3127,7 +3128,6 @@ <translation id="4750394297954878236">നിർദ്ദേശങ്ങൾ</translation> <translation id="475088594373173692">ആദ്യ ഉപയോക്താവ്</translation> <translation id="4751476147751820511">ചലന അല്ലെങ്കിൽ വെളിച്ച സെൻസറുകൾ</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" /> കണക്റ്റ് ചെയ്യാൻ ക്രമീകരണം തുറക്കുക</translation> <translation id="4756378406049221019">നിർത്തുക/റീലോഡ് ചെയ്യുക</translation> <translation id="4756388243121344051">&ചരിത്രം</translation> <translation id="4759238208242260848">ഡൌണ്ലോഡുകള്</translation> @@ -5019,6 +5019,7 @@ <translation id="7075513071073410194">RSA എന്ക്രിപ്ഷനോടുകൂടിയ PKCS #1 MD5</translation> <translation id="7075625805486468288">HTTPS/SSL സർട്ടിഫിക്കറ്റുകളും ക്രമീകരണവും മാനേജ് ചെയ്യുക</translation> <translation id="7076293881109082629">സൈൻ ഇൻ ചെയ്യുന്നു</translation> +<translation id="7076878155205969899">ശബ്ദം മ്യൂട്ട് ചെയ്യുക</translation> <translation id="7077829361966535409">നിലവിലെ പ്രോക്സി ക്രമീകരണങ്ങൾ ഉപയോഗിച്ച് ലോഡ് ചെയ്യുന്നതിൽ സൈൻ-ഇൻ പേജ് പരാജയപ്പെട്ടു. <ph name="GAIA_RELOAD_LINK_START" />വീണ്ടും സൈൻ ഇൻ ചെയ്യാൻ ശ്രമിക്കുക<ph name="GAIA_RELOAD_LINK_END" />, അല്ലെങ്കിൽ മറ്റ് <ph name="PROXY_SETTINGS_LINK_START" />പ്രോക്സി ക്രമീകരണങ്ങൾ<ph name="PROXY_SETTINGS_LINK_END" /> ഉപയോഗിക്കുക.</translation> <translation id="7078120482318506217">എല്ലാ നെറ്റ്വർക്കുകളും</translation> <translation id="708060913198414444">ഓഡിയോ വിലാസം പകർത്തുക</translation> @@ -5039,7 +5040,6 @@ <translation id="7099337801055912064">വലിയ PPD ലോഡ് ചെയ്യാനാകില്ല. പരമാവധി വലുപ്പം 250 kB ആണ്.</translation> <translation id="7102687220333134671">സ്വയമേവയുള്ള അപ്ഡേറ്റുകൾ ഓണാണ്</translation> <translation id="7102832101143475489">അഭ്യർത്ഥന കാലഹരണപ്പെട്ടു</translation> -<translation id="7105390788077117391">USB മുൻഗണനകൾ</translation> <translation id="710640343305609397">നെറ്റ്വര്ക്ക് ക്രമീകരണം തുറക്കുക</translation> <translation id="7108338896283013870">മറയ്ക്കുക</translation> <translation id="7108668606237948702">നല്കുക</translation> @@ -5069,7 +5069,6 @@ <translation id="7136694880210472378">ഡിഫോൾട്ട് ആക്കുക</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> ലേക്ക് സ്വാഗതം</translation> <translation id="7136993520339022828">ഒരു പിശകുണ്ട്. മറ്റ് ചിത്രങ്ങൾ തിരഞ്ഞെടുത്ത് വീണ്ടും ശ്രമിക്കുക.</translation> -<translation id="7138678301420049075">മറ്റുള്ളവ</translation> <translation id="713888829801648570">ക്ഷമിക്കണം, നിങ്ങൾ ഓഫ്ലൈൻ ആയതിനാൽ പാസ്വേഡ് പരിശോധിച്ചുറപ്പിക്കാനായില്ല.</translation> <translation id="7140928199327930795">ലഭ്യമായ മറ്റ് ഉപകരണങ്ങളൊന്നുമില്ല.</translation> <translation id="7141105143012495934">നിങ്ങളുടെ അക്കൗണ്ട് വിശദാംശങ്ങൾ വീണ്ടെടുക്കാനാവാത്തതിനാൽ സൈൻ ഇൻ ചെയ്യുന്നത് പരാജയപ്പെട്ടു. നിങ്ങളുടെ അഡ്മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക അല്ലെങ്കിൽ വീണ്ടും ശ്രമിക്കുക.</translation> @@ -6132,6 +6131,7 @@ <translation id="8428213095426709021">ക്രമീകരണങ്ങള്</translation> <translation id="8428271547607112339">സ്കൂൾ അക്കൗണ്ട് ചേർക്കുക</translation> <translation id="8428628598981198790">നിങ്ങളുടെ സുരക്ഷാ കീ ഈ സൈറ്റിൽ ഉപയോഗിക്കാനാവില്ല</translation> +<translation id="8428634594422941299">മനസ്സിലായി</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" />-നുള്ളിൽ നിങ്ങൾ സൈൻ ഔട്ട് ചെയ്യപ്പെടും</translation> <translation id="8431190899827883166">ഷോ ടാപ്സ്</translation> <translation id="8431909052837336408">സിം പിൻ മാറ്റുക</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb index b18ab8e..9a43a73 100644 --- a/chrome/app/resources/generated_resources_mn.xtb +++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Компьютер болон өөрийнхөө ордог вэбсайтууд дээрх бүх мэдээллээ уншуулж, өөрчлөх</translation> <translation id="1430915738399379752">Хэвлэх</translation> <translation id="1431188203598586230">Программ хангамжийн хамгийн сүүлийн шинэчлэлт</translation> +<translation id="1431402976894535801">Сайтуудыг таныг байгаа үед мэдэхийг нь блоклоно</translation> <translation id="1431432486300429272">Google нь Хайлт болон Google-н бусад үйлчилгээг хувийн болгохын тулд таны хөтчийн түүхийг ашиглаж болно. Та болон таны эцэг эх үүнийг myaccount.google.com/activitycontrols/search-д хүссэн үедээ өөрчлөх боломжтой.</translation> <translation id="1432581352905426595">Хайлтын системийг удирдах</translation> <translation id="1433811987160647649">Хандахаас өмнө асуух</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Үл мэдэгдэх төхөөрөмж [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Эзэмшигчийн дансанд эхлээд олон нэвтрэх хэсэгт нэвтэрсэн байх шаардлагтай.</translation> <translation id="150411034776756821"><ph name="SITE" />-г устгах</translation> +<translation id="1504311855864906891">Медиагаа хадмалтай болгох</translation> <translation id="1504551620756424144">Хуваалцсан фолдерууд нь Windows-д <ph name="BASE_DIR" /> дээр байна.</translation> <translation id="1506061864768559482">Хайлтын хэрэгсэл</translation> <translation id="1507170440449692343">Энэ хуудас нь таны камерт хандалт хийх эрхгүй.</translation> @@ -565,6 +567,7 @@ <translation id="1651008383952180276">Та нэвтрэх үгээ хоёр удаа зөв оруулах шаардлагатай</translation> <translation id="1652326691684645429">Ойролцоо хуваалцах онцлогийг идэвхжүүлэх</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Хаанаас ч хэвлэхийн тулд Google Cloud Print-д хэвлэгч машин нэмэх.}other{Хаанаас ч хэвлэхийн тулд Google Cloud Print-д # хэвлэгч машин нэмэх.}}</translation> +<translation id="1653575510930452864">Холбоосыг текст рүү хуулах</translation> <translation id="1656528038316521561">Дэвсгэрийн бүдэгрэл</translation> <translation id="1657406563541664238"><ph name="PRODUCT_NAME" />-г сайжруулахад дэмжлэг үзүүлэх зорилгоор хэрэглээний статистик болон гэмтлийн тайланг автоматаар Google-д илгээх</translation> <translation id="1657937299377480641">Боловсролын нөөцөд хандахаар дахин нэвтрэхийн тулд эцэг эхээсээ танд зөвшөөрөл өгөхийг хүснэ үү</translation> @@ -998,6 +1001,7 @@ <translation id="2178614541317717477">CA Compromise</translation> <translation id="2182058453334755893">Түр санах ой руу хуулсан</translation> <translation id="2184515124301515068">Сайтуудад дуу тоглуулах боломжтой үеийг сонгох зөвшөөрлийг Chrome-д олгох (санал болгосон)</translation> +<translation id="2187243482123994665">Хэрэглэгч байгаа эсэх</translation> <translation id="2187675480456493911">Таны бүртгэл дээрх бусад төхөөрөмжтэй синк хийдэг. Бусад хэрэглэгчийн өөрчилсөн тохиргоог синк хийхгүй. <ph name="LINK_BEGIN" />Нэмэлт мэдээлэл авах<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Серверийн Гэрчилгээг Импортлох үеийн алдаа</translation> <translation id="2187906491731510095">Өргөтгөлийг шинэчилсэн</translation> @@ -1186,7 +1190,6 @@ <translation id="2396783860772170191">4 оронтой пинг (0000-9999) оруулна уу</translation> <translation id="2399939490305346086">Аюулгүй байдлын түлхүүрийн нэвтрэх өгөгдөл</translation> <translation id="2400664245143453337">Нэн даруй шинэчлэх шаардлагатай</translation> -<translation id="2407481962792080328">Таныг Google Бүртгэлдээ нэвтрэхэд энэ онцлог асна</translation> <translation id="2408018932941436077">Картыг хадгалж байна</translation> <translation id="2408955596600435184">ПИН-ээ оруулна уу</translation> <translation id="241082044617551207">Үл мэдэх нэмэлт өргөтгөл</translation> @@ -1825,6 +1828,7 @@ <translation id="3163201441334626963"><ph name="PRODUCT_ID" /> үйлдвэрлэгчийн <ph name="VENDOR_ID" /> тодорхойгүй бүтээгдэхүүн</translation> <translation id="3163254451837720982">Дараах үйлчилгээнүүд нь таны өгөгдлийг аюулгүй, найдвартай байлгахад тусалдаг. Та эдгээр онцлогийг хүссэн үедээ унтраах боломжтой.</translation> <translation id="3164329792803560526">Энэ табыг <ph name="APP_NAME" />-тай хуваалцаж байна</translation> +<translation id="3165371858310906303">Сайт таныг байгаа үед мэдэхийг хүссэн тохиолдолд асууна</translation> <translation id="3165390001037658081">Зарим оператор компани энэ онцлогийг блоклож болзошгүй.</translation> <translation id="316652501498554287">G Suite for Education бүртгэлүүд</translation> <translation id="3169472444629675720">Олох</translation> @@ -2941,6 +2945,7 @@ <translation id="4527186207340858212">Ажилдаа зориулж шинэ профайл үүсгэх үү?</translation> <translation id="452750746583162491">Синк хийсэн өгөгдлөө шалгах</translation> <translation id="4530494379350999373">Эх үүсвэр</translation> +<translation id="4531924570968473143">Та энэ <ph name="DEVICE_TYPE" />-д хэнийг нэмэхийг хүсэж байна вэ?</translation> <translation id="4532646538815530781">Энэ сайт хөдөлгөөн мэдрэгч ашиглаж байна.</translation> <translation id="4533846798469727141">Одоо "Hey Google" гэж хэлнэ үү</translation> <translation id="4533985347672295764">CPU Цаг</translation> @@ -3060,6 +3065,7 @@ <translation id="4657810666108475055">Таб хайлт</translation> <translation id="465878909996028221">Хөтчийн дахин чиглүүлэлтэд зөвхөн http, https болон файлын протоколыг дэмждэг.</translation> <translation id="4659077111144409915">Үндсэн бүртгэл</translation> +<translation id="4659126640776004816">Таныг Google Бүртгэлдээ нэвтрэхэд энэ онцлог асна.</translation> <translation id="4660476621274971848">"<ph name="EXPECTED_VERSION" />" хувилбарыг шаардсан хэдий ч "<ph name="NEW_ID" />" хувилбар байсан</translation> <translation id="4660540330091848931">Хэмжээг өөрчилж байна</translation> <translation id="4661407454952063730">Аппын өгөгдөл нь аппын хадгалсан (хөгжүүлэгчийн тохиргоонд үндэслэн) харилцагч, зурвас болон зураг зэрэг ямар ч өгөгдөл байж болно.</translation> @@ -3125,7 +3131,6 @@ <translation id="4750394297954878236">Санал зөвлөмж</translation> <translation id="475088594373173692">Анхны хэрэглэгч</translation> <translation id="4751476147751820511">Хөдөлгөөн эсвэл гэрэл мэдрэгч</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" />-г холбохын тулд Тохиргоог нээнэ үү</translation> <translation id="4756378406049221019">Зогсоох/Дахин ачааллах</translation> <translation id="4756388243121344051">& Түүх</translation> <translation id="4759238208242260848">Таталтууд:</translation> @@ -3973,6 +3978,7 @@ <translation id="5804241973901381774">Зөвшөөрлүүд</translation> <translation id="5805697420284793859">Цонхны менежер</translation> <translation id="5806773519584576205">0° (өгөгдмөл)</translation> +<translation id="5808664694611589238">{0,plural, =1{Зочны цонхыг хаах}other{Зочны цонхыг хаах}}</translation> <translation id="5810809306422959727">Энэ бүртгэл эцэг эхийн хяналтын эрхгүй</translation> <translation id="5812674658566766066">Бүгдийг дэлгэх</translation> <translation id="5814126672212206791">Холболтын төрөл</translation> @@ -4429,6 +4435,7 @@ <translation id="6344170822609224263">Сүлжээний холболтын жагсаалтанд хандах</translation> <translation id="6344576354370880196">Хадгалсан хэвлэгч</translation> <translation id="6345418402353744910"><ph name="PROXY" /> проксид таны хэрэглэгчийн нэр, нууц үг шаардлагатай, ингэснээр админ сүлжээг тань тохируулах боломжтой болно</translation> +<translation id="6345878117466430440">Уншсан гэж тэмдэглэх</translation> <translation id="6349101878882523185"><ph name="APP_NAME" />-г суулгах</translation> <translation id="6349170655202535379">Синк ажиллахгүй байна. Гараад, дахин нэвтэрнэ үү.</translation> <translation id="6351063337294363751">Та энэ цэснээс хайлтын өгөгдлөө устгах боломжтой</translation> @@ -5015,6 +5022,7 @@ <translation id="7075513071073410194">RSA шифрлэлттэй PKCS# 1 MD5</translation> <translation id="7075625805486468288">HTTPS/SSL сертификат, тохиргоог удирдах</translation> <translation id="7076293881109082629">Нэвтэрч байна</translation> +<translation id="7076878155205969899">Дууны дууг хаах</translation> <translation id="7077829361966535409">Прокси тохируулгыг ашигласан энэ үед нэвтрэх хуудас ачаалагдсангүй. <ph name="GAIA_RELOAD_LINK_START" />дахин нэвтрэх оролдлого<ph name="GAIA_RELOAD_LINK_END" /> хийнэ үү. Эсвэл өөр <ph name="PROXY_SETTINGS_LINK_START" />прокси тохируулга<ph name="PROXY_SETTINGS_LINK_END" /> ашиглана уу.</translation> <translation id="7078120482318506217">Бүх сүлжээ</translation> <translation id="708060913198414444">Аудио хаягийг хуулах</translation> @@ -5035,7 +5043,6 @@ <translation id="7099337801055912064">Том PPD-г ачааллах боломжгүй байна. Хамгийн дээд хэмжээ нь 250 kB болно.</translation> <translation id="7102687220333134671">Автомат шинэчлэлтийг асаасан</translation> <translation id="7102832101143475489">Хүсэлтийн хугацаа хэтэрлээ</translation> -<translation id="7105390788077117391">USB-н сонголт</translation> <translation id="710640343305609397">Сүлжээний тохиргоог нээх</translation> <translation id="7108338896283013870">Нуух</translation> <translation id="7108668606237948702">оруулах</translation> @@ -5065,7 +5072,6 @@ <translation id="7136694880210472378">Байнга ашиглагдах болгох</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> руу тавтай морилно уу</translation> <translation id="7136993520339022828">Алдаа байна. Өөр зураг сонгож дахин оролдоно уу.</translation> -<translation id="7138678301420049075">Бусад</translation> <translation id="713888829801648570">Та оффлайн байгаа учраас таны нууц үгийг баталгаажуулж чадсангүй.</translation> <translation id="7140928199327930795">Өөр ямар ч боломжит төхөөрөмжүүд байхгүй байна.</translation> <translation id="7141105143012495934">Таны бүртгэлийн мэдээллийг татаж чадсангүй тул нэвтрэх үйлдэл амжилтгүй боллоо. Та админтайгаа холбогдох, эсвэл дахин оролдох хэрэгтэй.</translation> @@ -5172,6 +5178,7 @@ <translation id="7280649757394340890">Текстийг яриа болгох дуу хоолойны тохиргоо</translation> <translation id="7280877790564589615">Зөвшөөрөл хүссэн</translation> <translation id="7282992757463864530">Мэдээллийн самбар</translation> +<translation id="7284411326658527427">Хүн бүр бүртгэлээ хувийн болгож, өгөгдлөө хувьдаа хадгалж болно.</translation> <translation id="7287143125007575591">Хандалтыг зөвшөөрөөгүй.</translation> <translation id="7287411021188441799">Өгөгдмөл дэвсгэрийг сэргээх</translation> <translation id="7288013116963835700">Linux-г <ph name="DEVICE_TYPE" />-с хасах</translation> @@ -5747,6 +5754,7 @@ <translation id="7963826112438303517">Таны Туслах таны дуу хоолойн загварыг үүсгэх болон шинэчлэх зорилгоор эдгээр бичлэг болон таны хэлсэн хүсэлтийг ашигладаг бөгөөд эдгээрийг зөвхөн таны Voice Match-г асаасан төхөөрөмжүүдэд хадгална. Дуу хоолойн үйл ажиллагаагаа Туслахын тохиргооноос харж эсвэл дахин тохируулна уу.</translation> <translation id="7966241909927244760">Зургийн хаягийг хуулах</translation> <translation id="7968072247663421402">Үйлчилгээ үзүүлэгчийн сонголтууд</translation> +<translation id="7968198493605442410">Холбоосыг текст рүү хуулах</translation> <translation id="7968742106503422125">Хуулж, буулгах өгөгдлөө уншиж, өөрчлөх</translation> <translation id="7968833647796919681">Гүйцэтгэлийн өгөгдөл цуглуулах ажиллагааг идэвхжүүлэх</translation> <translation id="7968982339740310781">Дэлгэрэнгүй мэдээлэл харах</translation> @@ -6124,6 +6132,7 @@ <translation id="8428213095426709021">Тохиргоо</translation> <translation id="8428271547607112339">Сургуулийн бүртгэл нэмэх</translation> <translation id="8428628598981198790">Таны аюулгүй байдлын түлхүүрийг энэ сайтад ашиглах боломжгүй</translation> +<translation id="8428634594422941299">Ойлголоо</translation> <translation id="84297032718407999">Та <ph name="LOGOUT_TIME_LEFT" />-н дараа гарах болно</translation> <translation id="8431190899827883166">Товшилтыг харуулах</translation> <translation id="8431909052837336408">SIM-н ПИН-г өөрчлөх</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index d4e8b10..c7023309 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">अज्ञात डिव्हाइस [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">हे मालक खाते मल्टिपल साइन-इन सेशनमधील प्रथम साइन-इन केलेले खाते असणे आवश्यक आहे.</translation> <translation id="150411034776756821"><ph name="SITE" /> काढून टाका</translation> +<translation id="1504311855864906891">तुमच्या मीडियासाठी कॅप्शन मिळवा</translation> <translation id="1504551620756424144">शेअर केलेली फोल्डर Windows मध्ये <ph name="BASE_DIR" /> येथे उपलब्ध आहेत.</translation> <translation id="1506061864768559482">शोध इंजिन</translation> <translation id="1507170440449692343">हे पृष्ठ आपल्या कॅमेर्यावर प्रवेश करण्यापासून अवरोधित केले गेले आहे.</translation> @@ -1189,7 +1190,6 @@ <translation id="2396783860772170191">चार अंकी पिन एंटर करा (००००-९९९९)</translation> <translation id="2399939490305346086">सिक्युरिटी की साइन इन डेटा</translation> <translation id="2400664245143453337">त्वरित अपडेट आवश्यक आहे</translation> -<translation id="2407481962792080328">तुम्ही तुमच्या Google खात्यामध्ये साइन इन केल्यावर, हे वैशिष्ट्य सुरू केले जाते</translation> <translation id="2408018932941436077">कार्ड सेव्ह करत आहे</translation> <translation id="2408955596600435184">तुमचा पिन प्रविष्ट करा</translation> <translation id="241082044617551207">अज्ञात प्लग-इन</translation> @@ -3063,6 +3063,7 @@ <translation id="4657810666108475055">शोध टॅब</translation> <translation id="465878909996028221">फक्त http, https आणि फाइल प्रोटोकॉलना ब्राउझर रीडिरेक्टला सपोर्ट करते.</translation> <translation id="4659077111144409915">प्राथमिक खाते</translation> +<translation id="4659126640776004816">तुम्ही तुमच्या Google खात्यामध्ये साइन इन केल्यावर, हे वैशिष्ट्य सुरू केले जाते.</translation> <translation id="4660476621274971848">अपेक्षित आवृत्ती "<ph name="EXPECTED_VERSION" />", परंतु आवृत्ती "<ph name="NEW_ID" />" होती</translation> <translation id="4660540330091848931">आकार बदलत आहे</translation> <translation id="4661407454952063730">अॅप डेटा म्हणजे अॅपने सेव्ह केलेला (डेव्हलपर सेटिंंग्जवर आधारित) कोणताही डेटा असू शकतो, ज्यामध्ये संपर्क, मेसेज आणि फोटो यांसारखा डेटा असतो.</translation> @@ -3128,7 +3129,6 @@ <translation id="4750394297954878236">सूचना</translation> <translation id="475088594373173692">प्रथम वापरकर्ता</translation> <translation id="4751476147751820511">मोशन किंवा प्रकाश सेन्सर</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" /> शी कनेक्ट करण्यासाठी सेटिंग्ज उघडा</translation> <translation id="4756378406049221019">थांबा/पुन्हा लोड करा</translation> <translation id="4756388243121344051">&इतिहास</translation> <translation id="4759238208242260848">डाउनलोड</translation> @@ -5019,6 +5019,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 With RSA एंक्रिप्शन</translation> <translation id="7075625805486468288">तुमची HTTPS/SSL प्रमाणपत्रे आणि सेटिंग्ज व्यवस्थापित करा</translation> <translation id="7076293881109082629">साइन इन करीत आहे</translation> +<translation id="7076878155205969899">ध्वनी म्यूट करा</translation> <translation id="7077829361966535409">वर्तमान प्रॉक्सी सेटिंग्ज वापरून साइन-इन पृष्ठ लोड करण्यास अयशस्वी झाले. कृपया <ph name="GAIA_RELOAD_LINK_START" />पुन्हा साइन इन करण्याचा प्रयत्न करा<ph name="GAIA_RELOAD_LINK_END" />, किंवा भिन्न <ph name="PROXY_SETTINGS_LINK_START" />प्रॉक्सी सेटिंग्ज<ph name="PROXY_SETTINGS_LINK_END" /> वापरा.</translation> <translation id="7078120482318506217">सर्व नेटवर्क</translation> <translation id="708060913198414444">ऑडिओ पत्ता कॉपी करा</translation> @@ -5039,7 +5040,6 @@ <translation id="7099337801055912064">मोठ्या PPD लोड करू शकत नाही. कमाल आकार 250kB आहे.</translation> <translation id="7102687220333134671">स्वयंचलित अपडेट सुरू केली आहेत</translation> <translation id="7102832101143475489">विनंतीची वेळ संपली</translation> -<translation id="7105390788077117391">USB प्राधान्ये</translation> <translation id="710640343305609397">नेटवर्क सेटिंग्ज उघडा</translation> <translation id="7108338896283013870">लपवा</translation> <translation id="7108668606237948702">प्रविष्ट करा</translation> @@ -5069,7 +5069,6 @@ <translation id="7136694880210472378">डीफॉल्ट बनवा</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> मध्ये स्वागत आहे</translation> <translation id="7136993520339022828">एक एरर आली आहे. कृपया दुसऱ्या इमेज निवडून पुन्हा प्रयत्न करा.</translation> -<translation id="7138678301420049075">इतर</translation> <translation id="713888829801648570">क्षमस्व, तुम्ही ऑफलाइन असल्याने तुमचा पासवर्ड पडताळणी करणे शक्य झाले नाही.</translation> <translation id="7140928199327930795">कोणतीही अन्य उपलब्ध डिव्हाइसेस नाहीत.</translation> <translation id="7141105143012495934">तुमचे खाते तपशील प्राप्त करणे शक्य झाले नसल्याने साइन-इन अयशस्वी झाले. कृपया तुमच्या ॲडमिनिस्ट्रेटरशी संपर्क साधा किंवा पुन्हा प्रयत्न करा.</translation> @@ -6130,6 +6129,7 @@ <translation id="8428213095426709021">सेटिंग्ज</translation> <translation id="8428271547607112339">शाळा खाते जोडा</translation> <translation id="8428628598981198790">तुमची सिक्युरिटी की या साइटसह वापरली जाऊ शकत नाही.</translation> +<translation id="8428634594422941299">समजले</translation> <translation id="84297032718407999">तुम्हाला <ph name="LOGOUT_TIME_LEFT" /> मध्ये साइन आउट केले जाईल</translation> <translation id="8431190899827883166">टॅप दाखवा</translation> <translation id="8431909052837336408">सिम पिन बदला</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index be7040c..b3d0c2e 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Baca dan ubah semua data anda pada komputer anda dan tapak web yang anda lawati</translation> <translation id="1430915738399379752">Cetak</translation> <translation id="1431188203598586230">Kemas kini perisian terakhir</translation> +<translation id="1431402976894535801">Sekat tapak daripada mengetahui waktu anda ada</translation> <translation id="1431432486300429272">Google boleh menggunakan sejarah penyemakan imbas anda untuk memperibadikan Carian dan perkhidmatan Google yang lain. Anda atau ibu/bapa anda boleh menukar tetapan ini pada bila-bila masa di myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Urus enjin carian</translation> <translation id="1433811987160647649">Tanya sebelum mengakses</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Peranti tidak diketahui [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Akaun pemilik ini perlu menjadi akaun dilog masuk yang pertama dalam sesi berbilang log masuk.</translation> <translation id="150411034776756821">Alih keluar <ph name="SITE" /></translation> +<translation id="1504311855864906891">Dapatkan sari kata untuk media anda</translation> <translation id="1504551620756424144">Folder kongsi tersedia dalam Windows di <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Enjin carian</translation> <translation id="1507170440449692343">Halaman ini telah disekat daripada mengakses kamera anda.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Anda mesti memasukkan ungkapan laluan yang sama dua kali</translation> <translation id="1652326691684645429">Dayakan Kongsi Berdekatan</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Tambahkan pencetak kepada Pencetak Awan Google supaya anda dapat mencetak dari mana-mana sahaja.}other{Tambahkan # pencetak kepada Pencetak Awan Google supaya anda dapat mencetak dari mana-mana sahaja.}}</translation> +<translation id="1653575510930452864">Salin Pautan ke Teks</translation> <translation id="1656528038316521561">Kelegapan latar</translation> <translation id="1657406563541664238">Bantu jadikan <ph name="PRODUCT_NAME" /> lebih baik dengan menghantar statistik dan laporan nahas secara automatik kepada Google</translation> <translation id="1657937299377480641">Untuk log masuk sekali lagi bagi mengakses sumber pendidikan, minta ibu/bapa memberi anda kebenaran</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">Tolak ansur CA</translation> <translation id="2182058453334755893">Disalin ke Papan Keratan Anda</translation> <translation id="2184515124301515068">Benarkan Chrome memilih masa tapak boleh memainkan bunyi (disyorkan)</translation> +<translation id="2187243482123994665">Kehadiran pengguna</translation> <translation id="2187675480456493911">Disegerakkan dengan peranti lain dalam akaun anda. Tetapan yang diubah suai oleh pengguna lain tidak akan disegerakkan. <ph name="LINK_BEGIN" />Ketahui lebih lanjut<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Ralat Import Sijil Pelayan</translation> <translation id="2187906491731510095">Sambungan dikemas kini</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Masukkan PIN 4 angka (0000-9999)</translation> <translation id="2399939490305346086">Data log masuk kunci keselamatan</translation> <translation id="2400664245143453337">Kemas kini segera diperlukan</translation> -<translation id="2407481962792080328">Apabila anda log masuk ke Akaun Google anda, ciri ini akan dihidupkan</translation> <translation id="2408018932941436077">Menyimpan kad</translation> <translation id="2408955596600435184">Masukkan PIN anda</translation> <translation id="241082044617551207">Pemalam tidak diketahui</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963">Produk <ph name="PRODUCT_ID" /> daripada vendor <ph name="VENDOR_ID" /> tidak diketahui</translation> <translation id="3163254451837720982">Perkhidmatan berikut memastikan data anda selamat dan terjamin. Anda boleh mematikan ciri ini pada bila-bila masa.</translation> <translation id="3164329792803560526">Berkongsi tab ini ke <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Tanya apabila tapak ingin mengetahui waktu anda ada</translation> <translation id="3165390001037658081">Sesetengah pembawa mungkin menyekat ciri ini.</translation> <translation id="316652501498554287">Akaun G Suite for Education</translation> <translation id="3169472444629675720">Temui</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">Buat profil baharu untuk kerja?</translation> <translation id="452750746583162491">Semak data anda yang disegerak</translation> <translation id="4530494379350999373">Asal</translation> +<translation id="4531924570968473143">Siapakah yang ingin anda tambahkan pada <ph name="DEVICE_TYPE" /> ini?</translation> <translation id="4532646538815530781">Tapak ini menggunakan penderia gerakan.</translation> <translation id="4533846798469727141">Sekarang sebut "Hey Google"</translation> <translation id="4533985347672295764">Masa CPU</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">Carian tab</translation> <translation id="465878909996028221">Hanya http, https dan protokol fail disokong untuk pengubahan hala penyemak imbas.</translation> <translation id="4659077111144409915">Akaun utama</translation> +<translation id="4659126640776004816">Apabila anda log masuk ke Akaun Google anda, ciri ini akan dihidupkan.</translation> <translation id="4660476621274971848">Versi yang dijangkakan "<ph name="EXPECTED_VERSION" />", tetapi versi sebenar ialah "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">Mengubah saiz</translation> <translation id="4661407454952063730">Data apl boleh jadi sebarang data yang telah disimpan oleh apl (berdasarkan tetapan pembangun), termasuk data seperti kenalan, mesej dan foto.</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">Cadangan</translation> <translation id="475088594373173692">Pengguna pertama</translation> <translation id="4751476147751820511">Penderia gerakan atau cahaya</translation> -<translation id="4752124003533492687">Buka Tetapan untuk menyambungkan <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Berhenti/Muat Semula</translation> <translation id="4756388243121344051">&Sejarah</translation> <translation id="4759238208242260848">Muat turun</translation> @@ -3851,7 +3856,7 @@ <translation id="5643620609347735571">Kosongkan dan teruskan</translation> <translation id="5646376287012673985">Lokasi</translation> <translation id="5646558797914161501">Ahli perniagaan</translation> -<translation id="5648166631817621825">7 hari terakhir</translation> +<translation id="5648166631817621825">7 hari lalu</translation> <translation id="5649053991847567735">Muat turun automatik</translation> <translation id="5653154844073528838">Anda mempunyai <ph name="PRINTER_COUNT" /> pencetak yang disimpan.</translation> <translation id="5656845498778518563">Hantar Maklum Balas kepada Google</translation> @@ -3978,6 +3983,7 @@ <translation id="5804241973901381774">Kebenaran</translation> <translation id="5805697420284793859">Pengurus tetingkap</translation> <translation id="5806773519584576205">0° (Lalai)</translation> +<translation id="5808664694611589238">{0,plural, =1{Tutup tetamu}other{Tutup tetamu}}</translation> <translation id="5810809306422959727">Akaun ini tidak layak untuk kawalan ibu bapa</translation> <translation id="5812674658566766066">Kembangkan semua</translation> <translation id="5814126672212206791">Jenis sambungan</translation> @@ -4435,6 +4441,7 @@ <translation id="6344170822609224263">Akses senarai sambungan rangkaian</translation> <translation id="6344576354370880196">Pencetak yang disimpan</translation> <translation id="6345418402353744910">Nama pengguna dan kata laluan anda diperlukan untuk proksi <ph name="PROXY" /> agar pentadbir dapat mengkonfigurasikan rangkaian anda</translation> +<translation id="6345878117466430440">Tandai sebagai dibaca</translation> <translation id="6349101878882523185">Pasang <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Penyegerakan tidak berfungsi. Cuba log keluar dan log masuk semula.</translation> <translation id="6351063337294363751">Anda boleh mengosongkan data semakan imbas anda daripada menu ini</translation> @@ -5021,6 +5028,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 Dengan Penyulitan RSA</translation> <translation id="7075625805486468288">Urus sijil dan tetapan HTTPS/SSL</translation> <translation id="7076293881109082629">Melog masuk</translation> +<translation id="7076878155205969899">Redamkan bunyi</translation> <translation id="7077829361966535409">Halaman log masuk gagal dimuatkan menggunakan tetapan proksi semasa. Sila <ph name="GAIA_RELOAD_LINK_START" />cuba log masuk sekali lagi<ph name="GAIA_RELOAD_LINK_END" /> atau gunakan <ph name="PROXY_SETTINGS_LINK_START" />tetapan proksi<ph name="PROXY_SETTINGS_LINK_END" /> yang berbeza.</translation> <translation id="7078120482318506217">Semua rangkaian</translation> <translation id="708060913198414444">S&alin alamat audio</translation> @@ -5041,7 +5049,6 @@ <translation id="7099337801055912064">Tidak dapat memuatkan PPD bersaiz besar. Saiz maksimum ialah 250 KB.</translation> <translation id="7102687220333134671">Kemas kini automatik dihidupkan</translation> <translation id="7102832101143475489">Permintaan telah tamat masa</translation> -<translation id="7105390788077117391">Pilihan USB</translation> <translation id="710640343305609397">Buka tetapan rangkaian</translation> <translation id="7108338896283013870">Sembunyikan</translation> <translation id="7108668606237948702">enter</translation> @@ -5071,7 +5078,6 @@ <translation id="7136694880210472378">Jadikan lalai</translation> <translation id="7136984461011502314">Selamat datang ke <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Terdapat ralat. Sila cuba lagi dengan memilih imej lain.</translation> -<translation id="7138678301420049075">Lain-lain</translation> <translation id="713888829801648570">Maaf, kata laluan anda tidak dapat disahkan kerana anda berada di luar talian.</translation> <translation id="7140928199327930795">Tiada peranti lain tersedia.</translation> <translation id="7141105143012495934">Log masuk gagal kerana butiran akaun anda tidak boleh didapatkan semula. Sila hubungi pentadbir anda atau cuba lagi.</translation> @@ -5178,6 +5184,7 @@ <translation id="7280649757394340890">Tetapan suara Teks ke Pertuturan</translation> <translation id="7280877790564589615">Kebenaran diminta</translation> <translation id="7282992757463864530">Bar Maklumat</translation> +<translation id="7284411326658527427">Setiap orang boleh memperibadikan akaun mereka dan merahsiakan data.</translation> <translation id="7287143125007575591">Akses ditolak.</translation> <translation id="7287411021188441799">Pulihkan latar lalai</translation> <translation id="7288013116963835700">Alih keluar Linux untuk <ph name="DEVICE_TYPE" /></translation> @@ -5754,6 +5761,7 @@ <translation id="7963826112438303517">Assistant menggunakan rakaman ini dan permintaan lisan anda untuk membuat dan mengemas kini model suara anda, yang hanya disimpan pada peranti yang telah dihidupkan ciri Voice Matchnya. Lihat atau latih semula aktiviti suara dalam Tetapan Assistant.</translation> <translation id="7966241909927244760">S&alin Alamat Imej</translation> <translation id="7968072247663421402">Pilihan penyedia</translation> +<translation id="7968198493605442410">Salin pautan ke teks</translation> <translation id="7968742106503422125">Baca dan ubah suai data yang anda salin dan tampal</translation> <translation id="7968833647796919681">Dayakan pengumpulan data prestasi</translation> <translation id="7968982339740310781">Lihat butiran</translation> @@ -6135,6 +6143,7 @@ <translation id="8428213095426709021">Tetapan</translation> <translation id="8428271547607112339">Tambahkan akaun sekolah</translation> <translation id="8428628598981198790">Kunci keselamatan anda tidak boleh digunakan dengan tapak ini</translation> +<translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">Anda akan dilog keluar dalam masa <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Tunjukkan ketikan</translation> <translation id="8431909052837336408">Tukar PIN SIM</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb index e60afb65..8037266e 100644 --- a/chrome/app/resources/generated_resources_my.xtb +++ b/chrome/app/resources/generated_resources_my.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">သင်၏ ကွန်ပျူတာ နှင့် ဝက်ဘ်ဆိုက်များမှာ သင်၏ ဒေတာ အားလုံးကို ဖတ်ရန် နှင့် ပြောင်းလဲရန်</translation> <translation id="1430915738399379752">ပရင့်</translation> <translation id="1431188203598586230">နောက်ဆုံး ဆော့ဖ်ဝဲအပ်ဒိတ်</translation> +<translation id="1431402976894535801">သင်ရှိနေသည်ကို ဝဘ်ဆိုက်များကသိခြင်းအား ပိတ်ထားရန်</translation> <translation id="1431432486300429272">Search နှင့် အခြား Google ဝန်ဆောင်မှုများကို ပုဂ္ဂိုလ်ရေးသီးသန့်ပြုလုပ်ရန် Google က သင့်ကြည့်ရှုခြင်းမှတ်တမ်းကို အသုံးပြုနိုင်သည်။ သင် (သို့) သင့်မိက ၎င်းကို myaccount.google.com/activitycontrols/search တွင် အချိန်မရွေး ပြောင်းလဲနိုင်သည်</translation> <translation id="1432581352905426595">ရှာဖွေမှုအင်ဂျင်များကို စီမံခန့်ခွဲရန်</translation> <translation id="1433811987160647649">အသုံးမပြုမီ မေးပါ</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">အမည်မသိ စက်ပစ္စည်း [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">ဒီပိုင်ရှင် အကောင့်မှာ အကြိမ်ကြိမ် လက်မှတ်ထိုးရမည့် အစီအစဉ် ထဲက ပထမဦးဆုံး လက်မှတ်ထိုး ဝင်သည့် အကောင့် ဖြစ်ပါသည်။</translation> <translation id="150411034776756821"><ph name="SITE" /> ကို ဖယ်ရှားပါ</translation> +<translation id="1504311855864906891">သင်၏မီဒီယာအတွက် စာတန်းများရယူရန်</translation> <translation id="1504551620756424144">မျှဝေထားသော ဖိုင်တွဲများကို Windows ရှိ <ph name="BASE_DIR" /> တွင် ရရှိနိုင်ပါသည်။</translation> <translation id="1506061864768559482">ရှာဖွေရေး အင်ဂျင်</translation> <translation id="1507170440449692343">ဒီစာမျက်နှာကို သင်၏ ကင်မရာကို ရယူသုံးမရအောင် ပိတ်ဆို့ထားသည်။</translation> @@ -570,6 +572,7 @@ <translation id="1652326691684645429">'အနီးတစ်ဝိုက် မျှဝေခြင်း' ကို ဖွင့်ရန်</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{သင့်အနေနှင့် ဘယ်နေရာမှမဆို ပရင့်ထုတ်ယူနိုင်ရန် ပရင်တာအား Google Cloud Print သို့ ထည့်ထားပါ။}other{ဘယ်နေရာမှမဆို သင် ပရင့်ထုတ်ယူနိုင်ရန် ပရင်တာ # အား Google Cloud Print သို့ ထည့်ထားပါ။ }}</translation> +<translation id="1653575510930452864">လင့်ခ်ကို စာသားသို့ မိတ္တူကူးခြင်း</translation> <translation id="1656528038316521561">နောက်ခံ အလင်းပိတ်နှုန်း</translation> <translation id="1657406563541664238">Google ထံသို့ သုံးစွဲမှု စာရင်းအင်းများ နှင့် ပျက်စီးမှု အစီရင်ခံစာများကို အလိုအလျောက် ပို့ပေးခြင်းဖြင့် <ph name="PRODUCT_NAME" />ကို ပိုကောင်းလာအောင် ကူညီပေးပါ။</translation> <translation id="1657937299377480641">ပညာရေးဆိုင်ရာ အရင်းအမြစ်များ အသုံးပြုနိုင်ရန်အတွက် ထပ်မံ၍ လက်မှတ်ထိုးဝင်ရန် မိဘအုပ်ထိန်းသူထံ ခွင့်ပြုချက်တောင်းပါ</translation> @@ -1003,6 +1006,7 @@ <translation id="2178614541317717477">CA သံသယဖြစ်ခံခဲ့ရ</translation> <translation id="2182058453334755893">'သင့်ကလစ်ဘုတ်' သို့ မိတ္တူကူးထားသည်</translation> <translation id="2184515124301515068">ဝဘ်ဆိုက်များ အသံဖွင့်နိုင်ခြင်းရှိမရှိကို Chrome အား ရွေးချယ်ခွင့်ပေးပါ (အကြံပြုထားသည်)</translation> +<translation id="2187243482123994665">အသုံးပြုသူ ရှိနေမှု</translation> <translation id="2187675480456493911">သင့်အကောင့်ရှိ အခြားစက်များနှင့် စင့်ခ်လုပ်ထားသည်။ အခြားအသုံးပြုသူများ ပြုပြင်ထားသော ဆက်တင်များကို စင့်ခ်လုပ်မည်မဟုတ်ပါ။ <ph name="LINK_BEGIN" />ပိုမိုလေ့လာရန်<ph name="LINK_END" /></translation> <translation id="2187895286714876935">ဆာဗာ လက်မှတ် တင်သွင်းမှု အမှား</translation> <translation id="2187906491731510095">နောက်ဆက်တွဲများ အပ်ဒိတ်လုပ်ပြီးပါပြီ</translation> @@ -1191,7 +1195,6 @@ <translation id="2396783860772170191">ဂဏန်း ၄ လုံးပါ ပင်နံပါတ်ထည့်ရန် (၀၀၀၀−၉၉၉၉)</translation> <translation id="2399939490305346086">လုံခြုံရေးကီး လက်မှတ်ထိုးဝင်ခြင်းဒေတာများ</translation> <translation id="2400664245143453337">ချက်ချင်း အပ်ဒိတ်လုပ်ရန် လိုအပ်သည်</translation> -<translation id="2407481962792080328">သင့် Google Account သို့ လက်မှတ်ထိုးဝင်သည့်အခါ ဤဝန်ဆောင်မှုကို ဖွင့်ထားပါသည်</translation> <translation id="2408018932941436077">ကတ်ကို သိမ်းနေသည်</translation> <translation id="2408955596600435184">သင့်ပင်နံပါတ်ကို ထည့်ပါ</translation> <translation id="241082044617551207">အမည်မသိ ပလက်ဂင်</translation> @@ -1831,6 +1834,7 @@ <translation id="3163201441334626963">အမည်မသိပစ္စည်း <ph name="PRODUCT_ID" /> သည် ရောင်းသူ <ph name="VENDOR_ID" /> မှဖြစ်၏</translation> <translation id="3163254451837720982">အောက်ပါဝန်ဆောင်မှုများသည် သင့်ဒေတာများကို ဘေးကင်းပြီး လုံခြုံမှုရှိစေသည်။ ဤဝန်ဆောင်မှုများကို အချိန်မရွေးပိတ်နိုင်သည်။</translation> <translation id="3164329792803560526">ဤတဘ်ကို <ph name="APP_NAME" /> သို့ မျှဝေနေသည်</translation> +<translation id="3165371858310906303">သင်ရှိနေသည်ကို ဝဘ်ဆိုက်ကသိလိုသောအခါ ခွင့်တောင်းရန်</translation> <translation id="3165390001037658081">ဝန်ဆောင်မှုပေးသူအချို့က ဤဝန်ဆောင်မှုအား ပိတ်ဆို့နိုင်ပါသည်။</translation> <translation id="316652501498554287">ပညာရေးအတွက် G Suite အကောင့်များ</translation> <translation id="3169472444629675720">Discover</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">အလုပ်အတွက် ပရိုဖိုင်အသစ်ပြုလုပ်လိုသလား။</translation> <translation id="452750746583162491">သင်စင့်ခ်လုပ်ထားသည့် ဒေတာများကို ပြန်စစ်ခြင်း</translation> <translation id="4530494379350999373">မူရင်း</translation> +<translation id="4531924570968473143">ဤ <ph name="DEVICE_TYPE" /> တွင် ဘယ်သူ့ကို ထည့်လိုသလဲ။</translation> <translation id="4532646538815530781">ဤဝဘ်ဆိုက်သည် လှုပ်ရှားမှု အာရုံခံစနစ်များကို အသုံးပြုနေသည်။</translation> <translation id="4533846798469727141">ယခု "ဟေး Google" ဟုပြောပါ</translation> <translation id="4533985347672295764">CPU အချိန်</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">တဘ်ရှာဖွေမှု</translation> <translation id="465878909996028221">ဘရောင်ဇာ တစ်ဆင့်ပြန်ညွှန်ပြခြင်းများအတွက် http၊ https နှင့် ဖိုင်ပရိုတိုကောများကိုသာ ပံ့ပိုးထားပါသည်။</translation> <translation id="4659077111144409915">ပင်မ အကောင့်</translation> +<translation id="4659126640776004816">သင့် Google Account သို့ လက်မှတ်ထိုးဝင်သည့်အခါ ဤဝန်ဆောင်မှုကို ဖွင့်ထားသည်။</translation> <translation id="4660476621274971848">ဗားရှင်း "<ph name="EXPECTED_VERSION" />" ကို မျှော်မှန်းထားသော်လည်း ဗားရှင်းမှာ "<ph name="NEW_ID" />" ဖြစ်နေသည်</translation> <translation id="4660540330091848931">အရွယ်အစား ပြန်ပြင်နေသည်</translation> <translation id="4661407454952063730">အက်ပ်ဒေတာဆိုသည်မှာ အဆက်အသွယ်၊ မက်ဆေ့ဂျ်နှင့် ဓာတ်ပုံများကဲ့သို့ ဒေတာများ အပါအဝင် (ဆော့ဖ်ဝဲအင်ဂျင်နီယာ၏ ဆက်တင်များအပေါ်မူတည်၍) အက်ပ်တစ်ခုက သိမ်းဆည်းလိုက်သော ဒေတာများဖြစ်ပါသည်။</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">အကြံပေးချက်များ</translation> <translation id="475088594373173692">ပထမ အသုံးပြုသူ</translation> <translation id="4751476147751820511">လှုပ်ရှားမှု သို့မဟုတ် အလင်းအာရုံခံကိရိယာများ</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" /> နှင့် ချိတ်ဆက်ရန် 'ဆက်တင်များ' ဖွင့်ပါ</translation> <translation id="4756378406049221019">ရပ်ဆိုင်းရန်/ပြန်လည်စတင်ရန်</translation> <translation id="4756388243121344051">မှတ်တမ်း</translation> <translation id="4759238208242260848">ဒေါင်းလုဒ်များ</translation> @@ -3139,7 +3144,7 @@ <translation id="4762718786438001384">စက်ပစ္စည်း၏ သိုလှောင်ခန်းအလွန်နည်းနေပါသည်</translation> <translation id="4763408175235639573">ဤစာမျက်နှာကို သင်ကြည့်ခဲ့ချိန်၌ အောက်ပါကွတ်ကီးများကို သတ်မှတ်ထားပါသည်</translation> <translation id="4765582662863429759">သင့်ဖုန်းမှ သင်၏ Chromebook သို့ စာတိုမက်ဆေ့ဂျ်များ ထပ်ဆင့်ပို့ရန် Android Messages ကို ခွင့်ပြုပါ</translation> -<translation id="476598255842811483">သင်၏စက်တွင် 'အနီးတစ်ဝိုက် မျှဝေခြင်း' ကို သင်မဖွင့်လျှင် မည်သူမျှမဖွင့်ပါ</translation> +<translation id="476598255842811483">သင်၏စက်တွင် 'အနီးတစ်ဝိုက် မျှဝေခြင်း' ကို မဖွင့်လျှင် သင့်စက်ကို မည်သူမျှ မမျှဝေနိုင်ပါ</translation> <translation id="4768332406694066911">ဤအဖွဲ့အစည်းများမှနေ၍ သင်၏ အထောက်အထား အသိအမှတ်ပြုလက်မှတ်များ သင့်ထံတွင်ရှိပါသည်</translation> <translation id="477647109558161443">အမြန်ဖွင့်ဖြတ်လမ်းလင့်ခ်တစ်ခု ပြုလုပ်ရန်</translation> <translation id="4776917500594043016"><ph name="USER_EMAIL_ADDRESS" />အတွက် စကားဝှက်</translation> @@ -3979,6 +3984,7 @@ <translation id="5804241973901381774">ခွင့်ပြုချက်များ</translation> <translation id="5805697420284793859">ဝင်းဒိုး မန်နေဂျာ</translation> <translation id="5806773519584576205">၀° (မူရင်း)</translation> +<translation id="5808664694611589238">{0,plural, =1{ဧည့်သည်ဝင်းဒိုး ပိတ်ရန်}other{ဧည့်သည်ဝင်းဒိုး ပိတ်ရန်}}</translation> <translation id="5810809306422959727">ဤအကောင့်တွင် မိဘ အထိန်းအချုပ်များကို အသုံးပြု၍မရပါ</translation> <translation id="5812674658566766066">အားလုံးချဲ့ရန်</translation> <translation id="5814126672212206791">ချိတ်ဆက်မှု အမျိုးအစား</translation> @@ -4435,6 +4441,7 @@ <translation id="6344170822609224263">ကွန်ရက်ချိတ်ဆက်မှု စာရင်းအား အသုံးပြုရန်</translation> <translation id="6344576354370880196">သိမ်းထားသည့် ပုံနှိပ်စက်များ</translation> <translation id="6345418402353744910">စီမံခန့်ခွဲသူက သင်၏ကွန်ရက်ကို စီစဉ်သတ်မှတ်နိုင်ရန် <ph name="PROXY" /> ပရောက်စီအတွက် သင့်အသုံးပြုသူအမည်နှင့် စကားဝှက် လိုအပ်သည်</translation> +<translation id="6345878117466430440">ဖတ်ပြီးဟု မှတ်သားရန်</translation> <translation id="6349101878882523185"><ph name="APP_NAME" /> ထည့်သွင်းရန်</translation> <translation id="6349170655202535379">စင့်ခ်လုပ်၍ မရပါ။ ထွက်ပြီး ပြန်လည်၍ လက်မှတ်ထိုးဝင်ပါ။</translation> <translation id="6351063337294363751">သင်၏ ဖွင့်ကြည့်ထားသည့် မှတ်တမ်းဒေတာတို့ကို ဤမီနူးမှနေ၍ ရှင်းပစ်နိုင်ပါသည်</translation> @@ -5019,6 +5026,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 RSA အန်ခရစ်ပြုလုပ်ခြင်းဖြင့်</translation> <translation id="7075625805486468288">HTTPS/SSL အသိအမှတ်ပြုလက်မှတ်များနှင့် ဆက်တင်များကို စီမံပါ</translation> <translation id="7076293881109082629">အကောင့်ထံဝင်ရောက်နေသည်</translation> +<translation id="7076878155205969899">အသံတိတ်ပါ</translation> <translation id="7077829361966535409">လက်ရှိ ပရောက်စီ ဆက်တင်များကို သုံးပြီး လက်မှတ်ထိုး-ဝင်ရေး စာမျက်နှာ တင် မရခဲ့ပါ။ ကျေးဇူးပြုပြီး <ph name="GAIA_RELOAD_LINK_START" />ထပ်ပြီး လက်မှတ်ထိုး ဝင်ရန် ကြိုးစားပါ<ph name="GAIA_RELOAD_LINK_END" />၊ သို့မဟုတ် အခြား <ph name="PROXY_SETTINGS_LINK_START" />ပရောက်စီ ဆက်တင်များ<ph name="PROXY_SETTINGS_LINK_END" />ကို သုံးပါ။</translation> <translation id="7078120482318506217">ကွန်ရက်အားလုံး</translation> <translation id="708060913198414444">အသံ၏ လိပ်စာကို မိ&တ္တူ ကူးပါ</translation> @@ -5039,7 +5047,6 @@ <translation id="7099337801055912064">ကြီးမားသည့် PPD ကို ဖွင့်၍မရပါ။ ခွင့်ပြုထားသည့် အကြီးဆုံးအရွယ်အစားသည် ၂၅၀ ကီလိုဘိုက် ဖြစ်သည်။</translation> <translation id="7102687220333134671">အလိုအလျောက် အပ်ဒိတ်လုပ်ခြင်းများကို ဖွင့်ထားသည်</translation> <translation id="7102832101143475489">တောင်းဆိုချက် အချိန်ကုန်သွားသည်</translation> -<translation id="7105390788077117391">USB သတ်မှတ်ချက်များ</translation> <translation id="710640343305609397">ကွန်ရက်ဆက်တင်များကို ဖွင့်ရန်</translation> <translation id="7108338896283013870">ဝှက်ထားရန်</translation> <translation id="7108668606237948702">ရိုက်ထည့်</translation> @@ -5069,7 +5076,6 @@ <translation id="7136694880210472378">ပုံသေ လုပ်ရန်</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> မှကြိုဆိုပါသည်</translation> <translation id="7136993520339022828">အမှားအယွင်းရှိနေသည်။ အခြားပုံများကို ရွေးပြီး ထပ်စမ်းကြည့်ပါ။</translation> -<translation id="7138678301420049075">အခြား</translation> <translation id="713888829801648570">ဆောရီး၊ သင် အော့ဖလိုင်း ဖြစ်နေသောကြောင့် သင့်လျှို့ဝှက်ကုဒ်ကို အတည်မပြုနိုင်ပါ။</translation> <translation id="7140928199327930795">အခြား ကိရိယာများ မရှိ။</translation> <translation id="7141105143012495934">သင့်အကောင့်အသေးစိတ်များအား ထုတ်ယူ၍မရသောကြောင့် လက်မှတ်ထိုးဝင်ရောက်မှု မအောင်မြင်ပါ။ ကျေးဇူးပြု၍ သင့်ကြီးကြပ်သူကို ဆက်သွယ်ပါ သို့မဟုတ် နောက်တစ်ကြိမ်ကြိုးစားပါ။</translation> @@ -5176,6 +5182,7 @@ <translation id="7280649757394340890">'စာသားမှ စကားပြောသို့ ပြောင်းခြင်း' အသံဆက်တင်များ</translation> <translation id="7280877790564589615">ခွင့်ပြုချက် တောင်းဆို၏</translation> <translation id="7282992757463864530">အချက်အလက်ဘားတန်း</translation> +<translation id="7284411326658527427">လူတိုင်းက မိမိအကောင့်ကို ပုဂ္ဂိုလ်ရေးသီးသန့်ပြုလုပ်ကာ ဒေတာများ သီးသန့်သိမ်းနိုင်သည်။</translation> <translation id="7287143125007575591">အသုံးပြုခွင့် မရပါ။</translation> <translation id="7287411021188441799">မူရင်းနောက်ခံပုံကို ပြန်ယူရန်</translation> <translation id="7288013116963835700"><ph name="DEVICE_TYPE" /> အတွက် Linux ဖယ်ရှားရန်</translation> @@ -5752,6 +5759,7 @@ <translation id="7963826112438303517">သင်၏ Assistant က ဤအသံသွင်းထားမှုများနှင့် သင့်စကားပြော တောင်းဆိုချက်များကို အသုံးပြုပြီး သင်၏ အသံမော်ဒယ်ကို ပြုလုပ်ပါသည်။ ၎င်းကို သင် Voice Match ဖွင့်ထားသော ကိရိယာများတွင်သာ သိမ်းထားပါသည်။ 'Assistant ဆက်တင်များ' တွင် အသံလုပ်ဆောင်ချက်ကို ကြည့်ရှုခြင်း (သို့) ပြန်လေ့ကျင့်ပေးခြင်းတို့ ပြုလုပ်ပါ။</translation> <translation id="7966241909927244760">ပုံ၏ လိပ်စာကို မိ&တ္တူ ကူးပါ</translation> <translation id="7968072247663421402">ဝန်ဆောင်မှုပေးသူ ရွေးချယ်စရာများ</translation> +<translation id="7968198493605442410">လင့်ခ်ကို စာသားသို့ မိတ္တူကူးရန်</translation> <translation id="7968742106503422125">သင်မိတ္တူကူးပြီး ထည့်ထားသော ဒေတာတို့ကို ကြည့်ရှုပြင်ဆင်ရန်</translation> <translation id="7968833647796919681">စွမ်းဆောင်ချက် အချက်လက်စုစည်းမှု ဖွင့်ရန်</translation> <translation id="7968982339740310781">အသေးစိတ်များ ကြည့်ရှုရန်</translation> @@ -6131,6 +6139,7 @@ <translation id="8428213095426709021">ဆက်တင်များ</translation> <translation id="8428271547607112339">ကျောင်းအကောင့်ကို ထည့်ရန်</translation> <translation id="8428628598981198790">သင့်လုံခြုံရေးကီးကို ဤဝဘ်ဆိုက်တွင် အသုံးပြု၍မရပါ</translation> +<translation id="8428634594422941299">ရပါပြီ</translation> <translation id="84297032718407999">သင်သည် <ph name="LOGOUT_TIME_LEFT" /> အတွင်း ထွက်သွားပါမည်</translation> <translation id="8431190899827883166">တို့ရန်များကို ပြခြင်း</translation> <translation id="8431909052837336408">ဆင်းမ်ကဒ် ပင်နံပါတ်ပြောင်းရန်</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index e89bc5f..5b863e26 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -425,6 +425,7 @@ <translation id="1500297251995790841">अज्ञात यन्त्र [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">यो मालिक खाता मल्टिपल साइन-इन सत्रमा पहिलो पटक साइन-इन गरिएको खाता हुनुपर्दछ।</translation> <translation id="150411034776756821"><ph name="SITE" /> हटाउनुहोस्</translation> +<translation id="1504311855864906891">आफ्नो मिडियाका लागि क्याप्सन सिर्जना गर्नुहोस्</translation> <translation id="1504551620756424144">साझा फोल्डरहरू Windows को <ph name="BASE_DIR" /> मा उपलब्ध हुन्छन्।</translation> <translation id="1506061864768559482">खोज इन्जिन</translation> <translation id="1507170440449692343">यो पृष्ठलाई तपाईंको क्यामेरा पहुँच गर्नबाट ब्लक गरिएको छ।</translation> @@ -1186,7 +1187,6 @@ <translation id="2396783860772170191">चार अङ्कको पिन (००००-९९९९) प्रविष्टि गर्नुहोस्</translation> <translation id="2399939490305346086">सुरक्षा साँचोको साइन इनसम्बन्धी डेटा</translation> <translation id="2400664245143453337">तत्काल अद्यावधिक गर्न आवश्यक छ</translation> -<translation id="2407481962792080328">तपाईंले आफ्नो Google खातामा साइन इन गर्दा यो सुविधा सक्रिय हुन्छ</translation> <translation id="2408018932941436077">कार्ड सुरक्षित गर्दै</translation> <translation id="2408955596600435184">आफ्नो PIN प्रविष्टि गर्नुहोस्</translation> <translation id="241082044617551207">अज्ञात प्लगइन</translation> @@ -1283,6 +1283,7 @@ <translation id="2505127913256479918">सुपरिवेक्षण गरिएको यो खाता चाँडै नै हटाइने छ</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{स्क्रिन #}other{स्क्रिन #}}</translation> <translation id="2505402373176859469"><ph name="RECEIVED_AMOUNT" /> को <ph name="TOTAL_SIZE" /></translation> +<translation id="250642123108534012">'नजिकैका यन्त्रसँग सेयर गर्ने सुविधा' अन गरेका तपाईंको नजिकै भएका यन्त्रहरू</translation> <translation id="250704661983564564">डिस्प्लेका सेटिङ</translation> <translation id="2507253002925770350">टिकट हटाइयो</translation> <translation id="2507397597949272797"><ph name="NAME" /> पज गरिएको छ</translation> @@ -3061,6 +3062,7 @@ <translation id="4657810666108475055">ट्याबको खोजी</translation> <translation id="465878909996028221">ब्राउजर रिडिरेक्ट गर्न http, https तथा फाइल प्रोटोकललाई मात्र समर्थन गरिन्छ।</translation> <translation id="4659077111144409915">प्राथमिक खाता</translation> +<translation id="4659126640776004816">तपाईंले आफ्नो Google खातामा साइन इन गर्दा यो सुविधा सक्रिय गरिन्छ।</translation> <translation id="4660476621274971848">अपेक्षित संस्करण "<ph name="EXPECTED_VERSION" />" हो, तर भएको संस्करण भने "<ph name="NEW_ID" />" छ</translation> <translation id="4660540330091848931">आकार बदल्दै</translation> <translation id="4661407454952063730">एपको डेटा भनेको सम्पर्क ठेगाना, सन्देश र तस्बिरहरू जस्ता डेटालगायत कुनै अनुप्रयोगले (विकासकर्ताका सेटिङहरूमा आधारित भएर) सुरक्षित गरेको कुनै पनि डेटा हुन सक्छ।</translation> @@ -3126,7 +3128,6 @@ <translation id="4750394297954878236">सुझावहरू</translation> <translation id="475088594373173692">पहिलो प्रयोगकर्ता</translation> <translation id="4751476147751820511">गति वा प्रकाशसम्बन्धी सेन्सरहरू</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" /> कनेक्ट गर्न सेटिङ खोल्नुहोस्</translation> <translation id="4756378406049221019">रोक्नुहोस्/पुनः लोड गर्नुहोस्</translation> <translation id="4756388243121344051">&इतिहास</translation> <translation id="4759238208242260848">डाउनलोडहरू</translation> @@ -3134,6 +3135,7 @@ <translation id="4762718786438001384">यन्त्रको डिस्कमा खाली ठाउँ अत्यन्त कम छ</translation> <translation id="4763408175235639573">तपाईंले यस पृष्ठ हेर्दा निम्न कुकीहरू सेट गरिए</translation> <translation id="4765582662863429759">यसले Android Messages लाई तपाईंको फोनबाट तपाईंको Chromebook मा पाठ प्रसारण गर्न दिन्छ</translation> +<translation id="476598255842811483">तपाईंले आफ्नो यन्त्रमा 'नजिकैका यन्त्रसँग सेयर गर्ने सुविधा' अन नगरेसम्म कोही पनि तपाईंसँग सेयर गर्न सक्दैनन्</translation> <translation id="4768332406694066911">तपाईँसँग यी संगठनहरूका तपाईँको पहिचान गर्ने प्रमाणपत्रहरू छन्</translation> <translation id="477647109558161443">एउटा डेस्कटप सर्टकट सिर्जना गर्नुहोस्</translation> <translation id="4776917500594043016"><ph name="USER_EMAIL_ADDRESS" /> को लागि लागि पासवर्ड</translation> @@ -5014,6 +5016,7 @@ <translation id="7075513071073410194">PKCS #1 MD2 सँग RSA गुप्तलेखन</translation> <translation id="7075625805486468288">HTTPS/SSL सम्बन्धी प्रमाणपत्र र सेटिङहरूको व्यवस्थापन गर्नुहोस्</translation> <translation id="7076293881109082629">साइनइन गर्दै</translation> +<translation id="7076878155205969899">आवाज म्युट गर्नुहोस्</translation> <translation id="7077829361966535409">साइन पृष्ठ हालको प्रोक्सी सेटिङहरू प्रयोग गरेर लोड हुन असफल भयो। कृपया <ph name="GAIA_RELOAD_LINK_START" />पुन: साइन इन गर्ने प्रयास गर्नुहोस्<ph name="GAIA_RELOAD_LINK_END" />, वा फरक <ph name="PROXY_SETTINGS_LINK_START" />प्रोक्सी सेटिङहरू<ph name="PROXY_SETTINGS_LINK_END" /> प्रयोग गर्नुहोस</translation> <translation id="7078120482318506217">सबै नेटवर्कहरू</translation> <translation id="708060913198414444">अडियो ठेगानाको प्रतिलिपि बनाउनुहोस्</translation> @@ -5034,7 +5037,6 @@ <translation id="7099337801055912064">ठुलो आकारको PPD लोड गर्न सकिँदैन। लोड गर्न सकिने अधिकतम आकार २५० के.बि. हो।</translation> <translation id="7102687220333134671">स्वतःअद्यावधिकहरू सक्रिय गरिएका छन्</translation> <translation id="7102832101143475489">यो अनुरोधको समयावधि सकियो</translation> -<translation id="7105390788077117391">USB का प्राथमिकताहरू</translation> <translation id="710640343305609397">नेटवर्कका सेटिङहरू खोल्नुहोस्</translation> <translation id="7108338896283013870">लुकाउनुहोस्</translation> <translation id="7108668606237948702">प्रविष्टि गर्नुहोस्</translation> @@ -5064,7 +5066,6 @@ <translation id="7136694880210472378">पूर्वनिर्धारित बनाउनुहोस्</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> मा स्वागत छ</translation> <translation id="7136993520339022828">त्यहाँ कुनै त्रुटि छ। अन्य छविहरू छनौट गरी कृपया फेरि प्रयास गर्नुहोस्।</translation> -<translation id="7138678301420049075">अन्य</translation> <translation id="713888829801648570">माफ गर्नुहोस्, तपाइँको पासवर्ड रुजू गर्न सकिएन किनभने तपाइँ अफलाइन हुनुहुन्छ।</translation> <translation id="7140928199327930795">अरू कुनै यन्त्रहरू उपलब्ध छैनन्।</translation> <translation id="7141105143012495934">साइन इन असफल भयो किनभने तपाईँका खाता विवरणहरू पुनःप्राप्त गर्न सकेन। कृपया तपाईँको प्रशासकसँग सम्पर्क गर्नुहोस् वा फेरि प्रयास गर्नुहोस्।</translation> @@ -5664,6 +5665,7 @@ <translation id="786073089922909430">सेवा: <ph name="ARC_PROCESS_NAME" /></translation> <translation id="7861215335140947162">&डाउनलोडहरू</translation> <translation id="7864539943188674973">ब्लुटुथ अक्षम बनाउनुहोस्</translation> +<translation id="7866352732146932341">तपाईंको यन्त्रमा 'नजिकैका यन्त्रसँग सेयर गर्ने सुविधा' अन भएका बेला तपाईंको नजिकै भएका यन्त्रहरू</translation> <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - जोडा बनाइयो</translation> <translation id="7870730066603611552">सेटअप गरेपश्चात् सिंकसम्बन्धी विकल्पहरूको समीक्षा गर्नुहोस्</translation> <translation id="7870790288828963061">नयाँ संस्करणका कुनै पनि Kiosk एपहरू भेटिएन। अद्यावधिक गर्न कुनै चिज वाँकि छैन। कृपया USB स्टिक हटाउनुहोस्।</translation> @@ -6125,6 +6127,7 @@ <translation id="8428213095426709021">सेटिङहरू</translation> <translation id="8428271547607112339">विद्यालयको खाता थप्नुहोस्</translation> <translation id="8428628598981198790">तपाईंको सुरक्षा साँचो यस साइटमा प्रयोग गर्न सकिँदैन</translation> +<translation id="8428634594422941299">बुझेँ</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> मा तपाईंलाई साइन आउट गरिने छ</translation> <translation id="8431190899827883166">ट्यापहरू देखाउनुहोस्</translation> <translation id="8431909052837336408">SIM को PIN परिवर्तन गर्नुहोस्</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index d4230469..896ecc6f 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Al je gegevens lezen en wijzigen op je computer en de websites die je bezoekt</translation> <translation id="1430915738399379752">Afdrukken</translation> <translation id="1431188203598586230">Laatste software-update</translation> +<translation id="1431402976894535801">Voorkomen dat sites weten wanneer je aanwezig bent</translation> <translation id="1431432486300429272">Google kan je browsegeschiedenis gebruiken om Google Zoeken en andere Google-services te personaliseren. Jij of een ouder kan dit op elk gewenst moment wijzigen via https://myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Zoekmachines beheren</translation> <translation id="1433811987160647649">Vragen vóór toegang</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Onbekend apparaat [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Dit eigenaarsaccount is het eerste account waarop moet worden ingelogd wanneer meerdere inlogsessies worden uitgevoerd.</translation> <translation id="150411034776756821"><ph name="SITE" /> verwijderen</translation> +<translation id="1504311855864906891">Ondertiteling voor je media</translation> <translation id="1504551620756424144">Gedeelde mappen zijn beschikbaar in Windows in <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Zoekmachine</translation> <translation id="1507170440449692343">Deze pagina heeft geen toegang tot je camera.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Je moet twee keer dezelfde wachtwoordzin opgeven</translation> <translation id="1652326691684645429">'Dichtbij delen' inschakelen</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Voeg de printer toe aan Google Cloudprinter zodat je overal kunt afdrukken.}other{Voeg # printers toe aan Google Cloudprinter zodat je overal kunt afdrukken.}}</translation> +<translation id="1653575510930452864">Link naar tekst kopiëren</translation> <translation id="1656528038316521561">Ondoorzichtigheid van achtergrond</translation> <translation id="1657406563541664238">Help <ph name="PRODUCT_NAME" /> beter te maken door automatisch gebruiksstatistieken en crashmeldingen naar Google te verzenden</translation> <translation id="1657937299377480641">Als je opnieuw wilt inloggen voor toegang tot educatieve bronnen, vraag je een ouder om je toestemming te geven</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">Inbreuk op CA</translation> <translation id="2182058453334755893">Naar klembord gekopieerd</translation> <translation id="2184515124301515068">Chrome laten kiezen wanneer sites geluid mogen afspelen (aanbevolen)</translation> +<translation id="2187243482123994665">Aanwezigheid van gebruiker</translation> <translation id="2187675480456493911">Gesynchroniseerd met andere apparaten in je account. Instellingen die zijn aangepast door andere gebruikers, worden niet gesynchroniseerd. <ph name="LINK_BEGIN" />Meer informatie<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Fout bij importeren van servercertificaat</translation> <translation id="2187906491731510095">Extensies geüpdatet</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Voer een viercijferige pincode in (0000-9999)</translation> <translation id="2399939490305346086">Inloggegevens voor beveiligingssleutel</translation> <translation id="2400664245143453337">Onmiddellijke update vereist</translation> -<translation id="2407481962792080328">Als je inlogt op je Google-account, wordt deze functie ingeschakeld</translation> <translation id="2408018932941436077">Kaart opslaan</translation> <translation id="2408955596600435184">Je pincode opgeven</translation> <translation id="241082044617551207">Onbekende plug-in</translation> @@ -1448,7 +1451,7 @@ <translation id="2705736684557713153">Scroll naar de onderkant van het scherm en schakel instant-tethering in als deze optie wordt weergegeven. Als de optie niet wordt weergegeven, ben je helemaal klaar.</translation> <translation id="2707024448553392710">Component downloaden</translation> <translation id="270921614578699633">Gemiddelde van</translation> -<translation id="2709516037105925701">Automatisch aanvullen</translation> +<translation id="2709516037105925701">Automatisch invullen</translation> <translation id="2710101514844343743">Gebruiks- en diagnostische gegevens</translation> <translation id="271033894570825754">Nieuw</translation> <translation id="2712173769900027643">Rechten vragen</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963">Onbekend product <ph name="PRODUCT_ID" /> van leverancier <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Met de volgende services worden je gegevens beveiligd. Je kunt deze functies op elk moment uitschakelen.</translation> <translation id="3164329792803560526">Dit tabblad wordt gedeeld met <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Vragen als een site wil weten wanneer je aanwezig bent</translation> <translation id="3165390001037658081">Sommige providers kunnen deze functie blokkeren.</translation> <translation id="316652501498554287">G Suite for Education-accounts</translation> <translation id="3169472444629675720">Discover</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">Een nieuw profiel maken voor je werk?</translation> <translation id="452750746583162491">Je gesynchroniseerde gegevens controleren</translation> <translation id="4530494379350999373">Herkomst</translation> +<translation id="4531924570968473143">Wie wil je toevoegen aan deze <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Deze site gebruikt bewegingssensoren.</translation> <translation id="4533846798469727141">Zeg nu 'Hey Google'</translation> <translation id="4533985347672295764">CPU-tijd</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">Tabbladen zoeken</translation> <translation id="465878909996028221">Alleen http- en https-bestandsprotocollen worden ondersteund voor browseromleidingen.</translation> <translation id="4659077111144409915">Primair account</translation> +<translation id="4659126640776004816">Als je inlogt op je Google-account, wordt deze functie ingeschakeld.</translation> <translation id="4660476621274971848">Verwachte versie '<ph name="EXPECTED_VERSION" />', maar versie is '<ph name="NEW_ID" />'</translation> <translation id="4660540330091848931">Grootte aanpassen</translation> <translation id="4661407454952063730">App-gegevens kunnen alle gegevens zijn die een app heeft opgeslagen (op basis van de ontwikkelaarsinstellingen), waaronder gegevens zoals contacten, berichten en foto's.</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">Suggesties</translation> <translation id="475088594373173692">Eerste gebruiker</translation> <translation id="4751476147751820511">Bewegings- of lichtsensoren</translation> -<translation id="4752124003533492687">Open Instellingen om <ph name="USB_DEVICE_NAME" /> te verbinden</translation> <translation id="4756378406049221019">Stoppen/opnieuw laden</translation> <translation id="4756388243121344051">Gesc&hiedenis</translation> <translation id="4759238208242260848">Downloads</translation> @@ -3978,6 +3983,7 @@ <translation id="5804241973901381774">Rechten</translation> <translation id="5805697420284793859">Vensterbeheer</translation> <translation id="5806773519584576205">0° (standaard)</translation> +<translation id="5808664694611589238">{0,plural, =1{Gastvensters sluiten}other{Gastvensters sluiten}}</translation> <translation id="5810809306422959727">Dit account komt niet in aanmerking voor ouderlijk toezicht</translation> <translation id="5812674658566766066">Alles uitvouwen</translation> <translation id="5814126672212206791">Verbindingstype</translation> @@ -4435,6 +4441,7 @@ <translation id="6344170822609224263">Toegang tot lijst met netwerkverbindingen</translation> <translation id="6344576354370880196">Opgeslagen printers</translation> <translation id="6345418402353744910">Je gebruikersnaam en wachtwoord zijn vereist voor de proxy <ph name="PROXY" /> zodat de beheerder je netwerk kan configureren</translation> +<translation id="6345878117466430440">Markeren als gelezen</translation> <translation id="6349101878882523185"><ph name="APP_NAME" /> installeren</translation> <translation id="6349170655202535379">Synchronisatie werkt niet. Probeer uit en weer in te loggen.</translation> <translation id="6351063337294363751">Je kunt je browsergegevens wissen vanuit dit menu</translation> @@ -4842,7 +4849,7 @@ <translation id="6860097299815761905">Proxyinstellingen...</translation> <translation id="6860427144121307915">Openen in een tabblad</translation> <translation id="686366188661646310">Wachtwoord verwijderen?</translation> -<translation id="6865313869410766144">Formuliergegevens voor Automatisch aanvullen</translation> +<translation id="6865313869410766144">Formuliergegevens voor 'Automatisch invullen'</translation> <translation id="6865598234501509159">Pagina is niet in het <ph name="LANGUAGE" /></translation> <translation id="6865708901122695652">WebRTC-gebeurtenislogboeken (<ph name="WEBRTC_EVENT_LOG_COUNT" />)</translation> <translation id="686664946474413495">Kleurtemperatuur</translation> @@ -5021,6 +5028,7 @@ <translation id="7075513071073410194">PKCS nr. 1 MD5 met RSA-encryptie</translation> <translation id="7075625805486468288">HTTPS/SSL-certificaten en -instellingen beheren</translation> <translation id="7076293881109082629">Inloggen</translation> +<translation id="7076878155205969899">Geluid dempen</translation> <translation id="7077829361966535409">De inlogpagina kan niet worden geladen met de huidige proxyinstellingen. <ph name="GAIA_RELOAD_LINK_START" />Probeer opnieuw in te loggen<ph name="GAIA_RELOAD_LINK_END" /> of gebruik andere <ph name="PROXY_SETTINGS_LINK_START" />proxyinstellingen<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Alle netwerken</translation> <translation id="708060913198414444">Adres van audio k&opiëren</translation> @@ -5041,7 +5049,6 @@ <translation id="7099337801055912064">Grote PPD kan niet worden geladen. Maximum grootte is 250 KB.</translation> <translation id="7102687220333134671">Automatische updates zijn ingeschakeld</translation> <translation id="7102832101143475489">Er is een time-out voor het verzoek opgetreden</translation> -<translation id="7105390788077117391">USB-voorkeuren</translation> <translation id="710640343305609397">Netwerkinstellingen openen</translation> <translation id="7108338896283013870">Verbergen</translation> <translation id="7108668606237948702">Enter</translation> @@ -5071,7 +5078,6 @@ <translation id="7136694880210472378">Instellen als standaard</translation> <translation id="7136984461011502314">Welkom bij <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Er is een fout opgetreden. Probeer het later opnieuw door andere afbeeldingen te kiezen.</translation> -<translation id="7138678301420049075">Overige</translation> <translation id="713888829801648570">Sorry, je wachtwoord kan niet worden geverifieerd omdat je offline bent.</translation> <translation id="7140928199327930795">Geen andere beschikbare apparaten.</translation> <translation id="7141105143012495934">Inloggen is mislukt omdat je accountgegevens niet kunnen worden opgevraagd. Neem contact op met je beheerder of probeer het opnieuw.</translation> @@ -5178,6 +5184,7 @@ <translation id="7280649757394340890">Spraakinstellingen voor tekst-naar-spraak</translation> <translation id="7280877790564589615">Rechten gevraagd</translation> <translation id="7282992757463864530">Infobalk</translation> +<translation id="7284411326658527427">Elke persoon kan zijn of haar account personaliseren en gegevens privé houden.</translation> <translation id="7287143125007575591">Toegang geweigerd.</translation> <translation id="7287411021188441799">Standaard achtergrond herstellen</translation> <translation id="7288013116963835700">Linux verwijderen voor <ph name="DEVICE_TYPE" /></translation> @@ -5753,6 +5760,7 @@ <translation id="7963826112438303517">Je Assistent gebruikt deze opnamen en je spraakopdrachten om je spraakmodel te maken en te updaten. Dit wordt alleen opgeslagen op apparaten waarvoor je Voice Match hebt ingeschakeld. Je kunt je spraakactiviteit bekijken of het spraakmodel opnieuw trainen in de instellingen voor de Assistent.</translation> <translation id="7966241909927244760">Adres van afbeelding k&opiëren</translation> <translation id="7968072247663421402">Provideropties</translation> +<translation id="7968198493605442410">Link naar tekst kopiëren</translation> <translation id="7968742106503422125">Gegevens lezen en aanpassen die je kopieert en plakt</translation> <translation id="7968833647796919681">Het verzamelen van prestatiegegevens inschakelen</translation> <translation id="7968982339740310781">Details weergeven</translation> @@ -6133,6 +6141,7 @@ <translation id="8428213095426709021">Instellingen</translation> <translation id="8428271547607112339">Schoolaccount toevoegen</translation> <translation id="8428628598981198790">Je beveiligingssleutel kan niet worden gebruikt voor deze site</translation> +<translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">Je wordt uitgelogd over <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Tikken weergeven</translation> <translation id="8431909052837336408">Pincode van simkaart wijzigen</translation> @@ -6635,7 +6644,7 @@ <translation id="901668144954885282">Back-up maken in Google Drive</translation> <translation id="9018218886431812662">De installatie is voltooid</translation> <translation id="901834265349196618">e-mail</translation> -<translation id="9019062154811256702">Instellingen voor Automatisch aanvullen lezen en wijzigen</translation> +<translation id="9019062154811256702">Instellingen voor 'Automatisch invullen' lezen en wijzigen</translation> <translation id="9019894137004772119">Gebruik de locatie. Apps en services met locatierechten mogen de locatie van je apparaat gebruiken. Google kan periodiek locatiegegevens verzamelen en anoniem gebruiken om de locatienauwkeurigheid en locatiegebaseerde services te verbeteren.</translation> <translation id="9020362265352758658">4x</translation> <translation id="9021662811137657072">Virus gedetecteerd</translation> @@ -6675,7 +6684,7 @@ <translation id="9057354806206861646">Updateplanning</translation> <translation id="9062468308252555888">14x</translation> <translation id="9063208415146866933">Fout van regel <ph name="ERROR_LINE_START" /> tot en met <ph name="ERROR_LINE_END" /></translation> -<translation id="9064275926664971810">Automatisch aanvullen inschakelen om formulieren met één klik in te vullen</translation> +<translation id="9064275926664971810">Automatisch invullen inschakelen om formulieren met één klik in te vullen</translation> <translation id="9065203028668620118">Bewerken</translation> <translation id="9066773882585798925">Tekst hardop voorlezen</translation> <translation id="9066782832737749352">Tekst-naar-spraak</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index d0d4d1b..71a9eff 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">lese og endre alle dataene på datamaskinen din og nettstedene du besøker</translation> <translation id="1430915738399379752">Skriv ut</translation> <translation id="1431188203598586230">Siste programvareoppdatering</translation> +<translation id="1431402976894535801">Blokkér nettsteder fra å vite når du er til stede</translation> <translation id="1431432486300429272">Google kan bruke nettlesingsloggen din for å gi Søk og andre Google-tjenester et personlig preg. Du eller forelderen din kan når som helst endre dette på myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Administrer søkemotorer</translation> <translation id="1433811987160647649">Spør før bruk</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Ukjent enhet [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Denne eierkontoen må være den første påloggingskontoen i en multipåloggingsøkt.</translation> <translation id="150411034776756821">Fjern <ph name="SITE" /></translation> +<translation id="1504311855864906891">Få teksting for medieinnholdet ditt</translation> <translation id="1504551620756424144">Delte mapper er tilgjengelige i Windows i <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Søkemotor</translation> <translation id="1507170440449692343">Kameraet er blokkert for denne siden.</translation> @@ -566,6 +568,7 @@ <translation id="1651008383952180276">Du må skrive inn den samme passordfrasen to ganger</translation> <translation id="1652326691684645429">Slå på nærdeling</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Legg til skriveren i Google Cloud Print, slik at du kan skrive ut fra hvor som helst.}other{Legg til # skrivere i Google Cloud Print, slik at du kan skrive ut fra hvor som helst.}}</translation> +<translation id="1653575510930452864">Kopiér link til tekst</translation> <translation id="1656528038316521561">Bakgrunnsopasitet</translation> <translation id="1657406563541664238">Bidra til å gjøre <ph name="PRODUCT_NAME" /> bedre ved å sende brukerstatistikk og programstopprapporter til Google automatisk</translation> <translation id="1657937299377480641">For å logge på igjen for tilgang til læringsressurser, be en forelder om å gi deg tillatelse</translation> @@ -999,6 +1002,7 @@ <translation id="2178614541317717477">Sertifiseringsinstans-kompromiss</translation> <translation id="2182058453334755893">Kopiert til utklippstavlen</translation> <translation id="2184515124301515068">La Chrome velge når nettsteder kan spille av lyd (anbefalt)</translation> +<translation id="2187243482123994665">Brukertilstedeværelse</translation> <translation id="2187675480456493911">Synkronisert med andre enheter på kontoen. Innstillinger som endres av andre brukere, blir ikke synkronisert. <ph name="LINK_BEGIN" />Finn ut mer<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Feil ved import av tjenersertifikat</translation> <translation id="2187906491731510095">Utvidelser er oppdatert</translation> @@ -1187,7 +1191,6 @@ <translation id="2396783860772170191">Skriv inn firesifret PIN-kode (0000–9999)</translation> <translation id="2399939490305346086">Påloggingsdata på sikkerhetsnøkkelen</translation> <translation id="2400664245143453337">Umiddelbar oppdatering kreves</translation> -<translation id="2407481962792080328">Når du logger på Google-kontoen din, blir denne funksjonen slått på</translation> <translation id="2408018932941436077">Lagrer kortet</translation> <translation id="2408955596600435184">Skriv inn PIN-koden din</translation> <translation id="241082044617551207">Ukjent programtillegg</translation> @@ -1827,6 +1830,7 @@ <translation id="3163201441334626963">Ukjent produkt, <ph name="PRODUCT_ID" />, fra leverandøren <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Disse tjenestene bidrar til å holde dataene dine trygge og sikre. Du kan når som helst slå av disse funksjonene.</translation> <translation id="3164329792803560526">Deler denne fanen med <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Spør når nettsteder vil vite når du er til stede</translation> <translation id="3165390001037658081">Det kan hende at enkelte operatører blokkerer denne funksjonen.</translation> <translation id="316652501498554287">G Suite for utdanning-kontoer</translation> <translation id="3169472444629675720">Discover</translation> @@ -2942,6 +2946,7 @@ <translation id="4527186207340858212">Vil du opprette en ny profil for arbeid?</translation> <translation id="452750746583162491">Gjennomgå de synkroniserte dataene dine</translation> <translation id="4530494379350999373">Opprinnelse</translation> +<translation id="4531924570968473143">Hvem vil du legge til på denne <ph name="DEVICE_TYPE" />-enheten?</translation> <translation id="4532646538815530781">Dette nettstedet bruker bevegelsessensorer.</translation> <translation id="4533846798469727141">Si «Hey Google» nå</translation> <translation id="4533985347672295764">CPU-tid</translation> @@ -3061,6 +3066,7 @@ <translation id="4657810666108475055">Fanesøk</translation> <translation id="465878909996028221">Bare protokollene http, https og file støttes for viderekobling av nettleseren.</translation> <translation id="4659077111144409915">Primærkonto</translation> +<translation id="4659126640776004816">Når du logger på Google-kontoen din, blir denne funksjonen slått på.</translation> <translation id="4660476621274971848">Den forventede versjonen var «<ph name="EXPECTED_VERSION" />», men den faktiske versjonen var «<ph name="NEW_ID" />»</translation> <translation id="4660540330091848931">Endrer størrelsen</translation> <translation id="4661407454952063730">Appdata kan være alle slags data som er lagret i en app (basert på utviklerinnstillingene), inkludert data som kontakter, meldinger og bilder.</translation> @@ -3126,7 +3132,6 @@ <translation id="4750394297954878236">Forslag</translation> <translation id="475088594373173692">Første bruker</translation> <translation id="4751476147751820511">Bevegelses- eller lyssensorer</translation> -<translation id="4752124003533492687">Åpne Innstillinger for å koble til <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Stopp / last inn på nytt</translation> <translation id="4756388243121344051">&Logg</translation> <translation id="4759238208242260848">Nedlastinger</translation> @@ -3973,6 +3978,7 @@ <translation id="5804241973901381774">Tillatelser</translation> <translation id="5805697420284793859">Window Manager</translation> <translation id="5806773519584576205">0° (standard)</translation> +<translation id="5808664694611589238">{0,plural, =1{Lukk alle gjestevinduer}other{Lukk alle gjestevinduer}}</translation> <translation id="5810809306422959727">Denne kontoen er ikke kvalifisert for foreldrekontroll</translation> <translation id="5812674658566766066">Vis alle</translation> <translation id="5814126672212206791">Tilkoblingstype</translation> @@ -4430,6 +4436,7 @@ <translation id="6344170822609224263">få tilgang til liste over nettverkstilkoblinger</translation> <translation id="6344576354370880196">Lagrede skrivere</translation> <translation id="6345418402353744910">Brukernavnet og passordet ditt kreves for proxy-tjeneren <ph name="PROXY" />, slik at administratoren kan konfigurere nettverket ditt</translation> +<translation id="6345878117466430440">Merk som lest</translation> <translation id="6349101878882523185">Installer <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Synkroniseringen fungerer ikke. Prøv å logge av og på igjen.</translation> <translation id="6351063337294363751">Du kan slette nettleserloggen fra denne menyen</translation> @@ -5016,6 +5023,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 med RSA-kryptering</translation> <translation id="7075625805486468288">Administrer HTTPS/SSL-sertifikater og -innstillinger</translation> <translation id="7076293881109082629">Pålogging</translation> +<translation id="7076878155205969899">Kutt lyden</translation> <translation id="7077829361966535409">Påloggingssiden kunne ikke lastes inn med de gjeldende mellomtjenerinnstillingene. <ph name="GAIA_RELOAD_LINK_START" />Forsøk å logge deg på igjen<ph name="GAIA_RELOAD_LINK_END" /> eller endre <ph name="PROXY_SETTINGS_LINK_START" />mellomtjenerinnstillingene<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Alle nettverk</translation> <translation id="708060913198414444">K&opiér lydadressen</translation> @@ -5036,7 +5044,6 @@ <translation id="7099337801055912064">Kan ikke laste inn stor PPD. Maksimal størrelse er 250 kB.</translation> <translation id="7102687220333134671">Automatiske oppdateringer er slått på</translation> <translation id="7102832101143475489">Forespørselen ble tidsavbrutt</translation> -<translation id="7105390788077117391">USB-innstillinger</translation> <translation id="710640343305609397">Åpne nettverksinnstillingene</translation> <translation id="7108338896283013870">Skjul</translation> <translation id="7108668606237948702">Enter</translation> @@ -5066,7 +5073,6 @@ <translation id="7136694880210472378">Bruk som standard</translation> <translation id="7136984461011502314">Velkommen til <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Det er en feil. Prøv på nytt ved å velge andre bilder.</translation> -<translation id="7138678301420049075">Annet</translation> <translation id="713888829801648570">Beklager. Passordet ditt kunne ikke bekreftes fordi du ikke har nettilkobling.</translation> <translation id="7140928199327930795">Ingen andre tilgjengelige enheter.</translation> <translation id="7141105143012495934">Påloggingen mislyktes fordi kontoopplysningene dine ikke kunne hentes ut. Kontakt administratoren din, eller prøv på nytt.</translation> @@ -5173,6 +5179,7 @@ <translation id="7280649757394340890">Stemmeinnstillinger for tekst til tale</translation> <translation id="7280877790564589615">Tillatelse forespurt</translation> <translation id="7282992757463864530">Informasjonsfelt</translation> +<translation id="7284411326658527427">Hver person kan gi kontoen sin personlig preg og holde dataene sine private.</translation> <translation id="7287143125007575591">Ingen tilgang.</translation> <translation id="7287411021188441799">Gjenopprett standardbakgrunnen</translation> <translation id="7288013116963835700">Fjern Linux for <ph name="DEVICE_TYPE" /></translation> @@ -5749,6 +5756,7 @@ <translation id="7963826112438303517">Assistenten bruker disse opptakene og uttalte forespørsler fra deg for å opprette og oppdatere stemmemodellen din, som bare lagres på enheter der du har slått på Voice Match. Du kan se taleaktivitet eller lære den opp på nytt i Assistent-innstillingene.</translation> <translation id="7966241909927244760">K&opiér bildeadressen</translation> <translation id="7968072247663421402">Leverandøralternativer</translation> +<translation id="7968198493605442410">Kopiér link til tekst</translation> <translation id="7968742106503422125">lese og endre data du kopierer og limer inn</translation> <translation id="7968833647796919681">Aktiverer innsamling av ytelsesdata</translation> <translation id="7968982339740310781">Se detaljer</translation> @@ -6129,6 +6137,7 @@ <translation id="8428213095426709021">Innstillinger</translation> <translation id="8428271547607112339">Legg til en skolekonto</translation> <translation id="8428628598981198790">Sikkerhetsnøkkelen din kan ikke brukes på dette nettstedet</translation> +<translation id="8428634594422941299">Greit</translation> <translation id="84297032718407999">Du logges av om <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Vis trykk</translation> <translation id="8431909052837336408">Endre PIN-koden for SIM-kortet</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb index adc8280..e27c0b3 100644 --- a/chrome/app/resources/generated_resources_or.xtb +++ b/chrome/app/resources/generated_resources_or.xtb
@@ -426,6 +426,7 @@ <translation id="1500297251995790841">ଅଜଣା ଡିଭାଇସ୍ [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">ଏହି ମାଲିକଙ୍କ ଆକାଉଣ୍ଟଟିକୁ ସର୍ବପ୍ରଥମେ ସାଇନ୍ ଇନ୍ କରିଥିବା ଆକାଉଣ୍ଟ ଭାବରେ ରଖିବା ଆବଶ୍ୟକ ଅଟେ৷</translation> <translation id="150411034776756821"><ph name="SITE" />କୁ କାଢ଼ି ଦିଅନ୍ତୁ</translation> +<translation id="1504311855864906891">ଆପଣଙ୍କ ମିଡିଆ ପାଇଁ କ୍ୟାପସନଗୁଡ଼ିକ ପ୍ରାପ୍ତ କରନ୍ତୁ</translation> <translation id="1504551620756424144">ସେୟାର୍ କରାଯାଇଥିବା ଫୋଲ୍ଡରଗୁଡ଼ିକ Windowsରେ <ph name="BASE_DIR" />ରେ ଉପଲବ୍ଧ ଅଛି।</translation> <translation id="1506061864768559482">ସନ୍ଧାନ ଇଞ୍ଜିନ୍</translation> <translation id="1507170440449692343">ଏହି ପୃଷ୍ଠାରୁ ଆପଣଙ୍କର କ୍ୟାମେରା ଆକ୍ସେସ୍ କରିବାକୁ ଅବରୋଧ କରାଯାଇଛି।</translation> @@ -1184,7 +1185,6 @@ <translation id="2396783860772170191">4 ଅକ୍ଷର ବିଶିଷ୍ଟ ପିନ୍ ଲେଖନ୍ତୁ (0000-9999)</translation> <translation id="2399939490305346086">ସୁରକ୍ଷା କୀ ସାଇନ୍-ଇନ୍ ଡାଟା</translation> <translation id="2400664245143453337">ତୁରନ୍ତ ଅପଡେଟ୍ ଆବଶ୍ୟକ</translation> -<translation id="2407481962792080328">ଆପଣ ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟରେ ସାଇନ୍ ଇନ୍ କଲେ ଏହି ଫିଚର୍ ଚାଲୁ ହୁଏ</translation> <translation id="2408018932941436077">କାର୍ଡ ସେଭ୍ କରାଯାଉଛି</translation> <translation id="2408955596600435184">ଆପଣଙ୍କର PIN ଲେଖନ୍ତୁ</translation> <translation id="241082044617551207">ଅଜଣା ପ୍ଲଗ୍-ଇନ୍</translation> @@ -3058,6 +3058,7 @@ <translation id="4657810666108475055">ସନ୍ଧାନ ଟାବ୍</translation> <translation id="465878909996028221">କେବଳ http, ବ୍ରାଉଜର୍ ରିଡାଇରେକ୍ଟ ପାଇଁ https ଏବଂ ଫାଇଲ୍ ପ୍ରୋଟୋକଲ୍ଗୁଡ଼ିକ ସମର୍ଥିତ ଅଟେ।</translation> <translation id="4659077111144409915">ପ୍ରାଥମିକ ଆକାଉଣ୍ଟ</translation> +<translation id="4659126640776004816">ଆପଣ ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟରେ ସାଇନ୍ ଇନ୍ କଲେ ଏହି ଫିଚର୍ ଚାଲୁ ହୁଏ।</translation> <translation id="4660476621274971848">ଆଶା କରାଯାଉଥିବା ସଂସ୍କରଣ "<ph name="EXPECTED_VERSION" />" ଅଛି, କିନ୍ତୁ ସଂସ୍କରଣ "<ph name="NEW_ID" />" ଥିଲା</translation> <translation id="4660540330091848931">ଆକାର ପରିବର୍ତ୍ତନ କରାଯାଉଛି</translation> <translation id="4661407454952063730">ଆପ୍ ଡାଟା, ଯୋଗାଯୋଗ, ମେସେଜ୍ ଓ ଫଟୋଗୁଡ଼ିକ ପରି ଡାଟା ସମେତ ଏକ ଆପ୍ ସେଭ୍ କରିଥିବା (ଡେଭଲପର୍ ସେଟିଂସ୍ ଉପରେ ଆଧାରିତ) ଯେ କୌଣସି ଡାଟା ହୋଇପାରିବ।</translation> @@ -3123,7 +3124,6 @@ <translation id="4750394297954878236">ପରାମର୍ଶ</translation> <translation id="475088594373173692">ପ୍ରଥମ ଉପଯୋଗକର୍ତ୍ତା</translation> <translation id="4751476147751820511">ମୋସନ୍ କିମ୍ବା ଲାଇଟ୍ ସେନ୍ସର୍</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" />କୁ ସଂଯୋଗ କରିବା ପାଇଁ ସେଟିଂସ୍ ଖୋଲନ୍ତୁ</translation> <translation id="4756378406049221019">ବନ୍ଦ/ପୁଣି ଲୋଡ୍ କରନ୍ତୁ</translation> <translation id="4756388243121344051">&ଇତିବୃତ୍ତି</translation> <translation id="4759238208242260848">ଡାଉନଲୋଡସମୂହ</translation> @@ -5015,6 +5015,7 @@ <translation id="7075513071073410194">RSA ଏନ୍କ୍ରିପ୍ସନ୍ ସହିତ PKCS #1 MD5</translation> <translation id="7075625805486468288">HTTPS/SSL ସାର୍ଟିଫିକେଟ୍ସ ଏବଂ ସେଟିଂସ୍ ପରିଚାଳନା କରନ୍ତୁ</translation> <translation id="7076293881109082629">ସାଇନ୍ ଇନ୍ କରୁଛି</translation> +<translation id="7076878155205969899">ସାଉଣ୍ଡକୁ ମ୍ୟୁଟ୍ କରନ୍ତୁ</translation> <translation id="7077829361966535409">ସାମ୍ପ୍ରତିକ ପ୍ରକ୍ସି ସେଟିଂସ୍ ବ୍ୟବହାର କରି ସାଇନ୍-ଇନ୍ ପୃଷ୍ଠା ଲୋଡ୍ କରିବାରେ ବିଫଳ ହେଲା। ଦୟାକରି <ph name="GAIA_RELOAD_LINK_START" />ପୁଣି ସାଇନ୍ ଇନ୍ କରିବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ<ph name="GAIA_RELOAD_LINK_END" /> କିମ୍ବା ଭିନ୍ନ <ph name="PROXY_SETTINGS_LINK_START" />ପ୍ରକ୍ସି ସେଟିଂସ୍<ph name="PROXY_SETTINGS_LINK_END" /> ବ୍ୟବହାର କରନ୍ତୁ।</translation> <translation id="7078120482318506217">ସମସ୍ତ ନେଟ୍ୱାର୍କ</translation> <translation id="708060913198414444">ଅଡିଓ ଠିକଣା କ&ପି କରନ୍ତୁ</translation> @@ -5035,7 +5036,6 @@ <translation id="7099337801055912064">ବିଶାଳ PPDକୁ ଲୋଡ୍ କରାଯାଇପାରିବ ନାହିଁ। ସର୍ବାଧିକ ଆକାର 250 kB ଅଟେ।</translation> <translation id="7102687220333134671">ସ୍ୱଚାଳିତ ଅପ୍ଡେଟ୍ ଚାଲୁ ଅଛି</translation> <translation id="7102832101143475489">ଅନୁରୋଧର ସମୟ ସମାପ୍ତ ହୋଇଯାଇଛି</translation> -<translation id="7105390788077117391">USB ପ୍ରାଥମିକତାଗୁଡ଼ିକ</translation> <translation id="710640343305609397">ନେଟୱାର୍କ ସେଟିଂସ୍ ଖୋଲନ୍ତୁ</translation> <translation id="7108338896283013870">ଲୁଚାନ୍ତୁ</translation> <translation id="7108668606237948702">ଏଣ୍ଟର୍</translation> @@ -5065,7 +5065,6 @@ <translation id="7136694880210472378">ଡିଫଲ୍ଟ କରନ୍ତୁ</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> କୁ ସ୍ଵାଗତ</translation> <translation id="7136993520339022828">ଗୋଟିଏ ତ୍ରୁଟି ଦେଖାଯାଇଛି। ଦୟାକରି ଅନ୍ୟ ଛବିଗୁଡ଼ିକୁ ବାଛି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> -<translation id="7138678301420049075">ଅନ୍ୟ</translation> <translation id="713888829801648570">କ୍ଷମା କରିବେ, ଆପଣ ଅଫଲାଇନ୍ ଥିବା କାରଣରୁ ଆପଣଙ୍କର ପାସ୍ୱାର୍ଡକୁ ଯାଞ୍ଚ କରାଯାଇପାରିଲା ନାହିଁ।</translation> <translation id="7140928199327930795">କୌଣସି ଅନ୍ୟ ଉପଲବ୍ଧ ଡିଭାଇସ୍ ନାହିଁ।</translation> <translation id="7141105143012495934">ଆପଣଙ୍କର ଆକାଉଣ୍ଟ ବିବରଣୀ ପୁନରୁଦ୍ଧାର ହୋଇନଥିବାରୁ ସାଇନ୍ ଇନ୍ ବିଫଳ ହୋଇଛି। ଦୟାକରି ଆପଣଙ୍କ ବ୍ୟବସ୍ଥାପକଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ ବା ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb index 232b952..841cebe0b 100644 --- a/chrome/app/resources/generated_resources_pa.xtb +++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">ਅਗਿਆਤ ਡੀਵਾਈਸ [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">ਇਹ ਮਾਲਕ ਖਾਤਾ ਇੱਕ ਬਹੁ-ਗਿਣਤੀ ਸਾਈਨ-ਇਨ ਸੈਸ਼ਨ ਵਿੱਚ ਸਭ ਤੋਂ ਪਹਿਲਾਂ ਸਾਈਨ-ਇਨ ਕੀਤਾ ਖਾਤਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।</translation> <translation id="150411034776756821"><ph name="SITE" /> ਨੂੰ ਹਟਾਓ</translation> +<translation id="1504311855864906891">ਆਪਣੇ ਮੀਡੀਆ ਲਈ ਸੁਰਖੀਆਂ ਪ੍ਰਾਪਤ ਕਰੋ</translation> <translation id="1504551620756424144">ਸਾਂਝੇ ਕੀਤੇ ਫੋਲਡਰ Windows ਵਿੱਚ <ph name="BASE_DIR" /> 'ਤੇ ਉਪਲਬਧ ਹਨ।</translation> <translation id="1506061864768559482">ਖੋਜ ਇੰਜਣ</translation> <translation id="1507170440449692343">ਇਹ ਸਫ਼ਾ ਤੁਹਾਡੇ ਕੈਮਰੇ ਤੱਕ ਪਹੁੰਚਣ ਤੋਂ ਬਲੌਕ ਕੀਤਾ ਗਿਆ ਹੈ।</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">4 ਅੰਕੀ ਪਿੰਨ ਦਾਖਲ ਕਰੋ (0000-9999)</translation> <translation id="2399939490305346086">ਸੁਰੱਖਿਆ ਕੁੰਜੀ ਸਾਈਨ-ਇਨ ਡਾਟਾ</translation> <translation id="2400664245143453337">ਤੁਰੰਤ ਅੱਪਡੇਟ ਕਰਨ ਦੀ ਲੋੜ ਹੈ</translation> -<translation id="2407481962792080328">ਜਦੋਂ ਤੁਸੀਂ ਆਪਣੇ Google ਖਾਤੇ ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰਦੇ ਹੋ, ਤਾਂ ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਚਾਲੂ ਹੋ ਜਾਂਦੀ ਹੈ</translation> <translation id="2408018932941436077">ਕਾਰਡ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</translation> <translation id="2408955596600435184">ਆਪਣਾ PIN ਦਾਖਲ ਕਰੋ</translation> <translation id="241082044617551207">ਅਗਿਆਤ ਪਲੱਗਇਨ</translation> @@ -1286,6 +1286,7 @@ <translation id="2505127913256479918">ਇਹ ਨਿਗਰਾਨੀ ਕੀਤਾ ਖਾਤਾ ਜਲਦੀ ਹੀ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{ਸਕ੍ਰੀਨ #}one{ਸਕ੍ਰੀਨ #}other{ਸਕ੍ਰੀਨ #}}</translation> <translation id="2505402373176859469"><ph name="RECEIVED_AMOUNT" /> ਦਾ <ph name="TOTAL_SIZE" /></translation> +<translation id="250642123108534012">ਉਹ ਡੀਵਾਈਸ ਜੋ ਉਹਨਾਂ ਦੇ ਡੀਵਾਈਸ 'ਤੇ 'ਨਜ਼ਦੀਕੀ ਸਾਂਝ' ਖੁੱਲ੍ਹੀ ਹੋਣ 'ਤੇ ਤੁਹਾਡੇ ਨੇੜੇ ਹੁੰਦੇ ਹਨ</translation> <translation id="250704661983564564">ਡਿਸਪਲੇ ਦਾ ਪ੍ਰਬੰਧ</translation> <translation id="2507253002925770350">ਟਿਕਟ ਹਟਾਈ ਗਈ</translation> <translation id="2507397597949272797"><ph name="NAME" /> ਰੋਕਿਆ ਗਿਆ</translation> @@ -3063,6 +3064,7 @@ <translation id="4657810666108475055">ਟੈਬ ਖੋਜ</translation> <translation id="465878909996028221">ਬ੍ਰਾਊਜ਼ਰ ਰੀਡਾਇਰੈਕਟਾਂ ਲਈ ਸਿਰਫ਼ http, https ਅਤੇ ਫ਼ਾਈਲ ਪ੍ਰੋਟੋਕੋਲ ਸਮਰਥਿਤ ਹਨ।</translation> <translation id="4659077111144409915">ਮੁੱਖ ਖਾਤਾ</translation> +<translation id="4659126640776004816">ਜਦੋਂ ਤੁਸੀਂ ਆਪਣੇ Google ਖਾਤੇ ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰਦੇ ਹੋ, ਤਾਂ ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਚਾਲੂ ਹੋ ਜਾਂਦੀ ਹੈ।</translation> <translation id="4660476621274971848">ਸੰਭਾਵਿਤ ਵਰਜਨ "<ph name="EXPECTED_VERSION" />" ਹੈ, ਪਰ ਵਰਜਨ "<ph name="NEW_ID" />" ਸੀ</translation> <translation id="4660540330091848931">ਆਕਾਰ ਨੂੰ ਬਦਲਿਆ ਜਾ ਰਿਹਾ ਹੈ</translation> <translation id="4661407454952063730">ਐਪ ਡਾਟਾ ਕਿਸੇ ਐਪ ਵੱਲੋਂ (ਵਿਕਾਸਕਾਰ ਸੈਟਿੰਗਾਂ ਦੇ ਆਧਾਰ 'ਤੇ) ਰੱਖਿਅਤ ਕੀਤਾ ਕੋਈ ਵੀ ਡਾਟਾ ਹੋ ਸਕਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਸੰਪਰਕਾਂ, ਸੁਨੇਹਿਆਂ ਅਤੇ ਫ਼ੋਟੋਆਂ ਵਰਗਾ ਡਾਟਾ ਸ਼ਾਮਲ ਹੈ।</translation> @@ -3128,7 +3130,6 @@ <translation id="4750394297954878236">ਸੁਝਾਅ</translation> <translation id="475088594373173692">ਪਹਿਲਾ ਵਰਤੋਂਕਾਰ</translation> <translation id="4751476147751820511">ਗਤੀ ਜਾਂ ਰੋਸ਼ਨੀ ਦੇ ਸੈਂਸਰ</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" /> ਕਨੈਕਟ ਕਰਨ ਲਈ ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ</translation> <translation id="4756378406049221019">ਬੰਦ ਕਰੋ/ਮੁੜ-ਲੋਡ ਕਰੋ</translation> <translation id="4756388243121344051">&ਇਤਿਹਾਸ</translation> <translation id="4759238208242260848">ਡਾਊਨਲੋਡਸ</translation> @@ -3136,6 +3137,7 @@ <translation id="4762718786438001384">ਡੀਵਾਈਸ 'ਤੇ ਡਿਸਕ ਜਗ੍ਹਾ ਬਹੁਤ ਘੱਟ ਹੈ</translation> <translation id="4763408175235639573">ਜਦੋਂ ਤੁਸੀਂ ਇਸ ਪੰਨੇ ਨੂੰ ਦੇਖਿਆ ਸੀ ਤਾਂ ਅੱਗੇ ਦਿੱਤੀਆਂ ਕੁਕੀਜ਼ ਸੈੱਟ ਕੀਤੀਆਂ ਹੋਈਆਂ ਸਨ</translation> <translation id="4765582662863429759">'Android ਸੁਨੇਹੇ' ਨੂੰ ਤੁਹਾਡੇ ਫ਼ੋਨ ਦੇ ਲਿਖਤੀ ਸੁਨੇਹਿਆਂ ਨੂੰ ਤੁਹਾਡੀ Chromebook 'ਤੇ ਦਿਖਾਉਣ ਦਿਓ</translation> +<translation id="476598255842811483">ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਆਪਣੇ ਡੀਵਾਈਸ 'ਤੇ 'ਨਜ਼ਦੀਕੀ ਸਾਂਝ' ਨਹੀਂ ਖੋਲ੍ਹਦੇ, ਉਦੋਂ ਤੱਕ ਕੋਈ ਵੀ ਡਾਟਾ ਸਾਂਝਾ ਨਹੀਂ ਕਰ ਸਕਦਾ</translation> <translation id="4768332406694066911">ਤੁਹਾਡੇ ਕੋਲ ਇਹਨਾਂ ਸੰਸਥਾਵਾਂ ਦੇ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਹਨ ਜੋ ਤੁਹਾਡੀ ਪਛਾਣ ਕਰਦੇ ਹਨ</translation> <translation id="477647109558161443">ਡੈਸਕਟਾਪ ਸ਼ਾਰਟਕੱਟ ਬਣਾਓ</translation> <translation id="4776917500594043016"><ph name="USER_EMAIL_ADDRESS" /> ਲਈ ਪਾਸਵਰਡ</translation> @@ -5017,6 +5019,7 @@ <translation id="7075513071073410194">RSA ਐਨਕ੍ਰਿਪਸ਼ਨ ਨਾਲ PKCS #1 MD5</translation> <translation id="7075625805486468288">HTTPS/SSL ਪ੍ਰਮਾਣ-ਪੱਤਰਾਂ ਅਤੇ ਸੈਟਿੰਗਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ</translation> <translation id="7076293881109082629">ਸਾਈਨ ਇਨ ਕਰ ਰਿਹਾ ਹੈ</translation> +<translation id="7076878155205969899">ਧੁਨੀ ਮਿਊਟ ਕਰੋ</translation> <translation id="7077829361966535409">ਸਾਈਨ-ਇਨ ਪੰਨਾ ਵਰਤਮਾਨ ਪ੍ਰੌਕਸੀ ਸੈਟਿੰਗਾਂ ਦੀ ਵਰਤੋਂ ਹੋਏ ਲੋਡ ਕਰਨ ਵਿੱਚ ਅਸਫਲ ਰਿਹਾ। ਕਿਰਪਾ ਕਰਕੇ <ph name="GAIA_RELOAD_LINK_START" />ਦੁਬਾਰਾ ਸਾਈਨ-ਇਨ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ<ph name="GAIA_RELOAD_LINK_END" /> ਜਾਂ ਵੱਖ-ਵੱਖ <ph name="PROXY_SETTINGS_LINK_START" />ਪ੍ਰੌਕਸੀ ਸੈਟਿੰਗਾਂ<ph name="PROXY_SETTINGS_LINK_END" /> ਦੀ ਵਰਤੋਂ ਕਰੋ।</translation> <translation id="7078120482318506217">ਸਾਰੇ ਨੈੱਟਵਰਕ</translation> <translation id="708060913198414444">ਆਡੀਓ ਪਤਾ ਕਾ&ਪੀ ਕਰੋ</translation> @@ -5037,7 +5040,6 @@ <translation id="7099337801055912064">ਵੱਡੇ ਆਕਾਰ ਦਾ PPD ਲੋਡ ਨਹੀਂ ਕਰ ਸਕਦੇ। ਅਧਿਕਤਮ ਆਕਾਰ 250 KB ਹੈ।</translation> <translation id="7102687220333134671">ਸਵੈਚਲਿਤ ਅੱਪਡੇਟ ਚਾਲੂ ਹਨ</translation> <translation id="7102832101143475489">ਬੇਨਤੀ ਦੀ ਸਮਾਂ-ਸਮਾਪਤੀ</translation> -<translation id="7105390788077117391">USB ਤਰਜੀਹਾਂ</translation> <translation id="710640343305609397">ਨੈੱਟਵਰਕ ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ</translation> <translation id="7108338896283013870">ਲੁਕਾਓ</translation> <translation id="7108668606237948702">ਦਰਜ ਕਰੋ</translation> @@ -5067,7 +5069,6 @@ <translation id="7136694880210472378">ਪੂਰਵ-ਨਿਰਧਾਰਤ ਬਣਾਓ</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> ਵਿੱਚ ਸੁਆਗਤ ਹੈ</translation> <translation id="7136993520339022828">ਕੋਈ ਗੜਬੜ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਹੋਰ ਚਿੱਤਰਾਂ ਦੀ ਚੋਣ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> -<translation id="7138678301420049075">ਹੋਰ</translation> <translation id="713888829801648570">ਮਾਫ਼ ਕਰਨਾ, ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਪ੍ਰਮਾਣਿਤ ਨਹੀਂ ਕਰ ਸਕਿਆ ਕਿਉਂਕਿ ਤੁਸੀਂ ਆਫ਼ਲਾਈਨ ਹੋ।</translation> <translation id="7140928199327930795">ਕੋਈ ਹੋਰ ਉਪਲਬਧ ਡਿਵਾਈਸਾਂ ਨਹੀਂ।</translation> <translation id="7141105143012495934">ਸਾਈਨ-ਇਨ ਅਸਫਲ ਹੋਇਆ ਕਿਉਂਕਿ ਤੁਹਾਡੇ ਖਾਤੇ ਦਾ ਵੇਰਵਿਆਂ ਨੂੰ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ। ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ ਜਾਂ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> @@ -5666,6 +5667,7 @@ <translation id="786073089922909430">ਸੇਵਾ: <ph name="ARC_PROCESS_NAME" /></translation> <translation id="7861215335140947162">&ਡਾਊਨਲੋਡਸ</translation> <translation id="7864539943188674973">Bluetooth ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ</translation> +<translation id="7866352732146932341">ਉਹ ਡੀਵਾਈਸ ਜੋ ਤੁਹਾਡੇ ਡੀਵਾਈਸ 'ਤੇ 'ਨਜ਼ਦੀਕੀ ਸਾਂਝ' ਖੁੱਲ੍ਹੀ ਹੋਣ 'ਤੇ ਤੁਹਾਡੇ ਨੇੜੇ ਹੁੰਦੇ ਹਨ</translation> <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - ਜੋੜਾਬੱਧ ਕੀਤੀ ਗਈ</translation> <translation id="7870730066603611552">ਸੈੱਟਅੱਪ ਦੇ ਬਾਅਦ ਸਮਕਾਲੀਕਰਨ ਵਿਕਲਪਾਂ ਦੀ ਸਮੀਖਿਆ ਕਰੋ</translation> <translation id="7870790288828963061">ਨਵੇਂ ਵਰਜਨ ਵਾਲੀਆਂ ਕੋਈ ਕਿਓਸਕ ਐਪਾਂ ਨਹੀਂ ਮਿਲਿਆਂ। ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਕੁਝ ਨਹੀਂ। ਕਿਰਪਾ ਕਰਕੇ USB ਸਟਿੱਕ ਹਟਾਓ।</translation> @@ -6126,6 +6128,7 @@ <translation id="8428213095426709021">ਸੈਟਿੰਗਾਂ</translation> <translation id="8428271547607112339">ਸਕੂਲੀ ਖਾਤਾ ਸ਼ਾਮਲ ਕਰੋ</translation> <translation id="8428628598981198790">ਤੁਹਾਡੀ ਸੁਰੱਖਿਆ ਕੁੰਜੀ ਇਸ ਸਾਈਟ ਨਾਲ ਵਰਤੀ ਨਹੀਂ ਜਾ ਸਕਦੀ</translation> +<translation id="8428634594422941299">ਸਮਝ ਲਿਆ</translation> <translation id="84297032718407999">ਤੁਹਾਨੂੰ <ph name="LOGOUT_TIME_LEFT" /> ਵਿੱਚ ਸਾਈਨ-ਆਊਟ ਕੀਤਾ ਜਾਵੇਗਾ</translation> <translation id="8431190899827883166">ਟੈਪਾਂ ਦਿਖਾਓ</translation> <translation id="8431909052837336408">ਸਿਮ PIN ਬਦਲੋ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index 6cf4cc8d..1167460 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Odczyt i zmiana wszystkich Twoich danych na komputerze i otwieranych stronach</translation> <translation id="1430915738399379752">Drukuj</translation> <translation id="1431188203598586230">Ostatnia aktualizacja oprogramowania</translation> +<translation id="1431402976894535801">Nie pozwalaj stronom sprawdzać, czy aktualnie używasz urządzenia</translation> <translation id="1431432486300429272">Google może korzystać z Twojej historii przeglądania, by dostosowywać wyniki wyszukiwania i działanie innych usług. Ty lub Twój rodzic w dowolnej chwili możecie to zmienić na myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Zarządzaj wyszukiwarkami</translation> <translation id="1433811987160647649">Pytaj przed uzyskaniem dostępu</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Nieznane urządzenie [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">W sesji wielokrotnego logowania trzeba w pierwszej kolejności zalogować się na konto tego właściciela.</translation> <translation id="150411034776756821">Usuń <ph name="SITE" /></translation> +<translation id="1504311855864906891">Dodaj napisy do multimediów</translation> <translation id="1504551620756424144">Foldery udostępnione są dostępne w systemie Windows w folderze <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Wyszukiwarka</translation> <translation id="1507170440449692343">Ta strona ma zablokowany dostęp do kamery.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Musisz dwukrotnie wpisać to samo hasło</translation> <translation id="1652326691684645429">Włącz Udostępnianie w pobliżu</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Dodaj drukarkę do Google Cloud Print, by móc drukować z dowolnego miejsca.}few{Dodaj # drukarki do Google Cloud Print, by móc drukować z dowolnego miejsca.}many{Dodaj # drukarek do Google Cloud Print, by móc drukować z dowolnego miejsca.}other{Dodaj # drukarki do Google Cloud Print, by móc drukować z dowolnego miejsca.}}</translation> +<translation id="1653575510930452864">Skopiuj link do tekstu</translation> <translation id="1656528038316521561">Przezroczystość tła</translation> <translation id="1657406563541664238">Pomóż ulepszyć <ph name="PRODUCT_NAME" />, przesyłając do Google statystyki użytkowania i raporty o awariach</translation> <translation id="1657937299377480641">Aby zalogować się ponownie na konto umożliwiające dostęp do zasobów edukacyjnych, poproś o zgodę rodziców</translation> @@ -998,6 +1001,7 @@ <translation id="2178614541317717477">Naruszenie bezpieczeństwa urzędu certyfikacji</translation> <translation id="2182058453334755893">Skopiowano do schowka</translation> <translation id="2184515124301515068">Niech Chrome decyduje, które strony mogą odtwarzać dźwięk (zalecane)</translation> +<translation id="2187243482123994665">Obecność użytkownika</translation> <translation id="2187675480456493911">Sieć jest zsynchronizowana ze wszystkimi urządzeniami na Twoim koncie. Ustawienia zmienione przez innych użytkowników nie zostaną zsynchronizowane. <ph name="LINK_BEGIN" />Więcej informacji<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Błąd importowania certyfikatu serwera</translation> <translation id="2187906491731510095">Rozszerzenia zaktualizowane</translation> @@ -1186,7 +1190,6 @@ <translation id="2396783860772170191">Wpisz 4-cyfrowy kod PIN (0000–9999)</translation> <translation id="2399939490305346086">Dane logowania na kluczu bezpieczeństwa</translation> <translation id="2400664245143453337">Wymagana natychmiastowa aktualizacja</translation> -<translation id="2407481962792080328">Ta funkcja zostanie włączona, gdy zalogujesz się na swoje konto Google</translation> <translation id="2408018932941436077">Zapisuję kartę</translation> <translation id="2408955596600435184">Wpisz kod PIN</translation> <translation id="241082044617551207">Nieznana wtyczka</translation> @@ -1826,6 +1829,7 @@ <translation id="3163201441334626963">Nieznany produkt <ph name="PRODUCT_ID" />, którego producent to <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Te usługi pomagają chronić Twoje dane. Te funkcje możesz w dowolnym momencie wyłączyć.</translation> <translation id="3164329792803560526">Udostępniam tę kartę aplikacji <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Pytaj, gdy strona chce wiedzieć, kiedy używasz urządzenia</translation> <translation id="3165390001037658081">Niektórzy operatorzy mogą blokować tę funkcję.</translation> <translation id="316652501498554287">Konta G Suite dla Szkół i Uczelni</translation> <translation id="3169472444629675720">Discover</translation> @@ -2943,6 +2947,7 @@ <translation id="4527186207340858212">Utworzyć nowy profil do pracy?</translation> <translation id="452750746583162491">Przejrzyj synchronizowane dane</translation> <translation id="4530494379350999373">Pochodzenie</translation> +<translation id="4531924570968473143">Kogo chcesz dodać na tym urządzeniu z <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Ta strona używa czujników ruchu.</translation> <translation id="4533846798469727141">Teraz powiedz „Hej Google”</translation> <translation id="4533985347672295764">Czas pracy procesora</translation> @@ -3062,6 +3067,7 @@ <translation id="4657810666108475055">Wyszukiwanie kart</translation> <translation id="465878909996028221">Przekierowania przeglądarki działają tylko z protokołami http, https i file.</translation> <translation id="4659077111144409915">Konto główne</translation> +<translation id="4659126640776004816">Ta funkcja zostanie włączona, gdy zalogujesz się na swoje konto Google.</translation> <translation id="4660476621274971848">To jest wersja „<ph name="NEW_ID" />”, a oczekiwano wersji „<ph name="EXPECTED_VERSION" />”</translation> <translation id="4660540330091848931">Zmieniam rozmiar</translation> <translation id="4661407454952063730">Dane aplikacji mogą obejmować dowolne informacje zapisane przez aplikację (w zależności od ustawień określonych przez dewelopera) – w tym dane takie jak kontakty, wiadomości i zdjęcia.</translation> @@ -3127,7 +3133,6 @@ <translation id="4750394297954878236">Sugestie</translation> <translation id="475088594373173692">Pierwszy użytkownik</translation> <translation id="4751476147751820511">Czujniki ruchu lub światła</translation> -<translation id="4752124003533492687">Otwórz Ustawienia, by nawiązać połączenie z urządzeniem <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Zatrzymaj / załaduj ponownie</translation> <translation id="4756388243121344051">&Historia</translation> <translation id="4759238208242260848">Pobrane pliki</translation> @@ -3974,6 +3979,7 @@ <translation id="5804241973901381774">Uprawnienia</translation> <translation id="5805697420284793859">Menedżer okien</translation> <translation id="5806773519584576205">0° (domyślnie)</translation> +<translation id="5808664694611589238">{0,plural, =1{Zamknij okno gościa}few{Zamknij okna gościa}many{Zamknij okna gościa}other{Zamknij okna gościa}}</translation> <translation id="5810809306422959727">To konto nie może podlegać kontroli rodzicielskiej</translation> <translation id="5812674658566766066">Rozwiń wszystko</translation> <translation id="5814126672212206791">Typ połączenia</translation> @@ -4431,6 +4437,7 @@ <translation id="6344170822609224263">Dostęp do listy połączeń sieciowych</translation> <translation id="6344576354370880196">Zapisane drukarki</translation> <translation id="6345418402353744910">Serwer proxy <ph name="PROXY" /> wymaga Twojej nazwy użytkownika i hasła, by administrator mógł skonfigurować Twoją sieć</translation> +<translation id="6345878117466430440">Oznacz jako przeczytane</translation> <translation id="6349101878882523185">Zainstaluj aplikację <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Synchronizacja nie działa. Wyloguj się i zaloguj się ponownie.</translation> <translation id="6351063337294363751">Używając tego menu, możesz wyczyścić dane przeglądania</translation> @@ -5017,6 +5024,7 @@ <translation id="7075513071073410194">PKCS #1, MD5 z szyfrowaniem RSA</translation> <translation id="7075625805486468288">Zarządzanie certyfikatami i ustawieniami HTTPS/SSL</translation> <translation id="7076293881109082629">Loguję</translation> +<translation id="7076878155205969899">Wycisz dźwięk</translation> <translation id="7077829361966535409">Nie można wczytać strony logowania przy bieżących ustawieniach serwera proxy. <ph name="GAIA_RELOAD_LINK_START" />Zaloguj się jeszcze raz<ph name="GAIA_RELOAD_LINK_END" /> lub użyj innych <ph name="PROXY_SETTINGS_LINK_START" />ustawień serwera proxy<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Wszystkie sieci</translation> <translation id="708060913198414444">K&opiuj adres audio</translation> @@ -5037,7 +5045,6 @@ <translation id="7099337801055912064">Nie można załadować pliku PPD, bo jest zbyt duży. Maksymalny rozmiar to 250 kB.</translation> <translation id="7102687220333134671">Automatyczne aktualizacje są włączone</translation> <translation id="7102832101143475489">Żądanie przekroczyło limit czasu</translation> -<translation id="7105390788077117391">Ustawienia USB</translation> <translation id="710640343305609397">Otwórz ustawienia sieci</translation> <translation id="7108338896283013870">Ukryj</translation> <translation id="7108668606237948702">wpisz</translation> @@ -5067,7 +5074,6 @@ <translation id="7136694880210472378">Ustaw jako domyślną</translation> <translation id="7136984461011502314">Witamy w przeglądarce <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Wystąpił błąd. Spróbuj jeszcze raz, wybierając inne obrazy.</translation> -<translation id="7138678301420049075">Inne</translation> <translation id="713888829801648570">Nie można zweryfikować Twojego hasła, bo jesteś offline.</translation> <translation id="7140928199327930795">Nie ma żadnych innych dostępnych urządzeń.</translation> <translation id="7141105143012495934">Nie udało się zalogować, bo nie można pobrać informacji o koncie. Skontaktuj się z administratorem lub spróbuj ponownie.</translation> @@ -5174,6 +5180,7 @@ <translation id="7280649757394340890">Ustawienia głosu przy zamianie tekstu na mowę</translation> <translation id="7280877790564589615">Prośba o uprawnienia</translation> <translation id="7282992757463864530">Pasek informacyjny</translation> +<translation id="7284411326658527427">Każda osoba może spersonalizować swoje konto i zachować prywatność swoich danych.</translation> <translation id="7287143125007575591">Odmowa dostępu.</translation> <translation id="7287411021188441799">Przywróć domyślne tło</translation> <translation id="7288013116963835700">Usuń Linuksa: <ph name="DEVICE_TYPE" /></translation> @@ -5750,6 +5757,7 @@ <translation id="7963826112438303517">Asystent używa tych nagrań i wypowiadanych przez Ciebie poleceń do tworzenia i aktualizowania modelu Twojego głosu. Model ten jest przechowywany tylko na tych urządzeniach, na których jest włączona funkcja Voice Match. W ustawieniach Asystenta możesz zobaczyć aktywność głosową oraz nauczyć go ponownie modelu głosu.</translation> <translation id="7966241909927244760">K&opiuj adres obrazu</translation> <translation id="7968072247663421402">Opcje dostawcy</translation> +<translation id="7968198493605442410">Skopiuj link do tekstu</translation> <translation id="7968742106503422125">Odczyt i modyfikacja danych, które kopiujesz i wklejasz</translation> <translation id="7968833647796919681">Włącz zbieranie danych o wydajności</translation> <translation id="7968982339740310781">Wyświetl szczegóły</translation> @@ -6130,6 +6138,7 @@ <translation id="8428213095426709021">Ustawienia</translation> <translation id="8428271547607112339">Dodaj konto szkolne</translation> <translation id="8428628598981198790">Twojego klucza bezpieczeństwa nie można używać z tą stroną</translation> +<translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">Wylogujemy Cię za <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Pokaż kliknięcia</translation> <translation id="8431909052837336408">Zmień PIN do karty SIM</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index 31b0f04..d235e47 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Ler e modificar todos os dados no seu computador e nos sites que você visitar</translation> <translation id="1430915738399379752">Imprimir</translation> <translation id="1431188203598586230">Atualização de software final</translation> +<translation id="1431402976894535801">Impedir que sites saibam quando você está presente</translation> <translation id="1431432486300429272">O Google pode usar seu histórico de navegação para personalizar a Pesquisa e outros Serviços do Google Você ou seu pai/mãe pode mudar essa configuração a qualquer momento em myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Gerenciar mecanismos de pesquisa</translation> <translation id="1433811987160647649">Perguntar antes de acessar</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Dispositivo desconhecido [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Esta conta de proprietário precisa ser a primeira conta a fazer login em uma sessão de login múltiplo.</translation> <translation id="150411034776756821">Remover <ph name="SITE" /></translation> +<translation id="1504311855864906891">Usar legendas na sua mídia</translation> <translation id="1504551620756424144">As pastas compartilhadas estão disponíveis no Windows em <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Mecanismo de pesquisa</translation> <translation id="1507170440449692343">Esta página foi impedida de acessar sua câmera.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Informe a mesma senha longa duas vezes</translation> <translation id="1652326691684645429">Ativar o "Compartilhar por proximidade"</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Adicionar a impressora ao Google Cloud Print para poder imprimir de qualquer lugar.}one{Adicionar # impressoras ao Google Cloud Print para poder imprimir de qualquer lugar.}other{Adicionar # impressoras ao Google Cloud Print para poder imprimir de qualquer lugar.}}</translation> +<translation id="1653575510930452864">Copiar link para texto</translation> <translation id="1656528038316521561">Opacidade do plano de fundo</translation> <translation id="1657406563541664238">Ajudar a tornar o <ph name="PRODUCT_NAME" /> melhor enviando automaticamente estatísticas de uso e relatórios de problemas ao Google.</translation> <translation id="1657937299377480641">Para fazer login novamente e ter acesso a recursos educacionais, peça permissão a um dos responsáveis</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">Compromisso da autoridade de certificação</translation> <translation id="2182058453334755893">Copiado para a área de transferência</translation> <translation id="2184515124301515068">Permitir que Chrome defina quando os sites podem reproduzir sons (recomendado)</translation> +<translation id="2187243482123994665">Presença do usuário</translation> <translation id="2187675480456493911">Sincronizada com outros dispositivos na sua conta. As configurações modificadas por outros usuários não serão sincronizadas. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Erro de importação do certificado de servidor</translation> <translation id="2187906491731510095">Extensões atualizadas</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Insira o PIN de quatro dígitos (0000-9999)</translation> <translation id="2399939490305346086">Dados de login da chave de segurança</translation> <translation id="2400664245143453337">Atualização imediata necessária</translation> -<translation id="2407481962792080328">Quando você faz login na sua Conta do Google, este recurso é ativado</translation> <translation id="2408018932941436077">Salvando cartão</translation> <translation id="2408955596600435184">Informe seu PIN</translation> <translation id="241082044617551207">Plug-in desconhecido</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963">Produto <ph name="PRODUCT_ID" /> desconhecido do fornecedor <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Os serviços a seguir ajudam a proteger seus dados. Esses recursos podem ser desativados a qualquer momento.</translation> <translation id="3164329792803560526">Compartilhando esta guia com <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Perguntar quando um site quiser saber quando você está presente</translation> <translation id="3165390001037658081">Algumas operadoras podem bloquear esse recurso.</translation> <translation id="316652501498554287">Contas do G Suite for Education</translation> <translation id="3169472444629675720">Discover</translation> @@ -2948,6 +2952,7 @@ <translation id="4527186207340858212">Criar um novo perfil de trabalho?</translation> <translation id="452750746583162491">Revisar seus dados sincronizados</translation> <translation id="4530494379350999373">Origem</translation> +<translation id="4531924570968473143">Quem você quer adicionar a este <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Este site está usando os sensores de movimento.</translation> <translation id="4533846798469727141">Agora diga "Ei Google"</translation> <translation id="4533985347672295764">Tempo de CPU</translation> @@ -3067,6 +3072,7 @@ <translation id="4657810666108475055">Pesquisa de guias</translation> <translation id="465878909996028221">Apenas os protocolos http, https e file são compatíveis com redirecionamentos do navegador.</translation> <translation id="4659077111144409915">Conta principal</translation> +<translation id="4659126640776004816">Quando você faz login na sua Conta do Google, este recurso é ativado.</translation> <translation id="4660476621274971848">A versão esperada era "<ph name="EXPECTED_VERSION" />", mas a instalada foi a "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">Redimensionando</translation> <translation id="4661407454952063730">Os dados de apps podem ser quaisquer dados que um app tenha salvo (com base nas configurações do desenvolvedor), incluindo dados como contatos, mensagens e fotos.</translation> @@ -3132,7 +3138,6 @@ <translation id="4750394297954878236">Sugestões</translation> <translation id="475088594373173692">Primeiro usuário</translation> <translation id="4751476147751820511">Sensores de luz ou movimento</translation> -<translation id="4752124003533492687">Abra as configurações para conectar o <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Parar/Recarregar</translation> <translation id="4756388243121344051">&Histórico</translation> <translation id="4759238208242260848">Downloads</translation> @@ -3980,6 +3985,7 @@ <translation id="5804241973901381774">Permissões</translation> <translation id="5805697420284793859">Gerenciador de janelas</translation> <translation id="5806773519584576205">0° (Padrão)</translation> +<translation id="5808664694611589238">{0,plural, =1{Fechar modo visitante}one{Fechar modo visitante}other{Fechar modo visitante}}</translation> <translation id="5810809306422959727">Esta conta não está qualificada para o controle dos pais</translation> <translation id="5812674658566766066">Expandir tudo</translation> <translation id="5814126672212206791">Tipo de conexão</translation> @@ -4438,6 +4444,7 @@ <translation id="6344170822609224263">Acessar lista de conexões de rede</translation> <translation id="6344576354370880196">Impressoras salvas</translation> <translation id="6345418402353744910">É preciso inserir seu nome de usuário e sua senha para o proxy <ph name="PROXY" />. Assim, o administrador poderá configurar sua rede.</translation> +<translation id="6345878117466430440">Marcar como lido</translation> <translation id="6349101878882523185">Instalar <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">A sincronização não está funcionando. Tente sair e fazer login novamente.</translation> <translation id="6351063337294363751">É possível limpar seus dados de navegação desse menu</translation> @@ -5024,6 +5031,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 com criptografia RSA</translation> <translation id="7075625805486468288">Gerencia configurações e certificados HTTPS/SSL</translation> <translation id="7076293881109082629">Como fazer login</translation> +<translation id="7076878155205969899">Desativar som</translation> <translation id="7077829361966535409">Houve uma falha no carregamento da página de login usando as configurações de proxy atuais. <ph name="GAIA_RELOAD_LINK_START" />Tente fazer login novamente<ph name="GAIA_RELOAD_LINK_END" /> ou use <ph name="PROXY_SETTINGS_LINK_START" />configurações de proxy<ph name="PROXY_SETTINGS_LINK_END" /> diferentes.</translation> <translation id="7078120482318506217">Todas as redes</translation> <translation id="708060913198414444">C&opiar endereço do áudio</translation> @@ -5044,7 +5052,6 @@ <translation id="7099337801055912064">Não é possível carregar um PPD grande. O tamanho máximo é 250 KB.</translation> <translation id="7102687220333134671">As atualizações automáticas estão ativadas</translation> <translation id="7102832101143475489">A solicitação expirou</translation> -<translation id="7105390788077117391">Preferências de USB</translation> <translation id="710640343305609397">Abrir configurações de rede</translation> <translation id="7108338896283013870">Ocultar</translation> <translation id="7108668606237948702">enter</translation> @@ -5074,7 +5081,6 @@ <translation id="7136694880210472378">Tornar padrão</translation> <translation id="7136984461011502314">Bem-vindo ao <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Ocorreu um erro. Tente novamente escolhendo outras imagens.</translation> -<translation id="7138678301420049075">Outro</translation> <translation id="713888829801648570">Sua senha não pôde ser confirmada porque você está off-line.</translation> <translation id="7140928199327930795">Nenhum outro dispositivo disponível.</translation> <translation id="7141105143012495934">O login falhou porque não foi possível recuperar detalhes da sua conta. Entre em contato com o administrador ou tente novamente.</translation> @@ -5181,6 +5187,7 @@ <translation id="7280649757394340890">Configurações da conversão de texto em voz</translation> <translation id="7280877790564589615">Permissão solicitada</translation> <translation id="7282992757463864530">Barra de informações</translation> +<translation id="7284411326658527427">Cada pessoa pode personalizar a própria conta e manter os dados privados.</translation> <translation id="7287143125007575591">Acesso negado.</translation> <translation id="7287411021188441799">Restaurar plano de fundo padrão</translation> <translation id="7288013116963835700">Remover Linux para <ph name="DEVICE_TYPE" /></translation> @@ -5757,6 +5764,7 @@ <translation id="7963826112438303517">O Assistente usa essas gravações e as solicitações por voz para criar e atualizar seu modelo de voz, que é armazenado apenas em dispositivos com o Voice Match ativado. Veja ou altere as atividades de voz nas configurações do Assistente.</translation> <translation id="7966241909927244760">C&opiar endereço da imagem</translation> <translation id="7968072247663421402">Opções do provedor</translation> +<translation id="7968198493605442410">Copiar link para texto</translation> <translation id="7968742106503422125">Ler e modificar os dados que você copia e cola</translation> <translation id="7968833647796919681">Ativar coleta de dados de desempenho</translation> <translation id="7968982339740310781">Visualizar detalhes</translation> @@ -6137,6 +6145,7 @@ <translation id="8428213095426709021">Configurações</translation> <translation id="8428271547607112339">Adicionar conta escolar</translation> <translation id="8428628598981198790">Sua chave de segurança não pode ser usada com este site</translation> +<translation id="8428634594422941299">Entendi</translation> <translation id="84297032718407999">Você será desconectado em <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Mostrar toques</translation> <translation id="8431909052837336408">Alterar PIN do chip</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index 1bec9d6..47b4e5b 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Ler e alterar todos os dados no computador e os Sites que visita</translation> <translation id="1430915738399379752">Imprimir</translation> <translation id="1431188203598586230">Atualização final do software</translation> +<translation id="1431402976894535801">Impedir que os sites saibam quando está presente</translation> <translation id="1431432486300429272">A Google pode utilizar o seu histórico de navegação para personalizar a Pesquisa Google e outros Serviços Google. Tu ou o teu pai/mãe podem alterar isto em qualquer altura em myaccount.google.com/activitycontrols/search.</translation> <translation id="1432581352905426595">Gerir motores de pesquisa</translation> <translation id="1433811987160647649">Perguntar antes de aceder</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Dispositivo desconhecido [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Esta conta de proprietário tem de ser a primeira conta com início de sessão integrado.</translation> <translation id="150411034776756821">Remover <ph name="SITE" /></translation> +<translation id="1504311855864906891">Obter legendas para o seu conteúdo multimédia</translation> <translation id="1504551620756424144">As pastas partilhadas estão disponíveis no Windows em <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Motor de pesquisa</translation> <translation id="1507170440449692343">Esta página foi impedida de aceder à sua câmara.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Tem de introduzir a mesma frase de acesso duas vezes</translation> <translation id="1652326691684645429">Ativar a funcionalidade Partilhar com Nearby</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Adicione a impressora ao Google Cloud Print para poder imprimir em qualquer local.}other{Adicione # impressoras ao Google Cloud Print para poder imprimir em qualquer local.}}</translation> +<translation id="1653575510930452864">Copiar link para texto</translation> <translation id="1656528038316521561">Opacidade do fundo</translation> <translation id="1657406563541664238">Ajude a melhorar o <ph name="PRODUCT_NAME" /> enviando automaticamente estatísticas de utilização e relatórios de falhas para a Google</translation> <translation id="1657937299377480641">Para voltares a iniciar sessão e teres acesso a recursos educativos, pede ao teu Pai ou Mãe para te darem autorização.</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">AC comprometida</translation> <translation id="2182058453334755893">Copiado para a área de transferência.</translation> <translation id="2184515124301515068">Permitir que o Chrome escolha quando os sites podem reproduzir som (recomendado)</translation> +<translation id="2187243482123994665">Presença do utilizador</translation> <translation id="2187675480456493911">Sincronizada com outros dispositivos na sua conta. As definições modificadas por outros utilizadores não serão sincronizadas. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Erro na importação do certificado do servidor</translation> <translation id="2187906491731510095">Extensões atualizadas.</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Introduza o PIN de 4 dígitos (0000-9999)</translation> <translation id="2399939490305346086">Dados de início de sessão da chave de segurança</translation> <translation id="2400664245143453337">É necessária uma atualização imediata</translation> -<translation id="2407481962792080328">Quando inicia sessão na sua Conta Google, esta funcionalidade está ativada.</translation> <translation id="2408018932941436077">A guardar o cartão…</translation> <translation id="2408955596600435184">Introduza o PIN</translation> <translation id="241082044617551207">Plug-in desconhecido</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963">Produto desconhecido <ph name="PRODUCT_ID" /> do fornecedor <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Os seguintes serviços ajudam a manter os seus dados seguros e protegidos. Pode desativar estas funcionalidades em qualquer altura.</translation> <translation id="3164329792803560526">A partilhar este separador com o <ph name="APP_NAME" />…</translation> +<translation id="3165371858310906303">Perguntar quando um site pretender saber quando está presente</translation> <translation id="3165390001037658081">Alguns operadores podem bloquear esta funcionalidade.</translation> <translation id="316652501498554287">Contas do G Suite for Education</translation> <translation id="3169472444629675720">Discover</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">Pretende criar um novo perfil para trabalho?</translation> <translation id="452750746583162491">Rever os dados sincronizados</translation> <translation id="4530494379350999373">Origem</translation> +<translation id="4531924570968473143">Quem pretende adicionar a este dispositivo <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Este site está a utilizar os sensores de movimentos.</translation> <translation id="4533846798469727141">Agora diga "Olá Google"</translation> <translation id="4533985347672295764">Tempo da CPU</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">Pesquisa de separadores</translation> <translation id="465878909996028221">Apenas são suportados os protocolos HTTP, HTTPS e protocolos de ficheiros para redirecionamento do navegador.</translation> <translation id="4659077111144409915">Conta principal</translation> +<translation id="4659126640776004816">Quando inicia sessão na sua Conta Google, esta funcionalidade está ativada.</translation> <translation id="4660476621274971848">A versão esperada era "<ph name="EXPECTED_VERSION" />", mas a versão foi "<ph name="NEW_ID" />".</translation> <translation id="4660540330091848931">A redimensionar…</translation> <translation id="4661407454952063730">Os dados de apps podem ser quaisquer dados que uma app guardou (com base nas definições do programador), incluindo dados como contactos, mensagens e fotos.</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">Sugestões</translation> <translation id="475088594373173692">Primeiro utilizador</translation> <translation id="4751476147751820511">Sensores de movimento ou de luz</translation> -<translation id="4752124003533492687">Abra as Definições para ligar o dispositivo <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Parar/atualizar</translation> <translation id="4756388243121344051">&Histórico</translation> <translation id="4759238208242260848">Transferências</translation> @@ -3979,6 +3984,7 @@ <translation id="5804241973901381774">Permissões</translation> <translation id="5805697420284793859">Gestor de janelas</translation> <translation id="5806773519584576205">0° (predefinição)</translation> +<translation id="5808664694611589238">{0,plural, =1{Fechar janela de convidado}other{Fechar janelas de convidado}}</translation> <translation id="5810809306422959727">Esta conta não é elegível para o controlo parental</translation> <translation id="5812674658566766066">Expandir tudo</translation> <translation id="5814126672212206791">Tipo de ligação</translation> @@ -4436,6 +4442,7 @@ <translation id="6344170822609224263">Lista de acesso de ligações de rede</translation> <translation id="6344576354370880196">Impressoras guardadas</translation> <translation id="6345418402353744910">O seu nome de utilizador e palavra-passe são necessários para o proxy <ph name="PROXY" /> para que o administrador possa configurar a sua rede.</translation> +<translation id="6345878117466430440">Marcar como lido</translation> <translation id="6349101878882523185">Instale a aplicação <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">A sincronização não está a funcionar. Experimente terminar e iniciar sessão novamente.</translation> <translation id="6351063337294363751">Pode limpar os dados de navegação a partir deste menu</translation> @@ -5022,6 +5029,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 Com encriptação RSA</translation> <translation id="7075625805486468288">Gerir certificados e definições HTTPS/SSL</translation> <translation id="7076293881109082629">Iniciar sessão</translation> +<translation id="7076878155205969899">Desativar som.</translation> <translation id="7077829361966535409">Ocorreu uma falha ao carregar a página de início de sessão utilizando as definições de proxy atuais. <ph name="GAIA_RELOAD_LINK_START" />Tente iniciar sessão novamente<ph name="GAIA_RELOAD_LINK_END" /> ou utilize <ph name="PROXY_SETTINGS_LINK_START" />definições de proxy<ph name="PROXY_SETTINGS_LINK_END" /> diferentes.</translation> <translation id="7078120482318506217">Todas as redes</translation> <translation id="708060913198414444">C&opiar endereço do áudio</translation> @@ -5042,7 +5050,6 @@ <translation id="7099337801055912064">Não é possível carregar PPDs grandes. O tamanho máximo é 250 kB.</translation> <translation id="7102687220333134671">As atualizações automáticas estão ativadas</translation> <translation id="7102832101143475489">O pedido excedeu o tempo limite.</translation> -<translation id="7105390788077117391">Preferências de USB</translation> <translation id="710640343305609397">Abrir definições de rede</translation> <translation id="7108338896283013870">Ocultar</translation> <translation id="7108668606237948702">enter</translation> @@ -5072,7 +5079,6 @@ <translation id="7136694880210472378">Predefinir</translation> <translation id="7136984461011502314">Bem-vindo ao <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Ocorreu um erro. Tente novamente ao escolher outras imagens.</translation> -<translation id="7138678301420049075">Outros</translation> <translation id="713888829801648570">Lamentamos, mas não foi possível verificar a sua palavra-passe por se encontrar offline.</translation> <translation id="7140928199327930795">Não existem outros dispositivos disponíveis.</translation> <translation id="7141105143012495934">O início de sessão falhou porque não foi possível obter os detalhes da sua conta. Contacte o gestor ou tente novamente.</translation> @@ -5179,6 +5185,7 @@ <translation id="7280649757394340890">Definições de voz para a síntese de voz</translation> <translation id="7280877790564589615">Autorização solicitada</translation> <translation id="7282992757463864530">Barra de informações</translation> +<translation id="7284411326658527427">Cada pessoa pode personalizar a respetiva conta e manter os dados privados.</translation> <translation id="7287143125007575591">Acesso negado.</translation> <translation id="7287411021188441799">Restaurar fundo predefinido</translation> <translation id="7288013116963835700">Remover o Linux de <ph name="DEVICE_TYPE" /></translation> @@ -5755,6 +5762,7 @@ <translation id="7963826112438303517">O Assistente utiliza estas gravações e os seus pedidos orais para criar e atualizar o seu modelo de voz, o qual apenas é armazenado nos dispositivos em que tiver ativado o Voice Match. Veja ou repita a atividade de voz nas Definições do Assistente.</translation> <translation id="7966241909927244760">C&opiar Endereço da imagem</translation> <translation id="7968072247663421402">Opções do fornecedor</translation> +<translation id="7968198493605442410">Copiar link para texto</translation> <translation id="7968742106503422125">Ler e modificar os dados que copia e cola</translation> <translation id="7968833647796919681">Ativar a recolha de dados de desempenho</translation> <translation id="7968982339740310781">Ver detalhes</translation> @@ -6134,6 +6142,7 @@ <translation id="8428213095426709021">Definições</translation> <translation id="8428271547607112339">Adicionar conta escolar</translation> <translation id="8428628598981198790">Não é possível utilizar a sua chave de segurança neste site</translation> +<translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">A sessão será terminada dentro de <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Mostrar toques</translation> <translation id="8431909052837336408">Alterar o PIN do cartão SIM</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index 360804d..cd71faf 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">Dispozitiv necunoscut [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Acest cont de proprietar trebuie să fie primul conectat într-o sesiune de conectare multiplă.</translation> <translation id="150411034776756821">Elimină <ph name="SITE" /></translation> +<translation id="1504311855864906891">Afișează subtitrări pentru conținutul media</translation> <translation id="1504551620756424144">Dosarele comune sunt disponibile în Windows la <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Motor de căutare</translation> <translation id="1507170440449692343">Accesul acestei pagini la camera dvs. a fost blocat.</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">Introdu codul PIN de 4 cifre (0000 – 9999)</translation> <translation id="2399939490305346086">Datele de conectare ale cheii de securitate</translation> <translation id="2400664245143453337">Este necesară actualizarea imediată</translation> -<translation id="2407481962792080328">Când te conectezi la Contul Google, această funcție este activată</translation> <translation id="2408018932941436077">Se salvează cardul</translation> <translation id="2408955596600435184">Introdu codul PIN</translation> <translation id="241082044617551207">Plugin necunoscut</translation> @@ -3066,6 +3066,7 @@ <translation id="4657810666108475055">Căutarea filelor</translation> <translation id="465878909996028221">Numai http, https și protocoalele de fișiere sunt compatibile cu redirecționarea către un browser secundar.</translation> <translation id="4659077111144409915">Cont principal</translation> +<translation id="4659126640776004816">Când te conectezi la Contul Google, această funcție este activată.</translation> <translation id="4660476621274971848">Versiunea așteptată era „<ph name="EXPECTED_VERSION" />”, dar versiunea a fost „<ph name="NEW_ID" />”</translation> <translation id="4660540330091848931">Se redimensionează</translation> <translation id="4661407454952063730">Datele unei aplicații reprezintă toate datele pe care le-a salvat aplicația (în funcție de setările dezvoltatorului), inclusiv date cum ar fi agenda, mesajele și fotografiile.</translation> @@ -3131,7 +3132,6 @@ <translation id="4750394297954878236">Sugestii</translation> <translation id="475088594373173692">Primul utilizator</translation> <translation id="4751476147751820511">Senzori de mișcare sau de lumină</translation> -<translation id="4752124003533492687">Deschide Setările pentru a conecta <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Oprește/Reîncarcă</translation> <translation id="4756388243121344051">&Istoric</translation> <translation id="4759238208242260848">Descărcări</translation> @@ -5021,6 +5021,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 cu criptare RSA</translation> <translation id="7075625805486468288">Gestionează setările și certificatele HTTPS/SSL</translation> <translation id="7076293881109082629">Conectare</translation> +<translation id="7076878155205969899">Ignoră sunetul</translation> <translation id="7077829361966535409">Pagina de conectare nu s-a putut încărca utilizând setările de proxy actuale. <ph name="GAIA_RELOAD_LINK_START" />Încercați să vă conectați din nou<ph name="GAIA_RELOAD_LINK_END" /> sau utilizați alte <ph name="PROXY_SETTINGS_LINK_START" />setări de proxy<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Toate rețelele</translation> <translation id="708060913198414444">C&opiază adresa conținutului audio</translation> @@ -5041,7 +5042,6 @@ <translation id="7099337801055912064">Nu se poate încărca fișierul PPD mare. Dimensiunea maximă este 250 KB.</translation> <translation id="7102687220333134671">Actualizările automate sunt activate</translation> <translation id="7102832101143475489">Solicitarea a expirat</translation> -<translation id="7105390788077117391">Preferințe USB</translation> <translation id="710640343305609397">Deschide setările pentru rețea</translation> <translation id="7108338896283013870">Ascunde</translation> <translation id="7108668606237948702">enter</translation> @@ -5071,7 +5071,6 @@ <translation id="7136694880210472378">Setează ca prestabilit</translation> <translation id="7136984461011502314">Bun venit la <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">A apărut o eroare. Încearcă din nou alegând alte imagini.</translation> -<translation id="7138678301420049075">Altele</translation> <translation id="713888829801648570">Ne pare rău. Parola nu a putut fi verificată pentru că ești offline.</translation> <translation id="7140928199327930795">Nu există alte dispozitive disponibile.</translation> <translation id="7141105143012495934">Nu s-a conectat, deoarece nu s-au putut prelua detaliile contului. Contactează administratorul sau încearcă din nou.</translation> @@ -6134,6 +6133,7 @@ <translation id="8428213095426709021">Setări</translation> <translation id="8428271547607112339">Adaugă un cont de la școală</translation> <translation id="8428628598981198790">Cheia de securitate nu poate fi folosită cu acest site</translation> +<translation id="8428634594422941299">Am înțeles</translation> <translation id="84297032718407999">Vei fi deconectat(ă) peste <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Afișează atingerile</translation> <translation id="8431909052837336408">Schimbă codul PIN pentru SIM</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index bcd1f2bb..7dadd91 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Просмотр и изменение данных на вашем компьютере и посещаемых сайтах</translation> <translation id="1430915738399379752">Печать</translation> <translation id="1431188203598586230">Последнее обновление ПО</translation> +<translation id="1431402976894535801">Блокировать передачу на сайты информации о вашем присутствии</translation> <translation id="1431432486300429272">Google может использовать историю браузера для персонализации Поиска и других своих сервисов. Ваши родители или вы сами можете в любой момент отключить эту функцию на странице myaccount.google.com/activitycontrols/search.</translation> <translation id="1432581352905426595">Управление поисковыми системами</translation> <translation id="1433811987160647649">Запрашивать разрешение на доступ</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Неизвестное устройство [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">При одновременной работе в нескольких аккаунтах необходимо сначала зайти в аккаунт владельца.</translation> <translation id="150411034776756821">Удалить <ph name="SITE" /></translation> +<translation id="1504311855864906891">Автоматические субтитры</translation> <translation id="1504551620756424144">В Windows общие папки находятся здесь: <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Поисковая система</translation> <translation id="1507170440449692343">Доступ к вашей камере для этой страницы заблокирован.</translation> @@ -568,6 +570,7 @@ <translation id="1651008383952180276">Необходимо дважды ввести одну кодовую фразу</translation> <translation id="1652326691684645429">Включить Обмен с окружением</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Добавьте принтер в приложение "Google Виртуальный принтер" и печатайте документы с любого устройства.}one{Добавьте # принтер в приложение "Google Виртуальный принтер" и печатайте документы с любого устройства.}few{Добавьте # принтера в приложение "Google Виртуальный принтер" и печатайте документы с любого устройства.}many{Добавьте # принтеров в приложение "Google Виртуальный принтер" и печатайте документы с любого устройства.}other{Добавьте # принтера в приложение "Google Виртуальный принтер" и печатайте документы с любого устройства.}}</translation> +<translation id="1653575510930452864">Копировать ссылку как текст</translation> <translation id="1656528038316521561">Прозрачность фона</translation> <translation id="1657406563541664238">Автоматическая отправка в Google статистики использования и отчетов о сбоях с целью улучшения <ph name="PRODUCT_NAME" /></translation> <translation id="1657937299377480641">Чтобы снова войти в аккаунт и получить доступ к образовательным ресурсам, нужно обратиться за разрешением к одному из родителей.</translation> @@ -1001,6 +1004,7 @@ <translation id="2178614541317717477">Скомпрометированный ЦС</translation> <translation id="2182058453334755893">Скопировано в буфер обмена.</translation> <translation id="2184515124301515068">Разрешить браузеру определять, на каких сайтах можно воспроизводить звук (рекомендуется)</translation> +<translation id="2187243482123994665">Присутствие пользователя</translation> <translation id="2187675480456493911">Синхронизировано с другими устройствами в вашем аккаунте. Настройки, измененные другими пользователями, не будут синхронизироваться. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Ошибка при импорте сертификата сервера</translation> <translation id="2187906491731510095">Расширения обновлены</translation> @@ -1189,7 +1193,6 @@ <translation id="2396783860772170191">Введите четырехзначный PIN-код (0000–9999)</translation> <translation id="2399939490305346086">Учетные данные электронного ключа</translation> <translation id="2400664245143453337">Требуется немедленно обновить ОС</translation> -<translation id="2407481962792080328">Эта функция включается, когда вы входите в аккаунт Google.</translation> <translation id="2408018932941436077">Сохранение карты</translation> <translation id="2408955596600435184">Введите PIN-код</translation> <translation id="241082044617551207">Неизвестный плагин</translation> @@ -1828,6 +1831,7 @@ <translation id="3163201441334626963">Неизвестный продукт <ph name="PRODUCT_ID" /> от поставщика <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Эти сервисы помогают обеспечивать безопасность вашей информации. Отключить их можно в любое время.</translation> <translation id="3164329792803560526">Отправка вкладки в приложение "<ph name="APP_NAME" />"…</translation> +<translation id="3165371858310906303">Спрашивать перед передачей на сайт информации о вашем присутствии</translation> <translation id="3165390001037658081">Некоторые операторы могут блокировать эту функцию.</translation> <translation id="316652501498554287">Аккаунты G Suite for Education</translation> <translation id="3169472444629675720">Discover</translation> @@ -2945,6 +2949,7 @@ <translation id="4527186207340858212">Создать профиль для работы?</translation> <translation id="452750746583162491">Проверить синхронизированные данные</translation> <translation id="4530494379350999373">Происхождение</translation> +<translation id="4531924570968473143">Добавьте пользователя на это устройство <ph name="DEVICE_TYPE" /></translation> <translation id="4532646538815530781">Этот сайт использует датчики движения</translation> <translation id="4533846798469727141">Теперь скажите "Эй, Google"</translation> <translation id="4533985347672295764">Процессорное время</translation> @@ -3064,6 +3069,7 @@ <translation id="4657810666108475055">Вкладка поиска</translation> <translation id="465878909996028221">Для переадресации в браузере поддерживаются только протоколы HTTP, HTTPS и файловые протоколы.</translation> <translation id="4659077111144409915">Основной аккаунт</translation> +<translation id="4659126640776004816">Эта функция включается, когда вы входите в аккаунт Google.</translation> <translation id="4660476621274971848">Ожидаемая версия: <ph name="EXPECTED_VERSION" />, полученная версия: <ph name="NEW_ID" /></translation> <translation id="4660540330091848931">Изменение размера…</translation> <translation id="4661407454952063730">Данные приложений – это любая информация, которую приложения сохраняют на устройстве согласно настройкам разработчиков, например контакты, сообщения и фотографии.</translation> @@ -3129,7 +3135,6 @@ <translation id="4750394297954878236">Предложения</translation> <translation id="475088594373173692">Первый пользователь</translation> <translation id="4751476147751820511">Датчики движения и освещенности</translation> -<translation id="4752124003533492687">Чтобы подключить устройство "<ph name="USB_DEVICE_NAME" />", откройте настройки.</translation> <translation id="4756378406049221019">Остановить/Перезапустить</translation> <translation id="4756388243121344051">&История</translation> <translation id="4759238208242260848">Скачанные файлы</translation> @@ -3976,6 +3981,7 @@ <translation id="5804241973901381774">Разрешения</translation> <translation id="5805697420284793859">Менеджер окон</translation> <translation id="5806773519584576205">0° (по умолчанию)</translation> +<translation id="5808664694611589238">{0,plural, =1{Закрыть окно в гостевом режиме}one{Закрыть окна в гостевом режиме}few{Закрыть окна в гостевом режиме}many{Закрыть окна в гостевом режиме}other{Закрыть окна в гостевом режиме}}</translation> <translation id="5810809306422959727">В аккаунте нельзя использовать родительский контроль</translation> <translation id="5812674658566766066">Развернуть все</translation> <translation id="5814126672212206791">Тип подключения</translation> @@ -4433,6 +4439,7 @@ <translation id="6344170822609224263">Доступ к списку сетевых подключений</translation> <translation id="6344576354370880196">Сохраненные принтеры</translation> <translation id="6345418402353744910">Чтобы администратор мог настроить вашу сеть, прокси-серверу <ph name="PROXY" /> требуется ваше имя и пароль.</translation> +<translation id="6345878117466430440">Отметить как прочитанное</translation> <translation id="6349101878882523185">Установить приложение "<ph name="APP_NAME" />"</translation> <translation id="6349170655202535379">Ошибка синхронизации. Выйдите из аккаунта и войдите ещё раз.</translation> <translation id="6351063337294363751">В этом меню можно удалить данные о работе в браузере</translation> @@ -5019,6 +5026,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 с шифрованием RSA</translation> <translation id="7075625805486468288">Управление настройками и сертификатами HTTPS/SSL</translation> <translation id="7076293881109082629">Вход</translation> +<translation id="7076878155205969899">Выключить звук</translation> <translation id="7077829361966535409">При загрузке текущих настроек прокси-сервера на главной странице произошла ошибка. <ph name="GAIA_RELOAD_LINK_START" />Выполните вход повторно<ph name="GAIA_RELOAD_LINK_END" /> или измените <ph name="PROXY_SETTINGS_LINK_START" />параметры прокси-сервера<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Все сети</translation> <translation id="708060913198414444">&Копировать URL аудио</translation> @@ -5039,7 +5047,6 @@ <translation id="7099337801055912064">Размер файла PPD не должен превышать 250 КБ.</translation> <translation id="7102687220333134671">Автоматическое обновление включено</translation> <translation id="7102832101143475489">Время, отведенное на обработку запроса, истекло.</translation> -<translation id="7105390788077117391">Настройки USB</translation> <translation id="710640343305609397">Открыть настройки сети</translation> <translation id="7108338896283013870">Скрыть</translation> <translation id="7108668606237948702">Войти</translation> @@ -5069,7 +5076,6 @@ <translation id="7136694880210472378">Использовать по умолчанию</translation> <translation id="7136984461011502314">Добро пожаловать в <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Произошла ошибка. Выберите другое изображение.</translation> -<translation id="7138678301420049075">Другое</translation> <translation id="713888829801648570">Невозможно подтвердить пароль в офлайн-режиме.</translation> <translation id="7140928199327930795">Нет других доступных устройств.</translation> <translation id="7141105143012495934">Ошибка входа: не удалось получить данные аккаунта. Обратитесь к администратору или повторите попытку.</translation> @@ -5176,6 +5182,7 @@ <translation id="7280649757394340890">Настройки синтеза речи</translation> <translation id="7280877790564589615">Требуется разрешение</translation> <translation id="7282992757463864530">Информационная панель</translation> +<translation id="7284411326658527427">У каждого пользователя будет возможность персонализировать свой аккаунт и обеспечивать конфиденциальность данных.</translation> <translation id="7287143125007575591">Доступ запрещен.</translation> <translation id="7287411021188441799">Восстановить фон по умолчанию</translation> <translation id="7288013116963835700">Удалить Linux с устройства <ph name="DEVICE_TYPE" /></translation> @@ -5752,6 +5759,7 @@ <translation id="7963826112438303517">На основе этих записей и голосовых запросов Ассистент создает и обновляет образец вашего голоса, который хранится только на устройствах, где включена функция Voice Match. Посмотреть или перезаписать голосовые команды можно в настройках Ассистента.</translation> <translation id="7966241909927244760">&Копировать URL картинки</translation> <translation id="7968072247663421402">Выбор поставщика услуг</translation> +<translation id="7968198493605442410">Копировать ссылку как текст</translation> <translation id="7968742106503422125">Просмотр и изменение копируемых и вставляемых данных</translation> <translation id="7968833647796919681">Разрешить сбор данных о производительности</translation> <translation id="7968982339740310781">Просмотреть сведения</translation> @@ -6131,6 +6139,7 @@ <translation id="8428213095426709021">Настройки</translation> <translation id="8428271547607112339">Добавить учебный аккаунт</translation> <translation id="8428628598981198790">Невозможно использовать электронный ключ для этого сайта</translation> +<translation id="8428634594422941299">ОК</translation> <translation id="84297032718407999">Выход из системы произойдет через <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Визуальный отклик</translation> <translation id="8431909052837336408">Изменение PIN-кода SIM-карты</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb index ec78433..fdddfec 100644 --- a/chrome/app/resources/generated_resources_si.xtb +++ b/chrome/app/resources/generated_resources_si.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">ඔබ ප්රවේශ වන වෙබ් අඩවිවල සහ ඔබගේ පරිගණකය මත ඔබගේ සියලුම දත්ත කියවා වෙනස් කරන්න</translation> <translation id="1430915738399379752">මුද්රණය කරන්න</translation> <translation id="1431188203598586230">අවසාන මෘදුකාංග යාවත්කාලීනය</translation> +<translation id="1431402976894535801">ඔබ සිටින විට දැන ගැනීමෙන් අඩවි අවහිර කරන්න</translation> <translation id="1431432486300429272">සෙවීම සහ වෙනත් Google සේවා පුද්ගලායන කිරීමට Google ඔබගේ බ්රවුස් කිරීමේ ඉතිහාසය භාවිත කළ හැක. ඔබට හෝ ඔබේ මාපියන්ට ඕනෑම වේලාවක myaccount.google.com/activitycontrols/search හිදී මෙය වෙනස් කළ හැක</translation> <translation id="1432581352905426595">සෙවීම් යාන්ත්රණ කළමණාකරණය කරන්න</translation> <translation id="1433811987160647649">ප්රවේශයට පෙර විමසන්න</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">නොදන්නා උපාංගය [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">මෙම හිමිකරු ගිණුම බහුවිධ පිවිසීමේ සැසියක් තුළ පළමු පිවිසීමේ ගිණුම විය යුතුය.</translation> <translation id="150411034776756821"><ph name="SITE" /> ඉවත් කරන්න</translation> +<translation id="1504311855864906891">ඔබගේ මාධ්ය සඳහා සිරස්තල ලබා ගන්න</translation> <translation id="1504551620756424144">බෙදා ගත් ෆෝල්ඩර Windows හි <ph name="BASE_DIR" /> ඇත.</translation> <translation id="1506061864768559482">සෙවුම් යන්ත්රය</translation> <translation id="1507170440449692343">මෙම පිටුව ඔබේ කැමරාවට ප්රවේශ වීම බාධා කර ඇකත</translation> @@ -566,6 +568,7 @@ <translation id="1651008383952180276">ඔබ එකම මුරවැකිකඩ දෙවරක් ඇතුළු කළ යුතුය</translation> <translation id="1652326691684645429">ළඟ බෙදා ගැනීම සබල කරන්න</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{ඔබට ඕනෑම තැනක සිට මුද්රණයට මුද්රණ යන්ත්රය Google වළාකුළු මුද්රණය වෙත එක් කරන්න.}one{ඔබට ඕනෑම තැනක සිට මුද්රණයට මුද්රණ යන්ත්ර # ක් Google වළාකුළු මුද්රණය වෙත එක් කරන්න.}other{ඔබට ඕනෑම තැනක සිට මුද්රණයට මුද්රණ යන්ත්ර # ක් Google වළාකුළු මුද්රණය වෙත එක් කරන්න.}}</translation> +<translation id="1653575510930452864">පෙළට සබැඳිය පිටපත් කරන්න</translation> <translation id="1656528038316521561">පසුබිම් පාරාන්ධතාව</translation> <translation id="1657406563541664238">Google වෙත භාවිත සංඛ්යාල්ඛන සහ කඩිනම් වාර්තා ස්වයංක්රියව යවා <ph name="PRODUCT_NAME" /> වඩා යහපත් කිරීමට උපකාර වන්න.</translation> <translation id="1657937299377480641">අධ්යාපනික සම්පත් වෙත ප්රවේශය සඳහා නැවත පුරන්නට, මාපියෙකුට ඔබට අවසර දෙන ලෙස කියන්න</translation> @@ -999,6 +1002,7 @@ <translation id="2178614541317717477">CA සම්මුතිය</translation> <translation id="2182058453334755893">ඔබේ පසුරු පුවරුවට පිටපත් කළා</translation> <translation id="2184515124301515068">අඩවි හට හඬ වාදනය කළ හැකි වේලාව තේරීමට Chrome හට ඉඩ දෙන්න (නිර්දේශිත)</translation> +<translation id="2187243482123994665">පරිශීලකයාගේ සිටීම</translation> <translation id="2187675480456493911">ඔබේ ගිණුම මත අනෙකුත් උපාංග සමඟ සමමුහූර්ත කෙරේ. අනෙකුත් පරිශීලකයින් විසින් වෙනස් කරන ලද සැකසීම් සමමුහූර්ත නොකරේ. <ph name="LINK_BEGIN" />තවත් දැන ගන්න<ph name="LINK_END" /></translation> <translation id="2187895286714876935">සේවාදායක සහතික ආනයන දෝශය</translation> <translation id="2187906491731510095">දිගු යාවත්කාලීනයි</translation> @@ -1187,7 +1191,6 @@ <translation id="2396783860772170191">ඉලක්කම් 4ක රහස් අංකය ඇතුළත් කරන්න (0000-9999)</translation> <translation id="2399939490305346086">ආරක්ෂක යතුරු පුරන දත්ත</translation> <translation id="2400664245143453337">වහා යාවත්කාලීන කිරීම අවශ්යයි</translation> -<translation id="2407481962792080328">ඔබ ඔබේ Google ගිණුමට පුරන විට, මෙම විශේෂාංගය සක්රීය කෙරේ</translation> <translation id="2408018932941436077">කාඩ්පත සුරකිනු ලැබේ</translation> <translation id="2408955596600435184">ඔබගේ PIN එක ඇතුළු කරන්න</translation> <translation id="241082044617551207">නොදන්නා ප්ලගිනය</translation> @@ -1827,6 +1830,7 @@ <translation id="3163201441334626963"><ph name="VENDOR_ID" /> වෙතින් නොදන්නා නිෂ්පාදනය <ph name="PRODUCT_ID" /></translation> <translation id="3163254451837720982">පහත සේවා ඔබේ දත්ත ආරක්ෂිතව සහ සුරක්ෂිතව තබා ගැනීමට උදවු කරයි. ඔබට ඕනෑම වේලාවක මෙම විශේෂාංග අක්රිය කළ හැක.</translation> <translation id="3164329792803560526">මෙම පටිත්ත <ph name="APP_NAME" /> වෙත බෙදා ගැනීම</translation> +<translation id="3165371858310906303">ඔබ සිටින විට වෙබ් අඩවියකට දැන ගැනීමට අවශ්ය විට විමසන්න</translation> <translation id="3165390001037658081">සමහර වාහකයන් මෙම විශේෂාංගය අවහිර කළ හැකිය.</translation> <translation id="316652501498554287">G Suite for Education ගිණුම්</translation> <translation id="3169472444629675720">අනාවරණය</translation> @@ -2945,6 +2949,7 @@ <translation id="4527186207340858212">කාර්යාලය සඳහා නව පැතිකඩක් තනන්නද?</translation> <translation id="452750746583162491">ඔබේ සමමුහූර්ත කළ දත්ත සමාලෝචන කරන්න</translation> <translation id="4530494379350999373">මූලය</translation> +<translation id="4531924570968473143">ඔබ මෙම <ph name="DEVICE_TYPE" /> වෙත එක් කිරීමට කැමති කාවද?</translation> <translation id="4532646538815530781">මෙම වෙබ් අඩවිල චලන සංවේදක භාවිත කරයි.</translation> <translation id="4533846798469727141">දැන් "ඒයි Google" කියන්න</translation> <translation id="4533985347672295764">CPU කාලය</translation> @@ -3064,6 +3069,7 @@ <translation id="4657810666108475055">ටැබ සෙවීම</translation> <translation id="465878909996028221">බ්රවුසර ප්රතියොමු කිරීම් සඳහා http, https සහ ගොනු ප්රොටොකෝලවලට පමණක් සහය දැක්වේ.</translation> <translation id="4659077111144409915">ප්රාථමික ගිණුම</translation> +<translation id="4659126640776004816">ඔබ ඔබේ Google ගිණුමට පුරන විට, මෙම විශේෂාංගය සක්රීය කෙරේ.</translation> <translation id="4660476621274971848">අපේක්ෂිත අනුවාදය "<ph name="EXPECTED_VERSION" />", නමුත් අනුවාදය වූයේ "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">ප්රතිප්රමාණ කිරීම</translation> <translation id="4661407454952063730">යෙදුම් දත්ත යනු සම්බන්ධතා, පණිවුඩ, සහ ඡායාරූප වැනි දත්ත ඇතුළුව, යෙදුමක් විසින් සුරැක ඇති (සංවර්ධක සැකසීම් මත පදනම්ව) කිසියම් දත්ත වේ.</translation> @@ -3129,7 +3135,6 @@ <translation id="4750394297954878236">යෝජනා</translation> <translation id="475088594373173692">පළමු පරිශීලක</translation> <translation id="4751476147751820511">චලිත හෝ ආලෝක සංවේදක</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" /> සම්බන්ධ කිරීමට සැකසීම් විවෘත කරන්න</translation> <translation id="4756378406049221019">නවතන්න/නැවත පූරණය කරන්න</translation> <translation id="4756388243121344051">&ඉතිහාසය</translation> <translation id="4759238208242260848">බාගැනීම්</translation> @@ -3977,6 +3982,7 @@ <translation id="5804241973901381774">අවසර</translation> <translation id="5805697420284793859">කවුළු කළමනාකරු</translation> <translation id="5806773519584576205">0° (පෙරනිමි)</translation> +<translation id="5808664694611589238">{0,plural, =1{අමුත්තා වසන්න}one{අමුත්තා වසන්න}other{අමුත්තා වසන්න}}</translation> <translation id="5810809306422959727">මෙම ගිණුම මාපිය පාලන සඳහා සුදුසුකම් නොලබයි</translation> <translation id="5812674658566766066">සියල්ල දිග හරින්න</translation> <translation id="5814126672212206791">සබැඳුම් වර්ගය</translation> @@ -4434,6 +4440,7 @@ <translation id="6344170822609224263">ජාල සබැඳුම් ලැයිස්තුව ප්රවේශ වන්න</translation> <translation id="6344576354370880196">සුරැකි මුද්රක</translation> <translation id="6345418402353744910"><ph name="PROXY" /> ප්රොක්සි සඳහා ඔබගේ පරිශීලක නම සහ මුරපදය අවශ්යයි, එවිට පරිපාලකට ඔබගේ ජාලය වින්යාස කළ හැකිය</translation> +<translation id="6345878117466430440">කියවූ ලෙස ලකුණු කරන්න</translation> <translation id="6349101878882523185"><ph name="APP_NAME" /> ස්ථාපන කරන්න</translation> <translation id="6349170655202535379">සමමුහුර්ත කිරීම ක්රියා නොකරයි. වරා නැවත පැමිණීම උත්සාහ කරන්න.</translation> <translation id="6351063337294363751">ඔබට මෙම මෙනුවෙන් ඔබගේ බ්රවුස් කිරීමේ දත්ත හිස් කළ හැකිය</translation> @@ -5018,6 +5025,7 @@ <translation id="7075513071073410194">RSA සංකේතනය සමඟ PKCS #1 MD5</translation> <translation id="7075625805486468288">HTTPS/SSL සහතික සහ සැකසීම් කළමනාකරණය කරන්න</translation> <translation id="7076293881109082629">පිවිසෙමින්</translation> +<translation id="7076878155205969899">හඬ නිහඬ කරන්න</translation> <translation id="7077829361966535409">වත්මන් ප්රොක්සි සැකසුම් භාවිත කර පිවිසුම් පිටුව පිරීම අසාර්ථකයි. කරුණාකර <ph name="GAIA_RELOAD_LINK_START" />නැවත පිවිසීමට උත්සහ කරන්න<ph name="GAIA_RELOAD_LINK_END" />, හෝ වෙනත් <ph name="PROXY_SETTINGS_LINK_START" />ප්රොක්සි සැකසුම්<ph name="PROXY_SETTINGS_LINK_END" /> භාවිත කරන්න.</translation> <translation id="7078120482318506217">සියලු ජාල</translation> <translation id="708060913198414444">ශ්රව්ය ලිපිනය පිටපත් කරන්න</translation> @@ -5038,7 +5046,6 @@ <translation id="7099337801055912064">විශාල PPD පූරණය කළ නොහැක. උපරිම ප්රමාණය 250 kB වේ.</translation> <translation id="7102687220333134671">ස්වයංක්රීය යාවත්කාලීන ක්රියාත්මක කර ඇත</translation> <translation id="7102832101143475489">ඉල්ලීම් කාලය නිමා විය</translation> -<translation id="7105390788077117391">USB මනාප</translation> <translation id="710640343305609397">ජාල සැකසීම් විවෘත කරන්න</translation> <translation id="7108338896283013870">සඟවන්න</translation> <translation id="7108668606237948702">ඇතුල් කරන්න</translation> @@ -5068,7 +5075,6 @@ <translation id="7136694880210472378">පෙරනිමි කරන්න</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> වෙත ආයුබෝවන්</translation> <translation id="7136993520339022828">දෝෂයක් තිබේ. වෙනත් රූප තෝරා ගැනීමෙන් නැවත උත්සාහ කරන්න.</translation> -<translation id="7138678301420049075">වෙනත්</translation> <translation id="713888829801648570">සමාවන්න, ඔබ මාර්ගගත නොවන නිසා ඔබේ මුරපදය තහවුරු කළ නොහැක.</translation> <translation id="7140928199327930795">වෙනත් උපාංග නොමැත.</translation> <translation id="7141105143012495934">ඔබේ ගිණුම් විස්තර යළි ලබා ගැනීමට නොහැකි වූ බැවින් පිරීම අසාර්ථකයි. කරුණාකර ඔබගේ පරිපාලක අමතන්න නැතහොත් නැවත උත්සාහ කරන්න.</translation> @@ -5175,6 +5181,7 @@ <translation id="7280649757394340890">පෙළ-කථන හඬ සැකසුම්</translation> <translation id="7280877790564589615">අවසරය ඉල්ලන ලදී</translation> <translation id="7282992757463864530">තතුතීරුව</translation> +<translation id="7284411326658527427">සෑම පුද්ගලයෙකුටම ඔවුන්ගේ ගිණුම පෞද්ගලීකරණය කර දත්ත පුද්ගලිකව තබා ගත හැකිය.</translation> <translation id="7287143125007575591">ප්රවේශය ප්රතික්ෂේප කරන ලදී.</translation> <translation id="7287411021188441799">පෙරනිමි පසුබිම ප්රතිසාධනය</translation> <translation id="7288013116963835700"><ph name="DEVICE_TYPE" /> සඳහා ලිනක්ස් ඉවත් කරන්න</translation> @@ -5750,6 +5757,7 @@ <translation id="7963826112438303517">ඔබ Voice Match සක්රීය කර ඇති උපාංග තුළ පමණක් ගබඩා කෙරෙන ඔබේ හඬ මාදිලිය නිර්මාණ කිරීමටත් යාවත්කාලීන කිරීමටත් ඔබේ සහකරු මෙම පටිගත කිරීම් සහ කථන ඉල්ලීම් භාවිත කරයි. සහකරු සැකසීම් තුළ හඬ ක්රියාකාරකම බලන්න හෝ යළි පුහුණු කරන්න.</translation> <translation id="7966241909927244760">පින්තූර ලිපිනය පිටපත් කරන්න</translation> <translation id="7968072247663421402">සැපයුම්කරු විකල්ප</translation> +<translation id="7968198493605442410">පෙළට සබැඳිය පිටපත් කරන්න</translation> <translation id="7968742106503422125">ඔබ පිටපත් කර අලවන දත්ත කියවන්න සහ වෙනස් කරන්න</translation> <translation id="7968833647796919681">ක්රියාකාරීත්ව දත්ත එක්රැස් කිරීම සබල කරන්න</translation> <translation id="7968982339740310781">විස්තර පෙන්වන්න</translation> @@ -6129,6 +6137,7 @@ <translation id="8428213095426709021">සැකසුම්</translation> <translation id="8428271547607112339">පාසල් ගිණුම එක් කරන්න</translation> <translation id="8428628598981198790">ඔබේ ආරක්ෂක යතුර මෙම වෙබ් අඩවිය සමඟ භාවිත කළ නොහැක</translation> +<translation id="8428634594422941299">තේරුණා</translation> <translation id="84297032718407999">ඔබ <ph name="LOGOUT_TIME_LEFT" />කින් වරනු ඇත</translation> <translation id="8431190899827883166">තට්ටු කිරීම් පෙන්වන්න</translation> <translation id="8431909052837336408">SIM PIN වෙනස් කරන්න</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index 49ea672..9a9d37f 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Čítať a meniť všetky údaje na počítači a navštevovaných weboch</translation> <translation id="1430915738399379752">Tlačiť</translation> <translation id="1431188203598586230">Posledná aktualizácia softvéru</translation> +<translation id="1431402976894535801">Neumožniť webom zistiť, či ste prítomný/-á</translation> <translation id="1431432486300429272">Google môže pomocou tvojej histórie prehliadania prispôsobovať Vyhľadávanie a ďalšie služby Googlu. Toto nastavenie môžeš ty alebo tvoj rodič kedykoľvek zmeniť na myaccount.google.com/activitycontrols/search.</translation> <translation id="1432581352905426595">Spravovať vyhľadávače</translation> <translation id="1433811987160647649">Pred prístupom sa spýtať</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Neznáme zariadenie [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Tento účet vlastníka musí byť prvým prihláseným účtom v relácii viacerých prihlásení.</translation> <translation id="150411034776756821">Odstrániť <ph name="SITE" /></translation> +<translation id="1504311855864906891">Získať titulky pre médium</translation> <translation id="1504551620756424144">Zdieľané priečinky sú k dispozícii v systéme Windows v adresári <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Vyhľadávač</translation> <translation id="1507170440449692343">Táto stránka má zablokovaný prístup ku kamere.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Rovnakú prístupovú frázu musíte zadať dvakrát</translation> <translation id="1652326691684645429">Povoliť Zdieľanie nablízku</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Pridajte si tlačiareň do služby Google Cloud Print, aby ste mohli tlačiť odkiaľkoľvek.}few{Pridajte si # tlačiarne do služby Google Cloud Print, aby ste mohli tlačiť odkiaľkoľvek.}many{Pridajte si # tlačiarne do služby Google Cloud Print, aby ste mohli tlačiť odkiaľkoľvek.}other{Pridajte si # tlačiarní do služby Google Cloud Print, aby ste mohli tlačiť odkiaľkoľvek.}}</translation> +<translation id="1653575510930452864">Kopírovať odkaz do textu</translation> <translation id="1656528038316521561">Nepriehľadnosť pozadia</translation> <translation id="1657406563541664238">Pomôžte zlepšiť aplikáciu <ph name="PRODUCT_NAME" /> aktivovaním automatického odosielania štatistických údajov o používaní prehliadača a správ o chybách spoločnosti Google.</translation> <translation id="1657937299377480641">Ak sa chcete znova prihlásiť a získať tak prístup k vzdelávacím zdrojom, požiadajte rodiča o udelenie povolenia</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">Ohrozenie zabezpečenia CA</translation> <translation id="2182058453334755893">Skopírované do schránky</translation> <translation id="2184515124301515068">Povoľte Chromu vyberať, kedy môžu weby prehrať zvuk (odporúčané)</translation> +<translation id="2187243482123994665">Prítomnosť používateľa</translation> <translation id="2187675480456493911">Synchronizované s ostatnými zariadeniami vo vašom účte. Nastavenia upravené ostatnými používateľmi nebudú synchronizované. <ph name="LINK_BEGIN" />Ďalšie informácie<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Chyba importovania certifikátu servera</translation> <translation id="2187906491731510095">Rozšírenia boli aktualizované</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Zadajte štvorciferný PIN (0000 – 9999)</translation> <translation id="2399939490305346086">Prihlasovacie údaje bezpečnostného kľúča</translation> <translation id="2400664245143453337">Vyžaduje sa okamžitá aktualizácia</translation> -<translation id="2407481962792080328">Keď sa prihlásite do svojho účtu Google, táto funkcia je zapnutá</translation> <translation id="2408018932941436077">Karta sa ukladá</translation> <translation id="2408955596600435184">Zadajte kód PIN</translation> <translation id="241082044617551207">Neznámy doplnok</translation> @@ -1829,6 +1832,7 @@ <translation id="3163201441334626963">Neznámy produkt <ph name="PRODUCT_ID" /> od dodávateľa <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Nasledujúce služby zaisťujú bezpečnosť a zabezpečenie vašich údajov. Tieto funkcie môžete kedykoľvek vypnúť.</translation> <translation id="3164329792803560526">Táto karta sa zdieľa s aplikáciou <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Opýtať sa, keď chce web vedieť, či ste prítomný/-á</translation> <translation id="3165390001037658081">Niektorí operátori môžu túto funkciu blokovať.</translation> <translation id="316652501498554287">Účty G Suite for Education</translation> <translation id="3169472444629675720">Discover</translation> @@ -2946,6 +2950,7 @@ <translation id="4527186207340858212">Chcete pre prácu vytvoriť nový profil?</translation> <translation id="452750746583162491">Skontrolovať synchronizované údaje</translation> <translation id="4530494379350999373">Pôvod</translation> +<translation id="4531924570968473143">Koho chcete pridať do tohto zariadenia <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Tento web používa senzory pohybu.</translation> <translation id="4533846798469727141">Teraz povedzte „Hej Google“</translation> <translation id="4533985347672295764">Čas využitia procesora</translation> @@ -3065,6 +3070,7 @@ <translation id="4657810666108475055">Vyhľadávanie kariet</translation> <translation id="465878909996028221">Presmerovania prehliadača podporujú iba protokoly http, https a file.</translation> <translation id="4659077111144409915">Primárny účet</translation> +<translation id="4659126640776004816">Keď sa prihlásite do svojho účtu Google, táto funkcia je zapnutá.</translation> <translation id="4660476621274971848">Očakávaná verzia bola „<ph name="EXPECTED_VERSION" />“. Skutočná verzia bola „<ph name="NEW_ID" />“.</translation> <translation id="4660540330091848931">Mení sa veľkosť</translation> <translation id="4661407454952063730">Dáta aplikácií môžu byť ľubovoľné údaje uložené aplikáciou (na základe nastavení vývojára) vrátane údajov, ako sú kontakty, správy a fotky.</translation> @@ -3130,7 +3136,6 @@ <translation id="4750394297954878236">Návrhy</translation> <translation id="475088594373173692">Prvý používateľ</translation> <translation id="4751476147751820511">Senzory pohybu alebo svetla</translation> -<translation id="4752124003533492687">Otvorte Nastavenia a pripojte <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Zastaviť / znova načítať</translation> <translation id="4756388243121344051">&História</translation> <translation id="4759238208242260848">Stiahnuté</translation> @@ -3977,6 +3982,7 @@ <translation id="5804241973901381774">Povolenia</translation> <translation id="5805697420284793859">Správca okien</translation> <translation id="5806773519584576205">0° (predvolené)</translation> +<translation id="5808664694611589238">{0,plural, =1{Zavrieť hosťa}few{Zavrieť hosťa}many{Zavrieť hosťa}other{Zavrieť hosťa}}</translation> <translation id="5810809306422959727">Tento účet nespĺňa podmienky na používanie rodičovskej kontroly</translation> <translation id="5812674658566766066">Rozbaliť všetko</translation> <translation id="5814126672212206791">Typ pripojenia</translation> @@ -4434,6 +4440,7 @@ <translation id="6344170822609224263">Pristupovať k zoznamu sieťových pripojení</translation> <translation id="6344576354370880196">Uložené tlačiarne</translation> <translation id="6345418402353744910">Proxy server <ph name="PROXY" /> vyžaduje vaše používateľské meno a heslo, aby mohol správca nakonfigurovať vašu sieť</translation> +<translation id="6345878117466430440">Označiť ako prečítané</translation> <translation id="6349101878882523185">Inštalovať aplikáciu <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Synchronizácia nefunguje. Skúste sa odhlásiť a znovu prihlásiť.</translation> <translation id="6351063337294363751">Dáta prehliadania môžete vymazať v tejto ponuke</translation> @@ -5020,6 +5027,7 @@ <translation id="7075513071073410194">Štandard PKCS #1 MD5 so šifrovaním RSA</translation> <translation id="7075625805486468288">Správa certifikátov a nastavení HTTPS/SSL</translation> <translation id="7076293881109082629">Prihlásenie</translation> +<translation id="7076878155205969899">Vypnúť zvuk</translation> <translation id="7077829361966535409">Prihlasovaciu stránku sa pomocou aktuálneho nastavenia servera proxy nepodarilo načítať. <ph name="GAIA_RELOAD_LINK_START" />Skúste sa prihlásiť znova<ph name="GAIA_RELOAD_LINK_END" /> alebo použite iné <ph name="PROXY_SETTINGS_LINK_START" />nastavenia servera proxy<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Všetky siete</translation> <translation id="708060913198414444">K&opírovať adresu zvuku</translation> @@ -5040,7 +5048,6 @@ <translation id="7099337801055912064">Súbor PPD sa nedá načítať, pretože je príliš veľký. Maximálna veľkosť je 250 kB.</translation> <translation id="7102687220333134671">Automatické aktualizácie sú zapnuté</translation> <translation id="7102832101143475489">Platnosť žiadosti vypršala</translation> -<translation id="7105390788077117391">Predvoľby USB</translation> <translation id="710640343305609397">Otvoriť nastavenia sietí</translation> <translation id="7108338896283013870">Skryť</translation> <translation id="7108668606237948702">enter</translation> @@ -5070,7 +5077,6 @@ <translation id="7136694880210472378">Nastaviť ako predvolený</translation> <translation id="7136984461011502314">Vitajte v aplikácii <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Vyskytla sa chyba. Vyberte iné obrázky a skúste to znova.</translation> -<translation id="7138678301420049075">Ostatné</translation> <translation id="713888829801648570">Je nám to ľúto, ale vaše heslo nemohlo byť overené, pretože ste offline</translation> <translation id="7140928199327930795">Žiadne ďalšie dostupné zariadenia.</translation> <translation id="7141105143012495934">Prihlásenie zlyhalo, pretože podrobnosti účtu sa nepodarilo načítať. Kontaktujte svojho správcu alebo to skúste znova.</translation> @@ -5177,6 +5183,7 @@ <translation id="7280649757394340890">Hlasové nastavenia prevodu textu na reč</translation> <translation id="7280877790564589615">Vyžaduje sa povolenie</translation> <translation id="7282992757463864530">Informačný panel</translation> +<translation id="7284411326658527427">Každá osoba si môže prispôsobiť účet a uchovať údaje v súkromí.</translation> <translation id="7287143125007575591">Prístup bol odmietnutý</translation> <translation id="7287411021188441799">Obnoviť predvolené pozadie</translation> <translation id="7288013116963835700">Odstrániť Linux zo zariadení <ph name="DEVICE_TYPE" /></translation> @@ -5753,6 +5760,7 @@ <translation id="7963826112438303517">Asistent pomocou týchto záznamov a vyslovených žiadostí vytvorí a aktualizuje váš hlasový model, ktorý je uložený iba v zariadeniach s aktivovanou funkciou Voice Match. Hlasovú aktivitu zobrazíte alebo zmeníte v nastaveniach Asistenta.</translation> <translation id="7966241909927244760">K&opírovať adresu obrázka</translation> <translation id="7968072247663421402">Možnosti poskytovateľa</translation> +<translation id="7968198493605442410">Kopírovať odkaz do textu</translation> <translation id="7968742106503422125">Čítať a upravovať dáta, ktoré kopírujete a prilepujete</translation> <translation id="7968833647796919681">Povoliť zhromažďovanie údajov o výkonnosti</translation> <translation id="7968982339740310781">Zobraziť podrobnosti</translation> @@ -6132,6 +6140,7 @@ <translation id="8428213095426709021">Nastavenia</translation> <translation id="8428271547607112339">Pridať školský účet</translation> <translation id="8428628598981198790">Bezpečnostný kľúč sa s týmto webom nedá použiť</translation> +<translation id="8428634594422941299">Dobre</translation> <translation id="84297032718407999">Odhlásenie prebehne o <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Zobrazovanie klepnutí</translation> <translation id="8431909052837336408">Zmena kódu PIN pre SIM kartu</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index 7b6c27f7..c387daf 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Branje in spreminjanje vseh vaših podatkov v računalniku in na spletnih mestih, ki jih obiščete</translation> <translation id="1430915738399379752">Natisni</translation> <translation id="1431188203598586230">Zadnja posodobitev programske opreme</translation> +<translation id="1431402976894535801">Preprečevanje, da bi spletna mesta vedela, da ste prisotni</translation> <translation id="1431432486300429272">Google lahko tvojo zgodovino brskanja uporabi za prilagajanje Iskanja Google in drugih Googlovih storitev. Ti ali tvoj starš lahko to kadar koli spremenita na myaccount.google.com/activitycontrols/search.</translation> <translation id="1432581352905426595">Upravljanje iskalnikov</translation> <translation id="1433811987160647649">Vprašaj pred dostopom</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Neznana naprava [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">V seji prijave z več računi mora biti ta račun lastnika prvi prijavljeni račun.</translation> <translation id="150411034776756821">Odstrani <ph name="SITE" /></translation> +<translation id="1504311855864906891">Prikaz podnapisov za predstavnost</translation> <translation id="1504551620756424144">Mape, deljene z drugimi, so na voljo v sistemu Windows na lokaciji <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Iskalnik</translation> <translation id="1507170440449692343">Tej strani je onemogočen dostop do kamere.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Dvakrat morate vnesti isto geslo</translation> <translation id="1652326691684645429">Omogočanje deljenja v bližini</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Dodajte tiskalnik v Google Tiskanje v oblaku, da boste lahko tiskali od koder koli.}one{Dodajte # tiskalnik v Google Tiskanje v oblaku, da boste lahko tiskali od koder koli.}two{Dodajte # tiskalnika v Google Tiskanje v oblaku, da boste lahko tiskali od koder koli.}few{Dodajte # tiskalnike v Google Tiskanje v oblaku, da boste lahko tiskali od koder koli.}other{Dodajte # tiskalnikov v Google Tiskanje v oblaku, da boste lahko tiskali od koder koli.}}</translation> +<translation id="1653575510930452864">Kopiranje povezave v besedilo</translation> <translation id="1656528038316521561">Neprosojnost ozadja</translation> <translation id="1657406563541664238">Pomagajte izboljšati <ph name="PRODUCT_NAME" /> s samodejnim pošiljanjem statističnih podatkov o uporabi in poročil o zrušitvah Googlu</translation> <translation id="1657937299377480641">Če se želiš znova prijaviti za dostop do izobraževalnih virov, prosi starša za dovoljenje</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">Overitelj potrdil ni več varen</translation> <translation id="2182058453334755893">Kopirano v odložišče</translation> <translation id="2184515124301515068">Naj Chrome izbere, kdaj lahko spletna mesta predvajajo zvok (priporočeno)</translation> +<translation id="2187243482123994665">Prisotnost uporabnika</translation> <translation id="2187675480456493911">Sinhronizirano z drugimi napravami v računu. Nastavitve, ki jih spremenijo drugi uporabniki, ne bodo sinhronizirane. <ph name="LINK_BEGIN" />Več o tem<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Napaka pri uvozu strežniškega potrdila</translation> <translation id="2187906491731510095">Razširitve posodobljene</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Vnesite 4-mestno kodo PIN (0000-9999)</translation> <translation id="2399939490305346086">Podatki za prijavo na varnostnem ključu</translation> <translation id="2400664245143453337">Potrebna je takojšnja posodobitev</translation> -<translation id="2407481962792080328">Ko se prijavite v račun Google, se ta funkcija vklopi</translation> <translation id="2408018932941436077">Shranjevanje kartice</translation> <translation id="2408955596600435184">Vnos kode PIN</translation> <translation id="241082044617551207">Neznani vtičnik</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963">Neznan izdelek <ph name="PRODUCT_ID" /> dobavitelja <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Te storitve pomagajo poskrbeti za varnost podatkov. Kadar koli jih lahko izklopite.</translation> <translation id="3164329792803560526">Deljenje tega zavihka z aplikacijo <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Vprašaj, ko spletno mesto želi vedeti, ali ste prisotni</translation> <translation id="3165390001037658081">Nekateri operaterji morda blokirajo to funkcijo.</translation> <translation id="316652501498554287">G Suite za račune za Education</translation> <translation id="3169472444629675720">Discover</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">Želite ustvariti nov profil za delo?</translation> <translation id="452750746583162491">Pregled sinhroniziranih podatkov</translation> <translation id="4530494379350999373">Izvor</translation> +<translation id="4531924570968473143">Koga želite dodati tej napravi <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">To spletno mesto uporablja tipala gibanja</translation> <translation id="4533846798469727141">Izgovorite »Hey Google«</translation> <translation id="4533985347672295764">Čas uporabe CPE-ja</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">Iskanje zavihkov</translation> <translation id="465878909996028221">Za preusmeritve v brskalnike so podprti samo protokoli http, https in file.</translation> <translation id="4659077111144409915">Glavni račun</translation> +<translation id="4659126640776004816">Ko se prijavite v račun Google, se ta funkcija vklopi.</translation> <translation id="4660476621274971848">Pričakovana različica je »<ph name="EXPECTED_VERSION" />«, toda različica je bila »<ph name="NEW_ID" />«</translation> <translation id="4660540330091848931">Spreminjanje velikosti</translation> <translation id="4661407454952063730">Podatki aplikacij so lahko kateri koli podatki, ki jih je shranila aplikacija (glede na nastavitve razvijalca), vključno s podatki, kot so stiki, sporočila in fotografije.</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">Predlogi</translation> <translation id="475088594373173692">Prvi uporabnik</translation> <translation id="4751476147751820511">Tipala za gibanje in svetlobo</translation> -<translation id="4752124003533492687">Odprite nastavitve, če želite povezati napravo <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Ustavi/znova naloži</translation> <translation id="4756388243121344051">&Zgodovina</translation> <translation id="4759238208242260848">Prenosi</translation> @@ -3980,6 +3985,7 @@ <translation id="5804241973901381774">Dovoljenja</translation> <translation id="5805697420284793859">Upravitelj oken</translation> <translation id="5806773519584576205">0° (privzeto)</translation> +<translation id="5808664694611589238">{0,plural, =1{Zapri okna načina za goste}one{Zapri okna načina za goste}two{Zapri okna načina za goste}few{Zapri okna načina za goste}other{Zapri okna načina za goste}}</translation> <translation id="5810809306422959727">Ta račun ni primeren za starševski nadzor</translation> <translation id="5812674658566766066">Razširi vse</translation> <translation id="5814126672212206791">Vrsta povezave</translation> @@ -4437,6 +4443,7 @@ <translation id="6344170822609224263">Dostop do seznama omrežnih povezav</translation> <translation id="6344576354370880196">Shranjeni tiskalniki</translation> <translation id="6345418402353744910">Za strežnik proxy <ph name="PROXY" /> sta potrebna uporabniško ime in geslo, da bo skrbnik lahko konfiguriral vaše omrežje</translation> +<translation id="6345878117466430440">Označi kot prebrano</translation> <translation id="6349101878882523185">Namestite <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Sinhronizacija ne deluje. Poskusite se odjaviti in znova prijaviti.</translation> <translation id="6351063337294363751">Podatke o brskanju lahko izbrišete v tem meniju</translation> @@ -5023,6 +5030,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 s šifriranjem RSA</translation> <translation id="7075625805486468288">Upravljanje potrdil HTTPS/SSL in nastavitev</translation> <translation id="7076293881109082629">Prijava</translation> +<translation id="7076878155205969899">Izklop zvoka</translation> <translation id="7077829361966535409">Nalaganje strani za prijavo s trenutnimi nastavitvami strežnika proxy ni uspelo. <ph name="GAIA_RELOAD_LINK_START" />Poskusite se znova prijaviti<ph name="GAIA_RELOAD_LINK_END" /> ali uporabite druge <ph name="PROXY_SETTINGS_LINK_START" />nastavitve proxyja<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Vsa omrežja</translation> <translation id="708060913198414444">Kopiraj naslov zvoka</translation> @@ -5043,7 +5051,6 @@ <translation id="7099337801055912064">Velikih datotek PPD ni mogoče naložiti. Največja dovoljena velikost je 250 KB.</translation> <translation id="7102687220333134671">Samodejne posodobitve so vklopljene</translation> <translation id="7102832101143475489">Časovna omejitev zahteve je potekla</translation> -<translation id="7105390788077117391">Nastavitve naprav USB</translation> <translation id="710640343305609397">Odpri nastavitve omrežja</translation> <translation id="7108338896283013870">Skrij</translation> <translation id="7108668606237948702">vnos</translation> @@ -5073,7 +5080,6 @@ <translation id="7136694880210472378">Nastavi za privzeto</translation> <translation id="7136984461011502314">Dobrodošli v storitvi <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Napaka. Poskusite znova tako, da izberete druge slike.</translation> -<translation id="7138678301420049075">Drugo</translation> <translation id="713888829801648570">Oprostite, gesla ni bilo mogoče preveriti, ker nimate internetne povezave.</translation> <translation id="7140928199327930795">Ni drugih razpoložljivih naprav.</translation> <translation id="7141105143012495934">Prijava ni uspela, ker ni bilo mogoče pridobiti podrobnosti o računu. Obrnite se na skrbnika in poskusite znova.</translation> @@ -5180,6 +5186,7 @@ <translation id="7280649757394340890">Glasovne nastavitve pretvorbe besedila v govor</translation> <translation id="7280877790564589615">Zahtevano je dovoljenje</translation> <translation id="7282992757463864530">Informacijska vrstica</translation> +<translation id="7284411326658527427">Vsak lahko individualno prilagodi svoj račun in poskrbi za zasebnost podatkov.</translation> <translation id="7287143125007575591">Dostop zavrnjen.</translation> <translation id="7287411021188441799">Obnovi privzeto ozadje</translation> <translation id="7288013116963835700">Odstrani Linux za napravo <ph name="DEVICE_TYPE" /></translation> @@ -5756,6 +5763,7 @@ <translation id="7963826112438303517">Pomočnik uporablja te posnetke in izgovorjene zahteve za ustvarjanje in posodabljanje glasovnega modela, ki je shranjen samo v napravah, v katerih ste vklopili Voice Match. Glasovno dejavnost si lahko ogledate ali jo znova usposobite v nastavitvah Pomočnika.</translation> <translation id="7966241909927244760">Kopiraj naslov slike</translation> <translation id="7968072247663421402">Možnosti ponudnika</translation> +<translation id="7968198493605442410">Kopiranje povezave v besedilo</translation> <translation id="7968742106503422125">Branje in spreminjanje podatkov, ki jih kopirate in prilepite</translation> <translation id="7968833647796919681">Omogoči zbiranje podatkov o učinkovitosti delovanja</translation> <translation id="7968982339740310781">Prikaži podrobnosti</translation> @@ -6136,6 +6144,7 @@ <translation id="8428213095426709021">Nastavitve</translation> <translation id="8428271547607112339">Dodaj šolski račun</translation> <translation id="8428628598981198790">Vašega varnostnega ključa na tem spletnem mestu ni mogoče uporabiti</translation> +<translation id="8428634594422941299">Razumem</translation> <translation id="84297032718407999">Odjavljeni boste čez <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Prikaz dotikov</translation> <translation id="8431909052837336408">Spreminjanje kode PIN kartice SIM</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb index 9da411f..5b04e822 100644 --- a/chrome/app/resources/generated_resources_sq.xtb +++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Lexo dhe ndryshoji të gjitha të dhënat në kompjuterin tënd dhe faqet që viziton</translation> <translation id="1430915738399379752">Printo</translation> <translation id="1431188203598586230">Përditësimi përfundimtar i softuerit</translation> +<translation id="1431402976894535801">Blloko sajtet që të mos dinë kur je i pranishëm</translation> <translation id="1431432486300429272">Google mund ta përdorë historikun tënd të shfletimit për të personalizuar "Kërko me Google" dhe shërbime të tjera të Google. Ti ose prindi yt mund ta ndryshosh këtë në çdo kohë te myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Menaxho motorët e kërkimit</translation> <translation id="1433811987160647649">Pyet para se të hysh</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Pajisje e panjohur [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Kjo llogari zotëruesi duhet të jetë llogaria e parë e identifikimit në një sesion me identifikime të shumëfishta.</translation> <translation id="150411034776756821">Hiq <ph name="SITE" /></translation> +<translation id="1504311855864906891">Merr titrat për median tënde</translation> <translation id="1504551620756424144">Dosjet e ndara janë të disponueshme në Windows në <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Motori i kërkimit</translation> <translation id="1507170440449692343">Për këtë faqe është bllokuar qasja te kamera.</translation> @@ -566,6 +568,7 @@ <translation id="1651008383952180276">Duhet të fusësh dy herë të njëjtën frazë kalimi</translation> <translation id="1652326691684645429">Aktivizo "Ndarjen në afërsi"</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Shtoje printerin te "Printimi në renë kompjuterike" të Google që të mund të printosh nga çdo vend.}other{Shto # printerë te "Printimi në renë kompjuterike" të Google që të mund të printosh nga çdo vend.}}</translation> +<translation id="1653575510930452864">Kopjo lidhjen te teksti</translation> <translation id="1656528038316521561">Niveli i transparencës së sfondit</translation> <translation id="1657406563541664238">Ndihmo në përmirësimin e <ph name="PRODUCT_NAME" /> duke dërguar automatikisht te Google statistika të përdorimit dhe raporte të ndërprerjeve aksidentale</translation> <translation id="1657937299377480641">Për t'u identifikuar përsëri për qasje në burimet arsimore, kërkoji një prindi të të japë leje</translation> @@ -999,6 +1002,7 @@ <translation id="2178614541317717477">Komprometim i autoritetit të certifikimit</translation> <translation id="2182058453334755893">Kopjuar te kujtesa e fragmenteve</translation> <translation id="2184515124301515068">Lejo që Chrome të zgjedhë se cilat sajte mund të luajnë tinguj (rekomandohet)</translation> +<translation id="2187243482123994665">Prania e përdoruesit</translation> <translation id="2187675480456493911">Sinkronizuar me pajisjet e tjera në llogarinë tënde. Cilësimet e modifikuara nga përdoruesit e tjerë nuk do të sinkronizohen. <ph name="LINK_BEGIN" />Mëso më shumë<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Gabim në importimin e certifikatës së serverit</translation> <translation id="2187906491731510095">Shtesat u përditësuan</translation> @@ -1187,7 +1191,6 @@ <translation id="2396783860772170191">Vendos kodin 4-shifror (0000-9999)</translation> <translation id="2399939490305346086">Të dhënat e identifikimit të çelësit të sigurisë</translation> <translation id="2400664245143453337">Kërkohet përditësimi i menjëhershëm</translation> -<translation id="2407481962792080328">Kur identifikohesh në "Llogarinë tënde të Google", kjo veçori është e aktivizuar</translation> <translation id="2408018932941436077">Po ruhet karta</translation> <translation id="2408955596600435184">Fut kodin PIN</translation> <translation id="241082044617551207">Përbërës shtesë i panjohur</translation> @@ -1827,6 +1830,7 @@ <translation id="3163201441334626963">Produkt i panjohur <ph name="PRODUCT_ID" /> nga shitësi <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Shërbimet e mëposhtme të ndihmojnë që t'i mbash të dhënat të mbrojtura dhe të sigurta. Këto veçori mund t'i çaktivizosh në çdo kohë.</translation> <translation id="3164329792803560526">Po ndan këtë skedë në <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Pyet kur një sajt kërkon që të dijë kur je i pranishëm</translation> <translation id="3165390001037658081">Disa operatorë celularë mund ta bllokojnë këtë funksion.</translation> <translation id="316652501498554287">Llogaritë e "G Suite për edukimin"</translation> <translation id="3169472444629675720">Discover</translation> @@ -2944,6 +2948,7 @@ <translation id="4527186207340858212">Dëshiron të krijosh një profil të ri për punën?</translation> <translation id="452750746583162491">Rishiko të dhënat e tua të sinkronizuara</translation> <translation id="4530494379350999373">Origjina</translation> +<translation id="4531924570968473143">Kë dëshiron të shtosh te kjo pajisje <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Kjo faqe përdor sensorët e lëvizjes.</translation> <translation id="4533846798469727141">Thuaj tani "Hej Google"</translation> <translation id="4533985347672295764">Koha e njësisë CPU</translation> @@ -3063,6 +3068,7 @@ <translation id="4657810666108475055">Kërkimi në skeda</translation> <translation id="465878909996028221">Për ridrejtimet e shfletuesve mbështeten vetëm protokollet http, https dhe të skedarëve.</translation> <translation id="4659077111144409915">Llogaria parësore</translation> +<translation id="4659126640776004816">Kur identifikohesh në "Llogarinë tënde të Google", kjo veçori është e aktivizuar.</translation> <translation id="4660476621274971848">Versioni i pritur ishte "<ph name="EXPECTED_VERSION" />", por versioni rezultoi "<ph name="NEW_ID" />".</translation> <translation id="4660540330091848931">Po ndryshon madhësinë</translation> <translation id="4661407454952063730">E dhënë aplikacioni mund të jetë çdo e dhënë që një aplikacion ka ruajtur (bazuar në cilësimet e zhvilluesit), duke përfshirë të dhënat si kontaktet, mesazhet dhe fotografitë.</translation> @@ -3128,7 +3134,6 @@ <translation id="4750394297954878236">Sugjerime</translation> <translation id="475088594373173692">Përdoruesi i parë</translation> <translation id="4751476147751820511">Sensorët e lëvizjes ose të dritës</translation> -<translation id="4752124003533492687">Hap "Cilësimet" për të lidhur <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Ndalo/Ringarko</translation> <translation id="4756388243121344051">&Historiku</translation> <translation id="4759238208242260848">Shkarkimet</translation> @@ -3975,6 +3980,7 @@ <translation id="5804241973901381774">Lejet</translation> <translation id="5805697420284793859">Menaxheri i dritareve</translation> <translation id="5806773519584576205">0° (parazgjedhja)</translation> +<translation id="5808664694611589238">{0,plural, =1{Mbyll vizitorin}other{Mbyll vizitorin}}</translation> <translation id="5810809306422959727">Kjo llogari nuk është e përshtatshme për kontrollet prindërore</translation> <translation id="5812674658566766066">Zgjero të gjitha</translation> <translation id="5814126672212206791">Lloji i lidhjes</translation> @@ -4432,6 +4438,7 @@ <translation id="6344170822609224263">Qasu te lista e lidhjeve të rrjetit</translation> <translation id="6344576354370880196">Printerët e ruajtur</translation> <translation id="6345418402353744910">Emri i përdoruesit dhe fjalëkalimi yt kërkohen për përfaqësuesin <ph name="PROXY" /> që administratori të mund të konfigurojë rrjetin</translation> +<translation id="6345878117466430440">Shëno si të lexuar</translation> <translation id="6349101878882523185">Instalo <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Sinkronizimi nuk funksionoi. Provo të dalësh dhe të identifikohesh sërish.</translation> <translation id="6351063337294363751">Mund t'i pastrosh të dhënat e shfletimit nga kjo meny</translation> @@ -5018,6 +5025,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 me enkriptimin RSA</translation> <translation id="7075625805486468288">Menaxho certifikatat dhe cilësimet e HTTPS-së/SSL-së</translation> <translation id="7076293881109082629">Po identifikohesh</translation> +<translation id="7076878155205969899">Çaktivizo tingullin</translation> <translation id="7077829361966535409">Faqja e identifikimit dështoi të ngarkohet duke përdorur cilësimet aktuale të përfaqësimit. <ph name="GAIA_RELOAD_LINK_START" />Provo të identifikohesh sërish<ph name="GAIA_RELOAD_LINK_END" /> ose përdor <ph name="PROXY_SETTINGS_LINK_START" />cilësime përfaqësimi<ph name="PROXY_SETTINGS_LINK_END" /> të tjera.</translation> <translation id="7078120482318506217">Të gjitha rrjetet</translation> <translation id="708060913198414444">K&opjo adresën e audios</translation> @@ -5038,7 +5046,6 @@ <translation id="7099337801055912064">PPD-ja nuk mund të ngarkohet. Madhësia maksimale është 250 kB.</translation> <translation id="7102687220333134671">Përditësimet automatike janë të aktivizuara</translation> <translation id="7102832101143475489">Kërkesa skadoi</translation> -<translation id="7105390788077117391">Preferencat e USB-së</translation> <translation id="710640343305609397">Hap cilësimet e rrjetit</translation> <translation id="7108338896283013870">Fshih</translation> <translation id="7108668606237948702">hyr</translation> @@ -5068,7 +5075,6 @@ <translation id="7136694880210472378">Bëje të parazgjedhur</translation> <translation id="7136984461011502314">Mirë se vjen në <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Ka një gabim. Provo sërish duke zgjedhur imazhe të tjera.</translation> -<translation id="7138678301420049075">Tjetër</translation> <translation id="713888829801648570">Na vjen keq, por fjalëkalimi yt nuk mundi të verifikohej sepse je jashtë linje.</translation> <translation id="7140928199327930795">Nuk ka pajisje të tjera të ofrueshme.</translation> <translation id="7141105143012495934">Identifikimi dështoi pasi detajet e llogarisë tënde nuk mund të verifikoheshin. Kontakto me administratorin ose provo përsëri.</translation> @@ -5175,6 +5181,7 @@ <translation id="7280649757394340890">Cilësimet e zërit për tekstin në ligjërim</translation> <translation id="7280877790564589615">Kërkohet leje</translation> <translation id="7282992757463864530">Shiriti i informacioneve</translation> +<translation id="7284411326658527427">Çdo person mund ta personalizojë llogarinë e vet dhe t'i mbajë të dhënat private.</translation> <translation id="7287143125007575591">Qasja refuzohet</translation> <translation id="7287411021188441799">Restauro sfondin e parazgjedhur</translation> <translation id="7288013116963835700">Hiqe sistemin Linux për <ph name="DEVICE_TYPE" /></translation> @@ -5750,6 +5757,7 @@ <translation id="7963826112438303517">"Asistenti" yt i përdor këto regjistrime dhe kërkesat e tua me zë për të krijuar dhe përditësuar modelin e zërit tënd, i cili ruhet vetëm në pajisjet ku ke aktivizuar Voice Match. Shiko ose trajno përsëri aktivitetin e zërit te "Cilësimet" e "Asistentit".</translation> <translation id="7966241909927244760">K&opjo adresën e imazhit</translation> <translation id="7968072247663421402">Opsionet e ofruesit</translation> +<translation id="7968198493605442410">Kopjo lidhjen te teksti</translation> <translation id="7968742106503422125">Lexo dhe modifiko të dhënat që kopjon dhe ngjit</translation> <translation id="7968833647796919681">Aktivizo grumbullimin e të dhënave të cilësisë së funksionimit</translation> <translation id="7968982339740310781">Shiko detajet</translation> @@ -6129,6 +6137,7 @@ <translation id="8428213095426709021">Cilësimet</translation> <translation id="8428271547607112339">Shto llogarinë e shkollës</translation> <translation id="8428628598981198790">Çelësi yt i sigurisë nuk mund të përdoret me këtë sajt</translation> +<translation id="8428634594422941299">E kuptova</translation> <translation id="84297032718407999">Do të dalësh për <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Shfaq trokitjet</translation> <translation id="8431909052837336408">Ndrysho PIN-in e kartës SIM</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb index 4cdfd2d..7b835c0 100644 --- a/chrome/app/resources/generated_resources_sr-Latn.xtb +++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Čitanje i menjanje svih vaših podataka na računaru i na veb-sajtovima koje posećujete</translation> <translation id="1430915738399379752">Štampaj</translation> <translation id="1431188203598586230">Poslednje ažuriranje softvera</translation> +<translation id="1431402976894535801">Ne dozvolite sajtovima da znaju kada ste prisutni</translation> <translation id="1431432486300429272">Google može da koristi istoriju pregledanja za personalizaciju Pretrage i drugih Google usluga. To možete da promenite u bilo kom trenutku na myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Upravljaj pretraživačima</translation> <translation id="1433811987160647649">Pitaj pre pristupa</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Nepoznat uređaj [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Ovaj vlasnički nalog mora da bude prvi prijavljeni nalog u sesiji sa višestrukim prijavljivanjem.</translation> <translation id="150411034776756821">Ukloni <ph name="SITE" /></translation> +<translation id="1504311855864906891">Prikazuj titl za medijske datoteke</translation> <translation id="1504551620756424144">Deljeni direktorijumi su dostupni u Windows-u na <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Pretraživač</translation> <translation id="1507170440449692343">Ovoj stranici je zabranjen pristup kameri.</translation> @@ -566,6 +568,7 @@ <translation id="1651008383952180276">Dvaput treba da unesete istu pristupnu frazu</translation> <translation id="1652326691684645429">Omogući Deljenje u blizini</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Dodajte štampač u Google Cloud štampanje da biste mogli da štampate bilo gde.}one{Dodajte # štampač u Google Cloud štampanje da biste mogli da štampate bilo gde.}few{Dodajte # štampača u Google Cloud štampanje da biste mogli da štampate bilo gde.}other{Dodajte # štampača u Google Cloud štampanje da biste mogli da štampate bilo gde.}}</translation> +<translation id="1653575510930452864">Kopiraj link do teksta</translation> <translation id="1656528038316521561">Neprozirnost pozadine</translation> <translation id="1657406563541664238">Pomozite unapređivanje <ph name="PRODUCT_NAME" /> pregledača tako što ćete automatski slati Google-u statistiku korišćenja i izveštaje o otkazivanju</translation> <translation id="1657937299377480641">Treba ti dozvola roditelja za ponovno prijavljivanje radi pristupa obrazovnim resursima</translation> @@ -999,6 +1002,7 @@ <translation id="2178614541317717477">CA je kompromitovan</translation> <translation id="2182058453334755893">Kopirano je u privremenu memoriju</translation> <translation id="2184515124301515068">Neka Chrome odabere kada sajtovi mogu da puste zvuk (preporučeno)</translation> +<translation id="2187243482123994665">Prisustvo korisnika</translation> <translation id="2187675480456493911">Sinhronizovano je sa ostalim uređajima na nalogu. Podešavanja koja menjaju drugi korisnici se ne sinhronizuju. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Greška pri uvozu serverskog sertifikata</translation> <translation id="2187906491731510095">Dodaci su ažurirani</translation> @@ -1187,7 +1191,6 @@ <translation id="2396783860772170191">Unesite 4-cifreni PIN (0000–9999)</translation> <translation id="2399939490305346086">Podaci za prijavljivanje sa bezbednosnog ključa</translation> <translation id="2400664245143453337">Treba odmah da ažurirate</translation> -<translation id="2407481962792080328">Ova funkcija se uključuje kada se prijavite na Google nalog</translation> <translation id="2408018932941436077">Kartica se čuva</translation> <translation id="2408955596600435184">Unesite PIN</translation> <translation id="241082044617551207">Nepoznata dodatna komponenta</translation> @@ -1827,6 +1830,7 @@ <translation id="3163201441334626963">Nepoznati proizvod <ph name="PRODUCT_ID" /> prodavca <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Sledeće usluge obezbeđuju i štite vaše podatke. Te funkcije možete da isključite u bilo kom trenutku.</translation> <translation id="3164329792803560526">Ova kartica se deli sa aplikacijom <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Pitaj kada sajt želi informacije o prisustvu</translation> <translation id="3165390001037658081">Neki mobilni operateri mogu da blokiraju ovu funkciju.</translation> <translation id="316652501498554287">G Suite for Education nalozi</translation> <translation id="3169472444629675720">Discover</translation> @@ -2944,6 +2948,7 @@ <translation id="4527186207340858212">Želite da napravite nov profil za posao?</translation> <translation id="452750746583162491">Pregledajte sinhronizovane podatke</translation> <translation id="4530494379350999373">Izvor</translation> +<translation id="4531924570968473143">Koga želite da dodate u ovaj <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Ovaj sajt koristi senzore za pokret.</translation> <translation id="4533846798469727141">Sada recite „Hej Google“</translation> <translation id="4533985347672295764">CPU vreme</translation> @@ -3063,6 +3068,7 @@ <translation id="4657810666108475055">Pretraga kartice</translation> <translation id="465878909996028221">Za preusmeravanja u pregledaču podržani su samo protokoli http, https i file.</translation> <translation id="4659077111144409915">Primarni nalog</translation> +<translation id="4659126640776004816">Ova funkcija se uključuje kada se prijavite na Google nalog.</translation> <translation id="4660476621274971848">Očekivala se verzija „<ph name="EXPECTED_VERSION" />“, ali je verzija bila „<ph name="NEW_ID" />“</translation> <translation id="4660540330091848931">Promena veličine</translation> <translation id="4661407454952063730">Podaci aplikacija mogu da budu bilo koji podaci koje je aplikacija sačuvala (na osnovu podešavanja programera), uključujući podatke kao što su kontakti, poruke i slike.</translation> @@ -3128,7 +3134,6 @@ <translation id="4750394297954878236">Predlozi</translation> <translation id="475088594373173692">Prvi korisnik</translation> <translation id="4751476147751820511">Senzori za pokret ili svetlo</translation> -<translation id="4752124003533492687">Otvorite Podešavanja da biste povezali <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Zaustavi/ponovo učitaj</translation> <translation id="4756388243121344051">&Istorija</translation> <translation id="4759238208242260848">Preuzimanja</translation> @@ -3976,6 +3981,7 @@ <translation id="5804241973901381774">Dozvole</translation> <translation id="5805697420284793859">Menadžer prozora</translation> <translation id="5806773519584576205">0° (podrazumevano)</translation> +<translation id="5808664694611589238">{0,plural, =1{Zatvori sve prozore u režimu gosta}one{Zatvori sve prozore u režimu gosta}few{Zatvori sve prozore u režimu gosta}other{Zatvori sve prozore u režimu gosta}}</translation> <translation id="5810809306422959727">Ovaj nalog ne ispunjava uslove za roditeljski nadzor</translation> <translation id="5812674658566766066">Proširi sve</translation> <translation id="5814126672212206791">Tip veze</translation> @@ -4433,6 +4439,7 @@ <translation id="6344170822609224263">Pristup listi mrežnih veza</translation> <translation id="6344576354370880196">Sačuvani štampači</translation> <translation id="6345418402353744910">Za proksi <ph name="PROXY" /> su neophodni vaše korisničko ime i lozinka, kako bi administrator mogao da vam konfiguriše mrežu</translation> +<translation id="6345878117466430440">Označi kao pročitano</translation> <translation id="6349101878882523185">Instalirajte <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Sinhronizacija ne funkcioniše. Probajte da se odjavite i ponovo prijavite.</translation> <translation id="6351063337294363751">Iz ovog menija možete da obrišete podatke pregledanja</translation> @@ -5019,6 +5026,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 sa RSA šifrovanjem</translation> <translation id="7075625805486468288">Upravljanje HTTPS/SSL sertifikatima i podešavanjima</translation> <translation id="7076293881109082629">Prijavljivanje</translation> +<translation id="7076878155205969899">Isključi zvuk</translation> <translation id="7077829361966535409">Učitavanje stranice za prijavljivanje pomoću aktuelnih podešavanja proksija nije uspelo. <ph name="GAIA_RELOAD_LINK_START" />Probajte ponovo da se prijavite<ph name="GAIA_RELOAD_LINK_END" /> ili koristite neka druga <ph name="PROXY_SETTINGS_LINK_START" />podešavanja proksija<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Sve mreže</translation> <translation id="708060913198414444">K&opiraj adresu audio sadržaja</translation> @@ -5039,7 +5047,6 @@ <translation id="7099337801055912064">Veliki PPD ne može da se učita. Maksimalna veličina je 250 kB.</translation> <translation id="7102687220333134671">Automatska ažuriranja su uključena</translation> <translation id="7102832101143475489">Zahtev je istekao</translation> -<translation id="7105390788077117391">Podešavanja USB-a</translation> <translation id="710640343305609397">Otvori podešavanja mreže</translation> <translation id="7108338896283013870">Sakrij</translation> <translation id="7108668606237948702">enter</translation> @@ -5069,7 +5076,6 @@ <translation id="7136694880210472378">Postavi kao podrazumevano</translation> <translation id="7136984461011502314">Dobro došli u <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Došlo je do greške. Izaberite druge slike i probajte ponovo.</translation> -<translation id="7138678301420049075">Drugo</translation> <translation id="713888829801648570">Žao nam je, nismo uspeli da potvrdimo lozinku jer ste oflajn.</translation> <translation id="7140928199327930795">Nema drugih dostupnih uređaja.</translation> <translation id="7141105143012495934">Prijavljivanje nije uspelo jer nismo uspeli da preuzmemo detalje o nalogu. Kontaktirajte administratora ili pokušajte ponovo.</translation> @@ -5176,6 +5182,7 @@ <translation id="7280649757394340890">Podešavanja glasa za pretvaranje teksta u govor</translation> <translation id="7280877790564589615">Traži se dozvola</translation> <translation id="7282992757463864530">Traka sa informacijama</translation> +<translation id="7284411326658527427">Svaka osoba može da personalizuje nalog i čuva privatnost podataka.</translation> <translation id="7287143125007575591">Pristup je odbijen.</translation> <translation id="7287411021188441799">Vrati podrazumevanu pozadinu</translation> <translation id="7288013116963835700">Ukloni Linux za <ph name="DEVICE_TYPE" /></translation> @@ -5752,6 +5759,7 @@ <translation id="7963826112438303517">Pomoćnik koristi te snimke i glasovne zahteve da bi napravio i ažurirao glasovni model, koji se čuva samo na onim uređajima na kojima ste uključili Voice Match. Izbrišite ili ponovo uvežbajte glasovne aktivnosti u podešavanjima Pomoćnika.</translation> <translation id="7966241909927244760">K&opiraj adresu slike</translation> <translation id="7968072247663421402">Opcije za dobavljača usluge</translation> +<translation id="7968198493605442410">Kopiraj link do teksta</translation> <translation id="7968742106503422125">Čitanje i menjanje podataka koje prekopirate</translation> <translation id="7968833647796919681">Omogući prikupljanje podataka o učinku</translation> <translation id="7968982339740310781">Prikaži detalje</translation> @@ -6132,6 +6140,7 @@ <translation id="8428213095426709021">Podešavanja</translation> <translation id="8428271547607112339">Dodajte školski nalog</translation> <translation id="8428628598981198790">Ne možete da koristite bezbednosni ključ na ovom sajtu</translation> +<translation id="8428634594422941299">Važi</translation> <translation id="84297032718407999">Odjavićete se za <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Prikaz dodira</translation> <translation id="8431909052837336408">Promenite PIN SIM kartice</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 1d2ffe53..519a323 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Читање и мењање свих ваших података на рачунару и на веб-сајтовима које посећујете</translation> <translation id="1430915738399379752">Штампај</translation> <translation id="1431188203598586230">Последње ажурирање софтвера</translation> +<translation id="1431402976894535801">Не дозволите сајтовима да знају када сте присутни</translation> <translation id="1431432486300429272">Google може да користи историју прегледања за персонализацију Претраге и других Google услуга. То можете да промените у било ком тренутку на myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Управљај претраживачима</translation> <translation id="1433811987160647649">Питај пре приступа</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Непознат уређај [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Овај власнички налог мора да буде први пријављени налог у сесији са вишеструким пријављивањем.</translation> <translation id="150411034776756821">Уклони <ph name="SITE" /></translation> +<translation id="1504311855864906891">Приказуј титл за медијске датотеке</translation> <translation id="1504551620756424144">Дељени директоријуми су доступни у Windows-у на <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Претраживач</translation> <translation id="1507170440449692343">Овој страници је забрањен приступ камери.</translation> @@ -566,6 +568,7 @@ <translation id="1651008383952180276">Двапут треба да унесете исту приступну фразу</translation> <translation id="1652326691684645429">Омогући Дељење у близини</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Додајте штампач у Google Cloud штампање да бисте могли да штампате било где.}one{Додајте # штампач у Google Cloud штампање да бисте могли да штампате било где.}few{Додајте # штампача у Google Cloud штампање да бисте могли да штампате било где.}other{Додајте # штампача у Google Cloud штампање да бисте могли да штампате било где.}}</translation> +<translation id="1653575510930452864">Копирај линк до текста</translation> <translation id="1656528038316521561">Непрозирност позадине</translation> <translation id="1657406563541664238">Помозите унапређивање <ph name="PRODUCT_NAME" /> прегледача тако што ћете аутоматски слати Google-у статистику коришћења и извештаје о отказивању</translation> <translation id="1657937299377480641">Треба ти дозвола родитеља за поновно пријављивање ради приступа образовним ресурсима</translation> @@ -999,6 +1002,7 @@ <translation id="2178614541317717477">CA је компромитован</translation> <translation id="2182058453334755893">Копирано је у привремену меморију</translation> <translation id="2184515124301515068">Нека Chrome одабере када сајтови могу да пусте звук (препоручено)</translation> +<translation id="2187243482123994665">Присуство корисника</translation> <translation id="2187675480456493911">Синхронизовано је са осталим уређајима на налогу. Подешавања која мењају други корисници се не синхронизују. <ph name="LINK_BEGIN" />Сазнајте више<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Грешка при увозу серверског сертификата</translation> <translation id="2187906491731510095">Додаци су ажурирани</translation> @@ -1187,7 +1191,6 @@ <translation id="2396783860772170191">Унесите 4-цифрени PIN (0000–9999)</translation> <translation id="2399939490305346086">Подаци за пријављивање са безбедносног кључа</translation> <translation id="2400664245143453337">Треба одмах да ажурирате</translation> -<translation id="2407481962792080328">Ова функција се укључује када се пријавите на Google налог</translation> <translation id="2408018932941436077">Картица се чува</translation> <translation id="2408955596600435184">Унесите PIN</translation> <translation id="241082044617551207">Непозната додатна компонента</translation> @@ -1827,6 +1830,7 @@ <translation id="3163201441334626963">Непознати производ <ph name="PRODUCT_ID" /> продавца <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Следеће услуге обезбеђују и штите ваше податке. Те функције можете да искључите у било ком тренутку.</translation> <translation id="3164329792803560526">Ова картица се дели са апликацијом <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Питај када сајт жели информације о присуству</translation> <translation id="3165390001037658081">Неки мобилни оператери могу да блокирају ову функцију.</translation> <translation id="316652501498554287">G Suite for Education налози</translation> <translation id="3169472444629675720">Discover</translation> @@ -2944,6 +2948,7 @@ <translation id="4527186207340858212">Желите да направите нов профил за посао?</translation> <translation id="452750746583162491">Прегледајте синхронизоване податке</translation> <translation id="4530494379350999373">Извор</translation> +<translation id="4531924570968473143">Кога желите да додате у овај <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Овај сајт користи сензоре за покрет.</translation> <translation id="4533846798469727141">Сада реците „Хеј Google“</translation> <translation id="4533985347672295764">CPU време</translation> @@ -3063,6 +3068,7 @@ <translation id="4657810666108475055">Претрага картице</translation> <translation id="465878909996028221">За преусмеравања у прегледачу подржани су само протоколи http, https и file.</translation> <translation id="4659077111144409915">Примарни налог</translation> +<translation id="4659126640776004816">Ова функција се укључује када се пријавите на Google налог.</translation> <translation id="4660476621274971848">Очекивала се верзија „<ph name="EXPECTED_VERSION" />“, али је верзија била „<ph name="NEW_ID" />“</translation> <translation id="4660540330091848931">Промена величине</translation> <translation id="4661407454952063730">Подаци апликација могу да буду било који подаци које је апликација сачувала (на основу подешавања програмера), укључујући податке као што су контакти, поруке и слике.</translation> @@ -3128,7 +3134,6 @@ <translation id="4750394297954878236">Предлози</translation> <translation id="475088594373173692">Први корисник</translation> <translation id="4751476147751820511">Сензори за покрет или светло</translation> -<translation id="4752124003533492687">Отворите Подешавања да бисте повезали <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Заустави/поново учитај</translation> <translation id="4756388243121344051">&Историја</translation> <translation id="4759238208242260848">Преузимања</translation> @@ -3976,6 +3981,7 @@ <translation id="5804241973901381774">Дозволе</translation> <translation id="5805697420284793859">Менаџер прозора</translation> <translation id="5806773519584576205">0° (подразумевано)</translation> +<translation id="5808664694611589238">{0,plural, =1{Затвори све прозоре у режиму госта}one{Затвори све прозоре у режиму госта}few{Затвори све прозоре у режиму госта}other{Затвори све прозоре у режиму госта}}</translation> <translation id="5810809306422959727">Овај налог не испуњава услове за родитељски надзор</translation> <translation id="5812674658566766066">Прошири све</translation> <translation id="5814126672212206791">Тип везе</translation> @@ -4433,6 +4439,7 @@ <translation id="6344170822609224263">Приступ листи мрежних веза</translation> <translation id="6344576354370880196">Сачувани штампачи</translation> <translation id="6345418402353744910">За прокси <ph name="PROXY" /> су неопходни ваше корисничко име и лозинка, како би администратор могао да вам конфигурише мрежу</translation> +<translation id="6345878117466430440">Означи као прочитано</translation> <translation id="6349101878882523185">Инсталирајте <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Синхронизација не функционише. Пробајте да се одјавите и поново пријавите.</translation> <translation id="6351063337294363751">Из овог менија можете да обришете податке прегледања</translation> @@ -5019,6 +5026,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 са RSA шифровањем</translation> <translation id="7075625805486468288">Управљање HTTPS/SSL сертификатима и подешавањима</translation> <translation id="7076293881109082629">Пријављивање</translation> +<translation id="7076878155205969899">Искључи звук</translation> <translation id="7077829361966535409">Учитавање странице за пријављивање помоћу актуелних подешавања проксија није успело. <ph name="GAIA_RELOAD_LINK_START" />Пробајте поново да се пријавите<ph name="GAIA_RELOAD_LINK_END" /> или користите нека друга <ph name="PROXY_SETTINGS_LINK_START" />подешавања проксија<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Све мреже</translation> <translation id="708060913198414444">К&опирај адресу аудио садржаја</translation> @@ -5039,7 +5047,6 @@ <translation id="7099337801055912064">Велики PPD не може да се учита. Максимална величина је 250 kB.</translation> <translation id="7102687220333134671">Аутоматска ажурирања су укључена</translation> <translation id="7102832101143475489">Захтев је истекао</translation> -<translation id="7105390788077117391">Подешавања USB-а</translation> <translation id="710640343305609397">Отвори подешавања мреже</translation> <translation id="7108338896283013870">Сакриј</translation> <translation id="7108668606237948702">enter</translation> @@ -5069,7 +5076,6 @@ <translation id="7136694880210472378">Постави као подразумевано</translation> <translation id="7136984461011502314">Добро дошли у <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Дошло је до грешке. Изаберите друге слике и пробајте поново.</translation> -<translation id="7138678301420049075">Друго</translation> <translation id="713888829801648570">Жао нам је, нисмо успели да потврдимо лозинку јер сте офлајн.</translation> <translation id="7140928199327930795">Нема других доступних уређаја.</translation> <translation id="7141105143012495934">Пријављивање није успело јер нисмо успели да преузмемо детаље о налогу. Контактирајте администратора или покушајте поново.</translation> @@ -5176,6 +5182,7 @@ <translation id="7280649757394340890">Подешавања гласа за претварање текста у говор</translation> <translation id="7280877790564589615">Тражи се дозвола</translation> <translation id="7282992757463864530">Трака са информацијама</translation> +<translation id="7284411326658527427">Свака особа може да персонализује налог и чува приватност података.</translation> <translation id="7287143125007575591">Приступ је одбијен.</translation> <translation id="7287411021188441799">Врати подразумевану позадину</translation> <translation id="7288013116963835700">Уклони Linux за <ph name="DEVICE_TYPE" /></translation> @@ -5752,6 +5759,7 @@ <translation id="7963826112438303517">Помоћник користи те снимке и гласовне захтеве да би направио и ажурирао гласовни модел, који се чува само на оним уређајима на којима сте укључили Voice Match. Избришите или поново увежбајте гласовне активности у подешавањима Помоћника.</translation> <translation id="7966241909927244760">К&опирај адресу слике</translation> <translation id="7968072247663421402">Опције за добављача услуге</translation> +<translation id="7968198493605442410">Копирај линк до текста</translation> <translation id="7968742106503422125">Читање и мењање података које прекопирате</translation> <translation id="7968833647796919681">Омогући прикупљање података о учинку</translation> <translation id="7968982339740310781">Прикажи детаље</translation> @@ -6132,6 +6140,7 @@ <translation id="8428213095426709021">Подешавања</translation> <translation id="8428271547607112339">Додајте школски налог</translation> <translation id="8428628598981198790">Не можете да користите безбедносни кључ на овом сајту</translation> +<translation id="8428634594422941299">Важи</translation> <translation id="84297032718407999">Одјавићете се за <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Приказ додира</translation> <translation id="8431909052837336408">Промените PIN SIM картице</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index f7f456c9..eff5138 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Läsa och ändra all din data på datorn och de webbplatser du besöker</translation> <translation id="1430915738399379752">Skriv ut</translation> <translation id="1431188203598586230">Sista programvaruuppdateringen</translation> +<translation id="1431402976894535801">Blockera webbplatser från att registrera om du är närvarande</translation> <translation id="1431432486300429272">Google kan anpassa Sök och andra Google-tjänster utifrån webbhistoriken. Du eller din förälder kan ändra detta när som helst på myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Hantera sökmotorer</translation> <translation id="1433811987160647649">Fråga innan informationen används</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Okänd enhet [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Det här ägarkontot måste vara det första inloggade kontot i en session med flera inloggningar.</translation> <translation id="150411034776756821">Ta bort <ph name="SITE" /></translation> +<translation id="1504311855864906891">Få textning i videor</translation> <translation id="1504551620756424144">Delade mappar finns i <ph name="BASE_DIR" /> i Windows.</translation> <translation id="1506061864768559482">Sökmotor</translation> <translation id="1507170440449692343">Den här sidan får inte använda din kamera.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Du måste ange samma lösenfras två gånger</translation> <translation id="1652326691684645429">Aktivera Närdelning</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Lägg till skrivaren i Google Cloud Print så att du kan skriva ut var du än befinner dig.}other{Lägg till # skrivare i Google Cloud Print så att du kan skriva ut var du än befinner dig.}}</translation> +<translation id="1653575510930452864">Kopiera länk till text</translation> <translation id="1656528038316521561">Bakgrundens genomskinlighet</translation> <translation id="1657406563541664238">Hjälp till att göra <ph name="PRODUCT_NAME" /> bättre genom att automatiskt skicka användningsstatistik och felrapporter till Google</translation> <translation id="1657937299377480641">Be en förälder om behörighet att logga in igen till skolans resurser</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">CA-kompromiss</translation> <translation id="2182058453334755893">Kopierat till urklipp</translation> <translation id="2184515124301515068">Låt Chrome välja när webbplatser kan spela upp ljud (rekommenderas)</translation> +<translation id="2187243482123994665">Användarens närvaro</translation> <translation id="2187675480456493911">Synkroniseras med andra enheter i kontot. Inställningar som andra användare har ändrat synkroniseras inte. <ph name="LINK_BEGIN" />Läs mer<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Fel vid import av servercertifikat</translation> <translation id="2187906491731510095">Tillägg har uppdaterats</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Ange den fyrsiffriga pinkoden (0000–9999)</translation> <translation id="2399939490305346086">Säkerhetsnyckelns inloggningsdata</translation> <translation id="2400664245143453337">Omedelbar uppdatering krävs</translation> -<translation id="2407481962792080328">Den här funktionen är aktiverad när du loggar in på Google-kontot</translation> <translation id="2408018932941436077">Kortet sparas</translation> <translation id="2408955596600435184">Ange din pinkod</translation> <translation id="241082044617551207">Okänt pluginprogram</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963">Okänd produkt (<ph name="PRODUCT_ID" />) från leverantören <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Följande tjänster hjälper till att skydda din data. Du kan inaktivera dessa funktioner när du vill.</translation> <translation id="3164329792803560526">Fliken delas med <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Fråga när en webbplats vill registrera om du är närvarande</translation> <translation id="3165390001037658081">Vissa operatörer kanske blockerar den här funktionen.</translation> <translation id="316652501498554287">G Suite for Education-konton</translation> <translation id="3169472444629675720">Discover</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">Vill du skapa en ny jobbprofil?</translation> <translation id="452750746583162491">Granska din synkroniserade data</translation> <translation id="4530494379350999373">Ursprung</translation> +<translation id="4531924570968473143">Vem vill du lägga till på denna <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Den här webbplatsen använder enhetens rörelsesensorer.</translation> <translation id="4533846798469727141">Säg nu ”Hey Google”</translation> <translation id="4533985347672295764">CPU-tid</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">Sök bland flikar</translation> <translation id="465878909996028221">Endast protokollen http, https och file stöds för omdirigeringar till en annan webbläsare.</translation> <translation id="4659077111144409915">Primärt konto</translation> +<translation id="4659126640776004816">Den här funktionen är aktiverad när du loggar in på Google-kontot.</translation> <translation id="4660476621274971848">Version <ph name="EXPECTED_VERSION" /> förväntades men versionen är <ph name="NEW_ID" /></translation> <translation id="4660540330091848931">Ändrar storlek</translation> <translation id="4661407454952063730">Appdata är all data som har sparats i en app (utifrån utvecklarens inställningar), bland annat data som kontakter, meddelanden och foton.</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">Förslag</translation> <translation id="475088594373173692">Första användare</translation> <translation id="4751476147751820511">Rörelse- eller ljussensorer</translation> -<translation id="4752124003533492687">Öppna inställningarna om du vill ansluta <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Stoppa inläsningen/läs in igen</translation> <translation id="4756388243121344051">&Historik</translation> <translation id="4759238208242260848">Nedladdningar</translation> @@ -3978,6 +3983,7 @@ <translation id="5804241973901381774">Behörigheter</translation> <translation id="5805697420284793859">Fönsterhanterare</translation> <translation id="5806773519584576205">0° (standard)</translation> +<translation id="5808664694611589238">{0,plural, =1{Stäng gästläget}other{Stäng gästläget}}</translation> <translation id="5810809306422959727">Det här kontot uppfyller inte kraven för föräldrakontroller</translation> <translation id="5812674658566766066">Utöka alla</translation> <translation id="5814126672212206791">Anslutningstyp</translation> @@ -4435,6 +4441,7 @@ <translation id="6344170822609224263">Få åtkomst till en lista med nätverksanslutningar</translation> <translation id="6344576354370880196">Sparade skrivare</translation> <translation id="6345418402353744910">Ditt användarnamn och lösenord krävs för proxyservern <ph name="PROXY" />, så att administratören kan konfigurera nätverket.</translation> +<translation id="6345878117466430440">Markera som läst</translation> <translation id="6349101878882523185">Installera <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Det går inte att synkronisera. Testa att logga ut och logga in igen.</translation> <translation id="6351063337294363751">Du kan rensa webbinformation från den här menyn</translation> @@ -5021,6 +5028,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 med RSA-kryptering</translation> <translation id="7075625805486468288">Hantera HTTPS/SSL-certifikat och inställningar</translation> <translation id="7076293881109082629">Logga in</translation> +<translation id="7076878155205969899">Stäng av ljudet</translation> <translation id="7077829361966535409">Det gick inte att läsa in inloggningssidan med de aktuella proxyinställningarna. <ph name="GAIA_RELOAD_LINK_START" />Försök logga in igen<ph name="GAIA_RELOAD_LINK_END" /> eller använd andra <ph name="PROXY_SETTINGS_LINK_START" />proxyinställningar<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Alla nätverk</translation> <translation id="708060913198414444">K&opiera ljudadress</translation> @@ -5041,7 +5049,6 @@ <translation id="7099337801055912064">PPD-filen var för stor att läsa in. Storleksgränsen är 250 kB.</translation> <translation id="7102687220333134671">Automatiska uppdateringar har aktiverats</translation> <translation id="7102832101143475489">Begäran tog för lång tid</translation> -<translation id="7105390788077117391">USB-inställningar</translation> <translation id="710640343305609397">Öppna nätverksinställningar</translation> <translation id="7108338896283013870">Dölj</translation> <translation id="7108668606237948702">retur</translation> @@ -5071,7 +5078,6 @@ <translation id="7136694880210472378">Ange som standard</translation> <translation id="7136984461011502314">Välkommen till <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Ett fel har uppstått. Välj andra bilder och försök igen.</translation> -<translation id="7138678301420049075">Övrigt</translation> <translation id="713888829801648570">Ditt lösenord kunde tyvärr inte verifieras eftersom du är offline.</translation> <translation id="7140928199327930795">Det finns inga andra tillgängliga enheter.</translation> <translation id="7141105143012495934">Inloggningen misslyckades eftersom det inte gick att hämta dina kontouppgifter. Kontakta administratören eller försök igen.</translation> @@ -5178,6 +5184,7 @@ <translation id="7280649757394340890">Röstinställningar för text till tal</translation> <translation id="7280877790564589615">Tillstånd begärt</translation> <translation id="7282992757463864530">Informationsfält</translation> +<translation id="7284411326658527427">Var och en kan anpassa sitt konto och hålla sin data privat.</translation> <translation id="7287143125007575591">Åtkomst nekad.</translation> <translation id="7287411021188441799">Återställ standardbakgrund</translation> <translation id="7288013116963835700">Ta bort Linux för <ph name="DEVICE_TYPE" /></translation> @@ -5754,6 +5761,7 @@ <translation id="7963826112438303517">Assistenten använder dessa inspelningar och allt du ber den om för att skapa och uppdatera din röstmodell, som bara lagras på enheter där du har aktiverat Voice Match. Visa eller lär om röstaktiviteter i inställningarna för Assistenten.</translation> <translation id="7966241909927244760">K&opiera bildadress</translation> <translation id="7968072247663421402">Leverantörsalternativ</translation> +<translation id="7968198493605442410">Kopiera länk till text</translation> <translation id="7968742106503422125">Läsa och ändra data som du kopierar och klistrar in</translation> <translation id="7968833647796919681">Aktivera insamling av resultatdata</translation> <translation id="7968982339740310781">Visa information</translation> @@ -6134,6 +6142,7 @@ <translation id="8428213095426709021">Inställningar</translation> <translation id="8428271547607112339">Lägg till skolkonto</translation> <translation id="8428628598981198790">Säkerhetsnyckeln kan inte användas med den här webbplatsen</translation> +<translation id="8428634594422941299">Jag förstår</translation> <translation id="84297032718407999">Du loggas ut om <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Visa tryck</translation> <translation id="8431909052837336408">Ändra SIM-kortets pinkod</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index a6590e1..c1a8c4e 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Kusoma na kubadilisha data yako yote kwenye kompyuta yako na tovuti unazozitembelea</translation> <translation id="1430915738399379752">Chapisha</translation> <translation id="1431188203598586230">Sasisho la mwisho la programu</translation> +<translation id="1431402976894535801">Zuia tovuti zisijue wakati unapatikana</translation> <translation id="1431432486300429272">Google inaweza kutumia historia yako ya kuvinjari ili kuweka mapendeleo kwenye huduma ya Tafuta na huduma nyingine za Google. Wewe au mzazi wako mnaweza kubadilisha mipangilio hii wakati wowote katika myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Dhibiti mitambo ya kutafuta</translation> <translation id="1433811987160647649">Uliza idhini kabla ya kufikia</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Kifaa ambacho hakijulikani [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Akaunti hii ya mmiliki lazima iwe ya kwanza kuingiwa katika kipindi cha kuingia katika akaunti mara nyingi.</translation> <translation id="150411034776756821">Ondoa <ph name="SITE" /></translation> +<translation id="1504311855864906891">Pata manukuu ya maudhui yako</translation> <translation id="1504551620756424144">Folda zinazoshirikiwa zinapatikana kwenye Windows katika <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Mtambo wa utafutaji</translation> <translation id="1507170440449692343">Ukurasa huu umezuiwa usifikie kamera yako.</translation> @@ -566,6 +568,7 @@ <translation id="1651008383952180276">Lazima uweke kauli ya siri sawa mara mbili</translation> <translation id="1652326691684645429">Washa kipengele cha Uhamishaji wa Karibu</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Ongeza printa kwenye Google Cloud Print ili uweze kuchapisha kutoka mahali popote.}other{Ongeza printa # kwenye Google Cloud Print ili uweze kuchapisha kutoka mahali popote.}}</translation> +<translation id="1653575510930452864">Nakili Kiungo kwenye Maandishi</translation> <translation id="1656528038316521561">Nuru ya mandharinyuma</translation> <translation id="1657406563541664238">Saidia kuboresha <ph name="PRODUCT_NAME" /> kwa kutumia Google takwimu za matumizi na ripoti wakati wowote huduma hii inapoacha kufanya kazi.</translation> <translation id="1657937299377480641">Ili uingie katika akaunti tena na ufikie nyenzo za elimu, mwombe mzazi ruhusa</translation> @@ -999,6 +1002,7 @@ <translation id="2178614541317717477">Kuvurugwa kwa Mamlaka ya Cheti</translation> <translation id="2182058453334755893">Yamenakiliwa kwenye Ubao wa Kunakili</translation> <translation id="2184515124301515068">Ruhusu Chrome ichague wakati ambapo tovuti zitacheza sauti (inapendekezwa)</translation> +<translation id="2187243482123994665">Upatikanaji wa mtumiaji</translation> <translation id="2187675480456493911">Umesawazishwa na vifaa vingine kwenye akaunti yako. Mipangilio iliyorekebishwa na watumiaji wengine haitasawazishwa. <ph name="LINK_BEGIN" />Pata maelezo zaidi<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Hitilafu ya Kuleta Cheti cha Seva</translation> <translation id="2187906491731510095">Imesasisha viendelezi</translation> @@ -1187,7 +1191,6 @@ <translation id="2396783860772170191">Weka PIN yenye tarakimu 4 (0000-9999)</translation> <translation id="2399939490305346086">Data ya kuingia katika akaunti ya ufunguo wa usalama</translation> <translation id="2400664245143453337">Unatakiwa kusasisha mara moja</translation> -<translation id="2407481962792080328">Ukiingia katika Akaunti ya Google, kipengele hiki kitawashwa</translation> <translation id="2408018932941436077">Inahifadhi kadi</translation> <translation id="2408955596600435184">Weka PIN yako</translation> <translation id="241082044617551207">Programu jalizi haijulikani</translation> @@ -1827,6 +1830,7 @@ <translation id="3163201441334626963">Bidhaa isiyojulikana <ph name="PRODUCT_ID" /> kutoka kwa mchuuzi <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Huduma zifuatazo husaidia kulinda data yako kwa usalama. Unaweza kuzima vipengele hivi wakati wowote.</translation> <translation id="3164329792803560526">Inashiriki kichupo hiki kwenye <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Niulize wakati tovuti inataka kujua kama ninapatikana</translation> <translation id="3165390001037658081">Huenda watoa huduma wengine wakazuia kipengele hiki.</translation> <translation id="316652501498554287">Akaunti za G Suite for Education</translation> <translation id="3169472444629675720">Gundua</translation> @@ -2942,6 +2946,7 @@ <translation id="4527186207340858212">Ungependa kufungua wasifu mpya wa kazini?</translation> <translation id="452750746583162491">Kagua data yako iliyosawazishwa</translation> <translation id="4530494379350999373">Asili</translation> +<translation id="4531924570968473143">Ungependa kumwongeza nani kwenye kifaa hiki cha <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Tovuti hii inatumia vitambuzi vya mwendo.</translation> <translation id="4533846798469727141">Sasa sema "Hey Google"</translation> <translation id="4533985347672295764">Muda wa Kuchakata</translation> @@ -3061,6 +3066,7 @@ <translation id="4657810666108475055">Utafutaji wa vichupo</translation> <translation id="465878909996028221">Ni http, https na itifaki za faili ndizo tu zinazotumika kwenye uelekezaji wa kivinjari kwingine.</translation> <translation id="4659077111144409915">Akaunti ya msingi</translation> +<translation id="4659126640776004816">Ukiingia katika Akaunti ya Google, kipengele hiki kitawashwa.</translation> <translation id="4660476621274971848">Ilitarajia toleo la "<ph name="EXPECTED_VERSION" />", lakini ilipata toleo la "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">Inabadilisha ukubwa</translation> <translation id="4661407454952063730">Data ya programu inaweza kuwa data yoyote ambayo imehifadhiwa na programu (kulingana na mipangilio ya msanidi programu), ikiwa ni pamoja na data kama vile anwani, ujumbe na picha.</translation> @@ -3126,7 +3132,6 @@ <translation id="4750394297954878236">Mapendekezo</translation> <translation id="475088594373173692">Mtumiaji wa kwanza</translation> <translation id="4751476147751820511">Vitambuzi vya mwendo au mwangaza</translation> -<translation id="4752124003533492687">Fungua Mipangilio ili uunganishe <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Simamisha/Pakia upya</translation> <translation id="4756388243121344051">&Historia</translation> <translation id="4759238208242260848">Vipakuliwa</translation> @@ -3973,6 +3978,7 @@ <translation id="5804241973901381774">Idhini</translation> <translation id="5805697420284793859">Kidhibiti cha dirisha</translation> <translation id="5806773519584576205">0° (Chaguomsingi)</translation> +<translation id="5808664694611589238">{0,plural, =1{Funga dirisha la mgeni}other{Funga madirisha ya wageni}}</translation> <translation id="5810809306422959727">Akaunti hii haijatimiza masharti ya vidhibiti vya wazazi</translation> <translation id="5812674658566766066">Panua zote</translation> <translation id="5814126672212206791">Aina ya muunganisho</translation> @@ -4430,6 +4436,7 @@ <translation id="6344170822609224263">Pata orodha ya miunganisho ya mtandao</translation> <translation id="6344576354370880196">Printa zilizohifadhiwa</translation> <translation id="6345418402353744910">Unahitaji kuweka jina la mtumiaji na nenosiri lako kwenye seva mbadala ya <ph name="PROXY" /> ili msimamizi aweze kuweka mipangilio ya mtandao wako</translation> +<translation id="6345878117466430440">Tia alama kuwa umesoma</translation> <translation id="6349101878882523185">Sakinisha <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Kipengele cha usawazishaji hakifanyi kazi. Jaribu kuondoka na uingie tena katika akaunti.</translation> <translation id="6351063337294363751">Unaweza kufuta data yako ya kuvinjari kwenye menyu hii</translation> @@ -5016,6 +5023,7 @@ <translation id="7075513071073410194">na Usimbaji wa RSA</translation> <translation id="7075625805486468288">Dhibiti vyeti na mipangilio ya HTTPS/SSL</translation> <translation id="7076293881109082629">Unaingia katika akaunti</translation> +<translation id="7076878155205969899">Zima sauti</translation> <translation id="7077829361966535409">Ukurasa wa kuingia ulishindwa kupakiwa kutumia mipangilio ya sasa ya proksi. Tafadhali <ph name="GAIA_RELOAD_LINK_START" />jaribu tena kuingia<ph name="GAIA_RELOAD_LINK_END" />, au tumia <ph name="PROXY_SETTINGS_LINK_START" />mipangilio ya proksi<ph name="PROXY_SETTINGS_LINK_END" /> tofauti.</translation> <translation id="7078120482318506217">Mitandao yote</translation> <translation id="708060913198414444">Nakili anwani ya sauti</translation> @@ -5036,7 +5044,6 @@ <translation id="7099337801055912064">Imeshindwa kupakia PPD kubwa. Kima cha juu kinachoruhusiwa ni KB 250.</translation> <translation id="7102687220333134671">Masasisho ya kiotomatiki yamewashwa</translation> <translation id="7102832101143475489">Muda wa ombi umekwisha</translation> -<translation id="7105390788077117391">Mapendeleo ya USB</translation> <translation id="710640343305609397">Fungua mipangilio ya mtandao</translation> <translation id="7108338896283013870">Ficha</translation> <translation id="7108668606237948702">ingiza</translation> @@ -5066,7 +5073,6 @@ <translation id="7136694880210472378">Fanya iwe chaguomsingi</translation> <translation id="7136984461011502314">Karibu kwenye <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Hitilafu fulani imetokea. Tafadhali jaribu tena kwa kuchagua picha zingine.</translation> -<translation id="7138678301420049075">Nyingine</translation> <translation id="713888829801648570">Samahani, nenosiri lako halikuweza kuthibitishwa kwa sababu uko nje ya mtandao.</translation> <translation id="7140928199327930795">Hakuna vifaa vingine vinapatikana.</translation> <translation id="7141105143012495934">Haikufaulu kuingia katika akaunti kwa sababu maelezo ya akaunti yako hayakupatikana. Tafadhali wasiliana na msimamizi wako au jaribu tena.</translation> @@ -5173,6 +5179,7 @@ <translation id="7280649757394340890">Mipangilio ya sauti ya Ubadilishaji wa Maandishi kwenda Usemi</translation> <translation id="7280877790564589615">Ruhusa imeombwa</translation> <translation id="7282992757463864530">Upau wa maelezo</translation> +<translation id="7284411326658527427">Kila mtu anaweza kuweka mapendeleo kwenye akaunti yake na kuweka data yake iwe ya faragha.</translation> <translation id="7287143125007575591">Umenyimwa idhini ya kufikia.</translation> <translation id="7287411021188441799">Rejesha mandhari chaguomsingi</translation> <translation id="7288013116963835700">Ondoa Linux kwa ajili ya <ph name="DEVICE_TYPE" /></translation> @@ -5751,6 +5758,7 @@ <translation id="7963826112438303517">Programu yako ya Mratibu hutumia rekodi hizi za sauti na maombi uliyotamka ili kuunda na kusasisha muundo wa sauti yako. Muundo huo unahifadhiwa tu katika vifaa ulikowasha kipengele cha Voice Match. Angalia au uweka upya shughuli za sauti katika Mipangilio ya Mratibu.</translation> <translation id="7966241909927244760">Nakili Anwani ya Picha</translation> <translation id="7968072247663421402">Chaguo za watoa huduma</translation> +<translation id="7968198493605442410">Nakili kiungo kwenye maandishi</translation> <translation id="7968742106503422125">Soma na ubadilishe data unayonakili na kubandika</translation> <translation id="7968833647796919681">Washa ukusanyaji wa data ya utendaji</translation> <translation id="7968982339740310781">Ona maelezo</translation> @@ -6131,6 +6139,7 @@ <translation id="8428213095426709021">Mipangilio</translation> <translation id="8428271547607112339">Weka akaunti ya shule</translation> <translation id="8428628598981198790">Huwezi kutumia ufunguo wako wa usalama kwenye tovuti hii</translation> +<translation id="8428634594422941299">Nimeelewa</translation> <translation id="84297032718407999">Utaondolewa kwenye akaunti baada ya <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Onyesha unapogusa</translation> <translation id="8431909052837336408">Badilisha PIN ya SIM</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index c800dcd..c588076 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">தெரியாத சாதனம் [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">பல உள்நுழைவு அமர்வில் இந்த உரிமையாளர் கணக்கு தான் முதலில் உள்நுழைந்த கணக்காக இருக்க வேண்டும்.</translation> <translation id="150411034776756821"><ph name="SITE" />ஐ அகற்று</translation> +<translation id="1504311855864906891">எனது மீடியாவிற்கு வசனங்களைக் காட்டு</translation> <translation id="1504551620756424144">பகிர்ந்த கோப்புறைகளை Windowsஸில் <ph name="BASE_DIR" /> என்பதில் பார்க்கலாம்.</translation> <translation id="1506061864768559482">தேடல் இன்ஜின்</translation> <translation id="1507170440449692343">இந்தப் பக்கம் உங்கள் கேமராவை அணுகுவதிலிருந்து தடுக்கப்பட்டுள்ளது.</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">4 இலக்கப் பின்னை உள்ளிடவும் (0000-9999)</translation> <translation id="2399939490305346086">பாதுகாப்பு விசைக்கான உள்நுழைவுத் தகவல்கள்</translation> <translation id="2400664245143453337">உடனடியாகப் புதுப்பிக்கப்பட வேண்டும்</translation> -<translation id="2407481962792080328">உங்கள் Google கணக்கில் உள்நுழையும்போது இந்த அம்சம் ஆன் செய்யப்படும்</translation> <translation id="2408018932941436077">கார்டு விவரங்களைச் சேமிக்கிறது</translation> <translation id="2408955596600435184">பின்னை உள்ளிடவும்</translation> <translation id="241082044617551207">அறியப்படாத செருகுநிரல்</translation> @@ -1287,6 +1287,7 @@ <translation id="2505127913256479918">இந்த மேற்பார்வையிடப்படும் கணக்கு விரைவில் அகற்றப்படும்</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{திரை #}other{திரை #}}</translation> <translation id="2505402373176859469"><ph name="TOTAL_SIZE" /> இல் <ph name="RECEIVED_AMOUNT" /></translation> +<translation id="250642123108534012">அவர் சாதனத்தில் ‘அருகிலுள்ளவற்றுடன் பகிர்தல்’ அம்சம் ஆன் செய்யப்பட்டிருக்கும்போது உங்களுக்கு அருகிலுள்ள சாதனங்கள்</translation> <translation id="250704661983564564">டிஸ்ப்ளேவை ஒழுங்கமைத்தல்</translation> <translation id="2507253002925770350">டிக்கெட் அகற்றப்பட்டது</translation> <translation id="2507397597949272797"><ph name="NAME" /> இடைநிறுத்தப்பட்டது</translation> @@ -3065,6 +3066,7 @@ <translation id="4657810666108475055">தாவல் தேடல்</translation> <translation id="465878909996028221">HTTP, HTTPS மற்றும் கோப்பு நெறிமுறைகள் மட்டுமே உலாவி திசைதிருப்புதல் செய்யலாம்.</translation> <translation id="4659077111144409915">முதன்மைக் கணக்கு</translation> +<translation id="4659126640776004816">உங்கள் Google கணக்கில் உள்நுழையும்போது இந்த அம்சம் இயக்கப்படும்.</translation> <translation id="4660476621274971848">எதிர்பார்க்கப்பட்ட பதிப்பு "<ph name="EXPECTED_VERSION" />", ஆனால் இருப்பது "<ph name="NEW_ID" />" பதிப்பு ஆகும்</translation> <translation id="4660540330091848931">அளவு மாற்றப்படுகிறது</translation> <translation id="4661407454952063730">ஆப்ஸ் தரவு என்பது தொடர்புகள், செய்திகள், படங்கள் போன்ற தரவு உட்பட ஆப்ஸ் சேமித்த (டெவெலப்பர் அமைப்புகளின் அடிப்படையில்) எந்தத் தரவாகவும் இருக்கலாம்.</translation> @@ -3130,7 +3132,6 @@ <translation id="4750394297954878236">பரிந்துரைகள்</translation> <translation id="475088594373173692">முதல் பயனர்</translation> <translation id="4751476147751820511">நகர்வு அல்லது ஒளி உணர்விகள்</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" /> சாதனத்தை இணைக்க, அமைப்புகளைத் திறக்கவும்</translation> <translation id="4756378406049221019">நிறுத்து/ரெஃப்ரெஷ் செய்</translation> <translation id="4756388243121344051">&வரலாறு</translation> <translation id="4759238208242260848">பதிவிறக்கங்கள்</translation> @@ -3138,6 +3139,7 @@ <translation id="4762718786438001384">சாதனத்தின் வட்டில் காலியிடம் மிகவும் குறைவாக உள்ளது</translation> <translation id="4763408175235639573">இந்தப் பக்கத்தை நீங்கள் பார்த்தபோது பின்வரும் குக்கீகள் அமைக்கப்பட்டன:</translation> <translation id="4765582662863429759">உங்கள் மொபைலில் இருந்து Chromebookகுக்கு மெசேஜ்களை ரிலே செய்ய Android மெசேஜஸை அனுமதிக்கும்</translation> +<translation id="476598255842811483">உங்கள் சாதனத்தில் 'அருகிலுள்ளவற்றுடன் பகிர்தல்' அம்சத்தை நீங்கள் ஆன் செய்யாத வரை எவராலும் உங்களுடன் பகிர முடியாது</translation> <translation id="4768332406694066911">உங்களை அடையாளங்காணும் இந்த நிறுவனங்களின் சான்றிதழ்கள் உள்ளன</translation> <translation id="477647109558161443">டெஸ்க்டாப் ஷார்ட்கட்டை உருவாக்கு</translation> <translation id="4776917500594043016"><ph name="USER_EMAIL_ADDRESS" /> க்கான கடவுச்சொல்</translation> @@ -5020,6 +5022,7 @@ <translation id="7075513071073410194">RSA என்க்ரிப்ஷனுடன் PKCS #1 MD5</translation> <translation id="7075625805486468288">HTTPS/SSL சான்றிதழ்களையும் அமைப்புகளையும் நிர்வகிக்கவும்</translation> <translation id="7076293881109082629">உள்நுழைகிறீர்கள்</translation> +<translation id="7076878155205969899">ஒலியை முடக்கும்</translation> <translation id="7077829361966535409">தற்போதைய பிராக்ஸி அமைப்புகளைப் பயன்படுத்தி உள்நுழைவுப் பக்கத்தை ஏற்றுவது தோல்வியடைந்தது. <ph name="GAIA_RELOAD_LINK_START" />மீண்டும் உள்நுழைய முயற்சிக்கவும்<ph name="GAIA_RELOAD_LINK_END" /> அல்லது வேறொரு <ph name="PROXY_SETTINGS_LINK_START" />பிராக்ஸி அமைப்புகளைப்<ph name="PROXY_SETTINGS_LINK_END" /> பயன்படுத்தவும்.</translation> <translation id="7078120482318506217">எல்லா நெட்வொர்க்குகளும்</translation> <translation id="708060913198414444">ஆடியோ முகவரியை ந&கலெடு</translation> @@ -5040,7 +5043,6 @@ <translation id="7099337801055912064">அதிகபட்ச அளவு 250 கி.பை. என்பதால், பெரிய PPDஐ ஏற்ற முடியாது.</translation> <translation id="7102687220333134671">தானியங்கு புதுப்பிப்புகள் இயக்கப்பட்டுள்ளன</translation> <translation id="7102832101143475489">கோரிக்கை காலாவதியானது</translation> -<translation id="7105390788077117391">USB விருப்பத்தேர்வுகள்</translation> <translation id="710640343305609397">நெட்வொர்க் அமைப்புகளைத் திற</translation> <translation id="7108338896283013870">மறை</translation> <translation id="7108668606237948702">உள்ளிடு</translation> @@ -5070,7 +5072,6 @@ <translation id="7136694880210472378">இயல்புநிலையாக மாற்று</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> க்கு வருக</translation> <translation id="7136993520339022828">பிழை நேர்ந்தது. வேறு படங்களைத் தேர்வுசெய்து முயலவும்.</translation> -<translation id="7138678301420049075">மற்றவை</translation> <translation id="713888829801648570">நீங்கள் ஆஃப்லைனில் இருப்பதால் கடவுச்சொல்லை சரிபார்க்க முடியவில்லை.</translation> <translation id="7140928199327930795">பிற கிடைக்கும் சாதனங்கள் இல்லை.</translation> <translation id="7141105143012495934">உங்கள் கணக்கு விவரங்களை மீட்டெடுக்க முடியாததால் உள்நுழைவு தோல்வியானது. உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும் அல்லது மீண்டும் முயலவும்.</translation> @@ -5670,6 +5671,7 @@ <translation id="786073089922909430">சேவை: <ph name="ARC_PROCESS_NAME" /></translation> <translation id="7861215335140947162">&பதிவிறக்கங்கள்</translation> <translation id="7864539943188674973">புளூடூத்தை முடக்கு</translation> +<translation id="7866352732146932341">உங்கள் சாதனத்தில் ‘அருகிலுள்ளவற்றுடன் பகிர்தல்’ அம்சம் ஆன் செய்யப்பட்டிருக்கும்போது உங்களுக்கு அருகிலுள்ள சாதனங்கள்</translation> <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - இணைக்கப்பட்டது</translation> <translation id="7870730066603611552">அமைவைத் தொடர்ந்து, ஒத்திசைவு விருப்பங்களை மதிப்பாய்வு செய்யவும்</translation> <translation id="7870790288828963061">புதிய பதிப்பு கொண்ட கியாஸ்க் ஆப்ஸ் எதுவும் காணப்படவில்லை. புதுப்பிக்க எதுவுமில்லை. USB சாதனத்தை அகற்றவும்.</translation> @@ -6132,6 +6134,7 @@ <translation id="8428213095426709021">அமைப்புகள்</translation> <translation id="8428271547607112339">பள்ளிக் கணக்கைச் சேர்</translation> <translation id="8428628598981198790">உங்கள் பாதுகாப்பு விசையை இந்தத் தளத்தில் பயன்படுத்த முடியாது</translation> +<translation id="8428634594422941299">நிராகரி</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> இல் வெளியேற்றப்படுவீர்கள்</translation> <translation id="8431190899827883166">Show taps</translation> <translation id="8431909052837336408">சிம்மின் பின்னை மாற்று</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index 0609b0c..b53f3714 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">మీ కంప్యూటర్లో మరియు మీరు సందర్శించే వెబ్సైట్ల్లో మీ మొత్తం డేటాను చదవడం మరియు మార్చడం</translation> <translation id="1430915738399379752">ముద్రించు</translation> <translation id="1431188203598586230">చివరి సాఫ్ట్వేర్ అప్డేట్</translation> +<translation id="1431402976894535801">మీ ఉనికిని తెలుసుకోనివ్వకుండా సైట్లను బ్లాక్ చేయండి</translation> <translation id="1431432486300429272">శోధన మరియు ఇతర Google సర్వీస్లను వ్యక్తిగతీకరించడం కోసం Google మీ బ్రౌజింగ్ చరిత్రను ఉపయోగించవచ్చు. మీరు లేదా మీ తల్లి/తండ్రి దీన్ని ఎప్పుడైనా myaccount.google.com/activitycontrols/searchలో మార్చవచ్చు</translation> <translation id="1432581352905426595">సెర్చ్ ఇంజిన్లను మేనేజ్ చేయండి</translation> <translation id="1433811987160647649">ప్రాప్యత చేసే ముందు అడగాలి</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">తెలియని పరికరం [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">ఈ యజమాని ఖాతానే బహుళ సైన్-ఇన్ సెషన్లో మొదటిగా సైన్-ఇన్ చేయాల్సిన ఖాతా.</translation> <translation id="150411034776756821"><ph name="SITE" />ని తీసివేయి</translation> +<translation id="1504311855864906891">మీ మీడియా కోసం క్యాప్షన్లను పొందండి</translation> <translation id="1504551620756424144">Windowsలో <ph name="BASE_DIR" />లో షేర్ చేసిన ఫోల్డర్లు అందుబాటులో ఉన్నాయి.</translation> <translation id="1506061864768559482">సెర్చ్ ఇంజిన్</translation> <translation id="1507170440449692343">ఈ పేజీ మీ కెమెరాను ప్రాప్యత చేయకుండా బ్లాక్ చేయబడింది.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">మీరు తప్పనిసరిగా ఒకే రహస్య పదబంధాన్ని రెండుసార్లు నమోదు చేయాలి</translation> <translation id="1652326691684645429">సమీప షేరింగ్ను ఎనేబుల్ చేయండి</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Add the printer to Google Cloud Print so you can print from anywhere.}other{Google క్లౌడ్ ప్రింట్కు # ప్రింటర్లను జోడించండి. అప్పుడు మీరు ఎక్కడి నుండైనా ముద్రించవచ్చు.}}</translation> +<translation id="1653575510930452864">లింక్ను టెక్స్ట్కు కాపీ చేయండి</translation> <translation id="1656528038316521561">నేపథ్య అపారదర్శకత</translation> <translation id="1657406563541664238">Googleకు వినియోగ గణాంకాలు, క్రాష్ నివేదికలను ఆటోమేటిక్గా పంపడం ద్వారా <ph name="PRODUCT_NAME" />ను మరింత మెరుగుపరచడంలో సహాయపడండి</translation> <translation id="1657937299377480641">విద్యా సంబంధమైన వనరులకు యాక్సెస్ కోసం మళ్లీ సైన్ ఇన్ చేయడానికి, మీకు అనుమతి ఇవ్వాల్సిందిగా తల్లి/తండ్రిని అడగండి</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">CA రాజీ</translation> <translation id="2182058453334755893">మీ క్లిప్బోర్డ్కు కాపీ చేయబడింది</translation> <translation id="2184515124301515068">సైట్లు ధ్వనిని ఎప్పుడు ప్లే చేయాలనేది Chrome ఎంచుకునేలా సెట్ చేయండి (సిఫార్సు చేయబడింది)</translation> +<translation id="2187243482123994665">యూజర్ ఉనికి</translation> <translation id="2187675480456493911">మీ ఖాతాలోని ఇతర పరికరాలతో సింక్ చేయబడింది. ఇతర యూజర్ల చేత మార్చబడిన సెట్టింగ్లు సింక్ చేయబడవు. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation> <translation id="2187895286714876935">సర్వర్ ప్రమాణపత్రం దిగుమతి లోపం</translation> <translation id="2187906491731510095">పొడిగింపులు నవీకరించబడ్డాయి</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">4 అంకెల పిన్ (0000-9999) నమోదు చేయండి</translation> <translation id="2399939490305346086">'సెక్యూరిటీ కీ' సైన్-ఇన్ డేటా</translation> <translation id="2400664245143453337">వెంటనే అప్డేట్ చేయడం అవసరం</translation> -<translation id="2407481962792080328">మీ Google ఖాతాకు మీరు సైన్ ఇన్ చేసినప్పుడు, ఈ ఫీచర్ ఆన్ చేయబడుతుంది</translation> <translation id="2408018932941436077">కార్డ్ సేవ్ అవుతోంది</translation> <translation id="2408955596600435184">మీ PINని నమోదు చేయండి</translation> <translation id="241082044617551207">తెలియని ప్లగ్ఇన్</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963"><ph name="VENDOR_ID" /> నుండి <ph name="PRODUCT_ID" /> తెలియని ఉత్పత్తి</translation> <translation id="3163254451837720982">మీ డేటాను సురక్షితంగా, భద్రంగా ఉంచడానికి కింది సర్వీస్లు సహాయపడతాయి. మీరు ఏ సమయంలో అయినా ఈ ఫీచర్లను ఆఫ్ చేయవచ్చు.</translation> <translation id="3164329792803560526">ఈ ట్యాబ్ను <ph name="APP_NAME" />తో షేర్ చేస్తోంది</translation> +<translation id="3165371858310906303">ఒక సైట్ మీ ఉనికిని తెలుసుకోవాలనుకున్నప్పుడు అనుమతి అడగాలి</translation> <translation id="3165390001037658081">కొన్ని క్యారియర్లు ఈ లక్షణాన్ని బ్లాక్ చేయవచ్చు.</translation> <translation id="316652501498554287">'విద్య కోసం G Suite' ఖాతాలు</translation> <translation id="3169472444629675720">కనుగొను</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">ఆఫీస్ కోసం కొత్త ప్రొఫైల్ క్రియేట్ చేయాలనుకుంటున్నారా?</translation> <translation id="452750746583162491">సింక్ చేసిన మీ డేటాను రివ్యూ చేయండి</translation> <translation id="4530494379350999373">మూలం</translation> +<translation id="4531924570968473143">మీరు ఎవరిని ఈ <ph name="DEVICE_TYPE" />కు జోడించాలనుకుంటున్నారు?</translation> <translation id="4532646538815530781">ఈ సైట్ మోషన్ సెన్సార్లను ఉపయోగిస్తోంది.</translation> <translation id="4533846798469727141">ఇప్పుడు "Hey Google" అని చెప్పండి</translation> <translation id="4533985347672295764">CPU సమయం</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">ట్యాబ్ సెర్చ్</translation> <translation id="465878909996028221">కేవలం http, https, ఫైల్ ప్రోటోకాల్లు మాత్రమే బ్రౌజర్ మళ్లింపులకు మద్దతిస్తాయి.</translation> <translation id="4659077111144409915">ప్రాథమిక ఖాతా</translation> +<translation id="4659126640776004816">మీ Google ఖాతాకు మీరు సైన్ ఇన్ చేసినప్పుడు, ఈ ఫీచర్ ఆన్ చేయబడుతుంది.</translation> <translation id="4660476621274971848">ఆశించిన వెర్షన్ "<ph name="EXPECTED_VERSION" />", కానీ ఉన్న వెర్షన్ "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">పరిమాణాన్ని మారుస్తోంది</translation> <translation id="4661407454952063730">కాంటాక్ట్లు, మెసేజ్లు, ఫోటోలు లాంటి డేటాతో సహా యాప్ సేవ్ చేసిన (డెవలపర్ సెట్టింగ్ల ఆధారంగా) ఎలాంటి డేటా అయినా యాప్ డేటా లాగా పరిగణించబడుతుంది.</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">సూచనలు</translation> <translation id="475088594373173692">మొదటి వినియోగదారు</translation> <translation id="4751476147751820511">కదలిక లేదా కాంతి సెన్సార్లు</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" />కు కనెక్ట్ చేయడానికి సెట్టింగ్లను తెరవండి</translation> <translation id="4756378406049221019">ఆపండి/మళ్లీ లోడ్ చేయండి</translation> <translation id="4756388243121344051">&చరిత్ర</translation> <translation id="4759238208242260848">డౌన్లోడ్లు</translation> @@ -3978,6 +3983,7 @@ <translation id="5804241973901381774">అనుమతులు</translation> <translation id="5805697420284793859">విండో మేనేజర్</translation> <translation id="5806773519584576205">0° (డిఫాల్ట్)</translation> +<translation id="5808664694611589238">{0,plural, =1{గెస్ట్ విండోను మూసివేయి}other{గెస్ట్ విండోను మూసివేయి}}</translation> <translation id="5810809306422959727">తల్లిదండ్రుల నియంత్రణల కోసం ఈ ఖాతాకు అర్హత లేదు</translation> <translation id="5812674658566766066">అన్నీ విస్తరించు</translation> <translation id="5814126672212206791">కనెక్షన్ రకం</translation> @@ -4435,6 +4441,7 @@ <translation id="6344170822609224263">నెట్వర్క్ కనెక్షన్ల జాబితాను యాక్సెస్ చేయండి</translation> <translation id="6344576354370880196">సేవ్ చేయబడిన ప్రింటర్లు</translation> <translation id="6345418402353744910">మీ నెట్వర్క్ను అడ్మిన్ కాన్ఫిగర్ చేయడానికి, ప్రాక్సీ <ph name="PROXY" /> కోసం మీ యూజర్నేమ్, పాస్వర్డ్ అవసరం</translation> +<translation id="6345878117466430440">చదివినట్లుగా గుర్తించు</translation> <translation id="6349101878882523185"><ph name="APP_NAME" />ను ఇన్స్టాల్ చేయండి</translation> <translation id="6349170655202535379">సింక్ పని చేయడం లేదు. సైన్ అవుట్ చేసి, తిరిగి మళ్లీ సైన్ ఇన్ చేయండి.</translation> <translation id="6351063337294363751">మీరు ఈ మెనూ నుండి మీ బ్రౌజింగ్ డేటాను తీసివేయవచ్చు</translation> @@ -5021,6 +5028,7 @@ <translation id="7075513071073410194">RSA ఎన్క్రిప్షన్తో PKCS #1 MD5</translation> <translation id="7075625805486468288">HTTPS/SSLసర్టిఫికెట్లు మరియు సెట్టింగ్లను నిర్వహించండి</translation> <translation id="7076293881109082629">సైన్ ఇన్ చేస్తోంది</translation> +<translation id="7076878155205969899">ధ్వనిని మ్యూట్ చేస్తుంది</translation> <translation id="7077829361966535409">సైన్ ఇన్ పేజీ ప్రస్తుత ప్రాక్సీ సెట్టింగ్లను ఉపయోగించి లోడ్ కావడంలో విఫలమైంది. దయచేసి <ph name="GAIA_RELOAD_LINK_START" />మళ్లీ సైన్ ఇన్ చేయడానికి ప్రయత్నించండి<ph name="GAIA_RELOAD_LINK_END" /> లేదా విభిన్న <ph name="PROXY_SETTINGS_LINK_START" />ప్రాక్సీ సెట్టింగ్ల<ph name="PROXY_SETTINGS_LINK_END" />ను ఉపయోగించండి.</translation> <translation id="7078120482318506217">అన్ని నెట్వర్క్లు</translation> <translation id="708060913198414444">ఆడియో చిరునామాను కా&పీ చేయి</translation> @@ -5041,7 +5049,6 @@ <translation id="7099337801055912064">పెద్ద PPDని లోడ్ చేయడం సాధ్యం కాదు. గరిష్ట పరిమాణం 250 kB.</translation> <translation id="7102687220333134671">స్వయంచాలక నవీకరణలు ఆన్ చేయబడ్డాయి</translation> <translation id="7102832101143475489">అభ్యర్థన సమయం ముగిసింది</translation> -<translation id="7105390788077117391">USB ప్రాధాన్యతలు</translation> <translation id="710640343305609397">నెట్వర్క్ సెట్టింగ్లను తెరవండి</translation> <translation id="7108338896283013870">దాచిపెట్టు</translation> <translation id="7108668606237948702">ఎంటర్</translation> @@ -5071,7 +5078,6 @@ <translation id="7136694880210472378">డిఫాల్ట్గా చేయి</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" />కు స్వాగతం</translation> <translation id="7136993520339022828">ఎర్రర్ ఏర్పడింది. ఇతర చిత్రాలను ఎంచుకోవడం ద్వారా దయచేసి మళ్లీ ప్రయత్నించండి.</translation> -<translation id="7138678301420049075">ఇతర</translation> <translation id="713888829801648570">క్షమించండి, మీరు ఆఫ్లైన్లో ఉన్నందున మీ పాస్వర్డ్ను ధ్రువీకరించడం సాధ్యపడదు.</translation> <translation id="7140928199327930795">అందుబాటులో ఉన్న ఇతర పరికరాలు ఏవీ లేవు.</translation> <translation id="7141105143012495934">మీ ఖాతా వివరాలను తిరిగి పొందలేనందున సైన్-ఇన్ విఫలమైంది. దయచేసి మీ నిర్వాహకుడిని సంప్రదించండి లేదా మళ్లీ ప్రయత్నించండి.</translation> @@ -5178,6 +5184,7 @@ <translation id="7280649757394340890">వచనం-నుండి-ప్రసంగం వాయిస్ సెట్టింగ్లు</translation> <translation id="7280877790564589615">అనుమతి అభ్యర్థించబడింది</translation> <translation id="7282992757463864530">సమాచార బార్</translation> +<translation id="7284411326658527427">ప్రతి వ్యక్తి వారి ఖాతాను వ్యక్తిగతీకరించుకోవచ్చు, అలాగే వారి డేటాను ప్రైవేట్గా ఉంచుకోవచ్చు.</translation> <translation id="7287143125007575591">యాక్సెస్ నిరాకరించబడింది.</translation> <translation id="7287411021188441799">డిఫాల్ట్ నేపథ్యాన్ని పునరుద్ధరించండి</translation> <translation id="7288013116963835700"><ph name="DEVICE_TYPE" />కు Linuxను తీసివేయండి</translation> @@ -5753,6 +5760,7 @@ <translation id="7963826112438303517">మీ వాయిస్ నమూనాను సృష్టించడానికి, అప్డేట్ చేయడానికి మీ అసిస్టెంట్ ఈ రికార్డింగ్లను, మీ ప్రసంగ అభ్యర్థనలను ఉపయోగిస్తుంది, ఈ వాయిస్ నమూనా మీరు Voice Match ఆన్ చేసిన పరికరాలలో మాత్రమే నిల్వ చేయబడుతుంది. అసిస్టెంట్ సెట్టింగ్లలో వాయిస్ కార్యకలాపం చూడండి లేదా దానికి తిరిగి శిక్షణను ఇవ్వండి.</translation> <translation id="7966241909927244760">చిత్రం చిరునామాను కా&పీ చేయండి</translation> <translation id="7968072247663421402">ప్రొవైడర్ ఆప్షన్లు</translation> +<translation id="7968198493605442410">లింక్ను టెక్స్ట్కు కాపీ చేయండి</translation> <translation id="7968742106503422125">మీరు కాపీ చేసి, అతికించే డేటాను చదవడం మరియు సవరించడం</translation> <translation id="7968833647796919681">పనితీరు డేటా సేకరణను ప్రారంభించు</translation> <translation id="7968982339740310781">వివరాలను వీక్షించండి</translation> @@ -6130,6 +6138,7 @@ <translation id="8428213095426709021">సెట్టింగ్లు</translation> <translation id="8428271547607112339">పాఠశాల ఖాతాను జోడించండి</translation> <translation id="8428628598981198790">మీ సెక్యూరిటీ కీని ఈ సైట్తో ఉపయోగించలేరు</translation> +<translation id="8428634594422941299">అర్థమైంది</translation> <translation id="84297032718407999">మీరు <ph name="LOGOUT_TIME_LEFT" />లో సైన్ అవుట్ అవుతారు</translation> <translation id="8431190899827883166">నొక్కినవి చూపు</translation> <translation id="8431909052837336408">SIM PINను మార్చండి</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index d7dbc4c..a9bacd4f 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">อ่านและเปลี่ยนข้อมูลทั้งหมดของคุณบนคอมพิวเตอร์และเว็บไซต์ที่คุณเข้าชม</translation> <translation id="1430915738399379752">พิมพ์</translation> <translation id="1431188203598586230">การอัปเดตซอฟต์แวร์ครั้งสุดท้าย</translation> +<translation id="1431402976894535801">บล็อกเว็บไซต์ไม่ให้ทราบว่าคุณใช้งานอยู่</translation> <translation id="1431432486300429272">Google อาจใช้ประวัติการท่องเว็บของคุณเพื่อปรับเปลี่ยน Search และบริการอื่นๆ ของ Google ในแบบของคุณ คุณหรือผู้ปกครองจะเปลี่ยนการตั้งค่านี้ได้ทุกเมื่อที่ myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">จัดการเครื่องมือค้นหา</translation> <translation id="1433811987160647649">ถามก่อนที่จะเข้าถึง</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">อุปกรณ์ที่ไม่รู้จัก [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">บัญชีเจ้าของนี้ต้องเป็นบัญชีที่ลงชื่อเข้าใช้บัญชีแรกในเซสชันการลงชื่อเข้าใช้พร้อมกัน</translation> <translation id="150411034776756821">นำ <ph name="SITE" /> ออก</translation> +<translation id="1504311855864906891">รับคำบรรยายสำหรับสื่อ</translation> <translation id="1504551620756424144">โฟลเดอร์ที่แชร์จะอยู่ใน Windows ที่ <ph name="BASE_DIR" /></translation> <translation id="1506061864768559482">เครื่องมือค้นหา</translation> <translation id="1507170440449692343">หน้านี้ถูกบล็อกไม่ให้เข้าถึงกล้องของคุณ</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">คุณต้องป้อนรหัสผ่านเดียวกัน 2 ครั้ง</translation> <translation id="1652326691684645429">เปิดใช้การแชร์ใกล้เคียง</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{เพิ่มเครื่องพิมพ์ลงใน Google Cloud Print เพื่อให้คุณสามารถพิมพ์ได้จากทุกที่}other{เพิ่มเครื่องพิมพ์ # เครื่องลงใน Google Cloud Print เพื่อให้คุณสามารถพิมพ์ได้จากทุกที่}}</translation> +<translation id="1653575510930452864">คัดลอกลิงก์ไปยังข้อความ</translation> <translation id="1656528038316521561">ความทึบแสงของพื้นหลัง</translation> <translation id="1657406563541664238">ช่วยปรับปรุง <ph name="PRODUCT_NAME" /> ให้ดีขึ้นโดยการส่งสถิติการใช้งานและรายงานปัญหาไปยัง Google โดยอัตโนมัติ</translation> <translation id="1657937299377480641">หากต้องการลงชื่อเข้าใช้อีกครั้งเพื่อเข้าถึงทรัพยากรทางการศึกษา ให้ขออนุญาตจากผู้ปกครอง</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">ผู้มีสิทธิ์ออกใบรับรองไม่สมบูรณ์</translation> <translation id="2182058453334755893">คัดลอกไปยังคลิปบอร์ดแล้ว</translation> <translation id="2184515124301515068">ให้ Chrome เลือกว่าเว็บไซต์จะเล่นเสียงได้เมื่อใด (แนะนำ)</translation> +<translation id="2187243482123994665">การใช้งานอยู่ของผู้ใช้</translation> <translation id="2187675480456493911">ซิงค์กับอุปกรณ์อื่นในบัญชีของคุณแล้ว ระบบจะไม่ซิงค์การตั้งค่าที่ผู้ใช้คนอื่นๆ แก้ไข <ph name="LINK_BEGIN" />ดูข้อมูลเพิ่มเติม<ph name="LINK_END" /></translation> <translation id="2187895286714876935">ข้อผิดพลาดในการนำเข้าใบรับรองเซิร์ฟเวอร์</translation> <translation id="2187906491731510095">อัปเดตส่วนขยายแล้ว</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">ป้อน PIN 4 หลัก (0000-9999)</translation> <translation id="2399939490305346086">ข้อมูลการลงชื่อเข้าใช้ในคีย์ความปลอดภัย</translation> <translation id="2400664245143453337">ต้องอัปเดตทันที</translation> -<translation id="2407481962792080328">ฟีเจอร์นี้จะเปิดเมื่อคุณลงชื่อเข้าใช้บัญชี Google</translation> <translation id="2408018932941436077">กำลังบันทึกบัตร</translation> <translation id="2408955596600435184">ป้อน PIN ของคุณ</translation> <translation id="241082044617551207">ปลั๊กอินที่ไม่รู้จัก</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963">ผลิตภัณฑ์ที่ไม่รู้จัก <ph name="PRODUCT_ID" /> จากผู้ขาย <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">บริการต่อไปนี้ช่วยให้ข้อมูลของคุณปลอดภัยและมั่นใจได้ โดยคุณปิดฟีเจอร์เหล่านี้ได้ทุกเมื่อ</translation> <translation id="3164329792803560526">กำลังแชร์แท็บนี้กับ <ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">ถามเมื่อเว็บไซต์ต้องการทราบเมื่อคุณใช้งานอยู่</translation> <translation id="3165390001037658081">ผู้ให้บริการบางรายอาจบล็อกฟีเจอร์นี้</translation> <translation id="316652501498554287">บัญชี G Suite for Education</translation> <translation id="3169472444629675720">Discover</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">ต้องการสร้างโปรไฟล์ใหม่สำหรับทำงานไหม</translation> <translation id="452750746583162491">ตรวจสอบข้อมูลที่ซิงค์</translation> <translation id="4530494379350999373">ต้นทาง</translation> +<translation id="4531924570968473143">คุณต้องการเพิ่มใครใน <ph name="DEVICE_TYPE" /> เครื่องนี้</translation> <translation id="4532646538815530781">เว็บไซต์นี้ใช้เซ็นเซอร์ตรวจจับความเคลื่อนไหวอยู่</translation> <translation id="4533846798469727141">ตอนนี้ให้พูดว่า "Hey Google"</translation> <translation id="4533985347672295764">เวลา CPU</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">การค้นหาแท็บ</translation> <translation id="465878909996028221">การเปลี่ยนเส้นทางเบราว์เซอร์รองรับเฉพาะ http, https และโปรโตคอลไฟล์เท่านั้น</translation> <translation id="4659077111144409915">บัญชีหลัก</translation> +<translation id="4659126640776004816">ฟีเจอร์นี้จะเปิดเมื่อคุณลงชื่อเข้าใช้บัญชี Google</translation> <translation id="4660476621274971848">เวอร์ชันที่คาดการณ์ "<ph name="EXPECTED_VERSION" />" แต่เวอร์ชันที่แจ้งคือ "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">กำลังปรับขนาด</translation> <translation id="4661407454952063730">ข้อมูลแอปอาจเป็นข้อมูลใดก็ตามที่แอปบันทึกไว้ (ขึ้นอยู่กับการตั้งค่าของนักพัฒนาซอฟต์แวร์) ซึ่งรวมถึงข้อมูลอย่างเช่นรายชื่อติดต่อ ข้อความ และรูปภาพ</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">คำแนะนำ</translation> <translation id="475088594373173692">ผู้ใช้แรก</translation> <translation id="4751476147751820511">เซ็นเซอร์จับความเคลื่อนไหวหรือเซ็นเซอร์แสง</translation> -<translation id="4752124003533492687">เปิดการตั้งค่าเพื่อเชื่อมต่อ <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">หยุด/โหลดซ้ำ</translation> <translation id="4756388243121344051">&ประวัติการเข้าชม</translation> <translation id="4759238208242260848">ดาวน์โหลด</translation> @@ -3978,6 +3983,7 @@ <translation id="5804241973901381774">การอนุญาต</translation> <translation id="5805697420284793859">ตัวจัดการหน้าต่าง</translation> <translation id="5806773519584576205">0° (ค่าเริ่มต้น)</translation> +<translation id="5808664694611589238">{0,plural, =1{ปิดหน้าต่างสำหรับผู้มาเยือน}other{ปิดหน้าต่างสำหรับผู้มาเยือน}}</translation> <translation id="5810809306422959727">บัญชีนี้ไม่มีสิทธิ์ใช้การควบคุมโดยผู้ปกครอง</translation> <translation id="5812674658566766066">ขยายทั้งหมด</translation> <translation id="5814126672212206791">ประเภทการเชื่อมต่อ</translation> @@ -4435,6 +4441,7 @@ <translation id="6344170822609224263">เข้าถึงรายการเชื่อมต่อเครือข่าย</translation> <translation id="6344576354370880196">เครื่องพิมพ์ที่บันทึกไว้</translation> <translation id="6345418402353744910">ชื่อผู้ใช้และรหัสผ่านของคุณจำเป็นสำหรับพร็อกซี <ph name="PROXY" /> เพื่อให้ผู้ดูแลระบบกำหนดค่าเครือข่ายได้</translation> +<translation id="6345878117466430440">ทำเครื่องหมายว่าอ่านแล้ว</translation> <translation id="6349101878882523185">ติดตั้ง <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">การซิงค์ไม่ทำงาน ลองออกจากระบบแล้วลงชื่อเข้าใช้อีกครั้ง</translation> <translation id="6351063337294363751">คุณสามารถล้างข้อมูลการท่องเว็บจากเมนูนี้ได้</translation> @@ -5021,6 +5028,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 พร้อมการเข้ารหัส RSA</translation> <translation id="7075625805486468288">จัดการใบรับรอง HTTPS/SSL และการตั้งค่า</translation> <translation id="7076293881109082629">กำลังลงชื่อเข้าใช้</translation> +<translation id="7076878155205969899">ปิดเสียง</translation> <translation id="7077829361966535409">หน้าลงชื่อเข้าใช้ไม่สามารถโหลดโดยใช้การตั้งค่าพร็อกซีในปัจจุบัน โปรด <ph name="GAIA_RELOAD_LINK_START" />ลองลงชื่อเข้าใช้อีกครั้ง<ph name="GAIA_RELOAD_LINK_END" /> หรือใช้<ph name="PROXY_SETTINGS_LINK_START" />การตั้งค่าพร็อกซี<ph name="PROXY_SETTINGS_LINK_END" />อื่นๆ</translation> <translation id="7078120482318506217">ทุกเครือข่าย</translation> <translation id="708060913198414444">คัด&ลอกที่อยู่ของเสียง</translation> @@ -5041,7 +5049,6 @@ <translation id="7099337801055912064">โหลด PPD ขนาดใหญ่ไม่ได้ ขนาดต้องไม่เกิน 250 KB</translation> <translation id="7102687220333134671">การอัปเดตอัตโนมัติเปิดอยู่</translation> <translation id="7102832101143475489">คำขอหมดเวลาแล้ว</translation> -<translation id="7105390788077117391">ค่ากำหนด USB</translation> <translation id="710640343305609397">เปิดการตั้งค่าเครือข่าย</translation> <translation id="7108338896283013870">ซ่อน</translation> <translation id="7108668606237948702">Enter</translation> @@ -5071,7 +5078,6 @@ <translation id="7136694880210472378">ทำให้เป็นค่าเริ่มต้น</translation> <translation id="7136984461011502314">ยินดีต้อนรับสู่ <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">เกิดข้อผิดพลาด โปรดลองอีกครั้งโดยเลือกภาพอื่น</translation> -<translation id="7138678301420049075">อื่นๆ</translation> <translation id="713888829801648570">ขออภัย ไม่สามารถยืนยันรหัสผ่านของคุณได้เพราะคุณออฟไลน์อยู่</translation> <translation id="7140928199327930795">ไม่มีอุปกรณ์อื่นๆ ที่พร้อมใช้งาน</translation> <translation id="7141105143012495934">การลงชื่อเข้าใช้ล้มเหลวเนื่องจากไม่สามารถเรียกคืนรายละเอียดบัญชีของคุณได้ โปรดติดต่อผู้ดูแลระบบของคุณหรือลองอีกครั้ง</translation> @@ -5178,6 +5184,7 @@ <translation id="7280649757394340890">การตั้งค่าเสียงของการอ่านออกเสียงข้อความ</translation> <translation id="7280877790564589615">ขอสิทธิ์แล้ว</translation> <translation id="7282992757463864530">แถบข้อมูล</translation> +<translation id="7284411326658527427">โดยแต่ละคนจะปรับเปลี่ยนการตั้งค่าบัญชีในแบบของตนและเก็บเป็นข้อมูลส่วนตัวได้</translation> <translation id="7287143125007575591">ปฏิเสธการเข้าถึง</translation> <translation id="7287411021188441799">คืนค่าพื้นหลังเริ่มต้น</translation> <translation id="7288013116963835700">นำ Linux ออกจาก <ph name="DEVICE_TYPE" /></translation> @@ -5754,6 +5761,7 @@ <translation id="7963826112438303517">Assistant จะใช้ไฟล์เสียงและเสียงคำขอของคุณในการสร้างและอัปเดตรูปแบบเสียง ซึ่งจะจัดเก็บไว้ในอุปกรณ์ที่คุณเปิด Voice Match เท่านั้น ดูหรือฝึกกิจกรรมเสียงอีกครั้งในการตั้งค่า Assistant</translation> <translation id="7966241909927244760">คัด&ลอกที่อยู่รูปภาพ</translation> <translation id="7968072247663421402">ตัวเลือกผู้ให้บริการ</translation> +<translation id="7968198493605442410">คัดลอกลิงก์ไปยังข้อความ</translation> <translation id="7968742106503422125">อ่านและแก้ไขข้อมูลที่คุณคัดลอกและวาง</translation> <translation id="7968833647796919681">เปิดใช้งานการเก็บรวบรวมข้อมูลผลการปฏิบัติงาน</translation> <translation id="7968982339740310781">ดูรายละเอียด</translation> @@ -6134,6 +6142,7 @@ <translation id="8428213095426709021">การตั้งค่า</translation> <translation id="8428271547607112339">เพิ่มบัญชีโรงเรียน</translation> <translation id="8428628598981198790">คีย์ความปลอดภัยของคุณใช้กับเว็บไซต์นี้ไม่ได้</translation> +<translation id="8428634594422941299">รับทราบ</translation> <translation id="84297032718407999">คุณจะออกจากระบบใน <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">แสดงการแตะ</translation> <translation id="8431909052837336408">เปลี่ยน PIN ของซิม</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index 44560e7..0c45af9 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Bilgisayarınızda ve ziyaret ettiğiniz web sitelerinde tüm verilerinizi okuma ve değiştirme</translation> <translation id="1430915738399379752">Yazdır</translation> <translation id="1431188203598586230">Son yazılım güncellemesi</translation> +<translation id="1431402976894535801">Etkin olduğunuzda sitelerin bilmesini engelleyin</translation> <translation id="1431432486300429272">Google, Arama ve diğer Google hizmetlerini kişiselleştirmek için tarama geçmişinizi kullanabilir. Bunu istediğiniz zaman siz veya ebeveyniniz myaccount.google.com/activitycontrols/search adresinden değiştirebilirsiniz</translation> <translation id="1432581352905426595">Arama motorlarını yönet</translation> <translation id="1433811987160647649">Erişmeden önce sor</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Bilinmeyen cihaz [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Bu sahip hesabının bir çoklu oturumda ilk oturum açan hesap olması gerekir.</translation> <translation id="150411034776756821"><ph name="SITE" /> sitesini kaldır</translation> +<translation id="1504311855864906891">Medyanıza altyazı ekleyin</translation> <translation id="1504551620756424144">Paylaşılan klasörleri Windows'da <ph name="BASE_DIR" /> adresinde bulabilirsiniz.</translation> <translation id="1506061864768559482">Arama motoru</translation> <translation id="1507170440449692343">Bu sayfanın kameranıza erişimi engellenmiştir.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Aynı parolayı iki kez girmelisiniz</translation> <translation id="1652326691684645429">Yakındakilerle Paylaş'ı etkinleştir</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{İstediğiniz yerden yazdırma işlemi yapabilmek için yazıcıyı Google Cloud Print'e ekleyin.}other{İstediğiniz yerden yazdırma işlemi yapabilmek için # yazıcıyı Google Cloud Print'e ekleyin.}}</translation> +<translation id="1653575510930452864">Bağlantıyı Metne kopyala</translation> <translation id="1656528038316521561">Arka plan opaklığı</translation> <translation id="1657406563541664238">Google'a otomatik olarak kullanım istatistikleri ve kilitlenme raporları göndererek <ph name="PRODUCT_NAME" /> ürününü iyileştirmemize yardımcı olun.</translation> <translation id="1657937299377480641">Eğitim kaynaklarına erişmek üzere tekrar oturum açmak için ebeveyninizden size izin vermesini isteyin</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">CA Uzlaşması</translation> <translation id="2182058453334755893">Panonuza Kopyalandı</translation> <translation id="2184515124301515068">Sitelerin ne zaman ses çalacağını Chrome'un seçmesine izin verin (önerilir)</translation> +<translation id="2187243482123994665">Kullanıcı etkinliği</translation> <translation id="2187675480456493911">Hesabınızdaki diğer cihazlarla senkronize edildi. Diğer kullanıcılar tarafından değiştirilen ayarlar senkronize edilmez. <ph name="LINK_BEGIN" />Daha fazla bilgi<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Sunucu Sertifikası İçe Aktarma Hatası</translation> <translation id="2187906491731510095">Uzantılar güncellendi</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">4 basamaklı PIN'i girin (0000-9999)</translation> <translation id="2399939490305346086">Güvenlik anahtarı oturum açma verileri</translation> <translation id="2400664245143453337">Hemen güncelleme gerekli</translation> -<translation id="2407481962792080328">Google Hesabınızda oturum açtığınızda bu özellik devreye girer</translation> <translation id="2408018932941436077">Kart kaydediliyor</translation> <translation id="2408955596600435184">PIN'inizi girin</translation> <translation id="241082044617551207">Bilinmeyen eklenti</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963"><ph name="VENDOR_ID" /> adlı satıcı firma tarafından sağlanan <ph name="PRODUCT_ID" /> ürün kimliğine sahip bilinmeyen ürün</translation> <translation id="3163254451837720982">Aşağıdaki hizmetler verilerinizin güvende kalmasına yardımcı olur. Bu özellikleri istediğiniz zaman devre dışı bırakabilirsiniz.</translation> <translation id="3164329792803560526">Bu sekme <ph name="APP_NAME" /> ile paylaşılıyor</translation> +<translation id="3165371858310906303">Bir site, etkin olduğumu bilmek istediğinde sor</translation> <translation id="3165390001037658081">Bazı operatörler bu özelliği engelleyebilir.</translation> <translation id="316652501498554287">Eğitim için G Suite hesapları</translation> <translation id="3169472444629675720">Discover</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">İş için yeni profil oluşturulsun mu?</translation> <translation id="452750746583162491">Senkronize edilmiş verilerinizi inceleyin</translation> <translation id="4530494379350999373">Kaynak</translation> +<translation id="4531924570968473143">Bu <ph name="DEVICE_TYPE" /> cihazına kimleri eklemek istersiniz?</translation> <translation id="4532646538815530781">Bu site hareket sensörlerini kullanıyor.</translation> <translation id="4533846798469727141">Şimdi "Hey Google" deyin</translation> <translation id="4533985347672295764">CPU Süresi</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">Sekme araması</translation> <translation id="465878909996028221">Yalnızca http, https ve dosya protokolleri tarayıcı yönlendirmeleri için desteklenir.</translation> <translation id="4659077111144409915">Birincil hesap</translation> +<translation id="4659126640776004816">Google Hesabınızda oturum açtığınızda bu özellik devreye girer.</translation> <translation id="4660476621274971848">Beklenen sürüm "<ph name="EXPECTED_VERSION" />" idi, ancak "<ph name="NEW_ID" />" sürümü belirlendi</translation> <translation id="4660540330091848931">Yeniden boyutlandırılıyor</translation> <translation id="4661407454952063730">Uygulama verisi, geliştiricinin ayarlarına bağlı olarak bir uygulamanın kaydettiği her tür veri olabilir. Bunlar arasında kişiler, mesajlar ve fotoğraflar gibi veriler bulunabilir.</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">Öneriler</translation> <translation id="475088594373173692">İlk kullanıcı</translation> <translation id="4751476147751820511">Hareket veya ışık sensörleri</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" /> cihazını bağlamak için Ayarlar'ı açın</translation> <translation id="4756378406049221019">Durdur/Tekrar yükle</translation> <translation id="4756388243121344051">&Geçmiş</translation> <translation id="4759238208242260848">İndirilenler</translation> @@ -3979,6 +3984,7 @@ <translation id="5804241973901381774">İzinler</translation> <translation id="5805697420284793859">Pencere yöneticisi</translation> <translation id="5806773519584576205">0° (Varsayılan)</translation> +<translation id="5808664694611589238">{0,plural, =1{Misafir penceresini kapat}other{Misafir penceresini kapat}}</translation> <translation id="5810809306422959727">Bu hesap, ebeveyn denetimleri için uygun değil</translation> <translation id="5812674658566766066">Tümünü genişlet</translation> <translation id="5814126672212206791">Bağlantı türü</translation> @@ -4436,6 +4442,7 @@ <translation id="6344170822609224263">Ağ bağlantıları listesine erişme</translation> <translation id="6344576354370880196">Kayıtlı yazıcılar</translation> <translation id="6345418402353744910">Yöneticinin ağınızı yapılandırabilmesi için <ph name="PROXY" /> proxy'sine ait kullanıcı adınız ve şifreniz gerekiyor</translation> +<translation id="6345878117466430440">Okundu olarak işaretle</translation> <translation id="6349101878882523185"><ph name="APP_NAME" /> uygulamasını yükle</translation> <translation id="6349170655202535379">Senkronizasyon çalışmıyor. Oturumu kapatıp tekrar açmayı deneyin.</translation> <translation id="6351063337294363751">Bu menüyü kullanarak tarama verilerinizi temizleyebilirsiniz</translation> @@ -5022,6 +5029,7 @@ <translation id="7075513071073410194">PKCS #1 RSA Şifrelemeli MD5</translation> <translation id="7075625805486468288">HTTPS/SSL sertifikalarını ve ayarlarını yönetme</translation> <translation id="7076293881109082629">Oturum açılıyor</translation> +<translation id="7076878155205969899">Sesi kapat</translation> <translation id="7077829361966535409">Oturum açma sayfası, mevcut proxy ayarları kullanılarak yüklenemedi. Lütfen <ph name="GAIA_RELOAD_LINK_START" />tekrar oturum açmayı deneyin<ph name="GAIA_RELOAD_LINK_END" /> veya farklı <ph name="PROXY_SETTINGS_LINK_START" />proxy ayarları<ph name="PROXY_SETTINGS_LINK_END" /> kullanın.</translation> <translation id="7078120482318506217">Tüm ağlar</translation> <translation id="708060913198414444">Ses adresini k&opyala</translation> @@ -5042,7 +5050,6 @@ <translation id="7099337801055912064">Büyük PPD yüklenemiyor. Maksimum boyut 250 kB'tır.</translation> <translation id="7102687220333134671">Otomatik güncellemeler açık</translation> <translation id="7102832101143475489">İstek zaman aşımına uğradı</translation> -<translation id="7105390788077117391">USB tercihleri</translation> <translation id="710640343305609397">Ağ ayarlarını aç</translation> <translation id="7108338896283013870">Gizle</translation> <translation id="7108668606237948702">enter</translation> @@ -5072,7 +5079,6 @@ <translation id="7136694880210472378">Varsayılan yap</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> Uygulamasına Hoş Geldiniz</translation> <translation id="7136993520339022828">Hata oluştu. Lütfen diğer görselleri seçerek tekrar deneyin.</translation> -<translation id="7138678301420049075">Diğer</translation> <translation id="713888829801648570">Çevrimdışı olduğunuz için maalesef şifreniz doğrulanamadı.</translation> <translation id="7140928199327930795">Başka kullanılabilir cihaz yok.</translation> <translation id="7141105143012495934">Hesap ayrıntılarınız alınamadığı için oturum açma işlemi başarısız oldu. Lütfen yöneticinizle iletişime geçin veya tekrar deneyin.</translation> @@ -5179,6 +5185,7 @@ <translation id="7280649757394340890">Metin Okuma ses ayarları</translation> <translation id="7280877790564589615">İzin istendi</translation> <translation id="7282992757463864530">Bilgi çubuğu</translation> +<translation id="7284411326658527427">Her kullanıcı, hesabını kişiselleştirip verilerini gizli tutabilir.</translation> <translation id="7287143125007575591">Erişim reddedildi.</translation> <translation id="7287411021188441799">Varsayılan arka planı geri yükle</translation> <translation id="7288013116963835700"><ph name="DEVICE_TYPE" /> için Linux'u kaldır</translation> @@ -5754,6 +5761,7 @@ <translation id="7963826112438303517">Asistanınız bu kayıtları ve sesli isteklerinizi ses modelinizi oluşturmak ve güncellemek için kullanır. Ses modeliniz yalnızca Voice Match özelliğini etkinleştirdiğiniz cihazlarda saklanır. Konuşma etkinliğini Asistan Ayarları'ndan görüntüleyebilir veya yeniden eğitebilirsiniz.</translation> <translation id="7966241909927244760">Resim Adresini K&opyala</translation> <translation id="7968072247663421402">Sağlayıcı seçenekleri</translation> +<translation id="7968198493605442410">Bağlantıyı metne kopyala</translation> <translation id="7968742106503422125">Kopyaladığınız ve yapıştırdığınız verileri okuma ve değiştirme</translation> <translation id="7968833647796919681">Performans verisi toplamayı etkinleştir</translation> <translation id="7968982339740310781">Ayrıntıları görüntüle</translation> @@ -6134,6 +6142,7 @@ <translation id="8428213095426709021">Ayarlar</translation> <translation id="8428271547607112339">Okul hesabı ekle</translation> <translation id="8428628598981198790">Güvenlik anahtarınız bu sitede kullanılamaz</translation> +<translation id="8428634594422941299">Anladım!</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> içinde çıkış yapacaksınız</translation> <translation id="8431190899827883166">Dokunmaları göster</translation> <translation id="8431909052837336408">SIM PIN Kodunu Değiştir</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index c0070ec..78f43b4 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Читати й змінювати всі ваші дані на комп’ютері та веб-сайтах, які ви відвідуєте</translation> <translation id="1430915738399379752">Друк</translation> <translation id="1431188203598586230">Останнє оновлення програмного забезпечення</translation> +<translation id="1431402976894535801">Блокувати сайтам доступ до даних про те, чи ви активні</translation> <translation id="1431432486300429272">Google може використовувати твою історію веб-перегляду, щоб персоналізувати Пошук та інші сервіси Google. Ти або твої батьки можете змінити це налаштування на сторінці myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Керування пошуковими системами</translation> <translation id="1433811987160647649">Запитувати дозвіл, перш ніж надавати доступ</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Невідомий пристрій [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Цей обліковий запис власника має бути першим обліковим записом, з якого здійснено вхід під час сеансу паралельного входу.</translation> <translation id="150411034776756821">Видалити дані сайту <ph name="SITE" /></translation> +<translation id="1504311855864906891">Додавати субтитри до свого медіаконтенту</translation> <translation id="1504551620756424144">Спільні папки у Windows доступні за шляхом <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Пошукова система</translation> <translation id="1507170440449692343">Доступ цієї сторінки до вашої камери заблоковано.</translation> @@ -569,6 +571,7 @@ <translation id="1651008383952180276">Потрібно двічі ввести однакову парольну фразу</translation> <translation id="1652326691684645429">Увімкнути функцію "Передавання поблизу"</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Додайте принтер у Google Cloud Print, щоб друкувати з будь-якого пристрою.}one{Додайте # принтер у Google Cloud Print, щоб друкувати з будь-якого пристрою.}few{Додайте # принтери в Google Cloud Print, щоб друкувати з будь-якого пристрою.}many{Додайте # принтерів у Google Cloud Print, щоб друкувати з будь-якого пристрою.}other{Додайте # принтера в Google Cloud Print, щоб друкувати з будь-якого пристрою.}}</translation> +<translation id="1653575510930452864">Копіювати посилання на текст</translation> <translation id="1656528038316521561">Прозорість фону</translation> <translation id="1657406563541664238">Допоможіть покращити <ph name="PRODUCT_NAME" />, автоматично надсилаючи статистику використання та звіти про аварійне завершення роботи в Google</translation> <translation id="1657937299377480641">Щоб знову ввійти в обліковий запис для доступу до навчальних ресурсів, попроси батьків надати дозвіл</translation> @@ -1002,6 +1005,7 @@ <translation id="2178614541317717477">Дискредитація ЦС</translation> <translation id="2182058453334755893">Скопійовано в буфер обміну</translation> <translation id="2184515124301515068">Дозволити Chrome вибирати, коли відтворювати звук на сайтах (рекомендується)</translation> +<translation id="2187243482123994665">Дані про те, чи ви активні</translation> <translation id="2187675480456493911">Мережу синхронізовано з іншими пристроями у вашому обліковому записі. Налаштування, які змінюють інші користувачі, не синхронізуватимуться. <ph name="LINK_BEGIN" />Докладніше<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Помилка імпортування сертифіката сервера</translation> <translation id="2187906491731510095">Розширення оновлено</translation> @@ -1190,7 +1194,6 @@ <translation id="2396783860772170191">Введіть 4-значний PIN-код (0000–9999)</translation> <translation id="2399939490305346086">Дані для входу для ключа безпеки</translation> <translation id="2400664245143453337">Потрібно негайно встановити оновлення</translation> -<translation id="2407481962792080328">Ця функція вмикається, коли ви входите в обліковий запис Google</translation> <translation id="2408018932941436077">Зберігання картки</translation> <translation id="2408955596600435184">Введіть PIN-код</translation> <translation id="241082044617551207">Невідомий плагін</translation> @@ -1830,6 +1833,7 @@ <translation id="3163201441334626963">Невідомий продукт <ph name="PRODUCT_ID" /> від постачальника <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Сервіси нижче допомагають захищати ваші дані. Ви можете будь-коли вимкнути ці функції.</translation> <translation id="3164329792803560526">Додаток <ph name="APP_NAME" /> має доступ до цієї вкладки</translation> +<translation id="3165371858310906303">Запитувати, коли сайт хоче отримати доступ до даних про те, чи ви активні</translation> <translation id="3165390001037658081">Деякі оператори можуть блокувати цю функцію.</translation> <translation id="316652501498554287">Облікові записи G Suite for Education</translation> <translation id="3169472444629675720">Discover</translation> @@ -2947,6 +2951,7 @@ <translation id="4527186207340858212">Створити новий робочий профіль?</translation> <translation id="452750746583162491">Переглянути синхронізовані дані</translation> <translation id="4530494379350999373">Походження</translation> +<translation id="4531924570968473143">Для кого ви хочете додати профіль на цьому пристрої <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Цей сайт використовує датчики руху.</translation> <translation id="4533846798469727141">Тепер скажіть "Hey Google"</translation> <translation id="4533985347672295764">Процесорний час</translation> @@ -3066,6 +3071,7 @@ <translation id="4657810666108475055">Пошук вкладок</translation> <translation id="465878909996028221">Для переспрямування у веб-переглядачі підтримуються лише http, https і протоколи файлів.</translation> <translation id="4659077111144409915">Основний обліковий запис</translation> +<translation id="4659126640776004816">Ця функція вмикається, коли ви входите в обліковий запис Google.</translation> <translation id="4660476621274971848">Очікувалася версія <ph name="EXPECTED_VERSION" />, але отримано <ph name="NEW_ID" /></translation> <translation id="4660540330091848931">Змінення розміру</translation> <translation id="4661407454952063730">Даними додатків може бути будь-яка інформація, яку вони зберігають (залежно від налаштувань розробника), зокрема такі відомості, як контакти, повідомлення та фотографії.</translation> @@ -3131,7 +3137,6 @@ <translation id="4750394297954878236">Пропозиції</translation> <translation id="475088594373173692">Перший користувач</translation> <translation id="4751476147751820511">Датчики руху та світла</translation> -<translation id="4752124003533492687">Щоб підключити пристрій <ph name="USB_DEVICE_NAME" />, відкрийте налаштування</translation> <translation id="4756378406049221019">Зупинити/оновити</translation> <translation id="4756388243121344051">&Історія</translation> <translation id="4759238208242260848">Завантаження</translation> @@ -3978,6 +3983,7 @@ <translation id="5804241973901381774">Дозволи</translation> <translation id="5805697420284793859">Диспетчер вікон</translation> <translation id="5806773519584576205">0° (за умовчанням)</translation> +<translation id="5808664694611589238">{0,plural, =1{Закрити вікно в гостьовому режимі}one{Закрити вікна в гостьовому режимі}few{Закрити вікна в гостьовому режимі}many{Закрити вікна в гостьовому режимі}other{Закрити вікна в гостьовому режимі}}</translation> <translation id="5810809306422959727">Для цього облікового запису не можна ввімкнути батьківський контроль</translation> <translation id="5812674658566766066">Розгорнути всі</translation> <translation id="5814126672212206791">Тип з’єднання</translation> @@ -4435,6 +4441,7 @@ <translation id="6344170822609224263">Отримувати доступ до списку мережевих з’єднань</translation> <translation id="6344576354370880196">Збережені принтери</translation> <translation id="6345418402353744910">Укажіть своє ім'я користувача та пароль для проксі <ph name="PROXY" />, щоб адміністратор міг налаштувати вашу мережу</translation> +<translation id="6345878117466430440">Позначити як прочитане</translation> <translation id="6349101878882523185">Установіть додаток <ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Синхронізація не працює. Вийдіть з облікового запису та ввійдіть у нього знову.</translation> <translation id="6351063337294363751">Ви можете очистити дані веб-перегляду з цього меню</translation> @@ -5021,6 +5028,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 із шифруванням RSA</translation> <translation id="7075625805486468288">Керування сертифікатами та налаштуваннями HTTPS або SSL</translation> <translation id="7076293881109082629">Вхід</translation> +<translation id="7076878155205969899">Вимикає звук</translation> <translation id="7077829361966535409">Не вдалося завантажити сторінку входу за допомогою поточних налаштувань проксі-сервера. <ph name="GAIA_RELOAD_LINK_START" />Спробуйте ввійти знову<ph name="GAIA_RELOAD_LINK_END" /> або скористайтеся іншими <ph name="PROXY_SETTINGS_LINK_START" />налаштуваннями проксі-сервера<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Усі мережі</translation> <translation id="708060913198414444">Копіювати адресу аудіо</translation> @@ -5041,7 +5049,6 @@ <translation id="7099337801055912064">Не вдається завантажити великий файл PPD. Розмір не може перевищувати 250 КБ.</translation> <translation id="7102687220333134671">Автоматичні оновлення ввімкнено</translation> <translation id="7102832101143475489">Час очікування запиту минув</translation> -<translation id="7105390788077117391">Параметри USB</translation> <translation id="710640343305609397">Відкрити мережеві налаштування</translation> <translation id="7108338896283013870">Сховати</translation> <translation id="7108668606237948702">Enter</translation> @@ -5071,7 +5078,6 @@ <translation id="7136694880210472378">Установити за умовчанням</translation> <translation id="7136984461011502314">Вас вітає <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Виявлено помилку. Повторіть спробу, вибравши інші зображення.</translation> -<translation id="7138678301420049075">Інше</translation> <translation id="713888829801648570">На жаль, неможливо підтвердити ваш пароль, оскільки ви не під’єднані до Інтернету.</translation> <translation id="7140928199327930795">Немає інших доступних пристроїв.</translation> <translation id="7141105143012495934">Помилка входу. Не вдалось отримати дані вашого облікового запису. Зв’яжіться з адміністратором або повторіть спробу.</translation> @@ -5178,6 +5184,7 @@ <translation id="7280649757394340890">Налаштування голосу для синтезу мовлення</translation> <translation id="7280877790564589615">Потрібен дозвіл</translation> <translation id="7282992757463864530">Інформаційна панель</translation> +<translation id="7284411326658527427">Кожний користувач може персоналізувати свій обліковий запис і надійно зберігати особисті дані.</translation> <translation id="7287143125007575591">У доступі відмовлено.</translation> <translation id="7287411021188441799">Відновити фон за умовчанням</translation> <translation id="7288013116963835700">Видалити Linux для пристроїв <ph name="DEVICE_TYPE" /></translation> @@ -5754,6 +5761,7 @@ <translation id="7963826112438303517">За допомогою цих аудіозаписів і усних запитів Асистент створює й оновлює зразок вашого голосу, що зберігається лише на пристроях, на яких ви ввімкнули Voice Match. Переглянути чи оновити голосові команди можна в налаштуваннях Асистента.</translation> <translation id="7966241909927244760">Копіювати адресу зображення</translation> <translation id="7968072247663421402">Доступні постачальники</translation> +<translation id="7968198493605442410">Копіювати посилання на текст</translation> <translation id="7968742106503422125">Переглядати та змінювати дані, які копіюються</translation> <translation id="7968833647796919681">Увімкнути збір даних про ефективність</translation> <translation id="7968982339740310781">Переглянути деталі</translation> @@ -6134,6 +6142,7 @@ <translation id="8428213095426709021">Налаштування</translation> <translation id="8428271547607112339">Додати обліковий запис закладу освіти</translation> <translation id="8428628598981198790">Ваші ключі безпеки не можна використовувати на цьому сайті</translation> +<translation id="8428634594422941299">Зрозуміло</translation> <translation id="84297032718407999">Ви вийдете через <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Показувати дотики</translation> <translation id="8431909052837336408">Змінити PIN-код SIM-карти</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb index 5fdb95a..c18e6ea 100644 --- a/chrome/app/resources/generated_resources_ur.xtb +++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -428,6 +428,7 @@ <translation id="1500297251995790841">نامعلوم آلہ [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">اس مالک کے اکاؤنٹ کو متعدد سائن ان سیشن میں پہلا سائن ان کردہ اکاؤنٹ ہونا چاہئے۔</translation> <translation id="150411034776756821"><ph name="SITE" /> کو ہٹائیں</translation> +<translation id="1504311855864906891">اپنے میڈیا کے لیے کیپشنز حاصل کریں</translation> <translation id="1504551620756424144">ونڈوز میں اشتراک کردہ فولڈرز <ph name="BASE_DIR" /> میں دستیاب ہیں۔</translation> <translation id="1506061864768559482">تلاش انجن</translation> <translation id="1507170440449692343">اس صفحہ کو آپ کے کیمرا تک رسائی حاصل کرنے سے مسدود کر دیا گیا ہے۔</translation> @@ -1191,7 +1192,6 @@ <translation id="2396783860772170191">4 ہندسے کا پن درج کریں (0000-9999)</translation> <translation id="2399939490305346086">سیکیورٹی کلید کا سائن ان ڈیٹا</translation> <translation id="2400664245143453337">فوری طور پر اپ ڈیٹ درکار ہے</translation> -<translation id="2407481962792080328">جب آپ اپنے Google اکاؤنٹ میں سائن ان کرتے ہیں، تو یہ خصوصیت آن ہو جاتی ہے</translation> <translation id="2408018932941436077">کارڈ محفوظ ہو رہا ہے</translation> <translation id="2408955596600435184">اپنا PIN درج کریں</translation> <translation id="241082044617551207">نامعلوم پلگ ان</translation> @@ -3067,6 +3067,7 @@ <translation id="4657810666108475055">ٹیب تلاش</translation> <translation id="465878909996028221">صرف http، https اور فائل پروٹوکولز ہی براؤزر کے ری ڈائریکٹس کے لئے تعاون یافتہ ہیں۔</translation> <translation id="4659077111144409915">بنیادی اکاؤنٹ</translation> +<translation id="4659126640776004816">جب آپ اپنے Google اکاؤنٹ میں سائن ان کرتے ہیں، تو یہ خصوصیت آن ہو جاتی ہے۔</translation> <translation id="4660476621274971848">متوقع ورژن "<ph name="EXPECTED_VERSION" />"، لیکن ورژن تھا "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">سائز تبدیل ہو رہا ہے</translation> <translation id="4661407454952063730">ایپ ڈیٹا رابطے، پیغامات اور تصاویر سمیت کوئی بھی ایسا ڈیٹا ہو سکتا ہے جسے کسی ایپ نے (ڈیولپر کی ترتیبات کی بنیاد پر) محفوظ کیا ہو۔</translation> @@ -3132,7 +3133,6 @@ <translation id="4750394297954878236">تجاویز</translation> <translation id="475088594373173692">پہلا صارف</translation> <translation id="4751476147751820511">موشن یا لائٹ سینسرز</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" /> سے منسلک کرنے کے ليے ترتیبات کھولیں</translation> <translation id="4756378406049221019">بند کریں/دوبارہ لوڈ کریں</translation> <translation id="4756388243121344051">&سرگزشت</translation> <translation id="4759238208242260848">ڈاؤن لوڈز</translation> @@ -5022,6 +5022,7 @@ <translation id="7075513071073410194">RSA مرموز کاری کے ساتھ PKCS #1 MD5</translation> <translation id="7075625805486468288">HTTPS/SSL سرٹیفکیٹس اور ترتیبات کا نظم کریں</translation> <translation id="7076293881109082629">سائن ان کیا جا رہا ہے</translation> +<translation id="7076878155205969899">آواز خاموش کریں</translation> <translation id="7077829361966535409">موجودہ پراکسی ترتیبات کا استعمال کر کے سائن ان صفحہ لوڈ ہونے میں ناکام ہوگیا۔ براہ کرم <ph name="GAIA_RELOAD_LINK_START" />دوبارہ سائن ان کرنے کی کوشش کریں<ph name="GAIA_RELOAD_LINK_END" /> یا مختلف <ph name="PROXY_SETTINGS_LINK_START" />پراکسی ترتیبات<ph name="PROXY_SETTINGS_LINK_END" /> استعمال کریں۔</translation> <translation id="7078120482318506217">تمام نیٹ ورکس</translation> <translation id="708060913198414444">آڈیو پتہ کا&پی کریں</translation> @@ -5042,7 +5043,6 @@ <translation id="7099337801055912064">بڑے PPD کو لوڈ نہیں کر سکتا۔ زیادہ سے زیادہ سائز 250 kB ہے۔</translation> <translation id="7102687220333134671">خود کار اپ ڈیٹس آن ہیں</translation> <translation id="7102832101143475489">درخواست کا وقت ختم ہو گیا</translation> -<translation id="7105390788077117391">USB کی ترجیحات</translation> <translation id="710640343305609397">نیٹ ورک کی ترتیبات کھولیں</translation> <translation id="7108338896283013870">چھپائیں</translation> <translation id="7108668606237948702">انٹر</translation> @@ -5072,7 +5072,6 @@ <translation id="7136694880210472378">ڈیفالٹ بنائیں</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> میں خوش آمدید</translation> <translation id="7136993520339022828">ایک خرابی ہے۔ براہ کرم دیگر تصاویر کا انتخاب کر کے دوبارہ کوشش کریں۔</translation> -<translation id="7138678301420049075">دوسرا</translation> <translation id="713888829801648570">معذرت، آپ کے پاس ورڈ کی توثیق نہیں کی جا سکی کیونکہ آپ آف لائن ہیں۔</translation> <translation id="7140928199327930795">کوئی دیگر دستیاب آلات نہیں ہیں۔</translation> <translation id="7141105143012495934">سائن ان ناکام ہو گیا کیونکہ آپ کے اکاؤنٹ کی تفصیلات کی بازیافت نہيں ہو سکی۔ براہ کرم اپنے منتظم سے رابطہ کریں یا دوبارہ کوشش کریں۔</translation> @@ -6135,6 +6134,7 @@ <translation id="8428213095426709021">ترتیبات</translation> <translation id="8428271547607112339">اسکول اکاؤنٹ شامل کریں</translation> <translation id="8428628598981198790">اس سائٹ کے ساتھ آپ کی سیکیورٹی کلید کا استعمال نہیں کیا جا سکتا ہے</translation> +<translation id="8428634594422941299">سمجھ آ گئی</translation> <translation id="84297032718407999">آپ <ph name="LOGOUT_TIME_LEFT" /> میں سائن آؤٹ ہو جائیں گے</translation> <translation id="8431190899827883166">تھپتھپاہٹیں دکھائیں</translation> <translation id="8431909052837336408">SIM کا PIN تبدیل کریں</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb index 4c3563d..5564259 100644 --- a/chrome/app/resources/generated_resources_uz.xtb +++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -428,6 +428,7 @@ <translation id="1500297251995790841">Noma’lum qurilma [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Birdaniga bir nechta hisobdan ishlash vaqtida birinchi o‘rinda hisob egasi kirishi kerak.</translation> <translation id="150411034776756821"><ph name="SITE" /> saytini olib tashlash</translation> +<translation id="1504311855864906891">Multimedia fayllaringizni izohlang</translation> <translation id="1504551620756424144">Ulashilgan jildlar Windowsda <ph name="BASE_DIR" /> manziliga ulangan.</translation> <translation id="1506061864768559482">Qidiruv tizimi</translation> <translation id="1507170440449692343">Bu sahifaga kameradan foydalanish taqiqlandi.</translation> @@ -1188,7 +1189,6 @@ <translation id="2396783860772170191">4 ta raqami PIN kod kiriting (0000-9999)</translation> <translation id="2399939490305346086">Elektron kalitdagi kirish maʼlumotlari</translation> <translation id="2400664245143453337">Hoziroq yangilanishi zarur</translation> -<translation id="2407481962792080328">Bu funksiya Google hisobingizga kirganingizda yoqiladi</translation> <translation id="2408018932941436077">Karta saqlanmoqda</translation> <translation id="2408955596600435184">PIN kodni kiriting</translation> <translation id="241082044617551207">Noma’lum plagin</translation> @@ -3064,6 +3064,7 @@ <translation id="4657810666108475055">Varaqlar ichidan qidirish</translation> <translation id="465878909996028221">Brauzer yoʻnaltirishlarda faqat http, https va fayl protokollari ishlaydi.</translation> <translation id="4659077111144409915">Asosiy hisob</translation> +<translation id="4659126640776004816">Bu funksiya Google hisobingizga kirganingizda yoqiladi.</translation> <translation id="4660476621274971848">“<ph name="EXPECTED_VERSION" />” versiyasi kutilayotgandi, lekin “<ph name="NEW_ID" />” versiyasi o‘rnatildi</translation> <translation id="4660540330091848931">Hajmi oʻzgartirilmoqda</translation> <translation id="4661407454952063730">Ilovalarga tegishli maʼlumotlar – bu (dasturchi oʻrnatgan sozlamalarga asoslanib) ilovalar tomonidan saqlangan har qanday maʼlumot, shuningdek, kontaktlar, xabarlar va suratlar bo‘lishi mumkin.</translation> @@ -3129,7 +3130,6 @@ <translation id="4750394297954878236">Takliflar</translation> <translation id="475088594373173692">Birinchi foydalanuvchi</translation> <translation id="4751476147751820511">Harakat va yorug‘lik sensorlari</translation> -<translation id="4752124003533492687"><ph name="USB_DEVICE_NAME" /> qurilmasiga ulanish uchun Sozlamalarni oching</translation> <translation id="4756378406049221019">To‘xtatish/Yangilash</translation> <translation id="4756388243121344051">&Tarix</translation> <translation id="4759238208242260848">Yuklanmalar</translation> @@ -5019,6 +5019,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 algoritmli RSA shifrlash</translation> <translation id="7075625805486468288">HTTPS/SSL sertifikatlari va sozlamalarini boshqarish</translation> <translation id="7076293881109082629">Kirish</translation> +<translation id="7076878155205969899">Ovozsiz qilish</translation> <translation id="7077829361966535409">Bosh sahifada joriy proksi-server sozlamalarini yuklash vaqtida xatolik yuz berdi. <ph name="GAIA_RELOAD_LINK_START" />Tizimga qaytadan kiring<ph name="GAIA_RELOAD_LINK_END" /> yoki <ph name="PROXY_SETTINGS_LINK_START" />proksi-server sozlamalarini<ph name="PROXY_SETTINGS_LINK_END" /> o‘zgartiring.</translation> <translation id="7078120482318506217">Barcha tarmoqlar</translation> <translation id="708060913198414444">Audioning URL manzilini nusxalash</translation> @@ -5039,7 +5040,6 @@ <translation id="7099337801055912064">Katta hajmli PPD yuklanmadi. Maksimal hajm: 250KB.</translation> <translation id="7102687220333134671">Avtomatik yangilash funksiyasi yoniq</translation> <translation id="7102832101143475489">So‘rov uchun ajratilgan vaqt tugadi</translation> -<translation id="7105390788077117391">USB sozlamalari</translation> <translation id="710640343305609397">Tarmoq sozlamalarini ochish</translation> <translation id="7108338896283013870">Berkitish</translation> <translation id="7108668606237948702">enter</translation> @@ -5069,7 +5069,6 @@ <translation id="7136694880210472378">Birlamchi bo‘lsin</translation> <translation id="7136984461011502314"><ph name="PRODUCT_NAME" />‘ga xush kelibsiz!</translation> <translation id="7136993520339022828">Xatolik yuz berdi. Boshqa rasmlarni tanlab, keyinroq qayta urining.</translation> -<translation id="7138678301420049075">Boshqa</translation> <translation id="713888829801648570">Kechirasiz, parolni internetsiz tasdiqlab bo‘lmaydi.</translation> <translation id="7140928199327930795">Boshqa qurilmalar mavjud emas.</translation> <translation id="7141105143012495934">Hisobga kirishda xatolik yuz berdi, chunki hisob ma’lumotlarini yuklab bo‘lmadi. Administrator bilan bog‘laning yoki qaytadan urinib ko‘ring.</translation> @@ -6130,6 +6129,7 @@ <translation id="8428213095426709021">Sozlamalar</translation> <translation id="8428271547607112339">Maktab hisobini kiritish</translation> <translation id="8428628598981198790">Elektron kalitingiz bu saytda ishlamaydi</translation> +<translation id="8428634594422941299">OK</translation> <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" />dan keyin tizimdan chiqasiz</translation> <translation id="8431190899827883166">Vizual teginish</translation> <translation id="8431909052837336408">SIM karta PIN kodini almashtirish</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index 64de8e4..faa690c7 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">Thiết bị không xác định [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Tài khoản của chủ sở hữu này phải là tài khoản đăng nhập đầu tiên trong phiên đăng nhập nhiều tài khoản.</translation> <translation id="150411034776756821">Xóa <ph name="SITE" /></translation> +<translation id="1504311855864906891">Tạo phụ đề cho nội dung nghe nhìn</translation> <translation id="1504551620756424144">Bạn có thể truy cập thư mục dùng chung trong Windows tại <ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Công cụ tìm kiếm</translation> <translation id="1507170440449692343">Trang này đã bị chặn truy cập máy ảnh của bạn.</translation> @@ -744,7 +745,7 @@ <translation id="1854180393107901205">Dừng truyền</translation> <translation id="1856715684130786728">Thêm vị trí...</translation> <translation id="1858585891038687145">Tin tưởng chứng chỉ này khi nhận dạng nhà sản xuất phần mềm</translation> -<translation id="1860346308203060432">Xem tùy chọn hiển thị thiết bị</translation> +<translation id="1860346308203060432">Xem phạm vi hiển thị của thiết bị</translation> <translation id="1861262398884155592">Thư mục này trống</translation> <translation id="1863182668524159459">Không tìm thấy cổng nối tiếp nào</translation> <translation id="1863316578636157783">"<ph name="EXTENSION_NAME" />" đã bị vô hiệu hóa vì chứa phần mềm độc hại</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">Nhập mã pin có 4 chữ số (0000-9999)</translation> <translation id="2399939490305346086">Dữ liệu đăng nhập trên khóa bảo mật</translation> <translation id="2400664245143453337">Bạn cần cập nhật ngay</translation> -<translation id="2407481962792080328">Khi bạn đăng nhập vào Tài khoản Google của mình, tính năng này sẽ được bật</translation> <translation id="2408018932941436077">Đang lưu thẻ</translation> <translation id="2408955596600435184">Nhập mã PIN của bạn</translation> <translation id="241082044617551207">Plugin không rõ</translation> @@ -3066,6 +3066,7 @@ <translation id="4657810666108475055">Tìm kiếm thẻ</translation> <translation id="465878909996028221">Chỉ hỗ trợ chuyển hướng trình duyệt cho các giao thức http, https và tệp.</translation> <translation id="4659077111144409915">Tài khoản chính</translation> +<translation id="4659126640776004816">Khi bạn đăng nhập vào Tài khoản Google của mình, tính năng này sẽ được bật.</translation> <translation id="4660476621274971848">Phiên bản mong muốn là "<ph name="EXPECTED_VERSION" />", nhưng phiên bản phát hiện là "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">Đang thay đổi dung lượng</translation> <translation id="4661407454952063730">Dữ liệu ứng dụng có thể là bất kỳ dữ liệu nào mà một ứng dụng đã lưu (dựa trên các tùy chọn cài đặt của nhà phát triển), bao gồm các dữ liệu như danh bạ, tin nhắn và ảnh.</translation> @@ -3131,7 +3132,6 @@ <translation id="4750394297954878236">Đề xuất</translation> <translation id="475088594373173692">Người dùng đầu tiên</translation> <translation id="4751476147751820511">Cảm biến chuyển động hoặc ánh sáng</translation> -<translation id="4752124003533492687">Mở phần Cài đặt để kết nối <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Dừng/Tải lại</translation> <translation id="4756388243121344051">&Lịch sử</translation> <translation id="4759238208242260848">Tệp đã tải xuống</translation> @@ -4092,7 +4092,7 @@ <translation id="5941153596444580863">Thêm người...</translation> <translation id="5941343993301164315">Vui lòng đăng nhập vào <ph name="TOKEN_NAME" />.</translation> <translation id="5941711191222866238">Thu nhỏ</translation> -<translation id="5942779427914696408">Tùy chọn hiển thị thiết bị</translation> +<translation id="5942779427914696408">Phạm vi hiển thị của thiết bị</translation> <translation id="5942964813783878922"><ph name="DEVICE_TYPE" /> sẽ khởi động lại sau quá trình cập nhật này. Các bản cập nhật bảo mật và phần mềm trong tương lai sẽ tự động cài đặt.</translation> <translation id="5944869793365969636">Quét mã QR</translation> <translation id="5946591249682680882">ID báo cáo <ph name="WEBRTC_LOG_REPORT_ID" /></translation> @@ -5021,6 +5021,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 Với Mã hóa RSA</translation> <translation id="7075625805486468288">Quản lý cài đặt và chứng chỉ HTTPS/SSL</translation> <translation id="7076293881109082629">Đăng nhập</translation> +<translation id="7076878155205969899">Tắt tiếng</translation> <translation id="7077829361966535409">Không thể tải trang đăng nhập bằng cài đặt proxy hiện tại. Vui lòng <ph name="GAIA_RELOAD_LINK_START" />thử đăng nhập lại<ph name="GAIA_RELOAD_LINK_END" /> hoặc sử dụng <ph name="PROXY_SETTINGS_LINK_START" />cài đặt proxy<ph name="PROXY_SETTINGS_LINK_END" /> khác.</translation> <translation id="7078120482318506217">Tất cả các mạng</translation> <translation id="708060913198414444">S&ao chép địa chỉ âm thanh</translation> @@ -5041,7 +5042,6 @@ <translation id="7099337801055912064">Không thể tải PPD có kích cỡ lớn. Kích cỡ tối đa là 250 kB.</translation> <translation id="7102687220333134671">Tính năng tự động cập nhật đã được bật</translation> <translation id="7102832101143475489">Yêu cầu đã hết giờ</translation> -<translation id="7105390788077117391">Tùy chọn USB</translation> <translation id="710640343305609397">Mở tùy chọn cài đặt mạng</translation> <translation id="7108338896283013870">Ẩn</translation> <translation id="7108668606237948702">nhập</translation> @@ -5071,7 +5071,6 @@ <translation id="7136694880210472378">Đặt làm mặc định</translation> <translation id="7136984461011502314">Chào mừng bạn đến với <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Đã xảy ra lỗi. Vui lòng thử lại bằng cách chọn các hình ảnh khác.</translation> -<translation id="7138678301420049075">Khác</translation> <translation id="713888829801648570">Rất tiếc, không thể xác minh mật khẩu của bạn vì bạn hiện ngoại tuyến.</translation> <translation id="7140928199327930795">Hiện không có thiết bị nào khác.</translation> <translation id="7141105143012495934">Đăng nhập không thành công vì không thể truy xuất chi tiết tài khoản của bạn. Vui lòng liên hệ với quản trị viên của bạn hoặc thử lại.</translation> @@ -6134,6 +6133,7 @@ <translation id="8428213095426709021">Cài đặt</translation> <translation id="8428271547607112339">Thêm tài khoản trường học</translation> <translation id="8428628598981198790">Bạn không thể sử dụng khóa bảo mật với trang web này</translation> +<translation id="8428634594422941299">OK</translation> <translation id="84297032718407999">Bạn sẽ bị đăng xuất sau <ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Hiển thị điểm khi nhấn</translation> <translation id="8431909052837336408">Thay đổi mã PIN của SIM</translation> @@ -6504,7 +6504,7 @@ <translation id="8859402192569844210">Không thể tải Điều khoản dịch vụ</translation> <translation id="8859662783913000679">Tài khoản của cha mẹ</translation> <translation id="8862003515646449717">Chuyển sang một trình duyệt nhanh</translation> -<translation id="8863140399813345099">Chế độ hiển thị thiết bị của bạn sẽ quyết định người có thể chia sẻ với bạn khi màn hình của bạn đang mở khóa</translation> +<translation id="8863140399813345099">Phạm vi hiển thị của thiết bị sẽ quyết định người có thể chia sẻ với bạn khi màn hình của bạn đang mở khóa</translation> <translation id="8863753581171631212">Mở liên kết trong <ph name="APP" /> mới</translation> <translation id="8864055848767439877">Đang chia sẻ <ph name="TAB_NAME" /> với <ph name="APP_NAME" /></translation> <translation id="8864458770072227512">Đã xóa <ph name="EMAIL" /> khỏi thiết bị này</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index 81a2a1f..57969b00 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">未知设备 [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">在多帐号登录会话中,此所有者帐号必须是最先登录的帐号。</translation> <translation id="150411034776756821">移除 <ph name="SITE" /></translation> +<translation id="1504311855864906891">为您的媒体生成字幕</translation> <translation id="1504551620756424144">在 Windows 中,共享文件夹是位于 <ph name="BASE_DIR" /> 下。</translation> <translation id="1506061864768559482">搜索引擎</translation> <translation id="1507170440449692343">已阻止此网页使用您的摄像头。</translation> @@ -1187,7 +1188,6 @@ <translation id="2396783860772170191">输入 4 位数的 PIN 码 (0000-9999)</translation> <translation id="2399939490305346086">安全密钥登录数据</translation> <translation id="2400664245143453337">需要立即更新</translation> -<translation id="2407481962792080328">当您登录自己的 Google 帐号后,系统即会启用此功能</translation> <translation id="2408018932941436077">正在保存信用卡信息</translation> <translation id="2408955596600435184">输入您的 PIN 码</translation> <translation id="241082044617551207">未知插件</translation> @@ -1283,7 +1283,7 @@ <translation id="2505127913256479918">这个受监管帐号很快就会被移除</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{屏幕 #}other{屏幕 #}}</translation> <translation id="2505402373176859469"><ph name="RECEIVED_AMOUNT" />,共 <ph name="TOTAL_SIZE" /></translation> -<translation id="250642123108534012">您附近已开启“附近分享”功能的设备</translation> +<translation id="250642123108534012">您附近已打开“附近分享”功能的设备</translation> <translation id="250704661983564564">显示屏排列方式</translation> <translation id="2507253002925770350">票据已移除</translation> <translation id="2507397597949272797"><ph name="NAME" />已被暂停</translation> @@ -3061,6 +3061,7 @@ <translation id="4657810666108475055">标签页搜索</translation> <translation id="465878909996028221">浏览器重定向仅支持 http、https 和文件协议。</translation> <translation id="4659077111144409915">主帐号</translation> +<translation id="4659126640776004816">当您登录自己的 Google 帐号后,系统即会启用此功能。</translation> <translation id="4660476621274971848">预期版本是“<ph name="EXPECTED_VERSION" />”,但实际版本是“<ph name="NEW_ID" />”</translation> <translation id="4660540330091848931">正在调整大小</translation> <translation id="4661407454952063730">应用数据可以是应用根据开发者设置而保存的任何数据,包括通讯录、邮件/消息、照片等数据。</translation> @@ -3126,7 +3127,6 @@ <translation id="4750394297954878236">建议</translation> <translation id="475088594373173692">第 1 位用户</translation> <translation id="4751476147751820511">动态传感器或光传感器</translation> -<translation id="4752124003533492687">请打开“设置”以连接 <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">停止/重新加载</translation> <translation id="4756388243121344051">历史记录(&H)</translation> <translation id="4759238208242260848">下载内容</translation> @@ -3134,7 +3134,7 @@ <translation id="4762718786438001384">设备磁盘空间严重不足</translation> <translation id="4763408175235639573">以下 Cookie 是系统在您查看此网页时设置的</translation> <translation id="4765582662863429759">允许 Android 信息将短信从手机转送到 Chromebook</translation> -<translation id="476598255842811483">无(除非您的设备开启“附近分享”功能)</translation> +<translation id="476598255842811483">无(除非您的设备上打开了“附近分享”功能)</translation> <translation id="4768332406694066911">您有以下组织发给您的身份证书</translation> <translation id="477647109558161443">创建桌面快捷方式</translation> <translation id="4776917500594043016"><ph name="USER_EMAIL_ADDRESS" /> 的密码</translation> @@ -5016,6 +5016,7 @@ <translation id="7075513071073410194">PKCS #1,带有 RSA 加密的 MD5</translation> <translation id="7075625805486468288">管理 HTTPS/SSL 证书和设置</translation> <translation id="7076293881109082629">正在登录</translation> +<translation id="7076878155205969899">静音</translation> <translation id="7077829361966535409">使用当前代理设置无法加载登录页面。请<ph name="GAIA_RELOAD_LINK_START" />尝试重新登录<ph name="GAIA_RELOAD_LINK_END" />,或者使用不同的<ph name="PROXY_SETTINGS_LINK_START" />代理设置<ph name="PROXY_SETTINGS_LINK_END" />。</translation> <translation id="7078120482318506217">所有网络</translation> <translation id="708060913198414444">复制音频地址(&O)</translation> @@ -5036,7 +5037,6 @@ <translation id="7099337801055912064">无法加载过大的 PPD。大小上限为 250 KB。</translation> <translation id="7102687220333134671">已开启自动更新功能</translation> <translation id="7102832101143475489">此请求已超时</translation> -<translation id="7105390788077117391">USB 偏好设置</translation> <translation id="710640343305609397">打开网络设置</translation> <translation id="7108338896283013870">隐藏</translation> <translation id="7108668606237948702">输入</translation> @@ -5066,7 +5066,6 @@ <translation id="7136694880210472378">设为默认选项</translation> <translation id="7136984461011502314">欢迎使用<ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">出错了。请选择其他图片以重试。</translation> -<translation id="7138678301420049075">其他</translation> <translation id="713888829801648570">抱歉,您目前处于离线状态,因此系统无法验证您的密码。</translation> <translation id="7140928199327930795">没有其他可用的设备。</translation> <translation id="7141105143012495934">由于无法获取您的帐号详情,因此登录失败了。请与管理员联系或重试。</translation> @@ -5666,7 +5665,7 @@ <translation id="786073089922909430">服务:<ph name="ARC_PROCESS_NAME" /></translation> <translation id="7861215335140947162">下载内容(&D)</translation> <translation id="7864539943188674973">停用蓝牙</translation> -<translation id="7866352732146932341">当您的设备开启“附近分享”功能时位于您附近的设备</translation> +<translation id="7866352732146932341">当您的设备打开“附近分享”功能时位于您附近的设备</translation> <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - 已配对</translation> <translation id="7870730066603611552">完成设置后查看同步选项</translation> <translation id="7870790288828963061">找不到自助服务终端应用的更高版本,因此没有要更新的内容。请拔下 U 盘。</translation> @@ -6128,6 +6127,7 @@ <translation id="8428213095426709021">设置</translation> <translation id="8428271547607112339">添加学校帐号</translation> <translation id="8428628598981198790">您的安全密钥无法用于此网站</translation> +<translation id="8428634594422941299">知道了</translation> <translation id="84297032718407999">您将在 <ph name="LOGOUT_TIME_LEFT" />后退出登录</translation> <translation id="8431190899827883166">显示点按操作反馈</translation> <translation id="8431909052837336408">更改 SIM 卡 PIN 码</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb index 8f68b15..3a13bd0 100644 --- a/chrome/app/resources/generated_resources_zh-HK.xtb +++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">不明裝置 [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">擁有者帳戶必須是多重登入工作階段中第一個登入的帳戶。</translation> <translation id="150411034776756821">移除 <ph name="SITE" /></translation> +<translation id="1504311855864906891">為您的媒體產生字幕</translation> <translation id="1504551620756424144">在 Windows 中,您可以前往 <ph name="BASE_DIR" /> 存取共用資料夾。</translation> <translation id="1506061864768559482">搜尋引擎</translation> <translation id="1507170440449692343">系統已封鎖這個網頁存取您的相機。</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">輸入 4 位數 PIN (0000-9999)</translation> <translation id="2399939490305346086">安全密鑰登入資料</translation> <translation id="2400664245143453337">必須立即更新</translation> -<translation id="2407481962792080328">登入 Google 帳戶時,系統會啟用此功能</translation> <translation id="2408018932941436077">正在儲存信用卡</translation> <translation id="2408955596600435184">請輸入您的 PIN</translation> <translation id="241082044617551207">不明的外掛程式</translation> @@ -3065,6 +3065,7 @@ <translation id="4657810666108475055">分頁搜尋</translation> <translation id="465878909996028221">瀏覽器重新導向僅支援 http、https 和 file 通訊協定。</translation> <translation id="4659077111144409915">主要帳戶</translation> +<translation id="4659126640776004816">當您登入 Google 帳戶時,系統會啟用此功能</translation> <translation id="4660476621274971848">預期版本為 <ph name="EXPECTED_VERSION" />,但實際為 <ph name="NEW_ID" /></translation> <translation id="4660540330091848931">正在調整大小</translation> <translation id="4661407454952063730">應用程式資料泛指應用程式根據開發人員設定所儲存的任何資料,可能包括聯絡人、訊息和相片等資料。</translation> @@ -3130,7 +3131,6 @@ <translation id="4750394297954878236">建議</translation> <translation id="475088594373173692">第一位使用者</translation> <translation id="4751476147751820511">動態或光線感應器</translation> -<translation id="4752124003533492687">開啟「設定」即可連結 <ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">停止/重新載入</translation> <translation id="4756388243121344051">記錄(&H)</translation> <translation id="4759238208242260848">下載</translation> @@ -5020,6 +5020,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 (使用 RSA 加密)</translation> <translation id="7075625805486468288">管理 HTTPS/SSL 憑證和設定</translation> <translation id="7076293881109082629">登入中</translation> +<translation id="7076878155205969899">靜音</translation> <translation id="7077829361966535409">無法使用目前的 Proxy 設定載入登入頁面。請<ph name="GAIA_RELOAD_LINK_START" />重新登入<ph name="GAIA_RELOAD_LINK_END" />或使用其他<ph name="PROXY_SETTINGS_LINK_START" />Proxy 設定<ph name="PROXY_SETTINGS_LINK_END" />。</translation> <translation id="7078120482318506217">所有網絡</translation> <translation id="708060913198414444">複製音效檔案位址(&O)</translation> @@ -5040,7 +5041,6 @@ <translation id="7099337801055912064">無法載入大型 PPD。檔案上限為 250KB。</translation> <translation id="7102687220333134671">已開啟自動更新功能</translation> <translation id="7102832101143475489">要求逾時</translation> -<translation id="7105390788077117391">USB 偏好設定</translation> <translation id="710640343305609397">開啟網絡設定</translation> <translation id="7108338896283013870">隱藏</translation> <translation id="7108668606237948702">Enter 鍵</translation> @@ -5070,7 +5070,6 @@ <translation id="7136694880210472378">設定為預設</translation> <translation id="7136984461011502314">歡迎使用 <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">發生錯誤。請選擇其他圖片並再試一次。</translation> -<translation id="7138678301420049075">其他</translation> <translation id="713888829801648570">很抱歉,您目前處於離線狀態,因此無法驗證密碼。</translation> <translation id="7140928199327930795">沒有其他可用裝置。</translation> <translation id="7141105143012495934">系統無法擷取您帳戶的詳細資料,導致登入失敗。請與您的管理員聯絡或再試一次。</translation> @@ -6132,6 +6131,7 @@ <translation id="8428213095426709021">設定</translation> <translation id="8428271547607112339">新增學校帳戶</translation> <translation id="8428628598981198790">無法在此網站上使用您的安全密鑰</translation> +<translation id="8428634594422941299">知道了</translation> <translation id="84297032718407999">您將於 <ph name="LOGOUT_TIME_LEFT" />後登出</translation> <translation id="8431190899827883166">顯示輕按選項</translation> <translation id="8431909052837336408">變更 SIM 卡的 PIN</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index fd1af0d..9e416885 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -427,6 +427,7 @@ <translation id="1500297251995790841">不明裝置 [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">擁有者帳戶必須是多重登入工作階段中第一個登入的帳戶。</translation> <translation id="150411034776756821">移除 <ph name="SITE" /></translation> +<translation id="1504311855864906891">取得媒體字幕</translation> <translation id="1504551620756424144">在 Windows 中,你可以前往 <ph name="BASE_DIR" /> 存取共用資料夾。</translation> <translation id="1506061864768559482">搜尋引擎</translation> <translation id="1507170440449692343">系統已封鎖這個網頁存取你的攝影機。</translation> @@ -1190,7 +1191,6 @@ <translation id="2396783860772170191">輸入 4 位數 PIN 碼 (0000-9999)</translation> <translation id="2399939490305346086">安全金鑰登入資料</translation> <translation id="2400664245143453337">必須立即更新</translation> -<translation id="2407481962792080328">登入 Google 帳戶時,系統會啟用這項功能</translation> <translation id="2408018932941436077">正在儲存信用卡</translation> <translation id="2408955596600435184">請輸入你的 PIN 碼</translation> <translation id="241082044617551207">不明的外掛程式</translation> @@ -3064,6 +3064,7 @@ <translation id="4657810666108475055">分頁搜尋</translation> <translation id="465878909996028221">瀏覽器重新導向僅支援 http、https 和 file 通訊協定。</translation> <translation id="4659077111144409915">主要帳戶</translation> +<translation id="4659126640776004816">當你登入 Google 帳戶時,系統會啟用這項功能。</translation> <translation id="4660476621274971848">預期的版本為「<ph name="EXPECTED_VERSION" />」,但實際的版本為「<ph name="NEW_ID" />」</translation> <translation id="4660540330091848931">正在調整大小</translation> <translation id="4661407454952063730">應用程式資料泛指應用程式依據開發人員設定所儲存的任何資料,包括聯絡人、訊息和相片等。</translation> @@ -3129,7 +3130,6 @@ <translation id="4750394297954878236">建議</translation> <translation id="475088594373173692">第一位使用者</translation> <translation id="4751476147751820511">動作或光源感應器</translation> -<translation id="4752124003533492687">開啟「設定」頁面即可連接「<ph name="USB_DEVICE_NAME" />」</translation> <translation id="4756378406049221019">停止/重新載入</translation> <translation id="4756388243121344051">記錄(&H)</translation> <translation id="4759238208242260848">下載</translation> @@ -4090,7 +4090,7 @@ <translation id="5941153596444580863">新增使用者...</translation> <translation id="5941343993301164315">請登入 <ph name="TOKEN_NAME" />。</translation> <translation id="5941711191222866238">最小化</translation> -<translation id="5942779427914696408">裝置瀏覽權限</translation> +<translation id="5942779427914696408">裝置分享設定</translation> <translation id="5942964813783878922">完成更新後,你的 <ph name="DEVICE_TYPE" /> 將會重新啟動。日後系統會自動安裝新版軟體和安全性更新。</translation> <translation id="5944869793365969636">掃描 QR 圖碼</translation> <translation id="5946591249682680882">報表 ID <ph name="WEBRTC_LOG_REPORT_ID" /></translation> @@ -5019,6 +5019,7 @@ <translation id="7075513071073410194">PKCS #1 MD5 (使用 RSA 加密)</translation> <translation id="7075625805486468288">管理 HTTPS/SSL 憑證和設定</translation> <translation id="7076293881109082629">登入中</translation> +<translation id="7076878155205969899">關閉音效</translation> <translation id="7077829361966535409">無法使用目前的 Proxy 設定載入登入頁面。請<ph name="GAIA_RELOAD_LINK_START" />重新登入<ph name="GAIA_RELOAD_LINK_END" />或使用其他 <ph name="PROXY_SETTINGS_LINK_START" />Proxy 設定<ph name="PROXY_SETTINGS_LINK_END" />。</translation> <translation id="7078120482318506217">所有網路</translation> <translation id="708060913198414444">複製音訊位址(&O)</translation> @@ -5039,7 +5040,6 @@ <translation id="7099337801055912064">無法載入大型 PPD。大小上限為 250 KB。</translation> <translation id="7102687220333134671">自動更新功能已開啟</translation> <translation id="7102832101143475489">要求逾時</translation> -<translation id="7105390788077117391">USB 偏好設定</translation> <translation id="710640343305609397">開啟網路設定</translation> <translation id="7108338896283013870">隱藏</translation> <translation id="7108668606237948702">輸入</translation> @@ -5069,7 +5069,6 @@ <translation id="7136694880210472378">設為預設</translation> <translation id="7136984461011502314">歡迎使用 <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">發生錯誤,請選擇其他圖片,然後再試一次。</translation> -<translation id="7138678301420049075">其他</translation> <translation id="713888829801648570">很抱歉,你目前處於離線狀態,因此無法驗證密碼。</translation> <translation id="7140928199327930795">沒有其他可用裝置。</translation> <translation id="7141105143012495934">無法擷取您的帳戶詳細資料,導致登入失敗。請與您的管理員聯絡或再試一次。</translation> @@ -6131,6 +6130,7 @@ <translation id="8428213095426709021">設定</translation> <translation id="8428271547607112339">新增學校帳戶</translation> <translation id="8428628598981198790">無法在此網站上使用你的安全金鑰</translation> +<translation id="8428634594422941299">我知道了</translation> <translation id="84297032718407999">你將於 <ph name="LOGOUT_TIME_LEFT" />後登出</translation> <translation id="8431190899827883166">顯示觸控回應</translation> <translation id="8431909052837336408">變更 SIM 卡的 PIN 碼</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb index a25563b..fdb87236 100644 --- a/chrome/app/resources/generated_resources_zu.xtb +++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -374,6 +374,7 @@ <translation id="143027896309062157">Funda futhi ushintshe yonke idatha yakho kumakhompyutha namawebhusayithi owavakashelayo</translation> <translation id="1430915738399379752">Phrinta</translation> <translation id="1431188203598586230">Isibuyekezo sokugcina sesofthiwe</translation> +<translation id="1431402976894535801">Vimbela amasayithi ukuthi azi lapho ukhona</translation> <translation id="1431432486300429272">I-Google ingasebenzisa umlando wakho wokuphequlula ukuze yenze ngendlela oyifisayo Usesho namanye amasevisi e-Google. Wena noma umzali wakho ningashintsha lokhu noma nini ku-myaccount.google.com/activitycontrols/search</translation> <translation id="1432581352905426595">Phatha izinjini zosesho</translation> <translation id="1433811987160647649">Buza ngaphambi kokufinyelela</translation> @@ -427,6 +428,7 @@ <translation id="1500297251995790841">Idivayisi engaziwa [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Le akhawunti yomnikazi kumele kube i-akhawunti yokuqala yokungena ngemvume kwiseshini yokungena ngemvume okuningi.</translation> <translation id="150411034776756821">Susa i-<ph name="SITE" /></translation> +<translation id="1504311855864906891">Thola amagama-ncazo emidiya yakho</translation> <translation id="1504551620756424144">Amafolda abiwe ayatholakala ku-Windows ku-<ph name="BASE_DIR" />.</translation> <translation id="1506061864768559482">Injini yokusesha</translation> <translation id="1507170440449692343">Leli khasi livinjelwe kusuka ekufinyeleleni kukhamela yakho.</translation> @@ -567,6 +569,7 @@ <translation id="1651008383952180276">Kuzomele ufake umusho wokungena ofanayo kabili</translation> <translation id="1652326691684645429">Nika Amandla UkuThumela Eduze</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Engeza iphrinta Ekuphrinteni Kwamafu kwe-Google ukuze ukwazi ukuphrinta kusukela noma yikuphi.}one{Engeza amaphrinta angu-# Ekuphrinteni Kwamafu kwe-Google ukuze ukwazi ukuphrinta kusukela noma yikuphi.}other{Engeza amaphrinta angu-# Ekuphrinteni Kwamafu kwe-Google ukuze ukwazi ukuphrinta kusukela noma yikuphi.}}</translation> +<translation id="1653575510930452864">Kopisha Isixhumanisi Kumbhalo</translation> <translation id="1656528038316521561">Ukufiphala kwangemuva</translation> <translation id="1657406563541664238">Siza ukwenza i-<ph name="PRODUCT_NAME" /> ibe ngcono ngokuthumela izibalo zokusetshenziswa nemibiko yokuphahlazeka ku-Google</translation> <translation id="1657937299377480641">Ukungena ngemvume ukufinyelela kwizinsiza zemfundo, cela umzali akunikeze imvume</translation> @@ -1000,6 +1003,7 @@ <translation id="2178614541317717477">Ukwehlisa izinga kwe-CA</translation> <translation id="2182058453334755893">Kukopishelwe kubhodi lakho lokunamathisela</translation> <translation id="2184515124301515068">Vumela i-Chrome ukuthi ikhethe uma amasayithi angakwazi ukudlala umsindo (kunconyiwe)</translation> +<translation id="2187243482123994665">Ukuba khona komsebenzisi</translation> <translation id="2187675480456493911">Ivunyelaniswe namanye amadivayisi ku-akhawunti yakho. Amasethingi alungiswe abanye abasebenzisi ngeke aze avunyelaniswe. <ph name="LINK_BEGIN" />Funda kabanzi<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Iphutha lokungenisa isitifiketi seseva</translation> <translation id="2187906491731510095">Izandiso zubuyekeziwe</translation> @@ -1188,7 +1192,6 @@ <translation id="2396783860772170191">Faka iphinikhodi yamadijithi angu-4 (0000-9999)</translation> <translation id="2399939490305346086">Idatha yokungena ngemvume yokhiye wokuqinisekisa ubunikazi</translation> <translation id="2400664245143453337">Kudingeka isibuyekezo esisheshayo</translation> -<translation id="2407481962792080328">Uma ungena ngemvume ku-akhawunti yakho ye-Google, lesi sici siyavulwa</translation> <translation id="2408018932941436077">Ilondoloza ikhadi</translation> <translation id="2408955596600435184">Faka iphinikhodi yakho</translation> <translation id="241082044617551207">I-plugin engaziwa</translation> @@ -1828,6 +1831,7 @@ <translation id="3163201441334626963">Umkhiqizo ongaziwa ongu-<ph name="PRODUCT_ID" /> kusukela kumthengisi ongu-<ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Amasevisi alandelayo asiza ukugcina idatha yakho iphephile futhi ivikelekile. Ungavala lezi zici noma kunini.</translation> <translation id="3164329792803560526">Yabelana ngale thebhu ku-<ph name="APP_NAME" /></translation> +<translation id="3165371858310906303">Buza lapho isayithi lifuna ukwazi lapho ukhona</translation> <translation id="3165390001037658081">Ezinye izinkampani zenethiwekhi zingavimbela lesi sici.</translation> <translation id="316652501498554287">Ama-akhawunti we-G Suite for Education</translation> <translation id="3169472444629675720">Zitholele</translation> @@ -2944,6 +2948,7 @@ <translation id="4527186207340858212">Udala iphrofayela entsha yomsebenzi?</translation> <translation id="452750746583162491">Buyekeza idatha yakho evunyelanisiwe</translation> <translation id="4530494379350999373">Umsuka</translation> +<translation id="4531924570968473143">Ubani ongathanda ukumengeza kule <ph name="DEVICE_TYPE" />?</translation> <translation id="4532646538815530781">Leli sayithi lisebenzisa izinzwa zokunyakaza.</translation> <translation id="4533846798469727141">Manje ithi "Hey Google"</translation> <translation id="4533985347672295764">Isikhathi se-CPU</translation> @@ -3063,6 +3068,7 @@ <translation id="4657810666108475055">Ithebhu yokusesha</translation> <translation id="465878909996028221">Kuphela i-http, https namaphrothokholi efayela asekelwayo ekuqondiseni kabusha kwesiphequluli.</translation> <translation id="4659077111144409915">I-akhawunti eyinhloko</translation> +<translation id="4659126640776004816">Uma ungena ngemvume ku-akhawunti yakho ye-Google, lesi sici sivuliwe.</translation> <translation id="4660476621274971848">Inguqulo elindelwe ngu-"<ph name="EXPECTED_VERSION" />", kodwa inguqulo ibikade ingu-"<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">Ishintsha usayizi</translation> <translation id="4661407454952063730">Idatha yohlelo lokusebenza kungaba inoma iyiphi idatha elondolozwe uhlelo lokusebenza (kusukela kuzilungiselelo zonjiniyela), okufaka idatha efana noxhumana nabo, imilayezo, nezithombe.</translation> @@ -3128,7 +3134,6 @@ <translation id="4750394297954878236">Iziphakamiso</translation> <translation id="475088594373173692">Umsebenzisi wokuqala</translation> <translation id="4751476147751820511">Izinzwa zokunyakaza noma zokukhanya</translation> -<translation id="4752124003533492687">Vula Amasethingi ukuze uxhume ku-<ph name="USB_DEVICE_NAME" /></translation> <translation id="4756378406049221019">Misa/Layisha kabusha</translation> <translation id="4756388243121344051">Umlando</translation> <translation id="4759238208242260848">Ukulanda</translation> @@ -3978,6 +3983,7 @@ <translation id="5804241973901381774">Izimvume</translation> <translation id="5805697420284793859">Isiphathi sewindi</translation> <translation id="5806773519584576205">0° (Okuzenzakalelayo)</translation> +<translation id="5808664694611589238">{0,plural, =1{Vala isihambeli}one{Vala isihambeli}other{Vala isihambeli}}</translation> <translation id="5810809306422959727">Le akhawunti ayifanelekeli izilawuli zomzali</translation> <translation id="5812674658566766066">Nweba konke</translation> <translation id="5814126672212206791">Uhlobo lokuxhumeka</translation> @@ -4435,6 +4441,7 @@ <translation id="6344170822609224263">Finyelela kuhlu lokuxhumeka kwenethiwekhi</translation> <translation id="6344576354370880196">Amaphrinta alondoloziwe</translation> <translation id="6345418402353744910">Igama lakho lomsebenzisi nephasiwedi kuyadingeka kommeleli we-<ph name="PROXY" /> ukuze umphathi akwazi ukulungiselela inethiwekhi yakho</translation> +<translation id="6345878117466430440">Maka njengokufundiwe</translation> <translation id="6349101878882523185">Faka i-<ph name="APP_NAME" /></translation> <translation id="6349170655202535379">Ukuvumelanisa akusebenzi. Zama ukuphuma ngemvume uphinde ungene futhi.</translation> <translation id="6351063337294363751">Ungasula idatha yakho yokuphequlula kusuka kule menu</translation> @@ -5021,6 +5028,7 @@ <translation id="7075513071073410194">I-PKCS #1 MD5 ngokubethela kwe-RSA</translation> <translation id="7075625805486468288">Phatha izitifiketi ze-HTTPS/SSL nezilungiselelo</translation> <translation id="7076293881109082629">Ukungena ngemvume</translation> +<translation id="7076878155205969899">Thulisa umsindo</translation> <translation id="7077829361966535409">Ikhasi lokungena ngemvume lihlulekile ukulayishwa kusetshenziswa izilungiselelo zamanje zommeleli. Sicela <ph name="GAIA_RELOAD_LINK_START" />uzame ukungena ngemvume futhi<ph name="GAIA_RELOAD_LINK_END" />, noma usebenzise <ph name="PROXY_SETTINGS_LINK_START" />izilungiselelo zommeleli<ph name="PROXY_SETTINGS_LINK_END" /> ezihlukile.</translation> <translation id="7078120482318506217">Wonke amanethiwekhi</translation> <translation id="708060913198414444">K&opisha ikheli lomsindo</translation> @@ -5041,7 +5049,6 @@ <translation id="7099337801055912064">Ayikwazi ukulayisha i-PPD enkulu. Usayizi omkhulu ngu-250 kB.</translation> <translation id="7102687220333134671">Izibuyekezo zokuzenzakalela zivuliwe</translation> <translation id="7102832101143475489">Isicelo siphelelwe isikhathi</translation> -<translation id="7105390788077117391">Okuncanyelwayo kwe-USB</translation> <translation id="710640343305609397">Vula izilungiselelo zenethiwekhi</translation> <translation id="7108338896283013870">Fihla</translation> <translation id="7108668606237948702">i-enter</translation> @@ -5071,7 +5078,6 @@ <translation id="7136694880210472378">Yenza okuzenzakalelayo</translation> <translation id="7136984461011502314">Siyakwamukela ku-<ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Kukhona iphutha. Sicela uzame futhi ngokukhetha ezinye izithombe.</translation> -<translation id="7138678301420049075">Okunye</translation> <translation id="713888829801648570">Uxolo, iphasiwedi yakho ayikwazanga ukuqinisekiswa ngoba awuxhunyiwe ku-inthanethi.</translation> <translation id="7140928199327930795">Awekho amanye amadivayisi atholakalayo.</translation> <translation id="7141105143012495934">Ukungena ngemvume kwehlulekile ngoba imininingwane ye-akhawunti yakho ayikwazanga ukubuyiswa. Sicela uxhumane nomlawuli wakho noma zama futhi.</translation> @@ -5178,6 +5184,7 @@ <translation id="7280649757394340890">Izilungiselelo zezwi zombhalo ukuya kunkulumo</translation> <translation id="7280877790564589615">Imvume iceliwe</translation> <translation id="7282992757463864530">Ibha yolwazi</translation> +<translation id="7284411326658527427">Umuntu ngamunye angenza i-akhawunti yakhe ibe ngokwakhe futhi igcine idatha iyimfihlo.</translation> <translation id="7287143125007575591">Ukufinyelela kunqatshelwe.</translation> <translation id="7287411021188441799">Buyisela ingemuva elizenzakalelayo</translation> <translation id="7288013116963835700">Susa i-Linux ye-<ph name="DEVICE_TYPE" /></translation> @@ -5754,6 +5761,7 @@ <translation id="7963826112438303517">Umsizi wakho usebenzisa lokhu kurekhoda nesicelo sakho esikhulunywayo ukudala nokubuyekeza imodeli yezwi lakho, okulondolozwa kuphela kumadivayisi lapho uvule khona i-Voice Match. Buka noma phinda uqeqeshe umsebenzi wezwi kuzilungiselelo zomsizi.</translation> <translation id="7966241909927244760">K&opisha ikheli lesithombe</translation> <translation id="7968072247663421402">Izinketho zomhlinzeki</translation> +<translation id="7968198493605442410">Kopisha isixhumanisi kumbhalo</translation> <translation id="7968742106503422125">Funda futhi ushintshe idatha oyikopishayo futhi uyinamathisele</translation> <translation id="7968833647796919681">Nika amandla ukuqoqwa kwedatha</translation> <translation id="7968982339740310781">Buka imininingwane</translation> @@ -6133,6 +6141,7 @@ <translation id="8428213095426709021">Izilungiselelo</translation> <translation id="8428271547607112339">Engeza i-akhawunti yesikole</translation> <translation id="8428628598981198790">Ukhiye wakho wokuqinisekisa ubunikazi awukwazi ukusetshenziswa naleli sayithi</translation> +<translation id="8428634594422941299">Ngiyezwa</translation> <translation id="84297032718407999">Uzokhishwa ku-<ph name="LOGOUT_TIME_LEFT" /></translation> <translation id="8431190899827883166">Bonisa amathebhu</translation> <translation id="8431909052837336408">Shintsha i-SIM yephinikhodi</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fi.xtb b/chrome/app/resources/google_chrome_strings_fi.xtb index f33e9a52..a625768 100644 --- a/chrome/app/resources/google_chrome_strings_fi.xtb +++ b/chrome/app/resources/google_chrome_strings_fi.xtb
@@ -137,7 +137,7 @@ <translation id="4750550185319565338">Ota <ph name="PLUGIN_NAME" /> käyttöön käynnistämällä Chrome uudelleen.</translation> <translation id="4754614261631455953">Google Chrome Canary (saapuva mDNS)</translation> <translation id="4771048833395599659">Tämä tiedosto voi olla vaarallinen, joten Chrome on estänyt sen.</translation> -<translation id="479167709087336770">Tämä käyttää samaa oikeinkirjoituksen tarkistusta kuin Google Haku. Selaimeen kirjoittamasi teksti lähetetään Googlelle. Voit muuttaa tätä milloin tahansa asetuksista.</translation> +<translation id="479167709087336770">Tämä käyttää samaa oikeinkirjoituksen tarkistusta kuin Google Haku. Selaimeen kirjoittamasi teksti lähetetään Googlelle. Voit vaihtaa valintasi milloin tahansa asetuksista.</translation> <translation id="4891791193823137474">Jätä Google Chrome käyntiin taustalle</translation> <translation id="489337168347244450">{NUM_DAYS,plural, =1{Chrome tarkistaa ei-toivotut ohjelmistot kerran viikossa. Tarkistettu viimeksi 1 päivä sitten.}other{Chrome tarkistaa ei-toivotut ohjelmistot kerran viikossa. Tarkistettu viimeksi {NUM_DAYS} päivää sitten.}}</translation> <translation id="4895437082222824641">Avaa linkki uudella Chromen välilehdellä</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 67efed1..38f69c8 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -2274,7 +2274,6 @@ "//chrome/browser/ui/webui/chromeos/add_supervision:mojo_bindings", "//chrome/browser/ui/webui/chromeos/crostini_installer:mojo_bindings", "//chrome/browser/ui/webui/chromeos/crostini_upgrader:mojo_bindings", - "//chrome/browser/ui/webui/chromeos/file_manager:mojo_bindings", "//chrome/browser/ui/webui/chromeos/machine_learning:mojo_bindings", "//chrome/browser/ui/webui/settings/chromeos/constants:mojom", "//chrome/browser/ui/webui/settings/chromeos/search:mojo_bindings", @@ -2307,6 +2306,8 @@ ] if (!is_official_build) { deps += [ + "//chromeos/components/file_manager:file_manager_mojom", + "//chromeos/components/file_manager:file_manager_ui", "//chromeos/components/telemetry_extension_ui", "//chromeos/components/telemetry_extension_ui/mojom", ] @@ -6240,8 +6241,11 @@ deps += [ "//chrome/browser/resources/chromeos/account_manager:web_components", "//chrome/browser/resources/chromeos/account_manager/components:web_components", + "//chrome/browser/resources/chromeos/add_supervision:post_message_api.m", "//chrome/browser/resources/chromeos/crostini_installer:polymer3_elements", "//chrome/browser/resources/chromeos/crostini_upgrader:polymer3_elements", + "//chrome/browser/resources/chromeos/edu_coexistence:edu_coexistence_controller", + "//chrome/browser/resources/chromeos/edu_coexistence:polymer3_elements", "//chrome/browser/resources/chromeos/edu_login:polymer3_elements", "//chrome/browser/resources/chromeos/emulator:polymer3_elements", "//chrome/browser/resources/chromeos/gaia_action_buttons:web_components", @@ -6252,7 +6256,6 @@ "//chrome/browser/ui/webui/chromeos/add_supervision:mojo_bindings_js", "//chrome/browser/ui/webui/chromeos/crostini_installer:mojo_bindings_js", "//chrome/browser/ui/webui/chromeos/crostini_upgrader:mojo_bindings_js", - "//chrome/browser/ui/webui/chromeos/file_manager:mojo_bindings_js", "//chrome/browser/ui/webui/chromeos/machine_learning:mojo_bindings_js", "//chrome/browser/ui/webui/settings/chromeos:mojom_js", ]
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 05c7bb86..7de1ba5 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -4072,10 +4072,6 @@ kDelayCompetingLowPriorityRequestsFeatureVariations, "DelayCompetingLowPriorityRequests")}, - {"prefetch-privacy-changes", flag_descriptions::kPrefetchPrivacyChangesName, - flag_descriptions::kPrefetchPrivacyChangesDescription, kOsAll, - FEATURE_VALUE_TYPE(blink::features::kPrefetchPrivacyChanges)}, - {"intensive-wake-up-throttling", flag_descriptions::kIntensiveWakeUpThrottlingName, flag_descriptions::kIntensiveWakeUpThrottlingDescription, kOsAll,
diff --git a/chrome/browser/apps/app_service/arc_apps.cc b/chrome/browser/apps/app_service/arc_apps.cc index d785272..d246115 100644 --- a/chrome/browser/apps/app_service/arc_apps.cc +++ b/chrome/browser/apps/app_service/arc_apps.cc
@@ -763,7 +763,6 @@ if (app_info->ready) { arc::mojom::ActivityNamePtr activity = arc::mojom::ActivityName::New(); activity->package_name = app_info->package_name; - activity->activity_name = app_info->activity; if (intent->activity_name.has_value() && !intent->activity_name.value().empty()) { activity->activity_name = intent->activity_name.value();
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd index e2201ad7..9f283f2 100644 --- a/chrome/browser/browser_resources.grd +++ b/chrome/browser/browser_resources.grd
@@ -221,6 +221,10 @@ <include name="IDR_EDU_LOGIN_EDU_LOGIN_HTML" file="resources\chromeos\edu_login\edu_login.html" allowexternalscript="true" type="BINDATA" /> <include name="IDR_EDU_LOGIN_EDU_LOGIN_JS" file="${root_gen_dir}\chrome\browser\resources\chromeos\edu_login\app.js" use_base_dir="false" type="BINDATA" /> <include name="IDR_EDU_LOGIN_EDU_LOGIN_UTIL_JS" file="resources\chromeos\edu_login\edu_login_util.js" type="BINDATA" /> + <include name="IDR_EDU_COEXISTENCE_EDU_COEXISTENCE_HTML" file="resources\chromeos\edu_coexistence\edu_coexistence.html" type="BINDATA" /> + <include name="IDR_EDU_COEXISTENCE_EDU_COEXISTENCE_APP_JS" file="${root_gen_dir}\chrome\browser\resources\chromeos\edu_coexistence\edu_coexistence_app.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_EDU_COEXISTENCE_EDU_COEXISTENCE_UI_JS" file="${root_gen_dir}\chrome\browser\resources\chromeos\edu_coexistence\edu_coexistence_ui.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_EDU_COEXISTENCE_EDU_COEXISTENCE_CONTROLLER_JS" file="resources\chromeos\edu_coexistence\edu_coexistence_controller.js" type="BINDATA" /> <include name="IDR_EDU_LOGIN_BROWSER_PROXY_JS" file="resources\chromeos\edu_login\browser_proxy.js" type="BINDATA" /> <include name="IDR_EDU_LOGIN_ICONS_JS" file="${root_gen_dir}\chrome\browser\resources\chromeos\edu_login\icons.js" use_base_dir="false" type ="BINDATA" /> <include name="IDR_EDU_LOGIN_EDU_LOGIN_BUTTON_JS" file="${root_gen_dir}\chrome\browser\resources\chromeos\edu_login\edu_login_button.js" use_base_dir="false" type="BINDATA" /> @@ -280,12 +284,6 @@ <include name="IDR_DRIVE_INTERNALS_HTML" file="resources\chromeos\drive_internals.html" flattenhtml="true" type="BINDATA" /> <include name="IDR_DRIVE_INTERNALS_JS" file="resources\chromeos\drive_internals.js" type="BINDATA" /> - <include name="IDR_FILE_MANAGER_CSS" file="resources\chromeos\file_manager\file_manager.css" type="BINDATA" /> - <include name="IDR_FILE_MANAGER_HTML" file="resources\chromeos\file_manager\file_manager.html" flattenhtml="true" type="BINDATA" /> - <include name="IDR_FILE_MANAGER_JS" file="resources\chromeos\file_manager\file_manager.js" type="BINDATA" /> - <include name="IDR_FILE_MANAGER_MOJO_LITE_JS" file="${root_gen_dir}\chrome\browser\ui\webui\chromeos\file_manager\file_manager.mojom-lite.js" use_base_dir="false" type="BINDATA" /> - <include name="IDR_FILE_MANAGER_PROXY_JS" file="resources\chromeos\file_manager\browser_proxy.js" type="BINDATA" /> - <include name="IDR_GUEST_SESSION_TAB_HTML" file="resources\chromeos\guest_session_tab.html" flattenhtml="true" type="BINDATA" /> <!-- Note: mobile_setup_ui.cc does not support compressed resources. --> @@ -457,6 +455,7 @@ <include name="IDR_ADD_SUPERVISION_JS" file="resources\chromeos\add_supervision\add_supervision.js" type="BINDATA" /> <include name="IDR_ADD_SUPERVISION_API_SERVER_JS" file="resources\chromeos\add_supervision\add_supervision_api_server.js" type="BINDATA" /> <include name="IDR_ADD_SUPERVISION_POST_MESSAGE_API_JS" file="resources\chromeos\add_supervision\post_message_api.js" type="BINDATA" /> + <include name="IDR_ADD_SUPERVISION_POST_MESSAGE_API_M_JS" file="${root_gen_dir}\chrome\browser\resources\chromeos\add_supervision\post_message_api.m.js" use_base_dir="false" type="BINDATA" /> <include name="IDR_ADD_SUPERVISION_MOJOM_LITE_JS" file="${root_gen_dir}\chrome\browser\ui\webui\chromeos\add_supervision\add_supervision.mojom-lite.js" use_base_dir="false" type="BINDATA" /> </if> <if expr="chromeos">
diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser/chrome_browser_interface_binders.cc index 3b2a259..4ddefab 100644 --- a/chrome/browser/chrome_browser_interface_binders.cc +++ b/chrome/browser/chrome_browser_interface_binders.cc
@@ -151,8 +151,6 @@ #include "chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.h" #include "chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader.mojom.h" #include "chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_ui.h" -#include "chrome/browser/ui/webui/chromeos/file_manager/file_manager.mojom.h" -#include "chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.h" #include "chrome/browser/ui/webui/chromeos/internet_config_dialog.h" #include "chrome/browser/ui/webui/chromeos/internet_detail_dialog.h" #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" @@ -195,6 +193,8 @@ #endif #if defined(OS_CHROMEOS) && !defined(OFFICIAL_BUILD) +#include "chromeos/components/file_manager/file_manager.mojom.h" +#include "chromeos/components/file_manager/file_manager_ui.h" #include "chromeos/components/telemetry_extension_ui/mojom/diagnostics_service.mojom.h" // nogncheck crbug.com/1125897 #include "chromeos/components/telemetry_extension_ui/mojom/probe_service.mojom.h" // nogncheck crbug.com/1125897 #include "chromeos/components/telemetry_extension_ui/telemetry_extension_ui.h" @@ -661,10 +661,6 @@ chromeos::CrostiniUpgraderUI>(map); RegisterWebUIControllerInterfaceBinder< - chromeos::file_manager::mojom::PageHandlerFactory, - chromeos::file_manager::FileManagerUI>(map); - - RegisterWebUIControllerInterfaceBinder< chromeos::machine_learning::mojom::PageHandler, chromeos::machine_learning::MachineLearningInternalsUI>(map); @@ -712,6 +708,10 @@ #endif // defined(OS_CHROMEOS) #if defined(OS_CHROMEOS) && !defined(OFFICIAL_BUILD) + RegisterWebUIControllerInterfaceBinder< + chromeos::file_manager::mojom::PageHandlerFactory, + chromeos::file_manager::FileManagerUI>(map); + if (base::FeatureList::IsEnabled(chromeos::features::kTelemetryExtension)) { RegisterWebUIControllerInterfaceBinder< chromeos::health::mojom::DiagnosticsService,
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 221a1007..4a24917 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -353,7 +353,7 @@ #include "third_party/blink/public/common/loader/referrer_utils.h" #include "third_party/blink/public/common/loader/url_loader_throttle.h" #include "third_party/blink/public/common/switches.h" -#include "third_party/blink/public/common/web_preferences/web_preferences.h" +#include "third_party/blink/public/common/web_preferences/image_animation_policy.h" #include "third_party/blink/public/mojom/renderer_preferences.mojom.h" #include "third_party/blink/public/mojom/site_engagement/site_engagement.mojom.h" #include "third_party/blink/public/mojom/user_agent/user_agent_metadata.mojom.h" @@ -3304,15 +3304,15 @@ #if BUILDFLAG(ENABLE_EXTENSIONS) std::string image_animation_policy = prefs->GetString(prefs::kAnimationPolicy); - if (image_animation_policy == kAnimationPolicyOnce) + if (image_animation_policy == kAnimationPolicyOnce) { web_prefs->animation_policy = - blink::web_pref::IMAGE_ANIMATION_POLICY_ANIMATION_ONCE; - else if (image_animation_policy == kAnimationPolicyNone) + blink::web_pref::kImageAnimationPolicyAnimateOnce; + } else if (image_animation_policy == kAnimationPolicyNone) { web_prefs->animation_policy = - blink::web_pref::IMAGE_ANIMATION_POLICY_NO_ANIMATION; - else - web_prefs->animation_policy = - blink::web_pref::IMAGE_ANIMATION_POLICY_ALLOWED; + blink::web_pref::kImageAnimationPolicyNoAnimation; + } else { + web_prefs->animation_policy = blink::web_pref::kImageAnimationPolicyAllowed; + } #endif // Make sure we will set the default_encoding with canonical encoding name.
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index fc33ba60..066717c 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -2848,12 +2848,16 @@ if (!is_official_build) { deps += [ + "//chromeos/components/file_manager:file_manager_ui", "//chromeos/components/sample_system_web_app_ui", "//chromeos/components/telemetry_extension_ui", + "//chromeos/resources:file_manager_resources_grit", "//chromeos/resources:sample_system_web_app_resources_grit", "//chromeos/resources:telemetry_extension_resources", ] sources += [ + "web_applications/file_manager_web_app_info.cc", + "web_applications/file_manager_web_app_info.h", "web_applications/sample_system_web_app_info.cc", "web_applications/sample_system_web_app_info.h", "web_applications/telemetry_extension_web_app_info.cc",
diff --git a/chrome/browser/chromeos/arc/accessibility/accessibility_node_info_data_wrapper.cc b/chrome/browser/chromeos/arc/accessibility/accessibility_node_info_data_wrapper.cc index b20ae6b..8e56bcc 100644 --- a/chrome/browser/chromeos/arc/accessibility/accessibility_node_info_data_wrapper.cc +++ b/chrome/browser/chromeos/arc/accessibility/accessibility_node_info_data_wrapper.cc
@@ -208,7 +208,7 @@ std::string chrome_role; if (GetProperty(AXStringProperty::CHROME_ROLE, &chrome_role)) { - ax::mojom::Role role_value = ui::ParseRole(chrome_role.c_str()); + auto role_value = ui::ParseAXEnum<ax::mojom::Role>(chrome_role.c_str()); if (role_value != ax::mojom::Role::kNone) { // The webView and rootWebArea roles differ between Android and Chrome. In // particular, Android includes far fewer attributes which leads to
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc index 9072abd..f0bc51a 100644 --- a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc
@@ -590,16 +590,13 @@ result_item.multiple_mounts = capabilities.multiple_mounts; switch (capabilities.source) { case SOURCE_FILE: - result_item.source = - api::manifest_types::FILE_SYSTEM_PROVIDER_SOURCE_FILE; + result_item.source = api::file_manager_private::PROVIDER_SOURCE_FILE; break; case SOURCE_DEVICE: - result_item.source = - api::manifest_types::FILE_SYSTEM_PROVIDER_SOURCE_DEVICE; + result_item.source = api::file_manager_private::PROVIDER_SOURCE_DEVICE; break; case SOURCE_NETWORK: - result_item.source = - api::manifest_types::FILE_SYSTEM_PROVIDER_SOURCE_NETWORK; + result_item.source = api::file_manager_private::PROVIDER_SOURCE_NETWORK; break; } result.push_back(std::move(result_item));
diff --git a/chrome/browser/chromeos/file_manager/file_manager_string_util.cc b/chrome/browser/chromeos/file_manager/file_manager_string_util.cc index 18ecf464..3bd21a7 100644 --- a/chrome/browser/chromeos/file_manager/file_manager_string_util.cc +++ b/chrome/browser/chromeos/file_manager/file_manager_string_util.cc
@@ -396,6 +396,13 @@ SET_STRING("SHARESHEET_BUTTON_LABEL", IDS_SHARESHEET_TITLE_LABEL); } +void AddStringsForHoldingSpace(base::DictionaryValue* dict) { + SET_STRING("HOLDING_SPACE_PIN_TO_SHELF_COMMAND_LABEL", + IDS_FILE_BROWSER_HOLDING_SPACE_PIN_TO_SHELF_COMMAND_LABEL); + SET_STRING("HOLDING_SPACE_UNPIN_FROM_SHELF_COMMAND_LABEL", + IDS_FILE_BROWSER_HOLDING_SPACE_UNPIN_FROM_SHELF_COMMAND_LABEL); +} + } // namespace std::unique_ptr<base::DictionaryValue> GetFileManagerStrings() { @@ -413,6 +420,7 @@ AddStringsForFileErrors(dict.get()); AddStringsForZipArchiver(dict.get()); AddStringsForSharesheet(dict.get()); + AddStringsForHoldingSpace(dict.get()); SET_STRING("ADD_NEW_SERVICES_BUTTON_LABEL", IDS_FILE_BROWSER_ADD_NEW_SERVICES_BUTTON_LABEL); @@ -568,6 +576,8 @@ IDS_FILE_BROWSER_FORMAT_DEVICE_BUTTON_LABEL); SET_STRING("FORMAT_DIALOG_TITLE", IDS_FILE_BROWSER_FORMAT_DIALOG_TITLE); SET_STRING("FORMAT_DIALOG_MESSAGE", IDS_FILE_BROWSER_FORMAT_DIALOG_MESSAGE); + SET_STRING("FORMAT_PARTITION_DIALOG_MESSAGE", + IDS_FILE_BROWSER_FORMAT_PARTITION_DIALOG_MESSAGE); SET_STRING("FORMAT_DIALOG_DELETE_WARNING", IDS_FILE_BROWSER_FORMAT_DIALOG_DELETE_WARNING); SET_STRING("FORMAT_DIALOG_DRIVE_NAME_LABEL", @@ -576,6 +586,8 @@ IDS_FILE_BROWSER_FORMAT_DIALOG_FORMAT_LABEL); SET_STRING("FORMAT_DIALOG_CONFIRM_LABEL", IDS_FILE_BROWSER_FORMAT_DIALOG_CONFIRM_LABEL); + SET_STRING("FORMAT_DIALOG_CONFIRM_SHORT_LABEL", + IDS_FILE_BROWSER_FORMAT_DIALOG_CONFIRM_SHORT_LABEL); SET_STRING("FORMAT_PROGRESS_MESSAGE", IDS_FILE_BROWSER_FORMAT_PROGRESS_MESSAGE); SET_STRING("FORMAT_SUCCESS_MESSAGE", IDS_FILE_BROWSER_FORMAT_SUCCESS_MESSAGE); @@ -785,6 +797,12 @@ IDS_REMOVABLE_DEVICE_NAVIGATION_MESSAGE); SET_STRING("REMOVABLE_DEVICE_NAVIGATION_MESSAGE_READONLY_POLICY", IDS_REMOVABLE_DEVICE_NAVIGATION_MESSAGE_READONLY_POLICY); + SET_STRING("REPARTITION_DEVICE_BUTTON_LABEL", + IDS_FILE_BROWSER_REPARTITION_DEVICE_BUTTON_LABEL); + SET_STRING("REPARTITION_DIALOG_CONFIRM_LABEL", + IDS_FILE_BROWSER_REPARTITION_DIALOG_CONFIRM_LABEL); + SET_STRING("REPARTITION_DIALOG_MESSAGE", + IDS_FILE_BROWSER_REPARTITION_DIALOG_MESSAGE); SET_STRING("UNPIN_FOLDER_BUTTON_LABEL", IDS_FILE_BROWSER_UNPIN_FOLDER_BUTTON_LABEL); SET_STRING("RENAME_BUTTON_LABEL", IDS_FILE_BROWSER_RENAME_BUTTON_LABEL);
diff --git a/chrome/browser/chromeos/printing/cups_proxy_service_delegate_impl.cc b/chrome/browser/chromeos/printing/cups_proxy_service_delegate_impl.cc index 889206c0..68d7e27d 100644 --- a/chrome/browser/chromeos/printing/cups_proxy_service_delegate_impl.cc +++ b/chrome/browser/chromeos/printing/cups_proxy_service_delegate_impl.cc
@@ -10,6 +10,7 @@ #include "chrome/browser/chromeos/printing/cups_printers_manager.h" #include "chrome/browser/chromeos/printing/cups_printers_manager_factory.h" #include "chrome/browser/chromeos/printing/printer_configurer.h" +#include "chrome/browser/printing/print_preview_sticky_settings.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/common/pref_names.h" #include "components/prefs/pref_service.h" @@ -49,6 +50,15 @@ return printers_manager_->GetPrinters(printer_class); } +std::vector<std::string> +CupsProxyServiceDelegateImpl::GetRecentlyUsedPrinters() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + auto* sticky_settings = printing::PrintPreviewStickySettings::GetInstance(); + CHECK(sticky_settings); + sticky_settings->RestoreFromPrefs(profile_->GetPrefs()); + return sticky_settings->GetRecentlyUsedPrinters(); +} + bool CupsProxyServiceDelegateImpl::IsPrinterInstalled(const Printer& printer) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return printers_manager_->IsPrinterInstalled(printer);
diff --git a/chrome/browser/chromeos/printing/cups_proxy_service_delegate_impl.h b/chrome/browser/chromeos/printing/cups_proxy_service_delegate_impl.h index 9200142..8d546b63 100644 --- a/chrome/browser/chromeos/printing/cups_proxy_service_delegate_impl.h +++ b/chrome/browser/chromeos/printing/cups_proxy_service_delegate_impl.h
@@ -42,6 +42,9 @@ // Get the currently known list of printers. std::vector<Printer> GetPrinters(PrinterClass printer_class) override; + // Get the recently used printer list from print_preview_sticky_settings. + std::vector<std::string> GetRecentlyUsedPrinters() override; + // Returns whether |printer| is currently installed in CUPS with this config. bool IsPrinterInstalled(const Printer& printer) override;
diff --git a/chrome/browser/chromeos/web_applications/file_manager_web_app_info.cc b/chrome/browser/chromeos/web_applications/file_manager_web_app_info.cc new file mode 100644 index 0000000..a19d544 --- /dev/null +++ b/chrome/browser/chromeos/web_applications/file_manager_web_app_info.cc
@@ -0,0 +1,30 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/web_applications/file_manager_web_app_info.h" + +#include "base/strings/string16.h" +#include "base/strings/utf_string_conversions.h" +#include "chrome/browser/chromeos/web_applications/system_web_app_install_utils.h" +#include "chrome/browser/web_applications/components/web_app_constants.h" +#include "chrome/common/web_application_info.h" +#include "chromeos/components/file_manager/url_constants.h" +#include "chromeos/grit/chromeos_file_manager_resources.h" +#include "third_party/blink/public/mojom/manifest/display_mode.mojom.h" + +std::unique_ptr<WebApplicationInfo> CreateWebAppInfoForFileManager() { + auto info = std::make_unique<WebApplicationInfo>(); + info->app_url = GURL(chromeos::file_manager::kChromeUIFileManagerURL); + info->scope = GURL(chromeos::file_manager::kChromeUIFileManagerURL); + // TODO(majewski): Fetch from a resource. + info->title = base::UTF8ToUTF16("File Manager"); + web_app::CreateIconInfoForSystemWebApp( + info->app_url, {{"icon192.png", 192, IDR_FILE_MANAGER_ICON_192}}, *info); + info->theme_color = 0xFF4285F4; + info->background_color = 0xFFFFFFFF; + info->display_mode = blink::mojom::DisplayMode::kStandalone; + info->open_as_window = true; + + return info; +}
diff --git a/chrome/browser/chromeos/web_applications/file_manager_web_app_info.h b/chrome/browser/chromeos/web_applications/file_manager_web_app_info.h new file mode 100644 index 0000000..4431b20 --- /dev/null +++ b/chrome/browser/chromeos/web_applications/file_manager_web_app_info.h
@@ -0,0 +1,19 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_WEB_APPLICATIONS_FILE_MANAGER_WEB_APP_INFO_H_ +#define CHROME_BROWSER_CHROMEOS_WEB_APPLICATIONS_FILE_MANAGER_WEB_APP_INFO_H_ + +#include <memory> + +#if defined(OFFICIAL_BUILD) +#error File Manager should only be included in unofficial builds. +#endif + +struct WebApplicationInfo; + +// Return a WebApplicationInfo used to install the app. +std::unique_ptr<WebApplicationInfo> CreateWebAppInfoForFileManager(); + +#endif // CHROME_BROWSER_CHROMEOS_WEB_APPLICATIONS_FILE_MANAGER_WEB_APP_INFO_H_
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 3644f38..260d9313 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -2345,7 +2345,7 @@ { "name": "enable-webgl2-compute-context", "owners": [ "webgl-team@google.com" ], - "expiry_milestone": 85 + "expiry_milestone": 91 }, { "name": "enable-webrtc-capture-multi-channel-audio-processing", @@ -3727,11 +3727,6 @@ "expiry_milestone": 88 }, { - "name": "prefetch-privacy-changes", - "owners": [ "dom", "yhirano" ], - "expiry_milestone": 85 - }, - { "name": "print-job-management-app", "owners": [ "jimmyxgong", "cros-peripherals@google.com" ], "expiry_milestone": 88
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index c86c5f21..e8e93ccd3 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -2003,13 +2003,6 @@ "Low priority requests will be delayed if they would otherwise compete " "with a high priority request."; -const char kPrefetchPrivacyChangesName[] = - "Prefetch request properties are updated to be privacy-preserving"; -const char kPrefetchPrivacyChangesDescription[] = - "Prefetch requests will not follow redirects, not send a Referer header, " - "not send credentials for cross-origin requests, and do not pass through " - "service workers."; - const char kIntensiveWakeUpThrottlingName[] = "Throttle Javascript timers in background."; const char kIntensiveWakeUpThrottlingDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 5c15b26..5cfa9976 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -1156,9 +1156,6 @@ extern const char kDelayCompetingLowPriorityRequestsName[]; extern const char kDelayCompetingLowPriorityRequestsDescription[]; -extern const char kPrefetchPrivacyChangesName[]; -extern const char kPrefetchPrivacyChangesDescription[]; - extern const char kIntensiveWakeUpThrottlingName[]; extern const char kIntensiveWakeUpThrottlingDescription[];
diff --git a/chrome/browser/idle/idle_browsertest.cc b/chrome/browser/idle/idle_browsertest.cc index bbf8a2a..3cadc6d 100644 --- a/chrome/browser/idle/idle_browsertest.cc +++ b/chrome/browser/idle/idle_browsertest.cc
@@ -61,7 +61,7 @@ auto* map = HostContentSettingsMapFactory::GetForProfile(browser()->profile()); map->SetContentSettingDefaultScope(url, url, - ContentSettingsType::IDLE_DETECTION, + ContentSettingsType::NOTIFICATIONS, std::string(), CONTENT_SETTING_ALLOW); ui_test_utils::NavigateToURL(browser(), url);
diff --git a/chrome/browser/lookalikes/lookalike_url_navigation_throttle_browsertest.cc b/chrome/browser/lookalikes/lookalike_url_navigation_throttle_browsertest.cc index 47b66446..8838829b 100644 --- a/chrome/browser/lookalikes/lookalike_url_navigation_throttle_browsertest.cc +++ b/chrome/browser/lookalikes/lookalike_url_navigation_throttle_browsertest.cc
@@ -497,9 +497,19 @@ LookalikeUrlMatchType::kTargetEmbedding); } -// Target embedding should not trigger on allowlisted domains. +// Target embedding should not trigger on allowlisted embedder domains. IN_PROC_BROWSER_TEST_P(LookalikeUrlNavigationThrottleBrowserTest, - TargetEmbedding_Allowlist) { + TargetEmbedding_EmbedderAllowlist) { + const GURL kNavigatedUrl = GetURL("google.com.allowlisted.com"); + SetEngagementScore(browser(), kNavigatedUrl, kLowEngagement); + SetSafetyTipAllowlistPatterns({"allowlisted.com/"}, {}); + TestInterstitialNotShown(browser(), kNavigatedUrl); + CheckNoUkm(); +} + +// Target embedding should not trigger on allowlisted target domains. +IN_PROC_BROWSER_TEST_P(LookalikeUrlNavigationThrottleBrowserTest, + TargetEmbedding_TargetAllowlist) { const GURL kNavigatedUrl = GetURL("foo.scholar.google.com.com"); SetEngagementScore(browser(), kNavigatedUrl, kLowEngagement); SetSafetyTipAllowlistPatterns({}, {"scholar\\.google\\.com"}); @@ -507,6 +517,17 @@ CheckNoUkm(); } +// Navigate to a domain target embedding a domain with no separators, but that +// matches the target allowlist. Regression test for crbug.com/1127450. +IN_PROC_BROWSER_TEST_P(LookalikeUrlNavigationThrottleBrowserTest, + TargetEmbedding_TargetAllowlistWithNoSeparators) { + const GURL kNavigatedUrl = GetURL("googlecom.example.com"); + SetEngagementScore(browser(), kNavigatedUrl, kLowEngagement); + SetSafetyTipAllowlistPatterns({}, {"google\\.com"}); + TestInterstitialNotShown(browser(), kNavigatedUrl); + CheckNoUkm(); +} + // Similar to Idn_TopDomain_Match but the domain is not in top 500. Should not // show an interstitial, but should still record metrics. IN_PROC_BROWSER_TEST_P(LookalikeUrlNavigationThrottleBrowserTest,
diff --git a/chrome/browser/media/router/BUILD.gn b/chrome/browser/media/router/BUILD.gn index d397ae27..073b52c 100644 --- a/chrome/browser/media/router/BUILD.gn +++ b/chrome/browser/media/router/BUILD.gn
@@ -136,6 +136,8 @@ "providers/cast/cast_media_route_provider_metrics.h", "providers/cast/cast_session_client.cc", "providers/cast/cast_session_client.h", + "providers/cast/cast_session_client_impl.cc", + "providers/cast/cast_session_client_impl.h", "providers/cast/cast_session_tracker.cc", "providers/cast/cast_session_tracker.h", "providers/cast/chrome_cast_message_handler.cc",
diff --git a/chrome/browser/media/router/providers/cast/cast_activity.cc b/chrome/browser/media/router/providers/cast/cast_activity.cc index 3fd4e12..27657e3 100644 --- a/chrome/browser/media/router/providers/cast/cast_activity.cc +++ b/chrome/browser/media/router/providers/cast/cast_activity.cc
@@ -6,6 +6,7 @@ #include "base/logging.h" #include "chrome/browser/media/router/providers/cast/cast_internal_message_util.h" +#include "chrome/browser/media/router/providers/cast/cast_session_client_impl.h" #include "components/media_router/common/discovery/media_sink_internal.h" namespace media_router {
diff --git a/chrome/browser/media/router/providers/cast/cast_session_client.cc b/chrome/browser/media/router/providers/cast/cast_session_client.cc index 70130e1..c3f10545 100644 --- a/chrome/browser/media/router/providers/cast/cast_session_client.cc +++ b/chrome/browser/media/router/providers/cast/cast_session_client.cc
@@ -4,31 +4,8 @@ #include "chrome/browser/media/router/providers/cast/cast_session_client.h" -#include "base/bind.h" -#include "base/logging.h" -#include "chrome/browser/media/router/data_decoder_util.h" -#include "chrome/browser/media/router/providers/cast/app_activity.h" -#include "chrome/browser/media/router/providers/cast/cast_internal_message_util.h" -#include "components/cast_channel/enum_table.h" -#include "mojo/public/cpp/bindings/pending_remote.h" - -using blink::mojom::PresentationConnectionCloseReason; -using blink::mojom::PresentationConnectionMessagePtr; -using blink::mojom::PresentationConnectionState; - namespace media_router { -namespace { - -void ReportClientMessageParseError(const MediaRoute::Id& route_id, - const std::string& error) { - // TODO(crbug.com/905002): Record UMA metric for parse result. - DLOG(ERROR) << "Failed to parse Cast client message for " << route_id << ": " - << error; -} - -} // namespace - CastSessionClient::CastSessionClient(const std::string& client_id, const url::Origin& origin, int tab_id) @@ -36,240 +13,4 @@ CastSessionClient::~CastSessionClient() = default; -CastSessionClientImpl::CastSessionClientImpl(const std::string& client_id, - const url::Origin& origin, - int tab_id, - AutoJoinPolicy auto_join_policy, - CastActivity* activity) - : CastSessionClient(client_id, origin, tab_id), - auto_join_policy_(auto_join_policy), - activity_(activity) {} - -CastSessionClientImpl::~CastSessionClientImpl() = default; - -mojom::RoutePresentationConnectionPtr CastSessionClientImpl::Init() { - auto renderer_connection = connection_receiver_.BindNewPipeAndPassRemote(); - mojo::PendingRemote<blink::mojom::PresentationConnection> - pending_connection_remote; - auto connection_receiver = - pending_connection_remote.InitWithNewPipeAndPassReceiver(); - connection_remote_.Bind(std::move(pending_connection_remote)); - connection_remote_->DidChangeState(PresentationConnectionState::CONNECTED); - return mojom::RoutePresentationConnection::New( - std::move(renderer_connection), std::move(connection_receiver)); -} - -void CastSessionClientImpl::SendMessageToClient( - PresentationConnectionMessagePtr message) { - connection_remote_->OnMessage(std::move(message)); -} - -void CastSessionClientImpl::SendMediaStatusToClient( - const base::Value& media_status, - base::Optional<int> request_id) { - // Look up if there is a pending request from this client associated with this - // message. If so, send the media status message as a response by setting the - // sequence number. - base::Optional<int> sequence_number; - if (request_id) { - auto it = pending_media_requests_.find(*request_id); - if (it != pending_media_requests_.end()) { - DVLOG(2) << "Found matching request id: " << *request_id << " -> " - << it->second; - sequence_number = it->second; - pending_media_requests_.erase(it); - } - } - - SendMessageToClient( - CreateV2Message(client_id(), media_status, sequence_number)); -} - -bool CastSessionClientImpl::MatchesAutoJoinPolicy(url::Origin other_origin, - int other_tab_id) const { - switch (auto_join_policy_) { - case AutoJoinPolicy::kPageScoped: - return false; - case AutoJoinPolicy::kTabAndOriginScoped: - return other_origin == origin() && other_tab_id == tab_id(); - case AutoJoinPolicy::kOriginScoped: - return other_origin == origin(); - } -} - -void CastSessionClientImpl::OnMessage( - PresentationConnectionMessagePtr message) { - if (!message->is_message()) - return; - - GetDataDecoder().ParseJson( - message->get_message(), - base::BindOnce(&CastSessionClientImpl::HandleParsedClientMessage, - weak_ptr_factory_.GetWeakPtr())); -} - -void CastSessionClientImpl::DidClose(PresentationConnectionCloseReason reason) { - activity_->CloseConnectionOnReceiver(client_id()); -} - -void CastSessionClientImpl::SendErrorCodeToClient( - int sequence_number, - CastInternalMessage::ErrorCode error_code, - base::Optional<std::string> description) { - base::Value message(base::Value::Type::DICTIONARY); - message.SetKey("code", base::Value(*cast_util::EnumToString(error_code))); - message.SetKey("description", - description ? base::Value(*description) : base::Value()); - message.SetKey("details", base::Value()); - SendErrorToClient(sequence_number, std::move(message)); -} - -void CastSessionClientImpl::SendErrorToClient(int sequence_number, - base::Value error) { - SendMessageToClient( - CreateErrorMessage(client_id(), std::move(error), sequence_number)); -} - -void CastSessionClientImpl::HandleParsedClientMessage( - data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { - ReportClientMessageParseError(activity_->route().media_route_id(), - *result.error); - return; - } - - std::unique_ptr<CastInternalMessage> cast_message = - CastInternalMessage::From(std::move(*result.value)); - if (!cast_message) { - ReportClientMessageParseError(activity_->route().media_route_id(), - "Not a Cast message"); - return; - } - - if (cast_message->client_id() != client_id()) { - DLOG(ERROR) << "Client ID mismatch: expected: " << client_id() - << ", got: " << cast_message->client_id(); - return; - } - - if (cast_message->has_session_id() && - cast_message->session_id() != activity_->session_id()) { - DLOG(ERROR) << "Session ID mismatch: expected: " - << activity_->session_id().value_or("<missing>") - << ", got: " << cast_message->session_id(); - return; - } - - switch (cast_message->type()) { - case CastInternalMessage::Type::kAppMessage: - // Send an ACK message back to SDK client to indicate it is handled. - if (activity_->SendAppMessageToReceiver(*cast_message) == - cast_channel::Result::kOk) { - DCHECK(cast_message->sequence_number()); - SendMessageToClient(CreateAppMessageAck( - cast_message->client_id(), *cast_message->sequence_number())); - } - break; - - case CastInternalMessage::Type::kV2Message: - HandleV2ProtocolMessage(*cast_message); - break; - - case CastInternalMessage::Type::kLeaveSession: - SendMessageToClient(CreateLeaveSessionAckMessage( - client_id(), cast_message->sequence_number())); - activity_->HandleLeaveSession(client_id()); - break; - - default: - auto opt_string = cast_util::EnumToString(cast_message->type()); - if (opt_string) { - DLOG(ERROR) << "Unhandled message type: " << *opt_string; - } else { - DLOG(ERROR) << "Invalid message type: " - << static_cast<int>(cast_message->type()); - } - } -} - -void CastSessionClientImpl::HandleV2ProtocolMessage( - const CastInternalMessage& cast_message) { - const std::string& type_str = cast_message.v2_message_type(); - cast_channel::V2MessageType type = - cast_channel::V2MessageTypeFromString(type_str); - if (cast_channel::IsMediaRequestMessageType(type)) { - DVLOG(2) << "Got media command from client: " << type_str; - base::Optional<int> request_id = - activity_->SendMediaRequestToReceiver(cast_message); - if (request_id) { - DCHECK(cast_message.sequence_number()); - if (pending_media_requests_.size() >= kMaxPendingMediaRequests) { - // Delete old pending requests. Request IDs are generated sequentially, - // so this should always delete the oldest requests. Deleting requests - // is O(n) in the size of the table, so we delete half the outstanding - // requests at once so the amortized deletion cost is O(1). - pending_media_requests_.erase(pending_media_requests_.begin(), - pending_media_requests_.begin() + - pending_media_requests_.size() / 2); - } - pending_media_requests_.emplace(*request_id, - *cast_message.sequence_number()); - } - } else if (type == cast_channel::V2MessageType::kSetVolume) { - DVLOG(2) << "Got volume command from client"; - DCHECK(cast_message.sequence_number()); - activity_->SendSetVolumeRequestToReceiver(cast_message, - MakeResultCallback(cast_message)); - } else if (type == cast_channel::V2MessageType::kStop) { - activity_->StopSessionOnReceiver(cast_message.client_id(), - MakeResultCallback(cast_message)); - } else { - DLOG(ERROR) << "Unknown v2 message type: " << type_str; - } -} - -void CastSessionClientImpl::SendResultResponse(int sequence_number, - cast_channel::Result result) { - if (result == cast_channel::Result::kOk) { - // Send an empty message to let the client know the request succeeded. - SendMessageToClient( - CreateV2Message(client_id(), base::Value(), sequence_number)); - } else { - // TODO(crbug.com/951089): Send correct error codes. The original - // implementation isn't much help here because it sends incorrectly - // formatted error messages without a valid error code in a lot of cases. - SendErrorCodeToClient(sequence_number, - CastInternalMessage::ErrorCode::kInternalError, - "unknown error"); - } -} - -void CastSessionClientImpl::CloseConnection( - PresentationConnectionCloseReason close_reason) { - if (connection_remote_) - connection_remote_->DidClose(close_reason); - TearDownPresentationConnection(); - activity_->CloseConnectionOnReceiver(client_id()); -} - -void CastSessionClientImpl::TerminateConnection() { - if (connection_remote_) - connection_remote_->DidChangeState(PresentationConnectionState::TERMINATED); - - TearDownPresentationConnection(); -} - -void CastSessionClientImpl::TearDownPresentationConnection() { - connection_remote_.reset(); - connection_receiver_.reset(); -} - -cast_channel::ResultCallback CastSessionClientImpl::MakeResultCallback( - const CastInternalMessage& cast_message) { - DCHECK(cast_message.sequence_number()); - return base::BindOnce(&CastSessionClientImpl::SendResultResponse, - weak_ptr_factory_.GetWeakPtr(), - *cast_message.sequence_number()); -} - } // namespace media_router
diff --git a/chrome/browser/media/router/providers/cast/cast_session_client.h b/chrome/browser/media/router/providers/cast/cast_session_client.h index e68e6f7f..383ff54 100644 --- a/chrome/browser/media/router/providers/cast/cast_session_client.h +++ b/chrome/browser/media/router/providers/cast/cast_session_client.h
@@ -8,25 +8,17 @@ #include <memory> #include <string> -#include "base/containers/flat_map.h" -#include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/optional.h" #include "base/values.h" #include "chrome/browser/media/router/providers/cast/cast_internal_message_util.h" -#include "components/cast_channel/cast_message_handler.h" #include "components/media_router/common/mojom/media_router.mojom.h" -#include "components/media_router/common/providers/cast/cast_media_source.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" -#include "services/data_decoder/public/cpp/data_decoder.h" #include "third_party/blink/public/mojom/presentation/presentation.mojom.h" -#include "url/origin.h" namespace media_router { -class CastActivity; - // Represents a Cast SDK client connection to a Cast session. This class // contains PresentationConnection Mojo pipes to send and receive messages // from/to the corresponding SDK client hosted in a presentation controlling @@ -109,91 +101,6 @@ int tab_id) = 0; }; -// TODO(jrw): Move to a separate file. -class CastSessionClientImpl : public CastSessionClient, - public blink::mojom::PresentationConnection { - public: - CastSessionClientImpl(const std::string& client_id, - const url::Origin& origin, - int tab_id, - AutoJoinPolicy auto_join_policy, - CastActivity* activity); - ~CastSessionClientImpl() override; - - // CastSessionClient implementation - mojom::RoutePresentationConnectionPtr Init() override; - // TODO(jrw): Remove redundant "ToClient" in the name of this and other - // methods. - void SendMessageToClient( - blink::mojom::PresentationConnectionMessagePtr message) override; - void SendMediaStatusToClient(const base::Value& media_status, - base::Optional<int> request_id) override; - void CloseConnection( - blink::mojom::PresentationConnectionCloseReason close_reason) override; - void TerminateConnection() override; - bool MatchesAutoJoinPolicy(url::Origin origin, int tab_id) const override; - void SendErrorCodeToClient(int sequence_number, - CastInternalMessage::ErrorCode error_code, - base::Optional<std::string> description) override; - void SendErrorToClient(int sequence_number, base::Value error) override; - - // blink::mojom::PresentationConnection implementation - void OnMessage( - blink::mojom::PresentationConnectionMessagePtr message) override; - // Blink does not initiate state change or close using PresentationConnection. - // Instead, |PresentationService::Close/TerminateConnection| is used. - void DidChangeState( - blink::mojom::PresentationConnectionState state) override {} - void DidClose( - blink::mojom::PresentationConnectionCloseReason reason) override; - - private: - void HandleParsedClientMessage( - data_decoder::DataDecoder::ValueOrError result); - void HandleV2ProtocolMessage(const CastInternalMessage& cast_message); - - // Resets the PresentationConnection Mojo message pipes. - void TearDownPresentationConnection(); - - // Sends a response to the client indicating that a particular request - // succeeded or failed. - void SendResultResponse(int sequence_number, cast_channel::Result result); - - // Builds a callback that calls SendResultResponse(). - cast_channel::ResultCallback MakeResultCallback( - const CastInternalMessage& cast_message); - - const AutoJoinPolicy auto_join_policy_; - - CastActivity* const activity_; - - // The maximum number of pending media requests, used to prevent memory leaks. - // Normally the number of pending requests should be fairly small, but each - // entry only consumes 2*sizeof(int) bytes, so the upper limit is set fairly - // high. - static constexpr std::size_t kMaxPendingMediaRequests = 1024; - - // Maps internal, locally-generated request IDs to sequence numbers from cast - // messages received from the client. Used to set an appropriate - // sequenceNumber field in outgoing messages so a client can associate a media - // status message with a previous request. - // - // TODO(jrw): Investigate whether this mapping is really necessary, or if - // sequence numbers can be used directly without generating request IDs. - base::flat_map<int, int> pending_media_requests_; - - // Receiver for the PresentationConnection in Blink to receive incoming - // messages and respond to state changes. - mojo::Receiver<blink::mojom::PresentationConnection> connection_receiver_{ - this}; - - // Mojo message pipe to PresentationConnection in Blink to send messages and - // initiate state changes. - mojo::Remote<blink::mojom::PresentationConnection> connection_remote_; - - base::WeakPtrFactory<CastSessionClientImpl> weak_ptr_factory_{this}; -}; - } // namespace media_router #endif // CHROME_BROWSER_MEDIA_ROUTER_PROVIDERS_CAST_CAST_SESSION_CLIENT_H_
diff --git a/chrome/browser/media/router/providers/cast/cast_session_client_impl.cc b/chrome/browser/media/router/providers/cast/cast_session_client_impl.cc new file mode 100644 index 0000000..49ede49 --- /dev/null +++ b/chrome/browser/media/router/providers/cast/cast_session_client_impl.cc
@@ -0,0 +1,263 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/media/router/providers/cast/cast_session_client_impl.h" + +#include "chrome/browser/media/router/data_decoder_util.h" +#include "chrome/browser/media/router/providers/cast/app_activity.h" +#include "components/cast_channel/enum_table.h" + +using blink::mojom::PresentationConnectionCloseReason; +using blink::mojom::PresentationConnectionMessagePtr; +using blink::mojom::PresentationConnectionState; + +namespace media_router { + +namespace { + +void ReportClientMessageParseError(const MediaRoute::Id& route_id, + const std::string& error) { + // TODO(crbug.com/905002): Record UMA metric for parse result. + DLOG(ERROR) << "Failed to parse Cast client message for " << route_id << ": " + << error; +} + +} // namespace + +CastSessionClientImpl::CastSessionClientImpl(const std::string& client_id, + const url::Origin& origin, + int tab_id, + AutoJoinPolicy auto_join_policy, + CastActivity* activity) + : CastSessionClient(client_id, origin, tab_id), + auto_join_policy_(auto_join_policy), + activity_(activity) {} + +CastSessionClientImpl::~CastSessionClientImpl() = default; + +mojom::RoutePresentationConnectionPtr CastSessionClientImpl::Init() { + auto renderer_connection = connection_receiver_.BindNewPipeAndPassRemote(); + mojo::PendingRemote<blink::mojom::PresentationConnection> + pending_connection_remote; + auto connection_receiver = + pending_connection_remote.InitWithNewPipeAndPassReceiver(); + connection_remote_.Bind(std::move(pending_connection_remote)); + connection_remote_->DidChangeState(PresentationConnectionState::CONNECTED); + return mojom::RoutePresentationConnection::New( + std::move(renderer_connection), std::move(connection_receiver)); +} + +void CastSessionClientImpl::SendMessageToClient( + PresentationConnectionMessagePtr message) { + connection_remote_->OnMessage(std::move(message)); +} + +void CastSessionClientImpl::SendMediaStatusToClient( + const base::Value& media_status, + base::Optional<int> request_id) { + // Look up if there is a pending request from this client associated with this + // message. If so, send the media status message as a response by setting the + // sequence number. + base::Optional<int> sequence_number; + if (request_id) { + auto it = pending_media_requests_.find(*request_id); + if (it != pending_media_requests_.end()) { + DVLOG(2) << "Found matching request id: " << *request_id << " -> " + << it->second; + sequence_number = it->second; + pending_media_requests_.erase(it); + } + } + + SendMessageToClient( + CreateV2Message(client_id(), media_status, sequence_number)); +} + +bool CastSessionClientImpl::MatchesAutoJoinPolicy(url::Origin other_origin, + int other_tab_id) const { + switch (auto_join_policy_) { + case AutoJoinPolicy::kPageScoped: + return false; + case AutoJoinPolicy::kTabAndOriginScoped: + return other_origin == origin() && other_tab_id == tab_id(); + case AutoJoinPolicy::kOriginScoped: + return other_origin == origin(); + } +} + +void CastSessionClientImpl::OnMessage( + PresentationConnectionMessagePtr message) { + if (!message->is_message()) + return; + + GetDataDecoder().ParseJson( + message->get_message(), + base::BindOnce(&CastSessionClientImpl::HandleParsedClientMessage, + weak_ptr_factory_.GetWeakPtr())); +} + +void CastSessionClientImpl::DidClose(PresentationConnectionCloseReason reason) { + activity_->CloseConnectionOnReceiver(client_id()); +} + +void CastSessionClientImpl::SendErrorCodeToClient( + int sequence_number, + CastInternalMessage::ErrorCode error_code, + base::Optional<std::string> description) { + base::Value message(base::Value::Type::DICTIONARY); + message.SetKey("code", base::Value(*cast_util::EnumToString(error_code))); + message.SetKey("description", + description ? base::Value(*description) : base::Value()); + message.SetKey("details", base::Value()); + SendErrorToClient(sequence_number, std::move(message)); +} + +void CastSessionClientImpl::SendErrorToClient(int sequence_number, + base::Value error) { + SendMessageToClient( + CreateErrorMessage(client_id(), std::move(error), sequence_number)); +} + +void CastSessionClientImpl::HandleParsedClientMessage( + data_decoder::DataDecoder::ValueOrError result) { + if (!result.value) { + ReportClientMessageParseError(activity_->route().media_route_id(), + *result.error); + return; + } + + std::unique_ptr<CastInternalMessage> cast_message = + CastInternalMessage::From(std::move(*result.value)); + if (!cast_message) { + ReportClientMessageParseError(activity_->route().media_route_id(), + "Not a Cast message"); + return; + } + + if (cast_message->client_id() != client_id()) { + DLOG(ERROR) << "Client ID mismatch: expected: " << client_id() + << ", got: " << cast_message->client_id(); + return; + } + + if (cast_message->has_session_id() && + cast_message->session_id() != activity_->session_id()) { + DLOG(ERROR) << "Session ID mismatch: expected: " + << activity_->session_id().value_or("<missing>") + << ", got: " << cast_message->session_id(); + return; + } + + switch (cast_message->type()) { + case CastInternalMessage::Type::kAppMessage: + // Send an ACK message back to SDK client to indicate it is handled. + if (activity_->SendAppMessageToReceiver(*cast_message) == + cast_channel::Result::kOk) { + DCHECK(cast_message->sequence_number()); + SendMessageToClient(CreateAppMessageAck( + cast_message->client_id(), *cast_message->sequence_number())); + } + break; + + case CastInternalMessage::Type::kV2Message: + HandleV2ProtocolMessage(*cast_message); + break; + + case CastInternalMessage::Type::kLeaveSession: + SendMessageToClient(CreateLeaveSessionAckMessage( + client_id(), cast_message->sequence_number())); + activity_->HandleLeaveSession(client_id()); + break; + + default: + auto opt_string = cast_util::EnumToString(cast_message->type()); + if (opt_string) { + DLOG(ERROR) << "Unhandled message type: " << *opt_string; + } else { + DLOG(ERROR) << "Invalid message type: " + << static_cast<int>(cast_message->type()); + } + } +} + +void CastSessionClientImpl::HandleV2ProtocolMessage( + const CastInternalMessage& cast_message) { + const std::string& type_str = cast_message.v2_message_type(); + cast_channel::V2MessageType type = + cast_channel::V2MessageTypeFromString(type_str); + if (cast_channel::IsMediaRequestMessageType(type)) { + DVLOG(2) << "Got media command from client: " << type_str; + base::Optional<int> request_id = + activity_->SendMediaRequestToReceiver(cast_message); + if (request_id) { + DCHECK(cast_message.sequence_number()); + if (pending_media_requests_.size() >= kMaxPendingMediaRequests) { + // Delete old pending requests. Request IDs are generated sequentially, + // so this should always delete the oldest requests. Deleting requests + // is O(n) in the size of the table, so we delete half the outstanding + // requests at once so the amortized deletion cost is O(1). + pending_media_requests_.erase(pending_media_requests_.begin(), + pending_media_requests_.begin() + + pending_media_requests_.size() / 2); + } + pending_media_requests_.emplace(*request_id, + *cast_message.sequence_number()); + } + } else if (type == cast_channel::V2MessageType::kSetVolume) { + DVLOG(2) << "Got volume command from client"; + DCHECK(cast_message.sequence_number()); + activity_->SendSetVolumeRequestToReceiver(cast_message, + MakeResultCallback(cast_message)); + } else if (type == cast_channel::V2MessageType::kStop) { + activity_->StopSessionOnReceiver(cast_message.client_id(), + MakeResultCallback(cast_message)); + } else { + DLOG(ERROR) << "Unknown v2 message type: " << type_str; + } +} + +void CastSessionClientImpl::SendResultResponse(int sequence_number, + cast_channel::Result result) { + if (result == cast_channel::Result::kOk) { + // Send an empty message to let the client know the request succeeded. + SendMessageToClient( + CreateV2Message(client_id(), base::Value(), sequence_number)); + } else { + // TODO(crbug.com/951089): Send correct error codes. The original + // implementation isn't much help here because it sends incorrectly + // formatted error messages without a valid error code in a lot of cases. + SendErrorCodeToClient(sequence_number, + CastInternalMessage::ErrorCode::kInternalError, + "unknown error"); + } +} + +void CastSessionClientImpl::CloseConnection( + PresentationConnectionCloseReason close_reason) { + if (connection_remote_) + connection_remote_->DidClose(close_reason); + TearDownPresentationConnection(); + activity_->CloseConnectionOnReceiver(client_id()); +} + +void CastSessionClientImpl::TerminateConnection() { + if (connection_remote_) + connection_remote_->DidChangeState(PresentationConnectionState::TERMINATED); + + TearDownPresentationConnection(); +} + +void CastSessionClientImpl::TearDownPresentationConnection() { + connection_remote_.reset(); + connection_receiver_.reset(); +} + +cast_channel::ResultCallback CastSessionClientImpl::MakeResultCallback( + const CastInternalMessage& cast_message) { + DCHECK(cast_message.sequence_number()); + return base::BindOnce(&CastSessionClientImpl::SendResultResponse, + weak_ptr_factory_.GetWeakPtr(), + *cast_message.sequence_number()); +} +} // namespace media_router
diff --git a/chrome/browser/media/router/providers/cast/cast_session_client_impl.h b/chrome/browser/media/router/providers/cast/cast_session_client_impl.h new file mode 100644 index 0000000..3a55e7e --- /dev/null +++ b/chrome/browser/media/router/providers/cast/cast_session_client_impl.h
@@ -0,0 +1,102 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_MEDIA_ROUTER_PROVIDERS_CAST_CAST_SESSION_CLIENT_IMPL_H_ +#define CHROME_BROWSER_MEDIA_ROUTER_PROVIDERS_CAST_CAST_SESSION_CLIENT_IMPL_H_ + +#include "chrome/browser/media/router/providers/cast/cast_session_client.h" +#include "components/cast_channel/cast_message_handler.h" +#include "components/media_router/common/providers/cast/cast_media_source.h" +#include "services/data_decoder/public/cpp/data_decoder.h" + +namespace media_router { + +class CastActivity; + +class CastSessionClientImpl : public CastSessionClient, + public blink::mojom::PresentationConnection { + public: + CastSessionClientImpl(const std::string& client_id, + const url::Origin& origin, + int tab_id, + AutoJoinPolicy auto_join_policy, + CastActivity* activity); + ~CastSessionClientImpl() override; + + // CastSessionClient implementation + mojom::RoutePresentationConnectionPtr Init() override; + // TODO(jrw): Remove redundant "ToClient" in the name of this and other + // methods. + void SendMessageToClient( + blink::mojom::PresentationConnectionMessagePtr message) override; + void SendMediaStatusToClient(const base::Value& media_status, + base::Optional<int> request_id) override; + void CloseConnection( + blink::mojom::PresentationConnectionCloseReason close_reason) override; + void TerminateConnection() override; + bool MatchesAutoJoinPolicy(url::Origin origin, int tab_id) const override; + void SendErrorCodeToClient(int sequence_number, + CastInternalMessage::ErrorCode error_code, + base::Optional<std::string> description) override; + void SendErrorToClient(int sequence_number, base::Value error) override; + + // blink::mojom::PresentationConnection implementation + void OnMessage( + blink::mojom::PresentationConnectionMessagePtr message) override; + // Blink does not initiate state change or close using PresentationConnection. + // Instead, |PresentationService::Close/TerminateConnection| is used. + void DidChangeState( + blink::mojom::PresentationConnectionState state) override {} + void DidClose( + blink::mojom::PresentationConnectionCloseReason reason) override; + + private: + void HandleParsedClientMessage( + data_decoder::DataDecoder::ValueOrError result); + void HandleV2ProtocolMessage(const CastInternalMessage& cast_message); + + // Resets the PresentationConnection Mojo message pipes. + void TearDownPresentationConnection(); + + // Sends a response to the client indicating that a particular request + // succeeded or failed. + void SendResultResponse(int sequence_number, cast_channel::Result result); + + // Builds a callback that calls SendResultResponse(). + cast_channel::ResultCallback MakeResultCallback( + const CastInternalMessage& cast_message); + + const AutoJoinPolicy auto_join_policy_; + + CastActivity* const activity_; + + // The maximum number of pending media requests, used to prevent memory leaks. + // Normally the number of pending requests should be fairly small, but each + // entry only consumes 2*sizeof(int) bytes, so the upper limit is set fairly + // high. + static constexpr std::size_t kMaxPendingMediaRequests = 1024; + + // Maps internal, locally-generated request IDs to sequence numbers from cast + // messages received from the client. Used to set an appropriate + // sequenceNumber field in outgoing messages so a client can associate a media + // status message with a previous request. + // + // TODO(jrw): Investigate whether this mapping is really necessary, or if + // sequence numbers can be used directly without generating request IDs. + base::flat_map<int, int> pending_media_requests_; + + // Receiver for the PresentationConnection in Blink to receive incoming + // messages and respond to state changes. + mojo::Receiver<blink::mojom::PresentationConnection> connection_receiver_{ + this}; + + // Mojo message pipe to PresentationConnection in Blink to send messages and + // initiate state changes. + mojo::Remote<blink::mojom::PresentationConnection> connection_remote_; + + base::WeakPtrFactory<CastSessionClientImpl> weak_ptr_factory_{this}; +}; +} // namespace media_router + +#endif // CHROME_BROWSER_MEDIA_ROUTER_PROVIDERS_CAST_CAST_SESSION_CLIENT_IMPL_H_
diff --git a/chrome/browser/media/router/providers/cast/cast_session_client_unittest.cc b/chrome/browser/media/router/providers/cast/cast_session_client_unittest.cc index 5767e6d3..f9bd7bb6 100644 --- a/chrome/browser/media/router/providers/cast/cast_session_client_unittest.cc +++ b/chrome/browser/media/router/providers/cast/cast_session_client_unittest.cc
@@ -16,6 +16,7 @@ #include "chrome/browser/media/router/data_decoder_util.h" #include "chrome/browser/media/router/providers/cast/cast_activity_manager.h" #include "chrome/browser/media/router/providers/cast/cast_internal_message_util.h" +#include "chrome/browser/media/router/providers/cast/cast_session_client_impl.h" #include "chrome/browser/media/router/providers/cast/mock_app_activity.h" #include "chrome/browser/media/router/providers/cast/test_util.h" #include "chrome/browser/media/router/providers/common/buffered_message_sender.h"
diff --git a/chrome/browser/metrics/BUILD.gn b/chrome/browser/metrics/BUILD.gn index cf98ddb..b4a3aad 100644 --- a/chrome/browser/metrics/BUILD.gn +++ b/chrome/browser/metrics/BUILD.gn
@@ -29,10 +29,6 @@ } generate_expired_histograms_array("expired_histograms_array") { - inputs = [ - "//tools/metrics/histograms/histograms.xml", - "//tools/metrics/histograms/enums.xml", - ] namespace = "chrome_metrics" header_filename = "expired_histograms_array.h" major_branch_date_filepath = "//chrome/MAJOR_BRANCH_DATE"
diff --git a/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client.cc b/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client.cc index cd3d3da..e60dee2a 100644 --- a/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client.cc +++ b/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client.cc
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/feature_list.h" #include "base/metrics/field_trial_params.h" +#include "base/metrics/histogram_macros.h" #include "base/time/time.h" #include "build/build_config.h" #include "chrome/browser/navigation_predictor/navigation_predictor_features.h" @@ -23,6 +24,7 @@ #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" #include "net/base/features.h" +#include "net/base/ip_address.h" namespace { @@ -44,8 +46,22 @@ void NavigationPredictorPreconnectClient::DidFinishNavigation( content::NavigationHandle* navigation_handle) { if (!navigation_handle->IsInMainFrame() || - !navigation_handle->HasCommitted() || - (!base::FeatureList::IsEnabled( + !navigation_handle->HasCommitted()) { + return; + } + + if (!navigation_handle->IsSameDocument()) { + is_publicly_routable_ = false; + + base::Optional<bool> is_publicly_routable = + IsPubliclyRoutable(navigation_handle); + + if (is_publicly_routable) { + is_publicly_routable_ = is_publicly_routable.value(); + } + } + + if ((!base::FeatureList::IsEnabled( features:: kNavigationPredictorEnablePreconnectOnSameDocumentNavigations) && navigation_handle->IsSameDocument())) { @@ -141,6 +157,14 @@ return; } + UMA_HISTOGRAM_BOOLEAN("NavigationPredictor.IsPubliclyRoutable", + is_publicly_routable_); + + // Disable preconnecting to servers that are not publicly routable. These + // could likely be small IoT servers that may not support extra traffic. + if (!is_publicly_routable_) + return; + auto* loading_predictor = predictors::LoadingPredictorFactory::GetForProfile( Profile::FromBrowserContext(browser_context_)); GURL preconnect_url_serialized(preconnect_origin.Serialize()); @@ -163,7 +187,7 @@ FROM_HERE, base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt( net::features::kNetUnusedIdleSocketTimeout, - "unused_idle_socket_timeout_seconds", 60)) + + "unused_idle_socket_timeout_seconds", 10)) + base::TimeDelta::FromMilliseconds(retry_delay_ms), base::BindOnce(&NavigationPredictorPreconnectClient::MaybePreconnectNow, base::Unretained(this), preconnects_attempted + 1)); @@ -178,4 +202,27 @@ web_contents()->GetLastCommittedURL()); } +base::Optional<bool> NavigationPredictorPreconnectClient::IsPubliclyRoutable( + content::NavigationHandle* navigation_handle) const { + net::IPEndPoint remote_endpoint = navigation_handle->GetSocketAddress(); + net::IPAddress page_ip_address_ = remote_endpoint.address(); + + // Sometimes the IP address may not be set (e.g., if the socket is being + // reused). + if (!page_ip_address_.IsValid()) { + return base::nullopt; + } + + if (!enable_preconnects_for_local_ips_for_testing_) { + if (page_ip_address_.IsLoopback() || + !page_ip_address_.IsPubliclyRoutable()) { + return false; + } + } + return true; +} + +bool NavigationPredictorPreconnectClient:: + enable_preconnects_for_local_ips_for_testing_ = false; + WEB_CONTENTS_USER_DATA_KEY_IMPL(NavigationPredictorPreconnectClient)
diff --git a/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client.h b/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client.h index 453abca..3774e3d5 100644 --- a/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client.h +++ b/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client.h
@@ -25,6 +25,12 @@ public: ~NavigationPredictorPreconnectClient() override; + static void EnablePreconnectsForLocalIPsForTesting( + bool enable_preconnects_for_local_ips) { + enable_preconnects_for_local_ips_for_testing_ = + enable_preconnects_for_local_ips; + } + private: friend class content::WebContentsUserData< NavigationPredictorPreconnectClient>; @@ -47,15 +53,26 @@ // MaybePreconnectNow preconnects to an origin server if it's allowed. void MaybePreconnectNow(size_t preconnects_attempted); + // Returns true if the origin is publicly routable. + base::Optional<bool> IsPubliclyRoutable( + content::NavigationHandle* navigation_handle) const; + // Used to get keyed services. content::BrowserContext* const browser_context_; + // Set to true only if preconnects are allowed to local IPs. Defaulted to + // false. Set to true only for testing. + static bool enable_preconnects_for_local_ips_for_testing_; + // Current visibility state of the web contents. content::Visibility current_visibility_; // Used to preconnect regularly. base::OneShotTimer timer_; + // Set to true if the origin is publicly routable. + bool is_publicly_routable_ = true; + SEQUENCE_CHECKER(sequence_checker_); WEB_CONTENTS_USER_DATA_KEY_DECL();
diff --git a/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client_browsertest.cc b/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client_browsertest.cc index 1df7ba9..291727d 100644 --- a/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client_browsertest.cc +++ b/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client_browsertest.cc
@@ -11,6 +11,7 @@ #include "chrome/browser/navigation_predictor/navigation_predictor_features.h" #include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service.h" #include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service_factory.h" +#include "chrome/browser/navigation_predictor/navigation_predictor_preconnect_client.h" #include "chrome/browser/navigation_predictor/search_engine_preconnector.h" #include "chrome/browser/predictors/loading_predictor.h" #include "chrome/browser/predictors/loading_predictor_factory.h" @@ -56,6 +57,8 @@ void SetUpOnMainThread() override { subresource_filter::SubresourceFilterBrowserTest::SetUpOnMainThread(); host_resolver()->ClearRules(); + NavigationPredictorPreconnectClient::EnablePreconnectsForLocalIPsForTesting( + true); auto* loading_predictor = predictors::LoadingPredictorFactory::GetForProfile( @@ -131,6 +134,7 @@ IN_PROC_BROWSER_TEST_F(NavigationPredictorPreconnectClientBrowserTest, PreconnectNotSearch) { + base::HistogramTester histogram_tester; const GURL& url = GetTestURL("/anchors_different_area.html"); ui_test_utils::NavigateToURL(browser(), url); @@ -138,6 +142,8 @@ // client. WaitForPreresolveCount(2); EXPECT_EQ(2, preresolve_done_count_); + histogram_tester.ExpectUniqueSample("NavigationPredictor.IsPubliclyRoutable", + true, 1); } IN_PROC_BROWSER_TEST_F(NavigationPredictorPreconnectClientBrowserTest, @@ -409,4 +415,32 @@ EXPECT_EQ(4, preresolve_done_count_); } +class NavigationPredictorPreconnectClientLocalURLBrowserTest + : public NavigationPredictorPreconnectClientBrowserTest { + public: + NavigationPredictorPreconnectClientLocalURLBrowserTest() = default; + + private: + void SetUpOnMainThread() override { + NavigationPredictorPreconnectClientBrowserTest::SetUpOnMainThread(); + NavigationPredictorPreconnectClient::EnablePreconnectsForLocalIPsForTesting( + false); + } + + DISALLOW_COPY_AND_ASSIGN( + NavigationPredictorPreconnectClientLocalURLBrowserTest); +}; + +IN_PROC_BROWSER_TEST_F(NavigationPredictorPreconnectClientLocalURLBrowserTest, + NoPreconnectSearch) { + base::HistogramTester histogram_tester; + const GURL& url = GetTestURL("/anchors_different_area.html"); + + ui_test_utils::NavigateToURL(browser(), url); + + // There should not be any preconnects to non-public addresses. + histogram_tester.ExpectUniqueSample("NavigationPredictor.IsPubliclyRoutable", + false, 1); +} + } // namespace
diff --git a/chrome/browser/resources/chromeos/BUILD.gn b/chrome/browser/resources/chromeos/BUILD.gn index 7a1740a5..df989790 100644 --- a/chrome/browser/resources/chromeos/BUILD.gn +++ b/chrome/browser/resources/chromeos/BUILD.gn
@@ -46,6 +46,7 @@ "bluetooth_pairing_dialog:closure_compile", "crostini_installer:closure_compile", "crostini_upgrader:closure_compile", + "edu_coexistence:closure_compile", "edu_login:closure_compile", "emulator:closure_compile", "gaia_action_buttons:closure_compile",
diff --git a/chrome/browser/resources/chromeos/add_supervision/BUILD.gn b/chrome/browser/resources/chromeos/add_supervision/BUILD.gn index ce80af1..3ffe542 100644 --- a/chrome/browser/resources/chromeos/add_supervision/BUILD.gn +++ b/chrome/browser/resources/chromeos/add_supervision/BUILD.gn
@@ -3,6 +3,7 @@ # found in the LICENSE file. import("//third_party/closure_compiler/compile_js.gni") +import("//ui/webui/resources/tools/js_modulizer.gni") js_type_check("closure_compile") { deps = [ @@ -12,10 +13,6 @@ ] } -js_library("post_message_api") { - deps = [] -} - js_library("add_supervision_api_server") { deps = [ ":post_message_api", @@ -33,3 +30,20 @@ "$externs_path/webview_tag.js", ] } + +# Old style non-modularized js_libraries, needed so that gaia_auth_host JS library +# can be used in older non-modularized JS code that can't be quickly ported +# (i.e. OOBE, Gellerization/Add-Supervision). + +js_library("post_message_api") { +} + +# New ES6 JS module style post_message_api library. +js_library("post_message_api.m") { + sources = [ "$root_gen_dir/chrome/browser/resources/chromeos/add_supervision/post_message_api.m.js" ] + extra_deps = [ ":modulize" ] +} + +js_modulizer("modulize") { + input_files = [ "post_message_api.js" ] +}
diff --git a/chrome/browser/resources/chromeos/add_supervision/post_message_api.js b/chrome/browser/resources/chromeos/add_supervision/post_message_api.js index 752958d..fd16315 100644 --- a/chrome/browser/resources/chromeos/add_supervision/post_message_api.js +++ b/chrome/browser/resources/chromeos/add_supervision/post_message_api.js
@@ -8,7 +8,7 @@ * methods provided in methodList should be implemented as methods * of the subclass. */ -class PostMessageAPIServer { +/* #export */ class PostMessageAPIServer { constructor(clientElement, methodList, targetURL, messageOriginURLFilter) { /** * The Window type element to which this server will listen for messages, @@ -128,7 +128,7 @@ * over the postMessage API. This should be subclassed and the methods in the * server that the client needs to access should be provided in methodList. */ -class PostMessageAPIClient { +/* #export */ class PostMessageAPIClient { /** * @param {!Array<string>} methodList The list of methods accessible via the * client.
diff --git a/chrome/browser/resources/chromeos/edu_coexistence/BUILD.gn b/chrome/browser/resources/chromeos/edu_coexistence/BUILD.gn new file mode 100644 index 0000000..8a334a1 --- /dev/null +++ b/chrome/browser/resources/chromeos/edu_coexistence/BUILD.gn
@@ -0,0 +1,75 @@ +# Copyright 2020 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//third_party/closure_compiler/compile_js.gni") +import("//tools/polymer/polymer.gni") +import("//ui/webui/resources/tools/js_modulizer.gni") + +js_type_check("closure_compile") { + is_polymer3 = true + deps = [ + ":edu_coexistence_app", + ":edu_coexistence_controller", + ":edu_coexistence_ui", + ] + + closure_flags = default_closure_args + [ + "js_module_root=../../chrome/browser/resources/gaia_auth_host/", + "js_module_root=./gen/chrome/browser/resources/gaia_auth_host/", + "js_module_root=../../chrome/browser/resources/chromeos/add_supervision/", + "js_module_root=./gen/chrome/browser/resources/chromeos/add_supervision/", + ] +} + +js_library("edu_coexistence_app") { + deps = [ + ":edu_coexistence_ui", + "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", + "//ui/webui/resources/cr_elements/cr_view_manager:cr_view_manager.m", + "//ui/webui/resources/js:assert.m", + "//ui/webui/resources/js:web_ui_listener_behavior.m", + ] +} + +js_library("edu_coexistence_ui") { + deps = [ + ":edu_coexistence_controller", + "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", + "//ui/webui/resources/js:web_ui_listener_behavior.m", + ] + externs_list = [ + "$externs_path/chrome_extensions.js", + "$externs_path/webview_tag.js", + ] +} + +js_library("edu_coexistence_controller") { + deps = [ + "//chrome/browser/resources/chromeos/add_supervision:post_message_api.m", + "//chrome/browser/resources/gaia_auth_host:authenticator.m", + ] + externs_list = [ + "$externs_path/chrome_extensions.js", + "$externs_path/webview_tag.js", + ] +} + +polymer_modulizer("edu_coexistence_app") { + js_file = "edu_coexistence_app.js" + html_file = "edu_coexistence_app.html" + html_type = "v3-ready" +} + +polymer_modulizer("edu_coexistence_ui") { + js_file = "edu_coexistence_ui.js" + html_file = "edu_coexistence_ui.html" + html_type = "v3-ready" +} + +group("polymer3_elements") { + public_deps = [ + ":edu_coexistence_app_module", + ":edu_coexistence_ui_module", + ] +}
diff --git a/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence.html b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence.html new file mode 100644 index 0000000..f8d6d03 --- /dev/null +++ b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence.html
@@ -0,0 +1,19 @@ +<!doctype html> +<html dir="$i18n{textdirection}" lang="$i18n{language}"> + <head> + <meta charset="utf-8"> + <style> + html, + body { + height: 100%; + margin: 0; + padding: 0; + } + </style> + <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css"> + <script type="module" src="edu_coexistence_app.js"></script> + </head> + <body> + <edu-coexistence-app></edu-coexistence-app> + </body> +</html>
diff --git a/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_app.html b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_app.html new file mode 100644 index 0000000..22b57e4 --- /dev/null +++ b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_app.html
@@ -0,0 +1,3 @@ + <cr-view-manager id="viewManager" hidden$="[[isErrorShown_]]"> + <edu-coexistence-ui id="edu-coexistence-ui" slot="view"></edu-coexistence-ui> + </cr-view-manager>
diff --git a/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_app.js b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_app.js new file mode 100644 index 0000000..46037ab --- /dev/null +++ b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_app.js
@@ -0,0 +1,52 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import './edu_coexistence_ui.js'; +import 'chrome://resources/cr_elements/cr_view_manager/cr_view_manager.m.js'; + +import {assert} from 'chrome://resources/js/assert.m.js'; +import {WebUIListenerBehavior} from 'chrome://resources/js/web_ui_listener_behavior.m.js'; +import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; + + +// import {EduAccountLoginBrowserProxyImpl} from './browser_proxy.js'; +// import {EduCoexistenceFlowResult, EduLoginErrorType, EduLoginParams, +// ParentAccount} from './edu_login_util.js'; +// + +Polymer({ + is: 'edu-coexistence-app', + + _template: html`{__html_template__}`, + + behaviors: [WebUIListenerBehavior], + + properties: { + /** + * Whether the error screen should be shown. + * @private {boolean} + */ + isErrorShown_: { + type: Boolean, + value: false, + }, + }, + + /** @override */ + created() {}, + + onEduAccountAdded_(data) { + // TODO(danan): show the final "Account added" screen". + }, + + /** @override */ + ready() { + this.addWebUIListener( + 'edu-account-added', data => this.onEduAccountAdded_(data)); + + /** @type {CrViewManagerElement} */ (this.$.viewManager) + .switchView('edu-coexistence-ui'); + }, + +});
diff --git a/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_controller.js b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_controller.js new file mode 100644 index 0000000..2e10c83 --- /dev/null +++ b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_controller.js
@@ -0,0 +1,186 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import {PostMessageAPIServer} from '../../chromeos/add_supervision/post_message_api.m.js'; +import {AuthCompletedCredentials, Authenticator, AuthParams} from '../../gaia_auth_host/authenticator.m.js'; + +/** + * The methods to expose to the hosted content via the PostMessageAPI. + */ +const METHOD_LIST = ['consentValid', 'consentLogged', 'requestClose', 'error']; + + +/** + * @typedef {{ + * hl: (string|undefined), + * url: (string|undefined), + * clientId: (string|undefined), + * sourceUi: (string|undefined), + * clientVersion: (string|undefined), + * eduCoexistenceAccessToken: (string|undefined), + * eduCoexistenceId: (string|undefined), + * platformVersion: (string|undefined), + * releaseChannel: (string|undefined), + * }} + */ +let EduCoexistenceParams; + + +/* Constructs the EDU Coexistence URL. + * @param {!EduCoexistenceParams} params Parameters for the flow. + * @return {URL} + */ +function constructEduCoexistenceUrl(params) { + const url = new URL(params.url); + url.searchParams.set('hl', params.hl); + url.searchParams.set('source_ui', params.sourceUi); + url.searchParams.set('client_version', params.clientVersion); + url.searchParams.set('edu_coexistence_id', params.eduCoexistenceId); + url.searchParams.set('platform_version', params.platformVersion); + url.searchParams.set('release_channel', params.releaseChannel); + return url; +} + +/** + * Class that orchestrates the EDU Coexistence signin flow. + */ +export class EduCoexistenceController extends PostMessageAPIServer { + /** + * @param {!Element} webview The <webview> element to listen to as a + * client. + * @param {!EduCoexistenceParams} params The params for the flow. + */ + constructor(webview, params) { + const flowURL = constructEduCoexistenceUrl(params); + const originURLPrefix = 'https://' + flowURL.host; + super(webview, METHOD_LIST, flowURL, originURLPrefix); + + this.flowURL_ = flowURL; + this.originURLPrefix_ = originURLPrefix; + this.webview_ = webview; + this.userInfo_ = null; + this.authCompletedReceived_ = false; + + // TODO(danan): Set auth tokens in appropriate headers. + + /** + * The auth extension host instance. + * @private {Authenticator} + */ + this.authExtHost_ = new Authenticator( + /** @type {!WebView} */ (this.webview_)); + + /** + * @type {boolean} + * @private + */ + this.isDomLoaded_ = document.readyState !== 'loading'; + if (this.isDomLoaded_) { + this.initializeAfterDomLoaded_(); + } else { + document.addEventListener( + 'DOMContentLoaded', this.initializeAfterDomLoaded_.bind(this)); + } + } + + /** @private */ + initializeAfterDomLoaded_() { + this.isDomLoaded_ = true; + // Register methods with PostMessageAPI. + this.registerMethod('consentValid', this.consentValid_.bind(this)); + this.registerMethod('consentLogged', this.consentLogged_.bind(this)); + this.registerMethod('requestClose', this.requestClose_.bind(this)); + this.registerMethod('reportError', this.reportError_.bind(this)); + + // Add listeners for Authenticator. + this.addAuthExtHostListeners_(); + } + + /** + * Loads the flow into the controller. + */ + load() { + this.webview_.src = this.flowURL_.toString(); + } + + /** + * Resets the internal state of the controller. + */ + reset() { + this.userInfo_ = null; + this.authCompletedReceived_ = false; + } + + /** @private */ + addAuthExtHostListeners_() { + this.authExtHost_.addEventListener('ready', () => this.onAuthReady_()); + this.authExtHost_.addEventListener( + 'authCompleted', + e => this.onAuthCompleted_( + /** @type {!CustomEvent<!AuthCompletedCredentials>} */ (e))); + } + + /** @private */ + onAuthReady_() { + console.error('Got onAuthReady_'); + // TODO(danan): do whatever is required after authenticator initialization. + } + + /** @private */ + onAuthCompleted_(e) { + this.authCompletedReceived_ = true; + console.error('Got onAuthCompleted_'); + this.userInfo_ = e.details; + } + + /** + * @private + * Informs API that the parent consent is now valid. + * @param {!Array} unused Placeholder unused empty parameter. + */ + consentValid_(unused) { + // TODO(danan): Set up object to wait for GAIA EDU Login page load, by + // observing for a page reload using this.webview_.request , and then + // this.authExtHost_.load(); Return promise acknowledging receipt. + console.error('Got consentValid_'); + return Promise.resolve(); + } + + /* + * @private + * @param {!Array} unused Placeholder unused empty parameter. + * @return {Promise <{accountCreated: boolean}>} Returns a promise + * with a boolean indicating that the local account was created. + */ + consentLogged_(unused) { + // TODO(danan): Send message to owner indicating that the flow successfully + // completed + console.error('Got consentLogged_'); + return Promise.resolve(); + } + + /** + * @private + * Attempts to close the widget hosting the flow. + * @return {Promise <{closed: boolean}>} If the widget is not closed + * this promise will resolve with boolean result indicating whether the + * dialog was closed. + */ + requestClose_() { + // TODO(danan): Attempt to close the widget hosting the flow. + console.error('Got requestClose_'); + return Promise.resolve(); + } + + /** + * @private + * Notifies the API that there was an unrecoverable error during the flow. + * @param {!Array} unused Placeholder unused empty parameter. + */ + reportError_(unused) { + // TODO(danan): Pass the error back up the stack. + console.error('Got reportError_'); + return Promise.resolve(); + } +}
diff --git a/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.html b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.html new file mode 100644 index 0000000..6002281 --- /dev/null +++ b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.html
@@ -0,0 +1,36 @@ +<style> + .container, + .signin-frame { + height: 100%; + margin: 0; + padding: 0; + width: 100%; + } + + .container { + align-items: center; + display: flex; + justify-content: center; + margin-top: calc(-1 * var(--dialog-top-border-size)); + } + + .signin-frame { + background-color: white; + overflow: hidden; + } + + paper-spinner-lite { + --spinner-size: 25px; + display: none; + height: var(--spinner-size); + width: var(--spinner-size); + } + + paper-spinner-lite[active] { + display: inline-block; + } +</style> + +<div class="container"> + <webview id="signinFrame" hidden$="[[loading_]]" class="signin-frame" allowscaling></webview> +</div>
diff --git a/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js new file mode 100644 index 0000000..51d6938 --- /dev/null +++ b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js
@@ -0,0 +1,62 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import {WebUIListenerBehavior} from 'chrome://resources/js/web_ui_listener_behavior.m.js'; +import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; + +import {EduCoexistenceController} from './edu_coexistence_controller.js'; + + +Polymer({ + is: 'edu-coexistence-ui', + + _template: html`{__html_template__}`, + + behaviors: [WebUIListenerBehavior], + + properties: { + /** + * Indicates whether the page is loading. + * @private {boolean} + */ + loading_: { + type: Boolean, + value: true, + }, + + /** + * The EDU Ceoxistence controller instance. + * @private {?EduCoexistenceController} + */ + controller_: Object, + }, + + /** Attempts to close the dialog */ + closeDialog_() { + // TODO(danan): call InlineLoginDialog's "Close" + }, + + loadEduCoexistenceController_(data) { + // TODO(danan): use data to parameterize the webview. + + const webview = + /** @type {!WebView} */ (this.$.signinFrame); + + // Set up the controller. + this.controller_ = new EduCoexistenceController(webview, data); + this.controller_.load(); + webview.addEventListener('contentload', () => { + this.loading_ = false; + }); + webview.addEventListener('loadstart', () => { + this.loading_ = true; + }); + }, + + /** @override */ + ready() { + this.addWebUIListener( + 'coexistence-data', data => this.loadEduCoexistenceController_(data)); + }, +});
diff --git a/chrome/browser/resources/chromeos/file_manager/OWNERS b/chrome/browser/resources/chromeos/file_manager/OWNERS deleted file mode 100644 index 7d236cb..0000000 --- a/chrome/browser/resources/chromeos/file_manager/OWNERS +++ /dev/null
@@ -1,2 +0,0 @@ -file://ui/file_manager/OWNERS -# COMPONENT: Platform>Apps>FileManager
diff --git a/chrome/browser/resources/downloads/BUILD.gn b/chrome/browser/resources/downloads/BUILD.gn index ea77a2d..2901ea0 100644 --- a/chrome/browser/resources/downloads/BUILD.gn +++ b/chrome/browser/resources/downloads/BUILD.gn
@@ -4,58 +4,62 @@ import("//chrome/common/features.gni") import("//third_party/closure_compiler/compile_js.gni") -import("//tools/grit/grit_rule.gni") +import("//tools/grit/preprocess_grit.gni") import("//tools/polymer/html_to_js.gni") import("../optimize_webui.gni") if (optimize_webui) { - downloads_pak_file = "downloads_resources.pak" - unpak_folder = "downloads_resources.unpak" + preprocess_folder = "preprocess" optimize_webui("build") { host = "downloads" - input = rebase_path("$target_gen_dir/$unpak_folder", root_build_dir) + input = rebase_path("$target_gen_dir/$preprocess_folder", root_build_dir) js_out_files = [ "downloads.rollup.js" ] js_module_in_files = [ "downloads.js" ] excludes = [ "chrome://resources/js/cr.m.js", "chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js", - "downloads.mojom-lite.js", ] deps = [ - ":unpak", + ":preprocess", + ":preprocess_generated", + ":preprocess_mojo", "../../../../ui/webui/resources:preprocess", ] } - unpak("unpak") { - pak_file = downloads_pak_file - out_folder = unpak_folder - excludes = [ "../../ui/webui/downloads/downloads.mojom-lite.js" ] - - deps = [ ":flattened_resources" ] + preprocess_grit("preprocess") { + in_folder = "./" + out_folder = "$target_gen_dir/$preprocess_folder" + in_files = [ + "browser_proxy.js", + "constants.js", + "downloads.js", + "externs.js", + "icon_loader.js", + "search_service.js", + ] } - grit("flattened_resources") { - source = "downloads_resources.grd" + preprocess_grit("preprocess_generated") { + deps = [ ":web_components" ] + in_folder = target_gen_dir + out_folder = "$target_gen_dir/$preprocess_folder" + in_files = [ + "icons.js", + "item.js", + "manager.js", + "toolbar.js", + ] + } - defines = chrome_grit_defines - outputs = [ - "grit/downloads_resources.h", - "grit/downloads_resources_map.cc", - "grit/downloads_resources_map.h", - downloads_pak_file, + copy("preprocess_mojo") { + deps = [ "//chrome/browser/ui/webui/downloads:mojo_bindings_js" ] + sources = [ + "$root_gen_dir/chrome/browser/ui/webui/downloads/downloads.mojom-lite.js", ] - deps = [ - ":web_components", - "//chrome/browser/ui/webui/downloads:mojo_bindings_js", - ] - grit_flags = [ - "-E", - "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir), - ] - output_dir = "$root_gen_dir/chrome/browser/resources/downloads" + outputs = [ "$target_gen_dir/$preprocess_folder/downloads.mojom-lite.js" ] } }
diff --git a/chrome/browser/resources/downloads/downloads_resources.grd b/chrome/browser/resources/downloads/downloads_resources.grd index 6ca8e07..0475a79 100644 --- a/chrome/browser/resources/downloads/downloads_resources.grd +++ b/chrome/browser/resources/downloads/downloads_resources.grd
@@ -14,64 +14,51 @@ <includes> <include name="IDR_DOWNLOADS_IMAGES_INCOGNITO_MARKER_SVG" file="images\incognito_marker.svg" - compress="false" type="BINDATA" /> <include name="IDR_DOWNLOADS_IMAGES_NO_DOWNLOADS_SVG" file="images\no_downloads.svg" - compress="false" type="BINDATA" /> <include name="IDR_DOWNLOADS_MOJO_LITE_JS" file="${root_gen_dir}\chrome\browser\ui\webui\downloads\downloads.mojom-lite.js" use_base_dir="false" - compress="false" type="chrome_html" /> <include name="IDR_DOWNLOADS_MANAGER_JS" file="${root_gen_dir}\chrome\browser\resources\downloads\manager.js" use_base_dir="false" preprocess="true" - compress="false" type="chrome_html" /> <include name="IDR_DOWNLOADS_ITEM_JS" file="${root_gen_dir}\chrome\browser\resources\downloads\item.js" use_base_dir="false" - compress="false" type="chrome_html" /> <include name="IDR_DOWNLOADS_TOOLBAR_JS" file="${root_gen_dir}\chrome\browser\resources\downloads\toolbar.js" use_base_dir="false" - compress="false" type="chrome_html" /> <include name="IDR_DOWNLOADS_ICONS_JS" file="${root_gen_dir}\chrome\browser\resources\downloads\icons.js" use_base_dir="false" - compress="false" type="chrome_html" /> </includes> <structures> <structure name="IDR_DOWNLOADS_DOWNLOADS_HTML" file="downloads.html" preprocess="true" - compress="false" type="chrome_html" /> <structure name="IDR_DOWNLOADS_BROWSER_PROXY_JS" file="browser_proxy.js" - compress="false" type="chrome_html" /> <structure name="IDR_DOWNLOADS_CONSTANTS_JS" file="constants.js" - compress="false" type="chrome_html" /> <structure name="IDR_DOWNLOADS_DOWNLOADS_JS" file="downloads.js" - compress="false" type="chrome_html" /> <structure name="IDR_DOWNLOADS_ICON_LOADER_JS" file="icon_loader.js" - compress="false" type="chrome_html" /> <structure name="IDR_DOWNLOADS_SEARCH_SERVICE_JS" file="search_service.js" - compress="false" type="chrome_html" /> </structures> </release>
diff --git a/chrome/browser/resources/downloads/downloads_resources_vulcanized.grd b/chrome/browser/resources/downloads/downloads_resources_vulcanized.grd index 51de4bc1..b19f0b98 100644 --- a/chrome/browser/resources/downloads/downloads_resources_vulcanized.grd +++ b/chrome/browser/resources/downloads/downloads_resources_vulcanized.grd
@@ -18,10 +18,6 @@ <include name="IDR_DOWNLOADS_IMAGES_NO_DOWNLOADS_SVG" file="images\no_downloads.svg" type="BINDATA" /> - <include name="IDR_DOWNLOADS_MOJO_LITE_JS" - file="${root_gen_dir}\chrome\browser\ui\webui\downloads\downloads.mojom-lite.js" - use_base_dir="false" - type="BINDATA" /> <include name="IDR_DOWNLOADS_DOWNLOADS_HTML" file="downloads.html" preprocess="true"
diff --git a/chrome/browser/resources/print_preview/data/destination.js b/chrome/browser/resources/print_preview/data/destination.js index 3eae2fd..b5cc95b 100644 --- a/chrome/browser/resources/print_preview/data/destination.js +++ b/chrome/browser/resources/print_preview/data/destination.js
@@ -9,8 +9,10 @@ import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; // <if expr="chromeos"> +import {NativeLayerImpl} from '../native_layer.js'; + import {ColorModeRestriction, DestinationPolicies, DuplexModeRestriction, PinModeRestriction} from './destination_policies.js'; -import {PrinterStatusReason} from '../data/printer_status_cros.js'; +import {getStatusReasonFromPrinterStatus, PrinterStatusReason} from './printer_status_cros.js'; // </if> /** @@ -424,9 +426,15 @@ /** * Stores the printer status reason for a local Chrome OS printer. - * @private {!PrinterStatusReason} + * @private {?PrinterStatusReason} */ - this.printerStatusReason_ = PrinterStatusReason.UNKNOWN_REASON; + this.printerStatusReason_ = null; + + /** + * Promise returns |key_| when the printer status request is completed. + * @private {?Promise<string>} + */ + this.printerStatusRequestedPromise_ = null; // </if> assert( @@ -616,7 +624,7 @@ } /** - * @return {!PrinterStatusReason} The printer status reason for a local + * @return {?PrinterStatusReason} The printer status reason for a local * Chrome OS printer. */ get printerStatusReason() { @@ -624,11 +632,35 @@ } /** - * @param {!PrinterStatusReason} printerStatusReason The printer status reason - * to be set. + * Requests a printer status for the destination. + * @return {!Promise<string>} Promise with destination key. */ - set printerStatusReason(printerStatusReason) { - this.printerStatusReason_ = printerStatusReason; + requestPrinterStatus() { + // Requesting printer status only allowed for local CrOS printers. + if (this.origin_ !== DestinationOrigin.CROS) { + return Promise.reject(); + } + + // Immediately resolve promise if |printerStatusReason_| is already + // available. + if (this.printerStatusReason_) { + return Promise.resolve(this.key); + } + + // Return existing promise if the printer status has already been requested. + if (this.printerStatusRequestedPromise_) { + return this.printerStatusRequestedPromise_; + } + + // Request printer status then set and return the promise. + this.printerStatusRequestedPromise_ = + NativeLayerImpl.getInstance().requestPrinterStatusUpdate(this.id_).then( + status => { + this.printerStatusReason_ = + getStatusReasonFromPrinterStatus(status); + return Promise.resolve(this.key); + }); + return this.printerStatusRequestedPromise_; } // </if>
diff --git a/chrome/browser/resources/print_preview/native_layer.js b/chrome/browser/resources/print_preview/native_layer.js index 8489cfd..945adca 100644 --- a/chrome/browser/resources/print_preview/native_layer.js +++ b/chrome/browser/resources/print_preview/native_layer.js
@@ -283,7 +283,7 @@ /** * Records the histogram to capture the printer status of the current * destination and whether the user chose to print or cancel. - * @param {!PrinterStatusReason} statusReason Current destination printer + * @param {?PrinterStatusReason} statusReason Current destination printer * status * @param {boolean} didUserAttemptPrint True if user printed, false if user * canceled. @@ -400,6 +400,10 @@ /** @override */ recordPrinterStatusHistogram(statusReason, didUserAttemptPrint) { + if (!statusReason) { + return; + } + let histogram; switch (statusReason) { case (PrinterStatusReason.NO_ERROR):
diff --git a/chrome/browser/resources/print_preview/print_preview.js b/chrome/browser/resources/print_preview/print_preview.js index 170eb5b..b2ffbbe 100644 --- a/chrome/browser/resources/print_preview/print_preview.js +++ b/chrome/browser/resources/print_preview/print_preview.js
@@ -30,7 +30,7 @@ export {BackgroundGraphicsModeRestriction, CapabilitiesResponse, LocalDestinationInfo, NativeInitialSettings, NativeLayer, NativeLayerImpl, PrinterSetupResponse, ProvisionalDestinationInfo} from './native_layer.js'; export {getSelectDropdownBackground} from './print_preview_utils.js'; export {DEFAULT_MAX_COPIES} from './ui/copies_settings.js'; -export {DestinationState} from './ui/destination_settings.js'; +export {DestinationState, NUM_PERSISTED_DESTINATIONS} from './ui/destination_settings.js'; export {PDFPlugin, PluginProxy, PluginProxyImpl} from './ui/plugin_proxy.js'; export {PreviewAreaState} from './ui/preview_area.js'; export {SelectBehavior} from './ui/select_behavior.js';
diff --git a/chrome/browser/resources/print_preview/ui/destination_list_item.html b/chrome/browser/resources/print_preview/ui/destination_list_item.html index 0b5bc752..ae09592 100644 --- a/chrome/browser/resources/print_preview/ui/destination_list_item.html +++ b/chrome/browser/resources/print_preview/ui/destination_list_item.html
@@ -77,7 +77,7 @@ </iron-icon> <if expr="chromeos"> <printer-status-icon-cros icon-location="[[iconLocation_.DROPDOWN]]" - hidden="[[!isDestinationCrosLocal_]]"> + printer-state="[[printerState_]]" hidden="[[!isDestinationCrosLocal_]]"> </printer-status-icon-cros> </if> <span class="name searchable">[[destination.displayName]]</span>
diff --git a/chrome/browser/resources/print_preview/ui/destination_list_item.js b/chrome/browser/resources/print_preview/ui/destination_list_item.js index c5486104..1e05d2e 100644 --- a/chrome/browser/resources/print_preview/ui/destination_list_item.js +++ b/chrome/browser/resources/print_preview/ui/destination_list_item.js
@@ -21,7 +21,7 @@ import {Destination, DestinationOrigin} from '../data/destination.js'; // <if expr="chromeos"> -import {IconLocation} from '../data/printer_status_cros.js'; +import {computePrinterState, IconLocation, PrinterState, PrinterStatusReason} from '../data/printer_status_cros.js'; // </if> import {updateHighlights} from './highlight_utils.js'; @@ -97,6 +97,12 @@ }, readOnly: true, }, + + /** @private */ + printerState_: { + type: Number, + value: PrinterState.UNKNOWN, + } // </if> }, @@ -105,6 +111,9 @@ 'destination.displayName, destination.isOfflineOrInvalid, ' + 'destination.isExtension)', 'updateHighlightsAndHint_(destination, searchQuery)', + // <if expr="chromeos"> + 'requestPrinterStatus_(destination.key)', + // </if> ], /** @private {!Array<!Node>} */ @@ -205,4 +214,32 @@ this.destination.origin === DestinationOrigin.CROS; // </if> }, + + // <if expr="chromeos"> + /** @private */ + requestPrinterStatus_() { + if (!this.printerStatusFlagEnabled_) { + return; + } + + // Requesting printer status only allowed for local CrOS printers. + if (this.destination.origin !== DestinationOrigin.CROS) { + return; + } + + this.destination.requestPrinterStatus().then( + destinationKey => this.onPrinterStatusReceived_(destinationKey)); + }, + + /** + * @param {string} destinationKey + * @private + */ + onPrinterStatusReceived_(destinationKey) { + if (this.destination.key === destinationKey) { + this.printerState_ = + computePrinterState(this.destination.printerStatusReason); + } + }, + // </if> });
diff --git a/chrome/browser/resources/print_preview/ui/destination_select_cros.js b/chrome/browser/resources/print_preview/ui/destination_select_cros.js index 0db11e3f..439dab4f 100644 --- a/chrome/browser/resources/print_preview/ui/destination_select_cros.js +++ b/chrome/browser/resources/print_preview/ui/destination_select_cros.js
@@ -23,7 +23,6 @@ import {CloudOrigins, Destination, DestinationOrigin, PDF_DESTINATION_KEY, RecentDestination, SAVE_TO_DRIVE_CROS_DESTINATION_KEY} from '../data/destination.js'; import {ERROR_STRING_KEY_MAP, getStatusReasonFromPrinterStatus, PrinterStatus, PrinterStatusReason, PrinterStatusSeverity} from '../data/printer_status_cros.js'; -import {NativeLayer, NativeLayerImpl} from '../native_layer.js'; import {getSelectDropdownBackground} from '../print_preview_utils.js'; import {SelectBehavior} from './select_behavior.js'; @@ -58,9 +57,6 @@ pdfPrinterDisabled: Boolean, - /** @type {!Map<string, string>} */ - statusRequestedMap: Object, - /** @type {!Array<!Destination>} */ recentDestinationList: { type: Array, @@ -239,56 +235,38 @@ } for (const destination of this.recentDestinationList) { - if (destination.origin !== DestinationOrigin.CROS || - this.statusRequestedMap.has(destination.id)) { + if (!destination || destination.origin !== DestinationOrigin.CROS) { continue; } - NativeLayerImpl.getInstance() - .requestPrinterStatusUpdate(destination.id) - .then(status => this.onPrinterStatusReceived_(status)); - this.statusRequestedMap.set(destination.id, destination.key); + destination.requestPrinterStatus().then( + destinationKey => this.onPrinterStatusReceived_(destinationKey)); } }, /** - * Check if the printer in |printerStatus| is currently in the dropdown. - * Update its status icon if it's present. - * @param {!PrinterStatus} printerStatus + * Check if the printer is currently in the dropdown then update its status + * icon if it's present. + * @param {string} destinationKey * @private */ - onPrinterStatusReceived_(printerStatus) { + onPrinterStatusReceived_(destinationKey) { assert(this.printerStatusFlagEnabled_); - if (!printerStatus.printerId) { - return; - } - - const destinationKey = this.statusRequestedMap.get(printerStatus.printerId); - if (!destinationKey) { - return; - } const indexFound = this.recentDestinationList.findIndex(destination => { - return destination.id === printerStatus.printerId && - destination.origin === DestinationOrigin.CROS; + return destination.key === destinationKey; }); if (indexFound === -1) { return; } - const statusReason = getStatusReasonFromPrinterStatus(printerStatus); - if (!statusReason) { - return; - } - - this.recentDestinationList[indexFound].printerStatusReason = statusReason; - // Set the new printer status reason then use notifyPath to trigger the - // dropdown printer status icons to recalculate their badge color. + // Use notifyPath to trigger the matching printer located in the dropdown to + // recalculate its status icon. this.notifyPath(`recentDestinationList.${indexFound}.printerStatusReason`); - // If |printerStatus| is for the currently selected printer, use notifyPath - // to trigger the destination printer status icon to recalculate its badge - // color and the destination error status text. + // If |destinationKey| matches the currently selected printer, use + // notifyPath to trigger the destination to recalculate its status icon and + // error status text. if (this.destination && this.destination.key === destinationKey) { this.notifyPath(`destination.printerStatusReason`); }
diff --git a/chrome/browser/resources/print_preview/ui/destination_settings.html b/chrome/browser/resources/print_preview/ui/destination_settings.html index 1530e435..d0ed0f5 100644 --- a/chrome/browser/resources/print_preview/ui/destination_settings.html +++ b/chrome/browser/resources/print_preview/ui/destination_settings.html
@@ -36,8 +36,7 @@ no-destinations="[[noDestinations_]]" pdf-printer-disabled="[[pdfPrinterDisabled_]]" recent-destination-list="[[displayedDestinations_]]" - on-selected-option-change="onSelectedDestinationOptionChange_" - status-requested-map="[[statusRequestedMap_]]"> + on-selected-option-change="onSelectedDestinationOptionChange_"> </print-preview-destination-select-cros> </if> <cr-lazy-render id="destinationDialog">
diff --git a/chrome/browser/resources/print_preview/ui/destination_settings.js b/chrome/browser/resources/print_preview/ui/destination_settings.js index eafe10654..2b93340 100644 --- a/chrome/browser/resources/print_preview/ui/destination_settings.js +++ b/chrome/browser/resources/print_preview/ui/destination_settings.js
@@ -45,7 +45,16 @@ }; /** @type {number} Number of recent destinations to save. */ -const NUM_PERSISTED_DESTINATIONS = 3; +export let NUM_PERSISTED_DESTINATIONS = 5; +// <if expr="chromeos"> +NUM_PERSISTED_DESTINATIONS = 10; +// </if> + +/** + * @type {number} Number of unpinned recent destinations to display. + * Pinned destinations include "Save as PDF" and "Save to Google Drive". + */ +const NUM_UNPINNED_DESTINATIONS = 3; Polymer({ is: 'print-preview-destination-settings', @@ -164,15 +173,6 @@ }, readOnly: true, }, - - /** - * The key for this map is a destination.id and the value is a - * destination.key. This map is needed to track which destinations have had - * statuses requested while also giving quick look up of destination id to - * the corresponding destination key. - * @private {!Map<string, string>} - */ - statusRequestedMap_: Object, // </if> }, @@ -212,10 +212,6 @@ this.destinationStore_, DestinationStore.EventType.DESTINATION_EULA_READY, this.updateDestinationEulaUrl_.bind(this)); - - if (this.printerStatusFlagEnabled_) { - this.statusRequestedMap_ = new Map(); - } // </if> }, @@ -240,14 +236,22 @@ this.destinationStore_.startLoadCookieDestination( Destination.GooglePromotedId.DOCS); this.updateDriveDestination_(); - const recentDestinations = this.getSettingValue('recentDestinations'); - recentDestinations.forEach(destination => { + const recentDestinations = /** @type {!Array<!RecentDestination>} */ ( + this.getSettingValue('recentDestinations')); + let numDestinationsChecked = 0; + for (const destination of recentDestinations) { + if (!this.destinationIsDriveOrPdf_(destination)) { + numDestinationsChecked++; + } if (destination.origin === DestinationOrigin.COOKIES && (destination.account === this.activeUser_ || destination.account === '')) { this.destinationStore_.startLoadCookieDestination(destination.id); } - }); + if (numDestinationsChecked === NUM_UNPINNED_DESTINATIONS) { + break; + } + } // Re-filter the dropdown destinations for the new account. if (!this.isDialogOpen_) { @@ -316,11 +320,40 @@ } this.pdfPrinterDisabled_ = pdfPrinterDisabled; this.$.userManager.initUserAccounts(userAccounts, syncAvailable); + let recentDestinations = + /** @type {!Array<!RecentDestination>} */ ( + this.getSettingValue('recentDestinations')); + recentDestinations = recentDestinations.slice( + 0, this.getRecentDestinationsDisplayCount_(recentDestinations)); this.destinationStore_.init( this.pdfPrinterDisabled_, defaultPrinter, - serializedDefaultDestinationRulesStr, - /** @type {!Array<RecentDestination>} */ - (this.getSettingValue('recentDestinations'))); + serializedDefaultDestinationRulesStr, recentDestinations); + }, + + /** + * @param {!Array<!RecentDestination>} recentDestinations recent destinations. + * @return {number} Number of recent destinations to display. + * @private + */ + getRecentDestinationsDisplayCount_(recentDestinations) { + let numDestinationsToDisplay = NUM_UNPINNED_DESTINATIONS; + for (let i = 0; i < recentDestinations.length; i++) { + // Once all NUM_UNPINNED_DESTINATIONS unpinned destinations have been + // found plus an extra unpinned destination, return the total number of + // destinations found excluding the last extra unpinned destination. + // + // The extra unpinned destination ensures that pinned destinations + // located directly after the last unpinned destination are included + // in the display count. + if (i > numDestinationsToDisplay) { + return numDestinationsToDisplay; + } + // If a destination is pinned, increment numDestinationsToDisplay. + if (this.destinationIsDriveOrPdf_(recentDestinations[i])) { + numDestinationsToDisplay++; + } + } + return Math.min(recentDestinations.length, numDestinationsToDisplay); }, /** @private */ @@ -414,16 +447,31 @@ } // Determine if this destination is already in the recent destinations, - // and where in the array it is located. + // where in the array it is located, and whether or not it is visible. const newDestination = makeRecentDestination(assert(this.destination)); const recentDestinations = /** @type {!Array<!RecentDestination>} */ ( this.getSettingValue('recentDestinations')); - let indexFound = recentDestinations.findIndex(function(recent) { - return ( - newDestination.id === recent.id && - newDestination.origin === recent.origin); - }); + let indexFound = -1; + // Note: isVisible should be only be used if the destination is unpinned. + // Although pinned destinations are always visible, isVisible may not + // necessarily be set to true in this case. + let isVisible = false; + let numUnpinnedChecked = 0; + for (let index = 0; index < recentDestinations.length; index++) { + const recent = recentDestinations[index]; + if (recent.id === newDestination.id && + recent.origin === newDestination.origin) { + indexFound = index; + // If we haven't seen the maximum unpinned destinations already, this + // destination is visible in the dropdown. + isVisible = numUnpinnedChecked < NUM_UNPINNED_DESTINATIONS; + break; + } + if (!this.destinationIsDriveOrPdf_(recent)) { + numUnpinnedChecked++; + } + } // No change if (indexFound === 0 && @@ -437,13 +485,18 @@ if (isNew && recentDestinations.length === NUM_PERSISTED_DESTINATIONS) { indexFound = NUM_PERSISTED_DESTINATIONS - 1; } + if (indexFound !== -1) { this.setSettingSplice('recentDestinations', indexFound, 1, null); } // Add the most recent destination this.setSettingSplice('recentDestinations', 0, 0, newDestination); - if (!this.destinationIsDriveOrPdf_(newDestination) && isNew) { + + // The dropdown needs to be updated if a new printer or one not currently + // visible in the dropdown has been added. + if (!this.destinationIsDriveOrPdf_(newDestination) && + (isNew || !isVisible)) { this.updateDropdownDestinations_(); } }, @@ -452,16 +505,23 @@ updateDropdownDestinations_() { const recentDestinations = /** @type {!Array<!RecentDestination>} */ ( this.getSettingValue('recentDestinations')); - const updatedDestinations = []; - recentDestinations.forEach(recent => { + let numDestinationsChecked = 0; + for (const recent of recentDestinations) { + if (this.destinationIsDriveOrPdf_(recent)) { + continue; + } + numDestinationsChecked++; const key = createRecentDestinationKey(recent); const destination = this.destinationStore_.getDestinationByKey(key); - if (destination && !this.destinationIsDriveOrPdf_(recent) && + if (destination && (!destination.account || destination.account === this.activeUser_)) { updatedDestinations.push(destination); } - }); + if (numDestinationsChecked === NUM_UNPINNED_DESTINATIONS) { + break; + } + } this.displayedDestinations_ = updatedDestinations; this.updateDriveDestination_();
diff --git a/chrome/browser/resources/settings/chromeos/OWNERS b/chrome/browser/resources/settings/chromeos/OWNERS index 5954f0d..2098f7c 100644 --- a/chrome/browser/resources/settings/chromeos/OWNERS +++ b/chrome/browser/resources/settings/chromeos/OWNERS
@@ -1,3 +1,4 @@ +hsuregan@chromium.org jamescook@chromium.org jimmyxgong@chromium.org khorimoto@chromium.org
diff --git a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_browser_proxy.js b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_browser_proxy.js index 0ed8154..9f1adae 100644 --- a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_browser_proxy.js +++ b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_browser_proxy.js
@@ -28,7 +28,8 @@ /** * @typedef {{label: string, * guid: string, - * shared: boolean}} + * shared: boolean, + * shareWillReassign: boolean}} */ let CrostiniSharedUsbDevice; @@ -74,10 +75,8 @@ */ getCrostiniSharedPathsDisplayText(paths) {} - /** - * @return {!Promise<!Array<CrostiniSharedUsbDevice>>} - */ - getCrostiniSharedUsbDevices() {} + /** Called when page is ready. */ + notifyCrostiniSharedUsbDevicesPageReady() {} /** * @param {string} guid Unique device identifier. @@ -268,8 +267,8 @@ } /** @override */ - getCrostiniSharedUsbDevices() { - return cr.sendWithPromise('getCrostiniSharedUsbDevices'); + notifyCrostiniSharedUsbDevicesPageReady() { + return cr.sendWithPromise('notifyCrostiniSharedUsbDevicesPageReady'); } /** @override */
diff --git a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_shared_paths.html b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_shared_paths.html index b6df872d..d6aa9c8 100644 --- a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_shared_paths.html +++ b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_shared_paths.html
@@ -59,11 +59,13 @@ </div> <div slot="button-container"> <cr-button id="cancel" class="cancel-button" - on-click="onRemoveFailedDismissTap_">$i18n{ok}</cr-button> + on-click="onRemoveFailedDismissTap_"> + $i18n{ok} </cr-button> <cr-button id="retry" class="action-button" on-click="onRemoveFailedRetryTap_"> - $i18n{crostiniSharedPathsRemoveFailureTryAgain} + $i18n{crostiniSharedPathsRemoveFailureTryAgain} + </cr-button> </div> </cr-dialog> </template>
diff --git a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_shared_usb_devices.html b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_shared_usb_devices.html index 9bf0f0a..b5b07ecd 100644 --- a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_shared_usb_devices.html +++ b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_shared_usb_devices.html
@@ -38,6 +38,27 @@ </div> </div> </template> + <template is="dom-if" if="[[reassignDevice_]]" restamp> + <cr-dialog id="reassignDialog" close-text="$i18n{close}" + show-on-attach> + <div slot="title"> + $i18n{crostiniSharedUsbDevicesInUse} + </div> + <div slot="body"> + [[getReassignDialogText_(reassignDevice_)]] + </div> + <div slot="button-container"> + <cr-button id="cancel" class="cancel-button" + on-click="onReassignCancelClick_"> + $i18n{cancel} + </cr-button> + <cr-button id="continue" class="action-button" + on-click="onReassignContinueClick_"> + $i18n{continue} + </cr-button> + </div> + </cr-dialog> + </template> </template> <script src="crostini_shared_usb_devices.js"></script> </dom-module>
diff --git a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_shared_usb_devices.js b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_shared_usb_devices.js index 386c2ce..7469cfa2 100644 --- a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_shared_usb_devices.js +++ b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_shared_usb_devices.js
@@ -11,7 +11,7 @@ Polymer({ is: 'settings-crostini-shared-usb-devices', - behaviors: [WebUIListenerBehavior], + behaviors: [I18nBehavior, WebUIListenerBehavior], properties: { /** @@ -19,16 +19,28 @@ * @private {Array<!CrostiniSharedUsbDevice>} */ sharedUsbDevices_: Array, + + /** + * The USB device which was toggled to be shared, but is already shared + * with another VM. When non-null the reassign dialog is shown. + * @private {?CrostiniSharedUsbDevice} + */ + reassignDevice_: { + type: Object, + value: null, + }, }, + /** @private {settings.CrostiniBrowserProxy} */ + browserProxy_: null, + /** @override */ - attached() { + ready() { + this.browserProxy_ = settings.CrostiniBrowserProxyImpl.getInstance(); this.addWebUIListener( 'crostini-shared-usb-devices-changed', this.onCrostiniSharedUsbDevicesChanged_.bind(this)); - settings.CrostiniBrowserProxyImpl.getInstance() - .getCrostiniSharedUsbDevices() - .then(this.onCrostiniSharedUsbDevicesChanged_.bind(this)); + this.browserProxy_.notifyCrostiniSharedUsbDevicesPageReady(); }, /** @@ -44,9 +56,36 @@ * @private */ onDeviceSharedChange_(event) { - const deviceInfo = event.model.item; - settings.CrostiniBrowserProxyImpl.getInstance().setCrostiniUsbDeviceShared( - deviceInfo.guid, event.target.checked); + const device = event.model.item; + // Show reassign dialog if device is already shared with another VM. + if (event.target.checked && device.shareWillReassign) { + event.target.checked = false; + this.reassignDevice_ = device; + return; + } + this.browserProxy_.setCrostiniUsbDeviceShared( + device.guid, event.target.checked); settings.recordSettingChange(); }, + + /** @private */ + onReassignCancelClick_() { + this.reassignDevice_ = null; + }, + + /** @private */ + onReassignContinueClick_() { + this.browserProxy_.setCrostiniUsbDeviceShared( + this.reassignDevice_.guid, true); + this.reassignDevice_ = null; + settings.recordSettingChange(); + }, + + /** + * @param {!CrostiniSharedUsbDevice} device USB device. + * @private + */ + getReassignDialogText_(device) { + return this.i18n('crostiniSharedUsbDevicesReassign', device.label); + }, });
diff --git a/chrome/browser/resources/settings/chromeos/device_page/device_page_browser_proxy.js b/chrome/browser/resources/settings/chromeos/device_page/device_page_browser_proxy.js index 2177a2df..f931330 100644 --- a/chrome/browser/resources/settings/chromeos/device_page/device_page_browser_proxy.js +++ b/chrome/browser/resources/settings/chromeos/device_page/device_page_browser_proxy.js
@@ -31,7 +31,8 @@ DISPLAY_OFF_SLEEP: 0, DISPLAY_OFF: 1, DISPLAY_ON: 2, - OTHER: 3, + SHUT_DOWN: 3, + STOP_SESSION: 4, }; /**
diff --git a/chrome/browser/resources/settings/chromeos/device_page/power.html b/chrome/browser/resources/settings/chromeos/device_page/power.html index a1cd90d..38caedb 100644 --- a/chrome/browser/resources/settings/chromeos/device_page/power.html +++ b/chrome/browser/resources/settings/chromeos/device_page/power.html
@@ -20,6 +20,9 @@ margin-inline-start: var(--cr-section-indent-padding); padding-inline-start: 0; } + cr-policy-indicator { + padding-inline-end: 8px; + } </style> <div id="powerSourceRow" class="cr-row first" hidden$="[[!batteryStatus_.present]]">
diff --git a/chrome/browser/resources/settings/chromeos/device_page/power.js b/chrome/browser/resources/settings/chromeos/device_page/power.js index ab3af86..438ba2e 100644 --- a/chrome/browser/resources/settings/chromeos/device_page/power.js +++ b/chrome/browser/resources/settings/chromeos/device_page/power.js
@@ -341,10 +341,16 @@ name: loadTimeData.getString('powerIdleDisplayOn'), selected: selected }; - case settings.IdleBehavior.OTHER: + case settings.IdleBehavior.SHUT_DOWN: return { value: idleBehavior, - name: loadTimeData.getString('powerIdleOther'), + name: loadTimeData.getString('powerIdleDisplayShutDown'), + selected: selected + }; + case settings.IdleBehavior.STOP_SESSION: + return { + value: idleBehavior, + name: loadTimeData.getString('powerIdleDisplayStopSession'), selected: selected }; default:
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/multidevice_page/BUILD.gn index ddd9ba9..2aacc9d 100644 --- a/chrome/browser/resources/settings/chromeos/multidevice_page/BUILD.gn +++ b/chrome/browser/resources/settings/chromeos/multidevice_page/BUILD.gn
@@ -65,6 +65,7 @@ ":multidevice_constants", ":multidevice_feature_behavior", ":multidevice_notification_access_setup_dialog", + "..:deep_linking_behavior", "..:metrics_recorder", "..:os_route", "../..:router", @@ -96,9 +97,11 @@ deps = [ ":multidevice_constants", ":multidevice_feature_behavior", + "..:deep_linking_behavior", "..:metrics_recorder", "..:os_route", "..:os_settings_routes", + "../..:router", "../../prefs:prefs_behavior", "//ui/webui/resources/cr_elements/cr_radio_button:cr_radio_button", "//ui/webui/resources/js:cr", @@ -111,8 +114,10 @@ ":multidevice_browser_proxy", ":multidevice_constants", ":multidevice_feature_behavior", + "..:deep_linking_behavior", "..:os_route", "..:os_settings_routes", + "../..:router", "//ui/webui/resources/cr_components/chromeos/network:network_listener_behavior", ] externs_list = [ "$externs_path/networking_private.js" ] @@ -206,6 +211,7 @@ ":multidevice_constants.m", ":multidevice_feature_behavior.m", ":multidevice_notification_access_setup_dialog.m", + "..:deep_linking_behavior.m", "..:metrics_recorder.m", "..:os_route.m", "../..:router.m", @@ -243,9 +249,11 @@ deps = [ ":multidevice_constants.m", ":multidevice_feature_behavior.m", + "..:deep_linking_behavior.m", "..:metrics_recorder.m", "..:os_route.m", "..:os_settings_routes.m", + "../..:router.m", "../../prefs:prefs_behavior.m", "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", "//ui/webui/resources/cr_elements/cr_radio_button:cr_radio_button.m", @@ -260,8 +268,10 @@ deps = [ ":multidevice_browser_proxy.m", ":multidevice_constants.m", + "..:deep_linking_behavior.m", "..:os_route.m", "..:os_settings_routes.m", + "../..:router.m", "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", "//ui/webui/resources/cr_components/chromeos/network:network_listener_behavior.m", ]
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_feature_toggle.js b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_feature_toggle.js index 15660149..da5c215 100644 --- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_feature_toggle.js +++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_feature_toggle.js
@@ -32,6 +32,11 @@ // this.feature is defined by the time of the observer's first call. observers: ['resetChecked_(feature, pageContentData)'], + /** @override */ + focus() { + this.$.toggle.focus(); + }, + /** * Because MultiDevice prefs are only meant to be controlled via the * MultiDevice mojo service, we need the cr-toggle to appear not to change
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.html b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.html index b6c5eff..8e37223 100644 --- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.html +++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.html
@@ -9,6 +9,7 @@ <link rel="import" href="chrome://resources/html/assert.html"> <link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html"> <link rel="import" href="../../i18n_setup.html"> +<link rel="import" href="../deep_linking_behavior.html"> <link rel="import" href="../os_route.html"> <link rel="import" href="../../router.html"> <link rel="import" href="../../controls/password_prompt_dialog.html"> @@ -76,7 +77,8 @@ <settings-multidevice-feature-toggle class="margin-matches-padding" feature="[[MultiDeviceFeature.BETTER_TOGETHER_SUITE]]" - page-content-data="[[pageContentData]]"> + page-content-data="[[pageContentData]]" + deep-link-focus-id$="[[Setting.kMultiDeviceOnOff]]"> </settings-multidevice-feature-toggle> </template> <template is="dom-if" @@ -89,7 +91,9 @@ restamp> <cr-button class="margin-matches-padding" on-click="handleButtonClick_" - aria-describedby="multideviceSubLabel"> + aria-describedby="multideviceSubLabel" + deep-link-focus-id$="[[Setting.kSetUpMultiDevice]] + [[Setting.kVerifyMultiDeviceSetup]]"> [[getButtonText_(pageContentData)]] </cr-button> </template> @@ -99,7 +103,8 @@ <settings-multidevice-feature-toggle class="margin-matches-padding" feature="[[MultiDeviceFeature.BETTER_TOGETHER_SUITE]]" - page-content-data="[[pageContentData]]"> + page-content-data="[[pageContentData]]" + deep-link-focus-id$="[[Setting.kMultiDeviceOnOff]]"> </settings-multidevice-feature-toggle> </template> </div> @@ -127,7 +132,8 @@ </div> <div class="separator"></div> <settings-toggle-button id="nearbySharingToggleButton" - pref="{{prefs.nearby_sharing.enabled}}"> + pref="{{prefs.nearby_sharing.enabled}}" + deep-link-focus-id$="[[Setting.kNearbyShareOnOff]]"> </settings-toggle-button> </div> </template>
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.js b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.js index 3b43aac7..f8b59e6 100644 --- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.js +++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.js
@@ -6,6 +6,7 @@ is: 'settings-multidevice-page', behaviors: [ + DeepLinkingBehavior, settings.RouteObserverBehavior, MultiDeviceFeatureBehavior, WebUIListenerBehavior, @@ -79,6 +80,20 @@ return loadTimeData.getBoolean('nearbySharingFeatureFlag'); } }, + + /** + * Used by DeepLinkingBehavior to focus this page's deep links. + * @type {!Set<!chromeos.settings.mojom.Setting>} + */ + supportedSettingIds: { + type: Object, + value: () => new Set([ + chromeos.settings.mojom.Setting.kSetUpMultiDevice, + chromeos.settings.mojom.Setting.kVerifyMultiDeviceSetup, + chromeos.settings.mojom.Setting.kMultiDeviceOnOff, + chromeos.settings.mojom.Setting.kNearbyShareOnOff, + ]), + }, }, listeners: { @@ -104,10 +119,19 @@ /** * Overridden from settings.RouteObserverBehavior. + * @param {!settings.Route} route + * @param {!settings.Route} oldRoute * @protected */ - currentRouteChanged() { + currentRouteChanged(route, oldRoute) { this.leaveNestedPageIfNoHostIsSet_(); + + // Does not apply to this page. + if (route !== settings.routes.MULTIDEVICE) { + return; + } + + this.attemptDeepLink(); }, /**
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_smartlock_subpage.html b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_smartlock_subpage.html index c85293d9..e1e0b2f1 100644 --- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_smartlock_subpage.html +++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_smartlock_subpage.html
@@ -8,8 +8,10 @@ <link rel="import" href="multidevice_feature_behavior.html"> <link rel="import" href="multidevice_feature_toggle.html"> <link rel="import" href="multidevice_radio_button.html"> +<link rel="import" href="../deep_linking_behavior.html"> <link rel="import" href="../os_route.html"> <link rel="import" href="../os_settings_routes.html"> +<link rel="import" href="../../router.html"> <link rel="import" href="../../i18n_setup.html"> <link rel="import" href="../../settings_shared_css.html"> <link rel="import" href="../metrics_recorder.html"> @@ -30,7 +32,8 @@ </div> <settings-multidevice-feature-toggle feature="[[MultiDeviceFeature.SMART_LOCK]]" - page-content-data="[[pageContentData]]"> + page-content-data="[[pageContentData]]" + deep-link-focus-id$="[[Setting.kSmartLockOnOff]]"> </settings-multidevice-feature-toggle> </div> <iron-collapse opened="[[smartLockEnabled_]]"> @@ -44,7 +47,8 @@ selected="[[smartLockSignInEnabled_]]" selectable-elements="multidevice-radio-button" disabled="[[!smartLockSignInAllowed_]]" - on-selected-changed="onSmartLockSignInEnabledChanged_"> + on-selected-changed="onSmartLockSignInEnabledChanged_" + deep-link-focus-id$="[[Setting.kSmartLockUnlockOrSignIn]]"> <multidevice-radio-button name="disabled" class="list-item underbar"
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_smartlock_subpage.js b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_smartlock_subpage.js index fda7fdc..6f5099c 100644 --- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_smartlock_subpage.js +++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_smartlock_subpage.js
@@ -8,7 +8,9 @@ is: 'settings-multidevice-smartlock-subpage', behaviors: [ + DeepLinkingBehavior, MultiDeviceFeatureBehavior, + settings.RouteObserverBehavior, WebUIListenerBehavior, ], @@ -60,6 +62,18 @@ authToken_: { type: Object, }, + + /** + * Used by DeepLinkingBehavior to focus this page's deep links. + * @type {!Set<!chromeos.settings.mojom.Setting>} + */ + supportedSettingIds: { + type: Object, + value: () => new Set([ + chromeos.settings.mojom.Setting.kSmartLockOnOff, + chromeos.settings.mojom.Setting.kSmartLockUnlockOrSignIn, + ]), + }, }, /** @private {?settings.MultiDeviceBrowserProxy} */ @@ -87,6 +101,19 @@ }, /** + * @param {!settings.Route} route + * @param {!settings.Route} oldRoute + */ + currentRouteChanged(route, oldRoute) { + // Does not apply to this page. + if (route !== settings.routes.SMART_LOCK) { + return; + } + + this.attemptDeepLink(); + }, + + /** * Returns true if Smart Lock is an enabled feature. * @return {boolean} * @private
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.html b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.html index 800fdf8..6970df9e 100644 --- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.html +++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.html
@@ -7,8 +7,10 @@ <link rel="import" href="chrome://resources/html/cr.html"> <link rel="import" href="chrome://resources/html/i18n_behavior.html"> <link rel="import" href="../../i18n_setup.html"> +<link rel="import" href="../deep_linking_behavior.html"> <link rel="import" href="../os_route.html"> <link rel="import" href="../os_settings_routes.html"> +<link rel="import" href="../../router.html"> <link rel="import" href="../../settings_shared_css.html"> <link rel="import" href="../../settings_vars_css.html"> <link rel="import" href="multidevice_constants.html"> @@ -54,7 +56,8 @@ restamp> <settings-multidevice-feature-toggle feature="[[MultiDeviceFeature.BETTER_TOGETHER_SUITE]]" - page-content-data="[[pageContentData]]"> + page-content-data="[[pageContentData]]" + deep-link-focus-id$="[[Setting.kMultiDeviceOnOff]]"> </settings-multidevice-feature-toggle> </template> </div> @@ -69,7 +72,8 @@ <settings-multidevice-feature-item id="smartLockItem" feature="[[MultiDeviceFeature.SMART_LOCK]]" page-content-data="[[pageContentData]]" - subpage-route="[[routes.SMART_LOCK]]"> + subpage-route="[[routes.SMART_LOCK]]" + deep-link-focus-id$="[[Setting.kSmartLockOnOff]]"> </settings-multidevice-feature-item> </template> <template is="dom-if" @@ -77,7 +81,8 @@ MultiDeviceFeature.INSTANT_TETHERING, pageContentData)]]" restamp> <settings-multidevice-tether-item id="instantTetheringItem" - page-content-data="[[pageContentData]]"> + page-content-data="[[pageContentData]]" + deep-link-focus-id$="[[Setting.kInstantTetheringOnOff]]"> </settings-multidevice-tether-item> </template> <template is="dom-if" @@ -86,13 +91,15 @@ restamp> <settings-multidevice-feature-item id="messagesItem" feature="[[MultiDeviceFeature.MESSAGES]]" - page-content-data="[[pageContentData]]"> + page-content-data="[[pageContentData]]" + deep-link-focus-id$="[[Setting.kMessagesOnOff]] + [[Setting.kMessagesSetUp]]"> <template is="dom-if" if="[[doesAndroidMessagesRequireSetUp_(pageContentData)]]" restamp> <cr-button disabled$="[[isAndroidMessagesSetupButtonDisabled_( pageContentData)]]" - on-click="handleAndroidMessagesButtonClick_" + on-click="handleAndroidMessagesButtonClick_" slot="feature-controller"> $i18n{multideviceSetupButton} </cr-button> @@ -105,7 +112,8 @@ restamp> <settings-multidevice-feature-item id="phoneHubItem" feature="[[MultiDeviceFeature.PHONE_HUB]]" - page-content-data="[[pageContentData]]"> + page-content-data="[[pageContentData]]" + deep-link-focus-id$="[[Setting.kPhoneHubOnOff]]"> </settings-multidevice-feature-item> </template> <template is="dom-if" @@ -114,7 +122,8 @@ restamp> <settings-multidevice-feature-item id="phoneHubNotificationsItem" feature="[[MultiDeviceFeature.PHONE_HUB_NOTIFICATIONS]]" - page-content-data="[[pageContentData]]"> + page-content-data="[[pageContentData]]" + deep-link-focus-id$="[[Setting.kPhoneHubNotificationsOnOff]]"> </settings-multidevice-feature-item> </template> <template is="dom-if" @@ -123,7 +132,8 @@ restamp> <settings-multidevice-feature-item id="phoneHubNotificationBadgeItem" feature="[[MultiDeviceFeature.PHONE_HUB_NOTIFICATION_BADGE]]" - page-content-data="[[pageContentData]]"> + page-content-data="[[pageContentData]]" + deep-link-focus-id$="[[Setting.kPhoneHubNotificationBadgeOnOff]]"> </settings-multidevice-feature-item> </template> <template is="dom-if" @@ -132,7 +142,8 @@ restamp> <settings-multidevice-feature-item id="phoneHubTaskContinuationItem" feature="[[MultiDeviceFeature.PHONE_HUB_TASK_CONTINUATION]]" - page-content-data="[[pageContentData]]"> + page-content-data="[[pageContentData]]" + deep-link-focus-id$="[[Setting.kPhoneHubTaskContinuationOnOff]]"> </settings-multidevice-feature-item> </template> <template is="dom-if" @@ -141,7 +152,8 @@ restamp> <settings-multidevice-feature-item id="wifiSyncItem" feature="[[MultiDeviceFeature.WIFI_SYNC]]" - page-content-data="[[pageContentData]]"> + page-content-data="[[pageContentData]]" + deep-link-focus-id$="[[Setting.kWifiSyncOnOff]]"> </settings-multidevice-feature-item> </template> </div> @@ -154,7 +166,8 @@ </div> </div> <cr-button on-click="handleForgetDeviceClick_" - aria-labelledby="forgetDeviceLabel"> + aria-labelledby="forgetDeviceLabel" + deep-link-focus-id$="[[Setting.kForgetPhone]]"> $i18n{multideviceForgetDeviceDisconnect} </cr-button> </div>
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.js b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.js index 864ce39..e5635b30 100644 --- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.js +++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_subpage.js
@@ -10,7 +10,11 @@ Polymer({ is: 'settings-multidevice-subpage', - behaviors: [MultiDeviceFeatureBehavior], + behaviors: [ + DeepLinkingBehavior, + MultiDeviceFeatureBehavior, + settings.RouteObserverBehavior, + ], properties: { /** @@ -21,6 +25,27 @@ type: Object, value: settings.routes, }, + + /** + * Used by DeepLinkingBehavior to focus this page's deep links. + * @type {!Set<!chromeos.settings.mojom.Setting>} + */ + supportedSettingIds: { + type: Object, + value: () => new Set([ + chromeos.settings.mojom.Setting.kInstantTetheringOnOff, + chromeos.settings.mojom.Setting.kMultiDeviceOnOff, + chromeos.settings.mojom.Setting.kSmartLockOnOff, + chromeos.settings.mojom.Setting.kMessagesSetUp, + chromeos.settings.mojom.Setting.kMessagesOnOff, + chromeos.settings.mojom.Setting.kForgetPhone, + chromeos.settings.mojom.Setting.kPhoneHubOnOff, + chromeos.settings.mojom.Setting.kPhoneHubNotificationsOnOff, + chromeos.settings.mojom.Setting.kPhoneHubNotificationBadgeOnOff, + chromeos.settings.mojom.Setting.kPhoneHubTaskContinuationOnOff, + chromeos.settings.mojom.Setting.kWifiSyncOnOff, + ]), + }, }, /** @private {?settings.MultiDeviceBrowserProxy} */ @@ -31,6 +56,19 @@ this.browserProxy_ = settings.MultiDeviceBrowserProxyImpl.getInstance(); }, + /** + * @param {!settings.Route} route + * @param {!settings.Route} oldRoute + */ + currentRouteChanged(route, oldRoute) { + // Does not apply to this page. + if (route !== settings.routes.MULTIDEVICE_FEATURES) { + return; + } + + this.attemptDeepLink(); + }, + /** @private */ handleVerifyButtonClick_(event) { this.browserProxy_.retryPendingHostSetup();
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_tether_item.js b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_tether_item.js index c9e9245..c8a80061 100644 --- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_tether_item.js +++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_tether_item.js
@@ -71,6 +71,11 @@ this.updateTetherNetworkState_(); }, + /** @override */ + focus() { + this.$$('settings-multidevice-feature-item').focus(); + }, + /** * CrosNetworkConfigObserver impl * Note that any change to leading to a new active network will also trigger
diff --git a/chrome/browser/resources/settings/chromeos/nearby_share_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/nearby_share_page/BUILD.gn index 46f70ad..2bb12e60 100644 --- a/chrome/browser/resources/settings/chromeos/nearby_share_page/BUILD.gn +++ b/chrome/browser/resources/settings/chromeos/nearby_share_page/BUILD.gn
@@ -104,6 +104,8 @@ ":nearby_share_device_name_dialog", ":nearby_share_receive_dialog", ":types", + "..:deep_linking_behavior", + "..:os_route", "../..:router", "../../prefs", "../../prefs:prefs_behavior", @@ -253,6 +255,8 @@ ":nearby_share_device_name_dialog.m", ":nearby_share_receive_dialog.m", ":types.m", + "..:deep_linking_behavior.m", + "..:os_route.m", "../..:router.m", "../../prefs:prefs.m", "../../prefs:prefs_behavior.m",
diff --git a/chrome/browser/resources/settings/chromeos/nearby_share_page/nearby_share_subpage.html b/chrome/browser/resources/settings/chromeos/nearby_share_page/nearby_share_subpage.html index 46cace3..dadce10 100644 --- a/chrome/browser/resources/settings/chromeos/nearby_share_page/nearby_share_subpage.html +++ b/chrome/browser/resources/settings/chromeos/nearby_share_page/nearby_share_subpage.html
@@ -8,6 +8,7 @@ <link rel="import" href="../../router.html"> <link rel="import" href="../../settings_shared_css.html"> <link rel="import" href="../../shared/nearby_share_settings_behavior.html"> +<link rel="import" href="../deep_linking_behavior.html"> <link rel="import" href="../os_route.html"> <link rel="import" href="nearby_account_manager_browser_proxy.html"> <link rel="import" href="nearby_share_contact_visibility_dialog.html"> @@ -27,7 +28,8 @@ '$i18nPolymer{deviceOn}', '$i18nPolymer{deviceOff}')]] </div> <settings-toggle-button id="featureToggleButton" aria-describedby="onOff" - pref="{{prefs.nearby_sharing.enabled}}"> + pref="{{prefs.nearby_sharing.enabled}}" + deep-link-focus-id$="[[Setting.kNearbyShareOnOff]]"> </settings-toggle-button> </div> <div class="settings-box two-line">
diff --git a/chrome/browser/resources/settings/chromeos/nearby_share_page/nearby_share_subpage.js b/chrome/browser/resources/settings/chromeos/nearby_share_page/nearby_share_subpage.js index 5cf243c0..37e5dc7 100644 --- a/chrome/browser/resources/settings/chromeos/nearby_share_page/nearby_share_subpage.js +++ b/chrome/browser/resources/settings/chromeos/nearby_share_page/nearby_share_subpage.js
@@ -11,6 +11,7 @@ is: 'settings-nearby-share-subpage', behaviors: [ + DeepLinkingBehavior, I18nBehavior, PrefsBehavior, settings.RouteObserverBehavior, @@ -52,6 +53,17 @@ type: Boolean, value: false, }, + + /** + * Used by DeepLinkingBehavior to focus this page's deep links. + * @type {!Set<!chromeos.settings.mojom.Setting>} + */ + supportedSettingIds: { + type: Object, + value: () => new Set([ + chromeos.settings.mojom.Setting.kNearbyShareOnOff, + ]), + }, }, attached() { @@ -245,26 +257,31 @@ * @param {!settings.Route} route */ currentRouteChanged(route) { - const router = settings.Router.getInstance(); - if (router.getCurrentRoute().path.endsWith('nearbyshare')) { - const queryParams = router.getQueryParameters(); - - if (queryParams.has('deviceName')) { - this.showDeviceNameDialog_ = true; - } - - if (queryParams.has('receive')) { - this.showReceiveDialog_ = true; - Polymer.dom.flush(); - this.$$('#receiveDialog').showHighVisibilityPage(); - } - - if (queryParams.has('confirm')) { - this.showReceiveDialog_ = true; - Polymer.dom.flush(); - this.$$('#receiveDialog').showConfirmPage(); - } + // Does not apply to this page. + if (route !== settings.routes.NEARBY_SHARE) { + return; } + + const router = settings.Router.getInstance(); + const queryParams = router.getQueryParameters(); + + if (queryParams.has('deviceName')) { + this.showDeviceNameDialog_ = true; + } + + if (queryParams.has('receive')) { + this.showReceiveDialog_ = true; + Polymer.dom.flush(); + this.$$('#receiveDialog').showHighVisibilityPage(); + } + + if (queryParams.has('confirm')) { + this.showReceiveDialog_ = true; + Polymer.dom.flush(); + this.$$('#receiveDialog').showConfirmPage(); + } + + this.attemptDeepLink(); }, /**
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_detail_view.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_detail_view.js index fa141e0b..b0461d09 100644 --- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_detail_view.js +++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_detail_view.js
@@ -109,7 +109,9 @@ * @private */ appsChanged_() { - if (this.selectedAppNotFound_()) { + if (settings.Router.getInstance().getCurrentRoute() === + settings.routes.APP_MANAGEMENT_DETAIL && + this.selectedAppNotFound_()) { this.async(() => { app_management.util.openMainPage(); });
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/BUILD.gn index 497d250..0127113b 100644 --- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/BUILD.gn +++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/BUILD.gn
@@ -33,6 +33,8 @@ deps = [ ":plugin_vm_browser_proxy", "../../..:metrics_recorder", + "//ui/webui/resources/js:i18n_behavior", + "//ui/webui/resources/js:web_ui_listener_behavior", ] }
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_browser_proxy.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_browser_proxy.js index b706c29..a2962a27 100644 --- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_browser_proxy.js +++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_browser_proxy.js
@@ -21,7 +21,8 @@ /** * @typedef {{guid: string, * label: string, - * shared: boolean}} + * shared: boolean, + * shareWillReassign: boolean}} */ let PluginVmSharedUsbDevice; @@ -41,6 +42,7 @@ /** * @param {string} vmName VM to stop sharing path with. * @param {string} path Path to stop sharing. + * @return {!Promise<boolean>} Result of unsharing. */ removePluginVmSharedPath(vmName, path) {} @@ -82,7 +84,7 @@ /** @override */ removePluginVmSharedPath(vmName, path) { - chrome.send('removePluginVmSharedPath', [vmName, path]); + return cr.sendWithPromise('removePluginVmSharedPath', vmName, path); } /** @override */
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_shared_paths.html b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_shared_paths.html index 085efa80..b902dd3 100644 --- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_shared_paths.html +++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_shared_paths.html
@@ -42,6 +42,27 @@ </template> </iron-list> </div> + <template is="dom-if" if="[[sharedPathWhichFailedRemoval_]]" restamp> + <cr-dialog id="removeSharedPathFailedDialog" close-text="$i18n{close}" + show-on-attach> + <div slot="title"> + $i18n{pluginVmSharedPathsRemoveFailureDialogTitle} + </div> + <div slot="body"> + $i18n{pluginVmSharedPathsRemoveFailureDialogMessage} + </div> + <div slot="button-container"> + <cr-button id="cancel" class="cancel-button" + on-click="onRemoveFailedDismissClick_"> + $i18n{ok} + </cr-button> + <cr-button id="retry" class="action-button" + on-click="onRemoveFailedRetryClick_"> + $i18n{pluginVmSharedPathsRemoveFailureTryAgain} + </cr-button> + </div> + </cr-dialog> + </template> </template> <script src="plugin_vm_shared_paths.js"></script> </dom-module>
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_shared_paths.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_shared_paths.js index 2334360..3ec7f78e 100644 --- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_shared_paths.js +++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_shared_paths.js
@@ -31,6 +31,17 @@ * @private {Array<!{path: string, pathDisplayText: string}>} */ sharedPaths_: Array, + + /** + * The shared path which failed to be removed in the most recent attempt + * to remove a path. Null indicates that removal succeeded. When non-null, + * the failure dialog is shown. + * @private {?string} + */ + sharedPathWhichFailedRemoval_: { + type: String, + value: null, + }, }, observers: [ @@ -58,13 +69,37 @@ }, /** + * @param {string} path + * @private + */ + removeSharedPath_(path) { + this.sharedPathWhichFailedRemoval_ = null; + settings.PluginVmBrowserProxyImpl.getInstance() + .removePluginVmSharedPath(PLUGIN_VM, path) + .then(success => { + if (!success) { + this.sharedPathWhichFailedRemoval_ = path; + } + }); + settings.recordSettingChange(); + }, + + /** * @param {!Event} event * @private */ onRemoveSharedPathClick_(event) { - settings.PluginVmBrowserProxyImpl.getInstance().removePluginVmSharedPath( - PLUGIN_VM, event.model.item.path); - settings.recordSettingChange(); + this.removeSharedPath_(event.model.item.path); + }, + + /** @private */ + onRemoveFailedRetryClick_() { + this.removeSharedPath_(assert(this.sharedPathWhichFailedRemoval_)); + }, + + /** @private */ + onRemoveFailedDismissClick_() { + this.sharedPathWhichFailedRemoval_ = null; }, }); })();
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_shared_usb_devices.html b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_shared_usb_devices.html index 3df2a8b..4f10208 100644 --- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_shared_usb_devices.html +++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_shared_usb_devices.html
@@ -40,6 +40,27 @@ </template> </div> </template> + <template is="dom-if" if="[[reassignDevice_]]" restamp> + <cr-dialog id="reassignDialog" close-text="$i18n{close}" + show-on-attach> + <div slot="title"> + $i18n{pluginVmSharedUsbDevicesInUse} + </div> + <div slot="body"> + [[getReassignDialogText_(reassignDevice_)]] + </div> + <div slot="button-container"> + <cr-button id="cancel" class="cancel-button" + on-click="onReassignCancelClick_"> + $i18n{cancel} + </cr-button> + <cr-button id="continue" class="action-button" + on-click="onReassignContinueClick_"> + $i18n{continue} + </cr-button> + </div> + </cr-dialog> + </template> </template> <script src="plugin_vm_shared_usb_devices.js"></script> </dom-module>
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_shared_usb_devices.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_shared_usb_devices.js index d5dcd01..fe650bc1 100644 --- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_shared_usb_devices.js +++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/plugin_vm_page/plugin_vm_shared_usb_devices.js
@@ -11,7 +11,7 @@ Polymer({ is: 'settings-plugin-vm-shared-usb-devices', - behaviors: [WebUIListenerBehavior], + behaviors: [I18nBehavior, WebUIListenerBehavior], properties: { /** @@ -19,6 +19,16 @@ * @private {Array<!PluginVmSharedUsbDevice>} */ sharedUsbDevices_: Array, + + /** + * The USB device which was toggled to be shared, but is already shared + * with another VM. When non-null the reassign dialog is shown. + * @private {?PluginVmSharedUsbDevice} + */ + reassignDevice_: { + type: Object, + value: null, + }, }, /** @private {settings.PluginVmBrowserProxy} */ @@ -46,9 +56,36 @@ * @private */ onDeviceSharedChange_(event) { - const deviceInfo = event.model.item; + const device = event.model.item; + // Show reassign dialog if device is already shared with another VM. + if (event.target.checked && device.shareWillReassign) { + event.target.checked = false; + this.reassignDevice_ = device; + return; + } this.browserProxy_.setPluginVmUsbDeviceShared( - deviceInfo.guid, event.target.checked); + device.guid, event.target.checked); settings.recordSettingChange(); }, + + /** @private */ + onReassignCancelClick_() { + this.reassignDevice_ = null; + }, + + /** @private */ + onReassignContinueClick_() { + this.browserProxy_.setPluginVmUsbDeviceShared( + this.reassignDevice_.guid, true); + this.reassignDevice_ = null; + settings.recordSettingChange(); + }, + + /** + * @param {!PluginVmSharedUsbDevice} device USB device. + * @private + */ + getReassignDialogText_(device) { + return this.i18n('pluginVmSharedUsbDevicesReassign', device.label); + }, });
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/OWNERS b/chrome/browser/resources/settings/chromeos/os_languages_page/OWNERS new file mode 100644 index 0000000..ba1f84af --- /dev/null +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/OWNERS
@@ -0,0 +1 @@ +myy@chromium.org \ No newline at end of file
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/add_input_methods_dialog.html b/chrome/browser/resources/settings/chromeos/os_languages_page/add_input_methods_dialog.html index dd90e77..1edee72 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/add_input_methods_dialog.html +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/add_input_methods_dialog.html
@@ -4,6 +4,7 @@ <link rel="import" href="chrome://resources/cr_elements/cr_scrollable_behavior.html"> <link rel="import" href="chrome://resources/cr_elements/cr_search_field/cr_search_field.html"> <link rel="import" href="chrome://resources/cr_elements/cr_dialog/cr_dialog.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/iron-flex-layout/iron-flex-layout-classes.html"> <link rel="import" href="chrome://resources/polymer/v1_0/iron-list/iron-list.html"> <link rel="import" href="../metrics_recorder.html"> <link rel="import" href="../../languages_page/languages.html"> @@ -11,7 +12,7 @@ <dom-module id="os-settings-add-input-methods-dialog"> <template> - <style include="settings-shared"> + <style include="settings-shared iron-flex"> #dialogBody { display: flex; flex-direction: column; @@ -72,11 +73,23 @@ items="[[getAllInputMethods_(languages.inputMethods, lowercaseQueryString_)]]"> <template> - <cr-checkbox class="list-item no-outline" - checked="[[willAdd_(item.id, inputMethodsToAdd_.size)]]" - tab-index="[[tabIndex]]" on-change="onCheckboxChange_"> - [[item.displayName]] - </cr-checkbox> + <div class="list-item no-outline"> + <cr-checkbox class="flex" + checked="[[willAdd_(item.id, inputMethodsToAdd_.size)]]" + disabled="[[item.isProhibitedByPolicy]]" + tab-index="[[tabIndex]]" on-change="onCheckboxChange_"> + [[item.displayName]] + </cr-checkbox> + <template is="dom-if" if="[[item.isProhibitedByPolicy]]"> + <iron-icon id="policy[[index]]" class="policy" + icon="cr20:domain" describedby="tooltip[[index]]"> + </iron-icon> + <paper-tooltip for="policy[[index]]" id="tooltip[[index]]" + role="tooltip" tabindex="-1" position="left"> + $i18n{inputMethodNotAllowed} + </paper-tooltip> + </template> + </div> </template> </iron-list> </div>
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/add_input_methods_dialog.js b/chrome/browser/resources/settings/chromeos/os_languages_page/add_input_methods_dialog.js index 227f5558..b63ee7e 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/add_input_methods_dialog.js +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/add_input_methods_dialog.js
@@ -78,7 +78,10 @@ ]; return this.languageHelper.getInputMethodsForLanguages(languageCodes) .filter(inputMethod => { - return !this.languageHelper.isInputMethodEnabled(inputMethod.id); + if (this.languageHelper.isInputMethodEnabled(inputMethod.id)) { + return false; + } + return !inputMethod.isProhibitedByPolicy; }); },
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html b/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html index f3a1f5c2..bd7932e6d 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html
@@ -61,6 +61,10 @@ width: var(--cr-icon-size); } + iron-icon[icon='cr20:domain'] { + margin-inline-end: 10px; + } + /* The default implementation of the actionable list item makes the * entire list item row a button such that clicking anywhere will * activate the action of the list item. The input method list behaves @@ -112,6 +116,13 @@ <div class="hr bottom-margin"> <h2>$i18n{inputMethodListTitle}</h2> + <template is="dom-if" if="[[inputMethodsLimitedByPolicy_( + prefs.settings.language.allowed_input_methods.*)]]"> + <div class="cr-row continuation" id="inputMethodsManagedbyPolicy"> + <iron-icon icon="cr20:domain"></iron-icon> + <div class="secondary">$i18n{inputMethodsManagedbyPolicy}</div> + </div> + </template> <div class="list-frame vertical-list" id="inputMethodsList"> <template is="dom-repeat" items="[[languages.inputMethods.enabled]]">
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.js b/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.js index 4f66ca5..2c68b06 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.js +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.js
@@ -127,6 +127,16 @@ }, /** + * @return {boolean} + * @private + */ + inputMethodsLimitedByPolicy_() { + const allowedInputMethodsPref = + this.getPref('settings.language.allowed_input_methods'); + return !!allowedInputMethodsPref && allowedInputMethodsPref.value.length; + }, + + /** * Handler for click events on an input method on the main page, * which sets it as the current input method. * @param {!{model: !{item: !chrome.languageSettingsPrivate.InputMethod},
diff --git a/chrome/browser/share/android/java/res/values/dimens.xml b/chrome/browser/share/android/java/res/values/dimens.xml index df9cc10a..3424071 100644 --- a/chrome/browser/share/android/java/res/values/dimens.xml +++ b/chrome/browser/share/android/java/res/values/dimens.xml
@@ -11,8 +11,11 @@ <dimen name="overlay_text_top_padding">14dp</dimen> <!-- URL formatting in QR code bitmap --> - <dimen name="url_box_top_padding">70dp</dimen> + <dimen name="url_box_top_padding">70dp</dimen> <dimen name="url_box_bottom_padding">25dp</dimen> <dimen name="side_padding">50dp</dimen> <dimen name="qrcode_size">200dp</dimen> + + <!-- Toast for Link to Text --> + <dimen name="y_offset">250dp</dimen> </resources>
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java index acfae3d5..779fa5c 100644 --- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java +++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java
@@ -16,12 +16,12 @@ import org.chromium.chrome.browser.tab.TabHidingType; import org.chromium.components.browser_ui.share.ShareParams; import org.chromium.services.service_manager.InterfaceProvider; +import org.chromium.ui.widget.Toast; /** * Handles the Link To Text action in the Sharing Hub. */ public class LinkToTextCoordinator extends EmptyTabObserver { - private static final String SHARE_TEXT_TEMPLATE = "\"%s\"\n%s"; private static final String TEXT_FRAGMENT_PREFIX = ":~:text="; private static final String INVALID_SELECTOR = ""; private final Context mContext; @@ -50,23 +50,22 @@ public void onSelectorReady(String selector) { if (mCancelRequest) return; - String successMessage = - mContext.getResources().getString(R.string.link_to_text_success_message); - String failureMessage = - mContext.getResources().getString(R.string.link_to_text_failure_message); - - // TODO(1102382): Consider creating SharedParams on sharesheet side. In that case there will - // be no need to keep the WindowAndroid in this class. - String textToShare = getTextToShare(selector); ShareParams params = - new ShareParams.Builder(mTab.getWindowAndroid(), /*title=*/"", /*url=*/"") - .setText(textToShare) + new ShareParams + .Builder(mTab.getWindowAndroid(), /*title=*/"", getUrlToShare(selector)) + .setText(mSelectedText) .build(); + mChromeOptionShareCallback.showThirdPartyShareSheet( + params, new ChromeShareExtras.Builder().build(), System.currentTimeMillis()); - ChromeShareExtras chromeShareExtras = new ChromeShareExtras.Builder().build(); - mChromeOptionShareCallback.showThirdPartyShareSheetWithMessage( - !selector.isEmpty() ? successMessage : failureMessage, params, chromeShareExtras, - System.currentTimeMillis()); + if (selector.isEmpty()) { + String toastMessage = + mContext.getResources().getString(R.string.link_to_text_failure_toast_message); + Toast toast = Toast.makeText(mContext, toastMessage, Toast.LENGTH_SHORT); + toast.setGravity(toast.getGravity(), toast.getXOffset(), + mContext.getResources().getDimensionPixelSize(R.dimen.y_offset)); + toast.show(); + } } public void requestSelector() { @@ -86,14 +85,14 @@ }); } - public String getTextToShare(String selector) { + public String getUrlToShare(String selector) { String url = mVisibleUrl; if (!selector.isEmpty()) { // Set the fragment which will also remove existing fragment, including text fragments. Uri uri = Uri.parse(url); url = uri.buildUpon().encodedFragment(TEXT_FRAGMENT_PREFIX + selector).toString(); } - return String.format(SHARE_TEXT_TEMPLATE, mSelectedText, url); + return url; } // Discard results if tab is not on foreground anymore.
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ChromeOptionShareCallback.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ChromeOptionShareCallback.java index d1484c3..1e15cae6 100644 --- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ChromeOptionShareCallback.java +++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ChromeOptionShareCallback.java
@@ -21,13 +21,4 @@ */ public void showThirdPartyShareSheet( ShareParams params, ChromeShareExtras chromeShareExtras, long shareStartTime); - - /** - * Used to show only the bottom bar of the share sheet with a message. - * @param message The message to show along with bottom bar. - * @param params The share parameters. - * @param chromeShareExtras The extras not contained in {@code params}. - */ - public void showThirdPartyShareSheetWithMessage(String message, ShareParams params, - ChromeShareExtras chromeShareExtras, long shareStartTime); } \ No newline at end of file
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetBottomSheetContent.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetBottomSheetContent.java index f342c446..99738856 100644 --- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetBottomSheetContent.java +++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetBottomSheetContent.java
@@ -88,23 +88,10 @@ * @param firstPartyModels The PropertyModels used to build the top row. * @param thirdPartyModels The PropertyModels used to build the bottom row. * @param contentTypes The {@link Set} of {@link ContentType}s to build the preview. - * @param message The message to show on top of the share sheet. */ void createRecyclerViews(List<PropertyModel> firstPartyModels, - List<PropertyModel> thirdPartyModels, Set<Integer> contentTypes, String message) { - // A success/failure message can be shown for features such as LinkToText. - if (!message.isEmpty()) { - TextView messageView = this.getContentView().findViewById(R.id.message); - messageView.setVisibility(View.VISIBLE); - messageView.setText(message); - View preview = this.getContentView().findViewById(R.id.preview_header); - preview.setVisibility(View.GONE); - } - // If there's no message to be shown, show a preview of the content to be shared. - else { - createPreview(contentTypes); - } - + List<PropertyModel> thirdPartyModels, Set<Integer> contentTypes) { + createPreview(contentTypes); createFirstPartyRecyclerViews(firstPartyModels); RecyclerView thirdParty = this.getContentView().findViewById(R.id.share_sheet_other_apps);
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetCoordinator.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetCoordinator.java index 6689f69..88c9b38 100644 --- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetCoordinator.java +++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetCoordinator.java
@@ -45,7 +45,6 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptionShareCallback, ConfigurationChangedObserver, View.OnLayoutChangeListener { - private static final String NO_SHARE_SHEET_MESSAGE = ""; private final BottomSheetController mBottomSheetController; private final Supplier<Tab> mTabProvider; private final ShareSheetPropertyModelBuilder mPropertyModelBuilder; @@ -119,12 +118,6 @@ // TODO(crbug/1022172): Should be package-protected once modularization is complete. public void showShareSheet( ShareParams params, ChromeShareExtras chromeShareExtras, long shareStartTime) { - showShareSheetWithMessage( - NO_SHARE_SHEET_MESSAGE, params, chromeShareExtras, shareStartTime); - } - - void showShareSheetWithMessage(String message, ShareParams params, - ChromeShareExtras chromeShareExtras, long shareStartTime) { mActivity = params.getWindow().getActivity().get(); if (mActivity == null) return; @@ -144,7 +137,7 @@ List<PropertyModel> thirdPartyApps = createThirdPartyPropertyModels( mActivity, params, mContentTypes, chromeShareExtras.saveLastUsed()); - mBottomSheet.createRecyclerViews(firstPartyApps, thirdPartyApps, mContentTypes, message); + mBottomSheet.createRecyclerViews(firstPartyApps, thirdPartyApps, mContentTypes); boolean shown = mBottomSheetController.requestShowContent(mBottomSheet, true); if (shown) { @@ -162,14 +155,6 @@ showShareSheet(params, chromeShareExtras, shareStartTime); } - // Used by first party features to share with only non-chrome apps along with a message. - @Override - public void showThirdPartyShareSheetWithMessage(String message, ShareParams params, - ChromeShareExtras chromeShareExtras, long shareStartTime) { - mExcludeFirstParty = true; - showShareSheetWithMessage(message, params, chromeShareExtras, shareStartTime); - } - List<PropertyModel> createFirstPartyPropertyModels(Activity activity, ShareParams shareParams, ChromeShareExtras chromeShareExtras, Set<Integer> contentTypes) { if (mExcludeFirstParty) {
diff --git a/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinatorTest.java b/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinatorTest.java index 2a5b5d1..50eccbc 100644 --- a/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinatorTest.java +++ b/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinatorTest.java
@@ -6,9 +6,9 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import android.app.Activity; import android.content.Context; @@ -17,6 +17,7 @@ import org.junit.Assert; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -25,8 +26,11 @@ import org.robolectric.Robolectric; import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.base.test.util.JniMocker; import org.chromium.chrome.browser.share.share_sheet.ChromeOptionShareCallback; import org.chromium.chrome.browser.tab.Tab; +import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils; +import org.chromium.components.dom_distiller.core.DomDistillerUrlUtilsJni; import org.chromium.content_public.browser.WebContents; import org.chromium.ui.base.WindowAndroid; @@ -47,6 +51,9 @@ public void requestSelector() {} }; + @Rule + public JniMocker jniMocker = new JniMocker(); + @Mock private ChromeOptionShareCallback mShareCallback; @Mock @@ -55,6 +62,8 @@ private Tab mTab; @Mock private WebContents mWebContents; + @Mock + private DomDistillerUrlUtils.Natives mDistillerUrlUtilsJniMock; private Activity mAcivity; private static final String SELECTED_TEXT = "selection"; @@ -64,41 +73,43 @@ public void setUpTest() { mAcivity = Robolectric.setupActivity(Activity.class); MockitoAnnotations.initMocks(this); - doNothing() - .when(mShareCallback) - .showThirdPartyShareSheetWithMessage(anyString(), any(), any(), anyLong()); + jniMocker.mock(DomDistillerUrlUtilsJni.TEST_HOOKS, mDistillerUrlUtilsJniMock); + when(DomDistillerUrlUtils.getOriginalUrlFromDistillerUrl(VISIBLE_URL)) + .thenReturn(VISIBLE_URL); + + doNothing().when(mShareCallback).showThirdPartyShareSheet(any(), any(), anyLong()); Mockito.when(mTab.getWebContents()).thenReturn(mWebContents); Mockito.when(mTab.getWindowAndroid()).thenReturn(mWindow); } @Test @SmallTest - public void getTextToShareTest() { + public void getUrlToShareTest() { String selector = "selector"; - String expectedTextToShare = "\"selection\"\nwww.example.com#:~:text=selector"; + String expectedUrlToShare = "www.example.com#:~:text=selector"; MockLinkToTextCoordinator coordinator = new MockLinkToTextCoordinator( mAcivity, mTab, mShareCallback, VISIBLE_URL, SELECTED_TEXT); - Assert.assertEquals(expectedTextToShare, coordinator.getTextToShare(selector)); + Assert.assertEquals(expectedUrlToShare, coordinator.getUrlToShare(selector)); } @Test @SmallTest - public void getTextToShareTest_URLWithFragment() { + public void getUrlToShareTest_URLWithFragment() { String selector = "selector"; - String expectedTextToShare = "\"selection\"\nwww.example.com#:~:text=selector"; + String expectedUrlToShare = "www.example.com#:~:text=selector"; MockLinkToTextCoordinator coordinator = new MockLinkToTextCoordinator( mAcivity, mTab, mShareCallback, VISIBLE_URL + "#elementid", SELECTED_TEXT); - Assert.assertEquals(expectedTextToShare, coordinator.getTextToShare(selector)); + Assert.assertEquals(expectedUrlToShare, coordinator.getUrlToShare(selector)); } @Test @SmallTest - public void getTextToShareTest_EmptySelector() { + public void getUrlToShareTest_EmptySelector() { String selector = ""; - String expectedTextToShare = "\"selection\"\nwww.example.com"; + String expectedUrlToShare = "www.example.com"; MockLinkToTextCoordinator coordinator = new MockLinkToTextCoordinator( mAcivity, mTab, mShareCallback, VISIBLE_URL, SELECTED_TEXT); - Assert.assertEquals(expectedTextToShare, coordinator.getTextToShare(selector)); + Assert.assertEquals(expectedUrlToShare, coordinator.getUrlToShare(selector)); } @Test @@ -108,8 +119,7 @@ mAcivity, mTab, mShareCallback, VISIBLE_URL, SELECTED_TEXT); // OnSelectorReady should call back the share sheet. coordinator.onSelectorReady("selector"); - verify(mShareCallback) - .showThirdPartyShareSheetWithMessage(anyString(), any(), any(), anyLong()); + verify(mShareCallback).showThirdPartyShareSheet(any(), any(), anyLong()); } @Test @@ -119,7 +129,6 @@ mAcivity, mTab, mShareCallback, VISIBLE_URL, SELECTED_TEXT); // OnSelectorReady should call back the share sheet. coordinator.onSelectorReady(""); - verify(mShareCallback) - .showThirdPartyShareSheetWithMessage(anyString(), any(), any(), anyLong()); + verify(mShareCallback).showThirdPartyShareSheet(any(), any(), anyLong()); } }
diff --git a/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetBottomSheetContentTest.java b/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetBottomSheetContentTest.java index f8e5bcc..0642e27 100644 --- a/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetBottomSheetContentTest.java +++ b/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetBottomSheetContentTest.java
@@ -6,7 +6,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; import android.app.Activity; import android.graphics.Bitmap; @@ -78,23 +77,6 @@ @Test @MediumTest - public void createRecyclerViews_hasMessage_doesNotShowPreview() { - mShareSheetBottomSheetContent.createRecyclerViews( - ImmutableList.of(), ImmutableList.of(), ImmutableSet.of(), "message"); - - TextView titleView = - mShareSheetBottomSheetContent.getContentView().findViewById(R.id.title_preview); - TextView subtitleView = - mShareSheetBottomSheetContent.getContentView().findViewById(R.id.subtitle_preview); - ImageView imageView = - mShareSheetBottomSheetContent.getContentView().findViewById(R.id.image_preview); - assertEquals("", titleView.getText()); - assertEquals("", subtitleView.getText()); - assertNull(imageView.getDrawable()); - } - - @Test - @MediumTest public void createRecyclerViews_imageOnlyShare() { ShareSheetBottomSheetContent shareSheetBottomSheetContent = new ShareSheetBottomSheetContent(mActivity, new MockLargeIconBridge(), null, @@ -103,7 +85,7 @@ .build()); shareSheetBottomSheetContent.createRecyclerViews( - ImmutableList.of(), ImmutableList.of(), ImmutableSet.of(ContentType.IMAGE), ""); + ImmutableList.of(), ImmutableList.of(), ImmutableSet.of(ContentType.IMAGE)); TextView titleView = shareSheetBottomSheetContent.getContentView().findViewById(R.id.title_preview); @@ -118,7 +100,7 @@ @MediumTest public void createRecyclerViews_highlightedTextShare() { mShareSheetBottomSheetContent.createRecyclerViews(ImmutableList.of(), ImmutableList.of(), - ImmutableSet.of(ContentType.HIGHLIGHTED_TEXT), ""); + ImmutableSet.of(ContentType.HIGHLIGHTED_TEXT)); TextView titleView = mShareSheetBottomSheetContent.getContentView().findViewById(R.id.title_preview); @@ -132,7 +114,7 @@ @MediumTest public void createRecyclerViews_textOnlyShare() { mShareSheetBottomSheetContent.createRecyclerViews( - ImmutableList.of(), ImmutableList.of(), ImmutableSet.of(ContentType.TEXT), ""); + ImmutableList.of(), ImmutableList.of(), ImmutableSet.of(ContentType.TEXT)); TextView titleView = mShareSheetBottomSheetContent.getContentView().findViewById(R.id.title_preview); @@ -146,7 +128,7 @@ @MediumTest public void createRecyclerViews_producesCorrectFavicon() { mShareSheetBottomSheetContent.createRecyclerViews(ImmutableList.of(), ImmutableList.of(), - ImmutableSet.of(ContentType.LINK_PAGE_VISIBLE), ""); + ImmutableSet.of(ContentType.LINK_PAGE_VISIBLE)); ImageView imageView = mShareSheetBottomSheetContent.getContentView().findViewById(R.id.image_preview); @@ -163,7 +145,7 @@ @MediumTest public void createRecyclerViews_tabShare() { mShareSheetBottomSheetContent.createRecyclerViews(ImmutableList.of(), ImmutableList.of(), - ImmutableSet.of(ContentType.LINK_PAGE_VISIBLE), ""); + ImmutableSet.of(ContentType.LINK_PAGE_VISIBLE)); TextView titleView = mShareSheetBottomSheetContent.getContentView().findViewById(R.id.title_preview); @@ -180,7 +162,7 @@ @MediumTest public void createRecyclerViews_webShareTextAndUrl() { mShareSheetBottomSheetContent.createRecyclerViews(ImmutableList.of(), ImmutableList.of(), - ImmutableSet.of(ContentType.LINK_PAGE_NOT_VISIBLE, ContentType.TEXT), ""); + ImmutableSet.of(ContentType.LINK_PAGE_NOT_VISIBLE, ContentType.TEXT)); TextView titleView = mShareSheetBottomSheetContent.getContentView().findViewById(R.id.title_preview); @@ -201,7 +183,7 @@ new ShareParams.Builder(/*window=*/null, /*title=*/"", sUrl).build()); shareSheetBottomSheetContent.createRecyclerViews(ImmutableList.of(), ImmutableList.of(), - ImmutableSet.of(ContentType.LINK_PAGE_NOT_VISIBLE), ""); + ImmutableSet.of(ContentType.LINK_PAGE_NOT_VISIBLE)); TextView titleView = shareSheetBottomSheetContent.getContentView().findViewById(R.id.title_preview);
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 2ac6e0a8..caf0452 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -1024,6 +1024,10 @@ "in_product_help/global_media_controls_in_product_help_factory.cc", "in_product_help/global_media_controls_in_product_help_factory.h", "in_product_help/in_product_help.h", + "in_product_help/live_caption_in_product_help.cc", + "in_product_help/live_caption_in_product_help.h", + "in_product_help/live_caption_in_product_help_factory.cc", + "in_product_help/live_caption_in_product_help_factory.h", "in_product_help/reopen_tab_in_product_help.cc", "in_product_help/reopen_tab_in_product_help.h", "in_product_help/reopen_tab_in_product_help_factory.cc", @@ -2186,10 +2190,6 @@ "webui/chromeos/drive_internals_ui.h", "webui/chromeos/edu_account_login_handler_chromeos.cc", "webui/chromeos/edu_account_login_handler_chromeos.h", - "webui/chromeos/file_manager/file_manager_page_handler.cc", - "webui/chromeos/file_manager/file_manager_page_handler.h", - "webui/chromeos/file_manager/file_manager_ui.cc", - "webui/chromeos/file_manager/file_manager_ui.h", "webui/chromeos/first_run/first_run_actor.cc", "webui/chromeos/first_run/first_run_actor.h", "webui/chromeos/first_run/first_run_handler.cc", @@ -2558,7 +2558,6 @@ "//chrome/browser/ui/webui/chromeos/add_supervision:mojo_bindings", "//chrome/browser/ui/webui/chromeos/crostini_installer:mojo_bindings", "//chrome/browser/ui/webui/chromeos/crostini_upgrader:mojo_bindings", - "//chrome/browser/ui/webui/chromeos/file_manager:mojo_bindings", "//chrome/browser/ui/webui/chromeos/machine_learning:mojo_bindings", "//chrome/browser/ui/webui/settings/chromeos/constants:mojom", "//chrome/browser/ui/webui/settings/chromeos/search:mojo_bindings", @@ -2664,6 +2663,7 @@ ] } deps += [ + "//chromeos/components/file_manager:file_manager_ui", "//chromeos/components/sample_system_web_app_ui", "//chromeos/components/telemetry_extension_ui", ] @@ -3574,6 +3574,8 @@ "views/in_product_help/feature_promo_registry.h", "views/in_product_help/global_media_controls_promo_controller.cc", "views/in_product_help/global_media_controls_promo_controller.h", + "views/in_product_help/live_caption_promo_controller.cc", + "views/in_product_help/live_caption_promo_controller.h", "views/in_product_help/reopen_tab_promo_controller.cc", "views/in_product_help/reopen_tab_promo_controller.h", "views/infobars/alternate_nav_infobar_view.cc",
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd index f3b682c..c99b0d37 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -2845,6 +2845,41 @@ URL required </message> + <!-- Read later strings --> + <message name="IDS_READING_LIST_TITLE" desc="The title for the reading list page in main bookmark UI."> + Reading list + </message> + <message name="IDS_READING_LIST_READ" desc="The header for the read section in the reading list UI."> + Read + </message> + <message name="IDS_READING_LIST_UNREAD" desc="The header for the unread section in the reading list UI."> + Unread + </message> + <message name="IDS_READING_LIST_READY_FOR_OFFLINE" desc="The string to inform the user that the reading list has offline page ready."> + Ready for offline + </message> + <message name="IDS_READING_LIST_MARK_AS_READ" desc="The text for the action to mark the reading list as read."> + Mark as read + </message> + <message name="IDS_READING_LIST_SHARE" desc="The text for the action to share the reading list item."> + Share + </message> + <message name="IDS_READING_LIST_REMINDER_NOTIFICATION_TITLE" desc="The title of the reminder notification for reading list."> + Catch up on your reading list + </message> + <message name="IDS_READING_LIST_REMINDER_NOTIFICATION_SUBTITLE" desc="The subtitle of the reminder notification for reading list."> + You have <ph name="READING_LIST_COUNT">%1$d<ex>5</ex></ph> pages + </message> + <message name="IDS_READING_LIST_UNREAD_PAGE_COUNT" desc="Inform the user about the number of unread reading list items."> + <ph name="READING_LIST_COUNT">%1$d<ex>5</ex></ph> unread pages + </message> + <message name="IDS_READING_LIST_INTRO_TEXT" desc="The text on the reading list in product help bubble and other UIs to introduce the feature to the user."> + Save this page for later and get a reminder + </message> + <message name="IDS_READING_LIST_FIND_IN_BOOKMARKS" desc="The text to inform the user to find the reading list in bookmarks UI."> + Find your reading list in Bookmarks + </message> + <!-- Offline pages --> <message name="IDS_OFFLINE_PAGES_VIEWING_OFFLINE_PAGE" desc="Text explaining that the user is viewing an offline copy of a web page."> Viewing an offline copy of this page @@ -3877,12 +3912,8 @@ chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS">%1$s<ex>1582667748515</ex></ph> </message> - <message name="IDS_LINK_TO_TEXT_SUCCESS_MESSAGE" desc="Message displayed when link to highlighted text is successfully created."> - Share link to the highlighted text in an app - </message> - - <message name="IDS_LINK_TO_TEXT_FAILURE_MESSAGE" desc="Message displayed when link to highlighted text was not possible to create."> - Can't create link to text. Share link to page in an app. + <message name="IDS_LINK_TO_TEXT_FAILURE_TOAST_MESSAGE" desc="Toast displayed when link to highlighted text was not possible to create."> + Can't create link to text. Share link to page. </message> <!-- Share Screenshot strings -->
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_LINK_TO_TEXT_FAILURE_MESSAGE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_LINK_TO_TEXT_FAILURE_MESSAGE.png.sha1 deleted file mode 100644 index 873110b..0000000 --- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_LINK_TO_TEXT_FAILURE_MESSAGE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5b5898eac5894e51f40d95d28448f26400679b22 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_LINK_TO_TEXT_FAILURE_TOAST_MESSAGE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_LINK_TO_TEXT_FAILURE_TOAST_MESSAGE.png.sha1 new file mode 100644 index 0000000..6c0619d --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_LINK_TO_TEXT_FAILURE_TOAST_MESSAGE.png.sha1
@@ -0,0 +1 @@ +5db699ae1a146e357a36e06457f4f12c9a44ae81 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_LINK_TO_TEXT_SUCCESS_MESSAGE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_LINK_TO_TEXT_SUCCESS_MESSAGE.png.sha1 deleted file mode 100644 index 5a51f405..0000000 --- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_LINK_TO_TEXT_SUCCESS_MESSAGE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -bb68f939991be1e938f3fceafc7f127aadf23e07 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_FIND_IN_BOOKMARKS.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_FIND_IN_BOOKMARKS.png.sha1 new file mode 100644 index 0000000..8576ee09 --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_FIND_IN_BOOKMARKS.png.sha1
@@ -0,0 +1 @@ +e449c2cacd75fe5d920596193bacb5b0da867232 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_INTRO_TEXT.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_INTRO_TEXT.png.sha1 new file mode 100644 index 0000000..95ded4a --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_INTRO_TEXT.png.sha1
@@ -0,0 +1 @@ +517bc987481acd8b0fa902ae2b2f9dc84a6a0ab3 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_MARK_AS_READ.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_MARK_AS_READ.png.sha1 new file mode 100644 index 0000000..b87cca28 --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_MARK_AS_READ.png.sha1
@@ -0,0 +1 @@ +e313fd10964678a47a14106ab54d7ae957ff4aab \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_READ.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_READ.png.sha1 new file mode 100644 index 0000000..a833b15 --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_READ.png.sha1
@@ -0,0 +1 @@ +e900f21404580852a17a4a152c7f5c8198799897 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_READY_FOR_OFFLINE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_READY_FOR_OFFLINE.png.sha1 new file mode 100644 index 0000000..a833b15 --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_READY_FOR_OFFLINE.png.sha1
@@ -0,0 +1 @@ +e900f21404580852a17a4a152c7f5c8198799897 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_REMINDER_NOTIFICATION_SUBTITLE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_REMINDER_NOTIFICATION_SUBTITLE.png.sha1 new file mode 100644 index 0000000..cee60dd --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_REMINDER_NOTIFICATION_SUBTITLE.png.sha1
@@ -0,0 +1 @@ +cabd9ef05333b9cd70a80d6bcd098f2e3cfc79a3 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_REMINDER_NOTIFICATION_TITLE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_REMINDER_NOTIFICATION_TITLE.png.sha1 new file mode 100644 index 0000000..cee60dd --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_REMINDER_NOTIFICATION_TITLE.png.sha1
@@ -0,0 +1 @@ +cabd9ef05333b9cd70a80d6bcd098f2e3cfc79a3 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_SHARE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_SHARE.png.sha1 new file mode 100644 index 0000000..b87cca28 --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_SHARE.png.sha1
@@ -0,0 +1 @@ +e313fd10964678a47a14106ab54d7ae957ff4aab \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_TITLE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_TITLE.png.sha1 new file mode 100644 index 0000000..17f68d12 --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_TITLE.png.sha1
@@ -0,0 +1 @@ +b302afc7ddb74ee440231bab12d569521da35c25 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_UNREAD.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_UNREAD.png.sha1 new file mode 100644 index 0000000..a833b15 --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_UNREAD.png.sha1
@@ -0,0 +1 @@ +e900f21404580852a17a4a152c7f5c8198799897 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_UNREAD_PAGE_COUNT.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_UNREAD_PAGE_COUNT.png.sha1 new file mode 100644 index 0000000..17f68d12 --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_UNREAD_PAGE_COUNT.png.sha1
@@ -0,0 +1 @@ +b302afc7ddb74ee440231bab12d569521da35c25 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb index 2460d9e..0b292ca 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Herlaai die huidige bladsy en ignoreer kasinhoud</translation> <translation id="124678866338384709">Maak huidige oortjie toe</translation> <translation id="1258753120186372309">Google-logoskets: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Leeslys</translation> <translation id="1266864766717917324">Kon nie <ph name="CONTENT_TYPE" /> deel nie.</translation> <translation id="1283039547216852943">Tik om uit te vou</translation> <translation id="1291207594882862231">Maak geskiedenis, webkoekies, werfdata, kas skoon …</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Tik op 'n woord om oombliklik te soek of sien verwante handelinge</translation> <translation id="2760989362628427051">Skakel Donkertema aan wanneer jou toestel se Donkertema of Batterybespaarder aan is</translation> <translation id="2762000892062317888">sopas</translation> -<translation id="2771869497727323769">Kan nie skakel na teks skep nie. Deel skakel na bladsy in 'n program.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> sekondes oor</translation> <translation id="2779651927720337254">misluk</translation> <translation id="2781151931089541271">1 sekonde oor</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Lys toestelle om 'n oortjie mee te deel, is toegemaak.</translation> <translation id="4149994727733219643">Vereenvoudigde aansig vir webbladsye</translation> <translation id="4170011742729630528">Die diens is nie beskikbaar nie, probeer later weer.</translation> +<translation id="4175173967354304331">Jy sal by hierdie werf, Chrome en Google-programme aangemeld word</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> gebruik</translation> <translation id="4181841719683918333">Tale</translation> <translation id="4183868528246477015">Soek met Google Lens <ph name="BEGIN_NEW" />Nuut<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 aflaai is voltooi.}other{# aflaaie is voltooi.}}</translation> <translation id="4766678251456904326">Voeg rekening by toestel</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 aflaai is geskeduleer.}other{# aflaaie is geskeduleer.}}</translation> -<translation id="478981486571169252">Jy sal jou <ph name="SITE_NAME" />-aanmeldingstatus, -blaaierdata en -werfdata in Chrome sien.</translation> <translation id="4802417911091824046">Wagfrase-enkripsie sluit nie betaalmetodes en adresse van Google Pay af in nie. <ph name="BEGIN_LINK" />Stel sinkronisering terug<ph name="END_LINK" /> om hierdie instelling te verander</translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Privaatheid</translation> <translation id="5087580092889165836">Voeg kaart by</translation> <translation id="509429900233858213">'n Fout het voorgekom.</translation> -<translation id="5100748015044654621">Deel skakel na die gemerkte teks in 'n program</translation> <translation id="510275257476243843">1 uur oor</translation> <translation id="5123685120097942451">Incognito-oortjie</translation> <translation id="5127805178023152808">Sinkronisering is af</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Vra waar om lêers te stoor</translation> <translation id="6342069812937806050">Nou net</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" /> \u2026 en nog <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" /> \u2026 en nog <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation> +<translation id="6345878117466430440">Merk as gelees</translation> <translation id="6364438453358674297">Verwyder voorstel uit geskiedenis?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> is slim en vinnig genoeg sodat jy veilig aanlyn kan werk, skep en verken.</translation> <translation id="6378173571450987352">Besonderhede: Gerangskik volgens hoeveelheid data gebruik</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Jy kan die data in Chrome-instellings uitvee</translation> <translation id="8662811608048051533">Meld jou by die meeste werwe af.</translation> <translation id="8664979001105139458">Lêernaam bestaan reeds</translation> +<translation id="8683039184091909753">prent</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Seinsterktevlak: # stafie}other{Seinsterktevlak: # stafies}}</translation> <translation id="869891660844655955">Vervaldatum</translation> <translation id="8712637175834984815">Het dit</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb index 6fe177c..cc0f922 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">የተሸጎጠ ይዘትን ችላ በማለት የአሁኑን ገጽ ዳግም ጫን</translation> <translation id="124678866338384709">የአሁኑን ትር ዝጋ</translation> <translation id="1258753120186372309">Google doodle፦ <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">የንባብ ዝርዝር</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> ን ማጋራት አልተቻለም።</translation> <translation id="1283039547216852943">ለመዘርጋት መታ ያድርጉ</translation> <translation id="1291207594882862231">ታሪክ፣ ኩኪዎች፣ የጣቢያ ውሂብ፣ መሸጎጫን አጽዳ…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">አንድ ቃል በቅጽበት ለመፈለግ ወይም ተዛማጅ እርምጃዎችን ለመመልከት አንድ ቃል መታ ያድርጉ</translation> <translation id="2760989362628427051">የእርስዎ መሣሪያ በጨለማ ገጽታ ላይ ሲሆን ወይም ባትሪ ቆጣሪ ሲበራ የጨለማ ገጽታን አብራ</translation> <translation id="2762000892062317888">አሁን</translation> -<translation id="2771869497727323769">ወደ ጽሑፍ አገናኝ መፍጠር አልተቻለም። በአንድ መተግበሪያ ውስጥ ለገጽ አገናኝ ያጋሩ።</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> ሰከንዶች ይቀራሉ</translation> <translation id="2779651927720337254">አልተሳካም</translation> <translation id="2781151931089541271">1 ሰከንድ ይቀራል</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">የተዘጋ ትር የሚጋሩ የመሣሪያዎች ዝርዝር።</translation> <translation id="4149994727733219643">ለድረ-ገጾች የተቃለለ እይታ</translation> <translation id="4170011742729630528">አገልግሎቱ አይገኝም፤ ቆይተው እንደገና ይሞክሩ።</translation> +<translation id="4175173967354304331">በመለያ ወደዚህ ጣቢያ፣ Chrome እና የGoogle መተግበሪያዎች እንዲገቡ ይደረጋሉ</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> ጥቅም ላይ ውሏል</translation> <translation id="4181841719683918333">ቋንቋዎች</translation> <translation id="4183868528246477015">በGoogle Lens ይፈልጉ <ph name="BEGIN_NEW" />አዲስ<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 ውርድ ተጠናቅቋል}one{# ውርዶች ተጠናቅቀዋል}other{# ውርዶች ተጠናቅቀዋል}}</translation> <translation id="4766678251456904326">መለያ ወደ መሣሪያው ያክሉ</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 ውርድ መርሐግብት ተይዞለታል።}one{# ውርዶች መርሐግብር ተይዞላቸዋል።}other{# ውርዶች መርሐግብር ተይዞላቸዋል።}}</translation> -<translation id="478981486571169252">የእርስዎን <ph name="SITE_NAME" /> በመለያ የመግባት ሁኔታ፣ የአሰሳ ውሂብ እና የጣቢያ ውሂብ በChrome ውስጥ ይመለከታሉ።</translation> <translation id="4802417911091824046">የይለፍ ሐረግ ምስጠራ ከGoogle Pay የመክፈያ ዘዴዎችን እና አድራሻዎችን አያካትትም። ይህን ቅንብር ለመቀየር <ph name="BEGIN_LINK" />ስምረትን ዳግም ያስጀምሩ<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">ግላዊነት</translation> <translation id="5087580092889165836">ካርድ አክል</translation> <translation id="509429900233858213">ስህተት አጋጥሟል።</translation> -<translation id="5100748015044654621">በመተግበሪያው ውስጥ ወደ ደመቀው ጽሑፍ አገናኝን ያጋሩ</translation> <translation id="510275257476243843">1 ሰዓት ይቀራል</translation> <translation id="5123685120097942451">ማንነት የማያሳውቅ ትር</translation> <translation id="5127805178023152808">አመሳስል ጠፍቷል</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">ፋይሎች የት እንደሚቀመጡ ይጠይቁ</translation> <translation id="6342069812937806050">ልክ አሁን</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 እና <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ተጨማሪ}one{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 እና <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ተጨማሪ}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 እና <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ተጨማሪ}}</translation> +<translation id="6345878117466430440">እንደተነበበ ምልክት አድርግ</translation> <translation id="6364438453358674297">ጥቆማው ከታሪክ ይወገድ?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> በመስመር ላይ ደህንነቱ በተጠበቀ ሁኔታ ለማከናወን፣ ለመፍጠር እና ለማሰስ የሚያስፈልጉዎት ዘመናዊ እና ፍጥነት አለው</translation> <translation id="6378173571450987352">ዝርዝሮች፦ ጥቅም ላይ በዋለው የውሂብ መጠን ተደርድረዋል</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">ውሂቡን በChrome ቅንብሮች ውስጥ ማጽዳት ይችላሉ</translation> <translation id="8662811608048051533">ከአብዛኛዎቹ ጣቢያዎች ዘግተው እንዲወጡ ያደርገዎታል።</translation> <translation id="8664979001105139458">የፋይል ስም አስቀድሞ አለ</translation> +<translation id="8683039184091909753">ምስል</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{የሲግናል ጥንካሬ ደረጃ፦ # አሞሌ}one{የሲግናል ጥንካሬ ደረጃ፦ # አሞሌዎች}other{የሲግናል ጥንካሬ ደረጃ፦ # አሞሌዎች}}</translation> <translation id="869891660844655955">የሚያበቀበት ጊዜ</translation> <translation id="8712637175834984815">ገባኝ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb index eb96e64..ae95bbb 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">إعادة تحميل الصفحة الحالية مع تجاهل المحتوى المُخزَّن مؤقتًا</translation> <translation id="124678866338384709">إغلاق علامة التبويب الحالية</translation> <translation id="1258753120186372309">رسم الشعار المبتكر من Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">قائمة القراءة</translation> <translation id="1266864766717917324">تعذَّرت مشاركة <ph name="CONTENT_TYPE" />.</translation> <translation id="1283039547216852943">النقر للتوسيع</translation> <translation id="1291207594882862231">محو السجل وملفات تعريف الارتباط وبيانات المواقع وذاكرة التخزين المؤقت...</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">النقر على الكلمة للبحث عنها فورًا أو الاطلاع على الإجراءات ذات الصلة</translation> <translation id="2760989362628427051">تفعيل المظهر الداكن عند تفعيل المظهر الداكن للجهاز أو ميزة "توفير شحن البطارية"</translation> <translation id="2762000892062317888">الآن</translation> -<translation id="2771869497727323769">يتعذَّر إنشاء رابط للنص. يمكنك مشاركة رابط الصفحة في تطبيق.</translation> <translation id="2777555524387840389">عدد الثواني المتبقية: <ph name="SECONDS" /></translation> <translation id="2779651927720337254">تعذَّر التنزيل</translation> <translation id="2781151931089541271">يتبقى ثانية واحدة</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{اكتملت عملية تنزيل واحدة.}zero{اكتملت # عملية تنزيل.}two{اكتملت عمليتا تنزيل (#).}few{اكتملت # عمليات تنزيل.}many{اكتملت # عملية تنزيل.}other{اكتملت # عملية تنزيل.}}</translation> <translation id="4766678251456904326">إضافة حساب إلى الجهاز</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{تمّت جدوَلة عملية تنزيل واحدة}zero{تمّت جدوَلة # عملية تنزيل}two{تمّت جدوَلة عمليتَي تنزيل}few{تمّت جدوَلة # عمليات تنزيل}many{تمّت جدوَلة # عملية تنزيل}other{تمّت جدوَلة # عملية تنزيل}}</translation> -<translation id="478981486571169252">ستظهر لك حالة تسجيل الدخول <ph name="SITE_NAME" />، وبيانات التصفُّح وبيانات الموقع الإلكتروني في متصفِّح Chrome.</translation> <translation id="4802417911091824046">لا يتضمّن التشفير باستخدام عبارة المرور طرق الدفع والعناوين من Google Pay. لتغيير هذا الإعداد، يُرجى <ph name="BEGIN_LINK" />إعادة ضبط المزامنة<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">الخصوصية</translation> <translation id="5087580092889165836">إضافة بطاقة</translation> <translation id="509429900233858213">حدث خطأ.</translation> -<translation id="5100748015044654621">يمكنك مشاركة رابط للنص المحدَّد في تطبيق.</translation> <translation id="510275257476243843">يتبقى ساعة واحدة</translation> <translation id="5123685120097942451">علامة تبويب "التصفُّح المتخفي"</translation> <translation id="5127805178023152808">المزامنة غير مفعّلة</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb index 20029b8..ee99a85 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">কেশ্ব কৰা সমল অৱজ্ঞা কৰি বর্তমানৰ পৃষ্ঠাটো পুনৰ ল'ড কৰক</translation> <translation id="124678866338384709">বর্তমানৰ টেবটো বন্ধ কৰক</translation> <translation id="1258753120186372309">Google ডুডল্: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">পঢ়াৰ সূচী</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> শ্বেয়াৰ কৰিব পৰা নগ’ল</translation> <translation id="1283039547216852943">বিস্তাৰ কৰিবলৈ টিপক</translation> <translation id="1291207594882862231">সন্ধান ইতিহাস, কুকি, ছাইটৰ ডেটা, কেশ্ব মচক…</translation> @@ -217,7 +218,6 @@ <translation id="2744248271121720757">ক্ষিপ্ৰভাৱে সন্ধান কৰিবলৈ আৰু প্ৰাসংগিক কার্যসমূহ চাবলৈ কোনো এটা শব্দত টিপক</translation> <translation id="2760989362628427051">আপোনাৰ ডিভাইচত গাঢ় থীম অথবা বেটাৰী সঞ্চয়কাৰী অন থাকিলে গাঢ় ৰঙৰ থীম অন কৰক</translation> <translation id="2762000892062317888">এইমাত্ৰ</translation> -<translation id="2771869497727323769">পাঠৰ লিংক সৃষ্টি কৰিব নোৱাৰি। পৃষ্ঠাৰ লিংক এটা এপত শ্বেয়াৰ কৰক।</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> ছেকেণ্ড বাকী আছে</translation> <translation id="2779651927720337254">ডাউনল'ড কৰিব পৰা নগ'ল</translation> <translation id="2781151931089541271">১ ছেকেণ্ড বাকী আছে</translation> @@ -466,7 +466,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{১টা ডাউনল'ড সম্পূর্ণ হ'ল।}one{#টা ডাউনল'ড সম্পূর্ণ হ'ল।}other{#টা ডাউনল'ড সম্পূর্ণ হ'ল।}}</translation> <translation id="4766678251456904326">ডিভাইচত একাউণ্ট যোগ দিয়ক</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{১ টা ডাউনল’ডৰ সময়সূচী নিৰ্ধাৰণ কৰা হৈছে।}one{# টা ডাউনল’ডৰ সময়সূচী নিৰ্ধাৰণ কৰা হৈছে।}other{# টা ডাউনল’ডৰ সময়সূচী নিৰ্ধাৰণ কৰা হৈছে।}}</translation> -<translation id="478981486571169252">আপুনি আপোনাৰ <ph name="SITE_NAME" />ৰ ছাইন ইনৰ স্থিতি, ব্ৰাউজ কৰা ডেটা আৰু ছাইটৰ ডেটা Chromeত দেখা পাব।</translation> <translation id="4802417911091824046">পাছফ্ৰেজ এনক্ৰিপশ্বনত Google Payৰ পৰিশোধ পদ্ধতি আৰু ঠিকনা অন্তৰ্ভুক্ত নহয়। এই ছেটিংটো সলনি কৰিবলৈ <ph name="BEGIN_LINK" />ছিংক ৰিছেট কৰক<ph name="END_LINK" /></translation> @@ -511,7 +510,6 @@ <translation id="5040262127954254034">গোপনীয়তা</translation> <translation id="5087580092889165836">কাৰ্ড যোগ কৰক</translation> <translation id="509429900233858213">কোনো আসোঁৱাহ হৈছে।</translation> -<translation id="5100748015044654621">হাইলাইট কৰা পাঠৰ লিংক এটা এপত শ্বেয়াৰ কৰক</translation> <translation id="510275257476243843">১ঘণ্টা বাকী আছে</translation> <translation id="5123685120097942451">ইনক’গনিট’ টেব</translation> <translation id="5127805178023152808">ছিংক অফ কৰা আছে</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb index 7ee18cf..8c28acb6 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Keş məzmununu iqnor edərək cari səhifəni yenidən yükləyin</translation> <translation id="124678866338384709">Cari paneli bağlayın</translation> <translation id="1258753120186372309">Google doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Oxu siyahısı</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> paylaşmaq mümkün olmnadı</translation> <translation id="1283039547216852943">Genişləndirmək üçün klikləyin</translation> <translation id="1291207594882862231">Tarixçə, kuki, sayt datası və keşi təmizləyin…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Dərhal axtarmaq və əlaqədar fəaliyyətə baxmaq üçün söz yazın</translation> <translation id="2760989362628427051">Cihazın tünd tema və ya Enerjiyə Qənaət rejimi aktiv olduqda tünd temanı aktiv edin</translation> <translation id="2762000892062317888">indicə</translation> -<translation id="2771869497727323769">Mətnə keçid yaratmaq olmur. Tətbiqdə səhifəyə keçidi paylaşın.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> saniyə qaldı</translation> <translation id="2779651927720337254">alınmadı</translation> <translation id="2781151931089541271">1 saniyə qaldı</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 endirmə tamamlandı.}other{# endirmə tamamlandı.}}</translation> <translation id="4766678251456904326">Cihaza hesab əlavə edin</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 endirmə planlanıb.}other{# endirmə planlanıb.}}</translation> -<translation id="478981486571169252">Chrome'da <ph name="SITE_NAME" /> giriş statusu, baxış datası və sayt datanızı görəcəksiniz.</translation> <translation id="4802417911091824046">Google Pay'dəki ödəniş metodları və ünvanlar parol şifrələməsinə daxil deyil. Ayarı dəyişmək üçün <ph name="BEGIN_LINK" />sinxronizasiyanı sıfırlayın<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">Məxfilik</translation> <translation id="5087580092889165836">Kart əlavə edin</translation> <translation id="509429900233858213">Xəta baş verdi.</translation> -<translation id="5100748015044654621">Tətbiqdə vurğulanmış mətnə keçidi paylaşın</translation> <translation id="510275257476243843">1 saat qaldı</translation> <translation id="5123685120097942451">Aanonim tab</translation> <translation id="5127805178023152808">Sinx deaktivdir</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb index 17c9ae6..03eb2f82 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Перазагрузіць бягучую старонку, ігнаруючы змесціва кэша</translation> <translation id="124678866338384709">Закрыць бягучую ўкладку</translation> <translation id="1258753120186372309">Дудл Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Спіс чытання</translation> <translation id="1266864766717917324">Не ўдалося абагуліць змесціва наступнага тыпу: <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Дакраніцеся, каб разгарнуць</translation> <translation id="1291207594882862231">Ачысціць гісторыю, файлы cookie, даныя сайта, кэш…</translation> @@ -217,7 +218,6 @@ <translation id="2744248271121720757">Каб выканаць імгненны пошук або паглядзець звязаныя са словам дзеянні, націсніце на яго</translation> <translation id="2760989362628427051">Выкарыстоўваць цёмную тэму, калі на прыладзе ўключаны рэжым эканоміі зараду або цёмная тэма</translation> <translation id="2762000892062317888">толькі што</translation> -<translation id="2771869497727323769">Не ўдалося стварыць спасылку на тэкст. Абагульце спасылку на старонку ў праграме.</translation> <translation id="2777555524387840389">Засталося <ph name="SECONDS" /> с</translation> <translation id="2779651927720337254">не выканана</translation> <translation id="2781151931089541271">Засталася 1 секунда</translation> @@ -466,7 +466,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 спампоўка завершана.}one{# спампоўка завершана.}few{# спампоўкі завершана.}many{# спамповак завершана.}other{# спампоўкі завершана.}}</translation> <translation id="4766678251456904326">Дадаць уліковы запіс на прыладу</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Запланавана 1 спампоўка.}one{Запланавана # спампоўка.}few{Запланаваны # спампоўкі.}many{Запланаваны # спамповак.}other{Запланаваны # спампоўкі.}}</translation> -<translation id="478981486571169252">Вы ўбачыце, ці выкананы ўваход на сайт <ph name="SITE_NAME" />, гісторыю праглядаў і даныя сайтаў у Chrome.</translation> <translation id="4802417911091824046">Шыфраванне фразы-пароля не распаўсюджваецца на спосабы аплаты і адрасы з Google Pay. Каб змяніць гэту наладу, <ph name="BEGIN_LINK" />скіньце налады сінхранізацыі<ph name="END_LINK" /></translation> @@ -511,7 +510,6 @@ <translation id="5040262127954254034">Прыватнасць</translation> <translation id="5087580092889165836">Дадаць картку</translation> <translation id="509429900233858213">Адбылася памылка.</translation> -<translation id="5100748015044654621">Абагульце спасылку на вылучаны тэкст у праграме</translation> <translation id="510275257476243843">Засталася 1 гадзіна</translation> <translation id="5123685120097942451">Укладка інкогніта</translation> <translation id="5127805178023152808">Сінхранізацыя выключана</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb index 797aec8..ae00775 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Презареждане на страницата (кешът се пренебрегва)</translation> <translation id="124678866338384709">Затваряне на текущия раздел</translation> <translation id="1258753120186372309">Драскулка на Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Списък за четене</translation> <translation id="1266864766717917324">Споделянето на <ph name="CONTENT_TYPE" /> не бе възможно</translation> <translation id="1283039547216852943">Докоснете за разгъване</translation> <translation id="1291207594882862231">Изчистване на историята, „бисквитките“, данните за сайтове и кеша…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Докоснете дума, за да извършите незабавно търсене, или вижте свързаните действия</translation> <translation id="2760989362628427051">Включване на тъмната тема, когато тъмната тема на устройството или режимът за запазване на батерията в него са включени</translation> <translation id="2762000892062317888">току-що</translation> -<translation id="2771869497727323769">Не може да се създаде връзка към текста. Споделете връзка към страница в приложение.</translation> <translation id="2777555524387840389">Остават <ph name="SECONDS" /> сек</translation> <translation id="2779651927720337254">неуспешно</translation> <translation id="2781151931089541271">Остава 1 сек</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Списъкът с устройства, с които да се сподели даден раздел, е затворен.</translation> <translation id="4149994727733219643">Опростен изглед на уеб страниците</translation> <translation id="4170011742729630528">Няма достъп до услугата. Опитайте отново по-късно.</translation> +<translation id="4175173967354304331">Ще влезете в профила си в този сайт, в Chrome и в приложенията на Google</translation> <translation id="4179980317383591987">Използвани: <ph name="AMOUNT" /></translation> <translation id="4181841719683918333">Езици</translation> <translation id="4183868528246477015">Търсене с Google Обектив <ph name="BEGIN_NEW" />Ново<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 изтегляне завърши.}other{# изтегляния завършиха.}}</translation> <translation id="4766678251456904326">Добавяне на профил към устройството</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Насрочено е 1 изтегляне.}other{Насрочени са # изтегляния.}}</translation> -<translation id="478981486571169252">В Chrome ще виждате дали сте влезли в профила си в <ph name="SITE_NAME" />, както и съответните данни за сърфирането и сайта.</translation> <translation id="4802417911091824046">Шифроването с пропуск не включва начините на плащане и адресите от Google Pay. За да промените тази настройка, <ph name="BEGIN_LINK" />нулирайте синхронизирането<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Поверителност</translation> <translation id="5087580092889165836">Добавяне на карта</translation> <translation id="509429900233858213">Възникна грешка.</translation> -<translation id="5100748015044654621">Споделяне на връзка към откроения текст в приложение</translation> <translation id="510275257476243843">Остава 1 час</translation> <translation id="5123685120097942451">Раздел в режим „инкогнито“</translation> <translation id="5127805178023152808">Синхронизирането е изключено</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Извеждане на запитване къде да се запазват файловете</translation> <translation id="6342069812937806050">Току-що</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 и още <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 и още <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation> +<translation id="6345878117466430440">Означаване като прочетено</translation> <translation id="6364438453358674297">Предложението да се премахне ли от историята?</translation> <translation id="6366047038980456022">Браузърът <ph name="APP_NAME" /> е снабден с интелигентните функции и скоростта, нужни да изпълнявате задачите си, да създавате съдържание и да сърфирате онлайн по безопасен начин</translation> <translation id="6378173571450987352">Подробности: сортирани по количество използвани данни</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Можете да изчистите данните в настройките на Chrome</translation> <translation id="8662811608048051533">Ще излезете от повечето сайтове.</translation> <translation id="8664979001105139458">Името на файла вече съществува</translation> +<translation id="8683039184091909753">изображение</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Сила на сигнала: # чертичка}other{Сила на сигнала: # чертички}}</translation> <translation id="869891660844655955">Дата на валидност</translation> <translation id="8712637175834984815">Разбрах</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb index c5a4a9ee..9d5cf12 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">ক্যাশে করা কন্টেন্ট এড়িয়ে বর্তমান পৃষ্ঠা আবার লোড করুন</translation> <translation id="124678866338384709">বর্তমান ট্যাব বন্ধ করুন</translation> <translation id="1258753120186372309">Google ডুডল: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">পড়ার তালিকা</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> শেয়ার করা যায়নি</translation> <translation id="1283039547216852943">প্রসারিত করতে আলতো চাপুন</translation> <translation id="1291207594882862231">ইতিহাস, কুকিজ, সাইট ডেটা, ক্যাশে সাফ করে...</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">ঝটপট সার্চ এবং সম্পর্কিত অ্যাকশন দেখতে একটি শব্দ ট্যাপ করুন</translation> <translation id="2760989362628427051">আপনার ডিভাইসে গাঢ় থিম বা ব্যাটারি সেভার চালু থাকলে, গাঢ় থিম চালু করুন</translation> <translation id="2762000892062317888">এখনই</translation> -<translation id="2771869497727323769">টেক্সটের লিঙ্ক তৈরি করা যাচ্ছে না। কোনও অ্যাপে পৃষ্ঠার লিঙ্ক শেয়ার করুন।</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> সেকেন্ড বাকি আছে</translation> <translation id="2779651927720337254">করা যায়নি</translation> <translation id="2781151931089541271">১ সেকেন্ড বাকি আছে</translation> @@ -469,7 +469,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{১টি ডাউনলোড হয়ে গেছে।}one{#টি ডাউনলোড হয়ে গেছে।}other{#টি ডাউনলোড হয়ে গেছে।}}</translation> <translation id="4766678251456904326">ডিভাইসে অ্যাকাউন্ট যোগ করুন</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{১টি ডাউনলোড শিডিউল করা হয়েছে।}one{#টি ডাউনলোড শিডিউল করা হয়েছে।}other{#টি ডাউনলোড শিডিউল করা হয়েছে।}}</translation> -<translation id="478981486571169252">আপনি Chrome-এ <ph name="SITE_NAME" /> সাইটে নিজের সাইন-ইন স্ট্যাটাস, ব্রাউজিং ডেটা এবং সাইট ডেটা দেখতে পাবেন।</translation> <translation id="4802417911091824046">পাসফ্রেজ এনক্রিপশনে Google Pay-এর পেমেন্ট পদ্ধতি ও ঠিকানা অন্তর্ভুক্ত থাকে না। <ph name="BEGIN_LINK" />রিসেট সিঙ্ক<ph name="END_LINK" /> থেকে এই সেটিং পরিবর্তন করুন</translation> @@ -514,7 +513,6 @@ <translation id="5040262127954254034">গোপনীয়তা</translation> <translation id="5087580092889165836">কার্ড জুড়ুন</translation> <translation id="509429900233858213">একটি ত্রুটি ঘটেছে৷</translation> -<translation id="5100748015044654621">হাইলাইট করা টেক্সটের লিঙ্ক কোনও অ্যাপে শেয়ার করুন</translation> <translation id="510275257476243843">১ ঘণ্টা বাকি আছে</translation> <translation id="5123685120097942451">ছদ্মবেশী ট্যাব</translation> <translation id="5127805178023152808">সিঙ্ক বন্ধ রয়েছে</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb index 860c959e..d58b772d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Ponovo učitajte tren. str. ignorir. sadrž. keš memor.</translation> <translation id="124678866338384709">Zatvori trenutnu karticu</translation> <translation id="1258753120186372309">Google crtež: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Lista za čitanje</translation> <translation id="1266864766717917324">Nije moguće podijeliti <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Dodirnite da proširite</translation> <translation id="1291207594882862231">Brisanje historije, kolačića, podataka web lokacija, keš memorije…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Dodirnite riječ za instant pretraživanje ili pogledajte srodne radnje</translation> <translation id="2760989362628427051">Uključuje tamnu temu kada je na uređaju uključena tamna tema ili Ušteda baterije</translation> <translation id="2762000892062317888">maloprije</translation> -<translation id="2771869497727323769">Nije moguće kreirati link za tekst. Podijelite link za stranicu u aplikaciji.</translation> <translation id="2777555524387840389">Preostalo je <ph name="SECONDS" /> s</translation> <translation id="2779651927720337254">neuspjelo</translation> <translation id="2781151931089541271">Preostala je 1 sek</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{Završeno je jedno preuzimanje.}one{Završeno je # preuzimanje.}few{Završena su # preuzimanja.}other{Završeno je # preuzimanja.}}</translation> <translation id="4766678251456904326">Dodajte račun na uređaj</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Zakazano je 1 preuzimanje.}one{Zakazano je # preuzimanje.}few{Zakazana su # preuzimanja.}other{Zakazano je # preuzimanja.}}</translation> -<translation id="478981486571169252">Vidjet ćete svoj status prijave na web lokaciji <ph name="SITE_NAME" />, podatke pregledanja i web lokacije na Chromeu.</translation> <translation id="4802417911091824046">Enkripcija šifrom ne uključuje načine plaćanja i adrese s Google Paya. Da biste promijenili tu postavku, <ph name="BEGIN_LINK" />poništite sinkronizaciju<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">Privatnost</translation> <translation id="5087580092889165836">Dodaj karticu</translation> <translation id="509429900233858213">Došlo je do greške.</translation> -<translation id="5100748015044654621">Podijelite link za istaknuti tekst u aplikaciji</translation> <translation id="510275257476243843">Još 1 sat</translation> <translation id="5123685120097942451">Anonimna kartica</translation> <translation id="5127805178023152808">Sinkronizacija je isključena</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb index 6dec614b..b396635 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Carrega pàgina actual; ignora contingut en memòria</translation> <translation id="124678866338384709">Tanca la pestanya actual</translation> <translation id="1258753120186372309">Doodle de Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Llista de lectura</translation> <translation id="1266864766717917324">No s'ha pogut compartir <ph name="CONTENT_TYPE" />.</translation> <translation id="1283039547216852943">Toca per desplegar</translation> <translation id="1291207594882862231">Esborra l'historial, les galetes, les dades dels llocs web, la memòria cau, etc.</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Toca una paraula per fer una cerca a l'instant o per veure accions relacionades</translation> <translation id="2760989362628427051">Activa el tema fosc quan el teu dispositiu tingui activat aquest tema o el mode d'estalvi de bateria</translation> <translation id="2762000892062317888">ara mateix</translation> -<translation id="2771869497727323769">No es pot crear un enllaç al text. Comparteix l'enllaç a la pàgina en una aplicació.</translation> <translation id="2777555524387840389">Queden <ph name="SECONDS" /> segons</translation> <translation id="2779651927720337254">ha fallat</translation> <translation id="2781151931089541271">Queda 1 segon</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">La llista de dispositius amb què es compartirà una pestanya està tancada.</translation> <translation id="4149994727733219643">Visualització simplificada de pàgines web</translation> <translation id="4170011742729630528">El servei no està disponible. Torneu-ho a provar més tard.</translation> +<translation id="4175173967354304331">S'iniciarà la sessió en aquest lloc web i a les aplicacions Chrome i Google</translation> <translation id="4179980317383591987">Dades utilitzades: <ph name="AMOUNT" /></translation> <translation id="4181841719683918333">Idiomes</translation> <translation id="4183868528246477015">Cerca amb Google Lens <ph name="BEGIN_NEW" />Novetat<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{S'ha completat 1 baixada.}other{S'han completat # baixades.}}</translation> <translation id="4766678251456904326">Afegeix un compte al dispositiu</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{S'ha programat 1 baixada.}other{S'han programat # baixades.}}</translation> -<translation id="478981486571169252">Veuràs l'estat de l'inici de sessió a <ph name="SITE_NAME" />, les dades de navegació i les dades del lloc web a Chrome.</translation> <translation id="4802417911091824046">L'encriptació de frases de contrasenya no inclou les formes de pagament ni les adreces de Google Pay. Per canviar aquesta opció, <ph name="BEGIN_LINK" />restableix la sincronització<ph name="END_LINK" />.</translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Privadesa</translation> <translation id="5087580092889165836">Afegeix una targeta</translation> <translation id="509429900233858213">S'ha produït un error.</translation> -<translation id="5100748015044654621">Comparteix l'enllaç al text destacat en una aplicació</translation> <translation id="510275257476243843">Queda 1 hora</translation> <translation id="5123685120097942451">Pestanya d'incògnit</translation> <translation id="5127805178023152808">Sincronització desactivada</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Pregunta on es desen els fitxers</translation> <translation id="6342069812937806050">Ara mateix</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 i <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> més}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 i <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> més}}</translation> +<translation id="6345878117466430440">Marca com a llegit</translation> <translation id="6364438453358674297">Voleu suprimir el suggeriment de l'historial?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> té les eines intel·ligents i la velocitat que necessites per fer, crear i explorar contingut a Internet de manera segura</translation> <translation id="6378173571450987352">Detalls: files ordenades per quantitat de dades utilitzades</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Pots esborrar les dades a la configuració de Chrome</translation> <translation id="8662811608048051533">Et tanca la sessió de la majoria de llocs.</translation> <translation id="8664979001105139458">El nom del fitxer ja existeix</translation> +<translation id="8683039184091909753">imatge</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Intensitat del senyal: # barra}other{Intensitat del senyal: # barres}}</translation> <translation id="869891660844655955">Data de caducitat</translation> <translation id="8712637175834984815">Entesos</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb index 2088977..c48334bb 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Obnovit stránku a ignorovat obsah v mezipaměti</translation> <translation id="124678866338384709">Zavřít aktuální kartu</translation> <translation id="1258753120186372309">Sváteční logo Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Seznam četby</translation> <translation id="1266864766717917324">Sdílení obsahu typu <ph name="CONTENT_TYPE" /> se nezdařilo</translation> <translation id="1283039547216852943">Klepnutím rozbalíte</translation> <translation id="1291207594882862231">Vymazat historii, soubory cookie, data webů, mezipaměť…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Klepnutím na slovo můžete okamžitě vyhledávat nebo zobrazit související akce</translation> <translation id="2760989362628427051">Zapnout tmavý motiv, když je na zařízení zapnutý tmavý motiv nebo spořič baterie</translation> <translation id="2762000892062317888">právě teď</translation> -<translation id="2771869497727323769">Odkaz na text nelze vytvořit. Odkaz na stránku sdílejte v aplikaci.</translation> <translation id="2777555524387840389">Zbývá: <ph name="SECONDS" /> s</translation> <translation id="2779651927720337254">nezdařilo se</translation> <translation id="2781151931089541271">Zbývá: 1 s</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Seznam zařízení, se kterými se má karta sdílet, je zavřený.</translation> <translation id="4149994727733219643">Zjednodušené zobrazení webových stránek</translation> <translation id="4170011742729630528">Služba není k dispozici, zkuste to později.</translation> +<translation id="4175173967354304331">Budete přihlášeni na tento web, do Chromu a do aplikací od Googlu</translation> <translation id="4179980317383591987">Využito: <ph name="AMOUNT" /></translation> <translation id="4181841719683918333">Jazyky</translation> <translation id="4183868528246477015">Hledat pomocí Google Lens <ph name="BEGIN_NEW" />Nové<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{Stažení 1 souboru bylo dokončeno.}few{Stažení # souborů bylo dokončeno.}many{Stažení # souboru bylo dokončeno.}other{Stažení # souborů bylo dokončeno.}}</translation> <translation id="4766678251456904326">Přidat účet do zařízení</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Je naplánováno 1 stažení.}few{Jsou naplánována # stažení.}many{Je naplánováno # stažení.}other{Je naplánováno # stažení.}}</translation> -<translation id="478981486571169252">Uvidíte stav přihlášení, údaje o prohlížení a data webu <ph name="SITE_NAME" /> v Chromu.</translation> <translation id="4802417911091824046">Šifrování pomocí heslové fráze se nevztahuje na platební metody a adresy ze služby Google Pay. Chcete-toto nastavení změnit, <ph name="BEGIN_LINK" />resetujte synchronizaci<ph name="END_LINK" />.</translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Ochrana soukromí</translation> <translation id="5087580092889165836">Přidat kartu</translation> <translation id="509429900233858213">Došlo k chybě.</translation> -<translation id="5100748015044654621">Odkaz na zvýrazněný text sdílejte v aplikaci</translation> <translation id="510275257476243843">Zbývá: 1 h</translation> <translation id="5123685120097942451">Anonymní karta</translation> <translation id="5127805178023152808">Synchronizace je vypnuta</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Zeptat se, kam se soubory mají uložit</translation> <translation id="6342069812937806050">Právě teď</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> další}few{<ph name="SHIPPING_ADDRESS_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> další}many{<ph name="SHIPPING_ADDRESS_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> další}other{<ph name="SHIPPING_ADDRESS_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> dalších}}</translation> +<translation id="6345878117466430440">Označit jako přečtené</translation> <translation id="6364438453358674297">Odstranit návrh z historie?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> vám vždy nabídne chytré nástroje, zabezpečení a rychlost k tomu, co právě potřebujete.</translation> <translation id="6378173571450987352">Podrobnosti: Seřazeno podle množství využitých dat</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Data můžete vymazat v nastavení Chromu</translation> <translation id="8662811608048051533">Odhlásí vás z většiny webů.</translation> <translation id="8664979001105139458">Název souboru již existuje</translation> +<translation id="8683039184091909753">obrázek</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Síla signálu: # čárka}few{Síla signálu: # čárky}many{Síla signálu: # čárky}other{Síla signálu: # čárek}}</translation> <translation id="869891660844655955">Datum vypršení platnosti</translation> <translation id="8712637175834984815">Hotovo</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb index 1fddbbb1..307089a 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Genindlæs aktuel side, og ignorer indhold gemt i cache</translation> <translation id="124678866338384709">Luk aktuel fane</translation> <translation id="1258753120186372309">Google-doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Læseliste</translation> <translation id="1266864766717917324">Det var ikke muligt at dele <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Tryk for at udvide</translation> <translation id="1291207594882862231">Ryd historik, cookies, websitedata, cache...</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Tryk på et ord for at søge øjeblikkeligt eller se relaterede handlinger</translation> <translation id="2760989362628427051">Aktivér mørkt tema, når enhedens mørke tema eller batterisparefunktion er aktiveret</translation> <translation id="2762000892062317888">lige nu</translation> -<translation id="2771869497727323769">Der kan ikke oprettes et link til teksten. Del link til en side i en app.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> sekunder tilbage</translation> <translation id="2779651927720337254">mislykkedes</translation> <translation id="2781151931089541271">1 sekund tilbage</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 download er fuldført.}one{# download er fuldført.}other{# downloads er fuldført.}}</translation> <translation id="4766678251456904326">Føj konto til enhed</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 planlagt download.}one{# planlagt download.}other{# planlagte downloads.}}</translation> -<translation id="478981486571169252">Du kan se loginstatus, browserdata og websiteoplysninger for <ph name="SITE_NAME" /> i Chrome.</translation> <translation id="4802417911091824046">Kryptering med adgangssætning omfatter ikke betalingsmetoder og adresser fra Google Pay. Hvis du vil ændre denne indstilling, skal du <ph name="BEGIN_LINK" />nulstille synkronisering<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">Privatliv</translation> <translation id="5087580092889165836">Tilføj kort</translation> <translation id="509429900233858213">Der opstod en fejl.</translation> -<translation id="5100748015044654621">Del link til fremhævet tekst i en app</translation> <translation id="510275257476243843">1 time tilbage</translation> <translation id="5123685120097942451">Inkognitofane</translation> <translation id="5127805178023152808">Synkronisering er slået fra</translation> @@ -1001,6 +999,7 @@ <translation id="8748850008226585750">Indholdet er skjult</translation> <translation id="8788265440806329501">Navigationsoversigt er lukket</translation> <translation id="8788968922598763114">Åbn den senest lukkede fane igen</translation> +<translation id="8798449543960971550">Læst</translation> <translation id="8812260976093120287">På nogle websites kan du betale med ovenstående understøttede betalingsapps på din enhed.</translation> <translation id="8820817407110198400">Bogmærker</translation> <translation id="883806473910249246">Der opstod en fejl under download af indholdet.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb index dff7aa3..47a98e6 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Aktuelle Seite neu laden, Cache-Inhalte ignorieren</translation> <translation id="124678866338384709">Aktuellen Tab schließen</translation> <translation id="1258753120186372309">Google-Doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Leseliste</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> konnte nicht geteilt werden</translation> <translation id="1283039547216852943">Zum Maximieren tippen</translation> <translation id="1291207594882862231">Verlauf, Cookies, Websitedaten, Cache leeren…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Tippen Sie auf ein Wort, um eine Sofortsuche zu starten oder weitere Aktionen anzuzeigen</translation> <translation id="2760989362628427051">Dunkles Design verwenden, wenn beim Gerät das dunkle Design oder der Energiesparmodus aktiviert ist</translation> <translation id="2762000892062317888">gerade eben</translation> -<translation id="2771869497727323769">Link zu Text kann nicht erstellt werden. Teilen Sie den Link zur Seite in einer App.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> Sekunden übrig</translation> <translation id="2779651927720337254">fehlgeschlagen</translation> <translation id="2781151931089541271">1 Sekunde übrig</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 Download abgeschlossen.}other{# Downloads abgeschlossen.}}</translation> <translation id="4766678251456904326">Konto zum Gerät hinzufügen</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 Download geplant.}other{# Downloads geplant.}}</translation> -<translation id="478981486571169252">Sie können Ihren Anmeldestatus für <ph name="SITE_NAME" />, Browserdaten und Websitedaten in Chrome einsehen.</translation> <translation id="4802417911091824046">Die Passphrasenverschlüsselung enthält keine Zahlungsmethoden oder Adressen von Google Pay. Wenn Sie diese Einstellung ändern möchten, <ph name="BEGIN_LINK" />setzen Sie die Synchronisierung zurück<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">Datenschutz</translation> <translation id="5087580092889165836">Karte hinzufügen</translation> <translation id="509429900233858213">Ein Fehler ist aufgetreten.</translation> -<translation id="5100748015044654621">Teilen Sie den Link zum markierten Text in einer App</translation> <translation id="510275257476243843">1 Stunde übrig</translation> <translation id="5123685120097942451">Inkognitotab</translation> <translation id="5127805178023152808">Synchronisierung ist deaktiviert</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb index d4acfd3..c366f66 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Επαναφ. τρέχ.σελ. αγνοώντας το περιεχ. κρυφ.μνήμης</translation> <translation id="124678866338384709">Κλείσιμο τρέχουσας καρτέλας</translation> <translation id="1258753120186372309">Google doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Λίστα ανάγνωσης</translation> <translation id="1266864766717917324">Δεν ήταν δυνατή η κοινοποίηση <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Πατήστε για ανάπτυξη</translation> <translation id="1291207594882862231">Διαγραφή ιστορικού, cookie, δεδομένων ιστότοπου, κρυφής μνήμης…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Πατήστε μια λέξη για άμεση αναζήτηση ή για να δείτε τις σχετικές ενέργειες</translation> <translation id="2760989362628427051">Να ενεργοποιείται το σκούρο θέμα όταν το σκούρο θέμα ή η Εξοικονόμηση μπαταρίας της συσκευής σας έχουν ενεργοποιηθεί.</translation> <translation id="2762000892062317888">μόλις τώρα</translation> -<translation id="2771869497727323769">Δεν είναι δυνατή η δημιουργία συνδέσμου στο κείμενο. Κοινοποιήστε τον σύνδεσμο στη σελίδα σε μια εφαρμογή.</translation> <translation id="2777555524387840389">Απομένουν <ph name="SECONDS" /> δευτερόλεπτα</translation> <translation id="2779651927720337254">απέτυχε</translation> <translation id="2781151931089541271">Απομένει 1 δευτερόλεπτο</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Η λίστα συσκευών στις οποίες θα κοινοποιηθεί μια καρτέλα είναι κλειστή.</translation> <translation id="4149994727733219643">Απλοποιημένη προβολή για ιστοσελίδες</translation> <translation id="4170011742729630528">Η υπηρεσία δεν είναι διαθέσιμη. Δοκιμάστε ξανά αργότερα.</translation> +<translation id="4175173967354304331">Θα συνδεθείτε σε αυτόν τον ιστότοπο, στο Chrome και σε εφαρμογές Google</translation> <translation id="4179980317383591987">Χρησιμοποιήθηκαν <ph name="AMOUNT" /></translation> <translation id="4181841719683918333">Γλώσσες</translation> <translation id="4183868528246477015">Αναζήτηση με Google Lens <ph name="BEGIN_NEW" />Νέο<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 ολοκληρωμένη λήψη.}other{# ολοκληρωμένες λήψεις.}}</translation> <translation id="4766678251456904326">Προσθήκη λογαριασμού στη συσκευή</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Προγραμματίστηκε 1 λήψη.}other{Προγραμματίστηκαν # λήψεις.}}</translation> -<translation id="478981486571169252">Θα δείτε την κατάσταση σύνδεσης στον ιστότοπο <ph name="SITE_NAME" />, τα δεδομένα περιήγησης και τα δεδομένα ιστοτόπων στο Chrome.</translation> <translation id="4802417911091824046">Η κρυπτογράφηση φράσης πρόσβασης δεν περιλαμβάνει τρόπους πληρωμής και διευθύνσεις από το Google Pay. Για να αλλάξετε αυτήν τη ρύθμιση, <ph name="BEGIN_LINK" />επαναφέρετε τον συγχρονισμό<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Απόρρητο</translation> <translation id="5087580092889165836">Προσθήκη κάρτας</translation> <translation id="509429900233858213">Παρουσιάστηκε σφάλμα.</translation> -<translation id="5100748015044654621">Κοινοποιήστε τον σύνδεσμο στο επισημασμένο κείμενο σε μια εφαρμογή.</translation> <translation id="510275257476243843">Απομένει 1 ώρα</translation> <translation id="5123685120097942451">Καρτέλα ανώνυμης περιήγησης</translation> <translation id="5127805178023152808">Ο συγχρονισμός είναι απενεργοποιημένος</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Να γίνεται ερώτηση σχετικά με την τοποθεσία αποθήκευσης των αρχείων</translation> <translation id="6342069812937806050">Πριν λίγο</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 και <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ακόμη}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 και <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ακόμη}}</translation> +<translation id="6345878117466430440">Επισήμανση ως αναγνωσμένο</translation> <translation id="6364438453358674297">Κατάργηση πρότασης από το ιστορικό;</translation> <translation id="6366047038980456022">Η εφαρμογή <ph name="APP_NAME" /> σας προσφέρει τις έξυπνες λειτουργίες και την ταχύτητα που χρειάζεστε για να κάνετε αυτό που θέλετε, να δημιουργήσετε και να εξερευνήσετε στο διαδίκτυο.</translation> <translation id="6378173571450987352">Λεπτομέρειες: Ταξινομήθηκαν βάσει του όγκου των δεδομένων που χρησιμοποιήθηκαν</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Μπορείτε να διαγράψετε τα δεδομένα στις ρυθμίσεις του Chrome</translation> <translation id="8662811608048051533">Θα αποσυνδεθείτε από τους περισσότερους ιστοτόπους.</translation> <translation id="8664979001105139458">Το αρχείο υπάρχει ήδη</translation> +<translation id="8683039184091909753">εικόνα</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Επίπεδο ισχύος σήματος: # γραμμή}other{Επίπεδο ισχύος σήματος: # γραμμές}}</translation> <translation id="869891660844655955">Ημερομηνία λήξης</translation> <translation id="8712637175834984815">Κατάλαβα!</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb index 10fdd0a..b5f1021 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Reload the current page, ignoring cached content</translation> <translation id="124678866338384709">Close current tab</translation> <translation id="1258753120186372309">Google doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Reading list</translation> <translation id="1266864766717917324">Couldn't share <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Tap to expand</translation> <translation id="1291207594882862231">Clear history, cookies, site data, cache…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Tap a word to search instantly or see related actions</translation> <translation id="2760989362628427051">Turn on dark theme when your device's dark theme or Battery Saver is on</translation> <translation id="2762000892062317888">just now</translation> -<translation id="2771869497727323769">Can't create link to text. Share link to page in an app.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> secs left</translation> <translation id="2779651927720337254">failed</translation> <translation id="2781151931089541271">1 sec left</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">List of devices with which to share a tab is closed.</translation> <translation id="4149994727733219643">Simplified view for web pages</translation> <translation id="4170011742729630528">The service is not available; try again later.</translation> +<translation id="4175173967354304331">You’ll be signed in to this site, Chrome and Google apps</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> used</translation> <translation id="4181841719683918333">Languages</translation> <translation id="4183868528246477015">Search with Google Lens <ph name="BEGIN_NEW" />New<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 download complete.}other{# downloads complete.}}</translation> <translation id="4766678251456904326">Add account to device</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 download scheduled.}other{# downloads scheduled.}}</translation> -<translation id="478981486571169252">You'll see your <ph name="SITE_NAME" /> sign-in status, browsing data and site data in Chrome.</translation> <translation id="4802417911091824046">Passphrase encryption doesn’t include payment methods and addresses from Google Pay. To change this setting, <ph name="BEGIN_LINK" />reset sync<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Privacy</translation> <translation id="5087580092889165836">Add card</translation> <translation id="509429900233858213">An error occurred.</translation> -<translation id="5100748015044654621">Share link to the highlighted text in an app</translation> <translation id="510275257476243843">1 hour left</translation> <translation id="5123685120097942451">Incognito tab</translation> <translation id="5127805178023152808">Sync is off</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Ask where to save files</translation> <translation id="6342069812937806050">Just now</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 and <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> more}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 and <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> more}}</translation> +<translation id="6345878117466430440">Mark as read</translation> <translation id="6364438453358674297">Remove suggestion from history?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> has the smarts and speed that you need to safely do, create and explore online</translation> <translation id="6378173571450987352">Details: Sorted by amount of data used</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">You can clear the data in Chrome Settings</translation> <translation id="8662811608048051533">Signs you out of most sites.</translation> <translation id="8664979001105139458">File name already exists</translation> +<translation id="8683039184091909753">image</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Signal Strength Level: # bar}other{Signal Strength Level: # bars}}</translation> <translation id="869891660844655955">Expiry date</translation> <translation id="8712637175834984815">Got it</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb index eba8614..f08349dd 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Volver a cargar página actual; ignorar contenido en caché</translation> <translation id="124678866338384709">Cerrar la pestaña actual</translation> <translation id="1258753120186372309">Doodle de Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Lista de lectura</translation> <translation id="1266864766717917324">No se pudo compartir <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Presiona para expandir</translation> <translation id="1291207594882862231">Borra el historial, las cookies, los datos del sitio, la caché…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Presiona una palabra para realizar una búsqueda instantánea o ver acciones relacionadas</translation> <translation id="2760989362628427051">Activa el tema oscuro cuando esté activado el Ahorro de batería o el tema oscuro de tu dispositivo</translation> <translation id="2762000892062317888">recién</translation> -<translation id="2771869497727323769">No se puede crear un vínculo al texto. Comparte el vínculo a la página desde una app.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> segundos restantes</translation> <translation id="2779651927720337254">error</translation> <translation id="2781151931089541271">1 segundo restante</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">La lista de dispositivos con los que se puede compartir una pestaña está cerrada.</translation> <translation id="4149994727733219643">Vista simplificada para páginas web</translation> <translation id="4170011742729630528">El servicio no se encuentra disponible; vuelve a intentarlo más tarde.</translation> +<translation id="4175173967354304331">Accederás a tu cuenta en Chrome, este sitio y las apps de Google.</translation> <translation id="4179980317383591987">Datos utilizados: <ph name="AMOUNT" /></translation> <translation id="4181841719683918333">Idiomas</translation> <translation id="4183868528246477015">Buscar con Google Lens <ph name="BEGIN_NEW" />Nuevo<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{Se completó la descarga.}other{Se completaron # descargas.}}</translation> <translation id="4766678251456904326">Agregar una cuenta al dispositivo</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Se programó 1 descarga.}other{Se programaron # descargas.}}</translation> -<translation id="478981486571169252">Verás tu estado de acceso para <ph name="SITE_NAME" />, los datos de navegación y los datos del sitio en Chrome.</translation> <translation id="4802417911091824046">La encriptación de la frase de contraseña no incluye formas de pago ni direcciones de Google Pay. Para cambiar esta configuración, <ph name="BEGIN_LINK" />restablece la sincronización<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Privacidad</translation> <translation id="5087580092889165836">Agregar tarjeta</translation> <translation id="509429900233858213">Se ha producido un error.</translation> -<translation id="5100748015044654621">Comparte el vínculo al texto destacado desde una app</translation> <translation id="510275257476243843">1 hora restante</translation> <translation id="5123685120097942451">Pestaña de incógnito</translation> <translation id="5127805178023152808">La sincronización está desactivada.</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Preguntar dónde guardar los archivos</translation> <translation id="6342069812937806050">Recién</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" /> y <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> más}other{<ph name="SHIPPING_ADDRESS_PREVIEW" /> y <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> más}}</translation> +<translation id="6345878117466430440">Marcar como leído</translation> <translation id="6364438453358674297">¿Borrar la sugerencia del historial?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> cuenta con las herramientas inteligentes y la velocidad que necesitas para completar tareas, crear contenido y explorar en línea.</translation> <translation id="6378173571450987352">Detalles: Ordenados por cantidad de datos utilizados</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Puedes borrar los datos en la Configuración de Chrome</translation> <translation id="8662811608048051533">Esta acción te hace salir de la mayoría de los sitios.</translation> <translation id="8664979001105139458">Ya existe el nombre del archivo</translation> +<translation id="8683039184091909753">imagen</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Nivel de potencia de la señal: # barra}other{Nivel de potencia de la señal: # barras}}</translation> <translation id="869891660844655955">Fecha de vencimiento</translation> <translation id="8712637175834984815">Entendido</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb index 5a9a85a..d4e959f 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Vuelve a cargar esta página sin contenido en caché</translation> <translation id="124678866338384709">Cierra la pestaña actual</translation> <translation id="1258753120186372309">Doodles de Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Lista de lectura</translation> <translation id="1266864766717917324">No se ha podido compartir: <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Toca para ampliar</translation> <translation id="1291207594882862231">Borrar el historial, las cookies, los datos de sitios web, la caché…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Toca una palabra para buscarla de forma instantánea o ver acciones relacionadas</translation> <translation id="2760989362628427051">Habilita el tema oscuro cuando esté activado el tema oscuro del dispositivo o el dispositivo esté en modo de ahorro de batería</translation> <translation id="2762000892062317888">justo ahora</translation> -<translation id="2771869497727323769">No se puede crear el enlace al texto. Comparte el enlace a la página en una aplicación.</translation> <translation id="2777555524387840389">Quedan <ph name="SECONDS" /> segundos</translation> <translation id="2779651927720337254">ha fallado</translation> <translation id="2781151931089541271">Queda 1 segundo</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">La lista de dispositivos con los que puedes compartir una pestaña está cerrada.</translation> <translation id="4149994727733219643">Vista simplificada de páginas web</translation> <translation id="4170011742729630528">El servicio no está disponible. Vuelve a intentarlo más tarde.</translation> +<translation id="4175173967354304331">Iniciarás sesión en este sitio web, en Chrome y en las aplicaciones de Google</translation> <translation id="4179980317383591987">Usados: <ph name="AMOUNT" /></translation> <translation id="4181841719683918333">Idiomas</translation> <translation id="4183868528246477015">Buscar con Google Lens <ph name="BEGIN_NEW" />Nuevo<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{Se ha completado 1 descarga.}other{Se han completado # descargas.}}</translation> <translation id="4766678251456904326">Añadir cuenta al dispositivo</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 descarga programada.}other{# descargas programadas.}}</translation> -<translation id="478981486571169252">Verás tu estado de inicio de sesión, datos de navegación y datos del sitio de <ph name="SITE_NAME" /> en Chrome.</translation> <translation id="4802417911091824046">El cifrado mediante frase de contraseña no incluye los métodos de pago ni las direcciones de Google Pay. Para cambiar esta opción, <ph name="BEGIN_LINK" />restablece la sincronización<ph name="END_LINK" />.</translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Privacidad</translation> <translation id="5087580092889165836">Añadir tarjeta</translation> <translation id="509429900233858213">Se ha producido un error.</translation> -<translation id="5100748015044654621">Comparte el enlace al texto destacado en una aplicación</translation> <translation id="510275257476243843">Queda 1 hora</translation> <translation id="5123685120097942451">Pestaña de incógnito</translation> <translation id="5127805178023152808">La sincronización está desactivada</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Preguntar dónde guardar los archivos</translation> <translation id="6342069812937806050">Justo ahora</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 y <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> más}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 y <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> más}}</translation> +<translation id="6345878117466430440">Marcar como leído</translation> <translation id="6364438453358674297">¿Eliminar sugerencia del historial?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> te ofrece las funciones inteligentes y la velocidad que necesitas para trabajar, crear y explorar de forma segura en Internet</translation> <translation id="6378173571450987352">Detalles: ordenados por cantidad de datos usados</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Puedes borrar los datos en la configuración de Chrome</translation> <translation id="8662811608048051533">Cierra tu sesión en la mayoría de los sitios web.</translation> <translation id="8664979001105139458">El nombre del archivo ya existe</translation> +<translation id="8683039184091909753">imagen</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Nivel de intensidad de la señal: # barra}other{Nivel de intensidad de la señal: # barras}}</translation> <translation id="869891660844655955">Fecha de caducidad</translation> <translation id="8712637175834984815">Listo</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb index efdfaec..4a5d2b1d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Praeguse lehe uuesti laadimine, eirates vahemälus olevat sisu</translation> <translation id="124678866338384709">Aktiivse vahelehe sulgemine</translation> <translation id="1258753120186372309">Google'i Doodle'i vigurlogo: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Lugemisloend</translation> <translation id="1266864766717917324">Üksust <ph name="CONTENT_TYPE" /> ei õnnestunud jagada</translation> <translation id="1283039547216852943">Laiendamiseks puudutage</translation> <translation id="1291207594882862231">Ajaloo, küpsiste, saidiandmete, vahemälu kustutamine …</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Puudutage sõna, et kohe otsida või seotud toiminguid näha</translation> <translation id="2760989362628427051">Aktiveeri tume teema, kui tume teema või akusäästja on seadmes sisse lülitatud</translation> <translation id="2762000892062317888">just praegu</translation> -<translation id="2771869497727323769">Teksti jaoks ei saa linki luua. Jagage rakenduses lehe linki.</translation> <translation id="2777555524387840389">Jäänud on <ph name="SECONDS" /> sekundit</translation> <translation id="2779651927720337254">ebaõnnestus</translation> <translation id="2781151931089541271">Jäänud on 1 sekund</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 allalaadimine on lõpule viidud.}other{# allalaadimist on lõpule viidud.}}</translation> <translation id="4766678251456904326">Konto lisamine seadmesse</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 allalaadimine on ajastatud.}other{# allalaadimist on ajastatud.}}</translation> -<translation id="478981486571169252">Näete Chrome'is oma saidi <ph name="SITE_NAME" /> sisselogimise olekut, sirvimisandmeid ja saidi andmeid.</translation> <translation id="4802417911091824046">Parooli krüpteerimine ei hõlma Google Pay makseviise ja aadresse. Seade muutmiseks <ph name="BEGIN_LINK" />lähtestage sünkroonimine<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">Privaatsus</translation> <translation id="5087580092889165836">Lisa kaart</translation> <translation id="509429900233858213">Tekkis viga.</translation> -<translation id="5100748015044654621">Jagage esiletõstetud teksti linki rakenduses</translation> <translation id="510275257476243843">Jäänud on 1 tund</translation> <translation id="5123685120097942451">Inkognito vaheleht</translation> <translation id="5127805178023152808">Sünkroonimine on välja lülitatud</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb index 2e14189..e7d8c51 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Kargatu orria, cacheko edukiari ez ikusi eginda</translation> <translation id="124678866338384709">Itxi uneko fitxa</translation> <translation id="1258753120186372309">Google doodle-a: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Irakurketa-zerrenda</translation> <translation id="1266864766717917324">Ezin izan da partekatu <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Sakatu zabaltzeko</translation> <translation id="1291207594882862231">Garbitu historia, cookieak, webguneen datuak, cachea…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Sakatu hitz bat bilaketa egiteko edo lotutako ekintzak ikusteko</translation> <translation id="2760989362628427051">Aktibatu gai iluna gailuaren gai iluna edo bateria-aurrezlea aktibatuta dagoenean</translation> <translation id="2762000892062317888">oraintxe</translation> -<translation id="2771869497727323769">Ezin da sortu testurako esteka. Partekatu orrirako esteka aplikazio batean.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> segundo gelditzen dira</translation> <translation id="2779651927720337254">huts egin du</translation> <translation id="2781151931089541271">Segundo bat gelditzen da</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 deskarga amaitu da.}other{# deskarga amaitu dira.}}</translation> <translation id="4766678251456904326">Gehitu kontu bat gailuan</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 deskarga programatu.}other{# deskarga programatu.}}</translation> -<translation id="478981486571169252"><ph name="SITE_NAME" /> webgunean saioa hasi duzun ala ez, arakatze-datuak, eta webguneko datuak ikusiko dituzu Chrome-n.</translation> <translation id="4802417911091824046">Pasaesaldi bidezko enkriptatzeak ez ditu hartzen barne Google Pay-ko ordainketa-metodoak eta helbideak. Ezarpena aldatzeko, <ph name="BEGIN_LINK" />berrezarri sinkronizazioa<ph name="END_LINK" />.</translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">Pribatutasuna</translation> <translation id="5087580092889165836">Gehitu txartel bat</translation> <translation id="509429900233858213">Errore bat gertatu da.</translation> -<translation id="5100748015044654621">Partekatu nabarmendutako testurako esteka aplikazio batean</translation> <translation id="510275257476243843">Ordubete gelditzen da</translation> <translation id="5123685120097942451">Ezkutuko moduko fitxa</translation> <translation id="5127805178023152808">Sinkronizazioa desaktibatuta dago</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb index 5af9841..682295544e 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">تازهسازی صفحه اصلی با نادیده گرفتن محتوای حافظه پنهان</translation> <translation id="124678866338384709">بستن برگه کنونی</translation> <translation id="1258753120186372309">Google doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">فهرست خواندن</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> همرسانی نشد</translation> <translation id="1283039547216852943">برای بزرگ کردن ضربه بزنید</translation> <translation id="1291207594882862231">پاک کردن سابقه، کوکیها، دادههای سایت، حافظه پنهان…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">برای جستجوی فوری، روی کلمهای ضربه بزنید یا اقدامهای مرتبط را ببینید</translation> <translation id="2760989362628427051">روشن شدن طرح زمینه تیره وقتی طرح زمینه تیره دستگاه یا «بهینهسازی باتری» روشن است</translation> <translation id="2762000892062317888">هماکنون</translation> -<translation id="2771869497727323769">نمیتوان پیوند نوشتار را ایجاد کرد. پیوند صفحه را در برنامهای همرسانی کنید.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> ثانیه باقیمانده است</translation> <translation id="2779651927720337254">انجام نشد</translation> <translation id="2781151931089541271">۱ ثانیه باقیمانده است</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">فهرست دستگاههایی که میتوان با آنها برگه همرسانی کرد، بسته است.</translation> <translation id="4149994727733219643">نمای سادهشده برای صفحههای وب</translation> <translation id="4170011742729630528">این سرویس در دسترس نیست؛ بعداً دوباره امتحان کنید.</translation> +<translation id="4175173967354304331">به سیستم این سایت، Chrome، و برنامههای Google وارد خواهید شد</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> استفادهشده</translation> <translation id="4181841719683918333">زبانها</translation> <translation id="4183868528246477015">جستجو با «لنز Google» <ph name="BEGIN_NEW" />جدید<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{۱ بارگیری کامل شد.}one{# بارگیری کامل شد.}other{# بارگیری کامل شد.}}</translation> <translation id="4766678251456904326">افزودن حساب به دستگاه</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{۱ بارگیری زمانبندی شد.}one{# بارگیری زمانبندی شد.}other{# بارگیری زمانبندی شد.}}</translation> -<translation id="478981486571169252">وضعیت ورود به سیستم <ph name="SITE_NAME" />، دادههای محصول مرور، و دادههای سایت را در Chrome خواهید دید</translation> <translation id="4802417911091824046">رمزگذاری عبارت ورود شامل روشهای پرداخت و نشانیهای موجود در Google Pay نمیشود. برای تغییر این تنظیم، <ph name="BEGIN_LINK" />همگامسازی را بازنشانی کنید<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">حریمخصوصی</translation> <translation id="5087580092889165836">افزودن کارت</translation> <translation id="509429900233858213">خطایی روی داد.</translation> -<translation id="5100748015044654621">پیوند نوشتار برجسته را در برنامهای همرسانی کنید</translation> <translation id="510275257476243843">۱ ساعت باقیمانده است</translation> <translation id="5123685120097942451">برگه ناشناس</translation> <translation id="5127805178023152808">همگامسازی خاموش است</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">مکان ذخیره شدن فایلها پرسیده شود</translation> <translation id="6342069812937806050">فقط اکنون</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 و <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> نشانی دیگر}one{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 و <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> نشانی دیگر}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 و <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> نشانی دیگر}}</translation> +<translation id="6345878117466430440">علامتگذاری بهعنوان خواندهشده</translation> <translation id="6364438453358674297">پیشنهاد از سابقه حذف شود؟</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> هوشمندیها و سرعتی دارد که برای انجام، ایجاد، و کاوش ایمن در اینترنت نیاز دارید.</translation> <translation id="6378173571450987352">جزئیات: مرتبشده براساس مقدار داده استفادهشده</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">میتوانید دادهها را در تنظیمات Chrome پاک کنید</translation> <translation id="8662811608048051533">شما را از سیستم اکثر سایتها خارج میکند.</translation> <translation id="8664979001105139458">نام فایل از قبل وجود دارد</translation> +<translation id="8683039184091909753">تصویر</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{سطح قدرت سیگنال: # نوار}one{سطح قدرت سیگنال: # نوار}other{سطح قدرت سیگنال: # نوار}}</translation> <translation id="869891660844655955">تاریخ انقضا</translation> <translation id="8712637175834984815">متوجه شدم</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb index bad571d..4f7f804 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Päivitä nykyinen sivu, ohita välimuistin sisältö</translation> <translation id="124678866338384709">Sulje nykyinen välilehti</translation> <translation id="1258753120186372309">Google-piirros: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Lukulista</translation> <translation id="1266864766717917324">Jakaminen epäonnistui: <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Laajenna napauttamalla.</translation> <translation id="1291207594882862231">Tyhjennä historia, evästeet, sivustojen tiedot, välimuisti ja niin edelleen.</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Napauta sanaa etsiäksesi välittömästi tai nähdäksesi asiaan liittyviä toimia.</translation> <translation id="2760989362628427051">Ota tumma teema käyttöön, kun laitteen tumma teema tai virransäästö on käytössä</translation> <translation id="2762000892062317888">äsken</translation> -<translation id="2771869497727323769">Tekstiin linkittäminen ei onnistu. Jaa linkki sivuun sovelluksesta.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> sekuntia jäljellä</translation> <translation id="2779651927720337254">epäonnistui</translation> <translation id="2781151931089541271">1 sekunti jäljellä</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 lataus on valmis}other{# latausta on valmiina}}</translation> <translation id="4766678251456904326">Lisää tili laitteelle</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 lataus ajoitettu}other{# latausta ajoitettu}}</translation> -<translation id="478981486571169252">Näet kirjautumisen tilan, selausdatan ja sivustodatan (<ph name="SITE_NAME" />) Chromessa.</translation> <translation id="4802417911091824046">Google Payn maksutapoja tai osoitteita ei salata tunnuslauseella. Jos haluat muokata asetusta, <ph name="BEGIN_LINK" />nollaa synkronointi<ph name="END_LINK" />.</translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">Tietosuoja</translation> <translation id="5087580092889165836">Lisää kortti</translation> <translation id="509429900233858213">Tapahtui virhe.</translation> -<translation id="5100748015044654621">Jaa linkki korostettuun tekstiin sovelluksesta</translation> <translation id="510275257476243843">1 tunti jäljellä</translation> <translation id="5123685120097942451">Incognito-välilehti</translation> <translation id="5127805178023152808">Synkronointi on pois päältä</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb index 2221f11..6c3beea 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">I-reload ang page, balewalain ang cached content</translation> <translation id="124678866338384709">Isara ang kasalukuyang tab</translation> <translation id="1258753120186372309">Google doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Listahan ng babasahin</translation> <translation id="1266864766717917324">Hindi maibahagi ang <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">I-tap upang palawakin</translation> <translation id="1291207594882862231">I-clear ang history, cookies, site data, cache…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Mag-tap ng salita upang hanapin agad ito o tingnan ang mga nauugnay na pagkilos</translation> <translation id="2760989362628427051">I-on ang madilim na tema kapag naka-on ang madilim na tema o Pangtipid sa Baterya ng iyong device</translation> <translation id="2762000892062317888">ngayon lang</translation> -<translation id="2771869497727323769">Hindi makagawa ng link sa text. Ibahagi sa isang app ang link sa page.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> (na) segundo na lang ang natitira</translation> <translation id="2779651927720337254">nabigo</translation> <translation id="2781151931089541271">1 segundo na lang ang natitira</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{Tapos na ang 1 pag-download.}one{Tapos na ang # pag-download.}other{Tapos na ang # na pag-download.}}</translation> <translation id="4766678251456904326">Magdagdag ng account sa device</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 download ang nakaiskedyul.}one{# download ang nakaiskedyul.}other{# na download ang nakaiskedyul.}}</translation> -<translation id="478981486571169252">Makikita mo sa Chrome ang iyong status ng pag-sign in sa <ph name="SITE_NAME" />, data mula sa pag-browse, at data ng site.</translation> <translation id="4802417911091824046">Hindi kasama sa pag-encrypt ng passphrase ang mga paraan ng pagbabayad at address mula sa Google Pay. Para baguhin ang setting na ito, <ph name="BEGIN_LINK" />i-reset ang pag-sync<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">Privacy</translation> <translation id="5087580092889165836">Magdagdag ng card</translation> <translation id="509429900233858213">May naganap na error.</translation> -<translation id="5100748015044654621">Ibahagi sa isang app ang link sa naka-highlight na text</translation> <translation id="510275257476243843">1 oras na lang ang natitira</translation> <translation id="5123685120097942451">Tab na incognito</translation> <translation id="5127805178023152808">Naka-off ang pag-sync</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb index e290cae..d509e74 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Actualiser la page, ignorer le contenu mis en cache</translation> <translation id="124678866338384709">Fermer l'onglet actuel</translation> <translation id="1258753120186372309">Logo commémoratif de Google : <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Liste de lecture</translation> <translation id="1266864766717917324">Partage impossible du contenu suivant : <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Toucher pour développer</translation> <translation id="1291207594882862231">Effacer l'historique, les témoins, les données de site, le cache…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Touchez un mot pour lancer une recherche instantanée ou afficher les actions associées</translation> <translation id="2760989362628427051">Activer le thème sombre lorsque le thème sombre ou la fonction Économiseur de pile de votre appareil est activé</translation> <translation id="2762000892062317888">à l'instant</translation> -<translation id="2771869497727323769">Impossible de créer un lien vers le texte. Partagez un lien menant à la page dans une application.</translation> <translation id="2777555524387840389">Il reste <ph name="SECONDS" /> secondes</translation> <translation id="2779651927720337254">échec</translation> <translation id="2781151931089541271">Il reste 1 s</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">La liste d'appareils avec lesquels partager un onglet est fermée.</translation> <translation id="4149994727733219643">Affichage simplifié pour les pages Web</translation> <translation id="4170011742729630528">Le service n'est pas disponible. Veuillez réessayer plus tard.</translation> +<translation id="4175173967354304331">Vous serez connecté à ce site, à Chrome et aux applications Google</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> utilisé(s)</translation> <translation id="4181841719683918333">Langues</translation> <translation id="4183868528246477015"><ph name="BEGIN_NEW" />Nouv.<ph name="END_NEW" /> Rech. avec Lentille Google</translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 téléchargement terminé.}one{# téléchargement terminé.}other{# téléchargements terminés.}}</translation> <translation id="4766678251456904326">Ajouter un compte à l'appareil</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 téléchargement programmé.}one{# téléchargement programmé.}other{# téléchargements programmés.}}</translation> -<translation id="478981486571169252">Vous verrez votre état de connexion à <ph name="SITE_NAME" />, vos données de navigation et vos données de site dans Chrome.</translation> <translation id="4802417911091824046">Le chiffrement par phrase de passe ne couvre pas les modes de paiement ni les adresses de Google Pay. Pour modifier ce paramètre, <ph name="BEGIN_LINK" />réinitialisez la synchronisation<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Confidentialité</translation> <translation id="5087580092889165836">Ajouter une carte</translation> <translation id="509429900233858213">Une erreur s'est produite.</translation> -<translation id="5100748015044654621">Partager le lien menant au texte mis en évidence dans une application</translation> <translation id="510275257476243843">Il reste 1 heure</translation> <translation id="5123685120097942451">Onglet de navigation privée</translation> <translation id="5127805178023152808">La synchronisation est désactivée</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Demander où enregistrer les fichiers</translation> <translation id="6342069812937806050">À l'instant</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 et <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> autre adresse}one{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 et <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> autre adresse}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 et <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> autres adresses}}</translation> +<translation id="6345878117466430440">Marquer comme lu</translation> <translation id="6364438453358674297">Supprimer la suggestion de l'historique?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> possède les fonctionnalités et la vitesse dont vous avez besoin pour accomplir des actions, pour créer et pour explorer en ligne</translation> <translation id="6378173571450987352">Détails : triés par quantité de données utilisées</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Vous pouvez effacer les données dans les paramètres de Chrome</translation> <translation id="8662811608048051533">Vous déconnecte de la plupart des sites.</translation> <translation id="8664979001105139458">Ce nom de fichier existe déjà</translation> +<translation id="8683039184091909753">image</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Niveau du signal : # barre}one{Niveau du signal : # barre}other{Niveau du signal : # barres}}</translation> <translation id="869891660844655955">Date d'expiration</translation> <translation id="8712637175834984815">OK</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb index 75509e8..05233a50 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Actualiser page active et ignorer contenu en cache</translation> <translation id="124678866338384709">Fermer l'onglet actuel</translation> <translation id="1258753120186372309">Doodle : <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Liste de lecture</translation> <translation id="1266864766717917324">Impossible de partager le contenu suivant : <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Appuyer pour développer</translation> <translation id="1291207594882862231">Efface l'historique, vider le cache, supprimer les cookies et les données de site…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Appuyez sur un mot pour lancer une recherche instantanée ou afficher les actions associées</translation> <translation id="2760989362628427051">Activer le thème sombre lorsque le thème sombre ou l'économiseur de batterie de votre appareil est activé</translation> <translation id="2762000892062317888">à l'instant</translation> -<translation id="2771869497727323769">Impossible de créer un lien vers le texte en surbrillance. Partagez un lien vers l'intégralité d'une page dans une application.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> secondes restantes</translation> <translation id="2779651927720337254">échec</translation> <translation id="2781151931089541271">1 seconde restante</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">La liste des appareils avec lesquels vous pouvez partager un onglet est fermée.</translation> <translation id="4149994727733219643">Vue simplifiée pour les pages Web</translation> <translation id="4170011742729630528">Service indisponible. Veuillez réessayer plus tard.</translation> +<translation id="4175173967354304331">Vous serez connecté à ce site, à Chrome et aux applications Google</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> utilisé(s)</translation> <translation id="4181841719683918333">Langues</translation> <translation id="4183868528246477015">Utiliser Google Lens <ph name="BEGIN_NEW" />Nouveau<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 téléchargement terminé.}one{# téléchargement terminé.}other{# téléchargements terminés.}}</translation> <translation id="4766678251456904326">Ajouter un compte à l'appareil</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 téléchargement planifié.}one{# téléchargement planifié.}other{# téléchargements planifié.}}</translation> -<translation id="478981486571169252">Vous verrez votre état de connexion à <ph name="SITE_NAME" /> ainsi que vos données de navigation et les données des sites dans Chrome.</translation> <translation id="4802417911091824046">Le chiffrement par phrase secrète ne s'applique pas aux modes de paiement et adresses Google Pay. Pour modifier ce paramètre, <ph name="BEGIN_LINK" />réinitialisez la synchronisation<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Confidentialité</translation> <translation id="5087580092889165836">Ajouter une carte</translation> <translation id="509429900233858213">Une erreur s'est produite.</translation> -<translation id="5100748015044654621">Partagez dans une application le lien vers le texte en surbrillance</translation> <translation id="510275257476243843">1 heure restante</translation> <translation id="5123685120097942451">Onglet de navigation privée</translation> <translation id="5127805178023152808">La synchronisation est désactivée.</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Demander où enregistrer les fichiers</translation> <translation id="6342069812937806050">À l'instant</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 et <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> de plus}one{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 et <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> de plus}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 et <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> de plus}}</translation> +<translation id="6345878117466430440">Marquer comme lu</translation> <translation id="6364438453358674297">Supprimer la suggestion de l'historique ?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> vous offre des fonctionnalités intelligentes et une rapidité à toute épreuve pour agir, créer et naviguer en toute sécurité sur le Web</translation> <translation id="6378173571450987352">Détails : tri effectué par volume de données utilisées</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Vous pouvez effacer les données dans les paramètres Chrome</translation> <translation id="8662811608048051533">Vous déconnecte de la plupart des sites.</translation> <translation id="8664979001105139458">Nom de fichier déjà attribué</translation> +<translation id="8683039184091909753">image</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Intensité du signal : # barre}one{Intensité du signal : # barre}other{Intensité du signal : # barres}}</translation> <translation id="869891660844655955">Date d'expiration</translation> <translation id="8712637175834984815">OK</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb index 3005593..5c2a440 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Cargar a páxina, ignorando o contido da caché</translation> <translation id="124678866338384709">Pechar a pestana actual</translation> <translation id="1258753120186372309">Doodle de Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Lista de lectura</translation> <translation id="1266864766717917324">Non se puido compartir este contido: <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Toca para despregar</translation> <translation id="1291207594882862231">Borrar o historial, as cookies, os datos dos sitios, a memoria caché…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Toca unha palabra para realizar buscas de forma instantánea ou ver accións relacionadas</translation> <translation id="2760989362628427051">Activa o tema escuro cando o teu dispositivo teña activado o tema escuro ou a función Aforro de batería</translation> <translation id="2762000892062317888">agora</translation> -<translation id="2771869497727323769">Non se puido crear unha ligazón ao texto. Comparte a ligazón á páxina a través dunha aplicación.</translation> <translation id="2777555524387840389">Quedan <ph name="SECONDS" /> segundos</translation> <translation id="2779651927720337254">produciuse un erro</translation> <translation id="2781151931089541271">Queda 1 segundo</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 descarga completada.}other{# descargas completadas.}}</translation> <translation id="4766678251456904326">Engadir conta ao dispositivo</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Hai 1 descarga programada.}other{Hai # descargas programadas.}}</translation> -<translation id="478981486571169252">Poderás ver o teu estado de inicio de sesión en <ph name="SITE_NAME" />, os teus datos de navegación e os datos do sitio en Chrome.</translation> <translation id="4802417911091824046">A encriptación mediante frase de acceso non inclúe métodos de pago nin enderezos de Google Pay. Para cambiar esta opción de configuración, deberás <ph name="BEGIN_LINK" />restablecer a sincronización<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">Privacidade</translation> <translation id="5087580092889165836">Engadir tarxeta</translation> <translation id="509429900233858213">Produciuse un erro.</translation> -<translation id="5100748015044654621">Comparte a ligazón ao texto destacado a través dunha aplicación</translation> <translation id="510275257476243843">Queda 1 hora</translation> <translation id="5123685120097942451">Pestana do modo de incógnito</translation> <translation id="5127805178023152808">A sincronización está desactivada</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb index 5b3fa4d..217c11c 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">કૅશ કરેલ કન્ટેન્ટને અવગણીને વર્તમાન પેજ ફરીથી લોડ કરો</translation> <translation id="124678866338384709">વર્તમાન ટૅબ બંધ કરો</translation> <translation id="1258753120186372309">Google ડૂડલ: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">વાચન સૂચિ</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> શેર કરી શકાયો નથી</translation> <translation id="1283039547216852943">વિસ્તૃત કરવા માટે ટૅપ કરો</translation> <translation id="1291207594882862231">ઇતિહાસ, કુકી, સાઇટ ડેટા, કૅશ સાફ કરો…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">ઝટપટ શોધ કરવા માટે શબ્દ પર ટૅપ કરો અથવા સંબંધિત ક્રિયાઓ જુઓ</translation> <translation id="2760989362628427051">જ્યારે તમારા ડિવાઇસની ઘેરી થીમ અથવા બૅટરી સેવર ચાલુ હોય ત્યારે ઘેરી થીમ ચાલુ કરો</translation> <translation id="2762000892062317888">હમણાં જ</translation> -<translation id="2771869497727323769">આ ટેક્સ્ટની લિંક બનાવી શકાતી નથી. કોઈ ઍપમાં આ પેજની લિંક શેર કરો.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> સેકંડ બાકી</translation> <translation id="2779651927720337254">નિષ્ફળ થયું</translation> <translation id="2781151931089541271">1 સેકંડ બાકી</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 ડાઉનલોડ પૂર્ણ થયું.}one{# ડાઉનલોડ પૂર્ણ થયું.}other{# ડાઉનલોડ પૂર્ણ થયાં.}}</translation> <translation id="4766678251456904326">ડિવાઇસમાં એકાઉન્ટ ઉમેરો</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 ડાઉનલોડ શેડ્યૂલ થયું છે.}one{# ડાઉનલોડ શેડ્યૂલ થયાં છે.}other{# ડાઉનલોડ શેડ્યૂલ થયાં છે.}}</translation> -<translation id="478981486571169252">તમને Chromeમાં તમારું <ph name="SITE_NAME" /> સાઇન ઇન સ્ટેટસ, બ્રાઉઝિંગ ડેટા અને સાઇટ ડેટા દેખાશે.</translation> <translation id="4802417911091824046">પાસફ્રેઝ એન્ક્રિપ્શનમાં Google Payની ચુકવણી પદ્ધતિઓ અને ઍડ્રેસ સામેલ હોતા નથી. આ સેટિંગ બદલવા માટે, <ph name="BEGIN_LINK" />સિંકને રીસેટ કરો<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">પ્રાઇવસી</translation> <translation id="5087580092889165836">કાર્ડ ઉમેરો</translation> <translation id="509429900233858213">કોઈ ભૂલ આવી છે.</translation> -<translation id="5100748015044654621">હાઇલાઇટ કરેલી ટેક્સ્ટને કોઈ ઍપમાં લિંક બનાવીને શેર કરો</translation> <translation id="510275257476243843">1 કલાક બાકી</translation> <translation id="5123685120097942451">છૂપા મોડમાંની ટૅબ</translation> <translation id="5127805178023152808">સમન્વયન બંધ છે</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb index 006ec8d..d3ef2fd5 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">कैश सामग्री को अनदेखा कर, मौजूदा पेज फिर लोड करें</translation> <translation id="124678866338384709">वर्तमान टैब को बंद करें</translation> <translation id="1258753120186372309">Google doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">पठन सूची</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> शेयर नहीं किया जा सका</translation> <translation id="1283039547216852943">पूरा खोलने के लिए टैप करें</translation> <translation id="1291207594882862231">इतिहास, कुकी, साइट डेटा, कैश साफ़ करें…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">इंस्टैंट सर्च या मिलती-जुलती कार्रवाई देखने के लिए किसी शब्द पर टैप करें</translation> <translation id="2760989362628427051">अपने डिवाइस की गहरे रंग वाली थीम या 'बैटरी सेवर' चालू होने पर गहरे रंग वाली थीम चालू करें</translation> <translation id="2762000892062317888">अभी-अभी</translation> -<translation id="2771869497727323769">हाइलाइट किए गए टेक्स्ट का लिंक नहीं बनाया जा सकता. पेज के लिंक को किसी ऐप्लिकेशन में शेयर करें.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> सेकंड शेष</translation> <translation id="2779651927720337254">डाउनलोड नहीं हो सका</translation> <translation id="2781151931089541271">1 सेकंड शेष</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 डाउनलोड पूरा हुआ.}one{# डाउनलोड पूरे हुए.}other{# डाउनलोड पूरे हुए.}}</translation> <translation id="4766678251456904326">डिवाइस पर खाता जोड़ें</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 डाउनलोड शेड्यूल किया गया.}one{# डाउनलोड शेड्यूल किया गया.}other{# डाउनलोड शेड्यूल किए गए.}}</translation> -<translation id="478981486571169252">आप Chrome में अपनी <ph name="SITE_NAME" /> की साइन इन स्थिति, ब्राउज़िंग डेटा, और साइट डेटा देख पाएंगे.</translation> <translation id="4802417911091824046">लंबा पासवर्ड सुरक्षित करने में Google Pay से भुगतान करने के तरीके और पते शामिल नहीं हैं. यह सेटिंग बदलने के लिए, <ph name="BEGIN_LINK" />सिंक रीसेट करें<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">निजता</translation> <translation id="5087580092889165836">कार्ड जोड़ें</translation> <translation id="509429900233858213">कोई गड़बड़ी हुई.</translation> -<translation id="5100748015044654621">हाइलाइट किए गए टेक्स्ट के लिंक को किसी ऐप्लिकेशन में शेयर करें</translation> <translation id="510275257476243843">1 घंटा शेष</translation> <translation id="5123685120097942451">गुप्त टैब</translation> <translation id="5127805178023152808">समन्वयन बंद है</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb index a450ff8..955506b 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Ponovno učitavanje trenutačne stranice uz zanemarivanje sadržaja iz predmemorije</translation> <translation id="124678866338384709">Zatvaranje trenutačne kartice</translation> <translation id="1258753120186372309">Googleov doodle logotip: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Popis za čitanje</translation> <translation id="1266864766717917324">Nije moguće podijeliti <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Dodirnite za proširivanje</translation> <translation id="1291207594882862231">Brisanje povijesti, kolačića, podataka web-lokacija, predmemorije...</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Dodirnite riječ da biste je odmah pretražili ili vidjeli povezane radnje</translation> <translation id="2760989362628427051">Uključite tamnu temu kada je na uređaju uključena tamna tema ili Štednja baterije</translation> <translation id="2762000892062317888">upravo sada</translation> -<translation id="2771869497727323769">Izrada veze na tekst nije uspjela. Podijelite vezu na stranicu u aplikaciji.</translation> <translation id="2777555524387840389">Preostalo sekundi: <ph name="SECONDS" /></translation> <translation id="2779651927720337254">nije uspjelo</translation> <translation id="2781151931089541271">Još 1 s</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 preuzimanje dovršeno.}one{# preuzimanje dovršeno.}few{# preuzimanja dovršena.}other{# preuzimanja dovršeno.}}</translation> <translation id="4766678251456904326">Dodajte račun uređaju</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Zakazano je jedno preuzimanje.}one{Zakazano je # preuzimanje.}few{Zakazana su # preuzimanja.}other{Zakazano je # preuzimanja.}}</translation> -<translation id="478981486571169252">Vidjet ćete svoj status prijave na <ph name="SITE_NAME" />, podatke o pregledavanju i podatke web-lokacija u Chromeu.</translation> <translation id="4802417911091824046">Enkripcija šifrom ne uključuje načine plaćanja i adrese s Google Paya. Da biste promijenili tu postavku, <ph name="BEGIN_LINK" />poništite sinkronizaciju<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">Privatnost</translation> <translation id="5087580092889165836">Dodaj karticu</translation> <translation id="509429900233858213">Došlo je do pogreške.</translation> -<translation id="5100748015044654621">Podijelite vezu na istaknuti tekst u aplikaciji</translation> <translation id="510275257476243843">Još 1 sat</translation> <translation id="5123685120097942451">Anonimna kartica</translation> <translation id="5127805178023152808">Sinkronizacija je isključena</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb index 60037c56..200f109 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Oldal újratöltése a gyorsítótárat figyelmen kívül hagyva</translation> <translation id="124678866338384709">Az aktuális lap bezárása</translation> <translation id="1258753120186372309">Google ünnepi embléma: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Olvasási lista</translation> <translation id="1266864766717917324">Nem sikerült a(z) <ph name="CONTENT_TYPE" /> megosztása</translation> <translation id="1283039547216852943">Koppintson a kibontáshoz</translation> <translation id="1291207594882862231">Előzmények, cookie-k, webhelyadatok és a gyorsítótár törlése…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Az azonnali kereséshez koppintson a kívánt szóra, vagy tekintse meg a kapcsolódó műveleteket</translation> <translation id="2760989362628427051">Sötét téma bekapcsolása, amikor az eszköz sötét témája vagy Akkumulátorkímélő módja be van kapcsolva</translation> <translation id="2762000892062317888">éppen most</translation> -<translation id="2771869497727323769">Nem lehet linket létrehozni a szöveghez. Ossza meg az oldal linkjét a kívánt alkalmazásban.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> másodperc van hátra</translation> <translation id="2779651927720337254">sikertelen</translation> <translation id="2781151931089541271">1 másodperc van hátra</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 letöltés befejeződött.}other{# letöltés befejeződött.}}</translation> <translation id="4766678251456904326">Fiók hozzáadása az eszközhöz</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 ütemezett letöltés.}other{# ütemezett letöltés.}}</translation> -<translation id="478981486571169252">Láthatja a(z) <ph name="SITE_NAME" /> bejelentkezési állapotát, a böngészőadatokat és a webhelyadatokat a Chrome-ban.</translation> <translation id="4802417911091824046">Az összetett jelszavas titkosítás nem tartalmazza a Google Payben megadott fizetési módokat és címeket. A beállítás módosításához <ph name="BEGIN_LINK" />állítsa vissza a szinkronizálást<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">Adatvédelem</translation> <translation id="5087580092889165836">Kártya hozzáadása</translation> <translation id="509429900233858213">Hiba történt.</translation> -<translation id="5100748015044654621">Ossza meg a kiemelt szöveg linkjét a kívánt alkalmazásban</translation> <translation id="510275257476243843">1 óra van hátra</translation> <translation id="5123685120097942451">Inkognitó lap</translation> <translation id="5127805178023152808">Szinkronizálás kikapcsolva</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb index 75f5a437..f98bea3 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Վերաբեռնել ընթացիկ էջը` անտեսելով հիշապահեստի բովանդակությունը</translation> <translation id="124678866338384709">Փակել ընթացիկ ներդիրը</translation> <translation id="1258753120186372309">Google doodle՝ <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Ընթերցանության ցանկ</translation> <translation id="1266864766717917324">Չհաջողվեց ուղարկել բովանդակությունը (<ph name="CONTENT_TYPE" />)</translation> <translation id="1283039547216852943">Հպեք՝ ընդարձակելու համար</translation> <translation id="1291207594882862231">Մաքրել պատմությունը, քուքիները, կայքի տվյալները, քեշը…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Հպեք բառին՝ ակնթարթորեն որոնելու կամ առնչվող գործողությունները տեսնելու համար</translation> <translation id="2760989362628427051">Միացնել մուգ թեման, երբ սարքի մուգ թեման կամ մարտկոցի տնտեսման ռեժիմը միացված է</translation> <translation id="2762000892062317888">հենց նոր</translation> -<translation id="2771869497727323769">Չհաջողվեց ստեղծել տեքստի հղում։ Կիսվեք հղումով որևէ հավելվածի էջում։</translation> <translation id="2777555524387840389">Մնացել է <ph name="SECONDS" /> վրկ</translation> <translation id="2779651927720337254">չհաջողվեց ներբեռնել</translation> <translation id="2781151931089541271">Մնացել է 1 վրկ</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 ֆայլ ներբեռնվեց։}one{# ֆայլ ներբեռնվեց։}other{# ֆայլ ներբեռնվեց։}}</translation> <translation id="4766678251456904326">Սարքում հաշիվ ավելացնել</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 պլանավորված ներբեռնում}one{# պլանավորված ներբեռնում}other{# պլանավորված ներբեռնում}}</translation> -<translation id="478981486571169252">Դուք կտեսնեք ձեր <ph name="SITE_NAME" /> հաշվի մուտքի կարգավիճակը, այցելությունների պատմությունը և կայքի տվյալները Chrome-ում։</translation> <translation id="4802417911091824046">Անցաբառով գաղտնագրումը չի կիրառվում վճարման եղանակների և Google Pay-ի հասցեների համար։ Այս կարգավորումը փոփոխելու համար <ph name="BEGIN_LINK" />վերակայեք համաժամացումը<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">Գաղտնիություն</translation> <translation id="5087580092889165836">Ավելացնել քարտ</translation> <translation id="509429900233858213">Սխալ առաջացավ:</translation> -<translation id="5100748015044654621">Կիսվեք նշված տեքստի հղումով որևէ հավելվածում</translation> <translation id="510275257476243843">Մնացել է 1 ժամ</translation> <translation id="5123685120097942451">Ինկոգնիտո ներդիր</translation> <translation id="5127805178023152808">Համաժամացումն անջատված է</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb index c485b0e..3d5958c4 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Memuat ulang halaman, mengabaikan konten dalam cache</translation> <translation id="124678866338384709">Menutup tab aktif</translation> <translation id="1258753120186372309">Google doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Daftar bacaan</translation> <translation id="1266864766717917324">Tidak dapat membagikan <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Ketuk untuk meluaskan</translation> <translation id="1291207594882862231">Menghapus histori, cookie, data situs, cache...</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Ketuk sebuah kata untuk menelusuri secara instan atau melihat tindakan terkait</translation> <translation id="2760989362628427051">Mengaktifkan tema gelap ketika tema gelap perangkat atau Penghemat Baterai aktif</translation> <translation id="2762000892062317888">baru saja</translation> -<translation id="2771869497727323769">Tidak dapat membuat link ke teks. Bagikan link ke halaman dalam aplikasi.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> detik lagi</translation> <translation id="2779651927720337254">gagal</translation> <translation id="2781151931089541271">1 detik lagi</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Daftar perangkat yang dapat digunakan untuk berbagi tab tertutup.</translation> <translation id="4149994727733219643">Tampilan sederhana untuk halaman web</translation> <translation id="4170011742729630528">Layanan tidak tersedia; coba lagi nanti.</translation> +<translation id="4175173967354304331">Anda akan login ke situs ini, Chrome, dan aplikasi Google</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> digunakan</translation> <translation id="4181841719683918333">Bahasa</translation> <translation id="4183868528246477015">Telusuri dgn Google Lens <ph name="BEGIN_NEW" />Baru<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 download selesai.}other{# download selesai.}}</translation> <translation id="4766678251456904326">Tambahkan akun ke perangkat</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 download dijadwalkan.}other{# download dijadwalkan.}}</translation> -<translation id="478981486571169252">Di Chrome, Anda akan melihat status login, data penjelajahan, dan data situs <ph name="SITE_NAME" />.</translation> <translation id="4802417911091824046">Enkripsi frasa sandi tidak mencakup alamat dan metode pembayaran dari Google Pay. Untuk mengubah setelan ini, <ph name="BEGIN_LINK" />reset sinkronisasi<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Privasi</translation> <translation id="5087580092889165836">Tambahkan kartu</translation> <translation id="509429900233858213">Terjadi kesalahan.</translation> -<translation id="5100748015044654621">Bagikan link ke teks yang diperjelas dalam aplikasi</translation> <translation id="510275257476243843">1 jam lagi</translation> <translation id="5123685120097942451">Tab samaran</translation> <translation id="5127805178023152808">Sinkronisasi nonaktif</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Tanya lokasi menyimpan file</translation> <translation id="6342069812937806050">Baru saja</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 dan <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> lainnya}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 dan <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> lainnya}}</translation> +<translation id="6345878117466430440">Tandai telah dibaca</translation> <translation id="6364438453358674297">Hapus saran dari histori?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> memiliki kecanggihan dan kecepatan yang Anda perlukan untuk beraktivitas, berkreasi, dan menjelajah secara online dengan aman</translation> <translation id="6378173571450987352">Detail: Diurutkan menurut jumlah kuota yang digunakan</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Anda dapat menghapus data di Setelan Chrome</translation> <translation id="8662811608048051533">Membuat Anda logout dari sebagian besar situs.</translation> <translation id="8664979001105139458">Nama file sudah ada</translation> +<translation id="8683039184091909753">gambar</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Tingkat Kekuatan Sinyal: # batang}other{Tingkat Kekuatan Sinyal: # batang}}</translation> <translation id="869891660844655955">Masa berlaku</translation> <translation id="8712637175834984815">Mengerti</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb index 8f39824..8eb9b29 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Endurhlaða núverandi síðu, hunsa efni í skyndiminni</translation> <translation id="124678866338384709">Loka núverandi flipa</translation> <translation id="1258753120186372309">Google dúlla: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Leslisti</translation> <translation id="1266864766717917324">Ekki tókst að deila <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Ýttu til að stækka</translation> <translation id="1291207594882862231">Hreinsa feril, fótspor, svæði, gögn, skyndiminni…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Ýttu á orð til að leita að því eða sjá tengdar aðgerðir</translation> <translation id="2760989362628427051">Kveikja á dökku þema þegar kveikt er á dökku þema eða rafhlöðusparnaði í tækinu</translation> <translation id="2762000892062317888">rétt í þessu</translation> -<translation id="2771869497727323769">Ekki er hægt að búa til tengil í texta. Deildu tengli á síðuna í forriti.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> sek. eftir</translation> <translation id="2779651927720337254">mistókst</translation> <translation id="2781151931089541271">Ein sek. eftir</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Tækjalisti fyrir deilingu flipa er lokaður.</translation> <translation id="4149994727733219643">Einfaldað yfirlit fyrir vefsíður</translation> <translation id="4170011742729630528">Þjónustan er ekki aðgengileg; reyndu aftur síðar.</translation> +<translation id="4175173967354304331">Þú verður skráð(ur) inn á þetta vefsvæði, Chrome og Google forrit</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> notuð</translation> <translation id="4181841719683918333">Tungumál</translation> <translation id="4183868528246477015">Leita með Google linsu <ph name="BEGIN_NEW" />Nýtt<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{Ein skrá var sótt.}one{# skrá var sótt.}other{# skrár voru sóttar.}}</translation> <translation id="4766678251456904326">Bæta reikningi við tæki</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 niðurhal á áætlun.}one{# niðurhal á áætlun.}other{# niðurhal á áætlun.}}</translation> -<translation id="478981486571169252">Þú sérð innskráningarstöðu þína, vafragögn og vefsvæðagögn fyrir <ph name="SITE_NAME" /> í Chrome.</translation> <translation id="4802417911091824046">Dulkóðun aðgangsorðs inniheldur ekki greiðslumáta og heimilisföng af Google Pay. Til að breyta þessari stillingu skaltu <ph name="BEGIN_LINK" />endurstilla samstillingu<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Persónuvernd</translation> <translation id="5087580092889165836">Bæta við korti</translation> <translation id="509429900233858213">Villa kom upp.</translation> -<translation id="5100748015044654621">Deildu tengli á auðkennda textann í forriti</translation> <translation id="510275257476243843">Ein klst. eftir</translation> <translation id="5123685120097942451">Huliðsflipi</translation> <translation id="5127805178023152808">Slökkt er á samstillingu</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Spyja hvar á að vista skrár</translation> <translation id="6342069812937806050">Rétt í þessu</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 og <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> í viðbót}one{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 og <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> í viðbót}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 og <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> í viðbót}}</translation> +<translation id="6345878117466430440">Merkja sem lesið</translation> <translation id="6364438453358674297">Fjarlægja tillögu úr ferlinum?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> býr yfir því hugviti og þeim hraða sem þú þarft að hafa þegar þú vafrar, skapar og skoðar á netinu</translation> <translation id="6378173571450987352">Upplýsingar: Raðað eftir gagnanotkun</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Þú getur hreinsað gögnin í stillingum Chrome</translation> <translation id="8662811608048051533">Skráir þig út af flestum vefsvæðum.</translation> <translation id="8664979001105139458">Skráarheiti er þegar til</translation> +<translation id="8683039184091909753">mynd</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Sendistyrkur: # stika}one{Sendistyrkur: # stika}other{Sendistyrkur: # stikur}}</translation> <translation id="869891660844655955">Lokadagsetning</translation> <translation id="8712637175834984815">Ég skil</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb index bb4f0f6d..299298d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Ricarica pag. corr. Ignora i contenuti nella cache</translation> <translation id="124678866338384709">Chiudi scheda corrente</translation> <translation id="1258753120186372309">Doodle di Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Elenco di lettura</translation> <translation id="1266864766717917324">Impossibile condividere <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Tocca per espandere</translation> <translation id="1291207594882862231">Cancella la cronologia, i cookie, i dati dei siti, la cache…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Tocca una parola per eseguire una ricerca immediata o visualizzare le azioni correlate</translation> <translation id="2760989362628427051">Attiva il tema scuro quando sul dispositivo è attivo il tema scuro o il risparmio energetico</translation> <translation id="2762000892062317888">in questo istante</translation> -<translation id="2771869497727323769">Impossibile creare il link al testo. Condividi il link alla pagina in un'app.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> sec rimanenti</translation> <translation id="2779651927720337254">non riuscito</translation> <translation id="2781151931089541271">1 sec rimanente</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">L'elenco di dispositivi con cui condividere una scheda è chiuso.</translation> <translation id="4149994727733219643">Visualizzazione semplificata delle pagine web</translation> <translation id="4170011742729630528">Il servizio non è disponibile, riprova più tardi.</translation> +<translation id="4175173967354304331">Verrà eseguito l'accesso a questo sito, a Chrome e alle app Google</translation> <translation id="4179980317383591987">Dati utilizzati: <ph name="AMOUNT" /></translation> <translation id="4181841719683918333">Lingue</translation> <translation id="4183868528246477015">Cerca con Google Lens <ph name="BEGIN_NEW" />Novità<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 download completato.}other{# download completati.}}</translation> <translation id="4766678251456904326">Aggiungi un account al dispositivo</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 download programmato.}other{# download programmati.}}</translation> -<translation id="478981486571169252">Troverai lo stato di accesso a <ph name="SITE_NAME" />, i dati di navigazione e i dati relativi ai siti in Chrome.</translation> <translation id="4802417911091824046">La crittografia della passphrase non include metodi di pagamento e indirizzi di Google Pay. Per cambiare questa impostazione, <ph name="BEGIN_LINK" />reimposta la sincronizzazione<ph name="END_LINK" />.</translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Privacy</translation> <translation id="5087580092889165836">Aggiungi carta</translation> <translation id="509429900233858213">Si è verificato un errore.</translation> -<translation id="5100748015044654621">Condividi il link al testo evidenziato in un'app</translation> <translation id="510275257476243843">1 ora rimanente</translation> <translation id="5123685120097942451">Scheda di navigazione in incognito</translation> <translation id="5127805178023152808">La sincronizzazione è disattivata</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Chiedi dove salvare i file</translation> <translation id="6342069812937806050">In questo momento</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 e altri <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 e altri <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation> +<translation id="6345878117466430440">Segna come letto</translation> <translation id="6364438453358674297">Rimuovere il suggerimento dalla cronologia?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> ha le funzionalità e la velocità che ti servono per eseguire attività, creare e navigare online in sicurezza.</translation> <translation id="6378173571450987352">Dettagli: ordinati per quantità di dati utilizzati</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Puoi cancellare i dati nelle Impostazioni di Chrome</translation> <translation id="8662811608048051533">Verrai disconnesso dalla maggior parte dei siti.</translation> <translation id="8664979001105139458">Nome file già esistente</translation> +<translation id="8683039184091909753">immagine</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Intensità del segnale: # barra}other{Intensità del segnale: # barre}}</translation> <translation id="869891660844655955">Data di scadenza</translation> <translation id="8712637175834984815">Fatto</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb index 70137c8..48722337 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">טען מחדש את הדף הנוכחי, תוך התעלמות מתוכן שמאוחסן בקובץ השמור</translation> <translation id="124678866338384709">סגור את הכרטיסייה הנוכחית</translation> <translation id="1258753120186372309">דודל של Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">רשימת קריאה</translation> <translation id="1266864766717917324">לא ניתן היה לשתף את ה<ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">הקש כדי להרחיב</translation> <translation id="1291207594882862231">ניקוי ההיסטוריה, קובצי ה-Cookie, נתוני האתרים, המטמון…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">כדי לחפש באופן מיידי או לראות פעולות קשורות, צריך להקיש על מילה</translation> <translation id="2760989362628427051">עיצוב כהה מופעל כשבמכשיר פועלת האפשרות 'עיצוב כהה' או 'חיסכון בסוללה'</translation> <translation id="2762000892062317888">ברגע זה</translation> -<translation id="2771869497727323769">לא ניתן ליצור קישור לטקסט. יש לשתף קישור לדף באפליקציה.</translation> <translation id="2777555524387840389">נותרו <ph name="SECONDS" /> שניות</translation> <translation id="2779651927720337254">נכשל</translation> <translation id="2781151931089541271">נותרה שניה אחת</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">רשימת המכשירים שאפשר לשתף איתם כרטיסייה נסגרה.</translation> <translation id="4149994727733219643">תצוגה פשוטה של דפי אינטרנט</translation> <translation id="4170011742729630528">השירות אינו זמין. נסה שוב מאוחר יותר.</translation> +<translation id="4175173967354304331">החשבון יחובר לאתר הזה, ל-Chrome ולאפליקציות של Google</translation> <translation id="4179980317383591987">נעשה שימוש ב-<ph name="AMOUNT" /></translation> <translation id="4181841719683918333">שפות</translation> <translation id="4183868528246477015">חיפוש בעזרת Google Lens <ph name="BEGIN_NEW" />חדש<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{הורדה אחת הושלמה.}two{# הורדות הושלמו.}many{# הורדות הושלמו.}other{# הורדות הושלמו.}}</translation> <translation id="4766678251456904326">הוספת חשבון למכשיר</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{תוזמנה הורדה אחת.}two{תוזמנו # הורדות.}many{תוזמנו # הורדות.}other{תוזמנו # הורדות.}}</translation> -<translation id="478981486571169252">ב-Chrome יוצגו סטטוס הכניסה שלך ל-<ph name="SITE_NAME" />, נתוני הגלישה ונתוני האתר.</translation> <translation id="4802417911091824046">הצפנה באמצעות ביטוי סיסמה לא כוללת אמצעי תשלום וכתובות מ-Google Pay כדי לשנות את ההגדרה הזו צריך <ph name="BEGIN_LINK" />לאפס את הסנכרון<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">פרטיות</translation> <translation id="5087580092889165836">הוסף כרטיס</translation> <translation id="509429900233858213">אירעה שגיאה.</translation> -<translation id="5100748015044654621">יש לשתף את הקישור לטקסט המודגש באפליקציה</translation> <translation id="510275257476243843">נותרה שעה אחת</translation> <translation id="5123685120097942451">כרטיסיית גלישה בסתר</translation> <translation id="5127805178023152808">סנכרון כבוי</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">לשאול איפה לשמור קבצים</translation> <translation id="6342069812937806050">זה עתה</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ו-<ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> נוספת}two{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ו-<ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> נוספות}many{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ו-<ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> נוספות}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ו-<ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> נוספות}}</translation> +<translation id="6345878117466430440">סימון כפריט שנקרא</translation> <translation id="6364438453358674297">האם להסיר את ההצעה מההיסטוריה?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> מציע את הכלים החכמים, את המהירות ואת ההגנה שאתם צריכים כדי לבצע פעולות, ליצור ולמצוא תוכן חדש באינטרנט</translation> <translation id="6378173571450987352">פרטים: מיון לפי נפח הנתונים שנצרכו</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">אפשר לנקות את הנתונים דרך הגדרות Chrome.</translation> <translation id="8662811608048051533">תבוצע יציאה שלך מרוב האתרים.</translation> <translation id="8664979001105139458">שם הקובץ כבר קיים</translation> +<translation id="8683039184091909753">תמונה</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{רמת עוצמת אות: עמודה אחת}two{רמת עוצמת אות: שתי עמודות}many{רמת עוצמת אות: # עמודות}other{רמת עוצמת אות: # עמודות}}</translation> <translation id="869891660844655955">תאריך תפוגה</translation> <translation id="8712637175834984815">הבנתי</translation> @@ -1001,6 +1002,7 @@ <translation id="8748850008226585750">התוכן מוסתר</translation> <translation id="8788265440806329501">היסטוריית הניווט סגורה</translation> <translation id="8788968922598763114">פתח מחדש את הכרטיסייה האחרונה שנסגרה</translation> +<translation id="8798449543960971550">נקראו</translation> <translation id="8812260976093120287">באתרים מסוימים ניתן לשלם דרך המכשיר באמצעות אפליקציות התשלום הנתמכות שמופיעות למעלה.</translation> <translation id="8820817407110198400">סימניות</translation> <translation id="883806473910249246">אירעה שגיאה בזמן הורדת התוכן.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb index c4560081..bd1ca7d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">キャッシュ コンテンツを無視して現在のページを再読み込みする</translation> <translation id="124678866338384709">現在のタブを閉じる</translation> <translation id="1258753120186372309">Google Doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">リーディング リスト</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> を共有できませんでした</translation> <translation id="1283039547216852943">タップして展開</translation> <translation id="1291207594882862231">履歴、Cookie、サイトデータ、キャッシュを削除…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">単語をタップすると、検索をすばやく実行したり、関連する操作メニューを確認したりできます</translation> <translation id="2760989362628427051">デバイスのダークテーマまたはバッテリー セーバーがオンのときにダークテーマをオンにする</translation> <translation id="2762000892062317888">たった今</translation> -<translation id="2771869497727323769">テキストへのリンクを作成できません。ページへのリンクをアプリで共有してください。</translation> <translation id="2777555524387840389">残り <ph name="SECONDS" /> 秒</translation> <translation id="2779651927720337254">失敗</translation> <translation id="2781151931089541271">残り 1 秒</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 件のダウンロードが完了しました。}other{# 件のダウンロードが完了しました。}}</translation> <translation id="4766678251456904326">デバイスへのアカウントの追加</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 件のダウンロードがスケジュール設定されました。}other{# 件のダウンロードがスケジュール設定されました。}}</translation> -<translation id="478981486571169252">Chrome での <ph name="SITE_NAME" /> のログイン ステータス、閲覧データ、サイトデータが表示されます。</translation> <translation id="4802417911091824046">パスフレーズ暗号化の対象に Google Pay のお支払い方法と住所は含まれません。 この設定を変更する場合は<ph name="BEGIN_LINK" />同期をリセット<ph name="END_LINK" />してください</translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">プライバシー</translation> <translation id="5087580092889165836">カードを追加</translation> <translation id="509429900233858213">エラーが発生しました。</translation> -<translation id="5100748015044654621">ハイライト表示したテキストへのリンクをアプリで共有してください</translation> <translation id="510275257476243843">残り 1 時間</translation> <translation id="5123685120097942451">シークレット タブ</translation> <translation id="5127805178023152808">同期は無効です</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb index 1bf0769..0a090a6 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">გვერდის გადატვირთვა ქეშირ. კონტენტის იგნორირებით</translation> <translation id="124678866338384709">მიმდინარე ჩანართის დახურვა</translation> <translation id="1258753120186372309">Google Doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">საკითხავი სია</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> ვერ გაზიარდა</translation> <translation id="1283039547216852943">შეეხეთ გასაშლელად</translation> <translation id="1291207594882862231">ისტორიის, ქუქი-ჩანაწერების, საიტის მონაცემების, ქეშის გასუფთავება…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">შეეხეთ სიტყვას მყისიერი ძიებისთვის ან დაკავშირებული ქმედებების სანახავად</translation> <translation id="2760989362628427051">მუქი თემის ჩართვა მოწყობილობაზე მუქი თემის ან ბატარეის დამზოგის გააქტიურებისას</translation> <translation id="2762000892062317888">ახლახან</translation> -<translation id="2771869497727323769">ტექსტის ბმული ვერ შეიქმნა. გააზიარეთ გვერდის ბმული აპის მეშვეობით.</translation> <translation id="2777555524387840389">დარჩენილია <ph name="SECONDS" /> წმ</translation> <translation id="2779651927720337254">ვერ მოხერხდა</translation> <translation id="2781151931089541271">დარჩენილია 1 წმ</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 ჩამოტვირთვა დასრულდა.}other{# ჩამოტვირთვა დასრულდა.}}</translation> <translation id="4766678251456904326">ანგარიშის დამატება მოწყობილობაზე</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{დაგეგმილია 1 ჩამოტვირთვა.}other{დაგეგმილია # ჩამოტვირთვა.}}</translation> -<translation id="478981486571169252">Chrome-ში იხილავთ როგორც <ph name="SITE_NAME" />-ში შესვლის სტატუსს, ისე დათვალიერების/საიტის მონაცემებს.</translation> <translation id="4802417911091824046">საიდუმლო ფრაზით დაშიფვრა არ მოიცავს Google Pay-ში შენახულ გადახდის მეთოდებსა და მისამართებს. ამ პარამეტრის შესაცვლელად საჭიროა <ph name="BEGIN_LINK" />სინქრონიზაციის გადაყენება<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">კონფიდენციალურობა</translation> <translation id="5087580092889165836">ბარათის დამატება</translation> <translation id="509429900233858213">შეცდომა მოხდა.</translation> -<translation id="5100748015044654621">გააზიარეთ გამოყოფილი ტექსტის ბმული აპის მეშვეობით</translation> <translation id="510275257476243843">დარჩენილია 1 საათი</translation> <translation id="5123685120097942451">ინკოგნიტო ჩანართი</translation> <translation id="5127805178023152808">სინქრონიზაცია გამორთულია</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb index 052cc30..9681ac13 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Кэштелген мазмұнды елемей, ағымдағы бетті жаңарту</translation> <translation id="124678866338384709">Ағымдағы қойындыны жабу</translation> <translation id="1258753120186372309">Google Doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Оқу тізімі</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> бөлісу мүмкін болмады.</translation> <translation id="1283039547216852943">Жаю үшін түртіңіз</translation> <translation id="1291207594882862231">Тарихты, cookie файлдарын, сайт деректерін, кэшті жою…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Бірден іздеу үшін сөзді түртіңіз не ұқсас әрекеттерді қараңыз</translation> <translation id="2760989362628427051">Құрылғыдағы қараңғы тақырып немесе Battery saver режимі қосылып тұрғанда, қараңғы тақырыпты қосу</translation> <translation id="2762000892062317888">жаңа ғана</translation> -<translation id="2771869497727323769">Мәтіннің сілтемесін жасау мүмкін емес. Қолданбада беттің сілтемесін бөлісіңіз.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> сек қалды</translation> <translation id="2779651927720337254">қате шықты</translation> <translation id="2781151931089541271">1 сек қалды</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 файл жүктеп алынды.}other{# файл жүктеп алынды.}}</translation> <translation id="4766678251456904326">Құрылғыға есептік жазба енгізу</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 жүктеп алу жоспарланды.}other{# жүктеп алу жоспарланды.}}</translation> -<translation id="478981486571169252"><ph name="SITE_NAME" /> сайтына кіру күйін, браузерді пайдалану деректерін және Chrome-дағы сайт деректерін көресіз.</translation> <translation id="4802417911091824046">Google Pay қызметіндегі төлеу әдістері мен мекенжайлар құпия фразамен шифрланбайды. Бұл параметрді өзгерту үшін <ph name="BEGIN_LINK" />синхрондауды бастапқы күйіне қайтарыңыз<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">Құпиялылық</translation> <translation id="5087580092889165836">Несие картасын қосу</translation> <translation id="509429900233858213">Қате орын алды.</translation> -<translation id="5100748015044654621">Қолданбада бөлектелген мәтіннің сілтемесін бөлісіңіз.</translation> <translation id="510275257476243843">1 сағат қалды</translation> <translation id="5123685120097942451">Инкогнито қойындысы</translation> <translation id="5127805178023152808">Синхрондау өшірулі</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb index 17c9390b..d3daa65 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">ផ្ទុកទំព័របច្ចុប្បន្នឡើងវិញ ដោយមិនអើពីនឹងមាតិកាដែលបានរក្សាទុកក្នុងឃ្លាំងផ្ទុកទិន្នន័យ</translation> <translation id="124678866338384709">បិទផ្ទាំងបច្ចុប្បន្ន</translation> <translation id="1258753120186372309">Google doodle៖ <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">បញ្ជីអាន</translation> <translation id="1266864766717917324">មិនអាចចែករំលែក <ph name="CONTENT_TYPE" /> បានទេ</translation> <translation id="1283039547216852943">ចុចដើម្បីពង្រីក</translation> <translation id="1291207594882862231">ជម្រះប្រវត្តិ ខុកឃី ទិន្នន័យគេហទំព័រ ឃ្លាំងសម្ងាត់…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">ចុចពាក្យណាមួយដើម្បីស្វែងរកភ្លាមៗ ឬមើលសកម្មភាពដែលទាក់ទង</translation> <translation id="2760989362628427051">បើករចនាប័ទ្មងងឹត ពេលបើកកម្មវិធីសន្សំថ្ម ឬរចនាប័ទ្មងងឹតនៅលើឧបករណ៍របស់អ្នក</translation> <translation id="2762000892062317888">អំបាញ់មិញនេះ</translation> -<translation id="2771869497727323769">មិនអាចបង្កើតតំណចូលទៅកាន់អត្ថបទបានទេ។ ចែករំលែកតំណចូលទៅកាន់ទំព័រនៅក្នុងកម្មវិធី។</translation> <translation id="2777555524387840389">នៅសល់ <ph name="SECONDS" /> វិនាទីទៀត</translation> <translation id="2779651927720337254">បានបរាជ័យ</translation> <translation id="2781151931089541271">នៅសល់ 1 វិនាទីទៀត</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">បានបិទបញ្ជីឧបករណ៍ដែលត្រូវចែករំលែកផ្ទាំងជាមួយ។</translation> <translation id="4149994727733219643">ទិដ្ឋភាពសាមញ្ញសម្រាប់ទំព័របណ្ដាញ</translation> <translation id="4170011742729630528">សេវាកម្មនេះមិនមានទេ។ សូមព្យាយាមម្តងទៀតពេលក្រោយ។</translation> +<translation id="4175173967354304331">អ្នកនឹងចូលគេហទំព័រនេះ, Chrome និងកម្មវិធី Google</translation> <translation id="4179980317383591987">បានប្រើអស់ <ph name="AMOUNT" /></translation> <translation id="4181841719683918333">ភាសា</translation> <translation id="4183868528246477015">ស្វែងរកដោយប្រើ Google Lens <ph name="BEGIN_NEW" />ថ្មី<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{ការទាញយក 1 បានបញ្ចប់។}other{ការទាញយក # បានបញ្ចប់។}}</translation> <translation id="4766678251456904326">បញ្ចូលគណនីទៅក្នុងឧបករណ៍</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{បានកំណត់កាលវិភាគនៃការទាញយក 1។}other{បានកំណត់កាលវិភាគនៃការទាញយក #។}}</translation> -<translation id="478981486571169252">អ្នកនឹងមើលឃើញស្ថានភាពចូល <ph name="SITE_NAME" />, ទិន្នន័យរុករក និងទិន្នន័យគេហទំព័ររបស់អ្នកនៅក្នុង Chrome។</translation> <translation id="4802417911091824046">ការអ៊ីនគ្រីបឃ្លាសម្ងាត់មិនរួមបញ្ចូលអាសយដ្ឋាន និងវិធីបង់ប្រាក់ពី Google Pay ទេ។ ដើម្បីផ្លាស់ប្ដូរការកំណត់នេះ <ph name="BEGIN_LINK" />សូមកំណត់សមកាលកម្មឡើងវិញ<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">ឯកជនភាព</translation> <translation id="5087580092889165836">បន្ថែមកាត</translation> <translation id="509429900233858213">កំហុសឆ្គងបានកើតឡើង។</translation> -<translation id="5100748015044654621">ចែករំលែកតំណចូលទៅកាន់អត្ថបទដែលបានរំលេចនៅក្នុងកម្មវិធី</translation> <translation id="510275257476243843">នៅសល់ 1 ម៉ោងទៀត</translation> <translation id="5123685120097942451">ផ្ទាំងអនាមិក</translation> <translation id="5127805178023152808">សមកម្មបានបិទ</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">សួររកកន្លែងដែលត្រូវរក្សាទុកឯកសារ</translation> <translation id="6342069812937806050">អំបាញ់មិញនេះ</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 និង <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ទៀត}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 និង <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ទៀត}}</translation> +<translation id="6345878117466430440">សម្គាល់ថាបានអានហើយ</translation> <translation id="6364438453358674297">យកការផ្តល់យោបល់ចេញពីប្រវត្តិ?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> មានមុខងារឆ្លាតវៃ និងល្បឿនដែលអ្នកត្រូវការ ដើម្បីបំពេញកិច្ចការ បង្កើត និងរុករកនៅលើអ៊ីនធឺណិតដោយសុវត្ថិភាព</translation> <translation id="6378173571450987352">ព័ត៌មានលម្អិត៖ តម្រៀបតាមទំហំទិន្នន័យដែលបានប្រើប្រាស់</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">អ្នកអាចសម្អាតទិន្នន័យនៅក្នុងការកំណត់ Chrome</translation> <translation id="8662811608048051533">ធ្វើឱ្យអ្នកចាកចេញពីទំព័រភាគច្រើន។</translation> <translation id="8664979001105139458">ឈ្មោះឯកសារមានរួចហើយ</translation> +<translation id="8683039184091909753">រូបភាព</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{កម្រិតកម្លាំងរលកសញ្ញា៖ # កាំ}other{កម្រិតកម្លាំងរលកសញ្ញា៖ # កាំ}}</translation> <translation id="869891660844655955">កាលបរិច្ឆេទការផុតកំណត់</translation> <translation id="8712637175834984815">យល់ហើយ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb index 7881e6c1c8..7105130 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">ಸಂಗ್ರಹ ಮಾಡಿದ ವಿಷಯವನ್ನು ನಿರ್ಲಕ್ಷಿಸಿ, ಪ್ರಸ್ತುತ ಪುಟ ಮರುಲೋಡ್ ಮಾಡಿ</translation> <translation id="124678866338384709">ಪ್ರಸ್ತುತ ಟ್ಯಾಬ್ ಮುಚ್ಚಿ</translation> <translation id="1258753120186372309">Google ಡೂಡಲ್: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">ಓದುವ ಪಟ್ಟಿ</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation> <translation id="1283039547216852943">ವಿಸ್ತರಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ</translation> <translation id="1291207594882862231">ಇತಿಹಾಸ, ಕುಕೀಗಳು, ಸೈಟ್ ಡೇಟಾ, ಕ್ಯಾಷ್ ಅನ್ನು ತೆರವುಗೊಳಿಸಿ…</translation> @@ -219,7 +220,6 @@ <translation id="2744248271121720757">ತತ್ಕ್ಷಣ ಹುಡುಕಲು ಅಥವಾ ಸಂಬಂಧಿತ ಕ್ರಿಯೆಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಪದವನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ</translation> <translation id="2760989362628427051">ನಿಮ್ಮ ಸಾಧನದ ಡಾರ್ಕ್ ಥೀಮ್ ಅಥವಾ ಬ್ಯಾಟರಿ ಸೇವರ್ ಆನ್ ಆಗಿರುವಾಗ, ಡಾರ್ಕ್ ಥೀಮ್ ಅನ್ನು ಆನ್ ಮಾಡಿ</translation> <translation id="2762000892062317888">ಈಗತಾನೇ</translation> -<translation id="2771869497727323769">ಪಠ್ಯಕ್ಕೆ ಲಿಂಕ್ ರಚಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಆ್ಯಪ್ನಲ್ಲಿ ಪುಟದ ಲಿಂಕ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಿ.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> ಸೆಕೆಂಡುಗಳು ಉಳಿದಿವೆ</translation> <translation id="2779651927720337254">ವಿಫಲವಾಗಿದೆ</translation> <translation id="2781151931089541271">1 ಸೆಕೆಂಡು ಉಳಿದಿದೆ</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 ಡೌನ್ಲೋಡ್ ಪೂರ್ಣಗೊಂಡಿದೆ.}one{# ಡೌನ್ಲೋಡ್ಗಳು ಪೂರ್ಣಗೊಂಡಿವೆ.}other{# ಡೌನ್ಲೋಡ್ಗಳು ಪೂರ್ಣಗೊಂಡಿವೆ.}}</translation> <translation id="4766678251456904326">ಸಾಧನಕ್ಕೆ ಖಾತೆಯನ್ನು ಸೇರಿಸಿ</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 ಡೌನ್ಲೋಡ್ ಅನ್ನು ನಿಗದಿಪಡಿಸಲಾಗಿದೆ.}one{# ಡೌನ್ಲೋಡ್ಗಳನ್ನು ನಿಗದಿಪಡಿಸಲಾಗಿದೆ.}other{# ಡೌನ್ಲೋಡ್ಗಳನ್ನು ನಿಗದಿಪಡಿಸಲಾಗಿದೆ.}}</translation> -<translation id="478981486571169252">ನಿಮ್ಮ <ph name="SITE_NAME" /> ಸೈನ್-ಇನ್ ಸ್ಥಿತಿ, ಬ್ರೌಸಿಂಗ್ ಡೇಟಾ ಮತ್ತು ಸೈಟ್ ಡೇಟಾವನ್ನು Chrome ನಲ್ಲಿ ನೋಡುವಿರಿ.</translation> <translation id="4802417911091824046">ಪಾಸ್ಫ್ರೇಸ್ ಎನ್ಕ್ರಿಪ್ಶನ್, Google Pay ನಿಂದ ಪಾವತಿ ವಿಧಾನಗಳು ಮತ್ತು ವಿಳಾಸಗಳನ್ನು ಒಳಗೊಂಡಿರುವುದಿಲ್ಲ. ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬದಲಾಯಿಸಲು, <ph name="BEGIN_LINK" />ಸಿಂಕ್ ಅನ್ನು ಮರುಹೊಂದಿಸಿ<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">ಗೌಪ್ಯತೆ</translation> <translation id="5087580092889165836">ಕಾರ್ಡ್ ಸೇರಿಸಿ</translation> <translation id="509429900233858213">ದೋಷವೊಂದು ಕಾಣಿಸಿಕೊಂಡಿದೆ.</translation> -<translation id="5100748015044654621">ಆ್ಯಪ್ನಲ್ಲಿ ಹೈಲೈಟ್ ಮಾಡಿದ ಪಠ್ಯದ ಲಿಂಕ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಿ</translation> <translation id="510275257476243843">1 ಗಂಟೆ ಉಳಿದಿದೆ</translation> <translation id="5123685120097942451">ಅದೃಶ್ಯ ಟ್ಯಾಬ್</translation> <translation id="5127805178023152808">ಸಿಂಕ್ ಆಫ್ ಆಗಿದೆ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb index f9dca74d..e96cb9e 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">캐시된 콘텐츠를 무시하고 현재 페이지 새로고침</translation> <translation id="124678866338384709">현재 탭 닫기</translation> <translation id="1258753120186372309">Google 기념일 로고: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">읽기 목록</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> 공유할 수 없음</translation> <translation id="1283039547216852943">탭하여 펼치기</translation> <translation id="1291207594882862231">방문 기록, 쿠키, 사이트 데이터, 캐시 삭제…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">단어를 탭하여 즉시 검색하거나 관련 작업을 확인하세요</translation> <translation id="2760989362628427051">기기의 어두운 테마 또는 절전 모드가 켜지면 어두운 테마를 사용 설정합니다.</translation> <translation id="2762000892062317888">방금 전</translation> -<translation id="2771869497727323769">텍스트 링크를 생성할 수 없습니다. 앱에서 페이지 링크를 공유하세요.</translation> <translation id="2777555524387840389"><ph name="SECONDS" />초 남음</translation> <translation id="2779651927720337254">실패</translation> <translation id="2781151931089541271">1초 남음</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{다운로드 1개 완료}other{다운로드 #개 완료}}</translation> <translation id="4766678251456904326">기기에 계정 추가</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{다운로드 1개가 예약되었습니다.}other{다운로드 #개가 예약되었습니다.}}</translation> -<translation id="478981486571169252">Chrome에서의 <ph name="SITE_NAME" /> 로그인 상태, 인터넷 사용 기록, 사이트 데이터를 볼 수 있습니다.</translation> <translation id="4802417911091824046">Google Pay 결제 수단 및 주소는 암호로 암호화되지 않습니다. 이 설정을 변경하려면 <ph name="BEGIN_LINK" />동기화를 재설정<ph name="END_LINK" />하세요.</translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">개인정보 보호</translation> <translation id="5087580092889165836">카드 추가</translation> <translation id="509429900233858213">오류가 발생했습니다.</translation> -<translation id="5100748015044654621">앱에서 강조표시된 텍스트 링크를 공유하세요.</translation> <translation id="510275257476243843">1시간 남음</translation> <translation id="5123685120097942451">시크릿 탭</translation> <translation id="5127805178023152808">동기화 사용 안함</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb index c384bfd..0eb2277 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Кэшти колдонбой, учурдагы баракты кайра жүктөө</translation> <translation id="124678866338384709">Учурдагы өтмөктү жабуу</translation> <translation id="1258753120186372309">Google чиймелек: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Окуу тизмеси</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> менен бөлүшүлгөн жок</translation> <translation id="1283039547216852943">Жайып көрсөтүү үчүн таптап коюңуз</translation> <translation id="1291207594882862231">Таржымалды, кукилерди, сайт дайындарын, кешти тазалоо…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Сөздү ыкчам издөө же окшош аракеттерди көрүү үчүн таптап коюңуз</translation> <translation id="2760989362628427051">Түзмөгүңүз кубатты үнөмдөө режиминде иштегенде, Батареяны үнөмдөгүчтү күйгүзүңүз</translation> <translation id="2762000892062317888">жаңы эле</translation> -<translation id="2771869497727323769">Текстке шилтеме түзүлгөн жок. Колдонмодогу барактын шилтемесин бөлүшүңүз.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> сек. калды</translation> <translation id="2779651927720337254">ката</translation> <translation id="2781151931089541271">1 сек. калды</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 жүктөп алуу аяктады.}other{# жүктөп алуу аяктады.}}</translation> <translation id="4766678251456904326">Түзмөккө аккаунт кошуңуз</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 жүктөп алуу графикке киргизилди.}other{# жүктөп алуу графикке киргизилди.}}</translation> -<translation id="478981486571169252"><ph name="SITE_NAME" /> сайтына кирип же кирбей турганыңызды, серептөө дайындарын жана сайттын дайындарын Chrome'дон көрөсүз.</translation> <translation id="4802417911091824046">Купуя сөз айкашы менен шифрлөө Google Pay'деги төлөм ыкмалары менен даректерине карата колдонулбайт. Бул жөндөөнү өзгөртүү үчүн <ph name="BEGIN_LINK" />шайкештирүүнү баштапкы абалга келтириңиз<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">Купуялык</translation> <translation id="5087580092889165836">Карточка кошуу</translation> <translation id="509429900233858213">Ката кетти.</translation> -<translation id="5100748015044654621">Колдонмодогу бөлүнүп көрсөтүлгөн тексттин шилтемесин бөлүшүңүз.</translation> <translation id="510275257476243843">1 саат калды</translation> <translation id="5123685120097942451">Жашыруун өтмөк</translation> <translation id="5127805178023152808">Шайкештештирүү өчүк</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb index 9315d42..6de16a3 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">ໂຫຼດໜ້າປັດຈຸບັນຄືນໃໝ່, ໂດຍລະເລີຍເນື້ອຫາທີ່ຈັດເກັບໄວ້ຖາວອນ</translation> <translation id="124678866338384709">ປິດແຖບປັດຈຸບັນ</translation> <translation id="1258753120186372309">Google doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">ລາຍການທີ່ຈະອ່ານ</translation> <translation id="1266864766717917324">ບໍ່ສາມາດແບ່ງປັນ <ph name="CONTENT_TYPE" /> ໄດ້</translation> <translation id="1283039547216852943">ແຕະເພື່ອຂະຫຍາຍ</translation> <translation id="1291207594882862231">ລຶບລ້າງປະຫວັດ, ຄຸກກີ້, ຂໍ້ມູນເວັບໄຊ, ແຄສ…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">ແຕະຄຳສັບໃດໜຶ່ງເພື່ອຊອກຫາໃນທັນທີ ຫຼື ເບິ່ງການດຳເນີນການທີ່ກ່ຽວຂ້ອງ</translation> <translation id="2760989362628427051">ເປີດຮູບແບບສີສັນມືດເມື່ອຮູບແບບສີສັນມືດ ຫຼື ຕົວປະຢັດແບັດເຕີຣີຂອງອຸປະກອນຂອງທ່ານເປີດຢູ່</translation> <translation id="2762000892062317888">ຕອນນີ້</translation> -<translation id="2771869497727323769">ບໍ່ສາມາດສ້າງລິ້ງຫາຂໍ້ຄວາມໄດ້. ແບ່ງປັນລິ້ງຫາໜ້າໃນແອັບ.</translation> <translation id="2777555524387840389">ຍັງເຫຼືອ <ph name="SECONDS" /> ວິ</translation> <translation id="2779651927720337254">ບໍ່ສໍາເລັດ</translation> <translation id="2781151931089541271">ຍັງເຫຼືອ 1 ວິ</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{ສຳເລັດ 1 ການດາວໂຫຼດແລ້ວ.}other{ສຳເລັດ # ການດາວໂຫຼດແລ້ວ.}}</translation> <translation id="4766678251456904326">ເພີ່ມບັນຊີໃສ່ອຸປະກອນ</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{ກຳນົດເວລາການດາວໂຫຼດ 1 ລາຍການແລ້ວ}other{ກຳນົດເວລາການດາວໂຫຼດ # ລາຍການແລ້ວ}}</translation> -<translation id="478981486571169252">ທ່ານຈະເຫັນສະຖານະການເຂົ້າສູ່ລະບົບ <ph name="SITE_NAME" />, ຂໍ້ມູນການທ່ອງເວັບ ແລະ ຂໍ້ມູນເວັບໄຊຂອງທ່ານໃນ Chrome.</translation> <translation id="4802417911091824046">ການເຂົ້າລະຫັດໂດຍໃຊ້ລະຫັດຜ່ານບໍ່ຮວມເອົາວິທີການຈ່າຍເງິນ ແລະ ທີ່ຢູ່ຈາກ Google Pay. ເພື່ອປ່ຽນການຕັ້ງຄ່ານີ້, ກະລຸນາ <ph name="BEGIN_LINK" />ຣີເຊັດການຊິິ້ງຂໍ້ມູນ<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">ຄວາມເປັນສ່ວນຕົວ</translation> <translation id="5087580092889165836">ເພີ່ມບັດ</translation> <translation id="509429900233858213">ເກີດຄວາມຜິດພາດຂຶ້ນ.</translation> -<translation id="5100748015044654621">ແບ່ງປັນລິ້ງໄປຫາຂໍ້ຄວາມທີ່ໄຮໄລ້ໄວ້ໃນແອັບ</translation> <translation id="510275257476243843">ຍັງເຫຼືອ 1 ຊົ່ວໂມງ</translation> <translation id="5123685120097942451">ແຖບທີ່ບໍ່ເຜີຍຕົວຕົນ</translation> <translation id="5127805178023152808">ຊິງຄ໌ປິດ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb index 2240b8a..a1d8649 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Įk. šį puslapį iš naujo, nepais. talp. es. turinio</translation> <translation id="124678866338384709">Uždaryti dabartinį skirtuką</translation> <translation id="1258753120186372309">„Google“ papuoštas logotipas: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Skaitymo sąrašas</translation> <translation id="1266864766717917324">Nepavyko bendrinti turinio: <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Palieskite ir išskleiskite</translation> <translation id="1291207594882862231">Išvalykite istoriją, slapukus, svetainės duomenis, talpyklą…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Palieskite žodį ir ieškokite akimirksniu arba peržiūrėkite susijusius veiksmus</translation> <translation id="2760989362628427051">Įjungti tamsiąją temą, kai įjungta įrenginio tamsioji tema arba akumuliatoriaus tausojimo priemonė</translation> <translation id="2762000892062317888">ką tik</translation> -<translation id="2771869497727323769">Nepavyko sukurti teksto nuorodos. Bendrinkite puslapio nuorodą programoje.</translation> <translation id="2777555524387840389">Liko <ph name="SECONDS" /> sek.</translation> <translation id="2779651927720337254">nepavyko</translation> <translation id="2781151931089541271">Liko 1 sek.</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Įrenginių, su kuriais reikia bendrinti skirtuką, sąrašas uždarytas.</translation> <translation id="4149994727733219643">Supaprastinta tinklalapių peržiūra</translation> <translation id="4170011742729630528">Paslauga nepasiekiama; vėliau bandykite dar kartą.</translation> +<translation id="4175173967354304331">Būsite prijungti prie šios svetainės, „Chrome“ ir „Google“ programų</translation> <translation id="4179980317383591987">Naudojama <ph name="AMOUNT" /></translation> <translation id="4181841719683918333">Kalbos</translation> <translation id="4183868528246477015">Ieškoti su „Google Lens“ <ph name="BEGIN_NEW" />Nauja<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{Baigtas 1 atsisiuntimas.}one{Baigtas # atsisiuntimas.}few{Baigti # atsisiuntimai.}many{Baigta # atsisiuntimo.}other{Baigta # atsisiuntimų.}}</translation> <translation id="4766678251456904326">Pridėti paskyrą prie įrenginio</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Suplanuotas vienas atsisiuntimas.}one{Suplanuotas # atsisiuntimas.}few{Suplanuoti # atsisiuntimai.}many{Suplanuota # atsisiuntimo.}other{Suplanuota # atsisiuntimų.}}</translation> -<translation id="478981486571169252">Matysite <ph name="SITE_NAME" /> prisijungimo būseną, naršymo duomenis ir svetainės duomenis sistemoje „Chrome“.</translation> <translation id="4802417911091824046">Slaptafrazės šifruotė neapima mokėjimo metodų ir adresų iš „Google Pay“. Jei norite pakeisti šį nustatymą, <ph name="BEGIN_LINK" />iš naujo nustatykite sinchronizavimą<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Privatumas</translation> <translation id="5087580092889165836">Pridėti kortelę</translation> <translation id="509429900233858213">Įvyko klaida.</translation> -<translation id="5100748015044654621">Bendrinkite paryškinto teksto nuorodą programoje</translation> <translation id="510275257476243843">Liko 1 val.</translation> <translation id="5123685120097942451">Inkognito skirtukas</translation> <translation id="5127805178023152808">Sinchronizavimas išjungtas</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Klausti, kur saugoti failus</translation> <translation id="6342069812937806050">Ką tik</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ir dar <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}one{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ir dar <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}few{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ir dar <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}many{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ir dar <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ir dar <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation> +<translation id="6345878117466430440">Žymėti kaip skaitytą</translation> <translation id="6364438453358674297">Pašalinti pasiūlymą iš istorijos?</translation> <translation id="6366047038980456022">„<ph name="APP_NAME" />“ teikia išmaniąsias funkcijas ir užtikrina spartą, reikalingą užduotims atlikti, kurti ir naršyti prisijungus</translation> <translation id="6378173571450987352">Išsami informacija: surūšiuota pagal naudojamų duomenų kiekį</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Duomenis galite išvalyti „Chrome“ nustatymų“ skiltyje</translation> <translation id="8662811608048051533">Būsite atjungti nuo daugelio svetainių.</translation> <translation id="8664979001105139458">Failas pavadinimas jau yra</translation> +<translation id="8683039184091909753">vaizdas</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Signalo stiprumo lygis: # juosta}one{Signalo stiprumo lygis: # juosta}few{Signalo stiprumo lygis: # juostos}many{Signalo stiprumo lygis: # juostos}other{Signalo stiprumo lygis: # juostų}}</translation> <translation id="869891660844655955">Galiojimo data</translation> <translation id="8712637175834984815">Supratau</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb index 9701c1c..8aea37f2 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Atkārtoti ielādēt lapu, ignorējot saturu kešatmiņā</translation> <translation id="124678866338384709">Aizvērt pašreizējo cilni</translation> <translation id="1258753120186372309">Google svētku logotips: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Lasīšanas saraksts</translation> <translation id="1266864766717917324">Nevarēja kopīgot: <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Pieskarties, lai izvērstu</translation> <translation id="1291207594882862231">Dzēst vēsturi, sīkfailus, vietnes datus, kešatmiņu…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Pieskarieties vārdam, lai meklētu tūlīt vai skatītu saistītas darbības.</translation> <translation id="2760989362628427051">Ieslēgt tumšo motīvu, kad ierīcē ir ieslēgts tumšais motīvs vai akumulatora enerģijas taupīšanas režīms</translation> <translation id="2762000892062317888">tikko</translation> -<translation id="2771869497727323769">Nevar izveidot saiti uz tekstu. Kopīgojiet lapas saiti lietotnē.</translation> <translation id="2777555524387840389">Atlikušas <ph name="SECONDS" /> s</translation> <translation id="2779651927720337254">neizdevās</translation> <translation id="2781151931089541271">Atlikusi 1 s</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 lejupielāde ir pabeigta.}zero{# lejupielādes ir pabeigtas.}one{# lejupielāde ir pabeigta.}other{# lejupielādes ir pabeigtas.}}</translation> <translation id="4766678251456904326">Pievienot kontu ierīcei</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Ir ieplānota viena lejupielāde.}zero{Ir ieplānotas # lejupielādes.}one{Ir ieplānota # lejupielāde.}other{Ir ieplānotas # lejupielādes.}}</translation> -<translation id="478981486571169252">Tiks rādīts jūsu pierakstīšanās statuss vietnē <ph name="SITE_NAME" />, pārlūkošanas dati un vietnes dati pārlūkā Chrome.</translation> <translation id="4802417911091824046">Ieejas frāzes šifrējumā nav iekļauti maksājumu veidi un adreses no pakalpojuma Google Pay. Lai mainītu šo iestatījumu, <ph name="BEGIN_LINK" />atiestatiet sinhronizāciju<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">Konfidencialitāte</translation> <translation id="5087580092889165836">Pievienot karti</translation> <translation id="509429900233858213">Radās kļūda.</translation> -<translation id="5100748015044654621">Kopīgot saiti uz atzīmēto tekstu lietotnē</translation> <translation id="510275257476243843">Atlikusi 1 h</translation> <translation id="5123685120097942451">Inkognito cilne</translation> <translation id="5127805178023152808">Sinhronizācija izslēgta</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb index 7e235bee8..6eff07aab 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Вчитај тековна страница, без кеширана содржина</translation> <translation id="124678866338384709">Затвори ја тековната картичка</translation> <translation id="1258753120186372309">Google Doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Список за читање</translation> <translation id="1266864766717917324">Не можеше да се сподели <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Допрете за да се прошири</translation> <translation id="1291207594882862231">Исчистете ги историјата, колачињата, податоците на сајтот, кешот…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Допрете даден збор за да пребарувате веднаш или за да видите слични дејства</translation> <translation id="2760989362628427051">Вклучува темна тема кога е вклучена темната тема или „Штедачот на батерија“ на уредот</translation> <translation id="2762000892062317888">пред малку</translation> -<translation id="2771869497727323769">Не може да се создаде линк до текстот. Споделете го линкот до страницата во некоја апликација.</translation> <translation id="2777555524387840389">Останаа <ph name="SECONDS" /> секунди</translation> <translation id="2779651927720337254">не успеа</translation> <translation id="2781151931089541271">Остана 1 секунда</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Списокот со уреди за споделување картичка е затворен.</translation> <translation id="4149994727733219643">Поедноставен приказ за веб-страници</translation> <translation id="4170011742729630528">Услугата не е достапна, обидете се повторно подоцна.</translation> +<translation id="4175173967354304331">Ќе ве најавиме на сајтов, на Chrome и на апликациите на Google</translation> <translation id="4179980317383591987">Искористено: <ph name="AMOUNT" /></translation> <translation id="4181841719683918333">Јазици</translation> <translation id="4183868528246477015">Пребарувајте со Google Lens <ph name="BEGIN_NEW" />Ново<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 преземање е завршено.}one{# преземање е завршено.}other{# преземања се завршени.}}</translation> <translation id="4766678251456904326">Додајте сметка на уредов</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Закажано е 1 преземање.}one{Закажано е # преземање.}other{Закажани се # преземања.}}</translation> -<translation id="478981486571169252">Ќе ги видите статусот на најавување на <ph name="SITE_NAME" />, податоците од прелистување и податоците од сајтовите во Chrome.</translation> <translation id="4802417911091824046">Шифрирањето на лозинката не ги вклучува начините на плаќање и адресите од Google Pay. За да ја промените поставкава, <ph name="BEGIN_LINK" />ресетирајте ја синхронизацијата<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Приватност</translation> <translation id="5087580092889165836">Додај картичка</translation> <translation id="509429900233858213">Настана грешка.</translation> -<translation id="5100748015044654621">Споделете го линкот до нагласениот текст во некоја апликација</translation> <translation id="510275257476243843">Остана 1 час</translation> <translation id="5123685120097942451">Картичка инкогнито</translation> <translation id="5127805178023152808">Синхронизацијата е исклучена</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Прашај каде да зачувуваш датотеки</translation> <translation id="6342069812937806050">Пред малку</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />… и уште <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}one{<ph name="SHIPPING_ADDRESS_PREVIEW" />… и уште <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />… и уште <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation> +<translation id="6345878117466430440">Означете како прочитано</translation> <translation id="6364438453358674297">Да се отстрани предлогот од историјата?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> има доволно знаење и брзина за да ви овозможи безбедно да работите, создавате и истражувате онлајн</translation> <translation id="6378173571450987352">Детали: подредени по количината на податоци што се користат</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Податоците може да ги избришете во „Поставки за Chrome“</translation> <translation id="8662811608048051533">Ќе ве одјави од повеќето сајтови.</translation> <translation id="8664979001105139458">Името на датотеката веќе постои</translation> +<translation id="8683039184091909753">слика</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Ниво на јачина на сигналот: # бар}one{Ниво на јачина на сигналот: # бар}other{Ниво на јачина на сигналот: # бари}}</translation> <translation id="869891660844655955">Рок на важност</translation> <translation id="8712637175834984815">Сфатив</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb index 226ec2b..465660b5 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">കാഷെ ചെയ്ത ഉള്ളടക്കം ഒഴിവാക്കി കൊണ്ട്, നിലവിലെ പേജ് റീലോഡ് ചെയ്യുക</translation> <translation id="124678866338384709">നിലവിലെ ടാബ് അടയ്ക്കുക</translation> <translation id="1258753120186372309">Google ഡൂഡിൽ: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">വായനാ ലിസ്റ്റ്</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> പങ്കിടാനായില്ല</translation> <translation id="1283039547216852943">വികസിപ്പിക്കാൻ ടാപ്പ് ചെയ്യുക</translation> <translation id="1291207594882862231">ചരിത്രവും കുക്കികളും സൈറ്റ് വിവരവും കാഷെയും മായ്ക്കുക...</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">പെട്ടെന്ന് തിരയാനോ ബന്ധപ്പെട്ട പ്രവർത്തനങ്ങൾ കാണാനോ ഒരു വാക്കിൽ ടാപ്പ് ചെയ്യുക</translation> <translation id="2760989362628427051">നിങ്ങളുടെ ഉപകരണത്തിന്റെ ഇരുണ്ട തീമോ ബാറ്ററി ലാഭിക്കലോ ഓണായിരിക്കുമ്പോൾ ഇരുണ്ട തീം ഓണാക്കുക</translation> <translation id="2762000892062317888">ഇപ്പോൾ</translation> -<translation id="2771869497727323769">ടെക്സ്റ്റിലേക്കുള്ള ലിങ്ക് സൃഷ്ടിക്കാനാകില്ല. പേജിലേക്കുള്ള ലിങ്ക് ആപ്പിൽ പങ്കിടുക.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> സെക്കൻഡ് ശേഷിക്കുന്നു</translation> <translation id="2779651927720337254">പരാജയപ്പെട്ടു</translation> <translation id="2781151931089541271">ഒരു സെക്കൻഡ് ശേഷിക്കുന്നു</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{ഒരു ഡൗൺലോഡ് പൂർത്തിയായി.}other{# ഡൗൺലോഡുകൾ പൂർത്തിയായി.}}</translation> <translation id="4766678251456904326">ഉപകരണത്തിലേക്ക് ഒരു അക്കൗണ്ട് ചേർക്കുക</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{ഒരു ഡൗൺലോഡ് ഷെഡ്യൂൾ ചെയ്തു.}other{# ഡൗൺലോഡുകൾ ഷെഡ്യൂൾ ചെയ്തു.}}</translation> -<translation id="478981486571169252">നിങ്ങളുടെ <ph name="SITE_NAME" />-ന്റെ സൈൻ ഇൻ സ്റ്റാറ്റസ്, ബ്രൗസിംഗ് ഡാറ്റ, സൈറ്റ് ഡാറ്റ എന്നിവ Chrome-ൽ കാണാനാകും.</translation> <translation id="4802417911091824046">പാസ്ഫ്രെയ്സ് എൻക്രിപ്ഷനിൽ, Google Pay-ൽ നിന്നുള്ള പേയ്മെന്റ് രീതികളും വിലാസങ്ങളും ഉൾപ്പെടുന്നില്ല. ഈ ക്രമീകരണം മാറ്റാൻ, <ph name="BEGIN_LINK" />സമന്വയം പുനഃക്രമീകരിക്കുക<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">സ്വകാര്യത</translation> <translation id="5087580092889165836">കാർഡ് ചേർക്കുക</translation> <translation id="509429900233858213">ഒരു പിശക് സംഭവിച്ചു.</translation> -<translation id="5100748015044654621">ഹൈലൈറ്റ് ചെയ്ത ടെക്സ്റ്റിലേക്കുള്ള ലിങ്ക് ആപ്പിൽ പങ്കിടുക</translation> <translation id="510275257476243843">ഒരു മണിക്കൂർ ശേഷിക്കുന്നു</translation> <translation id="5123685120097942451">അദൃശ്യ ടാബ്</translation> <translation id="5127805178023152808">സമന്വയം ഓഫാണ്</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb index fab568909..886e031d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Нөөцөлсөн агуулгыг алгасч одоогийн хуудсыг дахин ачаалах</translation> <translation id="124678866338384709">Үндсэн чихтэй хуудсыг хаах</translation> <translation id="1258753120186372309">Google doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Унших жагсаалт</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" />-г хуваалцаж чадсангүй</translation> <translation id="1283039547216852943">Дэлгэхийн тулд товших</translation> <translation id="1291207594882862231">Түүх, күүки, сайтын өгөгдөл, нөөцийг устгах...</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Шууд хайх эсвэл холбоотой үйлдлийг харахын тулд үгийг товшино уу</translation> <translation id="2760989362628427051">Таны төхөөрөмжийн бараан загвар эсвэл Батарей хэмнэгч асаалттай үед бараан загварыг асаах</translation> <translation id="2762000892062317888">дөнгөж сая</translation> -<translation id="2771869497727323769">Текст рүү очих холбоосыг үүсгэж чадсангүй. Хуудасны холбоосыг аппад хуваалцана уу.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> секунд үлдсэн</translation> <translation id="2779651927720337254">татаж чадсангүй</translation> <translation id="2781151931089541271">1 секунд үлдсэн</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Таб хуваалцах төхөөрөмжийн жагсаалтыг хаалаа.</translation> <translation id="4149994727733219643">Вэб хуудасны хялбаршуулсан харагдац</translation> <translation id="4170011742729630528">Энэ үйлчилгээг авах боломжгүй байна; Та дараа дахин оролдоно уу.</translation> +<translation id="4175173967354304331">Таныг энэ сайт, Chrome болон Google аппад нэвтрүүлнэ</translation> <translation id="4179980317383591987"><ph name="AMOUNT" />-г ашигласан</translation> <translation id="4181841719683918333">Хэл</translation> <translation id="4183868528246477015">Google дуран <ph name="BEGIN_NEW" />Шинэ<ph name="END_NEW" />-р хайх</translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 таталт дууссан.}other{# таталт дууссан.}}</translation> <translation id="4766678251456904326">Төхөөрөмжид бүртгэл нэмэх</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 таталт товлосон.}other{# таталт товлосон.}}</translation> -<translation id="478981486571169252">Та Chrome-с өөрийн <ph name="SITE_NAME" />-н нэвтрэлтийн төлөв, интернэтээр үзсэн өгөгдөл болон сайтын өгөгдлийг харна.</translation> <translation id="4802417911091824046">Нэвтрэх үгийн шифрлэлтэд Google Pay-н төлбөрийн хэрэгслүүд болон хаягуудыг агуулдаггүй. Энэ тохиргоог өөрчлөхийн тулд <ph name="BEGIN_LINK" />синкийг шинэчилнэ үү<ph name="END_LINK" /></translation> <translation id="4807098396393229769">Картан дээрх нэр</translation> @@ -511,7 +511,6 @@ <translation id="5040262127954254034">Нууцлал</translation> <translation id="5087580092889165836">Карт нэмэх</translation> <translation id="509429900233858213">Алдаа гарлаа.</translation> -<translation id="5100748015044654621">Тодруулсан текстийн холбоосыг аппад хуваалцах</translation> <translation id="510275257476243843">1 цаг үлдсэн</translation> <translation id="5123685120097942451">Нууцлалтай чихтэй хуудас</translation> <translation id="5127805178023152808">Тохиргоог унтраасан байна</translation> @@ -678,6 +677,7 @@ <translation id="6341580099087024258">Файлыг хаана хадгалахыг асуух</translation> <translation id="6342069812937806050">Яг одоо</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 болон бусад <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 болон бусад <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation> +<translation id="6345878117466430440">Уншсан гэж тэмдэглэх</translation> <translation id="6364438453358674297">Түүхээс зөвлөмж устгах уу?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" />-д танд шаардлагатай онлайнаар аюулгүй үйлдэл хийх, үүсгэх болон судлахад шаардлагатай ухаалаг технологи, хурд бий</translation> <translation id="6378173571450987352">Дэлгэрэнгүй: Ашигласан датаны хэмжээгээр эрэмбэлсэн</translation> @@ -993,6 +993,7 @@ <translation id="8655129584991699539">Та өгөгдлийг Chrome тохиргоонд устгаж болно</translation> <translation id="8662811608048051533">Ихэнх сайтаас гаргах болно.</translation> <translation id="8664979001105139458">Файлын нэр ашиглалтад байна</translation> +<translation id="8683039184091909753">зураг</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Дохионы хүчний түвшин: # мөр}other{Дохионы хүчний түвшин: # мөр}}</translation> <translation id="869891660844655955">Дуусах хугацаа</translation> <translation id="8712637175834984815">Ойлголоо</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb index 6819f565..ec1f68fc 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">कॅशे केलेला आशय दुर्लक्षित करून, सद्य पेज रीलोड करा</translation> <translation id="124678866338384709">वर्तमान टॅब बंद करा</translation> <translation id="1258753120186372309">Google डूडल: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">वाचन सूची</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> शेअर करू शकलो नाही</translation> <translation id="1283039547216852943">विस्तृत करण्यासाठी टॅप करा</translation> <translation id="1291207594882862231">इतिहास, कुकी, साइट डेटा, कॅशे साफ करा…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">झटपट शोधण्यासाठी किंवा संबंधित ॲक्शन पाहण्यासाठी एखाद्या शब्दावर टॅप करा</translation> <translation id="2760989362628427051">तुमच्या डिव्हाइसची गडद थीम किंवा बॅटरी सेव्हर सुरू असताना गडद थीम सुरू करा</translation> <translation id="2762000892062317888">आत्ताच</translation> -<translation id="2771869497727323769">मजकुराची लिंक तयार करता आली नाही. पेजची लिंक अॅपमध्ये शेअर करा.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> सेकंद शिल्लक</translation> <translation id="2779651927720337254">अयशस्वी झाले</translation> <translation id="2781151931089541271">1 सेकंद शिल्लक</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{एक डाउनलोड पूर्ण झाला आहे.}other{# डाउनलोड पूर्ण झाले आहेत.}}</translation> <translation id="4766678251456904326">डिव्हाइसवर खाते जोडा</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{एक डाउनलोड शेड्युल केलेले आहे.}other{# डाउनलोड शेड्युल केलेली आहेत.}}</translation> -<translation id="478981486571169252">तुम्हाला Chrome मध्ये तुमची <ph name="SITE_NAME" /> साइन इन स्थिती, ब्राउझिंग डेटा आणि साइट डेटा दिसेल.</translation> <translation id="4802417911091824046">पासफ्रेज एंक्रिप्शनमध्ये Google Pay वरील पेमेंट पद्धतींचा आणि पत्त्यांचा समावेश नसतो. हे सेटिंग बदलण्यासाठी, <ph name="BEGIN_LINK" />सिंक रीसेट करा<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">गोपनीयता</translation> <translation id="5087580092889165836">कार्ड जोडा</translation> <translation id="509429900233858213">एक एरर आली आहे.</translation> -<translation id="5100748015044654621">हायलाइट केलेल्या मजकुराची लिंक अॅपमध्ये शेअर करा</translation> <translation id="510275257476243843">1 तास शिल्लक</translation> <translation id="5123685120097942451">गुप्त टॅब</translation> <translation id="5127805178023152808">संकालन बंद आहे</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb index b0f6ad6..c679d05 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Muat semula laman semasa dan abaikan kdgn dicache</translation> <translation id="124678866338384709">Tutup tab semasa</translation> <translation id="1258753120186372309">Coretan Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Senarai bacaan</translation> <translation id="1266864766717917324">Tidak dapat berkongsi <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Ketik untuk kembangkan</translation> <translation id="1291207594882862231">Hapuskan sejarah, kuki, data tapak, cache...</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Ketik perkataan untuk mencari dengan serta-merta atau melihat tindakan yang berkaitan</translation> <translation id="2760989362628427051">Hidupkan tema gelap apabila tema gelap atau Penjimat Bateri peranti anda dihidupkan</translation> <translation id="2762000892062317888">sebentar tadi</translation> -<translation id="2771869497727323769">Tidak dapat membuat pautan pada teks. Kongsikan pautan ke halaman dalam apl.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> saat lagi</translation> <translation id="2779651927720337254">gagal</translation> <translation id="2781151931089541271">1 saat lagi</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Senarai peranti untuk berkongsi tab ditutup.</translation> <translation id="4149994727733219643">Paparan ringkas bagi halaman web</translation> <translation id="4170011742729630528">Perkhidmatan tidak tersedia; cuba lagi kemudian.</translation> +<translation id="4175173967354304331">Anda akan dilog masuk ke tapak ini, Chrome dan apl Google</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> digunakan</translation> <translation id="4181841719683918333">Bahasa</translation> <translation id="4183868528246477015">Cari dengan Google Lens <ph name="BEGIN_NEW" />Baharu<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 muat turun selesai.}other{# muat turun selesai.}}</translation> <translation id="4766678251456904326">Tambahkan akaun pada peranti</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 muat turun dijadualkan.}other{# muat turun dijadualkan.}}</translation> -<translation id="478981486571169252">Anda akan melihat status log masuk <ph name="SITE_NAME" />, data semakan imbas dan data tapak anda dalam Chrome.</translation> <translation id="4802417911091824046">Penyulitan ungkapan laluan tidak termasuk kaedah pembayaran dan alamat daripada Google Pay. Untuk menukar tetapan ini, <ph name="BEGIN_LINK" />tetapkan semula penyegerakan<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Privasi</translation> <translation id="5087580092889165836">Tambah kad</translation> <translation id="509429900233858213">Ralat telah berlaku.</translation> -<translation id="5100748015044654621">Kongsikan pautan kepada teks yang diserlahkan dalam apl</translation> <translation id="510275257476243843">1 jam lagi</translation> <translation id="5123685120097942451">Tab Inkognito</translation> <translation id="5127805178023152808">Penyegerakan dimatikan</translation> @@ -577,7 +576,7 @@ <translation id="5620928963363755975">Cari fail dan halaman anda dalam Muat Turun daripada butang Lagi Pilihan</translation> <translation id="5626134646977739690">Nama:</translation> <translation id="5639724618331995626">Benarkan semua tapak</translation> -<translation id="5648166631817621825">7 hari terakhir</translation> +<translation id="5648166631817621825">7 hari lalu</translation> <translation id="5655963694829536461">Cari muat turun anda</translation> <translation id="5659593005791499971">E-mel</translation> <translation id="5665379678064389456">Buat acara dalam <ph name="APP_NAME" /></translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Tanya tempat fail hendak disimpan</translation> <translation id="6342069812937806050">Sebentar tadi</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 dan <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> lagi}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 dan <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> lagi}}</translation> +<translation id="6345878117466430440">Tandai sebagai dibaca</translation> <translation id="6364438453358674297">Alih keluar cadangan daripada sejarah?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> mempunyai ciri-ciri pintar dan kelajuan yang anda perlukan untuk melakukan, menghasilkan dan meneroka pelbagai perkara secara dalam talian.</translation> <translation id="6378173571450987352">Butiran: Diisih mengikut jumlah data yang digunakan</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Anda boleh mengosongkan data dalam Tetapan Chrome</translation> <translation id="8662811608048051533">Mengelog anda keluar daripada kebanyakan tapak.</translation> <translation id="8664979001105139458">Nama fail sudah wujud</translation> +<translation id="8683039184091909753">imej</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Tahap Kekuatan Isyarat: # bar}other{Tahap Kekuatan Isyarat: # bar}}</translation> <translation id="869891660844655955">Tarikh tamat tempoh</translation> <translation id="8712637175834984815">Faham</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb index ec2a792..bd3d4fa8 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">လက်ရှိစာမျက်နှာကို ပြန်ဖွင့်ပြီး ကက်ရှ်ကို ပယ်ရန်</translation> <translation id="124678866338384709">လက်ရှိတဘ်ကို ပိတ်ရန်</translation> <translation id="1258753120186372309">Google doodle- <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">ဖတ်ရန် စာရင်း</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> ကို မျှဝေ၍မရပါ။</translation> <translation id="1283039547216852943">ချဲ့ရန် တို့ပါ</translation> <translation id="1291207594882862231">မှတ်တမ်း၊ ကွတ်ကီး၊ ဆိုက်ဒေတာ၊ ကက်ရှ်များကို ရှင်းလင်းပါ...</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">ချက်ချင်းရှာဖွေရန် သို့မဟုတ် သက်ဆိုင်သည့် လုပ်ဆောင်ချက်များကို ကြည့်ရန် စာလုံးတစ်လုံးကို တို့ပါ</translation> <translation id="2760989362628427051">သင့်စက်၏ မှောင်သည့်အပြင်အဆင် သို့မဟုတ် ဘက်ထရီအားထိန်းကို ဖွင့်ထားသည့်အခါ မှောင်သည့် အပြင်အဆင်ကို ဖွင့်ပါ</translation> <translation id="2762000892062317888">ယခုလေးတင်</translation> -<translation id="2771869497727323769">စာသားသို့ လင့်ခ်ကို ပြုလုပ်၍မရပါ။ အက်ပ်အတွင်းတွင် လင့်ခ်ကို စာမျက်နှာသို့ မျှဝေပါ။</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> စက္ကန့် ကျန်သည်</translation> <translation id="2779651927720337254">ဒေါင်းလုဒ် မပြီးဆုံးပါ</translation> <translation id="2781151931089541271">၁ စက္ကန့် ကျန်သည်</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">တဘ်မျှဝေရန် စက်ပစ္စည်းစာရင်းကို ပိတ်ထားသည်။</translation> <translation id="4149994727733219643">ဝဘ်စာမျက်နှာများအတွက် ရိုးရှင်းသည့်မြင်ကွင်း</translation> <translation id="4170011742729630528">ဝန်ဆောင်မှု မရနိုင်ပါ; နောက်မှထပ်မံကြိုးစားပါ။</translation> +<translation id="4175173967354304331">ဤဝဘ်ဆိုက်၊ Chrome နှင့် Google အက်ပ်များသို့ လက်မှတ်ထိုးဝင်သွားပါမည်</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> ကို အသုံးပြုထားသည်</translation> <translation id="4181841719683918333">ဘာသာစကားများ</translation> <translation id="4183868528246477015">Google Lens <ph name="BEGIN_NEW" />အသစ်<ph name="END_NEW" /> ဖြင့်ရှာခြင်း</translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{ဒေါင်းလုဒ် ၁ ခု လုပ်ပြီးပါပြီ။}other{ဒေါင်းလုဒ် # ခု လုပ်ပြီးပါပြီ။}}</translation> <translation id="4766678251456904326">စက်သို့ အကောင့်ထည့်ရန်</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{ဒေါင်းလုဒ် 1 ခု စီစဉ်ထားသည်။}other{ဒေါင်းလုဒ် # ခု စီစဉ်ထားသည်။}}</translation> -<translation id="478981486571169252">သင်၏ <ph name="SITE_NAME" /> လက်မှတ်ထိုးဝင်မှု အခြေအနေ၊ ဖွင့်ကြည့်ထားသည့်မှတ်တမ်းဒေတာနှင့် ဝဘ်ဆိုက်ဒေတာများကို Chrome တွင် မြင်ရပါမည်။</translation> <translation id="4802417911091824046">စကားဝှက်စာ အသွင်ဝှက်ခြင်းတွင် ငွေပေးချေနည်းလမ်းများနှင့် Google Pay မှ လိပ်စာများ မပါဝင်ပါ။ ဤဆက်တင်ကို ပြောင်းရန် <ph name="BEGIN_LINK" />စင့်ခ်လုပ်ခြင်းကို ပြင်ဆင်သတ်မှတ်ပါ<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">ကိုယ်ရေး</translation> <translation id="5087580092889165836">ကတ်ကိုထည့်ရန်</translation> <translation id="509429900233858213">အမှား တစ်ခု ကြုံခဲ့ရသည်။</translation> -<translation id="5100748015044654621">အက်ပ်အတွင်းတွင် အထူးအသားပေးစာသားသို့ လင့်ခ် မျှဝေရန်</translation> <translation id="510275257476243843">၁ နာရီ ကျန်သည်</translation> <translation id="5123685120097942451">ရုပ်ဖျက်တဘ်</translation> <translation id="5127805178023152808">စင့် ပိတ်ထား၏</translation> @@ -678,6 +677,7 @@ <translation id="6341580099087024258">ဖိုင်များ သိမ်းရန် နေရာကို မေးမြန်းပါ</translation> <translation id="6342069812937806050">ယခုပင်</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 နှင့် နောက်ထပ် <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ခု}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 နှင့် နောက်ထပ် <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ခု}}</translation> +<translation id="6345878117466430440">ဖတ်ပြီးဟု မှတ်သားရန်</translation> <translation id="6364438453358674297">အကြံပေးချက်ကို မှတ်တမ်း ထဲမှ ဖယ်ရှားမလား?</translation> <translation id="6366047038980456022">အွန်လိုင်းတွင် လုံခြုံစွာ အသုံးပြုရန်၊ ပြုလုပ်ရန်နှင့် စူးစမ်းရန်အတွက် သင်လိုအပ်သည့် ချက်ခြာပါးနပ်သည့်စနစ်နှင့် အမြန်နှုန်းတို့ <ph name="APP_NAME" /> တွင် ရှိသည်</translation> <translation id="6378173571450987352">အသေးစိတ်များ− အသုံးပြုသည့် ဒေတာပမာဏအလိုက် စီထားသည်</translation> @@ -993,6 +993,7 @@ <translation id="8655129584991699539">ဒေတာများကို 'Chrome ဆက်တင်များ' တွင် ရှင်းထုတ်နိုင်သည်</translation> <translation id="8662811608048051533">သင့်ကို ဝက်ဆိုက်အများစုမှ ထွက်သွားစေပါမည်။</translation> <translation id="8664979001105139458">ဖိုင်အမည် ရှိပြီးသားဖြစ်သည်</translation> +<translation id="8683039184091909753">ပုံ</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{လိုင်းဆွဲအားအဆင့်- # ဘား}other{လိုင်းဆွဲအားအဆင့်- # ဘား}}</translation> <translation id="869891660844655955">သက်တမ်း ကုန်ဆုံးရက်</translation> <translation id="8712637175834984815">ရပါပြီ!</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb index 6ef8e4d..99741519 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">क्यास गरिएको सामग्रीको बेवास्ता गर्दै हालको पृष्ठलाई पुनःलोड गर्नुहोस्</translation> <translation id="124678866338384709">हालको ट्याब बन्द गर्नुहोस्</translation> <translation id="1258753120186372309">Google केरकार: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">पाठ्य सूची</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> आदान प्रदान गर्न सकिएन</translation> <translation id="1283039547216852943">विस्तृत गर्न ट्याप गर्नुहोस्</translation> <translation id="1291207594882862231">इतिहास, कुकी, साइट सम्बन्धी डेटा, क्यासलाई खाली गर्नुहोस्…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">तत्कालै खोज्नका लागि कुनै शब्दमा ट्याप गर्नुहोस् वा सम्बन्धित कारबाहीहरू हेर्नुहोस्</translation> <translation id="2760989362628427051">तपाईंको यन्त्रमा अँध्यारो थिम वा ब्याट्री सेभर मोड सक्रिय हुँदा अँध्यारो थिम सक्रिय गर्नुहोस्</translation> <translation id="2762000892062317888">भर्खरै</translation> -<translation id="2771869497727323769">हाइलाइट गरिएको पाठको लिंक बनाउन सकिँदैन। कुनै एपमार्फत पृष्ठको लिंक सेयर गर्नुहोस्।</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> सेकेन्ड बाँकी छ</translation> <translation id="2779651927720337254">डाउनलोड गर्न सकिएन</translation> <translation id="2781151931089541271">१ सेकेन्ड बाँकी छ</translation> @@ -466,7 +466,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{१ डाउनलोड सम्पन्न भयो।}other{# डाउनलोडहरू सम्पन्न भए।}}</translation> <translation id="4766678251456904326">यन्त्रमा खाता जोड्नुहोस्</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{एउटा डाउनलोडको समयतालिका निर्धारण गरियो।}other{# वटा डाउनलोडको समयतालिका निर्धारण गरियो।}}</translation> -<translation id="478981486571169252">तपाईं Chrome मा आफ्नो <ph name="SITE_NAME" /> को साइन इनसम्बन्धी अवस्था, ब्राउजिङ डेटा र साइट डेटा देख्नु हुने छ।</translation> <translation id="4802417911091824046">पासफ्रेजमार्फत इन्क्रिप्सन गर्ने कार्यअन्तर्गत Google Pay का भुक्तानी विधि र ठेगानाहरू समावेश हुँदैनन्। यो सेटिङ परिवर्तन गर्न <ph name="BEGIN_LINK" />सिंक रिसेट गर्नुहोस्<ph name="END_LINK" /></translation> @@ -511,7 +510,6 @@ <translation id="5040262127954254034">गोपनीयता</translation> <translation id="5087580092889165836">कार्ड थप्नुहोस्</translation> <translation id="509429900233858213">त्रुटि भयो।</translation> -<translation id="5100748015044654621">हाइलाइट गरिएको पाठको लिंक कुनै एपमार्फत सेयर गर्नुहोस्</translation> <translation id="510275257476243843">१ घन्टा बाँकी छ</translation> <translation id="5123685120097942451">इन्कोग्निटो ट्याब</translation> <translation id="5127805178023152808">सिंक बन्द छ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb index de888c8b..8ef15bb 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">De pagina opnieuw laden, gecachte content negeren</translation> <translation id="124678866338384709">Huidig tabblad sluiten</translation> <translation id="1258753120186372309">Google-doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Leeslijst</translation> <translation id="1266864766717917324">Kan <ph name="CONTENT_TYPE" /> niet delen</translation> <translation id="1283039547216852943">Tik om uit te vouwen</translation> <translation id="1291207594882862231">Geschiedenis, cookies, sitegegevens, cachegeheugen wissen</translation> @@ -213,12 +214,11 @@ <translation id="2656405586795711023">Web-apps</translation> <translation id="2689830683995595741">Door Chrome te gebruiken, ga je akkoord met de <ph name="BEGIN_LINK1" />servicevoorwaarden van Google<ph name="END_LINK1" /> en met de <ph name="BEGIN_LINK2" />aanvullende servicevoorwaarden van Google Chrome en Chrome OS<ph name="END_LINK2" />. Ook is de <ph name="BEGIN_LINK3" />privacyverklaring voor Google-accounts die worden beheerd met Family Link<ph name="END_LINK3" /> van toepassing.</translation> <translation id="2707726405694321444">Pagina vernieuwen</translation> -<translation id="2709516037105925701">Automatisch aanvullen</translation> +<translation id="2709516037105925701">Automatisch invullen</translation> <translation id="2728754400939377704">Sorteren op site</translation> <translation id="2744248271121720757">Tik op een woord om meteen te zoeken of gerelateerde acties te bekijken</translation> <translation id="2760989362628427051">Het donkere thema inschakelen wanneer het donkere thema of de batterijbesparing van je apparaat is ingeschakeld</translation> <translation id="2762000892062317888">zojuist</translation> -<translation id="2771869497727323769">Kan geen link naar tekst maken. Deel een link naar een pagina in een app.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> seconden resterend</translation> <translation id="2779651927720337254">mislukt</translation> <translation id="2781151931089541271">1 seconde resterend</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">De lijst met apparaten om een tabblad mee te delen is gesloten.</translation> <translation id="4149994727733219643">Vereenvoudigde weergave voor webpagina's</translation> <translation id="4170011742729630528">De service is niet beschikbaar. Probeer het later opnieuw.</translation> +<translation id="4175173967354304331">Je wordt ingelogd bij deze site, Chrome en Google-apps</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> gebruikt</translation> <translation id="4181841719683918333">Talen</translation> <translation id="4183868528246477015">Zoeken met Google Lens <ph name="BEGIN_NEW" />Nieuw<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 download voltooid.}other{# downloads voltooid.}}</translation> <translation id="4766678251456904326">Account toevoegen aan apparaat</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 download gepland.}other{# downloads gepland.}}</translation> -<translation id="478981486571169252">Je ziet je inlogstatus, browsergegevens en sitegegevens van <ph name="SITE_NAME" /> in Chrome.</translation> <translation id="4802417911091824046">Wachtwoordzinversleuteling is niet van toepassing op betaalmethoden en adressen van Google Pay. <ph name="BEGIN_LINK" />Reset de synchronisatie<ph name="END_LINK" /> als je deze instelling wilt wijzigen.</translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Privacy</translation> <translation id="5087580092889165836">Pas toevoegen</translation> <translation id="509429900233858213">Er is een fout opgetreden.</translation> -<translation id="5100748015044654621">Link naar de gemarkeerde tekst delen in een app</translation> <translation id="510275257476243843">1 uur resterend</translation> <translation id="5123685120097942451">Incognitotabblad</translation> <translation id="5127805178023152808">Synchronisatie is uitgeschakeld</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Vragen waar bestanden moeten worden opgeslagen</translation> <translation id="6342069812937806050">Zojuist</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 en nog <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> andere}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 en nog <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> andere}}</translation> +<translation id="6345878117466430440">Markeren als gelezen</translation> <translation id="6364438453358674297">Suggestie verwijderen uit geschiedenis?</translation> <translation id="6366047038980456022">Met <ph name="APP_NAME" /> heb je de functies en snelheid die je nodig hebt om veilig online iets te doen, te maken en te zoeken</translation> <translation id="6378173571450987352">Details: gesorteerd op hoeveelheid gebruikte data</translation> @@ -755,7 +755,7 @@ <translation id="6850830437481525139"><ph name="TAB_COUNT" /> tabbladen gesloten</translation> <translation id="685850645784703949">Discover van Google - uitgeschakeld</translation> <translation id="6864459304226931083">Afbeelding downloaden</translation> -<translation id="6865313869410766144">Formuliergegevens voor Automatisch aanvullen</translation> +<translation id="6865313869410766144">Formuliergegevens voor 'Automatisch invullen'</translation> <translation id="6882836635272038266">Standaardbeveiliging tegen websites, downloads en extensies die als gevaarlijk zijn bestempeld.</translation> <translation id="688738109438487280">Bestaande gegevens toevoegen aan <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Ontgrendelen om je wachtwoord te kopiëren</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Je kunt de gegevens wissen in de Chrome-instellingen</translation> <translation id="8662811608048051533">Hiermee word je uitgelogd van de meeste sites.</translation> <translation id="8664979001105139458">Bestandsnaam bestaat al</translation> +<translation id="8683039184091909753">afbeelding</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Signaalsterkte: # streepje}other{Signaalsterkte: # streepjes}}</translation> <translation id="869891660844655955">Vervaldatum</translation> <translation id="8712637175834984815">Begrepen</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb index af16e54..e39ebb2 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Last inn siden på nytt, men ignorer bufret innhold</translation> <translation id="124678866338384709">Lukk den aktive fanen</translation> <translation id="1258753120186372309">Google-doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Leseliste</translation> <translation id="1266864766717917324">Kunne ikke dele <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Trykk for å vise</translation> <translation id="1291207594882862231">Slett loggoppføringer, informasjonskapsler, nettstedsdata, bufferen …</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Trykk på et ord for å søke umiddelbart eller se relaterte handlinger</translation> <translation id="2760989362628427051">Slå på mørkt tema når batterisparing eller enhetsinnstillingen for mørkt tema er på</translation> <translation id="2762000892062317888">akkurat nå</translation> -<translation id="2771869497727323769">Kan ikke opprette noen link til teksten. Del en link til siden i en app.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> sekunder igjen</translation> <translation id="2779651927720337254">mislyktes</translation> <translation id="2781151931089541271">1 sekund igjen</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Listen over enheter du kan dele faner med, er lukket.</translation> <translation id="4149994727733219643">Forenklet visning av nettsider</translation> <translation id="4170011742729630528">Tjenesten er ikke tilgjengelig. Prøv på nytt senere.</translation> +<translation id="4175173967354304331">Du blir logget på dette nettstedet, Chrome og Google-apper</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> brukt</translation> <translation id="4181841719683918333">Språk</translation> <translation id="4183868528246477015">Søk med Google Lens <ph name="BEGIN_NEW" />Nyhet<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 nedlasting er fullført.}other{# nedlastinger er fullført.}}</translation> <translation id="4766678251456904326">Legg til en konto på enheten</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 nedlasting er planlagt.}other{# nedlastinger er planlagt.}}</translation> -<translation id="478981486571169252">Du kommer til å se påloggingsstatus, nettlesingsdata og nettstedsdata for <ph name="SITE_NAME" /> i Chrome.</translation> <translation id="4802417911091824046">Kryptering av passordfraser inkluderer ikke betalingsmåter og adresser fra Google Pay. For å endre denne innstillingen, <ph name="BEGIN_LINK" />tilbakestill synkroniseringen<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Personvern</translation> <translation id="5087580092889165836">Legg til et kort</translation> <translation id="509429900233858213">Det oppsto en feil.</translation> -<translation id="5100748015044654621">Del en link til den merkede teksten i en app</translation> <translation id="510275257476243843">1 time igjen</translation> <translation id="5123685120097942451">Inkognitofane</translation> <translation id="5127805178023152808">Synkronisering er slått av</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Spør hvor filer skal lagres</translation> <translation id="6342069812937806050">Akkurat nå</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" /> og <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> til}other{<ph name="SHIPPING_ADDRESS_PREVIEW" /> og <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> til}}</translation> +<translation id="6345878117466430440">Merk som lest</translation> <translation id="6364438453358674297">Vil du fjerne forslaget fra loggen?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> har funksjonene og hastigheten du trenger for å utforske og utfolde deg på nettet på en trygg måte</translation> <translation id="6378173571450987352">Informasjon: Sortert etter mengden data som er brukt</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Du kan slette dataene i Chrome-innstillingene</translation> <translation id="8662811608048051533">Logger deg av de fleste nettsteder.</translation> <translation id="8664979001105139458">Filnavnet finnes allerede</translation> +<translation id="8683039184091909753">bilde</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Signalstyrkenivå: # stolpe}other{Signalstyrkenivå: # stolper}}</translation> <translation id="869891660844655955">Utløpsdato</translation> <translation id="8712637175834984815">Skjønner</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb index 11eb8933..3025d94 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">କ୍ୟାଶ୍ ବିଷୟବସ୍ତୁ ଏଡ଼ାଇ ବର୍ତ୍ତମାନ ପୃଷ୍ଠା ପୁନଃଲୋଡ୍ କରନ୍ତୁ</translation> <translation id="124678866338384709">ସାମ୍ପ୍ରତିକ ଟାବ୍ ବନ୍ଦ କରନ୍ତୁ</translation> <translation id="1258753120186372309">Google ଡୁଡଲ୍: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">ପଢ଼ିବା ତାଲିକା</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" />ସେୟାର୍ କରିହେଲା ନାହିଁ</translation> <translation id="1283039547216852943">ପ୍ରସାରଣ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ</translation> <translation id="1291207594882862231">ଇତିବୃତ୍ତି, କୁକୀ, ସାଇଟ୍ ଡାଟା, କ୍ୟାଚିକୁ ଖାଲି କରନ୍ତୁ…</translation> @@ -217,7 +218,6 @@ <translation id="2744248271121720757">ତତ୍କ୍ଷଣାତ୍ ସର୍ଚ୍ଚ କରିବାକୁ କିମ୍ବା ସେହି ସମ୍ବନ୍ଧିତ କାର୍ଯ୍ୟ ଦେଖିବାକୁ ଏକ ଶଦ୍ଦ ଟାପ୍ କରନ୍ତୁ</translation> <translation id="2760989362628427051">ଆପଣଙ୍କ ଡିଭାଇସ୍ର ଗାଢା ଥିମ୍ ବା ବ୍ୟାଟେରୀ ସେଭର୍ ଚାଲୁଥିବା ସମୟରେ ଗାଢା ଥିମ୍ ଚାଲୁ କରନ୍ତୁ</translation> <translation id="2762000892062317888">ଏହିକ୍ଷଣି</translation> -<translation id="2771869497727323769">ଟେକ୍ସଟର ଲିଙ୍କ୍ ତିଆରି କରାଯାଇପାରିବ ନାହିଁ। ଆପରେ ପୃଷ୍ଠାର ଲିଙ୍କ୍ ସେୟାର୍ କରନ୍ତୁ।</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> ସେକେଣ୍ଡ ଅବଶିଷ୍ଟ ଅଛି</translation> <translation id="2779651927720337254">ବିଫଳ ହେଲା</translation> <translation id="2781151931089541271">1 ସେକେଣ୍ଡ ବାକି ଅଛି</translation> @@ -466,7 +466,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1ଟି ଡାଉନ୍ଲୋଡ୍ ସମୂର୍ଣ୍ଣ ହେଲା।}other{# ଟି ଡାଉନ୍ଲୋଡ୍ ସମୂର୍ଣ୍ଣ ହେଲା।}}</translation> <translation id="4766678251456904326">ଡିଭାଇସରେ ଆକାଉଣ୍ଟ ଯୋଗ କରନ୍ତୁ</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1ଟି ଡାଉନଲୋଡ୍ ସିଡୁଲ୍ କରାଯାଇଛି।}other{#ଟି ଡାଉନଲୋଡ୍ ସିଡୁଲ୍ କରାଯାଇଛି।}}</translation> -<translation id="478981486571169252">Chromeରେ ଆପଣ ଆପଣଙ୍କ <ph name="SITE_NAME" />ର ସାଇନ୍-ଇନ୍ ସ୍ଥିତି, ବ୍ରାଉଜିଂ ଡାଟା ଏବଂ ସାଇଟ୍ ଡାଟା, ଦେଖିବେ।</translation> <translation id="4802417911091824046">ପାସଫ୍ରେଜ୍ ଏନକ୍ରିପ୍ସନ୍, Google Payରୁ ପେମେଣ୍ଟ ପଦ୍ଧତି ଓ ଠିକଣାଗୁଡ଼ିକୁ ଅନ୍ତର୍ଭୁକ୍ତ କରେ ନାହିଁ। ଏହି ସେଟିଂ ପରିବର୍ତ୍ତନ କରିବାକୁ, <ph name="BEGIN_LINK" />ସିଙ୍କ୍ ରିସେଟ୍ କରନ୍ତୁ<ph name="END_LINK" /></translation> @@ -511,7 +510,6 @@ <translation id="5040262127954254034">ଗୋପନୀୟତା</translation> <translation id="5087580092889165836">କାର୍ଡ ଯୋଗ କରନ୍ତୁ</translation> <translation id="509429900233858213">ଏକ ତ୍ରୁଟି ଦେଖାଦେଲା।</translation> -<translation id="5100748015044654621">ଆପରେ ହାଇଲାଇଟ୍ କରାଯାଇଥିବା ଟେକ୍ସଟ୍ ସହିତ ଲିଙ୍କ୍ ସେୟାର୍ କରନ୍ତୁ</translation> <translation id="510275257476243843">1 ଘଣ୍ଟା ବାକି ଅଛି</translation> <translation id="5123685120097942451">ଇନ୍କଗ୍ନିଟୋ ଟାବ୍</translation> <translation id="5127805178023152808">ସିଙ୍କ୍ ବନ୍ଦ ଅଛି</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb index 7feeb19..e6f43dbd 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">ਕੈਸ਼ੇ ਕੀਤੀ ਸਮੱਗਰੀ ਨੂੰ ਅਣਡਿੱਠ ਕਰਕੇ ਮੌਜੂਦਾ ਪੰਨਾ ਰੀਲੋਡ ਕਰੋ</translation> <translation id="124678866338384709">ਮੌਜੂਦਾ ਟੈਬ ਬੰਦ ਕਰੋ</translation> <translation id="1258753120186372309">Google ਡੂਡਲ: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">ਪੜ੍ਹਤ ਸੂਚੀ</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> ਨਾਲ ਸਾਂਝਾ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ</translation> <translation id="1283039547216852943">ਵਿਸਤਾਰ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ</translation> <translation id="1291207594882862231">ਇਤਿਹਾਸ, ਕੁਕੀਜ਼, ਸਾਈਟ ਡਾਟਾ, ਕੈਸ਼ੇ ਸਾਫ਼ ਕਰੋ…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">ਤਤਕਾਲ ਖੋਜ ਲਈ ਕਿਸੇ ਸ਼ਬਦ 'ਤੇ ਟੈਪ ਕਰੋ ਜਾਂ ਸੰਬੰਧਿਤ ਕਾਰਵਾਈਆਂ ਦੇਖੋ</translation> <translation id="2760989362628427051">ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦਾ ਗੂੜ੍ਹਾ ਥੀਮ ਜਾਂ ਬੈਟਰੀ ਸੇਵਰ ਮੋਡ ਚਾਲੂ ਹੋਣ 'ਤੇ ਗੂੜ੍ਹੇ ਥੀਮ ਨੂੰ ਚਾਲੂ ਕਰੋ</translation> <translation id="2762000892062317888">ਹੁਣੇ ਹੀ</translation> -<translation id="2771869497727323769">ਲਿਖਤ ਲਈ ਲਿੰਕ ਨਹੀਂ ਬਣਾਇਆ ਜਾ ਸਕਦਾ। ਇੱਕ ਐਪ ਵਿੱਚ ਪੰਨੇ ਲਈ ਲਿੰਕ ਸਾਂਝਾ ਕਰੋ।</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> ਸਕਿੰਟ ਬਾਕੀ</translation> <translation id="2779651927720337254">ਅਸਫਲ</translation> <translation id="2781151931089541271">1 ਸਕਿੰਟ ਬਾਕੀ</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 ਡਾਊਨਲੋਡ ਪੂਰਾ ਹੋਇਆ।}one{# ਡਾਊਨਲੋਡ ਪੂਰਾ ਹੋਇਆ।}other{# ਡਾਊਨਲੋਡ ਪੂਰੇ ਹੋਏ।}}</translation> <translation id="4766678251456904326">ਡੀਵਾਈਸ ਵਿੱਚ ਖਾਤਾ ਸ਼ਾਮਲ ਕਰੋ</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 ਡਾਊਨਲੋਡ ਨੂੰ ਨਿਯਤ ਕੀਤਾ ਗਿਆ।}one{# ਡਾਊਨਲੋਡ ਨੂੰ ਨਿਯਤ ਕੀਤਾ ਗਿਆ।}other{# ਡਾਊਨਲੋਡਾਂ ਨੂੰ ਨਿਯਤ ਕੀਤਾ ਗਿਆ।}}</translation> -<translation id="478981486571169252">ਤੁਸੀਂ Chrome ਵਿੱਚ ਆਪਣੀ <ph name="SITE_NAME" /> ਸਾਈਨ-ਇਨ ਸਥਿਤੀ, ਬ੍ਰਾਊਜ਼ਿੰਗ ਡਾਟਾ ਅਤੇ ਸਾਈਟ ਡਾਟਾ ਦੇਖੋਗੇ।</translation> <translation id="4802417911091824046">ਪਾਸਫਰੇਜ਼ ਇਨਕ੍ਰਿਪਸ਼ਨ ਵਿੱਚ Google Pay ਦੀਆਂ ਭੁਗਤਾਨ ਵਿਧੀਆਂ ਅਤੇ ਪਤੇ ਸ਼ਾਮਲ ਨਹੀਂ ਹਨ। ਇਸ ਸੈਟਿੰਗ ਨੂੰ ਬਦਲਣ ਲਈ, <ph name="BEGIN_LINK" />ਸਮਕਾਲੀਕਰਨ ਨੂੰ ਰੀਸੈੱਟ ਕਰੋ<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">ਪ੍ਰਾਈਵੇਸੀ</translation> <translation id="5087580092889165836">ਕਾਰਡ ਸ਼ਾਮਲ ਕਰੋ</translation> <translation id="509429900233858213">ਇੱਕ ਗੜਬੜ ਹੋਈ</translation> -<translation id="5100748015044654621">ਐਪ ਵਿੱਚ ਉਜਾਗਰ ਕੀਤੀ ਲਿਖਤ ਨਾਲ ਲਿੰਕ ਸਾਂਝਾ ਕਰੋ</translation> <translation id="510275257476243843">1 ਘੰਟਾ ਬਾਕੀ</translation> <translation id="5123685120097942451">ਇਨਕੋਗਨਿਟੋ ਟੈਬ</translation> <translation id="5127805178023152808">ਸਿੰਕ ਬੰਦ ਹੈ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb index 694e0af0a..96306a0 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Ponowie załaduj stronę, bez pamięci podręcznej</translation> <translation id="124678866338384709">Zamknij bieżącą kartę</translation> <translation id="1258753120186372309">Doodle Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Do przeczytania</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> – nie udało się udostępnić</translation> <translation id="1283039547216852943">Kliknij, by rozwinąć</translation> <translation id="1291207594882862231">Wyczyść historię, pliki cookie, dane witryn, pamięć podręczną…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Kliknij słowo, by szybko je wyszukać lub wyświetlić powiązane czynności</translation> <translation id="2760989362628427051">Włącz tryb ciemny, gdy urządzenie ma włączony tryb ciemny lub oszczędzanie baterii</translation> <translation id="2762000892062317888">przed chwilą</translation> -<translation id="2771869497727323769">Nie udało się utworzyć linku do tekstu. Udostępnij link do strony w aplikacji.</translation> <translation id="2777555524387840389">Pozostało: <ph name="SECONDS" /> s</translation> <translation id="2779651927720337254">Nie pobrano</translation> <translation id="2781151931089541271">Pozostała sekunda</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Lista urządzeń, którym udostępnisz kartę, jest zamknięta.</translation> <translation id="4149994727733219643">Uproszczony widok stron internetowych</translation> <translation id="4170011742729630528">Usługa jest niedostępna. Spróbuj ponownie później.</translation> +<translation id="4175173967354304331">Zalogujesz się na tej stronie, w Chrome i w aplikacjach Google</translation> <translation id="4179980317383591987">Wykorzystano <ph name="AMOUNT" /></translation> <translation id="4181841719683918333">Języki</translation> <translation id="4183868528246477015">Szukaj z Obiektywem Google <ph name="BEGIN_NEW" />Nowość<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{Ukończono pobieranie 1 pliku.}few{Ukończono pobieranie # plików.}many{Ukończono pobieranie # plików.}other{Ukończono pobieranie # pliku.}}</translation> <translation id="4766678251456904326">Dodaj konto do urządzenia</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Zaplanowano pobranie 1 pliku.}few{Zaplanowano pobranie # plików.}many{Zaplanowano pobranie # plików.}other{Zaplanowano pobranie # pliku.}}</translation> -<translation id="478981486571169252">Będziesz mieć dostęp do stanu logowania, danych przeglądania oraz danych witryny w Chrome dotyczących Twojej strony <ph name="SITE_NAME" />.</translation> <translation id="4802417911091824046">Szyfrowanie hasłem nie obejmuje form płatności ani adresów w Google Pay. Aby zmienić to ustawienie, <ph name="BEGIN_LINK" />zresetuj synchronizację<ph name="END_LINK" />.</translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Prywatność</translation> <translation id="5087580092889165836">Dodaj kartę</translation> <translation id="509429900233858213">Wystąpił błąd.</translation> -<translation id="5100748015044654621">Udostępnij link do podświetlonego tekstu w aplikacji</translation> <translation id="510275257476243843">Pozostała godzina</translation> <translation id="5123685120097942451">Karta incognito</translation> <translation id="5127805178023152808">Synchronizacja jest wyłączona</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Pytaj, gdzie zapisać pliki</translation> <translation id="6342069812937806050">Przed momentem</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 i jeszcze <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}few{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 i jeszcze <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}many{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 i jeszcze <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 i jeszcze <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation> +<translation id="6345878117466430440">Oznacz jako przeczytane</translation> <translation id="6364438453358674297">Usunąć sugestię z historii?</translation> <translation id="6366047038980456022">Technologia i szybkość działania <ph name="APP_NAME" /> pozwolą Ci bezpiecznie tworzyć i poruszać się w internecie</translation> <translation id="6378173571450987352">Szczegóły: posortowane według wykorzystanych danych</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Dane możesz usunąć w Ustawieniach Chrome</translation> <translation id="8662811608048051533">Wylogowuje z większości stron internetowych.</translation> <translation id="8664979001105139458">Ta nazwa pliku już istnieje</translation> +<translation id="8683039184091909753">obraz</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Poziom siły sygnału: # słupek}few{Poziom siły sygnału: # słupki}many{Poziom siły sygnału: # słupków}other{Poziom siły sygnału: # słupka}}</translation> <translation id="869891660844655955">Data wygaśnięcia</translation> <translation id="8712637175834984815">Rozumiem</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb index d491984..06345688 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Atualizar página atual e ignorar conteúdo em cache</translation> <translation id="124678866338384709">Fechar a guia atual</translation> <translation id="1258753120186372309">Doodle do Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Lista de leitura</translation> <translation id="1266864766717917324">Falha no compartilhamento de <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Toque para expandir</translation> <translation id="1291207594882862231">Limpar histórico, cookies, dados do site, cache…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Toque em uma palavra para pesquisar instantaneamente ou ver as ações relacionadas</translation> <translation id="2760989362628427051">Ativa o tema escuro quando essa opção ou a "Economia de bateria" do dispositivo está ativada</translation> <translation id="2762000892062317888">agora mesmo</translation> -<translation id="2771869497727323769">Não é possível criar um link para o texto. Compartilhe um link para a página em um app.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> segundos restantes</translation> <translation id="2779651927720337254">falha</translation> <translation id="2781151931089541271">Um segundo restante</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">A lista de dispositivos com os quais é possível compartilhar uma guia está fechada.</translation> <translation id="4149994727733219643">Versão simplificada das páginas da Web</translation> <translation id="4170011742729630528">O serviço não está disponível. Tente novamente mais tarde.</translation> +<translation id="4175173967354304331">Sua conta será conectada neste site, no Chrome e em apps do Google</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> usado(s)</translation> <translation id="4181841719683918333">Idiomas</translation> <translation id="4183868528246477015">Pesquisar com Google Lens <ph name="BEGIN_NEW" />Novo<ph name="END_NEW" /></translation> @@ -468,7 +469,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 download concluído.}one{# download concluído.}other{# downloads concluídos.}}</translation> <translation id="4766678251456904326">Adicionar uma conta ao dispositivo</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 download programado.}one{# download programado.}other{# downloads programados.}}</translation> -<translation id="478981486571169252">Seu status de login, dados de navegação e dados do site para <ph name="SITE_NAME" /> serão exibidos no Chrome.</translation> <translation id="4802417911091824046">A criptografia por senha longa não inclui formas de pagamento e endereços do Google Pay. Para alterar essa configuração, <ph name="BEGIN_LINK" />redefina a sincronização<ph name="END_LINK" /></translation> @@ -513,7 +513,6 @@ <translation id="5040262127954254034">Privacidade</translation> <translation id="5087580092889165836">Adicionar cartão</translation> <translation id="509429900233858213">Ocorreu um erro.</translation> -<translation id="5100748015044654621">Compartilhe o link para o texto destacado em um app</translation> <translation id="510275257476243843">Uma hora restante</translation> <translation id="5123685120097942451">Guia anônima</translation> <translation id="5127805178023152808">A sincronização está desativada</translation> @@ -680,6 +679,7 @@ <translation id="6341580099087024258">Perguntar onde salvar os arquivos</translation> <translation id="6342069812937806050">Neste instante</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 e mais <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}one{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 e mais <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 e mais <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation> +<translation id="6345878117466430440">Marcar como lido</translation> <translation id="6364438453358674297">Remover sugestão do histórico?</translation> <translation id="6366047038980456022">O app <ph name="APP_NAME" /> tem a tecnologia e a velocidade de que você precisa para navegar com segurança</translation> <translation id="6378173571450987352">Detalhes: classificados pela quantidade de dados usados</translation> @@ -995,6 +995,7 @@ <translation id="8655129584991699539">É possível limpar os dados nas configurações do Chrome</translation> <translation id="8662811608048051533">Desconecta você da maioria dos sites.</translation> <translation id="8664979001105139458">O nome do arquivo já existe</translation> +<translation id="8683039184091909753">imagem</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Nível de intensidade do sinal: de # barra}one{Nível de intensidade do sinal: de # barra}other{Nível de intensidade do sinal: de # barras}}</translation> <translation id="869891660844655955">Validade</translation> <translation id="8712637175834984815">Entendi</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb index b28eb0e..9301ec0 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Atualizar página atual e ignorar conteúdo em cache</translation> <translation id="124678866338384709">Fechar o separador atual</translation> <translation id="1258753120186372309">Doodle da Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Lista de leitura</translation> <translation id="1266864766717917324">Não foi possível partilhar <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Toque para expandir</translation> <translation id="1291207594882862231">Limpar histórico, cookies, dados de sites, cache…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Toque numa palavra para pesquisar instantaneamente ou ver as ações relacionadas.</translation> <translation id="2760989362628427051">Ative o tema escuro quando a Poupança de bateria ou o tema escuro do dispositivo estiver ativado(a).</translation> <translation id="2762000892062317888">agora mesmo</translation> -<translation id="2771869497727323769">Não é possível criar o link para o texto. Partilhe o link para a página numa app.</translation> <translation id="2777555524387840389">Faltam <ph name="SECONDS" /> segundos</translation> <translation id="2779651927720337254">falhou</translation> <translation id="2781151931089541271">Falta 1 segundo</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">A lista de dispositivos com os quais pretende partilhar um separador está fechada.</translation> <translation id="4149994727733219643">Vista simplificada de páginas Web</translation> <translation id="4170011742729630528">O serviço não está disponível. Tente novamente mais tarde.</translation> +<translation id="4175173967354304331">Vai iniciar sessão neste site, no Chrome e nas apps Google.</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> utilizado(s)</translation> <translation id="4181841719683918333">Idiomas</translation> <translation id="4183868528246477015">Pesquisar com Google Lens <ph name="BEGIN_NEW" />Novo<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 transferência concluída.}other{# transferências concluídas.}}</translation> <translation id="4766678251456904326">Adicionar conta ao dispositivo</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 transferência programada.}other{# transferências programadas.}}</translation> -<translation id="478981486571169252">Pode ver o seu estado de início de sessão em <ph name="SITE_NAME" />, os dados de navegação e dados do site no Chrome.</translation> <translation id="4802417911091824046">A encriptação da frase de acesso não inclui métodos de pagamento nem endereços do Google Pay. Para alterar esta definição, <ph name="BEGIN_LINK" />reponha a sincronização<ph name="END_LINK" />.</translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Privacidade</translation> <translation id="5087580092889165836">Adicionar cartão</translation> <translation id="509429900233858213">Ocorreu um erro.</translation> -<translation id="5100748015044654621">Partilhe o link para o texto destacado numa app</translation> <translation id="510275257476243843">Falta 1 hora</translation> <translation id="5123685120097942451">Separador de navegação anónima</translation> <translation id="5127805178023152808">A sincronização está desativada</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Perguntar onde guardar os ficheiros</translation> <translation id="6342069812937806050">Mesmo agora</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 e mais <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 e mais <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation> +<translation id="6345878117466430440">Marcar como lido</translation> <translation id="6364438453358674297">Remover a sugestão do histórico?</translation> <translation id="6366047038980456022">A app <ph name="APP_NAME" /> tem as funcionalidades inteligentes e a rapidez de que necessita para realizar tarefas, criar e explorar online em segurança.</translation> <translation id="6378173571450987352">Detalhes: ordenado por quantidade de dados utilizados</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Pode limpar os dados nas Definições do Chrome.</translation> <translation id="8662811608048051533">A sua sessão é terminada na maioria dos sites.</translation> <translation id="8664979001105139458">O nome do ficheiro já existe</translation> +<translation id="8683039184091909753">imagem</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Nível de intensidade do sinal: # barra}other{Nível de intensidade do sinal: # barras}}</translation> <translation id="869891660844655955">Data de expiração</translation> <translation id="8712637175834984815">Entendido</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb index 3498d56..de91342 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Reîncarcă pagina, ignorând conținutul din cache</translation> <translation id="124678866338384709">Închide fila actuală</translation> <translation id="1258753120186372309">Doodle Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Lista de lectură</translation> <translation id="1266864766717917324">Nu s-a trimis <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Atinge pentru a extinde</translation> <translation id="1291207594882862231">Șterge istoricul, cookie-urile, datele privind site-urile și memoria cache…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Atinge un cuvânt pentru a căuta instantaneu sau pentru a vedea acțiuni conexe</translation> <translation id="2760989362628427051">Activează tema întunecată când este activată tema întunecată sau Economisirea bateriei pentru dispozitiv</translation> <translation id="2762000892062317888">adineauri</translation> -<translation id="2771869497727323769">Nu s-a putut crea linkul spre text. Trimite linkul spre pagină dintr-o aplicație.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> sec. rămase</translation> <translation id="2779651927720337254">nereușită</translation> <translation id="2781151931089541271">1 sec. rămasă</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{O descărcare finalizată.}few{# descărcări finalizate.}other{# de descărcări finalizate.}}</translation> <translation id="4766678251456904326">Adaugă un cont pe dispozitiv</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{O descărcare programată.}few{# descărcări programate.}other{# de descărcări programate.}}</translation> -<translation id="478981486571169252">Vei vedea starea de conectare la <ph name="SITE_NAME" />, datele de navigare și datele privind site-ul în Chrome.</translation> <translation id="4802417911091824046">Criptarea expresiei de acces nu include metodele de plată și adresele din Google Pay. Pentru a modifica această setare, <ph name="BEGIN_LINK" />resetează sincronizarea<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">Confidențialitate</translation> <translation id="5087580092889165836">Adaugă un card</translation> <translation id="509429900233858213">A apărut o eroare.</translation> -<translation id="5100748015044654621">Trimite linkul spre textul evidențiat dintr-o aplicație</translation> <translation id="510275257476243843">1 oră rămasă</translation> <translation id="5123685120097942451">Filă incognito</translation> <translation id="5127805178023152808">Sincronizarea este dezactivată</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb index e72aa21..956f79f 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Обновить страницу без учета кешированного контента</translation> <translation id="124678866338384709">Закрыть вкладку</translation> <translation id="1258753120186372309">Дудл Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Список для чтения</translation> <translation id="1266864766717917324">Не удалось отправить: <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Нажмите, чтобы развернуть</translation> <translation id="1291207594882862231">Удалить файлы cookie и данные сайтов, очистить историю и кеш</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Нажмите на слово, чтобы увидеть связанные с ним результаты поиска и действия.</translation> <translation id="2760989362628427051">Использовать тёмную тему, когда на устройстве включена тёмная тема или режим энергосбережения.</translation> <translation id="2762000892062317888">только что</translation> -<translation id="2771869497727323769">Не удалось создать ссылку на текст. Поделитесь ссылкой на страницу.</translation> <translation id="2777555524387840389">Осталось <ph name="SECONDS" /> сек.</translation> <translation id="2779651927720337254">ошибка</translation> <translation id="2781151931089541271">Осталась 1 сек.</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Список устройств для отправки вкладки закрыт.</translation> <translation id="4149994727733219643">Упрощенный просмотр веб-страниц</translation> <translation id="4170011742729630528">Сервис недоступен. Повторите попытку позже.</translation> +<translation id="4175173967354304331">Будет выполнен вход на этот сайт, в Chrome и в приложения Google.</translation> <translation id="4179980317383591987">Использовано: <ph name="AMOUNT" /></translation> <translation id="4181841719683918333">Языки</translation> <translation id="4183868528246477015">Найти через Google Объектив <ph name="BEGIN_NEW" />Новинка<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{Скачивание 1 файла завершено.}one{Скачивание # файла завершено.}few{Скачивание # файлов завершено.}many{Скачивание # файлов завершено.}other{Скачивание # файла завершено.}}</translation> <translation id="4766678251456904326">Добавить аккаунт на устройство</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Запланировано 1 скачивание.}one{Запланировано # скачивание.}few{Запланировано # скачивания.}many{Запланировано # скачиваний.}other{Запланировано # скачивания.}}</translation> -<translation id="478981486571169252">Вы увидите статус входа на сайт <ph name="SITE_NAME" />, а также данные о работе в браузере и данные сайтов в Chrome.</translation> <translation id="4802417911091824046">Шифрование с помощью кодовой фразы не применяется к способам оплаты и адресам из Google Pay. Чтобы изменить эту настройку, <ph name="BEGIN_LINK" />сбросьте параметры синхронизации<ph name="END_LINK" />.</translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Конфиденциальность</translation> <translation id="5087580092889165836">Добавить карту</translation> <translation id="509429900233858213">Произошла ошибка.</translation> -<translation id="5100748015044654621">Выберите приложение, чтобы поделиться ссылкой на выделенный текст.</translation> <translation id="510275257476243843">Остался 1 час</translation> <translation id="5123685120097942451">Вкладка инкогнито</translation> <translation id="5127805178023152808">Синхронизация выключена</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Спрашивать, куда сохранять файлы</translation> <translation id="6342069812937806050">только что</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" /> и ещё <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> адрес доставки}one{<ph name="SHIPPING_ADDRESS_PREVIEW" /> и ещё <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> адрес доставки}few{<ph name="SHIPPING_ADDRESS_PREVIEW" /> и ещё <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> адреса доставки}many{<ph name="SHIPPING_ADDRESS_PREVIEW" /> и ещё <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> адресов доставки}other{<ph name="SHIPPING_ADDRESS_PREVIEW" /> и ещё <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> адреса доставки}}</translation> +<translation id="6345878117466430440">Отметить как прочитанное</translation> <translation id="6364438453358674297">Удалить подсказку из истории?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> – быстрый браузер с множеством полезных функций для безопасной работы в Интернете.</translation> <translation id="6378173571450987352">Сортировка по объему использованного трафика</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Удалить данные можно в настройках Chrome</translation> <translation id="8662811608048051533">Вы автоматически выйдете из учетных записей на большинстве сайтов.</translation> <translation id="8664979001105139458">Файл с таким именем уже существует.</translation> +<translation id="8683039184091909753">изображение</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Уровень сигнала: # линия}one{Уровень сигнала: # линия}few{Уровень сигнала: # линии}many{Уровень сигнала: # линий}other{Уровень сигнала: # линии}}</translation> <translation id="869891660844655955">Срок действия</translation> <translation id="8712637175834984815">Готово</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb index 7157abe..e92131f 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">හැඹිලි අන්තර්ගත නොසලකා, වත්මන් පිටුව යළි පූරණය කර.</translation> <translation id="124678866338384709">වත්මන් ටැබය වසන්න</translation> <translation id="1258753120186372309">Google doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">කියවීම් ලැයිස්තුව</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> බෙදා ගත නොහැකි විය</translation> <translation id="1283039547216852943">දිග හැරීමට තට්ටු කරන්න</translation> <translation id="1291207594882862231">ඉතිහාසය, කුකීස්, අඩවි දත්ත, හැඹිලිය හිස් කරන්න...</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">ක්ෂණිකව සෙවීමට හෝ අදාළ ක්රියාවන් බැලීමට වචනයක් තට්ටු කරන්න</translation> <translation id="2760989362628427051">ඔබේ උපාංගයේ බැටරි සුරැකුම හෝ අඳුරු තේමාව සක්රීයව තිබෙන විට අඳුරු තේමාව සක්රීය කරන්න</translation> <translation id="2762000892062317888">මේ දැන්</translation> -<translation id="2771869497727323769">පෙළට සබැඳිය තැනිය නොහැකිය. යෙදුමක පිටුවට සබැඳිය බෙදා ගන්න.</translation> <translation id="2777555524387840389">තත්පර <ph name="SECONDS" />ක් ඉතිරියි</translation> <translation id="2779651927720337254">අසාර්ථකයි</translation> <translation id="2781151931089541271">තත්පර 1ක් ඉතිරියි</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">වසා ඇති පටිත්තක් බෙදා ගැනීම සඳහා වන උපාංග ලැයිස්තුව.</translation> <translation id="4149994727733219643">වෙබ් පිටු සඳහා සරල දසුනක්</translation> <translation id="4170011742729630528">සේවාව නොපවතී: නැවත උත්සාහ කරන්න.</translation> +<translation id="4175173967354304331">ඔබව මෙම අඩවිය, Chrome සහ Google වෙත පුරනු ඇත</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> භාවිතයි</translation> <translation id="4181841719683918333">භාෂා</translation> <translation id="4183868528246477015">Google Lens සමඟ සොයන්න <ph name="BEGIN_NEW" />නව<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{බාගැනීම් 1ක් සම්පූර්ණයි.}one{බාගැනීම් #ක් සම්පූර්ණයි.}other{බාගැනීම් #ක් සම්පූර්ණයි.}}</translation> <translation id="4766678251456904326">උපාංගයට ගිණුමක් එක් කරන්න</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{බාගැනීම් 1ක් කාලසටහන්ගත කරන ලදි.}one{බාගැනීම් #ක් කාලසටහන්ගත කරන ලදි.}other{බාගැනීම් #ක් කාලසටහන්ගත කරන ලදි.}}</translation> -<translation id="478981486571169252">ඔබ Chrome තුළ ඔබේ <ph name="SITE_NAME" /> පුරන තත්ත්වය, බ්රවුස් කිරීමේ දත්ත, සහ වෙබ් අඩවි දත්ත දකියි.</translation> <translation id="4802417911091824046">මුර-වැකිකඩ සංකේතනයට Google Pay වෙතින් ගෙවීමේ ක්රම සහ ලිපින ඇතුළු නොවේ. මෙම සැකසීම වෙනස් කිරීමට, <ph name="BEGIN_LINK" />සමමුහූර්තය යළි සකසන්න<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">රහස්යතාවය</translation> <translation id="5087580092889165836">කාඩ්පත එක් කරන්න</translation> <translation id="509429900233858213">දෝශයක් ඇතිවිය.</translation> -<translation id="5100748015044654621">යෙදුමක උද්දීපනය කළ පෙළට සබැඳිය බෙදා ගන්න</translation> <translation id="510275257476243843">පැය 1ක් ඉතිරියි</translation> <translation id="5123685120097942451">අප්රකට පටිත්ත</translation> <translation id="5127805178023152808">සමමුහුර්තකරණය අක්රියයි</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">ගොනු සුරකින තැනක් අසන්න</translation> <translation id="6342069812937806050">මේ දැන්</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />... සහ තවත් <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}one{<ph name="SHIPPING_ADDRESS_PREVIEW" />... සහ තවත් <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />... සහ තවත් <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation> +<translation id="6345878117466430440">කියවූ ලෙස ලකුණු කරන්න</translation> <translation id="6364438453358674297">යෝජනාව ඉතිහාසය වෙතින් ඉවත් කරන්නද?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> හි ඔබට අන්තර්ජාලයේ ආරක්ෂිතව ක්රියා කිරීමට, සෑදීමට, සහ ගවේෂණ කිරීමට අවශ්ය හපන්කම සහ වේගය ඇත</translation> <translation id="6378173571450987352">විස්තර: භාවිතා කරන දත්ත ප්යරමාණය අනුව අනුපිළිවෙළට සකසා ඇත</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">ඔබට Chrome සැකසීම් තුළින් දත්ත හිස් කළ හැක</translation> <translation id="8662811608048051533">ඔබව බොහෝ අඩවිවලින් වරනු ඇත.</translation> <translation id="8664979001105139458">ගොනු නාමය දැනටමත් පවතී</translation> +<translation id="8683039184091909753">රූපය</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{සංඥා ප්රබලතා මට්ටම: කණු #}one{සංඥා ප්රබලතා මට්ටම: කණු #}other{සංඥා ප්රබලතා මට්ටම: කණු #}}</translation> <translation id="869891660844655955">කල් ඉකුත් වීමේ දිනය:</translation> <translation id="8712637175834984815">එය ලැබුණා</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb index 842b2a1..4b87205b 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Opätovné načítanie aktuálnej stránky a ignorovanie obsahu vo vyrovnávacej pamäti</translation> <translation id="124678866338384709">Zavretie aktuálnej karty</translation> <translation id="1258753120186372309">Sviatočné logo Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Čitateľský zoznam</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> sa nepodarilo zdieľať</translation> <translation id="1283039547216852943">Klepnutím rozbaliť</translation> <translation id="1291207594882862231">Vymazať históriu, súbory cookie, dáta webov, vyrovnávaciu pamäť…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Klepnutím na slovo aktivujete dynamické vyhľadávanie alebo zobrazíte súvisiace akcie</translation> <translation id="2760989362628427051">Zapnúť tmavý motív, keď je v zariadení zapnutý tmavý motív alebo šetrič batérie</translation> <translation id="2762000892062317888">práve teraz</translation> -<translation id="2771869497727323769">Odkaz na text sa nedá vytvoriť. Zdieľajte odkaz na stránku v aplikácii.</translation> <translation id="2777555524387840389">Zostáva: <ph name="SECONDS" /> s</translation> <translation id="2779651927720337254">neúspešné</translation> <translation id="2781151931089541271">Zostáva: 1 s</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Zoznam zariadení, s ktorými sa má zdieľať karta, je zavretý.</translation> <translation id="4149994727733219643">Jednoduché zobrazenie webových stránok</translation> <translation id="4170011742729630528">Služba nie je k dispozícii. Skúste to znova neskôr.</translation> +<translation id="4175173967354304331">Systém vás prihlási na tomto webe, v Chrome a aplikáciách Google</translation> <translation id="4179980317383591987">Využité: <ph name="AMOUNT" /></translation> <translation id="4181841719683918333">Jazyky</translation> <translation id="4183868528246477015">Hľadať cez Google Lens <ph name="BEGIN_NEW" />Novinka<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{Dokončilo sa sťahovanie 1 položky.}few{Dokončilo sa sťahovanie # položiek.}many{# downloads complete.}other{Dokončilo sa sťahovanie # položiek.}}</translation> <translation id="4766678251456904326">Pridať účet do zariadenia</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Naplánované je 1 sťahovanie.}few{Naplánované sú # sťahovania.}many{# downloads scheduled.}other{Naplánovaných je # sťahovaní.}}</translation> -<translation id="478981486571169252">Zobrazí sa váš stav prihlásenia na webe <ph name="SITE_NAME" />, dáta prehliadania a údaje webu v Chrome.</translation> <translation id="4802417911091824046">Šifrovanie prístupovej frázy nezahŕňa spôsoby platby a adresy zo služby Google Pay. Ak chcete toto nastavenie zmeniť, <ph name="BEGIN_LINK" />resetujte synchronizáciu<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Ochrana súkromia</translation> <translation id="5087580092889165836">Pridať kartu</translation> <translation id="509429900233858213">Vyskytla sa chyba.</translation> -<translation id="5100748015044654621">Zdieľať odkaz na zvýraznený text v aplikácii</translation> <translation id="510275257476243843">Zostáva: 1 h</translation> <translation id="5123685120097942451">Karta inkognito</translation> <translation id="5127805178023152808">Synchronizácia je vypnutá.</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Pýtať sa, kde uložiť súbory</translation> <translation id="6342069812937806050">Práve teraz</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 a <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ďalšia}few{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 a <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ďalšie}many{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 a <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ďalšej}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 a <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ďalších}}</translation> +<translation id="6345878117466430440">Označiť ako prečítané</translation> <translation id="6364438453358674297">Odstrániť návrh z histórie?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> vám poskytuje inteligentné funkcie a rýchlosť, aby ste mohli bezpečne konať, vytvárať a skúmať obsah na internete</translation> <translation id="6378173571450987352">Podrobnosti: zoradené podľa množstva využitých dát</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Môžete vymazať údaje v Nastaveniach Chromu</translation> <translation id="8662811608048051533">Odhlási vás z väčšiny webov.</translation> <translation id="8664979001105139458">Súbor s takým názvom už existuje</translation> +<translation id="8683039184091909753">obrázok</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Úroveň sily signálu: # čiarka}few{Úroveň sily signálu: # čiarky}many{Úroveň sily signálu: # čiarky}other{Úroveň sily signálu: # čiarok}}</translation> <translation id="869891660844655955">Koniec platnosti</translation> <translation id="8712637175834984815">Dobre</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb index 0025584c..d6644c3 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Vnov. nalag. tren. strani s prezrtjem predp. vseb.</translation> <translation id="124678866338384709">Zapiranje trenutnega zavihka</translation> <translation id="1258753120186372309">Googlov priložnostni logotip: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Bralni seznam</translation> <translation id="1266864766717917324">Ni bilo mogoče deliti tega: <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Dotaknite se za razširitev</translation> <translation id="1291207594882862231">Izbris zgodovine, piškotkov, podatkov spletnih mest, predpomnilnika …</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Dotaknite se besede, če želite dinamično iskati ali prikazati sorodna dejanja</translation> <translation id="2760989362628427051">Vklop temne teme, ko je v napravi vklopljena temna tema ali je vklopljeno varčevanje z energijo akumulatorja</translation> <translation id="2762000892062317888">pravkar</translation> -<translation id="2771869497727323769">Povezave do besedila ni mogoče ustvariti. Delite povezavo do strani v aplikaciji.</translation> <translation id="2777555524387840389">Še <ph name="SECONDS" /> s</translation> <translation id="2779651927720337254">ni uspelo</translation> <translation id="2781151931089541271">Še 1 s</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Seznam naprav, s katerimi želite deliti zavihek, je zaprt.</translation> <translation id="4149994727733219643">Poenostavljen pogled za spletne strani</translation> <translation id="4170011742729630528">Storitev ni na voljo; poskusite znova pozneje.</translation> +<translation id="4175173967354304331">Prijavljeni boste na tem spletnem mestu, v Chromu in Googlovih aplikacijah</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> prenesenih podatkov</translation> <translation id="4181841719683918333">Jeziki</translation> <translation id="4183868528246477015">Iskanje z Google Lens <ph name="BEGIN_NEW" />Novo<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 prenos je končan.}one{# prenos je končan.}two{# prenosa sta končana.}few{# prenosi so končani.}other{# prenosov je končanih.}}</translation> <translation id="4766678251456904326">Dodajte račun v napravo</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Načrtovan je 1 prenos.}one{Načrtovan je # prenos.}two{Načrtovana sta # prenosa.}few{Načrtovani so # prenosi.}other{Načrtovanih je # prenosov.}}</translation> -<translation id="478981486571169252">Prikazano bo stanje prijave na spletnem mestu <ph name="SITE_NAME" />, podatki brskanja in podatki spletnega mesta v Chromu.</translation> <translation id="4802417911091824046">Šifriranje gesla ne vključuje plačilnih sredstev in naslovov iz Googla Pay. Če želite spremeniti to nastavitev, <ph name="BEGIN_LINK" />ponastavite sinhronizacijo<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Zasebnost</translation> <translation id="5087580092889165836">Dodaj kartico</translation> <translation id="509429900233858213">Napaka.</translation> -<translation id="5100748015044654621">Delite povezavo do označenega besedila v aplikaciji</translation> <translation id="510275257476243843">Še 1 h</translation> <translation id="5123685120097942451">Zavihek brez beleženja zgodovine</translation> <translation id="5127805178023152808">Sinhroniziranje je izklopljeno</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Vprašaj, kje shraniti datoteke</translation> <translation id="6342069812937806050">Pravkar</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" /> \u2026 in še <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}one{<ph name="SHIPPING_ADDRESS_PREVIEW" /> \u2026 in še <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}two{<ph name="SHIPPING_ADDRESS_PREVIEW" /> \u2026 in še <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}few{<ph name="SHIPPING_ADDRESS_PREVIEW" /> \u2026 in še <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" /> \u2026 in še <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation> +<translation id="6345878117466430440">Označi kot prebrano</translation> <translation id="6364438453358674297">Ali želite odstraniti predlog iz zgodovine?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> ponuja pametne rešitve in hitrost za spletno delo, ustvarjanje in raziskovanje.</translation> <translation id="6378173571450987352">Podrobnosti: razvrščeno po količini prenesenih podatkov</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Podatke lahko izbrišete v Chromovih nastavitvah</translation> <translation id="8662811608048051533">Odjavi vas iz večine spletnih mest.</translation> <translation id="8664979001105139458">Ime datoteke že obstaja</translation> +<translation id="8683039184091909753">slika</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Moč signala: # črtica}one{Moč signala: # črtica}two{Moč signala: # črtici}few{Moč signala: # črtice}other{Moč signala: # črtic}}</translation> <translation id="869891660844655955">Datum izteka</translation> <translation id="8712637175834984815">Razumem</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb index 64b15240..9cca70a 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Ringarko faqen aktuale, duke shpërfillur përmbajtjen në memorien specifike</translation> <translation id="124678866338384709">Mbyll skedën aktuale</translation> <translation id="1258753120186372309">Logoja alternative e Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Lista e leximit</translation> <translation id="1266864766717917324">Nuk mund të ndahet <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Trokit për të zgjeruar</translation> <translation id="1291207594882862231">Pastro historikun, kukit, të dhënat e sajtit, memorien specifike…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Trokit një fjalë për të kërkuar në çast ose për të parë veprimet e lidhura</translation> <translation id="2760989362628427051">Aktivizo temën e errët kur tema e errët ose "Kursyesi i baterisë" i pajisjes është aktiv</translation> <translation id="2762000892062317888">pikërisht tani</translation> -<translation id="2771869497727323769">Lidhja për te teksti nuk mund të krijohet. Ndaje lidhjen për te faqja në një aplikacion.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> sekonda të mbetura</translation> <translation id="2779651927720337254">dështoi</translation> <translation id="2781151931089541271">1 sekondë e mbetur</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Lista e pajisjeve për të ndarë një skedë është e mbyllur.</translation> <translation id="4149994727733219643">Pamje e thjeshtuar për faqet e uebit</translation> <translation id="4170011742729630528">Shërbimi nuk ofrohet. Provo përsëri më vonë.</translation> +<translation id="4175173967354304331">Do të identifikohesh në këtë sajt, Chrome dhe aplikacionet e Google</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> të përdorura</translation> <translation id="4181841719683918333">Gjuhët</translation> <translation id="4183868528246477015">Kërko me "Lenten e Google" <ph name="BEGIN_NEW" />E re<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 shkarkim përfundoi.}other{# shkarkime përfunduan.}}</translation> <translation id="4766678251456904326">Shto llogari në pajisje</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 shkarkim i planifikuar.}other{# shkarkime të planifikuara.}}</translation> -<translation id="478981486571169252">Do të shikosh statusin e identifikimit për <ph name="SITE_NAME" />, të dhënat e shfletimit dhe të dhënat e sajtit në Chrome.</translation> <translation id="4802417911091824046">Enkriptimi me frazën e kalimit nuk përfshin mënyrat e pagesës dhe adresat nga Google Pay. Për të ndryshuar këtë cilësim, <ph name="BEGIN_LINK" />rivendos sinkronizimin<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Privatësia</translation> <translation id="5087580092889165836">Shto kartë</translation> <translation id="509429900233858213">Ndodhi një gabim.</translation> -<translation id="5100748015044654621">Ndaj lidhjen për te teksti i theksuar në një aplikacion</translation> <translation id="510275257476243843">1 orë e mbetur</translation> <translation id="5123685120097942451">Skeda "e fshehtë"</translation> <translation id="5127805178023152808">Sinkronizimi është joaktiv</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Pyet ku të ruhen skedarët</translation> <translation id="6342069812937806050">Vetëm tani</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 dhe <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> tjetër}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 dhe <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> të tjera}}</translation> +<translation id="6345878117466430440">Shëno si të lexuar</translation> <translation id="6364438453358674297">Të hiqet sugjerimi nga historiku?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> ka gjithçka që të nevojitet për të bërë, krijuar dhe eksploruar në mënyrë të sigurt në linjë</translation> <translation id="6378173571450987352">Detajet: Renditur sipas sasisë së të dhënave të përdorura</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Mund t'i pastrosh të dhënat në "Cilësimet" e Chrome</translation> <translation id="8662811608048051533">Të nxjerr nga shumica e sajteve.</translation> <translation id="8664979001105139458">Emri i skedarit ekziston tashmë</translation> +<translation id="8683039184091909753">imazhi</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Niveli i forcës së sinjalit: # shirit}other{Niveli i forcës së sinjalit: # shirita}}</translation> <translation id="869891660844655955">Data e skadimit</translation> <translation id="8712637175834984815">E kuptova</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb index 4e41353..1f0b765 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Ponovno učitavanje aktuelne stranice, zanemarujući keširani sadržaj</translation> <translation id="124678866338384709">Zatvaranje aktuelne kartice</translation> <translation id="1258753120186372309">Google dudl logotip: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Lista za čitanje</translation> <translation id="1266864766717917324">Nije uspelo deljenje: <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Dodirnite da biste proširili</translation> <translation id="1291207594882862231">Obrišite istoriju, kolačiće, podatke o sajtovima, keš...</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Dodirnite reč da biste je trenutno pretražili ili videli povezane radnje</translation> <translation id="2760989362628427051">Uključite tamnu temu kada je tamna tema ili Ušteda baterije uključena na uređaju</translation> <translation id="2762000892062317888">malopre</translation> -<translation id="2771869497727323769">Pravljenje linka do teksta nije uspelo. Delite link do stranice u aplikaciji.</translation> <translation id="2777555524387840389">Još <ph name="SECONDS" /> sek</translation> <translation id="2779651927720337254">nije uspelo</translation> <translation id="2781151931089541271">Još 1 sek</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Lista uređaja sa kojima se deli kartica je zatvorena.</translation> <translation id="4149994727733219643">Pojednostavljen prikaz veb-stranica</translation> <translation id="4170011742729630528">Usluga nije dostupna. Probajte ponovo kasnije.</translation> +<translation id="4175173967354304331">Bićete prijavljeni na ovaj sajt, u Chrome i u Google aplikacije</translation> <translation id="4179980317383591987">Iskoristili ste <ph name="AMOUNT" /></translation> <translation id="4181841719683918333">Jezici</translation> <translation id="4183868528246477015">Traži uz Google objektiv <ph name="BEGIN_NEW" />Novo<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 preuzimanje je dovršeno.}one{# preuzimanje je dovršeno.}few{# preuzimanja su dovršena.}other{# preuzimanja je dovršeno.}}</translation> <translation id="4766678251456904326">Dodaj nalog na uređaj</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Zakazano je 1 preuzimanje.}one{Zakazano je # preuzimanje.}few{Zakazana su # preuzimanja.}other{Zakazano je # preuzimanja.}}</translation> -<translation id="478981486571169252">Videćete status prijave na <ph name="SITE_NAME" />, podatke pregledanja i podatke o sajtu u Chrome-u.</translation> <translation id="4802417911091824046">Šifrovanje pomoću pristupne fraze ne obuhvata načine plaćanja i adrese iz Google Pay-a. Da biste promenili ovo podešavanje, <ph name="BEGIN_LINK" />resetujte sinhronizaciju<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Privatnost</translation> <translation id="5087580092889165836">Dodaj karticu</translation> <translation id="509429900233858213">Došlo je do greške.</translation> -<translation id="5100748015044654621">Delite link do istaknutog teksta u aplikaciji</translation> <translation id="510275257476243843">Još 1 sat</translation> <translation id="5123685120097942451">Kartica bez arhiviranja</translation> <translation id="5127805178023152808">Sinhronizacija je isključena</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Pitaj gde da sačuvaš datoteke</translation> <translation id="6342069812937806050">Malopre</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}one{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}few{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation> +<translation id="6345878117466430440">Označi kao pročitano</translation> <translation id="6364438453358674297">Želite li da uklonite predlog iz istorije?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> ima pametne funkcije i brzinu potrebne za bezbedan rad, stvaranje i istraživanje onlajn</translation> <translation id="6378173571450987352">Detalji: sortirano prema količini iskorišćenih podataka</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Možete da obrišete podatke u Chrome podešavanjima</translation> <translation id="8662811608048051533">Odjaviće vas sa većine sajtova.</translation> <translation id="8664979001105139458">Ime datoteke već postoji</translation> +<translation id="8683039184091909753">slika</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Nivo jačine signala: # crta}one{Nivo jačine signala: # crta}few{Nivo jačine signala: # crte}other{Nivo jačine signala: # crta}}</translation> <translation id="869891660844655955">Datum isteka</translation> <translation id="8712637175834984815">Važi</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb index 688381b0..c8078c9d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Поновно учитавање актуелне странице, занемарујући кеширани садржај</translation> <translation id="124678866338384709">Затварање актуелне картице</translation> <translation id="1258753120186372309">Google дудл логотип: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Листа за читање</translation> <translation id="1266864766717917324">Није успело дељење: <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Додирните да бисте проширили</translation> <translation id="1291207594882862231">Обришите историју, колачиће, податке о сајтовима, кеш...</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Додирните реч да бисте је тренутно претражили или видели повезане радње</translation> <translation id="2760989362628427051">Укључите тамну тему када је тамна тема или Уштеда батерије укључена на уређају</translation> <translation id="2762000892062317888">малопре</translation> -<translation id="2771869497727323769">Прављење линка до текста није успело. Делите линк до странице у апликацији.</translation> <translation id="2777555524387840389">Још <ph name="SECONDS" /> сек</translation> <translation id="2779651927720337254">није успело</translation> <translation id="2781151931089541271">Још 1 сек</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Листа уређаја са којима се дели картица је затворена.</translation> <translation id="4149994727733219643">Поједностављен приказ веб-страница</translation> <translation id="4170011742729630528">Услуга није доступна. Пробајте поново касније.</translation> +<translation id="4175173967354304331">Бићете пријављени на овај сајт, у Chrome и у Google апликације</translation> <translation id="4179980317383591987">Искористили сте <ph name="AMOUNT" /></translation> <translation id="4181841719683918333">Језици</translation> <translation id="4183868528246477015">Тражи уз Google објектив <ph name="BEGIN_NEW" />Ново<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 преузимање је довршено.}one{# преузимање је довршено.}few{# преузимања су довршена.}other{# преузимања је довршено.}}</translation> <translation id="4766678251456904326">Додај налог на уређај</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Заказано је 1 преузимање.}one{Заказано је # преузимање.}few{Заказана су # преузимања.}other{Заказано је # преузимања.}}</translation> -<translation id="478981486571169252">Видећете статус пријаве на <ph name="SITE_NAME" />, податке прегледања и податке о сајту у Chrome-у.</translation> <translation id="4802417911091824046">Шифровање помоћу приступне фразе не обухвата начине плаћања и адресе из Google Pay-а. Да бисте променили ово подешавање, <ph name="BEGIN_LINK" />ресетујте синхронизацију<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Приватност</translation> <translation id="5087580092889165836">Додај картицу</translation> <translation id="509429900233858213">Дошло је до грешке.</translation> -<translation id="5100748015044654621">Делите линк до истакнутог текста у апликацији</translation> <translation id="510275257476243843">Још 1 сат</translation> <translation id="5123685120097942451">Картица без архивирања</translation> <translation id="5127805178023152808">Синхронизација је искључена</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Питај где да сачуваш датотеке</translation> <translation id="6342069812937806050">Малопре</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 и још <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}one{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 и још <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}few{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 и још <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 и још <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation> +<translation id="6345878117466430440">Означи као прочитано</translation> <translation id="6364438453358674297">Желите ли да уклоните предлог из историје?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> има паметне функције и брзину потребне за безбедан рад, стварање и истраживање онлајн</translation> <translation id="6378173571450987352">Детаљи: сортирано према количини искоришћених података</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Можете да обришете податке у Chrome подешавањима</translation> <translation id="8662811608048051533">Одјавиће вас са већине сајтова.</translation> <translation id="8664979001105139458">Име датотеке већ постоји</translation> +<translation id="8683039184091909753">слика</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Ниво јачине сигнала: # црта}one{Ниво јачине сигнала: # црта}few{Ниво јачине сигнала: # црте}other{Ниво јачине сигнала: # црта}}</translation> <translation id="869891660844655955">Датум истека</translation> <translation id="8712637175834984815">Важи</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb index 678af42..985b1d2 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Läs in den aktuella sidan igen och ignorera cachelagrat innehåll</translation> <translation id="124678866338384709">Stäng den aktuella fliken</translation> <translation id="1258753120186372309">Googles doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Läslista</translation> <translation id="1266864766717917324">Det gick inte att dela <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Tryck och utöka</translation> <translation id="1291207594882862231">Rensa historiken, cookies, webbplatsdata, cacheminnet …</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Tryck på ett ord om du vill söka direkt eller visa relaterade åtgärder</translation> <translation id="2760989362628427051">Aktivera mörkt tema när batterisparläget eller mörkt tema aktiveras på enheten</translation> <translation id="2762000892062317888">nyss</translation> -<translation id="2771869497727323769">Det gick inte att länka till text. Dela länk till en sida i en app.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> sekunder kvar</translation> <translation id="2779651927720337254">misslyckades</translation> <translation id="2781151931089541271">1 sekund kvar</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Listan över enheter som fliken kan delas med är stängd.</translation> <translation id="4149994727733219643">Förenklad vy för webbsidor</translation> <translation id="4170011742729630528">Tjänsten är inte tillgänglig, försök igen senare.</translation> +<translation id="4175173967354304331">Du loggas in på den här webbplatsen, i Chrome och i Google-appar</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> har använts</translation> <translation id="4181841719683918333">Språk</translation> <translation id="4183868528246477015">Sök med Google Lens <ph name="BEGIN_NEW" />Nyhet<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 nedladdning har slutförts.}other{# nedladdningar har slutförts.}}</translation> <translation id="4766678251456904326">Lägg till konto på enheten</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 nedladdning har schemalagts.}other{# nedladdningar har schemalagts.}}</translation> -<translation id="478981486571169252">Du kommer att se din inloggningsstatus, webbdata och webbplatsdata för <ph name="SITE_NAME" /> i Chrome.</translation> <translation id="4802417911091824046">Betalningsmetoder och adresser från Google Pay omfattas inte av kryptering med lösenfras. <ph name="BEGIN_LINK" />Återställ synkroniseringen<ph name="END_LINK" /> om du vill ändra den här inställningen.</translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Sekretess</translation> <translation id="5087580092889165836">Lägg till kort</translation> <translation id="509429900233858213">Det har uppstått ett fel.</translation> -<translation id="5100748015044654621">Dela länk till markerad text i en app</translation> <translation id="510275257476243843">1 timme kvar</translation> <translation id="5123685120097942451">Inkognitoflik</translation> <translation id="5127805178023152808">Synkronisering är av</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Fråga var filerna ska sparas</translation> <translation id="6342069812937806050">Alldeles nyss</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 och <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> till}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 och <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> till}}</translation> +<translation id="6345878117466430440">Markera som läst</translation> <translation id="6364438453358674297">Vill du ta bort förslaget från historiken?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> har de smarta verktygen och hastigheten du behöver för att göra, skapa och utforska på webben på ett säkert sätt</translation> <translation id="6378173571450987352">Mer information: Sorterad efter dataförbrukning</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Du kan rensa data i Chrome-inställningarna</translation> <translation id="8662811608048051533">Du loggas ut från de flesta webbplatser.</translation> <translation id="8664979001105139458">Filnamnet finns redan</translation> +<translation id="8683039184091909753">bild</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Signalstyrka: # streck}other{Signalstyrka: # streck}}</translation> <translation id="869891660844655955">Utgångsdatum</translation> <translation id="8712637175834984815">Uppfattat</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb index 847e123..8ccc1ac 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Pakia upya ukurasa wa sasa, puuza maudhui ya akiba</translation> <translation id="124678866338384709">Funga kichupo kilichofunguka</translation> <translation id="1258753120186372309">Google doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Orodha ya kusoma</translation> <translation id="1266864766717917324">Imeshindwa kushiriki <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Gusa ili upanue</translation> <translation id="1291207594882862231">Futa historia, vidakuzi, data ya tovuti, akiba…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Gusa neno ili utafute papo hapo au uone vitendo vinavyohusiana</translation> <translation id="2760989362628427051">Washa hali ya mandhari meusi wakati umewasha kipengele cha mandhari meusi au Kiokoa Betri cha kifaa chako</translation> <translation id="2762000892062317888">sasa hivi tu</translation> -<translation id="2771869497727323769">Imeshindwa kutunga kiungo cha kuelekeza kwenye maandishi. Shiriki kiungo cha kuelekeza kwenye ukurasa katika programu.</translation> <translation id="2777555524387840389">Zimesalia sekunde <ph name="SECONDS" /></translation> <translation id="2779651927720337254">imeshindwa</translation> <translation id="2781151931089541271">Imesalia sekunde 1</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Orodha ya vifaa vinavyoweza kutumia kichupo pamoja imefungwa.</translation> <translation id="4149994727733219643">Mwonekano uliorahisishwa kwa ajili ya kurasa za wavuti</translation> <translation id="4170011742729630528">Huduma haipatikani; jaribu tena baadaye.</translation> +<translation id="4175173967354304331">Maelezo ya akaunti yako yatatumiwa kwenye tovuti hii, Chrome na programu za Google</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> imetumika</translation> <translation id="4181841719683918333">Lugha</translation> <translation id="4183868528246477015">Tafuta na Lenzi ya Google <ph name="BEGIN_NEW" />Mpya<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{Imemaliza kupakua faili 1.}other{Imemaliza kupakua faili #.}}</translation> <translation id="4766678251456904326">Ongeza akaunti kwenye kifaa</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Faili moja imeratibiwa kupakuliwa.}other{Faili # zimeratibiwa kupakuliwa.}}</translation> -<translation id="478981486571169252">Utaona hali yako ya kuingia katika akaunti ya <ph name="SITE_NAME" />, data ya kuvinjari na data ya tovuti katika Chrome.</translation> <translation id="4802417911091824046">Usimbaji fiche kwa kutumia kauli ya siri haujumuishi njia za kulipa na anwani kutoka Google Pay. Ili ubadilishe mipangilio hii, <ph name="BEGIN_LINK" />fanya usawazishaji upya<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Faragha</translation> <translation id="5087580092889165836">Ongeza kadi</translation> <translation id="509429900233858213">Hitilafu fulani imetokea.</translation> -<translation id="5100748015044654621">Shiriki kiungo cha kuelekeza kwenye maandishi yaliyoangaziwa katika programu</translation> <translation id="510275257476243843">Imesalia saa 1</translation> <translation id="5123685120097942451">Kichupo fiche</translation> <translation id="5127805178023152808">Usawazishaji umezimwa</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Iulize ambapo itahifadhi faili</translation> <translation id="6342069812937806050">Sasa hivi tu</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 na <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> zaidi}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 na <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> zaidi}}</translation> +<translation id="6345878117466430440">Tia alama kuwa umesoma</translation> <translation id="6364438453358674297">Je, ungependa kuondoa pendekezo kwenye historia?</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> ina kasi na vipengele mahiri unavyohitaji ili kufanya kazi, kubuni na kugundua maudhui mtandaoni kwa usalama</translation> <translation id="6378173571450987352">Maelezo: Imepangwa kulingana na kiasi cha data inayotumiwa</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Unaweza kufuta data hii katika Mipangilio ya Chrome</translation> <translation id="8662811608048051533">Hukuondoa kwenye tovuti nyingi.</translation> <translation id="8664979001105139458">Jina la faili tayari lipo</translation> +<translation id="8683039184091909753">picha</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Kiwango cha Udhibiti wa Mawimbi: upau #}other{Kiwango cha Udhibiti wa Mawimbi: pau #}}</translation> <translation id="869891660844655955">Muda wake unakwisha tarehe</translation> <translation id="8712637175834984815">Nimeelewa</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb index 2004f34..9b8d568 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">தற்காலிக சேமிப்பைப் புறக்கணித்து, நடப்புப் பக்கத்தை மீண்டும் ஏற்றும்</translation> <translation id="124678866338384709">தற்போதைய தாவலை மூடும்</translation> <translation id="1258753120186372309">Google doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">வாசிப்புப் பட்டியல்</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" />ஐப் பகிர முடியவில்லை</translation> <translation id="1283039547216852943">விரிவாக்க, தட்டவும்</translation> <translation id="1291207594882862231">வரலாறு, குக்கீகள், தளத் தரவு, தற்காலிகச் சேமிப்பை அழி…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">உடனடியாகத் தேட அல்லது தொடர்புடைய செயல்களைப் பார்க்க, சொல்லைத் தட்டவும்</translation> <translation id="2760989362628427051">சாதனத்தில் டார்க் தீம் அல்லது பேட்டரி சேமிப்பான் ஆன் செய்யப்பட்டால் டார்க் தீமினை ஆன் செய்யும்</translation> <translation id="2762000892062317888">சற்று முன்</translation> -<translation id="2771869497727323769">உரைக்கான இணைப்பை உருவாக்க முடியவில்லை. பக்கத்திற்கான இணைப்பை ஆப்ஸில் பகிரவும்.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> வினாடிகள் மீதமுள்ளன</translation> <translation id="2779651927720337254">தோல்வியுற்றது</translation> <translation id="2781151931089541271">1 வினாடி மீதமுள்ளது</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{ஒரு பதிவிறக்கம் முடிந்தது.}other{# பதிவிறக்கங்கள் முடிந்தன.}}</translation> <translation id="4766678251456904326">சாதனத்தில் கணக்கைச் சேர்</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 பதிவிறக்கம் திட்டமிடப்பட்டுள்ளது.}other{# பதிவிறக்கங்கள் திட்டமிடப்பட்டுள்ளன.}}</translation> -<translation id="478981486571169252"><ph name="SITE_NAME" /> என்ற தளம் தொடர்பான உங்களின் உள்நுழைவு நிலை, உலாவிய தரவு, தளத்தின் தரவு ஆகியவற்றை Chromeமில் பார்ப்பீர்கள்.</translation> <translation id="4802417911091824046">கடவுச்சொற்றொடர் என்க்ரிப்ஷனில் Google Payயிலுள்ள கட்டண முறைகளும் முகவரிகளும் சேர்க்கப்படாது. இந்த அமைப்பை மாற்ற, <ph name="BEGIN_LINK" />ஒத்திசைவை மீட்டமைக்கவும்<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">தனியுரிமை</translation> <translation id="5087580092889165836">கார்டைச் சேர்</translation> <translation id="509429900233858213">பிழை ஏற்பட்டது.</translation> -<translation id="5100748015044654621">ஹைலைட் செய்யப்பட்ட உரைக்கான இணைப்பை ஆப்ஸில் பகிரவும்</translation> <translation id="510275257476243843">1 மணிநேரம் மீதமுள்ளது</translation> <translation id="5123685120097942451">மறைநிலைத் தாவல்</translation> <translation id="5127805178023152808">ஒத்திசைவு முடக்கத்தில்</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb index 2cf49eae..4bacdcf4 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">కాష్ కంటెంట్ విస్మరించి ప్రస్తుత పేజీ మళ్లీ లోడ్ చేయండి</translation> <translation id="124678866338384709">ప్రస్తుత ట్యాబ్ను మూసివేయండి</translation> <translation id="1258753120186372309">Google doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">పఠన జాబితా</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" />ను షేర్ చేయడం సాధ్యపడలేదు</translation> <translation id="1283039547216852943">విస్తరించడానికి నొక్కండి</translation> <translation id="1291207594882862231">చరిత్ర, కుక్కీలు, సైట్ డేటా, కాష్ను తీసివేస్తుంది…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">తక్షణమే వెతకడానికి లేదా సంబంధిత చర్యలను చూడటానికి ఒక పదాన్ని నొక్కండి</translation> <translation id="2760989362628427051">మీ పరికరంలో ముదురు రంగు థీమ్ లేదా బ్యాటరీ సేవర్ ఆన్లో ఉన్నప్పుడు, ముదురు రంగు థీమ్ను ఆన్ చేయండి</translation> <translation id="2762000892062317888">ఇప్పుడే</translation> -<translation id="2771869497727323769">హైలైట్ చేయబడిన టెక్స్ట్కు లింక్ను క్రియేట్ చేయడం సాధ్యపడదు. యాప్లోని పేజీకి లింక్ను షేర్ చేయండి.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> సెకన్లు మిగిలి ఉంది</translation> <translation id="2779651927720337254">విఫలమైంది</translation> <translation id="2781151931089541271">1 సెకను మిగిలి ఉంది</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">ట్యాబ్ను షేర్ చేయాల్సిన పరికరాల జాబితా మూసివేయబడింది.</translation> <translation id="4149994727733219643">వెబ్ పేజీల కోసం సరళమైన వీక్షణ</translation> <translation id="4170011742729630528">సేవ అందుబాటులో లేదు; తర్వాత మళ్లీ ప్రయత్నించండి.</translation> +<translation id="4175173967354304331">ఈ సైట్, Chrome, Google యాప్లలో మీరు సైన్ ఇన్ చేస్తారు</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> వినియోగించబడింది</translation> <translation id="4181841719683918333">భాషలు</translation> <translation id="4183868528246477015">Google లెన్స్తో శోధన <ph name="BEGIN_NEW" />కొత్తది<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 డౌన్లోడ్ పూర్తయింది.}other{# డౌన్లోడ్లు పూర్తయ్యాయి.}}</translation> <translation id="4766678251456904326">పరికరానికి మరొక ఖాతాను జోడించండి</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 డౌన్లోడ్ షెడ్యూల్ చేయబడింది.}other{# డౌన్లోడ్లు షెడ్యూల్ చేయబడ్డాయి.}}</translation> -<translation id="478981486571169252">మీరు Chromeలో మీ <ph name="SITE_NAME" /> సైన్ ఇన్ స్టేటస్, బ్రౌజింగ్ డేటా, సైట్ డేటాను చూస్తారు.</translation> <translation id="4802417911091824046">Google Payకి సంబంధించిన చెల్లింపు పద్ధతులు మరియు చిరునామాలు రహస్య పదబంధం ఎన్క్రిప్షన్లో ఉండవు. ఈ సెట్టింగ్ని మార్చడం కోసం, <ph name="BEGIN_LINK" />సమకాలీకరణను రీసెట్ చేయండి<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">గోప్యత</translation> <translation id="5087580092889165836">కార్డ్ను జోడించు</translation> <translation id="509429900233858213">ఒక ఎర్రర్ ఏర్పడింది.</translation> -<translation id="5100748015044654621">యాప్లోని హైలైట్ చేయబడిన టెక్స్ట్కు లింక్ను షేర్ చేయండి</translation> <translation id="510275257476243843">1 గంట మిగిలి ఉంది</translation> <translation id="5123685120097942451">అజ్ఞాత ట్యాబ్</translation> <translation id="5127805178023152808">సమకాలీకరణ ఆఫ్లో ఉంది</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">ఫైల్లను ఎక్కడ సేవ్ చేయాలో అడుగు</translation> <translation id="6342069812937806050">ఇప్పుడే</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 మరియు మరో <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 మరియు మరో <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation> +<translation id="6345878117466430440">చదివినట్లుగా గుర్తించు</translation> <translation id="6364438453358674297">చరిత్ర నుండి సూచనను తీసివేయాలా?</translation> <translation id="6366047038980456022">మీరు ఆన్లైన్లో సురక్షితంగా పని చేయడానికి, రూపొందించడానికి, అలాగే అన్వేషించడానికి అవసరమైన స్మార్ట్లను, వేగాన్ని <ph name="APP_NAME" /> కలిగి ఉంది</translation> <translation id="6378173571450987352">వివరాలు: ఉపయోగించిన డేటా మొత్తం ద్వారా క్రమీకరించబడ్డాయి</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">మీరు Chrome సెట్టింగ్లలో డేటాను తీసివేయవచ్చు</translation> <translation id="8662811608048051533">చాలా సైట్ల నుండి మిమ్మల్ని సైన్ అవుట్ చేస్తుంది.</translation> <translation id="8664979001105139458">ఫైల్ పేరు ఇప్పటికే ఉంది</translation> +<translation id="8683039184091909753">ఇమేజ్</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{సిగ్నల్ సామర్థ్యం స్థాయి: # బార్}other{సిగ్నల్ సామర్థ్యం స్థాయి: # బార్లు}}</translation> <translation id="869891660844655955">గడువు తేదీ</translation> <translation id="8712637175834984815">అర్థమైంది</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb index 652f301..cf6209e9 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">โหลดหน้าปัจจุบันซ้ำ โดยไม่คำนึงถึงเนื้อหาที่แคชไว้</translation> <translation id="124678866338384709">ปิดแท็บปัจจุบัน</translation> <translation id="1258753120186372309">Google doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">เรื่องรออ่าน</translation> <translation id="1266864766717917324">แชร์<ph name="CONTENT_TYPE" />ไม่ได้</translation> <translation id="1283039547216852943">แตะเพื่อขยาย</translation> <translation id="1291207594882862231">ล้างประวัติการเข้าชม คุกกี้ ข้อมูลเว็บไซต์ แคช…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">แตะคำเพื่อค้นหาทันทีหรือดูการทำงานที่เกี่ยวข้อง</translation> <translation id="2760989362628427051">เปิดธีมสีเข้มเมื่อโหมดธีมสีเข้มหรือโหมดประหยัดแบตเตอรี่ของอุปกรณ์เปิดอยู่</translation> <translation id="2762000892062317888">เมื่อสักครู่</translation> -<translation id="2771869497727323769">สร้างลิงก์มายังข้อความไม่ได้ โปรดแชร์ลิงก์หน้าเว็บในแอป</translation> <translation id="2777555524387840389">เหลือ <ph name="SECONDS" /> วิ</translation> <translation id="2779651927720337254">ล้มเหลว</translation> <translation id="2781151931089541271">เหลือ 1 วิ</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">รายการอุปกรณ์ที่จะแชร์แท็บด้วยปิดอยู่</translation> <translation id="4149994727733219643">มุมมองอย่างง่ายสำหรับหน้าเว็บ</translation> <translation id="4170011742729630528">บริการนี้ยังไม่สามารถใช้ได้ โปรดลองอีกครั้งในภายหลัง</translation> +<translation id="4175173967354304331">คุณจะลงชื่อเข้าใช้เว็บไซต์นี้ รวมถึง Chrome และแอป Google</translation> <translation id="4179980317383591987">ใช้ไปแล้ว <ph name="AMOUNT" /></translation> <translation id="4181841719683918333">ภาษา</translation> <translation id="4183868528246477015">ค้นหาด้วย Google Lens <ph name="BEGIN_NEW" />ใหม่<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{การดาวน์โหลด 1 รายการเสร็จสมบูรณ์}other{การดาวน์โหลด # รายการเสร็จสมบูรณ์}}</translation> <translation id="4766678251456904326">เพิ่มบัญชีลงในอุปกรณ์</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{กำหนดเวลาการดาวน์โหลดแล้ว 1 รายการ}other{กำหนดเวลาการดาวน์โหลดแล้ว # รายการ}}</translation> -<translation id="478981486571169252">คุณจะเห็นสถานะการลงชื่อเข้าใช้ ข้อมูลการท่องเว็บ และข้อมูลเว็บไซต์ของ <ph name="SITE_NAME" /> ใน Chrome</translation> <translation id="4802417911091824046">การเข้ารหัสลับด้วยรหัสผ่านจะไม่รวมข้อมูลวิธีการชำระเงินและที่อยู่จาก Google Pay หากต้องการเปลี่ยนแปลงการตั้งค่านี้ ให้<ph name="BEGIN_LINK" />รีเซ็ตการซิงค์<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">ความเป็นส่วนตัว</translation> <translation id="5087580092889165836">เพิ่มบัตร</translation> <translation id="509429900233858213">มีข้อผิดพลาดเกิดขึ้น</translation> -<translation id="5100748015044654621">แชร์ลิงก์มายังข้อความที่ไฮไลต์ในแอป</translation> <translation id="510275257476243843">เหลือ 1 ชั่วโมง</translation> <translation id="5123685120097942451">แท็บที่ไม่ระบุตัวตน</translation> <translation id="5127805178023152808">การซิงค์ปิดอยู่</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">ถามว่าจะให้บันทึกไฟล์ไว้ที่ใด</translation> <translation id="6342069812937806050">เพิ่งเสร็จ</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 และอีก <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> แห่ง}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 และอีก <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> แห่ง}}</translation> +<translation id="6345878117466430440">ทำเครื่องหมายว่าอ่านแล้ว</translation> <translation id="6364438453358674297">ต้องการนำคำแนะนำออกจากประวัติการเข้าชมใช่ไหม</translation> <translation id="6366047038980456022"><ph name="APP_NAME" /> มีฟีเจอร์และความเร็วที่จำเป็นสำหรับการทำงาน สร้างสรรค์ และสำรวจโลกออนไลน์</translation> <translation id="6378173571450987352">รายละเอียด: จัดเรียงตามปริมาณเน็ตมือถือที่ใช้</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">คุณล้างข้อมูลได้ในการตั้งค่า Chrome</translation> <translation id="8662811608048051533">นำคุณออกจากระบบของเว็บไซต์ส่วนใหญ่</translation> <translation id="8664979001105139458">มีชื่อไฟล์นี้อยู่แล้ว</translation> +<translation id="8683039184091909753">รูปภาพ</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{ระดับความแรงของสัญญาณ: # แถบ}other{ระดับความแรงของสัญญาณ: # แถบ}}</translation> <translation id="869891660844655955">วันหมดอายุ</translation> <translation id="8712637175834984815">สำเร็จ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb index ae980b6e..9b4032d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Önbelleğe alınmış içeriği yoksayarak geçerli sayfayı yeniden yükler</translation> <translation id="124678866338384709">Geçerli sekmeyi kapatır</translation> <translation id="1258753120186372309">Google doodle'ı: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Okuma listesi</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> paylaşılamadı</translation> <translation id="1283039547216852943">Genişletmek için dokunun</translation> <translation id="1291207594882862231">Geçmişi, çerezleri, site verilerini, önbelleği temizleyin…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Anında aramak veya ilgili işlemleri görmek için bir kelimeye dokunun</translation> <translation id="2760989362628427051">Cihazınızın koyu tema veya Pil Tasarrufu özelliği açık olduğunda koyu tema açılır</translation> <translation id="2762000892062317888">az önce</translation> -<translation id="2771869497727323769">Metne bağlantı oluşturulamıyor. Sayfanın bağlantısını bir uygulamada paylaşın.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> sn. kaldı</translation> <translation id="2779651927720337254">başarısız</translation> <translation id="2781151931089541271">1 sn. kaldı</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Sekme paylaşılacak cihazların listesi kapalı.</translation> <translation id="4149994727733219643">Web sayfalarının basitleştirilmiş görünümü</translation> <translation id="4170011742729630528">Hizmet kullanılamıyor, daha sonra tekrar deneyin.</translation> +<translation id="4175173967354304331">Bu sitede, Chrome'da ve Google uygulamalarında oturum açacaksınız</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> miktar</translation> <translation id="4181841719683918333">Diller</translation> <translation id="4183868528246477015">Google Lens ile ara <ph name="BEGIN_NEW" />Yeni<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 indirme işlemi tamamlandı.}other{# indirme işlemi tamamlandı.}}</translation> <translation id="4766678251456904326">Hesabı cihaza ekleyin</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 indirme işlemi programlandı.}other{# indirme işlemi programlandı.}}</translation> -<translation id="478981486571169252"><ph name="SITE_NAME" /> sitenizin oturum açma durumunu, tarama verilerini ve site verilerini Chrome'da görürsünüz.</translation> <translation id="4802417911091824046">Parolayla şifreleme, Google Pay'deki adresleri ve ödeme yöntemlerini kapsamaz. Bu ayarı değiştirmek için <ph name="BEGIN_LINK" />senkronizasyonu sıfırlayın<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Gizlilik</translation> <translation id="5087580092889165836">Kart ekle</translation> <translation id="509429900233858213">Bir hata oluştu.</translation> -<translation id="5100748015044654621">Vurgulanan metnin bağlantısını bir uygulamada paylaşın</translation> <translation id="510275257476243843">1 saat kaldı</translation> <translation id="5123685120097942451">Gizli sekme</translation> <translation id="5127805178023152808">Senkronizasyon kapalı</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Dosyaların kaydedileceği yeri sor</translation> <translation id="6342069812937806050">Az önce</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ve <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> adres daha}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 ve <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> adres daha}}</translation> +<translation id="6345878117466430440">Okundu olarak işaretle</translation> <translation id="6364438453358674297">Öneri geçmişten kaldırılsın mı?</translation> <translation id="6366047038980456022">İnternette güvenle bir şeyler yapmak, oluşturmak ve keşfetmek için gereken tüm akıllı teknolojiler ve hız <ph name="APP_NAME" /> uygulamasında var</translation> <translation id="6378173571450987352">Ayrıntılar: Kullanılan veri miktarına göre sıralı</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Verileri Chrome Ayarlarından temizleyebilirsiniz</translation> <translation id="8662811608048051533">Çoğu sitedeki oturumunuz kapatılır.</translation> <translation id="8664979001105139458">Dosya adı zaten mevcut</translation> +<translation id="8683039184091909753">resim</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Sinyal Gücü Düzeyi: # çubuk}other{Sinyal Gücü Düzeyi: # çubuk}}</translation> <translation id="869891660844655955">Son kullanma tarihi</translation> <translation id="8712637175834984815">Anlaşıldı</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb index ccdec80..ec46708 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Оновити цю сторінку, ігноруючи кешований вміст</translation> <translation id="124678866338384709">Закрити поточну вкладку</translation> <translation id="1258753120186372309">Дудл Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Список читання</translation> <translation id="1266864766717917324">Не вдалося надіслати: <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Торкніться, щоб розгорнути</translation> <translation id="1291207594882862231">Очистити історію, файли cookie, дані сайтів, кеш…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Торкніться слова для миттєвого пошуку або перегляду схожих дій</translation> <translation id="2760989362628427051">Активувати нічний режим, якщо його налаштовано або ввімкнено режим енергозбереження</translation> <translation id="2762000892062317888">щойно</translation> -<translation id="2771869497727323769">Не вдається створити посилання на текст. Надішліть посилання на сторінку в додатку.</translation> <translation id="2777555524387840389">Залишилося <ph name="SECONDS" /> с</translation> <translation id="2779651927720337254">не завантажено</translation> <translation id="2781151931089541271">Залишилась 1 с</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Список пристроїв, на які можна надіслати вкладку, закрито.</translation> <translation id="4149994727733219643">Спрощений перегляд веб-сторінок</translation> <translation id="4170011742729630528">Служба не доступна. Повторіть спробу пізніше.</translation> +<translation id="4175173967354304331">Ви ввійдете у свій обліковий запис на цьому сайті, у Chrome і додатках Google</translation> <translation id="4179980317383591987">Використано <ph name="AMOUNT" /></translation> <translation id="4181841719683918333">Мови</translation> <translation id="4183868528246477015">Пошук з Об'єктивом <ph name="BEGIN_NEW" />Новинка<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 файл завантажено.}one{# файл завантажено.}few{# файли завантажено.}many{# файлів завантажено.}other{# файлу завантажено.}}</translation> <translation id="4766678251456904326">Додати обліковий запис на пристрій</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Заплановано 1 завантаження.}one{Заплановано # завантаження.}few{Заплановано # завантаження.}many{Заплановано # завантажень.}other{Заплановано # завантаження.}}</translation> -<translation id="478981486571169252">Ви зможете переглядати статус входу на сайті <ph name="SITE_NAME" />, дані веб-перегляду й сайтів у Chrome.</translation> <translation id="4802417911091824046">Парольна фраза не стосується способів оплати й адрес із Google Pay. Щоб змінити це налаштування, <ph name="BEGIN_LINK" />скиньте параметри синхронізації<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Конфіденційність</translation> <translation id="5087580092889165836">Додати картку</translation> <translation id="509429900233858213">Сталася помилка.</translation> -<translation id="5100748015044654621">Надіслати посилання на виділений текст у додатку</translation> <translation id="510275257476243843">Залишилась 1 година</translation> <translation id="5123685120097942451">Анонімна вкладка</translation> <translation id="5127805178023152808">Синхронізацію вимкнено</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Запитувати, де зберігати файли</translation> <translation id="6342069812937806050">Лише зараз</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 і ще <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}one{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 і ще <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}few{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 і ще <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}many{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 і ще <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 і ще <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation> +<translation id="6345878117466430440">Позначити як прочитане</translation> <translation id="6364438453358674297">Вилучити пропозицію з історії?</translation> <translation id="6366047038980456022">У <ph name="APP_NAME" /> є все, що потрібно, щоб працювати, творити й досліджувати в Інтернеті</translation> <translation id="6378173571450987352">Деталі: відсортовано за кількістю використаного трафіку</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Ви можете очистити дані в налаштуваннях Chrome</translation> <translation id="8662811608048051533">Ви вийдете з більшості сайтів.</translation> <translation id="8664979001105139458">Файл із такою назвою вже існує</translation> +<translation id="8683039184091909753">зображення</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Рівень сигналу: # поділка}one{Рівень сигналу: # поділка}few{Рівень сигналу: # поділки}many{Рівень сигналу: # поділок}other{Рівень сигналу: # поділки}}</translation> <translation id="869891660844655955">Діє до</translation> <translation id="8712637175834984815">Виконано</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb index fbcee14..e7e1dbb 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">کیش کردہ مواد نظر انداز کرکے موجودہ صفحہ پھر لوڈ کریں</translation> <translation id="124678866338384709">موجودہ ٹیب بند کریں</translation> <translation id="1258753120186372309">Google doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">پڑھنے کی فہرست</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> کا اشتراک نہیں کیا جا سکا</translation> <translation id="1283039547216852943">پھیلانے کیلئے تھپتھپائیں</translation> <translation id="1291207594882862231">سرگزشت، کوکیز، سائٹ ڈیٹا، کیش کو صاف کریں…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">فوری تلاش یا متعلقہ کارروائی کے لیے کسی لفظ پر تھپتھپائیں</translation> <translation id="2760989362628427051">اپنے آلہ کے بیٹری سیور یا گہری تھیم کے آن ہونے پر گہری تھیم آن کریں</translation> <translation id="2762000892062317888">ابھی ابھی</translation> -<translation id="2771869497727323769">ٹیکسٹ کا لنک تخلیق نہیں کیا جا سکا۔ ایپ میں صفحہ کے لنک کا اشتراک کریں۔</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> سیکنڈ باقی</translation> <translation id="2779651927720337254">ناکام ہو گیا</translation> <translation id="2781151931089541271">1 سیکنڈ باقی</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 ڈاؤن لوڈ مکمل ہو گیا۔}other{# ڈاؤن لوڈز مکمل ہو گئے۔}}</translation> <translation id="4766678251456904326">اکاؤنٹ کو آلہ میں شامل کریں</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 ڈاؤن لوڈ شیڈول کیا گیا۔}other{# ڈاؤن لوڈز شیڈول کیے گئے۔}}</translation> -<translation id="478981486571169252">آپ Chrome میں اپنا <ph name="SITE_NAME" /> سائن ان اسٹیٹس، براؤزنگ ڈیٹا اور سائٹ کا ڈیٹا دیکھیں گے۔</translation> <translation id="4802417911091824046">پاس فریز کی مرموز کاری میں Google Pay سے ادائیگی کے طریقے اور پتے شامل نہیں ہوتے ہیں۔ اس ترتیب کو تبدیل کرنے کیلئے، <ph name="BEGIN_LINK" />مطابقت پذیری کو دوبارہ ترتیب دیں<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">رازداری</translation> <translation id="5087580092889165836">کارڈ شامل کریں</translation> <translation id="509429900233858213">ایک خرابی پیش آگئی۔</translation> -<translation id="5100748015044654621">کسی ایپ میں نمایاں کردہ متن کے لنک کا اشتراک کریں</translation> <translation id="510275257476243843">1 گھنٹہ باقی</translation> <translation id="5123685120097942451">پوشیدگی ٹیب</translation> <translation id="5127805178023152808">Sync آف ہے</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb index d87742dc..733d26c9 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Keshga yuklangan ma’lumotlarsiz sahifani qayta yuklang.</translation> <translation id="124678866338384709">Joriy varaqni yopish</translation> <translation id="1258753120186372309">Google-dudl: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Mutolaa ro‘yxati</translation> <translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> yuborilmadi</translation> <translation id="1283039547216852943">Bosib yoyish</translation> <translation id="1291207594882862231">Brauzer tarixi, cookie-fayllar, kesh va boshqa sayt ma’lumotlarini tozalash...</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Tegishli qidiruv natijalari va amallarni ko‘rish uchun so‘z ustiga bosing</translation> <translation id="2760989362628427051">Qurilmangizda tungi mavzu yoki Quvvat tejash rejimi yoqilganda tungi mavzu faollashadi</translation> <translation id="2762000892062317888">hozirgina</translation> -<translation id="2771869497727323769">Matnga havola yaratilmadi. Havolani ilova ichidagi sahifada ulashing.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> soniya qoldi</translation> <translation id="2779651927720337254">xatolik:</translation> <translation id="2781151931089541271">1 soniya qoldi</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 ta fayl yuklab olindi.}other{# ta fayl yuklab olindi.}}</translation> <translation id="4766678251456904326">Qurilmaga hisob kiritish</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{1 ta yuklanma rejalashtirildi.}other{# ta yuklanma rejalashtirildi.}}</translation> -<translation id="478981486571169252"><ph name="SITE_NAME" /> saytiga kirish holati, brauzer va sayt maʼlumotlari Chromeda chiqadi.</translation> <translation id="4802417911091824046">Kodli ibora yordamida shifrlanganda Google Pay manzillari va toʻlov usullari shifrlanmaydi. Bu sozlamani almashtirish uchun <ph name="BEGIN_LINK" />sinxronizatsiyani tiklang<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">Shaxsiy ma’lumotlar</translation> <translation id="5087580092889165836">Yangi karta qo‘shish</translation> <translation id="509429900233858213">Xatolik yuz berdi.</translation> -<translation id="5100748015044654621">Havola ilova ichida ajratilgan matn sifatida ulashildi</translation> <translation id="510275257476243843">1 soat qoldi</translation> <translation id="5123685120097942451">Inkognito varaq</translation> <translation id="5127805178023152808">Sinxronizatsiya o‘chiq</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb index bfaf5c9..126878eb 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Tải lại trang hiện tại, bỏ qua nội dung được lưu trong bộ nhớ đệm</translation> <translation id="124678866338384709">Đóng thẻ hiện tại</translation> <translation id="1258753120186372309">Hình tượng trưng của Google: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Danh sách đọc</translation> <translation id="1266864766717917324">Không thể chia sẻ <ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Nhấn để mở rộng</translation> <translation id="1291207594882862231">Xóa lịch sử, cookie, dữ liệu trang web, bộ nhớ đệm…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Hãy nhấn vào một từ để tìm kiếm ngay hoặc xem các hành động có liên quan</translation> <translation id="2760989362628427051">Bật giao diện tối khi Trình tiết kiệm pin hoặc giao diện tối trên thiết bị đang bật</translation> <translation id="2762000892062317888">vừa xong</translation> -<translation id="2771869497727323769">Không thể tạo đường liên kết đến văn bản. Hãy chia sẻ đường liên kết đến trang trong một ứng dụng.</translation> <translation id="2777555524387840389">Còn <ph name="SECONDS" /> giây</translation> <translation id="2779651927720337254">không tải xuống được</translation> <translation id="2781151931089541271">Còn 1 giây</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{Đã tải xong 1 tệp xuống.}other{Đã tải xong # tệp xuống.}}</translation> <translation id="4766678251456904326">Thêm tài khoản vào thiết bị</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{Đã lên lịch 1 quá trình tải xuống.}other{Đã lên lịch # quá trình tải xuống.}}</translation> -<translation id="478981486571169252">Trong Chrome, bạn sẽ thấy trạng thái đăng nhập, dữ liệu duyệt web và dữ liệu trang web trên <ph name="SITE_NAME" />.</translation> <translation id="4802417911091824046">Việc mã hóa cụm mật khẩu không bao gồm địa chỉ và phương thức thanh toán từ Google Pay. Để thay đổi tùy chọn cài đặt này, hãy <ph name="BEGIN_LINK" />đặt lại tính năng đồng bộ hóa<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">Quyền riêng tư</translation> <translation id="5087580092889165836">Thêm thẻ</translation> <translation id="509429900233858213">Đã xảy ra lỗi.</translation> -<translation id="5100748015044654621">Chia sẻ đường liên kết đến văn bản được đánh dấu trong một ứng dụng</translation> <translation id="510275257476243843">Còn 1 giờ</translation> <translation id="5123685120097942451">Thẻ ẩn danh</translation> <translation id="5127805178023152808">Đồng bộ hóa đã tắt</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb index 2df1965..fbb6c13 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">重新加载当前网页(忽略缓存的内容)</translation> <translation id="124678866338384709">关闭当前标签页</translation> <translation id="1258753120186372309">Google 涂鸦:<ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">阅读清单</translation> <translation id="1266864766717917324">无法分享<ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">点按即可展开</translation> <translation id="1291207594882862231">清除历史记录、Cookie、网站数据、缓存内容…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">点按某个字词可立即开始搜索或查看相关操作</translation> <translation id="2760989362628427051">在设备开启深色主题背景或省电模式时启用深色主题背景</translation> <translation id="2762000892062317888">刚刚</translation> -<translation id="2771869497727323769">无法为所选文本创建链接。请在应用中分享网页链接。</translation> <translation id="2777555524387840389">还剩 <ph name="SECONDS" /> 秒</translation> <translation id="2779651927720337254">失败</translation> <translation id="2781151931089541271">还剩 1 秒</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{已完成 1 项下载。}other{已完成 # 项下载。}}</translation> <translation id="4766678251456904326">向设备添加帐号</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{已排定 1 项下载。}other{已排定 # 项下载。}}</translation> -<translation id="478981486571169252">您会在 Chrome 中看到自己的 <ph name="SITE_NAME" /> 登录状态、浏览数据和网站数据。</translation> <translation id="4802417911091824046">密码加密不包括 Google Pay 中的付款方式和地址。 要更改此设置,请<ph name="BEGIN_LINK" />重置同步设置<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">隐私权</translation> <translation id="5087580092889165836">添加新卡</translation> <translation id="509429900233858213">出现错误。</translation> -<translation id="5100748015044654621">请在应用中分享指向突出显示的文本的链接</translation> <translation id="510275257476243843">还剩 1 小时</translation> <translation id="5123685120097942451">无痕式标签页</translation> <translation id="5127805178023152808">同步功能已关闭</translation> @@ -892,7 +890,7 @@ <translation id="7930998711684428189">在密码遭遇数据泄露时向您发出警告。</translation> <translation id="7942131818088350342"><ph name="PRODUCT_NAME" /> 不是最新版本。</translation> <translation id="7947953824732555851">接受并登录</translation> -<translation id="7961926449547174351">您已停用 Storage 的访问权限,请转到“设置”启用该访问权限。</translation> +<translation id="7961926449547174351">您已停用存储空间的访问权限,请转到“设置”启用该访问权限。</translation> <translation id="7963646190083259054">供应商:</translation> <translation id="7967911570373677897">要扫描二维码,请更改您的设置以允许 Chrome 使用您的摄像头</translation> <translation id="7971136598759319605">1 天前曾有活动</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb index 3270173..fac9254 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">重新載入目前的網頁,忽略之前快取的內容</translation> <translation id="124678866338384709">關閉目前分頁</translation> <translation id="1258753120186372309">Google Doodle:<ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">閱讀清單</translation> <translation id="1266864766717917324">無法分享<ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">輕按即可展開</translation> <translation id="1291207594882862231">清除記錄、Cookie、網站資料、快取…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">輕按字詞即可搜尋,或查看相關操作</translation> <translation id="2760989362628427051">在裝置啟用深色主題背景或開啟「省電模式」後啟用深色主題背景</translation> <translation id="2762000892062317888">剛剛</translation> -<translation id="2771869497727323769">無法建立文字連結。請在應用程式中分享頁面連結。</translation> <translation id="2777555524387840389">尚餘 <ph name="SECONDS" /> 秒</translation> <translation id="2779651927720337254">失敗</translation> <translation id="2781151931089541271">尚餘 1 秒</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{已完成 1 項下載。}other{已完成 # 項下載。}}</translation> <translation id="4766678251456904326">將帳戶新增至裝置</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{已預定 1 項下載。}other{已預定 # 項下載。}}</translation> -<translation id="478981486571169252">您可在 Chrome 中查看 <ph name="SITE_NAME" /> 登入狀態、瀏覽資料和網站資料。</translation> <translation id="4802417911091824046">密碼短語加密的資料並不包括 Google Pay 上的付款方法和地址。 如要變更此設定,請<ph name="BEGIN_LINK" />重設同步功能<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">私隱權</translation> <translation id="5087580092889165836">加入新卡</translation> <translation id="509429900233858213">發生錯誤。</translation> -<translation id="5100748015044654621">請在應用程式中分享突顯文字的連結</translation> <translation id="510275257476243843">尚餘 1 小時</translation> <translation id="5123685120097942451">無痕式分頁</translation> <translation id="5127805178023152808">同步處理已停用</translation> @@ -1001,6 +999,7 @@ <translation id="8748850008226585750">內容已隱藏</translation> <translation id="8788265440806329501">導覽記錄閂咗</translation> <translation id="8788968922598763114">重新開啟最近關閉的分頁</translation> +<translation id="8798449543960971550">讀取</translation> <translation id="8812260976093120287">在部分網站上,您可以透過裝置使用上述支援的付款應用程式付款。</translation> <translation id="8820817407110198400">書籤</translation> <translation id="883806473910249246">下載內容時發生錯誤。</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb index a34c4df..a39b4e5 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">重新載入目前的網頁,略過已快取的內容</translation> <translation id="124678866338384709">關閉目前的分頁</translation> <translation id="1258753120186372309">Google Doodle:<ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">閱讀清單</translation> <translation id="1266864766717917324">無法分享<ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">輕觸即可展開</translation> <translation id="1291207594882862231">清除歷史記錄、Cookie、網站資料、快取…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">只要輕觸字詞就能立即展開搜尋或查看相關的動作</translation> <translation id="2760989362628427051">當裝置開啟深色主題或節約耗電量功能時,啟用深色主題</translation> <translation id="2762000892062317888">剛剛</translation> -<translation id="2771869497727323769">無法建立文字連結。請在應用程式中分享頁面連結。</translation> <translation id="2777555524387840389">還剩 <ph name="SECONDS" /> 秒</translation> <translation id="2779651927720337254">失敗</translation> <translation id="2781151931089541271">還剩 1 秒</translation> @@ -467,7 +467,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{已完成 1 項下載作業。}other{已完成 # 項下載作業。}}</translation> <translation id="4766678251456904326">在裝置上新增帳戶</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{已排定 1 項下載作業。}other{已排定 # 項下載作業。}}</translation> -<translation id="478981486571169252">你可以在 Chrome 中查看 <ph name="SITE_NAME" /> 登入狀態、瀏覽資料和網站資料。</translation> <translation id="4802417911091824046">通關密語加密保護的資料不包括 Google Pay 的付款方式和地址。 如要變更這項設定,請<ph name="BEGIN_LINK" />重設同步功能<ph name="END_LINK" /></translation> @@ -512,7 +511,6 @@ <translation id="5040262127954254034">隱私權</translation> <translation id="5087580092889165836">新增信用卡</translation> <translation id="509429900233858213">發生錯誤。</translation> -<translation id="5100748015044654621">請在應用程式中分享已標示文字的連結</translation> <translation id="510275257476243843">還剩 1 小時</translation> <translation id="5123685120097942451">無痕式分頁</translation> <translation id="5127805178023152808">同步功能已停用</translation> @@ -1001,6 +999,7 @@ <translation id="8748850008226585750">內容已隱藏</translation> <translation id="8788265440806329501">瀏覽記錄已關閉</translation> <translation id="8788968922598763114">重新開啟最近關閉的分頁</translation> +<translation id="8798449543960971550">讀取</translation> <translation id="8812260976093120287">在部分網站上,你可以在你的裝置上使用上述支援的付款應用程式付款。</translation> <translation id="8820817407110198400">書籤</translation> <translation id="883806473910249246">下載這項內容時發生錯誤。</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb index 3407f921..3d19989d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
@@ -39,6 +39,7 @@ <translation id="123724288017357924">Phinda ulayishe ikhasi lamanje, iziba okuqukethwe okufakwe kunqolobane</translation> <translation id="124678866338384709">Vala ithebhu yamanje</translation> <translation id="1258753120186372309">I-Google doodle: <ph name="DOODLE_DESCRIPTION" /></translation> +<translation id="1263231323834454256">Uhlu lokufunda</translation> <translation id="1266864766717917324">Ayikwazanga ukwabelana nge-<ph name="CONTENT_TYPE" /></translation> <translation id="1283039547216852943">Thepha ukuze unwebe</translation> <translation id="1291207594882862231">Sula umlando, amakhukhi, idatha yesayithi, inqolobane…</translation> @@ -218,7 +219,6 @@ <translation id="2744248271121720757">Thepha igama ukuze useshe ngokushesha noma ubone izenzo eziphathelene</translation> <translation id="2760989362628427051">Vula imodi emnyama uma imodi emnyama yedivayisi yakho noma Isilondolozi sebhethri sivuliwe</translation> <translation id="2762000892062317888">khona manje</translation> -<translation id="2771869497727323769">Awukwazi ukudala isixhumanisi sombhalo. Yabelana ngekhasi lesixhumanisi ohlelweni lokusebenza.</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> amasekhondi asele</translation> <translation id="2779651927720337254">yehlulekile</translation> <translation id="2781151931089541271">1 isekhondi elisele</translation> @@ -387,6 +387,7 @@ <translation id="4135200667068010335">Uhlu lwamadivayisi lokwabelana ngethebhu livaliwe.</translation> <translation id="4149994727733219643">Ukubuka okwenziwe lula kwamakhasi ewebhu</translation> <translation id="4170011742729630528">Isevisi ayitholakali; zama futhi emuva kwesikhathi.</translation> +<translation id="4175173967354304331">Uzongeniswa ngemvume kule sayithi, ku-Chrome, nakuzinhlelo zokusebenza ze-Google</translation> <translation id="4179980317383591987"><ph name="AMOUNT" /> esetshenzisiwe</translation> <translation id="4181841719683918333">Izilimi</translation> <translation id="4183868528246477015">Sesha ngelensi yeGoogle<ph name="BEGIN_NEW" />Okusha<ph name="END_NEW" /></translation> @@ -467,7 +468,6 @@ <translation id="4763829664323285145">{FILE_COUNT,plural, =1{1 ukulanda kuqediwe.}one{# ukulandwa kuqediwe.}other{# ukulandwa kuqediwe.}}</translation> <translation id="4766678251456904326">Engeza i-akhawunti kudivayisi</translation> <translation id="4767937498890654900">{FILE_COUNT,plural, =1{ukulanda oku-1 kushejuliwe.}one{ukulandwa oku-# kushejuliwe.}other{ukulandwa oku-# kushejuliwe.}}</translation> -<translation id="478981486571169252">Uzobona isimo sokungena ngemvume ku-<ph name="SITE_NAME" /> yakho, idatha yokuphequlula, kanye nesayithi yedatha ku-Chrome.</translation> <translation id="4802417911091824046">Ukubethelwa komshwana wokungena akubandakanyi izindlela zokukhokha namakheli kusuka ku-Google Pay. Ukuze ushintshe lesi silungiselelo, <ph name="BEGIN_LINK" />setha kabusha ukuvumelanisa<ph name="END_LINK" /></translation> @@ -512,7 +512,6 @@ <translation id="5040262127954254034">Ubumfihlo</translation> <translation id="5087580092889165836">Engeza ikhadi</translation> <translation id="509429900233858213">Kuvele iphutha.</translation> -<translation id="5100748015044654621">Yabelana ngesixhumanisi embhalweni ogqanyisiwe ohlelweni lokusebenza</translation> <translation id="510275257476243843">1 ihora elisele</translation> <translation id="5123685120097942451">Ithebhu ye-Incognito</translation> <translation id="5127805178023152808">Ukuvumelanisa kuvaliwe</translation> @@ -679,6 +678,7 @@ <translation id="6341580099087024258">Buza ukuthi uzowalondoloza kuphi amafayela</translation> <translation id="6342069812937806050">Khona manje</translation> <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 nokungu-<ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ngaphezulu}one{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 nokungu-<ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ngaphezulu}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 nokungu-<ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> ngaphezulu}}</translation> +<translation id="6345878117466430440">Maka njengokufundiwe</translation> <translation id="6364438453358674297">Susa isiphakamiso kusukela kumlando?</translation> <translation id="6366047038980456022">I-<ph name="APP_NAME" /> inobusmathi nejubane olidingayo ukuze udale, futhi uhlole ngokuphephile ku-inthanethi.</translation> <translation id="6378173571450987352">Imininingwane: Ihlungwe ngenani ledatha esetshenzisiwe</translation> @@ -994,6 +994,7 @@ <translation id="8655129584991699539">Ungasula idatha kuzilungiselelo ze-Chrome</translation> <translation id="8662811608048051533">Ikukhipha kumasayithi amaningi.</translation> <translation id="8664979001105139458">Igama lefayela selivele likhona</translation> +<translation id="8683039184091909753">isithombe</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Ileveli yamandla esignali: # ibha}one{Ileveli yamandla esignali: # amabha}other{Ileveli yamandla esignali: # amabha}}</translation> <translation id="869891660844655955">Idethi yokuphelelwa yisikhathi</translation> <translation id="8712637175834984815">Ngiyitholile</translation>
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc b/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc index 93393d0..ace1a50 100644 --- a/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc +++ b/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc
@@ -4,7 +4,10 @@ #include "chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.h" +#include "ash/public/cpp/holding_space/holding_space_constants.h" +#include "base/barrier_closure.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/ash/holding_space/holding_space_util.h" #include "content/public/browser/browser_context.h" namespace ash { @@ -67,23 +70,39 @@ download::SimpleDownloadManager::DownloadVector downloads; download_manager->GetAllDownloads(&downloads); + base::RepeatingClosure barrier_closure = base::BarrierClosure( + downloads.size(), std::move(downloads_restored_callback_)); + for (auto* download : downloads) { switch (download->GetState()) { - case download::DownloadItem::COMPLETE: - OnDownloadCompleted(download); - break; + case download::DownloadItem::COMPLETE: { + holding_space_util::ValidityRequirement requirements; + requirements.must_be_newer_than = kMaxFileAge; + holding_space_util::FilePathValid( + profile(), {download->GetFullPath(), requirements}, + base::BindOnce( + [](const base::FilePath& path, + base::RepeatingClosure barrier_closure, + ItemDownloadedCallback callback, bool valid) { + if (valid) + callback.Run(path); + barrier_closure.Run(); + }, + download->GetFullPath(), barrier_closure, + base::BindRepeating( + &HoldingSpaceDownloadsDelegate::OnDownloadCompleted, + weak_factory_.GetWeakPtr()))); + } break; case download::DownloadItem::IN_PROGRESS: download_item_observer_.Add(download); - break; + FALLTHROUGH; case download::DownloadItem::CANCELLED: case download::DownloadItem::INTERRUPTED: case download::DownloadItem::MAX_DOWNLOAD_STATE: + barrier_closure.Run(); break; } } - - // Notify completion of downloads restoration. - std::move(downloads_restored_callback_).Run(); } void HoldingSpaceDownloadsDelegate::ManagerGoingDown( @@ -101,7 +120,7 @@ download::DownloadItem* item) { switch (item->GetState()) { case download::DownloadItem::COMPLETE: - OnDownloadCompleted(item); + OnDownloadCompleted(item->GetFullPath()); FALLTHROUGH; case download::DownloadItem::CANCELLED: case download::DownloadItem::INTERRUPTED: @@ -114,9 +133,9 @@ } void HoldingSpaceDownloadsDelegate::OnDownloadCompleted( - download::DownloadItem* item) { + const base::FilePath& file_path) { if (!is_restoring_persistence()) - item_downloaded_callback_.Run(item->GetFullPath()); + item_downloaded_callback_.Run(file_path); } void HoldingSpaceDownloadsDelegate::RemoveObservers() {
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.h b/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.h index 268c050..41cdb9d0 100644 --- a/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.h +++ b/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.h
@@ -63,8 +63,8 @@ // download::DownloadItem::Observer: void OnDownloadUpdated(download::DownloadItem* item) override; - // Invoked when the specified `item` has completed downloading. - void OnDownloadCompleted(download::DownloadItem* item); + // Invoked when the specified `file_path` has completed downloading. + void OnDownloadCompleted(const base::FilePath& file_path); // Removes all observers. void RemoveObservers(); @@ -80,6 +80,8 @@ ScopedObserver<download::DownloadItem, download::DownloadItem::Observer> download_item_observer_{this}; + + base::WeakPtrFactory<HoldingSpaceDownloadsDelegate> weak_factory_{this}; }; } // namespace ash
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_file_system_delegate.cc b/chrome/browser/ui/ash/holding_space/holding_space_file_system_delegate.cc index e90c3bd..4e32b06b 100644 --- a/chrome/browser/ui/ash/holding_space/holding_space_file_system_delegate.cc +++ b/chrome/browser/ui/ash/holding_space/holding_space_file_system_delegate.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/ui/ash/holding_space/holding_space_file_system_delegate.h" +#include "ash/public/cpp/holding_space/holding_space_constants.h" #include "ash/public/cpp/holding_space/holding_space_item.h" #include "base/files/file_path.h" #include "base/files/file_path_watcher.h" @@ -129,22 +130,25 @@ // to verify the existence of these backing files and remove any holding space // items that no longer exist. - std::vector<base::FilePath> file_paths; + holding_space_util::FilePathsWithValidityRequirements + file_paths_with_requirements; for (const auto& item : model()->items()) { - if (file_path.IsParent(item->file_path())) - file_paths.push_back(item->file_path()); + if (file_path.IsParent(item->file_path())) { + file_paths_with_requirements.push_back( + {item->file_path(), /*requirements=*/{}}); + } } - holding_space_util::PartitionFilePathsByExistence( - profile(), std::move(file_paths), + holding_space_util::PartitionFilePathsByValidity( + profile(), std::move(file_paths_with_requirements), base::BindOnce( [](const base::WeakPtr<HoldingSpaceFileSystemDelegate>& weak_ptr, - std::vector<base::FilePath> existing_file_paths, - std::vector<base::FilePath> non_existing_file_paths) { + std::vector<base::FilePath> valid_file_paths, + std::vector<base::FilePath> invalid_file_paths) { if (weak_ptr) { auto file_removed_callback = weak_ptr->file_removed_callback_; - for (const auto& non_existing_file_path : non_existing_file_paths) - file_removed_callback.Run(non_existing_file_path); + for (const auto& invalid_file_path : invalid_file_paths) + file_removed_callback.Run(invalid_file_path); } }, weak_factory_.GetWeakPtr()));
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc index 2ebf97d..a4d41ac5 100644 --- a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc +++ b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc
@@ -8,6 +8,7 @@ #include "ash/public/cpp/ash_features.h" #include "ash/public/cpp/file_icon_util.h" +#include "ash/public/cpp/holding_space/holding_space_constants.h" #include "ash/public/cpp/holding_space/holding_space_controller.h" #include "ash/public/cpp/holding_space/holding_space_controller_observer.h" #include "ash/public/cpp/holding_space/holding_space_image.h" @@ -20,6 +21,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/test/bind_test_util.h" #include "base/test/scoped_feature_list.h" +#include "base/test/simple_test_clock.h" #include "chrome/browser/chromeos/file_manager/app_id.h" #include "chrome/browser/chromeos/file_manager/fileapi_util.h" #include "chrome/browser/chromeos/file_manager/path_util.h" @@ -322,6 +324,7 @@ void SetUp() override { SetUpDownloadManager(); BrowserWithTestWindowTest::SetUp(); + holding_space_util::SetNowForTesting(base::nullopt); } void SetUpDownloadManager() { @@ -605,10 +608,113 @@ persisted_holding_space_items_after_restoration); } +// Verifies that screenshots restored from persistence are not older than +// kMaxFileAge. +TEST_F(HoldingSpaceKeyedServiceTest, RemoveOlderFilesFromPersistance) { + // Create file system mount point. + ScopedDownloadsMountPoint downloads_mount(GetProfile()); + ASSERT_TRUE(downloads_mount.IsValid()); + + HoldingSpaceKeyedService* const primary_holding_space_service = + HoldingSpaceKeyedServiceFactory::GetInstance()->GetService(GetProfile()); + + HoldingSpaceModel::ItemList restored_holding_space_items; + base::ListValue persisted_holding_space_items_after_restoration; + + // Create a secondary profile w/ a pre-populated pref store. + TestingProfile* const secondary_profile = CreateSecondaryProfile( + base::BindLambdaForTesting([&](TestingPrefStore* pref_store) { + auto persisted_holding_space_items_before_restoration = + std::make_unique<base::ListValue>(); + + // Persist some holding space items of each type. + for (const HoldingSpaceItem::Type type : GetHoldingSpaceItemTypes()) { + // We do not persist `kDownload` type items. + if (type == HoldingSpaceItem::Type::kDownload) + continue; + + const base::FilePath file = CreateArbitraryFile(downloads_mount); + const GURL file_system_url = GetFileSystemUrl(GetProfile(), file); + + auto fresh_holding_space_item = + HoldingSpaceItem::CreateFileBackedItem( + type, file, file_system_url, + holding_space_util::ResolveImage( + primary_holding_space_service + ->thumbnail_loader_for_testing(), + type, file)); + + persisted_holding_space_items_before_restoration->Append( + fresh_holding_space_item->Serialize()); + + // We don't expect the screenshots to still be in persistence or + // restoration after model restoration since the file will be older + // than the time limit for restored files. + if (type != HoldingSpaceItem::Type::kScreenshot) { + persisted_holding_space_items_after_restoration.Append( + fresh_holding_space_item->Serialize()); + restored_holding_space_items.push_back( + std::move(fresh_holding_space_item)); + } + + auto stale_holding_space_item = + HoldingSpaceItem::CreateFileBackedItem( + type, + base::FilePath(base::UnguessableToken::Create().ToString()), + GURL(), + std::make_unique<HoldingSpaceImage>( + /*placeholder=*/gfx::ImageSkia(), + /*async_bitmap_resolver=*/base::DoNothing())); + + // NOTE: While the `stale_holding_space_item` is persisted here, we do + // *not* expect it to be restored or to be persisted after model + // restoration since its backing file does *not* exist. + persisted_holding_space_items_before_restoration->Append( + stale_holding_space_item->Serialize()); + } + + pref_store->SetValueSilently( + HoldingSpacePersistenceDelegate::kPersistencePath, + std::move(persisted_holding_space_items_before_restoration), + PersistentPrefStore::DEFAULT_PREF_WRITE_FLAGS); + })); + + holding_space_util::SetNowForTesting(base::Time::Now() + kMaxFileAge); + + ActivateSecondaryProfile(); + HoldingSpaceModelAttachedWaiter(secondary_profile).Wait(); + + HoldingSpaceKeyedService* const secondary_holding_space_service = + HoldingSpaceKeyedServiceFactory::GetInstance()->GetService( + secondary_profile); + HoldingSpaceModel* const secondary_holding_space_model = + HoldingSpaceController::Get()->model(); + + EXPECT_EQ(secondary_holding_space_model, + secondary_holding_space_service->model_for_testing()); + + EXPECT_EQ(secondary_holding_space_model->items().size(), + restored_holding_space_items.size()); + + // Verify in-memory holding space items. + for (size_t i = 0; i < secondary_holding_space_model->items().size(); ++i) { + const auto& item = secondary_holding_space_model->items()[i]; + const auto& restored_item = restored_holding_space_items[i]; + EXPECT_EQ(*item, *restored_item) + << "Expected equality of values at index " << i << ":" + << "\n\tActual: " << item->id() + << "\n\rRestored: " << restored_item->id(); + } + + // Verify persisted holding space items. + EXPECT_EQ(*secondary_profile->GetPrefs()->GetList( + HoldingSpacePersistenceDelegate::kPersistencePath), + persisted_holding_space_items_after_restoration); +} + TEST_F(HoldingSpaceKeyedServiceTest, RetrieveHistory) { - TestingProfile* profile = GetProfile(); // Create a test downloads mount point. - ScopedDownloadsMountPoint downloads_mount(profile); + ScopedDownloadsMountPoint downloads_mount(GetProfile()); ASSERT_TRUE(downloads_mount.IsValid()); std::vector<base::FilePath> virtual_paths; @@ -645,8 +751,9 @@ EXPECT_CALL(*mock_download_manager, GetAllDownloads(testing::_)) .WillOnce(testing::SetArgPointee<0>(download_items_mock)); - CreateSecondaryProfile(); + TestingProfile* secondary_profile = CreateSecondaryProfile(); ActivateSecondaryProfile(); + HoldingSpaceModelAttachedWaiter(secondary_profile).Wait(); HoldingSpaceModel* const model = HoldingSpaceController::Get()->model(); ASSERT_EQ(2u, model->items().size()); @@ -734,4 +841,46 @@ downloads_mount.name())); } +TEST_F(HoldingSpaceKeyedServiceTest, RemoveOlderDownloads) { + // Create a test downloads mount point. + ScopedDownloadsMountPoint downloads_mount(GetProfile()); + ASSERT_TRUE(downloads_mount.IsValid()); + + std::vector<base::FilePath> virtual_paths; + std::vector<base::FilePath> full_paths; + content::DownloadManager::DownloadVector download_items_mock; + + content::MockDownloadManager* mock_download_manager = download_manager(); + + for (int i = 0; i < 3; ++i) { + const base::FilePath download_item_virtual_path( + "Download " + base::NumberToString(i) + ".png"); + virtual_paths.push_back(download_item_virtual_path); + const base::FilePath download_item_full_path = + CreateFile(downloads_mount, download_item_virtual_path, + "download " + base::NumberToString(i)); + full_paths.push_back(download_item_full_path); + std::unique_ptr<download::MockDownloadItem> item( + CreateMockDownloadItem(download_item_full_path)); + EXPECT_CALL(*item, GetState()) + .WillOnce(testing::Return(download::DownloadItem::COMPLETE)); + download_items_mock.push_back(item.release()); + } + EXPECT_CALL(*mock_download_manager, GetAllDownloads(testing::_)) + .WillOnce(testing::SetArgPointee<0>(download_items_mock)); + + // Set time to kMaxFileAge from current time, no downloads should be added. + holding_space_util::SetNowForTesting(base::Time::Now() + kMaxFileAge); + + TestingProfile* secondary_profile = CreateSecondaryProfile(); + ActivateSecondaryProfile(); + HoldingSpaceModelAttachedWaiter(secondary_profile).Wait(); + + HoldingSpaceModel* const model = HoldingSpaceController::Get()->model(); + ASSERT_EQ(0u, model->items().size()); + + for (int i = 0; i < 3; ++i) + delete download_items_mock[i]; +} + } // namespace ash
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_persistence_delegate.cc b/chrome/browser/ui/ash/holding_space/holding_space_persistence_delegate.cc index 018b385..fcc3395e 100644 --- a/chrome/browser/ui/ash/holding_space/holding_space_persistence_delegate.cc +++ b/chrome/browser/ui/ash/holding_space/holding_space_persistence_delegate.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/ui/ash/holding_space/holding_space_persistence_delegate.h" +#include "ash/public/cpp/holding_space/holding_space_constants.h" #include "ash/public/cpp/holding_space/holding_space_image.h" #include "ash/public/cpp/holding_space/holding_space_item.h" #include "chrome/browser/profiles/profile.h" @@ -68,9 +69,9 @@ // Remove the |item| from persistent storage. ListPrefUpdate update(profile()->GetPrefs(), kPersistencePath); - update->EraseListValueIf([&item](const base::Value& existing_item) { + update->EraseListValueIf([&item](const base::Value& persisted_item) { return HoldingSpaceItem::DeserializeId( - base::Value::AsDictionaryValue(existing_item)) == item->id(); + base::Value::AsDictionaryValue(persisted_item)) == item->id(); }); } @@ -88,7 +89,8 @@ } std::vector<HoldingSpaceItemPtr> holding_space_items; - std::vector<base::FilePath> holding_space_file_paths; + holding_space_util::FilePathsWithValidityRequirements + file_paths_with_requirements; for (const auto& persisted_holding_space_item : persisted_holding_space_items->GetList()) { @@ -98,37 +100,42 @@ base::Unretained(profile())), base::BindOnce(&holding_space_util::ResolveImage, base::Unretained(thumbnail_loader_)))); - holding_space_file_paths.push_back(holding_space_items.back()->file_path()); + holding_space_util::ValidityRequirement requirements; + HoldingSpaceItem* holding_space_item = holding_space_items.back().get(); + if (holding_space_item->type() != HoldingSpaceItem::Type::kPinnedFile) + requirements.must_be_newer_than = kMaxFileAge; + file_paths_with_requirements.push_back( + {holding_space_item->file_path(), requirements}); } - holding_space_util::PartitionFilePathsByExistence( - profile(), std::move(holding_space_file_paths), - base::BindOnce(&HoldingSpacePersistenceDelegate::RestoreModelByExistence, + holding_space_util::PartitionFilePathsByValidity( + profile(), std::move(file_paths_with_requirements), + base::BindOnce(&HoldingSpacePersistenceDelegate::RestoreModelByValidity, weak_factory_.GetWeakPtr(), std::move(holding_space_items))); } -void HoldingSpacePersistenceDelegate::RestoreModelByExistence( +void HoldingSpacePersistenceDelegate::RestoreModelByValidity( std::vector<HoldingSpaceItemPtr> holding_space_items, - std::vector<base::FilePath> existing_file_paths, - std::vector<base::FilePath> non_existing_file_paths) { + std::vector<base::FilePath> valid_file_paths, + std::vector<base::FilePath> invalid_file_paths) { DCHECK(model()->items().empty()); - // Restore existing holding space items. + // Restore valid holding space items. for (auto& holding_space_item : holding_space_items) { - if (base::Contains(existing_file_paths, holding_space_item->file_path())) + if (base::Contains(valid_file_paths, holding_space_item->file_path())) item_restored_callback_.Run(std::move(holding_space_item)); } - // Clean up non-existing holding space items from persistence. - if (!non_existing_file_paths.empty()) { + // Clean up invalid holding space items from persistence. + if (!invalid_file_paths.empty()) { ListPrefUpdate update(profile()->GetPrefs(), kPersistencePath); update->EraseListValueIf( - [&non_existing_file_paths](const base::Value& persisted_item) { + [&invalid_file_paths](const base::Value& persisted_item) { base::FilePath persisted_file_path = HoldingSpaceItem::DeserializeFilePath( base::Value::AsDictionaryValue(persisted_item)); - return base::Contains(non_existing_file_paths, persisted_file_path); + return base::Contains(invalid_file_paths, persisted_file_path); }); }
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_persistence_delegate.h b/chrome/browser/ui/ash/holding_space/holding_space_persistence_delegate.h index 910e80a..34f792e 100644 --- a/chrome/browser/ui/ash/holding_space/holding_space_persistence_delegate.h +++ b/chrome/browser/ui/ash/holding_space/holding_space_persistence_delegate.h
@@ -67,10 +67,10 @@ // Restores the holding space model from persistent storage. void RestoreModelFromPersistence(); - void RestoreModelByExistence( + void RestoreModelByValidity( std::vector<HoldingSpaceItemPtr> holding_space_items, - std::vector<base::FilePath> existing_file_paths, - std::vector<base::FilePath> non_existing_file_paths); + std::vector<base::FilePath> valid_file_paths, + std::vector<base::FilePath> invalid_file_paths); // Owned by `HoldingSpaceKeyedService`. HoldingSpaceThumbnailLoader* const thumbnail_loader_;
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_util.cc b/chrome/browser/ui/ash/holding_space/holding_space_util.cc index 8ca9328..35eb438 100644 --- a/chrome/browser/ui/ash/holding_space/holding_space_util.cc +++ b/chrome/browser/ui/ash/holding_space/holding_space_util.cc
@@ -22,6 +22,8 @@ namespace { +base::Optional<base::Time> now_for_testing; + // Helpers --------------------------------------------------------------------- gfx::ImageSkia GetPlaceholderImage(HoldingSpaceItem::Type type, @@ -47,56 +49,68 @@ } // namespace +ValidityRequirement::ValidityRequirement() = default; +ValidityRequirement::ValidityRequirement(const ValidityRequirement& other) = + default; +ValidityRequirement::ValidityRequirement(ValidityRequirement&& other) = default; + // Utilities ------------------------------------------------------------------- -void FilePathExists(Profile* profile, - const base::FilePath& file_path, - FilePathExistsCallback callback) { - if (file_path.empty()) { - std::move(callback).Run(/*exists=*/false); - return; - } +void FilePathValid(Profile* profile, + FilePathWithValidityRequirement file_path_with_requirement, + FilePathValidCallback callback) { file_manager::util::GetMetadataForPath( file_manager::util::GetFileSystemContextForExtensionId( profile, file_manager::kFileManagerAppId), - file_path, storage::FileSystemOperation::GET_METADATA_FIELD_NONE, + file_path_with_requirement.first, + storage::FileSystemOperation::GET_METADATA_FIELD_NONE, base::BindOnce( - [](FilePathExistsCallback callback, base::File::Error result, - const base::File::Info& file_info) { - // Absence of error is confirmation of existence. - bool exists = result == base::File::Error::FILE_OK; - std::move(callback).Run(exists); + [](FilePathValidCallback callback, ValidityRequirement requirement, + base::File::Error result, const base::File::Info& file_info) { + bool valid = true; + if (requirement.must_exist) + valid = result == base::File::Error::FILE_OK; + if (valid && requirement.must_be_newer_than) { + valid = file_info.creation_time > + now_for_testing.value_or(base::Time::Now()) - + requirement.must_be_newer_than.value(); + } + std::move(callback).Run(valid); }, - std::move(callback))); + std::move(callback), file_path_with_requirement.second)); } -void PartitionFilePathsByExistence( +void PartitionFilePathsByValidity( Profile* profile, - FilePathList file_paths, - PartitionFilePathsByExistenceCallback callback) { - if (file_paths.empty()) { - std::move(callback).Run(/*existing_file_paths=*/{}, - /*non_existing_file_paths=*/{}); + FilePathsWithValidityRequirements file_paths_with_requirement, + PartitionFilePathsByValidityCallback callback) { + if (file_paths_with_requirement.empty()) { + std::move(callback).Run(/*valid_file_paths=*/{}, + /*invalid_file_paths=*/{}); return; } - auto existing_file_paths = std::make_unique<FilePathList>(); - auto non_existing_file_paths = std::make_unique<FilePathList>(); + auto valid_file_paths = std::make_unique<FilePathList>(); + auto invalid_file_paths = std::make_unique<FilePathList>(); - auto* existing_file_paths_ptr = existing_file_paths.get(); - auto* non_existing_file_paths_ptr = non_existing_file_paths.get(); + auto* valid_file_paths_ptr = valid_file_paths.get(); + auto* invalid_file_paths_ptr = invalid_file_paths.get(); + + FilePathList file_paths; + for (const auto& file_path_with_requirement : file_paths_with_requirement) + file_paths.push_back(file_path_with_requirement.first); // This `barrier_closure` will be run after verifying the existence of all - // `file_paths`. It is expected that both `existing_file_paths` and - // `non_existing_file_paths` will have been populated by the time of + // `file_paths`. It is expected that both `valid_file_paths` and + // `invalid_file_paths` will have been populated by the time of // invocation. base::RepeatingClosure barrier_closure = base::BarrierClosure( - file_paths.size(), + file_paths_with_requirement.size(), base::BindOnce( [](FilePathList sorted_file_paths, - std::unique_ptr<FilePathList> existing_file_paths, - std::unique_ptr<FilePathList> non_existing_file_paths, - PartitionFilePathsByExistenceCallback callback) { + std::unique_ptr<FilePathList> valid_file_paths, + std::unique_ptr<FilePathList> invalid_file_paths, + PartitionFilePathsByValidityCallback callback) { // We need to sort our partitioned vectors to match the original // order that was provided at call time. This is necessary as the // original order may have been lost due to race conditions when @@ -109,34 +123,35 @@ file_paths->push_back(file_path); } }; - sort(existing_file_paths.get()); - sort(non_existing_file_paths.get()); + sort(valid_file_paths.get()); + sort(invalid_file_paths.get()); // Ownership of the partitioned vectors is passed to `callback`. - std::move(callback).Run(std::move(*existing_file_paths), - std::move(*non_existing_file_paths)); + std::move(callback).Run(std::move(*valid_file_paths), + std::move(*invalid_file_paths)); }, - /*sorted_file_paths=*/file_paths, std::move(existing_file_paths), - std::move(non_existing_file_paths), std::move(callback))); + /*sorted_file_paths=*/file_paths, std::move(valid_file_paths), + std::move(invalid_file_paths), std::move(callback))); // Verify existence of each `file_path`. Upon successful check of existence, - // each `file_path` should be pushed into either `existing_file_paths` or - // `non_existing_file_paths` as appropriate. - for (auto& file_path : file_paths) { - FilePathExists( - profile, file_path, + // each `file_path` should be pushed into either `valid_file_paths` or + // `invalid_file_paths` as appropriate. + for (const auto& file_path_with_requirement : file_paths_with_requirement) { + FilePathValid( + profile, file_path_with_requirement, base::BindOnce( - [](base::FilePath file_path, FilePathList* existing_file_paths, - FilePathList* non_existing_file_paths, + [](base::FilePath file_path, FilePathList* valid_file_paths, + FilePathList* invalid_file_paths, base::RepeatingClosure barrier_closure, bool exists) { if (exists) - existing_file_paths->push_back(file_path); + valid_file_paths->push_back(file_path); else - non_existing_file_paths->push_back(file_path); + invalid_file_paths->push_back(file_path); barrier_closure.Run(); }, - file_path, base::Unretained(existing_file_paths_ptr), - base::Unretained(non_existing_file_paths_ptr), barrier_closure)); + file_path_with_requirement.first, + base::Unretained(valid_file_paths_ptr), + base::Unretained(invalid_file_paths_ptr), barrier_closure)); } } @@ -166,5 +181,9 @@ thumbnail_loader->GetWeakPtr(), file_path)); } +void SetNowForTesting(base::Optional<base::Time> now) { + now_for_testing = now; +} + } // namespace holding_space_util } // namespace ash
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_util.h b/chrome/browser/ui/ash/holding_space/holding_space_util.h index 08900e3b..d7919399 100644 --- a/chrome/browser/ui/ash/holding_space/holding_space_util.h +++ b/chrome/browser/ui/ash/holding_space/holding_space_util.h
@@ -10,6 +10,7 @@ #include "ash/public/cpp/holding_space/holding_space_item.h" #include "base/callback_forward.h" +#include "base/time/time.h" class GURL; class Profile; @@ -26,23 +27,34 @@ // A utility for holding space. namespace holding_space_util { +struct ValidityRequirement { + ValidityRequirement(); + ValidityRequirement(const ValidityRequirement& other); + ValidityRequirement(ValidityRequirement&& other); + bool must_exist = true; + base::Optional<base::TimeDelta> must_be_newer_than = base::nullopt; +}; + using FilePathList = std::vector<base::FilePath>; +using FilePathWithValidityRequirement = + std::pair<base::FilePath, ValidityRequirement>; +using FilePathsWithValidityRequirements = + std::vector<FilePathWithValidityRequirement>; -// Checks `file_path` existence, returning the result via `callback`. -using FilePathExistsCallback = base::OnceCallback<void(bool)>; -void FilePathExists(Profile* profile, - const base::FilePath& file_path, - FilePathExistsCallback callback); +// Checks `file_path` validity, returning the result via `callback`. +using FilePathValidCallback = base::OnceCallback<void(bool)>; +void FilePathValid(Profile*, + FilePathWithValidityRequirement, + FilePathValidCallback); -// Partitions `file_paths` into `existing_file_paths` and -// `non_existing_file_paths`, returning the result via `callback`. -using PartitionFilePathsByExistenceCallback = - base::OnceCallback<void(FilePathList existing_file_paths, - FilePathList non_existing_file_paths)>; -void PartitionFilePathsByExistence( - Profile* profile, - FilePathList file_paths, - PartitionFilePathsByExistenceCallback callback); +// Partitions `file_paths` into `valid_file_paths` and +// `invalid_file_paths`, returning the result via `callback`. +using PartitionFilePathsByValidityCallback = + base::OnceCallback<void(FilePathList valid_file_paths, + FilePathList invalid_file_paths)>; +void PartitionFilePathsByValidity(Profile*, + FilePathsWithValidityRequirements, + PartitionFilePathsByValidityCallback); // Resolves the file system URL associated with the specified `file_path`. GURL ResolveFileSystemUrl(Profile* profile, const base::FilePath& file_path); @@ -53,6 +65,8 @@ HoldingSpaceItem::Type type, const base::FilePath& file_path); +void SetNowForTesting(base::Optional<base::Time> now); + } // namespace holding_space_util } // namespace ash
diff --git a/chrome/browser/ui/in_product_help/in_product_help.h b/chrome/browser/ui/in_product_help/in_product_help.h index 8c216b7..e0dee448 100644 --- a/chrome/browser/ui/in_product_help/in_product_help.h +++ b/chrome/browser/ui/in_product_help/in_product_help.h
@@ -9,6 +9,7 @@ enum class InProductHelpFeature { kGlobalMediaControls, kIncognitoWindow, + kLiveCaption, kReopenTab, };
diff --git a/chrome/browser/ui/in_product_help/live_caption_in_product_help.cc b/chrome/browser/ui/in_product_help/live_caption_in_product_help.cc new file mode 100644 index 0000000..5cc9274 --- /dev/null +++ b/chrome/browser/ui/in_product_help/live_caption_in_product_help.cc
@@ -0,0 +1,40 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/in_product_help/live_caption_in_product_help.h" + +#include "base/feature_list.h" +#include "chrome/browser/feature_engagement/tracker_factory.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_list.h" +#include "chrome/browser/ui/browser_window.h" +#include "components/feature_engagement/public/feature_constants.h" +#include "components/feature_engagement/public/tracker.h" +#include "media/base/media_switches.h" + +LiveCaptionInProductHelp::LiveCaptionInProductHelp(Profile* profile) + : profile_(profile) {} + +LiveCaptionInProductHelp::~LiveCaptionInProductHelp() = default; + +void LiveCaptionInProductHelp::OnMediaButtonEnabled() { + Browser* browser = BrowserList::GetInstance()->GetLastActive(); + if (!browser || browser->profile() != profile_) + return; + + if (GetTracker()->ShouldTriggerHelpUI( + feature_engagement::kIPHLiveCaptionFeature)) { + browser->window()->ShowInProductHelpPromo( + InProductHelpFeature::kLiveCaption); + } +} + +void LiveCaptionInProductHelp::HelpDismissed() { + GetTracker()->Dismissed(feature_engagement::kIPHLiveCaptionFeature); +} + +feature_engagement::Tracker* LiveCaptionInProductHelp::GetTracker() { + return feature_engagement::TrackerFactory::GetForBrowserContext(profile_); +}
diff --git a/chrome/browser/ui/in_product_help/live_caption_in_product_help.h b/chrome/browser/ui/in_product_help/live_caption_in_product_help.h new file mode 100644 index 0000000..82de51dc --- /dev/null +++ b/chrome/browser/ui/in_product_help/live_caption_in_product_help.h
@@ -0,0 +1,46 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_IN_PRODUCT_HELP_LIVE_CAPTION_IN_PRODUCT_HELP_H_ +#define CHROME_BROWSER_UI_IN_PRODUCT_HELP_LIVE_CAPTION_IN_PRODUCT_HELP_H_ + +#include "chrome/browser/ui/global_media_controls/media_toolbar_button_observer.h" +#include "components/keyed_service/core/keyed_service.h" + +class Profile; + +namespace feature_engagement { +class Tracker; +} + +// Listens for the triggering conditions for the global media controls +// in-product help and starts the IPH flow at the appropriate time. This is a +// |Profile|-keyed service since we track interactions per user profile. Hooks +// throughout the browser UI code will fetch this service and notify it of +// interesting user actions. +class LiveCaptionInProductHelp : public KeyedService, + public MediaToolbarButtonObserver { + public: + explicit LiveCaptionInProductHelp(Profile* profile); + ~LiveCaptionInProductHelp() override; + LiveCaptionInProductHelp(const LiveCaptionInProductHelp&) = delete; + LiveCaptionInProductHelp& operator=(const LiveCaptionInProductHelp&) = delete; + + // MediaToolbarButtonObserver: + void OnMediaDialogOpened() override {} + void OnMediaButtonShown() override {} + void OnMediaButtonHidden() override {} + void OnMediaButtonEnabled() override; + void OnMediaButtonDisabled() override {} + + // Must be called when IPH promo finishes showing, whether by use of the + // feature or by timing out. + void HelpDismissed(); + + private: + feature_engagement::Tracker* GetTracker(); + Profile* const profile_; +}; + +#endif // CHROME_BROWSER_UI_IN_PRODUCT_HELP_LIVE_CAPTION_IN_PRODUCT_HELP_H_
diff --git a/chrome/browser/ui/in_product_help/live_caption_in_product_help_factory.cc b/chrome/browser/ui/in_product_help/live_caption_in_product_help_factory.cc new file mode 100644 index 0000000..026d11e --- /dev/null +++ b/chrome/browser/ui/in_product_help/live_caption_in_product_help_factory.cc
@@ -0,0 +1,45 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/in_product_help/live_caption_in_product_help_factory.h" + +#include "chrome/browser/feature_engagement/tracker_factory.h" +#include "chrome/browser/profiles/incognito_helpers.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/in_product_help/live_caption_in_product_help.h" +#include "components/keyed_service/content/browser_context_dependency_manager.h" + +// static +LiveCaptionInProductHelp* LiveCaptionInProductHelpFactory::GetForProfile( + Profile* profile) { + return static_cast<LiveCaptionInProductHelp*>( + GetInstance()->GetServiceForBrowserContext(profile, true)); +} + +// static +LiveCaptionInProductHelpFactory* +LiveCaptionInProductHelpFactory::GetInstance() { + static base::NoDestructor<LiveCaptionInProductHelpFactory> factory; + return factory.get(); +} + +LiveCaptionInProductHelpFactory::LiveCaptionInProductHelpFactory() + : BrowserContextKeyedServiceFactory( + "LiveCaptionInProductHelp", + BrowserContextDependencyManager::GetInstance()) { + DependsOn(feature_engagement::TrackerFactory::GetInstance()); +} + +LiveCaptionInProductHelpFactory::~LiveCaptionInProductHelpFactory() = default; + +content::BrowserContext* +LiveCaptionInProductHelpFactory::GetBrowserContextToUse( + content::BrowserContext* context) const { + return chrome::GetBrowserContextRedirectedInIncognito(context); +} + +KeyedService* LiveCaptionInProductHelpFactory::BuildServiceInstanceFor( + content::BrowserContext* context) const { + return new LiveCaptionInProductHelp(Profile::FromBrowserContext(context)); +}
diff --git a/chrome/browser/ui/in_product_help/live_caption_in_product_help_factory.h b/chrome/browser/ui/in_product_help/live_caption_in_product_help_factory.h new file mode 100644 index 0000000..11e4104a --- /dev/null +++ b/chrome/browser/ui/in_product_help/live_caption_in_product_help_factory.h
@@ -0,0 +1,34 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_IN_PRODUCT_HELP_LIVE_CAPTION_IN_PRODUCT_HELP_FACTORY_H_ +#define CHROME_BROWSER_UI_IN_PRODUCT_HELP_LIVE_CAPTION_IN_PRODUCT_HELP_FACTORY_H_ + +#include "base/no_destructor.h" +#include "components/keyed_service/content/browser_context_keyed_service_factory.h" + +class LiveCaptionInProductHelp; +class Profile; + +class LiveCaptionInProductHelpFactory + : public BrowserContextKeyedServiceFactory { + public: + static LiveCaptionInProductHelp* GetForProfile(Profile* profile); + + static LiveCaptionInProductHelpFactory* GetInstance(); + + private: + friend base::NoDestructor<LiveCaptionInProductHelpFactory>; + + LiveCaptionInProductHelpFactory(); + ~LiveCaptionInProductHelpFactory() override; + + // BrowserContextKeyedServiceFactory overrides: + content::BrowserContext* GetBrowserContextToUse( + content::BrowserContext* context) const override; + KeyedService* BuildServiceInstanceFor( + content::BrowserContext* profile) const override; +}; + +#endif // CHROME_BROWSER_UI_IN_PRODUCT_HELP_LIVE_CAPTION_IN_PRODUCT_HELP_FACTORY_H_
diff --git a/chrome/browser/ui/in_product_help/live_caption_in_product_help_unittest.cc b/chrome/browser/ui/in_product_help/live_caption_in_product_help_unittest.cc new file mode 100644 index 0000000..7bb0f6141 --- /dev/null +++ b/chrome/browser/ui/in_product_help/live_caption_in_product_help_unittest.cc
@@ -0,0 +1,62 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/in_product_help/live_caption_in_product_help.h" + +#include "base/bind.h" +#include "base/test/scoped_feature_list.h" +#include "chrome/browser/feature_engagement/tracker_factory.h" +#include "chrome/browser/ui/browser_list.h" +#include "chrome/test/base/browser_with_test_window_test.h" +#include "chrome/test/base/testing_profile.h" +#include "components/feature_engagement/public/feature_constants.h" +#include "components/feature_engagement/public/tracker.h" +#include "components/feature_engagement/test/mock_tracker.h" +#include "media/base/media_switches.h" + +using ::testing::_; +using ::testing::Return; + +using MockTracker = ::testing::NiceMock<feature_engagement::test::MockTracker>; + +class LiveCaptionInProductHelpTest : public BrowserWithTestWindowTest { + protected: + void SetUp() override { + BrowserWithTestWindowTest::SetUp(); + scoped_feature_list_.InitWithFeatures( + {media::kLiveCaption, feature_engagement::kIPHLiveCaptionFeature}, {}); + } + + TestingProfile::TestingFactories GetTestingFactories() override { + return {{feature_engagement::TrackerFactory::GetInstance(), + base::BindRepeating(CreateTracker)}}; + } + + MockTracker* GetMockTracker() { + return static_cast<MockTracker*>( + feature_engagement::TrackerFactory::GetForBrowserContext(profile())); + } + + private: + static std::unique_ptr<KeyedService> CreateTracker( + content::BrowserContext* context) { + return std::make_unique<MockTracker>(); + } + + base::test::ScopedFeatureList scoped_feature_list_; +}; + +TEST_F(LiveCaptionInProductHelpTest, TriggersAndDismissesIPH) { + LiveCaptionInProductHelp live_caption_iph(profile()); + + auto* mock_tracker = GetMockTracker(); + EXPECT_CALL(*mock_tracker, ShouldTriggerHelpUI(_)) + .Times(1) + .WillOnce(Return(true)); + EXPECT_CALL(*mock_tracker, Dismissed(_)).Times(1); + + BrowserList::SetLastActive(browser()); + live_caption_iph.OnMediaButtonEnabled(); + live_caption_iph.HelpDismissed(); +}
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc index 0423ac06..7157f50 100644 --- a/chrome/browser/ui/views/frame/browser_view.cc +++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -3437,6 +3437,9 @@ if (toolbar_ && toolbar_->media_button()) toolbar_->media_button()->ShowPromo(); break; + case InProductHelpFeature::kLiveCaption: + live_caption_promo_controller_.ShowPromo(); + break; } }
diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h index 58daed3..437c37f 100644 --- a/chrome/browser/ui/views/frame/browser_view.h +++ b/chrome/browser/ui/views/frame/browser_view.h
@@ -36,6 +36,7 @@ #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" #include "chrome/browser/ui/views/frame/top_controls_slide_controller.h" #include "chrome/browser/ui/views/frame/web_contents_close_handler.h" +#include "chrome/browser/ui/views/in_product_help/live_caption_promo_controller.h" #include "chrome/browser/ui/views/in_product_help/reopen_tab_promo_controller.h" #include "chrome/browser/ui/views/intent_picker_bubble_view.h" #include "chrome/browser/ui/views/load_complete_listener.h" @@ -921,6 +922,8 @@ ReopenTabPromoController reopen_tab_promo_controller_{this}; + LiveCaptionPromoController live_caption_promo_controller_{this}; + ScopedObserver<banners::AppBannerManager, banners::AppBannerManager::Observer> app_banner_manager_observer_{this};
diff --git a/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.cc b/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.cc index 4b84f45..afcf8b6 100644 --- a/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.cc +++ b/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.cc
@@ -12,6 +12,8 @@ #include "chrome/browser/ui/global_media_controls/media_toolbar_button_controller.h" #include "chrome/browser/ui/in_product_help/global_media_controls_in_product_help.h" #include "chrome/browser/ui/in_product_help/global_media_controls_in_product_help_factory.h" +#include "chrome/browser/ui/in_product_help/live_caption_in_product_help.h" +#include "chrome/browser/ui/in_product_help/live_caption_in_product_help_factory.h" #include "chrome/browser/ui/views/global_media_controls/media_dialog_view.h" #include "chrome/browser/ui/views/in_product_help/global_media_controls_promo_controller.h" #include "chrome/grit/generated_resources.h" @@ -31,11 +33,18 @@ service_( MediaNotificationServiceFactory::GetForProfile(browser->profile())), browser_(browser) { - GlobalMediaControlsInProductHelp* in_product_help = + GlobalMediaControlsInProductHelp* global_media_controls_in_product_help = GlobalMediaControlsInProductHelpFactory::GetForProfile( browser_->profile()); - if (in_product_help) - AddObserver(in_product_help); + if (global_media_controls_in_product_help) + AddObserver(global_media_controls_in_product_help); + + if (base::FeatureList::IsEnabled(media::kLiveCaption)) { + LiveCaptionInProductHelp* live_caption_in_product_help = + LiveCaptionInProductHelpFactory::GetForProfile(browser_->profile()); + if (live_caption_in_product_help) + AddObserver(live_caption_in_product_help); + } button_controller()->set_notify_action( views::ButtonController::NotifyAction::kOnPress);
diff --git a/chrome/browser/ui/views/in_product_help/live_caption_promo_controller.cc b/chrome/browser/ui/views/in_product_help/live_caption_promo_controller.cc new file mode 100644 index 0000000..88015de --- /dev/null +++ b/chrome/browser/ui/views/in_product_help/live_caption_promo_controller.cc
@@ -0,0 +1,56 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/views/in_product_help/live_caption_promo_controller.h" + +#include "chrome/browser/ui/in_product_help/live_caption_in_product_help.h" +#include "chrome/browser/ui/in_product_help/live_caption_in_product_help_factory.h" +#include "chrome/browser/ui/views/frame/browser_view.h" +#include "chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.h" +#include "chrome/browser/ui/views/in_product_help/feature_promo_bubble_params.h" +#include "chrome/browser/ui/views/in_product_help/feature_promo_bubble_view.h" +#include "chrome/browser/ui/views/toolbar/toolbar_view.h" +#include "chrome/grit/generated_resources.h" + +LiveCaptionPromoController::LiveCaptionPromoController( + BrowserView* browser_view) + : browser_view_(browser_view) {} + +LiveCaptionPromoController::~LiveCaptionPromoController() = default; + +void LiveCaptionPromoController::ShowPromo() { + FeaturePromoBubbleParams bubble_params; + bubble_params.body_string_specifier = IDS_LIVE_CAPTION_PROMO; + bubble_params.screenreader_string_specifier = + IDS_LIVE_CAPTION_PROMO_SCREENREADER; + bubble_params.anchor_view = browser_view_->toolbar()->media_button(); + bubble_params.arrow = views::BubbleBorder::Arrow::TOP_RIGHT; + + promo_bubble_ = FeaturePromoBubbleView::Create(std::move(bubble_params)); + promo_bubble_->set_close_on_deactivate(false); + widget_observer_.Add(promo_bubble_->GetWidget()); + browser_view_->toolbar()->media_button()->AddObserver(this); +} + +void LiveCaptionPromoController::PromoEnded() { + LiveCaptionInProductHelpFactory::GetForProfile( + browser_view_->browser()->profile()) + ->HelpDismissed(); +} + +void LiveCaptionPromoController::OnMediaDialogOpened() { + promo_bubble_->GetWidget()->CloseNow(); + PromoEnded(); +} + +void LiveCaptionPromoController::OnMediaButtonDisabled() { + promo_bubble_->GetWidget()->CloseNow(); +} + +void LiveCaptionPromoController::OnWidgetDestroying(views::Widget* widget) { + DCHECK(promo_bubble_); + promo_bubble_ = nullptr; + browser_view_->toolbar()->media_button()->RemoveObserver(this); + widget_observer_.Remove(widget); +}
diff --git a/chrome/browser/ui/views/in_product_help/live_caption_promo_controller.h b/chrome/browser/ui/views/in_product_help/live_caption_promo_controller.h new file mode 100644 index 0000000..3bb274a --- /dev/null +++ b/chrome/browser/ui/views/in_product_help/live_caption_promo_controller.h
@@ -0,0 +1,51 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_VIEWS_IN_PRODUCT_HELP_LIVE_CAPTION_PROMO_CONTROLLER_H_ +#define CHROME_BROWSER_UI_VIEWS_IN_PRODUCT_HELP_LIVE_CAPTION_PROMO_CONTROLLER_H_ + +#include "base/scoped_observer.h" +#include "chrome/browser/ui/global_media_controls/media_toolbar_button_observer.h" +#include "ui/views/widget/widget.h" +#include "ui/views/widget/widget_observer.h" + +class BrowserView; +class FeaturePromoBubbleView; + +// Handles display of the live caption in-product help promo. Notifies the +// |LiveCaptionInProductHelp| service when the promo is finished. +class LiveCaptionPromoController : public MediaToolbarButtonObserver, + public views::WidgetObserver { + public: + explicit LiveCaptionPromoController(BrowserView* browser_view); + ~LiveCaptionPromoController() override; + LiveCaptionPromoController(const LiveCaptionPromoController&) = delete; + LiveCaptionPromoController& operator=(const LiveCaptionPromoController&) = + delete; + + // Shows the IPH promo. Should only be called once. + void ShowPromo(); + + private: + friend class LiveCaptionPromoControllerTest; + + // MediaToolbarButtonObserver: + void OnMediaDialogOpened() override; + void OnMediaButtonShown() override {} + void OnMediaButtonHidden() override {} + void OnMediaButtonEnabled() override {} + void OnMediaButtonDisabled() override; + + // views::WidgetObserver: + void OnWidgetDestroying(views::Widget* widget) override; + + // Called when the promo flow ends. + void PromoEnded(); + + BrowserView* const browser_view_; + FeaturePromoBubbleView* promo_bubble_ = nullptr; + ScopedObserver<views::Widget, views::WidgetObserver> widget_observer_{this}; +}; + +#endif // CHROME_BROWSER_UI_VIEWS_IN_PRODUCT_HELP_LIVE_CAPTION_PROMO_CONTROLLER_H_
diff --git a/chrome/browser/ui/views/in_product_help/live_caption_promo_controller_browsertest.cc b/chrome/browser/ui/views/in_product_help/live_caption_promo_controller_browsertest.cc new file mode 100644 index 0000000..15a0413 --- /dev/null +++ b/chrome/browser/ui/views/in_product_help/live_caption_promo_controller_browsertest.cc
@@ -0,0 +1,86 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/test/scoped_feature_list.h" +#include "chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.h" +#include "chrome/browser/ui/views/in_product_help/feature_promo_bubble_view.h" +#include "chrome/browser/ui/views/in_product_help/live_caption_promo_controller.h" +#include "chrome/browser/ui/views/toolbar/toolbar_view.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" +#include "components/feature_engagement/public/feature_constants.h" +#include "content/public/test/browser_test.h" +#include "media/base/media_switches.h" +#include "ui/events/base_event_utils.h" + +class LiveCaptionPromoControllerTest : public InProcessBrowserTest { + public: + LiveCaptionPromoControllerTest() = default; + ~LiveCaptionPromoControllerTest() override = default; + LiveCaptionPromoControllerTest(const LiveCaptionPromoControllerTest&) = + delete; + LiveCaptionPromoControllerTest& operator=( + const LiveCaptionPromoControllerTest&) = delete; + + // InProcessBrowserTest: + void SetUp() override { + scoped_feature_list_.InitWithFeatures( + {media::kGlobalMediaControls, + feature_engagement::kIPHLiveCaptionFeature}, + {}); + InProcessBrowserTest::SetUp(); + } + + bool PromoBubbleVisible() { + FeaturePromoBubbleView* bubble = GetPromoController()->promo_bubble_; + return bubble && bubble->GetVisible(); + } + + void ShowPromo() { GetPromoController()->ShowPromo(); } + + void DisableMediaButton() { GetPromoController()->OnMediaButtonDisabled(); } + + void OpenMediaDialog() { GetPromoController()->OnMediaDialogOpened(); } + + private: + LiveCaptionPromoController* GetPromoController() { + if (!controller_) { + controller_ = std::make_unique<LiveCaptionPromoController>( + BrowserView::GetBrowserViewForBrowser(browser())); + } + return controller_.get(); + } + + base::test::ScopedFeatureList scoped_feature_list_; + std::unique_ptr<LiveCaptionPromoController> controller_; +}; + +IN_PROC_BROWSER_TEST_F(LiveCaptionPromoControllerTest, ShowPromo) { + EXPECT_FALSE(PromoBubbleVisible()); + + ShowPromo(); + EXPECT_TRUE(PromoBubbleVisible()); +} + +IN_PROC_BROWSER_TEST_F(LiveCaptionPromoControllerTest, OpenMediaDialog) { + EXPECT_FALSE(PromoBubbleVisible()); + + ShowPromo(); + EXPECT_TRUE(PromoBubbleVisible()); + + // Promo disappears when media dialog opens. + OpenMediaDialog(); + EXPECT_FALSE(PromoBubbleVisible()); +} + +IN_PROC_BROWSER_TEST_F(LiveCaptionPromoControllerTest, DisableMediaButton) { + EXPECT_FALSE(PromoBubbleVisible()); + + ShowPromo(); + EXPECT_TRUE(PromoBubbleVisible()); + + // Promo disappears when media button is disabled. + DisableMediaButton(); + EXPECT_FALSE(PromoBubbleVisible()); +}
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc index b53e225..04bd268 100644 --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -179,7 +179,6 @@ #include "chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_ui.h" #include "chrome/browser/ui/webui/chromeos/cryptohome_ui.h" #include "chrome/browser/ui/webui/chromeos/drive_internals_ui.h" -#include "chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.h" #include "chrome/browser/ui/webui/chromeos/first_run/first_run_ui.h" #include "chrome/browser/ui/webui/chromeos/internet_config_dialog.h" #include "chrome/browser/ui/webui/chromeos/internet_detail_dialog.h" @@ -220,6 +219,8 @@ #if defined(OS_CHROMEOS) && !defined(OFFICIAL_BUILD) #include "chrome/browser/ui/webui/chromeos/emulator/device_emulator_ui.h" +#include "chromeos/components/file_manager/file_manager_ui.h" +#include "chromeos/components/file_manager/url_constants.h" #include "chromeos/components/sample_system_web_app_ui/sample_system_web_app_ui.h" #include "chromeos/components/sample_system_web_app_ui/url_constants.h" #include "chromeos/components/telemetry_extension_ui/telemetry_extension_ui.h" @@ -651,9 +652,6 @@ return &NewWebUI<chromeos::CryptohomeUI>; if (url.host_piece() == chrome::kChromeUIDriveInternalsHost) return &NewWebUI<chromeos::DriveInternalsUI>; - if (base::FeatureList::IsEnabled(chromeos::features::kFilesSWA) && - url.host_piece() == chrome::kChromeUIFileManagerHost) - return &NewWebUI<chromeos::file_manager::FileManagerUI>; if (url.host_piece() == chrome::kChromeUIFirstRunHost) return &NewWebUI<chromeos::FirstRunUI>; if (url.host_piece() == chromeos::kChromeUIHelpAppHost) @@ -738,6 +736,8 @@ return &NewWebUI<DeviceEmulatorUI>; } #endif // !defined(USE_REAL_DBUS_CLIENTS) + if (url.host_piece() == chromeos::file_manager::kChromeUIFileManagerHost) + return &NewWebUI<chromeos::file_manager::FileManagerUI>; if (url.host_piece() == chromeos::kChromeUISampleSystemWebAppHost) return &NewWebUI<chromeos::SampleSystemWebAppUI>; if (url.host_piece() == chromeos::kChromeUITelemetryExtensionHost) {
diff --git a/chrome/browser/ui/webui/chromeos/file_manager/BUILD.gn b/chrome/browser/ui/webui/chromeos/file_manager/BUILD.gn deleted file mode 100644 index db7d34a..0000000 --- a/chrome/browser/ui/webui/chromeos/file_manager/BUILD.gn +++ /dev/null
@@ -1,9 +0,0 @@ -# Copyright 2020 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//mojo/public/tools/bindings/mojom.gni") - -mojom("mojo_bindings") { - sources = [ "file_manager.mojom" ] -}
diff --git a/chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.cc b/chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.cc deleted file mode 100644 index 88d3cb9..0000000 --- a/chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.cc +++ /dev/null
@@ -1,57 +0,0 @@ -// Copyright (c) 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.h" - -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/webui/chromeos/file_manager/file_manager_page_handler.h" -#include "chrome/common/url_constants.h" -#include "chrome/grit/browser_resources.h" -#include "content/public/browser/web_ui.h" -#include "content/public/browser/web_ui_data_source.h" - -namespace chromeos { -namespace file_manager { - -FileManagerUI::FileManagerUI(content::WebUI* web_ui) - : MojoWebUIController(web_ui) { - content::WebUIDataSource* source = - content::WebUIDataSource::Create(chrome::kChromeUIFileManagerHost); - source->AddResourcePath("file_manager.css", IDR_FILE_MANAGER_CSS); - source->AddResourcePath("file_manager.js", IDR_FILE_MANAGER_JS); - source->AddResourcePath("file_manager.mojom-lite.js", - IDR_FILE_MANAGER_MOJO_LITE_JS); - source->AddResourcePath("browser_proxy.js", IDR_FILE_MANAGER_PROXY_JS); - - // Default content for chrome://file-manager: ensures unhandled URLs return - // 404 rather than content from SetDefaultResource(). - source->AddResourcePath("", IDR_FILE_MANAGER_HTML); - - Profile* profile = Profile::FromWebUI(web_ui); - content::WebUIDataSource::Add(profile, source); -} - -FileManagerUI::~FileManagerUI() = default; - -void FileManagerUI::BindInterface( - mojo::PendingReceiver<mojom::PageHandlerFactory> pending_receiver) { - if (page_factory_receiver_.is_bound()) { - page_factory_receiver_.reset(); - } - page_factory_receiver_.Bind(std::move(pending_receiver)); -} - -void FileManagerUI::CreatePageHandler( - mojo::PendingRemote<mojom::Page> pending_page, - mojo::PendingReceiver<mojom::PageHandler> pending_page_handler) { - DCHECK(pending_page.is_valid()); - - page_handler_ = std::make_unique<FileManagerPageHandler>( - std::move(pending_page_handler), std::move(pending_page)); -} - -WEB_UI_CONTROLLER_TYPE_IMPL(FileManagerUI) - -} // namespace file_manager -} // namespace chromeos
diff --git a/chrome/browser/ui/webui/downloads/downloads_ui.cc b/chrome/browser/ui/webui/downloads/downloads_ui.cc index a1ddff8..abc1aa5 100644 --- a/chrome/browser/ui/webui/downloads/downloads_ui.cc +++ b/chrome/browser/ui/webui/downloads/downloads_ui.cc
@@ -167,8 +167,10 @@ IDR_DOWNLOADS_IMAGES_INCOGNITO_MARKER_SVG); source->AddResourcePath("images/no_downloads.svg", IDR_DOWNLOADS_IMAGES_NO_DOWNLOADS_SVG); +#if !BUILDFLAG(OPTIMIZE_WEBUI) source->AddResourcePath("downloads.mojom-lite.js", IDR_DOWNLOADS_MOJO_LITE_JS); +#endif source->AddBoolean( "allowOpenNow",
diff --git a/chrome/browser/ui/webui/settings/chromeos/OWNERS b/chrome/browser/ui/webui/settings/chromeos/OWNERS index ff0d48d..2161067 100644 --- a/chrome/browser/ui/webui/settings/chromeos/OWNERS +++ b/chrome/browser/ui/webui/settings/chromeos/OWNERS
@@ -1,5 +1,6 @@ file://chrome/browser/resources/settings/chromeos/OWNERS +per-file languages_section*=myy@chromium.org per-file multidevice_handler*=file://chromeos/components/multidevice/OWNERS # COMPONENT: OS>Systems>Settings
diff --git a/chrome/browser/ui/webui/settings/chromeos/apps_section.cc b/chrome/browser/ui/webui/settings/chromeos/apps_section.cc index 81c619c..25b0bf5f 100644 --- a/chrome/browser/ui/webui/settings/chromeos/apps_section.cc +++ b/chrome/browser/ui/webui/settings/chromeos/apps_section.cc
@@ -326,6 +326,12 @@ IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_INSTRUCTIONS_REMOVE}, {"pluginVmSharedPathsRemoveSharing", IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_REMOVE_SHARING}, + {"pluginVmSharedPathsRemoveFailureDialogMessage", + IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_REMOVE_FAILURE_DIALOG_MESSAGE}, + {"pluginVmSharedPathsRemoveFailureDialogTitle", + IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_REMOVE_FAILURE_DIALOG_TITLE}, + {"pluginVmSharedPathsRemoveFailureTryAgain", + IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_REMOVE_FAILURE_TRY_AGAIN}, {"pluginVmSharedPathsListEmptyMessage", IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_PATHS_LIST_EMPTY_MESSAGE}, {"pluginVmSharedUsbDevicesLabel", @@ -336,6 +342,10 @@ IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_USB_DEVICES_EXTRA_DESCRIPTION}, {"pluginVmSharedUsbDevicesListEmptyMessage", IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_USB_DEVICES_LIST_EMPTY_MESSAGE}, + {"pluginVmSharedUsbDevicesInUse", + IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_USB_DEVICES_IN_USE}, + {"pluginVmSharedUsbDevicesReassign", + IDS_SETTINGS_APPS_PLUGIN_VM_SHARED_USB_DEVICES_REASSIGN}, {"pluginVmPermissionDialogCameraLabel", IDS_SETTINGS_APPS_PLUGIN_VM_PERMISSION_DIALOG_CAMERA_LABEL}, {"pluginVmPermissionDialogMicrophoneLabel",
diff --git a/chrome/browser/ui/webui/settings/chromeos/crostini_handler.cc b/chrome/browser/ui/webui/settings/chromeos/crostini_handler.cc index 550cb7e..ba9ac8c2 100644 --- a/chrome/browser/ui/webui/settings/chromeos/crostini_handler.cc +++ b/chrome/browser/ui/webui/settings/chromeos/crostini_handler.cc
@@ -74,9 +74,10 @@ base::BindRepeating(&CrostiniHandler::HandleRemoveCrostiniSharedPath, weak_ptr_factory_.GetWeakPtr())); web_ui()->RegisterMessageCallback( - "getCrostiniSharedUsbDevices", - base::BindRepeating(&CrostiniHandler::HandleGetCrostiniSharedUsbDevices, - weak_ptr_factory_.GetWeakPtr())); + "notifyCrostiniSharedUsbDevicesPageReady", + base::BindRepeating( + &CrostiniHandler::HandleNotifyCrostiniSharedUsbDevicesPageReady, + weak_ptr_factory_.GetWeakPtr())); web_ui()->RegisterMessageCallback( "setCrostiniUsbDeviceShared", base::BindRepeating(&CrostiniHandler::HandleSetCrostiniUsbDeviceShared, @@ -292,8 +293,10 @@ base::Value device_info(base::Value::Type::DICTIONARY); device_info.SetStringKey("guid", device.guid); device_info.SetStringKey("label", device.label); - device_info.SetBoolKey( - "shared", device.shared_vm_name == crostini::kCrostiniDefaultVmName); + bool shared = device.shared_vm_name == crostini::kCrostiniDefaultVmName; + device_info.SetBoolKey("shared", shared); + device_info.SetBoolKey("shareWillReassign", + device.shared_vm_name && !shared); usb_devices_list.Append(std::move(device_info)); } return usb_devices_list; @@ -325,22 +328,10 @@ } } // namespace -void CrostiniHandler::HandleGetCrostiniSharedUsbDevices( +void CrostiniHandler::HandleNotifyCrostiniSharedUsbDevicesPageReady( const base::ListValue* args) { AllowJavascript(); - CHECK_EQ(1U, args->GetList().size()); - - std::string callback_id = args->GetList()[0].GetString(); - - chromeos::CrosUsbDetector* detector = chromeos::CrosUsbDetector::Get(); - if (!detector) { - ResolveJavascriptCallback(base::Value(callback_id), base::ListValue()); - return; - } - - ResolveJavascriptCallback( - base::Value(callback_id), - UsbDevicesToListValue(detector->GetDevicesSharableWithCrostini())); + OnUsbDevicesChanged(); } void CrostiniHandler::HandleSetCrostiniUsbDeviceShared(
diff --git a/chrome/browser/ui/webui/settings/chromeos/crostini_handler.h b/chrome/browser/ui/webui/settings/chromeos/crostini_handler.h index 586724585..3839b2f 100644 --- a/chrome/browser/ui/webui/settings/chromeos/crostini_handler.h +++ b/chrome/browser/ui/webui/settings/chromeos/crostini_handler.h
@@ -58,8 +58,9 @@ const std::string& path, bool result, const std::string& failure_reason); - // Returns a list of available USB devices. - void HandleGetCrostiniSharedUsbDevices(const base::ListValue* args); + // Called when the shared USB devices page is ready. + void HandleNotifyCrostiniSharedUsbDevicesPageReady( + const base::ListValue* args); // Set the share state of a USB device. void HandleSetCrostiniUsbDeviceShared(const base::ListValue* args); // chromeos::SharedUsbDeviceObserver.
diff --git a/chrome/browser/ui/webui/settings/chromeos/crostini_section.cc b/chrome/browser/ui/webui/settings/chromeos/crostini_section.cc index 1144731f..e9590fffd 100644 --- a/chrome/browser/ui/webui/settings/chromeos/crostini_section.cc +++ b/chrome/browser/ui/webui/settings/chromeos/crostini_section.cc
@@ -270,6 +270,10 @@ IDS_SETTINGS_CROSTINI_SHARED_USB_DEVICES_EXTRA_DESCRIPTION}, {"crostiniSharedUsbDevicesListEmptyMessage", IDS_SETTINGS_CROSTINI_SHARED_USB_DEVICES_LIST_EMPTY_MESSAGE}, + {"crostiniSharedUsbDevicesInUse", + IDS_SETTINGS_CROSTINI_SHARED_USB_DEVICES_IN_USE}, + {"crostiniSharedUsbDevicesReassign", + IDS_SETTINGS_CROSTINI_SHARED_USB_DEVICES_REASSIGN}, {"crostiniArcAdbTitle", IDS_SETTINGS_CROSTINI_ARC_ADB_TITLE}, {"crostiniArcAdbDescription", IDS_SETTINGS_CROSTINI_ARC_ADB_DESCRIPTION}, {"crostiniArcAdbLabel", IDS_SETTINGS_CROSTINI_ARC_ADB_LABEL},
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_power_handler.cc b/chrome/browser/ui/webui/settings/chromeos/device_power_handler.cc index 39e32c0..55b7427d 100644 --- a/chrome/browser/ui/webui/settings/chromeos/device_power_handler.cc +++ b/chrome/browser/ui/webui/settings/chromeos/device_power_handler.cc
@@ -271,7 +271,7 @@ prefs_->SetInteger(screen_off_delay_pref, 0); prefs_->SetInteger(screen_lock_delay_pref, 0); break; - case IdleBehavior::OTHER: + default: NOTREACHED() << "Invalid idle behavior " << value; } } @@ -440,15 +440,24 @@ IsIdleManaged(power_source)); } - // If idle action is managed and set to SHUT_DOWN/STOP_SESSION, only - // possible idle behaviour is other. + // If idle action is managed and set to STOP_SESSION, STOP_SESSION is the only + // possibility. if (prefs_->IsManagedPreference(idle_pref) && (prefs_->GetInteger(idle_pref) == - PowerPolicyController::ACTION_STOP_SESSION || - prefs_->GetInteger(idle_pref) == - PowerPolicyController::ACTION_SHUT_DOWN)) { - current_idle_behavior = IdleBehavior::OTHER; - possible_behaviors.insert(IdleBehavior::OTHER); + PowerPolicyController::ACTION_STOP_SESSION)) { + current_idle_behavior = IdleBehavior::STOP_SESSION; + possible_behaviors.insert(IdleBehavior::STOP_SESSION); + return IdleBehaviorInfo(possible_behaviors, current_idle_behavior, + IsIdleManaged(power_source)); + } + + // If idle action is managed and set to SHUT_DOWN, SHUT_DOWN is the only + // possibility. + if (prefs_->IsManagedPreference(idle_pref) && + (prefs_->GetInteger(idle_pref) == + PowerPolicyController::ACTION_SHUT_DOWN)) { + current_idle_behavior = IdleBehavior::SHUT_DOWN; + possible_behaviors.insert(IdleBehavior::SHUT_DOWN); return IdleBehaviorInfo(possible_behaviors, current_idle_behavior, IsIdleManaged(power_source)); } @@ -543,8 +552,10 @@ ? IdleBehavior::DISPLAY_OFF : IdleBehavior::DISPLAY_ON); } else { - current_idle_behavior = IdleBehavior::OTHER; - possible_behaviors.insert(IdleBehavior::OTHER); + NOTREACHED() << "Idle behavior is set to a enterprise-only value, but " + << "the setting is not enterprise managed. Defaulting to " + << "DISPLAY_OFF_SLEEP behavior."; + current_idle_behavior = IdleBehavior::DISPLAY_OFF_SLEEP; } return IdleBehaviorInfo(possible_behaviors, current_idle_behavior,
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_power_handler.h b/chrome/browser/ui/webui/settings/chromeos/device_power_handler.h index 1d125b0..71db52e 100644 --- a/chrome/browser/ui/webui/settings/chromeos/device_power_handler.h +++ b/chrome/browser/ui/webui/settings/chromeos/device_power_handler.h
@@ -39,7 +39,8 @@ DISPLAY_OFF_SLEEP = 0, DISPLAY_OFF = 1, DISPLAY_ON = 2, - OTHER = 3, + SHUT_DOWN = 3, + STOP_SESSION = 4, }; // WebUI message name and dictionary keys. Shared with tests.
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_power_handler_browsertest.cc b/chrome/browser/ui/webui/settings/chromeos/device_power_handler_browsertest.cc index 36aee62..0b21a59 100644 --- a/chrome/browser/ui/webui/settings/chromeos/device_power_handler_browsertest.cc +++ b/chrome/browser/ui/webui/settings/chromeos/device_power_handler_browsertest.cc
@@ -269,15 +269,6 @@ // Current battery idle behavior should be DISPLAY_ON. settings.current_battery_behavior = PowerHandler::IdleBehavior::DISPLAY_ON; EXPECT_EQ(ToString(settings), GetLastSettingsChangedMessage()); - - // Other idle actions should result in an "other" setting. - GetPrefs()->Set(ash::prefs::kPowerAcIdleAction, - base::Value(PowerPolicyController::ACTION_STOP_SESSION)); - // Current AC idle behavior should be OTHER. - settings.current_ac_behavior = PowerHandler::IdleBehavior::OTHER; - // Possible AC idle behaviors should include OTHER too. - settings.possible_ac_behaviors.insert(PowerHandler::IdleBehavior::OTHER); - EXPECT_EQ(ToString(settings), GetLastSettingsChangedMessage()); } // Verifies that idle-related prefs when managed by enterpise policy are @@ -298,15 +289,15 @@ EXPECT_EQ(ToString(settings), GetLastSettingsChangedMessage()); // Set Enterpise policy that forces battery idle action to Shutdown. Only - // possible battery idle option visible to the user then should be OTHER and - // the default should also be set to same. + // possible battery idle option visible to the user then should be SHUT_DOWN + // and the default should also be set to same. SetPolicyForPolicyKey( &policy_map, policy::key::kIdleActionBattery, base::Value(chromeos::PowerPolicyController::ACTION_SHUT_DOWN)); behaviors.clear(); - behaviors.insert(PowerHandler::IdleBehavior::OTHER); + behaviors.insert(PowerHandler::IdleBehavior::SHUT_DOWN); settings.possible_battery_behaviors = behaviors; - settings.current_battery_behavior = PowerHandler::IdleBehavior::OTHER; + settings.current_battery_behavior = PowerHandler::IdleBehavior::SHUT_DOWN; settings.battery_idle_managed = true; EXPECT_EQ(ToString(settings), GetLastSettingsChangedMessage()); // Erase battery idle action.
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_section.cc b/chrome/browser/ui/webui/settings/chromeos/device_section.cc index 0cd19de..865cc6a6 100644 --- a/chrome/browser/ui/webui/settings/chromeos/device_section.cc +++ b/chrome/browser/ui/webui/settings/chromeos/device_section.cc
@@ -699,7 +699,8 @@ {"powerIdleDisplayOffSleep", IDS_SETTINGS_POWER_IDLE_DISPLAY_OFF_SLEEP}, {"powerIdleDisplayOff", IDS_SETTINGS_POWER_IDLE_DISPLAY_OFF}, {"powerIdleDisplayOn", IDS_SETTINGS_POWER_IDLE_DISPLAY_ON}, - {"powerIdleOther", IDS_SETTINGS_POWER_IDLE_OTHER}, + {"powerIdleDisplayShutDown", IDS_SETTINGS_POWER_IDLE_SHUT_DOWN}, + {"powerIdleDisplayStopSession", IDS_SETTINGS_POWER_IDLE_STOP_SESSION}, {"powerLidSleepLabel", IDS_SETTINGS_POWER_LID_CLOSED_SLEEP_LABEL}, {"powerLidSignOutLabel", IDS_SETTINGS_POWER_LID_CLOSED_SIGN_OUT_LABEL}, {"powerLidShutDownLabel", IDS_SETTINGS_POWER_LID_CLOSED_SHUT_DOWN_LABEL},
diff --git a/chrome/browser/ui/webui/settings/chromeos/languages_section.cc b/chrome/browser/ui/webui/settings/chromeos/languages_section.cc index 10c9e45..00b274de 100644 --- a/chrome/browser/ui/webui/settings/chromeos/languages_section.cc +++ b/chrome/browser/ui/webui/settings/chromeos/languages_section.cc
@@ -307,6 +307,8 @@ IDS_OS_SETTINGS_LANGUAGES_ALL_INPUT_METHODS_LABEL}, {"searchInputMethodsLabel", IDS_OS_SETTINGS_LANGUAGES_SEARCH_INPUT_METHODS_LABEL}, + {"inputMethodNotAllowed", + IDS_OS_SETTINGS_LANGUAGES_INPUT_METHOD_NOT_ALLOWED}, {"spellCheckTitle", IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_TITLE}, {"spellCheckEnhancedLabel", IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_ENHANCED_LABEL},
diff --git a/chrome/browser/ui/webui/settings/chromeos/plugin_vm_handler.cc b/chrome/browser/ui/webui/settings/chromeos/plugin_vm_handler.cc index 7cb12b0..edbf076b 100644 --- a/chrome/browser/ui/webui/settings/chromeos/plugin_vm_handler.cc +++ b/chrome/browser/ui/webui/settings/chromeos/plugin_vm_handler.cc
@@ -27,8 +27,10 @@ base::Value device_info(base::Value::Type::DICTIONARY); device_info.SetStringKey("guid", device.guid); device_info.SetStringKey("label", device.label); - device_info.SetBoolKey("shared", - device.shared_vm_name == plugin_vm::kPluginVmName); + bool shared = device.shared_vm_name == plugin_vm::kPluginVmName; + device_info.SetBoolKey("shared", shared); + device_info.SetBoolKey("shareWillReassign", + device.shared_vm_name && !shared); usb_devices_list.Append(std::move(device_info)); } return usb_devices_list; @@ -104,22 +106,27 @@ void PluginVmHandler::HandleRemovePluginVmSharedPath( const base::ListValue* args) { - CHECK_EQ(2U, args->GetSize()); - std::string vm_name = args->GetList()[0].GetString(); - std::string path = args->GetList()[1].GetString(); + CHECK_EQ(3U, args->GetList().size()); + std::string callback_id = args->GetList()[0].GetString(); + std::string vm_name = args->GetList()[1].GetString(); + std::string path = args->GetList()[2].GetString(); guest_os::GuestOsSharePath::GetForProfile(profile_)->UnsharePath( vm_name, base::FilePath(path), /*unpersist=*/true, - base::BindOnce( - [](const std::string& path, bool result, - const std::string& failure_reason) { - if (!result) { - LOG(ERROR) << "Error unsharing " << path << ": " - << failure_reason; - } - }, - path)); + base::BindOnce(&PluginVmHandler::OnPluginVmSharedPathRemoved, + weak_ptr_factory_.GetWeakPtr(), callback_id, path)); +} + +void PluginVmHandler::OnPluginVmSharedPathRemoved( + const std::string& callback_id, + const std::string& path, + bool success, + const std::string& failure_reason) { + if (!success) { + LOG(ERROR) << "Error unsharing " << path << ": " << failure_reason; + } + ResolveJavascriptCallback(base::Value(callback_id), base::Value(success)); } void PluginVmHandler::HandleNotifyPluginVmSharedUsbDevicesPageReady(
diff --git a/chrome/browser/ui/webui/settings/chromeos/plugin_vm_handler.h b/chrome/browser/ui/webui/settings/chromeos/plugin_vm_handler.h index 7342596..b6fe9f9 100644 --- a/chrome/browser/ui/webui/settings/chromeos/plugin_vm_handler.h +++ b/chrome/browser/ui/webui/settings/chromeos/plugin_vm_handler.h
@@ -52,6 +52,11 @@ // Relaunches Plugin VM. void HandleRelaunchPluginVm(const base::ListValue* args); + void OnPluginVmSharedPathRemoved(const std::string& callback_id, + const std::string& path, + bool success, + const std::string& failure_reason); + Profile* profile_; // weak_ptr_factory_ should always be last member.
diff --git a/chrome/browser/ui/webui/signin/inline_login_ui.cc b/chrome/browser/ui/webui/signin/inline_login_ui.cc index 33c2b767..210032a7 100644 --- a/chrome/browser/ui/webui/signin/inline_login_ui.cc +++ b/chrome/browser/ui/webui/signin/inline_login_ui.cc
@@ -129,12 +129,22 @@ {"edu_login_parent_info.js", IDR_EDU_LOGIN_EDU_LOGIN_PARENT_INFO_JS}, {"edu_login_signin.js", IDR_EDU_LOGIN_EDU_LOGIN_SIGNIN_JS}, {"edu_login_error.js", IDR_EDU_LOGIN_EDU_LOGIN_ERROR_JS}, + // Resources for the server-based edu coexistence flow. + {"edu-coexistence", IDR_EDU_COEXISTENCE_EDU_COEXISTENCE_HTML}, + {"edu_coexistence_app.js", IDR_EDU_COEXISTENCE_EDU_COEXISTENCE_APP_JS}, + {"edu_coexistence_ui.js", IDR_EDU_COEXISTENCE_EDU_COEXISTENCE_UI_JS}, + {"edu_coexistence_controller.js", + IDR_EDU_COEXISTENCE_EDU_COEXISTENCE_CONTROLLER_JS}, + {"chromeos/add_supervision/post_message_api.m.js", + IDR_ADD_SUPERVISION_POST_MESSAGE_API_M_JS}, + #if BUILDFLAG(GOOGLE_CHROME_BRANDING) {"googleg.svg", IDR_ACCOUNT_MANAGER_WELCOME_GOOGLE_LOGO_SVG}, #endif {"family_link_logo.svg", IDR_FAMILY_LINK_LOGO_SVG}, #endif // defined(OS_CHROMEOS) }; + webui::AddResourcePathsBulk(source, kResources); source->AddLocalizedString("title", IDS_CHROME_SIGNIN_TITLE);
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn index 2e95eaaa..68b5119 100644 --- a/chrome/browser/web_applications/BUILD.gn +++ b/chrome/browser/web_applications/BUILD.gn
@@ -119,7 +119,10 @@ ] if (!is_official_build) { - deps += [ "//chromeos/components/sample_system_web_app_ui" ] + deps += [ + "//chromeos/components/file_manager:file_manager_ui", + "//chromeos/components/sample_system_web_app_ui", + ] } }
diff --git a/chrome/browser/web_applications/components/external_install_options.cc b/chrome/browser/web_applications/components/external_install_options.cc index 3adde60..ffbc0c33 100644 --- a/chrome/browser/web_applications/components/external_install_options.cc +++ b/chrome/browser/web_applications/components/external_install_options.cc
@@ -43,7 +43,7 @@ reinstall_placeholder, load_and_await_service_worker_registration, service_worker_registration_url, uninstall_and_replace, - additional_search_terms) == + additional_search_terms, only_use_app_info_factory) == std::tie(other.install_url, other.user_display_mode, other.install_source, other.add_to_applications_menu, other.add_to_desktop, other.add_to_quick_launch_bar, @@ -54,7 +54,8 @@ other.install_placeholder, other.reinstall_placeholder, other.load_and_await_service_worker_registration, other.service_worker_registration_url, - other.uninstall_and_replace, other.additional_search_terms); + other.uninstall_and_replace, other.additional_search_terms, + other.only_use_app_info_factory); } std::ostream& operator<<(std::ostream& out, @@ -90,6 +91,8 @@ << install_options.service_worker_registration_url.value_or(GURL()) << "\n uninstall_and_replace:\n " << base::JoinString(install_options.uninstall_and_replace, "\n ") + << "\n only_use_app_info_factory:\n " + << install_options.only_use_app_info_factory << "\n additional_search_terms:\n " << base::JoinString(install_options.additional_search_terms, "\n ");
diff --git a/chrome/browser/web_applications/components/external_install_options.h b/chrome/browser/web_applications/components/external_install_options.h index b8ddf2ee..b1555403 100644 --- a/chrome/browser/web_applications/components/external_install_options.h +++ b/chrome/browser/web_applications/components/external_install_options.h
@@ -122,10 +122,13 @@ // Only affects Chrome OS. std::vector<std::string> additional_search_terms; - // A factory callback that returns a unique_ptr<WebApplicationInfo>. If this - // is present, the generated WebApplicationInfo is used to install the app - // instead of loading the url, retrieving the manifest, and installing from - // that. + // Determines whether |app_info_factory| is used as a fallback or the primary + // source of app metadata. If true the |install_url| and + // |service_worker_registration_url| will not be loaded. + bool only_use_app_info_factory = false; + + // A factory callback that returns a unique_ptr<WebApplicationInfo> to be used + // as the app's installation metadata. WebApplicationInfoFactory app_info_factory; };
diff --git a/chrome/browser/web_applications/components/web_app_constants.cc b/chrome/browser/web_applications/components/web_app_constants.cc index dc648fa..55b8c10 100644 --- a/chrome/browser/web_applications/components/web_app_constants.cc +++ b/chrome/browser/web_applications/components/web_app_constants.cc
@@ -36,8 +36,19 @@ "OsHookType enum should be zero based"); bool IsSuccess(InstallResultCode code) { - return code == InstallResultCode::kSuccessNewInstall || - code == InstallResultCode::kSuccessAlreadyInstalled; + switch (code) { + case InstallResultCode::kSuccessNewInstall: + case InstallResultCode::kSuccessAlreadyInstalled: + case InstallResultCode::kSuccessOfflineOnlyInstall: + case InstallResultCode::kSuccessOfflineFallbackInstall: + return true; + default: + return false; + } +} + +bool IsNewInstall(InstallResultCode code) { + return IsSuccess(code) && code != InstallResultCode::kSuccessAlreadyInstalled; } DisplayMode ResolveEffectiveDisplayMode(
diff --git a/chrome/browser/web_applications/components/web_app_constants.h b/chrome/browser/web_applications/components/web_app_constants.h index 539cde1c..f592f55 100644 --- a/chrome/browser/web_applications/components/web_app_constants.h +++ b/chrome/browser/web_applications/components/web_app_constants.h
@@ -61,6 +61,7 @@ // Success category: kSuccessNewInstall = 0, kSuccessAlreadyInstalled = 1, + // Failure category: // An inter-process request to blink renderer failed. kGetWebApplicationInfoFailed = 3, @@ -104,12 +105,19 @@ // closed. kWebAppProviderNotReady = 22, - kMaxValue = kWebAppProviderNotReady + // Success category for background installs: + kSuccessOfflineOnlyInstall = 23, + kSuccessOfflineFallbackInstall = 24, + + kMaxValue = kSuccessOfflineFallbackInstall }; // Checks if InstallResultCode is not a failure. bool IsSuccess(InstallResultCode code); +// Checks if InstallResultCode indicates a new app was installed. +bool IsNewInstall(InstallResultCode code); + // PendingAppManager: Where an app was installed from. This affects what flags // will be used when installing the app. //
diff --git a/chrome/browser/web_applications/extensions/system_web_app_manager_bookmark_apps_unittest.cc b/chrome/browser/web_applications/extensions/system_web_app_manager_bookmark_apps_unittest.cc index 2d780fd3..5cc9052b 100644 --- a/chrome/browser/web_applications/extensions/system_web_app_manager_bookmark_apps_unittest.cc +++ b/chrome/browser/web_applications/extensions/system_web_app_manager_bookmark_apps_unittest.cc
@@ -415,6 +415,10 @@ const std::string profile_install_result_histogram = std::string(SystemWebAppManager::kInstallResultHistogramName) + ".Profiles.Other"; + + system_web_app_manager()->SetUpdatePolicy( + SystemWebAppManager::UpdatePolicy::kAlwaysUpdate); + { base::flat_map<SystemAppType, SystemAppInfo> system_apps; system_apps.emplace(SystemAppType::SETTINGS,
diff --git a/chrome/browser/web_applications/external_web_app_manager_browsertest.cc b/chrome/browser/web_applications/external_web_app_manager_browsertest.cc index 451d1f1b..05ad3f5 100644 --- a/chrome/browser/web_applications/external_web_app_manager_browsertest.cc +++ b/chrome/browser/web_applications/external_web_app_manager_browsertest.cc
@@ -8,6 +8,7 @@ #include "base/path_service.h" #include "base/strings/string_util.h" #include "base/test/bind_test_util.h" +#include "build/build_config.h" #include "chrome/browser/extensions/extension_browsertest.h" #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h" #include "chrome/browser/web_applications/components/web_app_helpers.h" @@ -37,6 +38,34 @@ return WebAppProvider::Get(browser()->profile())->registrar(); } + // Mocks "icon.png" as available in the config's directory. + InstallResultCode SyncDefaultAppConfig(const GURL& install_url, + std::string app_config_string) { + base::FilePath source_root_dir; + CHECK(base::PathService::Get(base::DIR_SOURCE_ROOT, &source_root_dir)); + base::FilePath test_icon_path = + source_root_dir.Append(GetChromeTestDataDir()) + .AppendASCII("web_apps/blue-192.png"); + + base::Optional<InstallResultCode> code; + base::RunLoop sync_run_loop; + WebAppProvider::Get(browser()->profile()) + ->external_web_app_manager_for_testing() + .SynchronizeAppsForTesting( + TestFileUtils::Create( + {{base::FilePath(FILE_PATH_LITERAL("test_dir/icon.png")), + test_icon_path}}), + {app_config_string}, + base::BindLambdaForTesting( + [&](std::map<GURL, InstallResultCode> install_results, + std::map<GURL, bool> uninstall_results) { + code = install_results.at(install_url); + sync_run_loop.Quit(); + })); + sync_run_loop.Run(); + return *code; + } + ~ExternalWebAppManagerBrowserTest() override = default; }; @@ -56,28 +85,16 @@ extensions::TestExtensionRegistryObserver uninstall_observer( extensions::ExtensionRegistry::Get(profile)); - // Trigger default web app install. - base::RunLoop sync_run_loop; - WebAppProvider::Get(profile) - ->external_web_app_manager_for_testing() - .SynchronizeAppsForTesting( - std::make_unique<FileUtilsWrapper>(), - {base::ReplaceStringPlaceholders( - R"({ + InstallResultCode code = SyncDefaultAppConfig( + GetAppUrl(), base::ReplaceStringPlaceholders( + R"({ "app_url": "$1", "launch_container": "window", "user_type": ["unmanaged"], "uninstall_and_replace": ["$2"] })", - {GetAppUrl().spec(), app->id()}, nullptr)}, - base::BindLambdaForTesting( - [&](std::map<GURL, InstallResultCode> install_results, - std::map<GURL, bool> uninstall_results) { - EXPECT_EQ(install_results.at(GetAppUrl()), - InstallResultCode::kSuccessNewInstall); - sync_run_loop.Quit(); - })); - sync_run_loop.Run(); + {GetAppUrl().spec(), app->id()}, nullptr)); + EXPECT_EQ(code, InstallResultCode::kSuccessNewInstall); // Chrome app should get uninstalled. scoped_refptr<const extensions::Extension> uninstalled_app = @@ -85,40 +102,25 @@ EXPECT_EQ(app, uninstalled_app.get()); } -// TODO(crbug.com/1119710): Loading icon.png is flaky on Windows. -#if defined(OS_WIN) -#define MAYBE_OfflineManifest DISABLED_OfflineManifest -#else -#define MAYBE_OfflineManifest OfflineManifest -#endif +// TODO(crbug.com/1119710): Loading icon.png fails on Windows. +// This JSON config functionality is only used on Chrome OS. +#if !defined(OS_WIN) + +// Check that offline fallback installs work offline. IN_PROC_BROWSER_TEST_F(ExternalWebAppManagerBrowserTest, - MAYBE_OfflineManifest) { - ASSERT_TRUE(embedded_test_server()->Start()); - Profile* profile = browser()->profile(); - - constexpr char kAppInstallUrl[] = "https://test.org/install.html"; + OfflineFallbackManifestSiteOffline) { + constexpr char kAppInstallUrl[] = "https://offline-site.com/install.html"; constexpr char kAppName[] = "Offline app name"; - constexpr char kAppUrl[] = "https://test.org/start.html"; - constexpr char kAppScope[] = "https://test.org/"; - AppId app_id = GenerateAppIdFromURL(GURL(kAppUrl)); + constexpr char kAppStartUrl[] = "https://offline-site.com/start.html"; + constexpr char kAppScope[] = "https://offline-site.com/"; - base::FilePath source_root_dir; - CHECK(base::PathService::Get(base::DIR_SOURCE_ROOT, &source_root_dir)); - base::FilePath test_icon_path = source_root_dir.Append(GetChromeTestDataDir()) - .AppendASCII("web_apps/blue-192.png"); - + AppId app_id = GenerateAppIdFromURL(GURL(kAppStartUrl)); EXPECT_FALSE(registrar().IsInstalled(app_id)); - // Sync default web apps. - base::RunLoop sync_run_loop; - WebAppProvider::Get(profile) - ->external_web_app_manager_for_testing() - .SynchronizeAppsForTesting( - TestFileUtils::Create( - {{base::FilePath(FILE_PATH_LITERAL("test_dir/icon.png")), - test_icon_path}}), - {base::ReplaceStringPlaceholders( - R"({ + InstallResultCode code = SyncDefaultAppConfig( + GURL(kAppInstallUrl), + base::ReplaceStringPlaceholders( + R"({ "app_url": "$1", "launch_container": "window", "user_type": ["unmanaged"], @@ -131,25 +133,159 @@ "icon_any_pngs": ["icon.png"] } })", - {kAppInstallUrl, kAppName, kAppUrl, kAppScope}, nullptr)}, - base::BindLambdaForTesting( - [&](std::map<GURL, InstallResultCode> install_results, - std::map<GURL, bool> uninstall_results) { - EXPECT_EQ(install_results.at(GURL(kAppInstallUrl)), - InstallResultCode::kSuccessNewInstall); - sync_run_loop.Quit(); - })); - sync_run_loop.Run(); + {kAppInstallUrl, kAppName, kAppStartUrl, kAppScope}, nullptr)); + EXPECT_EQ(code, InstallResultCode::kSuccessOfflineFallbackInstall); EXPECT_TRUE(registrar().IsInstalled(app_id)); EXPECT_EQ(registrar().GetAppShortName(app_id), kAppName); - EXPECT_EQ(registrar().GetAppLaunchURL(app_id).spec(), kAppUrl); + EXPECT_EQ(registrar().GetAppLaunchURL(app_id).spec(), kAppStartUrl); EXPECT_EQ(registrar().GetAppScope(app_id).spec(), kAppScope); // theme_color must be installed opaque. EXPECT_EQ(registrar().GetAppThemeColor(app_id), SkColorSetARGB(0xFF, 0xBB, 0xCC, 0xDD)); - EXPECT_EQ(ReadAppIconPixel(profile, app_id, /*size=*/192, /*x=*/0, /*y=*/0), + EXPECT_EQ(ReadAppIconPixel(browser()->profile(), app_id, /*size=*/192, + /*x=*/0, /*y=*/0), SK_ColorBLUE); } +// Check that offline fallback installs attempt fetching the install_url. +IN_PROC_BROWSER_TEST_F(ExternalWebAppManagerBrowserTest, + OfflineFallbackManifestSiteOnline) { + ASSERT_TRUE(embedded_test_server()->Start()); + + // This install_url serves a manifest with different values to what we specify + // in the offline_manifest. Check that it gets used instead of the + // offline_manifest. + GURL install_url = embedded_test_server()->GetURL("/web_apps/basic.html"); + GURL offline_start_url = embedded_test_server()->GetURL( + "/web_apps/offline-only-start-url-that-does-not-exist.html"); + GURL scope = embedded_test_server()->GetURL("/web_apps/"); + + AppId offline_app_id = GenerateAppIdFromURL(offline_start_url); + EXPECT_FALSE(registrar().IsInstalled(offline_app_id)); + + InstallResultCode code = SyncDefaultAppConfig( + install_url, + base::ReplaceStringPlaceholders( + R"({ + "app_url": "$1", + "launch_container": "window", + "user_type": ["unmanaged"], + "offline_manifest": { + "name": "Offline only app name", + "start_url": "$3", + "scope": "$4", + "display": "minimal-ui", + "theme_color_argb_hex": "AABBCCDD", + "icon_any_pngs": ["icon.png"] + } + })", + {install_url.spec(), offline_start_url.spec(), scope.spec()}, + nullptr)); + EXPECT_EQ(code, InstallResultCode::kSuccessNewInstall); + + EXPECT_FALSE(registrar().IsInstalled(offline_app_id)); + + // basic.html's manifest start_url is basic.html. + AppId app_id = GenerateAppIdFromURL(install_url); + EXPECT_TRUE(registrar().IsInstalled(app_id)); + EXPECT_EQ(registrar().GetAppShortName(app_id), "Basic web app"); + EXPECT_EQ(registrar().GetAppLaunchURL(app_id).spec(), install_url); + EXPECT_EQ(registrar().GetAppScope(app_id).spec(), scope); +} + +// Check that offline only installs work offline. +IN_PROC_BROWSER_TEST_F(ExternalWebAppManagerBrowserTest, + OfflineOnlyManifestSiteOffline) { + constexpr char kAppInstallUrl[] = "https://offline-site.com/install.html"; + constexpr char kAppName[] = "Offline app name"; + constexpr char kAppStartUrl[] = "https://offline-site.com/start.html"; + constexpr char kAppScope[] = "https://offline-site.com/"; + + AppId app_id = GenerateAppIdFromURL(GURL(kAppStartUrl)); + EXPECT_FALSE(registrar().IsInstalled(app_id)); + + InstallResultCode code = SyncDefaultAppConfig( + GURL(kAppInstallUrl), + base::ReplaceStringPlaceholders( + R"({ + "app_url": "$1", + "launch_container": "window", + "user_type": ["unmanaged"], + "only_use_offline_manifest": true, + "offline_manifest": { + "name": "$2", + "start_url": "$3", + "scope": "$4", + "display": "minimal-ui", + "theme_color_argb_hex": "AABBCCDD", + "icon_any_pngs": ["icon.png"] + } + })", + {kAppInstallUrl, kAppName, kAppStartUrl, kAppScope}, nullptr)); + EXPECT_EQ(code, InstallResultCode::kSuccessOfflineOnlyInstall); + + EXPECT_TRUE(registrar().IsInstalled(app_id)); + EXPECT_EQ(registrar().GetAppShortName(app_id), kAppName); + EXPECT_EQ(registrar().GetAppLaunchURL(app_id).spec(), kAppStartUrl); + EXPECT_EQ(registrar().GetAppScope(app_id).spec(), kAppScope); + // theme_color must be installed opaque. + EXPECT_EQ(registrar().GetAppThemeColor(app_id), + SkColorSetARGB(0xFF, 0xBB, 0xCC, 0xDD)); + EXPECT_EQ(ReadAppIconPixel(browser()->profile(), app_id, /*size=*/192, + /*x=*/0, /*y=*/0), + SK_ColorBLUE); +} + +// Check that offline only installs don't fetch from the install_url. +IN_PROC_BROWSER_TEST_F(ExternalWebAppManagerBrowserTest, + OfflineOnlyManifestSiteOnline) { + ASSERT_TRUE(embedded_test_server()->Start()); + + // This install_url serves a manifest with different values to what we specify + // in the offline_manifest. Check that it doesn't get used. + GURL install_url = GetAppUrl(); + const char kAppName[] = "Offline only app name"; + GURL start_url = embedded_test_server()->GetURL( + "/web_apps/offline-only-start-url-that-does-not-exist.html"); + GURL scope = embedded_test_server()->GetURL("/web_apps/"); + + AppId app_id = GenerateAppIdFromURL(start_url); + EXPECT_FALSE(registrar().IsInstalled(app_id)); + + InstallResultCode code = SyncDefaultAppConfig( + install_url, + base::ReplaceStringPlaceholders( + R"({ + "app_url": "$1", + "launch_container": "window", + "user_type": ["unmanaged"], + "only_use_offline_manifest": true, + "offline_manifest": { + "name": "$2", + "start_url": "$3", + "scope": "$4", + "display": "minimal-ui", + "theme_color_argb_hex": "AABBCCDD", + "icon_any_pngs": ["icon.png"] + } + })", + {install_url.spec(), kAppName, start_url.spec(), scope.spec()}, + nullptr)); + EXPECT_EQ(code, InstallResultCode::kSuccessOfflineOnlyInstall); + + EXPECT_TRUE(registrar().IsInstalled(app_id)); + EXPECT_EQ(registrar().GetAppShortName(app_id), kAppName); + EXPECT_EQ(registrar().GetAppLaunchURL(app_id).spec(), start_url); + EXPECT_EQ(registrar().GetAppScope(app_id).spec(), scope); + // theme_color must be installed opaque. + EXPECT_EQ(registrar().GetAppThemeColor(app_id), + SkColorSetARGB(0xFF, 0xBB, 0xCC, 0xDD)); + EXPECT_EQ(ReadAppIconPixel(browser()->profile(), app_id, /*size=*/192, + /*x=*/0, /*y=*/0), + SK_ColorBLUE); +} + +#endif // !defined(OS_WIN) + } // namespace web_app
diff --git a/chrome/browser/web_applications/external_web_app_utils.cc b/chrome/browser/web_applications/external_web_app_utils.cc index 7e3137f..4a678bc2 100644 --- a/chrome/browser/web_applications/external_web_app_utils.cc +++ b/chrome/browser/web_applications/external_web_app_utils.cc
@@ -93,6 +93,15 @@ // app. constexpr char kUninstallAndReplace[] = "uninstall_and_replace"; +// kOnlyUseOfflineManifest is an optional bool. +// If set to true then no network install will be attempted and the app will be +// installed using |kOfflineManifest| data. |kOfflineManifest| must be specified +// in this case. +// If set to false and |kOfflineManifest| is set then it will be used as a +// fallback manifest if the network install fails. +// Defaults to false. +constexpr char kOnlyUseOfflineManifest[] = "only_use_offline_manifest"; + // kOfflineManifest is a dictionary of manifest field values to use as an // install to avoid the expense of fetching the install URL to download the // app's true manifest. Next time the user visits the app it will undergo a @@ -302,6 +311,16 @@ return base::nullopt; } + // only_use_offline_manifest + value = app_config.FindKey(kOnlyUseOfflineManifest); + if (value) { + if (!value->is_bool()) { + LOG(ERROR) << file << " had an invalid " << kOnlyUseOfflineManifest; + return base::nullopt; + } + result.only_use_app_info_factory = value->GetBool(); + } + // offline_manifest value = app_config.FindDictKey(kOfflineManifest); if (value) { @@ -309,6 +328,12 @@ ParseOfflineManifest(file_utils, dir, file, *value); } + if (result.only_use_app_info_factory && !result.app_info_factory) { + LOG(ERROR) << file << kOnlyUseOfflineManifest << " set with no " + << kOfflineManifest << " available"; + return base::nullopt; + } + return result; }
diff --git a/chrome/browser/web_applications/pending_app_install_task.cc b/chrome/browser/web_applications/pending_app_install_task.cc index 05f21c3..e432194 100644 --- a/chrome/browser/web_applications/pending_app_install_task.cc +++ b/chrome/browser/web_applications/pending_app_install_task.cc
@@ -31,7 +31,7 @@ PendingAppInstallTask::Result::Result(InstallResultCode code, base::Optional<AppId> app_id) : code(code), app_id(std::move(app_id)) { - DCHECK_EQ(code == InstallResultCode::kSuccessNewInstall, app_id.has_value()); + DCHECK_EQ(IsNewInstall(code), app_id.has_value()); } PendingAppInstallTask::Result::Result(Result&&) = default; @@ -71,23 +71,27 @@ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_EQ(web_contents->GetBrowserContext(), profile_); + ResultCallback retry_on_failure = base::BindOnce( + &PendingAppInstallTask::TryAppInfoFactoryOnFailure, + weak_ptr_factory_.GetWeakPtr(), std::move(result_callback)); + if (load_url_result == WebAppUrlLoader::Result::kUrlLoaded) { // If we are not re-installing a placeholder, then no need to uninstall // anything. if (!install_options_.reinstall_placeholder) { - ContinueWebAppInstall(web_contents, std::move(result_callback)); + ContinueWebAppInstall(web_contents, std::move(retry_on_failure)); return; } // Calling InstallWebAppWithOptions with the same URL used to install a // placeholder won't necessarily replace the placeholder app, because the // new app might be installed with a new AppId. To avoid this, always // uninstall the placeholder app. - UninstallPlaceholderApp(web_contents, std::move(result_callback)); + UninstallPlaceholderApp(web_contents, std::move(retry_on_failure)); return; } if (install_options_.install_placeholder) { - InstallPlaceholder(std::move(result_callback)); + InstallPlaceholder(std::move(retry_on_failure)); return; } @@ -120,7 +124,7 @@ base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, - base::BindOnce(std::move(result_callback), Result(code, base::nullopt))); + base::BindOnce(std::move(retry_on_failure), Result(code, base::nullopt))); } void PendingAppInstallTask::InstallFromInfo(ResultCallback result_callback) { @@ -136,7 +140,7 @@ internal_install_source, base::BindOnce(&PendingAppInstallTask::OnWebAppInstalled, weak_ptr_factory_.GetWeakPtr(), /* is_placeholder=*/false, - std::move(result_callback))); + /*offline_install=*/true, std::move(result_callback))); } void PendingAppInstallTask::UninstallPlaceholderApp( @@ -186,8 +190,8 @@ install_manager_->InstallWebAppWithParams( web_contents, install_params, install_source, base::BindOnce(&PendingAppInstallTask::OnWebAppInstalled, - weak_ptr_factory_.GetWeakPtr(), false /* is_placeholder */, - std::move(result_callback))); + weak_ptr_factory_.GetWeakPtr(), /*is_placeholder=*/false, + /*offline_install=*/false, std::move(result_callback))); } void PendingAppInstallTask::InstallPlaceholder(ResultCallback callback) { @@ -227,15 +231,16 @@ install_finalizer_->FinalizeInstall( web_app_info, options, base::BindOnce(&PendingAppInstallTask::OnWebAppInstalled, - weak_ptr_factory_.GetWeakPtr(), true /* is_placeholder */, - std::move(callback))); + weak_ptr_factory_.GetWeakPtr(), /*is_placeholder=*/true, + /*offline_install=*/false, std::move(callback))); } void PendingAppInstallTask::OnWebAppInstalled(bool is_placeholder, + bool offline_install, ResultCallback result_callback, const AppId& app_id, InstallResultCode code) { - if (code != InstallResultCode::kSuccessNewInstall) { + if (!IsNewInstall(code)) { std::move(result_callback).Run(Result(code, base::nullopt)); return; } @@ -248,9 +253,13 @@ externally_installed_app_prefs_.SetIsPlaceholder(install_options_.install_url, is_placeholder); + if (offline_install) { + code = install_options().only_use_app_info_factory + ? InstallResultCode::kSuccessOfflineOnlyInstall + : InstallResultCode::kSuccessOfflineFallbackInstall; + } base::ScopedClosureRunner scoped_closure( - base::BindOnce(std::move(result_callback), - Result(InstallResultCode::kSuccessNewInstall, app_id))); + base::BindOnce(std::move(result_callback), Result(code, app_id))); if (!is_placeholder) { return; @@ -277,4 +286,14 @@ nullptr, options); } +void PendingAppInstallTask::TryAppInfoFactoryOnFailure( + ResultCallback result_callback, + Result result) { + if (!IsSuccess(result.code) && install_options().app_info_factory) { + InstallFromInfo(std::move(result_callback)); + return; + } + std::move(result_callback).Run(std::move(result)); +} + } // namespace web_app
diff --git a/chrome/browser/web_applications/pending_app_install_task.h b/chrome/browser/web_applications/pending_app_install_task.h index 7a5a200..e9599fe 100644 --- a/chrome/browser/web_applications/pending_app_install_task.h +++ b/chrome/browser/web_applications/pending_app_install_task.h
@@ -92,9 +92,12 @@ void ContinueWebAppInstall(content::WebContents* web_contents, ResultCallback result_callback); void OnWebAppInstalled(bool is_placeholder, + bool offline_install, ResultCallback result_callback, const AppId& app_id, InstallResultCode code); + void TryAppInfoFactoryOnFailure(ResultCallback result_callback, + Result result); Profile* const profile_; AppRegistrar* const registrar_;
diff --git a/chrome/browser/web_applications/pending_app_manager_impl.cc b/chrome/browser/web_applications/pending_app_manager_impl.cc index e0322c6..b23c213 100644 --- a/chrome/browser/web_applications/pending_app_manager_impl.cc +++ b/chrome/browser/web_applications/pending_app_manager_impl.cc
@@ -218,7 +218,8 @@ } current_install_ = std::move(task); - if (current_install_->task->install_options().app_info_factory) { + if (current_install_->task->install_options().only_use_app_info_factory) { + DCHECK(current_install_->task->install_options().app_info_factory); current_install_->task->InstallFromInfo(base::BindOnce( &PendingAppManagerImpl::OnInstalled, weak_ptr_factory_.GetWeakPtr())); return; @@ -278,7 +279,7 @@ void PendingAppManagerImpl::CurrentInstallationFinished( const base::Optional<AppId>& app_id, InstallResultCode code) { - if (app_id && code == InstallResultCode::kSuccessNewInstall) { + if (app_id && IsSuccess(code)) { MaybeEnqueueServiceWorkerRegistration( current_install_->task->install_options()); } @@ -301,6 +302,9 @@ return; } + if (install_options.only_use_app_info_factory) + return; + if (!install_options.load_and_await_service_worker_registration) return;
diff --git a/chrome/browser/web_applications/pending_app_manager_impl_unittest.cc b/chrome/browser/web_applications/pending_app_manager_impl_unittest.cc index 2064d44..70a060f8 100644 --- a/chrome/browser/web_applications/pending_app_manager_impl_unittest.cc +++ b/chrome/browser/web_applications/pending_app_manager_impl_unittest.cc
@@ -108,6 +108,7 @@ base::Optional<bool>()) { ExternalInstallOptions options(FooWebAppUrl(), DisplayMode::kBrowser, ExternalInstallSource::kExternalPolicy); + options.only_use_app_info_factory = true; options.app_info_factory = base::BindRepeating(&GetFooWebApplicationInfo); if (override_previous_user_uninstall.has_value())
diff --git a/chrome/browser/web_applications/system_web_app_manager.cc b/chrome/browser/web_applications/system_web_app_manager.cc index d368a83..99958b4c 100644 --- a/chrome/browser/web_applications/system_web_app_manager.cc +++ b/chrome/browser/web_applications/system_web_app_manager.cc
@@ -59,6 +59,7 @@ #include "extensions/common/constants.h" #if !defined(OFFICIAL_BUILD) +#include "chrome/browser/chromeos/web_applications/file_manager_web_app_info.h" #include "chrome/browser/chromeos/web_applications/sample_system_web_app_info.h" #include "chrome/browser/chromeos/web_applications/telemetry_extension_web_app_info.h" #endif // !defined(OFFICIAL_BUILD) @@ -194,6 +195,14 @@ base::BindRepeating(&CreateWebAppInfoForTelemetryExtension))); } + if (SystemWebAppManager::IsAppEnabled(SystemAppType::FILE_MANAGER)) { + infos.emplace( + SystemAppType::FILE_MANAGER, + SystemAppInfo("File Manager", GURL("chrome://file-manager"), + base::BindRepeating(&CreateWebAppInfoForFileManager))); + infos.at(SystemAppType::FILE_MANAGER).capture_navigations = true; + } + infos.emplace( SystemAppType::SAMPLE, SystemAppInfo( @@ -228,6 +237,7 @@ ExternalInstallOptions install_options( info.install_url, DisplayMode::kStandalone, ExternalInstallSource::kSystemInstalled); + install_options.only_use_app_info_factory = !!info.app_info_factory; install_options.app_info_factory = info.app_info_factory; install_options.add_to_applications_menu = info.show_in_launcher; install_options.add_to_desktop = false; @@ -326,6 +336,8 @@ case SystemAppType::TELEMETRY: return base::FeatureList::IsEnabled( chromeos::features::kTelemetryExtension); + case SystemAppType::FILE_MANAGER: + return base::FeatureList::IsEnabled(chromeos::features::kFilesSWA); case SystemAppType::SAMPLE: NOTREACHED(); return false; @@ -411,8 +423,8 @@ #endif // defined(OS_CHROMEOS) std::vector<ExternalInstallOptions> install_options_list; - const bool needs_update = NeedsUpdate(); - if (needs_update) { + const bool should_force_install_apps = ShouldForceInstallApps(); + if (should_force_install_apps) { UpdateLastAttemptedInfo(); } if (IsEnabled()) { @@ -421,7 +433,7 @@ // Skipping this will uninstall all System Apps currently installed. for (const auto& app : system_app_infos_) { install_options_list.push_back(CreateInstallOptionsForSystemApp( - app.second, needs_update, + app.second, should_force_install_apps, base::Contains(disabled_system_apps, app.first))); } } @@ -432,7 +444,8 @@ std::move(install_options_list), ExternalInstallSource::kSystemInstalled, base::BindOnce(&SystemWebAppManager::OnAppsSynchronized, - weak_ptr_factory_.GetWeakPtr(), install_start_time)); + weak_ptr_factory_.GetWeakPtr(), + should_force_install_apps, install_start_time)); } #if defined(OS_CHROMEOS) PrefService* const local_state = g_browser_process->local_state(); @@ -651,32 +664,53 @@ return g_browser_process->GetApplicationLocale(); } -void SystemWebAppManager::RecordSystemWebAppInstallMetrics( - const std::map<GURL, InstallResultCode>& install_results, +void SystemWebAppManager::RecordSystemWebAppInstallDuration( const base::TimeDelta& install_duration) const { // Install duration should be non-negative. A low resolution clock could // result in a |install_duration| of 0. DCHECK_GE(install_duration.InMilliseconds(), 0); - // Record the time spent to install system web apps. if (!shutting_down_) { base::UmaHistogramMediumTimes(kInstallDurationHistogramName, install_duration); } +} - // Record aggregate result. - for (const auto& url_and_result : install_results) +void SystemWebAppManager::RecordSystemWebAppInstallResults( + const std::map<GURL, InstallResultCode>& install_results) const { + // Report install result codes. Exclude kSuccessAlreadyInstalled from metrics. + // This result means the installation pipeline is a no-op (which happens every + // time user logs in, and if there hasn't been a version upgrade). This skews + // the install success rate. + std::map<GURL, InstallResultCode> results_to_report; + std::copy_if(install_results.begin(), install_results.end(), + std::inserter(results_to_report, results_to_report.end()), + [](const auto& url_and_result) { + return url_and_result.second != + InstallResultCode::kSuccessAlreadyInstalled; + }); + + for (const auto& url_and_result : results_to_report) { + // Record aggregate result. base::UmaHistogramEnumeration( kInstallResultHistogramName, shutting_down_ ? InstallResultCode::kCancelledOnWebAppProviderShuttingDown : url_and_result.second); + // Record per-profile result. + base::UmaHistogramEnumeration( + install_result_per_profile_histogram_name_, + shutting_down_ + ? InstallResultCode::kCancelledOnWebAppProviderShuttingDown + : url_and_result.second); + } + // Record per-app result. for (const auto& type_and_app_info : system_app_infos_) { const GURL& install_url = type_and_app_info.second.install_url; - const auto url_and_result = install_results.find(install_url); - if (url_and_result != install_results.cend()) { + const auto url_and_result = results_to_report.find(install_url); + if (url_and_result != results_to_report.cend()) { const std::string app_histogram_name = std::string(kInstallResultHistogramName) + ".Apps." + type_and_app_info.second.internal_name; @@ -687,18 +721,10 @@ : url_and_result->second); } } - - // Record per-profile result. - for (const auto& url_and_result : install_results) { - base::UmaHistogramEnumeration( - install_result_per_profile_histogram_name_, - shutting_down_ - ? InstallResultCode::kCancelledOnWebAppProviderShuttingDown - : url_and_result.second); - } } void SystemWebAppManager::OnAppsSynchronized( + bool did_force_install_apps, const base::TimeTicks& install_start_time, std::map<GURL, InstallResultCode> install_results, std::map<GURL, bool> uninstall_results) { @@ -731,7 +757,12 @@ CurrentLocale()); pref_service_->SetInteger(prefs::kSystemWebAppInstallFailureCount, 0); - RecordSystemWebAppInstallMetrics(install_results, install_duration); + // Report install duration only if the install pipeline actually installs + // all the apps (e.g. on version upgrade). + if (did_force_install_apps) + RecordSystemWebAppInstallDuration(install_duration); + + RecordSystemWebAppInstallResults(install_results); // Build the map from installed app id to app type. for (const auto& it : system_app_infos_) { @@ -749,7 +780,7 @@ } } -bool SystemWebAppManager::NeedsUpdate() const { +bool SystemWebAppManager::ShouldForceInstallApps() const { if (base::FeatureList::IsEnabled(features::kAlwaysReinstallSystemWebApps)) return true;
diff --git a/chrome/browser/web_applications/system_web_app_manager.h b/chrome/browser/web_applications/system_web_app_manager.h index ddf6d55..dd6fcf0 100644 --- a/chrome/browser/web_applications/system_web_app_manager.h +++ b/chrome/browser/web_applications/system_web_app_manager.h
@@ -57,9 +57,14 @@ SCANNING, DIAGNOSTICS, #if !defined(OFFICIAL_BUILD) + FILE_MANAGER, TELEMETRY, SAMPLE, #endif // !defined(OFFICIAL_BUILD) + + // When adding a new System App, add a corresponding histogram suffix in + // WebAppSystemAppInternalName (histograms.xml). The suffix name should match + // the App's |internal_name|. This is for reporting per-app install results. }; using OriginTrialsMap = std::map<url::Origin, std::vector<std::string>>; @@ -79,8 +84,9 @@ ~SystemAppInfo(); // A developer-friendly name for, among other things, reporting metrics and - // interacting with tast tests. It should follow PascalCase convention. It - // shouldn't be changed afterwards. + // interacting with tast tests. It should follow PascalCase convention, and + // have a corresponding entry in WebAppSystemAppInternalName histogram + // suffixes. The internal name shouldn't be changed afterwards. std::string internal_name; // The URL that the System App will be installed from. @@ -140,7 +146,7 @@ static constexpr char kInstallResultHistogramName[] = "Webapp.InstallResult.System"; static constexpr char kInstallDurationHistogramName[] = - "Webapp.InstallDuration.System"; + "Webapp.SystemApps.FreshInstallDuration"; // Returns whether the given app type is enabled. static bool IsAppEnabled(SystemAppType type); @@ -250,18 +256,21 @@ bool AppHasFileHandlingOriginTrial(SystemAppType type); - void OnAppsSynchronized(const base::TimeTicks& install_start_time, + void OnAppsSynchronized(bool did_force_install_apps, + const base::TimeTicks& install_start_time, std::map<GURL, InstallResultCode> install_results, std::map<GURL, bool> uninstall_results); - bool NeedsUpdate() const; + bool ShouldForceInstallApps() const; void UpdateLastAttemptedInfo(); // Returns if we have exceeded the number of retry attempts allowed for this // version. bool CheckAndIncrementRetryAttempts(); - void RecordSystemWebAppInstallMetrics( - const std::map<GURL, InstallResultCode>& install_results, - const base::TimeDelta& install_duration) const; + void RecordSystemWebAppInstallResults( + const std::map<GURL, InstallResultCode>& install_results) const; + + void RecordSystemWebAppInstallDuration( + const base::TimeDelta& time_duration) const; Profile* profile_;
diff --git a/chrome/browser/web_applications/system_web_app_manager_unittest.cc b/chrome/browser/web_applications/system_web_app_manager_unittest.cc index c5a3ca2..30ebbae 100644 --- a/chrome/browser/web_applications/system_web_app_manager_unittest.cc +++ b/chrome/browser/web_applications/system_web_app_manager_unittest.cc
@@ -45,8 +45,8 @@ namespace web_app { namespace { -const char kSettingsAppNameForLogging[] = "OSSettings"; -const char kDiscoverAppNameForLogging[] = "Discover"; +const char kSettingsAppInternalName[] = "OSSettings"; +const char kDiscoverAppInternalName[] = "Discover"; GURL AppUrl1() { return GURL(content::GetWebUIURL("system-app1")); @@ -392,7 +392,7 @@ base::flat_map<SystemAppType, SystemAppInfo> system_apps; system_apps.emplace(SystemAppType::SETTINGS, - SystemAppInfo(kSettingsAppNameForLogging, AppUrl1())); + SystemAppInfo(kSettingsAppInternalName, AppUrl1())); system_web_app_manager().SetSystemAppsForTesting(std::move(system_apps)); StartAndWaitForAppsToSynchronize(); @@ -415,9 +415,9 @@ base::flat_map<SystemAppType, SystemAppInfo> system_apps; system_apps.emplace(SystemAppType::SETTINGS, - SystemAppInfo(kSettingsAppNameForLogging, AppUrl1())); + SystemAppInfo(kSettingsAppInternalName, AppUrl1())); system_apps.emplace(SystemAppType::DISCOVER, - SystemAppInfo(kDiscoverAppNameForLogging, AppUrl2())); + SystemAppInfo(kDiscoverAppInternalName, AppUrl2())); system_web_app_manager().SetSystemAppsForTesting(std::move(system_apps)); StartAndWaitForAppsToSynchronize(); @@ -436,10 +436,10 @@ base::flat_map<SystemAppType, SystemAppInfo> system_apps; system_apps.emplace( SystemAppType::SETTINGS, - SystemAppInfo(kSettingsAppNameForLogging, AppUrl1(), + SystemAppInfo(kSettingsAppInternalName, AppUrl1(), base::BindRepeating(&GetApp1WebApplicationInfo))); system_apps.emplace(SystemAppType::DISCOVER, - SystemAppInfo(kDiscoverAppNameForLogging, AppUrl2())); + SystemAppInfo(kDiscoverAppInternalName, AppUrl2())); system_web_app_manager().SetSystemAppsForTesting(std::move(system_apps)); StartAndWaitForAppsToSynchronize(); @@ -463,7 +463,7 @@ base::flat_map<SystemAppType, SystemAppInfo> system_apps; system_apps.emplace(SystemAppType::SETTINGS, - SystemAppInfo(kSettingsAppNameForLogging, AppUrl1())); + SystemAppInfo(kSettingsAppInternalName, AppUrl1())); system_web_app_manager().SetSystemAppsForTesting(std::move(system_apps)); StartAndWaitForAppsToSynchronize(); @@ -490,7 +490,7 @@ PrepareLoadUrlResults({AppUrl1()}); base::flat_map<SystemAppType, SystemAppInfo> system_apps; system_apps.emplace(SystemAppType::SETTINGS, - SystemAppInfo(kSettingsAppNameForLogging, AppUrl1())); + SystemAppInfo(kSettingsAppInternalName, AppUrl1())); system_web_app_manager().SetSystemAppsForTesting(system_apps); system_web_app_manager().set_current_version(base::Version("1.0.0.0")); @@ -504,7 +504,7 @@ {{AppUrl1(), AppIconUrl1()}, {AppUrl2(), AppIconUrl2()}}); PrepareLoadUrlResults({AppUrl1(), AppUrl2()}); system_apps.emplace(SystemAppType::DISCOVER, - SystemAppInfo(kDiscoverAppNameForLogging, AppUrl2())); + SystemAppInfo(kDiscoverAppInternalName, AppUrl2())); system_web_app_manager().SetSystemAppsForTesting(system_apps); // This one returns because on_apps_synchronized runs immediately. @@ -544,7 +544,7 @@ PrepareLoadUrlResults({AppUrl1()}); base::flat_map<SystemAppType, SystemAppInfo> system_apps; system_apps.emplace(SystemAppType::SETTINGS, - SystemAppInfo(kSettingsAppNameForLogging, AppUrl1())); + SystemAppInfo(kSettingsAppInternalName, AppUrl1())); system_web_app_manager().SetSystemAppsForTesting(system_apps); system_web_app_manager().set_current_version(base::Version("1.0.0.0")); @@ -560,7 +560,7 @@ PrepareSystemAppDataToRetrieve({{AppUrl2(), AppIconUrl2()}}); PrepareLoadUrlResults({AppUrl2()}); system_apps.emplace(SystemAppType::DISCOVER, - SystemAppInfo(kDiscoverAppNameForLogging, AppUrl2())); + SystemAppInfo(kDiscoverAppInternalName, AppUrl2())); system_web_app_manager().SetSystemAppsForTesting(system_apps); StartAndWaitForAppsToSynchronize(); @@ -637,7 +637,7 @@ PrepareLoadUrlResults({AppUrl1()}); base::flat_map<SystemAppType, SystemAppInfo> system_apps; system_apps.emplace(SystemAppType::SETTINGS, - SystemAppInfo(kSettingsAppNameForLogging, AppUrl1())); + SystemAppInfo(kSettingsAppInternalName, AppUrl1())); system_web_app_manager().SetSystemAppsForTesting(system_apps); // First execution. @@ -668,16 +668,18 @@ base::HistogramTester histograms; const std::string settings_app_install_result_histogram = std::string(SystemWebAppManager::kInstallResultHistogramName) + ".Apps." + - kSettingsAppNameForLogging; + kSettingsAppInternalName; const std::string discover_app_install_result_histogram = std::string(SystemWebAppManager::kInstallResultHistogramName) + ".Apps." + - kDiscoverAppNameForLogging; + kDiscoverAppInternalName; // Profile category for Chrome OS testing environment is "Other". const std::string profile_install_result_histogram = std::string(SystemWebAppManager::kInstallResultHistogramName) + ".Profiles.Other"; InitEmptyRegistrar(); + system_web_app_manager().SetUpdatePolicy( + SystemWebAppManager::UpdatePolicy::kAlwaysUpdate); { PrepareSystemAppDataToRetrieve({{AppUrl1(), AppIconUrl1()}}); @@ -685,7 +687,7 @@ base::flat_map<SystemAppType, SystemAppInfo> system_apps; system_apps.emplace(SystemAppType::SETTINGS, - SystemAppInfo(kSettingsAppNameForLogging, AppUrl1())); + SystemAppInfo(kSettingsAppInternalName, AppUrl1())); system_web_app_manager().SetSystemAppsForTesting(system_apps); histograms.ExpectTotalCount( @@ -712,15 +714,17 @@ SystemWebAppManager::kInstallDurationHistogramName, 1); } - pending_app_manager().SetPreInstallCallback(base::BindLambdaForTesting( - [](const ExternalInstallOptions&) { return false; })); + pending_app_manager().SetHandleInstallRequestCallback( + base::BindLambdaForTesting([](const ExternalInstallOptions&) { + return InstallResultCode::kWebAppDisabled; + })); { base::flat_map<SystemAppType, SystemAppInfo> system_apps; system_apps.emplace(SystemAppType::SETTINGS, - SystemAppInfo(kSettingsAppNameForLogging, AppUrl1())); + SystemAppInfo(kSettingsAppInternalName, AppUrl1())); system_apps.emplace(SystemAppType::DISCOVER, - SystemAppInfo(kDiscoverAppNameForLogging, AppUrl2())); + SystemAppInfo(kDiscoverAppInternalName, AppUrl2())); system_web_app_manager().SetSystemAppsForTesting(system_apps); StartAndWaitForAppsToSynchronize(); @@ -736,10 +740,11 @@ histograms.ExpectBucketCount(discover_app_install_result_histogram, InstallResultCode::kWebAppDisabled, 1); } + { base::flat_map<SystemAppType, SystemAppInfo> system_apps; system_apps.emplace(SystemAppType::SETTINGS, - SystemAppInfo(kSettingsAppNameForLogging, AppUrl1())); + SystemAppInfo(kSettingsAppInternalName, AppUrl1())); system_web_app_manager().SetSystemAppsForTesting(system_apps); histograms.ExpectTotalCount( @@ -777,6 +782,91 @@ } } +TEST_F(SystemWebAppManagerTest, + InstallResultHistogram_ExcludeAlreadyInstalled) { + base::HistogramTester histograms; + const std::string settings_app_install_result_histogram = + std::string(SystemWebAppManager::kInstallResultHistogramName) + ".Apps." + + kSettingsAppInternalName; + const std::string discover_app_install_result_histogram = + std::string(SystemWebAppManager::kInstallResultHistogramName) + ".Apps." + + kDiscoverAppInternalName; + // Profile category for Chrome OS testing environment is "Other". + const std::string profile_install_result_histogram = + std::string(SystemWebAppManager::kInstallResultHistogramName) + + ".Profiles.Other"; + + InitEmptyRegistrar(); + base::flat_map<SystemAppType, SystemAppInfo> system_apps; + system_apps.emplace(SystemAppType::SETTINGS, + SystemAppInfo(kSettingsAppInternalName, AppUrl1())); + system_apps.emplace(SystemAppType::DISCOVER, + SystemAppInfo(kDiscoverAppInternalName, AppUrl2())); + system_web_app_manager().SetSystemAppsForTesting(system_apps); + + pending_app_manager().SetHandleInstallRequestCallback( + base::BindLambdaForTesting([](const ExternalInstallOptions& opts) { + if (opts.install_url == AppUrl1()) + return InstallResultCode::kSuccessAlreadyInstalled; + return InstallResultCode::kSuccessNewInstall; + })); + + StartAndWaitForAppsToSynchronize(); + + // Record results that aren't kSuccessAlreadyInstalled. + histograms.ExpectTotalCount(SystemWebAppManager::kInstallResultHistogramName, + 1); + histograms.ExpectTotalCount(settings_app_install_result_histogram, 0); + histograms.ExpectTotalCount(discover_app_install_result_histogram, 1); + histograms.ExpectTotalCount(profile_install_result_histogram, 1); +} + +TEST_F(SystemWebAppManagerTest, + InstallDurationHistogram_ExcludeNonForceInstall) { + base::HistogramTester histograms; + + InitEmptyRegistrar(); + base::flat_map<SystemAppType, SystemAppInfo> system_apps; + system_apps.emplace(SystemAppType::SETTINGS, + SystemAppInfo(kSettingsAppInternalName, AppUrl1())); + system_apps.emplace(SystemAppType::DISCOVER, + SystemAppInfo(kDiscoverAppInternalName, AppUrl2())); + system_web_app_manager().SetSystemAppsForTesting(system_apps); + system_web_app_manager().SetUpdatePolicy( + SystemWebAppManager::UpdatePolicy::kOnVersionChange); + + { + pending_app_manager().SetHandleInstallRequestCallback( + base::BindLambdaForTesting([](const ExternalInstallOptions& opts) { + if (opts.install_url == AppUrl1()) + return InstallResultCode::kWriteDataFailed; + return InstallResultCode::kSuccessNewInstall; + })); + + StartAndWaitForAppsToSynchronize(); + + // The install duration histogram should be recorded, because the first + // install happens on a clean profile. + histograms.ExpectTotalCount( + SystemWebAppManager::kInstallDurationHistogramName, 1); + } + + { + pending_app_manager().SetHandleInstallRequestCallback( + base::BindLambdaForTesting([](const ExternalInstallOptions& opts) { + if (opts.install_url == AppUrl1()) + return InstallResultCode::kSuccessNewInstall; + return InstallResultCode::kSuccessAlreadyInstalled; + })); + StartAndWaitForAppsToSynchronize(); + + // Don't record install duration histogram, because this time we don't ask + // to force install all apps. + histograms.ExpectTotalCount( + SystemWebAppManager::kInstallDurationHistogramName, 1); + } +} + TEST_F(SystemWebAppManagerTest, AbandonFailedInstalls) { const std::vector<ExternalInstallOptions>& install_requests = pending_app_manager().install_requests(); @@ -790,7 +880,7 @@ PrepareLoadUrlResults({AppUrl1()}); base::flat_map<SystemAppType, SystemAppInfo> system_apps; system_apps.emplace(SystemAppType::SETTINGS, - SystemAppInfo(kSettingsAppNameForLogging, AppUrl1())); + SystemAppInfo(kSettingsAppInternalName, AppUrl1())); system_web_app_manager().SetSystemAppsForTesting(system_apps); system_web_app_manager().set_current_version(base::Version("1.0.0.0")); @@ -863,7 +953,7 @@ PrepareLoadUrlResults({AppUrl1()}); base::flat_map<SystemAppType, SystemAppInfo> system_apps; system_apps.emplace(SystemAppType::SETTINGS, - SystemAppInfo(kSettingsAppNameForLogging, AppUrl1())); + SystemAppInfo(kSettingsAppInternalName, AppUrl1())); system_web_app_manager().SetSystemAppsForTesting(system_apps); system_web_app_manager().set_current_version(base::Version("1.0.0.0")); @@ -934,7 +1024,7 @@ // Set up and install a baseline base::flat_map<SystemAppType, SystemAppInfo> system_apps; system_apps.emplace(SystemAppType::SETTINGS, - SystemAppInfo(kSettingsAppNameForLogging, AppUrl1())); + SystemAppInfo(kSettingsAppInternalName, AppUrl1())); system_web_app_manager().SetSystemAppsForTesting(system_apps); system_web_app_manager().set_current_version(base::Version("1.0.0.0")); @@ -1009,7 +1099,7 @@ // Register a test system app. base::flat_map<SystemAppType, SystemAppInfo> system_apps; system_apps.emplace(SystemAppType::SETTINGS, - SystemAppInfo(kSettingsAppNameForLogging, AppUrl1())); + SystemAppInfo(kSettingsAppInternalName, AppUrl1())); system_web_app_manager().SetSystemAppsForTesting(system_apps); // Install the App normally.
diff --git a/chrome/browser/web_applications/test/test_pending_app_manager_impl.cc b/chrome/browser/web_applications/test/test_pending_app_manager_impl.cc index 885e46f..d7c607d 100644 --- a/chrome/browser/web_applications/test/test_pending_app_manager_impl.cc +++ b/chrome/browser/web_applications/test/test_pending_app_manager_impl.cc
@@ -15,11 +15,11 @@ void TestPendingAppManagerImpl::Install(ExternalInstallOptions install_options, OnceInstallCallback callback) { - if (pre_install_callback_ && !pre_install_callback_.Run(install_options)) { - base::ThreadTaskRunnerHandle::Get()->PostTask( + if (handle_install_request_callback_) { + base::ThreadTaskRunnerHandle::Get()->PostTaskAndReplyWithResult( FROM_HERE, - base::BindOnce(std::move(callback), install_options.install_url, - InstallResultCode::kWebAppDisabled)); + base::BindOnce(handle_install_request_callback_, install_options), + base::BindOnce(std::move(callback), install_options.install_url)); return; } @@ -30,7 +30,7 @@ void TestPendingAppManagerImpl::InstallApps( std::vector<ExternalInstallOptions> install_options_list, const RepeatingInstallCallback& callback) { - if (pre_install_callback_) { + if (handle_install_request_callback_) { for (auto& install_options : install_options_list) Install(std::move(install_options), callback); return; @@ -54,9 +54,9 @@ std::move(callback)); } -void TestPendingAppManagerImpl::SetPreInstallCallback( - PreInstallCallback callback) { - pre_install_callback_ = std::move(callback); +void TestPendingAppManagerImpl::SetHandleInstallRequestCallback( + HandleInstallRequestCallback callback) { + handle_install_request_callback_ = std::move(callback); } } // namespace web_app
diff --git a/chrome/browser/web_applications/test/test_pending_app_manager_impl.h b/chrome/browser/web_applications/test/test_pending_app_manager_impl.h index 9cef237..209ac71 100644 --- a/chrome/browser/web_applications/test/test_pending_app_manager_impl.h +++ b/chrome/browser/web_applications/test/test_pending_app_manager_impl.h
@@ -37,16 +37,19 @@ drop_requests_for_testing_ = drop_requests_for_testing; } - using PreInstallCallback = - base::RepeatingCallback<bool(const ExternalInstallOptions&)>; + using HandleInstallRequestCallback = + base::RepeatingCallback<InstallResultCode(const ExternalInstallOptions&)>; - void SetPreInstallCallback(PreInstallCallback callback); + // Set a callback to handle install requests. If set, this callback will be + // used in place of the real installation process. The callback takes a const + // ExternalInstallOptions& and should return a InstallResultCode. + void SetHandleInstallRequestCallback(HandleInstallRequestCallback callback); private: std::vector<ExternalInstallOptions> install_requests_; std::vector<GURL> uninstall_requests_; bool drop_requests_for_testing_ = false; - PreInstallCallback pre_install_callback_; + HandleInstallRequestCallback handle_install_request_callback_; }; } // namespace web_app
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index f184826..73c52ed 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-master-1600279142-24a6b7614c1fc4b5002795ef657956153ec745b6.profdata +chrome-linux-master-1600408803-cf78b7068fa61ec1aacbec5ee17841a8e2bbd57a.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index edf6f7a..190212a 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-master-1600365511-0307b18a9fe145dd28de0ead73e8fb46212de02b.profdata +chrome-mac-master-1600387025-1a927353a66c94deef84219e25e017cd673d3d66.profdata
diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni index 9ee8641a..d8f47a33dac 100644 --- a/chrome/chrome_paks.gni +++ b/chrome/chrome_paks.gni
@@ -210,10 +210,12 @@ if (!is_official_build) { sources += [ + "$root_gen_dir/chromeos/chromeos_file_manager_resources.pak", "$root_gen_dir/chromeos/chromeos_sample_system_web_app_resources.pak", "$root_gen_dir/chromeos/chromeos_telemetry_extension_resources.pak", ] deps += [ + "//chromeos/resources:file_manager_resources", "//chromeos/resources:sample_system_web_app_resources", "//chromeos/resources:telemetry_extension_resources", ]
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index bb53d2d..b7736ace 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc
@@ -231,7 +231,7 @@ // cleaning up the fallout of https://crbug.com/1125020. const base::Feature kDesktopPWAsMigrationUserDisplayModeCleanUp{ "DesktopPWAsMigrationUserDisplayModeCleanUp", - base::FEATURE_DISABLED_BY_DEFAULT}; + base::FEATURE_ENABLED_BY_DEFAULT}; // Enables or disables Desktop PWAs to be auto-started on OS login. const base::Feature kDesktopPWAsRunOnOsLogin{"DesktopPWAsRunOnOsLogin",
diff --git a/chrome/common/extensions/api/file_manager_private.idl b/chrome/common/extensions/api/file_manager_private.idl index be525ee..04e58a6 100644 --- a/chrome/common/extensions/api/file_manager_private.idl +++ b/chrome/common/extensions/api/file_manager_private.idl
@@ -251,6 +251,12 @@ unshare }; +enum ProviderSource { + file, + device, + network +}; + // A file task represents an action that the file manager can perform over the // currently selected files. See // chrome/browser/chromeos/extensions/file_manager/file_tasks.h for details @@ -679,7 +685,7 @@ boolean multipleMounts; // Source of file systems' data. - manifestTypes.FileSystemProviderSource source; + ProviderSource source; }; // Information about a Linux package in response to GetLinuxPackageInfo.
diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc index 1e492055..e393222 100644 --- a/chrome/common/webui_url_constants.cc +++ b/chrome/common/webui_url_constants.cc
@@ -243,7 +243,6 @@ const char kChromeUICryptohomeHost[] = "cryptohome"; const char kChromeUIDeviceEmulatorHost[] = "device-emulator"; const char kChromeUIDiscoverURL[] = "chrome://oobe/discover"; -const char kChromeUIFileManagerHost[] = "file-manager"; const char kChromeUIFirstRunHost[] = "first-run"; const char kChromeUIFirstRunURL[] = "chrome://first-run/"; const char kChromeUIIntenetConfigDialogURL[] =
diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h index 2fbc40d..668ce5a 100644 --- a/chrome/common/webui_url_constants.h +++ b/chrome/common/webui_url_constants.h
@@ -237,7 +237,6 @@ extern const char kChromeUICryptohomeHost[]; extern const char kChromeUIDeviceEmulatorHost[]; extern const char kChromeUIDiscoverURL[]; -extern const char kChromeUIFileManagerHost[]; extern const char kChromeUIFirstRunHost[]; extern const char kChromeUIFirstRunURL[]; extern const char kChromeUIIntenetConfigDialogURL[];
diff --git a/chrome/services/cups_proxy/cups_proxy_service_delegate.h b/chrome/services/cups_proxy/cups_proxy_service_delegate.h index fc84501..f435a6d4 100644 --- a/chrome/services/cups_proxy/cups_proxy_service_delegate.h +++ b/chrome/services/cups_proxy/cups_proxy_service_delegate.h
@@ -38,6 +38,7 @@ chromeos::PrinterClass printer_class) = 0; virtual base::Optional<chromeos::Printer> GetPrinter( const std::string& id) = 0; + virtual std::vector<std::string> GetRecentlyUsedPrinters() = 0; virtual bool IsPrinterInstalled(const chromeos::Printer& printer) = 0; virtual void PrinterInstalled(const chromeos::Printer& printer) = 0; virtual scoped_refptr<base::SingleThreadTaskRunner> GetIOTaskRunner() = 0;
diff --git a/chrome/services/cups_proxy/fake_cups_proxy_service_delegate.cc b/chrome/services/cups_proxy/fake_cups_proxy_service_delegate.cc index adf6dae4..9ada828 100644 --- a/chrome/services/cups_proxy/fake_cups_proxy_service_delegate.cc +++ b/chrome/services/cups_proxy/fake_cups_proxy_service_delegate.cc
@@ -20,6 +20,11 @@ return base::nullopt; } +std::vector<std::string> +FakeCupsProxyServiceDelegate::GetRecentlyUsedPrinters() { + return {}; +} + bool FakeCupsProxyServiceDelegate::IsPrinterInstalled( const chromeos::Printer& printer) { return false;
diff --git a/chrome/services/cups_proxy/fake_cups_proxy_service_delegate.h b/chrome/services/cups_proxy/fake_cups_proxy_service_delegate.h index dfdd3c11..4ba6cdc 100644 --- a/chrome/services/cups_proxy/fake_cups_proxy_service_delegate.h +++ b/chrome/services/cups_proxy/fake_cups_proxy_service_delegate.h
@@ -25,6 +25,7 @@ std::vector<chromeos::Printer> GetPrinters( chromeos::PrinterClass printer_class) override; base::Optional<chromeos::Printer> GetPrinter(const std::string& id) override; + std::vector<std::string> GetRecentlyUsedPrinters() override; bool IsPrinterInstalled(const chromeos::Printer& printer) override; void PrinterInstalled(const chromeos::Printer& printer) override; scoped_refptr<base::SingleThreadTaskRunner> GetIOTaskRunner() override;
diff --git a/chrome/services/cups_proxy/proxy_manager.cc b/chrome/services/cups_proxy/proxy_manager.cc index 2e742d19..8b54a05 100644 --- a/chrome/services/cups_proxy/proxy_manager.cc +++ b/chrome/services/cups_proxy/proxy_manager.cc
@@ -243,7 +243,8 @@ void ProxyManagerImpl::SpoofGetPrinters() { std::vector<chromeos::Printer> printers = FilterPrintersForPluginVm( delegate_->GetPrinters(chromeos::PrinterClass::kSaved), - delegate_->GetPrinters(chromeos::PrinterClass::kEnterprise)); + delegate_->GetPrinters(chromeos::PrinterClass::kEnterprise), + delegate_->GetRecentlyUsedPrinters()); base::Optional<IppResponse> response = BuildGetDestsResponse(in_flight_->request, printers); if (!response.has_value()) {
diff --git a/chrome/services/cups_proxy/public/cpp/cups_util.cc b/chrome/services/cups_proxy/public/cpp/cups_util.cc index f851a43e..cc6b8d8 100644 --- a/chrome/services/cups_proxy/public/cpp/cups_util.cc +++ b/chrome/services/cups_proxy/public/cpp/cups_util.cc
@@ -4,6 +4,7 @@ #include "chrome/services/cups_proxy/public/cpp/cups_util.h" +#include <map> #include <queue> #include <string> #include <utility> @@ -15,47 +16,6 @@ #include "printing/backend/cups_jobs.h" namespace cups_proxy { -namespace { - -// This comparator defines a priority_queue of printers in descending order by -// display name. -class DisplayNameComparator { - public: - bool operator()(const chromeos::Printer& a, const chromeos::Printer& b) { - return a.display_name() < b.display_name(); - } -}; - -// Return the top |k| printers from |printers| sorted alphabetically by display -// name. -std::vector<chromeos::Printer> GetFirstKPrinters( - const std::vector<chromeos::Printer>& printers, - size_t k) { - auto pq = - std::priority_queue<chromeos::Printer, std::vector<chromeos::Printer>, - DisplayNameComparator>(); - - // Filter through |printers|, only keeping the first |k| printers in the pq. - for (const chromeos::Printer& printer : printers) { - pq.push(printer); - if (pq.size() > k) { - pq.pop(); - } - } - - // We want the returned list in ascending order, so we assign to ret in - // reverse order. - std::vector<chromeos::Printer> ret; - ret.resize(pq.size()); - for (int i = pq.size() - 1; i >= 0; --i) { - ret[i] = pq.top(); - pq.pop(); - } - - return ret; -} - -} // namespace base::Optional<IppResponse> BuildGetDestsResponse( const IppRequest& request, @@ -163,20 +123,27 @@ std::vector<chromeos::Printer> FilterPrintersForPluginVm( const std::vector<chromeos::Printer>& saved, - const std::vector<chromeos::Printer>& enterprise) { - if (saved.size() >= kPluginVmPrinterLimit) { - return std::vector<chromeos::Printer>( - saved.begin(), saved.begin() + kPluginVmPrinterLimit); + const std::vector<chromeos::Printer>& enterprise, + const std::vector<std::string>& recent) { + std::vector<std::string> ids(recent); + std::map<std::string, const chromeos::Printer*> printers; + for (const auto* category : {&saved, &enterprise}) { + for (const auto& printer : *category) { + ids.push_back(printer.id()); + printers[printer.id()] = &printer; + } } - - // Filter down enterprise printers to backfill. - size_t num_enterprise_printers = kPluginVmPrinterLimit - saved.size(); - auto filtered_enterprise = - GetFirstKPrinters(enterprise, num_enterprise_printers); - - // Concatenate saved printers and filtered_enterprise to return. - std::vector<chromeos::Printer> ret = saved; - ret.insert(ret.end(), filtered_enterprise.begin(), filtered_enterprise.end()); + std::vector<chromeos::Printer> ret; + for (const std::string& id : ids) { + auto it = printers.find(id); + if (it != printers.end()) { + ret.push_back(*it->second); + printers.erase(it); + if (ret.size() == kPluginVmPrinterLimit) { + break; + } + } + } return ret; }
diff --git a/chrome/services/cups_proxy/public/cpp/cups_util.h b/chrome/services/cups_proxy/public/cpp/cups_util.h index 9de6b46..fb93c095 100644 --- a/chrome/services/cups_proxy/public/cpp/cups_util.h +++ b/chrome/services/cups_proxy/public/cpp/cups_util.h
@@ -54,12 +54,13 @@ base::Optional<std::string> ParseEndpointForPrinterId( base::StringPiece endpoint); -// Returned list of printers contains first |saved| printers, backfilled with -// |enterprise| printers listed alphabetically up until the hard printer limit -// of kPluginVmPrinterLimit. +// Return list of printers containing first recently used printers, +// then |saved| printers and |enterprise| printers up until the hard printer +// limit of kPluginVmPrinterLimit. std::vector<chromeos::Printer> FilterPrintersForPluginVm( const std::vector<chromeos::Printer>& saved, - const std::vector<chromeos::Printer>& enterprise); + const std::vector<chromeos::Printer>& enterprise, + const std::vector<std::string>& recent); } // namespace cups_proxy
diff --git a/chrome/services/cups_proxy/public/cpp/cups_util_unittest.cc b/chrome/services/cups_proxy/public/cpp/cups_util_unittest.cc index 137a634b..4fd21e6 100644 --- a/chrome/services/cups_proxy/public/cpp/cups_util_unittest.cc +++ b/chrome/services/cups_proxy/public/cpp/cups_util_unittest.cc
@@ -6,11 +6,10 @@ #include <cups/ipp.h> +#include <algorithm> #include <string> #include <vector> -#include "base/macros.h" -#include "base/rand_util.h" #include "base/strings/strcat.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_piece.h" @@ -51,7 +50,7 @@ } // Generates |num_printers| printers with unique display_names starting with -// |prefix|. Returned printers are in alphabetically ascending order. +// |prefix|. std::vector<Printer> GenPrinters(int num_printers, base::StringPiece prefix) { std::vector<Printer> ret; for (int i = 0; i < num_printers; i++) { @@ -59,12 +58,6 @@ printer.set_display_name(base::StrCat({prefix, base::NumberToString(i)})); ret.push_back(printer); } - - // Alphabetically ascending order by display name. - std::sort(ret.begin(), ret.end(), [](const Printer& a, const Printer& b) { - return a.display_name() < b.display_name(); - }); - return ret; } @@ -127,35 +120,64 @@ TEST(FilterPrintersForPluginVmTest, EnoughSavedPrinters) { auto saved = GetSavedPrinters(kPluginVmPrinterLimit); auto enterprise = GetEnterprisePrinters(10); - auto ret = FilterPrintersForPluginVm(saved, enterprise); - EXPECT_THAT(saved, Pointwise(DisplayNameEq(), ret)); + auto ret = FilterPrintersForPluginVm(saved, enterprise, {}); + EXPECT_THAT(ret, Pointwise(DisplayNameEq(), saved)); } -// Backfilled enterprise printers should be in alphabetical order, by -// display_name. -TEST(FilterPrintersForPluginVmTest, OrderedEnterprisePrinters) { - auto enterprise = GetEnterprisePrinters(50); +// If there are less than kPluginVmPrinterLimit printers, serve all of them. +TEST(FilterPrintersForPluginVmTest, VeryFewSavedPrinters) { + auto saved = GetSavedPrinters(4); + auto enterprise = GetEnterprisePrinters(1); + std::vector<std::string> recent = {saved[2].id(), saved[1].id(), + saved[3].id()}; + std::vector<Printer> expected = {saved[2], saved[1], saved[3], saved[0], + enterprise[0]}; + auto ret = FilterPrintersForPluginVm(saved, enterprise, recent); + EXPECT_THAT(ret, Pointwise(DisplayNameEq(), expected)); +} + +// Make sure stale recent printers (printers not found in either the saved or +// enterprise list) are ignored. +TEST(FilterPrintersForPluginVmTest, StaleSavedPrinters) { + auto stale = GetSavedPrinters(3); + auto enterprise = GetEnterprisePrinters(2); + std::vector<std::string> recent = {stale[0].id(), stale[1].id(), + enterprise[1].id(), stale[2].id()}; + std::vector<Printer> expected = {enterprise[1], enterprise[0]}; + auto ret = FilterPrintersForPluginVm({}, enterprise, recent); + EXPECT_THAT(ret, Pointwise(DisplayNameEq(), expected)); +} + +// Serve printers in the following order: recent printers followed by saved +// printers followed by enterprise printers, up to the limit. +TEST(FilterPrintersForPluginVmTest, EnterprisePrinters) { auto saved = GetSavedPrinters(10); + auto enterprise = GetEnterprisePrinters(50); + std::vector<std::string> recent = {enterprise[1].id(), saved[1].id()}; - // Filtered list should be saved printers + top enterprise printers up to the - // limit. - auto expected = saved; - expected.insert(expected.end(), enterprise.begin(), - enterprise.begin() + (kPluginVmPrinterLimit - saved.size())); + std::vector<Printer> expected = {enterprise[1], saved[1], saved[0]}; + expected.insert(expected.end(), saved.begin() + 2, saved.end()); + expected.push_back(enterprise[0]); + expected.insert(expected.end(), enterprise.begin() + 2, enterprise.end()); + if (expected.size() > kPluginVmPrinterLimit) + expected.resize(kPluginVmPrinterLimit); - // We pre-shuffle the enterprise printers to test the ordering constraints. - base::RandomShuffle(enterprise.begin(), enterprise.end()); - auto ret = FilterPrintersForPluginVm(saved, enterprise); + auto ret = FilterPrintersForPluginVm(saved, enterprise, recent); EXPECT_THAT(ret, Pointwise(DisplayNameEq(), expected)); // Test self-check. - EXPECT_EQ(ret.front().display_name(), "SavedPrinter0"); - EXPECT_EQ(ret.back().display_name(), "EnterprisePrinter35"); + EXPECT_EQ(ret.front().display_name(), "EnterprisePrinter1"); + EXPECT_EQ(ret[1].display_name(), "SavedPrinter1"); + EXPECT_EQ(ret[2].display_name(), "SavedPrinter0"); + EXPECT_EQ(ret[3].display_name(), "SavedPrinter2"); + EXPECT_EQ(ret.back().display_name(), "EnterprisePrinter29"); - size_t last_saved_printer_idx = 9; + size_t last_saved_printer_idx = 10; EXPECT_EQ(ret[last_saved_printer_idx].display_name(), "SavedPrinter9"); EXPECT_EQ(ret[last_saved_printer_idx + 1].display_name(), "EnterprisePrinter0"); + EXPECT_EQ(ret[last_saved_printer_idx + 2].display_name(), + "EnterprisePrinter2"); } } // namespace
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 9331ca19..1ef248e 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -2131,6 +2131,7 @@ "../browser/ui/views/importer/import_lock_dialog_view_browsertest.cc", "../browser/ui/views/in_product_help/feature_promo_dialog_browsertest.cc", "../browser/ui/views/in_product_help/global_media_controls_promo_controller_dialog_browsertest.cc", + "../browser/ui/views/in_product_help/live_caption_promo_controller_browsertest.cc", "../browser/ui/views/in_product_help/reopen_tab_promo_controller_dialog_browsertest.cc", "../browser/ui/views/location_bar/content_setting_bubble_dialog_browsertest.cc", "../browser/ui/views/location_bar/custom_tab_bar_view_browsertest.cc", @@ -4426,6 +4427,7 @@ "../browser/ui/hid/hid_chooser_controller_unittest.cc", "../browser/ui/in_product_help/active_tab_tracker_unittest.cc", "../browser/ui/in_product_help/global_media_controls_in_product_help_unittest.cc", + "../browser/ui/in_product_help/live_caption_in_product_help_unittest.cc", "../browser/ui/in_product_help/reopen_tab_in_product_help_trigger_unittest.cc", "../browser/ui/in_product_help/reopen_tab_in_product_help_unittest.cc", "../browser/ui/manifest_web_app_browser_controller_unittest.cc",
diff --git a/chrome/test/data/extensions/api_test/automation/tests/tabs/detected_language.js b/chrome/test/data/extensions/api_test/automation/tests/tabs/detected_language.js index e092054..a79788d 100644 --- a/chrome/test/data/extensions/api_test/automation/tests/tabs/detected_language.js +++ b/chrome/test/data/extensions/api_test/automation/tests/tabs/detected_language.js
@@ -21,14 +21,6 @@ chrome.test.succeed(); }, - function detectedLanguageForInvalidAttribute() { - var item = rootNode.children[2].children[0]; - var langAnnotation = - item.languageAnnotationForStringAttribute('invalid attribute'); - assertEq(0, langAnnotation.length); - chrome.test.succeed(); - }, - function detectedLanguageCharacter() { var item = rootNode.children[2].children[0]; var langAnnotation = item.languageAnnotationForStringAttribute('name');
diff --git a/chrome/test/data/webui/chromeos/diagnostics/diagnostics_test.js b/chrome/test/data/webui/chromeos/diagnostics/diagnostics_test.js index 17a87b1..1d13aa7 100644 --- a/chrome/test/data/webui/chromeos/diagnostics/diagnostics_test.js +++ b/chrome/test/data/webui/chromeos/diagnostics/diagnostics_test.js
@@ -6,6 +6,9 @@ import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js'; import 'chrome://diagnostics/diagnostics_app.js'; +import {SystemDataProviderInterface} from 'chrome://diagnostics/diagnostics_types.js'; +import {getSystemDataProvider, setSystemDataProviderForTesting} from 'chrome://diagnostics/mojo_interface_provider.js'; + suite('DiagnosticsAppTest', () => { /** @type {?DiagnosticsApp} */ let page = null; @@ -26,4 +29,14 @@ // capabilities to test. assertEquals('Diagnostics', page.$$('#header').textContent); }); -}); \ No newline at end of file +}); + +suite('FakeMojoProviderTest', () => { + test('SettingGettingTestProvider', () => { + // TODO(zentaro): Replace with fake when built. + let fake_provider = + /** @type {SystemDataProviderInterface} */ (new Object()); + setSystemDataProviderForTesting(fake_provider); + assertEquals(fake_provider, getSystemDataProvider()); + }); +});
diff --git a/chrome/test/data/webui/print_preview/BUILD.gn b/chrome/test/data/webui/print_preview/BUILD.gn index fff94149..82e928e 100644 --- a/chrome/test/data/webui/print_preview/BUILD.gn +++ b/chrome/test/data/webui/print_preview/BUILD.gn
@@ -72,6 +72,7 @@ if (is_chromeos) { deps += [ ":destination_dropdown_cros_test", + ":destination_item_test_cros", ":destination_search_test_chromeos", ":destination_select_test_cros", ] @@ -279,6 +280,16 @@ ] externs_list = [ "$externs_path/mocha-2.5.js" ] } + + js_library("destination_item_test_cros") { + deps = [ + ":print_preview_test_utils", + "..:chai_assert", + "//chrome/browser/resources/print_preview:print_preview", + "//ui/webui/resources/js:assert.m", + ] + externs_list = [ "$externs_path/mocha-2.5.js" ] + } } else { js_library("destination_select_test") { deps = [
diff --git a/chrome/test/data/webui/print_preview/destination_dropdown_cros_test.js b/chrome/test/data/webui/print_preview/destination_dropdown_cros_test.js index 4a093e9..ad1a82a3 100644 --- a/chrome/test/data/webui/print_preview/destination_dropdown_cros_test.js +++ b/chrome/test/data/webui/print_preview/destination_dropdown_cros_test.js
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import {Destination, DestinationConnectionStatus, DestinationOrigin, DestinationType, PrinterState, PrinterStatusReason, PrinterStatusSeverity} from 'chrome://print/print_preview.js'; +import {Destination, DestinationConnectionStatus, DestinationOrigin, DestinationType, NativeLayer, NativeLayerImpl, PrinterState, PrinterStatusReason, PrinterStatusSeverity} from 'chrome://print/print_preview.js'; import {assert} from 'chrome://resources/js/assert.m.js'; import {keyDownOn, move} from 'chrome://resources/polymer/v3_0/iron-test-helpers/mock-interactions.js'; import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; @@ -10,6 +10,7 @@ import {assertEquals, assertFalse, assertTrue} from '../chai_assert.js'; import {eventToPromise} from '../test_util.m.js'; +import {NativeLayerStub} from './native_layer_stub.js'; import {getGoogleDriveDestination, getSaveAsPdfDestination} from './print_preview_test_utils.js'; window.destination_dropdown_cros_test = {}; @@ -35,6 +36,9 @@ /** @type {!PrintPreviewDestinationDropdownCrosElement} */ let dropdown; + /** @type {?NativeLayerStub} */ + let nativeLayer = null; + /** @param {!Array<!Destination>} items */ function setItemList(items) { dropdown.itemList = items; @@ -94,10 +98,42 @@ DestinationConnectionStatus.ONLINE); } + function setNativeLayerPrinterStatusMap() { + [{ + printerId: 'One', + statusReasons: [{ + reason: PrinterStatusReason.NO_ERROR, + severity: PrinterStatusSeverity.UNKNOWN_SEVERITY + }], + }, + { + printerId: 'Two', + statusReasons: [{ + reason: PrinterStatusReason.OUT_OF_INK, + severity: PrinterStatusSeverity.ERROR + }], + }, + { + printerId: 'Three', + statusReasons: [{ + reason: PrinterStatusReason.UNKNOWN_REASON, + severity: PrinterStatusSeverity.UNKNOWN_SEVERITY + }], + }] + .forEach( + status => + nativeLayer.addPrinterStatusToMap(status.printerId, status)); + } + /** @override */ setup(function() { document.body.innerHTML = ''; + // Stub out native layer. + nativeLayer = new NativeLayerStub(); + NativeLayerImpl.instance_ = nativeLayer; + setNativeLayerPrinterStatusMap(); + dropdown = /** @type {!PrintPreviewDestinationDropdownCrosElement} */ (document.createElement('print-preview-destination-dropdown-cros')); @@ -268,19 +304,17 @@ .NewStatusUpdatesDestinationIcon), function() { const destinationBadge = dropdown.$$('#destination-badge'); - dropdown.value = createDestination('One', DestinationOrigin.CROS); - - dropdown.value.printerStatusReason = PrinterStatusReason.NO_ERROR; - dropdown.notifyPath(`value.printerStatusReason`); - assertEquals(PrinterState.GOOD, destinationBadge.printerState); - - dropdown.value.printerStatusReason = PrinterStatusReason.OUT_OF_INK; - dropdown.notifyPath(`value.printerStatusReason`); - assertEquals(PrinterState.ERROR, destinationBadge.printerState); - - dropdown.value.printerStatusReason = PrinterStatusReason.UNKNOWN_REASON; - dropdown.notifyPath(`value.printerStatusReason`); + dropdown.value = createDestination('Two', DestinationOrigin.CROS); assertEquals(PrinterState.UNKNOWN, destinationBadge.printerState); + + return dropdown.value.requestPrinterStatus().then(() => { + // After printer stauts is updated the state will still be UNKNOWN. + assertEquals(PrinterState.UNKNOWN, destinationBadge.printerState); + + // Only after the path is notified will the state update to ERROR. + dropdown.notifyPath(`value.printerStatusReason`); + assertEquals(PrinterState.ERROR, destinationBadge.printerState); + }); }); test( @@ -289,24 +323,27 @@ function() { const goodDestination = createDestination('One', DestinationOrigin.CROS); - goodDestination.printerStatusReason = PrinterStatusReason.NO_ERROR; const errorDestination = createDestination('Two', DestinationOrigin.CROS); - errorDestination.printerStatusReason = PrinterStatusReason.OUT_OF_INK; const unknownDestination = createDestination('Three', DestinationOrigin.CROS); - unknownDestination.printerStatusReason = - PrinterStatusReason.UNKNOWN_REASON; const destinationBadge = dropdown.$$('#destination-badge'); - dropdown.value = goodDestination; - assertEquals(PrinterState.GOOD, destinationBadge.printerState); - - dropdown.value = errorDestination; - assertEquals(PrinterState.ERROR, destinationBadge.printerState); - - dropdown.value = unknownDestination; - assertEquals(PrinterState.UNKNOWN, destinationBadge.printerState); + return goodDestination.requestPrinterStatus() + .then(() => { + dropdown.value = goodDestination; + assertEquals(PrinterState.GOOD, destinationBadge.printerState); + return errorDestination.requestPrinterStatus(); + }) + .then(() => { + dropdown.value = errorDestination; + assertEquals(PrinterState.ERROR, destinationBadge.printerState); + return unknownDestination.requestPrinterStatus(); + }) + .then(() => { + dropdown.value = unknownDestination; + assertEquals(PrinterState.UNKNOWN, destinationBadge.printerState); + }); }); test(
diff --git a/chrome/test/data/webui/print_preview/destination_item_test_cros.js b/chrome/test/data/webui/print_preview/destination_item_test_cros.js new file mode 100644 index 0000000..c89b8668 --- /dev/null +++ b/chrome/test/data/webui/print_preview/destination_item_test_cros.js
@@ -0,0 +1,123 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import {Destination, DestinationConnectionStatus, DestinationOrigin, DestinationType, NativeLayer, NativeLayerImpl, PrinterState, PrinterStatusReason, PrinterStatusSeverity} from 'chrome://print/print_preview.js'; +import {assert} from 'chrome://resources/js/assert.m.js'; +import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; + +import {assertEquals} from '../chai_assert.js'; +import {waitBeforeNextRender} from '../test_util.m.js'; + +import {NativeLayerStub} from './native_layer_stub.js'; + +window.destination_item_test_cros = {}; +const destination_item_test_cros = window.destination_item_test_cros; +destination_item_test_cros.suiteName = 'DestinationItemTestCros'; +/** @enum {string} */ +destination_item_test_cros.TestNames = { + NewStatusUpdatesIcon: 'new status updates icon', + ChangingDestinationUpdatesIcon: 'changing destination updates icon', + OnlyUpdateMatchingDestination: 'only update matching destination', +}; + +suite(destination_item_test_cros.suiteName, function() { + /** @type {!PrintPreviewDestinationListItemElement} */ + let listItem; + + /** @type {?NativeLayerStub} */ + let nativeLayer = null; + + function setNativeLayerPrinterStatusMap() { + [{ + printerId: 'One', + statusReasons: [{ + reason: PrinterStatusReason.NO_ERROR, + severity: PrinterStatusSeverity.UNKNOWN_SEVERITY + }], + }, + { + printerId: 'Two', + statusReasons: [{ + reason: PrinterStatusReason.OUT_OF_INK, + severity: PrinterStatusSeverity.ERROR + }], + }] + .forEach( + status => + nativeLayer.addPrinterStatusToMap(status.printerId, status)); + } + + /** @override */ + setup(function() { + document.body.innerHTML = ` + <print-preview-destination-list-item id="listItem"> + </print-preview-destination-list-item>`; + + // Stub out native layer. + nativeLayer = new NativeLayerStub(); + NativeLayerImpl.instance_ = nativeLayer; + setNativeLayerPrinterStatusMap(); + + listItem = /** @type {!PrintPreviewDestinationListItemElement} */ ( + document.body.querySelector('#listItem')); + listItem.destination = new Destination( + 'One', DestinationType.LOCAL, DestinationOrigin.CROS, 'Destination One', + DestinationConnectionStatus.ONLINE, {description: 'ABC'}); + flush(); + }); + + test( + assert(destination_item_test_cros.TestNames.NewStatusUpdatesIcon), + function() { + const statusIcon = listItem.$$('printer-status-icon-cros'); + assertEquals(PrinterState.UNKNOWN, statusIcon.printerState); + + return listItem.destination.requestPrinterStatus().then(() => { + assertEquals(PrinterState.GOOD, statusIcon.printerState); + }); + }); + + test( + assert( + destination_item_test_cros.TestNames.ChangingDestinationUpdatesIcon), + function() { + const statusIcon = listItem.$$('printer-status-icon-cros'); + assertEquals(PrinterState.UNKNOWN, statusIcon.printerState); + + listItem.destination = new Destination( + 'Two', DestinationType.LOCAL, DestinationOrigin.CROS, + 'Destination Two', DestinationConnectionStatus.ONLINE, + {description: 'ABC'}); + + return waitBeforeNextRender(listItem).then(() => { + assertEquals(PrinterState.ERROR, statusIcon.printerState); + }); + }); + + // Tests that the printer stauts icon is only notified to update if the + // destination key in the printer status response matches the current + // destination. + test( + assert( + destination_item_test_cros.TestNames.OnlyUpdateMatchingDestination), + function() { + const statusIcon = listItem.$$('printer-status-icon-cros'); + assertEquals(PrinterState.UNKNOWN, statusIcon.printerState); + const firstDestinationStatusRequestPromise = + listItem.destination.requestPrinterStatus(); + + // Simulate destination_list updating and switching the destination + // after the request for the original destination was already sent out. + listItem.destination = new Destination( + 'Two', DestinationType.LOCAL, DestinationOrigin.CROS, + 'Destination Two', DestinationConnectionStatus.ONLINE, + {description: 'ABC'}); + + return firstDestinationStatusRequestPromise.then(() => { + // PrinterState should stay the same because the destination in the + // status request response doesn't match. + assertEquals(PrinterState.UNKNOWN, statusIcon.printerState); + }); + }); +});
diff --git a/chrome/test/data/webui/print_preview/destination_select_test_cros.js b/chrome/test/data/webui/print_preview/destination_select_test_cros.js index a4901045..b7cdf4dc 100644 --- a/chrome/test/data/webui/print_preview/destination_select_test_cros.js +++ b/chrome/test/data/webui/print_preview/destination_select_test_cros.js
@@ -176,61 +176,71 @@ const destination7 = createDestination('ID7', 'Seven', DestinationOrigin.CROS); - return waitBeforeNextRender(destinationSelect).then(() => { - const whenStatusRequestsDone = - nativeLayer.waitForMultiplePrinterStatusRequests(7); + return waitBeforeNextRender(destinationSelect) + .then(() => { + const whenStatusRequestsDone = + nativeLayer.waitForMultiplePrinterStatusRequests(7); - destinationSelect.recentDestinationList = [ - destination1, - destination2, - destination3, - destination4, - destination5, - destination6, - destination7, - ]; + destinationSelect.recentDestinationList = [ + destination1, + destination2, + destination3, + destination4, + destination5, + destination6, + destination7, + ]; - const dropdown = destinationSelect.$$('#dropdown'); - return whenStatusRequestsDone.then(() => { - assertEquals( - PrinterState.GOOD, - dropdown.$$(`#${escapeForwardSlahes(destination1.key)}`) - .firstChild.printerState); - assertEquals( - PrinterState.GOOD, - dropdown.$$(`#${escapeForwardSlahes(destination2.key)}`) - .firstChild.printerState); - assertEquals( - PrinterState.GOOD, - dropdown.$$(`#${escapeForwardSlahes(destination3.key)}`) - .firstChild.printerState); - assertEquals( - PrinterState.ERROR, - dropdown.$$(`#${escapeForwardSlahes(destination4.key)}`) - .firstChild.printerState); - assertEquals( - PrinterState.ERROR, - dropdown.$$(`#${escapeForwardSlahes(destination5.key)}`) - .firstChild.printerState); - assertEquals( - PrinterState.ERROR, - dropdown.$$(`#${escapeForwardSlahes(destination6.key)}`) - .firstChild.printerState); - assertEquals( - PrinterState.UNKNOWN, - dropdown.$$(`#${escapeForwardSlahes(destination7.key)}`) - .firstChild.printerState); - }); + return whenStatusRequestsDone; + }) + .then(() => { + return waitBeforeNextRender(destinationSelect); + }) + .then(() => { + const dropdown = destinationSelect.$$('#dropdown'); + assertEquals( + PrinterState.GOOD, + dropdown.$$(`#${escapeForwardSlahes(destination1.key)}`) + .firstChild.printerState); + assertEquals( + PrinterState.GOOD, + dropdown.$$(`#${escapeForwardSlahes(destination2.key)}`) + .firstChild.printerState); + assertEquals( + PrinterState.GOOD, + dropdown.$$(`#${escapeForwardSlahes(destination3.key)}`) + .firstChild.printerState); + assertEquals( + PrinterState.ERROR, + dropdown.$$(`#${escapeForwardSlahes(destination4.key)}`) + .firstChild.printerState); + assertEquals( + PrinterState.ERROR, + dropdown.$$(`#${escapeForwardSlahes(destination5.key)}`) + .firstChild.printerState); + assertEquals( + PrinterState.ERROR, + dropdown.$$(`#${escapeForwardSlahes(destination6.key)}`) + .firstChild.printerState); + assertEquals( + PrinterState.UNKNOWN, + dropdown.$$(`#${escapeForwardSlahes(destination7.key)}`) + .firstChild.printerState); + }); }); - }); test( assert(printer_status_test_cros.TestNames.SendStatusRequestOnce), function() { return waitBeforeNextRender(destinationSelect).then(() => { + const destination1 = + createDestination('ID1', 'One', DestinationOrigin.CROS); + const destination2 = + createDestination('ID2', 'Two', DestinationOrigin.CROS); + destinationSelect.recentDestinationList = [ - createDestination('ID1', 'One', DestinationOrigin.CROS), - createDestination('ID2', 'Two', DestinationOrigin.CROS), + destination1, + destination2, createDestination('ID3', 'Three', DestinationOrigin.PRIVET), createDestination('ID4', 'Four', DestinationOrigin.EXTENSION), ]; @@ -241,8 +251,8 @@ // Make sure the requestPrinterStatusUpdate only gets called for the // new destination. destinationSelect.recentDestinationList = [ - createDestination('ID1', 'One', DestinationOrigin.CROS), - createDestination('ID2', 'Two', DestinationOrigin.CROS), + destination1, + destination2, createDestination('ID5', 'Five', DestinationOrigin.CROS), ]; assertEquals( @@ -251,44 +261,50 @@ }); test(assert(printer_status_test_cros.TestNames.HiddenStatusText), function() { - return waitBeforeNextRender(destinationSelect).then(() => { - const destinationWithoutErrorStatus = - createDestination('ID1', 'One', DestinationOrigin.CROS); - // Destination with ID4 will return an error printer status that will - // trigger the error text being populated. - const destinationWithErrorStatus = - createDestination('ID4', 'Four', DestinationOrigin.CROS); - const cloudPrintDestination = new Destination( - 'ID2', DestinationType.GOOGLE, DestinationOrigin.COOKIES, 'Two', - DestinationConnectionStatus.OFFLINE, {account: account}); + const destinationStatus = + destinationSelect.$$('.destination-additional-info'); + return waitBeforeNextRender(destinationSelect) + .then(() => { + const destinationWithoutErrorStatus = + createDestination('ID1', 'One', DestinationOrigin.CROS); + // Destination with ID4 will return an error printer status that will + // trigger the error text being populated. + const destinationWithErrorStatus = + createDestination('ID4', 'Four', DestinationOrigin.CROS); + const cloudPrintDestination = new Destination( + 'ID2', DestinationType.GOOGLE, DestinationOrigin.COOKIES, 'Two', + DestinationConnectionStatus.OFFLINE, {account: account}); - destinationSelect.recentDestinationList = [ - destinationWithoutErrorStatus, - destinationWithErrorStatus, - cloudPrintDestination, - ]; + destinationSelect.recentDestinationList = [ + destinationWithoutErrorStatus, + destinationWithErrorStatus, + cloudPrintDestination, + ]; - const destinationStatus = - destinationSelect.$$('.destination-additional-info'); - const destinationEulaWrapper = - destinationSelect.$$('#destinationEulaWrapper'); + const destinationEulaWrapper = + destinationSelect.$$('#destinationEulaWrapper'); - destinationSelect.destination = cloudPrintDestination; - assertFalse(destinationStatus.hidden); - assertTrue(destinationEulaWrapper.hidden); + destinationSelect.destination = cloudPrintDestination; + assertFalse(destinationStatus.hidden); + assertTrue(destinationEulaWrapper.hidden); - destinationSelect.destination = destinationWithoutErrorStatus; - assertTrue(destinationStatus.hidden); - assertTrue(destinationEulaWrapper.hidden); + destinationSelect.destination = destinationWithoutErrorStatus; + assertTrue(destinationStatus.hidden); + assertTrue(destinationEulaWrapper.hidden); - destinationSelect.set('destination.eulaUrl', 'chrome://os-credits/eula'); - assertFalse(destinationEulaWrapper.hidden); + destinationSelect.set( + 'destination.eulaUrl', 'chrome://os-credits/eula'); + assertFalse(destinationEulaWrapper.hidden); - destinationSelect.destination = destinationWithErrorStatus; - return nativeLayer.whenCalled('requestPrinterStatusUpdate').then(() => { - assertFalse(destinationStatus.hidden); - }); - }); + destinationSelect.destination = destinationWithErrorStatus; + return nativeLayer.whenCalled('requestPrinterStatusUpdate'); + }) + .then(() => { + return waitBeforeNextRender(destinationSelect); + }) + .then(() => { + assertFalse(destinationStatus.hidden); + }); }); test(assert(printer_status_test_cros.TestNames.ChangeIcon), function() {
diff --git a/chrome/test/data/webui/print_preview/destination_settings_test.js b/chrome/test/data/webui/print_preview/destination_settings_test.js index fdddd96..ee2edb395 100644 --- a/chrome/test/data/webui/print_preview/destination_settings_test.js +++ b/chrome/test/data/webui/print_preview/destination_settings_test.js
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import {CloudPrintInterface, CloudPrintInterfaceEventType, CloudPrintInterfaceImpl, Destination, DestinationConnectionStatus, DestinationErrorType, DestinationOrigin, DestinationState, DestinationStore, DestinationType, Error, LocalDestinationInfo, makeRecentDestination, NativeLayer, NativeLayerImpl, RecentDestination, State} from 'chrome://print/print_preview.js'; +import {CloudPrintInterface, CloudPrintInterfaceEventType, CloudPrintInterfaceImpl, Destination, DestinationConnectionStatus, DestinationErrorType, DestinationOrigin, DestinationState, DestinationStore, DestinationType, Error, LocalDestinationInfo, makeRecentDestination, NativeLayer, NativeLayerImpl, NUM_PERSISTED_DESTINATIONS, RecentDestination, State} from 'chrome://print/print_preview.js'; import {assert} from 'chrome://resources/js/assert.m.js'; import {isChromeOS, webUIListenerCallback} from 'chrome://resources/js/cr.m.js'; import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; @@ -57,6 +57,9 @@ /** @type {!Array<!Destination>} */ let destinations = []; + /** @type {!Array<!Destination>} */ + const extraDestinations = []; + /** @type {!Array<string>} */ let initialAccounts = []; @@ -80,6 +83,15 @@ NativeLayerImpl.instance_ = nativeLayer; localDestinations = []; destinations = getDestinations(localDestinations); + // Add some extra destinations. + for (let i = 0; i < NUM_PERSISTED_DESTINATIONS; i++) { + const id = `e${i}`; + const name = `n${i}`; + localDestinations.push({deviceName: id, printerName: name}); + extraDestinations.push(new Destination( + id, DestinationType.LOCAL, getLocalOrigin(), name, + DestinationConnectionStatus.ONLINE)); + } nativeLayer.setLocalDestinations(localDestinations); cloudPrintInterface = new CloudPrintInterfaceStub(); CloudPrintInterfaceImpl.instance_ = cloudPrintInterface; @@ -256,11 +268,11 @@ }); // Tests that the dropdown contains the appropriate destinations when there - // are 3 recent destinations. + // are 5 recent destinations. test( assert(destination_settings_test.TestNames.RecentDestinations), function() { - recentDestinations = destinations.slice(0, 3).map( + recentDestinations = destinations.slice(0, 5).map( destination => makeRecentDestination(destination)); const whenCapabilitiesDone = nativeLayer.waitForMultipleCapabilities(3); @@ -303,7 +315,7 @@ test( assert(destination_settings_test.TestNames.RecentDestinationsMissing), function() { - recentDestinations = destinations.slice(0, 3).map( + recentDestinations = destinations.slice(0, 5).map( destination => makeRecentDestination(destination)); const missing = localDestinations.splice(1, 1)[0]; nativeLayer.setLocalDestinations(localDestinations); @@ -350,11 +362,11 @@ // Tests that the dropdown contains the appropriate destinations when Save // as PDF is one of the recent destinations. test(assert(destination_settings_test.TestNames.SaveAsPdfRecent), function() { - recentDestinations = destinations.slice(0, 3).map( + recentDestinations = destinations.slice(0, 5).map( destination => makeRecentDestination(destination)); recentDestinations.splice( 1, 1, makeRecentDestination(getSaveAsPdfDestination())); - const whenCapabilitiesDone = nativeLayer.waitForMultipleCapabilities(2); + const whenCapabilitiesDone = nativeLayer.waitForMultipleCapabilities(3); initialize(); return whenCapabilitiesDone @@ -369,6 +381,7 @@ assertDropdownItems([ makeLocalDestinationKey('ID1'), makeLocalDestinationKey('ID3'), + makeLocalDestinationKey('ID4'), 'Save as PDF/local/', ]); @@ -379,6 +392,7 @@ assertDropdownItems([ makeLocalDestinationKey('ID1'), makeLocalDestinationKey('ID3'), + makeLocalDestinationKey('ID4'), 'Save as PDF/local/', '__google__docs/cookies/foo@chromium.org', ]); @@ -390,12 +404,12 @@ test( assert(destination_settings_test.TestNames.GoogleDriveRecent), function() { - recentDestinations = destinations.slice(0, 3).map( + recentDestinations = destinations.slice(0, 5).map( destination => makeRecentDestination(destination)); recentDestinations.splice( 1, 1, makeRecentDestination(getGoogleDriveDestination(defaultUser))); - const whenCapabilitiesDone = nativeLayer.waitForMultipleCapabilities(2); + const whenCapabilitiesDone = nativeLayer.waitForMultipleCapabilities(3); initialize(); return whenCapabilitiesDone @@ -414,6 +428,7 @@ assertDropdownItems([ makeLocalDestinationKey('ID1'), makeLocalDestinationKey('ID3'), + makeLocalDestinationKey('ID4'), 'Save as PDF/local/', ]); @@ -424,6 +439,7 @@ assertDropdownItems([ makeLocalDestinationKey('ID1'), makeLocalDestinationKey('ID3'), + makeLocalDestinationKey('ID4'), 'Save as PDF/local/', '__google__docs/cookies/foo@chromium.org', ]); @@ -436,7 +452,7 @@ test( assert(destination_settings_test.TestNames.GoogleDriveAutoselect), function() { - recentDestinations = destinations.slice(0, 3).map( + recentDestinations = destinations.slice(0, 5).map( destination => makeRecentDestination(destination)); recentDestinations.splice( 0, 1, @@ -463,6 +479,7 @@ assertDropdownItems([ makeLocalDestinationKey('ID2'), makeLocalDestinationKey('ID3'), + makeLocalDestinationKey('ID4'), 'Save as PDF/local/', '__google__docs/cookies/foo@chromium.org', ]); @@ -473,11 +490,11 @@ // DESTINATION_SELECT event firing, with Save as PDF set as the current // destination. test(assert(destination_settings_test.TestNames.SelectSaveAsPdf), function() { - recentDestinations = destinations.slice(0, 3).map( + recentDestinations = destinations.slice(0, 5).map( destination => makeRecentDestination(destination)); recentDestinations.splice( 1, 1, makeRecentDestination(getSaveAsPdfDestination())); - const whenCapabilitiesDone = nativeLayer.waitForMultipleCapabilities(2); + const whenCapabilitiesDone = nativeLayer.waitForMultipleCapabilities(3); initialize(); const dropdown = destinationSettings.$$('#destinationSelect'); @@ -494,6 +511,7 @@ assertDropdownItems([ makeLocalDestinationKey('ID1'), makeLocalDestinationKey('ID3'), + makeLocalDestinationKey('ID4'), 'Save as PDF/local/', ]); // Most recent destination is selected by default. @@ -521,12 +539,12 @@ test( assert(destination_settings_test.TestNames.SelectGoogleDrive), function() { - recentDestinations = destinations.slice(0, 3).map( + recentDestinations = destinations.slice(0, 5).map( destination => makeRecentDestination(destination)); recentDestinations.splice( 1, 1, makeRecentDestination(getGoogleDriveDestination(defaultUser))); - const whenCapabilitiesDone = nativeLayer.waitForMultipleCapabilities(2); + const whenCapabilitiesDone = nativeLayer.waitForMultipleCapabilities(3); initialize(); const dropdown = destinationSettings.$$('#destinationSelect'); @@ -541,6 +559,7 @@ assertDropdownItems([ makeLocalDestinationKey('ID1'), makeLocalDestinationKey('ID3'), + makeLocalDestinationKey('ID4'), 'Save as PDF/local/', ]); assertFalse(dropdown.disabled); @@ -552,6 +571,7 @@ assertDropdownItems([ makeLocalDestinationKey('ID1'), makeLocalDestinationKey('ID3'), + makeLocalDestinationKey('ID4'), 'Save as PDF/local/', '__google__docs/cookies/foo@chromium.org', ]); @@ -581,7 +601,7 @@ test( assert(destination_settings_test.TestNames.SelectRecentDestination), function() { - recentDestinations = destinations.slice(0, 3).map( + recentDestinations = destinations.slice(0, 5).map( destination => makeRecentDestination(destination)); const whenCapabilitiesDone = nativeLayer.waitForMultipleCapabilities(3); initialize(); @@ -618,7 +638,7 @@ // Tests that selecting the 'see more' option opens the dialog. test(assert(destination_settings_test.TestNames.OpenDialog), function() { - recentDestinations = destinations.slice(0, 3).map( + recentDestinations = destinations.slice(0, 5).map( destination => makeRecentDestination(destination)); const whenCapabilitiesDone = nativeLayer.waitForMultipleCapabilities(3); initialize(); @@ -791,7 +811,7 @@ assertEquals( 0, nativeLayer.getCallCount('getPrinterCapabilities')); - // Select a third destination + // Select a third destination. selectDestination(destinations[1]); return nativeLayer.whenCalled('getPrinterCapabilities'); }) @@ -799,16 +819,24 @@ assertRecentDestinations(['ID2', 'Save as PDF', 'ID1']); assertEquals( 1, nativeLayer.getCallCount('getPrinterCapabilities')); - - // Select a fourth destination. List does not grow. nativeLayer.resetResolver('getPrinterCapabilities'); - selectDestination(destinations[2]); - return nativeLayer.whenCalled('getPrinterCapabilities'); + // Fill recent destinations up to the cap, then add a couple + // more destinations. Make sure the length of the list does not + // exceed NUM_PERSISTED_DESTINATIONS. + const whenCapabilitiesDone = + nativeLayer.waitForMultipleCapabilities( + NUM_PERSISTED_DESTINATIONS); + for (const destination of extraDestinations) { + selectDestination(destination); + } + return whenCapabilitiesDone; }) .then(() => { - assertRecentDestinations(['ID3', 'ID2', 'Save as PDF']); + assertRecentDestinations( + extraDestinations.map(dest => dest.id).reverse()); assertEquals( - 1, nativeLayer.getCallCount('getPrinterCapabilities')); + NUM_PERSISTED_DESTINATIONS, + nativeLayer.getCallCount('getPrinterCapabilities')); }); }); @@ -817,9 +845,9 @@ test( assert(destination_settings_test.TestNames.ResetDestinationOnSignOut), function() { - recentDestinations = destinations.slice(0, 3).map( + recentDestinations = destinations.slice(0, 5).map( destination => makeRecentDestination(destination)); - const whenCapabilitiesDone = nativeLayer.waitForMultipleCapabilities(2); + const whenCapabilitiesDone = nativeLayer.waitForMultipleCapabilities(3); const driveDestination = getGoogleDriveDestination(defaultUser); recentDestinations.splice( 0, 1, makeRecentDestination(driveDestination)); @@ -840,6 +868,7 @@ assertDropdownItems([ makeLocalDestinationKey('ID2'), makeLocalDestinationKey('ID3'), + makeLocalDestinationKey('ID4'), 'Save as PDF/local/', '__google__docs/cookies/foo@chromium.org', ]); @@ -854,6 +883,7 @@ assertDropdownItems([ makeLocalDestinationKey('ID2'), makeLocalDestinationKey('ID3'), + makeLocalDestinationKey('ID4'), 'Save as PDF/local/', ]);
diff --git a/chrome/test/data/webui/print_preview/print_preview_ui_browsertest.js b/chrome/test/data/webui/print_preview/print_preview_ui_browsertest.js index a03515c..46b4881 100644 --- a/chrome/test/data/webui/print_preview/print_preview_ui_browsertest.js +++ b/chrome/test/data/webui/print_preview/print_preview_ui_browsertest.js
@@ -1024,6 +1024,51 @@ this.runMochaTest(destination_item_test.TestNames.QueryDescription); }); +GEN('#if defined(OS_CHROMEOS)'); +// eslint-disable-next-line no-var +var PrintPreviewDestinationItemTestCros = class extends PrintPreviewTest { + /** @override */ + get browsePreload() { + return 'chrome://print/test_loader.html?module=print_preview/destination_item_test_cros.js'; + } + + /** @override */ + get suiteName() { + return destination_item_test_cros.suiteName; + } + + /** @override */ + get featureList() { + const kPrinterStatusDialog = ['chromeos::features::kPrinterStatusDialog']; + const featureList = super.featureList || []; + featureList.enabled = featureList.enabled ? + featureList.enabled.concat(kPrinterStatusDialog) : + kPrinterStatusDialog; + return featureList; + } +}; + +TEST_F( + 'PrintPreviewDestinationItemTestCros', 'NewStatusUpdatesIcon', function() { + this.runMochaTest( + destination_item_test_cros.TestNames.NewStatusUpdatesIcon); + }); + +TEST_F( + 'PrintPreviewDestinationItemTestCros', 'ChangingDestinationUpdatesIcon', + function() { + this.runMochaTest( + destination_item_test_cros.TestNames.ChangingDestinationUpdatesIcon); + }); + +TEST_F( + 'PrintPreviewDestinationItemTestCros', 'OnlyUpdateMatchingDestination', + function() { + this.runMochaTest( + destination_item_test_cros.TestNames.OnlyUpdateMatchingDestination); + }); +GEN('#endif'); + // eslint-disable-next-line no-var var PrintPreviewAdvancedItemTest = class extends PrintPreviewTest { /** @override */
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/plugin_vm_shared_paths_test.js b/chrome/test/data/webui/settings/chromeos/app_management/plugin_vm_shared_paths_test.js index 05db2578..4c957ba 100644 --- a/chrome/test/data/webui/settings/chromeos/app_management/plugin_vm_shared_paths_test.js +++ b/chrome/test/data/webui/settings/chromeos/app_management/plugin_vm_shared_paths_test.js
@@ -9,6 +9,7 @@ 'getPluginVmSharedPathsDisplayText', 'removePluginVmSharedPath', ]); + this.removeSharedPathResult = true; } /** override */ @@ -20,6 +21,7 @@ /** override */ removePluginVmSharedPath(vmName, path) { this.methodCalled('removePluginVmSharedPath', [vmName, path]); + return Promise.resolve(this.removeSharedPathResult); } } @@ -94,4 +96,25 @@ assertTrue(page.$.pluginVmList.hidden); assertFalse(page.$.pluginVmListEmpty.hidden); }); + + test('RemoveFailedRetry', async function() { + await setPrefs({'path1': ['PvmDefault'], 'path2': ['PvmDefault']}); + + // Remove shared path fails. + pluginVmBrowserProxy.removeSharedPathResult = false; + page.$$('.list-item cr-icon-button').click(); + + await pluginVmBrowserProxy.whenCalled('removePluginVmSharedPath'); + Polymer.dom.flush(); + assertTrue(page.$$('#removeSharedPathFailedDialog').open); + + // Click retry and make sure 'removePluginVmSharedPath' is called + // and dialog is closed/removed. + pluginVmBrowserProxy.removeSharedPathResult = true; + page.$$('#removeSharedPathFailedDialog') + .querySelector('.action-button') + .click(); + await pluginVmBrowserProxy.whenCalled('removePluginVmSharedPath'); + assertFalse(!!page.$$('#removeSharedPathFailedDialog')); + }); });
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/plugin_vm_shared_usb_devices_test.js b/chrome/test/data/webui/settings/chromeos/app_management/plugin_vm_shared_usb_devices_test.js index 6ef9629f..20b51e3 100644 --- a/chrome/test/data/webui/settings/chromeos/app_management/plugin_vm_shared_usb_devices_test.js +++ b/chrome/test/data/webui/settings/chromeos/app_management/plugin_vm_shared_usb_devices_test.js
@@ -35,9 +35,14 @@ setup(async function() { pluginVmBrowserProxy = new TestPluginVmBrowserProxy(); pluginVmBrowserProxy.sharedUsbDevices = [ - {guid: '0001', label: 'usb_dev1', shared: true}, - {guid: '0002', label: 'usb_dev2', shared: false}, - {guid: '0003', label: 'usb_dev3', shared: true}, + { + guid: '0001', + label: 'usb_dev1', + shared: false, + shareWillReassign: false, + }, + {guid: '0002', label: 'usb_dev2', shared: true, shareWillReassign: false}, + {guid: '0003', label: 'usb_dev3', shared: false, shareWillReassign: true}, ]; settings.PluginVmBrowserProxyImpl.instance_ = pluginVmBrowserProxy; PolymerTest.clearBody(); @@ -64,12 +69,40 @@ const args = await pluginVmBrowserProxy.whenCalled('setPluginVmUsbDeviceShared'); assertEquals('0001', args[0]); - assertEquals(false, args[1]); + assertEquals(true, args[1]); // Simulate a change in the underlying model. cr.webUIListenerCallback('plugin-vm-shared-usb-devices-changed', [ - {guid: '0001', label: 'usb_dev1', shared: true}, + {guid: '0001', label: 'usb_dev1', shared: true, shareWillReassign: false}, ]); Polymer.dom.flush(); assertEquals(1, page.shadowRoot.querySelectorAll('.toggle').length); }); + + test('Show dialog for reassign', async function() { + const items = page.shadowRoot.querySelectorAll('.toggle'); + assertEquals(3, items.length); + + // Clicking on item[2] should show dialog. + assertFalse(!!page.$$('#reassignDialog')); + items[2].click(); + Polymer.dom.flush(); + assertTrue(page.$$('#reassignDialog').open); + + // Clicking cancel will close the dialog. + page.$$('#cancel').click(); + Polymer.dom.flush(); + assertFalse(!!page.$$('#reassignDialog')); + + // Clicking continue will call the proxy and close the dialog. + items[2].click(); + Polymer.dom.flush(); + assertTrue(page.$$('#reassignDialog').open); + page.$$('#continue').click(); + Polymer.dom.flush(); + assertFalse(!!page.$$('#reassignDialog')); + const args = + await pluginVmBrowserProxy.whenCalled('setPluginVmUsbDeviceShared'); + assertEquals('0003', args[0]); + assertEquals(true, args[1]); + }); });
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/test_plugin_vm_browser_proxy.js b/chrome/test/data/webui/settings/chromeos/app_management/test_plugin_vm_browser_proxy.js index bc43eb4..4235d3b 100644 --- a/chrome/test/data/webui/settings/chromeos/app_management/test_plugin_vm_browser_proxy.js +++ b/chrome/test/data/webui/settings/chromeos/app_management/test_plugin_vm_browser_proxy.js
@@ -12,6 +12,7 @@ 'setPluginVmPermission', 'relaunchPluginVm', ]); + this.removeSharedPathResult = true; this.pluginVmRunning = false; this.permissions = [true, true]; // [0]Camera, [1]Microphone } @@ -25,6 +26,7 @@ /** @override */ removePluginVmSharedPath(vmName, path) { this.methodCalled('removePluginVmSharedPath', vmName, path); + return Promise.resolve(this.removeSharedPathResult); } /** @override */
diff --git a/chrome/test/data/webui/settings/chromeos/crostini_page_test.js b/chrome/test/data/webui/settings/chromeos/crostini_page_test.js index ce1b4bf..38d71937 100644 --- a/chrome/test/data/webui/settings/chromeos/crostini_page_test.js +++ b/chrome/test/data/webui/settings/chromeos/crostini_page_test.js
@@ -1061,9 +1061,24 @@ setup(async function() { setCrostiniPrefs(true, { sharedUsbDevices: [ - {shared: true, guid: '0001', name: 'usb_dev1'}, - {shared: false, guid: '0002', name: 'usb_dev2'}, - {shared: true, guid: '0003', name: 'usb_dev3'} + { + guid: '0001', + name: 'usb_dev1', + shared: false, + shareWillReassign: false + }, + { + guid: '0002', + name: 'usb_dev2', + shared: true, + shareWillReassign: false + }, + { + guid: '0003', + name: 'usb_dev3', + shared: false, + shareWillReassign: true + }, ] }); @@ -1090,15 +1105,48 @@ const args = await crostiniBrowserProxy.whenCalled('setCrostiniUsbDeviceShared'); assertEquals('0001', args[0]); - assertEquals(false, args[1]); + assertEquals(true, args[1]); // Simulate a change in the underlying model. cr.webUIListenerCallback('crostini-shared-usb-devices-changed', [ - {shared: true, guid: '0001', name: 'usb_dev1'}, + { + guid: '0001', + name: 'usb_dev1', + shared: true, + shareWillReassign: false + }, ]); Polymer.dom.flush(); assertEquals(1, subpage.shadowRoot.querySelectorAll('.toggle').length); }); + + test('Show dialog for reassign', async function() { + const items = subpage.shadowRoot.querySelectorAll('.toggle'); + assertEquals(3, items.length); + + // Clicking on item[2] should show dialog. + assertFalse(!!subpage.$$('#reassignDialog')); + items[2].click(); + Polymer.dom.flush(); + assertTrue(subpage.$$('#reassignDialog').open); + + // Clicking cancel will close the dialog. + subpage.$$('#cancel').click(); + Polymer.dom.flush(); + assertFalse(!!subpage.$$('#reassignDialog')); + + // Clicking continue will call the proxy and close the dialog. + items[2].click(); + Polymer.dom.flush(); + assertTrue(subpage.$$('#reassignDialog').open); + subpage.$$('#continue').click(); + Polymer.dom.flush(); + assertFalse(!!subpage.$$('#reassignDialog')); + const args = + await crostiniBrowserProxy.whenCalled('setCrostiniUsbDeviceShared'); + assertEquals('0003', args[0]); + assertEquals(true, args[1]); + }); }); suite('SubPageArcAdb', function() {
diff --git a/chrome/test/data/webui/settings/chromeos/device_page_tests.js b/chrome/test/data/webui/settings/chromeos/device_page_tests.js index 73c52b9..e3e07ca8 100644 --- a/chrome/test/data/webui/settings/chromeos/device_page_tests.js +++ b/chrome/test/data/webui/settings/chromeos/device_page_tests.js
@@ -1362,7 +1362,111 @@ sendLid(settings.LidClosedBehavior.SUSPEND); expectTrue(lidClosedToggle.checked); }); - + test('display idle behavior for shut_down/stop_session', function() { + return new Promise(function(resolve) { + // Send power management settings first. + sendPowerManagementSettings( + [ + settings.IdleBehavior.DISPLAY_OFF_SLEEP, + settings.IdleBehavior.DISPLAY_OFF, + settings.IdleBehavior.DISPLAY_ON, + settings.IdleBehavior.SHUT_DOWN, + settings.IdleBehavior.STOP_SESSION, + ], + [ + settings.IdleBehavior.DISPLAY_OFF_SLEEP, + settings.IdleBehavior.DISPLAY_OFF, + settings.IdleBehavior.DISPLAY_ON, + settings.IdleBehavior.SHUT_DOWN, + settings.IdleBehavior.STOP_SESSION, + ], + settings.IdleBehavior.SHUT_DOWN, + settings.IdleBehavior.SHUT_DOWN, + true /* acIdleManaged */, true /* batteryIdleManaged */, + settings.LidClosedBehavior.DO_NOTHING, + false /* lidClosedControlled */, true /* hasLid */); + powerPage.async(resolve); + }) + .then(function() { + // Indicate battery presence so that battery idle settings + // box becomes visible. Default option should be selected + // properly even when battery idle settings box is stamped + // later. + const batteryStatus = { + present: true, + charging: false, + calculating: false, + percent: 50, + statusText: '5 hours left', + }; + cr.webUIListenerCallback( + 'battery-status-changed', Object.assign({}, batteryStatus)); + return new Promise(function(resolve) { + powerPage.async(resolve); + }); + }) + .then(function() { + const batteryIdleSelect = + assert(powerPage.$$('#batteryIdleSelect')); + expectEquals( + settings.IdleBehavior.SHUT_DOWN.toString(), + batteryIdleSelect.value); + expectFalse(batteryIdleSelect.disabled); + const acIdleSelect = assert(powerPage.$$('#acIdleSelect')); + expectEquals( + settings.IdleBehavior.SHUT_DOWN.toString(), + acIdleSelect.value); + expectFalse(acIdleSelect.disabled); + expectEquals( + loadTimeData.getString('powerLidSleepLabel'), + lidClosedToggle.label); + expectFalse(lidClosedToggle.checked); + expectFalse(lidClosedToggle.isPrefEnforced()); + }) + .then(function() { + sendPowerManagementSettings( + [ + settings.IdleBehavior.DISPLAY_OFF_SLEEP, + settings.IdleBehavior.DISPLAY_OFF, + settings.IdleBehavior.DISPLAY_ON, + settings.IdleBehavior.SHUT_DOWN, + settings.IdleBehavior.STOP_SESSION, + ], + [ + settings.IdleBehavior.DISPLAY_OFF_SLEEP, + settings.IdleBehavior.DISPLAY_OFF, + settings.IdleBehavior.DISPLAY_ON, + settings.IdleBehavior.SHUT_DOWN, + settings.IdleBehavior.STOP_SESSION, + ], + settings.IdleBehavior.SHUT_DOWN, + settings.IdleBehavior.SHUT_DOWN, true /* acIdleManaged */, + true /* batteryIdleManaged */, + settings.LidClosedBehavior.DO_NOTHING, + false /* lidClosedControlled */, true /* hasLid */); + return new Promise(function(resolve) { + powerPage.async(resolve); + }); + }) + .then(function() { + const batteryIdleSelect = + assert(powerPage.$$('#batteryIdleSelect')); + expectEquals( + settings.IdleBehavior.SHUT_DOWN.toString(), + batteryIdleSelect.value); + expectFalse(batteryIdleSelect.disabled); + const acIdleSelect = assert(powerPage.$$('#acIdleSelect')); + expectEquals( + settings.IdleBehavior.SHUT_DOWN.toString(), + acIdleSelect.value); + expectFalse(acIdleSelect.disabled); + expectEquals( + loadTimeData.getString('powerLidSleepLabel'), + lidClosedToggle.label); + expectFalse(lidClosedToggle.checked); + expectFalse(lidClosedToggle.isPrefEnforced()); + }); + }); test('display idle and lid behavior', function() { return new Promise(function(resolve) { // Send power management settings first. @@ -1480,9 +1584,10 @@ 'battery-status-changed', Object.assign({}, batteryStatus)); sendPowerManagementSettings( - [settings.IdleBehavior.OTHER], - [settings.IdleBehavior.OTHER], - settings.IdleBehavior.OTHER, settings.IdleBehavior.OTHER, + [settings.IdleBehavior.SHUT_DOWN], + [settings.IdleBehavior.SHUT_DOWN], + settings.IdleBehavior.SHUT_DOWN, + settings.IdleBehavior.SHUT_DOWN, true /* acIdleManaged */, true /* batteryIdleManaged */, settings.LidClosedBehavior.SHUT_DOWN, true /* lidClosedControlled */, true /* hasLid */); @@ -1492,9 +1597,10 @@ const batteryIdleSelect = assert(powerPage.$$('#batteryIdleSelect')); expectEquals( - settings.IdleBehavior.OTHER.toString(), acIdleSelect.value); + settings.IdleBehavior.SHUT_DOWN.toString(), + acIdleSelect.value); expectEquals( - settings.IdleBehavior.OTHER.toString(), + settings.IdleBehavior.SHUT_DOWN.toString(), batteryIdleSelect.value); expectTrue(acIdleSelect.disabled); expectTrue(batteryIdleSelect.disabled);
diff --git a/chrome/test/data/webui/settings/chromeos/input_page_test.js b/chrome/test/data/webui/settings/chromeos/input_page_test.js index ea4846da..954fe71 100644 --- a/chrome/test/data/webui/settings/chromeos/input_page_test.js +++ b/chrome/test/data/webui/settings/chromeos/input_page_test.js
@@ -167,6 +167,18 @@ items[1].querySelector('.display-name').textContent.trim()); assertFalse(!!items[1].querySelector('.icon-clear').disabled); }); + + test('shows managed input methods label', () => { + const inputMethodsManagedbyPolicy = + inputPage.$$('#inputMethodsManagedbyPolicy'); + assertFalse(!!inputMethodsManagedbyPolicy); + + inputPage.setPrefValue( + 'settings.language.allowed_input_methods', ['xkb:us::eng']); + Polymer.dom.flush(); + + assertTrue(!!inputPage.$$('#inputMethodsManagedbyPolicy')); + }); }); suite('input page', () => { @@ -233,10 +245,11 @@ assertTrue(actionButton.disabled); }); - test('adds input methods', () => { + test('has correct structure and adds input methods', () => { const suggestedItems = suggestedInputMethods.querySelectorAll('.list-item'); // input methods are based on and ordered by enabled languages + // only allowed input methods are shown. assertEquals(2, suggestedItems.length); assertEquals('US Swahili keyboard', suggestedItems[0].textContent.trim()); assertEquals('Swahili keyboard', suggestedItems[1].textContent.trim()); @@ -246,15 +259,59 @@ const allItems = allInputMethods.querySelectorAll('.list-item'); // All input methods should appear and ordered based on fake settings // data. - assertEquals(3, allItems.length); - assertEquals('Swahili keyboard', allItems[0].textContent.trim()); - // checked is reflected - assertTrue(allItems[0].checked); - assertEquals('US Swahili keyboard', allItems[1].textContent.trim()); - assertFalse(allItems[1].checked); - assertEquals('Vietnamese keyboard', allItems[2].textContent.trim()); + assertEquals(4, allItems.length); + + const expectedItems = [ + { + name: 'Swahili keyboard', + checkboxDisabled: false, + checkboxChecked: true, + policyIcon: false, + }, + { + name: 'US Swahili keyboard', + checkboxDisabled: false, + checkboxChecked: false, + policyIcon: false, + }, + { + name: 'US International keyboard', + checkboxDisabled: true, + checkboxChecked: false, + policyIcon: true, + }, + { + name: 'Vietnamese keyboard', + checkboxDisabled: false, + checkboxChecked: false, + policyIcon: false, + }, + ]; + + for (let i = 0; i < allItems.length; i++) { + assertTrue( + allItems[i].textContent.includes(expectedItems[i].name), + `expect ${allItems[i].textContent} to include ${ + expectedItems[i].name}`); + assertEquals( + expectedItems[i].checkboxDisabled, + allItems[i].querySelector('cr-checkbox').disabled, + `expect ${expectedItems[i].name}'s checkbox disabled state to be ${ + expectedItems[i].checkboxDisabled}`); + assertEquals( + expectedItems[i].checkboxChecked, + allItems[i].querySelector('cr-checkbox').checked, + `expect ${expectedItems[i].name}'s checkbox checked state to be ${ + expectedItems[i].checkboxChecked}`); + assertEquals( + expectedItems[i].policyIcon, + !!allItems[i].querySelector('iron-icon'), + `expect ${expectedItems[i].name}'s policy icon presence to be ${ + expectedItems[i].policyIcon}`); + } + // selecting Vietnamese keyboard - allItems[2].click(); + allItems[3].querySelector('cr-checkbox').click(); actionButton.click();
diff --git a/chrome/test/data/webui/settings/chromeos/multidevice_page_tests.js b/chrome/test/data/webui/settings/chromeos/multidevice_page_tests.js index 6b6725b..619236d 100644 --- a/chrome/test/data/webui/settings/chromeos/multidevice_page_tests.js +++ b/chrome/test/data/webui/settings/chromeos/multidevice_page_tests.js
@@ -6,11 +6,13 @@ // #import 'chrome://os-settings/chromeos/os_settings.js'; // #import {TestLifetimeBrowserProxy} from './test_os_lifetime_browser_proxy.m.js'; -// #import {MultiDeviceSettingsMode, MultiDeviceFeature, MultiDeviceFeatureState, MultiDevicePageContentData, MultiDeviceBrowserProxyImpl} from 'chrome://os-settings/chromeos/os_settings.js'; +// #import {MultiDeviceSettingsMode, MultiDeviceFeature, MultiDeviceFeatureState, MultiDevicePageContentData, MultiDeviceBrowserProxyImpl, Router, routes} from 'chrome://os-settings/chromeos/os_settings.js'; // #import {TestOsResetBrowserProxy} from './test_os_reset_browser_proxy.m.js'; // #import {assertEquals, assertFalse, assertNotEquals, assertTrue} from '../../chai_assert.js'; // #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; // #import {TestMultideviceBrowserProxy, createFakePageContentData, HOST_DEVICE} from './test_multidevice_browser_proxy.m.js'; +// #import {waitAfterNextRender} from 'chrome://test/test_util.m.js'; +// #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js'; // clang-format on suite('Multidevice', function() { @@ -142,6 +144,7 @@ teardown(function() { multidevicePage.remove(); + settings.Router.getInstance().resetRouteForTesting(); }); const getLabel = () => { @@ -158,6 +161,26 @@ return browserProxy.whenCalled('showMultiDeviceSetupDialog'); }); + test('Deep link to multidevice setup', async () => { + loadTimeData.overrideValues({ + isDeepLinkingEnabled: true, + }); + setHostData(settings.MultiDeviceSettingsMode.NO_HOST_SET); + + const params = new URLSearchParams; + params.append('settingId', '200'); + settings.Router.getInstance().navigateTo( + settings.routes.MULTIDEVICE, params); + + Polymer.dom.flush(); + + const deepLinkElement = multidevicePage.$$('cr-button'); + await test_util.waitAfterNextRender(deepLinkElement); + assertEquals( + deepLinkElement, getDeepActiveElement(), + 'Setup multidevice button should be focused for settingId=200.'); + }); + test('headings render based on mode and host', function() { for (const mode of ALL_MODES) { setHostData(mode);
diff --git a/chrome/test/data/webui/settings/chromeos/multidevice_smartlock_subpage_test.js b/chrome/test/data/webui/settings/chromeos/multidevice_smartlock_subpage_test.js index 36acf6b..6111bb3 100644 --- a/chrome/test/data/webui/settings/chromeos/multidevice_smartlock_subpage_test.js +++ b/chrome/test/data/webui/settings/chromeos/multidevice_smartlock_subpage_test.js
@@ -5,12 +5,13 @@ // clang-format off // #import 'chrome://os-settings/chromeos/os_settings.js'; -// #import {MultiDeviceFeature, MultiDeviceFeatureState, MultiDeviceBrowserProxyImpl, SmartLockSignInEnabledState} from 'chrome://os-settings/chromeos/os_settings.js'; +// #import {MultiDeviceFeature, MultiDeviceFeatureState, MultiDeviceBrowserProxyImpl, SmartLockSignInEnabledState, Router, routes} from 'chrome://os-settings/chromeos/os_settings.js'; // #import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js'; // #import {assert} from 'chrome://resources/js/assert.m.js'; -// #import {eventToPromise} from 'chrome://test/test_util.m.js'; +// #import {eventToPromise, waitAfterNextRender} from 'chrome://test/test_util.m.js'; // #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; // #import {TestMultideviceBrowserProxy} from './test_multidevice_browser_proxy.m.js'; +// #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js'; // clang-format on suite('Multidevice', function() { @@ -77,6 +78,7 @@ smartLockSubPage.remove(); browserProxy.reset(); + settings.Router.getInstance().resetRouteForTesting(); }); test('Smart Lock enabled', function() { @@ -186,6 +188,28 @@ }); }); + test('Deep link to smart lock on/off', async () => { + loadTimeData.overrideValues({ + isDeepLinkingEnabled: true, + }); + smartLockSubPage = createSmartLockSubPage(); + setSuiteState(settings.MultiDeviceFeatureState.ENABLED_BY_USER); + setSmartLockFeatureState(settings.MultiDeviceFeatureState.DISABLED_BY_USER); + + const params = new URLSearchParams; + params.append('settingId', '203'); + settings.Router.getInstance().navigateTo( + settings.routes.SMART_LOCK, params); + + Polymer.dom.flush(); + + const deepLinkElement = getSmartLockFeatureToggleControl(); + await test_util.waitAfterNextRender(deepLinkElement); + assertEquals( + deepLinkElement, getDeepActiveElement(), + 'Smart lock on/off toggle should be focused for settingId=203.'); + }); + test('Smart Lock signin disabled by default', function() { smartLockSubPage = createSmartLockSubPage();
diff --git a/chrome/test/data/webui/settings/chromeos/multidevice_subpage_tests.js b/chrome/test/data/webui/settings/chromeos/multidevice_subpage_tests.js index 79dfc68..4a0dc79 100644 --- a/chrome/test/data/webui/settings/chromeos/multidevice_subpage_tests.js +++ b/chrome/test/data/webui/settings/chromeos/multidevice_subpage_tests.js
@@ -9,6 +9,9 @@ // #import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js'; // #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; // #import {TestMultideviceBrowserProxy} from './test_multidevice_browser_proxy.m.js'; +// #import {waitAfterNextRender} from 'chrome://test/test_util.m.js'; +// #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js'; +// clang-format on suite('Multidevice', function() { let multideviceSubpage = null; @@ -118,6 +121,7 @@ teardown(function() { multideviceSubpage.remove(); + settings.Router.getInstance().resetRouteForTesting(); }); test('individual features appear only if host is verified', function() { @@ -261,4 +265,70 @@ assertTrue(setUpButton.tagName.includes('BUTTON')); assertFalse(setUpButton.disabled); }); + + test('Deep link to setup messages', async () => { + loadTimeData.overrideValues({ + isDeepLinkingEnabled: true, + }); + setAndroidSmsPairingComplete(false); + Polymer.dom.flush(); + + const params = new URLSearchParams; + params.append('settingId', '205'); + settings.Router.getInstance().navigateTo( + settings.routes.MULTIDEVICE_FEATURES, params); + + Polymer.dom.flush(); + + const deepLinkElement = + multideviceSubpage.$$('#messagesItem > [slot=feature-controller]'); + await test_util.waitAfterNextRender(deepLinkElement); + assertEquals( + deepLinkElement, getDeepActiveElement(), + 'Setup messages button should be focused for settingId=205.'); + }); + + test('Deep link to messages on/off', async () => { + loadTimeData.overrideValues({ + isDeepLinkingEnabled: true, + }); + setAndroidSmsPairingComplete(true); + Polymer.dom.flush(); + + const params = new URLSearchParams; + params.append('settingId', '206'); + settings.Router.getInstance().navigateTo( + settings.routes.MULTIDEVICE_FEATURES, params); + + Polymer.dom.flush(); + + const deepLinkElement = multideviceSubpage.$$('#messagesItem') + .$$('settings-multidevice-feature-toggle') + .$$('cr-toggle'); + await test_util.waitAfterNextRender(deepLinkElement); + assertEquals( + deepLinkElement, getDeepActiveElement(), + 'Messages on/off toggle should be focused for settingId=206.'); + }); + + test('Deep link to phone hub on/off', async () => { + loadTimeData.overrideValues({ + isDeepLinkingEnabled: true, + }); + + const params = new URLSearchParams; + params.append('settingId', '209'); + settings.Router.getInstance().navigateTo( + settings.routes.MULTIDEVICE_FEATURES, params); + + Polymer.dom.flush(); + + const deepLinkElement = multideviceSubpage.$$('#phoneHubItem') + .$$('settings-multidevice-feature-toggle') + .$$('cr-toggle'); + await test_util.waitAfterNextRender(deepLinkElement); + assertEquals( + deepLinkElement, getDeepActiveElement(), + 'Phone hub on/off toggle should be focused for settingId=209.'); + }); });
diff --git a/chrome/test/data/webui/settings/chromeos/nearby_share_subpage_tests.js b/chrome/test/data/webui/settings/chromeos/nearby_share_subpage_tests.js index 6d5f72c..621b15ec 100644 --- a/chrome/test/data/webui/settings/chromeos/nearby_share_subpage_tests.js +++ b/chrome/test/data/webui/settings/chromeos/nearby_share_subpage_tests.js
@@ -6,10 +6,12 @@ // #import {TestBrowserProxy} from '../../test_browser_proxy.m.js'; // #import {assertEquals} from '../../chai_assert.js'; // #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; -// #import {NearbyAccountManagerBrowserProxy, NearbyAccountManagerBrowserProxyImpl, setNearbyShareSettingsForTesting, setReceiveManagerForTesting, setContactManagerForTesting} from 'chrome://os-settings/chromeos/os_settings.js'; +// #import {NearbyAccountManagerBrowserProxy, NearbyAccountManagerBrowserProxyImpl, setNearbyShareSettingsForTesting, setReceiveManagerForTesting, setContactManagerForTesting, Router, routes} from 'chrome://os-settings/chromeos/os_settings.js'; // #import {FakeContactManager} from '../../nearby_share/shared/fake_nearby_contact_manager.m.js'; // #import {FakeNearbyShareSettings} from '../../nearby_share/shared/fake_nearby_share_settings.m.js'; // #import {FakeReceiveManager} from './fake_receive_manager.m.js' +// #import {waitAfterNextRender} from 'chrome://test/test_util.m.js'; +// #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js'; // clang-format on /** @implements {nearby_share.AccountManagerBrowserProxy} */ @@ -97,6 +99,7 @@ teardown(function() { subpage.remove(); + settings.Router.getInstance().resetRouteForTesting(); }); test('feature toggle button controls preference', function() { @@ -123,6 +126,25 @@ assertEquals('Off', onOffText.textContent.trim()); }); + test('Deep link to nearby share on/off toggle', async () => { + loadTimeData.overrideValues({ + isDeepLinkingEnabled: true, + }); + + const params = new URLSearchParams; + params.append('settingId', '208'); + settings.Router.getInstance().navigateTo( + settings.routes.NEARBY_SHARE, params); + + Polymer.dom.flush(); + + const deepLinkElement = featureToggleButton.$$('cr-toggle'); + await test_util.waitAfterNextRender(deepLinkElement); + assertEquals( + deepLinkElement, getDeepActiveElement(), + 'Nearby share on/off toggle should be focused for settingId=208.'); + }); + test('update device name preference', function() { assertEquals('', subpage.prefs.nearby_sharing.device_name.value);
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js b/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js index 20aa6d9..0bd0589 100644 --- a/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js +++ b/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js
@@ -17,6 +17,7 @@ GEN('#include "ash/public/cpp/ash_features.h"'); GEN('#include "build/branding_buildflags.h"'); +GEN('#include "chrome/browser/browser_features.h"'); GEN('#include "chrome/common/chrome_features.h"'); GEN('#include "chromeos/constants/chromeos_features.h"'); GEN('#include "content/public/test/browser_test.h"'); @@ -1007,6 +1008,7 @@ get extraLibraries() { return super.extraLibraries.concat([ BROWSER_SETTINGS_PATH + '../test_browser_proxy.js', + BROWSER_SETTINGS_PATH + '../test_util.js', 'test_multidevice_browser_proxy.js', 'multidevice_page_tests.js', ]); @@ -1019,7 +1021,7 @@ // Test fixture for the multidevice Smart Lock subpage. // eslint-disable-next-line no-var -var OSSettingsMultideviceSmartLockSubpageTest = +var OSSettingsMultideviceSmartLockSubPageTest = class extends OSSettingsBrowserTest { /** @override */ get browsePreload() { @@ -1038,13 +1040,13 @@ } }; -TEST_F('OSSettingsMultideviceSmartLockSubpageTest', 'AllJsTests', () => { +TEST_F('OSSettingsMultideviceSmartLockSubPageTest', 'AllJsTests', () => { mocha.run(); }); // Test fixture for the multidevice settings subpage. // eslint-disable-next-line no-var -var OSSettingsMultideviceSubpageTest = class extends OSSettingsBrowserTest { +var OSSettingsMultideviceSubPageTest = class extends OSSettingsBrowserTest { /** @override */ get browsePreload() { return super.browsePreload + @@ -1055,13 +1057,14 @@ get extraLibraries() { return super.extraLibraries.concat([ BROWSER_SETTINGS_PATH + '../test_browser_proxy.js', + BROWSER_SETTINGS_PATH + '../test_util.js', 'test_multidevice_browser_proxy.js', 'multidevice_subpage_tests.js', ]); } }; -TEST_F('OSSettingsMultideviceSubpageTest', 'AllJsTests', () => { +TEST_F('OSSettingsMultideviceSubPageTest', 'AllJsTests', () => { mocha.run(); }); @@ -1100,9 +1103,15 @@ } /** @override */ + get featureList() { + return {enabled: ['features::kNearbySharing']}; + } + + /** @override */ get extraLibraries() { return super.extraLibraries.concat([ - '../../test_browser_proxy.js', + BROWSER_SETTINGS_PATH + '../test_browser_proxy.js', + BROWSER_SETTINGS_PATH + '../test_util.js', '../../nearby_share/shared/fake_nearby_share_settings.js', '../../nearby_share/shared/fake_nearby_contact_manager.js', 'fake_receive_manager.js',
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js b/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js index ea70ea0..4c5233bd 100644 --- a/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js +++ b/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js
@@ -9,6 +9,7 @@ GEN('#include "build/branding_buildflags.h"'); GEN('#include "content/public/test/browser_test.h"'); GEN('#include "chromeos/constants/chromeos_features.h"'); +GEN('#include "chrome/browser/browser_features.h"'); /** Test fixture for shared Polymer 3 elements. */ // eslint-disable-next-line no-var @@ -72,6 +73,23 @@ TEST_F('OSSettingsOsLanguagesPageV2V3Test', 'All', () => mocha.run()); +// eslint-disable-next-line no-var +var OSSettingsNearbyShareSubPageV3Test = class extends OSSettingsV3BrowserTest { + /** @override */ + get browsePreload() { + return 'chrome://os-settings/test_loader.html?module=settings/chromeos/nearby_share_subpage_tests.m.js'; + } + + /** @override */ + get featureList() { + return { + enabled: super.featureList.enabled.concat(['features::kNearbySharing']) + }; + } +}; + +TEST_F('OSSettingsNearbyShareSubPageV3Test', 'All', () => mocha.run()); + [['AmbientModePage', 'ambient_mode_page_test.m.js'], ['BluetoothPage', 'bluetooth_page_tests.m.js'], ['DateTimePage', 'date_time_page_tests.m.js'], @@ -85,7 +103,6 @@ ['OsEditDictionaryPage', 'os_edit_dictionary_page_test.m.js'], ['OsLanguagesPage', 'os_languages_page_tests.m.js'], ['NearbyShareReceiveDialog', 'nearby_share_receive_dialog_tests.m.js'], - ['NearbyShareSubPage', 'nearby_share_subpage_tests.m.js'], ['ParentalControlsPage', 'parental_controls_page_test.m.js'], ['PeoplePage', 'os_people_page_test.m.js'], ['PeoplePageAccountManager', 'people_page_account_manager_test.m.js'],
diff --git a/chrome/test/data/webui/settings/chromeos/test_crostini_browser_proxy.js b/chrome/test/data/webui/settings/chromeos/test_crostini_browser_proxy.js index 268b818..9124562 100644 --- a/chrome/test/data/webui/settings/chromeos/test_crostini_browser_proxy.js +++ b/chrome/test/data/webui/settings/chromeos/test_crostini_browser_proxy.js
@@ -9,7 +9,7 @@ 'requestCrostiniInstallerView', 'requestRemoveCrostini', 'getCrostiniSharedPathsDisplayText', - 'getCrostiniSharedUsbDevices', + 'notifyCrostiniSharedUsbDevicesPageReady', 'setCrostiniUsbDeviceShared', 'removeCrostiniSharedPath', 'exportCrostiniContainer', @@ -84,9 +84,10 @@ } /** @override */ - getCrostiniSharedUsbDevices() { - this.methodCalled('getCrostiniSharedUsbDevices'); - return Promise.resolve(this.sharedUsbDevices); + notifyCrostiniSharedUsbDevicesPageReady() { + this.methodCalled('notifyCrostiniSharedUsbDevicesPageReady'); + cr.webUIListenerCallback( + 'crostini-shared-usb-devices-changed', this.sharedUsbDevices); } /** @override */ @@ -227,4 +228,4 @@ this.methodCalled('getCrostiniMicSharingEnabled'); return Promise.resolve(this.CrostiniMicSharingEnabled); } -} \ No newline at end of file +}
diff --git a/chrome/test/data/webui/settings/fake_language_settings_private.js b/chrome/test/data/webui/settings/fake_language_settings_private.js index c873d7cc..1d0025bc 100644 --- a/chrome/test/data/webui/settings/fake_language_settings_private.js +++ b/chrome/test/data/webui/settings/fake_language_settings_private.js
@@ -172,6 +172,14 @@ enabled: false, }, { + id: '_comp_ime_abcdefghijklmnopqrstuvwxyzabcdefxkb:us:intl', + displayName: 'US International keyboard', + languageCodes: ['en-US'], + tags: ['US International keyboard', 'English(United States)'], + enabled: false, + isProhibitedByPolicy: true, + }, + { id: '_comp_ime_abcdefghijklmnopqrstuvwxyzabcdefxkb:vi:vi', displayName: 'Vietnamese keyboard', languageCodes: ['vi'], @@ -504,6 +512,11 @@ type: chrome.settingsPrivate.PrefType.BOOLEAN, value: false, }); + fakePrefs.push({ + key: 'settings.language.allowed_input_methods', + type: chrome.settingsPrivate.PrefType.LIST, + value: [], + }); } return fakePrefs; }
diff --git a/chrome/test/data/webui/settings/languages_tests.js b/chrome/test/data/webui/settings/languages_tests.js index c4d6e09..4611667b 100644 --- a/chrome/test/data/webui/settings/languages_tests.js +++ b/chrome/test/data/webui/settings/languages_tests.js
@@ -138,7 +138,7 @@ test('modifying input methods', function() { assertEquals(2, languageHelper.languages.inputMethods.enabled.length); const inputMethods = languageHelper.getInputMethodsForLanguage('en-US'); - assertEquals(3, inputMethods.length); + assertEquals(4, inputMethods.length); // We can remove one input method. const dvorak =
diff --git a/chromeos/components/BUILD.gn b/chromeos/components/BUILD.gn index 0a1402c..678048a4 100644 --- a/chromeos/components/BUILD.gn +++ b/chromeos/components/BUILD.gn
@@ -57,6 +57,7 @@ if (!is_official_build) { deps += [ + "//chromeos/components/file_manager/resources:closure_compile", "//chromeos/components/sample_system_web_app_ui:closure_compile", "//chromeos/components/telemetry_extension_ui:closure_compile", ]
diff --git a/chromeos/components/camera_app_ui/resources/src/css/main.css b/chromeos/components/camera_app_ui/resources/src/css/main.css index 456ad89..e9eb423 100644 --- a/chromeos/components/camera_app_ui/resources/src/css/main.css +++ b/chromeos/components/camera_app_ui/resources/src/css/main.css
@@ -23,7 +23,8 @@ } button, -input { +input, +label { background-color: transparent; border-radius: 4px; border-style: none; @@ -555,7 +556,6 @@ background-color: rgba(24, 24, 24, 1); background-size: cover; height: var(--big-icon); - position: relative; width: var(--big-icon); } @@ -1133,6 +1133,7 @@ .menu-header, .menu-item { + --hover-color: rgba(255, 255, 255, 0.06); --toggled-color: rgb(140, 180, 245); align-items: center; @@ -1147,6 +1148,54 @@ text-align: left; } +button.menu-item:hover, +label.menu-item:hover { + background-color: var(--hover-color); +} + +/* Inkdrop effect. */ +button.menu-item, +label.menu-item { + overflow: hidden; +} + +body.tab-navigation button.menu-item:focus::after, +body.tab-navigation label.menu-item:focus::after { + bottom: 0; + top: 0; +} + +button.menu-item::before, +label.menu-item::before { + background: white; + border-radius: 50%; + content: ''; + height: 0; + left: var(--drop-x); + position: absolute; + top: var(--drop-y); + transform: translate(-50%, -50%); + width: 0; +} + +button.menu-item.animate::before, +label.menu-item.animate::before { + animation: inkdrop 500ms ease-out; +} + +@keyframes inkdrop { + 0% { + height: 0; + opacity: 0.6; + width: 0; + } + 100% { + height: calc(var(--drop-radius) * 2); + opacity: 0; + width: calc(var(--drop-radius) * 2); + } +} + .menu-item.resol-item { padding-left: 60px; } @@ -1232,6 +1281,10 @@ background-image: url(../images/settings_button_back.svg); } +.menu-header .icon:hover { + background-color: var(--hover-color); +} + #settings-gridtype .icon { background-image: url(../images/settings_grid_type.svg); }
diff --git a/chromeos/components/camera_app_ui/resources/src/js/main.js b/chromeos/components/camera_app_ui/resources/src/js/main.js index 829a05c..24c1265 100644 --- a/chromeos/components/camera_app_ui/resources/src/js/main.js +++ b/chromeos/components/camera_app_ui/resources/src/js/main.js
@@ -102,6 +102,7 @@ document.title = browserProxy.getI18nMessage('name'); util.setupI18nElements(document.body); this.setupToggles_(); + this.setupSettingEffect_(); const resolutionSettings = new ResolutionSettings( this.infoUpdater_, this.photoPreferrer_, this.videoPreferrer_); @@ -175,6 +176,15 @@ } /** + * Sets up inkdrop effect for settings view. + * @private + */ + setupSettingEffect_() { + dom.getAll('button.menu-item, label.menu-item', HTMLElement) + .forEach((el) => util.setInkdropEffect(el)); + } + + /** * Starts the app by loading the model and opening the camera-view. * @return {!Promise} */
diff --git a/chromeos/components/camera_app_ui/resources/src/js/util.js b/chromeos/components/camera_app_ui/resources/src/js/util.js index b69fde7..19c03db 100644 --- a/chromeos/components/camera_app_ui/resources/src/js/util.js +++ b/chromeos/components/camera_app_ui/resources/src/js/util.js
@@ -417,3 +417,24 @@ element.setAttribute('aria-label', browserProxy.getI18nMessage(label)); }); } + +/** + * Sets inkdrop effect on button or label in setting menu. + * @param {!HTMLElement} el + */ +export function setInkdropEffect(el) { + el.addEventListener('click', (e) => { + const tRect = + assertInstanceof(e.target, HTMLElement).getBoundingClientRect(); + const elRect = el.getBoundingClientRect(); + const dropX = tRect.left + e.offsetX - elRect.left; + const dropY = tRect.top + e.offsetY - elRect.top; + const maxDx = Math.max(Math.abs(dropX), Math.abs(elRect.width - dropX)); + const maxDy = Math.max(Math.abs(dropY), Math.abs(elRect.height - dropY)); + const radius = Math.hypot(maxDx, maxDy); + el.style.setProperty('--drop-x', `${dropX}px`); + el.style.setProperty('--drop-y', `${dropY}px`); + el.style.setProperty('--drop-radius', `${radius}px`); + animateOnce(el); + }); +}
diff --git a/chromeos/components/camera_app_ui/resources/src/js/views/settings.js b/chromeos/components/camera_app_ui/resources/src/js/views/settings.js index 2149e79c..1dd6ec3 100644 --- a/chromeos/components/camera_app_ui/resources/src/js/views/settings.js +++ b/chromeos/components/camera_app_ui/resources/src/js/views/settings.js
@@ -627,6 +627,8 @@ resolutions.forEach((r) => { const item = /** @type {!HTMLElement} */ ( document.importNode(this.resItemTempl_.content, true)); + const label = dom.getFrom(item, 'label', HTMLLabelElement); + util.setInkdropEffect(label); const input = dom.getFrom(item, 'input', HTMLInputElement); item.querySelector('span').textContent = optTextTempl(r, resolutions); input.name = menu.dataset['name'];
diff --git a/chromeos/components/diagnostics_ui/resources/BUILD.gn b/chromeos/components/diagnostics_ui/resources/BUILD.gn index 142d021..ec01810 100644 --- a/chromeos/components/diagnostics_ui/resources/BUILD.gn +++ b/chromeos/components/diagnostics_ui/resources/BUILD.gn
@@ -12,6 +12,8 @@ deps = [ ":diagnostics_app", ":diagnostics_card", + ":diagnostics_types", + ":mojo_interface_provider", ] } @@ -28,6 +30,13 @@ ] } +js_library("diagnostics_types") { +} + +js_library("mojo_interface_provider") { + deps = [ "//ui/webui/resources/js:cr.m" ] +} + html_to_js("web_components") { js_files = [ "diagnostics_app.js",
diff --git a/chromeos/components/diagnostics_ui/resources/diagnostics_app_resources.grd b/chromeos/components/diagnostics_ui/resources/diagnostics_app_resources.grd index 4c309b88..6f2ab16 100644 --- a/chromeos/components/diagnostics_ui/resources/diagnostics_app_resources.grd +++ b/chromeos/components/diagnostics_ui/resources/diagnostics_app_resources.grd
@@ -16,7 +16,9 @@ <include name="IDR_DIAGNOSTICS_APP_ICON" file="app_icon_192.png" type="BINDATA" /> <include name="IDR_DIAGNOSTICS_APP_INDEX_HTML" file="index.html" type="BINDATA" /> <include name="IDR_DIAGNOSTICS_APP_JS" file="${root_gen_dir}/chromeos/components/diagnostics_ui/resources/diagnostics_app.js" use_base_dir="false" type="BINDATA"/> + <include name="IDR_DIAGNOSTICS_MOJO_INTERFACE_PROVIDER_JS" file="mojo_interface_provider.js" type="BINDATA"/> <include name="IDR_DIAGNOSTICS_SHARED_CSS_JS" file="${root_gen_dir}/chromeos/components/diagnostics_ui/resources/diagnostics_shared_css.js" use_base_dir="false" type="BINDDATA"/> + <include name="IDR_DIAGNOSTICS_TYPES_JS" file="diagnostics_types.js" type="BINDATA"/> </includes> </release> </grit>
diff --git a/chromeos/components/diagnostics_ui/resources/diagnostics_types.js b/chromeos/components/diagnostics_ui/resources/diagnostics_types.js new file mode 100644 index 0000000..eea0249 --- /dev/null +++ b/chromeos/components/diagnostics_ui/resources/diagnostics_types.js
@@ -0,0 +1,18 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Type aliases for the mojo API. + * + * TODO(zentaro): When the fake API is replaced by mojo these can be + * re-aliased to the corresponding mojo types, or replaced by them. + */ + +/** + * Type alias for the SystemDataProviderInterface. + * TODO(zentaro): Replace with a real mojo type when implemented. + * @typedef {!Object} + */ +export let SystemDataProviderInterface;
diff --git a/chromeos/components/diagnostics_ui/resources/mojo_interface_provider.js b/chromeos/components/diagnostics_ui/resources/mojo_interface_provider.js new file mode 100644 index 0000000..530834c --- /dev/null +++ b/chromeos/components/diagnostics_ui/resources/mojo_interface_provider.js
@@ -0,0 +1,34 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import {assert} from 'chrome://resources/js/assert.m.js'; +import {SystemDataProviderInterface} from './diagnostics_types.js' + +/** + * @fileoverview + * Provides singleton access to mojo interfaces with the ability + * to override them with test/fake implementations. + */ + +/** + * @type {?SystemDataProviderInterface} + */ +let systemDataProvider = null; + +/** + * @param {!SystemDataProviderInterface} testProvider + */ +export function setSystemDataProviderForTesting(testProvider) { + systemDataProvider = testProvider; +} + +/** + * @return {!SystemDataProviderInterface} + */ +export function getSystemDataProvider() { + // TODO(zentaro): Instantiate a real mojo interface here. + assert(!!systemDataProvider); + + return systemDataProvider; +}
diff --git a/chromeos/components/file_manager/BUILD.gn b/chromeos/components/file_manager/BUILD.gn new file mode 100644 index 0000000..14a08c17 --- /dev/null +++ b/chromeos/components/file_manager/BUILD.gn
@@ -0,0 +1,31 @@ +# Copyright 2020 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//mojo/public/tools/bindings/mojom.gni") + +assert(is_chromeos, "File Manager is Chrome OS only") +assert(!is_official_build, "File Manager is only built for unofficial builds") + +mojom("file_manager_mojom") { + sources = [ "file_manager.mojom" ] +} + +static_library("file_manager_ui") { + sources = [ + "file_manager_page_handler.cc", + "file_manager_page_handler.h", + "file_manager_ui.cc", + "file_manager_ui.h", + "url_constants.cc", + "url_constants.h", + ] + + deps = [ + ":file_manager_mojom", + "//chromeos/constants", + "//chromeos/resources:file_manager_resources", + "//content/public/browser", + "//ui/webui", + ] +}
diff --git a/chromeos/components/file_manager/DEPS b/chromeos/components/file_manager/DEPS new file mode 100644 index 0000000..4cfbff5 --- /dev/null +++ b/chromeos/components/file_manager/DEPS
@@ -0,0 +1,6 @@ +include_rules = [ + # Do not add chrome here (use a delegate instead). + "+chromeos/grit/chromeos_file_manager_resources.h", + "+content/public/browser", + "+ui/webui", +]
diff --git a/chrome/browser/ui/webui/chromeos/file_manager/OWNERS b/chromeos/components/file_manager/OWNERS similarity index 100% rename from chrome/browser/ui/webui/chromeos/file_manager/OWNERS rename to chromeos/components/file_manager/OWNERS
diff --git a/chrome/browser/ui/webui/chromeos/file_manager/file_manager.mojom b/chromeos/components/file_manager/file_manager.mojom similarity index 100% rename from chrome/browser/ui/webui/chromeos/file_manager/file_manager.mojom rename to chromeos/components/file_manager/file_manager.mojom
diff --git a/chrome/browser/ui/webui/chromeos/file_manager/file_manager_page_handler.cc b/chromeos/components/file_manager/file_manager_page_handler.cc similarity index 77% rename from chrome/browser/ui/webui/chromeos/file_manager/file_manager_page_handler.cc rename to chromeos/components/file_manager/file_manager_page_handler.cc index 52255d05a..ff83729 100644 --- a/chrome/browser/ui/webui/chromeos/file_manager/file_manager_page_handler.cc +++ b/chromeos/components/file_manager/file_manager_page_handler.cc
@@ -2,15 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.h" +#include "chromeos/components/file_manager/file_manager_page_handler.h" #include "base/bind.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/webui/chromeos/file_manager/file_manager_page_handler.h" -#include "chrome/common/url_constants.h" -#include "chrome/grit/browser_resources.h" -#include "content/public/browser/web_ui.h" -#include "content/public/browser/web_ui_data_source.h" namespace chromeos { namespace file_manager {
diff --git a/chrome/browser/ui/webui/chromeos/file_manager/file_manager_page_handler.h b/chromeos/components/file_manager/file_manager_page_handler.h similarity index 79% rename from chrome/browser/ui/webui/chromeos/file_manager/file_manager_page_handler.h rename to chromeos/components/file_manager/file_manager_page_handler.h index 603c689..9cc7f316 100644 --- a/chrome/browser/ui/webui/chromeos/file_manager/file_manager_page_handler.h +++ b/chromeos/components/file_manager/file_manager_page_handler.h
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_FILE_MANAGER_FILE_MANAGER_PAGE_HANDLER_H_ -#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_FILE_MANAGER_FILE_MANAGER_PAGE_HANDLER_H_ +#ifndef CHROMEOS_COMPONENTS_FILE_MANAGER_FILE_MANAGER_PAGE_HANDLER_H_ +#define CHROMEOS_COMPONENTS_FILE_MANAGER_FILE_MANAGER_PAGE_HANDLER_H_ #include <memory> #include "base/macros.h" #include "base/timer/timer.h" -#include "chrome/browser/ui/webui/chromeos/file_manager/file_manager.mojom.h" +#include "chromeos/components/file_manager/file_manager.mojom.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" @@ -47,4 +47,4 @@ } // namespace file_manager } // namespace chromeos -#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_FILE_MANAGER_FILE_MANAGER_PAGE_HANDLER_H_ +#endif // CHROMEOS_COMPONENTS_FILE_MANAGER_FILE_MANAGER_PAGE_HANDLER_H_
diff --git a/chromeos/components/file_manager/file_manager_ui.cc b/chromeos/components/file_manager/file_manager_ui.cc new file mode 100644 index 0000000..b70e0d8 --- /dev/null +++ b/chromeos/components/file_manager/file_manager_ui.cc
@@ -0,0 +1,68 @@ +// Copyright (c) 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chromeos/components/file_manager/file_manager_ui.h" + +#include "base/memory/ptr_util.h" +#include "chromeos/components/file_manager/file_manager_page_handler.h" +#include "chromeos/components/file_manager/url_constants.h" +#include "chromeos/grit/chromeos_file_manager_resources.h" +#include "content/public/browser/web_contents.h" +#include "content/public/browser/web_ui.h" +#include "content/public/browser/web_ui_data_source.h" + +namespace chromeos { +namespace file_manager { + +FileManagerUI::FileManagerUI(content::WebUI* web_ui) + : MojoWebUIController(web_ui) { + auto source = base::WrapUnique(content::WebUIDataSource::Create( + chromeos::file_manager::kChromeUIFileManagerHost)); + // The HTML content loaded on chrome://file-manager. + source->AddResourcePath("", IDR_FILE_MANAGER_FILE_MANAGER_HTML); + + // The resources requested by chrome://file-manager HTML. + source->AddResourcePath("file_manager.css", + IDR_FILE_MANAGER_FILE_MANAGER_CSS); + source->AddResourcePath("file_manager.js", IDR_FILE_MANAGER_FILE_MANAGER_JS); + source->AddResourcePath("file_manager.mojom-lite.js", + IDR_FILE_MANAGER_MOJO_LITE_JS); + source->AddResourcePath("browser_proxy.js", + IDR_FILE_MANAGER_BROWSER_PROXY_JS); + +#if !DCHECK_IS_ON() + // If a user goes to an invalid url and non-DCHECK mode (DHECK = debug mode) + // is set, serve a default page so the user sees your default page instead + // of an unexpected error. But if DCHECK is set, the user will be a + // developer and be able to identify an error occurred. + source->SetDefaultResource(IDR_FILE_MANAGER_FILE_MANAGER_HTML); +#endif // !DCHECK_IS_ON() + + auto* browser_context = web_ui->GetWebContents()->GetBrowserContext(); + content::WebUIDataSource::Add(browser_context, source.release()); +} + +FileManagerUI::~FileManagerUI() = default; + +void FileManagerUI::BindInterface( + mojo::PendingReceiver<mojom::PageHandlerFactory> pending_receiver) { + if (page_factory_receiver_.is_bound()) { + page_factory_receiver_.reset(); + } + page_factory_receiver_.Bind(std::move(pending_receiver)); +} + +void FileManagerUI::CreatePageHandler( + mojo::PendingRemote<mojom::Page> pending_page, + mojo::PendingReceiver<mojom::PageHandler> pending_page_handler) { + DCHECK(pending_page.is_valid()); + + page_handler_ = std::make_unique<FileManagerPageHandler>( + std::move(pending_page_handler), std::move(pending_page)); +} + +WEB_UI_CONTROLLER_TYPE_IMPL(FileManagerUI) + +} // namespace file_manager +} // namespace chromeos
diff --git a/chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.h b/chromeos/components/file_manager/file_manager_ui.h similarity index 81% rename from chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.h rename to chromeos/components/file_manager/file_manager_ui.h index b33ab46..5d30f88 100644 --- a/chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.h +++ b/chromeos/components/file_manager/file_manager_ui.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_FILE_MANAGER_FILE_MANAGER_UI_H_ -#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_FILE_MANAGER_FILE_MANAGER_UI_H_ +#ifndef CHROMEOS_COMPONENTS_FILE_MANAGER_FILE_MANAGER_UI_H_ +#define CHROMEOS_COMPONENTS_FILE_MANAGER_FILE_MANAGER_UI_H_ #include <memory> -#include "chrome/browser/ui/webui/chromeos/file_manager/file_manager.mojom.h" +#include "chromeos/components/file_manager/file_manager.mojom.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" @@ -47,4 +47,4 @@ } // namespace file_manager } // namespace chromeos -#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_FILE_MANAGER_FILE_MANAGER_UI_H_ +#endif // CHROMEOS_COMPONENTS_FILE_MANAGER_FILE_MANAGER_UI_H_
diff --git a/chromeos/components/file_manager/resources/BUILD.gn b/chromeos/components/file_manager/resources/BUILD.gn new file mode 100644 index 0000000..5d64f74 --- /dev/null +++ b/chromeos/components/file_manager/resources/BUILD.gn
@@ -0,0 +1,17 @@ +# Copyright 2020 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//third_party/closure_compiler/compile_js.gni") + +js_library("file_manager_js") { + sources = [ + "browser_proxy.js", + "file_manager.js", + ] + deps = [ "//chromeos/components/file_manager:file_manager_mojom_js_library_for_compile" ] +} + +js_type_check("closure_compile") { + deps = [ ":file_manager_js" ] +}
diff --git a/chrome/browser/resources/chromeos/file_manager/browser_proxy.js b/chromeos/components/file_manager/resources/browser_proxy.js similarity index 100% rename from chrome/browser/resources/chromeos/file_manager/browser_proxy.js rename to chromeos/components/file_manager/resources/browser_proxy.js
diff --git a/chrome/browser/resources/chromeos/file_manager/file_manager.css b/chromeos/components/file_manager/resources/file_manager.css similarity index 98% rename from chrome/browser/resources/chromeos/file_manager/file_manager.css rename to chromeos/components/file_manager/resources/file_manager.css index 4a560669..2f32ae0 100644 --- a/chrome/browser/resources/chromeos/file_manager/file_manager.css +++ b/chromeos/components/file_manager/resources/file_manager.css
@@ -1,4 +1,3 @@ /* Copyright (c) 2020 The Chromium Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ -
diff --git a/chrome/browser/resources/chromeos/file_manager/file_manager.html b/chromeos/components/file_manager/resources/file_manager.html similarity index 100% rename from chrome/browser/resources/chromeos/file_manager/file_manager.html rename to chromeos/components/file_manager/resources/file_manager.html
diff --git a/chrome/browser/resources/chromeos/file_manager/file_manager.js b/chromeos/components/file_manager/resources/file_manager.js similarity index 88% rename from chrome/browser/resources/chromeos/file_manager/file_manager.js rename to chromeos/components/file_manager/resources/file_manager.js index 31beeeb..8ed4391 100644 --- a/chrome/browser/resources/chromeos/file_manager/file_manager.js +++ b/chromeos/components/file_manager/resources/file_manager.js
@@ -20,6 +20,6 @@ console.log('eh? ' + something + '. what? ' + other); }); -document.addEventListener('DOMContentLoaded', function() { - alert('DOMContentLoaded'); +document.addEventListener('DOMContentLoaded', () => { + console.info('File manager launched ...'); });
diff --git a/chromeos/components/file_manager/resources/file_manager_resources.grd b/chromeos/components/file_manager/resources/file_manager_resources.grd new file mode 100644 index 0000000..4044b190 --- /dev/null +++ b/chromeos/components/file_manager/resources/file_manager_resources.grd
@@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<grit latest_public_release="0" current_release="1" output_all_resource_defines="false"> + <outputs> + <output filename="grit/chromeos_file_manager_resources.h" type="rc_header"> + <emit emit_type='prepend'></emit> + </output> + <output filename="grit/chromeos_file_manager_resources_map.cc" + type="resource_file_map_source" /> + <output filename="grit/chromeos_file_manager_resources_map.h" + type="resource_map_header" /> + <output filename="chromeos_file_manager_resources.pak" type="data_package" /> + </outputs> + <release seq="1"> + <includes> + <if expr="is_official_build == false"> + <!-- Privileged app host contents. --> + <include name="IDR_FILE_MANAGER_BROWSER_PROXY_JS" file="browser_proxy.js" type="BINDATA" /> + <include name="IDR_FILE_MANAGER_FILE_MANAGER_HTML" file="file_manager.html" type="BINDATA" /> + <include name="IDR_FILE_MANAGER_FILE_MANAGER_CSS" file="file_manager.css" type="BINDATA" /> + <include name="IDR_FILE_MANAGER_FILE_MANAGER_JS" file="file_manager.js" type="BINDATA" /> + <include name="IDR_FILE_MANAGER_ICON_192" file="icon192.png" type="BINDATA" /> + + <!-- Mojo resources --> + <include name="IDR_FILE_MANAGER_MOJO_LITE_JS" + file="$root_gen_dir\chromeos\components\file_manager\file_manager.mojom-lite.js" + use_base_dir="false" + type="BINDATA" /> + </if> + </includes> + </release> +</grit> +
diff --git a/chromeos/components/file_manager/resources/icon192.png b/chromeos/components/file_manager/resources/icon192.png new file mode 100644 index 0000000..b49fdee --- /dev/null +++ b/chromeos/components/file_manager/resources/icon192.png Binary files differ
diff --git a/chromeos/components/file_manager/url_constants.cc b/chromeos/components/file_manager/url_constants.cc new file mode 100644 index 0000000..c4be8375 --- /dev/null +++ b/chromeos/components/file_manager/url_constants.cc
@@ -0,0 +1,14 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chromeos/components/file_manager/url_constants.h" + +namespace chromeos { +namespace file_manager { + +constexpr char kChromeUIFileManagerHost[] = "file-manager"; +constexpr char kChromeUIFileManagerURL[] = "chrome://file-manager"; + +} // namespace file_manager +} // namespace chromeos
diff --git a/chromeos/components/file_manager/url_constants.h b/chromeos/components/file_manager/url_constants.h new file mode 100644 index 0000000..143d697 --- /dev/null +++ b/chromeos/components/file_manager/url_constants.h
@@ -0,0 +1,17 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROMEOS_COMPONENTS_FILE_MANAGER_URL_CONSTANTS_H_ +#define CHROMEOS_COMPONENTS_FILE_MANAGER_URL_CONSTANTS_H_ + +namespace chromeos { +namespace file_manager { + +extern const char kChromeUIFileManagerHost[]; +extern const char kChromeUIFileManagerURL[]; + +} // namespace file_manager +} // namespace chromeos + +#endif // CHROMEOS_COMPONENTS_FILE_MANAGER_URL_CONSTANTS_H_
diff --git a/chromeos/constants/chromeos_features.cc b/chromeos/constants/chromeos_features.cc index 22c11987..408b547 100644 --- a/chromeos/constants/chromeos_features.cc +++ b/chromeos/constants/chromeos_features.cc
@@ -380,7 +380,7 @@ // Enables a unique URL for each path in CrOS settings. // This allows deep linking to individual settings, i.e. in settings search. const base::Feature kOsSettingsDeepLinking{"OsSettingsDeepLinking", - base::FEATURE_DISABLED_BY_DEFAULT}; + base::FEATURE_ENABLED_BY_DEFAULT}; // Flips chrome://os-settings to show Polymer 3 version const base::Feature kOsSettingsPolymer3{"OsSettingsPolymer3",
diff --git a/chromeos/printing/ppd_provider_v3.cc b/chromeos/printing/ppd_provider_v3.cc index ed4afbc2..80786c85 100644 --- a/chromeos/printing/ppd_provider_v3.cc +++ b/chromeos/printing/ppd_provider_v3.cc
@@ -25,7 +25,6 @@ #include "chromeos/printing/printer_config_cache.h" #include "chromeos/printing/printer_configuration.h" #include "chromeos/printing/printing_constants.h" -#include "net/base/backoff_entry.h" #include "net/base/filename_util.h" namespace chromeos { @@ -37,24 +36,6 @@ // See also: struct MethodDeferralContext constexpr size_t kMethodDeferralLimit = 20; -// Backoff policy for retrying -// PpdProviderImpl::TryToGetMetadataManagerLocale(). Specifies that we -// * perform the first retry with a 1s delay, -// * double the retry delay thereafter, and -// * cap the retry delay at 32s. -// -// We perform backoff to prevent the PpdProviderImpl from running at -// full sequence speed if it continuously fails to obtain a metadata -// locale. -constexpr net::BackoffEntry::Policy kBackoffPolicy{ - /*num_errors_to_ignore=*/0, - /*initial_delay_ms=*/1000, - /*multiply_factor=*/2.0, - /*jitter_factor=*/0.0, - /*maximum_backoff_ms=*/32000LL, - /*entry_lifetime_ms=*/-1LL, - /*always_use_initial_delay=*/true}; - // Age limit for time-sensitive API calls. Typically denotes "Please // respond with data no older than kMaxDataAge." Arbitrarily chosen. constexpr base::TimeDelta kMaxDataAge = base::TimeDelta::FromMinutes(30LL); @@ -107,7 +88,7 @@ // prevent infinite re-enqueueing of public methods once the queue // is full. struct MethodDeferralContext { - MethodDeferralContext() : backoff_entry(&kBackoffPolicy) {} + MethodDeferralContext() = default; ~MethodDeferralContext() = default; // This struct is not copyable. @@ -146,6 +127,9 @@ bool IsFull() { return deferred_methods.size() >= kMethodDeferralLimit; } + // Whether an attempt to get the metadata locale is ongoing. + bool metadata_locale_fetch_is_ongoing = false; + // This bool is checked during execution of a queue-able public method // of PpdProviderImpl. If it is true, then // 1. the current queue-able public method was previously enqueued, @@ -155,10 +139,6 @@ bool current_method_is_being_failed = false; base::queue<base::OnceCallback<void()>> deferred_methods; - - // Implements retry backoff for - // PpdProviderImpl::TryToGetMetadataManagerLocale(). - net::BackoffEntry backoff_entry; }; // This class implements the PpdProvider interface for the v3 metadata @@ -179,8 +159,6 @@ file_task_runner_(base::ThreadPool::CreateSequencedTaskRunner( {base::TaskPriority::USER_VISIBLE, base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})) { - // Immediately attempts to obtain a metadata locale. - TryToGetMetadataManagerLocale(); } void ResolveManufacturers(ResolveManufacturersCallback cb) override { @@ -201,6 +179,8 @@ deferral_context_->FailOneEnqueuedMethod(); DCHECK(!deferral_context_->IsFull()); } + TryToGetMetadataManagerLocale(); + base::OnceCallback<void()> this_method = base::BindOnce(&PpdProviderImpl::ResolveManufacturers, weak_factory_.GetWeakPtr(), std::move(cb)); @@ -329,6 +309,8 @@ deferral_context_->FailOneEnqueuedMethod(); DCHECK(!deferral_context_->IsFull()); } + TryToGetMetadataManagerLocale(); + base::OnceCallback<void()> this_method = base::BindOnce( &PpdProviderImpl::ReverseLookup, weak_factory_.GetWeakPtr(), effective_make_and_model, std::move(cb)); @@ -416,17 +398,21 @@ return file_contents; } - // Readies |metadata_manager_| to call methods which require a - // successful callback from PpdMetadataManager::GetLocale(). + // Requests that |metadata_manager_| obtain a metadata locale so that + // |this| can call its locale-sensitive methods. // // |this| is largely useless if its |metadata_manager_| is not ready // to traffick in locale-sensitive PPD metadata, so we want this // method to eventually succeed. void TryToGetMetadataManagerLocale() { + if (deferral_context_->metadata_locale_fetch_is_ongoing) { + return; + } auto callback = base::BindOnce(&PpdProviderImpl::OnMetadataManagerLocaleGotten, weak_factory_.GetWeakPtr()); metadata_manager_->GetLocale(std::move(callback)); + deferral_context_->metadata_locale_fetch_is_ongoing = true; } // Evaluates true if our |version_| falls within the bounds set by @@ -444,21 +430,12 @@ // Callback fed to PpdMetadataManager::GetLocale(). void OnMetadataManagerLocaleGotten(bool succeeded) { + deferral_context_->metadata_locale_fetch_is_ongoing = false; if (!succeeded) { // Uh-oh, we concretely failed to get a metadata locale. We should // fail all outstanding deferred methods and let callers retry as // they see fit. deferral_context_->FailAllEnqueuedMethods(); - - // Inform the BackoffEntry of our failure; let it adjust the - // retry delay. - deferral_context_->backoff_entry.InformOfRequest(false); - - base::SequencedTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&PpdProviderImpl::TryToGetMetadataManagerLocale, - weak_factory_.GetWeakPtr()), - deferral_context_->backoff_entry.GetTimeUntilRelease()); return; } deferral_context_->FlushAndPostAll();
diff --git a/chromeos/printing/ppd_provider_v3_unittest.cc b/chromeos/printing/ppd_provider_v3_unittest.cc index 4a71037..dcf63d9f 100644 --- a/chromeos/printing/ppd_provider_v3_unittest.cc +++ b/chromeos/printing/ppd_provider_v3_unittest.cc
@@ -249,6 +249,24 @@ void DiscardResolvePpd(PpdProvider::CallbackResultCode code, const std::string& contents) {} + // Calls the ResolveManufacturer() method of the |provider| and + // waits for its completion. Ignores the returned string values and + // returns whether the result code was + // PpdProvider::CallbackResultCode::SUCCESS. + bool SuccessfullyResolveManufacturers(PpdProvider* provider) { + base::RunLoop run_loop; + PpdProvider::CallbackResultCode code; + provider->ResolveManufacturers(base::BindLambdaForTesting( + [&run_loop, &code]( + PpdProvider::CallbackResultCode result_code, + const std::vector<std::string>& unused_manufacturers) { + code = result_code; + run_loop.QuitClosure().Run(); + })); + run_loop.Run(); + return code == PpdProvider::CallbackResultCode::SUCCESS; + } + protected: // List of relevant endpoint for this FakeServer std::vector<std::pair<std::string, std::string>> server_contents() const { @@ -455,20 +473,11 @@ CreateProvider({"en", PpdCacheRunLocation::kInBackgroundThreads, PropagateLocaleToMetadataManager::kDoNotPropagate}); - // The moment we constructed a provider, it will have requested a - // metadata locale. But we don't want it to ever obtain one: we - // want to fill up the deferral queue and test that behavior, without - // ever hitting the success _or_ failure cases in getting the metadata - // locale. - // - // The pending task is the FakePrinterConfigCache calling back to - // indicate failure. We have to take this one, but before we do, we - // can ask the FakePrinterConfigCache to pretend to be an infinitely - // slow server for future calls. - ASSERT_EQ(1UL, task_environment_.GetPendingMainThreadTaskCount()); + // Prevents the provider from ever getting a metadata locale. + // We want it to stall out, forcing it to perpetually defer method + // calls to ResolveManufacturers(). provider_backdoor_.manager_config_cache->DiscardFetchRequestFor( "metadata_v3/locales.json"); - task_environment_.FastForwardUntilNoTasksRemain(); for (int i = kMethodDeferralLimitForTesting; i >= 0; i--) { provider->ResolveManufacturers(base::BindOnce( @@ -495,20 +504,11 @@ CreateProvider({"en", PpdCacheRunLocation::kInBackgroundThreads, PropagateLocaleToMetadataManager::kDoNotPropagate}); - // The moment we constructed a provider, it will have requested a - // metadata locale. But we don't want it to ever obtain one: we - // want to fill up the deferral queue and test that behavior, without - // ever hitting the success _or_ failure cases in getting the metadata - // locale. - // - // The pending task is the FakePrinterConfigCache calling back to - // indicate failure. We have to take this one, but before we do, we - // can ask the FakePrinterConfigCache to pretend to be an infinitely - // slow server for future calls. - ASSERT_EQ(1UL, task_environment_.GetPendingMainThreadTaskCount()); + // Prevents the provider from ever getting a metadata locale. + // We want it to stall out, forcing it to perpetually defer method + // calls to ReverseLookup(). provider_backdoor_.manager_config_cache->DiscardFetchRequestFor( "metadata_v3/locales.json"); - task_environment_.FastForwardUntilNoTasksRemain(); for (int i = kMethodDeferralLimitForTesting; i >= 0; i--) { provider->ReverseLookup( @@ -536,15 +536,6 @@ PropagateLocaleToMetadataManager::kDoNotPropagate}); StartFakePpdServer(); - // The provider attempted to get a metadata locale as soon as it was - // constructed. The pending task on the sequence is a callback from - // the FakePrinterConfigCache indicating that it failed to get a - // metadata locale. We'll let that fail harmelssly; having called - // StartFakePpdServer(), the retry attempt will allow the provider to - // successfully obtain a metadata locale. - ASSERT_EQ(1UL, task_environment_.GetPendingMainThreadTaskCount()); - task_environment_.FastForwardUntilNoTasksRemain(); - // Issue two requests at the same time, both should be resolved properly. provider->ResolveManufacturers(base::BindOnce( &PpdProviderTest::CaptureResolveManufacturers, base::Unretained(this))); @@ -568,26 +559,13 @@ CreateProvider({"en", PpdCacheRunLocation::kInBackgroundThreads, PropagateLocaleToMetadataManager::kDoNotPropagate}); - // Unlike the above, there is no breaking out of the failure loop in - // which the provider attempts to fetch a metadata locale and the - // fake server indicates that none are forthcoming. - // - // Since the provider never stops trying to get the metadata locale, - // it's not appropriate to use things like RunUntilIdle() or - // FastForwardUntilNoTasksRemain(). - base::RunLoop run_loop; - // Issue two requests at the same time, both should resolve properly // (though they will fail). provider->ResolveManufacturers(base::BindOnce( &PpdProviderTest::CaptureResolveManufacturers, base::Unretained(this))); - provider->ResolveManufacturers(base::BindLambdaForTesting( - [this, &run_loop](PpdProvider::CallbackResultCode code, - const std::vector<std::string>& empty_manufacturers) { - this->CaptureResolveManufacturers(code, empty_manufacturers); - run_loop.QuitClosure().Run(); - })); - run_loop.Run(); + provider->ResolveManufacturers(base::BindOnce( + &PpdProviderTest::CaptureResolveManufacturers, base::Unretained(this))); + task_environment_.FastForwardUntilNoTasksRemain(); ASSERT_EQ(2UL, captured_resolve_manufacturers_.size()); EXPECT_EQ(PpdProvider::SERVER_ERROR, @@ -718,11 +696,10 @@ PropagateLocaleToMetadataManager::kDoPropagate}); StartFakePpdServer(); - // Same as the contents in test fixture's server_contents() above, - // but allows us to bypass PpdProvider::ResolveManufacturers(). + // Required setup calls to advance past PpdProvider's method deferral. ASSERT_TRUE(provider_backdoor_.metadata_manager->SetManufacturersForTesting( kDefaultManufacturersJson)); - task_environment_.RunUntilIdle(); + ASSERT_TRUE(SuccessfullyResolveManufacturers(provider.get())); provider->ResolvePrinters( "Manufacturer A", base::BindOnce(&PpdProviderTest::CaptureResolvePrinters, @@ -765,11 +742,10 @@ PropagateLocaleToMetadataManager::kDoPropagate}); StartFakePpdServer(); - // Same as the contents in test fixture's server_contents() above, - // but allows us to bypass PpdProvider::ResolveManufacturers(). + // Required setup calls to advance past PpdProvider's method deferral. ASSERT_TRUE(provider_backdoor_.metadata_manager->SetManufacturersForTesting( kDefaultManufacturersJson)); - task_environment_.RunUntilIdle(); + ASSERT_TRUE(SuccessfullyResolveManufacturers(provider.get())); provider->ResolvePrinters( "bogus_doesnt_exist", @@ -786,11 +762,10 @@ CreateProvider({"en", PpdCacheRunLocation::kInBackgroundThreads, PropagateLocaleToMetadataManager::kDoPropagate}); - // Same as the contents in test fixture's server_contents() above, - // but allows us to bypass PpdProvider::ResolveManufacturers(). + // Required setup calls to advance past PpdProvider's method deferral. ASSERT_TRUE(provider_backdoor_.metadata_manager->SetManufacturersForTesting( kDefaultManufacturersJson)); - task_environment_.RunUntilIdle(); + ASSERT_TRUE(SuccessfullyResolveManufacturers(provider.get())); provider->ResolvePrinters( "Manufacturer A", base::BindOnce(&PpdProviderTest::CaptureResolvePrinters,
diff --git a/chromeos/profiles/airmont.afdo.newest.txt b/chromeos/profiles/airmont.afdo.newest.txt index aefcdbc..af066dca 100644 --- a/chromeos/profiles/airmont.afdo.newest.txt +++ b/chromeos/profiles/airmont.afdo.newest.txt
@@ -1 +1 @@ -chromeos-chrome-amd64-airmont-87-4183.84-1598870250-benchmark-87.0.4247.0-r1-redacted.afdo.xz +chromeos-chrome-amd64-airmont-87-4247.0-1600077656-benchmark-87.0.4265.0-r1-redacted.afdo.xz
diff --git a/chromeos/profiles/broadwell.afdo.newest.txt b/chromeos/profiles/broadwell.afdo.newest.txt index a966a0d9..daa6ce6 100644 --- a/chromeos/profiles/broadwell.afdo.newest.txt +++ b/chromeos/profiles/broadwell.afdo.newest.txt
@@ -1 +1 @@ -chromeos-chrome-amd64-broadwell-87-4183.74-1598869788-benchmark-87.0.4247.0-r1-redacted.afdo.xz +chromeos-chrome-amd64-broadwell-87-4247.0-1600076215-benchmark-87.0.4265.0-r1-redacted.afdo.xz
diff --git a/chromeos/profiles/silvermont.afdo.newest.txt b/chromeos/profiles/silvermont.afdo.newest.txt index d90b1fa..b6f554c 100644 --- a/chromeos/profiles/silvermont.afdo.newest.txt +++ b/chromeos/profiles/silvermont.afdo.newest.txt
@@ -1 +1 @@ -chromeos-chrome-amd64-silvermont-87-4183.84-1598867895-benchmark-87.0.4247.0-r1-redacted.afdo.xz +chromeos-chrome-amd64-silvermont-87-4247.0-1600080536-benchmark-87.0.4265.0-r1-redacted.afdo.xz
diff --git a/chromeos/resources/BUILD.gn b/chromeos/resources/BUILD.gn index 8226d82a..ba1c806d 100644 --- a/chromeos/resources/BUILD.gn +++ b/chromeos/resources/BUILD.gn
@@ -66,6 +66,31 @@ ] } +# Resources used by chrome://file-manager +if (!is_official_build) { + grit("file_manager_resources") { + source = "../components/file_manager/resources/file_manager_resources.grd" + + outputs = [ + "grit/chromeos_file_manager_resources.h", + "grit/chromeos_file_manager_resources_map.cc", + "grit/chromeos_file_manager_resources_map.h", + "chromeos_file_manager_resources.pak", + ] + output_dir = "$root_gen_dir/chromeos" + + grit_flags = [ + "-E", + "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir), + ] + + deps = [ + "//chromeos/components/file_manager:file_manager_mojom_js", + "//mojo/public/js:bindings_lite", + ] + } +} + # Resources used by chrome://help-app, and parts of the sandboxed app it hosts # that do not come from the app bundle (below). grit("help_app_resources") {
diff --git a/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.cc b/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.cc index bfdd1327d..f202a26 100644 --- a/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.cc +++ b/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.cc
@@ -493,7 +493,7 @@ gfx::GpuMemoryBufferHandle gmb_handle; gmb_handle.type = gfx::NATIVE_PIXMAP; - DCHECK(!secure_mode_.has_value()); + DCHECK(secure_mode_.has_value()); if (*secure_mode_) { // Get protected output buffer associated with |handle_fd|. // Duplicating handle here is needed as ownership of passed fd is
diff --git a/components/autofill/android/java/strings/translations/autofill_strings_nl.xtb b/components/autofill/android/java/strings/translations/autofill_strings_nl.xtb index 3aa16fa..6301e43 100644 --- a/components/autofill/android/java/strings/translations/autofill_strings_nl.xtb +++ b/components/autofill/android/java/strings/translations/autofill_strings_nl.xtb
@@ -1,5 +1,5 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="nl"> -<translation id="1112374155460533568">Pop-upvenster van automatisch aanvullen wordt weergegeven</translation> +<translation id="1112374155460533568">Pop-upvenster van automatisch invullen wordt weergegeven</translation> </translationbundle> \ No newline at end of file
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_af.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_af.xtb index 761fab0..b4c3ea2 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_af.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_af.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Werf <ph name="SITE_NAME" /> bygevoeg</translation> <translation id="1383876407941801731">Soek</translation> <translation id="1384959399684842514">Aflaai is onderbreek</translation> +<translation id="1431402976894535801">Keer dat werwe weet wanneer jy teenwoordig is</translation> <translation id="1446450296470737166">Laat vol MIDI-toestelbeheer toe</translation> <translation id="1509960214886564027">Kenmerke op baie werwe kan breek</translation> <translation id="1620510694547887537">Kamera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Maak kitsprogram oop</translation> <translation id="2148716181193084225">Vandag</translation> <translation id="2182457891543959921">Vra voordat werwe toegelaat word om 'n 3D-kaart van jou omgewing te skep of kameraposisie na te spoor (aanbeveel)</translation> +<translation id="2187243482123994665">Gebruikerteenwoordigheid</translation> <translation id="2212565012507486665">Laat webkoekies toe</translation> <translation id="2228071138934252756">Om <ph name="APP_NAME" /> toegang tot jou kamera te gee, moet jy kamera ook in <ph name="BEGIN_LINK" />Android-instellings<ph name="END_LINK" /> aanskakel.</translation> <translation id="2289270750774289114">Vra wanneer 'n werf Bluetooth-toestelle in die omtrek wil ontdek (aanbeveel)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Videospeler</translation> <translation id="3115898365077584848">Wys inligting</translation> <translation id="3123473560110926937">Geblokkeer op sommige werwe</translation> +<translation id="3165371858310906303">Vra as 'n werf wil weet wanneer jy teenwoordig is</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> gestoorde data</translation> <translation id="321187648315454507">Om <ph name="APP_NAME" /> vir jou kennisgewings te laat stuur, moet jy kennisgewings ook in <ph name="BEGIN_LINK" />Android-instellings<ph name="END_LINK" /> aanskakel.</translation> <translation id="3227137524299004712">Mikrofoon</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Werfinstellings</translation> <translation id="4200726100658658164">Maak ligginginstellings oop</translation> <translation id="4226663524361240545">Kennisgewings kan die toestel laat vibreer</translation> -<translation id="4242533952199664413">Maak instellings oop</translation> <translation id="4259722352634471385">Navigasie is geblokkeer: <ph name="URL" /></translation> <translation id="4278390842282768270">Toegelaat</translation> <translation id="429312253194641664">'n Werf speel tans media</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Die kontakte wat jy kies, sal gedeel word met <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Wys</translation> <translation id="5301954838959518834">OK, het dit</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> en nog <ph name="NUM_MORE" /></translation> <translation id="5313967007315987356">Voeg werf by</translation> <translation id="5317780077021120954">Berg</translation> <translation id="5335288049665977812">Laat werwe toe om JavaScript te gebruik (aanbeveel)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Name</translation> <translation id="5489227211564503167">Tyd verstreke is <ph name="ELAPSED_TIME" /> van <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Blokkeer advertensies op werwe wat indringerige of misleidende advertensies wys</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" /> word toegelaat, <ph name="PERMISSION_2" /> word geblokkeer</translation> <translation id="5505264765875738116">Werwe kan nie vra om kennisgewings te stuur nie</translation> <translation id="5516455585884385570">Maak kennisgewinginstellings oop</translation> <translation id="5527111080432883924">Vra voordat werwe toegelaat word om teks en prente van die knipbord af te lees (aanbeveel)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Kamera is afgeskakel in Android-instellings</translation> <translation id="5710871682236653961">Vra voordat jy werwe toelaat om inligting te stuur en te ontvang wanneer jy op NFC-toestelle tik (aanbeveel)</translation> <translation id="5719847187258001597">Dit sal alle data en webkoekies uitvee wat deur <ph name="ORIGIN" /> of deur sy program op jou tuisskerm geberg is.</translation> +<translation id="5771720122942595109"><ph name="PERMISSION_1" /> word geblokkeer</translation> <translation id="5804241973901381774">Toestemmings</translation> <translation id="5860033963881614850">Af</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> en nog <ph name="NUM_MORE" /> word toegelaat</translation> <translation id="5876056640971328065">Onderbreek video</translation> <translation id="5916664084637901428">Aan</translation> <translation id="5922853908706496913">Deel tans jou skerm</translation> <translation id="5939518447894949180">Stel terug</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> – <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Beheer hierdie werf se toegang tot jou toestel</translation> <translation id="6040143037577758943">Maak toe</translation> <translation id="6042308850641462728">Meer</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Blokkeer derdeparty-webkoekies</translation> <translation id="6206551242102657620">Verbinding is veilig. Werfinligting</translation> <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" />-opsies</translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" /> en <ph name="PERMISSION_2" /> word geblokkeer.</translation> <translation id="6270391203985052864">Werwe kan vra om kennisgewings te stuur</translation> <translation id="6295158916970320988">Alle werwe</translation> <translation id="6320088164292336938">Vibreer</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Speel</translation> <translation id="6818926723028410516">Kies items</translation> <translation id="6864395892908308021">Hierdie toestel kan nie NFC lees nie</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, en nog <ph name="NUM_MORE" /> word geblokkeer</translation> <translation id="6910211073230771657">Uitgevee</translation> <translation id="6912998170423641340">Blokkeer werwe om teks en prente van die knipbord af te lees</translation> <translation id="6945221475159498467">Kies</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Kies prente</translation> <translation id="7243308994586599757">Opsies is naby die onderkant van die skerm beskikbaar</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> gekies</translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" /> en <ph name="PERMISSION_2" /> word toegelaat</translation> <translation id="7302486331832100261">Jy blokkeer gewoonlik kennisgewings. Tik op Besonderhede om toe te laat.</translation> <translation id="7423098979219808738">Vra eers</translation> <translation id="7423538860840206698">Geblokkeer om knipbord te lees</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Hierdie inhoud kom van <ph name="DOMAIN_NAME" /> af, afgelewer deur Google.</translation> <translation id="8116925261070264013">Gedemp</translation> <translation id="8131740175452115882">Bevestig</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" /> word toegelaat</translation> <translation id="8200772114523450471">Hervat</translation> <translation id="8206354486702514201">Hierdie instelling word deur jou administrateur afgedwing.</translation> <translation id="8249310407154411074">Skuif na bo</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb index c3d3de4c..e7a9e910 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676"><ph name="SITE_NAME" /> ጣቢያ ተክሏል</translation> <translation id="1383876407941801731">ፍለጋ </translation> <translation id="1384959399684842514">የሚወርደው ላፍታ ቆሟል</translation> +<translation id="1431402976894535801">ጣቢያዎችን እርስዎ የሚገኙ በሚሆኑበት ጊዜ እንዳያውቁ ያግዷቸው</translation> <translation id="1446450296470737166">ሙሉ የMIDI መሣሪያዎች መቆጣጠርን ያስችላል</translation> <translation id="1509960214886564027">በበርካታ ጣቢያዎች ላይ ያሉ ባሕሪያት ሊሰበሩ ይችላሉ</translation> <translation id="1620510694547887537">ካሜራ</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">ቅጽበታዊ መተግበሪያን ክፈት</translation> <translation id="2148716181193084225">ዛሬ</translation> <translation id="2182457891543959921">ጣቢያዎች የዙሪያዎ የ3ል ካርታ እንዲፈጥሩ ወይም የካሜራ ቦታን እንዲከታተል ከመፍቀድ በፊት ጠይቅ (የሚመከር)</translation> +<translation id="2187243482123994665">የተጠቃሚ ተገኝነት</translation> <translation id="2212565012507486665">ኩኪዎችን ፍቀድ</translation> <translation id="2228071138934252756">የእርስዎን ካሜራ <ph name="APP_NAME" /> እንዲደርስበት ለማድረግ፣ በ <ph name="BEGIN_LINK" />Android ቅንብሮች<ph name="END_LINK" /> ውስጥ ካሜራን በተጨማሪ ያብሩ።</translation> <translation id="2289270750774289114">አንድ ጣቢያ በአቅራቢያ ያሉ ብሉቱዝ መሣሪያዎችን ፈልጎ ለማግኘት ሲፈልግ ጠይቅ (የሚመከር)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">ቪዲዮ ማጫወቻ</translation> <translation id="3115898365077584848">መረጃ አሳይ</translation> <translation id="3123473560110926937">በአንዳንድ ጣቢያዎች ላይ ታግዷል</translation> +<translation id="3165371858310906303">አንድ ጣቢያ እርስዎ የሚገኙ በሚሆኑበት ጊዜ ማወቅ ሲፈልግ ጠይቅ</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> የተከማቸ ውሂብ</translation> <translation id="321187648315454507"><ph name="APP_NAME" /> ማሳወቂያዎችን እንዲልክልዎት ለማድረግ፣ በተጨማሪ በ <ph name="BEGIN_LINK" />Android ቅንብሮች<ph name="END_LINK" /> ውስጥ ማሳወቂያዎችን ያብሩ።</translation> <translation id="3227137524299004712">ማይክሮፎን</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">የጣቢያ ቅንብሮች</translation> <translation id="4200726100658658164">የአካባቢ ቅንብሮችን ክፈት</translation> <translation id="4226663524361240545">ማሳወቂያዎች መሣሪያውን እንዲነዝር ሊያደርጉት ይችላሉ</translation> -<translation id="4242533952199664413">ቅንብሮችን ክፈት</translation> <translation id="4259722352634471385">ዳሰሳ ታግዷል፦ <ph name="URL" /></translation> <translation id="4278390842282768270">ተፈቅዷል</translation> <translation id="429312253194641664">አንድ ጣቢያ ሚዲያን በማጫወት ላይ ነው</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">የመረጧቸው እውቂያዎች ለ<ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ይጋራሉ።</translation> <translation id="5300589172476337783">አሳይ</translation> <translation id="5301954838959518834">እሺ፣ ገባኝ</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />፣ <ph name="PERMISSION_2" /> እና <ph name="NUM_MORE" /> ተጨማሪ</translation> <translation id="5313967007315987356">ጣቢያ አክል</translation> <translation id="5317780077021120954">አስቀምጥ</translation> <translation id="5335288049665977812">ጣቢያዎች ጃቫስክሪፕትን እንዲያሄዱ ፍቀድላቸው (የሚመከር)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">ስሞች</translation> <translation id="5489227211564503167">የጠፋው ጊዜ <ph name="ELAPSED_TIME" /> ከ<ph name="TOTAL_TIME" />።</translation> <translation id="5494752089476963479">ረባሽ ወይም አሳሳች ማስታወቂያዎችን ከሚያሳዩ ጣቢያዎች የሚመጡ ማስታወቂያዎችን አግድ</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" /> ተፈቅዶላቸዋል፣ <ph name="PERMISSION_2" /> ታግደዋል</translation> <translation id="5505264765875738116">ጣቢያዎች ማሳወቂያዎችን ለመላክ መጠየቅ አይችሉም</translation> <translation id="5516455585884385570">የማሳወቂያ ቅንብሮችን ክፈት</translation> <translation id="5527111080432883924">ጣቢያዎች ከቅንጥብ ሰሌዳ ጽሑፍ እና ምስሎችን እንዲያነብቡ ከመፍቀድ በፊት ጠይቅ (የሚመከር)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">ካሜራ በAndroid ቅንብሮች ውስጥ ጠፍቷል</translation> <translation id="5710871682236653961">የNFC መሣሪያዎችን መታ ሲያደርጉ ጣቢያዎች መረጃን እንዲልኩ እና እንዲቀበሉ ከመፍቀድዎ በፊት ይጠይቁ (የሚመከር)</translation> <translation id="5719847187258001597">ይህ በ<ph name="ORIGIN" /> ወይም በመነሻ ገጽዎ ላይ በመተግበሪያው የተከማቹ ሁሉንም ውሂብ እና ኩኪዎች ያጸዳል።</translation> +<translation id="5771720122942595109"><ph name="PERMISSION_1" /> ታግዷል</translation> <translation id="5804241973901381774">ፍቃዶች</translation> <translation id="5860033963881614850">አጥፋ</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />፣ <ph name="PERMISSION_2" /> እና <ph name="NUM_MORE" /> ተጨማሪ ተፈቅደዋል</translation> <translation id="5876056640971328065">ቪዲዮ ባለበት አቁም</translation> <translation id="5916664084637901428">በርቷል</translation> <translation id="5922853908706496913">ማያ ገጽዎን በማጋራት ላይ</translation> <translation id="5939518447894949180">ዳግም አስጀምር</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" />፣ <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">ይህ ጣቢያ የሚኖረው የመሣሪያዎን መዳረሻ ይቆጣጠሩ</translation> <translation id="6040143037577758943">ዝጋ</translation> <translation id="6042308850641462728">ተጨማሪ</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">የሦስተኛ ወገን ኩኪዎችን አግድ</translation> <translation id="6206551242102657620">ግንኙነት ደህንነቱ የተጠበቀ ነው። የጣቢያ መረጃ</translation> <translation id="6216432067784365534">የ<ph name="NAME_OF_LIST_ITEM" /> አማራጮች</translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" /> እና <ph name="PERMISSION_2" /> ታግደዋል</translation> <translation id="6270391203985052864">ጣቢያዎች ማሳወቂያዎችን ለመላክ መጠየቅ ይችላሉ</translation> <translation id="6295158916970320988">ሁሉም ጣቢያዎች</translation> <translation id="6320088164292336938">ንዘር</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">አጫውት</translation> <translation id="6818926723028410516">ንጥሎችን ይምረጡ</translation> <translation id="6864395892908308021">ይህ መሣሪያ NFCን ማንበብ አይችልም</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />፣ <ph name="PERMISSION_2" /> እና <ph name="NUM_MORE" /> ተጨማሪ ታግደዋል</translation> <translation id="6910211073230771657">ተሰርዟል</translation> <translation id="6912998170423641340">ጣቢያዎች ከቅንጥብ ሰሌዳ ጽሑፍን እና ምስሎችን እንዳያነብቡ አግድ</translation> <translation id="6945221475159498467">ይምረጡ</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">ምስሎችን ይምረጡ</translation> <translation id="7243308994586599757">አማራጮች ከማያ ገጹ ግርጌ አጠገብ ይገኛሉ</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> ተመርጠዋል</translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" /> እና <ph name="PERMISSION_2" /> ተፈቅደዋል</translation> <translation id="7302486331832100261">ማሳወቂያዎችን ብዙውን ጊዜ ያግዳሉ። ለመፍቀድ፣ ዝርዝሮች ላይ መታ ያድርጉ።</translation> <translation id="7423098979219808738">መጀመሪያ ጠይቅ</translation> <translation id="7423538860840206698">ቅንጥብ ሰሌዳን ከማንበብ ታግዷል</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">ይህ ይዘት ከ<ph name="DOMAIN_NAME" /> የመጣ ነው፣ የተላከው በGoogle ነው።</translation> <translation id="8116925261070264013">ድምፀ ከል ተደርጓል</translation> <translation id="8131740175452115882">አረጋግጥ</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" /> ተፈቅዷል</translation> <translation id="8200772114523450471">ከቆመበት ቀጥል</translation> <translation id="8206354486702514201">ይህ ቅንብር በአስተዳዳሪዎ ነው በግዳጅ እንዲፈጸም የተደረገው።</translation> <translation id="8249310407154411074">ወደ ላይ ውሰድ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb index dad1c92..f33f43e 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">إعدادات المواقع الإلكترونية</translation> <translation id="4200726100658658164">فتح إعدادات الموقع الجغرافي</translation> <translation id="4226663524361240545">يمكن أن تؤدي الإشعارات إلى اهتزاز الجهاز</translation> -<translation id="4242533952199664413">فتح الإعدادات</translation> <translation id="4259722352634471385">التنقل محظور: <ph name="URL" /></translation> <translation id="4278390842282768270">منح الإذن</translation> <translation id="429312253194641664">تفعيل موقع إلكتروني للوسائط</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb index 2fc03cd..41c040f 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">ছাইটৰ ছেটিংসমূহ</translation> <translation id="4200726100658658164">অৱস্থানৰ ছেটিংসমূহ খোলক</translation> <translation id="4226663524361240545">জাননীয়ে ডিভাইচটো কম্পন কৰিব পাৰে</translation> -<translation id="4242533952199664413">ছেটিংসমূহ খোলক</translation> <translation id="4259722352634471385">নেভিগে’শ্বন অৱৰোধ কৰা আছে: <ph name="URL" /></translation> <translation id="4278390842282768270">অনুমতি দিয়া হৈছে</translation> <translation id="429312253194641664">ছাইটটোৱে মিডিয়া প্লে’ কৰি আছে</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb index a84e83c..612b97a 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Sayt ayarları</translation> <translation id="4200726100658658164">Məkan Ayarlarını açın</translation> <translation id="4226663524361240545">Bildirişlər cihazı titrədə bilər</translation> -<translation id="4242533952199664413">Ayarları açın</translation> <translation id="4259722352634471385">Naviqasiya bloklandı: <ph name="URL" /></translation> <translation id="4278390842282768270">İcazə verilib</translation> <translation id="429312253194641664">Sayt media oxudur</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_be.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_be.xtb index 7f64be9..d6a7108 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_be.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_be.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Налады сайта</translation> <translation id="4200726100658658164">Адкрыць налады месцазнаходжання</translation> <translation id="4226663524361240545">Апавяшчэнні могуць уключаць вібрацыю прылады</translation> -<translation id="4242533952199664413">Адкрыць налады</translation> <translation id="4259722352634471385">Пераход па наступным адрасе заблакіраваны: <ph name="URL" /></translation> <translation id="4278390842282768270">Дазволена</translation> <translation id="429312253194641664">Сайт прайграе мультымедыя</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb index 870b0f6..b00be38 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Сайтът <ph name="SITE_NAME" /> е добавен</translation> <translation id="1383876407941801731">Търсене</translation> <translation id="1384959399684842514">Изтеглянето е на пауза</translation> +<translation id="1431402976894535801">Блокиране на сайтовете, така че да не знаят дали присъствате</translation> <translation id="1446450296470737166">Разр. на пълния контрол над MIDI</translation> <translation id="1509960214886564027">Функциите в много сайтове може да не работят правилно</translation> <translation id="1620510694547887537">Камера</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Отваряне на мигновеното приложение</translation> <translation id="2148716181193084225">Днес</translation> <translation id="2182457891543959921">Извеждане на запитване, преди да се разреши на сайтовете да създават триизмерна карта на заобикалящата ви среда или да следят позицията на камерата (препоръчително)</translation> +<translation id="2187243482123994665">Присъствие на потребителя</translation> <translation id="2212565012507486665">Разрешаване на „бисквитките“</translation> <translation id="2228071138934252756">За да разрешите на <ph name="APP_NAME" /> да осъществява достъп до камерата ви, тя трябва да бъде включена и от <ph name="BEGIN_LINK" />настройките на Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Извеждане на запитване, когато сайт иска да открива устройства с Bluetooth в близост (препоръчително)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Видеоплейър</translation> <translation id="3115898365077584848">Показване на информацията</translation> <translation id="3123473560110926937">Блокиране на някои сайтове</translation> +<translation id="3165371858310906303">Извеждане на запитване, когато сайт иска да знае дали присъствате</translation> <translation id="3198916472715691905">Съхранявани данни: <ph name="STORAGE_AMOUNT" /></translation> <translation id="321187648315454507">За да разрешите на <ph name="APP_NAME" /> да ви изпраща известия, те трябва да бъдат включени и от <ph name="BEGIN_LINK" />настройките на Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Микрофон</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Настройки за сайта</translation> <translation id="4200726100658658164">Отваряне на настройките за местоположението</translation> <translation id="4226663524361240545">Възможно е устройството да вибрира при известия</translation> -<translation id="4242533952199664413">Отваряне на настройките</translation> <translation id="4259722352634471385">Навигирането е блокирано: <ph name="URL" /></translation> <translation id="4278390842282768270">Разрешено</translation> <translation id="429312253194641664">Сайт възпроизвежда мултимедийно съдържание</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Избраните от вас контакти ще бъдат споделени със сайта <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Показване</translation> <translation id="5301954838959518834">Добре, разбрах</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и още <ph name="NUM_MORE" /></translation> <translation id="5313967007315987356">Добавяне на сайт</translation> <translation id="5317780077021120954">Запазване</translation> <translation id="5335288049665977812">Разрешаване на сайтовете да изпълняват JavaScript (препоръчително)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Имена</translation> <translation id="5489227211564503167">Изминало време: <ph name="ELAPSED_TIME" /> от <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Блокиране на рекламите от сайтове, на които се показват натрапчиви или подвеждащи реклами</translation> +<translation id="5502860503640766021">Достъпът до <ph name="PERMISSION_1" /> е разрешен, а до <ph name="PERMISSION_2" /> е блокиран</translation> <translation id="5505264765875738116">Сайтовете не могат да извеждат подкани за изпращане на известия</translation> <translation id="5516455585884385570">Отваряне на настройките за известия</translation> <translation id="5527111080432883924">Извеждане на запитване, преди да се разреши на сайтовете да четат текста и изображенията от буферната памет (препоръчително)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Камерата е изключена от настройките на Android</translation> <translation id="5710871682236653961">Извеждане на запитване преди разрешаване на сайтовете да изпращат и получават информация при допиране на устройства с NFC (препоръчително)</translation> <translation id="5719847187258001597">Всички съхранявани от <ph name="ORIGIN" /> или от съответното приложение на началния екран данни и „бисквитки“ ще бъдат изчистени.</translation> +<translation id="5771720122942595109">Достъпът до <ph name="PERMISSION_1" /> е блокиран</translation> <translation id="5804241973901381774">Разрешения</translation> <translation id="5860033963881614850">Изключено</translation> +<translation id="5863245810240683687">Достъпът до <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и още <ph name="NUM_MORE" /> е разрешен</translation> <translation id="5876056640971328065">Поставяне на видеоклипа на пауза</translation> <translation id="5916664084637901428">Включено</translation> <translation id="5922853908706496913">Екранът ви се споделя</translation> <translation id="5939518447894949180">Нулиране</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> – <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Контролирайте достъпа на този сайт до устройството ви</translation> <translation id="6040143037577758943">Затваряне</translation> <translation id="6042308850641462728">Още</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Блокиране на „бисквитките“ на трети страни</translation> <translation id="6206551242102657620">Връзката е защитена. Информация за сайта</translation> <translation id="6216432067784365534">Опции за <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" /> и <ph name="PERMISSION_2" /> са блокирани</translation> <translation id="6270391203985052864">Сайтовете могат да извеждат подкани за изпращане на известия</translation> <translation id="6295158916970320988">Всички сайтове</translation> <translation id="6320088164292336938">Вибриране</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Пускане</translation> <translation id="6818926723028410516">Избор на елементи</translation> <translation id="6864395892908308021">Това устройство не може да чете NFC</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и още <ph name="NUM_MORE" /> са блокирани</translation> <translation id="6910211073230771657">Изтрито</translation> <translation id="6912998170423641340">Забраняване на сайтовете да четат текста и изображенията от буферната памет</translation> <translation id="6945221475159498467">Избиране</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Избиране на изображения</translation> <translation id="7243308994586599757">Опциите са в долната част на екрана</translation> <translation id="7250468141469952378">Избрани: <ph name="ITEM_COUNT" /></translation> +<translation id="7260727271532453612">Достъпът до <ph name="PERMISSION_1" /> и <ph name="PERMISSION_2" /> е разрешен</translation> <translation id="7302486331832100261">Обикновено блокирате известията. За да разрешите, докоснете „Подробности“.</translation> <translation id="7423098979219808738">Първо ще се извежда запитване</translation> <translation id="7423538860840206698">Достъпът за четене до буферната памет е блокиран</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Това съдържание се показва от Google, а източникът му е <ph name="DOMAIN_NAME" />.</translation> <translation id="8116925261070264013">Заглушени</translation> <translation id="8131740175452115882">Потвърждаване</translation> +<translation id="8197286292360124385">Достъпът до <ph name="PERMISSION_1" /> е разрешен</translation> <translation id="8200772114523450471">Възобновяване</translation> <translation id="8206354486702514201">Тази настройка е наложена от администратора ви.</translation> <translation id="8249310407154411074">Преместване най-горе</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb index 24e805f2..bb801d2 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">সাইটের সেটিংস</translation> <translation id="4200726100658658164">লোকেশন সেটিংস খুলুন</translation> <translation id="4226663524361240545">বিজ্ঞপ্তি আসলে ডিভাইস ভাইব্রেট হতে পারে</translation> -<translation id="4242533952199664413">সেটিংস খুলুন</translation> <translation id="4259722352634471385">নেভিগেশন অবরুদ্ধ করা হয়েছে: <ph name="URL" /></translation> <translation id="4278390842282768270">মঞ্জুরিপ্রাপ্ত</translation> <translation id="429312253194641664">একটি সাইট মিডিয়া চালাচ্ছে</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb index 118516c..c340141 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Postavke web-lokacije</translation> <translation id="4200726100658658164">Otvaranje postavki lokacije</translation> <translation id="4226663524361240545">Obavještenja mogu aktivirati vibraciju uređaja</translation> -<translation id="4242533952199664413">Otvori postavke</translation> <translation id="4259722352634471385">Navigacija je blokirana: <ph name="URL" /></translation> <translation id="4278390842282768270">Dozvoljeno</translation> <translation id="429312253194641664">Web lokacija reproducira medij</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb index 0bcdc95..0001f3dc 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">El lloc <ph name="SITE_NAME" /> s'ha afegit</translation> <translation id="1383876407941801731">Cerca</translation> <translation id="1384959399684842514">La baixada s'ha posat en pausa</translation> +<translation id="1431402976894535801">Bloqueja els llocs web perquè no sàpiguen quan estàs present</translation> <translation id="1446450296470737166">Permet control total disp. MIDI</translation> <translation id="1509960214886564027">Pot ser que les funcions de molts llocs web no funcionin</translation> <translation id="1620510694547887537">Càmera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Obre l'aplicació instantània</translation> <translation id="2148716181193084225">Avui</translation> <translation id="2182457891543959921">Pregunta abans de permetre que els llocs web creïn un mapa en 3D del teu entorn o facin un seguiment de la posició de la càmera (opció recomanada)</translation> +<translation id="2187243482123994665">Presència d'usuari</translation> <translation id="2212565012507486665">Permet les galetes</translation> <translation id="2228071138934252756">Perquè <ph name="APP_NAME" /> pugui accedir a la càmera, també has d'activar-la a la <ph name="BEGIN_LINK" />configuració d'Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Pregunta'm quan un lloc web vulgui descobrir dispositius Bluetooth propers (opció recomanada)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Reproductor de vídeo</translation> <translation id="3115898365077584848">Mostra la informació</translation> <translation id="3123473560110926937">Bloquejat en alguns llocs web</translation> +<translation id="3165371858310906303">Pregunta'm quan un lloc web vulgui saber quan estic present</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> de dades desades</translation> <translation id="321187648315454507">Perquè <ph name="APP_NAME" /> et pugui enviar notificacions, també has d'activar-les a la <ph name="BEGIN_LINK" />configuració d'Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Micròfon</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Configuració del lloc web</translation> <translation id="4200726100658658164">Obre la configuració d'ubicació</translation> <translation id="4226663524361240545">És possible que les notificacions facin vibrar el dispositiu</translation> -<translation id="4242533952199664413">Obre la configuració</translation> <translation id="4259722352634471385">S'ha bloquejat la navegació: <ph name="URL" /></translation> <translation id="4278390842282768270">Permès</translation> <translation id="429312253194641664">Un lloc web està reproduint contingut multimèdia</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Els contactes que seleccionis es compartiran amb <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Mostra</translation> <translation id="5301954838959518834">D'acord</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> i <ph name="NUM_MORE" /> més</translation> <translation id="5313967007315987356">Afegeix un lloc web</translation> <translation id="5317780077021120954">Desa</translation> <translation id="5335288049665977812">Permet que els llocs web executin JavaScript (opció recomanada)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Noms</translation> <translation id="5489227211564503167">Temps transcorregut: <ph name="ELAPSED_TIME" /> de <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Bloqueja els anuncis als llocs web que mostren publicitat intrusiva o enganyosa</translation> +<translation id="5502860503640766021">S'ha permès <ph name="PERMISSION_1" />. S'ha bloquejat <ph name="PERMISSION_2" />.</translation> <translation id="5505264765875738116">Els llocs web no poden demanar-te permís per enviar-te notificacions</translation> <translation id="5516455585884385570">Obre la configuració de notificacions</translation> <translation id="5527111080432883924">Pregunta abans de permetre que els llocs web llegeixin el text i les imatges del porta-retalls (opció recomanada)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">La càmera està desactivada a la configuració d'Android</translation> <translation id="5710871682236653961">Pregunta abans de permetre que els llocs web enviïn i rebin informació quan toquis dispositius amb NFC (opció recomanada)</translation> <translation id="5719847187258001597">Amb aquesta acció s'esborraran totes les dades i galetes emmagatzemades per <ph name="ORIGIN" /> o per la seva aplicació de la pantalla d'inici.</translation> +<translation id="5771720122942595109">S'ha bloquejat <ph name="PERMISSION_1" /></translation> <translation id="5804241973901381774">Permisos</translation> <translation id="5860033963881614850">Desactivat</translation> +<translation id="5863245810240683687">S'han permès <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> i <ph name="NUM_MORE" /> més</translation> <translation id="5876056640971328065">Posa en pausa el vídeo</translation> <translation id="5916664084637901428">Activat</translation> <translation id="5922853908706496913">S'està compartint la pantalla</translation> <translation id="5939518447894949180">Restableix</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Controla l'accés al teu dispositiu d'aquest lloc web</translation> <translation id="6040143037577758943">Tanca</translation> <translation id="6042308850641462728">Més</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Bloqueja les galetes de tercers</translation> <translation id="6206551242102657620">La connexió és segura. Informació del lloc web</translation> <translation id="6216432067784365534">Opcions per a <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358">S'han bloquejat <ph name="PERMISSION_1" /> i <ph name="PERMISSION_2" /></translation> <translation id="6270391203985052864">Els llocs web poden demanar-te permís per enviar-te notificacions</translation> <translation id="6295158916970320988">Tots els llocs web</translation> <translation id="6320088164292336938">Vibració</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Reprodueix</translation> <translation id="6818926723028410516">Selecciona elements</translation> <translation id="6864395892908308021">Aquest dispositiu no pot llegir NFC</translation> +<translation id="6879016579615558281">S'han bloquejat <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> i <ph name="NUM_MORE" /> més</translation> <translation id="6910211073230771657">Suprimit</translation> <translation id="6912998170423641340">Impedeix que els llocs web llegeixin el text i les imatges del porta-retalls</translation> <translation id="6945221475159498467">Selecciona</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Selecciona imatges</translation> <translation id="7243308994586599757">Opcions disponibles a la part inferior de la pantalla</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> elements seleccionats</translation> +<translation id="7260727271532453612">S'han permès <ph name="PERMISSION_1" /> i <ph name="PERMISSION_2" /></translation> <translation id="7302486331832100261">Normalment bloqueges les notificacions. Per permetre-les, toca Detalls.</translation> <translation id="7423098979219808738">Pregunta abans</translation> <translation id="7423538860840206698">L'accés de lectura al porta-retalls està bloquejat</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Aquest contingut és del domini <ph name="DOMAIN_NAME" />, oferit per Google.</translation> <translation id="8116925261070264013">Silenciats</translation> <translation id="8131740175452115882">Confirma</translation> +<translation id="8197286292360124385">S'ha permès <ph name="PERMISSION_1" /></translation> <translation id="8200772114523450471">Reprèn</translation> <translation id="8206354486702514201">L'administrador aplica aquesta opció de configuració.</translation> <translation id="8249310407154411074">Mou a la part superior</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_cs.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_cs.xtb index 98df7570..2221b9d 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_cs.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_cs.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Byl přidán web <ph name="SITE_NAME" /></translation> <translation id="1383876407941801731">Vyhledávání</translation> <translation id="1384959399684842514">Stahování pozastaveno</translation> +<translation id="1431402976894535801">Nedovolit webům zjistit, kdy jste aktivní</translation> <translation id="1446450296470737166">Povolit úplné ovládání zařízení MIDI</translation> <translation id="1509960214886564027">Mnoho webů může přestat fungovat</translation> <translation id="1620510694547887537">Kamera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Otevřít okamžitou aplikaci</translation> <translation id="2148716181193084225">Dnes</translation> <translation id="2182457891543959921">Předtím, než webům bude povoleno vytvořit 3D mapu vašeho okolí nebo sledovat polohu kamery, se zeptat (doporučeno)</translation> +<translation id="2187243482123994665">Aktivita uživatele</translation> <translation id="2212565012507486665">Povolit cookies</translation> <translation id="2228071138934252756">Pokud aplikaci <ph name="APP_NAME" /> chcete umožnit přístup k fotoaparátu, zapněte fotoaparát také v <ph name="BEGIN_LINK" />Nastavení Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Zeptat se, když chce web objevit zařízení Bluetooth v okolí (doporučeno)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Přehrávač videa</translation> <translation id="3115898365077584848">Zobrazit informace</translation> <translation id="3123473560110926937">Na některých webech blokováno</translation> +<translation id="3165371858310906303">Zeptat se, když chce web vědět, kdy jste aktivní</translation> <translation id="3198916472715691905">Uložená data: <ph name="STORAGE_AMOUNT" /></translation> <translation id="321187648315454507">Pokud aplikaci <ph name="APP_NAME" /> chcete povolit, aby vám zasílala oznámení, zapněte oznámení také v <ph name="BEGIN_LINK" />Natavení Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Mikrofon</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Nastavení webu</translation> <translation id="4200726100658658164">Otevřít nastavení polohy</translation> <translation id="4226663524361240545">Oznámení mohou aktivovat vibraci</translation> -<translation id="4242533952199664413">Otevřít Nastavení</translation> <translation id="4259722352634471385">Navigace je blokována: <ph name="URL" /></translation> <translation id="4278390842282768270">Povoleno</translation> <translation id="429312253194641664">Web přehrává média</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Vybrané kontakty budou sdíleny s webem <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Zobrazit</translation> <translation id="5301954838959518834">Dobře, rozumím</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> a další (<ph name="NUM_MORE" />)</translation> <translation id="5313967007315987356">Přidat web</translation> <translation id="5317780077021120954">Uložit</translation> <translation id="5335288049665977812">Povolit webům spouštět JavaScript (doporučeno)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Názvy</translation> <translation id="5489227211564503167">Uplynulá doba: <ph name="ELAPSED_TIME" /> z <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Blokovat reklamy na webech, které zobrazují obtěžující nebo zavádějící reklamy</translation> +<translation id="5502860503640766021">Oprávnění <ph name="PERMISSION_1" /> je povoleno, oprávnění <ph name="PERMISSION_2" /> je blokováno</translation> <translation id="5505264765875738116">Weby nemohou žádat o oprávnění zasílat vám oznámení</translation> <translation id="5516455585884385570">Otevřít nastavení oznámení</translation> <translation id="5527111080432883924">Zeptat se, než bude webům povolen přístup k textu a obrázkům zkopírovaným do schránky (doporučeno)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Fotoaparát je vypnutý v nastavení zařízení Android</translation> <translation id="5710871682236653961">Když se dotknete zařízení NFC, nejdříve se zeptat a teprve poté webu případně povolit odesílání a příjem informací (doporučeno)</translation> <translation id="5719847187258001597">Tímto vymažete veškerá data a soubory cookie, které uložil web <ph name="ORIGIN" /> nebo jeho aplikace na ploše.</translation> +<translation id="5771720122942595109">Oprávnění <ph name="PERMISSION_1" /> je zablokováno</translation> <translation id="5804241973901381774">Oprávnění</translation> <translation id="5860033963881614850">Vypnuto</translation> +<translation id="5863245810240683687">Povolená oprávnění: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> a další (<ph name="NUM_MORE" />)</translation> <translation id="5876056640971328065">Pozastavit video</translation> <translation id="5916664084637901428">Zapnuto</translation> <translation id="5922853908706496913">Sdílíte obrazovku</translation> <translation id="5939518447894949180">Resetovat</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> – <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Spravujte přístup tohoto webu k vašemu zařízení</translation> <translation id="6040143037577758943">Zavřít</translation> <translation id="6042308850641462728">Více</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Blokovat soubory cookie třetích stran</translation> <translation id="6206551242102657620">Připojení je zabezpečené. Informace o webu</translation> <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> – možnosti</translation> +<translation id="6262279340360821358">Oprávnění <ph name="PERMISSION_1" /> a <ph name="PERMISSION_2" /> jsou zablokována</translation> <translation id="6270391203985052864">Weby mohou žádat o oprávnění zasílat vám oznámení</translation> <translation id="6295158916970320988">Všechny weby</translation> <translation id="6320088164292336938">Vibrovat</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Přehrát</translation> <translation id="6818926723028410516">Výběr položek</translation> <translation id="6864395892908308021">Toto zařízení neumí číst NFC</translation> +<translation id="6879016579615558281">Blokovaná oprávnění: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> a další (<ph name="NUM_MORE" />)</translation> <translation id="6910211073230771657">Smazáno</translation> <translation id="6912998170423641340">Blokovat webům přístup k textu a obrázkům zkopírovaným do schránky</translation> <translation id="6945221475159498467">Vybrat</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Vyberte fotky</translation> <translation id="7243308994586599757">Možnosti jsou k dispozici ve spodní části obrazovky</translation> <translation id="7250468141469952378">Vybráno: <ph name="ITEM_COUNT" /></translation> +<translation id="7260727271532453612">Oprávnění <ph name="PERMISSION_1" /> a <ph name="PERMISSION_2" /> jsou povolena</translation> <translation id="7302486331832100261">Obvykle oznámení blokujete. Chcete-li je povolit, klepněte na Podrobnosti.</translation> <translation id="7423098979219808738">Nejprve se dotázat</translation> <translation id="7423538860840206698">Čtení schránky je blokováno</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Tento obsah pochází z domény <ph name="DOMAIN_NAME" />. Poskytováno společností Google.</translation> <translation id="8116925261070264013">Ztlumeno</translation> <translation id="8131740175452115882">Potvrdit</translation> +<translation id="8197286292360124385">Oprávnění <ph name="PERMISSION_1" /> je povoleno</translation> <translation id="8200772114523450471">Pokračovat</translation> <translation id="8206354486702514201">Toto nastavení je vyžadováno administrátorem.</translation> <translation id="8249310407154411074">Přesunout na začátek</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb index dca64b4..8f678162 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Indstillinger for websites</translation> <translation id="4200726100658658164">Åbn placeringsindstillinger</translation> <translation id="4226663524361240545">Notifikationer kan få enheden til at vibrere</translation> -<translation id="4242533952199664413">Åbn Indstillinger</translation> <translation id="4259722352634471385">Navigationen er blokeret: <ph name="URL" /></translation> <translation id="4278390842282768270">Tilladt</translation> <translation id="429312253194641664">Et website afspiller medier</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb index fbf61c75..51908f2 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Website-Einstellungen</translation> <translation id="4200726100658658164">Standorteinstellungen öffnen</translation> <translation id="4226663524361240545">Bei Benachrichtigungen kann das Gerät vibrieren</translation> -<translation id="4242533952199664413">Einstellungen öffnen</translation> <translation id="4259722352634471385">Die Navigation zu <ph name="URL" /> ist blockiert.</translation> <translation id="4278390842282768270">Zugelassen</translation> <translation id="429312253194641664">Eine Website gibt Medien wieder</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb index 9134844..93caf125 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Προστέθηκε ο ιστότοπος <ph name="SITE_NAME" /></translation> <translation id="1383876407941801731">Αναζήτηση</translation> <translation id="1384959399684842514">Η λήψη διακόπηκε προσωρινά.</translation> +<translation id="1431402976894535801">Να μην επιτρέπεται σε ιστοτόπους να γνωρίζουν πότε είστε ενεργοί.</translation> <translation id="1446450296470737166">Να επιτρέπεται πλήρης έλεγχος σε MIDI</translation> <translation id="1509960214886564027">Μπορεί να παρουσιαστούν προβλήματα στις λειτουργίες πολλών ιστοτόπων.</translation> <translation id="1620510694547887537">Κάμερα</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Άνοιγμα Instant Εφαρμογής</translation> <translation id="2148716181193084225">Σήμερα</translation> <translation id="2182457891543959921">Να γίνεται ερώτηση προτού επιτραπεί σε ιστοτόπους η δημιουργία τρισδιάστατου χάρτη του περιβάλλοντα χώρου σας και η παρακολούθηση της θέσης της κάμερας (συνιστάται)</translation> +<translation id="2187243482123994665">Παρουσία χρήστη</translation> <translation id="2212565012507486665">Αποδοχή cookie</translation> <translation id="2228071138934252756">Για να επιτρέψετε στην εφαρμογή <ph name="APP_NAME" /> να αποκτήσει πρόσβαση στην κάμερά σας, ενεργοποιήστε επίσης την κάμερα στις <ph name="BEGIN_LINK" />Ρυθμίσεις Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Να γίνεται ερώτηση όταν ένας ιστότοπος επιθυμεί να εντοπίσει κοντινές συσκευες Bluetooth (συνιστάται)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Πρόγραμμα αναπαραγωγής βίντεο</translation> <translation id="3115898365077584848">Πληροφορίες εκπομπής</translation> <translation id="3123473560110926937">Αποκλεισμός σε ορισμένους ιστοτόπους</translation> +<translation id="3165371858310906303">Να γίνεται ερώτηση όταν ένας ιστότοπος θέλει να γνωρίζει πότε είστε ενεργοί.</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> αποθηκευμένα δεδομένα</translation> <translation id="321187648315454507">Για να επιτρέψετε στην εφαρμογή <ph name="APP_NAME" /> να σας στέλνει ειδοποιήσεις, ενεργοποιήστε επίσης τις ειδοποιήσεις στις <ph name="BEGIN_LINK" />Ρυθμίσεις Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Μικρόφωνο</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Ρυθμίσεις ιστότοπου</translation> <translation id="4200726100658658164">Άνοιγμα ρυθμίσεων τοποθεσίας</translation> <translation id="4226663524361240545">Κατά τη λήψη ειδοποιήσεων ενδέχεται να δονείται η συσκευή</translation> -<translation id="4242533952199664413">Ανοίξτε τις ρυθμίσεις</translation> <translation id="4259722352634471385">Αποκλείστηκε η μετάβαση στη διεύθυνση: <ph name="URL" /></translation> <translation id="4278390842282768270">Επιτρέπεται</translation> <translation id="429312253194641664">Ένας ιστότοπος κάνει αναπαραγωγή μέσων</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Οι επαφές που επιλέγετε θα κοινοποιηθούν στον ιστότοπο <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Εμφάνιση</translation> <translation id="5301954838959518834">OK, το κατάλαβα</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> και <ph name="NUM_MORE" /> ακόμη</translation> <translation id="5313967007315987356">Προσθήκη ιστότοπου</translation> <translation id="5317780077021120954">Αποθήκευση</translation> <translation id="5335288049665977812">Να επιτρέπεται στους ιστότοπους να εκτελούν JavaScript (συνιστάται)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Ονόματα</translation> <translation id="5489227211564503167">Έχουν περάσει <ph name="ELAPSED_TIME" /> από <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Αποκλεισμός διαφημίσεων σε ιστοτόπους που εμφανίζουν παρεμβατικές ή παραπλανητικές διαφημίσεις</translation> +<translation id="5502860503640766021">Αποδοχή <ph name="PERMISSION_1" />, αποκλεισμός <ph name="PERMISSION_2" /></translation> <translation id="5505264765875738116">Οι ιστότοποι δεν μπορούν να ζητούν να στέλνουν ειδοποιήσεις.</translation> <translation id="5516455585884385570">Άνοιγμα ρυθμίσεων ειδοποιήσεων</translation> <translation id="5527111080432883924">Να γίνεται ερώτηση προτού επιτραπεί σε ιστοτόπους η ανάγνωση κειμένου και εικόνων από το πρόχειρο (συνιστάται)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Η κάμερα απενεργοποιήθηκε στις ρυθμίσεις Android.</translation> <translation id="5710871682236653961">Να γίνεται ερώτηση προτού επιτραπεί σε ιστοτόπους η αποστολή ή η λήψη πληροφοριών κατά το πάτημα συσκευών NFC (συνιστάται).</translation> <translation id="5719847187258001597">Αυτή η ενέργεια θα διαγράψει όλα τα δεδομένα και τα cookie που έχουν αποθηκευτεί από <ph name="ORIGIN" /> ή από αυτήν την εφαρμογή στην αρχική οθόνη σας.</translation> +<translation id="5771720122942595109">Η άδεια <ph name="PERMISSION_1" /> αποκλείστηκε.</translation> <translation id="5804241973901381774">Άδειες</translation> <translation id="5860033963881614850">Απενεργοποιημένη</translation> +<translation id="5863245810240683687">Οι άδειες <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> και <ph name="NUM_MORE" /> ακόμη επιτράπηκαν.</translation> <translation id="5876056640971328065">Παύση βίντεο</translation> <translation id="5916664084637901428">Ενεργό</translation> <translation id="5922853908706496913">Κοινή χρήση της οθόνης σας</translation> <translation id="5939518447894949180">Επαναφορά</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Έλεγχος της πρόσβασης αυτού του ιστοτόπου στη συσκευή σας</translation> <translation id="6040143037577758943">Κλείσιμο</translation> <translation id="6042308850641462728">Περισσότερα</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Αποκλεισμός cookie τρίτων</translation> <translation id="6206551242102657620">Η σύνδεση είναι ασφαλής. Πληροφορίες ιστοτόπου</translation> <translation id="6216432067784365534">Επιλογές <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358">Οι άδειες <ph name="PERMISSION_1" /> και <ph name="PERMISSION_2" /> αποκλείστηκαν.</translation> <translation id="6270391203985052864">Οι ιστότοποι μπορούν να ζητούν να στέλνουν ειδοποιήσεις.</translation> <translation id="6295158916970320988">Όλοι οι ιστότοποι</translation> <translation id="6320088164292336938">Δόνηση</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Αναπαραγωγή</translation> <translation id="6818926723028410516">Επιλέξτε στοιχεία</translation> <translation id="6864395892908308021">Αυτή η συσκευή δεν μπορεί να διαβάσει NFC</translation> +<translation id="6879016579615558281">Οι άδειες <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> και <ph name="NUM_MORE" /> ακόμη αποκλείστηκαν.</translation> <translation id="6910211073230771657">Διαγράφηκε</translation> <translation id="6912998170423641340">Αποκλεισμός ιστοτόπων από ανάγνωση κειμένου και εικόνων από το πρόχειρο</translation> <translation id="6945221475159498467">Επιλογή</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Επιλέξτε εικόνες</translation> <translation id="7243308994586599757">Διαθέσιμες επιλογές κοντά κάτω μέρος της οθόνης</translation> <translation id="7250468141469952378">Επιλέχθηκαν <ph name="ITEM_COUNT" /></translation> +<translation id="7260727271532453612">Οι άδειες <ph name="PERMISSION_1" /> και <ph name="PERMISSION_2" /> επιτράπηκαν.</translation> <translation id="7302486331832100261">Συνήθως αποκλείετε τις ειδοποιήσεις. Για να τις επιτρέψετε, πατήστε Λεπτομέρειες.</translation> <translation id="7423098979219808738">Να γίνεται ερώτηση πρώτα</translation> <translation id="7423538860840206698">Αποκλεισμός από ανάγνωση πρόχειρου</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Αυτό το περιεχόμενο προέρχεται από το <ph name="DOMAIN_NAME" /> και παρέχεται από την Google.</translation> <translation id="8116925261070264013">Σε σίγαση</translation> <translation id="8131740175452115882">Επιβεβαίωση</translation> +<translation id="8197286292360124385">H άδεια <ph name="PERMISSION_1" /> επιτράπηκε.</translation> <translation id="8200772114523450471">Συνέχιση</translation> <translation id="8206354486702514201">Η ρύθμιση αυτή επιβάλλεται από τον διαχειριστή σας.</translation> <translation id="8249310407154411074">Μετακίνηση επάνω</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb index 031e7acd..6a1c308a 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Site <ph name="SITE_NAME" /> added</translation> <translation id="1383876407941801731">Search</translation> <translation id="1384959399684842514">Download paused</translation> +<translation id="1431402976894535801">Block sites from knowing when you're present</translation> <translation id="1446450296470737166">Allow full control of MIDI devices</translation> <translation id="1509960214886564027">Features on many sites may break</translation> <translation id="1620510694547887537">Camera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Open Instant App</translation> <translation id="2148716181193084225">Today</translation> <translation id="2182457891543959921">Ask before allowing sites to create a 3D map of your surroundings or track camera position (recommended)</translation> +<translation id="2187243482123994665">User presence</translation> <translation id="2212565012507486665">Allow cookies</translation> <translation id="2228071138934252756">To let <ph name="APP_NAME" /> access your camera, also turn on camera in <ph name="BEGIN_LINK" />Android settings<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Ask when a site wants to discover nearby Bluetooth devices (recommended)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Video player</translation> <translation id="3115898365077584848">Show info</translation> <translation id="3123473560110926937">Blocked on some sites</translation> +<translation id="3165371858310906303">Ask when a site wants to know when you're present</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> stored data</translation> <translation id="321187648315454507">To let <ph name="APP_NAME" /> send you notifications, also turn on notifications in <ph name="BEGIN_LINK" />Android settings<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Microphone</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Site settings</translation> <translation id="4200726100658658164">Open location settings</translation> <translation id="4226663524361240545">Notifications may vibrate the device</translation> -<translation id="4242533952199664413">Open settings</translation> <translation id="4259722352634471385">Navigation is blocked: <ph name="URL" /></translation> <translation id="4278390842282768270">Allowed</translation> <translation id="429312253194641664">A site is playing media</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">The contacts that you select will be shared with <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Show</translation> <translation id="5301954838959518834">OK, got it</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> and <ph name="NUM_MORE" /> more</translation> <translation id="5313967007315987356">Add site</translation> <translation id="5317780077021120954">Save</translation> <translation id="5335288049665977812">Allow sites to run JavaScript (recommended)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Names</translation> <translation id="5489227211564503167">Elapsed time <ph name="ELAPSED_TIME" /> of <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Block ads on sites that show intrusive or misleading ads</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" /> allowed, <ph name="PERMISSION_2" /> blocked</translation> <translation id="5505264765875738116">Sites can't ask to send notifications</translation> <translation id="5516455585884385570">Open notification settings</translation> <translation id="5527111080432883924">Ask before allowing sites to read text and images from the clipboard (recommended)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Camera is turned off in Android settings</translation> <translation id="5710871682236653961">Ask before allowing sites to send and receive info when you tap NFC devices (recommended)</translation> <translation id="5719847187258001597">This will clear all data and cookies stored by <ph name="ORIGIN" /> or by its app on your home screen.</translation> +<translation id="5771720122942595109"><ph name="PERMISSION_1" /> blocked</translation> <translation id="5804241973901381774">Permissions</translation> <translation id="5860033963881614850">Off</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> and <ph name="NUM_MORE" /> more allowed</translation> <translation id="5876056640971328065">Pause video</translation> <translation id="5916664084637901428">On</translation> <translation id="5922853908706496913">Sharing your screen</translation> <translation id="5939518447894949180">Reset</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> – <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Control this site's access to your device</translation> <translation id="6040143037577758943">Close</translation> <translation id="6042308850641462728">More</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Block third-party cookies</translation> <translation id="6206551242102657620">Connection is secure. Site information</translation> <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> Options</translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" /> and <ph name="PERMISSION_2" /> blocked</translation> <translation id="6270391203985052864">Sites can ask to send notifications</translation> <translation id="6295158916970320988">All sites</translation> <translation id="6320088164292336938">Vibrate</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Play</translation> <translation id="6818926723028410516">Select items</translation> <translation id="6864395892908308021">This device can't read NFC</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> and <ph name="NUM_MORE" /> more blocked</translation> <translation id="6910211073230771657">Deleted</translation> <translation id="6912998170423641340">Block sites from reading text and images from the clipboard</translation> <translation id="6945221475159498467">Select</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Select images</translation> <translation id="7243308994586599757">Options available near bottom of the screen</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> selected</translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" /> and <ph name="PERMISSION_2" /> allowed</translation> <translation id="7302486331832100261">You usually block notifications. To allow, tap Details.</translation> <translation id="7423098979219808738">Ask first</translation> <translation id="7423538860840206698">Blocked from reading clipboard</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">This content is from <ph name="DOMAIN_NAME" />, delivered by Google.</translation> <translation id="8116925261070264013">Muted</translation> <translation id="8131740175452115882">Confirm</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" /> allowed</translation> <translation id="8200772114523450471">Resume</translation> <translation id="8206354486702514201">This setting is enforced by your administrator.</translation> <translation id="8249310407154411074">Move to top</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb index 44d3cbd..8869a4b1 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Se agregó el sitio <ph name="SITE_NAME" />.</translation> <translation id="1383876407941801731">Buscar</translation> <translation id="1384959399684842514">Descarga detenida</translation> +<translation id="1431402976894535801">No permitir que los sitios sepan cuando estás presente</translation> <translation id="1446450296470737166">Control de dispositivos MIDI</translation> <translation id="1509960214886564027">Es posible que las características de muchos sitios no funcionen de forma correcta</translation> <translation id="1620510694547887537">Cámara</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Abrir app instantánea</translation> <translation id="2148716181193084225">Hoy</translation> <translation id="2182457891543959921">Preguntar antes de permitir que los sitios creen un mapa 3D de tu entorno o hagan un seguimiento de la posición de la cámara (recomendado)</translation> +<translation id="2187243482123994665">Presencia del usuario</translation> <translation id="2212565012507486665">Permitir cookies</translation> <translation id="2228071138934252756">Para permitir que <ph name="APP_NAME" /> acceda a tu cámara, actívala también en la <ph name="BEGIN_LINK" />Configuración de Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Preguntarme cuando un sitio intente conectarse a dispositivos Bluetooth cercanos (recomendado)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Reproductor de video</translation> <translation id="3115898365077584848">Mostrar información</translation> <translation id="3123473560110926937">Bloqueados en algunos sitios</translation> +<translation id="3165371858310906303">Preguntar cuando un sitio quiera saber si estás presente</translation> <translation id="3198916472715691905">Datos almacenados: <ph name="STORAGE_AMOUNT" /></translation> <translation id="321187648315454507">Para permitir que <ph name="APP_NAME" /> te envíe notificaciones, actívalas también en la <ph name="BEGIN_LINK" />Configuración de Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Micrófono</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Configuración de sitios</translation> <translation id="4200726100658658164">Abrir la configuración de la ubicación</translation> <translation id="4226663524361240545">Es posible que las notificaciones hagan vibrar el dispositivo</translation> -<translation id="4242533952199664413">Abrir la configuración</translation> <translation id="4259722352634471385">Navegación bloqueada: <ph name="URL" /></translation> <translation id="4278390842282768270">Permitido</translation> <translation id="429312253194641664">Un sitio está reproduciendo contenido multimedia</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Los contactos que selecciones se compartirán con <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Mostrar</translation> <translation id="5301954838959518834">Entendido</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> y <ph name="NUM_MORE" /> más</translation> <translation id="5313967007315987356">Agregar sitio</translation> <translation id="5317780077021120954">Guardar</translation> <translation id="5335288049665977812">Permitir que los sitios ejecuten JavaScript (recomendado)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Nombres</translation> <translation id="5489227211564503167">Tiempo transcurrido: <ph name="ELAPSED_TIME" /> de <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Bloquear anuncios de sitios que muestran anuncios intrusivos o engañosos</translation> +<translation id="5502860503640766021">Permitido: <ph name="PERMISSION_1" />; bloqueado: <ph name="PERMISSION_2" /></translation> <translation id="5505264765875738116">Los sitios no podrán preguntarte si quieres recibir notificaciones</translation> <translation id="5516455585884385570">Abrir la configuración de notificaciones</translation> <translation id="5527111080432883924">Preguntar antes de permitir que los sitios lean el texto y las imágenes del portapapeles (recomendado)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">La cámara está desactivada en la configuración de Android</translation> <translation id="5710871682236653961">Preguntar antes de permitir que los sitios envíen y reciban información cuando presionas dispositivos NFC (recomendado)</translation> <translation id="5719847187258001597">Esta acción borrará todos los datos y cookies almacenados por <ph name="ORIGIN" /> o su app que aparece en la pantalla principal.</translation> +<translation id="5771720122942595109">Bloqueado: <ph name="PERMISSION_1" /></translation> <translation id="5804241973901381774">Permisos</translation> <translation id="5860033963881614850">Desactivado</translation> +<translation id="5863245810240683687">Permitidos: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> y <ph name="NUM_MORE" /> más</translation> <translation id="5876056640971328065">Pausar video</translation> <translation id="5916664084637901428">Activado</translation> <translation id="5922853908706496913">Compartiendo tu pantalla</translation> <translation id="5939518447894949180">Restablecer</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Controla el acceso de este sitio a tu dispositivo</translation> <translation id="6040143037577758943">Cerrar</translation> <translation id="6042308850641462728">Más</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Bloquear cookies de terceros</translation> <translation id="6206551242102657620">La conexión es segura. Consulta la información del sitio.</translation> <translation id="6216432067784365534">Opciones de <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358">Bloqueados: <ph name="PERMISSION_1" /> y <ph name="PERMISSION_2" /></translation> <translation id="6270391203985052864">Los sitios podrán preguntarte si quieres recibir notificaciones</translation> <translation id="6295158916970320988">Todos los sitios</translation> <translation id="6320088164292336938">Vibrar</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Reproducir</translation> <translation id="6818926723028410516">Seleccionar elementos</translation> <translation id="6864395892908308021">Este dispositivo no puede leer NFC</translation> +<translation id="6879016579615558281">Bloqueados: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> y <ph name="NUM_MORE" /> más</translation> <translation id="6910211073230771657">Eliminado</translation> <translation id="6912998170423641340">Impedir que los sitios lean el texto y las imágenes del portapapeles</translation> <translation id="6945221475159498467">Seleccionar</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Seleccionar imágenes</translation> <translation id="7243308994586599757">Opciones disponibles junto a la parte inferior de la pantalla</translation> <translation id="7250468141469952378">Elementos seleccionados: <ph name="ITEM_COUNT" /></translation> +<translation id="7260727271532453612">Permitidos: <ph name="PERMISSION_1" /> y <ph name="PERMISSION_2" /></translation> <translation id="7302486331832100261">Por lo general, bloqueas las notificaciones. Para permitirlas, presiona Detalles.</translation> <translation id="7423098979219808738">Preguntar primero</translation> <translation id="7423538860840206698">Se impidió la lectura del portapapeles</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Este contenido es de <ph name="DOMAIN_NAME" />, publicado por Google.</translation> <translation id="8116925261070264013">Silenciados</translation> <translation id="8131740175452115882">Confirmar</translation> +<translation id="8197286292360124385">Permitido: <ph name="PERMISSION_1" /></translation> <translation id="8200772114523450471">Reanudar</translation> <translation id="8206354486702514201">El administrador controla esta configuración.</translation> <translation id="8249310407154411074">Mover al principio</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb index 6218abd..d69544d0 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Se ha añadido el sitio <ph name="SITE_NAME" /></translation> <translation id="1383876407941801731">Buscar</translation> <translation id="1384959399684842514">Descarga en pausa</translation> +<translation id="1431402976894535801">Impedir que los sitios web para impedir que sepan cuándo estás activo</translation> <translation id="1446450296470737166">Control total dispositivos MIDI</translation> <translation id="1509960214886564027">Es posible que las funciones de muchos sitios web no funcionen correctamente.</translation> <translation id="1620510694547887537">Cámara</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Abrir aplicación instantánea</translation> <translation id="2148716181193084225">Hoy</translation> <translation id="2182457891543959921">Preguntar antes de permitir que los sitios web creen un mapa 3D de tu entorno o hagan un seguimiento de la posición de la cámara (recomendado)</translation> +<translation id="2187243482123994665">Presencia del usuario</translation> <translation id="2212565012507486665">Permitir cookies</translation> <translation id="2228071138934252756">Para que <ph name="APP_NAME" /> pueda acceder a tu cámara, activa la cámara también en los <ph name="BEGIN_LINK" />ajustes de Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Preguntar cuando un sitio web quiera buscar dispositivos Bluetooth cercanos (recomendado)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Reproductor de vídeo</translation> <translation id="3115898365077584848">Mostrar información</translation> <translation id="3123473560110926937">Bloqueados en algunos sitios web</translation> +<translation id="3165371858310906303">Preguntar cuando un sitio web quiera saber si estás activo</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> de datos almacenados</translation> <translation id="321187648315454507">Para que <ph name="APP_NAME" /> pueda enviarte notificaciones, actívalas también en los <ph name="BEGIN_LINK" />ajustes de Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Micrófono</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Configuración de sitios web</translation> <translation id="4200726100658658164">Abrir Ajustes de ubicación</translation> <translation id="4226663524361240545">Es posible que las notificaciones hagan que el dispositivo vibre</translation> -<translation id="4242533952199664413">Abrir Configuración</translation> <translation id="4259722352634471385">Se ha bloqueado la navegación: <ph name="URL" /></translation> <translation id="4278390842282768270">Permitido</translation> <translation id="429312253194641664">Un sitio web está reproduciendo elementos multimedia</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Los contactos que selecciones se compartirán con <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Mostrar</translation> <translation id="5301954838959518834">Entendido</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> y <ph name="NUM_MORE" /> más</translation> <translation id="5313967007315987356">Añadir sitio</translation> <translation id="5317780077021120954">Guardar</translation> <translation id="5335288049665977812">Permitir que los sitios web utilicen JavaScript (recomendado)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Nombres</translation> <translation id="5489227211564503167">Tiempo transcurrido: <ph name="ELAPSED_TIME" /> de <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Bloquea anuncios invasivos o engañosos en los sitios web que los muestran</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" /> permitido; <ph name="PERMISSION_2" /> bloqueado</translation> <translation id="5505264765875738116">Los sitios web no pueden preguntarte si quieres que te envíen notificaciones</translation> <translation id="5516455585884385570">Abrir ajustes de notificaciones</translation> <translation id="5527111080432883924">Preguntar antes de permitir que los sitios web lean texto e imágenes del portapapeles (recomendado)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">La cámara está desactivada en los ajustes de Android</translation> <translation id="5710871682236653961">Pregunta antes de permitir que los sitios web envíen y reciban información cuando toques dispositivos NFC (recomendado)</translation> <translation id="5719847187258001597">Esta acción borrará todos los datos y cookies almacenados por <ph name="ORIGIN" /> y su aplicación en tu pantalla de inicio.</translation> +<translation id="5771720122942595109"><ph name="PERMISSION_1" /> bloqueado</translation> <translation id="5804241973901381774">Permisos</translation> <translation id="5860033963881614850">Desactivado</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> y <ph name="NUM_MORE" /> más permitidos</translation> <translation id="5876056640971328065">Pausar vídeo</translation> <translation id="5916664084637901428">Activado</translation> <translation id="5922853908706496913">Compartiendo tu pantalla</translation> <translation id="5939518447894949180">Restablecer</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Controla el acceso de este sitio web a tu dispositivo</translation> <translation id="6040143037577758943">Cerrar</translation> <translation id="6042308850641462728">Más</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Bloquear cookies de terceros</translation> <translation id="6206551242102657620">La conexión es segura. Información del sitio web</translation> <translation id="6216432067784365534">Opciones de <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" /> y <ph name="PERMISSION_2" /> bloqueados</translation> <translation id="6270391203985052864">Los sitios web pueden preguntarte si quieres que te envíen notificaciones</translation> <translation id="6295158916970320988">Todos los sitios</translation> <translation id="6320088164292336938">Vibrar</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Reproducir</translation> <translation id="6818926723028410516">Seleccionar elementos</translation> <translation id="6864395892908308021">Este dispositivo no puede leer NFC</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> y <ph name="NUM_MORE" /> más bloqueados</translation> <translation id="6910211073230771657">Eliminado</translation> <translation id="6912998170423641340">Evitar que los sitios web lean texto e imágenes del portapapeles</translation> <translation id="6945221475159498467">Seleccionar</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Seleccionar imágenes</translation> <translation id="7243308994586599757">Opciones disponibles cerca de la parte inferior de la pantalla</translation> <translation id="7250468141469952378">Elementos seleccionados: <ph name="ITEM_COUNT" /></translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" /> y <ph name="PERMISSION_2" /> permitidos</translation> <translation id="7302486331832100261">Sueles bloquear las notificaciones. Para permitirlas, toca Detalles.</translation> <translation id="7423098979219808738">Preguntar antes</translation> <translation id="7423538860840206698">Se ha bloqueado la lectura del portapapeles</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Este contenido procede de <ph name="DOMAIN_NAME" />, publicado por Google.</translation> <translation id="8116925261070264013">Silenciados</translation> <translation id="8131740175452115882">Confirmar</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" /> permitido</translation> <translation id="8200772114523450471">Reanudar</translation> <translation id="8206354486702514201">El administrador aplica esta opción.</translation> <translation id="8249310407154411074">Mover al principio</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb index 34292973..e6e315dc 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Saidi seaded</translation> <translation id="4200726100658658164">Ava asukohaseaded</translation> <translation id="4226663524361240545">Seade võib märguannete korral vibreerida</translation> -<translation id="4242533952199664413">Ava seaded</translation> <translation id="4259722352634471385">Navigeerimine on blokeeritud: <ph name="URL" /></translation> <translation id="4278390842282768270">Lubatud</translation> <translation id="429312253194641664">Sait esitab meediasisu</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb index 1c5d3b4..b526d344 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Webgunearen ezarpenak</translation> <translation id="4200726100658658164">Ireki kokapen-ezarpenak</translation> <translation id="4226663524361240545">Gailua dardararaz dezakete jakinarazpenek</translation> -<translation id="4242533952199664413">Ireki ezarpenak</translation> <translation id="4259722352634471385"><ph name="URL" /> orrira joateko aukera blokeatuta dago</translation> <translation id="4278390842282768270">Baimenduta</translation> <translation id="429312253194641664">Webgune bat multimedia-edukia erreproduzitzen ari da</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb index 636701a..c350df0 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">سایت <ph name="SITE_NAME" /> اضافه شد</translation> <translation id="1383876407941801731">جستجو</translation> <translation id="1384959399684842514">بارگیری موقتاً متوقف شد</translation> +<translation id="1431402976894535801">مسدود کردن سایتها برای اطلاع از وضعیت حضور شما</translation> <translation id="1446450296470737166">اجازه کنترل کامل دستگاههای MIDI</translation> <translation id="1509960214886564027">ویژگیهای بسیاری از سایتها ممکن است درست کار نکنند</translation> <translation id="1620510694547887537">دوربین</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">برنامه فوری را باز کنید</translation> <translation id="2148716181193084225">امروز</translation> <translation id="2182457891543959921">قبل از اینکه به سایتها اجازه داده شود نقشه سهبعدی از محیط ایجاد کنند یا موقعیت دوربین را ردیابی کنند سؤال شود (توصیه میشود)</translation> +<translation id="2187243482123994665">حضور کاربر</translation> <translation id="2212565012507486665">مجاز کردن کوکی ها</translation> <translation id="2228071138934252756">برای اینکه به <ph name="APP_NAME" /> اجازه دهید به دوربین دسترسی پیدا کند، دوربین را در <ph name="BEGIN_LINK" />تنظیمات Android<ph name="END_LINK" /> نیز روشن کنید.</translation> <translation id="2289270750774289114">وقتی سایتی میخواهد دستگاههای بلوتوث اطراف را پیدا کند، سؤال شود (توصیه میشود)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">پخشکننده ویدیو</translation> <translation id="3115898365077584848">نمایش دادن اطلاعات</translation> <translation id="3123473560110926937">در برخی سایتها مسدود میشود</translation> +<translation id="3165371858310906303">وقتی سایتی میخواهد از وضعیت حضور شما مطلع شود سؤال شود</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> دادههای ذخیره شده</translation> <translation id="321187648315454507">برای اینکه به <ph name="APP_NAME" /> اجازه دهید برایتان اعلان ارسال کند، اعلانها را در <ph name="BEGIN_LINK" />تنظیمات Android<ph name="END_LINK" /> نیز روشن کنید.</translation> <translation id="3227137524299004712">میکروفن</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">تنظیمات سایت</translation> <translation id="4200726100658658164">باز کردن «تنظیمات مکان»</translation> <translation id="4226663524361240545">اعلانها ممکن است دستگاه را بلرزانند</translation> -<translation id="4242533952199664413">باز کردن تنظیمات</translation> <translation id="4259722352634471385">پیمایش مسدود شده است: <ph name="URL" /></translation> <translation id="4278390842282768270">مجاز است</translation> <translation id="429312253194641664">سایتی درحال پخش رسانه است</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">مخاطبین انتخابی شما با <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> همرسانی میشود.</translation> <translation id="5300589172476337783">نمایش</translation> <translation id="5301954838959518834">بله، متوجه شدم</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />، <ph name="PERMISSION_2" />، و <ph name="NUM_MORE" /> مورد دیگر</translation> <translation id="5313967007315987356">افزودن سایت</translation> <translation id="5317780077021120954">ذخیره</translation> <translation id="5335288049665977812">مجاز کردن همه سایتها برای اجرای جاوااسکریپت (توصیه میشود)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">نامها</translation> <translation id="5489227211564503167">زمان سپریشده: <ph name="ELAPSED_TIME" /> از <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">آگهی سایتهایی که آگهیهای مزاحم یا گمراهکننده نشان میدهند، مسدود میشود</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" /> مجاز است، <ph name="PERMISSION_2" /> مسدود است</translation> <translation id="5505264765875738116">سایتها نمیتوانند برای ارسال اعلان درخواست دهند</translation> <translation id="5516455585884385570">باز کردن تنظیمات اعلان</translation> <translation id="5527111080432883924">قبل از اینکه به سایتها اجازه داده شود به نوشتار و تصاویر بریدهدان دسترسی پیدا کنند سؤال شود (توصیه میشود)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">«دوربین» در تنظیمات Android خاموش است</translation> <translation id="5710871682236653961">وقتی روی دستگاههای NFC ضربه میزنید، قبل از ارسال و دریافت اطلاعات سؤال شود (توصیه میشود)</translation> <translation id="5719847187258001597">با این کار همه دادهها و کوکیهایی که <ph name="ORIGIN" /> و برنامه آن در صفحه اصلی ذخیره کردهاند پاک میشود.</translation> +<translation id="5771720122942595109"><ph name="PERMISSION_1" /> مسدود شد</translation> <translation id="5804241973901381774">مجوزها</translation> <translation id="5860033963881614850">خاموش</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />، <ph name="PERMISSION_2" />، و <ph name="NUM_MORE" /> مورد دیگر مجاز هستند</translation> <translation id="5876056640971328065">مکث ویدیو</translation> <translation id="5916664084637901428">روشن</translation> <translation id="5922853908706496913">درحال همرسانی صفحهنمایش</translation> <translation id="5939518447894949180">بازنشانی</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">کنترل کردن دسترسی این سایت به دستگاه</translation> <translation id="6040143037577758943">بستن</translation> <translation id="6042308850641462728">بیشتر</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">مسدود کردن کوکیهای شخص ثالث</translation> <translation id="6206551242102657620">اتصال امن است. اطلاعات سایت</translation> <translation id="6216432067784365534">گزینههای <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" /> و <ph name="PERMISSION_2" /> مسدود هستند</translation> <translation id="6270391203985052864">سایتها میتوانند برای ارسال اعلان درخواست دهند</translation> <translation id="6295158916970320988">همه سایتها</translation> <translation id="6320088164292336938">لرزش</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">پخش</translation> <translation id="6818926723028410516">انتخاب موارد</translation> <translation id="6864395892908308021">این دستگاه نمیتواند NFC را بخواند</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />، <ph name="PERMISSION_2" />، و <ph name="NUM_MORE" /> مورد دیگر مسدود هستند</translation> <translation id="6910211073230771657">حذف شد</translation> <translation id="6912998170423641340">سایتها از خواندن نوشتار و تصاویر بریدهدان منع شوند</translation> <translation id="6945221475159498467">انتخاب</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">انتخاب تصاویر</translation> <translation id="7243308994586599757">گزینهها در نزدیک پایین صفحه نمایش در دسترس هستند</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> مورد انتخاب شد</translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" /> و <ph name="PERMISSION_2" /> مجاز هستند</translation> <translation id="7302486331832100261">معمولاً اعلانها را مسدود میکنید. برای مجاز کردن، روی «جزئیات» ضربه بزنید.</translation> <translation id="7423098979219808738">ابتدا سؤال شود</translation> <translation id="7423538860840206698">خواندن محتوای بریدهدان مسدود شد</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">این محتوا از <ph name="DOMAIN_NAME" /> است و توسط Google ارائه میشود.</translation> <translation id="8116925261070264013">صامتشده</translation> <translation id="8131740175452115882">تأیید</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" /> مجاز است</translation> <translation id="8200772114523450471">ازسرگیری</translation> <translation id="8206354486702514201">این تنظیم توسط سرپرست شما اجباری شده است.</translation> <translation id="8249310407154411074">انتقال به بالا</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fi.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fi.xtb index 3e48294..ab593038 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_fi.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fi.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Sivustoasetukset</translation> <translation id="4200726100658658164">Avaa sijaintiasetukset</translation> <translation id="4226663524361240545">Laite voi väristä ilmoitusten yhteydessä.</translation> -<translation id="4242533952199664413">Avaa asetukset</translation> <translation id="4259722352634471385">Kohde on estetty: <ph name="URL" /></translation> <translation id="4278390842282768270">Sallittu</translation> <translation id="429312253194641664">Sivusto toistaa mediaa</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fil.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fil.xtb index 78535ce..e305edb1 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_fil.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fil.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Mga setting ng site</translation> <translation id="4200726100658658164">Buksan ang Mga Setting ng Lokasyon</translation> <translation id="4226663524361240545">Maaaring mag-vibrate ang device dahil sa mga notification</translation> -<translation id="4242533952199664413">Buksan ang mga setting</translation> <translation id="4259722352634471385">Naka-block ang navigation: <ph name="URL" /></translation> <translation id="4278390842282768270">Pinapayagan</translation> <translation id="429312253194641664">May site na nagpe-play ng media</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb index f4bcc14..4fa0e05 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Le site <ph name="SITE_NAME" /> a été ajouté</translation> <translation id="1383876407941801731">Rechercher</translation> <translation id="1384959399684842514">Téléchargement interrompu</translation> +<translation id="1431402976894535801">Empêcher les sites de savoir lorsque vous êtes présent</translation> <translation id="1446450296470737166">Autoriser le contrôle des appareils MIDI</translation> <translation id="1509960214886564027">Des fonctionnalités sur de nombreux sites risquent de ne pas fonctionner</translation> <translation id="1620510694547887537">Caméra</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Ouvrir l'application instantanée</translation> <translation id="2148716181193084225">Aujourd'hui</translation> <translation id="2182457891543959921">Demander avant d'autoriser les sites à créer une carte 3D de votre environnement ou à faire le suivi de la position de l'appareil photo (recommandé)</translation> +<translation id="2187243482123994665">Présence de l'utilisateur</translation> <translation id="2212565012507486665">Autoriser les témoins</translation> <translation id="2228071138934252756">Pour autoriser <ph name="APP_NAME" /> à accéder à votre appareil photo, activez aussi celui-ci dans les <ph name="BEGIN_LINK" />paramètres d'Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Demander quand un site souhaite rechercher les appareils Bluetooth à proximité (recommandé)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Lecteur vidéo</translation> <translation id="3115898365077584848">Afficher les renseignements</translation> <translation id="3123473560110926937">Annonces bloquées sur certains sites</translation> +<translation id="3165371858310906303">Demander une autorisation quand un site veut savoir lorsque vous êtes présent</translation> <translation id="3198916472715691905">Stockage de données : <ph name="STORAGE_AMOUNT" /></translation> <translation id="321187648315454507">Pour autoriser <ph name="APP_NAME" /> à vous envoyer des notifications, vous devez aussi activer celles-ci dans les <ph name="BEGIN_LINK" />paramètres d'Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Microphone</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Paramètres du site</translation> <translation id="4200726100658658164">Ouvrir les paramètres de localisation</translation> <translation id="4226663524361240545">Les notifications peuvent faire vibrer l'appareil</translation> -<translation id="4242533952199664413">Ouvrir les paramètres</translation> <translation id="4259722352634471385">Navigation bloquée : <ph name="URL" /></translation> <translation id="4278390842282768270">Autorisé</translation> <translation id="429312253194641664">Un site lit du contenu multimédia</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Les contacts que vous sélectionnez seront partagés avec <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Afficher</translation> <translation id="5301954838959518834">J'ai compris.</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> et <ph name="NUM_MORE" /> autres</translation> <translation id="5313967007315987356">Ajouter un site</translation> <translation id="5317780077021120954">Enregistrer</translation> <translation id="5335288049665977812">Autoriser les sites à exécuter JavaScript (recommandé)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Noms</translation> <translation id="5489227211564503167">Temps écoulé : <ph name="ELAPSED_TIME" /> sur <ph name="TOTAL_TIME" /></translation> <translation id="5494752089476963479">Bloquer les annonces sur les sites qui diffusent des annonces intrusives ou trompeuses</translation> +<translation id="5502860503640766021">Autorisation <ph name="PERMISSION_1" /> autorisée, autorisation <ph name="PERMISSION_2" /> bloquée</translation> <translation id="5505264765875738116">Les sites ne peuvent pas vous demander l'autorisation d'envoyer des notifications</translation> <translation id="5516455585884385570">Ouvrir les paramètres de notification</translation> <translation id="5527111080432883924">Demander une autorisation lorsque les sites veulent lire du texte et des images du presse-papiers (recommandé)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">L'appareil photo est désactivé dans les paramètres d'Android</translation> <translation id="5710871682236653961">Demander avant d'autoriser les sites à envoyer et à recevoir de l'information lorsque vous touchez des appareils NFC (recommandé)</translation> <translation id="5719847187258001597">Cette action entraînera la suppression de l'ensemble des données et des témoins stockés par <ph name="ORIGIN" /> ou son application installée sur votre écran d'accueil.</translation> +<translation id="5771720122942595109">Autorisation <ph name="PERMISSION_1" /> bloquée</translation> <translation id="5804241973901381774">Autorisations</translation> <translation id="5860033963881614850">Désactivé</translation> +<translation id="5863245810240683687">Autorisations <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> et <ph name="NUM_MORE" /> autres accordées</translation> <translation id="5876056640971328065">Suspendre la vidéo</translation> <translation id="5916664084637901428">Activé</translation> <translation id="5922853908706496913">Partage de votre écran en cours…</translation> <translation id="5939518447894949180">Recommencer</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> : <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Gérez l'accès de ce site à votre appareil</translation> <translation id="6040143037577758943">Fermer</translation> <translation id="6042308850641462728">Plus</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Bloquer les témoins de tiers</translation> <translation id="6206551242102657620">La connexion est sécurisée. Renseignements sur le site</translation> <translation id="6216432067784365534">Options de <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358">Autorisations <ph name="PERMISSION_1" /> et <ph name="PERMISSION_2" /> bloquées</translation> <translation id="6270391203985052864">Les sites peuvent vous demander l'autorisation d'envoyer des notifications</translation> <translation id="6295158916970320988">Tous les sites</translation> <translation id="6320088164292336938">Vibrer</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Jouer</translation> <translation id="6818926723028410516">Sélectionner des éléments</translation> <translation id="6864395892908308021">Cet appareil ne prend pas en charge la technologie NFC</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> et <ph name="NUM_MORE" /> autres autorisations bloquées</translation> <translation id="6910211073230771657">Supprimé</translation> <translation id="6912998170423641340">Empêcher les sites de lire du texte et des images du presse-papiers</translation> <translation id="6945221475159498467">Sélectionner</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Sélectionner des images</translation> <translation id="7243308994586599757">Options disponibles vers le bas de l’écran</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> élément(s) sélectionné(s)</translation> +<translation id="7260727271532453612">Autorisations <ph name="PERMISSION_1" /> et <ph name="PERMISSION_2" /> accordées</translation> <translation id="7302486331832100261">Vous bloquez habituellement les notifications. Pour les autoriser, touchez Détails.</translation> <translation id="7423098979219808738">Demander d'abord</translation> <translation id="7423538860840206698">La lecture du presse-papiers a été bloquée</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Ce contenu provient de <ph name="DOMAIN_NAME" />, fourni par Google.</translation> <translation id="8116925261070264013">Désactivés</translation> <translation id="8131740175452115882">Confirmer</translation> +<translation id="8197286292360124385">Autorisation <ph name="PERMISSION_1" /> accordée</translation> <translation id="8200772114523450471">Reprendre</translation> <translation id="8206354486702514201">Votre administrateur impose la valeur associée à ce paramètre.</translation> <translation id="8249310407154411074">Placer en première position</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb index d108213..5a4f454 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Site "<ph name="SITE_NAME" />" ajouté</translation> <translation id="1383876407941801731">Rechercher</translation> <translation id="1384959399684842514">Téléchargement suspendu</translation> +<translation id="1431402976894535801">Empêcher les sites de savoir quand vous êtes là</translation> <translation id="1446450296470737166">Autoriser le contrôle complet des appareils MIDI</translation> <translation id="1509960214886564027">Des fonctionnalités sur de nombreux sites risquent de ne pas fonctionner</translation> <translation id="1620510694547887537">Caméra</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Ouvrir l'appli instantanée</translation> <translation id="2148716181193084225">Aujourd'hui</translation> <translation id="2182457891543959921">Vous demander votre avis avant d'autoriser les sites à créer un plan 3D de votre environnement ou à suivre la position de la caméra (recommandé)</translation> +<translation id="2187243482123994665">Présence de l'utilisateur</translation> <translation id="2212565012507486665">Autoriser les cookies</translation> <translation id="2228071138934252756">Pour autoriser <ph name="APP_NAME" /> à accéder à votre appareil photo, activez également celui-ci dans les <ph name="BEGIN_LINK" />paramètres Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Me demander lorsqu'un site souhaite accéder aux appareils Bluetooth se trouvant à proximité (recommandé)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Lecteur vidéo</translation> <translation id="3115898365077584848">Afficher les informations</translation> <translation id="3123473560110926937">Bloqué sur certains sites</translation> +<translation id="3165371858310906303">Demander quand un site souhaite savoir si vous êtes là</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> de données stockées</translation> <translation id="321187648315454507">Pour autoriser <ph name="APP_NAME" /> à vous envoyer des notifications, activez également celles-ci dans les <ph name="BEGIN_LINK" />paramètres Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Micro</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Paramètres de site</translation> <translation id="4200726100658658164">Accéder aux paramètres de localisation</translation> <translation id="4226663524361240545">L'appareil vibrera en cas de notifications.</translation> -<translation id="4242533952199664413">Ouvrir les paramètres</translation> <translation id="4259722352634471385">La navigation sur <ph name="URL" /> est bloquée.</translation> <translation id="4278390842282768270">Autorisé</translation> <translation id="429312253194641664">Un site est en train de lire un contenu multimédia</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Les contacts que vous sélectionnez seront partagés avec <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Afficher</translation> <translation id="5301954838959518834">OK</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> et <ph name="NUM_MORE" /> de plus</translation> <translation id="5313967007315987356">Ajouter un site</translation> <translation id="5317780077021120954">Enregistrer</translation> <translation id="5335288049665977812">Autoriser les sites à exécuter JavaScript (recommandé)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Noms</translation> <translation id="5489227211564503167">Temps écoulé : <ph name="ELAPSED_TIME" /> sur <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Bloquer les annonces sur les sites qui affichent des annonces intrusives ou trompeuses</translation> +<translation id="5502860503640766021">Autorisation accordée : <ph name="PERMISSION_1" />, autorisation refusée : <ph name="PERMISSION_2" /></translation> <translation id="5505264765875738116">Les sites ne peuvent pas vous demander l'autorisation d'envoyer des notifications</translation> <translation id="5516455585884385570">Ouvrir les paramètres de notification</translation> <translation id="5527111080432883924">Demander avant d'autoriser les sites à accéder en lecture au texte et aux images du presse-papiers (recommandé)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">L'appareil photo est désactivé dans les paramètres Android</translation> <translation id="5710871682236653961">Demander avant d'autoriser les sites à envoyer et recevoir des informations lorsque vous utilisez des appareils NFC (recommandé)</translation> <translation id="5719847187258001597">Cette action entraînera la suppression de l'ensemble des données et cookies stockés par <ph name="ORIGIN" /> ou son application installée sur votre écran d'accueil.</translation> +<translation id="5771720122942595109">Autorisation refusée : <ph name="PERMISSION_1" /></translation> <translation id="5804241973901381774">Autorisations</translation> <translation id="5860033963881614850">Désactivé</translation> +<translation id="5863245810240683687">Autorisations accordées : <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> et <ph name="NUM_MORE" /> de plus</translation> <translation id="5876056640971328065">Mettre la vidéo en pause</translation> <translation id="5916664084637901428">Activé</translation> <translation id="5922853908706496913">Partage de votre écran…</translation> <translation id="5939518447894949180">Réinitialiser</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Contrôler l'accès de ce site à votre appareil</translation> <translation id="6040143037577758943">Fermer</translation> <translation id="6042308850641462728">Plus</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Bloquer les cookies tiers</translation> <translation id="6206551242102657620">La connexion est sécurisée. Informations sur le site</translation> <translation id="6216432067784365534">Options pour <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358">Autorisations refusées : <ph name="PERMISSION_1" /> et <ph name="PERMISSION_2" /></translation> <translation id="6270391203985052864">Les sites peuvent vous demander l'autorisation d'envoyer des notifications</translation> <translation id="6295158916970320988">Tous les sites</translation> <translation id="6320088164292336938">Vibreur</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Lire</translation> <translation id="6818926723028410516">Sélectionner des éléments</translation> <translation id="6864395892908308021">Lecture NFC impossible sur cet appareil</translation> +<translation id="6879016579615558281">Autorisations refusées : <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> et <ph name="NUM_MORE" /> de plus</translation> <translation id="6910211073230771657">Supprimé</translation> <translation id="6912998170423641340">Interdire aux sites d'accéder en lecture au texte et aux images du presse-papiers</translation> <translation id="6945221475159498467">Sélectionner</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Sélectionner des images</translation> <translation id="7243308994586599757">Options disponibles au bas de l'écran</translation> <translation id="7250468141469952378">Nombre d'éléments sélectionnés : <ph name="ITEM_COUNT" /></translation> +<translation id="7260727271532453612">Autorisations accordées : <ph name="PERMISSION_1" /> et <ph name="PERMISSION_2" /></translation> <translation id="7302486331832100261">Vous avez l'habitude de bloquer les notifications. Pour les autoriser, appuyez sur "Détails".</translation> <translation id="7423098979219808738">Demander d'abord</translation> <translation id="7423538860840206698">Accès en lecture au presse-papiers bloqué</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Ce contenu est issu de <ph name="DOMAIN_NAME" />. Il est diffusé par Google.</translation> <translation id="8116925261070264013">Son coupé</translation> <translation id="8131740175452115882">Confirmer</translation> +<translation id="8197286292360124385">Autorisation accordée : <ph name="PERMISSION_1" /></translation> <translation id="8200772114523450471">Reprendre</translation> <translation id="8206354486702514201">Ce paramètre est appliqué par votre administrateur.</translation> <translation id="8249310407154411074">Déplacer vers le haut</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_gl.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_gl.xtb index fe7962a..b743a7f 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_gl.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_gl.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Configuración do sitio</translation> <translation id="4200726100658658164">Abrir Configuración de localización</translation> <translation id="4226663524361240545">O dispositivo pode vibrar ao recibir notificacións</translation> -<translation id="4242533952199664413">Abrir configuración</translation> <translation id="4259722352634471385">A navegación está bloqueada: <ph name="URL" /></translation> <translation id="4278390842282768270">Permitida</translation> <translation id="429312253194641664">Un sitio está reproducindo contido multimedia</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb index f4d15bd..33c043d7 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">સાઇટ સેટિંગ્સ</translation> <translation id="4200726100658658164">સ્થાન સેટિંગ ખોલો</translation> <translation id="4226663524361240545">સૂચનાઓ ઉપકરણને વાઇબ્રેટ કરી શકે છે</translation> -<translation id="4242533952199664413">સેટિંગ્સ ખોલો</translation> <translation id="4259722352634471385">નેવિગેશન અવરોધિત છે: <ph name="URL" /></translation> <translation id="4278390842282768270">મંજૂર</translation> <translation id="429312253194641664">સાઇટ મીડિયા ચલાવી રહી છે</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb index 6bbed993..c0c9647 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">साइट सेटिंग</translation> <translation id="4200726100658658164">जगह की सेटिंग खोलें</translation> <translation id="4226663524361240545">नोटिफ़िकेशन से डिवाइस में कंपन हो सकता है</translation> -<translation id="4242533952199664413">सेटिंग खोलें</translation> <translation id="4259722352634471385">मार्गदर्शक अवरोधित है: <ph name="URL" /></translation> <translation id="4278390842282768270">अनुमति है</translation> <translation id="429312253194641664">किसी साइट पर मीडिया चल रहा है</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb index 37bca65..20a02ad 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Postavke web-lokacije</translation> <translation id="4200726100658658164">Otvori postavke lokacije</translation> <translation id="4226663524361240545">Obavijesti mogu uključiti vibriranje uređaja</translation> -<translation id="4242533952199664413">Otvori postavke</translation> <translation id="4259722352634471385">Otvaranje je blokirano: <ph name="URL" /></translation> <translation id="4278390842282768270">Dopušteno</translation> <translation id="429312253194641664">Web-lokacija reproducira medije</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb index 9ae3e1e..9b36256 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Webhelybeállítások</translation> <translation id="4200726100658658164">Helybeállítások megnyitása</translation> <translation id="4226663524361240545">Az értesítések miatt rezeghet az eszköz</translation> -<translation id="4242533952199664413">Beállítások megnyitása</translation> <translation id="4259722352634471385">Le van tiltva az ide vezető navigáció: <ph name="URL" /></translation> <translation id="4278390842282768270">Engedélyezve</translation> <translation id="429312253194641664">Az egyik webhely médiatartalmat játszik le</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb index cdc5f571..45ce9194 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Կայքի կարգավորումներ</translation> <translation id="4200726100658658164">Բացել տեղադրության կարգավորումները</translation> <translation id="4226663524361240545">Ծանուցումների ժամանակ սարքը կթրթռա</translation> -<translation id="4242533952199664413">Բացել կարգավորումները</translation> <translation id="4259722352634471385">Նավարկումն արգելափակված է՝ <ph name="URL" /></translation> <translation id="4278390842282768270">Թույլատրված է</translation> <translation id="429312253194641664">Կայքում մեդիա ֆայլ է նվագարկվում</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb index 7756710275..16c8109 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Situs <ph name="SITE_NAME" /> ditambahkan</translation> <translation id="1383876407941801731">Telusuri</translation> <translation id="1384959399684842514">Download dijeda</translation> +<translation id="1431402976894535801">Blokir situs agar tidak mengetahui status kehadiran Anda</translation> <translation id="1446450296470737166">Izinkan kontrol penuh perangkat MIDI</translation> <translation id="1509960214886564027">Fitur di banyak situs mungkin error</translation> <translation id="1620510694547887537">Kamera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Buka Aplikasi Instan</translation> <translation id="2148716181193084225">Hari ini</translation> <translation id="2182457891543959921">Tanyakan sebelum mengizinkan situs membuat peta 3D untuk area di sekeliling Anda atau melacak posisi kamera (direkomendasikan)</translation> +<translation id="2187243482123994665">Kehadiran pengguna</translation> <translation id="2212565012507486665">Izinkan cookie</translation> <translation id="2228071138934252756">Untuk mengizinkan <ph name="APP_NAME" /> mengakses kamera Anda, aktifkan juga kamera di <ph name="BEGIN_LINK" />Setelan Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Tanyakan saat situs ingin menemukan perangkat Bluetooth di sekitar (direkomendasikan)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Pemutar video</translation> <translation id="3115898365077584848">Tampilkan Info</translation> <translation id="3123473560110926937">Diblokir di beberapa situs</translation> +<translation id="3165371858310906303">Tanyakan saat situs ingin mengetahui status kehadiran Anda</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> data tersimpan</translation> <translation id="321187648315454507">Untuk mengizinkan <ph name="APP_NAME" /> mengirimkan notifikasi, aktifkan juga notifikasi di <ph name="BEGIN_LINK" />Setelan Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Mikrofon</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Setelan situs</translation> <translation id="4200726100658658164">Buka Setelan Lokasi</translation> <translation id="4226663524361240545">Notifikasi dapat membuat perangkat bergetar</translation> -<translation id="4242533952199664413">Buka setelan</translation> <translation id="4259722352634471385">Navigasi diblokir: <ph name="URL" /></translation> <translation id="4278390842282768270">Diizinkan</translation> <translation id="429312253194641664">Sebuah situs sedang memutar media</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Kontak yang Anda pilih akan dibagikan dengan <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Tampilkan</translation> <translation id="5301954838959518834">Oke, mengerti</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, dan <ph name="NUM_MORE" /> lainnya</translation> <translation id="5313967007315987356">Tambahkan situs</translation> <translation id="5317780077021120954">Simpan</translation> <translation id="5335288049665977812">Izinkan situs menjalankan JavaScript (disarankan)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Nama</translation> <translation id="5489227211564503167">Waktu berlalu <ph name="ELAPSED_TIME" /> dari <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Blokir iklan di situs yang menampilkan iklan yang mengganggu atau menyesatkan</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" /> diizinkan, <ph name="PERMISSION_2" /> diblokir</translation> <translation id="5505264765875738116">Situs tidak dapat meminta izin mengirimkan notifikasi</translation> <translation id="5516455585884385570">Buka setelan notifikasi</translation> <translation id="5527111080432883924">Tanya sebelum mengizinkan situs membaca teks dan gambar dari papan klip (disarankan)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Kamera dinonaktifkan di setelan Android</translation> <translation id="5710871682236653961">Tanyakan sebelum mengizinkan situs untuk mengirim dan menerima info saat Anda mengetuk perangkat NFC (direkomendasikan)</translation> <translation id="5719847187258001597">Ini akan menghapus semua data dan cookie yang disimpan oleh <ph name="ORIGIN" /> atau aplikasinya di Layar utama Anda.</translation> +<translation id="5771720122942595109"><ph name="PERMISSION_1" /> diblokir</translation> <translation id="5804241973901381774">Izin</translation> <translation id="5860033963881614850">Nonaktif</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, dan <ph name="NUM_MORE" /> lainnya diizinkan</translation> <translation id="5876056640971328065">Jeda video</translation> <translation id="5916664084637901428">Aktif</translation> <translation id="5922853908706496913">Membagikan layar Anda</translation> <translation id="5939518447894949180">Reset</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Mengontrol akses situs ini ke perangkat Anda</translation> <translation id="6040143037577758943">Tutup</translation> <translation id="6042308850641462728">Lainnya</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Blokir cookie pihak ketiga</translation> <translation id="6206551242102657620">Sambungan aman. Informasi situs</translation> <translation id="6216432067784365534">Opsi <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" /> dan <ph name="PERMISSION_2" /> diblokir</translation> <translation id="6270391203985052864">Situs dapat meminta izin mengirimkan notifikasi</translation> <translation id="6295158916970320988">Semua situs</translation> <translation id="6320088164292336938">Getar</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Putar</translation> <translation id="6818926723028410516">Pilih item</translation> <translation id="6864395892908308021">Perangkat ini tidak dapat membaca NFC</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, dan <ph name="NUM_MORE" /> lainnya diblokir</translation> <translation id="6910211073230771657">Dihapus</translation> <translation id="6912998170423641340">Blokir situs agar tidak membaca teks dan gambar dari papan klip</translation> <translation id="6945221475159498467">Pilih</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Pilih gambar</translation> <translation id="7243308994586599757">Opsi terdapat di dekat bagian bawah layar</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> dipilih</translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" /> dan <ph name="PERMISSION_2" /> diizinkan</translation> <translation id="7302486331832100261">Anda biasanya memblokir notifikasi. Untuk mengizinkan, ketuk Detail.</translation> <translation id="7423098979219808738">Tanyakan dulu</translation> <translation id="7423538860840206698">Diblokir agar tidak membaca papan klip</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Konten ini dari <ph name="DOMAIN_NAME" />, dikirimkan oleh Google.</translation> <translation id="8116925261070264013">Dinonaktifkan</translation> <translation id="8131740175452115882">Konfirmasi</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" /> diizinkan</translation> <translation id="8200772114523450471">Lanjutkan</translation> <translation id="8206354486702514201">Setelan ini diberlakukan oleh administrator Anda.</translation> <translation id="8249310407154411074">Pindahkan ke atas</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb index c5728b2..3a9552b 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Vefsvæðinu <ph name="SITE_NAME" /> bætt við</translation> <translation id="1383876407941801731">Leita</translation> <translation id="1384959399684842514">Gert var hlé á niðurhali</translation> +<translation id="1431402976894535801">Lokar fyrir það að vefsvæði viti hvenær þú ert á staðnum</translation> <translation id="1446450296470737166">Leyfa ótakmarkaða stjórn á MIDI-tækjum</translation> <translation id="1509960214886564027">Eiginleikar gætu bilað á mörgum vefsvæðum</translation> <translation id="1620510694547887537">Myndavél</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Opna skyndiforrit</translation> <translation id="2148716181193084225">Í dag</translation> <translation id="2182457891543959921">Spyrja áður en vefsvæðum er leyft að búa til þrívíddarkort af umhverfinu eða rekja staðsetningu myndavélarinnar (ráðlagt)</translation> +<translation id="2187243482123994665">Viðvera notanda</translation> <translation id="2212565012507486665">Leyfa fótspor</translation> <translation id="2228071138934252756">Til að veita <ph name="APP_NAME" /> aðgang að myndavélinni þarftu einnig að kveikja á henni í <ph name="BEGIN_LINK" />stillingum Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Spyrja þegar vefsvæði vill finna nálæg Bluetooth-tæki (ráðlagt)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Myndspilari</translation> <translation id="3115898365077584848">Sýna upplýsingar</translation> <translation id="3123473560110926937">Útilokaðar á sumum vefsvæðum</translation> +<translation id="3165371858310906303">Spyrja þegar vefsvæði vill vita af því þegar þú ert á staðnum</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> af vistuðum gögnum</translation> <translation id="321187648315454507">Til að leyfa <ph name="APP_NAME" /> að senda þér tilkynningar þarftu einnig að kveikja á þeim í <ph name="BEGIN_LINK" />stillingum Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Hljóðnemi</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Vefsvæðastillingar</translation> <translation id="4200726100658658164">Opna staðsetningarstillingar</translation> <translation id="4226663524361240545">Tilkynningar gætu látið tækið titra</translation> -<translation id="4242533952199664413">Opna stillingar</translation> <translation id="4259722352634471385">Lokað er fyrir skoðun: <ph name="URL" /></translation> <translation id="4278390842282768270">Leyft</translation> <translation id="429312253194641664">Vefsvæði er að spila efni</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Tengiliðunum sem þú valdir verður deilt með <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Sýna</translation> <translation id="5301954838959518834">Ég skil</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> og <ph name="NUM_MORE" /> í viðbót</translation> <translation id="5313967007315987356">Bæta vefsvæði við</translation> <translation id="5317780077021120954">Vista</translation> <translation id="5335288049665977812">Leyfa vefsvæðum að keyra JavaScript (ráðlagt)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Heiti</translation> <translation id="5489227211564503167">Liðinn tími: <ph name="ELAPSED_TIME" /> af <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Útiloka auglýsingar á vefsvæðum sem birta ágengar eða villandi auglýsingar</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" /> leyft, lokað er fyrir <ph name="PERMISSION_2" /></translation> <translation id="5505264765875738116">Vefsvæði geta ekki óskað eftir því að senda tilkynningar</translation> <translation id="5516455585884385570">Opna tilkynningastillingar</translation> <translation id="5527111080432883924">Spyrja áður en vefsvæðum er leyft að lesa texta og myndir af klippiborðinu (ráðlagt)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Slökkt er á myndavél í stillingum Android</translation> <translation id="5710871682236653961">Spyrja áður en vefsvæði fá leyfi til að senda og taka við upplýsingum þegar þú ýtir á NFC-tæki (ráðlagt)</translation> <translation id="5719847187258001597">Þetta hreinsar öll gögn og fótspor sem <ph name="ORIGIN" /> eða forrit þess geymir á heimaskjánum</translation> +<translation id="5771720122942595109">Lokað er fyrir <ph name="PERMISSION_1" /></translation> <translation id="5804241973901381774">Heimildir</translation> <translation id="5860033963881614850">Slökkt</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, og <ph name="NUM_MORE" /> í viðbót leyft</translation> <translation id="5876056640971328065">Gera hlé á spilun</translation> <translation id="5916664084637901428">Kveikt</translation> <translation id="5922853908706496913">Deiling skjásins þíns</translation> <translation id="5939518447894949180">Endurstilla</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> – <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Stjórnaðu aðgangi þessa vefsvæðis að tækinu þínu</translation> <translation id="6040143037577758943">Loka</translation> <translation id="6042308850641462728">Meira</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Loka á fótspor frá þriðja aðila</translation> <translation id="6206551242102657620">Örugg tenging. Upplýsingar um vefsvæði</translation> <translation id="6216432067784365534">Valkostir fyrir <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358">Lokað er fyrir <ph name="PERMISSION_1" /> og <ph name="PERMISSION_2" /></translation> <translation id="6270391203985052864">Vefsvæði geta óskað eftir því að senda tilkynningar</translation> <translation id="6295158916970320988">Öll vefsvæði</translation> <translation id="6320088164292336938">Titringur</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Spila</translation> <translation id="6818926723028410516">Veldu atriði</translation> <translation id="6864395892908308021">Þetta tæki getur ekki lesið NFC</translation> +<translation id="6879016579615558281">Lokað er fyrir <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, og <ph name="NUM_MORE" /> í viðbót</translation> <translation id="6910211073230771657">Eytt</translation> <translation id="6912998170423641340">Koma í veg fyrir að vefsvæði geti lesið texta og myndir af klippiborðinu</translation> <translation id="6945221475159498467">Velja</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Veldu myndir</translation> <translation id="7243308994586599757">Valkostir eru neðst á skjánum</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> valin</translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" /> og <ph name="PERMISSION_2" /> leyft</translation> <translation id="7302486331832100261">Þú lokar yfirleitt á tilkynningar. Ýttu á „Upplýsingar“ til að leyfa þær.</translation> <translation id="7423098979219808738">Spyrja fyrst</translation> <translation id="7423538860840206698">Lokað fyrir lestur klippiborðs</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Þetta efni er frá <ph name="DOMAIN_NAME" />, birt af Google.</translation> <translation id="8116925261070264013">Þögguð</translation> <translation id="8131740175452115882">Staðfesta</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" /> leyft</translation> <translation id="8200772114523450471">Halda áfram</translation> <translation id="8206354486702514201">Stjórnandi valdi þessa stillingu.</translation> <translation id="8249310407154411074">Færa efst</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb index e4142fe..69d39b9 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Sito <ph name="SITE_NAME" /> aggiunto</translation> <translation id="1383876407941801731">Cerca</translation> <translation id="1384959399684842514">Download sospeso</translation> +<translation id="1431402976894535801">Impedisci ai siti di sapere quando sei presente</translation> <translation id="1446450296470737166">Controllo completo dispos. MIDI</translation> <translation id="1509960214886564027">Le funzionalità su molti siti potrebbero non essere disponibili</translation> <translation id="1620510694547887537">Videocamera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Apri l'app istantanea</translation> <translation id="2148716181193084225">Oggi</translation> <translation id="2182457891543959921">Chiedi conferma prima di consentire ai siti di creare una mappa 3D dell'ambiente circostante o di monitorare la posizione della fotocamera (opzione consigliata)</translation> +<translation id="2187243482123994665">Presenza dell'utente</translation> <translation id="2212565012507486665">Consenti cookie</translation> <translation id="2228071138934252756">Per consentire all'app <ph name="APP_NAME" /> di accedere alla fotocamera, attiva la fotocamera anche nelle <ph name="BEGIN_LINK" />Impostazioni Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Chiedi conferma quando un sito vuole rilevare i dispositivi Bluetooth nelle vicinanze (opzione consigliata)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Video player</translation> <translation id="3115898365077584848">Mostra informazioni</translation> <translation id="3123473560110926937">Bloccati su alcuni siti</translation> +<translation id="3165371858310906303">Chiedi conferma quando un sito vuole sapere quando sei presente</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> di dati memorizzati</translation> <translation id="321187648315454507">Per consentire all'app <ph name="APP_NAME" /> di inviarti notifiche, devi attivare le notifiche anche nelle <ph name="BEGIN_LINK" />Impostazioni Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Microfono</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Impostazioni sito</translation> <translation id="4200726100658658164">Apri Impostazioni di geolocalizzazione</translation> <translation id="4226663524361240545">Le notifiche possono far vibrare il dispositivo</translation> -<translation id="4242533952199664413">Apri le impostazioni</translation> <translation id="4259722352634471385">Navigazione bloccata: <ph name="URL" /></translation> <translation id="4278390842282768270">Consentito</translation> <translation id="429312253194641664">Un sito sta riproducendo contenuti multimediali</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">I contatti che selezioni verranno condivisi con <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Mostra</translation> <translation id="5301954838959518834">OK</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> e <ph name="NUM_MORE" /> altra</translation> <translation id="5313967007315987356">Aggiungi sito</translation> <translation id="5317780077021120954">Salva</translation> <translation id="5335288049665977812">Consenti l'esecuzione di JavaScript nei siti (opzione consigliata)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Nomi</translation> <translation id="5489227211564503167">Tempo trascorso: <ph name="ELAPSED_TIME" /> di <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Blocca gli annunci su siti che mostrano annunci invasivi o fuorvianti</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" /> consentita, <ph name="PERMISSION_2" /> bloccata</translation> <translation id="5505264765875738116">I siti non possono chiedere di inviare notifiche</translation> <translation id="5516455585884385570">Apri le impostazioni di notifica</translation> <translation id="5527111080432883924">Chiedi conferma prima di consentire ai siti di leggere testo e immagini negli appunti (opzione consigliata)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">La fotocamera è disattivata nelle impostazioni di Android</translation> <translation id="5710871682236653961">Chiedi prima di consentire ai siti di inviare e ricevere informazioni quando tocchi i dispositivi NFC (opzione consigliata)</translation> <translation id="5719847187258001597">Verranno cancellati tutti i dati e i cookie memorizzati dal sito <ph name="ORIGIN" /> o dalla relativa app nella schermata Home.</translation> +<translation id="5771720122942595109"><ph name="PERMISSION_1" /> bloccata</translation> <translation id="5804241973901381774">Autorizzazioni</translation> <translation id="5860033963881614850">OFF</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> e <ph name="NUM_MORE" /> altra consentita</translation> <translation id="5876056640971328065">Metti in pausa il video</translation> <translation id="5916664084637901428">On</translation> <translation id="5922853908706496913">Condivisione dello schermo</translation> <translation id="5939518447894949180">Reimposta</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Controlla l'accesso di questo sito al tuo dispositivo</translation> <translation id="6040143037577758943">Chiudi</translation> <translation id="6042308850641462728">Altro</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Blocca cookie di terze parti</translation> <translation id="6206551242102657620">La connessione è sicura. Informazioni sul sito</translation> <translation id="6216432067784365534">Opzioni <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" /> e <ph name="PERMISSION_2" /> bloccate</translation> <translation id="6270391203985052864">I siti possono chiedere di inviare notifiche</translation> <translation id="6295158916970320988">Tutti i siti</translation> <translation id="6320088164292336938">Vibrazione</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Play</translation> <translation id="6818926723028410516">Seleziona elementi</translation> <translation id="6864395892908308021">Questo dispositivo non può leggere la tecnologia NFC</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> e altre <ph name="NUM_MORE" /> bloccate</translation> <translation id="6910211073230771657">Eliminato</translation> <translation id="6912998170423641340">Impedisci ai siti di leggere testo e immagini negli appunti</translation> <translation id="6945221475159498467">Seleziona</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Seleziona immagini</translation> <translation id="7243308994586599757">Opzioni disponibili nella parte inferiore dello schermo</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> elementi selezionati</translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" /> e <ph name="PERMISSION_2" /> consentite</translation> <translation id="7302486331832100261">Di solito blocchi le notifiche. Per consentirle, tocca Dettagli.</translation> <translation id="7423098979219808738">Chiedi prima</translation> <translation id="7423538860840206698">Lettura degli appunti non consentita</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Questi contenuti derivano da <ph name="DOMAIN_NAME" /> e sono offerti da Google.</translation> <translation id="8116925261070264013">Con audio disattivato</translation> <translation id="8131740175452115882">Conferma</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" /> consentita</translation> <translation id="8200772114523450471">Riprendi</translation> <translation id="8206354486702514201">Questa impostazione è stata applicata dall'amministratore.</translation> <translation id="8249310407154411074">Sposta in alto</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb index 6ba6eb2ed..9ceac94 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">האתר <ph name="SITE_NAME" /> נוסף</translation> <translation id="1383876407941801731">חפש</translation> <translation id="1384959399684842514">ההורדה הושהתה</translation> +<translation id="1431402976894535801">אתרים לא יוכלו לדעת על זמני הנוכחות שלך</translation> <translation id="1446450296470737166">התר שליטה מלאה על מכשירי MIDI</translation> <translation id="1509960214886564027">ייתכן שהתכונות של חלק גדול מהאתרים לא יפעלו כראוי</translation> <translation id="1620510694547887537">מצלמה</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">פתח אפליקציית אינסטנט</translation> <translation id="2148716181193084225">היום</translation> <translation id="2182457891543959921">תוצג שאלה לפני מתן הרשאה לאתרים ליצור מפה בתלת ממד של הסביבה שלך או לעקוב אחר מיקום המצלמה (מומלץ)</translation> +<translation id="2187243482123994665">נוכחות משתמש</translation> <translation id="2212565012507486665">אישור קובצי cookie</translation> <translation id="2228071138934252756">כדי לאפשר ל-<ph name="APP_NAME" /> לגשת אל המצלמה, צריך להפעיל אותה גם ב<ph name="BEGIN_LINK" />הגדרות Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">המערכת מבקשת אישור כשאתר רוצה לאתר התקני Bluetooth קרובים (מומלץ)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">נגן וידאו</translation> <translation id="3115898365077584848">הצג פרטים</translation> <translation id="3123473560110926937">חסומות בחלק מהאתרים</translation> +<translation id="3165371858310906303">תוצג שאלה כשאתר ירצה לדעת על זמני הנוכחות שלך</translation> <translation id="3198916472715691905">נתונים מאוחסנים בנפח <ph name="STORAGE_AMOUNT" /></translation> <translation id="321187648315454507">כדי לאפשר ל-<ph name="APP_NAME" /> לשלוח לך התראות, צריך להפעיל אותן גם ב<ph name="BEGIN_LINK" />הגדרות Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">מיקרופון</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">הגדרות לאתרים</translation> <translation id="4200726100658658164">פתיחת הגדרות המיקום</translation> <translation id="4226663524361240545">רטט של המכשיר אפשרי כשמתקבלת הודעה</translation> -<translation id="4242533952199664413">פתח את 'הגדרות'</translation> <translation id="4259722352634471385">הניווט חסום: <ph name="URL" /></translation> <translation id="4278390842282768270">מותר</translation> <translation id="429312253194641664">אתר מסוים מפעיל מדיה</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">אנשי הקשר שייבחרו ישותפו עם <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">הצגה</translation> <translation id="5301954838959518834">בסדר, הבנתי</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ועוד <ph name="NUM_MORE" /></translation> <translation id="5313967007315987356">הוסף אתר</translation> <translation id="5317780077021120954">שמור</translation> <translation id="5335288049665977812">אפשר לאתרים להריץ JavaScript (מומלץ)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">שמות</translation> <translation id="5489227211564503167">צפית ב-<ph name="ELAPSED_TIME" /> מתוך <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">חסימת מודעות באתרים שמוצגות בהם מודעות מפריעות או מטעות</translation> +<translation id="5502860503640766021">פועלת: <ph name="PERMISSION_1" />, חסומה: <ph name="PERMISSION_2" /></translation> <translation id="5505264765875738116">אתרים לא יכולים לבקש לשלוח התראות</translation> <translation id="5516455585884385570">פתיחה של הגדרות ההתראות</translation> <translation id="5527111080432883924">יש לבקש הרשאה לפני מתן גישה לאתרים אל טקסט ותמונות מלוח העריכה (מומלץ)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">המצלמה מושבתת בהגדרות Android</translation> <translation id="5710871682236653961">הצגת שאלה לפני מתן הרשאה לאתרים לשלוח ולקבל מידע כשמקישים על מכשירי NFC (מומלץ)</translation> <translation id="5719847187258001597">הפעולה הזאת תמחק את כל הנתונים ואת קובצי ה-cookie שנשמרו במסך הבית על ידי האתר <ph name="ORIGIN" /> או האפליקציה שלו.</translation> +<translation id="5771720122942595109">חסומה: <ph name="PERMISSION_1" /></translation> <translation id="5804241973901381774">הרשאות</translation> <translation id="5860033963881614850">כבוי</translation> +<translation id="5863245810240683687">ההרשאות <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ועוד <ph name="NUM_MORE" /> פועלות</translation> <translation id="5876056640971328065">השהיית הסרטון</translation> <translation id="5916664084637901428">פועל</translation> <translation id="5922853908706496913">מתבצע שיתוף מסך</translation> <translation id="5939518447894949180">אפס</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> – <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">שליטה על הגישה של האתר הזה למכשיר שלך</translation> <translation id="6040143037577758943">סגור</translation> <translation id="6042308850641462728">עוד</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">חסום קובצי Cookie של צד שלישי</translation> <translation id="6206551242102657620">החיבור מאובטח. פרטי האתר</translation> <translation id="6216432067784365534">אפשרויות בשביל <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358">ההרשאות <ph name="PERMISSION_1" /> וגם <ph name="PERMISSION_2" /> חסומות</translation> <translation id="6270391203985052864">אתרים יכולים לבקש לשלוח התראות</translation> <translation id="6295158916970320988">כל האתרים</translation> <translation id="6320088164292336938">רטט</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">הפעל</translation> <translation id="6818926723028410516">בחירת פריטים</translation> <translation id="6864395892908308021">NFC לא נתמך במכשיר הזה</translation> +<translation id="6879016579615558281">נחסמו ההרשאות <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ועוד <ph name="NUM_MORE" /></translation> <translation id="6910211073230771657">נמחק</translation> <translation id="6912998170423641340">חסימת היכולת של אתרים לקרוא טקסט ותמונות מלוח העריכה</translation> <translation id="6945221475159498467">בחירה</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">בחר תמונות</translation> <translation id="7243308994586599757">אפשרויות הזמינות באזור החלק התחתון של המסך</translation> <translation id="7250468141469952378">נבחרו <ph name="ITEM_COUNT" /></translation> +<translation id="7260727271532453612">פועלות: <ph name="PERMISSION_1" /> וגם <ph name="PERMISSION_2" /></translation> <translation id="7302486331832100261">הבחירה שלך היא בדרך כלל לחסום התראות. כדי לאפשר את ההתראות, ניתן להקיש על 'פרטים'.</translation> <translation id="7423098979219808738">תופיע בקשת אישור</translation> <translation id="7423538860840206698">הגישה לקריאה מלוח העריכה נחסמה</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">התוכן הזה הוא מ-<ph name="DOMAIN_NAME" />, ומוגש על-ידי Google.</translation> <translation id="8116925261070264013">מושתקים</translation> <translation id="8131740175452115882">אישור</translation> +<translation id="8197286292360124385">פועלת: <ph name="PERMISSION_1" /></translation> <translation id="8200772114523450471">חדש</translation> <translation id="8206354486702514201">הגדרה זו נאכפת על ידי מנהל המערכת שלך.</translation> <translation id="8249310407154411074">העברה לראש הרשימה</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb index d62366b..cc633ed9 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">サイトの設定</translation> <translation id="4200726100658658164">位置情報の設定を開く</translation> <translation id="4226663524361240545">通知を受け取るとデバイスが振動します</translation> -<translation id="4242533952199664413">設定を開く</translation> <translation id="4259722352634471385"><ph name="URL" /> へのアクセスがブロックされました</translation> <translation id="4278390842282768270">許可</translation> <translation id="429312253194641664">サイトでメディアが再生されています</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ka.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ka.xtb index 448eb3b..3e240f5d0 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ka.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ka.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">საიტის პარამეტრები</translation> <translation id="4200726100658658164">მდებარეობის პარამეტრების გახსნა</translation> <translation id="4226663524361240545">შეტყობინებებმა შეიძლება მოწყობილობის ვიბრაცია გამოიწვიოს</translation> -<translation id="4242533952199664413">პარამეტრების გახსნა</translation> <translation id="4259722352634471385">ნავიგაცია დაბლოკილია: <ph name="URL" /></translation> <translation id="4278390842282768270">დაშვებულია</translation> <translation id="429312253194641664">საიტზე გაშვებულია მედია-კონტენტი</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb index 1b783ec0..b4b46bb 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Сайт параметрлері</translation> <translation id="4200726100658658164">Орналасу параметрлерін ашу</translation> <translation id="4226663524361240545">Хабарландыру келіп түскенде, құрылғы дірілдейді</translation> -<translation id="4242533952199664413">Параметрлерді ашу</translation> <translation id="4259722352634471385">Навигация тыйылған: <ph name="URL" /></translation> <translation id="4278390842282768270">Рұқсат етілген</translation> <translation id="429312253194641664">Сайтта мультимедиа ойнатылуда</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_km.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_km.xtb index 6d63e30..22cb2cf 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_km.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_km.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">គេហទំព័រ <ph name="SITE_NAME" /> ត្រូវបានបន្ថែម</translation> <translation id="1383876407941801731">ស្វែងរក</translation> <translation id="1384959399684842514">បានផ្អាកការទាញយក</translation> +<translation id="1431402976894535801">ទប់ស្កាត់គេហទំព័រមិនឱ្យដឹងអំពីពេលវេលាដែលអ្នកមានវត្តមាន</translation> <translation id="1446450296470737166">អនុញ្ញាតឲ្យមានការគ្រប់គ្រងពេញលេញលើឧបករណ៍ MIDI</translation> <translation id="1509960214886564027">មុខងារនៅលើគេហទំព័រជាច្រើនអាចដំណើរការមិនត្រឹមត្រូវ</translation> <translation id="1620510694547887537">កាមេរ៉ា</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">បើកកម្មវិធីប្រើភ្លាមៗ</translation> <translation id="2148716181193084225">ថ្ងៃនេះ</translation> <translation id="2182457891543959921">សួរមុនពេលអនុញ្ញាតឱ្យគេហទំព័របង្កើតផែនទី 3D នៃមជ្ឈដ្ឋានជុំវិញរបស់អ្នក ឬតាមដានទីតាំងកាមេរ៉ា (បានណែនាំ)</translation> +<translation id="2187243482123994665">វត្តមានរបស់អ្នកប្រើប្រាស់</translation> <translation id="2212565012507486665">អនុញ្ញាតខូគី</translation> <translation id="2228071138934252756">ដើម្បីអនុញ្ញាតឱ្យ <ph name="APP_NAME" /> ចូលប្រើកាមេរ៉ារបស់អ្នក អ្នកក៏ត្រូវបើកកាមេរ៉ានៅក្នុង<ph name="BEGIN_LINK" />ការកំណត់ Android<ph name="END_LINK" /> ផងដែរ។</translation> <translation id="2289270750774289114">សួរនៅពេលគេហទំព័រចង់ស្វែងរកឧបករណ៍ប៊្លូធូសដែលនៅជិត (បានណែនាំ)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">កម្មវិធីចាក់វីដេអូ</translation> <translation id="3115898365077584848">បង្ហាញព័ត៌មាន</translation> <translation id="3123473560110926937">បានទប់ស្កាត់នៅលើគេហទំព័រមួយចំនួន</translation> +<translation id="3165371858310906303">សួរនៅពេលគេហទំព័រចង់ដឹងអំពីពេលវេលាដែលអ្នកមានវត្តមាន</translation> <translation id="3198916472715691905">ទិន្នន័យដែលបានផ្ទុក <ph name="STORAGE_AMOUNT" /></translation> <translation id="321187648315454507">ដើម្បីអនុញ្ញាតឱ្យ <ph name="APP_NAME" /> ផ្ញើការជូនដំណឹងទៅអ្នក អ្នកក៏ត្រូវបើកការជូនដំណឹងនៅក្នុង<ph name="BEGIN_LINK" />ការកំណត់ Android<ph name="END_LINK" /> ផងដែរ។</translation> <translation id="3227137524299004712">ម៉ៃក្រូហ្វូន</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">ការកំណត់គេហទំព័រ</translation> <translation id="4200726100658658164">បើកការកំណត់ទីតាំង</translation> <translation id="4226663524361240545">ការជូនដំណឹងអាចនឹងធ្វើឲ្យឧបករណ៍ញ័រ</translation> -<translation id="4242533952199664413">បើកការកំណត់</translation> <translation id="4259722352634471385">ការរុករកត្រូវបានរារាំង៖ <ph name="URL" /></translation> <translation id="4278390842282768270">បានអនុញ្ញាត</translation> <translation id="429312253194641664">គេហទំព័រកំពុងចាក់មេឌៀ</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">ទំនាក់ទំនងដែលអ្នកជ្រើសរើសនឹងចែករំលែកជាមួយ <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ។</translation> <translation id="5300589172476337783">បង្ហាញ</translation> <translation id="5301954838959518834">យល់ព្រម ខ្ញុំយល់ហើយ</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> និង <ph name="NUM_MORE" /> ទៀត</translation> <translation id="5313967007315987356">បន្ថែមគេហទំព័រ</translation> <translation id="5317780077021120954">រក្សាទុក</translation> <translation id="5335288049665977812">អនុញ្ញាតឲ្យគេហទំព័រដំណើរការ JavaScript (បានណែនាំ)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">ឈ្មោះ</translation> <translation id="5489227211564503167">រយៈពេលដែលកន្លងផុត <ph name="ELAPSED_TIME" /> នៃ <ph name="TOTAL_TIME" />។</translation> <translation id="5494752089476963479">ទប់ស្កាត់ការផ្សាយពាណិជ្ជកម្មនៅលើគេហទំព័រដែលបង្ហាញការផ្សាយពាណិជ្ជកម្មនាំឱ្យយល់ច្រឡំ ឬរំខាន</translation> +<translation id="5502860503640766021">បានអនុញ្ញាត <ph name="PERMISSION_1" />, បានទប់ស្កាត់ <ph name="PERMISSION_2" /></translation> <translation id="5505264765875738116">គេហទំព័រមិនអាចស្នើសុំការអនុញ្ញាតដើម្បីផ្ញើការជូនដំណឹងបានទេ</translation> <translation id="5516455585884385570">បើកការកំណត់ការជូនដំណឹង</translation> <translation id="5527111080432883924">សួរមុនពេលអនុញ្ញាតឱ្យទំព័រអានអក្សរ និងរូបភាពពីអង្គចងចាំ (បានណែនាំ)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">កាមេរ៉ាត្រូវបានបិទនៅក្នុងការកំណត់ Android</translation> <translation id="5710871682236653961">សួរមុនពេលអនុញ្ញាតឱ្យគេហទំព័រផ្ញើ និងទទួលព័ត៌មាន នៅពេលអ្នកចុចឧបករណ៍ NFC (បានណែនាំ)</translation> <translation id="5719847187258001597">សកម្មភាពនេះនឹងសម្អាតទិន្នន័យ និងខូគីទាំងអស់ដែល <ph name="ORIGIN" /> ឬកម្មវិធីរបស់ខ្លួនបានរក្សាទុក នៅលើអេក្រង់ដើមរបស់អ្នក។</translation> +<translation id="5771720122942595109">បានទប់ស្កាត់ <ph name="PERMISSION_1" /></translation> <translation id="5804241973901381774">ការអនុញ្ញាត</translation> <translation id="5860033963881614850">បិទ</translation> +<translation id="5863245810240683687">បានអនុញ្ញាត <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> និង <ph name="NUM_MORE" /> ទៀត</translation> <translation id="5876056640971328065">ផ្អាកវីដេអូ</translation> <translation id="5916664084637901428">បើក</translation> <translation id="5922853908706496913">កំពុងចែករំលែកអេក្រង់របស់អ្នក</translation> <translation id="5939518447894949180">កំណត់ឡើងវិញ</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">គ្រប់គ្រងការចូលប្រើរបស់គេហទំព័រនេះនៅលើឧបករណ៍របស់អ្នក</translation> <translation id="6040143037577758943">បិទ</translation> <translation id="6042308850641462728">ច្រើនទៀត</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">រារាំងខូគីភាគីទីបី</translation> <translation id="6206551242102657620">ការតភ្ជាប់មានសុវត្ថិភាព។ ព័ត៌មានអំពីគេហទំព័រ</translation> <translation id="6216432067784365534">ជម្រើស <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358">បានទប់ស្កាត់ <ph name="PERMISSION_1" /> និង <ph name="PERMISSION_2" /></translation> <translation id="6270391203985052864">គេហទំព័រអាចស្នើសុំការអនុញ្ញាតដើម្បីផ្ញើការជូនដំណឹង</translation> <translation id="6295158916970320988">គេហទំព័រទាំងអស់</translation> <translation id="6320088164292336938">ញ័រ</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">លេង</translation> <translation id="6818926723028410516">ជ្រើសរើសធាតុ</translation> <translation id="6864395892908308021">ឧបករណ៍នេះមិនអាចអាន NFC បានទេ</translation> +<translation id="6879016579615558281">បានទប់ស្កាត់ <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> និង <ph name="NUM_MORE" /> ទៀត</translation> <translation id="6910211073230771657">បានលុប</translation> <translation id="6912998170423641340">ទប់ស្កាត់ទំព័រមិនឱ្យអានអក្សរ និងរូបភាពពីអង្គចងចាំ</translation> <translation id="6945221475159498467">ជ្រើសរើស</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">ជ្រើសរើសរូបភាព</translation> <translation id="7243308994586599757">មានជម្រើសនៅក្បែរផ្នែកខាងក្រោមអេក្រង់</translation> <translation id="7250468141469952378">បានជ្រើសរើស <ph name="ITEM_COUNT" /></translation> +<translation id="7260727271532453612">បានអនុញ្ញាត <ph name="PERMISSION_1" /> និង <ph name="PERMISSION_2" /></translation> <translation id="7302486331832100261">ជាធម្មតា អ្នកទប់ស្កាត់ការជូនដំណឹង។ ដើម្បីអនុញ្ញាត សូមចុច "ព័ត៌មានលម្អិត"។</translation> <translation id="7423098979219808738">សួរជាមុនសិន</translation> <translation id="7423538860840206698">បានទប់ស្កាត់មិនឱ្យអានអង្គចងចាំ</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">មាតិកានេះបានពី <ph name="DOMAIN_NAME" /> ដែលចែកចាយដោយ Google។</translation> <translation id="8116925261070264013">បានបិទសំឡេង</translation> <translation id="8131740175452115882">អះអាង</translation> +<translation id="8197286292360124385">បានអនុញ្ញាត <ph name="PERMISSION_1" /></translation> <translation id="8200772114523450471">បន្ត</translation> <translation id="8206354486702514201">ការកំណត់នេះត្រូវបានអនុវត្តដោយអ្នកគ្រប់គ្រងរបស់អ្នក។</translation> <translation id="8249310407154411074">ផ្លាស់ទីទៅខាងលើបំផុត</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_kn.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_kn.xtb index 9436057..87441e8 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_kn.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_kn.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">ಸೈಟ್ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> <translation id="4200726100658658164">ಸ್ಥಳ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಿರಿ</translation> <translation id="4226663524361240545">ಪ್ರಕಟಣೆಗಳು ಸಾಧನವನ್ನು ವೈಬ್ರೇಟ್ ಮಾಡಬಹುದು</translation> -<translation id="4242533952199664413">ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆ</translation> <translation id="4259722352634471385">ನ್ಯಾವಿಗೇಶನ್ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ: <ph name="URL" /></translation> <translation id="4278390842282768270">ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="429312253194641664">ಒಂದು ಸೈಟ್, ಮಾಧ್ಯಮವನ್ನು ಪ್ಲೇ ಮಾಡುತ್ತಿದೆ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb index 1c0a56bc..151d669 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">사이트 설정</translation> <translation id="4200726100658658164">위치 설정 열기</translation> <translation id="4226663524361240545">알림이 있으면 진동이 울릴 수도 있습니다.</translation> -<translation id="4242533952199664413">설정 열기</translation> <translation id="4259722352634471385">탐색이 차단됨: <ph name="URL" /></translation> <translation id="4278390842282768270">허용</translation> <translation id="429312253194641664">사이트에서 미디어 재생 중</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb index c1e9263..f43480e4 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Сайт жөндөөлөрү</translation> <translation id="4200726100658658164">Жайгашкан жерди аныктоо жөндөөлөрүн ачуу</translation> <translation id="4226663524361240545">Билдирмелер кегенде түзмөк дирилдейт</translation> -<translation id="4242533952199664413">Жөндөөлөрдү ачуу</translation> <translation id="4259722352634471385">Чабыттоо бөгөттөлгөн: <ph name="URL" /></translation> <translation id="4278390842282768270">Уруксат берилген</translation> <translation id="429312253194641664">Сайтта медиа файл ойнотулууда</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_lo.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_lo.xtb index ed5448ee..008f3e9 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_lo.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_lo.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">ການຕັ້ງຄ່າເວັບໄຊທ໌</translation> <translation id="4200726100658658164">ເປີດການຕັ້ງຄ່າສະຖານທີ່</translation> <translation id="4226663524361240545">ການແຈ້ງເຕືອນອາດຈະເຮັດໃຫ້ອຸປະກອນສັ່ນ</translation> -<translation id="4242533952199664413">ເປີດການຕັ້ງຄ່າ</translation> <translation id="4259722352634471385">ການນໍາທາງຖືກບລັອກໄວ້: <ph name="URL" /></translation> <translation id="4278390842282768270">ອະນຸຍາດແລ້ວ</translation> <translation id="429312253194641664">ເວັບໄຊກຳລັງຫຼິ້ນສື່ຢູ່</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb index 3f02cab..b0cf7af 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Pridėta svetainė <ph name="SITE_NAME" /></translation> <translation id="1383876407941801731">Ieškoti</translation> <translation id="1384959399684842514">Atsisiuntimas pristabdytas</translation> +<translation id="1431402976894535801">Neleisti svetainėms žinoti, kada esate</translation> <translation id="1446450296470737166">Leisti visiškai valdyti MIDI įr.</translation> <translation id="1509960214886564027">Funkcijos gali neveikti daugybėje svetainių.</translation> <translation id="1620510694547887537">Kamera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Atidaryti akimirksniu įkeliamą programėlę</translation> <translation id="2148716181193084225">Šiandien</translation> <translation id="2182457891543959921">Klausti, ar svetainėms leidžiama kurti jūsų aplinkos 3D žemėlapį ir stebėti kameros padėtį (rekomenduojama)</translation> +<translation id="2187243482123994665">Naudotojo buvimas</translation> <translation id="2212565012507486665">Leisti slapukus</translation> <translation id="2228071138934252756">Norėdami leisti „<ph name="APP_NAME" />“ pasiekti jūsų kamerą, taip pat įjunkite ją <ph name="BEGIN_LINK" />„Android“ nustatymuose<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Paklausti, kai svetainė nori atrasti netoliese esančius „Bluetooth“ įrenginius (rekomenduojama)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Vaizdo įrašų leistuvė</translation> <translation id="3115898365077584848">Rodyti informaciją</translation> <translation id="3123473560110926937">Užblokuota kai kuriose svetainėse</translation> +<translation id="3165371858310906303">Klausti, kai svetainė nori žinoti, kada esate</translation> <translation id="3198916472715691905">Išsaugota duomenų: <ph name="STORAGE_AMOUNT" /></translation> <translation id="321187648315454507">Norėdami leisti „<ph name="APP_NAME" />“ siųsti pranešimus, taip pat įjunkite juos <ph name="BEGIN_LINK" />„Android“ nustatymuose<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Mikrofonas</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Svetainės nustatymai</translation> <translation id="4200726100658658164">Atidaryti vietovės nustatymus</translation> <translation id="4226663524361240545">Gavus pranešimą įrenginys gali vibruoti</translation> -<translation id="4242533952199664413">Atidaryti nustatymus</translation> <translation id="4259722352634471385">Naršymas užblokuotas: <ph name="URL" /></translation> <translation id="4278390842282768270">Leidžiama</translation> <translation id="429312253194641664">Svetainėje leidžiama medija</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Pasirinkti kontaktai bus bendrinami su <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Rodyti</translation> <translation id="5301954838959518834">Gerai, supratau</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ir dar <ph name="NUM_MORE" /></translation> <translation id="5313967007315987356">Pridėti svetainę</translation> <translation id="5317780077021120954">Išsaugoti</translation> <translation id="5335288049665977812">Leisti svetainėms paleisti „JavaScript“ (rekomenduojama)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Pavadinimai</translation> <translation id="5489227211564503167">Praėjęs laikas: <ph name="ELAPSED_TIME" /> iš <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Blokuoti skelbimus svetainėse, kuriose rodomi nepageidaujami arba klaidinantys skelbimai</translation> +<translation id="5502860503640766021">Leidžiama: <ph name="PERMISSION_1" />, užblokuota: <ph name="PERMISSION_2" /></translation> <translation id="5505264765875738116">Svetainės negali prašyti siųsti pranešimus</translation> <translation id="5516455585884385570">Atidaryti pranešimų nustatymus</translation> <translation id="5527111080432883924">Klausti, prieš leidžiant svetainėms skaityti tekstą ir vaizdus iš iškarpinės (rekomenduojama)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Fotoaparatas išjungtas „Android“ nustatymuose</translation> <translation id="5710871682236653961">Klausti prieš leidžiant svetainėms siųsti ir gauti informaciją palietus ALR įrenginius (rekomenduojama)</translation> <translation id="5719847187258001597">Tai atlikus bus išvalyti visi <ph name="ORIGIN" /> arba jos programos jūsų pagrindiniame ekrane saugomi duomenys ir slapukai.</translation> +<translation id="5771720122942595109">Užblokuota: <ph name="PERMISSION_1" /></translation> <translation id="5804241973901381774">Leidimai</translation> <translation id="5860033963881614850">Išjungta</translation> +<translation id="5863245810240683687">Leidžiama: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ir dar <ph name="NUM_MORE" /></translation> <translation id="5876056640971328065">Pristabdyti vaizdo įrašą</translation> <translation id="5916664084637901428">Įjungta</translation> <translation id="5922853908706496913">Bendrinamas ekranas</translation> <translation id="5939518447894949180">Nustatyti iš naujo</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> – <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Valdykite šios svetainės prieigą prie jūsų įrenginio</translation> <translation id="6040143037577758943">Uždaryti</translation> <translation id="6042308850641462728">Daugiau</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Blokuoti trečiosios šalies slapukus</translation> <translation id="6206551242102657620">Ryšys yra saugus. Svetainės informacija</translation> <translation id="6216432067784365534">„<ph name="NAME_OF_LIST_ITEM" />“ parinktys</translation> +<translation id="6262279340360821358">Užblokuota: <ph name="PERMISSION_1" /> ir <ph name="PERMISSION_2" /></translation> <translation id="6270391203985052864">Svetainės gali prašyti siųsti pranešimus</translation> <translation id="6295158916970320988">Visos svetainės</translation> <translation id="6320088164292336938">Vibruoti</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Žaisti</translation> <translation id="6818926723028410516">Pasirinkite elementus</translation> <translation id="6864395892908308021">Šis įrenginys negali nuskaityti ALR</translation> +<translation id="6879016579615558281">Užblokuota: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ir dar <ph name="NUM_MORE" /></translation> <translation id="6910211073230771657">Ištrintas</translation> <translation id="6912998170423641340">Neleisti svetainėms skaityti teksto ir vaizdų iš iškarpinės</translation> <translation id="6945221475159498467">Pasirinkti</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Pasirinkti vaizdus</translation> <translation id="7243308994586599757">Parinktys pasiekiamos netoli ekrano apačios</translation> <translation id="7250468141469952378">Pasirinkta: <ph name="ITEM_COUNT" /></translation> +<translation id="7260727271532453612">Leidžiama: <ph name="PERMISSION_1" /> ir <ph name="PERMISSION_2" /></translation> <translation id="7302486331832100261">Įprastai blokuojate pranešimus. Norėdami leisti, palieskite „Išsami informacija“.</translation> <translation id="7423098979219808738">Pirmiausia paklausti</translation> <translation id="7423538860840206698">Neleidžiama skaityti iškarpinės</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Šis turinys yra iš domeno <ph name="DOMAIN_NAME" />, kurį teikia „Google“.</translation> <translation id="8116925261070264013">Išjungta</translation> <translation id="8131740175452115882">Patvirtinti</translation> +<translation id="8197286292360124385">Leidžiama: <ph name="PERMISSION_1" /></translation> <translation id="8200772114523450471">Atnaujinti</translation> <translation id="8206354486702514201">Šį nustatymą vykdo jūsų administratorius.</translation> <translation id="8249310407154411074">Perkelti į viršų</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_lv.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_lv.xtb index cd8c982e..2b71034 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_lv.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_lv.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Vietnes iestatījumi</translation> <translation id="4200726100658658164">Atvērt atrašanās vietu iestatījumus</translation> <translation id="4226663524361240545">Saņemot paziņojumu, ierīce var vibrēt.</translation> -<translation id="4242533952199664413">Atvērt iestatījumus</translation> <translation id="4259722352634471385">Navigācija ir bloķēta: <ph name="URL" /></translation> <translation id="4278390842282768270">Atļauts</translation> <translation id="429312253194641664">Vietne atskaņo multivides saturu</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_mk.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_mk.xtb index 1c33ca60..4216ce2 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_mk.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_mk.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Локацијата <ph name="SITE_NAME" /> е додадена</translation> <translation id="1383876407941801731">Барај</translation> <translation id="1384959399684842514">Преземањето е паузирано</translation> +<translation id="1431402976894535801">Не дозволувајте сајтовите да знаат кога сте присутни</translation> <translation id="1446450296470737166">Дозволи контрола над MIDI-уреди</translation> <translation id="1509960214886564027">Функциите на многу сајтови може да не функционираат</translation> <translation id="1620510694547887537">Камера</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Отвори ја инстант апликацијата</translation> <translation id="2148716181193084225">Денес</translation> <translation id="2182457891543959921">Прашувај пред да им дозволиш на сајтовите да создадат 3D-карта на опкружувањето или да ја следат позицијата на камерата (препорачано)</translation> +<translation id="2187243482123994665">Присуство на корисник</translation> <translation id="2212565012507486665">Дозволи колачиња</translation> <translation id="2228071138934252756">За да овозможите <ph name="APP_NAME" /> да пристапува до вашата камера, вклучете ја дозволата за камерата и во <ph name="BEGIN_LINK" />Поставки за Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Прашај кога некој сајт сака да открива уреди со Bluetooth во близина (се препорачува)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Видеоплеер</translation> <translation id="3115898365077584848">Прикажи ги информациите</translation> <translation id="3123473560110926937">Блокирано на некои сајтови</translation> +<translation id="3165371858310906303">Прашувај кога некој сајт сака да знае кога сте присутни</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> складирани податоци</translation> <translation id="321187648315454507">За да овозможите <ph name="APP_NAME" /> да ви испраќа известувања, вклучете ја дозволата за известувања и во <ph name="BEGIN_LINK" />Поставки за Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Микрофон</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Поставки на локација</translation> <translation id="4200726100658658164">Отворете ги поставките за локација</translation> <translation id="4226663524361240545">Известувањата може да предизвикаат вибрации на уредот</translation> -<translation id="4242533952199664413">Отвори ги поставките</translation> <translation id="4259722352634471385">Навигацијата е блокирана: <ph name="URL" /></translation> <translation id="4278390842282768270">Дозволено</translation> <translation id="429312253194641664">Сајтот репродуцира аудиовизуелни содржини</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Контактите што ќе ги изберете ќе се споделат со <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Прикажи</translation> <translation id="5301954838959518834">Добро, сфатив</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и уште <ph name="NUM_MORE" /> други</translation> <translation id="5313967007315987356">Додај локација</translation> <translation id="5317780077021120954">Зачувај</translation> <translation id="5335288049665977812">Дозволи сајтовите да извршуваат JavaScript (се препорачува)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Имиња</translation> <translation id="5489227211564503167">Изминато време: <ph name="ELAPSED_TIME" /> од <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Блокирај ги рекламите на сајтови што прикажуваат нападни или лажни реклами</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" /> е одобрена, <ph name="PERMISSION_2" /> е блокирана</translation> <translation id="5505264765875738116">Сајтовите не можат да прашуваат дали да испраќаат известувања</translation> <translation id="5516455585884385570">Отвори ги поставките за известувања</translation> <translation id="5527111080432883924">Прашај пред да им дозволиш на сајтовите да читаат текст и слики од привремената меморија (се препорачува)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Камерата е исклучена во поставките за Android</translation> <translation id="5710871682236653961">Прашај пред да дозволиш сајтовите да испраќаат и примаат информации при допир на NFC-уреди (се препорачува)</translation> <translation id="5719847187258001597">Ова ќе ги избрише сите податоци и колачиња складирани од сајтот <ph name="ORIGIN" /> или од неговата апликација на почетниот екран.</translation> +<translation id="5771720122942595109"><ph name="PERMISSION_1" /> е блокирана</translation> <translation id="5804241973901381774">Дозволи</translation> <translation id="5860033963881614850">Исклучено</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и уште <ph name="NUM_MORE" /> се одобрени</translation> <translation id="5876056640971328065">Паузирајте го видеото</translation> <translation id="5916664084637901428">Вклучено</translation> <translation id="5922853908706496913">Се споделува екранот</translation> <translation id="5939518447894949180">Ресетирај</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Контролирајте го пристапот на сајтов до вашиот уред</translation> <translation id="6040143037577758943">Затвори</translation> <translation id="6042308850641462728">Повеќе</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Блокирај колачиња од трети лица</translation> <translation id="6206551242102657620">Врската е безбедна. Информации за сајтот</translation> <translation id="6216432067784365534">Опции за <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" /> и <ph name="PERMISSION_2" /> се блокирани</translation> <translation id="6270391203985052864">Сајтовите можат да прашуваат дали да испраќаат известувања</translation> <translation id="6295158916970320988">Сите локации</translation> <translation id="6320088164292336938">Вибрации</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Репродуцирај</translation> <translation id="6818926723028410516">Изберете ставки</translation> <translation id="6864395892908308021">Уредов не може да чита NFC</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и уште <ph name="NUM_MORE" /> се блокирани</translation> <translation id="6910211073230771657">Избришано</translation> <translation id="6912998170423641340">Блокирај го читањето текст и слики од привремената меморија за сајтовите</translation> <translation id="6945221475159498467">Избери</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Изберете слики</translation> <translation id="7243308994586599757">Достапни се опции на дното на екранот</translation> <translation id="7250468141469952378">Избрани ставки: <ph name="ITEM_COUNT" /></translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" /> и <ph name="PERMISSION_2" /> се одобрени.</translation> <translation id="7302486331832100261">Вообичаено ги блокирате известувањата. За да ги дозволите, допрете „Детали“.</translation> <translation id="7423098979219808738">Прво прашај</translation> <translation id="7423538860840206698">Блокирано читање на привремената меморија</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Оваа содржина е од <ph name="DOMAIN_NAME" />, овозможена од Google.</translation> <translation id="8116925261070264013">Со исклучен звук</translation> <translation id="8131740175452115882">Потврди</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" /> е одобрена</translation> <translation id="8200772114523450471">Продолжи</translation> <translation id="8206354486702514201">Поставката ја наметнува администраторот.</translation> <translation id="8249310407154411074">Премести најгоре</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ml.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ml.xtb index 1920e2c5..f2c7ed00 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ml.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ml.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">സൈറ്റ് ക്രമീകരണങ്ങൾ</translation> <translation id="4200726100658658164">ലൊക്കേഷൻ ക്രമീകരണം തുറക്കുക</translation> <translation id="4226663524361240545">അറിയിപ്പുകൾ ലഭിക്കുമ്പോൾ ഉപകരണം വൈബ്രേറ്റ് ചെയ്തേക്കാം</translation> -<translation id="4242533952199664413">ക്രമീകരണം തുറക്കുക</translation> <translation id="4259722352634471385">നാവിഗേഷൻ തടഞ്ഞിരിക്കുന്നു: <ph name="URL" /></translation> <translation id="4278390842282768270">അനുവദനീയം</translation> <translation id="429312253194641664">സൈറ്റ്, മീഡിയ പ്ലേ ചെയ്യുന്നു</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_mn.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_mn.xtb index dd2e1be..ef46f15 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_mn.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_mn.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Сайт <ph name="SITE_NAME" /> нэмсэн</translation> <translation id="1383876407941801731">Хайлт</translation> <translation id="1384959399684842514">Таталтыг түр зогсоосон</translation> +<translation id="1431402976894535801">Сайтуудыг таныг байгаа үед мэдэхийг нь блоклоно</translation> <translation id="1446450296470737166">MIDI төхөөрөмжийг бүрэн хянахыг зөвшөөрөх</translation> <translation id="1509960214886564027">Олон сайтын онцлогууд ажиллахгүй байж болзошгүй</translation> <translation id="1620510694547887537">Камер</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Шуурхай апп-г нээх</translation> <translation id="2148716181193084225">Өнөөдөр</translation> <translation id="2182457891543959921">Сайтуудад таны эргэн тойрны 3D газрын зургийг үүсгэх эсвэл камерын хөдөлгөөнийг хянахыг зөвшөөрөхийн өмнө асуух (санал болгосон)</translation> +<translation id="2187243482123994665">Хэрэглэгч байгаа эсэх</translation> <translation id="2212565012507486665">Күүкиг зөвшөөрөх</translation> <translation id="2228071138934252756"><ph name="APP_NAME" />-д камертаа хандахыг зөвшөөрөхийн тулд камерыг мөн <ph name="BEGIN_LINK" />Андройдын тохиргоо<ph name="END_LINK" />-нд асаана уу.</translation> <translation id="2289270750774289114">Сайт ойролцоох Bluetooth төхөөрөмжийг илрүүлэх хүсэлтэй үед асуух (санал болгосон)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Видео тоглуулагч</translation> <translation id="3115898365077584848">Мэдээллийг харуулах</translation> <translation id="3123473560110926937">Зарим сайт дээр блоклосон</translation> +<translation id="3165371858310906303">Сайт таныг байгаа үед мэдэхийг хүссэн тохиолдолд асууна</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> хадгалсан өгөгдөл</translation> <translation id="321187648315454507"><ph name="APP_NAME" />-д танд мэдэгдэл илгээхийг зөвшөөрөхийн тулд мэдэгдлийг мөн <ph name="BEGIN_LINK" />Андройдын тохиргоо<ph name="END_LINK" />-нд асаана уу.</translation> <translation id="3227137524299004712">Микрофон</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Сайтын тохиргоо</translation> <translation id="4200726100658658164">Байршлын тохиргоог нээх</translation> <translation id="4226663524361240545">Мэдэгдэл ирэхэд төхөөрөмж чичрэнэ</translation> -<translation id="4242533952199664413">Нээлттэй тохиргоо</translation> <translation id="4259722352634471385">Навигацыг хориглосон байна: <ph name="URL" /></translation> <translation id="4278390842282768270">Зөвшөөрөгдсөн</translation> <translation id="429312253194641664">Сайт медиа тоглуулж байна</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Таны сонгох харилцагчдыг <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />-тай хуваалцана.</translation> <translation id="5300589172476337783">Харуулах</translation> <translation id="5301954838959518834">OK, ойлголоо</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> болон бусад <ph name="NUM_MORE" /> зөвшөөрөл</translation> <translation id="5313967007315987356">Сайт нэмэх</translation> <translation id="5317780077021120954">Хадгалах</translation> <translation id="5335288049665977812">Сайтад JavaScript-г ажиллуулахыг зөвшөөрөх (санал болгосон)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Нэр</translation> <translation id="5489227211564503167">Өнгөрсөн цаг: <ph name="TOTAL_TIME" />-н <ph name="ELAPSED_TIME" />.</translation> <translation id="5494752089476963479">Төвөгтэй эсвэл хуурамч зар харуулдаг сайтуудын зарыг блоклох</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" />-г зөвшөөрсөн, <ph name="PERMISSION_2" />-г блоклосон</translation> <translation id="5505264765875738116">Сайтууд нь танд мэдэгдэл илгээх зөвшөөрөл асуух боломжгүй</translation> <translation id="5516455585884385570">Мэдэгдлийн тохиргоог нээх</translation> <translation id="5527111080432883924">Сайтад түр санах ойн текст болон зураг уншихыг зөвшөөрөхөөс өмнө асуух (санал болгосон)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Камерыг Android тохиргоо хэсэгт унтраасан байна</translation> <translation id="5710871682236653961">Таныг NFC төхөөрөмж дээр товших үед мэдээлэл илгээх болон хүлээн авахыг сайтуудад зөвшөөрөхийн өмнө асуух (зөвлөсөн)</translation> <translation id="5719847187258001597">Энэ нь <ph name="ORIGIN" /> эсвэл таны Үндсэн нүүрэн дээрх үүний аппаас хадгалсан бүх өгөгдөл болон күүкиг арилгана.</translation> +<translation id="5771720122942595109"><ph name="PERMISSION_1" />-г блоклосон</translation> <translation id="5804241973901381774">Зөвшөөрлүүд</translation> <translation id="5860033963881614850">Идэвхгүй байна</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> болон бусад <ph name="NUM_MORE" /> зөвшөөрлийг зөвшөөрсөн</translation> <translation id="5876056640971328065">Видеог түр зогсоох</translation> <translation id="5916664084637901428">Асаах</translation> <translation id="5922853908706496913">Таны дэлгэцийг хуваалцаж байна</translation> <translation id="5939518447894949180">Дахин сэргээх</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Таны төхөөрөмж рүү хандах энэ сайтын хандалтыг удирдах</translation> <translation id="6040143037577758943">Хаах</translation> <translation id="6042308850641462728">Илүү их</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Гуравдагч талын күүкиг блоклох</translation> <translation id="6206551242102657620">Холболт аюулгүй байна. Сайтын мэдээлэл</translation> <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> Сонголт</translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" /> болон <ph name="PERMISSION_2" />-г блоклосон</translation> <translation id="6270391203985052864">Сайтууд нь танд мэдэгдэл илгээх зөвшөөрөл асуух боломжтой</translation> <translation id="6295158916970320988">Бүх сайт</translation> <translation id="6320088164292336938">Чичиргэх</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Тоглуулах</translation> <translation id="6818926723028410516">Зүйл сонгох</translation> <translation id="6864395892908308021">Энэ төхөөрөмж NFC-г унших боломжгүй байна</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> болон бусад <ph name="NUM_MORE" /> зөвшөөрлийг блоклосон</translation> <translation id="6910211073230771657">Устгасан</translation> <translation id="6912998170423641340">Сайтыг түр санах ойн текст болон зургийг уншихыг хориглох</translation> <translation id="6945221475159498467">Сонгох</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Зураг сонгох</translation> <translation id="7243308994586599757">Дэлгэцийн доод хэсэгт сонголт боломжтой</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" />-г сонгосон</translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" /> болон <ph name="PERMISSION_2" />-г зөвшөөрсөн</translation> <translation id="7302486331832100261">Та ихэвчлэн мэдэгдлийг хориглодог. Зөвшөөрөхийн тулд Дэлгэрэнгүй мэдээлэл дээр товшино уу.</translation> <translation id="7423098979219808738">Эхлээд асуу</translation> <translation id="7423538860840206698">Түр санах ойгоос уншихыг хориглосон</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479"><ph name="DOMAIN_NAME" />-н энэ агуулгыг Google танд хүргэж байна.</translation> <translation id="8116925261070264013">Дууг хаасан</translation> <translation id="8131740175452115882">Батлах</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" />-г зөвшөөрсөн</translation> <translation id="8200772114523450471">Сэргээх</translation> <translation id="8206354486702514201">Энэ тохиргоог таны админаас идэвхжүүлсэн байна.</translation> <translation id="8249310407154411074">Дээд хэсэг рүү зөөх</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb index 80d26c3..87a1134 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">साइट सेटिंग्ज</translation> <translation id="4200726100658658164">स्थान सेटिंग्ज उघडा</translation> <translation id="4226663524361240545">सूचनांमुळे डिव्हाइसचे कंपन होऊ शकते</translation> -<translation id="4242533952199664413">सेटिंग्ज उघडा</translation> <translation id="4259722352634471385">नेव्हिगेशन अवरोधित केले आहे: <ph name="URL" /></translation> <translation id="4278390842282768270">अनुमत</translation> <translation id="429312253194641664">साइट मीडिया प्ले करत आहे</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ms.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ms.xtb index 3cfb64fb..e87e763 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ms.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ms.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Tapak <ph name="SITE_NAME" /> telah ditambahkan</translation> <translation id="1383876407941801731">Carian</translation> <translation id="1384959399684842514">Muat turun dijeda</translation> +<translation id="1431402976894535801">Sekat tapak daripada mengetahui waktu anda ada</translation> <translation id="1446450296470737166">Benarkan kawalan penuh peranti MIDI</translation> <translation id="1509960214886564027">Ciri pada banyak tapak mungkin rosak</translation> <translation id="1620510694547887537">Kamera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Buka Apl Segera</translation> <translation id="2148716181193084225">Hari ini</translation> <translation id="2182457891543959921">Tanya sebelum membenarkan tapak membuat peta 3D bagi persekitaran anda atau menjejaki kedudukan kamera (disyorkan)</translation> +<translation id="2187243482123994665">Kehadiran pengguna</translation> <translation id="2212565012507486665">Benarkan kuki</translation> <translation id="2228071138934252756">Untuk membolehkan <ph name="APP_NAME" /> mengakses kamera anda, hidupkan juga kamera dalam <ph name="BEGIN_LINK" />Tetapan Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Tanya apabila tapak mahu mencari peranti Bluetooth berdekatan (disyorkan)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Pemain video</translation> <translation id="3115898365077584848">Tunjukkan Maklumat</translation> <translation id="3123473560110926937">Disekat di sesetengah tapak</translation> +<translation id="3165371858310906303">Tanya apabila tapak ingin mengetahui waktu anda ada</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> data disimpan</translation> <translation id="321187648315454507">Untuk membolehkan <ph name="APP_NAME" /> menghantar pemberitahuan kepada anda, hidupkan juga pemberitahuan dalam <ph name="BEGIN_LINK" />Tetapan Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Mikrofon</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Tetapan tapak</translation> <translation id="4200726100658658164">Buka Tetapan Lokasi</translation> <translation id="4226663524361240545">Pemberitahuan boleh menggetarkan peranti</translation> -<translation id="4242533952199664413">Buka tetapan</translation> <translation id="4259722352634471385">Navigasi disekat: <ph name="URL" /></translation> <translation id="4278390842282768270">Dibenarkan</translation> <translation id="429312253194641664">Tapak sedang memainkan media</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Kenalan yang anda pilih akan dikongsi dengan <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Paparkan</translation> <translation id="5301954838959518834">OK, faham</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> dan <ph name="NUM_MORE" /> lagi</translation> <translation id="5313967007315987356">Tambahkan tapak</translation> <translation id="5317780077021120954">Simpan</translation> <translation id="5335288049665977812">Benarkan tapak menjalankan JavaScript (disyorkan)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Nama</translation> <translation id="5489227211564503167"><ph name="ELAPSED_TIME" /> masa berlalu daripada <ph name="TOTAL_TIME" /></translation> <translation id="5494752089476963479">Sekat iklan di tapak yang menyiarkan iklan yang mengganggu atau mengelirukan</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" /> dibenarkan, <ph name="PERMISSION_2" /> disekat</translation> <translation id="5505264765875738116">Tapak tidak boleh membuat permintaan untuk menghantar pemberitahuan</translation> <translation id="5516455585884385570">Buka tetapan pemberitahuan</translation> <translation id="5527111080432883924">Tanya sebelum membenarkan tapak membaca teks dan imej daripada papan keratan (disyorkan)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Kamera dimatikan dalam tetapan Android</translation> <translation id="5710871682236653961">Tanya sebelum membenarkan tapak menghantar dan menerima maklumat semasa anda mengetik peranti NFC (disyorkan)</translation> <translation id="5719847187258001597">Tindakan ini akan mengosongkan semua data dan kuki yang disimpan oleh <ph name="ORIGIN" /> atau oleh aplnya pada Skrin utama anda.</translation> +<translation id="5771720122942595109"><ph name="PERMISSION_1" /> disekat</translation> <translation id="5804241973901381774">Kebenaran</translation> <translation id="5860033963881614850">Dimatikan</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> dan <ph name="NUM_MORE" /> lagi dibenarkan</translation> <translation id="5876056640971328065">Jeda video</translation> <translation id="5916664084637901428">Hidupkan</translation> <translation id="5922853908706496913">Berkongsi skrin anda</translation> <translation id="5939518447894949180">Tetapkan semula</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Kawal akses tapak ini kepada peranti anda</translation> <translation id="6040143037577758943">Tutup</translation> <translation id="6042308850641462728">Lagi</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Sekat kuki pihak ketiga</translation> <translation id="6206551242102657620">Sambungan selamat. Maklumat tapak</translation> <translation id="6216432067784365534">Pilihan <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" /> dan <ph name="PERMISSION_2" /> disekat</translation> <translation id="6270391203985052864">Tapak boleh membuat permintaan untuk menghantar pemberitahuan</translation> <translation id="6295158916970320988">Semua tapak</translation> <translation id="6320088164292336938">Getar</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Mainkan</translation> <translation id="6818926723028410516">Pilih item</translation> <translation id="6864395892908308021">Peranti ini tidak dapat membaca NFC</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> dan <ph name="NUM_MORE" /> lagi disekat</translation> <translation id="6910211073230771657">Dipadamkan</translation> <translation id="6912998170423641340">Sekat tapak daripada membaca teks dan imej daripada papan keratan</translation> <translation id="6945221475159498467">Pilih</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Pilih imej</translation> <translation id="7243308994586599757">Pilihan tersedia berhampiran bahagian bawah skrin</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> dipilih</translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" /> dan <ph name="PERMISSION_2" /> dibenarkan</translation> <translation id="7302486331832100261">Anda biasanya menyekat pemberitahuan. Untuk membenarkan pemberitahuan, ketik Butiran.</translation> <translation id="7423098979219808738">Tanya dahulu</translation> <translation id="7423538860840206698">Disekat daripada membaca papan keratan</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Kandungan ini adalah daripada <ph name="DOMAIN_NAME" />, disampaikan oleh Google.</translation> <translation id="8116925261070264013">Diredam</translation> <translation id="8131740175452115882">Sahkan</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" /> dibenarkan</translation> <translation id="8200772114523450471">Sambung semula</translation> <translation id="8206354486702514201">Tetapan ini dikuatkuasakan oleh pentadbir anda.</translation> <translation id="8249310407154411074">Alihkan ke atas</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb index 42e4121..190c8c5 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">ဆိုက် <ph name="SITE_NAME" /> အား ထည့်ခဲ့၏</translation> <translation id="1383876407941801731">ရှာဖွေမှု</translation> <translation id="1384959399684842514">ဒေါင်းလုဒ်လုပ်မှု ဆိုင်းငံ့ထားသည်</translation> +<translation id="1431402976894535801">သင်ရှိနေသည်ကို ဝဘ်ဆိုက်များကသိခြင်းအား ပိတ်ထားရန်</translation> <translation id="1446450296470737166">MIDI ကိရိယာများအား အပြည့်အဝ ထိန်းချုပ်ခွင့် ပြုရန်</translation> <translation id="1509960214886564027">ဝဘ်ဆိုက်အတော်များများရှိ ဝန်ဆောင်မှုများ ရပ်သွားနိုင်သည်</translation> <translation id="1620510694547887537">ကင်မရာ</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">ချက်ခြင်းသုံးအက်ပ်ကို ဖွင့်ရန်</translation> <translation id="2148716181193084225">ယနေ့</translation> <translation id="2182457891543959921">သင့်ပတ်ဝန်းကျင်၏ 3D မြေပုံဆွဲခြင်း သို့မဟုတ် ကင်မရာအနေအထား ခြေရာခံခြင်းတို့အတွက် ဝဘ်ဆိုက်များကို ခွင့်မပြုမီ မေးမြန်းရန် (အကြံပြုထားသည်)</translation> +<translation id="2187243482123994665">အသုံးပြုသူ ရှိနေမှု</translation> <translation id="2212565012507486665">ကွတ်ကီးများ ခွင့်ပြုရန်</translation> <translation id="2228071138934252756"><ph name="APP_NAME" /> က သင့်ကင်မရာကို သုံးနိုင်ရန် <ph name="BEGIN_LINK" />Android ဆက်တင်များ<ph name="END_LINK" /> တွင်လည်း ကင်မရာကို ဖွင့်ပါ။</translation> <translation id="2289270750774289114">ဝဘ်ဆိုက်က အနီးအနားရှိ ဘလူးတုသ်ကိရိယာများ ရှာဖွေလိုသည့်အခါ ခွင့်တောင်းရန် (အကြံပြုထားသည်)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">ဗီဒီယိုဖွင့်စနစ်</translation> <translation id="3115898365077584848">အချက်အလက်များကို ပြသရန်</translation> <translation id="3123473560110926937">အချို့ဝဘ်ဆိုက်များတွင် ပိတ်ထားသည်</translation> +<translation id="3165371858310906303">သင်ရှိနေသည်ကို ဝဘ်ဆိုက်ကသိလိုသောအခါ ခွင့်တောင်းရန်</translation> <translation id="3198916472715691905">သိမ်းထားသော ဒေတာ <ph name="STORAGE_AMOUNT" /></translation> <translation id="321187648315454507"><ph name="APP_NAME" /> က အကြောင်းကြားချက်များ ပေးပို့နိုင်ရန် <ph name="BEGIN_LINK" />Android ဆက်တင်များ<ph name="END_LINK" /> တွင်လည်း အကြောင်းကြားချက်များ ဖွင့်ပါ။</translation> <translation id="3227137524299004712">မိုက်ခရိုဖုန်း</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">ဝက်ဆိုက် ဆက်တင်များ</translation> <translation id="4200726100658658164">'တည်နေရာပြဆက်တင်များ' ကို ဖွင့်ပါ</translation> <translation id="4226663524361240545">အကြောင်းကြားချက်သည် စက်ပစ္စည်းကို တုန်ခါစေပါမည်</translation> -<translation id="4242533952199664413">ဆက်တင်များကို ဖွင့်ရန်</translation> <translation id="4259722352634471385">သွားလာမှုပြလမ်းညွှန်အား ပိတ်ထား၏- <ph name="URL" /></translation> <translation id="4278390842282768270">ခွင့်ပြုထား</translation> <translation id="429312253194641664">ဝဘ်ဆိုက်တစ်ခုက မီဒီယာကို ဖွင့်နေသည်</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">သင်ရွေးချယ်သော အဆက်အသွယ်များကို <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> နှင့် မျှဝေပါမည်။</translation> <translation id="5300589172476337783">ပြရန်</translation> <translation id="5301954838959518834">OK</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />၊ <ph name="PERMISSION_2" /> နှင့် နောက်ထပ် <ph name="NUM_MORE" /> ခု</translation> <translation id="5313967007315987356">ဆိုက်အား ထည့်ရန်</translation> <translation id="5317780077021120954">သိမ်းရန်</translation> <translation id="5335288049665977812">ဆိုက်များကို JavaScript အားဖွင့်ခွင့်ပေးပါ (အကြံပြုထားသည်)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">အမည်များ</translation> <translation id="5489227211564503167">ကုန်လွန်သွားချိန် <ph name="TOTAL_TIME" /> အနက် <ph name="ELAPSED_TIME" />။</translation> <translation id="5494752089476963479">စိတ်အနှောင့်အယှက်ဖြစ်စေသော သို့မဟုတ် အထင်အမြင်မှားစေနိုင်သော ကြော်ငြာများပြသသည့် ဝဘ်ဆိုက်များတွင် ကြော်ငြာများကို ပိတ်သည်</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" /> ခွင့်ပြုထားသည်၊ <ph name="PERMISSION_2" /> ပိတ်ထားသည်</translation> <translation id="5505264765875738116">ဝဘ်ဆိုက်များက အကြောင်းကြားချက်များပို့ရန် တောင်းဆို၍မရပါ</translation> <translation id="5516455585884385570">အကြောင်းကြားချက် ဆက်တင်များကို ဖွင့်ရန်</translation> <translation id="5527111080432883924">ကလစ်ဘုတ်ရှိ စာနှင့် ပုံများကို ဝဘ်ဆိုက်များအား ကြည့်ရှုခွင့်မပြုမီ မေးမြန်းပါ (အကြံပြုထားသည်)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Android ဆက်တင်များတွင် 'ကင်မရာ' ပိတ်ထားသည်</translation> <translation id="5710871682236653961">NFC စက်များကို တို့လိုက်သည့်အခါ အချက်အလက်များ ပို့ရန်၊ လက်ခံရန် ဝဘ်ဆိုက်များကို ခွင့်မပြုမီ ခွင့်တောင်းပါ (အကြံပြုထားသည်)</translation> <translation id="5719847187258001597">၎င်းက သင့် 'ပင်မစာမျက်နှာ' ပေါ်ရှိ <ph name="ORIGIN" /> သို့မဟုတ် ၎င်း၏အက်ပ်က သိမ်းထားသော ဒေတာနှင့် ကွတ်ကီးအားလုံးကို ရှင်းထုတ်လိုက်ပါမည်။</translation> +<translation id="5771720122942595109"><ph name="PERMISSION_1" /> ပိတ်ထားသည်</translation> <translation id="5804241973901381774">ခွင့်ပြုချက်များ</translation> <translation id="5860033963881614850">ပိတ်ထား</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />၊ <ph name="PERMISSION_2" /> နှင့် နောက်ထပ် <ph name="NUM_MORE" /> ခု ခွင့်ပြုထားသည်</translation> <translation id="5876056640971328065">ဗီဒီယို ခဏရပ်ရန်</translation> <translation id="5916664084637901428">ဖွင့်ရန်</translation> <translation id="5922853908706496913">သင့်ဖန်သားပြင်ကို မျှဝေနေသည်</translation> <translation id="5939518447894949180">ပြန်ညှိ</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">ဤဝဘ်ဆိုက်သုံးခွင့်ကို သင့်စက်တွင် ထိန်းချုပ်ပါ</translation> <translation id="6040143037577758943">ပိတ်ရန်</translation> <translation id="6042308850641462728">နောက်ထပ်</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">ပြင်ပကုမ္ပဏီကွတ်ကီးများကို ပိတ်ဆို့မည်</translation> <translation id="6206551242102657620">ချိတ်ဆက်မှုသည် လုံခြုံပါသည်။ ဝဘ်ဆိုက် အချက်အလက်</translation> <translation id="6216432067784365534">ရွေးစရာ <ph name="NAME_OF_LIST_ITEM" /> ခု</translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" /> နှင့် <ph name="PERMISSION_2" /> ပိတ်ထားသည်</translation> <translation id="6270391203985052864">ဝဘ်ဆိုက်များက အကြောင်းကြားချက်များပို့ရန် တောင်းဆိုနိုင်သည်</translation> <translation id="6295158916970320988">ဆိုဒ်များအားလုံး</translation> <translation id="6320088164292336938">တုန်ခါခြင်း</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">ဖွင့်ရန်</translation> <translation id="6818926723028410516">စာရင်းမှ ရွေးရန်</translation> <translation id="6864395892908308021">ဤစက်က NFC ဖတ်၍မရပါ</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />၊ <ph name="PERMISSION_2" /> နှင့် နောက်ထပ် <ph name="NUM_MORE" /> ခုကို ပိတ်ထားသည်</translation> <translation id="6910211073230771657">ဖျက်ပြီး</translation> <translation id="6912998170423641340">ကလစ်ဘုတ်ရှိ စာနှင့် ပုံများအား မကြည့်နိုင်ရန် ဝဘ်ဆိုက်များကို ပိတ်ပါ</translation> <translation id="6945221475159498467">ရွေးရန်</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">ပုံများကို ရွေးရန်</translation> <translation id="7243308994586599757">ရွေးစရာများမှာ မျက်နှာပြင်၏ အောက်ခြေပိုင်းနားမှာ ရှိကြသည်</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> ခု ရွေးထားသည်</translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" /> နှင့် <ph name="PERMISSION_2" /> ခွင့်ပြုထားသည်</translation> <translation id="7302486331832100261">ပုံမှန်အားဖြင့် သင်သည် အကြောင်းကြားချက်များကို ပိတ်ထားသည်။ ခွင့်ပြုရန် 'အသေးစိတ်များ' ကို တို့ပါ။</translation> <translation id="7423098979219808738">အရင်မေးပါ</translation> <translation id="7423538860840206698">ကလစ်ဘုတ်ကို ကြည့်ရှုခွင့် ပိတ်ထားသည်</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">ဤအကြောင်းအရာသည် Google မှနေ၍ပံ့ပိုးပေးထားသည့် <ph name="DOMAIN_NAME" /> မှဖြစ်သည်။</translation> <translation id="8116925261070264013">ဖျောက်ထားသည်</translation> <translation id="8131740175452115882">အတည်ပြုရန်</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" /> ခွင့်ပြုထားသည်</translation> <translation id="8200772114523450471">ပြန်ဆက်ရန်</translation> <translation id="8206354486702514201">ဤဆက်တင်အား သင့်ကြီးကြပ်သူမှ တွန်းအားပေးထားခြင်း ဖြစ်သည်။</translation> <translation id="8249310407154411074">အပေါ်ဆုံးသို့ ရွှေ့ပါ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb index a0f19f7..12ce505 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">साइट सेटिङहरू</translation> <translation id="4200726100658658164">स्थानसम्बन्धी सेटिङ खोल्नुहोस्</translation> <translation id="4226663524361240545">सूचनाहरूले गर्दा यन्त्र कम्पन गर्न सक्छ</translation> -<translation id="4242533952199664413">सेटिङहरू खोल्नुहोस्</translation> <translation id="4259722352634471385">नेभिगेशन रोकियो: <ph name="URL" /></translation> <translation id="4278390842282768270">अनुमति प्राप्त</translation> <translation id="429312253194641664">कुनै साइटले मिडियो प्ले गरिरहेको छ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb index b078811..30adbd89 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Site <ph name="SITE_NAME" /> toegevoegd</translation> <translation id="1383876407941801731">Zoeken</translation> <translation id="1384959399684842514">Download onderbroken</translation> +<translation id="1431402976894535801">Voorkomen dat sites weten wanneer je aanwezig bent</translation> <translation id="1446450296470737166">Volledig beheer van MIDI-apparaten toestaan</translation> <translation id="1509960214886564027">Functies op veel sites werken mogelijk niet meer</translation> <translation id="1620510694547887537">Camera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Instant-app openen</translation> <translation id="2148716181193084225">Vandaag</translation> <translation id="2182457891543959921">Vragen voordat sites een 3D-kaart van je omgeving mogen maken of de camerapositie mogen volgen (aanbevolen)</translation> +<translation id="2187243482123994665">Aanwezigheid van gebruiker</translation> <translation id="2212565012507486665">Cookies toestaan</translation> <translation id="2228071138934252756">Als je <ph name="APP_NAME" /> toegang wilt geven tot je camera, moet je de camera ook inschakelen via de <ph name="BEGIN_LINK" />Android-instellingen<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Vragen wanneer een site Bluetooth-apparaten in de buurt wilt detecteren (aanbevolen)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Videospeler</translation> <translation id="3115898365077584848">Informatie weergeven</translation> <translation id="3123473560110926937">Geblokkeerd op bepaalde sites</translation> +<translation id="3165371858310906303">Vragen als een site wil weten wanneer je aanwezig bent</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> opgeslagen gegevens</translation> <translation id="321187648315454507">Als je wilt dat <ph name="APP_NAME" /> je meldingen stuurt, moet je meldingen ook inschakelen via de <ph name="BEGIN_LINK" />Android-instellingen<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Microfoon</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Site-instellingen</translation> <translation id="4200726100658658164">Locatie-instellingen openen</translation> <translation id="4226663524361240545">Het apparaat kan trillen bij meldingen</translation> -<translation id="4242533952199664413">Instellingen openen</translation> <translation id="4259722352634471385">Navigatie is geblokkeerd: <ph name="URL" /></translation> <translation id="4278390842282768270">Toegestaan</translation> <translation id="429312253194641664">Een site speelt media af</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">De contacten die je selecteert, worden gedeeld met <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Weergeven</translation> <translation id="5301954838959518834">OK, begrepen</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> en nog <ph name="NUM_MORE" /></translation> <translation id="5313967007315987356">Site toevoegen</translation> <translation id="5317780077021120954">Opslaan</translation> <translation id="5335288049665977812">Sites toestaan JavaScript uit te voeren (aanbevolen)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Namen</translation> <translation id="5489227211564503167">De verstreken tijd is <ph name="ELAPSED_TIME" /> van <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Advertenties blokkeren op sites die opdringerige of misleidende advertenties weergeven</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" /> toegestaan, <ph name="PERMISSION_2" /> geblokkeerd</translation> <translation id="5505264765875738116">Sites kunnen niet vragen of ze je meldingen mogen sturen</translation> <translation id="5516455585884385570">Instellingen voor meldingen openen</translation> <translation id="5527111080432883924">Vragen voordat sites toestemming krijgen om tekst en afbeeldingen vanaf het klembord te lezen (aanbevolen)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Camera is uitgeschakeld in de Android-instellingen</translation> <translation id="5710871682236653961">Vragen voordat sites informatie mogen sturen en ontvangen als je NFC-apparaten tegen elkaar houdt (aanbevolen)</translation> <translation id="5719847187258001597">Hiermee wis je alle gegevens en cookies die zijn opgeslagen door <ph name="ORIGIN" /> of de bijbehorende app op je startscherm.</translation> +<translation id="5771720122942595109"><ph name="PERMISSION_1" /> geblokkeerd</translation> <translation id="5804241973901381774">Rechten</translation> <translation id="5860033963881614850">Uit</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> en nog <ph name="NUM_MORE" /> toegestaan</translation> <translation id="5876056640971328065">Video pauzeren</translation> <translation id="5916664084637901428">Aan</translation> <translation id="5922853908706496913">Je scherm delen</translation> <translation id="5939518447894949180">Resetten</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">De toegang van deze site tot je apparaat beheren</translation> <translation id="6040143037577758943">Sluiten</translation> <translation id="6042308850641462728">Meer</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Indirecte cookies blokkeren</translation> <translation id="6206551242102657620">De verbinding is beveiligd. Site-informatie</translation> <translation id="6216432067784365534">Opties voor <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" /> en <ph name="PERMISSION_2" /> geblokkeerd</translation> <translation id="6270391203985052864">Sites kunnen vragen of ze je meldingen mogen sturen</translation> <translation id="6295158916970320988">Alle sites</translation> <translation id="6320088164292336938">Trillen</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Spelen</translation> <translation id="6818926723028410516">Items selecteren</translation> <translation id="6864395892908308021">Dit apparaat kan NFC niet lezen</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> en nog <ph name="NUM_MORE" /> geblokkeerd</translation> <translation id="6910211073230771657">Verwijderd</translation> <translation id="6912998170423641340">Voorkomen dat sites tekst en afbeeldingen vanaf het klembord kunnen lezen</translation> <translation id="6945221475159498467">Selecteren</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Afbeeldingen selecteren</translation> <translation id="7243308994586599757">Opties beschikbaar onder aan het scherm</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> geselecteerd</translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" /> en <ph name="PERMISSION_2" /> toegestaan</translation> <translation id="7302486331832100261">Meestal blokkeer je meldingen. Tik op Details om meldingen toe te staan.</translation> <translation id="7423098979219808738">Eerst vragen</translation> <translation id="7423538860840206698">Lezen van het klembord geblokkeerd</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Deze content is afkomstig van <ph name="DOMAIN_NAME" />, geleverd door Google.</translation> <translation id="8116925261070264013">Gedempt</translation> <translation id="8131740175452115882">Bevestigen</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" /> toegestaan</translation> <translation id="8200772114523450471">Doorgaan</translation> <translation id="8206354486702514201">Deze instelling wordt door je beheerder afgedwongen.</translation> <translation id="8249310407154411074">Bovenaan zetten</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb index 46663be..6d4d20b 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Nettstedet <ph name="SITE_NAME" /> er lagt til</translation> <translation id="1383876407941801731">Søk</translation> <translation id="1384959399684842514">Nedlastingen er satt på pause</translation> +<translation id="1431402976894535801">Blokkér nettsteder fra å vite når du er til stede</translation> <translation id="1446450296470737166">Full kontroll over MIDI-enheter</translation> <translation id="1509960214886564027">Det kan hende at funksjoner på mange nettsteder slutter å fungere</translation> <translation id="1620510694547887537">Kamera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Åpne instant-appen</translation> <translation id="2148716181193084225">I dag</translation> <translation id="2182457891543959921">Spør før nettsteder får lage 3D-kart av omgivelsene dine eller spore kameraposisjonen (anbefales)</translation> +<translation id="2187243482123994665">Brukertilstedeværelse</translation> <translation id="2212565012507486665">Tillat informasjonskapsler</translation> <translation id="2228071138934252756">For å gi <ph name="APP_NAME" /> tilgang til kameraet må du også slå på kameraet i <ph name="BEGIN_LINK" />Android-innstillingene<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Spør når nettsteder vil oppdage Bluetooth-enheter i nærheten (anbefales)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Videospiller</translation> <translation id="3115898365077584848">Vis informasjon</translation> <translation id="3123473560110926937">Blokkert på enkelte nettsteder</translation> +<translation id="3165371858310906303">Spør når nettsteder vil vite når du er til stede</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> lagrede data</translation> <translation id="321187648315454507">For at <ph name="APP_NAME" /> skal kunne sende deg varsler, må du også slå på varsler i <ph name="BEGIN_LINK" />Android-innstillingene<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Mikrofon</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Nettstedsinnstillinger</translation> <translation id="4200726100658658164">Åpne posisjonsinnstillingene</translation> <translation id="4226663524361240545">Varsler kan gjøre at enheten vibrerer</translation> -<translation id="4242533952199664413">Åpne innstillingene</translation> <translation id="4259722352634471385">Nettadressen er blokkert: <ph name="URL" /></translation> <translation id="4278390842282768270">Tillatt</translation> <translation id="429312253194641664">Et nettsted spiller av medier</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Kontaktene du velger, deles med <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Vis</translation> <translation id="5301954838959518834">Greit</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> og <ph name="NUM_MORE" /> til</translation> <translation id="5313967007315987356">Legg til et nettsted</translation> <translation id="5317780077021120954">Lagre</translation> <translation id="5335288049665977812">Tillat nettsteder å kjøre JavaScript (anbefales)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Navn</translation> <translation id="5489227211564503167">Medgått tid: <ph name="ELAPSED_TIME" /> av <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Blokkér annonser på nettsteder som ofte viser forstyrrende eller villedende annonser</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" /> er tillatt; <ph name="PERMISSION_2" /> er blokkert</translation> <translation id="5505264765875738116">Nettsteder kan ikke be om å få sende deg varsler</translation> <translation id="5516455585884385570">Åpne innstillingene for varsler</translation> <translation id="5527111080432883924">Spør før nettsteder får tilgang til tekst og bilder fra utklipptavlen (anbefalt)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Kameraet er slått av i Android-innstillingene</translation> <translation id="5710871682236653961">Spør før nettsteder får tillatelse til å sende og motta info når du berører NFC-enheter (anbefales)</translation> <translation id="5719847187258001597">Dette sletter alle data og informasjonskapsler som er lagret av <ph name="ORIGIN" /> eller den tilhørende appen på startskjermen.</translation> +<translation id="5771720122942595109"><ph name="PERMISSION_1" /> er blokkert</translation> <translation id="5804241973901381774">Tillatelser</translation> <translation id="5860033963881614850">Av</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> og <ph name="NUM_MORE" /> til er tillatt</translation> <translation id="5876056640971328065">Sett videoen på pause</translation> <translation id="5916664084637901428">På</translation> <translation id="5922853908706496913">Deler skjermen din</translation> <translation id="5939518447894949180">Tilbakestill</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> – <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Kontrollér dette nettstedets tilgang til enheten din</translation> <translation id="6040143037577758943">Lukk</translation> <translation id="6042308850641462728">Mer</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Blokkér informasjonskapsler fra tredjeparter</translation> <translation id="6206551242102657620">Tilkoblingen er sikker. Informasjon om nettstedet</translation> <translation id="6216432067784365534">Alternativer for <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" /> og <ph name="PERMISSION_2" /> er blokkert</translation> <translation id="6270391203985052864">Nettsteder kan be om å få sende deg varsler</translation> <translation id="6295158916970320988">Alle nettsteder</translation> <translation id="6320088164292336938">Vibrering</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Spill av</translation> <translation id="6818926723028410516">Velg elementer</translation> <translation id="6864395892908308021">Denne enheten kan ikke lese NFC</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> og <ph name="NUM_MORE" /> til er blokkert</translation> <translation id="6910211073230771657">Slettet</translation> <translation id="6912998170423641340">Blokkér nettsteder fra å få tilgang til tekst og bilder fra utklippstavlen</translation> <translation id="6945221475159498467">Velg</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Velg bilder</translation> <translation id="7243308994586599757">Du finner alternativer ved bunnen av skjermen</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> er valgt</translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" /> og <ph name="PERMISSION_2" /> er tillatt</translation> <translation id="7302486331832100261">Du blokkerer vanligvis varsler. For å tillate dette trykker du på Detaljer.</translation> <translation id="7423098979219808738">Spør først</translation> <translation id="7423538860840206698">Blokkert fra å lese utklippstavlen</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Dette innholdet er fra <ph name="DOMAIN_NAME" /> og er levert av Google.</translation> <translation id="8116925261070264013">Kuttet lyd</translation> <translation id="8131740175452115882">Bekreft</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" /> er tillatt</translation> <translation id="8200772114523450471">Fortsett</translation> <translation id="8206354486702514201">Denne innstillingen håndheves av administratoren din.</translation> <translation id="8249310407154411074">Flytt til toppen</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb index 936d1c5..69b43295 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">ସାଇଟ୍ ସେଟିଂସ୍</translation> <translation id="4200726100658658164">ଲୋକେସନ୍ ସେଟିଂସ୍ ଖୋଲନ୍ତୁ</translation> <translation id="4226663524361240545">ବିଜ୍ଞପ୍ତି ଡିଭାଇସ୍କୁ ଭାଇବ୍ରେଟ୍ କରିପାରେ</translation> -<translation id="4242533952199664413">ସେଟିଂସ୍ ଖୋଲନ୍ତୁ</translation> <translation id="4259722352634471385">ନାଭିଗେସନ୍ ଅବରୋଧ କରାଯାଇଛି: <ph name="URL" /></translation> <translation id="4278390842282768270">ଅନୁମୋଦିତ</translation> <translation id="429312253194641664">କୌଣସି ସାଇଟ୍ ମିଡିଆ ଚଲାଉଛି</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb index 366dad7f..d5a2e88 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">ਸਾਈਟ ਸੈਟਿੰਗਾਂ</translation> <translation id="4200726100658658164">ਟਿਕਾਣਾ ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ</translation> <translation id="4226663524361240545">ਸੂਚਨਾਵਾਂ ਡੀਵਾਈਸ ਨੂੰ ਥਰਥਰਾਹਟ ਕਰ ਸਕਦੀਆਂ ਹਨ</translation> -<translation id="4242533952199664413">ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ</translation> <translation id="4259722352634471385">ਨੈਵੀਗੇਸ਼ਨ ਬਲੌਕ ਕੀਤੀ ਹੈ: <ph name="URL" /></translation> <translation id="4278390842282768270">ਆਗਿਆ ਦਿੱਤੀ</translation> <translation id="429312253194641664">ਕੋਈ ਸਾਈਟ ਮੀਡੀਆ ਫ਼ਾਈਲ ਨੂੰ ਚਲਾ ਰਹੀ ਹੈ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pl.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pl.xtb index 0f797b57..730af1b7 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_pl.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pl.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Strona <ph name="SITE_NAME" /> została dodana</translation> <translation id="1383876407941801731">Szukaj</translation> <translation id="1384959399684842514">Pobieranie wstrzymane</translation> +<translation id="1431402976894535801">Nie pozwalaj stronom sprawdzać, czy aktualnie używasz urządzenia</translation> <translation id="1446450296470737166">Pełne sterowanie urządzeniami MIDI</translation> <translation id="1509960214886564027">Funkcje wielu stron mogą nie działać prawidłowo</translation> <translation id="1620510694547887537">Kamera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Otwórz aplikację błyskawiczną</translation> <translation id="2148716181193084225">Dzisiaj</translation> <translation id="2182457891543959921">Pytaj, zanim zezwolisz stronom na tworzenie mapy 3D Twojego otoczenia lub śledzenie pozycji kamery (zalecane)</translation> +<translation id="2187243482123994665">Obecność użytkownika</translation> <translation id="2212565012507486665">Zezwalaj na pliki cookie</translation> <translation id="2228071138934252756">Aby zezwolić aplikacji <ph name="APP_NAME" /> na dostęp do aparatu, musisz go też włączyć w <ph name="BEGIN_LINK" />Ustawieniach Androida<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Pytaj, gdy strona chce wykryć urządzenia Bluetooth w pobliżu (zalecane)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Odtwarzacz</translation> <translation id="3115898365077584848">Pokaż informacje</translation> <translation id="3123473560110926937">Blokowane na niektórych stronach</translation> +<translation id="3165371858310906303">Pytaj, gdy strona chce wiedzieć, kiedy używasz urządzenia</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> zapisanych danych</translation> <translation id="321187648315454507">Aby zezwolić aplikacji <ph name="APP_NAME" /> na wysyłanie do Ciebie powiadomień, musisz je też włączyć w <ph name="BEGIN_LINK" />ustawieniach Androida<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Mikrofon</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Ustawienia witryn</translation> <translation id="4200726100658658164">Otwórz ustawienia lokalizacji</translation> <translation id="4226663524361240545">Powiadomienia będą sygnalizowane wibracjami</translation> -<translation id="4242533952199664413">Otwórz ustawienia</translation> <translation id="4259722352634471385">Adres zablokowany: <ph name="URL" /></translation> <translation id="4278390842282768270">Dopuszczone</translation> <translation id="429312253194641664">Strona odtwarza multimedia</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Wybrane kontakty zostaną udostępnione witrynie <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Pokaż</translation> <translation id="5301954838959518834">Rozumiem</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> i jeszcze <ph name="NUM_MORE" /></translation> <translation id="5313967007315987356">Dodaj stronę</translation> <translation id="5317780077021120954">Zapisz</translation> <translation id="5335288049665977812">Zezwalaj na wykonywanie kodu JavaScript w witrynach (zalecane)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Nazwy</translation> <translation id="5489227211564503167">Upłynęło: <ph name="ELAPSED_TIME" /> z <ph name="TOTAL_TIME" /></translation> <translation id="5494752089476963479">Blokuj reklamy na stronach, które wyświetlają reklamy uciążliwe lub wprowadzające w błąd</translation> +<translation id="5502860503640766021">Dozwolone: <ph name="PERMISSION_1" />, zablokowane: <ph name="PERMISSION_2" /></translation> <translation id="5505264765875738116">Strony nie mogą prosić o zgodę na wysyłanie powiadomień</translation> <translation id="5516455585884385570">Otwórz ustawienia powiadomień</translation> <translation id="5527111080432883924">Pytaj, czy zezwolić stronom na odczytywanie tekstu i obrazów ze schowka (zalecane)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Kamera jest wyłączona w ustawieniach Androida</translation> <translation id="5710871682236653961">Pytaj, zanim zezwolisz stronom na wysyłanie i odbieranie informacji po dotknięciu urządzeń z funkcją NFC (zalecane)</translation> <translation id="5719847187258001597">Spowoduje to usunięcie wszystkich danych i plików cookie zapisanych przez stronę <ph name="ORIGIN" /> lub jej aplikację na ekranie głównym.</translation> +<translation id="5771720122942595109">Zablokowane: <ph name="PERMISSION_1" /></translation> <translation id="5804241973901381774">Uprawnienia</translation> <translation id="5860033963881614850">Wyłączone</translation> +<translation id="5863245810240683687">Dozwolone: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> i jeszcze <ph name="NUM_MORE" /></translation> <translation id="5876056640971328065">Wstrzymaj film</translation> <translation id="5916664084637901428">Włączone</translation> <translation id="5922853908706496913">Udostępnianie ekranu</translation> <translation id="5939518447894949180">Resetuj</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> – <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Zarządzaj dostępem tej strony do Twojego urządzenia</translation> <translation id="6040143037577758943">Zamknij</translation> <translation id="6042308850641462728">Więcej</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Blokuj pliki cookie innych firm</translation> <translation id="6206551242102657620">Połączenie jest bezpieczne. Informacje o witrynie</translation> <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> – opcje</translation> +<translation id="6262279340360821358">Zablokowane: <ph name="PERMISSION_1" /> i <ph name="PERMISSION_2" /></translation> <translation id="6270391203985052864">Strony mogą prosić o zgodę na wysyłanie powiadomień</translation> <translation id="6295158916970320988">Wszystkie witryny</translation> <translation id="6320088164292336938">Wibracje</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Odtwórz</translation> <translation id="6818926723028410516">Wybierz elementy</translation> <translation id="6864395892908308021">To urządzenie nie obsługuje NFC</translation> +<translation id="6879016579615558281">Zablokowane: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> i jeszcze <ph name="NUM_MORE" /></translation> <translation id="6910211073230771657">Usunięto</translation> <translation id="6912998170423641340">Zablokuj stronom możliwość odczytywania tekstu i obrazów ze schowka</translation> <translation id="6945221475159498467">Wybierz</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Wybierz zdjęcia</translation> <translation id="7243308994586599757">Opcje dostępne u dołu ekranu</translation> <translation id="7250468141469952378">Wybrano <ph name="ITEM_COUNT" /></translation> +<translation id="7260727271532453612">Dozwolone: <ph name="PERMISSION_1" /> i <ph name="PERMISSION_2" /></translation> <translation id="7302486331832100261">Zazwyczaj blokujesz powiadomienia. Aby na nie zezwolić, kliknij Szczegóły.</translation> <translation id="7423098979219808738">Najpierw zapytaj</translation> <translation id="7423538860840206698">Zablokowano odczytywanie schowka</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Treść z <ph name="DOMAIN_NAME" /> dostarczana przez Google.</translation> <translation id="8116925261070264013">Wyciszone</translation> <translation id="8131740175452115882">Potwierdź</translation> +<translation id="8197286292360124385">Dozwolone: <ph name="PERMISSION_1" /></translation> <translation id="8200772114523450471">Wznów</translation> <translation id="8206354486702514201">O tym ustawieniu decyduje administrator.</translation> <translation id="8249310407154411074">Przenieś na początek</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb index 1ffc4483..73a7f0df 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Site <ph name="SITE_NAME" /> adicionado</translation> <translation id="1383876407941801731">Pesquisar</translation> <translation id="1384959399684842514">Download pausado</translation> +<translation id="1431402976894535801">Impedir que sites saibam quando você está presente</translation> <translation id="1446450296470737166">Permitir controle total de dispositivos MIDI</translation> <translation id="1509960214886564027">Os recursos de muitos sites podem apresentar falhas</translation> <translation id="1620510694547887537">Câmera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Abrir Instant App</translation> <translation id="2148716181193084225">Hoje</translation> <translation id="2182457891543959921">Perguntar antes de permitir que sites criem um mapa 3D dos seus arredores ou acompanhem a posição da câmera (recomendado)</translation> +<translation id="2187243482123994665">Presença do usuário</translation> <translation id="2212565012507486665">Permitir cookies</translation> <translation id="2228071138934252756">Para permitir que o app <ph name="APP_NAME" /> acesse sua câmera, também é necessário ativá-la nas <ph name="BEGIN_LINK" />configurações do Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Perguntar quando um site quer descobrir dispositivos Bluetooth nas proximidades (recomendado)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Player de vídeo</translation> <translation id="3115898365077584848">Mostrar informações</translation> <translation id="3123473560110926937">Bloqueados em alguns sites</translation> +<translation id="3165371858310906303">Perguntar quando um site quiser saber quando você está presente</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> de dados armazenados</translation> <translation id="321187648315454507">Para permitir que o app <ph name="APP_NAME" /> envie notificações, também é necessário ativá-las nas <ph name="BEGIN_LINK" />configurações do Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Microfone</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Configurações do site</translation> <translation id="4200726100658658164">Abrir as configurações de localização</translation> <translation id="4226663524361240545">É possível que as notificações façam o dispositivo vibrar</translation> -<translation id="4242533952199664413">Abrir configurações.</translation> <translation id="4259722352634471385">A Navegação GPS está bloqueada: <ph name="URL" /></translation> <translation id="4278390842282768270">Permitido</translation> <translation id="429312253194641664">Um site está com mídia aberta</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Os contatos selecionados serão compartilhados com <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Mostrar</translation> <translation id="5301954838959518834">Ok, entendi</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> e mais <ph name="NUM_MORE" /></translation> <translation id="5313967007315987356">Adicionar site</translation> <translation id="5317780077021120954">Salvar</translation> <translation id="5335288049665977812">Permitir que sites executem o JavaScript (recomendado)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Nomes</translation> <translation id="5489227211564503167">Tempo decorrido: <ph name="ELAPSED_TIME" /> de <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Bloquear anúncios em sites com publicidade invasiva ou enganosa</translation> +<translation id="5502860503640766021">Permitida: <ph name="PERMISSION_1" />. Bloqueada: <ph name="PERMISSION_2" /></translation> <translation id="5505264765875738116">Os sites não podem pedir para enviar notificações</translation> <translation id="5516455585884385570">Abrir configurações de notificação</translation> <translation id="5527111080432883924">Perguntar antes de permitir que sites leiam textos e imagens da área de transferência (recomendado)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">A câmera está desativada nas configurações do Android</translation> <translation id="5710871682236653961">Perguntar antes de permitir que sites enviem e recebam informações quando você tocar em dispositivos NFC (recomendado)</translation> <translation id="5719847187258001597">Isso limpará todos os dados e cookies armazenados por <ph name="ORIGIN" /> ou pelo app dele na sua tela inicial.</translation> +<translation id="5771720122942595109">Bloqueada: <ph name="PERMISSION_1" /></translation> <translation id="5804241973901381774">Permissões</translation> <translation id="5860033963881614850">Desativado</translation> +<translation id="5863245810240683687">Permitidas: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> e mais <ph name="NUM_MORE" /></translation> <translation id="5876056640971328065">Pausar vídeo</translation> <translation id="5916664084637901428">Ativado</translation> <translation id="5922853908706496913">Compartilhando a tela</translation> <translation id="5939518447894949180">Redefinir</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> a <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Controle o acesso deste site ao seu dispositivo</translation> <translation id="6040143037577758943">Fechar</translation> <translation id="6042308850641462728">Mais</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Bloquear cookies de terceiros</translation> <translation id="6206551242102657620">A conexão é segura. Informações do site</translation> <translation id="6216432067784365534">Opções de <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358">Bloqueadas: <ph name="PERMISSION_1" /> e <ph name="PERMISSION_2" /></translation> <translation id="6270391203985052864">Os sites podem pedir para enviar notificações</translation> <translation id="6295158916970320988">Todos os sites</translation> <translation id="6320088164292336938">Vibrar</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Reproduzir</translation> <translation id="6818926723028410516">Selecionar itens</translation> <translation id="6864395892908308021">O dispositivo não consegue ler a NFC</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> e mais <ph name="NUM_MORE" /> permissões bloqueadas</translation> <translation id="6910211073230771657">Excluído</translation> <translation id="6912998170423641340">Impedir que sites leiam textos e imagens da área de transferência</translation> <translation id="6945221475159498467">Selecionar</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Selecionar imagens</translation> <translation id="7243308994586599757">Opções disponíveis perto da parte inferior da tela</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> itens selecionados</translation> +<translation id="7260727271532453612">Permitidas: <ph name="PERMISSION_1" /> e <ph name="PERMISSION_2" /></translation> <translation id="7302486331832100261">Você geralmente bloqueia notificações. Para permitir, toque em "Detalhes".</translation> <translation id="7423098979219808738">Perguntar primeiro</translation> <translation id="7423538860840206698">Leitura da área de transferência bloqueada</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Este conteúdo é de <ph name="DOMAIN_NAME" />, veiculado pelo Google.</translation> <translation id="8116925261070264013">Com som desativado</translation> <translation id="8131740175452115882">Confirmar</translation> +<translation id="8197286292360124385">Permitida: <ph name="PERMISSION_1" /></translation> <translation id="8200772114523450471">Retomar</translation> <translation id="8206354486702514201">Esta configuração é aplicada por seu administrador.</translation> <translation id="8249310407154411074">Mover para o início</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb index 5b45d0c..756220e 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Site <ph name="SITE_NAME" /> adicionado</translation> <translation id="1383876407941801731">Pesquisar</translation> <translation id="1384959399684842514">Transferência interrompida</translation> +<translation id="1431402976894535801">Impedir que os sites saibam quando está presente</translation> <translation id="1446450296470737166">Perm. controlo total dispo. MIDI</translation> <translation id="1509960214886564027">As funcionalidades em muitos sites podem falhar.</translation> <translation id="1620510694547887537">Câmara</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Abrir app instantânea</translation> <translation id="2148716181193084225">Hoje</translation> <translation id="2182457891543959921">Perguntar antes de permitir que os sites criem um mapa 3D do ambiente à sua volta ou monitorizem a posição da câmara (recomendado)</translation> +<translation id="2187243482123994665">Presença do utilizador</translation> <translation id="2212565012507486665">Permitir cookies</translation> <translation id="2228071138934252756">Para permitir que a app <ph name="APP_NAME" /> aceda à câmara, ative também a câmara nas <ph name="BEGIN_LINK" />Definições do Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Perguntar quando um site pretende detetar dispositivos Bluetooth próximos (recomendado)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Leitor de vídeo</translation> <translation id="3115898365077584848">Mostrar informações</translation> <translation id="3123473560110926937">Bloqueado em alguns sites.</translation> +<translation id="3165371858310906303">Perguntar quando um site pretender saber quando está presente</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> de dados armazenados</translation> <translation id="321187648315454507">Para permitir que a app <ph name="APP_NAME" /> lhe envie notificações, ative também as notificações nas <ph name="BEGIN_LINK" />Definições do Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Microfone</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Definições de sites</translation> <translation id="4200726100658658164">Abrir definições de localização</translation> <translation id="4226663524361240545">As notificações podem fazer com que o dispositivo vibre</translation> -<translation id="4242533952199664413">Abrir definições</translation> <translation id="4259722352634471385">A navegação está bloqueada: <ph name="URL" /></translation> <translation id="4278390842282768270">Permitido</translation> <translation id="429312253194641664">Um site está a reproduzir multimédia.</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Os contactos que selecionar serão partilhados com <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Mostrar</translation> <translation id="5301954838959518834">OK, compreendi</translation> +<translation id="5308418739111119514">Autorizações <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> e mais <ph name="NUM_MORE" />.</translation> <translation id="5313967007315987356">Adicionar site</translation> <translation id="5317780077021120954">Guardar</translation> <translation id="5335288049665977812">Permitir que os sites executem JavaScript (recomendado)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Nomes</translation> <translation id="5489227211564503167">Tempo decorrido: <ph name="ELAPSED_TIME" /> de <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Bloquear anúncios em sites que apresentam anúncios intrusivos ou enganadores</translation> +<translation id="5502860503640766021">Autorização <ph name="PERMISSION_1" /> permitida, autorização <ph name="PERMISSION_2" /> bloqueada.</translation> <translation id="5505264765875738116">Os sites não podem pedir para enviar notificações.</translation> <translation id="5516455585884385570">Abrir definições de notificação</translation> <translation id="5527111080432883924">Perguntar antes de autorizar os sites a ler texto e imagens da área de transferência (recomendado).</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">A câmara está desativada nas Definições do Android</translation> <translation id="5710871682236653961">Perguntar antes de permitir que os sites enviem e recebam informações quando toca em dispositivos NFC (recomendado)</translation> <translation id="5719847187258001597">Esta ação limpa todos os dados e cookies armazenados por <ph name="ORIGIN" /> ou pela respetiva app no seu ecrã principal.</translation> +<translation id="5771720122942595109">Autorização <ph name="PERMISSION_1" /> bloqueada.</translation> <translation id="5804241973901381774">Permissões</translation> <translation id="5860033963881614850">Desativado</translation> +<translation id="5863245810240683687">Autorizações <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> e mais <ph name="NUM_MORE" /> permitidas.</translation> <translation id="5876056640971328065">Colocar vídeo em pausa</translation> <translation id="5916664084637901428">Ativado</translation> <translation id="5922853908706496913">Partilhar o ecrã</translation> <translation id="5939518447894949180">Repor</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> – <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Controle o acesso deste site ao seu dispositivo.</translation> <translation id="6040143037577758943">Fechar</translation> <translation id="6042308850641462728">Mais</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Bloquear cookies de terceiros</translation> <translation id="6206551242102657620">A ligação é segura. Informações do site</translation> <translation id="6216432067784365534">Opções de <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358">Autorizações <ph name="PERMISSION_1" /> e <ph name="PERMISSION_2" /> bloqueadas.</translation> <translation id="6270391203985052864">Os sites podem pedir para enviar notificações.</translation> <translation id="6295158916970320988">Todos os sites</translation> <translation id="6320088164292336938">Vibrar</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Reproduzir</translation> <translation id="6818926723028410516">Selecionar itens</translation> <translation id="6864395892908308021">Este dispositivo não suporta a tecnologia NFC.</translation> +<translation id="6879016579615558281">Autorizações <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> e mais <ph name="NUM_MORE" /> bloqueadas.</translation> <translation id="6910211073230771657">Eliminado</translation> <translation id="6912998170423641340">Impedir sites de lerem texto e imagens da área de transferência</translation> <translation id="6945221475159498467">Selecionar</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Selecionar imagens</translation> <translation id="7243308994586599757">Opções disponíveis junto à parte inferior do ecrã</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> selecionado(s).</translation> +<translation id="7260727271532453612">Autorizações <ph name="PERMISSION_1" /> e <ph name="PERMISSION_2" /> permitidas.</translation> <translation id="7302486331832100261">Normalmente, bloqueia as notificações. Para permitir, toque em Detalhes.</translation> <translation id="7423098979219808738">Perguntar primeiro</translation> <translation id="7423538860840206698">Leitura da área de transferência bloqueada</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Este conteúdo é proveniente de <ph name="DOMAIN_NAME" />, fornecido pela Google.</translation> <translation id="8116925261070264013">Com som desativado</translation> <translation id="8131740175452115882">Confirmar</translation> +<translation id="8197286292360124385">Autorização <ph name="PERMISSION_1" /> permitida.</translation> <translation id="8200772114523450471">Continuar</translation> <translation id="8206354486702514201">Esta definição é aplicada pelo gestor.</translation> <translation id="8249310407154411074">Mover para o início</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb index b22f2ba..d5c3a54 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Setări pentru site-uri</translation> <translation id="4200726100658658164">Deschide setările privind locația</translation> <translation id="4226663524361240545">Notificările pot face dispozitivul să vibreze</translation> -<translation id="4242533952199664413">Deschide setările</translation> <translation id="4259722352634471385">Navigarea este blocată: <ph name="URL" /></translation> <translation id="4278390842282768270">Se permite</translation> <translation id="429312253194641664">Un site redă fișiere media</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb index 12ce578d..7fdba155 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Добавлен сайт <ph name="SITE_NAME" /></translation> <translation id="1383876407941801731">Поиск</translation> <translation id="1384959399684842514">Скачивание приостановлено.</translation> +<translation id="1431402976894535801">Блокировать передачу на сайты информации о вашем присутствии</translation> <translation id="1446450296470737166">Полный доступ к управлению MIDI-устройствами</translation> <translation id="1509960214886564027">Многие функции на сайтах могут работать некорректно</translation> <translation id="1620510694547887537">Камера</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Открыть приложение с мгновенным запуском</translation> <translation id="2148716181193084225">Сегодня</translation> <translation id="2182457891543959921">Запрашивать для сайтов разрешение на создание 3D-карты места, в котором вы находитесь, и отслеживание положения камеры (рекомендуется)</translation> +<translation id="2187243482123994665">Присутствие пользователя</translation> <translation id="2212565012507486665">Разрешить файлы cookie</translation> <translation id="2228071138934252756">Чтобы у приложения "<ph name="APP_NAME" />" был доступ к камере, включите ее в <ph name="BEGIN_LINK" />настройках Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Запрашивать для сайтов разрешение на поиск Bluetooth-устройств поблизости (рекомендуется)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Видеопроигрыватель</translation> <translation id="3115898365077584848">Показать информацию</translation> <translation id="3123473560110926937">Заблокировано на некоторых сайтах</translation> +<translation id="3165371858310906303">Спрашивать перед передачей на сайт информации о вашем присутствии</translation> <translation id="3198916472715691905">В памяти занято: <ph name="STORAGE_AMOUNT" /></translation> <translation id="321187648315454507">Чтобы получать уведомления из приложения "<ph name="APP_NAME" />", включите их в <ph name="BEGIN_LINK" />настройках Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Микрофон</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Настройки сайтов</translation> <translation id="4200726100658658164">Открыть настройки геолокации</translation> <translation id="4226663524361240545">Вибрация при получении уведомлений</translation> -<translation id="4242533952199664413">Открыть настройки</translation> <translation id="4259722352634471385">Навигация заблокирована: <ph name="URL" /></translation> <translation id="4278390842282768270">Разрешено</translation> <translation id="429312253194641664">На сайте воспроизводятся медиафайлы</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Сайт <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> получит доступ к выбранным контактам.</translation> <translation id="5300589172476337783">Показать</translation> <translation id="5301954838959518834">ОК</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и ещё <ph name="NUM_MORE" /></translation> <translation id="5313967007315987356">Добавить сайт</translation> <translation id="5317780077021120954">Сохранить</translation> <translation id="5335288049665977812">Разрешить сайтам использовать JavaScript (рекомендуется)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Имена</translation> <translation id="5489227211564503167">Просмотрено <ph name="ELAPSED_TIME" /> из <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Блокировать объявления на сайтах, которые показывают навязчивую или вводящую в заблуждение рекламу</translation> +<translation id="5502860503640766021">Разрешено: <ph name="PERMISSION_1" />, заблокировано: <ph name="PERMISSION_2" /></translation> <translation id="5505264765875738116">Сайты не могут запрашивать разрешения на отправку уведомлений</translation> <translation id="5516455585884385570">Перейти в настройки уведомлений</translation> <translation id="5527111080432883924">Запрашивать мое разрешение на доступ сайтов к тексту и изображениям, скопированным в буфер обмена (рекомендуется)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Камера выключена в настройках Android.</translation> <translation id="5710871682236653961">Запрашивать для сайтов разрешение на обмен информацией через NFC (рекомендуется).</translation> <translation id="5719847187258001597">Будут удалены все данные и файлы cookie, которые сохранены сайтом <ph name="ORIGIN" /> или его приложением, добавленным на главный экран.</translation> +<translation id="5771720122942595109">Заблокировано: <ph name="PERMISSION_1" /></translation> <translation id="5804241973901381774">Разрешения</translation> <translation id="5860033963881614850">ВЫКЛ</translation> +<translation id="5863245810240683687">Разрешено: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и ещё <ph name="NUM_MORE" /></translation> <translation id="5876056640971328065">Приостановить видео</translation> <translation id="5916664084637901428">ВКЛ</translation> <translation id="5922853908706496913">Предоставлен доступ к вашему экрану</translation> <translation id="5939518447894949180">Сбросить</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" />–<ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Управляйте доступом сайта к данным на устройстве.</translation> <translation id="6040143037577758943">Закрыть</translation> <translation id="6042308850641462728">Ещё</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Блокировать сторонние файлы cookie</translation> <translation id="6206551242102657620">Подключение защищено. Информация о сайте</translation> <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" />: параметры</translation> +<translation id="6262279340360821358">Заблокировано: <ph name="PERMISSION_1" /> и <ph name="PERMISSION_2" /></translation> <translation id="6270391203985052864">Сайты могут запрашивать разрешения на отправку уведомлений</translation> <translation id="6295158916970320988">Все сайты</translation> <translation id="6320088164292336938">Вибросигнал</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Воспроизвести</translation> <translation id="6818926723028410516">Выберите объекты</translation> <translation id="6864395892908308021">Это устройство не поддерживает NFC.</translation> +<translation id="6879016579615558281">Заблокировано: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и ещё <ph name="NUM_MORE" /></translation> <translation id="6910211073230771657">Удалено</translation> <translation id="6912998170423641340">Блокировать сайтам доступ к тексту и изображениям, скопированным в буфер обмена</translation> <translation id="6945221475159498467">Выбрать</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Выберите изображения</translation> <translation id="7243308994586599757">Доступные параметры указаны в нижней части экрана</translation> <translation id="7250468141469952378">Выбрано: <ph name="ITEM_COUNT" /></translation> +<translation id="7260727271532453612">Разрешено: <ph name="PERMISSION_1" /> и <ph name="PERMISSION_2" /></translation> <translation id="7302486331832100261">Обычно вы блокируете уведомления. Чтобы разрешить их показ, нажмите "Подробнее".</translation> <translation id="7423098979219808738">Всегда спрашивать</translation> <translation id="7423538860840206698">Доступ к данным в буфере обмена заблокирован</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Контент с сайта <ph name="DOMAIN_NAME" />. Получен с помощью Google.</translation> <translation id="8116925261070264013">Сайты с отключенным звуком</translation> <translation id="8131740175452115882">Подтвердить</translation> +<translation id="8197286292360124385">Разрешено: <ph name="PERMISSION_1" /></translation> <translation id="8200772114523450471">Возобновить</translation> <translation id="8206354486702514201">Этот параметр включен администратором.</translation> <translation id="8249310407154411074">Переместить в начало</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb index f8c1bb1..25a4e9c 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">අඩවි <ph name="SITE_NAME" /> එක් කරන ලදී</translation> <translation id="1383876407941801731">සොයන්න</translation> <translation id="1384959399684842514">බාගැනීම විරාමයි</translation> +<translation id="1431402976894535801">ඔබ සිටින විට දැන ගැනීමෙන් අඩවි අවහිර කරන්න</translation> <translation id="1446450296470737166">MIDI උපාංගවල සම්පූර්ණ පාලනයට ඉඩ දෙන්න</translation> <translation id="1509960214886564027">බොහෝ වෙබ් අඩවි මත විශේෂාංග කැඩී ගිය හැක</translation> <translation id="1620510694547887537">කැමරාව</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">ක්ෂණික යෙදුම විවෘත කරන්න</translation> <translation id="2148716181193084225">අද</translation> <translation id="2182457891543959921">වෙබ් අඩවිවලට ඔබේ වටපිටාවේ ත්රිමාන සිතියමක් සෑදීමට හෝ කැමරා ස්ථානය හඹා යෑමට ඉඩ දීමට පෙර අසන්න (නිර්දේශිතයි)</translation> +<translation id="2187243482123994665">පරිශීලකයාගේ සිටීම</translation> <translation id="2212565012507486665">කුකීවලට ඉඩ දෙන්න</translation> <translation id="2228071138934252756"><ph name="APP_NAME" /> හට ඔබේ කැමරාවට ප්රවේශ වීමට ඉඩ දීමට, <ph name="BEGIN_LINK" />Android සැකසීම්<ph name="END_LINK" /> තුළද කැමරාව ක්රියාත්මක කරන්න.</translation> <translation id="2289270750774289114">වෙබ් අඩවියකට අවට බ්ලූටූත් උපාංග සොයා ගැනීමට අවශ්ය වූ විට අසන්න (නිර්දේශිතයි)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">වීඩියෝ ධාවකය</translation> <translation id="3115898365077584848">තතු පෙන්වන්න</translation> <translation id="3123473560110926937">සමහර වෙබ් අඩවිවල අවහිර කෙරේ</translation> +<translation id="3165371858310906303">ඔබ සිටින විට වෙබ් අඩවියකට දැන ගැනීමට අවශ්ය විට විමසන්න</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> ගබඩා කළ දත්ත</translation> <translation id="321187648315454507"><ph name="APP_NAME" /> හට ඔබට දැනුම්දීම් එවීමට ඉඩ දීමට <ph name="BEGIN_LINK" />Android සැකසීම්<ph name="END_LINK" /> තුළ දැනුම්දීම්ද ක්රියාත්මක කරන්න.</translation> <translation id="3227137524299004712">මයික්රෆෝනය:</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">අඩවි සැකසුම්</translation> <translation id="4200726100658658164">ස්ථාන සැකසීම් විවෘත කරන්න</translation> <translation id="4226663524361240545">දැනුම්දීම් උපාංගය කම්පනය කළ හැක</translation> -<translation id="4242533952199664413">සැකසීම් විවෘත කරන්න</translation> <translation id="4259722352634471385">සංචාලනය අවහිර කර ඇත: <ph name="URL" /></translation> <translation id="4278390842282768270">ඉඩ දුන්</translation> <translation id="429312253194641664">වෙබ් අඩවියක් මාධ්ය ධාවන කරයි</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">ඔබ තේරූ සම්බන්ධතා <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> සමඟ බෙදා ගනු ලැබේ.</translation> <translation id="5300589172476337783">පෙන්වන්න</translation> <translation id="5301954838959518834">හරි, එය තේරුණා</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> සහ තවත් <ph name="NUM_MORE" /></translation> <translation id="5313967007315987356">අඩවිය එක් කරන්න</translation> <translation id="5317780077021120954">සුරකින්න</translation> <translation id="5335288049665977812">ජාවාස්ක්රිප්ට් ධාවනය කිරීමට අඩවි වලට ඉඩ දෙන්න (නිර්දේශිතයි)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">නම්</translation> <translation id="5489227211564503167">ගත වූ කාලය <ph name="TOTAL_TIME" /> න් <ph name="ELAPSED_TIME" />.</translation> <translation id="5494752089476963479">ආක්රමණශීලී හෝ නොමඟ යවන දැන්වීම් පෙන්වන වෙබ් අඩවි මත දැන්වීම් අවහිර කරන්න</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" /> ඉඩ දෙන ලදි, <ph name="PERMISSION_2" /> අවහිර කරන ලදි</translation> <translation id="5505264765875738116">වෙබ් අඩවිවලට දැනුම්දීම් යැවීමට ඉල්ලිය නොහැක</translation> <translation id="5516455585884385570">දැනුම්දීම් සැකසීම් විවෘත කරන්න</translation> <translation id="5527111080432883924">අඩවිවලට පසුරු පුවරුවෙන් පෙළ සහ රූප කියවීමට ඉඩ දීමට පෙර විමසන්න (නිර්දේශිතයි)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Android සැකසීම් තුළ කැමරාව අක්රිය කර ඇත</translation> <translation id="5710871682236653961">ඔබ NFC උපාංග තට්ටු කරන විට වෙබ් අඩවිවලට තොරතුරු යැවීමට සහ ලැබීමට ඉඩ දීමට පෙර අසන්න (නිර්දේශිතයි)</translation> <translation id="5719847187258001597">මෙය <ph name="ORIGIN" /> හෝ එහි යෙදුම විසින් ඔබේ මුල් තිරය මත ගබා කරනු ලැබූ සියලුම දත්ත සහ කුකී ඉවත් කරයි.</translation> +<translation id="5771720122942595109"><ph name="PERMISSION_1" /> අවහිර කරන ලදී</translation> <translation id="5804241973901381774">අවසර</translation> <translation id="5860033963881614850">අක්රීය</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> සහ තව <ph name="NUM_MORE" />ක් ඉඩ දෙන ලදි</translation> <translation id="5876056640971328065">විඩියෝව විරාම කරන්න</translation> <translation id="5916664084637901428">ක්රියාත්මකයි</translation> <translation id="5922853908706496913">ඔබේ තිරය බෙදා ගැනීම</translation> <translation id="5939518447894949180">නැවත සකසන්න</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">ඔබගේ උපාංගයට මෙම අඩවියෙහි ප්රවේශය පාලනය කරන්න</translation> <translation id="6040143037577758943">වසන්න</translation> <translation id="6042308850641462728">වැඩිදුර</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">තෙවන-පාර්ශ්ව කුකී අවහිර කරන්න</translation> <translation id="6206551242102657620">සම්බන්ධතාවය සුරක්ෂිතයි. අඩවි තොරතුරු</translation> <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> විකල්ප</translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" /> සහ <ph name="PERMISSION_2" /> අවහිර කරන ලදි</translation> <translation id="6270391203985052864">වෙබ් අඩවිවලට දැනුම්දීම් යැවීමට ඉල්ලිය හැක</translation> <translation id="6295158916970320988">සියලු අඩවි</translation> <translation id="6320088164292336938">කම්පනය</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">වාදනය කරන්න</translation> <translation id="6818926723028410516">අයිතම තෝරන්න</translation> <translation id="6864395892908308021">මෙම උපාංගය NFC කියවිය නොහැක</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> සහ තව <ph name="NUM_MORE" />ක් අවහිර කරන ලදි</translation> <translation id="6910211073230771657">මකාදැමූ</translation> <translation id="6912998170423641340">පසුරු පුවරුවෙන් පෙළ සහ රූප කියවීමෙන් අඩවි අවහිර කරන්න</translation> <translation id="6945221475159498467">තෝරන්න</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">රූප තෝරන්න</translation> <translation id="7243308994586599757">තිරයේ පහළට ආසන්නව විකල්ප ලබා ගත හැකිය</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> ක් තෝරන ලදී</translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" /> සහ <ph name="PERMISSION_2" /> ඉඩ දෙන ලදි</translation> <translation id="7302486331832100261">ඔබ සාමාන්යයෙන් දැනුම් දීම් අවහිර කරයි. අවසර දීමට, විස්තර තට්ටු කරන්න.</translation> <translation id="7423098979219808738">පළමුව අසන්න</translation> <translation id="7423538860840206698">පසුරු පුවරුව කියවීමෙන් අවහිරයි</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">මෙම අන්තර්ගතය Google විසින් බෙදාහරින, <ph name="DOMAIN_NAME" /> වෙතින් වේ.</translation> <translation id="8116925261070264013">නිහඬයි</translation> <translation id="8131740175452115882">තහවුරු කරන්න</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" /> ඉඩ දෙන ලදි</translation> <translation id="8200772114523450471">කරගෙන යන්න</translation> <translation id="8206354486702514201">මෙම සැකසුම පරිපාලකයා විසින් බලකර ඇත.</translation> <translation id="8249310407154411074">ඉහළට ගෙන යන්න</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb index 128350d..7746249 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Boli pridané stránky <ph name="SITE_NAME" /></translation> <translation id="1383876407941801731">Vyhľadávanie</translation> <translation id="1384959399684842514">Sťahovanie bolo pozastavené</translation> +<translation id="1431402976894535801">Neumožniť webom zistiť, či ste prítomný/-á</translation> <translation id="1446450296470737166">Povoliť úplné ovlád. zar. MIDI</translation> <translation id="1509960214886564027">Funkcie na mnohých weboch môžu zlyhávať</translation> <translation id="1620510694547887537">Kamera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Otvoriť okamžitú aplikáciu</translation> <translation id="2148716181193084225">Dnes</translation> <translation id="2182457891543959921">Opýtať sa, či chcete povoliť webom vytvoriť 3D mapu vášho okolia alebo sledovať umiestnenie kamier (odporúčané)</translation> +<translation id="2187243482123994665">Prítomnosť používateľa</translation> <translation id="2212565012507486665">Povoliť súbory cookie</translation> <translation id="2228071138934252756">Ak chcete povoliť aplikácii <ph name="APP_NAME" /> používať váš fotoaparát, zapnite ho aj v <ph name="BEGIN_LINK" />nastaveniach Androidu<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Opýtať sa, keď chce web objavovať zariadenia Bluetooth v okolí (odporúčané)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Prehrávač videa</translation> <translation id="3115898365077584848">Zobraziť informácie</translation> <translation id="3123473560110926937">Blokované na niektorých weboch</translation> +<translation id="3165371858310906303">Opýtať sa, keď chce web vedieť, či ste prítomný/-á</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> uložených dát</translation> <translation id="321187648315454507">Ak chcete povoliť aplikácii <ph name="APP_NAME" /> odosielať vám upozornenia, zapnite ich aj v <ph name="BEGIN_LINK" />nastaveniach Androidu<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Mikrofón</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Nastavenia webu</translation> <translation id="4200726100658658164">Otvoriť nastavenia polohy</translation> <translation id="4226663524361240545">Upozornenia môžu pri prijatí na zariadení spustiť vibrovanie</translation> -<translation id="4242533952199664413">Otvoriť nastavenia</translation> <translation id="4259722352634471385">Navigácia je zablokovaná: <ph name="URL" /></translation> <translation id="4278390842282768270">Povolené</translation> <translation id="429312253194641664">Web prehráva médiá</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Vybrané kontakty budú zdieľané s webom <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Zobraziť</translation> <translation id="5301954838959518834">Dobre</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> a ďalšie (<ph name="NUM_MORE" />)</translation> <translation id="5313967007315987356">Pridať web</translation> <translation id="5317780077021120954">Uložiť</translation> <translation id="5335288049665977812">Povoliť webom spúšťať JavaScript (odporúča sa)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Názvy</translation> <translation id="5489227211564503167">Uplynutý čas: <ph name="ELAPSED_TIME" /> z <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Blokovať reklamy webov, ktoré zobrazujú obťažujúce alebo zavádzajúce reklamy</translation> +<translation id="5502860503640766021">Povolené: <ph name="PERMISSION_1" />, blokované: <ph name="PERMISSION_2" /></translation> <translation id="5505264765875738116">Weby nemôžu žiadať o odosielanie upozornení</translation> <translation id="5516455585884385570">Otvoriť nastavenia upozornení</translation> <translation id="5527111080432883924">Pýtať sa, či chcete povoliť webu čítať text a obrázky v schránke (odporúčané)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Fotoaparát je vypnutý v nastaveniach Androidu</translation> <translation id="5710871682236653961">Pýtať sa, či chcete povoliť webom odosielať a prijímať informácie, keď priložíte zariadenia NFC (odporúčané)</translation> <translation id="5719847187258001597">Týmto vymažete všetky dáta a súbory cookie uložené webom <ph name="ORIGIN" /> alebo jeho aplikáciou na ploche.</translation> +<translation id="5771720122942595109">Blokované: <ph name="PERMISSION_1" /></translation> <translation id="5804241973901381774">Povolenia</translation> <translation id="5860033963881614850">Vypnuté</translation> +<translation id="5863245810240683687">Povolené: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> a ďalšie (<ph name="NUM_MORE" />)</translation> <translation id="5876056640971328065">Pozastaviť video</translation> <translation id="5916664084637901428">Zapnuté</translation> <translation id="5922853908706496913">Zdieľate obrazovku</translation> <translation id="5939518447894949180">Resetovať</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> – <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Ovládajte prístup tohto webu do vášho zariadenia</translation> <translation id="6040143037577758943">Zavrieť</translation> <translation id="6042308850641462728">Viac</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Blokovať súbory cookie tretích strán</translation> <translation id="6206551242102657620">Spojenie je zabezpečené. Informácie o webe</translation> <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> – možnosti</translation> +<translation id="6262279340360821358">Blokované: <ph name="PERMISSION_1" /> a <ph name="PERMISSION_2" /></translation> <translation id="6270391203985052864">Weby môžu žiadať o odosielanie upozornení</translation> <translation id="6295158916970320988">Všetky stránky</translation> <translation id="6320088164292336938">Vibrovanie</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Prehrať</translation> <translation id="6818926723028410516">Vyberte položky</translation> <translation id="6864395892908308021">Toto zariadenie nedokáže čítať NFC</translation> +<translation id="6879016579615558281">Blokované: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> a ďalšie (<ph name="NUM_MORE" />)</translation> <translation id="6910211073230771657">Odstránené</translation> <translation id="6912998170423641340">Zakázať webom čítať text a obrázky v schránke</translation> <translation id="6945221475159498467">Vybrať</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Výber obrázkov</translation> <translation id="7243308994586599757">Možnosti sú k dispozícii v dolnej časti obrazovky</translation> <translation id="7250468141469952378">Vybrané: <ph name="ITEM_COUNT" /></translation> +<translation id="7260727271532453612">Povolené: <ph name="PERMISSION_1" /> a <ph name="PERMISSION_2" /></translation> <translation id="7302486331832100261">Zvyčajne blokujete upozornenia. Ak ich chcete povoliť, klepnite na Podrobnosti.</translation> <translation id="7423098979219808738">Najprv sa opýtať</translation> <translation id="7423538860840206698">Blokovať čítanie schránky</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Tento obsah pochádza z domény <ph name="DOMAIN_NAME" /> a bol doručený Googlom.</translation> <translation id="8116925261070264013">Zvuk bol vypnutý</translation> <translation id="8131740175452115882">Potvrdiť</translation> +<translation id="8197286292360124385">Povolené: <ph name="PERMISSION_1" /></translation> <translation id="8200772114523450471">Pokračovať</translation> <translation id="8206354486702514201">Toto nastavenie je vynútené správcom.</translation> <translation id="8249310407154411074">Presunúť na začiatok</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb index 599421f..96838458 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Spletno mesto <ph name="SITE_NAME" /> je bilo dodano</translation> <translation id="1383876407941801731">Išči</translation> <translation id="1384959399684842514">Prenos je zaustavljen</translation> +<translation id="1431402976894535801">Preprečevanje, da bi spletna mesta vedela, da ste prisotni</translation> <translation id="1446450296470737166">Dovolitev popolnega nadzora nad napravami MIDI</translation> <translation id="1509960214886564027">Funkcije na številnih spletnih mestih morda ne bodo delovale</translation> <translation id="1620510694547887537">Kamera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Odpri nenamestljivo aplikacijo</translation> <translation id="2148716181193084225">Danes</translation> <translation id="2182457891543959921">Vprašaj, preden se spletnim mestom dovoli ustvarjanje 3D-zemljevida vaše okolice ali spremljanje položaja kamere (priporočljivo)</translation> +<translation id="2187243482123994665">Prisotnost uporabnika</translation> <translation id="2212565012507486665">Dovoli piškotke</translation> <translation id="2228071138934252756">Če želite aplikaciji <ph name="APP_NAME" /> omogočiti dostop do fotoaparata, fotoaparat vklopite tudi v <ph name="BEGIN_LINK" />nastavitvah za Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Vprašaj, ko želi spletno mesto odkrivati naprave Bluetooth v bližini (priporočljivo)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Videopredvajalnik</translation> <translation id="3115898365077584848">Pokaži informacije</translation> <translation id="3123473560110926937">Blokirano na nekaterih spletnih mestih</translation> +<translation id="3165371858310906303">Vprašaj, ko spletno mesto želi vedeti, ali ste prisotni</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> shranjenih podatkov</translation> <translation id="321187648315454507">Če želite, da vam aplikacija <ph name="APP_NAME" /> pošilja obvestila, obvestila vklopite tudi v <ph name="BEGIN_LINK" />nastavitvah za Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Mikrofon</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Nastavitve spletnega mesta</translation> <translation id="4200726100658658164">Odpri nastavitve lokacije</translation> <translation id="4226663524361240545">Ob prejemanju obvestil naprava morda vibrira</translation> -<translation id="4242533952199664413">Odpri nastavitve</translation> <translation id="4259722352634471385">Krmarjenje je blokirano: <ph name="URL" /></translation> <translation id="4278390842282768270">Dovoljeno</translation> <translation id="429312253194641664">Spletno mesto predvaja predstavnost</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Izbrani stiki bodo v skupni rabi s spletnim mestom <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Pokaži</translation> <translation id="5301954838959518834">V redu, razumem</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> in še <ph name="NUM_MORE" /></translation> <translation id="5313967007315987356">Dodajanje mesta</translation> <translation id="5317780077021120954">Shrani</translation> <translation id="5335288049665977812">Spletnim mestom dovoli izvajanje JavaScripta (priporočeno)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Imena</translation> <translation id="5489227211564503167">Pretečeni čas: <ph name="ELAPSED_TIME" /> od <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Blokiranje oglasov na spletnih mestih, ki prikazujejo vsiljive ali zavajajoče oglase</translation> +<translation id="5502860503640766021">Dovoljeno: <ph name="PERMISSION_1" />, blokirano: <ph name="PERMISSION_2" /></translation> <translation id="5505264765875738116">Spletna mesta vas ne smejo vprašati, ali želite, da vam pošiljajo obvestila</translation> <translation id="5516455585884385570">Odpiranje nastavitev obvestil</translation> <translation id="5527111080432883924">Prikaži poziv, preden se spletnim mestom dovoli branje besedila in slik v odložišču (priporočeno)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Fotoaparat je izklopljen v nastavitvah za Android</translation> <translation id="5710871682236653961">Poziv, preden se spletnim mestom dovoli pošiljanje in prejemanje podatkov, ko se dotaknete naprav s tehnologijo NFC (priporočeno)</translation> <translation id="5719847187258001597">S tem boste izbrisali vse podatke in piškotke, ki jih je shranilo spletno mesto <ph name="ORIGIN" /> ali njegova aplikacija na vašem začetnem zaslonu.</translation> +<translation id="5771720122942595109">Blokirano: <ph name="PERMISSION_1" /></translation> <translation id="5804241973901381774">Dovoljenja</translation> <translation id="5860033963881614850">Izklopljeno</translation> +<translation id="5863245810240683687">Dovoljeno: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> in še <ph name="NUM_MORE" /></translation> <translation id="5876056640971328065">Začasna zaustavitev videa</translation> <translation id="5916664084637901428">Vklopljeno</translation> <translation id="5922853908706496913">Deljenje zaslona</translation> <translation id="5939518447894949180">Ponastavi</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> – <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Nadziranje dostopa spletnega mesta do naprave</translation> <translation id="6040143037577758943">Zapri</translation> <translation id="6042308850641462728">Več</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Blokiraj piškotke drugih spletnih mest</translation> <translation id="6206551242102657620">Povezava je varna. Podatki o spletnem mestu.</translation> <translation id="6216432067784365534">Možnosti za <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358">Blokirano: <ph name="PERMISSION_1" /> in <ph name="PERMISSION_2" /></translation> <translation id="6270391203985052864">Spletna mesta vas lahko vprašajo, ali želite, da vam pošiljajo obvestila</translation> <translation id="6295158916970320988">Vsa spletna mesta</translation> <translation id="6320088164292336938">Vibriranje</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Predvajanje</translation> <translation id="6818926723028410516">Izberite elemente</translation> <translation id="6864395892908308021">Ta naprava ne podpira NFC-ja</translation> +<translation id="6879016579615558281">Blokirano: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> in še <ph name="NUM_MORE" /></translation> <translation id="6910211073230771657">Izbrisano</translation> <translation id="6912998170423641340">Spletnim mestom prepreči branje besedila in slik v odložišču</translation> <translation id="6945221475159498467">Izberi</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Izberite slike</translation> <translation id="7243308994586599757">Možnosti so na voljo pri dnu zaslona</translation> <translation id="7250468141469952378">Št. izbranih: <ph name="ITEM_COUNT" /></translation> +<translation id="7260727271532453612">Dovoljeno: <ph name="PERMISSION_1" /> in <ph name="PERMISSION_2" /></translation> <translation id="7302486331832100261">Obvestila običajno blokirate. Če želite to omogočiti, se dotaknite Podrobnosti.</translation> <translation id="7423098979219808738">Najprej vprašaj</translation> <translation id="7423538860840206698">Blokirano branje vsebine odložišča</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Ta vsebina je iz domene <ph name="DOMAIN_NAME" /> in jo prikazuje Google.</translation> <translation id="8116925261070264013">Prezrto</translation> <translation id="8131740175452115882">Potrdi</translation> +<translation id="8197286292360124385">Dovoljeno: <ph name="PERMISSION_1" /></translation> <translation id="8200772114523450471">Nadaljuj</translation> <translation id="8206354486702514201">To nastavitev je uveljavil skrbnik.</translation> <translation id="8249310407154411074">Na vrh</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb index df8a9f9..6605d19 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Sajti <ph name="SITE_NAME" /> u shtua</translation> <translation id="1383876407941801731">Kërko</translation> <translation id="1384959399684842514">Shkarkimi u ndërpre</translation> +<translation id="1431402976894535801">Blloko sajtet që të mos dinë kur je i pranishëm</translation> <translation id="1446450296470737166">Lejo kontrollin e plotë të pajisjeve MIDI</translation> <translation id="1509960214886564027">Veçoritë në shumë sajte mund të ndalojnë së funksionuari</translation> <translation id="1620510694547887537">Kamera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Hap aplikacionin e çastit</translation> <translation id="2148716181193084225">Sot</translation> <translation id="2182457891543959921">Pyet përpara se të lejosh krijimin nga sajtet të një harte 3D të ambientit tënd rrethues ose gjurmimin prej tyre të pozicionit të kamerës (rekomandohet)</translation> +<translation id="2187243482123994665">Prania e përdoruesit</translation> <translation id="2212565012507486665">Lejo kukit</translation> <translation id="2228071138934252756">Për të lejuar që <ph name="APP_NAME" /> të ketë qasje te kamera jote, aktivizo gjithashtu kamerën në <ph name="BEGIN_LINK" />Cilësimet e Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Pyet kur një sajt dëshiron të zbulojë pajisjet Bluetooth në afërsi (rekomandohet)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Luajtësi i videos</translation> <translation id="3115898365077584848">Shfaq informacionin</translation> <translation id="3123473560110926937">Bllokuar në disa sajte</translation> +<translation id="3165371858310906303">Pyet kur një sajt kërkon që të dijë kur je i pranishëm</translation> <translation id="3198916472715691905">Të dhënat e ruajtura <ph name="STORAGE_AMOUNT" /></translation> <translation id="321187648315454507">Për të lejuar që <ph name="APP_NAME" /> të të dërgojë njoftime, aktivizo gjithashtu njoftimet në <ph name="BEGIN_LINK" />Cilësimet e Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Mikrofoni</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Cilësimet e sajtit</translation> <translation id="4200726100658658164">Hap "Cilësimet e vendndodhjes"</translation> <translation id="4226663524361240545">Njoftimet mund të bëjnë që pajisja të dridhet</translation> -<translation id="4242533952199664413">Hap cilësimet</translation> <translation id="4259722352634471385">Lundrimi është bllokuar: <ph name="URL" /></translation> <translation id="4278390842282768270">Të lejuara</translation> <translation id="429312253194641664">Një sajt po luan media</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Kontaktet që zgjedh do të ndahen me <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Shfaq</translation> <translation id="5301954838959518834">Në rregull, kuptova.</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> dhe <ph name="NUM_MORE" /> të tjera</translation> <translation id="5313967007315987356">Shto një sajt</translation> <translation id="5317780077021120954">Ruaj</translation> <translation id="5335288049665977812">Lejoji sajtet të ekzekutojnë JavaScript (rekomandohet)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Emrat</translation> <translation id="5489227211564503167">Koha e kaluar: <ph name="ELAPSED_TIME" /> nga <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Blloko reklamat në sajtet që shfaqin reklama ndërhyrëse ose mashtruese</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" /> është lejuar, <ph name="PERMISSION_2" /> është bllokuar</translation> <translation id="5505264765875738116">Sajtet nuk mund të kërkojnë të dërgojnë njoftime</translation> <translation id="5516455585884385570">Hap cilësimet e njoftimeve</translation> <translation id="5527111080432883924">Pyet përpara se të lejosh sajtet të lexojnë tekstin dhe imazhet nga kujtesa e fragmenteve (rekomandohet)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Kamera është çaktivizuar në cilësimet e Android</translation> <translation id="5710871682236653961">Pyet përpara se sajtet të lejohen të dërgojnë dhe të marrin informacione kur troket pajisjet me NFC (rekomandohet)</translation> <translation id="5719847187258001597">Kjo do të pastrojë të gjitha të dhënat dhe kukit e ruajtura nga <ph name="ORIGIN" /> ose nga aplikacioni i tij në ekranin bazë.</translation> +<translation id="5771720122942595109"><ph name="PERMISSION_1" /> është bllokuar</translation> <translation id="5804241973901381774">Lejet</translation> <translation id="5860033963881614850">Çaktivizuar</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> dhe <ph name="NUM_MORE" /> më shumë të lejuara</translation> <translation id="5876056640971328065">Vendose videon në pauzë</translation> <translation id="5916664084637901428">Aktiv</translation> <translation id="5922853908706496913">Po ndan ekranin tënd</translation> <translation id="5939518447894949180">Rivendos</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Kontrollo qasjen e këtij sajti te pajisja jote</translation> <translation id="6040143037577758943">Mbyll</translation> <translation id="6042308850641462728">Më shumë</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Blloko kukit e palëve të treta</translation> <translation id="6206551242102657620">Lidhja është e sigurt. Informacioni i faqes</translation> <translation id="6216432067784365534">Opsionet për <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" /> dhe <ph name="PERMISSION_2" /> të bllokuara</translation> <translation id="6270391203985052864">Sajtet mund të kërkojnë të dërgojnë njoftime</translation> <translation id="6295158916970320988">Të gjitha sajtet</translation> <translation id="6320088164292336938">Dridhja</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Luaj</translation> <translation id="6818926723028410516">Zgjidh artikujt</translation> <translation id="6864395892908308021">Kjo pajisje nuk mund të lexojë NFC-në</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> dhe <ph name="NUM_MORE" /> tjetër i bllokuar</translation> <translation id="6910211073230771657">Fshirë</translation> <translation id="6912998170423641340">Blloko sajtet që të mos lexojnë tekstin dhe imazhet nga kujtesa e fragmenteve</translation> <translation id="6945221475159498467">Përzgjidhe</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Zgjidh imazhet</translation> <translation id="7243308994586599757">Opsionet janë të disponueshme pranë fundit të ekranit</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> të zgjedhura</translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" /> dhe <ph name="PERMISSION_2" /> janë lejuar</translation> <translation id="7302486331832100261">Ti i bllokon zakonisht njoftimet. Për t'i lejuar, trokit te "Detajet".</translation> <translation id="7423098979219808738">Pyet në fillim</translation> <translation id="7423538860840206698">Bllokuar për leximin e kujtesës së fragmenteve</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Kjo përmbajtje është nga <ph name="DOMAIN_NAME" />, dërguar nga Google.</translation> <translation id="8116925261070264013">Zëri i çaktivizuar</translation> <translation id="8131740175452115882">Konfirmo</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" /> është lejuar</translation> <translation id="8200772114523450471">Vazhdo</translation> <translation id="8206354486702514201">Ky cilësim zbatohet nga administratori yt.</translation> <translation id="8249310407154411074">Lëvize në krye</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb index 02359cef..64aaac581 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Sajt <ph name="SITE_NAME" /> je dodat</translation> <translation id="1383876407941801731">Pretraži</translation> <translation id="1384959399684842514">Preuzimanje je pauzirano</translation> +<translation id="1431402976894535801">Ne dozvolite sajtovima da znaju kada ste prisutni</translation> <translation id="1446450296470737166">Puna kontrola nad MIDI uređajima</translation> <translation id="1509960214886564027">Funkcije na mnogim sajtovima mogu da prestanu sa radom</translation> <translation id="1620510694547887537">Kamera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Otvori instant aplikaciju</translation> <translation id="2148716181193084225">Danas</translation> <translation id="2182457891543959921">Pre nego što dozvolite sajtovima da prave 3D mapu okruženja ili prate položaj kamere prikazuje se upit (preporučeno)</translation> +<translation id="2187243482123994665">Prisustvo korisnika</translation> <translation id="2212565012507486665">Dozvoli kolačiće</translation> <translation id="2228071138934252756">Da biste dozvolili da <ph name="APP_NAME" /> pristupa kameri, uključite kameru i u <ph name="BEGIN_LINK" />Android podešavanjima<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Pitaj kada sajt želi da otkrije Bluetooth uređaje u blizini (preporučeno)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Video plejer</translation> <translation id="3115898365077584848">Prikaži informacije</translation> <translation id="3123473560110926937">Blokirano na nekim sajtovima</translation> +<translation id="3165371858310906303">Pitaj kada sajt želi informacije o prisustvu</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> sačuvanih podataka</translation> <translation id="321187648315454507">Da biste dozvolili da vam <ph name="APP_NAME" /> šalje obaveštenja, uključite obaveštenja i u <ph name="BEGIN_LINK" />Android podešavanjima<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Mikrofon</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Podešavanja sajta</translation> <translation id="4200726100658658164">Otvorite podešavanja lokacije</translation> <translation id="4226663524361240545">Uređaj će vibrirati kada primate obaveštenja</translation> -<translation id="4242533952199664413">Otvori podešavanja</translation> <translation id="4259722352634471385">Navigacija je blokirana: <ph name="URL" /></translation> <translation id="4278390842282768270">Dozvoljeno</translation> <translation id="429312253194641664">Sajt pušta medijski sadržaj</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Kontakti koje izaberete će se deliti sa <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Prikaži</translation> <translation id="5301954838959518834">Važi</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> i još <ph name="NUM_MORE" /></translation> <translation id="5313967007315987356">Dodajte sajt</translation> <translation id="5317780077021120954">Sačuvaj</translation> <translation id="5335288049665977812">Dozvoli sajtovima da pokreću JavaScript (preporučeno)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Imena</translation> <translation id="5489227211564503167">Proteklo vreme: <ph name="ELAPSED_TIME" /> od <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Blokiraj oglase na sajtovima koji prikazuju oglase koji ometaju aktivnosti ili obmanjujuće oglase</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" />: dozvoljeno. <ph name="PERMISSION_2" />: blokirano</translation> <translation id="5505264765875738116">Sajtovi ne mogu da traže da šalju obaveštenja</translation> <translation id="5516455585884385570">Otvorite podešavanja obaveštenja</translation> <translation id="5527111080432883924">Pitaj pre nego što dozvoliš sajtovima da čitaju tekst i slike iz privremene memorije (preporučeno)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Kamera je isključena u Android podešavanjima</translation> <translation id="5710871682236653961">Pre nego što dozvolite sajtovima da šalju i dobijaju informacije kada dodirnete NFC uređaje prikazuje se upit (preporučeno)</translation> <translation id="5719847187258001597">Ovim brišete sve podatke i kolačiće koje čuva sajt <ph name="ORIGIN" /> ili njegova aplikacija na početnom ekranu.</translation> +<translation id="5771720122942595109">Dozvola <ph name="PERMISSION_1" /> je blokirana</translation> <translation id="5804241973901381774">Dozvole</translation> <translation id="5860033963881614850">Isključeno</translation> +<translation id="5863245810240683687">Odobrene su dozvole <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> i još <ph name="NUM_MORE" /></translation> <translation id="5876056640971328065">Pauziraj video</translation> <translation id="5916664084637901428">Uključeno</translation> <translation id="5922853908706496913">Deli se ekran</translation> <translation id="5939518447894949180">Resetuj</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> – <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Kontrolišite pristup ovog sajta uređaju</translation> <translation id="6040143037577758943">Zatvori</translation> <translation id="6042308850641462728">Još</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Blokiraj kolačiće treće strane</translation> <translation id="6206551242102657620">Veza je bezbedna. Informacije o sajtu</translation> <translation id="6216432067784365534">Opcije stavke <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358">Dozvole <ph name="PERMISSION_1" /> i <ph name="PERMISSION_2" /> su blokirane</translation> <translation id="6270391203985052864">Sajtovi mogu da traže da šalju obaveštenja</translation> <translation id="6295158916970320988">Svi sajtovi</translation> <translation id="6320088164292336938">Vibracija</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Pusti</translation> <translation id="6818926723028410516">Izaberite stavke</translation> <translation id="6864395892908308021">Ovaj uređaj ne može da čita NFC</translation> +<translation id="6879016579615558281">Blokirane su dozvole <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> i još <ph name="NUM_MORE" /></translation> <translation id="6910211073230771657">Izbrisano</translation> <translation id="6912998170423641340">Blokiraj sajtove tako da ne čitaju tekst i slike iz privremene memorije</translation> <translation id="6945221475159498467">Izaberi</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Izaberite slike</translation> <translation id="7243308994586599757">Opcije su dostupne u dnu ekrana</translation> <translation id="7250468141469952378">Izabrali ste <ph name="ITEM_COUNT" /></translation> +<translation id="7260727271532453612">Odobrene su dozvole <ph name="PERMISSION_1" /> i <ph name="PERMISSION_2" /></translation> <translation id="7302486331832100261">Obično blokirate obaveštenja. Da biste ih dozvolili, dodirnite Detalji.</translation> <translation id="7423098979219808738">Prvo pitaj</translation> <translation id="7423538860840206698">Čitanje privremene memorije je blokirano</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Ovaj sadržaj je sa <ph name="DOMAIN_NAME" />, prikazuje Google.</translation> <translation id="8116925261070264013">Zvuk je isključen</translation> <translation id="8131740175452115882">Potvrdi</translation> +<translation id="8197286292360124385">Odobrena je dozvola <ph name="PERMISSION_1" /></translation> <translation id="8200772114523450471">Nastavi</translation> <translation id="8206354486702514201">Ovo podešavanje primenjuje administrator.</translation> <translation id="8249310407154411074">Premesti na vrh</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb index 194ec14..995c996 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Сајт <ph name="SITE_NAME" /> је додат</translation> <translation id="1383876407941801731">Претражи</translation> <translation id="1384959399684842514">Преузимање је паузирано</translation> +<translation id="1431402976894535801">Не дозволите сајтовима да знају када сте присутни</translation> <translation id="1446450296470737166">Пуна контрола над MIDI уређајима</translation> <translation id="1509960214886564027">Функције на многим сајтовима могу да престану са радом</translation> <translation id="1620510694547887537">Камера</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Отвори инстант апликацију</translation> <translation id="2148716181193084225">Данас</translation> <translation id="2182457891543959921">Пре него што дозволите сајтовима да праве 3D мапу окружења или прате положај камере приказује се упит (препоручено)</translation> +<translation id="2187243482123994665">Присуство корисника</translation> <translation id="2212565012507486665">Дозволи колачиће</translation> <translation id="2228071138934252756">Да бисте дозволили да <ph name="APP_NAME" /> приступа камери, укључите камеру и у <ph name="BEGIN_LINK" />Android подешавањима<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Питај када сајт жели да открије Bluetooth уређаје у близини (препоручено)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Видео плејер</translation> <translation id="3115898365077584848">Прикажи информације</translation> <translation id="3123473560110926937">Блокирано на неким сајтовима</translation> +<translation id="3165371858310906303">Питај када сајт жели информације о присуству</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> сачуваних података</translation> <translation id="321187648315454507">Да бисте дозволили да вам <ph name="APP_NAME" /> шаље обавештења, укључите обавештења и у <ph name="BEGIN_LINK" />Android подешавањима<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Микрофон</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Подешавања сајта</translation> <translation id="4200726100658658164">Отворите подешавања локације</translation> <translation id="4226663524361240545">Уређај ће вибрирати када примате обавештења</translation> -<translation id="4242533952199664413">Отвори подешавања</translation> <translation id="4259722352634471385">Навигација је блокирана: <ph name="URL" /></translation> <translation id="4278390842282768270">Дозвољено</translation> <translation id="429312253194641664">Сајт пушта медијски садржај</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Контакти које изаберете ће се делити са <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Прикажи</translation> <translation id="5301954838959518834">Важи</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и још <ph name="NUM_MORE" /></translation> <translation id="5313967007315987356">Додајте сајт</translation> <translation id="5317780077021120954">Сачувај</translation> <translation id="5335288049665977812">Дозволи сајтовима да покрећу JavaScript (препоручено)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Имена</translation> <translation id="5489227211564503167">Протекло време: <ph name="ELAPSED_TIME" /> од <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Блокирај огласе на сајтовима који приказују огласе који ометају активности или обмањујуће огласе</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" />: дозвољено. <ph name="PERMISSION_2" />: блокирано</translation> <translation id="5505264765875738116">Сајтови не могу да траже да шаљу обавештења</translation> <translation id="5516455585884385570">Отворите подешавања обавештења</translation> <translation id="5527111080432883924">Питај пре него што дозволиш сајтовима да читају текст и слике из привремене меморије (препоручено)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Камера је искључена у Android подешавањима</translation> <translation id="5710871682236653961">Пре него што дозволите сајтовима да шаљу и добијају информације када додирнете NFC уређаје приказује се упит (препоручено)</translation> <translation id="5719847187258001597">Овим бришете све податке и колачиће које чува сајт <ph name="ORIGIN" /> или његова апликација на почетном екрану.</translation> +<translation id="5771720122942595109">Дозвола <ph name="PERMISSION_1" /> је блокирана</translation> <translation id="5804241973901381774">Дозволе</translation> <translation id="5860033963881614850">Искључено</translation> +<translation id="5863245810240683687">Одобрене су дозволе <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и још <ph name="NUM_MORE" /></translation> <translation id="5876056640971328065">Паузирај видео</translation> <translation id="5916664084637901428">Укључено</translation> <translation id="5922853908706496913">Дели се екран</translation> <translation id="5939518447894949180">Ресетуј</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> – <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Контролишите приступ овог сајта уређају</translation> <translation id="6040143037577758943">Затвори</translation> <translation id="6042308850641462728">Још</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Блокирај колачиће треће стране</translation> <translation id="6206551242102657620">Веза је безбедна. Информације о сајту</translation> <translation id="6216432067784365534">Опције ставке <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358">Дозволе <ph name="PERMISSION_1" /> и <ph name="PERMISSION_2" /> су блокиране</translation> <translation id="6270391203985052864">Сајтови могу да траже да шаљу обавештења</translation> <translation id="6295158916970320988">Сви сајтови</translation> <translation id="6320088164292336938">Вибрација</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Пусти</translation> <translation id="6818926723028410516">Изаберите ставке</translation> <translation id="6864395892908308021">Овај уређај не може да чита NFC</translation> +<translation id="6879016579615558281">Блокиране су дозволе <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и још <ph name="NUM_MORE" /></translation> <translation id="6910211073230771657">Избрисано</translation> <translation id="6912998170423641340">Блокирај сајтове тако да не читају текст и слике из привремене меморије</translation> <translation id="6945221475159498467">Изабери</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Изаберите слике</translation> <translation id="7243308994586599757">Опције су доступне у дну екрана</translation> <translation id="7250468141469952378">Изабрали сте <ph name="ITEM_COUNT" /></translation> +<translation id="7260727271532453612">Одобрене су дозволе <ph name="PERMISSION_1" /> и <ph name="PERMISSION_2" /></translation> <translation id="7302486331832100261">Обично блокирате обавештења. Да бисте их дозволили, додирните Детаљи.</translation> <translation id="7423098979219808738">Прво питај</translation> <translation id="7423538860840206698">Читање привремене меморије је блокирано</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Овај садржај је са <ph name="DOMAIN_NAME" />, приказује Google.</translation> <translation id="8116925261070264013">Звук је искључен</translation> <translation id="8131740175452115882">Потврди</translation> +<translation id="8197286292360124385">Одобрена је дозвола <ph name="PERMISSION_1" /></translation> <translation id="8200772114523450471">Настави</translation> <translation id="8206354486702514201">Ово подешавање примењује администратор.</translation> <translation id="8249310407154411074">Премести на врх</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb index 262eb6d9..73a3d968 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Webbplatsen <ph name="SITE_NAME" /> har lagts till</translation> <translation id="1383876407941801731">Sök</translation> <translation id="1384959399684842514">Nedladdningen har pausats</translation> +<translation id="1431402976894535801">Blockera webbplatser från att registrera om du är närvarande</translation> <translation id="1446450296470737166">Tillåt fullst. kontroll av MIDI</translation> <translation id="1509960214886564027">Funktioner kan sluta att fungera på många webbplatser</translation> <translation id="1620510694547887537">Kamera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Öppna snabbappen</translation> <translation id="2148716181193084225">Idag</translation> <translation id="2182457891543959921">Fråga innan webbplatser tillåts att skapa en 3D-karta över dina omgivningar eller registrera kamerans position (rekommenderas)</translation> +<translation id="2187243482123994665">Användarens närvaro</translation> <translation id="2212565012507486665">Tillåt cookies</translation> <translation id="2228071138934252756">Om du vill ge <ph name="APP_NAME" /> åtkomst till kameran måste du även aktivera kameran i <ph name="BEGIN_LINK" />Android-inställningarna<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Fråga när en webbplats försöker söka efter Bluetooth-enheter i närheten (rekommenderas)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Videospelare</translation> <translation id="3115898365077584848">Visa info</translation> <translation id="3123473560110926937">Blockeras på vissa webbplatser</translation> +<translation id="3165371858310906303">Fråga när en webbplats vill registrera om du är närvarande</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> sparad data</translation> <translation id="321187648315454507">Om du vill få aviseringar från <ph name="APP_NAME" /> måste du även aktivera aviseringar i <ph name="BEGIN_LINK" />Android-inställningarna<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Mikrofon</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Platsinställningar</translation> <translation id="4200726100658658164">Öppna platsinställningarna</translation> <translation id="4226663524361240545">Aviseringar kan göra att enheten vibrerar</translation> -<translation id="4242533952199664413">Öppna Inställningar</translation> <translation id="4259722352634471385">Webbadressen har blockerats: <ph name="URL" /></translation> <translation id="4278390842282768270">Tillåts</translation> <translation id="429312253194641664">Media spelas upp på en webbplats</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Kontakterna du väljer delas med <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Visa</translation> <translation id="5301954838959518834">Ok, jag förstår</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> och <ph name="NUM_MORE" /> till</translation> <translation id="5313967007315987356">Lägg till webbplats</translation> <translation id="5317780077021120954">Spara</translation> <translation id="5335288049665977812">Tillåt att JavaScript körs på webbplatser (rekommenderas)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Namn</translation> <translation id="5489227211564503167">Förfluten tid: <ph name="ELAPSED_TIME" /> av <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Blockera annonser på webbplatser där påträngande eller vilseledande annonser visas</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" /> tillåts, <ph name="PERMISSION_2" /> blockeras</translation> <translation id="5505264765875738116">Webbplatser får inte be om tillåtelse att skicka aviseringar</translation> <translation id="5516455585884385570">Öppna aviseringsinställningar</translation> <translation id="5527111080432883924">Fråga innan en webbplats ges läsbehörighet till text och bilder i Urklipp (rekommenderas)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Kameran har inaktiverats i inställningarna för Android</translation> <translation id="5710871682236653961">Fråga innan webbplatser tillåts att skicka och ta emot uppgifter när du snuddar vid NFC-enheter (rekommenderas)</translation> <translation id="5719847187258001597">All data och alla cookies som har sparats av <ph name="ORIGIN" /> eller motsvarande app på startskärmen rensas.</translation> +<translation id="5771720122942595109"><ph name="PERMISSION_1" /> blockeras</translation> <translation id="5804241973901381774">Behörigheter</translation> <translation id="5860033963881614850">Av</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> och <ph name="NUM_MORE" /> till tillåts</translation> <translation id="5876056640971328065">Pausa video</translation> <translation id="5916664084637901428">På</translation> <translation id="5922853908706496913">Delar skärmen</translation> <translation id="5939518447894949180">Återställ</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> – <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Styr webbplatsens åtkomst till enheten</translation> <translation id="6040143037577758943">Stäng</translation> <translation id="6042308850641462728">Mer</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Blockera cookies från tredje part</translation> <translation id="6206551242102657620">Anslutningen är säker. Webbplatsinformation</translation> <translation id="6216432067784365534">Alternativ för <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" /> och <ph name="PERMISSION_2" /> blockeras</translation> <translation id="6270391203985052864">Webbplatser får be om tillåtelse att skicka aviseringar</translation> <translation id="6295158916970320988">Alla webbplatser</translation> <translation id="6320088164292336938">Vibration</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Spela</translation> <translation id="6818926723028410516">Välj objekt</translation> <translation id="6864395892908308021">Enheten kan inte läsa NFC</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> och <ph name="NUM_MORE" /> till blockeras</translation> <translation id="6910211073230771657">Borttagen</translation> <translation id="6912998170423641340">Webbplatser ges inte tillgång till text och bilder i Urklipp</translation> <translation id="6945221475159498467">Välj</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Välj bilder</translation> <translation id="7243308994586599757">Alternativ visas nära skärmens nedre kant</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> har valts</translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" /> och <ph name="PERMISSION_2" /> tillåts</translation> <translation id="7302486331832100261">Du brukar blockera aviseringar. Tryck på Info om du vill tillåta dem.</translation> <translation id="7423098979219808738">Fråga först</translation> <translation id="7423538860840206698">Läsbehörighet till Urklipp har nekats</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Innehållet kommer från <ph name="DOMAIN_NAME" /> via Google.</translation> <translation id="8116925261070264013">Ljudet avstängt</translation> <translation id="8131740175452115882">Bekräfta</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" /> tillåts</translation> <translation id="8200772114523450471">Återuppta</translation> <translation id="8206354486702514201">Administratören har gjort den här inställningen obligatorisk.</translation> <translation id="8249310407154411074">Flytta högst upp</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb index 5881594..57dad16 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Tovuti <ph name="SITE_NAME" /> imeongezwa</translation> <translation id="1383876407941801731">Tafuta</translation> <translation id="1384959399684842514">Upakuaji umesitishwa</translation> +<translation id="1431402976894535801">Zuia tovuti zisijue wakati unapatikana</translation> <translation id="1446450296470737166">Ruhusu udhibiti kamili wa vifaa vya MIDI</translation> <translation id="1509960214886564027">Huenda vipengele kwenye tovuti nyingi vikakosa kufanya kazi</translation> <translation id="1620510694547887537">Kamera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Fungua Programu Inayofunguka Papo Hapo</translation> <translation id="2148716181193084225">Leo</translation> <translation id="2182457891543959921">Uliza kabla ya kuruhusu tovuti zibuni ramani ya 3D ya mazingira yako au kufuatilia mkao wa kamera (inapendekezwa)</translation> +<translation id="2187243482123994665">Upatikanaji wa mtumiaji</translation> <translation id="2212565012507486665">Ruhusu vidakuzi</translation> <translation id="2228071138934252756">Ili uruhusu <ph name="APP_NAME" /> ifikie kamera yako, washa pia kamera katika <ph name="BEGIN_LINK" />Mipangilio ya Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Niulize wakati tovuti inataka kugundua vifaa vya Bluetooth vilivyo karibu (inapendekezwa)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Kicheza video</translation> <translation id="3115898365077584848">Onyesha Maelezo</translation> <translation id="3123473560110926937">Yamezuiwa kwenye baadhi ya tovuti</translation> +<translation id="3165371858310906303">Niulize wakati tovuti inataka kujua kama ninapatikana</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> za data iliyohifadhiwa</translation> <translation id="321187648315454507">Ili uruhusu <ph name="APP_NAME" /> ikutumie arifa, washa pia arifa katika <ph name="BEGIN_LINK" />Mipangilio ya Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Maikrofoni</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Mipangilio ya tovuti</translation> <translation id="4200726100658658164">Fungua Mipangilio ya Mahali</translation> <translation id="4226663524361240545">Arifa huenda zitatetemesha kifaa</translation> -<translation id="4242533952199664413">Fungua mipangilio</translation> <translation id="4259722352634471385">Kudurusu kumezuiwa: <ph name="URL" /></translation> <translation id="4278390842282768270">Imeruhusiwa</translation> <translation id="429312253194641664">Tovuti inacheza maudhui</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Anwani unazochagua zitashirikiwa na <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Onyesha</translation> <translation id="5301954838959518834">Sawa, nimeelewa</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> na kipengele kingine <ph name="NUM_MORE" /></translation> <translation id="5313967007315987356">Ongeza tovuti</translation> <translation id="5317780077021120954">Hifadhi</translation> <translation id="5335288049665977812">Ruhusu tovuti zitumie JavaScript (inapendekezwa)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Majina</translation> <translation id="5489227211564503167">Muda uliopita ni <ph name="ELAPSED_TIME" /> kati ya <ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Zuia matangazo kwenye tovuti zinazoonyesha matangazo yanayopotosha au yanayokatiza huduma</translation> +<translation id="5502860503640766021">Umeruhusu kipengele cha <ph name="PERMISSION_1" /> kifikiwe, umezuia kipengele cha <ph name="PERMISSION_2" /> kisifikiwe</translation> <translation id="5505264765875738116">Tovuti haziwezi kukuuliza kutuma arifa</translation> <translation id="5516455585884385570">Fungua mipangilio ya arifa</translation> <translation id="5527111080432883924">Iulize kabla ya kuruhusu tovuti kusoma maandishi na picha kutoka ubao wa kunakili (inapendekezwa)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Kamera imezimwa katika mipangilio ya Android</translation> <translation id="5710871682236653961">Uliza kabla ya kuruhusu tovuti kutuma na kupokea maelezo unapogusa vifaa vya NFC (inapendekezwa)</translation> <translation id="5719847187258001597">Hatua hii itafuta data na vidakuzi vyote vilivyohifadhiwa na <ph name="ORIGIN" /> au na programu yake kwenye Skrini yako ya kwanza.</translation> +<translation id="5771720122942595109">Umezuia kipengele cha <ph name="PERMISSION_1" /> kisifikiwe</translation> <translation id="5804241973901381774">Idhini</translation> <translation id="5860033963881614850">Kimezimwa</translation> +<translation id="5863245810240683687">Umeruhusu vipengele vya <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> na kingine <ph name="NUM_MORE" /> vifikiwe</translation> <translation id="5876056640971328065">Sitisha video</translation> <translation id="5916664084637901428">Imewashwa</translation> <translation id="5922853908706496913">Inashiriki skrini yako</translation> <translation id="5939518447894949180">Weka upya</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" />, <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Dhibiti ufikiaji wa tovuti hii kwenye kifaa chako</translation> <translation id="6040143037577758943">Funga</translation> <translation id="6042308850641462728">Zaidi</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Zuia vidakuzi vya tovuti nyingine</translation> <translation id="6206551242102657620">Muunganisho ni salama. Maelezo ya tovuti</translation> <translation id="6216432067784365534">Chaguo za <ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358">Umezuia vipengele vya <ph name="PERMISSION_1" /> na <ph name="PERMISSION_2" /> visifikiwe</translation> <translation id="6270391203985052864">Tovuti zinaweza kukuuliza kutuma arifa</translation> <translation id="6295158916970320988">Tovuti zote</translation> <translation id="6320088164292336938">Tetema</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Cheza</translation> <translation id="6818926723028410516">Chagua vipengee</translation> <translation id="6864395892908308021">Kifaa hiki kimeshindwa kusoma NFC</translation> +<translation id="6879016579615558281">Umezuia kipengele cha <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> na kingine <ph name="NUM_MORE" /> visifikiwe</translation> <translation id="6910211073230771657">Imeondolewa</translation> <translation id="6912998170423641340">Zuia tovuti zisisome maandishi na picha kutoka ubao wa kunakili</translation> <translation id="6945221475159498467">Chagua</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Chagua picha</translation> <translation id="7243308994586599757">Chaguo zinapatikana karibu na sehemu ya chini ya skrini</translation> <translation id="7250468141469952378">Umechagua <ph name="ITEM_COUNT" /></translation> +<translation id="7260727271532453612">Umeruhusu vipengele vya <ph name="PERMISSION_1" /> na <ph name="PERMISSION_2" /> vifikiwe</translation> <translation id="7302486331832100261">Huwa unazuia arifa. Ili uziruhusu, gusa Maelezo.</translation> <translation id="7423098979219808738">Uliza kwanza</translation> <translation id="7423538860840206698">Imezuiwa kusoma ubao wa kunakili</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Maudhui haya yanatoka <ph name="DOMAIN_NAME" />, yamewasilishwa na Google.</translation> <translation id="8116925261070264013">Imezimwa</translation> <translation id="8131740175452115882">Thibitisha</translation> +<translation id="8197286292360124385">Umeruhusu kipengele cha <ph name="PERMISSION_1" /> kifikiwe</translation> <translation id="8200772114523450471">Endelea</translation> <translation id="8206354486702514201">Mpangilio huu umetekelezwa na msimamizi wako.</translation> <translation id="8249310407154411074">Sogeza juu</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb index 2824ec9..fdc9a36 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">தள அமைப்புகள்</translation> <translation id="4200726100658658164">இருப்பிட அமைப்புகளைத் திறக்கும்</translation> <translation id="4226663524361240545">அறிவிப்புகள் வரும் போது சாதனம் அதிர்வுறக்கூடும்</translation> -<translation id="4242533952199664413">அமைப்புகளைத் திற</translation> <translation id="4259722352634471385">செல்வது தடுக்கப்பட்டது: <ph name="URL" /></translation> <translation id="4278390842282768270">அனுமதிக்கப்பட்டது</translation> <translation id="429312253194641664">ஒரு தளம் மீடியாவை இயக்குகிறது</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb index 1a5818a9..18d8b08 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676"><ph name="SITE_NAME" /> సైట్ జోడించబడింది</translation> <translation id="1383876407941801731">సెర్చ్</translation> <translation id="1384959399684842514">డౌన్లోడ్ పాజ్ చేయబడింది</translation> +<translation id="1431402976894535801">మీ ఉనికిని తెలుసుకోనివ్వకుండా సైట్లను బ్లాక్ చేయండి</translation> <translation id="1446450296470737166">MIDI పరికరాల పూర్తి నియం. అనుమ.</translation> <translation id="1509960214886564027">చాలా సైట్లలోని ఫీచర్లు పని చేయకుండాపోవచ్చు</translation> <translation id="1620510694547887537">కెమెరా</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">తక్షణ యాప్ను తెరువు</translation> <translation id="2148716181193084225">ఈ రోజు</translation> <translation id="2182457891543959921">మీ పరిసరాల 3D మ్యాప్ను రూపొందించడానికి లేదా కెమెరా పొజిషన్ను ట్రాక్ చేయడానికి సైట్లను అనుమతించే ముందు అడగాలి (సిఫార్సు చేయడమైనది)</translation> +<translation id="2187243482123994665">యూజర్ ఉనికి</translation> <translation id="2212565012507486665">కుక్కీలను అనుమతించు</translation> <translation id="2228071138934252756">మీ కెమెరాను యాక్సెస్ చేయడానికి <ph name="APP_NAME" />ని అనుమతించడానికి, <ph name="BEGIN_LINK" />Android సెట్టింగ్ల<ph name="END_LINK" />లో కూడా కెమెరాను ఆన్ చేయండి.</translation> <translation id="2289270750774289114">ఏదైనా ఒక సైట్ సమీపంలోని బ్లూటూత్ పరికరాలను కనుగొనాలనుకున్నప్పుడు అనుమతి అడుగుతుంది (సిఫార్సు చేయడమైనది)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">వీడియో ప్లేయర్</translation> <translation id="3115898365077584848">సమాచారాన్ని చూపు</translation> <translation id="3123473560110926937">కొన్ని సైట్లలో బ్లాక్ చేయబడింది</translation> +<translation id="3165371858310906303">ఒక సైట్ మీ ఉనికిని తెలుసుకోవాలనుకున్నప్పుడు అనుమతి అడగాలి</translation> <translation id="3198916472715691905">నిల్వ చేసిన డేటా <ph name="STORAGE_AMOUNT" /></translation> <translation id="321187648315454507">మీకు నోటిఫికేషన్లను పంపడానికి <ph name="APP_NAME" />ని అనుమతించేందుకు, <ph name="BEGIN_LINK" />Android సెట్టింగ్ల<ph name="END_LINK" />లో కూడా నోటిఫికేషన్లను ఆన్ చేయండి.</translation> <translation id="3227137524299004712">మైక్రోఫోన్</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">సైట్ సెట్టింగ్లు</translation> <translation id="4200726100658658164">లొకేషన్ సెట్టింగ్లను తెరవండి</translation> <translation id="4226663524361240545">నోటిఫికేషన్లు పరికరాన్ని వైబ్రేట్ చేయవచ్చు</translation> -<translation id="4242533952199664413">సెట్టింగ్లను తెరువు</translation> <translation id="4259722352634471385">నావిగేషన్ బ్లాక్ చేయబడింది: <ph name="URL" /></translation> <translation id="4278390842282768270">అనుమతించబడింది</translation> <translation id="429312253194641664">ఒక సైట్లో మీడియా ప్లే చేయబడుతోంది</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">మీరు ఎంచుకున్న పరిచయాలు <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />తో షేర్ చేయబడతాయి.</translation> <translation id="5300589172476337783">చూపించు</translation> <translation id="5301954838959518834">సరే, అర్థమైంది</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, ఇంకా మరో <ph name="NUM_MORE" /></translation> <translation id="5313967007315987356">సైట్ను జోడించు</translation> <translation id="5317780077021120954">సేవ్ చేయి</translation> <translation id="5335288049665977812">సైట్లను జావాస్క్రిప్ట్ అమలు చేయడానికి అనుమతిస్తుంది (సిఫార్సు చేయబడింది)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">పేర్లు</translation> <translation id="5489227211564503167"><ph name="TOTAL_TIME" />లో <ph name="ELAPSED_TIME" /> సమయం గడిచిపోయింది.</translation> <translation id="5494752089476963479">అనుచితమైన లేదా తప్పుదారి పట్టించే ప్రకటనలను చూపించే సైట్లలో ప్రకటనలను బ్లాక్ చేస్తుంది</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" /> అనుమతించబడింది, <ph name="PERMISSION_2" /> బ్లాక్ చేయబడింది</translation> <translation id="5505264765875738116">నోటిఫికేషన్లను పంపడానికి సైట్లు అడగవు</translation> <translation id="5516455585884385570">నోటిఫికేషన్ సెట్టింగ్లను తెరువు</translation> <translation id="5527111080432883924">క్లిప్బోర్డ్ నుండి వచనం మరియు చిత్రాలను చదవడానికి అనుమతించే ముందు సమ్మతి అడగాలి (సిఫార్సు చేస్తున్నాము)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Android సెట్టింగ్లలో కెమెరా ఆఫ్ చేయబడింది</translation> <translation id="5710871682236653961">మీరు NFC పరికరాలను నొక్కినప్పుడు, సైట్లు సమాచారాన్ని పంపడానికి, అలాగే స్వీకరించడానికి ముందు అనుమతి కోసం అడుగుతాయి (సిఫార్సు చేయబడింది)</translation> <translation id="5719847187258001597">ఇది మీ హోమ్ స్క్రీన్లో <ph name="ORIGIN" /> లేదా దాని యాప్ ద్వారా స్టోర్ చేయబడిన మొత్తం డేటా, కుక్కీలను క్లియర్ చేస్తుంది.</translation> +<translation id="5771720122942595109"><ph name="PERMISSION_1" /> బ్లాక్ చేయబడింది</translation> <translation id="5804241973901381774">అనుమతులు</translation> <translation id="5860033963881614850">ఆఫ్ అయ్యింది</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, ఇంకా మరో <ph name="NUM_MORE" /> అనుమతించబడ్డాయి</translation> <translation id="5876056640971328065">వీడియోను పాజ్ చేయి</translation> <translation id="5916664084637901428">ఆన్ చేయి</translation> <translation id="5922853908706496913">మీ స్క్రీన్ను షేర్ చేయడం</translation> <translation id="5939518447894949180">రీసెట్ చేయి</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">మీ పరికరానికి ఈ సైట్ యాక్సెస్ని నియంత్రించండి</translation> <translation id="6040143037577758943">మూసివేయి</translation> <translation id="6042308850641462728">మరింత చూపించు</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">మూడవ పక్షం కుక్కీలను బ్లాక్ చేయి</translation> <translation id="6206551242102657620">కనెక్షన్ సురక్షితం. సైట్ సమాచారం</translation> <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> ఎంపికలు</translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> బ్లాక్ చేయబడ్డాయి</translation> <translation id="6270391203985052864">నోటిఫికేషన్లను పంపడానికి సైట్లు అడుగగలవు</translation> <translation id="6295158916970320988">అన్ని సైట్లు</translation> <translation id="6320088164292336938">వైబ్రేట్ చేయి</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">ప్లే చేయి</translation> <translation id="6818926723028410516">అంశాలను ఎంచుకోండి</translation> <translation id="6864395892908308021">ఈ పరికరం NFCని రీడ్ చేయదు</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, ఇంకా మరో <ph name="NUM_MORE" /> బ్లాక్ చేయబడ్డాయి</translation> <translation id="6910211073230771657">తొలగించబడింది</translation> <translation id="6912998170423641340">క్లిప్బోర్డ్ నుండి వచనం మరియు చిత్రాలను చదవకుండా సైట్లు బ్లాక్ చేయబడతాయి</translation> <translation id="6945221475159498467">ఎంచుకోండి</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">చిత్రాలను ఎంచుకోండి</translation> <translation id="7243308994586599757">స్క్రీన్ దిగువభాగం సమీపంలో ఎంపికలు అందుబాటులో ఉంటాయి</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> ఎంచుకోబడ్డాయి</translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> అనుమతించబడ్డాయి</translation> <translation id="7302486331832100261">మీరు సాధారణంగా నోటిఫికేషన్లను బ్లాక్ చేస్తుంటారు. అనుమతించడానికి, 'వివరాలు'ను నొక్కండి.</translation> <translation id="7423098979219808738">ముందుగా అడుగుతుంది</translation> <translation id="7423538860840206698">క్లిప్బోర్డ్ని చదవకుండా బ్లాక్ చేసారు</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">ఈ కంటెంట్ Google ద్వారా డెలివర్ చేయబడిన <ph name="DOMAIN_NAME" />లోనిది.</translation> <translation id="8116925261070264013">మ్యూట్ చేసినవి</translation> <translation id="8131740175452115882">నిర్ధారించు</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" /> అనుమతించబడింది</translation> <translation id="8200772114523450471">మళ్లీ ప్రారంభించు</translation> <translation id="8206354486702514201">ఈ సెట్టింగ్ మీ నిర్వాహకుడి ద్వారా అమలు చేయబడింది.</translation> <translation id="8249310407154411074">ఎగువకు తరలించు</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb index e6b91b0..4039f6f5 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">เพิ่มเว็บไซต์ <ph name="SITE_NAME" /> แล้ว</translation> <translation id="1383876407941801731">ค้นหา</translation> <translation id="1384959399684842514">หยุดดาวน์โหลดไว้ชั่วคราว</translation> +<translation id="1431402976894535801">บล็อกเว็บไซต์ไม่ให้ทราบว่าคุณใช้งานอยู่</translation> <translation id="1446450296470737166">ควบคุมอุปกรณ์ MIDI ได้สมบูรณ์</translation> <translation id="1509960214886564027">ฟีเจอร์ในหลายเว็บไซต์อาจใช้งานไม่ได้</translation> <translation id="1620510694547887537">กล้องถ่ายรูป</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">เปิด Instant App</translation> <translation id="2148716181193084225">วันนี้</translation> <translation id="2182457891543959921">ถามก่อนที่จะอนุญาตให้เว็บไซต์สร้างแผนที่ 3 มิติของสิ่งที่อยู่รอบตัวคุณหรือติดตามตำแหน่งของกล้อง (แนะนำ)</translation> +<translation id="2187243482123994665">การใช้งานอยู่ของผู้ใช้</translation> <translation id="2212565012507486665">อนุญาตคุกกี้</translation> <translation id="2228071138934252756">หากต้องการอนุญาตให้ <ph name="APP_NAME" /> เข้าถึงกล้องถ่ายรูป ให้เปิดใช้กล้องใน<ph name="BEGIN_LINK" />การตั้งค่า Android<ph name="END_LINK" /> ด้วย</translation> <translation id="2289270750774289114">ถามเมื่อเว็บไซต์ต้องการค้นหาอุปกรณ์บลูทูธใกล้เคียง (แนะนำ)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">โปรแกรมเล่นวิดีโอ</translation> <translation id="3115898365077584848">แสดงข้อมูล</translation> <translation id="3123473560110926937">บล็อกในบางเว็บไซต์</translation> +<translation id="3165371858310906303">ถามเมื่อเว็บไซต์ต้องการทราบเมื่อคุณใช้งานอยู่</translation> <translation id="3198916472715691905">ข้อมูลที่จัดเก็บมี <ph name="STORAGE_AMOUNT" /></translation> <translation id="321187648315454507">หากต้องการอนุญาตให้ <ph name="APP_NAME" /> ส่งการแจ้งเตือนให้คุณ ให้เปิดใช้การแจ้งเตือนใน<ph name="BEGIN_LINK" />การตั้งค่า Android<ph name="END_LINK" /> ด้วย</translation> <translation id="3227137524299004712">ไมโครโฟน</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">การตั้งค่าเว็บไซต์</translation> <translation id="4200726100658658164">เปิดการตั้งค่าตำแหน่ง</translation> <translation id="4226663524361240545">การแจ้งเตือนอาจทำให้อุปกรณ์สั่น</translation> -<translation id="4242533952199664413">เปิดการตั้งค่า</translation> <translation id="4259722352634471385">มีการบล็อกการนำทาง: <ph name="URL" /></translation> <translation id="4278390842282768270">อนุญาตแล้ว</translation> <translation id="429312253194641664">เว็บไซต์กำลังเล่นสื่อ</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">ระบบจะแชร์รายชื่อติดต่อที่คุณเลือกกับ <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /></translation> <translation id="5300589172476337783">แสดง</translation> <translation id="5301954838959518834">ตกลง เข้าใจแล้ว</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" /> <ph name="PERMISSION_2" /> และอีก <ph name="NUM_MORE" /> รายการ</translation> <translation id="5313967007315987356">เพิ่มเว็บไซต์</translation> <translation id="5317780077021120954">บันทึก</translation> <translation id="5335288049665977812">อนุญาตให้เว็บไซต์เรียกใช้ JavaScript (แนะนำ)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">ชื่อ</translation> <translation id="5489227211564503167">เวลาผ่านไป <ph name="ELAPSED_TIME" /> จาก <ph name="TOTAL_TIME" /></translation> <translation id="5494752089476963479">บล็อกโฆษณาในเว็บไซต์ที่แสดงโฆษณาที่แทรกหรือทำให้เข้าใจผิด</translation> +<translation id="5502860503640766021">อนุญาตให้เข้าถึง<ph name="PERMISSION_1" /> บล็อก<ph name="PERMISSION_2" /></translation> <translation id="5505264765875738116">เว็บไซต์ขออนุญาตเพื่อส่งการแจ้งเตือนไม่ได้</translation> <translation id="5516455585884385570">เปิดการตั้งค่าการแจ้งเตือน</translation> <translation id="5527111080432883924">ถามก่อนอนุญาตให้เว็บไซต์อ่านข้อความและดูรูปภาพจากคลิปบอร์ด (แนะนำ)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">กล้องปิดอยู่ในการตั้งค่า Android</translation> <translation id="5710871682236653961">ถามก่อนที่จะอนุญาตให้เว็บไซต์ส่งและรับข้อมูลเมื่อคุณแตะอุปกรณ์ NFC (แนะนำ)</translation> <translation id="5719847187258001597">การดำเนินการนี้จะล้างข้อมูลและคุกกี้ทั้งหมดที่ <ph name="ORIGIN" /> หรือแอปที่อยู่ในหน้าจอหลักจัดเก็บไว้</translation> +<translation id="5771720122942595109">บล็อก<ph name="PERMISSION_1" /></translation> <translation id="5804241973901381774">การอนุญาต</translation> <translation id="5860033963881614850">ปิด</translation> +<translation id="5863245810240683687">อนุญาตให้เข้าถึง<ph name="PERMISSION_1" /> <ph name="PERMISSION_2" /> และอีก <ph name="NUM_MORE" /> รายการ</translation> <translation id="5876056640971328065">หยุดวิดีโอชั่วคราว</translation> <translation id="5916664084637901428">เปิด</translation> <translation id="5922853908706496913">กำลังแชร์หน้าจอ</translation> <translation id="5939518447894949180">รีเซ็ต</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">ควบคุมการเข้าถึงอุปกรณ์ของคุณของเว็บไซต์นี้</translation> <translation id="6040143037577758943">ปิด</translation> <translation id="6042308850641462728">แสดงเพิ่ม</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">บล็อกคุกกี้ของบุคคลที่สาม</translation> <translation id="6206551242102657620">การเชื่อมต่อปลอดภัย ข้อมูลเว็บไซต์</translation> <translation id="6216432067784365534">ตัวเลือกสำหรับ<ph name="NAME_OF_LIST_ITEM" /></translation> +<translation id="6262279340360821358">บล็อก<ph name="PERMISSION_1" />และ<ph name="PERMISSION_2" /></translation> <translation id="6270391203985052864">เว็บไซต์ขออนุญาตเพื่อส่งการแจ้งเตือนได้</translation> <translation id="6295158916970320988">เว็บไซต์ทั้งหมด</translation> <translation id="6320088164292336938">สั่น</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">เล่น</translation> <translation id="6818926723028410516">เลือกรายการ</translation> <translation id="6864395892908308021">อุปกรณ์นี้อ่าน NFC ไม่ได้</translation> +<translation id="6879016579615558281">บล็อก<ph name="PERMISSION_1" /> <ph name="PERMISSION_2" /> และอีก <ph name="NUM_MORE" /> รายการไว้</translation> <translation id="6910211073230771657">ลบแล้ว</translation> <translation id="6912998170423641340">บล็อกเว็บไซต์ไม่ให้อ่านข้อความและดูรูปภาพจากคลิปบอร์ด</translation> <translation id="6945221475159498467">เลือก</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">เลือกภาพ</translation> <translation id="7243308994586599757">มีตัวเลือกอยู่ทางด้านล่างของหน้าจอ</translation> <translation id="7250468141469952378">เลือกไว้ <ph name="ITEM_COUNT" /> รายการ</translation> +<translation id="7260727271532453612">อนุญาตให้เข้าถึง<ph name="PERMISSION_1" />และ<ph name="PERMISSION_2" /></translation> <translation id="7302486331832100261">คุณมักจะบล็อกการแจ้งเตือน หากต้องการอนุญาต ให้แตะ "รายละเอียด"</translation> <translation id="7423098979219808738">ถามก่อน</translation> <translation id="7423538860840206698">บล็อกไม่ให้อ่านคลิปบอร์ด</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">เนื้อหานี้มาจาก <ph name="DOMAIN_NAME" /> และนำส่งโดย Google</translation> <translation id="8116925261070264013">ปิดเสียง</translation> <translation id="8131740175452115882">ยืนยัน</translation> +<translation id="8197286292360124385">อนุญาตให้เข้าถึง<ph name="PERMISSION_1" /></translation> <translation id="8200772114523450471">ทำต่อ</translation> <translation id="8206354486702514201">ผู้ดูแลระบบของคุณกำหนดให้ใช้การตั้งค่านี้</translation> <translation id="8249310407154411074">เลื่อนไปบนสุด</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb index 5a0a05b..2e0c525 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676"><ph name="SITE_NAME" /> sitesi eklendi</translation> <translation id="1383876407941801731">Ara</translation> <translation id="1384959399684842514">İndirme işlemi duraklatıldı</translation> +<translation id="1431402976894535801">Etkin olduğunuzda sitelerin bilmesini engelleyin</translation> <translation id="1446450296470737166">MIDI cihazlarının tam denetimine izin verme</translation> <translation id="1509960214886564027">Birçok sitedeki özellikler bozulabilir</translation> <translation id="1620510694547887537">Kamera</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Hazır Uygulamayı aç</translation> <translation id="2148716181193084225">Bugün</translation> <translation id="2182457891543959921">Sitelerin çevremin 3D haritasını oluşturmasına veya kamera konumunu takip etmesine izin vermeden önce sor (önerilir)</translation> +<translation id="2187243482123994665">Kullanıcı etkinliği</translation> <translation id="2212565012507486665">Çerezlere izin ver</translation> <translation id="2228071138934252756"><ph name="APP_NAME" /> uygulamasının kameranıza erişebilmesi için <ph name="BEGIN_LINK" />Android Ayarları<ph name="END_LINK" />'nda da kamerayı açın.</translation> <translation id="2289270750774289114">Bir site yakındaki Bluetooth cihazları bulmak istediğinde sor (önerilir)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Video oynatıcı</translation> <translation id="3115898365077584848">Bilgileri Göster</translation> <translation id="3123473560110926937">Bazı sitelerde engellendi</translation> +<translation id="3165371858310906303">Bir site, etkin olduğumu bilmek istediğinde sor</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> depolanmış veri</translation> <translation id="321187648315454507"><ph name="APP_NAME" /> uygulamasının size bildirim gönderebilmesi için <ph name="BEGIN_LINK" />Android Ayarları<ph name="END_LINK" />'nda da bildirimleri açın.</translation> <translation id="3227137524299004712">Mikrofon</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Site ayarları</translation> <translation id="4200726100658658164">Konum Ayarlarını açın</translation> <translation id="4226663524361240545">Bildirimler cihazı titretebilir</translation> -<translation id="4242533952199664413">Ayarları aç</translation> <translation id="4259722352634471385">Gezinme engellendi: <ph name="URL" /></translation> <translation id="4278390842282768270">İzin verilen</translation> <translation id="429312253194641664">Bir site medya oynatıyor</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Seçtiğiniz kişiler <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ile paylaşılacak.</translation> <translation id="5300589172476337783">Göster</translation> <translation id="5301954838959518834">Tamam, anladım</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ve <ph name="NUM_MORE" /> tane daha</translation> <translation id="5313967007315987356">Site ekle</translation> <translation id="5317780077021120954">Kaydet</translation> <translation id="5335288049665977812">Sitelerin JavaScript çalıştırmasına izin ver (önerilir)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Adlar</translation> <translation id="5489227211564503167">Geçen süre: <ph name="ELAPSED_TIME" />/<ph name="TOTAL_TIME" /></translation> <translation id="5494752089476963479">Araya giren veya yanıltıcı reklamlar gösteren sitelerde reklamları engelle</translation> +<translation id="5502860503640766021"><ph name="PERMISSION_1" /> için izin verildi, <ph name="PERMISSION_2" /> engellendi</translation> <translation id="5505264765875738116">Siteler bildirim göndermek isteyemez</translation> <translation id="5516455585884385570">Bildirim ayarlarını aç</translation> <translation id="5527111080432883924">Panodaki metin ve resimleri okumak için sitelere izin vermeden önce sor (önerilen)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Kamera, Android ayarlarında kapatıldı</translation> <translation id="5710871682236653961">NFC cihazlarına dokunduğunuzda sitelerin bilgi göndermesine ve almasına izin verilmeden önce size sorulur (önerilen)</translation> <translation id="5719847187258001597">Bu işlem, Ana ekranınızdaki <ph name="ORIGIN" /> sitesi ve sitenin uygulaması tarafından depolanan tüm verileri ve çerezleri temizleyecek.</translation> +<translation id="5771720122942595109"><ph name="PERMISSION_1" /> engellendi</translation> <translation id="5804241973901381774">İzinler</translation> <translation id="5860033963881614850">Kapalı</translation> +<translation id="5863245810240683687"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ve <ph name="NUM_MORE" /> tanesi için daha izin verildi</translation> <translation id="5876056640971328065">Videoyu duraklat</translation> <translation id="5916664084637901428">Açık</translation> <translation id="5922853908706496913">Ekranınız paylaşılıyor</translation> <translation id="5939518447894949180">Sıfırla</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Bu sitenin cihazınıza erişimini kontrol edin</translation> <translation id="6040143037577758943">Kapat</translation> <translation id="6042308850641462728">Daha fazla</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Üçüncü taraf çerezlerini engelle</translation> <translation id="6206551242102657620">Bağlantı güvenli. Site bilgileri</translation> <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> Seçenekleri</translation> +<translation id="6262279340360821358"><ph name="PERMISSION_1" /> ve <ph name="PERMISSION_2" /> engelledi</translation> <translation id="6270391203985052864">Siteler bildirim göndermek isteyebilir</translation> <translation id="6295158916970320988">Tüm siteler</translation> <translation id="6320088164292336938">Titreşim</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Oynat</translation> <translation id="6818926723028410516">Öğe seçin</translation> <translation id="6864395892908308021">Bu cihaz NFC'yi okuyamıyor</translation> +<translation id="6879016579615558281"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ve <ph name="NUM_MORE" /> izin daha engellendi</translation> <translation id="6910211073230771657">Silindi</translation> <translation id="6912998170423641340">Sitelerin panodaki metni ve resimleri okumasını engelleyin</translation> <translation id="6945221475159498467">Seç</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Resim seç</translation> <translation id="7243308994586599757">Sayfanın altına yakın bir yerde kullanılabilen seçenekler</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> öğe seçildi</translation> +<translation id="7260727271532453612"><ph name="PERMISSION_1" /> ve <ph name="PERMISSION_2" /> için izin verildi</translation> <translation id="7302486331832100261">Genelde bildirimleri engelliyorsunuz. İzin vermek için Ayrıntılar'a dokunun.</translation> <translation id="7423098979219808738">Önce sor</translation> <translation id="7423538860840206698">Pano okuma engellendi</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Bu içerik Google tarafından <ph name="DOMAIN_NAME" /> adresinden sağlanmaktadır.</translation> <translation id="8116925261070264013">Ses kapatıldı</translation> <translation id="8131740175452115882">Onayla</translation> +<translation id="8197286292360124385"><ph name="PERMISSION_1" /> için izin verildi</translation> <translation id="8200772114523450471">Sürdür</translation> <translation id="8206354486702514201">Bu seçenek, yöneticiniz tarafınızdan denetleniyor.</translation> <translation id="8249310407154411074">En üste taşı</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb index a599ecff..70d0c19d 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Сайт <ph name="SITE_NAME" /> додано</translation> <translation id="1383876407941801731">Пошук</translation> <translation id="1384959399684842514">Завантаження призупинено</translation> +<translation id="1431402976894535801">Блокувати сайтам доступ до даних про те, чи ви активні</translation> <translation id="1446450296470737166">Повний контроль пристроїв MIDI</translation> <translation id="1509960214886564027">Функції на багатьох сайтах можуть не працювати</translation> <translation id="1620510694547887537">Камера</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Відкрити додаток із миттєвим запуском</translation> <translation id="2148716181193084225">Сьогодні</translation> <translation id="2182457891543959921">Запитувати, перш ніж дозволяти сайтам створювати 3D-карту вашого оточення або відстежувати положення камери (рекомендовано)</translation> +<translation id="2187243482123994665">Дані про те, чи ви активні</translation> <translation id="2212565012507486665">Дозволити файли cookie</translation> <translation id="2228071138934252756">Щоб надати додатку <ph name="APP_NAME" /> доступ до камери, також увімкніть її в <ph name="BEGIN_LINK" />налаштуваннях Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Запитувати, коли сайт хоче шукати пристрої Bluetooth поблизу (рекомендовано)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Відеопрогравач</translation> <translation id="3115898365077584848">Показати інформацію</translation> <translation id="3123473560110926937">Заблоковано на деяких сайтах</translation> +<translation id="3165371858310906303">Запитувати, коли сайт хоче отримати доступ до даних про те, чи ви активні</translation> <translation id="3198916472715691905">У пам'яті зайнято <ph name="STORAGE_AMOUNT" /></translation> <translation id="321187648315454507">Щоб дозволити додатку <ph name="APP_NAME" /> надсилати вам сповіщення, також увімкніть їх у <ph name="BEGIN_LINK" />налаштуваннях Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Мікрофон</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Налаштування сайту</translation> <translation id="4200726100658658164">Відкрити налаштування доступу до моїх геоданих</translation> <translation id="4226663524361240545">Коли надходитимуть сповіщення, пристрій може вібрувати</translation> -<translation id="4242533952199664413">Відкрити налаштування</translation> <translation id="4259722352634471385">Веб-сторінку <ph name="URL" /> заблоковано</translation> <translation id="4278390842282768270">Дозволено</translation> <translation id="429312253194641664">Сайт відтворює медіа-вміст</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Веб-сайт <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> отримає доступ до вибраних контактів.</translation> <translation id="5300589172476337783">Показати</translation> <translation id="5301954838959518834">OK</translation> +<translation id="5308418739111119514">Доступ до параметрів "<ph name="PERMISSION_1" />", "<ph name="PERMISSION_2" />" і ще <ph name="NUM_MORE" /></translation> <translation id="5313967007315987356">Додати сайт</translation> <translation id="5317780077021120954">Зберегти</translation> <translation id="5335288049665977812">Дозволити сайтам запускати JavaScript (рекомендується)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Імена</translation> <translation id="5489227211564503167">Минуло часу: <ph name="ELAPSED_TIME" /> з <ph name="TOTAL_TIME" /></translation> <translation id="5494752089476963479">Блокувати рекламу на сайтах, які показують нав’язливі чи оманливі оголошення</translation> +<translation id="5502860503640766021">Доступ до параметра "<ph name="PERMISSION_1" />" дозволено, а до параметра "<ph name="PERMISSION_2" />" – заблоковано</translation> <translation id="5505264765875738116">Сайти не можуть просити дозвіл надсилати сповіщення</translation> <translation id="5516455585884385570">Відкрити налаштування сповіщень</translation> <translation id="5527111080432883924">Запитувати, перш ніж дозволяти сайтам переглядати тексти й зображення в буфері обміну (рекомендовано)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Камеру вимкнено в налаштуваннях Android</translation> <translation id="5710871682236653961">Запитувати, перш ніж дозволяти сайтам обмінюватися даними з іншими пристроями через NFC (рекомендовано)</translation> <translation id="5719847187258001597">Буде видалено всі дані й файли cookie сайту <ph name="ORIGIN" /> або його додатка на головному екрані.</translation> +<translation id="5771720122942595109">Доступ до параметра "<ph name="PERMISSION_1" />" заблоковано</translation> <translation id="5804241973901381774">Дозволи</translation> <translation id="5860033963881614850">Вимк.</translation> +<translation id="5863245810240683687">Доступ до параметрів "<ph name="PERMISSION_1" />", "<ph name="PERMISSION_2" />" і ще <ph name="NUM_MORE" /> дозволено</translation> <translation id="5876056640971328065">Призупинити відео</translation> <translation id="5916664084637901428">Увімкнено</translation> <translation id="5922853908706496913">Доступ до вашого екрана</translation> <translation id="5939518447894949180">Скинути</translation> +<translation id="5976059395673079613">Доступ до параметра "<ph name="PERMISSION" />" – <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Керуйте доступом цього сайту до вашого пристрою</translation> <translation id="6040143037577758943">Закрити</translation> <translation id="6042308850641462728">Більше</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Блокувати сторонні файли cookie</translation> <translation id="6206551242102657620">З’єднання безпечне. Інформація про сайт</translation> <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" />: опції</translation> +<translation id="6262279340360821358">Доступ до параметрів "<ph name="PERMISSION_1" />" та "<ph name="PERMISSION_2" />" заблоковано</translation> <translation id="6270391203985052864">Сайти можуть просити дозвіл надсилати сповіщення</translation> <translation id="6295158916970320988">Усі сайти</translation> <translation id="6320088164292336938">Вібросигнал</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Відтворити</translation> <translation id="6818926723028410516">Виберіть елементи</translation> <translation id="6864395892908308021">Цей пристрій не підтримує NFC</translation> +<translation id="6879016579615558281">Доступ до параметрів "<ph name="PERMISSION_1" />", "<ph name="PERMISSION_2" />" і ще <ph name="NUM_MORE" /> заблоковано</translation> <translation id="6910211073230771657">Видалено</translation> <translation id="6912998170423641340">Не дозволяти сайтам переглядати тексти й зображення в буфері обміну</translation> <translation id="6945221475159498467">Вибрати</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Вибрати зображення</translation> <translation id="7243308994586599757">Опції можна знайти внизу екрана</translation> <translation id="7250468141469952378">Вибрано <ph name="ITEM_COUNT" /></translation> +<translation id="7260727271532453612">Доступ до параметрів "<ph name="PERMISSION_1" />" та "<ph name="PERMISSION_2" />" дозволено</translation> <translation id="7302486331832100261">Зазвичай ви блокуєте сповіщення. Щоб дозволити, натисніть "Деталі".</translation> <translation id="7423098979219808738">Спершу запитувати</translation> <translation id="7423538860840206698">Заборонено переглядати буфер обміну</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Це вміст із сайту <ph name="DOMAIN_NAME" />, який доставляє Google.</translation> <translation id="8116925261070264013">Звук вимкнено</translation> <translation id="8131740175452115882">Підтвердити</translation> +<translation id="8197286292360124385">Доступ до параметра "<ph name="PERMISSION_1" />" дозволено</translation> <translation id="8200772114523450471">Поновити</translation> <translation id="8206354486702514201">Це налаштування застосовується вашим адміністратором.</translation> <translation id="8249310407154411074">На початок</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb index ac612d0..e214ddef 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">سائٹ کی ترتیبات</translation> <translation id="4200726100658658164">مقام کی ترتیبات کھولیں</translation> <translation id="4226663524361240545">اطلاعات آلہ کو وائبریٹ کر سکتی ہیں</translation> -<translation id="4242533952199664413">ترتیبات کھولیں</translation> <translation id="4259722352634471385">نیویگیشن مسدود ہے: <ph name="URL" /></translation> <translation id="4278390842282768270">اجازت یافتہ</translation> <translation id="429312253194641664">سائٹ پر میڈیا چل رہا ہے</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_uz.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_uz.xtb index e7e87bb..efb47a2 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_uz.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_uz.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Sayt sozlamalari</translation> <translation id="4200726100658658164">Joylashuv sozlamalarini ochish</translation> <translation id="4226663524361240545">Bildirishnoma kelganida qurilma tebranishi mumkin</translation> -<translation id="4242533952199664413">Sozlamalarni ochish</translation> <translation id="4259722352634471385">Sahifa bloklandi: <ph name="URL" /></translation> <translation id="4278390842282768270">Berilgan ruxsatnomalar</translation> <translation id="429312253194641664">Saytda media-fayl ijro etilmoqda</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb index 1f4d98db..18815951 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">Cài đặt trang web</translation> <translation id="4200726100658658164">Mở phần Cài đặt vị trí</translation> <translation id="4226663524361240545">Thông báo có thể làm rung thiết bị</translation> -<translation id="4242533952199664413">Mở phần cài đặt</translation> <translation id="4259722352634471385">Điều hướng bị chặn: <ph name="URL" /></translation> <translation id="4278390842282768270">Được cho phép</translation> <translation id="429312253194641664">Một trang web đang phát nội dung đa phương tiện</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb index e0ab7fe..a73dd56 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">网站设置</translation> <translation id="4200726100658658164">打开位置信息设置</translation> <translation id="4226663524361240545">收到通知时设备会振动</translation> -<translation id="4242533952199664413">打开“设置”</translation> <translation id="4259722352634471385">已屏蔽 <ph name="URL" /></translation> <translation id="4278390842282768270">允许</translation> <translation id="429312253194641664">某个网站正在播放媒体内容</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-HK.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-HK.xtb index a8791f5..228aec8 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-HK.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-HK.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">網站設定</translation> <translation id="4200726100658658164">開啟位置設定</translation> <translation id="4226663524361240545">裝置會在收到通知時震動</translation> -<translation id="4242533952199664413">開啟設定</translation> <translation id="4259722352634471385">瀏覽網址被封鎖:<ph name="URL" /></translation> <translation id="4278390842282768270">已允許</translation> <translation id="429312253194641664">網站正在播放媒體</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb index ae382e7..9d2eab3 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb
@@ -104,7 +104,6 @@ <translation id="4165986682804962316">網站設定</translation> <translation id="4200726100658658164">開啟位置資訊設定</translation> <translation id="4226663524361240545">收到通知時裝置會震動</translation> -<translation id="4242533952199664413">開啟設定</translation> <translation id="4259722352634471385">瀏覽的網址已封鎖:<ph name="URL" /></translation> <translation id="4278390842282768270">允許</translation> <translation id="429312253194641664">一個網站正在播放媒體內容</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zu.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zu.xtb index e35c9568..e484e326e 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_zu.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zu.xtb
@@ -16,6 +16,7 @@ <translation id="1369915414381695676">Isayithi le-<ph name="SITE_NAME" /> lingeziwe</translation> <translation id="1383876407941801731">Sesha</translation> <translation id="1384959399684842514">Ukulayisha kumiswe isikhashana</translation> +<translation id="1431402976894535801">Vimbela amasayithi ukuthi azi lapho ukhona</translation> <translation id="1446450296470737166">Vumela ulawulo olugcwele lwamadivayisi we-MIDI</translation> <translation id="1509960214886564027">Izici ezikumasayithi amaningi zingase zinqamuke</translation> <translation id="1620510694547887537">Ikhamela</translation> @@ -43,6 +44,7 @@ <translation id="2146738493024040262">Vula i-app elisheshayo</translation> <translation id="2148716181193084225">Namhlanje</translation> <translation id="2182457891543959921">Buza ngaphambi kokuvumela amasayithi ukudala imephu ye-3D yendawo ekuzungezile noma ukulandelela indawo yekhamera (kuyanconywa)</translation> +<translation id="2187243482123994665">Ukuba khona komsebenzisi</translation> <translation id="2212565012507486665">Vumela amakhukhi</translation> <translation id="2228071138934252756">Ukuze uvumele i-<ph name="APP_NAME" /> ifinyelele ikhamera yakho, vula nekhamera <ph name="BEGIN_LINK" />Kumasethingi e-Android<ph name="END_LINK" />.</translation> <translation id="2289270750774289114">Buza uma isayithi lifuna ukuthola amadivayisi aseduze e-Bluetooth (kunconyiwe)</translation> @@ -77,6 +79,7 @@ <translation id="3114012059975132928">Isidlali sevidiyo</translation> <translation id="3115898365077584848">Khombisa ulwazi</translation> <translation id="3123473560110926937">Kuvinjelwe kwamanye amasayithi</translation> +<translation id="3165371858310906303">Buza lapho isayithi lifuna ukwazi lapho ukhona</translation> <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> idatha egciniwe</translation> <translation id="321187648315454507">Ukuze uvumele i-<ph name="APP_NAME" /> ukuthi ikuthumele izaziso, vula nezaziso <ph name="BEGIN_LINK" />Kumasethingi e-Android<ph name="END_LINK" />.</translation> <translation id="3227137524299004712">Imakrofoni</translation> @@ -104,7 +107,6 @@ <translation id="4165986682804962316">Izilungiselelo zesayithi</translation> <translation id="4200726100658658164">Vula Izilungiselelo zendawo</translation> <translation id="4226663524361240545">Izaziso zingadlidliza idivayisi</translation> -<translation id="4242533952199664413">Vula izilungiselelo</translation> <translation id="4259722352634471385">Ukuzulazula kuvinjiwe: <ph name="URL" /></translation> <translation id="4278390842282768270">Kuvunyelwe</translation> <translation id="429312253194641664">Isayithi lidlala imidiya</translation> @@ -134,6 +136,7 @@ <translation id="5197729504361054390">Oxhumana nabo obakhethayo bazokwabiwa no-<ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation> <translation id="5300589172476337783">Bonisa</translation> <translation id="5301954838959518834">OK, ngiyezwa</translation> +<translation id="5308418739111119514"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, nokungu-<ph name="NUM_MORE" /> ngaphezulu</translation> <translation id="5313967007315987356">Engeza isayithi</translation> <translation id="5317780077021120954">Londoloza</translation> <translation id="5335288049665977812">Vumela amasayithi ukuthi aqalise i-JavaScript (kunconyiwe)</translation> @@ -145,6 +148,7 @@ <translation id="5403592356182871684">Amagama</translation> <translation id="5489227211564503167">Isikhathi esidlulile singu-<ph name="ELAPSED_TIME" /> kwesingu-<ph name="TOTAL_TIME" />.</translation> <translation id="5494752089476963479">Vimbela izikhangiso kumasayithi abonisa izikhangiso ezisongelayo noma ezilahlekisayo</translation> +<translation id="5502860503640766021">I-<ph name="PERMISSION_1" /> ivunyelwe, i-<ph name="PERMISSION_2" /> ivinjelwe</translation> <translation id="5505264765875738116">Amasayithi awakwazi ukuthumela izaziso</translation> <translation id="5516455585884385570">Vula izilungiselelo zesaziso</translation> <translation id="5527111080432883924">Buza ngaphambi kokuvumela amasayithi ukuthi afunde umbhalo nezithombe kusukela kubhodi lokunamathisela (kunconyiwe)</translation> @@ -156,12 +160,15 @@ <translation id="5690795753582697420">Ikhamera ivaliwe kuzilungiselelo ze-Android</translation> <translation id="5710871682236653961">Buza ngaphambi kokuvumela amasayithi ukuthi athumele aphinde amukele ulwazi uma uthepha amadivayisi e-NFC (kunconyiwe)</translation> <translation id="5719847187258001597">Lokhu kuzosula yonke idatha namakhukhi agcinwe yi-<ph name="ORIGIN" /> noma uhlelo lwayo lokusebenza Kusikrini sakho sasekhaya.</translation> +<translation id="5771720122942595109">I-<ph name="PERMISSION_1" /> ivinjiwe</translation> <translation id="5804241973901381774">Izimvume</translation> <translation id="5860033963881614850">Valiwe</translation> +<translation id="5863245810240683687">I-<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, nezinye ezingu-<ph name="NUM_MORE" /> zivunyelwe</translation> <translation id="5876056640971328065">Phumuza ividiyo</translation> <translation id="5916664084637901428">Vuliwe</translation> <translation id="5922853908706496913">Yabelana ngesikrini sakho</translation> <translation id="5939518447894949180">Setha kabusha</translation> +<translation id="5976059395673079613"><ph name="PERMISSION" />, <ph name="WARNING_MESSAGE" /></translation> <translation id="6015775454662021376">Lawula ukufinyelela leli sayithi kudivayisi yakho</translation> <translation id="6040143037577758943">Vala</translation> <translation id="6042308850641462728">Okuningi</translation> @@ -173,6 +180,7 @@ <translation id="6196640612572343990">Vimba amakhukhi enkampani yangaphandle</translation> <translation id="6206551242102657620">Uxhumo luphephile. Ulwazi lwesayithi</translation> <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> Izinketho</translation> +<translation id="6262279340360821358">I-<ph name="PERMISSION_1" /> ne-<ph name="PERMISSION_2" /> kuvinjelwe</translation> <translation id="6270391203985052864">Amasayithi angacela ukuthumela izaziso</translation> <translation id="6295158916970320988">Wonke amasayithi</translation> <translation id="6320088164292336938">Dlidliza</translation> @@ -195,6 +203,7 @@ <translation id="6790428901817661496">Dlala</translation> <translation id="6818926723028410516">Khetha izinto</translation> <translation id="6864395892908308021">Le divayisi ayikwazi ukufunda i-NFC</translation> +<translation id="6879016579615558281">I-<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, nezinye ezingu-<ph name="NUM_MORE" /> zivinjelwe</translation> <translation id="6910211073230771657">Kususiwe</translation> <translation id="6912998170423641340">Vimbela amasayithi kusukela ekufundeni umbhalo nezithombe kusukela kubhodi lokunamathisela</translation> <translation id="6945221475159498467">Khetha</translation> @@ -212,6 +221,7 @@ <translation id="723171743924126238">Khetha izithombe</translation> <translation id="7243308994586599757">Izinketho ziyatholakala eduze kwangaphansi kwesikrini</translation> <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> kukhethiwe</translation> +<translation id="7260727271532453612">I-<ph name="PERMISSION_1" /> ne-<ph name="PERMISSION_2" /> kuvunyelwe</translation> <translation id="7302486331832100261">Uvamise ukuvimba izaziso. Ukuze uvumele, thepha imininingwane.</translation> <translation id="7423098979219808738">Buza kuqala</translation> <translation id="7423538860840206698">Kuvinjelwe kusukela ekufundeni ibhodi lokunamathisela</translation> @@ -243,6 +253,7 @@ <translation id="8087000398470557479">Lokhu okuqukethwe kubuya ku-<ph name="DOMAIN_NAME" />, kulethwa i-Google.</translation> <translation id="8116925261070264013">Kuthulisiwe</translation> <translation id="8131740175452115882">Qinisekisa</translation> +<translation id="8197286292360124385">kuvunyelwe i-<ph name="PERMISSION_1" /></translation> <translation id="8200772114523450471">Qala futhi</translation> <translation id="8206354486702514201">Lokhu kulungiselelwa kusetshenziswa umlawuli wakho.</translation> <translation id="8249310407154411074">Thumela phezulu</translation>
diff --git a/components/exo/keyboard.cc b/components/exo/keyboard.cc index 554e57e3..1b316fe6 100644 --- a/components/exo/keyboard.cc +++ b/components/exo/keyboard.cc
@@ -165,8 +165,8 @@ //////////////////////////////////////////////////////////////////////////////// // Keyboard, public: -Keyboard::Keyboard(KeyboardDelegate* delegate, Seat* seat) - : delegate_(delegate), +Keyboard::Keyboard(std::unique_ptr<KeyboardDelegate> delegate, Seat* seat) + : delegate_(std::move(delegate)), seat_(seat), expiration_delay_for_pending_key_acks_(base::TimeDelta::FromMilliseconds( kExpirationDelayForPendingKeyAcksMs)) {
diff --git a/components/exo/keyboard.h b/components/exo/keyboard.h index 843e9e6..2851d56 100644 --- a/components/exo/keyboard.h +++ b/components/exo/keyboard.h
@@ -5,7 +5,7 @@ #ifndef COMPONENTS_EXO_KEYBOARD_H_ #define COMPONENTS_EXO_KEYBOARD_H_ -#include <vector> +#include <memory> #include "ash/public/cpp/keyboard/keyboard_controller_observer.h" #include "base/containers/flat_map.h" @@ -36,10 +36,10 @@ public SeatObserver, public ash::KeyboardControllerObserver { public: - Keyboard(KeyboardDelegate* delegate, Seat* seat); + Keyboard(std::unique_ptr<KeyboardDelegate> delegate, Seat* seat); ~Keyboard() override; - KeyboardDelegate* delegate() const { return delegate_; } + KeyboardDelegate* delegate() const { return delegate_.get(); } bool HasDeviceConfigurationDelegate() const; void SetDeviceConfigurationDelegate( @@ -91,7 +91,7 @@ // The delegate instance that all events except for events about device // configuration are dispatched to. - KeyboardDelegate* const delegate_; + std::unique_ptr<KeyboardDelegate> delegate_; // Seat that the Keyboard recieves focus events from. Seat* const seat_;
diff --git a/components/exo/keyboard_delegate.h b/components/exo/keyboard_delegate.h index 90484cb..6e9bb031 100644 --- a/components/exo/keyboard_delegate.h +++ b/components/exo/keyboard_delegate.h
@@ -19,6 +19,8 @@ // Handles events on keyboards in context-specific ways. class KeyboardDelegate { public: + virtual ~KeyboardDelegate() = default; + // This should return true if |surface| is a valid target for this keyboard. // E.g. the surface is owned by the same client as the keyboard. virtual bool CanAcceptKeyboardEventsForSurface(Surface* surface) const = 0; @@ -46,9 +48,6 @@ virtual void OnKeyRepeatSettingsChanged(bool enabled, base::TimeDelta delay, base::TimeDelta interval) = 0; - - protected: - virtual ~KeyboardDelegate() {} }; } // namespace exo
diff --git a/components/exo/keyboard_unittest.cc b/components/exo/keyboard_unittest.cc index 1ba52ace..81a6f22 100644 --- a/components/exo/keyboard_unittest.cc +++ b/components/exo/keyboard_unittest.cc
@@ -39,52 +39,51 @@ class MockKeyboardDelegate : public KeyboardDelegate { public: - MockKeyboardDelegate() {} + MockKeyboardDelegate() = default; // Overridden from KeyboardDelegate: - MOCK_METHOD1(OnKeyboardDestroying, void(Keyboard*)); - MOCK_CONST_METHOD1(CanAcceptKeyboardEventsForSurface, bool(Surface*)); - MOCK_METHOD2(OnKeyboardEnter, - void(Surface*, const base::flat_map<ui::DomCode, ui::DomCode>&)); - MOCK_METHOD1(OnKeyboardLeave, void(Surface*)); - MOCK_METHOD3(OnKeyboardKey, uint32_t(base::TimeTicks, ui::DomCode, bool)); - MOCK_METHOD1(OnKeyboardModifiers, void(int)); - MOCK_METHOD3(OnKeyRepeatSettingsChanged, - void(bool, base::TimeDelta, base::TimeDelta)); + MOCK_METHOD(bool, CanAcceptKeyboardEventsForSurface, (Surface*), (const)); + MOCK_METHOD(void, + OnKeyboardEnter, + (Surface*, (const base::flat_map<ui::DomCode, ui::DomCode>&))); + MOCK_METHOD(void, OnKeyboardLeave, (Surface*)); + MOCK_METHOD(uint32_t, OnKeyboardKey, (base::TimeTicks, ui::DomCode, bool)); + MOCK_METHOD(void, OnKeyboardModifiers, (int)); + MOCK_METHOD(void, + OnKeyRepeatSettingsChanged, + (bool, base::TimeDelta, base::TimeDelta)); }; using NiceMockKeyboardDelegate = ::testing::NiceMock<MockKeyboardDelegate>; class MockKeyboardDeviceConfigurationDelegate : public KeyboardDeviceConfigurationDelegate { public: - MockKeyboardDeviceConfigurationDelegate() {} + MockKeyboardDeviceConfigurationDelegate() = default; // Overridden from KeyboardDeviceConfigurationDelegate: - MOCK_METHOD1(OnKeyboardDestroying, void(Keyboard*)); - MOCK_METHOD1(OnKeyboardTypeChanged, void(bool)); + MOCK_METHOD(void, OnKeyboardTypeChanged, (bool)); }; class MockKeyboardObserver : public KeyboardObserver { public: - MockKeyboardObserver() {} + MockKeyboardObserver() = default; // Overridden from KeyboardObserver: - MOCK_METHOD1(OnKeyboardDestroying, void(Keyboard*)); + MOCK_METHOD(void, OnKeyboardDestroying, (Keyboard*)); }; class TestShellSurface : public ShellSurface { public: explicit TestShellSurface(Surface* surface) : ShellSurface(surface) {} - MOCK_METHOD1(AcceleratorPressed, bool(const ui::Accelerator& accelerator)); + MOCK_METHOD(bool, AcceleratorPressed, (const ui::Accelerator& accelerator)); }; // Verifies that switching desks via alt-tab doesn't prevent Seat from receiving // key events. https://crbug.com/1008574. TEST_F(KeyboardTest, CorrectSeatPressedKeysOnSwitchingDesks) { Seat seat; - NiceMockKeyboardDelegate delegate; - auto keyboard = std::make_unique<Keyboard>(&delegate, &seat); + Keyboard keyboard(std::make_unique<NiceMockKeyboardDelegate>(), &seat); // Create 2 desks. auto* desks_controller = ash::DesksController::Get(); @@ -158,15 +157,17 @@ focus_client->FocusWindow(surface->window()); // Keyboard should try to set initial focus to surface. - NiceMockKeyboardDelegate delegate; - EXPECT_CALL(delegate, CanAcceptKeyboardEventsForSurface(surface.get())) + auto delegate = std::make_unique<NiceMockKeyboardDelegate>(); + auto* delegate_ptr = delegate.get(); + EXPECT_CALL(*delegate_ptr, CanAcceptKeyboardEventsForSurface(surface.get())) .WillOnce(testing::Return(false)); - auto keyboard = std::make_unique<Keyboard>(&delegate, &seat); + Keyboard keyboard(std::move(delegate), &seat); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); - EXPECT_CALL(delegate, CanAcceptKeyboardEventsForSurface(surface.get())) + EXPECT_CALL(*delegate_ptr, CanAcceptKeyboardEventsForSurface(surface.get())) .WillOnce(testing::Return(true)); - EXPECT_CALL(delegate, OnKeyboardModifiers(ui::EF_SHIFT_DOWN)); - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(ui::EF_SHIFT_DOWN)); + EXPECT_CALL(*delegate_ptr, OnKeyboardEnter(surface.get(), base::flat_map<ui::DomCode, ui::DomCode>( {{ui::DomCode::US_A, ui::DomCode::US_A}}))); @@ -178,17 +179,17 @@ // Release key after surface lost focus. focus_client->FocusWindow(nullptr); generator.ReleaseKey(ui::VKEY_A, ui::EF_SHIFT_DOWN); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // Key should no longer be pressed when focus returns. - EXPECT_CALL(delegate, CanAcceptKeyboardEventsForSurface(surface.get())) + EXPECT_CALL(*delegate_ptr, CanAcceptKeyboardEventsForSurface(surface.get())) .WillOnce(testing::Return(true)); - EXPECT_CALL(delegate, OnKeyboardModifiers(ui::EF_SHIFT_DOWN)); - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(ui::EF_SHIFT_DOWN)); + EXPECT_CALL(*delegate_ptr, OnKeyboardEnter(surface.get(), base::flat_map<ui::DomCode, ui::DomCode>())); focus_client->FocusWindow(surface->window()->GetToplevelWindow()); - - keyboard.reset(); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); } TEST_F(KeyboardTest, OnKeyboardLeave) { @@ -204,32 +205,37 @@ aura::client::GetFocusClient(ash::Shell::GetPrimaryRootWindow()); focus_client->FocusWindow(nullptr); - NiceMockKeyboardDelegate delegate; + auto delegate = std::make_unique<NiceMockKeyboardDelegate>(); + auto* delegate_ptr = delegate.get(); Seat seat; - auto keyboard = std::make_unique<Keyboard>(&delegate, &seat); + auto keyboard = std::make_unique<Keyboard>(std::move(delegate), &seat); + ON_CALL(*delegate_ptr, CanAcceptKeyboardEventsForSurface(surface.get())) + .WillByDefault(testing::Return(true)); - EXPECT_CALL(delegate, CanAcceptKeyboardEventsForSurface(surface.get())) - .WillRepeatedly(testing::Return(true)); - EXPECT_CALL(delegate, OnKeyboardModifiers(0)); - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(0)); + EXPECT_CALL(*delegate_ptr, OnKeyboardEnter(surface.get(), base::flat_map<ui::DomCode, ui::DomCode>())); focus_client->FocusWindow(surface->window()); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); - EXPECT_CALL(delegate, OnKeyboardLeave(surface.get())); + EXPECT_CALL(*delegate_ptr, OnKeyboardLeave(surface.get())); focus_client->FocusWindow(nullptr); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); - EXPECT_CALL(delegate, OnKeyboardModifiers(0)); - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(0)); + EXPECT_CALL(*delegate_ptr, OnKeyboardEnter(surface.get(), base::flat_map<ui::DomCode, ui::DomCode>())); focus_client->FocusWindow(surface->window()); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); - EXPECT_CALL(delegate, OnKeyboardLeave(surface.get())); + EXPECT_CALL(*delegate_ptr, OnKeyboardLeave(surface.get())); shell_surface.reset(); surface.reset(); - - keyboard.reset(); + // Verify before destroying keyboard to make sure the expected call + // is made on the methods above, rather than in the destructor. + testing::Mock::VerifyAndClearExpectations(delegate_ptr); } TEST_F(KeyboardTest, OnKeyboardKey) { @@ -245,66 +251,80 @@ aura::client::GetFocusClient(ash::Shell::GetPrimaryRootWindow()); focus_client->FocusWindow(nullptr); - NiceMockKeyboardDelegate delegate; + auto delegate = std::make_unique<NiceMockKeyboardDelegate>(); + auto* delegate_ptr = delegate.get(); Seat seat; - auto keyboard = std::make_unique<Keyboard>(&delegate, &seat); + Keyboard keyboard(std::move(delegate), &seat); - EXPECT_CALL(delegate, CanAcceptKeyboardEventsForSurface(surface.get())) + EXPECT_CALL(*delegate_ptr, CanAcceptKeyboardEventsForSurface(surface.get())) .WillOnce(testing::Return(true)); - EXPECT_CALL(delegate, OnKeyboardModifiers(0)); - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(0)); + EXPECT_CALL(*delegate_ptr, OnKeyboardEnter(surface.get(), base::flat_map<ui::DomCode, ui::DomCode>())); focus_client->FocusWindow(surface->window()); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow()); // This should only generate a press event for KEY_A. - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_A, true)); + EXPECT_CALL(*delegate_ptr, + OnKeyboardKey(testing::_, ui::DomCode::US_A, true)); seat.set_physical_code_for_currently_processing_event_for_testing( ui::DomCode::US_A); generator.PressKey(ui::VKEY_A, 0); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // This should not generate another press event for KEY_A. generator.PressKey(ui::VKEY_A, 0); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // This should only generate a single release event for KEY_A. - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_A, false)); + EXPECT_CALL(*delegate_ptr, + OnKeyboardKey(testing::_, ui::DomCode::US_A, false)); generator.ReleaseKey(ui::VKEY_A, 0); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // Test key event rewriting. In this case, ARROW_DOWN is rewritten to KEY_END // as a result of ALT being pressed. - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::END, true)); - EXPECT_CALL(delegate, OnKeyboardModifiers(ui::EF_ALT_DOWN)); + EXPECT_CALL(*delegate_ptr, OnKeyboardKey(testing::_, ui::DomCode::END, true)); + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(ui::EF_ALT_DOWN)); seat.set_physical_code_for_currently_processing_event_for_testing( ui::DomCode::ARROW_DOWN); generator.PressKey(ui::VKEY_END, ui::EF_ALT_DOWN); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // This should generate a release event for KEY_END as that is the key // associated with the key press. - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::END, false)); - EXPECT_CALL(delegate, OnKeyboardModifiers(0)); + EXPECT_CALL(*delegate_ptr, + OnKeyboardKey(testing::_, ui::DomCode::END, false)); + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(0)); generator.ReleaseKey(ui::VKEY_DOWN, 0); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // Press accelerator after surface lost focus. - EXPECT_CALL(delegate, OnKeyboardLeave(surface.get())); + EXPECT_CALL(*delegate_ptr, OnKeyboardLeave(surface.get())); focus_client->FocusWindow(nullptr); seat.set_physical_code_for_currently_processing_event_for_testing( ui::DomCode::US_W); generator.PressKey(ui::VKEY_W, ui::EF_CONTROL_DOWN); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // Key should be pressed when focus returns. - EXPECT_CALL(delegate, CanAcceptKeyboardEventsForSurface(surface.get())) + EXPECT_CALL(*delegate_ptr, CanAcceptKeyboardEventsForSurface(surface.get())) .WillOnce(testing::Return(true)); - EXPECT_CALL(delegate, OnKeyboardModifiers(ui::EF_CONTROL_DOWN)); - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(ui::EF_CONTROL_DOWN)); + EXPECT_CALL(*delegate_ptr, OnKeyboardEnter(surface.get(), base::flat_map<ui::DomCode, ui::DomCode>( {{ui::DomCode::US_W, ui::DomCode::US_W}}))); focus_client->FocusWindow(surface->window()); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // Releasing accelerator when surface has focus should generate event. - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_W, false)); + EXPECT_CALL(*delegate_ptr, + OnKeyboardKey(testing::_, ui::DomCode::US_W, false)); generator.ReleaseKey(ui::VKEY_W, ui::EF_CONTROL_DOWN); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // Key events should be ignored when the focused window is not an // exo::Surface. @@ -312,23 +332,26 @@ gfx::Rect(buffer_size)); // Moving the focus away will trigger the fallback path in GetEffectiveFocus. // TODO(oshima): Consider removing the fallback path. - EXPECT_CALL(delegate, CanAcceptKeyboardEventsForSurface(surface.get())) + EXPECT_CALL(*delegate_ptr, CanAcceptKeyboardEventsForSurface(surface.get())) .WillOnce(testing::Return(true)); focus_client->FocusWindow(window.get()); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate_ptr, OnKeyboardKey(testing::_, ui::DomCode::ARROW_LEFT, true)) .Times(0); seat.set_physical_code_for_currently_processing_event_for_testing( ui::DomCode::ARROW_LEFT); generator.PressKey(ui::VKEY_LEFT, 0); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate_ptr, OnKeyboardKey(testing::_, ui::DomCode::ARROW_LEFT, false)) .Times(0); generator.ReleaseKey(ui::VKEY_LEFT, 0); - - keyboard.reset(); + // Verify before destroying keyboard to make sure the expected call + // is made on the methods above, rather than in the destructor. + testing::Mock::VerifyAndClearExpectations(delegate_ptr); } TEST_F(KeyboardTest, OnKeyboardKey_NotSendKeyIfConsumedByIme) { @@ -344,17 +367,19 @@ aura::client::GetFocusClient(ash::Shell::GetPrimaryRootWindow()); focus_client->FocusWindow(nullptr); - NiceMockKeyboardDelegate delegate; + auto delegate = std::make_unique<NiceMockKeyboardDelegate>(); + auto* delegate_ptr = delegate.get(); Seat seat; - auto keyboard = std::make_unique<Keyboard>(&delegate, &seat); + Keyboard keyboard(std::move(delegate), &seat); - EXPECT_CALL(delegate, CanAcceptKeyboardEventsForSurface(surface.get())) + EXPECT_CALL(*delegate_ptr, CanAcceptKeyboardEventsForSurface(surface.get())) .WillOnce(testing::Return(true)); - EXPECT_CALL(delegate, OnKeyboardModifiers(0)); - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(0)); + EXPECT_CALL(*delegate_ptr, OnKeyboardEnter(surface.get(), base::flat_map<ui::DomCode, ui::DomCode>())); focus_client->FocusWindow(surface->window()); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow()); views::Widget* widget = @@ -365,11 +390,13 @@ // If a text field is focused, a pressed key event is not sent to a client // because a key event should be consumed by the IME. - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_A, true)) + EXPECT_CALL(*delegate_ptr, OnKeyboardKey(testing::_, ui::DomCode::US_A, true)) .Times(0); seat.set_physical_code_for_currently_processing_event_for_testing( ui::DomCode::US_A); generator.PressKey(ui::VKEY_A, 0); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); + // TODO(yhanada): The below EXPECT_CALL fails because exo::Keyboard currently // sends a key release event for the keys which exo::Keyboard sent a pressed // event for. It might causes a never-ending key repeat in the client. @@ -380,26 +407,35 @@ // ImeBlocking. WMHelper::GetInstance()->SetImeBlocked(surface->window()->GetToplevelWindow(), true); - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_B, true)); + EXPECT_CALL(*delegate_ptr, + OnKeyboardKey(testing::_, ui::DomCode::US_B, true)); seat.set_physical_code_for_currently_processing_event_for_testing( ui::DomCode::US_B); generator.PressKey(ui::VKEY_B, 0); - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_B, false)); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); + + EXPECT_CALL(*delegate_ptr, + OnKeyboardKey(testing::_, ui::DomCode::US_B, false)); generator.ReleaseKey(ui::VKEY_B, 0); WMHelper::GetInstance()->SetImeBlocked(surface->window()->GetToplevelWindow(), false); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // Any key event should be sent to a client if a key event skips IME. surface->window()->SetProperty(aura::client::kSkipImeProcessing, true); - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_C, true)); + EXPECT_CALL(*delegate_ptr, + OnKeyboardKey(testing::_, ui::DomCode::US_C, true)); seat.set_physical_code_for_currently_processing_event_for_testing( ui::DomCode::US_C); generator.PressKey(ui::VKEY_C, 0); - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_C, false)); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); + + EXPECT_CALL(*delegate_ptr, + OnKeyboardKey(testing::_, ui::DomCode::US_C, false)); generator.ReleaseKey(ui::VKEY_C, 0); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); input_method->SetFocusedTextInputClient(nullptr); - keyboard.reset(); } TEST_F(KeyboardTest, OnKeyboardModifiers) { @@ -415,40 +451,48 @@ aura::client::GetFocusClient(ash::Shell::GetPrimaryRootWindow()); focus_client->FocusWindow(nullptr); - NiceMockKeyboardDelegate delegate; + auto delegate = std::make_unique<NiceMockKeyboardDelegate>(); + auto* delegate_ptr = delegate.get(); Seat seat; - auto keyboard = std::make_unique<Keyboard>(&delegate, &seat); + Keyboard keyboard(std::move(delegate), &seat); - EXPECT_CALL(delegate, CanAcceptKeyboardEventsForSurface(surface.get())) + EXPECT_CALL(*delegate_ptr, CanAcceptKeyboardEventsForSurface(surface.get())) .WillOnce(testing::Return(true)); - EXPECT_CALL(delegate, OnKeyboardModifiers(0)); - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(0)); + EXPECT_CALL(*delegate_ptr, OnKeyboardEnter(surface.get(), base::flat_map<ui::DomCode, ui::DomCode>())); focus_client->FocusWindow(surface->window()); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow()); // This should generate a modifier event. - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_A, true)); - EXPECT_CALL(delegate, OnKeyboardModifiers(ui::EF_SHIFT_DOWN)); + EXPECT_CALL(*delegate_ptr, + OnKeyboardKey(testing::_, ui::DomCode::US_A, true)); + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(ui::EF_SHIFT_DOWN)); seat.set_physical_code_for_currently_processing_event_for_testing( ui::DomCode::US_A); generator.PressKey(ui::VKEY_A, ui::EF_SHIFT_DOWN); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // This should generate another modifier event. - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_B, true)); - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate_ptr, + OnKeyboardKey(testing::_, ui::DomCode::US_B, true)); + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN)); seat.set_physical_code_for_currently_processing_event_for_testing( ui::DomCode::US_B); generator.PressKey(ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // This should generate a third modifier event. - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_B, false)); - EXPECT_CALL(delegate, OnKeyboardModifiers(0)); + EXPECT_CALL(*delegate_ptr, + OnKeyboardKey(testing::_, ui::DomCode::US_B, false)); + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(0)); generator.ReleaseKey(ui::VKEY_B, 0); - - keyboard.reset(); + // Verify before destroying keyboard to make sure the expected call + // is made on the methods above, rather than in the destructor. + testing::Mock::VerifyAndClearExpectations(delegate_ptr); } TEST_F(KeyboardTest, OnKeyboardTypeChanged) { @@ -481,24 +525,28 @@ ash::Shell::Get()->tablet_mode_controller(); tablet_mode_controller->SetEnabledForTest(true); - NiceMockKeyboardDelegate delegate; Seat seat; - auto keyboard = std::make_unique<Keyboard>(&delegate, &seat); + auto keyboard = std::make_unique<Keyboard>( + std::make_unique<NiceMockKeyboardDelegate>(), &seat); + MockKeyboardDeviceConfigurationDelegate configuration_delegate; EXPECT_CALL(configuration_delegate, OnKeyboardTypeChanged(true)); keyboard->SetDeviceConfigurationDelegate(&configuration_delegate); EXPECT_TRUE(keyboard->HasDeviceConfigurationDelegate()); + testing::Mock::VerifyAndClearExpectations(&configuration_delegate); // Removing all keyboard devices in tablet mode calls // OnKeyboardTypeChanged() with false. EXPECT_CALL(configuration_delegate, OnKeyboardTypeChanged(false)); device_data_manager->OnKeyboardDevicesUpdated( std::vector<ui::InputDevice>({})); + testing::Mock::VerifyAndClearExpectations(&configuration_delegate); // Re-adding keyboards calls OnKeyboardTypeChanged() with true. EXPECT_CALL(configuration_delegate, OnKeyboardTypeChanged(true)); device_data_manager->OnKeyboardDevicesUpdated(keyboards); + testing::Mock::VerifyAndClearExpectations(&configuration_delegate); keyboard.reset(); @@ -526,14 +574,14 @@ ui::InputDevice(2, ui::InputDeviceType::INPUT_DEVICE_USB, "keyboard")}; device_data_manager->OnKeyboardDevicesUpdated(keyboards); - NiceMockKeyboardDelegate delegate; Seat seat; - auto keyboard = std::make_unique<Keyboard>(&delegate, &seat); + Keyboard keyboard(std::make_unique<NiceMockKeyboardDelegate>(), &seat); MockKeyboardDeviceConfigurationDelegate configuration_delegate; EXPECT_CALL(configuration_delegate, OnKeyboardTypeChanged(true)); - keyboard->SetDeviceConfigurationDelegate(&configuration_delegate); - EXPECT_TRUE(keyboard->HasDeviceConfigurationDelegate()); + keyboard.SetDeviceConfigurationDelegate(&configuration_delegate); + EXPECT_TRUE(keyboard.HasDeviceConfigurationDelegate()); + testing::Mock::VerifyAndClearExpectations(&configuration_delegate); ash::AccessibilityControllerImpl* accessibility_controller = ash::Shell::Get()->accessibility_controller(); @@ -541,12 +589,14 @@ // Enable a11y keyboard calls OnKeyboardTypeChanged() with false. EXPECT_CALL(configuration_delegate, OnKeyboardTypeChanged(false)); accessibility_controller->virtual_keyboard().SetEnabled(true); + testing::Mock::VerifyAndClearExpectations(&configuration_delegate); // Disable a11y keyboard calls OnKeyboardTypeChanged() with true. EXPECT_CALL(configuration_delegate, OnKeyboardTypeChanged(true)); accessibility_controller->virtual_keyboard().SetEnabled(false); - - keyboard.reset(); + // Verify before destroying keyboard to make sure the expected call + // is made on the methods above, rather than in the destructor. + testing::Mock::VerifyAndClearExpectations(&configuration_delegate); } constexpr base::TimeDelta kDelta50Ms = base::TimeDelta::FromMilliseconds(50); @@ -555,52 +605,49 @@ base::TimeDelta::FromMilliseconds(1000); TEST_F(KeyboardTest, KeyRepeatSettingsLoadDefaults) { - MockKeyboardDelegate delegate; - Seat seat; - - EXPECT_CALL(delegate, OnKeyRepeatSettingsChanged).Times(0); - EXPECT_CALL(delegate, + auto delegate = std::make_unique<MockKeyboardDelegate>(); + EXPECT_CALL(*delegate, OnKeyRepeatSettingsChanged).Times(0); + EXPECT_CALL(*delegate, OnKeyRepeatSettingsChanged(true, kDelta500Ms, kDelta50Ms)); - Keyboard keyboard(&delegate, &seat); + + Seat seat; + Keyboard keyboard(std::move(delegate), &seat); } TEST_F(KeyboardTest, KeyRepeatSettingsLoadInitially) { - MockKeyboardDelegate delegate; - Seat seat; std::string email = "user0@tray"; - - EXPECT_CALL(delegate, OnKeyRepeatSettingsChanged).Times(0); - SetUserPref(email, ash::prefs::kXkbAutoRepeatEnabled, base::Value(true)); SetUserPref(email, ash::prefs::kXkbAutoRepeatDelay, base::Value(1000)); SetUserPref(email, ash::prefs::kXkbAutoRepeatInterval, base::Value(1000)); - EXPECT_CALL(delegate, + auto delegate = std::make_unique<MockKeyboardDelegate>(); + EXPECT_CALL(*delegate, OnKeyRepeatSettingsChanged).Times(0); + EXPECT_CALL(*delegate, OnKeyRepeatSettingsChanged(true, kDelta1000Ms, kDelta1000Ms)); - Keyboard keyboard(&delegate, &seat); + + Seat seat; + Keyboard keyboard(std::move(delegate), &seat); } TEST_F(KeyboardTest, KeyRepeatSettingsUpdateAtRuntime) { - MockKeyboardDelegate delegate; - + auto delegate = std::make_unique<MockKeyboardDelegate>(); { testing::InSequence s; // Initially load defaults. - EXPECT_CALL(delegate, OnKeyRepeatSettingsChanged) + EXPECT_CALL(*delegate, OnKeyRepeatSettingsChanged) .Times(testing::AtLeast(1)); // Respond to pref changes, in order - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate, OnKeyRepeatSettingsChanged(false, testing::_, testing::_)); - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate, OnKeyRepeatSettingsChanged(false, kDelta1000Ms, testing::_)); - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate, OnKeyRepeatSettingsChanged(false, kDelta1000Ms, kDelta1000Ms)); } - Seat seat; - Keyboard keyboard(&delegate, &seat); + Keyboard keyboard(std::move(delegate), &seat); std::string email = "user0@tray"; SetUserPref(email, ash::prefs::kXkbAutoRepeatEnabled, base::Value(false)); @@ -609,18 +656,16 @@ } TEST_F(KeyboardTest, KeyRepeatSettingsIgnoredForNonActiveUser) { - MockKeyboardDelegate delegate; - - // Key repeat settings should be sent exactly once, for the default values. - EXPECT_CALL(delegate, OnKeyRepeatSettingsChanged).Times(0); - EXPECT_CALL(delegate, - OnKeyRepeatSettingsChanged(true, kDelta500Ms, kDelta50Ms)); - // Simulate two users, with the first user as active. CreateUserSessions(2); + // Key repeat settings should be sent exactly once, for the default values. + auto delegate = std::make_unique<MockKeyboardDelegate>(); + EXPECT_CALL(*delegate, OnKeyRepeatSettingsChanged).Times(0); + EXPECT_CALL(*delegate, + OnKeyRepeatSettingsChanged(true, kDelta500Ms, kDelta50Ms)); Seat seat; - Keyboard keyboard(&delegate, &seat); + Keyboard keyboard(std::move(delegate), &seat); // Set prefs for non-active user; no calls should result. std::string email = "user1@tray"; @@ -630,10 +675,6 @@ } TEST_F(KeyboardTest, KeyRepeatSettingsUpdateOnProfileChange) { - MockKeyboardDelegate delegate; - - EXPECT_CALL(delegate, OnKeyRepeatSettingsChanged).Times(0); - // Simulate two users, with the first user as active. CreateUserSessions(2); @@ -643,41 +684,48 @@ SetUserPref(email, ash::prefs::kXkbAutoRepeatDelay, base::Value(1000)); SetUserPref(email, ash::prefs::kXkbAutoRepeatInterval, base::Value(1000)); + auto delegate = std::make_unique<MockKeyboardDelegate>(); + EXPECT_CALL(*delegate, OnKeyRepeatSettingsChanged).Times(0); { testing::InSequence s; // Initially, load default prefs for first user. - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate, OnKeyRepeatSettingsChanged(true, kDelta500Ms, kDelta50Ms)); // Switching user should load new prefs. - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate, OnKeyRepeatSettingsChanged(true, kDelta1000Ms, kDelta1000Ms)); } - Seat seat; - Keyboard keyboard(&delegate, &seat); + Keyboard keyboard(std::move(delegate), &seat); SimulateUserLogin(email, user_manager::UserType::USER_TYPE_REGULAR); } TEST_F(KeyboardTest, KeyboardObserver) { - NiceMockKeyboardDelegate delegate; - Seat seat; - auto keyboard = std::make_unique<Keyboard>(&delegate, &seat); + // Declare before the keyboard so the mock verification happens + // after the keyboard destruction. MockKeyboardObserver observer1; MockKeyboardObserver observer2; - keyboard->AddObserver(&observer1); - keyboard->AddObserver(&observer2); - EXPECT_TRUE(keyboard->HasObserver(&observer1)); - EXPECT_TRUE(keyboard->HasObserver(&observer2)); + Seat seat; + Keyboard keyboard(std::make_unique<NiceMockKeyboardDelegate>(), &seat); - keyboard->RemoveObserver(&observer1); - EXPECT_FALSE(keyboard->HasObserver(&observer1)); - EXPECT_TRUE(keyboard->HasObserver(&observer2)); + keyboard.AddObserver(&observer1); + keyboard.AddObserver(&observer2); + EXPECT_TRUE(keyboard.HasObserver(&observer1)); + EXPECT_TRUE(keyboard.HasObserver(&observer2)); + testing::Mock::VerifyAndClearExpectations(&observer1); + testing::Mock::VerifyAndClearExpectations(&observer2); - EXPECT_CALL(observer1, OnKeyboardDestroying(keyboard.get())).Times(0); - EXPECT_CALL(observer2, OnKeyboardDestroying(keyboard.get())); - keyboard.reset(); + keyboard.RemoveObserver(&observer1); + EXPECT_FALSE(keyboard.HasObserver(&observer1)); + EXPECT_TRUE(keyboard.HasObserver(&observer2)); + testing::Mock::VerifyAndClearExpectations(&observer1); + testing::Mock::VerifyAndClearExpectations(&observer2); + + // Called from the destructor of Keyboard. + EXPECT_CALL(observer1, OnKeyboardDestroying(&keyboard)).Times(0); + EXPECT_CALL(observer2, OnKeyboardDestroying(&keyboard)); } TEST_F(KeyboardTest, NeedKeyboardKeyAcks) { @@ -693,17 +741,14 @@ aura::client::GetFocusClient(ash::Shell::GetPrimaryRootWindow()); focus_client->FocusWindow(nullptr); - NiceMockKeyboardDelegate delegate; Seat seat; - auto keyboard = std::make_unique<Keyboard>(&delegate, &seat); + Keyboard keyboard(std::make_unique<NiceMockKeyboardDelegate>(), &seat); - EXPECT_FALSE(keyboard->AreKeyboardKeyAcksNeeded()); - keyboard->SetNeedKeyboardKeyAcks(true); - EXPECT_TRUE(keyboard->AreKeyboardKeyAcksNeeded()); - keyboard->SetNeedKeyboardKeyAcks(false); - EXPECT_FALSE(keyboard->AreKeyboardKeyAcksNeeded()); - - keyboard.reset(); + EXPECT_FALSE(keyboard.AreKeyboardKeyAcksNeeded()); + keyboard.SetNeedKeyboardKeyAcks(true); + EXPECT_TRUE(keyboard.AreKeyboardKeyAcksNeeded()); + keyboard.SetNeedKeyboardKeyAcks(false); + EXPECT_FALSE(keyboard.AreKeyboardKeyAcksNeeded()); } TEST_F(KeyboardTest, AckKeyboardKey) { @@ -719,23 +764,25 @@ aura::client::GetFocusClient(ash::Shell::GetPrimaryRootWindow()); focus_client->FocusWindow(nullptr); - NiceMockKeyboardDelegate delegate; + auto delegate = std::make_unique<NiceMockKeyboardDelegate>(); + auto* delegate_ptr = delegate.get(); Seat seat; - auto keyboard = std::make_unique<Keyboard>(&delegate, &seat); + Keyboard keyboard(std::move(delegate), &seat); - EXPECT_CALL(delegate, CanAcceptKeyboardEventsForSurface(surface.get())) + EXPECT_CALL(*delegate_ptr, CanAcceptKeyboardEventsForSurface(surface.get())) .WillOnce(testing::Return(true)); - EXPECT_CALL(delegate, OnKeyboardModifiers(0)); - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(0)); + EXPECT_CALL(*delegate_ptr, OnKeyboardEnter(surface.get(), base::flat_map<ui::DomCode, ui::DomCode>())); focus_client->FocusWindow(surface->window()); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // If we don't set NeedKeyboardAckKeys to true, accelerators are always passed // to ShellSurface. ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow()); // Press KEY_W with Ctrl. - EXPECT_CALL(delegate, OnKeyboardModifiers(4)); + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(4)); EXPECT_CALL(*shell_surface.get(), AcceleratorPressed(ui::Accelerator( ui::VKEY_W, ui::EF_CONTROL_DOWN, ui::Accelerator::KeyState::PRESSED))) @@ -746,39 +793,46 @@ // Release KEY_W. generator.ReleaseKey(ui::VKEY_W, ui::EF_CONTROL_DOWN); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); + testing::Mock::VerifyAndClearExpectations(shell_surface.get()); // If we set NeedKeyboardAckKeys to true, only unhandled accelerators are // passed to ShellSurface. - keyboard->SetNeedKeyboardKeyAcks(true); + keyboard.SetNeedKeyboardKeyAcks(true); // Press KEY_W with Ctrl. - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_W, true)) + EXPECT_CALL(*delegate_ptr, OnKeyboardKey(testing::_, ui::DomCode::US_W, true)) .WillOnce(testing::Return(1)); generator.PressKey(ui::VKEY_W, ui::EF_CONTROL_DOWN); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // Send ack for the key press. EXPECT_CALL(*shell_surface.get(), AcceleratorPressed(ui::Accelerator( ui::VKEY_W, ui::EF_CONTROL_DOWN, ui::Accelerator::KeyState::PRESSED))) .WillOnce(testing::Return(true)); - keyboard->AckKeyboardKey(1, false /* handled */); + keyboard.AckKeyboardKey(1, false /* handled */); + testing::Mock::VerifyAndClearExpectations(shell_surface.get()); // Release KEY_W. - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_W, false)) + EXPECT_CALL(*delegate_ptr, + OnKeyboardKey(testing::_, ui::DomCode::US_W, false)) .WillOnce(testing::Return(2)); generator.ReleaseKey(ui::VKEY_W, ui::EF_CONTROL_DOWN); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // Send ack for the key release. - keyboard->AckKeyboardKey(2, false /* handled */); + keyboard.AckKeyboardKey(2, false /* handled */); // Press KEY_W with Ctrl again. - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_W, true)) + EXPECT_CALL(*delegate_ptr, OnKeyboardKey(testing::_, ui::DomCode::US_W, true)) .WillOnce(testing::Return(3)); generator.PressKey(ui::VKEY_W, ui::EF_CONTROL_DOWN); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // Send ack for the key press. // AcceleratorPressed is not called when the accelerator is already handled. - keyboard->AckKeyboardKey(3, true /* handled */); + keyboard.AckKeyboardKey(3, true /* handled */); // A repeat key event should not be sent to the client and also should not // invoke the accelerator. @@ -787,6 +841,7 @@ ui::Accelerator::KeyState::PRESSED))) .Times(0); generator.PressKey(ui::VKEY_W, ui::EF_CONTROL_DOWN | ui::EF_IS_REPEAT); + testing::Mock::VerifyAndClearExpectations(shell_surface.get()); // Another key press event while holding the key is also ignored and should // not invoke the accelerator. @@ -795,13 +850,16 @@ ui::Accelerator::KeyState::PRESSED))) .Times(0); generator.PressKey(ui::VKEY_W, ui::EF_CONTROL_DOWN); + testing::Mock::VerifyAndClearExpectations(shell_surface.get()); // Release the key and reset modifier_flags. - EXPECT_CALL(delegate, OnKeyboardModifiers(0)); - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_W, false)); + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(0)); + EXPECT_CALL(*delegate_ptr, + OnKeyboardKey(testing::_, ui::DomCode::US_W, false)); generator.ReleaseKey(ui::VKEY_W, 0); - - keyboard.reset(); + // Verify before destroying keyboard to make sure the expected call + // is made on the methods above, rather than in the destructor. + testing::Mock::VerifyAndClearExpectations(delegate_ptr); } TEST_F(KeyboardTest, AckKeyboardKeyMoveFocus) { @@ -817,37 +875,39 @@ aura::client::GetFocusClient(ash::Shell::GetPrimaryRootWindow()); focus_client->FocusWindow(nullptr); - NiceMockKeyboardDelegate delegate; + auto delegate = std::make_unique<NiceMockKeyboardDelegate>(); + auto* delegate_ptr = delegate.get(); Seat seat; - auto keyboard = std::make_unique<Keyboard>(&delegate, &seat); + Keyboard keyboard(std::move(delegate), &seat); - EXPECT_CALL(delegate, CanAcceptKeyboardEventsForSurface(surface.get())) + EXPECT_CALL(*delegate_ptr, CanAcceptKeyboardEventsForSurface(surface.get())) .WillOnce(testing::Return(true)); - EXPECT_CALL(delegate, OnKeyboardModifiers(0)).Times(1); - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(0)).Times(1); + EXPECT_CALL(*delegate_ptr, OnKeyboardEnter(surface.get(), base::flat_map<ui::DomCode, ui::DomCode>())); focus_client->FocusWindow(surface->window()); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow()); - keyboard->SetNeedKeyboardKeyAcks(true); + keyboard.SetNeedKeyboardKeyAcks(true); // Press KEY_W with Ctrl. - EXPECT_CALL(delegate, OnKeyboardModifiers(4)).Times(1); - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_W, true)) + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(4)).Times(1); + EXPECT_CALL(*delegate_ptr, OnKeyboardKey(testing::_, ui::DomCode::US_W, true)) .WillOnce(testing::Return(1)); seat.set_physical_code_for_currently_processing_event_for_testing( ui::DomCode::US_W); generator.PressKey(ui::VKEY_W, ui::EF_CONTROL_DOWN); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // Move focus from the window - EXPECT_CALL(delegate, OnKeyboardLeave(surface.get())); + EXPECT_CALL(*delegate_ptr, OnKeyboardLeave(surface.get())); focus_client->FocusWindow(nullptr); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // Send ack for the key press. |AcceleratorPressed()| should not be called. - keyboard->AckKeyboardKey(1, false /* handled */); - - keyboard.reset(); + keyboard.AckKeyboardKey(1, false /* handled */); } TEST_F(KeyboardTest, AckKeyboardKeyExpired) { @@ -863,28 +923,31 @@ aura::client::GetFocusClient(ash::Shell::GetPrimaryRootWindow()); focus_client->FocusWindow(nullptr); - NiceMockKeyboardDelegate delegate; + auto delegate = std::make_unique<NiceMockKeyboardDelegate>(); + auto* delegate_ptr = delegate.get(); Seat seat; - auto keyboard = std::make_unique<Keyboard>(&delegate, &seat); + Keyboard keyboard(std::move(delegate), &seat); - EXPECT_CALL(delegate, CanAcceptKeyboardEventsForSurface(surface.get())) + EXPECT_CALL(*delegate_ptr, CanAcceptKeyboardEventsForSurface(surface.get())) .WillOnce(testing::Return(true)); - EXPECT_CALL(delegate, OnKeyboardModifiers(0)); - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(0)); + EXPECT_CALL(*delegate_ptr, OnKeyboardEnter(surface.get(), base::flat_map<ui::DomCode, ui::DomCode>())); focus_client->FocusWindow(surface->window()); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow()); - keyboard->SetNeedKeyboardKeyAcks(true); + keyboard.SetNeedKeyboardKeyAcks(true); // Press KEY_W with Ctrl. - EXPECT_CALL(delegate, OnKeyboardModifiers(4)); - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_W, true)) + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(4)); + EXPECT_CALL(*delegate_ptr, OnKeyboardKey(testing::_, ui::DomCode::US_W, true)) .WillOnce(testing::Return(1)); seat.set_physical_code_for_currently_processing_event_for_testing( ui::DomCode::US_W); generator.PressKey(ui::VKEY_W, ui::EF_CONTROL_DOWN); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); // Keyboard processes pending events as if it is handled when it expires, // so |AcceleratorPressed()| should not be called. @@ -906,14 +969,16 @@ // key should have been treated as handled already and removed from the // pending_key_acks_ map. Since the event is no longer in the map, // |AcceleratorPressed()| should not be called. - keyboard->AckKeyboardKey(1, false /* handled */); + keyboard.AckKeyboardKey(1, false /* handled */); // Release the key and reset modifier_flags. - EXPECT_CALL(delegate, OnKeyboardModifiers(0)); - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_W, false)); + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(0)); + EXPECT_CALL(*delegate_ptr, + OnKeyboardKey(testing::_, ui::DomCode::US_W, false)); generator.ReleaseKey(ui::VKEY_W, 0); - - keyboard.reset(); + // Verify before destroying keyboard to make sure the expected call + // is made on the methods above, rather than in the destructor. + testing::Mock::VerifyAndClearExpectations(delegate_ptr); } // Test for crbug.com/753539. If action for an accelerator moves the focus to @@ -948,34 +1013,37 @@ aura::client::GetFocusClient(ash::Shell::GetPrimaryRootWindow()); focus_client->FocusWindow(nullptr); - NiceMockKeyboardDelegate delegate; + auto delegate = std::make_unique<NiceMockKeyboardDelegate>(); + auto* delegate_ptr = delegate.get(); Seat seat; - auto keyboard = std::make_unique<Keyboard>(&delegate, &seat); + Keyboard keyboard(std::move(delegate), &seat); - EXPECT_CALL(delegate, CanAcceptKeyboardEventsForSurface(surface.get())) + EXPECT_CALL(*delegate_ptr, CanAcceptKeyboardEventsForSurface(surface.get())) .WillOnce(testing::Return(true)); - EXPECT_CALL(delegate, OnKeyboardModifiers(0)); - EXPECT_CALL(delegate, + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(0)); + EXPECT_CALL(*delegate_ptr, OnKeyboardEnter(surface.get(), base::flat_map<ui::DomCode, ui::DomCode>())); focus_client->FocusWindow(surface->window()); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow()); - keyboard->SetNeedKeyboardKeyAcks(true); + keyboard.SetNeedKeyboardKeyAcks(true); // Press KEY_W with Ctrl. - EXPECT_CALL(delegate, OnKeyboardModifiers(4)); - EXPECT_CALL(delegate, OnKeyboardKey(testing::_, ui::DomCode::US_W, true)) + EXPECT_CALL(*delegate_ptr, OnKeyboardModifiers(4)); + EXPECT_CALL(*delegate_ptr, OnKeyboardKey(testing::_, ui::DomCode::US_W, true)) .WillOnce(testing::Return(1)); seat.set_physical_code_for_currently_processing_event_for_testing( ui::DomCode::US_W); generator.PressKey(ui::VKEY_W, ui::EF_CONTROL_DOWN); + testing::Mock::VerifyAndClearExpectations(delegate_ptr); - EXPECT_CALL(delegate, OnKeyboardLeave(surface.get())); + EXPECT_CALL(*delegate_ptr, OnKeyboardLeave(surface.get())); // Send ack as unhandled. This will call |AcceleratorPressed| and move the // focus. - keyboard->AckKeyboardKey(1, false /* handled */); + keyboard.AckKeyboardKey(1, false /* handled */); // Wait until |ProcessExpiredPendingKeyAcks| is fired. base::RunLoop run_loop; @@ -985,7 +1053,9 @@ run_loop.Run(); base::RunLoop().RunUntilIdle(); - keyboard.reset(); + // Verify before destroying keyboard to make sure the expected call + // is made on the methods above, rather than in the destructor. + testing::Mock::VerifyAndClearExpectations(&delegate); } } // namespace } // namespace exo
diff --git a/components/exo/wayland/wayland_keyboard_delegate.cc b/components/exo/wayland/wayland_keyboard_delegate.cc index de2b4dc..9b916a2 100644 --- a/components/exo/wayland/wayland_keyboard_delegate.cc +++ b/components/exo/wayland/wayland_keyboard_delegate.cc
@@ -42,10 +42,6 @@ #endif } -void WaylandKeyboardDelegate::OnKeyboardDestroying(Keyboard* keyboard) { - delete this; -} - bool WaylandKeyboardDelegate::CanAcceptKeyboardEventsForSurface( Surface* surface) const { wl_resource* surface_resource = GetSurfaceResource(surface);
diff --git a/components/exo/wayland/wayland_keyboard_delegate.h b/components/exo/wayland/wayland_keyboard_delegate.h index e376467d..14e869d 100644 --- a/components/exo/wayland/wayland_keyboard_delegate.h +++ b/components/exo/wayland/wayland_keyboard_delegate.h
@@ -38,8 +38,7 @@ // Keyboard delegate class that accepts events for surfaces owned by the same // client as a keyboard resource. class WaylandKeyboardDelegate : public WaylandInputDelegate, - public KeyboardDelegate, - public KeyboardObserver + public KeyboardDelegate #if defined(OS_CHROMEOS) , public ash::ImeControllerImpl::Observer @@ -52,7 +51,6 @@ ~WaylandKeyboardDelegate() override; // Overridden from KeyboardDelegate: - void OnKeyboardDestroying(Keyboard* keyboard) override; bool CanAcceptKeyboardEventsForSurface(Surface* surface) const override; void OnKeyboardEnter( Surface* surface,
diff --git a/components/exo/wayland/wl_seat.cc b/components/exo/wayland/wl_seat.cc index a22eb87..1b50eaa 100644 --- a/components/exo/wayland/wl_seat.cc +++ b/components/exo/wayland/wl_seat.cc
@@ -86,27 +86,22 @@ } void seat_get_keyboard(wl_client* client, wl_resource* resource, uint32_t id) { -#if defined(OS_CHROMEOS) -#if BUILDFLAG(USE_XKBCOMMON) +#if defined(OS_CHROMEOS) && BUILDFLAG(USE_XKBCOMMON) auto* data = GetUserDataAs<WaylandSeat>(resource); uint32_t version = wl_resource_get_version(resource); wl_resource* keyboard_resource = wl_resource_create(client, &wl_keyboard_interface, version, id); - WaylandKeyboardDelegate* delegate = - new WaylandKeyboardDelegate(keyboard_resource, data->serial_tracker); - std::unique_ptr<Keyboard> keyboard = - std::make_unique<Keyboard>(delegate, data->seat); - keyboard->AddObserver(delegate); + auto keyboard = + std::make_unique<Keyboard>(std::make_unique<WaylandKeyboardDelegate>( + keyboard_resource, data->serial_tracker), + data->seat); SetImplementation(keyboard_resource, &keyboard_implementation, std::move(keyboard)); #else NOTIMPLEMENTED(); -#endif // BUILDFLAG(USE_XKBCOMMON) -#else - NOTIMPLEMENTED(); -#endif // defined(OS_CHROMEOS) +#endif // defined(OS_CHROMEOS) && BUILDFLAG(USE_XKBCOMMON) } void seat_get_touch(wl_client* client, wl_resource* resource, uint32_t id) {
diff --git a/components/feature_engagement/public/feature_constants.cc b/components/feature_engagement/public/feature_constants.cc index 203e63c..44cd081 100644 --- a/components/feature_engagement/public/feature_constants.cc +++ b/components/feature_engagement/public/feature_constants.cc
@@ -20,6 +20,8 @@ base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kIPHGlobalMediaControlsFeature{ "IPH_GlobalMediaControls", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kIPHLiveCaptionFeature{"IPH_LiveCaption", + base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kIPHPasswordsAccountStorageFeature{ "IPH_PasswordsAccountStorage", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kIPHReopenTabFeature{"IPH_ReopenTab",
diff --git a/components/feature_engagement/public/feature_constants.h b/components/feature_engagement/public/feature_constants.h index 2b89af9b..46d758c 100644 --- a/components/feature_engagement/public/feature_constants.h +++ b/components/feature_engagement/public/feature_constants.h
@@ -21,6 +21,7 @@ extern const base::Feature kIPHDesktopTabGroupsNewGroupFeature; extern const base::Feature kIPHFocusModeFeature; extern const base::Feature kIPHGlobalMediaControlsFeature; +extern const base::Feature kIPHLiveCaptionFeature; extern const base::Feature kIPHPasswordsAccountStorageFeature; extern const base::Feature kIPHReopenTabFeature; extern const base::Feature kIPHWebUITabStripFeature;
diff --git a/components/feature_engagement/public/feature_list.cc b/components/feature_engagement/public/feature_list.cc index 11b0dbc8..b15db0e5 100644 --- a/components/feature_engagement/public/feature_list.cc +++ b/components/feature_engagement/public/feature_list.cc
@@ -69,6 +69,7 @@ &kIPHDesktopTabGroupsNewGroupFeature, &kIPHFocusModeFeature, &kIPHGlobalMediaControlsFeature, + &kIPHLiveCaptionFeature, &kIPHPasswordsAccountStorageFeature, &kIPHReopenTabFeature, &kIPHWebUITabStripFeature,
diff --git a/components/feature_engagement/public/feature_list.h b/components/feature_engagement/public/feature_list.h index ce8e56e..7fc8535 100644 --- a/components/feature_engagement/public/feature_list.h +++ b/components/feature_engagement/public/feature_list.h
@@ -129,6 +129,7 @@ "IPH_DesktopTabGroupsNewGroup"); DEFINE_VARIATION_PARAM(kIPHFocusModeFeature, "IPH_FocusMode"); DEFINE_VARIATION_PARAM(kIPHGlobalMediaControls, "IPH_GlobalMediaControls"); +DEFINE_VARIATION_PARAM(kIPHLiveCaption, "IPH_LiveCaption"); DEFINE_VARIATION_PARAM(kIPHPasswordsAccountStorageFeature, "IPH_PasswordsAccountStorage"); DEFINE_VARIATION_PARAM(kIPHReopenTabFeature, "IPH_ReopenTab"); @@ -195,6 +196,7 @@ VARIATION_ENTRY(kIPHDesktopTabGroupsNewGroupFeature), VARIATION_ENTRY(kIPHFocusModeFeature), VARIATION_ENTRY(kIPHGlobalMediaControls), + VARIATION_ENTRY(kIPHLiveCaption), VARIATION_ENTRY(kIPHPasswordsAccountStorageFeature), VARIATION_ENTRY(kIPHReopenTabFeature), VARIATION_ENTRY(kIPHWebUITabStripFeature),
diff --git a/components/lookalikes/core/lookalike_url_util.cc b/components/lookalikes/core/lookalike_url_util.cc index 68d276a..65c3b27 100644 --- a/components/lookalikes/core/lookalike_url_util.cc +++ b/components/lookalikes/core/lookalike_url_util.cc
@@ -66,6 +66,10 @@ "ideal", "research", "france", "free", "mobile", "sky", "ask"}; +// What separators can be used to separate tokens in target embedding spoofs? +// e.g. www-google.com.example.com uses "-" (www-google) and "." (google.com). +const char kTargetEmbeddingSeparators[] = "-."; + bool SkeletonsMatch(const url_formatter::Skeletons& skeletons1, const url_formatter::Skeletons& skeletons2) { DCHECK(!skeletons1.empty()); @@ -182,7 +186,8 @@ // StringPieces. std::vector<base::StringPiece> SplitDomainWithouteTLDIntoTokens( const std::string& host_without_etld) { - return base::SplitStringPiece(host_without_etld, "-.", base::TRIM_WHITESPACE, + return base::SplitStringPiece(host_without_etld, kTargetEmbeddingSeparators, + base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); } @@ -595,11 +600,29 @@ // This check happens first so that we can exclude invalid eTLD+1s next. std::string embedded_target = GetMatchingTopDomainWithoutSeparators( hostname_tokens_without_etld[end - 1]); - if (!embedded_target.empty() && - !IsAllowedToBeEmbedded(etld_check_dominfo, etld_check_span, - in_target_allowlist)) { - *safe_hostname = embedded_target; - return TargetEmbeddingType::kInterstitial; + if (!embedded_target.empty()) { + // Extract the full possibly-spoofed domain. To get this, we take the + // hostname up until this point, strip off the no-separator bit (e.g. + // googlecom) and then re-add the the separated version (e.g. google.com). + auto spoofed_domain = + etld_check_host.substr( + 0, etld_check_host.length() - + hostname_tokens_without_etld[end - 1].length()) + + embedded_target; + const auto no_separator_tokens = base::SplitStringPiece( + spoofed_domain, kTargetEmbeddingSeparators, base::TRIM_WHITESPACE, + base::SPLIT_WANT_NONEMPTY); + auto no_separator_dominfo = GetDomainInfo(embedded_target); + + // Only flag on domains that are long enough, don't use common words, and + // aren't target-allowlisted. + if (no_separator_dominfo.domain_without_registry.length() > + kMinE2LDLengthForTargetEmbedding && + !IsAllowedToBeEmbedded(no_separator_dominfo, no_separator_tokens, + in_target_allowlist)) { + *safe_hostname = embedded_target; + return TargetEmbeddingType::kInterstitial; + } } // Exclude otherwise-invalid eTLDs.
diff --git a/components/lookalikes/core/lookalike_url_util_unittest.cc b/components/lookalikes/core/lookalike_url_util_unittest.cc index 1aed2ed..e57b0b9 100644 --- a/components/lookalikes/core/lookalike_url_util_unittest.cc +++ b/components/lookalikes/core/lookalike_url_util_unittest.cc
@@ -198,7 +198,7 @@ {"scholar.foo.google.com.foo.com", "google.com", TargetEmbeddingType::kInterstitial}, - // Targets should be longer than 6 characters. + // e2LDs should be longer than 3 characters. {"hp.com-foo.com", "", TargetEmbeddingType::kNone}, // Targets with common words as e2LD are not considered embedded targets @@ -210,8 +210,15 @@ {"foo.office.org-foo.com", "", TargetEmbeddingType::kNone}, // Targets could be embedded without their dots and dashes. + {"googlecom-foo.com", "google.com", TargetEmbeddingType::kInterstitial}, {"foo.googlecom-foo.com", "google.com", TargetEmbeddingType::kInterstitial}, + // But should not be detected if they're using a common word. weather.com + // is on the top domain list, but 'weather' is a common word. + {"weathercom-foo.com", "", TargetEmbeddingType::kNone}, + // And should also not be detected if they're too short. vk.com is on the + // top domain list, but is shorter than kMinE2LDLengthForTargetEmbedding. + {"vkcom-foo.com", "", TargetEmbeddingType::kNone}, // Ensure legitimate domains don't trigger. {"foo.google.com", "", TargetEmbeddingType::kNone},
diff --git a/components/metrics/BUILD.gn b/components/metrics/BUILD.gn index 5386280..b76e070 100644 --- a/components/metrics/BUILD.gn +++ b/components/metrics/BUILD.gn
@@ -161,7 +161,7 @@ sources += [ "drive_metrics_provider_ios.mm" ] } - if (is_linux) { + if (is_linux || is_chromeos) { sources += [ "drive_metrics_provider_linux.cc", "system_memory_stats_recorder_linux.cc",
diff --git a/components/metrics/generate_expired_histograms_array.gni b/components/metrics/generate_expired_histograms_array.gni index 68f183ed..a1f7435 100644 --- a/components/metrics/generate_expired_histograms_array.gni +++ b/components/metrics/generate_expired_histograms_array.gni
@@ -6,9 +6,6 @@ # produce an output file and a source_set to build it. # # Parameters: -# inputs: -# List of file name to read. Each file should be a .xml file with -# histogram descriptions. # # namespace (optional): # Namespace in which the generated code should be scoped. If left empty, @@ -30,7 +27,6 @@ script = "//tools/metrics/histograms/generate_expired_histograms_array.py" outputs = [ header_filename ] - inputs = invoker.inputs major_branch_date_filepath = invoker.major_branch_date_filepath milestone_filepath = invoker.milestone_filepath @@ -41,10 +37,10 @@ } args += [ - "-o" + rebase_path(root_gen_dir, root_build_dir), - "-H" + rebase_path(header_filename, root_gen_dir), - "-d" + rebase_path(major_branch_date_filepath, root_build_dir), - "-m" + rebase_path(milestone_filepath, root_build_dir), - ] + rebase_path(inputs, root_build_dir) + "-o" + rebase_path(root_gen_dir, root_build_dir), + "-H" + rebase_path(header_filename, root_gen_dir), + "-d" + rebase_path(major_branch_date_filepath, root_build_dir), + "-m" + rebase_path(milestone_filepath, root_build_dir), + ] } }
diff --git a/components/permissions/android/translations/permissions_android_strings_af.xtb b/components/permissions/android/translations/permissions_android_strings_af.xtb index 93324e8..b65086b 100644 --- a/components/permissions/android/translations/permissions_android_strings_af.xtb +++ b/components/permissions/android/translations/permissions_android_strings_af.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="af"> <translation id="2359808026110333948">Gaan voort</translation> <translation id="2416359993254398973">Chrome het toestemming nodig vir toegang tot jou kamera vir hierdie werf.</translation> -<translation id="4955546094786399712">Om die toestemming vir hierdie werf te verander, moet jy die ander program toemaak en weer probeer.\n\nAs jy nie die program kan toemaak nie, moet jy die program se toestemming "Wys oor ander programme" in Android-instellings afskakel.</translation> <translation id="557283862590186398">Chrome het toestemming nodig vir toegang tot jou mikrofoon vir hierdie werf.</translation> <translation id="5860491529813859533">Skakel aan</translation> <translation id="6092062101542170135">Skakel NFC in Android-instellings aan om voort te gaan</translation> <translation id="6393863479814692971">Chrome het toestemming nodig vir toegang tot jou kamera en mikrofoon vir hierdie werf.</translation> <translation id="6697947395630195233">Chrome het toegang tot jou ligging nodig om jou ligging met hierdie werf te deel.</translation> <translation id="7134415045456331657">Chrome moet toestemming hê om toegang te kry tot jou kamera om 'n 3D-kaart van jou omgewing te skep.</translation> -<translation id="7681341492080683492">'n Ander program wys tans oor <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_am.xtb b/components/permissions/android/translations/permissions_android_strings_am.xtb index 4ef3925..1971b33 100644 --- a/components/permissions/android/translations/permissions_android_strings_am.xtb +++ b/components/permissions/android/translations/permissions_android_strings_am.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="am"> <translation id="2359808026110333948">ቀጥል</translation> <translation id="2416359993254398973">Chrome ለዚህ ጣቢያ የእርስዎን ካሜራ ለመድረስ ፈቃድ ይፈልጋል።</translation> -<translation id="4955546094786399712">የዚህ ጣቢያ ፈቃዱን ለመለወጥ ሌላኛውን መተግበሪያ ይዝጉትና እንደገና ይሞክሩ።\n\nመተግበሪያውን መዝጋት ካልቻሉ በAndroid ቅንብሮች ውስጥ የመተግበሪያው የ«በሌላ መተግበሪያዎች ላይ አሳይ» ፈቃዱን ያጥፉ።</translation> <translation id="557283862590186398">Chrome ለዚህ ጣቢያ የእርስዎን ማይክራፎን ለመድረስ ፈቃድ ይፈልጋል።</translation> <translation id="5860491529813859533">አብራ</translation> <translation id="6092062101542170135">ለመቀጤል በAndroid ቅንብሮች ላይ NFCን ያብሩ</translation> <translation id="6393863479814692971">Chrome ለዚህ ጣቢያ የእርስዎን ካሜራ እና ማይክራፎን ለመድረስ ፈቃድ ይፈልጋል።</translation> <translation id="6697947395630195233">Chrome አካባቢዎን ለዚህ ጣቢያ ለማጋራት የአካባቢዎ መዳረሻ ይፈልጋል።</translation> <translation id="7134415045456331657">Chrome የዙሪያዎ 3ል ካርታ መፍጠር እንዲችል ካሜራዎን የመድረስ ፈቃድ ያስፈልገዋል</translation> -<translation id="7681341492080683492">ሌላ መተግበሪያ በ<ph name="APP_NAME" /> ላይ እያሳየ ነው</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_ar.xtb b/components/permissions/android/translations/permissions_android_strings_ar.xtb index 4a31e1cc..59a0c9e 100644 --- a/components/permissions/android/translations/permissions_android_strings_ar.xtb +++ b/components/permissions/android/translations/permissions_android_strings_ar.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="ar"> <translation id="2359808026110333948">متابعة</translation> <translation id="2416359993254398973">يحتاج Chrome إلى إذن لاستخدام الكاميرا للموقع الإلكتروني هذا.</translation> -<translation id="4955546094786399712">لتغيير الإذن لهذا الموقع الإلكتروني، يجب إغلاق التطبيق الآخر وإعادة المحاولة.\n\nإذا لم تتمكن من إغلاق التطبيق، أوقِف إذن التطبيق بشأن "العرض فوق التطبيقات الأخرى" في إعدادات Android.</translation> <translation id="557283862590186398">يحتاج Chrome إلى إذن لاستخدام الميكروفون للموقع الإلكتروني هذا.</translation> <translation id="5860491529813859533">تفعيل</translation> <translation id="6092062101542170135">للمواصلة، عليك تفعيل ميزة NFC في إعدادات Android.</translation> <translation id="6393863479814692971">يحتاج Chrome إلى إذن لاستخدام الكاميرا والميكروفون للموقع الإلكتروني هذا.</translation> <translation id="6697947395630195233">يحتاج Chrome إلى الوصول إلى موقعك الجغرافي لمشاركة موقعك الجغرافي مع الموقع الإلكتروني هذا.</translation> <translation id="7134415045456331657">يحتاج متصفِّح Chrome إلى إذن للوصول إلى الكاميرا من أجل إنشاء خريطة ثلاثية الأبعاد للبيئة المحيطة بك.</translation> -<translation id="7681341492080683492">يتم عرض تطبيق آخر فوق تطبيق <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_as.xtb b/components/permissions/android/translations/permissions_android_strings_as.xtb index 7283a797..70de77f 100644 --- a/components/permissions/android/translations/permissions_android_strings_as.xtb +++ b/components/permissions/android/translations/permissions_android_strings_as.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="as"> <translation id="2359808026110333948">অব্যাহত ৰাখক</translation> <translation id="2416359993254398973">এই ছাইটটোত আপোনাৰ কেমেৰাৰ এক্সেছ পাবলৈ Chromeক অনুমতিৰ আৱশ্যক।</translation> -<translation id="4955546094786399712">এই ছাইটটোৰ বাবে অনুমতিটো সলনি কৰিবলৈ অন্য এপ্টো বন্ধ কৰি পুনৰ চেষ্টা কৰক।\n\nযদি আপুনি এপ্টো বন্ধ কৰিব নোৱাৰে Androidৰ ছেটিংসমূহত এপ্টোৰ অনুমতিটো “অন্য এপ্সমূহৰ ওপৰত প্ৰদর্শন কৰক”লৈ সলনি কৰক।</translation> <translation id="557283862590186398">Chromeক এই ছাইটৰ বাবে আপোনাৰ মাইক্ৰ’ফ’ন ব্যৱহাৰ কৰিবলৈ অনুমতিৰ আৱশ্যক।</translation> <translation id="5860491529813859533">অন কৰক</translation> <translation id="6092062101542170135">অব্যাহত ৰাখিবলৈ Android ছেটিংসমূহত NFC অন কৰক</translation> <translation id="6393863479814692971">এই ছাইটটোত আপোনাৰ কেমেৰা আৰু মাইক্ৰ’ফ’ন এক্সেছ কৰিবলৈ Chromeক অনুমতিৰ আৱশ্যক।</translation> <translation id="6697947395630195233">এই ছাইটটোৰ সৈতে আপোনাৰ অৱস্থান শ্বেয়াৰ কৰিবলৈ Chromeএ আপোনাৰ অৱস্থান এক্সেছ কৰাটো দৰকাৰ।</translation> <translation id="7134415045456331657">আপোনাৰ চৌপাশৰ এখন 3D মেপ সৃষ্টি কৰিবলৈ Chromeক আপোনাৰ কেমেৰা এক্সেছ কৰাৰ অনুমতিৰ প্ৰয়োজন।</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" />ৰ ওপৰত অন্য এটা এপ্ প্ৰদৰ্শিত হৈ আছে</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_az.xtb b/components/permissions/android/translations/permissions_android_strings_az.xtb index 14754ce..38f12ddb 100644 --- a/components/permissions/android/translations/permissions_android_strings_az.xtb +++ b/components/permissions/android/translations/permissions_android_strings_az.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="az"> <translation id="2359808026110333948">Davam edin</translation> <translation id="2416359993254398973">Chrome bu sayt üçün kameraya giriş icazəsi tələb edir.</translation> -<translation id="4955546094786399712">Bu sayt üçün icazəni dəyişmək istəyirsinizsə, digər tətbiqi bağlayın və yenidən sınayın.\n\nTətbiqi bağlaya bilmirsinizsə, Android ayarlarında “Digər tətbiqlərin üzərində göstərilsin” üçün tətbiqin icazəsini deaktiv edin.</translation> <translation id="557283862590186398">Chrome bu sayt üçün mikrofona giriş icazəsi tələb edir.</translation> <translation id="5860491529813859533">Aktiv edin</translation> <translation id="6092062101542170135">Davam etmək üçün Android ayarlarında NFC'ni yandırın</translation> <translation id="6393863479814692971">Chrome bu sayt üçün kamera və mikrofona giriş icazəsi tələb edir.</translation> <translation id="6697947395630195233">Chrome məkanı bu saytla paylaşmaq üçün məkana giriş tələb edir.</translation> <translation id="7134415045456331657">Chrome ətrafınızın 3D xəritəsini yaratmaq üçün kameranıza giriş icazəsi tələb edir.</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" /> tətbiqinin üzərində başqa tətbiq görünür</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_be.xtb b/components/permissions/android/translations/permissions_android_strings_be.xtb index 9199f0b..212f827 100644 --- a/components/permissions/android/translations/permissions_android_strings_be.xtb +++ b/components/permissions/android/translations/permissions_android_strings_be.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="be"> <translation id="2359808026110333948">Працягнуць</translation> <translation id="2416359993254398973">Chrome запытвае дазвол на доступ да вашай камеры для гэтага сайта.</translation> -<translation id="4955546094786399712">Каб змяніць дазвол для гэтага сайта, закрыйце іншую праграму і паўтарыце спробу.\n\nКалі праграму закрыць не ўдаецца, выключыце дадзены для яе дазвол "Паказваць паверх іншых праграм" у наладах Android.</translation> <translation id="557283862590186398">Chrome запытвае дазвол на доступ да мікрафона для гэтага сайта.</translation> <translation id="5860491529813859533">Уключыць</translation> <translation id="6092062101542170135">Каб працягнуць, уключыце NFC у наладах Android</translation> <translation id="6393863479814692971">Chrome запытвае дазвол на доступ да вашай камеры і мікрафона для гэтага сайта.</translation> <translation id="6697947395630195233">Chrome патрабуе доступу да вашага месцазнаходжання, каб абагуліць яго з гэтым сайтам.</translation> <translation id="7134415045456331657">Chrome запытвае дазвол на доступ да камеры, каб стварыць 3D-карту асяроддзя.</translation> -<translation id="7681341492080683492">Паверх праграмы "<ph name="APP_NAME" />" паказваецца іншая праграма</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_bg.xtb b/components/permissions/android/translations/permissions_android_strings_bg.xtb index abb0936..9cc346d6 100644 --- a/components/permissions/android/translations/permissions_android_strings_bg.xtb +++ b/components/permissions/android/translations/permissions_android_strings_bg.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="bg"> <translation id="2359808026110333948">Напред</translation> <translation id="2416359993254398973">Chrome се нуждае от разрешение за достъп до камерата ви за този сайт.</translation> -<translation id="4955546094786399712">За да промените разрешението за този сайт, затворете другото приложение и опитайте отново.\n\nАко не можете да го затворите, изключете разрешението „Показване върху други приложения“ на приложението от настройките на Android.</translation> <translation id="557283862590186398">Chrome се нуждае от разрешение за достъп до микрофона ви за този сайт.</translation> <translation id="5860491529813859533">Включване</translation> <translation id="6092062101542170135">За да продължите, включете NFC в настройките на Android</translation> <translation id="6393863479814692971">Chrome се нуждае от разрешение за достъп до камерата и микрофона ви за този сайт.</translation> <translation id="6697947395630195233">Chrome се нуждае от достъп до данните за местоположението ви, за да ги сподели с този сайт.</translation> <translation id="7134415045456331657">Chrome се нуждае от разрешение за достъп до камерата ви, за да създаде триизмерна карта на заобикалящата ви среда.</translation> -<translation id="7681341492080683492">Друго приложение се показва върху <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_bn.xtb b/components/permissions/android/translations/permissions_android_strings_bn.xtb index 27e5aaf..ce42525f 100644 --- a/components/permissions/android/translations/permissions_android_strings_bn.xtb +++ b/components/permissions/android/translations/permissions_android_strings_bn.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="bn"> <translation id="2359808026110333948">চালিয়ে যান</translation> <translation id="2416359993254398973">এই সাইটটির জন্য Chrome কে আপনার ক্যামেরায় অ্যাক্সেস দিতে হবে।</translation> -<translation id="4955546094786399712">এই সাইটের ক্ষেত্রে প্রযোজ্য অনুমতি পরিবর্তন করতে, অন্য অ্যাপটি বন্ধ করে আবার চেষ্টা করুন।\n\nঅ্যাপটি বন্ধ করতে না পারলে, Android সেটিংস থেকে অ্যাপের "অন্য অ্যাপের উপরে কন্টেন্ট দেখানো" বিকল্পে গিয়ে অনুমতি তুলে নিন।</translation> <translation id="557283862590186398">এই সাইটটির জন্য Chrome কে আপনার মাইক্রোফোনে অ্যাক্সেস দিতে হবে।</translation> <translation id="5860491529813859533">চালু করুন</translation> <translation id="6092062101542170135">চালিয়ে যেতে Android সেটিংসে NFC চালু করুন</translation> <translation id="6393863479814692971">এই সাইটটির জন্য Chrome কে আপনার ক্যামেরা এবং মাইক্রোফোনে অ্যাক্সেস দিতে হবে।</translation> <translation id="6697947395630195233">এই সাইটটির সাথে আপনার লোকেশন শেয়ার করার জন্য Chrome কে আপনার লোকেশনের তথ্যে অ্যাক্সেস দিতে হবে।</translation> <translation id="7134415045456331657">আপনার আশেপাশের 3D ম্যাপ তৈরি করতে এই সাইটটির জন্য Chrome-কে আপনার ক্যামেরা অ্যাক্সেস করার অনুমতি দিতে হবে।</translation> -<translation id="7681341492080683492">অন্য একটি অ্যাপ <ph name="APP_NAME" />-এর উপরে কন্টেন্ট দেখাচ্ছে</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_bs.xtb b/components/permissions/android/translations/permissions_android_strings_bs.xtb index 07cd754..abe14c9c 100644 --- a/components/permissions/android/translations/permissions_android_strings_bs.xtb +++ b/components/permissions/android/translations/permissions_android_strings_bs.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="bs"> <translation id="2359808026110333948">Nastavi</translation> <translation id="2416359993254398973">Chrome treba odobrenje za pristup kameri za ovu web lokaciju.</translation> -<translation id="4955546094786399712">Da promijenite odobrenje za ovu web lokaciju, zatvorite drugu aplikaciju i pokušajte ponovo.\n\nAko ne možete zatvoriti aplikaciju, u postavkama Androida isključite odobrenje aplikacije za "Prikaz preko drugih aplikacija".</translation> <translation id="557283862590186398">Chrome treba dopuštenje za pristup mikrofonu za ovu web-lokaciju.</translation> <translation id="5860491529813859533">Uključi</translation> <translation id="6092062101542170135">Da nastavite, uključite NFC u postavkama Androida</translation> <translation id="6393863479814692971">Chromeu treba odobrenje za pristup vašoj kameri i mikrofonu na ovoj web lokaciji.</translation> <translation id="6697947395630195233">Chrome traži pristup vašoj lokaciji da bi je dijelio s ovom web lokacijom.</translation> <translation id="7134415045456331657">Chromeu je potrebno odobrenje da pristupi kameri radi kreiranja 3D mape vašeg okruženja.</translation> -<translation id="7681341492080683492">Druga aplikacija se prikazuje preko aplikacije <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_ca.xtb b/components/permissions/android/translations/permissions_android_strings_ca.xtb index d0d8269..b2a5fbcf 100644 --- a/components/permissions/android/translations/permissions_android_strings_ca.xtb +++ b/components/permissions/android/translations/permissions_android_strings_ca.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="ca"> <translation id="2359808026110333948">Continua</translation> <translation id="2416359993254398973">Per visitar aquest lloc web, Chrome necessita permís per accedir a la teva càmera.</translation> -<translation id="4955546094786399712">Per canviar el permís d'aquest lloc web, tanca l'altra aplicació i torna-ho a provar.\n\nSi no pots tancar l'aplicació, desactiva'n el permís "Mostra sobre altres aplicacions" a la configuració d'Android.</translation> <translation id="557283862590186398">Per visitar aquest lloc web, Chrome necessita permís per accedir al teu micròfon.</translation> <translation id="5860491529813859533">Activa</translation> <translation id="6092062101542170135">Per continuar, activa l'NFC a la configuració d'Android</translation> <translation id="6393863479814692971">Per visitar aquest lloc web, Chrome necessita permís per accedir a la teva càmera i al teu micròfon.</translation> <translation id="6697947395630195233">Chrome necessita accedir a la teva ubicació per compartir-la amb aquest lloc web.</translation> <translation id="7134415045456331657">Chrome necessita permís per accedir a la càmera i poder crear un mapa 3D del teu entorn.</translation> -<translation id="7681341492080683492">S'està mostrant una altra aplicació sobre <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_cs.xtb b/components/permissions/android/translations/permissions_android_strings_cs.xtb index 04962c51..28e1dce 100644 --- a/components/permissions/android/translations/permissions_android_strings_cs.xtb +++ b/components/permissions/android/translations/permissions_android_strings_cs.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="cs"> <translation id="2359808026110333948">Pokračovat</translation> <translation id="2416359993254398973">Chrome pro tento web potřebuje oprávnění k přístupu k fotoaparátu.</translation> -<translation id="4955546094786399712">Chcete-li změnit oprávnění pro tento web, zavřete druhou aplikaci a zkuste to znovu.\n\nPokud aplikaci zavřít nelze, v nastavení Androidu jí odeberte oprávnění Zobrazit přes ostatní aplikace.</translation> <translation id="557283862590186398">Chrome pro tento web potřebuje oprávnění k přístupu k mikrofonu.</translation> <translation id="5860491529813859533">Zapnout</translation> <translation id="6092062101542170135">Chcete-li pokračovat, zapněte NFC v nastavení zařízení Android</translation> <translation id="6393863479814692971">Chrome pro tento web potřebuje oprávnění k přístupu k fotoaparátu a mikrofonu.</translation> <translation id="6697947395630195233">Chrome potřebuje přístup k vaší poloze, aby ji mohl sdílet s tímto webem.</translation> <translation id="7134415045456331657">Chrome potřebuje oprávnění k přístupu k fotoaparátu, aby mohl vytvořit 3D mapu vašeho okolí.</translation> -<translation id="7681341492080683492">Přes aplikaci <ph name="APP_NAME" /> se zobrazuje jiná aplikace</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_da.xtb b/components/permissions/android/translations/permissions_android_strings_da.xtb index e93e1660..c752c52 100644 --- a/components/permissions/android/translations/permissions_android_strings_da.xtb +++ b/components/permissions/android/translations/permissions_android_strings_da.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="da"> <translation id="2359808026110333948">Fortsæt</translation> <translation id="2416359993254398973">Chrome skal have tilladelse til at bruge dit kamera på dette website.</translation> -<translation id="4955546094786399712">Hvis du vil ændre tilladelsen for dette website, skal du lukke den anden app og prøve igen.\n\nHvis du ikke kan lukke appen, skal du deaktivere appens "Vis over andre apps"-tilladelse i indstillingerne for Android.</translation> <translation id="557283862590186398">Chrome skal have tilladelse til at bruge din mikrofon på dette website.</translation> <translation id="5860491529813859533">Aktivér</translation> <translation id="6092062101542170135">Aktivér NFC i Android-indstillingerne for at fortsætte</translation> <translation id="6393863479814692971">Chrome skal have tilladelse til at bruge dit kamera og din mikrofon på dette website.</translation> <translation id="6697947395630195233">Chrome skal have adgang til din placering for at dele din placering med dette website.</translation> <translation id="7134415045456331657">Chrome skal have adgangstilladelse til dit kamera for at oprette et 3D-kort over dine omgivelser.</translation> -<translation id="7681341492080683492">Der vises en anden app over <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_de.xtb b/components/permissions/android/translations/permissions_android_strings_de.xtb index cdc07858..5988834 100644 --- a/components/permissions/android/translations/permissions_android_strings_de.xtb +++ b/components/permissions/android/translations/permissions_android_strings_de.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="de"> <translation id="2359808026110333948">Weiter</translation> <translation id="2416359993254398973">Chrome benötigt für diese Website die Berechtigung, auf Ihre Kamera zuzugreifen.</translation> -<translation id="4955546094786399712">Schließen Sie die andere App und versuchen Sie danach noch einmal, die Berechtigungen für diese Seite zu ändern.\n\nWenn Sie die App nicht schließen können, deaktivieren Sie in den Android-Einstellungen die Berechtigung der App "Über anderen Apps einblenden".</translation> <translation id="557283862590186398">Chrome benötigt für diese Website die Berechtigung, auf Ihr Mikrofon zuzugreifen.</translation> <translation id="5860491529813859533">Aktivieren</translation> <translation id="6092062101542170135">Aktivieren Sie zum Fortfahren NFC in den Android-Einstellungen</translation> <translation id="6393863479814692971">Chrome benötigt für diese Website die Berechtigung, auf Ihre Kamera und Ihr Mikrofon zuzugreifen.</translation> <translation id="6697947395630195233">Chrome benötigt Zugriff auf Ihren Standort, um ihn mit dieser Website zu teilen.</translation> <translation id="7134415045456331657">Chrome benötigt Zugriff auf die Kamera, um eine 3D-Karte Ihrer Umgebung zu erstellen.</translation> -<translation id="7681341492080683492">Eine andere App wird über <ph name="APP_NAME" /> eingeblendet</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_el.xtb b/components/permissions/android/translations/permissions_android_strings_el.xtb index 15fa858..8e75ad3 100644 --- a/components/permissions/android/translations/permissions_android_strings_el.xtb +++ b/components/permissions/android/translations/permissions_android_strings_el.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="el"> <translation id="2359808026110333948">Συνέχεια</translation> <translation id="2416359993254398973">Το Chrome χρειάζεται άδεια, για να αποκτήσει πρόσβαση στην κάμερα για αυτόν τον ιστότοπο.</translation> -<translation id="4955546094786399712">Για να αλλάξετε την άδεια για αυτόν τον ιστότοπο, κλείστε την άλλη εφαρμογή και δοκιμάστε ξανά.\n\nΕάν δεν μπορείτε να κλείσετε την εφαρμογή, απενεργοποιήστε την άδεια Προβολή πάνω από άλλες εφαρμογές της συγκεκριμένης εφαρμογής από τις ρυθμίσεις Android.</translation> <translation id="557283862590186398">Το Chrome χρειάζεται άδεια, για να αποκτήσει πρόσβαση στο μικρόφωνο για αυτόν τον ιστότοπο.</translation> <translation id="5860491529813859533">Ενεργοποίηση</translation> <translation id="6092062101542170135">Για να συνεχίσετε, ενεργοποιήστε το NFC στις ρυθμίσεις Android</translation> <translation id="6393863479814692971">Το Chrome χρειάζεται άδεια, για να αποκτήσει πρόσβαση στην κάμερα και το μικρόφωνο για αυτόν τον ιστότοπο.</translation> <translation id="6697947395630195233">Το Chrome χρειάζεται πρόσβαση στην τοποθεσία σας, για να την κοινοποιήσει σε αυτόν τον ιστότοπο.</translation> <translation id="7134415045456331657">Το Chrome χρειάζεται άδεια, για να αποκτήσει πρόσβαση στην κάμερά σας για να δημιουργήσει έναν τρισδιάστατο χάρτη του περιβάλλοντα χώρου σας.</translation> -<translation id="7681341492080683492">Κάποια άλλη εφαρμογή προβάλλεται πάνω από την εφαρμογή <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_en-GB.xtb b/components/permissions/android/translations/permissions_android_strings_en-GB.xtb index a61461d..91a7b65 100644 --- a/components/permissions/android/translations/permissions_android_strings_en-GB.xtb +++ b/components/permissions/android/translations/permissions_android_strings_en-GB.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="en-GB"> <translation id="2359808026110333948">Continue</translation> <translation id="2416359993254398973">Chrome needs permission to access your camera for this site.</translation> -<translation id="4955546094786399712">To change the permission for this site, close the other app and try again.\n\nIf you can’t close the app, turn off the app’s permission to 'Display over other apps' in Android settings.</translation> <translation id="557283862590186398">Chrome needs permission to access your microphone for this site.</translation> <translation id="5860491529813859533">Turn on</translation> <translation id="6092062101542170135">To continue, turn on NFC in Android settings</translation> <translation id="6393863479814692971">Chrome needs permission to access your camera and microphone for this site.</translation> <translation id="6697947395630195233">Chrome needs access to your location to share your location with this site.</translation> <translation id="7134415045456331657">Chrome needs permission to access your camera to create a 3D map of your surroundings.</translation> -<translation id="7681341492080683492">Another app is displaying over <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_es-419.xtb b/components/permissions/android/translations/permissions_android_strings_es-419.xtb index 1f1d924..125e8a3 100644 --- a/components/permissions/android/translations/permissions_android_strings_es-419.xtb +++ b/components/permissions/android/translations/permissions_android_strings_es-419.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="es-419"> <translation id="2359808026110333948">Continuar</translation> <translation id="2416359993254398973">Chrome necesita permiso para acceder a tu cámara para este sitio.</translation> -<translation id="4955546094786399712">Si quieres cambiar el permiso para este sitio, cierra la otra app y vuelve a intentarlo.\n\nSi no puedes cerrarla, desactiva su permiso para "Mostrar sobre otras apps" en la configuración de Android.</translation> <translation id="557283862590186398">Chrome necesita permiso para acceder a tu micrófono para este sitio.</translation> <translation id="5860491529813859533">Activar</translation> <translation id="6092062101542170135">Para continuar, activa NFC en la configuración de Android</translation> <translation id="6393863479814692971">Chrome necesita permiso para acceder a tu cámara y micrófono para este sitio.</translation> <translation id="6697947395630195233">Chrome necesita acceso a tu ubicación para compartirla con este sitio.</translation> <translation id="7134415045456331657">Chrome necesita permiso para acceder a la cámara a fin de crear un mapa 3D de tu entorno.</translation> -<translation id="7681341492080683492">Se está mostrando otra app sobre <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_es.xtb b/components/permissions/android/translations/permissions_android_strings_es.xtb index 47cfe08..e14d0a7b 100644 --- a/components/permissions/android/translations/permissions_android_strings_es.xtb +++ b/components/permissions/android/translations/permissions_android_strings_es.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="es"> <translation id="2359808026110333948">Continuar</translation> <translation id="2416359993254398973">Chrome necesita permiso para acceder a la cámara en este sitio web.</translation> -<translation id="4955546094786399712">Para cambiar el permiso de este sitio web, cierra la otra aplicación y vuelve a intentarlo.\n\nSi no puedes cerrarla, desactiva el permiso "Mostrar sobre otras aplicaciones" de la aplicación en los ajustes de Android.</translation> <translation id="557283862590186398">Chrome necesita permiso para acceder al micrófono en este sitio web.</translation> <translation id="5860491529813859533">Activar</translation> <translation id="6092062101542170135">Para continuar, activa el NFC en los ajustes de Android.</translation> <translation id="6393863479814692971">Chrome necesita permiso para acceder a la cámara y al micrófono en este sitio web.</translation> <translation id="6697947395630195233">Chrome necesita acceder a tu ubicación para compartirla con este sitio web.</translation> <translation id="7134415045456331657">Para crear un mapa 3D de tu entorno, Chrome necesita permiso para acceder a tu cámara.</translation> -<translation id="7681341492080683492">Otra aplicación se muestra sobre <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_et.xtb b/components/permissions/android/translations/permissions_android_strings_et.xtb index c71fbcb1..ddc255d 100644 --- a/components/permissions/android/translations/permissions_android_strings_et.xtb +++ b/components/permissions/android/translations/permissions_android_strings_et.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="et"> <translation id="2359808026110333948">Jätka</translation> <translation id="2416359993254398973">Chrome vajab selle saidi puhul luba, et teie kaamerale juurde pääseda.</translation> -<translation id="4955546094786399712">Selle saidi loa muutmiseks sulgege teine rakendus ja proovige uuesti.\n\nKui te ei saa rakendust sulgeda, lülitage Androidi seadetes välja rakenduse luba „Kuva teiste rakenduste peal”.</translation> <translation id="557283862590186398">Chrome vajab selle saidi puhul luba, et teie mikrofonile juurde pääseda.</translation> <translation id="5860491529813859533">Lülita sisse</translation> <translation id="6092062101542170135">Jätkamiseks lülitage NFC Androidi seadetes sisse</translation> <translation id="6393863479814692971">Chrome vajab selle saidi puhul luba, et teie kaamerale ja mikrofonile juurde pääseda.</translation> <translation id="6697947395630195233">Chrome vajab juurdepääsu teie asukohale, et seda selle saidiga jagada.</translation> <translation id="7134415045456331657">Chrome vajab luba teie kaamerale juurdepääsemiseks, et luua teid ümbritsevast 3D-kaart.</translation> -<translation id="7681341492080683492">Rakenduse <ph name="APP_NAME" /> peal on kuvatud teine rakendus</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_eu.xtb b/components/permissions/android/translations/permissions_android_strings_eu.xtb index 7a673678..a1ac34a6 100644 --- a/components/permissions/android/translations/permissions_android_strings_eu.xtb +++ b/components/permissions/android/translations/permissions_android_strings_eu.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="eu"> <translation id="2359808026110333948">Jarraitu</translation> <translation id="2416359993254398973">Chrome-k zure baimena behar du webgune honen izenean kamera atzitzeko.</translation> -<translation id="4955546094786399712">Webgune honen baimenak aldatzeko, itxi beste aplikazioa eta saiatu berriro.\n\nEzin baduzu itxi aplikazioa, desaktibatu aplikazio horri eman zaion "Bistaratu beste aplikazioen gainean" baimena Android-en ezarpenetan.</translation> <translation id="557283862590186398">Chrome-k zure baimena behar du webgune honen izenean mikrofonoa atzitzeko.</translation> <translation id="5860491529813859533">Aktibatu</translation> <translation id="6092062101542170135">Aurrera egiteko, joan Android-en ezarpenetara eta aktibatu NFC</translation> <translation id="6393863479814692971">Chrome-k zure baimena behar du webgune honen izenean kamera eta mikrofonoa atzitzeko.</translation> <translation id="6697947395630195233">Chrome-k baimena behar du kokapena webgune honekin partekatzeko.</translation> <translation id="7134415045456331657">Chrome-k kamera atzitzeko baimena behar du, ingurunearen hiru dimentsioko mapa bat sortzeko.</translation> -<translation id="7681341492080683492">Beste aplikazio bat <ph name="APP_NAME" /> estaltzen ari da</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_fa.xtb b/components/permissions/android/translations/permissions_android_strings_fa.xtb index c995348..5aeac30 100644 --- a/components/permissions/android/translations/permissions_android_strings_fa.xtb +++ b/components/permissions/android/translations/permissions_android_strings_fa.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="fa"> <translation id="2359808026110333948">ادامه</translation> <translation id="2416359993254398973">Chrome به مجوز دسترسی به دوربین برای این سایت نیاز دارد.</translation> -<translation id="4955546094786399712">برای تغییر اجازه این سایت، برنامه دیگر را ببندید و دوباره امتحان کنید.\n\nاگر نمیتوانید برنامه را ببندید، اجازه برنامه برای «نمایش روی سایر برنامهها» را در تنظیمات Android خاموش کنید.</translation> <translation id="557283862590186398">Chrome برای این سایت به مجوز دسترسی به میکروفون نیاز دارد.</translation> <translation id="5860491529813859533">روشن کردن</translation> <translation id="6092062101542170135">برای ادامه دادن، NFC را در تنظیمات Android روشن کنید</translation> <translation id="6393863479814692971">Chrome برای این سایت به مجوز دسترسی به دوربین و میکروفون نیاز دارد.</translation> <translation id="6697947395630195233">Chrome برای اشتراکگذاری مکانتان با این سایت باید به مکانتان دسترسی داشته باشد.</translation> <translation id="7134415045456331657">Chrome برای ایجاد نقشه سهبعدی محیط شما باید اجازه دسترسی به دوربین داشته باشد.</translation> -<translation id="7681341492080683492">برنامه دیگری درحال نمایش روی <ph name="APP_NAME" /> است</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_fi.xtb b/components/permissions/android/translations/permissions_android_strings_fi.xtb index b1917e4..44bf1a74 100644 --- a/components/permissions/android/translations/permissions_android_strings_fi.xtb +++ b/components/permissions/android/translations/permissions_android_strings_fi.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="fi"> <translation id="2359808026110333948">Jatka</translation> <translation id="2416359993254398973">Chrome tarvitsee oikeuden käyttää kameraasi tällä sivustolla.</translation> -<translation id="4955546094786399712">Jos haluat muuttaa tämän sivuston käyttölupia, sulje toinen sovellus ja yritä uudelleen.\n\nJos et voi sulkea sovellusta, mene Androidin asetuksiin ja poista sovelluksen lupa näkyä muiden päällä.</translation> <translation id="557283862590186398">Chrome tarvitsee oikeuden käyttää mikrofoniasi tällä sivustolla.</translation> <translation id="5860491529813859533">Ota käyttöön</translation> <translation id="6092062101542170135">Laita NFC päälle Android-laitteella jatkaaksesi</translation> <translation id="6393863479814692971">Chrome tarvitsee oikeuden käyttää kameraasi ja mikrofoniasi tällä sivustolla.</translation> <translation id="6697947395630195233">Chrome tarvitsee oikeuden käyttää sijaintiasi, jotta se voidaan jakaa tämän sivuston kanssa.</translation> <translation id="7134415045456331657">Chrome tarvitsee luvan käyttää kameraasi ympäristön 3D-kartoittamiseen.</translation> -<translation id="7681341492080683492">Toinen sovellus näkyy tämän päällä: <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_fil.xtb b/components/permissions/android/translations/permissions_android_strings_fil.xtb index e129cb1..0b086e98 100644 --- a/components/permissions/android/translations/permissions_android_strings_fil.xtb +++ b/components/permissions/android/translations/permissions_android_strings_fil.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="fil"> <translation id="2359808026110333948">Magpatuloy</translation> <translation id="2416359993254398973">Kailangan ng Chrome ng pahintulot na i-access ang iyong camera para sa site na ito.</translation> -<translation id="4955546094786399712">Para baguhin ang pahintulot para sa site na ito, isara ang iba pang app at subukan ulit.\n\nKung hindi mo maisara ang app, i-off ang pahintulot ng app na “Ipakita sa ibabaw ng iba pang app” sa mga setting ng Android.</translation> <translation id="557283862590186398">Kailangan ng Chrome ng pahintulot na i-access ang iyong mikropono para sa site na ito.</translation> <translation id="5860491529813859533">I-on</translation> <translation id="6092062101542170135">Para magpatuloy, i-on ang NFC sa mga setting ng Android</translation> <translation id="6393863479814692971">Kailangan ng Chrome ng pahintulot na i-access ang iyong camera at mikropono para sa site na ito.</translation> <translation id="6697947395630195233">Kailangan ng Chrome ng access sa iyong lokasyon upang ibahagi ang lokasyon mo sa site na ito.</translation> <translation id="7134415045456331657">Kailangan ng Chrome ng access sa iyong camera para gumawa ng 3D na mapa ng kapaligiran mo.</translation> -<translation id="7681341492080683492">May ibang app na ipinapakita sa ibabaw ng <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_fr-CA.xtb b/components/permissions/android/translations/permissions_android_strings_fr-CA.xtb index 767a98b..3288389 100644 --- a/components/permissions/android/translations/permissions_android_strings_fr-CA.xtb +++ b/components/permissions/android/translations/permissions_android_strings_fr-CA.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="fr-CA"> <translation id="2359808026110333948">Continuer</translation> <translation id="2416359993254398973">Google Chrome a besoin de votre autorisation pour accéder à votre caméra pour ce site.</translation> -<translation id="4955546094786399712">Pour modifier l'autorisation de ce site, fermez l'autre application et réessayez.\n\nSi vous ne pouvez pas fermer l'application, désactivez l'autorisation « Afficher par-dessus les autres applications » dans les paramètres d'Android.</translation> <translation id="557283862590186398">Google Chrome a besoin de votre autorisation pour accéder à votre micro pour ce site.</translation> <translation id="5860491529813859533">Activer</translation> <translation id="6092062101542170135">Pour continuer, activez la NFC dans les paramètres d'Android</translation> <translation id="6393863479814692971">Google Chrome a besoin de votre autorisation pour accéder à votre caméra et à votre micro pour ce site.</translation> <translation id="6697947395630195233">Chrome a besoin d'accéder à votre position afin de la partager avec ce site.</translation> <translation id="7134415045456331657">Chrome a besoin de votre autorisation pour accéder à votre appareil photo afin de créer une carte 3D de votre environnement.</translation> -<translation id="7681341492080683492">Une autre application s'affiche par-dessus <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_fr.xtb b/components/permissions/android/translations/permissions_android_strings_fr.xtb index fb565edeb..7aabc58 100644 --- a/components/permissions/android/translations/permissions_android_strings_fr.xtb +++ b/components/permissions/android/translations/permissions_android_strings_fr.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="fr"> <translation id="2359808026110333948">Continuer</translation> <translation id="2416359993254398973">Chrome a besoin de votre autorisation pour accéder à votre appareil photo pour ce site.</translation> -<translation id="4955546094786399712">Afin de modifier l'autorisation pour ce site, fermez l'autre application, puis réessayez.\n\nSi vous ne pouvez pas fermer l'application, désactivez l'autorisation "Superposition sur d'autres applis" pour celle-ci dans les paramètres Android.</translation> <translation id="557283862590186398">Chrome a besoin de votre autorisation pour accéder à votre micro pour ce site.</translation> <translation id="5860491529813859533">Activer</translation> <translation id="6092062101542170135">Pour continuer, activez la fonctionnalité NFC dans les paramètres Android</translation> <translation id="6393863479814692971">Chrome a besoin de votre autorisation pour accéder à votre appareil photo et à votre micro pour ce site.</translation> <translation id="6697947395630195233">Chrome a besoin d'accéder à votre position pour la partager avec ce site.</translation> <translation id="7134415045456331657">Chrome a besoin de votre autorisation pour accéder à votre appareil photo afin de créer un plan 3D de votre environnement.</translation> -<translation id="7681341492080683492">Une autre application se superpose à <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_gl.xtb b/components/permissions/android/translations/permissions_android_strings_gl.xtb index d9b599a..aa113dd 100644 --- a/components/permissions/android/translations/permissions_android_strings_gl.xtb +++ b/components/permissions/android/translations/permissions_android_strings_gl.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="gl"> <translation id="2359808026110333948">Continuar</translation> <translation id="2416359993254398973">Chrome precisa permiso para que este sitio poida acceder á túa cámara.</translation> -<translation id="4955546094786399712">Se queres cambiar o permiso para este sitio, pecha a outra aplicación e téntao de novo.\n\nSe non podes pechala, na configuración de Android, desactiva o permiso da aplicación Superpor a outras aplicacións.</translation> <translation id="557283862590186398">Chrome precisa permiso para que este sitio poida acceder ao teu micrófono.</translation> <translation id="5860491529813859533">Activar</translation> <translation id="6092062101542170135">Para continuar, activa a NFC na configuración de Android</translation> <translation id="6393863479814692971">Chrome precisa permiso para que este sitio poida acceder á túa cámara e ao teu micrófono.</translation> <translation id="6697947395630195233">Chrome precisa acceder á túa localización para compartila con este sitio.</translation> <translation id="7134415045456331657">Chrome necesita permiso para acceder á cámara co fin de crear un mapa 3D do que te rodea.</translation> -<translation id="7681341492080683492">Outra aplicación superponse a <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_gu.xtb b/components/permissions/android/translations/permissions_android_strings_gu.xtb index f1780628..ea7413e 100644 --- a/components/permissions/android/translations/permissions_android_strings_gu.xtb +++ b/components/permissions/android/translations/permissions_android_strings_gu.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="gu"> <translation id="2359808026110333948">આગળ વધો</translation> <translation id="2416359993254398973">Chromeને આ સાઇટ માટે તમારા કૅમેરાના ઍક્સેસની પરવાનગીની જરૂર પડે છે.</translation> -<translation id="4955546094786399712">આ સાઇટની પરવાનગી બદલવા માટે, અન્ય ઍપ બંધ કરીને ફરી પ્રયાસ કરો.\n\nજો તમે ઍપ બંધ ન કરી શકો, તો Android સેટિંગમાં જઈને ઍપની “અન્ય ઍપની ઉપર બતાવો” માટેની પરવાનગી બંધ કરો.</translation> <translation id="557283862590186398">Chromeને આ સાઇટ માટે તમારા માઇક્રોફોનના ઍક્સેસની પરવાનગીની જરૂર પડે છે.</translation> <translation id="5860491529813859533">ચાલુ કરો</translation> <translation id="6092062101542170135">ચાલુ રાખવા માટે, Android સેટિંગમાં NFC ચાલુ કરો</translation> <translation id="6393863479814692971">Chromeને આ સાઇટ માટે તમારા કૅમેરા અને માઇક્રોફોનના ઍક્સેસની પરવાનગીની જરૂર પડે છે.</translation> <translation id="6697947395630195233">Chromeને આ સાઇટ સાથે તમારું સ્થાન શેર કરવા માટે તમારા સ્થાનના ઍક્સેસની જરૂર પડે છે.</translation> <translation id="7134415045456331657">તમારા આસપાસનો 3D નકશો બનાવવા માટે, Chromeને તમારા કૅમેરાના ઍક્સેસની પરવાનગી જરૂરી છે.</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" />ની ઉપર અન્ય ઍપ બતાવવામાં આવી રહી છે</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_hi.xtb b/components/permissions/android/translations/permissions_android_strings_hi.xtb index e51da713..7d862a06 100644 --- a/components/permissions/android/translations/permissions_android_strings_hi.xtb +++ b/components/permissions/android/translations/permissions_android_strings_hi.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="hi"> <translation id="2359808026110333948">जारी रखें</translation> <translation id="2416359993254398973">Chrome को इस साइट के लिए आपका कैमरा एक्सेस करने की अनुमति चाहिए.</translation> -<translation id="4955546094786399712">इस साइट को दी गई अनुमति बदलने के लिए, दूसरा ऐप्लिकेशन बंद करें और फिर से कोशिश करें.\n\nअगर आप ऐप्लिकेशन को बंद नहीं कर पा रहे हैं, तो Android की सेटिंग में जाकर, ऐप्लिकेशन को "दूसरे ऐप्लिकेशन पर दिखाने" की अनुमति को बंद कर दें.</translation> <translation id="557283862590186398">Chrome को इस साइट के लिए आपका माइक्रोफ़ोन एक्सेस करने की अनुमति चाहिए.</translation> <translation id="5860491529813859533">चालू करें</translation> <translation id="6092062101542170135">जारी रखने के लिए, Android सेटिंग में जाकर NFC को चालू करें</translation> <translation id="6393863479814692971">Chrome को इस साइट के लिए आपका कैमरा और माइक्रोफ़ोन के एक्सेस करने की अनुमति चाहिए.</translation> <translation id="6697947395630195233">इस साइट से आपकी जगह की जानकारी शेयर करने के लिए Chrome को आपकी जगह की जानकारी का एक्सेस चाहिए</translation> <translation id="7134415045456331657">Chrome को आपके आस-पास की जगह का 3D मैप बनाने के लिए, कैमरा ऐक्सेस करने की अनुमति चाहिए.</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" /> पर दूसरा ऐप्लिकेशन दिखा रहा है</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_hr.xtb b/components/permissions/android/translations/permissions_android_strings_hr.xtb index 127e46b..6284c79 100644 --- a/components/permissions/android/translations/permissions_android_strings_hr.xtb +++ b/components/permissions/android/translations/permissions_android_strings_hr.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="hr"> <translation id="2359808026110333948">Nastavi</translation> <translation id="2416359993254398973">Chrome treba dopuštenje za pristup fotoaparatu za ovu web-lokaciju.</translation> -<translation id="4955546094786399712">Da biste promijenili dopuštenje za ovu web-lokaciju, zatvorite drugu aplikaciju i pokušajte ponovo.\n\nAko ne možete zatvoriti tu aplikaciju, isključite njezino dopuštenje "Prikaz iznad drugih aplikacija" u postavkama Androida.</translation> <translation id="557283862590186398">Chrome treba dopuštenje za pristup mikrofonu za ovu web-lokaciju.</translation> <translation id="5860491529813859533">Uključi</translation> <translation id="6092062101542170135">Da biste nastavili, uključite NFC u postavkama Androida</translation> <translation id="6393863479814692971">Chrome treba dopuštenje za pristup fotoaparatu i mikrofonu za ovu web-lokaciju.</translation> <translation id="6697947395630195233">Chrome treba dopuštenje za pristup vašoj lokaciji da bi je podijelio s ovom web-lokacijom.</translation> <translation id="7134415045456331657">Chrome treba dopuštenje za pristup kameri radi izrade 3D karte vašeg okruženja.</translation> -<translation id="7681341492080683492">Neka druga aplikacija prikazuje se iznad aplikacije <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_hu.xtb b/components/permissions/android/translations/permissions_android_strings_hu.xtb index f28440d..8a60281a 100644 --- a/components/permissions/android/translations/permissions_android_strings_hu.xtb +++ b/components/permissions/android/translations/permissions_android_strings_hu.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="hu"> <translation id="2359808026110333948">Tovább</translation> <translation id="2416359993254398973">A Chrome számára engedély szükséges, hogy hozzáférjen a kamerához ennél a webhelynél.</translation> -<translation id="4955546094786399712">A webhelyre vonatkozó engedélyek módosításához zárja be a másik alkalmazást, majd próbálja újra.\n\nHa nem tudja bezárni az alkalmazást, kapcsolja ki a „Megjelenítés a többi alkalmazás fölött” alkalmazásengedélyt az Android beállításaiban.</translation> <translation id="557283862590186398">A Chrome számára engedély szükséges, hogy hozzáférjen a mikrofonhoz ennél a webhelynél.</translation> <translation id="5860491529813859533">Bekapcsolás</translation> <translation id="6092062101542170135">A folytatáshoz kapcsolja be az NFC-t az Android beállításai között</translation> <translation id="6393863479814692971">A Chrome számára engedély szükséges, hogy hozzáférjen a kamerához és a mikrofonhoz ennél a webhelynél.</translation> <translation id="6697947395630195233">A Chrome-nak hozzáférésre van szüksége a helyadatokra ahhoz, hogy megoszthassa a webhellyel az Ön tartózkodási helyét.</translation> <translation id="7134415045456331657">A Chrome-nak engedélyre van szüksége a kamerájához való hozzáféréshez annak érdekében, hogy 3D-s térképet készíthessen az Ön környezetéről.</translation> -<translation id="7681341492080683492">A(z) <ph name="APP_NAME" /> fölött másik alkalmazás jelenik meg</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_hy.xtb b/components/permissions/android/translations/permissions_android_strings_hy.xtb index a7c7d2f..65b1aebf 100644 --- a/components/permissions/android/translations/permissions_android_strings_hy.xtb +++ b/components/permissions/android/translations/permissions_android_strings_hy.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="hy"> <translation id="2359808026110333948">Շարունակել</translation> <translation id="2416359993254398973">Chrome-ին այս կայքի համար անհրաժեշտ է ձեր տեսախցիկն օգտագործելու թույլտվություն։</translation> -<translation id="4955546094786399712">Այս կայքի թույլտվությունը փոխելու համար փակեք մյուս հավելվածը և նորից փորձեք։\n\nԵթե չեք կարողանում փակել հավելվածը, ապա Android-ի կարգավորումներում անջատեք հավելվածի՝ այլ հավելվածների վրայից ցուցադրվելու թույլտվությունը։</translation> <translation id="557283862590186398">Chrome-ին այս կայքի համար անհրաժեշտ է ձեր խոսափողն օգտագործելու թույլտվություն։</translation> <translation id="5860491529813859533">Միացնել</translation> <translation id="6092062101542170135">Շարունակելու համար միացրեք NFC-ն Android-ի կարգավորումներում</translation> <translation id="6393863479814692971">Chrome-ին այս կայքի համար անհրաժեշտ է ձեր տեսախցիկն ու խոսափողը օգտագործելու թույլտվություն։</translation> <translation id="6697947395630195233">Chrome-ին այս կայքի համար անհրաժեշտ է ձեզ տեղորոշելու թույլտվություն։</translation> <translation id="7134415045456331657">Chrome-ին անհրաժեշտ է տեսախցիկն օգտագործելու թույլտվություն՝ ձեր շրջակայքի եռաչափ քարտեզը ստեղծելու համար։</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" />-ի վրայից մեկ այլ հավելված է ցուցադրվում</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_id.xtb b/components/permissions/android/translations/permissions_android_strings_id.xtb index f8be8baf4..d4cf38a 100644 --- a/components/permissions/android/translations/permissions_android_strings_id.xtb +++ b/components/permissions/android/translations/permissions_android_strings_id.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="id"> <translation id="2359808026110333948">Lanjutkan</translation> <translation id="2416359993254398973">Chrome memerlukan izin akses ke kamera untuk situs ini.</translation> -<translation id="4955546094786399712">Untuk mengubah izin situs ini, tutup aplikasi lainnya dan coba lagi.\n\nJika tidak dapat menutup aplikasi, nonaktifkan izin aplikasi untuk “Tampilkan di atas aplikasi lain” di setelan Android.</translation> <translation id="557283862590186398">Chrome memerlukan izin akses ke mikrofon untuk situs ini.</translation> <translation id="5860491529813859533">Aktifkan</translation> <translation id="6092062101542170135">Untuk melanjutkan, aktifkan NFC di setelan Android</translation> <translation id="6393863479814692971">Chrome memerlukan izin akses ke kamera dan mikrofon untuk situs ini.</translation> <translation id="6697947395630195233">Chrome memerlukan akses ke lokasi Anda untuk berbagi lokasi dengan situs ini.</translation> <translation id="7134415045456331657">Chrome memerlukan izin untuk mengakses kamera guna membuat peta 3D untuk area di sekeliling Anda.</translation> -<translation id="7681341492080683492">Aplikasi lain ditampilkan di atas <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_is.xtb b/components/permissions/android/translations/permissions_android_strings_is.xtb index 96330871..d1ecd0c 100644 --- a/components/permissions/android/translations/permissions_android_strings_is.xtb +++ b/components/permissions/android/translations/permissions_android_strings_is.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="is"> <translation id="2359808026110333948">Halda áfram</translation> <translation id="2416359993254398973">Chrome þarf leyfi til að nota myndavélina þína á þessu vefsvæði.</translation> -<translation id="4955546094786399712">Til að breyta heimildum fyrir þetta vefsvæði skaltu loka hinu forritinu og reyna aftur.\n\nEf þú getur ekki lokað forritinu skaltu slökkva á heimild forritsins til að birtast yfir öðrum forritum í Android stillingum.</translation> <translation id="557283862590186398">Chrome þarf leyfi til að nota hljóðnemann þinn á þessu vefsvæði.</translation> <translation id="5860491529813859533">Kveikja</translation> <translation id="6092062101542170135">Kveiktu á NFC í stillingum Android til að halda áfram</translation> <translation id="6393863479814692971">Chrome þarf leyfi til að nota myndavélina og hljóðnemann þinn á þessu vefsvæði.</translation> <translation id="6697947395630195233">Chrome þarf staðsetningaraðgang til að deila staðsetningu þinni með þessu vefsvæði.</translation> <translation id="7134415045456331657">Chrome þarf leyfi til að nota myndavélina til að búa til þrívíddarkort af umhverfinu.</translation> -<translation id="7681341492080683492">Annað forrit birtist yfir <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_it.xtb b/components/permissions/android/translations/permissions_android_strings_it.xtb index f9a22edd1..369ecb3 100644 --- a/components/permissions/android/translations/permissions_android_strings_it.xtb +++ b/components/permissions/android/translations/permissions_android_strings_it.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="it"> <translation id="2359808026110333948">Continua</translation> <translation id="2416359993254398973">Per questo sito Chrome ha bisogno dell'autorizzazione ad accedere alla fotocamera.</translation> -<translation id="4955546094786399712">Per cambiare l'autorizzazione di questo sito, chiudi l'altra app e riprova.\n\nSe non riesci a chiudere l'app, disattiva la relativa autorizzazione "Mostra sopra altre app" nelle impostazioni Android.</translation> <translation id="557283862590186398">Per questo sito Chrome ha bisogno dell'autorizzazione ad accedere al microfono.</translation> <translation id="5860491529813859533">Attiva</translation> <translation id="6092062101542170135">Per continuare, attiva NFC nelle impostazioni di Android</translation> <translation id="6393863479814692971">Per questo sito Chrome ha bisogno dell'autorizzazione ad accedere alla fotocamera e al microfono.</translation> <translation id="6697947395630195233">Chrome deve poter accedere alla tua posizione per condividerla con questo sito.</translation> <translation id="7134415045456331657">Chrome ha bisogno dell'autorizzazione ad accedere alla fotocamera per creare una mappa 3D dell'ambiente circostante.</translation> -<translation id="7681341492080683492">C'è un'altra app visualizzata sopra <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_iw.xtb b/components/permissions/android/translations/permissions_android_strings_iw.xtb index f654e543..a752e85bb 100644 --- a/components/permissions/android/translations/permissions_android_strings_iw.xtb +++ b/components/permissions/android/translations/permissions_android_strings_iw.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="iw"> <translation id="2359808026110333948">המשך</translation> <translation id="2416359993254398973">Chrome זקוק להרשאה גישה אל המצלמה בשביל האתר הזה.</translation> -<translation id="4955546094786399712">כדי לשנות את ההרשאה של האתר הזה, צריך לסגור את האפליקציה השנייה ולנסות שוב.\n\nאם אי אפשר לסגור את האפליקציה, יש להשבית את ההרשאה של האפליקציה ל"הצגה מעל אפליקציות אחרות" דרך ההגדרות של Android.</translation> <translation id="557283862590186398">Chrome זקוק להרשאת גישה אל המיקרופון בשביל האתר הזה.</translation> <translation id="5860491529813859533">הפעל</translation> <translation id="6092062101542170135">כדי להמשיך יש להפעיל NFC בהגדרות של Android</translation> <translation id="6393863479814692971">Chrome זקוק להרשאת גישה אל המצלמה והמיקרופון בשביל האתר הזה.</translation> <translation id="6697947395630195233">Chrome זקוק לגישה אל המיקום שלך כדי לשתף אותו עם האתר הזה.</translation> <translation id="7134415045456331657">Chrome זקוק להרשאת גישה למצלמה כדי ליצור מפה תלת-ממדית של הסביבה שלך.</translation> -<translation id="7681341492080683492">אפליקציה אחרת מוצגת מעל <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_ja.xtb b/components/permissions/android/translations/permissions_android_strings_ja.xtb index 0911d300e..6979ae62 100644 --- a/components/permissions/android/translations/permissions_android_strings_ja.xtb +++ b/components/permissions/android/translations/permissions_android_strings_ja.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="ja"> <translation id="2359808026110333948">続行</translation> <translation id="2416359993254398973">このサイトを利用するには、Chrome でカメラの使用を許可する必要があります。</translation> -<translation id="4955546094786399712">このサイトの権限を変更するには、表示されている別のアプリを閉じてから、もう一度お試しください。\n\nアプリが閉じない場合は、Android 設定でアプリの「他のアプリの上に重ねて表示」の権限をオフにしてください。</translation> <translation id="557283862590186398">このサイトを利用するには、Chrome でマイクの使用を許可する必要があります。</translation> <translation id="5860491529813859533">オンにする</translation> <translation id="6092062101542170135">続行するには、Android の設定で NFC をオンにしてください。</translation> <translation id="6393863479814692971">このサイトを利用するには、Chrome でカメラとマイクの使用を許可する必要があります。</translation> <translation id="6697947395630195233">このサイトで現在地を共有するには、Chrome で位置情報の使用を許可する必要があります。</translation> <translation id="7134415045456331657">周囲の 3D マップを作成するには、Chrome にカメラの使用を許可する必要があります。</translation> -<translation id="7681341492080683492">別のアプリが <ph name="APP_NAME" /> の上に表示されています</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_ka.xtb b/components/permissions/android/translations/permissions_android_strings_ka.xtb index 02e9381c..26242edf 100644 --- a/components/permissions/android/translations/permissions_android_strings_ka.xtb +++ b/components/permissions/android/translations/permissions_android_strings_ka.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="ka"> <translation id="2359808026110333948">გაგრძელება</translation> <translation id="2416359993254398973">Chrome საჭიროებს თქვენს კამერაზე წვდომის ნებართვას ამ საიტისთვის.</translation> -<translation id="4955546094786399712">ამ საიტისთვის ნებართვის შესაცვლელად დახურეთ სხვა აპი და ცადეთ ხელახლა.\n\nთუ აპის დახურვას ვერ მოახერხებთ, Android-ის პარამეტრებიდან გამოურთეთ აპს „სხვა აპების ზემოდან გამოჩენის“ ნებართვა.</translation> <translation id="557283862590186398">Chrome საჭიროებს თქვენს მიკროფონზე წვდომის ნებართვას ამ საიტისთვის.</translation> <translation id="5860491529813859533">ჩართვა</translation> <translation id="6092062101542170135">გასაგრძელებლად Android-ის პარამეტრებიდან ჩართეთ NFC</translation> <translation id="6393863479814692971">Chrome საჭიროებს თქვენს კამერასა და მიკროფონზე წვდომის ნებართვას ამ საიტისთვის.</translation> <translation id="6697947395630195233">Chrome საჭიროებს თქვენს მდებარეობაზე წვდომის ნებართვას, რათა ის ამ საიტის გაუზიაროს.</translation> <translation id="7134415045456331657">Chrome საჭიროებს თქვენს კამერაზე წვდომის ნებართვას, თქვენი გარემოს 3-განზომილებიანი რუკის შექმნა რომ შეძლოს.</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" /> გადაფარულია სხვა აპით</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_kk.xtb b/components/permissions/android/translations/permissions_android_strings_kk.xtb index 0c01a8c..5da2f0b 100644 --- a/components/permissions/android/translations/permissions_android_strings_kk.xtb +++ b/components/permissions/android/translations/permissions_android_strings_kk.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="kk"> <translation id="2359808026110333948">Жалғастыру</translation> <translation id="2416359993254398973">Chrome браузеріне осы сайтта камераны пайдалануға рұқсат керек.</translation> -<translation id="4955546094786399712">Осы сайттың рұқсатын өзгерту үшін басқа қолданбаны жауып, әрекетті қайталап көріңіз.\n\nЕгер қолданбаны жаба алмасаңыз, Android параметрлеріндегі "Басқа қолданбалар арқылы көрсету" опциясының рұқсатын өшіріңіз.</translation> <translation id="557283862590186398">Chrome браузеріне осы сайтта микрофонды пайдалануға рұқсат керек.</translation> <translation id="5860491529813859533">Қосу</translation> <translation id="6092062101542170135">Жалғастыру үшін Android параметрлерінде NFC функциясын қосыңыз.</translation> <translation id="6393863479814692971">Chrome браузеріне осы сайтта камераны және микрофонды пайдалануға рұқсат керек.</translation> <translation id="6697947395630195233">Chrome браузері осы сайтта орныңызды бөлісу үшін орныңызға кіруді қажет етеді.</translation> <translation id="7134415045456331657">Chrome браузеріне айналаңыздың 3D картасын жасау үшін камераны пайдалану рұқсаты керек.</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" /> арқылы басқа қолданба көрсетілуде</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_km.xtb b/components/permissions/android/translations/permissions_android_strings_km.xtb index b41515ad..06ca91b1c 100644 --- a/components/permissions/android/translations/permissions_android_strings_km.xtb +++ b/components/permissions/android/translations/permissions_android_strings_km.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="km"> <translation id="2359808026110333948">បន្ត</translation> <translation id="2416359993254398973">Chrome ត្រូវការការអនុញ្ញាតដើម្បីចូលប្រើប្រាស់កាមេរ៉ារបស់អ្នកសម្រាប់ទំព័រនេះ។</translation> -<translation id="4955546094786399712">ដើម្បីផ្លាស់ប្ដូរការអនុញ្ញាតសម្រាប់គេហទំព័រនេះ សូមបិទកម្មវិធីផ្សេងទៀតនោះ រួចព្យាយាមម្ដងទៀត។\n\nប្រសិនបើអ្នកមិនអាចបិទកម្មវិធីនោះបានទេ សូមបិទការអនុញ្ញាតរបស់កម្មវិធីនោះដើម្បី “បង្ហាញនៅលើកម្មវិធីផ្សេងទៀត” នៅក្នុងការកំណត់ Android។</translation> <translation id="557283862590186398">Chrome ត្រូវការការអនុញ្ញាត ដើម្បីចូលប្រើប្រាស់មីក្រូហ្វូនរបស់អ្នកសម្រាប់ទំព័រនេះ។</translation> <translation id="5860491529813859533">បើក</translation> <translation id="6092062101542170135">ដើម្បីបន្ត សូមបើក NFC នៅក្នុងការកំណត់ Android</translation> <translation id="6393863479814692971">Chrome ត្រូវការការអនុញ្ញាត ដើម្បីចូលប្រើប្រាស់កាមេរ៉ា និងមីក្រូហ្វូនរបស់អ្នកសម្រាប់ទំព័រនេះ។</translation> <translation id="6697947395630195233">Chrome ត្រូវការការចូលប្រើប្រាស់ទីកន្លែងរបស់អ្នក ដើម្បីចែករំលែកទីកន្លែងរបស់អ្នកជាមួយទំព័រនេះ។</translation> <translation id="7134415045456331657">Chrome ត្រូវការការអនុញ្ញាតចូលប្រើកាមេរ៉ារបស់អ្នក ដើម្បីបង្កើតផែនទី 3D នៃមជ្ឈដ្ឋានជុំវិញរបស់អ្នក។</translation> -<translation id="7681341492080683492">កម្មវិធីផ្សេងទៀតកំពុងបង្ហាញនៅលើ <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_kn.xtb b/components/permissions/android/translations/permissions_android_strings_kn.xtb index ba266fb..7fe1667 100644 --- a/components/permissions/android/translations/permissions_android_strings_kn.xtb +++ b/components/permissions/android/translations/permissions_android_strings_kn.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="kn"> <translation id="2359808026110333948">ಮುಂದುವರೆಸಿ</translation> <translation id="2416359993254398973">ಈ ಸೈಟ್ಗೆ ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಪ್ರವೇಶಿಸಲು Chrome ಗೆ ಅನುಮತಿಸುವ ಅಗತ್ಯವಿದೆ.</translation> -<translation id="4955546094786399712">ಈ ಸೈಟ್ಗೆ ಸಂಬಂಧಿಸಿದ ಅನುಮತಿಯನ್ನು ಬದಲಾಯಿಸಲು, ಇತರ ಆ್ಯಪ್ ಅನ್ನು ಮುಚ್ಚಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.\n\nಆ್ಯಪ್ ಮುಚ್ಚಲು ನಿಮಗೆ ಸಾಧ್ಯವಾಗದಿದ್ದರೆ, Android ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ಆ್ಯಪ್ನ “ಇತರ ಆ್ಯಪ್ಗಳ ಮೇಲೆ ಡಿಸ್ಪ್ಲೇ ಮಾಡು” ಎಂಬ ಅನುಮತಿಯನ್ನು ಆಫ್ ಮಾಡಿ.</translation> <translation id="557283862590186398">ಈ ಸೈಟ್ಗೆ ನಿಮ್ಮ ಮೈಕ್ರೊಫೋನ್ ಪ್ರವೇಶಿಸಲು Chrome ಗೆ ಅನುಮತಿಸುವ ಅಗತ್ಯವಿದೆ.</translation> <translation id="5860491529813859533">ಆನ್ ಮಾಡಿ</translation> <translation id="6092062101542170135">ಮುಂದುವರಿಸಲು, Android ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ NFC ಆನ್ ಮಾಡಿ</translation> <translation id="6393863479814692971">ಈ ಸೈಟ್ಗೆ ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಮತ್ತು ಮೈಕ್ರೊಫೋನ್ ಪ್ರವೇಶಿಸಲು Chrome ಗೆ ಅನುಮತಿಸುವ ಅಗತ್ಯವಿದೆ.</translation> <translation id="6697947395630195233">ಈ ಸೈಟ್ ಮೂಲಕ ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ಹಂಚಿಕೊಳ್ಳಲು Chrome ಗೆ ನಿಮ್ಮ ಸ್ಥಳದ ಪ್ರವೇಶ ಅಗತ್ಯವಿದೆ.</translation> <translation id="7134415045456331657">ನಿಮ್ಮ ಸುತ್ತಮುತ್ತಲಿನ ಪರಿಸರದ 3D ನಕ್ಷೆಯನ್ನು ರಚಿಸುವುದಕ್ಕಾಗಿ ನಿಮ್ಮ ಕ್ಯಾಮರಾವನ್ನು ಪ್ರವೇಶಿಸಲು Chrome ಗೆ ಅನುಮತಿ ಬೇಕಾಗಿದೆ.</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" /> ನ ಮೇಲೆ ಬೇರೊಂದು ಆ್ಯಪ್ ಡಿಸ್ಪ್ಲೇಯಾಗುತ್ತಿದೆ</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_ko.xtb b/components/permissions/android/translations/permissions_android_strings_ko.xtb index 0bfe174..70e0cf4 100644 --- a/components/permissions/android/translations/permissions_android_strings_ko.xtb +++ b/components/permissions/android/translations/permissions_android_strings_ko.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="ko"> <translation id="2359808026110333948">계속</translation> <translation id="2416359993254398973">Chrome이 이 사이트에서 카메라에 액세스하려면 권한이 필요합니다.</translation> -<translation id="4955546094786399712">사이트 권한을 변경하려면 다른 앱을 종료하고 다시 시도해 보세요.\n\n앱을 종료할 수 없다면 Android 설정에서 앱의 '다른 앱 위에 표시' 권한을 사용 중지합니다.</translation> <translation id="557283862590186398">Chrome이 이 사이트에서 마이크에 액세스하려면 권한이 필요합니다.</translation> <translation id="5860491529813859533">사용</translation> <translation id="6092062101542170135">계속하려면 Android 설정에서 NFC를 사용 설정하세요.</translation> <translation id="6393863479814692971">Chrome이 이 사이트에서 카메라와 마이크에 액세스하려면 권한이 필요합니다.</translation> <translation id="6697947395630195233">Chrome이 이 사이트와 위치를 공유하려면 내 위치에 액세스하도록 허용해야 합니다.</translation> <translation id="7134415045456331657">Chrome에서 주변 3D 지도를 만들려면 카메라 액세스 권한이 필요합니다.</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" /> 위에 다른 앱이 표시됨</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_ky.xtb b/components/permissions/android/translations/permissions_android_strings_ky.xtb index 5b6d091..2b7b95d 100644 --- a/components/permissions/android/translations/permissions_android_strings_ky.xtb +++ b/components/permissions/android/translations/permissions_android_strings_ky.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="ky"> <translation id="2359808026110333948">Улантуу</translation> <translation id="2416359993254398973">Бул сайтта иштөө үчүн Chrome камераңызды колдонушу керек.</translation> -<translation id="4955546094786399712">Бул сайтка берилген уруксатты өзгөртүү үчүн башка колдонмону жаап, кайра аракет кылыңыз.\n\nЭгер башка колдонмону жаба албасаңыз, Android жөндөөлөрүнө өтүп, "Башка терезелердин үстүнөн көрсөтүү" уруксатын өчүрүп коюңуз.</translation> <translation id="557283862590186398">Бул сайтта иштөө үчүн Chrome микрофонуңузду колдонушу керек.</translation> <translation id="5860491529813859533">Күйгүзүү</translation> <translation id="6092062101542170135">Улантуу үчүн Android жөндөөлөрүнөн NFC'ни күйгүзүңүз</translation> <translation id="6393863479814692971">Бул сайтта иштөө үчүн Chrome камераңызды жана микрофонуңузду колдонушу керек.</translation> <translation id="6697947395630195233">Бул сайт менен бөлүшүү үчүн Chrome жайгашкан жериңиз тууралуу маалыматты алышы керек.</translation> <translation id="7134415045456331657">Chrome айланаңыздын 3D картасын түзүү үчүн камераңызды колдонушу керек.</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" /> үстүнөн башка колдонмо көрсөтүлүүдө</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_lo.xtb b/components/permissions/android/translations/permissions_android_strings_lo.xtb index 9fd17a9..6403e74 100644 --- a/components/permissions/android/translations/permissions_android_strings_lo.xtb +++ b/components/permissions/android/translations/permissions_android_strings_lo.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="lo"> <translation id="2359808026110333948">ສືບຕໍ່</translation> <translation id="2416359993254398973">Chrome ຕ້ອງການການອະນຸຍາດເພື່ອເຂົ້າເຖິງກ້ອງຖ່າຍຮູບຂອງທ່ານສຳລັບໄຊນີ້.</translation> -<translation id="4955546094786399712">ເພື່ອປ່ຽນການອະນຸຍາດສຳລັບເວັບໄຊນີ້, ກະລຸນາປິດແອັບອື່ນ ແລ້ວລອງໃໝ່.\n\nຖ້າທ່ານບໍ່ສາມາດປິດແອັບໄດ້, ກະລຸນາປິດການອະນຸຍາດຂອງແອັບເພື່ອ “ສະແດງທັບແອັບອື່ນ” ໃນການຕັ້ງຄ່າ Android.</translation> <translation id="557283862590186398">Chrome ຕ້ອງການການອະນຸຍາດເພື່ອເຂົ້າເຖິງໄມໂຄຣໂຟນຂອງທ່ານສຳລັບເວັບໄຊນີ້.</translation> <translation id="5860491529813859533">ເປີດ</translation> <translation id="6092062101542170135">ເພື່ອສືບຕໍ່, ກະລຸນາເປີດ NFC ໃນການຕັ້ງຄ່າ Android</translation> <translation id="6393863479814692971">Chrome ຕ້ອງການການອະນຸຍາດເພື່ອເຂົ້າເຖິງກ້ອງຖ່າຍຮູບ ແລະ ໄມໂຄຣໂຟນຂອງທ່ານສຳລັບເວັບໄຊນີ້.</translation> <translation id="6697947395630195233">Chrome ຕ້ອງການເຂົ້າເຖິງສະຖານທີ່ຂອງທ່ານເພື່ອແບ່ງປັນສະຖານທີ່ຂອງທ່ານກັບເວັບໄຊນີ້.</translation> <translation id="7134415045456331657">Chrome ຕ້ອງການການອະນຸຍາດເພື່ອເຂົ້າເຖິງກ້ອງຂອງທ່ານເພື່ອສ້າງແຜນທີ່ 3 ມິຕິຂອງສະພາບແວດລ້ອມອ້ອມຂ້າງຂອງທ່ານ.</translation> -<translation id="7681341492080683492">ແອັບອື່ນກຳລັງສະແດງທັບ <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_lt.xtb b/components/permissions/android/translations/permissions_android_strings_lt.xtb index ee290d2..b8e2d7c 100644 --- a/components/permissions/android/translations/permissions_android_strings_lt.xtb +++ b/components/permissions/android/translations/permissions_android_strings_lt.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="lt"> <translation id="2359808026110333948">Tęskite</translation> <translation id="2416359993254398973">„Chrome“ reikia leidimo, kad galėtų naudoti jūsų fotoaparatą šioje svetainėje.</translation> -<translation id="4955546094786399712">Norėdami pakeisti šios svetainės leidimą, uždarykite kitą programą ir bandykite dar kartą.\n\nJei negalite uždaryti programos, „Android“ nustatymuose išjunkite programos leidimą „Rodyti virš kitų programų“.</translation> <translation id="557283862590186398">„Chrome“ reikia leidimo, kad galėtų naudoti jūsų mikrofoną šioje svetainėje.</translation> <translation id="5860491529813859533">Įjungti</translation> <translation id="6092062101542170135">Jei norite tęsti, „Android“ nustatymuose įjunkite ALR</translation> <translation id="6393863479814692971">„Chrome“ reikia leidimo, kad galėtų naudoti jūsų fotoaparatą ir mikrofoną šioje svetainėje.</translation> <translation id="6697947395630195233">„Chrome“ reikia leidimo, kad galėtų naudoti jūsų vietovės informaciją ir bendrinti ją su šia svetaine.</translation> <translation id="7134415045456331657">„Chrome“ reikia leidimo naudoti fotoaparatą jūsų aplinkos 3D žemėlapiui kurti.</translation> -<translation id="7681341492080683492">Kita programa rodoma virš „<ph name="APP_NAME" />“</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_lv.xtb b/components/permissions/android/translations/permissions_android_strings_lv.xtb index c7a8a4f1..472f30b 100644 --- a/components/permissions/android/translations/permissions_android_strings_lv.xtb +++ b/components/permissions/android/translations/permissions_android_strings_lv.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="lv"> <translation id="2359808026110333948">Turpināt</translation> <translation id="2416359993254398973">Pārlūkam Chrome ir nepieciešama atļauja piekļūt jūsu kamerai šajā vietnē.</translation> -<translation id="4955546094786399712">Lai mainītu atļauju šai vietnei, aizveriet otro lietotni un mēģiniet vēlreiz.\n\nJa nevarat aizvērt otro lietotni, Android iestatījumos izslēdziet attiecīgās lietotnes atļauju “Rādīt pāri citām lietotnēm”.</translation> <translation id="557283862590186398">Pārlūkam Chrome ir nepieciešama atļauja piekļūt jūsu mikrofonam šajā vietnē.</translation> <translation id="5860491529813859533">Ieslēgt</translation> <translation id="6092062101542170135">Lai turpinātu, Android ierīces iestatījumos ieslēdziet NFC savienojumu</translation> <translation id="6393863479814692971">Pārlūkam Chrome ir nepieciešama atļauja piekļūt jūsu kamerai un mikrofonam šajā vietnē.</translation> <translation id="6697947395630195233">Pārlūkam Chrome ir nepieciešama piekļuve jūsu atrašanās vietas datiem, lai varētu tos kopīgot ar šo vietni.</translation> <translation id="7134415045456331657">Pārlūkam Chrome ir nepieciešama atļauja piekļūt jūsu kamerai, lai varētu izveidot jūsu apkārtnes 3D karti.</translation> -<translation id="7681341492080683492">Cita lietotne tiek rādīta pāri lietotnei <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_mk.xtb b/components/permissions/android/translations/permissions_android_strings_mk.xtb index 0faa0b5c..5efc942 100644 --- a/components/permissions/android/translations/permissions_android_strings_mk.xtb +++ b/components/permissions/android/translations/permissions_android_strings_mk.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="mk"> <translation id="2359808026110333948">Продолжи</translation> <translation id="2416359993254398973">На Chrome му треба дозвола за да пристапи до камерата за сајтов.</translation> -<translation id="4955546094786399712">За менување на дозволата за овој сајт, затворете ја другата апликација и обидете се повторно.\n\nАКо не можете да ја затворите апликацијата, во поставките на Android исклучете ја дозволата на апликацијата „Приказ над други апликации“.</translation> <translation id="557283862590186398">На Chrome му треба дозвола за да пристапи до микрофонот за сајтов.</translation> <translation id="5860491529813859533">Вклучи</translation> <translation id="6092062101542170135">За да продолжите, вклучете ја NFC во поставките за Android</translation> <translation id="6393863479814692971">На Chrome му треба дозвола за да пристапи до камерата и микрофонот за сајтов.</translation> <translation id="6697947395630195233">На Chrome му треба пристап до вашата локација за да ја сподели со сајтов.</translation> <translation id="7134415045456331657">На Chrome му треба дозвола за да пристапи до камерата и да создаде 3D-карта од вашето опкружување.</translation> -<translation id="7681341492080683492">Друга апликација е прикажана преку <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_ml.xtb b/components/permissions/android/translations/permissions_android_strings_ml.xtb index 4463a98..20ac3e5f 100644 --- a/components/permissions/android/translations/permissions_android_strings_ml.xtb +++ b/components/permissions/android/translations/permissions_android_strings_ml.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="ml"> <translation id="2359808026110333948">തുടരുക</translation> <translation id="2416359993254398973">Chrome-ന് ഈ സൈറ്റിനായി നിങ്ങളുടെ ക്യാമറ ആക്സസ് ചെയ്യാനുള്ള അനുമതി ആവശ്യമാണ്.</translation> -<translation id="4955546094786399712">ഈ സൈറ്റിന്റെ അനുമതി മാറ്റാൻ, ഓവർലേ ആകുന്ന ആപ്പ് അടച്ച ശേഷം വീണ്ടും ശ്രമിക്കുക.\n\nആപ്പ് അടയ്ക്കാനാവുന്നില്ലെങ്കിൽ, Android ക്രമീകരണത്തിൽ “മറ്റ് ആപ്പുകൾക്ക് മുകളിൽ ദൃശ്യമാകുക” എന്നതിനുള്ള അനുമതി ഓഫാക്കുക.</translation> <translation id="557283862590186398">Chrome-ന് ഈ സൈറ്റിനായി നിങ്ങളുടെ മൈക്രോഫോൺ ആക്സസ് ചെയ്യാനുള്ള അനുമതി ആവശ്യമാണ്.</translation> <translation id="5860491529813859533">ഓൺ ചെയ്യുക</translation> <translation id="6092062101542170135">തുടരാൻ, Android ക്രമീകരണത്തിൽ NFC ഓണാക്കുക</translation> <translation id="6393863479814692971">Chrome-ന് ഈ സൈറ്റിനായി നിങ്ങളുടെ ക്യാമറയും മൈക്രോഫോണും ആക്സസ് ചെയ്യാനുള്ള അനുമതി ആവശ്യമാണ്.</translation> <translation id="6697947395630195233">Chrome-ന് ഈ സൈറ്റുമായി ലൊക്കേഷൻ പങ്കിടാൻ നിങ്ങളുടെ ലൊക്കേഷനിലേക്കുള്ള ആക്സസ് ആവശ്യമാണ്.</translation> <translation id="7134415045456331657">നിങ്ങളുടെ ചുറ്റുപാടിന്റെ 3D മാപ്പ് സൃഷ്ടിക്കുന്നതിന് നിങ്ങളുടെ ക്യാമറ ആക്സസ് ചെയ്യാൻ Chrome-ന് അനുമതി ആവശ്യമാണ്.</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" />-ന് മുകളിൽ മറ്റൊരു ആപ്പ് ദൃശ്യമാകുന്നു</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_mn.xtb b/components/permissions/android/translations/permissions_android_strings_mn.xtb index 74d9c32..72a518f 100644 --- a/components/permissions/android/translations/permissions_android_strings_mn.xtb +++ b/components/permissions/android/translations/permissions_android_strings_mn.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="mn"> <translation id="2359808026110333948">Цааш</translation> <translation id="2416359993254398973">Энэ сайтыг ашиглахын тулд Chrome-д таны камерт хандах зөвшөөрөл шаардлагатай байна.</translation> -<translation id="4955546094786399712">Энэ сайтын зөвшөөрлийг өөрчлөхийн тулд өөр аппыг хааж, дахин оролдоно уу.\n\nХэрэв та аппыг хаах боломжгүй байгаа бол уг аппын "Бусад аппаар үзүүлэх" зөвшөөрлийг Андройдын тохиргоо хэсэгт унтраана уу.</translation> <translation id="557283862590186398">Энэ сайтыг ашиглахын тулд Chrome-д таны микрофонд хандах зөвшөөрөл шаардлагатай байна.</translation> <translation id="5860491529813859533">Асаах</translation> <translation id="6092062101542170135">Үргэлжлүүлэхийн тулд Android-н тохиргоо хэсэгт NFC-г асаана уу</translation> <translation id="6393863479814692971">Энэ сайтыг ашиглахын тулд Chrome-д таны камер, микрофонд хандах зөвшөөрөл шаардлагатай байна.</translation> <translation id="6697947395630195233">Энэ сайтад таны байршлыг хуваалцахын тулд Chrome-д таны байршилд хандах зөвшөөрөл шаардлагатай байна.</translation> <translation id="7134415045456331657">Орчин тойрны тань 3D газрын зургийг үүсгэхийн тулд таны камерт хандах зөвшөөрөл Chrome-д шаардлагатай.</translation> -<translation id="7681341492080683492">Өөр апп <ph name="APP_NAME" />-р үзүүлж байна</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_mr.xtb b/components/permissions/android/translations/permissions_android_strings_mr.xtb index fb1181f..cd8362c7 100644 --- a/components/permissions/android/translations/permissions_android_strings_mr.xtb +++ b/components/permissions/android/translations/permissions_android_strings_mr.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="mr"> <translation id="2359808026110333948">सुरू ठेवा</translation> <translation id="2416359993254398973">या साइटसाठी Chromeला तुमचा कॅमेरा ॲक्सेस करण्याची परवानगी आवश्यक आहे.</translation> -<translation id="4955546094786399712">या साइटसाठी परवानगी बदलण्यासाठी, इतर अॅप बंद करा आणि पुन्हा प्रयत्न करा.\n\nतुम्ही अॅप बंद करू शकत नसल्यास, Android सेटिंग्जमध्ये “इतर अॅप्सच्या वर दाखवा” वर अॅपची परवानगी बंद करा.</translation> <translation id="557283862590186398">या साइटसाठी Chromeला तुमचा मायक्रोफोन ॲक्सेस करण्याची परवानगी आवश्यक आहे.</translation> <translation id="5860491529813859533">सुरू करा</translation> <translation id="6092062101542170135">पुढे सुरू ठेवण्यासाठी, Android सेटिंग्जमध्ये NFC सुरू करा</translation> <translation id="6393863479814692971">या साइटसाठी Chromeला तुमचा कॅमेरा आणि मायक्रोफोन ॲक्सेस करण्याची परवानगी आवश्यक आहे.</translation> <translation id="6697947395630195233">तुमचे स्थान या साइटसोबत शेअर करण्यासाठी Chromeला तुमच्या स्थानाचा अॅक्सेस हवा आहे.</translation> <translation id="7134415045456331657">तुमच्या आसपासचा 3D नकाशा तयार करण्यासाठी Chrome ला तुमचा कॅमेरा अॅक्सेस करण्याची परवानगी हवी आहे.</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" /> वर दुसरे अॅप दाखवले जात आहे</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_ms.xtb b/components/permissions/android/translations/permissions_android_strings_ms.xtb index 5a67b26..6c41cbdb 100644 --- a/components/permissions/android/translations/permissions_android_strings_ms.xtb +++ b/components/permissions/android/translations/permissions_android_strings_ms.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="ms"> <translation id="2359808026110333948">Teruskan</translation> <translation id="2416359993254398973">Chrome memerlukan kebenaran untuk mengakses kamera anda bagi tapak ini.</translation> -<translation id="4955546094786399712">Untuk menukar kebenaran bagi tapak ini, tutup apl lain itu, kemudian cuba lagi.\n\nJika anda tidak dapat menutup apl tersebut, matikan kebenaran “Paparkan di atas apl lain” untuk apl itu dalam tetapan Android.</translation> <translation id="557283862590186398">Chrome memerlukan kebenaran untuk mengakses mikrofon anda bagi tapak ini.</translation> <translation id="5860491529813859533">Hidupkan</translation> <translation id="6092062101542170135">Hidupkan NFC dalam tetapan Android untuk meneruskan</translation> <translation id="6393863479814692971">Chrome memerlukan kebenaran untuk mengakses kamera dan mikrofon anda bagi tapak ini.</translation> <translation id="6697947395630195233">Chrome memerlukan akses kepada lokasi anda untuk berkongsi lokasi dengan tapak ini.</translation> <translation id="7134415045456331657">Chrome memerlukan kebenaran untuk mengakses kamera anda untuk membuat peta 3D persekitaran anda.</translation> -<translation id="7681341492080683492">Apl lain dipaparkan di atas <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_my.xtb b/components/permissions/android/translations/permissions_android_strings_my.xtb index d5d67a8..e2858bb 100644 --- a/components/permissions/android/translations/permissions_android_strings_my.xtb +++ b/components/permissions/android/translations/permissions_android_strings_my.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="my"> <translation id="2359808026110333948">ဆက်လုပ်ရန်</translation> <translation id="2416359993254398973">ဤဝဘ်ဆိုက်အတွက် Chrome သည် ကင်မရာအသုံးပြုခွင့် လိုအပ်ပါသည်။</translation> -<translation id="4955546094786399712">ဤဝဘ်ဆိုက်အတွက် ခွင့်ပြုချက်ပြောင်းရန် အခြားအက်ပ်ကိုပိတ်ပြီး ထပ်စမ်းကြည့်ပါ။\n\nအက်ပ်ကိုပိတ်၍ မရလျှင် Android ဆက်တင်များတွင် အက်ပ်၏ “အခြားအက်ပ်များပေါ်တွင် ပြရန်” ခွင့်ပြုချက်ကို ပိတ်ပါ။</translation> <translation id="557283862590186398">ဤဝဘ်ဆိုက်အတွက် Chrome သည် သင်၏ မိုက်ခရိုဖုန်းကို အသုံးပြုခွင့်ရရန် လိုအပ်ပါသည်။</translation> <translation id="5860491529813859533">ဖွင့်ရန်</translation> <translation id="6092062101542170135">ရှေ့ဆက်ရန် Android ဆက်တင်များတွင် NFC ကို ဖွင့်ပါ</translation> <translation id="6393863479814692971">ဤဝဘ်ဆိုက်အတွက် Chrome သည် သင်၏ ကင်မရာနှင့် မိုက်ခရိုဖုန်းကို အသုံးပြုခွင့်ရရန် လိုအပ်ပါသည်။</translation> <translation id="6697947395630195233">ဤဝဘ်ဆိုက်နှင့် သင်၏တည်နေရာကို မျှဝေရန် Chrome သည် သင့်တည်နေရာကို အသုံးပြုခွင့် လိုအပ်သည်။</translation> <translation id="7134415045456331657">သင့်ပတ်ဝန်းကျင်၏ 3D မြေပုံ ပြုလုပ်ရန် Chrome က သင့်ကင်မရာကို အသုံးပြုခွင့် လိုအပ်သည်။</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" /> ပေါ်တွင် အက်ပ်နောက်တစ်ခုကို ပြနေသည်</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_ne.xtb b/components/permissions/android/translations/permissions_android_strings_ne.xtb index 84c8309..a5829a6 100644 --- a/components/permissions/android/translations/permissions_android_strings_ne.xtb +++ b/components/permissions/android/translations/permissions_android_strings_ne.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="ne"> <translation id="2359808026110333948">जारी राख्नुहोस्</translation> <translation id="2416359993254398973">यो साइटका लागि Chrome लाई तपाईंको क्यमेरामाथि पहुँच राख्न अनुमति आवश्यक हुन्छ।</translation> -<translation id="4955546094786399712">यो साइटलाई दिइएको अनुमति परिवर्तन गर्न अर्को एप बन्द गर्नुहोस् र फेरि प्रयास गर्नुहोस्।\n\nतपाईं उक्त एप बन्द गर्न सक्नुहुन्न भने Android का सेटिङमा गई सो एपलाई दिइएको “अन्य एपको माथिपट्टि देखिने” अनुमति अफ गर्नुहोस्।</translation> <translation id="557283862590186398">यो साइटका लागि Chrome लाई तपाईंको माइक्रोफोनमाथि पहुँच राख्न अनुमति आवश्यक हुन्छ।</translation> <translation id="5860491529813859533">सक्रिय गर्नुहोस्</translation> <translation id="6092062101542170135">अगाडि बढ्न Android सम्बन्धी सेटिङमा गई NFC सक्रिय गर्नुहोस्</translation> <translation id="6393863479814692971">यो साइटका लागि Chrome लाई तपाईंको क्यामेरा र माइक्रोफोनमाथि पहुँच राख्न अनुमति आवश्यक हुन्छ।</translation> <translation id="6697947395630195233">यो साइटसँग तपाईंको स्थानसम्बन्धी जानकारी आदान प्रदान गर्न Chrome लाई तपाईंको स्थानमाथिको पहुँच आवश्यक हुन्छ।</translation> <translation id="7134415045456331657">Chrome लाई तपाईं वरपरको ठाउँको 3D नक्सा बनाउन तपाईंको क्यामेरा प्रयोग गर्ने अनुमति चाहिन्छ।</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" /> को माथिपट्टि अर्को एप देखिइरहेको छ</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_nl.xtb b/components/permissions/android/translations/permissions_android_strings_nl.xtb index 456d943..8eb7589 100644 --- a/components/permissions/android/translations/permissions_android_strings_nl.xtb +++ b/components/permissions/android/translations/permissions_android_strings_nl.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="nl"> <translation id="2359808026110333948">Doorgaan</translation> <translation id="2416359993254398973">Chrome heeft toegangsrechten voor je camera nodig voor deze site.</translation> -<translation id="4955546094786399712">Als je het recht voor deze site wilt wijzigen, sluit je de andere app en probeer je het opnieuw.\n\nAls je de app niet kunt sluiten, schakel je het recht 'Weergeven vóór andere apps' uit voor de app in de instellingen van Android.</translation> <translation id="557283862590186398">Chrome heeft toegangsrechten voor je microfoon nodig voor deze site.</translation> <translation id="5860491529813859533">Inschakelen</translation> <translation id="6092062101542170135">Schakel NFC in bij de Android-instellingen om door te gaan</translation> <translation id="6393863479814692971">Chrome heeft toegangsrechten voor je camera en microfoon nodig voor deze site.</translation> <translation id="6697947395630195233">Chrome heeft toegang tot je locatie nodig om je locatie met deze site te delen.</translation> <translation id="7134415045456331657">Chrome heeft toegangsrechten voor de camera nodig om een 3D-kaart van je omgeving te maken</translation> -<translation id="7681341492080683492">Een andere app wordt weergegeven vóór <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_no.xtb b/components/permissions/android/translations/permissions_android_strings_no.xtb index 8e9d678..7448e23 100644 --- a/components/permissions/android/translations/permissions_android_strings_no.xtb +++ b/components/permissions/android/translations/permissions_android_strings_no.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="no"> <translation id="2359808026110333948">Fortsett</translation> <translation id="2416359993254398973">Chrome trenger tilgang til kameraet ditt for dette nettstedet.</translation> -<translation id="4955546094786399712">For å endre tillatelsen for dette nettstedet, lukk den andre appen og prøv på nytt.\n\nHvis du ikke får lukket appen, slår du av tillatelsen «Vis over andre apper» for appen i Android-innstillingene.</translation> <translation id="557283862590186398">Chrome trenger tilgang til mikrofonen din for dette nettstedet.</translation> <translation id="5860491529813859533">Slå på</translation> <translation id="6092062101542170135">For å fortsette, slå på NFC i Android-innstillingene</translation> <translation id="6393863479814692971">Chrome trenger tilgang til kameraet ditt og mikrofonen din for dette nettstedet.</translation> <translation id="6697947395630195233">Chrome trenger tilgang til posisjonen din for å kunne dele den med dette nettstedet.</translation> <translation id="7134415045456331657">Chrome trenger tilgang til kameraet for å lage et 3D-kart av omgivelsene.</translation> -<translation id="7681341492080683492">En annen app vises over <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_or.xtb b/components/permissions/android/translations/permissions_android_strings_or.xtb index 3c4097b..b703ca6 100644 --- a/components/permissions/android/translations/permissions_android_strings_or.xtb +++ b/components/permissions/android/translations/permissions_android_strings_or.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="or"> <translation id="2359808026110333948">ଜାରି ରଖନ୍ତୁ</translation> <translation id="2416359993254398973">ଏହି ସାଇଟ୍ ପାଇଁ ଆପଣଙ୍କ କ୍ୟାମେରା ଆକ୍ସେସ୍ କରିବାକୁ Chrome ଆପଣଙ୍କର ଅନୁମତି ଆବଶ୍ୟକ କରୁଛି।</translation> -<translation id="4955546094786399712">ଏହି ସାଇଟ୍ ପାଇଁ ଅନୁମତି ପରିବର୍ତ୍ତନ କରିବାକୁ, ଅନ୍ୟ ଆପ୍ ବନ୍ଦ କରନ୍ତୁ ଏବଂ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।\n\nଯଦି ଆପଣ ଆପଟି ବନ୍ଦ କରିପାରିବେ ନାହିଁ ତେବେ Android ସେଟିଂସରେ, ଆପର “ଅନ୍ୟ ଆପଗୁଡ଼ିକ ଉପରେ ଡିସପ୍ଲେ କରନ୍ତୁ” ଅନୁମତିକୁ ବନ୍ଦ କରନ୍ତୁ।</translation> <translation id="557283862590186398">ଏହି ସାଇଟ୍ ପାଇଁ ଆପଣଙ୍କର ମାଇକ୍ରୋଫୋନ୍କୁ ଆକ୍ସେସ୍ କରିବାକୁ Chrome ଅନୁମତି ଆବଶ୍ୟକ କରୁଛି।</translation> <translation id="5860491529813859533">ଚାଲୁ କରନ୍ତୁ</translation> <translation id="6092062101542170135">ଜାରି ରଖିବା ପାଇଁ, Android ସେଟିଂସରେ NFC ଚାଲୁ କରନ୍ତୁ</translation> <translation id="6393863479814692971">ଏହି ସାଇଟ୍ ପାଇଁ ଆପଣଙ୍କର କ୍ୟାମେରା ଓ ମାଇକ୍ରୋଫୋନ୍କୁ ଆକ୍ସେସ୍ କରିବା ପାଇଁ Chrome ଆପଣଙ୍କର ଅନୁମତି ଆବଶ୍ୟକ କରେ।</translation> <translation id="6697947395630195233">ଏହି ସାଇଟ୍ ସହ ଆପଣଙ୍କ ଲୋକେସନ୍ ସେୟାର୍ କରିବା ପାଇଁ Chrome ଆପଣଙ୍କ ଲୋକେସନ୍କୁ ଆକ୍ସେସ୍ କରିବାକୁ ଚାହୁଁଛି।</translation> <translation id="7134415045456331657">Chrome ଆପଣଙ୍କ ପରିପାର୍ଶ୍ୱର ଏକ 3D ମ୍ୟାପ୍ ତିଆରି କରିବା ପାଇଁ ଆପଣଙ୍କ କ୍ୟାମେରା ଆକ୍ସେସ୍ କରିବାକୁ ଅନୁମତି ଆବଶ୍ୟକ କରେ।</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" /> ଉପରେ ଅନ୍ୟ ଏକ ଆପ୍ ଡିସପ୍ଲେ ହେଉଛି</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_pa.xtb b/components/permissions/android/translations/permissions_android_strings_pa.xtb index 0d80761..0b427cf 100644 --- a/components/permissions/android/translations/permissions_android_strings_pa.xtb +++ b/components/permissions/android/translations/permissions_android_strings_pa.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="pa"> <translation id="2359808026110333948">ਜਾਰੀ ਰੱਖੋ</translation> <translation id="2416359993254398973">Chrome ਨੂੰ ਇਸ ਸਾਈਟ ਵਾਸਤੇ ਤੁਹਾਡੇ ਕੈਮਰੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਲਈ ਇਜਾਜ਼ਤ ਦੀ ਲੋੜ ਹੈ।</translation> -<translation id="4955546094786399712">ਇਸ ਸਾਈਟ ਵਾਸਤੇ ਇਜਾਜ਼ਤ ਨੂੰ ਬਦਲਣ ਲਈ, ਦੂਜੀ ਐਪ ਬੰਦ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।\n\nਜੇ ਤੁਸੀਂ ਐਪ ਬੰਦ ਨਹੀਂ ਕਰ ਸਕਦੇ, ਤਾਂ Android ਸੈਟਿੰਗਾਂ ਵਿੱਚ “ਹੋਰ ਐਪਾਂ 'ਤੇ ਦਿਖਾਉਣ” ਲਈ ਐਪ ਦੀ ਇਜਾਜ਼ਤ ਨੂੰ ਬੰਦ ਕਰੋ।</translation> <translation id="557283862590186398">Chrome ਨੂੰ ਇਸ ਸਾਈਟ ਵਾਸਤੇ ਤੁਹਾਡੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਲਈ ਇਜਾਜ਼ਤ ਦੀ ਲੋੜ ਹੈ।</translation> <translation id="5860491529813859533">ਚਾਲੂ ਕਰੋ</translation> <translation id="6092062101542170135">ਜਾਰੀ ਰੱਖਣ ਲਈ, Android ਸੈਟਿੰਗਾਂ ਵਿੱਚ NFC ਚਾਲੂ ਕਰੋ</translation> <translation id="6393863479814692971">Chrome ਨੂੰ ਇਸ ਸਾਈਟ ਵਾਸਤੇ ਤੁਹਾਡੇ ਕੈਮਰੇ ਅਤੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਲਈ ਇਜਾਜ਼ਤ ਦੀ ਲੋੜ ਹੈ।</translation> <translation id="6697947395630195233">Chrome ਨੂੰ ਇਸ ਸਾਈਟ ਨਾਲ ਤੁਹਾਡੀ ਟਿਕਾਣਾ ਜਾਣਕਾਰੀ ਸਾਂਝੀ ਕਰਨ ਵਾਸਤੇ ਤੁਹਾਡੇ ਟਿਕਾਣੇ 'ਤੇ ਪਹੁੰਚ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।</translation> <translation id="7134415045456331657">Chrome ਨੂੰ ਤੁਹਾਡੇ ਆਲੇ-ਦੁਆਲੇ ਦਾ 3D ਨਕਸ਼ਾ ਬਣਾਉਣ ਵਾਸਤੇ ਤੁਹਾਡੇ ਕੈਮਰੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਲਈ ਇਜਾਜ਼ਤ ਦੀ ਲੋੜ ਹੈ।</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" /> 'ਤੇ ਕੋਈ ਹੋਰ ਐਪ ਦਿਖਾਈ ਜਾ ਰਹੀ ਹੈ</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_pl.xtb b/components/permissions/android/translations/permissions_android_strings_pl.xtb index 4617ec52..fe49fc2 100644 --- a/components/permissions/android/translations/permissions_android_strings_pl.xtb +++ b/components/permissions/android/translations/permissions_android_strings_pl.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="pl"> <translation id="2359808026110333948">Dalej</translation> <translation id="2416359993254398973">Chrome potrzebuje uprawnień dostępu do aparatu na tej stronie.</translation> -<translation id="4955546094786399712">Aby zmienić uprawnienia tej strony, zamknij inną aplikację i spróbuj ponownie.\n\nJeśli nie uda się zamknąć aplikacji, wyłącz jej uprawnienia „Wyświetlanie nad innymi aplikacjami” w ustawieniach Androida.</translation> <translation id="557283862590186398">Chrome potrzebuje uprawnień dostępu do mikrofonu na tej stronie.</translation> <translation id="5860491529813859533">Włącz</translation> <translation id="6092062101542170135">Aby kontynuować, włącz NFC w ustawieniach Androida</translation> <translation id="6393863479814692971">Chrome potrzebuje uprawnień dostępu do aparatu i mikrofonu na tej stronie.</translation> <translation id="6697947395630195233">Chrome musi mieć dostęp do Twojej lokalizacji, by udostępnić ją tej stronie.</translation> <translation id="7134415045456331657">Aby utworzyć mapę 3D Twojego otoczenia, Chrome potrzebuje uprawnień dostępu do kamery.</translation> -<translation id="7681341492080683492">Nad <ph name="APP_NAME" /> wyświetla się inna aplikacja</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_pt-BR.xtb b/components/permissions/android/translations/permissions_android_strings_pt-BR.xtb index 2ab21c98..bfb54a59 100644 --- a/components/permissions/android/translations/permissions_android_strings_pt-BR.xtb +++ b/components/permissions/android/translations/permissions_android_strings_pt-BR.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="pt-BR"> <translation id="2359808026110333948">Continuar</translation> <translation id="2416359993254398973">O Chrome precisa de permissão para este site acessar sua câmera.</translation> -<translation id="4955546094786399712">Para mudar a permissão deste site, feche o outro app e tente novamente.\n\nSe não for possível fechá-lo, desative a permissão "Sobrepor a outros apps" nas configurações do Android.</translation> <translation id="557283862590186398">O Chrome precisa de permissão para este site acessar seu microfone.</translation> <translation id="5860491529813859533">Ativar</translation> <translation id="6092062101542170135">Para continuar, ative a NFC nas configurações do Android</translation> <translation id="6393863479814692971">O Chrome precisa de permissão para este site acessar sua câmera e seu microfone.</translation> <translation id="6697947395630195233">O Chrome precisa acessar sua localização para compartilhá-la com este site.</translation> <translation id="7134415045456331657">O Chrome precisa de permissão para acessar sua câmera e criar um mapa 3D dos arredores.</translation> -<translation id="7681341492080683492">Outro app está sendo exibido sobre <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_pt-PT.xtb b/components/permissions/android/translations/permissions_android_strings_pt-PT.xtb index 6d8eb5c4..9a7fa06f 100644 --- a/components/permissions/android/translations/permissions_android_strings_pt-PT.xtb +++ b/components/permissions/android/translations/permissions_android_strings_pt-PT.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="pt-PT"> <translation id="2359808026110333948">Continuar</translation> <translation id="2416359993254398973">O Chrome necessita de autorização de acesso à câmara para este site.</translation> -<translation id="4955546094786399712">Para alterar a autorização para este site, feche a outra app e tente novamente.\n\nSe não conseguir fechar a app, desative a autorização da app para "Sobrepor-se a outras apps" nas definições do Android.</translation> <translation id="557283862590186398">O Chrome necessita de autorização de acesso ao microfone para este site.</translation> <translation id="5860491529813859533">Ativar</translation> <translation id="6092062101542170135">Para continuar, ative o NFC nas definições do Android.</translation> <translation id="6393863479814692971">O Chrome necessita de autorização de acesso à câmara e ao microfone para este site.</translation> <translation id="6697947395630195233">O Chrome precisa de acesso à sua localização para a partilhar com este site.</translation> <translation id="7134415045456331657">O Chrome necessita de autorização de acesso à câmara para criar um mapa 3D do ambiente à sua volta.</translation> -<translation id="7681341492080683492">Outra app está a sobrepor-se a <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_ro.xtb b/components/permissions/android/translations/permissions_android_strings_ro.xtb index adf237b..0f3b46d 100644 --- a/components/permissions/android/translations/permissions_android_strings_ro.xtb +++ b/components/permissions/android/translations/permissions_android_strings_ro.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="ro"> <translation id="2359808026110333948">Continuă</translation> <translation id="2416359993254398973">Chrome are nevoie de permisiune ca să acceseze camera foto pentru acest site.</translation> -<translation id="4955546094786399712">Ca să schimbi permisiunea pentru acest site, închide cealaltă aplicație și încearcă din nou.\n\nDacă nu poți închide aplicația, dezactivează permisiunea „Afișare peste alte aplicații” a aplicației din setările Android.</translation> <translation id="557283862590186398">Chrome are nevoie de permisiune ca să acceseze microfonul pentru acest site.</translation> <translation id="5860491529813859533">Activează</translation> <translation id="6092062101542170135">Pentru a continua, activează NFC în setările Android</translation> <translation id="6393863479814692971">Chrome are nevoie de permisiune ca să acceseze camera foto și microfonul pentru acest site.</translation> <translation id="6697947395630195233">Chrome are nevoie de acces la locația ta ca să permită accesul la locație pentru acest site.</translation> <translation id="7134415045456331657">Chrome are nevoie de permisiunea de a accesa camera foto pentru a crea o hartă 3D a lucrurilor din jurul tău.</translation> -<translation id="7681341492080683492">O altă aplicație se afișează peste <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_ru.xtb b/components/permissions/android/translations/permissions_android_strings_ru.xtb index b8c47a37..f6351434 100644 --- a/components/permissions/android/translations/permissions_android_strings_ru.xtb +++ b/components/permissions/android/translations/permissions_android_strings_ru.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="ru"> <translation id="2359808026110333948">Продолжить</translation> <translation id="2416359993254398973">Для этого сайта Chrome запрашивает разрешение на доступ к камере.</translation> -<translation id="4955546094786399712">Чтобы изменить разрешение для этого сайта, закройте другое приложение и повторите попытку.\n\nЕсли приложение закрыть нельзя, отключите для него разрешение "Поверх других приложений" в настройках Android.</translation> <translation id="557283862590186398">Для этого сайта Chrome запрашивает разрешение на доступ к микрофону.</translation> <translation id="5860491529813859533">Включить</translation> <translation id="6092062101542170135">Чтобы продолжить, включите NFC в настройках Android.</translation> <translation id="6393863479814692971">Для этого сайта Chrome запрашивает разрешение на доступ к камере и микрофону.</translation> <translation id="6697947395630195233">Для этого сайта Chrome запрашивает доступ к данным о вашем местоположении.</translation> <translation id="7134415045456331657">Chrome запрашивает доступ к камере, чтобы создавать 3D-карты места, в котором вы находитесь.</translation> -<translation id="7681341492080683492">Поверх приложения <ph name="APP_NAME" /> располагается другое приложение</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_si.xtb b/components/permissions/android/translations/permissions_android_strings_si.xtb index 4d6b7d9..476861a3 100644 --- a/components/permissions/android/translations/permissions_android_strings_si.xtb +++ b/components/permissions/android/translations/permissions_android_strings_si.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="si"> <translation id="2359808026110333948">කරගෙන යන්න</translation> <translation id="2416359993254398973">Chrome හට මෙම අඩවිය සදහා ඔබේ කැමරාවට ප්රවේශ වීමට අවසර අවශ්යයි.</translation> -<translation id="4955546094786399712">මෙම අඩවිය සඳහා අවසර වෙනස් කිරීමට, අනෙක් යෙදුම වසා නැවත උත්සාහ කරන්න.\n\nඔබට යෙදුම වැසීමට නොහැකි නම්, Android සැකසීම් හි "වෙනත් යෙදුම් මතින් දර්ශනය කරන්න" සඳහා යෙදුමේ අවසර ක්රියාවිරහිත කරන්න.</translation> <translation id="557283862590186398">Chrome හට මෙම අඩවිය සදහා ඔබේ මයික්රෆෝනයට ප්රවේශ වීමට අවසර අවශ්යයි.</translation> <translation id="5860491529813859533">ක්රියාත්මක කරන්න</translation> <translation id="6092062101542170135">ඉදිරියට යාමට Android සැකසීම් තුළ NFC සක්රීය කරන්න</translation> <translation id="6393863479814692971">Chrome හට මෙම අඩවිය සදහා ඔබේ කැමරාවට සහ මයික්රෆෝනයට ප්රවේශ වීමට අවසර අවශ්යයි.</translation> <translation id="6697947395630195233">Chrome හට මෙම අඩවිය සමඟ ඔබේ ස්ථානය බෙදා ගැනීමට ඔබේ ස්ථානයට ප්රවේශය අවශ්යයි.</translation> <translation id="7134415045456331657">Chrome හට ඔබේ වටපිටාවේ ත්රිමාන සිතියමක් සෑදීමට ඔබේ කැමරාවට ප්රවේශ වීමට අවසර අවශ්යයි.</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" /> මතින් වෙනත් යෙදුමක් දර්ශනය කෙරේ</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_sk.xtb b/components/permissions/android/translations/permissions_android_strings_sk.xtb index c29d281..053b3ce 100644 --- a/components/permissions/android/translations/permissions_android_strings_sk.xtb +++ b/components/permissions/android/translations/permissions_android_strings_sk.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="sk"> <translation id="2359808026110333948">Pokračovať</translation> <translation id="2416359993254398973">Chrome potrebuje povolenie pre tento web na prístup k vášmu fotoaparátu.</translation> -<translation id="4955546094786399712">Ak chcete zmeniť povolenie pre tento web, zavrite druhú aplikáciu a skúste to znova.\n\nAk aplikáciu nemôžete zavrieť, vypnite príslušnej aplikácii povolenie „Zobrazenie cez iné aplikácie“ v nastaveniach Androidu.</translation> <translation id="557283862590186398">Chrome potrebuje povolenie pre tento web na prístup k vášmu mikrofónu.</translation> <translation id="5860491529813859533">Zapnúť</translation> <translation id="6092062101542170135">Ak chcete pokračovať, zapnite NFC v nastaveniach Androidu</translation> <translation id="6393863479814692971">Chrome potrebuje povolenie pre tento web na prístup k vášmu fotoaparátu a mikrofónu.</translation> <translation id="6697947395630195233">Chrome potrebuje prístup k vašej polohe, aby ju mohol zdieľať s týmto webom.</translation> <translation id="7134415045456331657">Chrome potrebuje povolenie použiť fotoaparát, aby mohol vytvoriť 3D mapu vášho okolia</translation> -<translation id="7681341492080683492">Cez aplikáciu <ph name="APP_NAME" /> sa zobrazuje ďalšia aplikácia</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_sl.xtb b/components/permissions/android/translations/permissions_android_strings_sl.xtb index 4cec506..803baac5 100644 --- a/components/permissions/android/translations/permissions_android_strings_sl.xtb +++ b/components/permissions/android/translations/permissions_android_strings_sl.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="sl"> <translation id="2359808026110333948">Naprej</translation> <translation id="2416359993254398973">Chrome potrebuje dovoljenje za dostop do fotoaparata za to spletno mesto.</translation> -<translation id="4955546094786399712">Če želite spremeniti dovoljenje za to spletno mesto, zaprite drugo aplikacijo.\n\nČe aplikacije ni mogoče zapreti, v nastavitvah za Android aplikaciji onemogočite dovoljenje za »Prekrivanje drugih aplikacij«.</translation> <translation id="557283862590186398">Chrome potrebuje dovoljenje za dostop do mikrofona za to spletno mesto.</translation> <translation id="5860491529813859533">Vklopi</translation> <translation id="6092062101542170135">Če želite nadaljevati, v nastavitvah za Android vklopite tehnologijo NFC</translation> <translation id="6393863479814692971">Chrome potrebuje dovoljenje za dostop do fotoaparata in mikrofona za to spletno mesto.</translation> <translation id="6697947395630195233">Chrome potrebuje dostop do vaše lokacije, da jo bo lahko delil s tem spletnim mestom.</translation> <translation id="7134415045456331657">Chrome potrebuje dovoljenje za dostop do fotoaparata zaradi ustvarjanja tridimenzionalnega zemljevida okolice.</translation> -<translation id="7681341492080683492">Prek aplikacije <ph name="APP_NAME" /> je prikazana druga aplikacija</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_sq.xtb b/components/permissions/android/translations/permissions_android_strings_sq.xtb index 79859848..bd560711 100644 --- a/components/permissions/android/translations/permissions_android_strings_sq.xtb +++ b/components/permissions/android/translations/permissions_android_strings_sq.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="sq"> <translation id="2359808026110333948">Vazhdo</translation> <translation id="2416359993254398973">Chrome ka nevojë për leje për t'u qasur te kamera jote për këtë sajt.</translation> -<translation id="4955546094786399712">Për të ndryshuar lejen për këtë sajt, mbylle aplikacionin tjetër dhe provo përsëri.\n\nNëse nuk mund ta mbyllësh aplikacionin, çaktivizoje lejen e aplikacionit te "Shfaq mbi aplikacionet e tjera" te cilësimet e Android.</translation> <translation id="557283862590186398">Chrome ka nevojë për leje për t'u qasur te mikrofoni yt për këtë sajt.</translation> <translation id="5860491529813859533">Aktivizo</translation> <translation id="6092062101542170135">Për të vazhduar, aktivizo NFC-në te cilësimet e Android</translation> <translation id="6393863479814692971">Chrome ka nevojë për leje për t'u qasur te kamera dhe mikrofoni yt për këtë sajt.</translation> <translation id="6697947395630195233">Chrome ka nevojë për qasje te vendndodhja jote për të ndarë vendndodhjen me këtë sajt.</translation> <translation id="7134415045456331657">Chrome ka nevojë për leje për t'u qasur te kamera jote për të krijuar një hartë 3D të ambientit tënd rrethues.</translation> -<translation id="7681341492080683492">Një aplikacion tjetër po shfaqet mbi <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_sr-Latn.xtb b/components/permissions/android/translations/permissions_android_strings_sr-Latn.xtb index 8507b7a..9bddb62b 100644 --- a/components/permissions/android/translations/permissions_android_strings_sr-Latn.xtb +++ b/components/permissions/android/translations/permissions_android_strings_sr-Latn.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="sr-Latn"> <translation id="2359808026110333948">Nastavite</translation> <translation id="2416359993254398973">Chrome traži dozvolu da pristupi kameri za ovaj sajt.</translation> -<translation id="4955546094786399712">Da biste promenili dozvolu za ovaj sajt, zatvorite drugu aplikaciju i probajte ponovo.\n\nAko ne možete da zatvorite tu aplikaciju, isključite njenu dozvolu „Prikaz preko drugih aplikacija“ u Android podešavanjima.</translation> <translation id="557283862590186398">Chrome traži dozvolu da pristupi mikrofonu za ovaj sajt.</translation> <translation id="5860491529813859533">Uključi</translation> <translation id="6092062101542170135">Da biste nastavili, uključite NFC u Android podešavanjima</translation> <translation id="6393863479814692971">Chrome traži dozvolu da pristupi kameri i mikrofonu za ovaj sajt.</translation> <translation id="6697947395630195233">Chrome traži pristup vašoj lokaciji da biste je delili sa ovim sajtom.</translation> <translation id="7134415045456331657">Chrome traži dozvolu da pristupi kameri da bi napravio 3D mapu okruženja.</translation> -<translation id="7681341492080683492">Jedna druga aplikacija se prikazuje preko aplikacije <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_sr.xtb b/components/permissions/android/translations/permissions_android_strings_sr.xtb index 7ac311e..116d973 100644 --- a/components/permissions/android/translations/permissions_android_strings_sr.xtb +++ b/components/permissions/android/translations/permissions_android_strings_sr.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="sr"> <translation id="2359808026110333948">Наставите</translation> <translation id="2416359993254398973">Chrome тражи дозволу да приступи камери за овај сајт.</translation> -<translation id="4955546094786399712">Да бисте променили дозволу за овај сајт, затворите другу апликацију и пробајте поново.\n\nАко не можете да затворите ту апликацију, искључите њену дозволу „Приказ преко других апликација“ у Android подешавањима.</translation> <translation id="557283862590186398">Chrome тражи дозволу да приступи микрофону за овај сајт.</translation> <translation id="5860491529813859533">Укључи</translation> <translation id="6092062101542170135">Да бисте наставили, укључите NFC у Android подешавањима</translation> <translation id="6393863479814692971">Chrome тражи дозволу да приступи камери и микрофону за овај сајт.</translation> <translation id="6697947395630195233">Chrome тражи приступ вашој локацији да бисте је делили са овим сајтом.</translation> <translation id="7134415045456331657">Chrome тражи дозволу да приступи камери да би направио 3D мапу окружења.</translation> -<translation id="7681341492080683492">Једна друга апликација се приказује преко апликације <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_sv.xtb b/components/permissions/android/translations/permissions_android_strings_sv.xtb index 7c2733ed..e527584 100644 --- a/components/permissions/android/translations/permissions_android_strings_sv.xtb +++ b/components/permissions/android/translations/permissions_android_strings_sv.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="sv"> <translation id="2359808026110333948">Fortsätt</translation> <translation id="2416359993254398973">Du behöver ge Chrome behörighet att använda kameran på den här webbplatsen.</translation> -<translation id="4955546094786399712">Om du vill ändra behörighet för den här webbplatsen stänger du den andra appen och försöker igen.\n\nOm det inte går att stänga appen inaktiverar du appens behörighet att ”Visa ovanpå andra appar” i inställningarna för Android.</translation> <translation id="557283862590186398">Du behöver ge Chrome behörighet att använda mikrofonen på den här webbplatsen.</translation> <translation id="5860491529813859533">Aktivera</translation> <translation id="6092062101542170135">Fortsätt genom att aktivera NFC i Android-inställningarna</translation> <translation id="6393863479814692971">Du behöver ge Chrome behörighet att använda kameran och mikrofonen på den här webbplatsen.</translation> <translation id="6697947395630195233">Du behöver ge Chrome åtkomstbehörighet till din plats om den ska kunna delas med webbplatsen.</translation> <translation id="7134415045456331657">Du behöver ge Chrome behörighet att använda kameran om du vill skapa en 3D-karta över dina omgivningar.</translation> -<translation id="7681341492080683492">En annan app visas över <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_sw.xtb b/components/permissions/android/translations/permissions_android_strings_sw.xtb index ff70f820..0b55120 100644 --- a/components/permissions/android/translations/permissions_android_strings_sw.xtb +++ b/components/permissions/android/translations/permissions_android_strings_sw.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="sw"> <translation id="2359808026110333948">Endelea</translation> <translation id="2416359993254398973">Ruhusu Chrome ifikie kamera yako ya tovuti hii.</translation> -<translation id="4955546094786399712">Ili ubadilishe ruhusa ya tovuti hii, funga programu ile nyingine na ujaribu tena.\n\nIwapo huwezi kufunga programu, zima ruhusa ya programu ya “Onyesha juu ya programu nyingine” katika mipangilio ya Android.</translation> <translation id="557283862590186398">Chrome inahitaji ruhusa ya kufikia maikrofoni yako kwa ajili ya tovuti hii.</translation> <translation id="5860491529813859533">Washa</translation> <translation id="6092062101542170135">Ili uendelee, washa NFC katika mipangilio ya Android</translation> <translation id="6393863479814692971">Chrome inahitaji ruhusa ya kufikia kamera yako kwa ajili ya tovuti hii.</translation> <translation id="6697947395630195233">Chrome inahitaji kufikia maelezo ya mahali ulipo ili kuyashiriki na tovuti hii.</translation> <translation id="7134415045456331657">Chrome inahitaji ruhusa ya kufikia kamera yako ili iunde ramani ya 3D ya mazingira yako.</translation> -<translation id="7681341492080683492">Programu nyingine inaonyeshwa juu ya <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_ta.xtb b/components/permissions/android/translations/permissions_android_strings_ta.xtb index 5e6104a..19cf4e2 100644 --- a/components/permissions/android/translations/permissions_android_strings_ta.xtb +++ b/components/permissions/android/translations/permissions_android_strings_ta.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="ta"> <translation id="2359808026110333948">தொடர்க</translation> <translation id="2416359993254398973">இந்தத் தளத்திற்காகக் கேமராவை அணுக, Chromeமுக்கு அனுமதி தேவை.</translation> -<translation id="4955546094786399712">இந்தத் தளத்திற்கான அனுமதியை மாற்ற, மற்ற ஆப்ஸை மூடிவிட்டு மீண்டும் முயலவும்.\n\nஆப்ஸை மூட முடியவில்லை எனில் Android அமைப்புகளுக்குச் சென்று ”பிற ஆப்ஸின் மீது தோன்றுவதற்கான” ஆப்ஸின் அனுமதியை முடக்கவும்.</translation> <translation id="557283862590186398">இந்தத் தளத்திற்காக மைக்ரோஃபோனை அணுக, Chromeமுக்கு அனுமதி தேவை.</translation> <translation id="5860491529813859533">இயக்கு</translation> <translation id="6092062101542170135">தொடர்வதற்கு Android அமைப்புகளில் NFCயை இயக்கவும்</translation> <translation id="6393863479814692971">இந்தத் தளத்திற்காகக் கேமராவையும் மைக்ரோஃபோனையும் அணுக, Chromeமுக்கு அனுமதி தேவை.</translation> <translation id="6697947395630195233">இந்தத் தளத்துடன் இருப்பிடத்தைப் பகிர, Chromeமுக்கு உங்கள் இருப்பிடத்திற்கான அணுகல் தேவை.</translation> <translation id="7134415045456331657">உங்களைச் சுற்றியுள்ள இடங்களின் 3D வரைபடத்தை உருவாக்க, Chromeமுக்கு உங்கள் கேமராவை அணுக அனுமதி தேவை.</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" /> ஆப்ஸ் மீது மற்றொரு ஆப்ஸ் காட்டப்படுகிறது</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_te.xtb b/components/permissions/android/translations/permissions_android_strings_te.xtb index 323c8a8..85b4a60f 100644 --- a/components/permissions/android/translations/permissions_android_strings_te.xtb +++ b/components/permissions/android/translations/permissions_android_strings_te.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="te"> <translation id="2359808026110333948">కొనసాగించు</translation> <translation id="2416359993254398973">ఈ సైట్ కోసం మీ కెమెరాను యాక్సెస్ చేయడానికి Chromeకు అనుమతి అవసరం.</translation> -<translation id="4955546094786399712">ఈ సైట్ కోసం అనుమతిని మార్చడానికి, ఇతర యాప్ను మూసివేసి, మళ్లీ ట్రై చేయండి.\n\nమీరు యాప్ను మూసివేయలేకపోతే, Android సెట్టింగ్లలో “ఇతర యాప్లపై ప్రదర్శించు” అనే యాప్ అనుమతిని ఆఫ్ చేయండి.</translation> <translation id="557283862590186398">ఈ సైట్ కోసం మీ మైక్రోఫోన్ను యాక్సెస్ చేయడానికి Chromeకు అనుమతి అవసరం.</translation> <translation id="5860491529813859533">ఆన్ చేయండి</translation> <translation id="6092062101542170135">కొనసాగించడానికి, Android సెట్టింగ్లలో NFCని ఆన్ చేయండి</translation> <translation id="6393863479814692971">ఈ సైట్ కోసం మీ కెమెరా మరియు మైక్రోఫోన్ను యాక్సెస్ చేయడానికి Chromeకు అనుమతి అవసరం.</translation> <translation id="6697947395630195233">ఈ సైట్తో మీ స్థానాన్ని షేర్ చేయడానికి Chromeకు మీ స్థాన యాక్సెస్ అవసరం.</translation> <translation id="7134415045456331657">మీ పరిసరాల 3D మ్యాప్ను సృష్టించడానికి Chromeకు మీ కెమెరాను యాక్సెస్ చేసే అనుమతి కావాలి.</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" />పై మరొక యాప్ ప్రదర్శించబడుతోంది</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_th.xtb b/components/permissions/android/translations/permissions_android_strings_th.xtb index ae7cde9..4b0a517 100644 --- a/components/permissions/android/translations/permissions_android_strings_th.xtb +++ b/components/permissions/android/translations/permissions_android_strings_th.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="th"> <translation id="2359808026110333948">ต่อไป</translation> <translation id="2416359993254398973">Chrome ต้องการสิทธิ์เข้าถึงกล้องถ่ายรูปของคุณสำหรับไซต์นี้</translation> -<translation id="4955546094786399712">หากต้องการเปลี่ยนแปลงสิทธิ์สำหรับเว็บไซต์นี้ ให้ปิดอีกแอปหนึ่งแล้วลองอีกครั้ง\n\nหากปิดแอปดังกล่าวไม่ได้ ให้ปิดสิทธิ์ในการ "แสดงทับแอปอื่นๆ" ของแอปนั้นในการตั้งค่า Android</translation> <translation id="557283862590186398">Chrome ต้องการสิทธิ์เข้าถึงไมโครโฟนของคุณสำหรับไซต์นี้</translation> <translation id="5860491529813859533">เปิด</translation> <translation id="6092062101542170135">หากต้องการดำเนินการต่อ ให้เปิด NFC ในการตั้งค่าของ Android</translation> <translation id="6393863479814692971">Chrome ต้องการสิทธิ์เข้าถึงไมโครโฟนและกล้องถ่ายรูปของคุณสำหรับไซต์นี้</translation> <translation id="6697947395630195233">Chrome ต้องการสิทธิ์เข้าถึงตำแหน่งของคุณเพื่อแชร์ตำแหน่งกับไซต์นี้</translation> <translation id="7134415045456331657">Chrome ต้องการสิทธิ์เข้าถึงกล้องเพื่อสร้างแผนที่ 3 มิติของสิ่งที่อยู่รอบตัวคุณ</translation> -<translation id="7681341492080683492">อีกแอปหนึ่งกำลังแสดงทับ <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_tr.xtb b/components/permissions/android/translations/permissions_android_strings_tr.xtb index 4ee1bbf..d415b39 100644 --- a/components/permissions/android/translations/permissions_android_strings_tr.xtb +++ b/components/permissions/android/translations/permissions_android_strings_tr.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="tr"> <translation id="2359808026110333948">Devam et</translation> <translation id="2416359993254398973">Chrome'un bu sitede kameranıza erişmesi için izin gerekiyor.</translation> -<translation id="4955546094786399712">Bu siteyle ilgili izni değiştirmek için diğer uygulamayı kapatıp tekrar deneyin.\n\nUygulamayı kapatamıyorsanız Android ayarlarında uygulamanın "Diğer uygulamaların üzerinde göster" iznini kapatın.</translation> <translation id="557283862590186398">Chrome'un bu sitede mikrofonunuza erişmesi için izin gerekiyor.</translation> <translation id="5860491529813859533">Etkinleştir</translation> <translation id="6092062101542170135">Devam etmek için Android ayarlarında NFC'yi açın</translation> <translation id="6393863479814692971">Chrome'un bu sitede kameranıza ve mikrofonunuza erişmesi için izin gerekiyor.</translation> <translation id="6697947395630195233">Konumunuzu bu siteyle paylaşabilmek için Chrome'un konum bilgilerinize erişmesi gerekiyor.</translation> <translation id="7134415045456331657">Çevrenizin 3D haritasını oluşturmak için Chrome'un kameranıza erişim iznine ihtiyacı var.</translation> -<translation id="7681341492080683492">Başka bir uygulama <ph name="APP_NAME" /> uygulamasının üzerinde gösteriliyor</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_uk.xtb b/components/permissions/android/translations/permissions_android_strings_uk.xtb index 3082781..2703a20 100644 --- a/components/permissions/android/translations/permissions_android_strings_uk.xtb +++ b/components/permissions/android/translations/permissions_android_strings_uk.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="uk"> <translation id="2359808026110333948">Продовжити</translation> <translation id="2416359993254398973">Chrome потрібні дозволи, щоб використовувати камеру на цьому сайті.</translation> -<translation id="4955546094786399712">Щоб змінити дозвіл для цього сайту, закрийте інший додаток і повторіть спробу.\n\nЯкщо вам не вдається закрити додаток, вимкніть для нього дозвіл "Показувати поверх додатків" у налаштуваннях Android.</translation> <translation id="557283862590186398">Chrome потрібні дозволи, щоб використовувати мікрофон на цьому сайті.</translation> <translation id="5860491529813859533">Увімкнути</translation> <translation id="6092062101542170135">Щоб продовжити, увімкніть NFC в налаштуваннях Android</translation> <translation id="6393863479814692971">Chrome потрібні дозволи, щоб використовувати камеру та мікрофон на цьому сайті.</translation> <translation id="6697947395630195233">Chrome потрібен доступ до місцезнаходження, щоб повідомляти ваші геодані цьому сайту.</translation> <translation id="7134415045456331657">Chrome потрібен дозвіл на використання камери, щоб створити 3D-карту вашого оточення.</translation> -<translation id="7681341492080683492">Поверх додатка <ph name="APP_NAME" /> відображається інший додаток</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_ur.xtb b/components/permissions/android/translations/permissions_android_strings_ur.xtb index 4c39fb15..89152acf 100644 --- a/components/permissions/android/translations/permissions_android_strings_ur.xtb +++ b/components/permissions/android/translations/permissions_android_strings_ur.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="ur"> <translation id="2359808026110333948">جاری رکھیں</translation> <translation id="2416359993254398973">Chrome کو اس سائٹ کیلئے آپ کے کیمرا تک رسائی کی اجازتیں درکار ہیں۔</translation> -<translation id="4955546094786399712">اس سائٹ کیلئے اجازت تبدیل کرنے کے لئے، دوسری ایپ کو بند کریں اور دوبارہ کوشش کریں۔\n\nاگر آپ ایپ کو بند نہیں کر سکتے ہیں تو Android کی ترتیبات میں "دیگر ایپس پر ڈسپلے کریں" ایپ کی اجازت کو آف کریں۔</translation> <translation id="557283862590186398">Chrome کو اس سائٹ کیلئے آپ کے مائیکروفون تک رسائی کی اجازتیں درکار ہیں۔</translation> <translation id="5860491529813859533">آن کریں</translation> <translation id="6092062101542170135">جاری رکھنے کے لیے، Android کی ترتیبات میں NFC آن کریں</translation> <translation id="6393863479814692971">Chrome کو اس سائٹ کیلئے آپ کے مائیکروفون اور کیمرا تک رسائی کی اجازتیں درکار ہیں۔</translation> <translation id="6697947395630195233">Chrome کو اس سائٹ کے ساتھ آپ کے مقام کا اشتراک کرنے کیلئے آپ کے مقام تک رسائی درکار ہے۔</translation> <translation id="7134415045456331657">اپنے اطراف کا 3D نقشہ تخلیق کرنے کی خاطر Chrome کو آپ کے کیمرے تک رسائی کی اجازت درکار ہے۔</translation> -<translation id="7681341492080683492">دوسری ایپ <ph name="APP_NAME" /> پر ڈسپلے ہو رہی ہے</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_uz.xtb b/components/permissions/android/translations/permissions_android_strings_uz.xtb index bb1cf56d..d8d23299 100644 --- a/components/permissions/android/translations/permissions_android_strings_uz.xtb +++ b/components/permissions/android/translations/permissions_android_strings_uz.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="uz"> <translation id="2359808026110333948">Davom etish</translation> <translation id="2416359993254398973">Bu sayt kamerangizdan foydalanishi uchun Chrome brauzeriga ruxsat berishingiz lozim.</translation> -<translation id="4955546094786399712">Bu sayt ruxsatlarini oʻzgartirish uchun boshqa ilovani yoping va qaytadan urining.\n\nAgar ilova yopilmasa, Android sozlamalari orqali ilovaning “Boshqa ilovalar ustidan ochilish” ruxsatini faolsizlantiring.</translation> <translation id="557283862590186398">Bu sayt mikrofoningizdan foydalanishi uchun Chrome brauzeriga ruxsat berishingiz lozim.</translation> <translation id="5860491529813859533">Yoqish</translation> <translation id="6092062101542170135">Davom etish uchun Android sozlamalari orqali NFC funksiyasini yoqing</translation> <translation id="6393863479814692971">Bu sayt kamera va mikrofoningizdan foydalanishi uchun Chrome brauzeriga ruxsat berishingiz lozim.</translation> <translation id="6697947395630195233">Bu sayt manzilingizdan foydalanishi uchun Chrome brauzeriga ruxsat berishingiz lozim.</translation> <translation id="7134415045456331657">Chrome atrofingiz 3D xaritasini yaratishi uchun unga kamera ruxsati zarur.</translation> -<translation id="7681341492080683492"><ph name="APP_NAME" /> ustidan boshqa ilova ochilgan</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_vi.xtb b/components/permissions/android/translations/permissions_android_strings_vi.xtb index 10a0c95..c8ae511 100644 --- a/components/permissions/android/translations/permissions_android_strings_vi.xtb +++ b/components/permissions/android/translations/permissions_android_strings_vi.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="vi"> <translation id="2359808026110333948">Tiếp tục</translation> <translation id="2416359993254398973">Chrome cần có quyền truy cập máy ảnh của bạn cho trang web này.</translation> -<translation id="4955546094786399712">Để thay đổi quyền của trang web này, hãy đóng ứng dụng khác rồi thử lại.\n\nNếu bạn không thể đóng ứng dụng, hãy tắt quyền "Hiển thị trên các ứng dụng khác" của ứng dụng đó trong phần cài đặt Android.</translation> <translation id="557283862590186398">Chrome cần có quyền truy cập micrô của bạn cho trang web này.</translation> <translation id="5860491529813859533">Bật</translation> <translation id="6092062101542170135">Để tiếp tục, hãy bật NFC trong phần cài đặt Android</translation> <translation id="6393863479814692971">Chrome cần có quyền truy cập máy ảnh và micrô của bạn cho trang web này.</translation> <translation id="6697947395630195233">Chrome cần truy cập vị trí của bạn để chia sẻ thông tin vị trí với trang web này.</translation> <translation id="7134415045456331657">Chromium cần có quyền dùng máy ảnh của bạn để tạo bản đồ 3D về các khu vực xung quanh bạn.</translation> -<translation id="7681341492080683492">Một ứng dụng khác đang hiển thị trên <ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_zh-CN.xtb b/components/permissions/android/translations/permissions_android_strings_zh-CN.xtb index 11c5810..ae59eba2 100644 --- a/components/permissions/android/translations/permissions_android_strings_zh-CN.xtb +++ b/components/permissions/android/translations/permissions_android_strings_zh-CN.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="zh-CN"> <translation id="2359808026110333948">继续</translation> <translation id="2416359993254398973">Chrome 需要获得相应权限,才能允许此网站使用您的摄像头。</translation> -<translation id="4955546094786399712">若要为此网站更改权限,请关闭另一个应用并重试。\n\n如果您无法关闭该应用,请在 Android 设置中关闭该应用的“显示在其他应用的上层”权限。</translation> <translation id="557283862590186398">Chrome 需要获得相应权限,才能允许此网站使用您的麦克风。</translation> <translation id="5860491529813859533">启用</translation> <translation id="6092062101542170135">要继续,请在 Android 设置中开启 NFC</translation> <translation id="6393863479814692971">Chrome 需要获得相应权限,才能允许此网站使用您的摄像头和麦克风。</translation> <translation id="6697947395630195233">Chrome 需要获得位置权限,才能将您的位置信息共享给此网站。</translation> <translation id="7134415045456331657">Chrome 需要获得相应权限,才能使用您的摄像头为您的周边环境创建 3D 地图。</translation> -<translation id="7681341492080683492">另一个应用正显示在 <ph name="APP_NAME" /> 的上层</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_zh-HK.xtb b/components/permissions/android/translations/permissions_android_strings_zh-HK.xtb index c085d3c..008d670 100644 --- a/components/permissions/android/translations/permissions_android_strings_zh-HK.xtb +++ b/components/permissions/android/translations/permissions_android_strings_zh-HK.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="zh-HK"> <translation id="2359808026110333948">繼續</translation> <translation id="2416359993254398973">Chrome 需要獲取權限,才能讓這個網站存取您的相機。</translation> -<translation id="4955546094786399712">如要變更此網站的權限,請關閉其他應用程式,然後再試一次。\n\n如您無法關閉該應用程式,請在 Android 設定關閉該應用程式的「透過其他應用程式顯示內容」權限。</translation> <translation id="557283862590186398">Chrome 需要獲取權限,才能讓這個網站存取您的麥克風。</translation> <translation id="5860491529813859533">開啟</translation> <translation id="6092062101542170135">在 Android 設定中開啟 NFC 即可繼續</translation> <translation id="6393863479814692971">Chrome 需要獲取權限,才能讓這個網站存取您的相機和麥克風。</translation> <translation id="6697947395630195233">Chrome 需要位置資訊存取權,才能與這個網站分享您的位置資訊。</translation> <translation id="7134415045456331657">Chrome 需要取得權限,才能存取相機以建立您身處環境的 3D 地圖。</translation> -<translation id="7681341492080683492">有其他應用程式目前透過 <ph name="APP_NAME" /> 顯示內容</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_zh-TW.xtb b/components/permissions/android/translations/permissions_android_strings_zh-TW.xtb index 2c033c602..4def248c 100644 --- a/components/permissions/android/translations/permissions_android_strings_zh-TW.xtb +++ b/components/permissions/android/translations/permissions_android_strings_zh-TW.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="zh-TW"> <translation id="2359808026110333948">繼續</translation> <translation id="2416359993254398973">Chrome 需要相關權限,才能讓這個網站使用你的攝影機。</translation> -<translation id="4955546094786399712">如要變更這個網站的權限,請關閉其他應用程式,然後再試一次。\n\n如果無法關閉該應用程式,請在 Android 設定中停用該應用程式的「顯示在其他應用程式上層」權限。</translation> <translation id="557283862590186398">Chrome 需要相關權限,才能讓這個網站使用你的麥克風。</translation> <translation id="5860491529813859533">啟用</translation> <translation id="6092062101542170135">如要繼續,請開啟 Android 設定中的 NFC 功能</translation> <translation id="6393863479814692971">Chrome 需要相關權限,才能讓這個網站使用你的攝影機和麥克風。</translation> <translation id="6697947395630195233">Chrome 需要位置資訊存取權,才能與這個網站分享你的位置資訊。</translation> <translation id="7134415045456331657">Chrome 需要取得攝影機權限,才能根據你的周遭環境建立 3D 地圖。</translation> -<translation id="7681341492080683492">另一個應用程式目前顯示在「<ph name="APP_NAME" />」上層</translation> </translationbundle> \ No newline at end of file
diff --git a/components/permissions/android/translations/permissions_android_strings_zu.xtb b/components/permissions/android/translations/permissions_android_strings_zu.xtb index 925f5bd4..1f7e0e6 100644 --- a/components/permissions/android/translations/permissions_android_strings_zu.xtb +++ b/components/permissions/android/translations/permissions_android_strings_zu.xtb
@@ -3,12 +3,10 @@ <translationbundle lang="zu"> <translation id="2359808026110333948">Qhubeka</translation> <translation id="2416359993254398973">I-Chrome idinga imvume yokufinyelela ikhamera yakho kuleli sayithi.</translation> -<translation id="4955546094786399712">Ukuze ushintshe imvume yale sayithi, vala olunye uhlelo lokusebenza bese uzama futhi.\n\nUma ungakwazi ukuvala uhlelo lokusebenza, vala imvume yohlelo lokusebenza ibe okuthi "Bonisa ngezinye izinhlelo zokusebenza" kumasethingi we-Android.</translation> <translation id="557283862590186398">I-Chrome idinga ukufinyelela imakrofoni yakho yaleli sayithi.</translation> <translation id="5860491529813859533">Vula</translation> <translation id="6092062101542170135">Ukuze uqhubeke, vula i-NFC kuzilungiselelo ze-Android</translation> <translation id="6393863479814692971">I-Chrome idinga ukufinyelela ikhamera yakho nemakrofoni yaleli sayithi.</translation> <translation id="6697947395630195233">I-Chrome idinga ukufinyelela endaweni yakho ukwabelana ngendawo yakho naleli sayithi.</translation> <translation id="7134415045456331657">I-Chrome idinga imvume yokufinyelela kwikhamera yakho ukudala imephu engu-3D yendawo yakho ekuzungezile.</translation> -<translation id="7681341492080683492">Olunye uhlelo lokusebenza lubonisa nge-<ph name="APP_NAME" /></translation> </translationbundle> \ No newline at end of file
diff --git a/components/policy/android/BUILD.gn b/components/policy/android/BUILD.gn index 5c7251c..ebd048b 100644 --- a/components/policy/android/BUILD.gn +++ b/components/policy/android/BUILD.gn
@@ -27,9 +27,6 @@ annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] sources = _jni_sources + [ - "java/src/org/chromium/policy/AppRestrictionsProvider.java", - "java/src/org/chromium/policy/CombinedPolicyProvider.java", - "java/src/org/chromium/policy/PolicyProvider.java", "java/src/org/chromium/components/policy/AbstractAppRestrictionsProvider.java", "java/src/org/chromium/components/policy/AppRestrictionsProvider.java", "java/src/org/chromium/components/policy/PolicyProvider.java",
diff --git a/components/policy/android/java/src/org/chromium/policy/AppRestrictionsProvider.java b/components/policy/android/java/src/org/chromium/policy/AppRestrictionsProvider.java deleted file mode 100644 index ab14e31..0000000 --- a/components/policy/android/java/src/org/chromium/policy/AppRestrictionsProvider.java +++ /dev/null
@@ -1,19 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.policy; - -import android.content.Context; - -/** - * Concrete app restriction provider, that uses the default android mechanism to retrieve the - * restrictions. - * TODO(zmin): Delete once the internal code is migrated. - */ -public class AppRestrictionsProvider - extends org.chromium.components.policy.AppRestrictionsProvider { - public AppRestrictionsProvider(Context context) { - super(context); - } -}
diff --git a/components/policy/android/java/src/org/chromium/policy/CombinedPolicyProvider.java b/components/policy/android/java/src/org/chromium/policy/CombinedPolicyProvider.java deleted file mode 100644 index 7294fc8..0000000 --- a/components/policy/android/java/src/org/chromium/policy/CombinedPolicyProvider.java +++ /dev/null
@@ -1,13 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.policy; - -/** - * Reads enterprise policies from one or more policy providers and plumbs them through to the policy - * subsystem. - * - * TODO(zmin): Delete once the internal code is migrated. - */ -public class CombinedPolicyProvider extends org.chromium.components.policy.CombinedPolicyProvider {}
diff --git a/components/policy/android/java/src/org/chromium/policy/PolicyProvider.java b/components/policy/android/java/src/org/chromium/policy/PolicyProvider.java deleted file mode 100644 index 1df6db7..0000000 --- a/components/policy/android/java/src/org/chromium/policy/PolicyProvider.java +++ /dev/null
@@ -1,11 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.policy; - -/** - * Base class for Policy providers. - * TODO(zmin): Delete once the internal code is migrated. - */ -public abstract class PolicyProvider extends org.chromium.components.policy.PolicyProvider {}
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb index 1a7f9dfc..b1f16aa7 100644 --- a/components/policy/resources/policy_templates_de.xtb +++ b/components/policy/resources/policy_templates_de.xtb
@@ -95,7 +95,6 @@ Wird diese Richtlinie nicht konfiguriert, können im Cache gespeicherte GPOs für maximal 25 Stunden wiederverwendet werden. Ist die Richtlinie auf 0 gesetzt, so ist die GPO-Speicherung deaktiviert. Dies erhöht die Serverlast, da GPOs bei jedem Richtlinienabruf heruntergeladen werden, auch wenn sie unverändert sind.</translation> -<translation id="1111470455889178048">Nutzeruploads und -downloads zum Scannen senden</translation> <translation id="1117462881884985156">Für die hier angegebenen Hosts umgeht <ph name="PRODUCT_NAME" /> alle Proxys. Diese Richtlinie tritt nur dann in Kraft, wenn Sie bei "Auswählen, wie Proxyserver-Einstellungen angegeben werden" die Option für manuelle Proxyeinstellungen ausgewählt haben und die Richtlinie "<ph name="PROXY_SETTINGS_POLICY_NAME" />" nicht konfiguriert wurde. @@ -926,16 +925,6 @@ Ist diese Richtlinie konfiguriert, können Nutzer den Wert nicht überschreiben. Ist sie nicht konfiguriert, ist der Datenschutzbildschirm anfangs deaktiviert, Nutzer können ihn jedoch steuern.</translation> -<translation id="2423038190900972331">Mit dieser Richtlinie legen Sie fest, wie Daten, die hochgeladen, heruntergeladen oder aus der Zwischenablage bzw. per Drag-and-drop eingefügt werden, in <ph name="PRODUCT_NAME" /> auf Verstöße gegen die Richtlinie zum Schutz von sensiblen Daten geprüft werden. - - Wenn diese Richtlinie auf "Keine" gesetzt ist, wird <ph name="PRODUCT_NAME" /> keine Inhalte auf Verstöße gegen die Richtlinie zum Schutz von sensiblen Daten prüfen. - - Ist sie auf "Inhaltscompliance von Downloads prüfen" gesetzt und der Nutzer versucht, eine Datei von einer URL herunterzuladen, die in der Richtlinie "<ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" />" enthalten ist, werden die Daten in <ph name="PRODUCT_NAME" /> auf Einhaltung von Unternehmensregeln geprüft. - - Wenn die Richtlinie auf "Inhaltscompliance von Uploads prüfen" gesetzt ist und der Nutzer versucht, eine Datei auf eine Domain hochzuladen, die nicht in der Richtlinie "<ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" />" enthalten ist, werden die hochgeladene Datei oder die Daten, die aus der Zwischenablage bzw. per Drag-and-drop eingefügt wurden, in <ph name="PRODUCT_NAME" /> auf Einhaltung von Unternehmensregeln geprüft. - - Ist sie auf "Inhaltscompliance von Uploads und Downloads prüfen" gesetzt, werden in <ph name="PRODUCT_NAME" /> die Regeln verwendet, die unter "Inhaltscompliance von Downloads prüfen" und "Inhaltscompliance von Uploads prüfen" beschrieben sind. - </translation> <translation id="2423255396068675416">Wenn die Richtlinie aktiviert oder nicht konfiguriert ist, können Nutzer <ph name="PRODUCT_CROSTINI_NAME" /> ausführen, solange <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> und <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> aktiviert sind. Ist die Richtlinie deaktiviert, ist auch <ph name="PRODUCT_CROSTINI_NAME" /> für Nutzer deaktiviert. Wenn sie deaktiviert wird, wird die Richtlinie beim Starten neuer <ph name="PRODUCT_CROSTINI_NAME" />-Container angewandt. Die bereits ausgeführten sind nicht betroffen.</translation> <translation id="2424098959650060417">Legt fest, welche Drucker aus "<ph name="BULK_PRINTERS_POLICY_NAME" />" Nutzern zur Verfügung stehen. @@ -1050,7 +1039,6 @@ Der Wert für die Richtlinie muss in Millisekunden angegeben werden. Werte müssen kleiner oder gleich dem Wert für die Inaktivitätsverzögerung sein.</translation> <translation id="2548572254685798999">Safe Browsing-Daten erfassen</translation> <translation id="2550593661567988768">Nur Simplexdruck</translation> -<translation id="2551520365302988324">Nutzeruploads zum Scannen senden</translation> <translation id="2552318891854145040">Wenn die Richtlinie konfiguriert ist, wird eine Lesezeichenliste erstellt, bei der jedes Lesezeichen ein Wörterbuch mit den Schlüsseln "<ph name="NAME" />" und "<ph name="URL_LABEL" />" ist. Diese Schlüssel enthalten den Namen und das Ziel des jeweiligen Lesezeichens. Administratoren können einen Unterordner konfigurieren, indem ein Lesezeichen ohne den Schlüssel "<ph name="URL_LABEL" />", dafür aber mit dem zusätzlichen Schlüssel "<ph name="CHILDREN" />" festgelegt wird. Dieser Schlüssel enthält wiederum eine Lesezeichenliste. Einige davon können auch Ordner sein. Chrome ergänzt unvollständige URLs, als würden sie über die Adressleiste eingegeben werden. Beispielsweise wird aus "<ph name="GOOGLE_COM" />" dann "<ph name="HTTPS_GOOGLE_COM" />". Nutzer können nicht ändern, in welchem Ordner die Lesezeichen abgelegt werden. Aber sie haben die Möglichkeit, den Ordner in der Lesezeichenleiste auszublenden. Der Standardname des Ordners für verwaltete Lesezeichen lautet "Verwaltete Lesezeichen", kann jedoch angepasst werden. Dazu muss der Richtlinie ein neues untergeordnetes Wörterbuch mit einem einfachen Schlüssel namens "<ph name="TOPLEVEL_NAME" />" hinzugefügt werden, wobei der gewünschte Ordnername der Wert ist. Verwaltete Lesezeichen werden nicht mit dem Nutzerkonto synchronisiert und können nicht von Erweiterungen geändert werden.</translation> @@ -1814,7 +1802,6 @@ Details zu <ph name="CORS" /> erhalten Sie unter <ph name="CORS_HELP_URL" />. Hinweis: Diese Richtlinie sollte ursprünglich planmäßig in <ph name="PRODUCT_NAME" />-Version 82 entfernt werden, wurde aber erst in Version 84 entfernt.</translation> -<translation id="3624515566460517364">Uploads und Downloads auf Verstöße gegen die Richtlinie zum Schutz von sensiblen Daten prüfen</translation> <translation id="3627678165642179114">Webdienst für die Rechtschreibprüfung aktivieren oder deaktivieren</translation> <translation id="3628480121685794414">Simplexdruck aktivieren</translation> <translation id="3631099945620529777">Wenn diese Richtlinie auf "false" gesetzt ist, ist die Schaltfläche "Prozess beenden" im Task-Manager deaktiviert. @@ -1966,7 +1953,6 @@ Wenn diese Richtlinie nicht konfiguriert oder eine leere Liste festgelegt ist, stehen auf verwalteten Geräten keine Modi für das schnelle Entsperren zur Verfügung.</translation> <translation id="3877517141460819966">Integrierter Zwei-Faktor-Authentifizierungsmodus</translation> -<translation id="3879196885908353077">Heruntergeladene Inhalte auf Verstöße gegen die Richtlinie zum Schutz von sensiblen Daten überprüfen</translation> <translation id="3879208481373875102">Liste der Web-Apps konfigurieren, deren Installation erzwungen wurde</translation> <translation id="388237772682176890">Da SPDY/3.1 nicht mehr unterstützt wird, wurde diese Richtlinie in M53 eingestellt und in M54 entfernt. @@ -2391,7 +2377,6 @@ Auf nicht verwalteten Geräten wird die Benachrichtigung immer angezeigt.</translation> <translation id="4510923771103268849">Nutzer hat Root-Zugriff auf Crostini-Container</translation> <translation id="4515404363392014383">Safe Browsing für vertrauenswürdige Quellen aktivieren</translation> -<translation id="4517928394515633751">Nutzerdownloads mit Safe Browsing scannen</translation> <translation id="4518251772179446575">Nachfragen, wenn eine Website den physischen Standort der Nutzer verfolgen möchte</translation> <translation id="4529868888205510667">Wenn diese Richtlinie auf "True" festgelegt ist oder keine Einstellung gewählt wird, können Nutzer ARC verwenden, es sei denn die Funktion wurde an anderer Stelle deaktiviert. Wenn die Richtlinie auf "False" festgelegt ist, können nicht verknüpfte Nutzer ARC nicht verwenden. @@ -2566,15 +2551,6 @@ Der Wert "*" in der Sperrliste gibt an, dass alle Hosts für natives Messaging gesperrt sind, sofern sie nicht ausdrücklich auf die Zulassungsliste gesetzt wurden. Wenn diese Richtlinie nicht konfiguriert ist, wird <ph name="PRODUCT_NAME" /> alle installierten Hosts für natives Messaging laden.</translation> -<translation id="4771144269610910963">Mit dieser Richtlinie können Sie den Tiefenscan von Nutzerdownloads mit Safe Browsing verwalten. Wenn sie nicht konfiguriert oder auf die Standardeinstellung "Dateien nicht scannen" festgelegt wird, werden Downloads von Nutzern nicht von Safe Browsing gescannt. - - Ist "Nutzerdownloads zum Scannen senden" festgelegt, werden die Downloads von Nutzern über das Netzwerk zum Scannen auf Malware an Safe Browsing gesendet. - - Wenn "Nutzeruploads zum Scannen senden" festgelegt ist, werden die Uploads von Nutzern über das Netzwerk zum Scannen auf Malware an Safe Browsing gesendet. - - Ist "Nutzeruploads und -downloads zum Scannen senden" festgelegt, gelten die unter "Nutzeruploads zum Scannen senden" und "Nutzerdownloads zum Scannen senden" beschriebenen Regeln. - - Weitere Informationen dazu, wie die Ergebnisse der Scans Nutzern und Administratoren angezeigt werden, finden Sie in den Richtlinien "<ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" />" und "<ph name="UNSAFE_EVENTS_REPORTING_ENABLED" />".</translation> <translation id="4787763197941188108">Überschreibt die standardmäßige Druckseitengröße. <ph name="PAGE_SIZE_NAME" /> sollte eines der aufgelisteten Formate oder "custom" enthalten, wenn sich die erforderliche Papiergröße nicht in der Liste befindet. Wenn der Wert "custom" angegeben wird, sollte die Property "<ph name="PAGE_SIZE_CUSTOM_SIZE" />" festgelegt werden. Sie beschreibt die gewünschte Höhe und Breite in Mikrometern. In anderen Fällen sollte die Property "<ph name="PAGE_SIZE_CUSTOM_SIZE" />" nicht verwendet werden. Richtlinien, die gegen diese Regeln verstoßen, werden ignoriert. @@ -2786,7 +2762,6 @@ <translation id="5148753489738115745">Ermöglicht die Verwendung zusätzlicher Parameter, die beim Start von <ph name="PRODUCT_NAME" /> durch <ph name="PRODUCT_FRAME_NAME" /> eingesetzt werden. Wenn diese Richtlinie nicht festgelegt wird, wird die Standardbefehlszeile verwendet.</translation> -<translation id="5150323673529584553">Dateien nicht scannen</translation> <translation id="5152787786897382519">Sowohl in Chromium als auch in Google Chrome gibt es Richtliniengruppen, die in Abhängigkeit voneinander die Steuerung einer Funktion ermöglichen. Diese Richtliniensätze werden durch die folgenden Richtliniengruppen repräsentiert. Aufgrund der Tatsache, dass Richtlinien mehrere Quellen haben können, werden nur Werte, die aus der Quelle mit der höchsten Priorität stammen, angewendet. Werte aus einer Quelle mit niedrigerer Priorität in derselben Gruppe werden ignoriert. Die Hierarchie wird unter <ph name="POLICY_PRIORITY_DOC_URL" /> definiert.</translation> <translation id="515816885693899426">Diese Richtlinie wurde eingestellt. Bitte verwenden Sie stattdessen <ph name="URL_BLOCKLIST_POLICY_NAME" />. @@ -2913,6 +2888,7 @@ <translation id="5293044154216294358">Wenn die Richtlinie auf "True" gesetzt ist, können Nutzer das Dinosaurierspiel spielen. Ist sie auf "False" gesetzt, können Nutzer das Easter-Egg-Dinosaurierspiel nicht spielen, wenn das Gerät offline ist. Wenn die Richtlinie nicht konfiguriert ist, können Nutzer das Dinosaurierspiel nicht auf registrierten <ph name="PRODUCT_OS_NAME" />-Geräten spielen, auf anderen aber schon.</translation> +<translation id="529457411593078576">Nutzungsbedingungen während der ersten Ausführung für CCT aktivieren</translation> <translation id="5306186200045823863">Der veralteten Symantec-PKI vertrauen</translation> <translation id="5307432759655324440">Inkognitomodus - Verfügbarkeit</translation> <translation id="5311275381462687162">Einstellung für das alte Standardverhalten des "<ph name="ATTRIBUTE_SAMESITE_NAME" />"-Cookies</translation> @@ -3731,7 +3707,6 @@ <translation id="637934607141010488">Meldet eine Liste der Gerätenutzer, die sich kürzlich angemeldet haben Wird die Richtlinie auf "False" gesetzt, werden die Nutzer nicht gemeldet.</translation> -<translation id="638668187106406971">Hochgeladene Inhalte auf Verstöße gegen die Richtlinie zum Schutz von sensiblen Daten überprüfen</translation> <translation id="6394350458541421998">Diese Richtlinie ist ab <ph name="PRODUCT_OS_NAME" />-Version 29 nicht mehr vorhanden. Verwenden Sie stattdessen die Richtlinie "PresentationScreenDimDelayScale".</translation> <translation id="6401669939808766804">Nutzer abmelden</translation> <translation id="640244877779556713">Emoji-Vorschläge aktivieren</translation> @@ -4540,6 +4515,17 @@ <translation id="747014869399137701">Wenn die Richtlinie auf "1" gesetzt ist, können Websites Desktop-Benachrichtigungen anzeigen. Wenn die Richtlinie auf "2" gesetzt ist, werden Desktop-Benachrichtigungen blockiert. Wenn sie nicht konfiguriert ist, gilt die Richtlinie <ph name="ASK_NOTIFICATIONS_POLICY_NAME" />, aber Nutzer können diese Einstellung ändern.</translation> +<translation id="7471828226549672843">Standardmäßig werden die Nutzungsbedingungen bei der ersten Ausführung von CCT angezeigt. Wenn diese Richtlinie deaktiviert ist, wird das Dialogfeld mit den Nutzungsbedingungen weder bei der ersten Ausführung noch bei weiteren angezeigt. Wenn die Richtlinie aktiviert oder nicht konfiguriert ist, wird das Dialogfeld mit den Nutzungsbedingungen bei der ersten Ausführung angezeigt. Beachten Sie Folgendes: + + – Diese Richtlinie funktioniert nur bei vollständig verwalteten Android-Geräten, die von Unified Endpoint Management-Anbietern konfiguriert werden können. + + – Wenn die Richtlinie deaktiviert ist, hat die BrowserSignin-Richtlinie keine Auswirkungen. + + – Wenn die Richtlinie deaktiviert ist, werden keine Messwerte an den Server gesendet. + + – Wenn die Richtlinie deaktiviert ist, sind die Browserfunktionen eingeschränkt. + + – Wenn die Richtlinie deaktiviert ist, müssen Administratoren Endnutzer dieses Geräts darüber informieren.</translation> <translation id="747275827471712187">Auf diesen Websites das alte "<ph name="ATTRIBUTE_SAMESITE_NAME" />"-Verhalten für Cookies wiederherstellen</translation> <translation id="7477231245051133709">Bedienungshilfe "Mono-Audio" aktivieren</translation> <translation id="7477239290070847560">Zeroconf-basierte (mDNS + DNS-SD) Protokollziele</translation> @@ -4896,7 +4882,6 @@ Der Wert für die Richtlinie muss in Millisekunden angegeben werden. Werte müssen kleiner oder gleich dem Wert für die Inaktivitätsverzögerung sein.</translation> <translation id="8001701200415781021">Einschränken, welche Google-Konten als primäre Browserkonten in <ph name="PRODUCT_NAME" /> festgelegt werden können</translation> -<translation id="8003853057959146975">Dateien zur Überprüfung auf Verstöße gegen die Richtlinie zum Schutz von sensiblen Daten senden</translation> <translation id="8006219716745491366">Wenn "<ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" />" aktiviert ist, gibt "<ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" />" eine Liste alternativer URLs an, die verwendet werden, um Suchbegriffe aus der Suchmaschine zu extrahieren. Die URLs sollten den String <ph name="SEARCH_TERM_MARKER" /> enthalten. Wenn "<ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" />" nicht konfiguriert ist, werden keine alternativen URLs verwendet, um Suchbegriffe aus der Suchmaschine zu extrahieren.</translation> @@ -5300,7 +5285,6 @@ Ist die Richtlinie auf "false" gesetzt oder nicht konfiguriert, kann der Nutzer den Browser verwenden, ohne sich in <ph name="PRODUCT_NAME" /> anzumelden.</translation> <translation id="858309738002328421">Große Dateiuploads blockieren</translation> <translation id="8584279193368801689">Schränkt den PIN-Druckmodus ein. Ist die Richtlinie nicht konfiguriert, gelten keine Einschränkungen. Ist der Modus nicht verfügbar, wird diese Richtlinie ignoriert. Der PIN-Druckmodus wird nur für Drucker angewendet, die das IPPS-, HTTPS- oder USB-Protokoll bzw. IPP über USB verwenden.</translation> -<translation id="8585558195682146109">Nutzerdownloads zum Scannen senden</translation> <translation id="8587229956764455752">Erstellung neuer Nutzerkonten erlauben</translation> <translation id="8591713876665299827">Diese Richtlinie ist veraltet und wird in Version 85 von <ph name="PRODUCT_OS_NAME" /> entfernt. Bitte verwenden Sie stattdessen die Richtlinie "<ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />". @@ -5559,7 +5543,6 @@ <translation id="8942616385591203339">Mit dieser Richtlinie wird festgelegt, ob die Einwilligung zur Synchronisierung dem Nutzer bei der ersten Anmeldung angezeigt werden kann. Sie sollte auf "false" gesetzt werden, wenn vom Nutzer keine Einwilligung zur Synchronisierung eingeholt werden muss. Wenn diese Richtlinie auf "false" gesetzt ist, wird die Einwilligung zur Synchronisierung nicht angezeigt. Falls die Richtlinie auf "true" festgelegt oder nicht konfiguriert ist, kann die Einwilligung zur Synchronisierung angezeigt werden.</translation> -<translation id="8943934315109955032">Nicht auf Verstöße gegen die Richtlinie zum Schutz von sensiblen Daten prüfen</translation> <translation id="8947415621777543415">Gerätestandort melden</translation> <translation id="8948062138228904066">Zulassungsliste für Authentifizierungsserver</translation> <translation id="8951350807133946005">Datenträger-Cache-Verzeichnis festlegen</translation> @@ -5573,9 +5556,6 @@ Diese Richtlinie sollte nicht aktiviert werden, wenn die Richtlinie <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> bereits aktiviert ist, da die Funktion über dieselbe clientseitige Funktion verfügt. Die von Google gehostete Synchronisierung ist in diesem Fall vollständig deaktiviert.</translation> <translation id="8955719471735800169">Zurück nach oben</translation> -<translation id="8956310900055843601">Wenn die Richtlinie auf "True" gesetzt oder nicht konfiguriert ist, wird auf dem Gerät das 24-Stunden-Uhrzeitformat verwendet. Für Nutzersitzungen wird dieses Format standardmäßig verwendet, Nutzer haben aber die Möglichkeit, es für ihr Konto zu ändern. - - Ist die Richtlinie auf "False" gesetzt, wird auf dem Gerät das 12-Stunden- Uhrzeitformat verwendet.</translation> <translation id="8959992920425111821">Standardkonfiguration</translation> <translation id="8970205333161758602">Hinweis auf Einstellung von <ph name="PRODUCT_FRAME_NAME" /> unterdrücken</translation> <translation id="8976248126101463034">Gnubby-Authentifizierung für Remotezugriff-Hosts zulassen</translation>
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb index 8441f23..8611e63b 100644 --- a/components/policy/resources/policy_templates_es-419.xtb +++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -95,7 +95,6 @@ Si no se especifica la política, pueden volverse a utilizar los GPO almacenados en caché por hasta 25 horas. Si se establece la política en 0, los GPO dejan de almacenarse en caché. Ten en cuenta que esta acción aumenta la carga del servidor, ya que se vuelven a descargar los GPO en cada obtención de la política, incluso si no cambiaron.</translation> -<translation id="1111470455889178048">Analizar las cargas y descargas del usuario</translation> <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> omitirá cualquier proxy de la lista de hosts que se proporciona aquí. Esta política solo se aplicará si se selecciona la configuración manual de proxy en "Elegir cómo especificar la configuración del servidor proxy" y si no se especifica la política <ph name="PROXY_SETTINGS_POLICY_NAME" />. @@ -945,16 +944,6 @@ Si estableces esta política, el usuario no podrá anular el valor. Si no la estableces, inicialmente se inhabilitará la pantalla de privacidad, pero el usuario podrá controlarla.</translation> -<translation id="2423038190900972331">Controla cómo revisa <ph name="PRODUCT_NAME" /> los datos que se cargan, descargan, pegan del portapapeles o arrastran y sueltan para detectar si se infringen las normas relacionadas con la protección de datos sensibles. - - Si no se establece esta política o se le asigna el valor "Ninguna", <ph name="PRODUCT_NAME" /> no revisará los datos para detectar si se infringen las normas relacionadas con la protección de datos sensibles. - - Si se le asigna a esta política el valor "Revisar descargas" y el usuario intenta descargar un archivo de una URL incluida en la política <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" />, <ph name="PRODUCT_NAME" /> comprobará si los datos descargados cumplen con las normas empresariales. - - Si se le asigna el valor "Revisar cargas" y el usuario intenta cargar un archivo a un dominio que no esté incluido en la política <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" />, <ph name="PRODUCT_NAME" /> comprobará si el archivo cargado, los datos pegados del portapapeles o los datos arrastrados y soltados cumplen con las normas empresariales. - - Si se le asigna el valor "Revisar cargas y descargas", <ph name="PRODUCT_NAME" /> se comportará conforme a las reglas descritas en "Revisar descargas" y "Revisar cargas". - </translation> <translation id="2423255396068675416">Si habilitas la política o no la estableces, los usuarios podrán ejecutar <ph name="PRODUCT_CROSTINI_NAME" />, siempre que estén habilitadas las políticas <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> y <ph name="CROSTINI_ALLOWED_POLICY_NAME" />. Si inhabilitas la política, se desactivará <ph name="PRODUCT_CROSTINI_NAME" /> para los usuarios. En ese caso, se comenzará a aplicar la política en los contenedores de <ph name="PRODUCT_CROSTINI_NAME" /> que se inicien a partir de ese momento, pero no en aquellos que ya estén en ejecución.</translation> <translation id="2424098959650060417">Controla a qué impresoras de <ph name="BULK_PRINTERS_POLICY_NAME" /> pueden acceder los usuarios. @@ -1069,7 +1058,6 @@ El valor de la política debe especificarse en milisegundos. Los valores deben ser menores o iguales que la demora de inactividad.</translation> <translation id="2548572254685798999">Enviar información de "Navegación segura"</translation> <translation id="2550593661567988768">Solo impresión simple</translation> -<translation id="2551520365302988324">Analizar las cargas del usuario</translation> <translation id="2552318891854145040">Si estableces la política, se define una lista de favoritos en la que cada uno es un diccionario que contiene las claves "<ph name="NAME" />" y "<ph name="URL_LABEL" />" con el nombre y destino del favorito, respectivamente. Los administradores pueden configurar una subcarpeta definiendo un favorito sin una clave "<ph name="URL_LABEL" />", pero con una clave "<ph name="CHILDREN" />" adicional. Esta clave también incluye una lista de favoritos (algunos pueden ser carpetas). Chrome modifica las URL incompletas como si fueran enviadas a través de la barra de direcciones, p. ej., "<ph name="GOOGLE_COM" />" cambia a "<ph name="HTTPS_GOOGLE_COM" />". Los usuarios no pueden modificar las carpetas donde se guardan los favoritos (pero pueden ocultarlas en la barra de favoritos). El nombre de carpeta predeterminado para los favoritos administrados es "Favoritos administrados", pero puede modificarse. Para hacerlo agrega un diccionario secundario en la política con una sola clave que se denomine "<ph name="TOPLEVEL_NAME" />" y que incluya el nombre de carpeta deseado como su valor. Los favoritos administrados no se sincronizan con la cuenta del usuario ni se pueden modificar mediante extensiones.</translation> @@ -1828,7 +1816,6 @@ Para obtener más información sobre <ph name="CORS" />, visita la siguiente página web: <ph name="CORS_HELP_URL" />. Ten en cuenta que se anunció que esta política se quitaría en la versión 82 de <ph name="PRODUCT_NAME" />, pero se quitó en la versión 84.</translation> -<translation id="3624515566460517364">Revisar las cargas y descargar para detectar si se infringen las normas relacionadas con la protección de datos sensibles</translation> <translation id="3627678165642179114">Habilita o inhabilita el servicio web de revisión ortográfica.</translation> <translation id="3628480121685794414">Permitir impresión simple</translation> <translation id="3631099945620529777">Si se configura como falsa, se inhabilitará el botón "Finalizar proceso" en el Administrador de tareas. @@ -1985,7 +1972,6 @@ Si no estableces la política o la estableces como una lista vacía, los dispositivos administrados no tendrán disponibles ningún método de desbloqueo rápido.</translation> <translation id="3877517141460819966">Modo de autenticación de dos factores integrado</translation> -<translation id="3879196885908353077">Revisar las descargas para detectar si se infringen las normas relacionadas con la protección de datos sensibles</translation> <translation id="3879208481373875102">Configura la lista de aplicaciones web instaladas de manera automática</translation> <translation id="388237772682176890">Esta política ya no está disponible en M53 y se quitó en M54 porque se quitó la compatibilidad con SPDY/3.1. @@ -2409,7 +2395,6 @@ En el caso de dispositivos no administrados, se muestra siempre la notificación.</translation> <translation id="4510923771103268849">El usuario tiene acceso con permisos de administrador a los contenedores de Crostini</translation> <translation id="4515404363392014383">Habilita la Navegación segura para las fuentes de confianza</translation> -<translation id="4517928394515633751">Analiza las descargas de los usuarios con Navegación segura</translation> <translation id="4518251772179446575">Preguntar siempre si un sitio quiere rastrear la ubicación física de los usuarios.</translation> <translation id="4529868888205510667">Si estableces el valor "True" para la política, los usuarios podrán usar ARC, a menos que esta tecnología esté desactivada por otros motivos. Si estableces el valor "False", los usuarios no afiliados no podrán usar ARC. @@ -2584,15 +2569,6 @@ Un valor de asterisco (*) en una lista de elementos bloqueados significa que todos los hosts de mensajería nativa están bloqueados, a menos que se indique explícitamente que están en la lista de elementos permitidos. Si no estableces esta política, <ph name="PRODUCT_NAME" /> cargará todos los hosts de mensajería nativa instalados.</translation> -<translation id="4771144269610910963">Esta política controla el análisis detallado de las descargas del usuario con Navegación segura. Si no se configura o se le asigna el valor predeterminado "No analizar archivos", Navegación segura no analizará las descargas del usuario. - - Si se establece el valor "Analizar las descargas del usuario", se enviarán las descargas de los usuarios a través de la red a Navegación segura para analizar la presencia de software malicioso. - - Si se establece el valor "Analizar las cargas del usuario", se enviarán las cargas de los usuarios a través de la red a Navegación segura para analizar la presencia de software malicioso. - - Si se le asigna el valor "Analizar las cargas y descargas del usuario", se comportará conforme a las reglas que se describen en "Analizar las descargas del usuario" y "Analizar las cargas del usuario". - - Consulta las políticas <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> y <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" /> para obtener información sobre la forma en que el usuario y el administrador ven los resultados del análisis.</translation> <translation id="4787763197941188108">Anula el tamaño predeterminado para la página de impresión. <ph name="PAGE_SIZE_NAME" /> debe contener uno de los formatos incluidos o "personalizado" si el tamaño del papel necesario no está en la lista. Si se proporciona un valor "personalizado", se debe especificar la propiedad <ph name="PAGE_SIZE_CUSTOM_SIZE" />. Describe el ancho y altura deseados en micrómetros. De lo contrario, no se debe especificar la propiedad <ph name="PAGE_SIZE_CUSTOM_SIZE" />. Se ignorará la política que infrinja estas reglas. @@ -2805,7 +2781,6 @@ <translation id="5148753489738115745">Te permite especificar los parámetros adicionales que se utilizan cuando <ph name="PRODUCT_FRAME_NAME" /> inicia <ph name="PRODUCT_NAME" />. Si no se configura esta política, se utilizará la línea de comandos predeterminada.</translation> -<translation id="5150323673529584553">No analizar archivos</translation> <translation id="5152787786897382519">Chromium y Google Chrome tienen algunos grupos de políticas que dependen unos de otros para controlar una función. Los siguientes grupos de políticas representan estos conjuntos. Como las políticas pueden tener diferentes fuentes, solo se aplicarán los valores que provengan de la fuente de mayor prioridad. Se ignorarán los valores que provengan de una fuente de menor prioridad perteneciente al mismo grupo. El orden de prioridad se define en <ph name="POLICY_PRIORITY_DOC_URL" />.</translation> <translation id="515816885693899426">Esta política dejó de estar disponible. Usa la política "<ph name="URL_BLOCKLIST_POLICY_NAME" />" en su lugar. @@ -3631,6 +3606,11 @@ Si no estableces esta política, <ph name="PRODUCT_NAME" /> cargará todos los hosts de mensajería nativa instalados.</translation> <translation id="6224304369267200483">Las URL y los dominios permiten automáticamente la atestación directa de llaves de seguridad</translation> +<translation id="6230442621691161858">Esta función habilita sugerencias para explorar nuevo contenido. Incluye apps, páginas web y mucho más. + Si estableces esta política como verdadera, se habilitarán las sugerencias para explorar nuevo contenido. + Si la estableces como falsa, se inhabilitarán estas sugerencias. + Si no la estableces, se inhabilitarán estas sugerencias para los usuarios administrados y se habilitarán para los demás usuarios. + </translation> <translation id="6233173491898450179">Establecer el directorio de descarga</translation> <translation id="6234177445959386333">Configura la lista de las URL de acceso empresariales donde el servicio de protección de contraseñas debe capturar los hash con sal de las contraseñas.</translation> <translation id="6242147107333796512">Proporciona datos relacionados con informes de fallas, como id remota, @@ -3746,7 +3726,6 @@ <translation id="637934607141010488">Informa sobre la lista de usuarios de dispositivos que accedieron recientemente. Si esta política se establece en "False", no se informará sobre los usuarios.</translation> -<translation id="638668187106406971">Revisar las cargas para detectar si se infringen las normas relacionadas con la protección de datos sensibles</translation> <translation id="6394350458541421998">Esta política se eliminó a partir de la versión 29 de <ph name="PRODUCT_OS_NAME" />. Utiliza la política PresentationScreenDimDelayScale en su lugar.</translation> <translation id="6401669939808766804">Salir de la cuenta de usuario</translation> <translation id="640244877779556713">Habilita la sugerencia de emojis</translation> @@ -4555,7 +4534,7 @@ Si no la estableces, se aplicará la política <ph name="ASK_NOTIFICATIONS_POLICY_NAME" />, pero los usuarios podrán cambiar esta configuración.</translation> <translation id="7471828226549672843">De forma predeterminada, se muestran las Condiciones del Servicio cuando se ejecuta CCT por primera vez. Si inhabilitas esta política, no se mostrará el diálogo de las Condiciones del Servicio en la primera ejecución ni en las subsiguientes. Si la habilitas o no la estableces, se mostrará el diálogo de las Condiciones del Servicio en la primera ejecución. Ten en cuenta las siguientes salvedades: - - Esta política solo funciona en dispositivos Android completamente administrados que pueden ser configurados por proveedores de administración unificada de terminales (UEM). + - Esta política solo funciona en dispositivos Android completamente administrados que pueden ser configurados por proveedores de administración unificada de extremos (UEM). - Si inhabilitas esta política, la política BrowserSignin no tendrá ningún efecto. @@ -4921,7 +4900,6 @@ El valor de la política debe especificarse en milisegundos. Los valores deben ser menores o iguales que la demora de inactividad.</translation> <translation id="8001701200415781021">Determinar qué Cuentas de Google se pueden establecer como las principales del navegador en <ph name="PRODUCT_NAME" /></translation> -<translation id="8003853057959146975">Envía archivos para analizar si se infringen las normas relacionadas con la protección de datos sensibles</translation> <translation id="8006219716745491366">Si activas <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" />, establecer <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> especificará una lista de URL alternativas para extraer términos de búsqueda del motor de búsqueda. Las URL deben incluir la string <ph name="SEARCH_TERM_MARKER" />. Si no estableces <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" />, no se usará ninguna URL alternativa para extraer términos de búsqueda.</translation> @@ -5350,7 +5328,6 @@ Si se establece esta política como falsa o no se configura, el usuario podrá usar el navegador sin acceder a <ph name="PRODUCT_NAME" />.</translation> <translation id="858309738002328421">Bloquear la carga de archivos grandes</translation> <translation id="8584279193368801689">Restringe el modo de impresión con PIN. Si no se configura la política, no se aplicará ninguna restricción. Si el modo no está disponible, se ignorará esta política. Ten en cuenta que solo se habilitará la función de impresión con PIN para impresoras que usen uno de los siguientes protocolos: IPPS, HTTPS, USB o IPP por USB.</translation> -<translation id="8585558195682146109">Analizar las descargas del usuario</translation> <translation id="8587229956764455752">Permitir la creación de nuevas cuentas de usuario</translation> <translation id="8591713876665299827">Ten en cuenta que esta política es obsoleta y se quitará en la versión 85 de <ph name="PRODUCT_OS_NAME" />. En su lugar, utiliza <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />. @@ -5610,7 +5587,6 @@ <translation id="8942616385591203339">Esta política controla si se muestra el consentimiento de sincronización al usuario durante el primer acceso. Debe establecerse como falso si consideras que el usuario nunca necesitará este consentimiento. Si se establece como falso, no se mostrará el consentimiento. Si se establece como verdadero o no se establece, se puede mostrar el consentimiento.</translation> -<translation id="8943934315109955032">No revisar si se infringen las normas relacionadas con la protección de datos sensibles</translation> <translation id="8947415621777543415">Informar la ubicación del dispositivo</translation> <translation id="8948062138228904066">Lista de servidores de autenticación habilitados</translation> <translation id="8951350807133946005">Configurar el directorio de caché de disco</translation> @@ -5624,9 +5600,6 @@ Esta política no debe habilitarse cuando se habilita la política <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" />, dado que la función comparte la misma funcionalidad en el lado del cliente. En este caso, la sincronización alojada por Google se inhabilita por completo.</translation> <translation id="8955719471735800169">Volver al principio</translation> -<translation id="8956310900055843601">Si estableces la política como verdadera o no la estableces, la pantalla de acceso del dispositivo tendrá el formato de reloj de 24 horas. Las sesiones de usuario también tendrán este formato como predeterminado, pero los usuarios podrán cambiarlo. - - Si estableces la política como falsa, el dispositivo tendrá el formato de reloj de 12 horas.</translation> <translation id="8959992920425111821">Configuración predeterminada</translation> <translation id="8970205333161758602">Elimina el mensaje de desactivación de <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8976248126101463034">Permitir autenticación gnubby para hosts de acceso remoto</translation>
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index 213cd8c2..b78e987 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -95,7 +95,6 @@ Si no se asigna ningún valor a esta política, los GPO almacenados en la memoria caché pueden reutilizarse durante un periodo máximo de 25 horas. Si se le asigna el valor 0, se inhabilita el almacenamiento en caché de los GPO. Ten en cuenta que esto incrementa la carga de trabajo del servidor, ya que los GPO deberán descargarse cada vez que se recuperen datos de políticas, aunque no se hayan modificado.</translation> -<translation id="1111470455889178048">Enviar subidas y descargas de usuario para analizarlas</translation> <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> omitirá cualquier proxy que se incluya en la lista de hosts especificada. Esta política solo tendrá validez si has seleccionado una configuración manual del proxy en la opción Seleccionar la forma de especificar la configuración del servidor proxy y si no se ha especificado la política <ph name="PROXY_SETTINGS_POLICY_NAME" />. @@ -949,16 +948,6 @@ Si se asigna un valor a esta política, el usuario no podrá anularlo. Si no se le asigna ningún valor, la pantalla de privacidad se inhabilitará inicialmente, pero el usuario podrá controlarla.</translation> -<translation id="2423038190900972331">Controla cómo comprueba <ph name="PRODUCT_NAME" /> si los datos subidos, descargados, pegados desde el portapapeles o arrastrados y soltados han infringido las normas de protección de datos sensibles. - - Si no se define esta política o se le asigna el valor "Ninguno", <ph name="PRODUCT_NAME" /> no comprobará ningún dato para detectar si se ha infringido las normas de protección de datos sensibles. - - Si se le asigna el valor "Check downloads" y el usuario intenta descargar un archivo de una URL incluida en la política <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" />, <ph name="PRODUCT_NAME" /> comprobará si los datos descargados cumplen las normas de empresa. - - Si se le asigna el valor "Check uploads" y el usuario intenta subir un archivo a un dominio que no esté incluido en la política <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" />, <ph name="PRODUCT_NAME" /> comprobará si el archivo subido o los datos pegados desde el portapapeles o arrastrados y soltados cumplen las normas empresariales. - - Si se le asigna el valor "Check uploads and downloads", <ph name="PRODUCT_NAME" /> se comportará según las reglas descritas en los valores "Check downloads" y "Check uploads". - </translation> <translation id="2423255396068675416">Si se habilita la política o no se establece, los usuarios podrán ejecutar <ph name="PRODUCT_CROSTINI_NAME" />, siempre y cuando las políticas <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> y <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> estén habilitadas. Si se inhabilita la política, se desactivará <ph name="PRODUCT_CROSTINI_NAME" /> para el usuario. En caso de inhabilitar la política, esto se aplicará a los nuevos contenedores de <ph name="PRODUCT_CROSTINI_NAME" /> que se empiecen a usar, pero no a los que ya estén ejecutándose.</translation> <translation id="2424098959650060417">Controla qué impresoras de la política <ph name="BULK_PRINTERS_POLICY_NAME" /> están disponibles para los usuarios. @@ -1073,7 +1062,6 @@ El valor de esta política debe especificarse en milisegundos. Los valores deben ser inferiores o iguales al retraso de inactividad.</translation> <translation id="2548572254685798999">Recoger información sobre Navegación Segura</translation> <translation id="2550593661567988768">Solo impresión por una cara</translation> -<translation id="2551520365302988324">Enviar subidas de usuario para analizarlas</translation> <translation id="2552318891854145040">Si se establece esta política, se definirá una lista de marcadores en la que cada uno es un diccionario con las claves "<ph name="NAME" />" y "<ph name="URL_LABEL" />". Estas claves contienen el nombre y la URL de destino del marcador. Los administradores podrán configurar una subcarpeta definiendo un marcador sin una clave "<ph name="URL_LABEL" />", pero con una clave "<ph name="CHILDREN" />" adicional. Esta clave también contiene una lista de marcadores, algunos de los cuales también pueden ser carpetas. Chrome modifica las URL incompletas como si se enviasen mediante la barra de direcciones. Por ejemplo, "<ph name="GOOGLE_COM" />" se convierte en "<ph name="HTTPS_GOOGLE_COM" />". Los usuarios no podrán cambiar las carpetas en las que están colocados los marcadores, pero podrán ocultarlas de la barra de marcadores. El nombre predeterminado de la carpeta de marcadores administrados es "Marcadores administrados", pero se puede cambiar si se añade un nuevo subdiccionario a la política con una única clave llamada "<ph name="TOPLEVEL_NAME" />" que tenga asignado como valor el nombre que se quiera asignar a la carpeta. Los marcadores administrados no se sincronizan con la cuenta de usuario y las extensiones no pueden modificarlos.</translation> @@ -1837,7 +1825,6 @@ Para consultar más información sobre <ph name="CORS" />, visita <ph name="CORS_HELP_URL" />. Ten en cuenta que se anunció que esta política se eliminaría en la versión 82 de <ph name="PRODUCT_NAME" />, pero se eliminará en la versión 84.</translation> -<translation id="3624515566460517364">Comprueba si se ha producido una infracción de las normas de protección de datos sensibles en las subidas y descargas</translation> <translation id="3627678165642179114">Habilitar o inhabilitar el servicio web de corrección ortográfica</translation> <translation id="3628480121685794414">Habilitar impresión por una cara</translation> <translation id="3631099945620529777">Si se asigna el valor "False" a esta política, se inhabilita el botón Finalizar proceso en el administrador de tareas. @@ -1994,7 +1981,6 @@ Si esta política no se define o se le asigna una lista vacía, no habrá ningún modo de desbloqueo rápido disponible para los dispositivos administrados.</translation> <translation id="3877517141460819966">Modo de autenticación de dos factores integrado</translation> -<translation id="3879196885908353077">Comprueba si se han infringido las normas de protección de datos sensibles en las descargas</translation> <translation id="3879208481373875102">Configurar lista de aplicaciones web de instalación forzada</translation> <translation id="388237772682176890">Esta política está obsoleta en M53 y se ha quitado de M54, ya que se ha retirado la compatibilidad con SPDY/3.1. @@ -2424,7 +2410,6 @@ En dispositivos no administrados, la notificación se muestra siempre.</translation> <translation id="4510923771103268849">El usuario puede tener acceso root a los contenedores de Crostini</translation> <translation id="4515404363392014383">Habilitar Navegación Segura en fuentes de confianza</translation> -<translation id="4517928394515633751">Analizar las descargas de los usuarios con Navegación Segura</translation> <translation id="4518251772179446575">Preguntar siempre que un sitio quiera hacer un seguimiento de la ubicación física de los usuarios</translation> <translation id="4529868888205510667">Si se asigna el valor "true" a esta política o no se le asigna ninguno, se permite a los usuarios utilizar ARC, a menos que ARC se haya desactivado de otra forma. Si se le asigna el valor "false", no se permite usar ARC a los usuarios no afiliados. @@ -2600,15 +2585,6 @@ Si el valor de una lista de bloqueados es un asterisco (*), se bloquearán todos los hosts de mensajes nativos excepto los que estén incluidos explícitamente en la lista de permitidos. Si no se asigna ningún valor a esta política, <ph name="PRODUCT_NAME" /> cargará todos los hosts instalados de mensajes nativos.</translation> -<translation id="4771144269610910963">Esta política controla el análisis profundo de las descargas de usuario con Navegación Segura. Si no se le asigna ningún valor o se le asigna el valor predeterminado "No analizar archivos", las descargas de usuario no se analizarán con Navegación Segura. - - Si se le asigna el valor "Enviar descargas de usuario para analizarlas", las descargas de usuario se enviarán a Navegación Segura a través de la red para realizar un análisis de software malicioso. - - Si se le asigna el valor "Enviar subidas de usuario para analizarlas", las subidas de usuario se enviarán a Navegación Segura a través de la red para realizar un análisis de software malicioso. - - Si se le asigna el valor "Enviar subidas y descargas de usuario para analizarlas", seguirá las reglas de los valores "Enviar subidas de usuario para analizarlas" y "Enviar descargas de usuario para analizarlas" que hemos descrito. - - Consulta las políticas <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> y <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" /> para obtener más información sobre cómo se muestran los resultados del análisis al usuario y al administrador.</translation> <translation id="4787763197941188108">Anula el tamaño predeterminado de la página de impresión. <ph name="PAGE_SIZE_NAME" /> debe contener uno de los formatos incluidos en la lista, o "personalizado" si el tamaño del papel necesario no está en la lista. Si se proporciona un valor "personalizado", se debe especificar la propiedad <ph name="PAGE_SIZE_CUSTOM_SIZE" />. Describe el ancho y altura deseados en micrómetros. De lo contrario, no se debe especificar la propiedad <ph name="PAGE_SIZE_CUSTOM_SIZE" />. Se ignorará la política que infrinja estas reglas. @@ -2825,7 +2801,6 @@ <translation id="5148753489738115745">Te permite especificar los parámetros adicionales que se utilizan cuando <ph name="PRODUCT_FRAME_NAME" /> inicia <ph name="PRODUCT_NAME" />. Si no se establece esta política, se utilizará la línea de comandos predeterminada.</translation> -<translation id="5150323673529584553">No analizar archivos</translation> <translation id="5152787786897382519">Tanto Chromium como Google Chrome cuentan con algunos grupos de políticas que tienen dependencia mutua para asumir el control de una función. Estos conjuntos están representados por los grupos de políticas que se indican a continuación. Dado que las políticas pueden tener varias fuentes, solo se aplicarán los valores procedentes de la fuente que tenga la mayor prioridad. Se ignorarán los valores procedentes de las fuentes del mismo grupo que tengan menor prioridad. El orden de prioridad se define en la página <ph name="POLICY_PRIORITY_DOC_URL" />.</translation> <translation id="515816885693899426">Esta política está obsoleta. Usa la política <ph name="URL_BLOCKLIST_POLICY_NAME" /> en su lugar. @@ -3656,6 +3631,11 @@ Si no se asigna ningún valor a esta política, <ph name="PRODUCT_NAME" /> cargará todos los hosts instalados de mensajes nativos.</translation> <translation id="6224304369267200483">Las URL y los dominios han permitido automáticamente la confirmación directa de la llave de seguridad</translation> +<translation id="6230442621691161858">Esta función habilita sugerencias sobre contenido nuevo por descubrir. Incluye aplicaciones, páginas web y más. + Si se le asigna el valor "True" a esta política, se habilitarán las sugerencias sobre contenido nuevo por descubrir. + Si se le asigna el valor "False", se inhabilitarán las sugerencias sobre contenido nuevo por descubrir. + Si no se asigna ningún valor a esta política, las sugerencias sobre contenido nuevo por descubrir estarán inhabilitadas para los usuarios gestionados y habilitadas para el resto de usuarios. + </translation> <translation id="6233173491898450179">Establecer directorio de descargas</translation> <translation id="6234177445959386333">Configurar la lista de las URL de acceso de empresa en las que el servicio de protección de contraseñas debería capturar los hashes con salt de las contraseñas.</translation> <translation id="6242147107333796512">Proporciona información relacionada con los informes sobre fallos, como el ID remoto, @@ -3771,7 +3751,6 @@ <translation id="637934607141010488">Permite informar sobre la lista de usuarios de dispositivos que han iniciado sesión recientemente. Si la política está establecida en False, no se informará sobre los usuarios.</translation> -<translation id="638668187106406971">Comprueba si se han infringido las normas de protección de datos sensibles en las subidas</translation> <translation id="6394350458541421998">Esta política no está disponible desde la versión 29 de <ph name="PRODUCT_OS_NAME" />. Utiliza la política PresentationScreenDimDelayScale en su lugar.</translation> <translation id="6401669939808766804">Cerrar la sesión del usuario</translation> <translation id="640244877779556713">Habilitar sugerencias de emojis</translation> @@ -4956,7 +4935,6 @@ El valor de esta política debe especificarse en milisegundos. Los valores deben ser inferiores o iguales al retraso de inactividad.</translation> <translation id="8001701200415781021">Restringir las cuentas de Google que se pueden establecer como cuentas principales de navegador en <ph name="PRODUCT_NAME" /></translation> -<translation id="8003853057959146975">Envía archivos para inspeccionar si se han infringido las normas de protección de datos sensibles</translation> <translation id="8006219716745491366">Si <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> está activada y se asigna un valor a <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" />, se especificará una lista con URL alternativas para extraer términos de búsqueda del buscador. Las URL deben incluir la cadena <ph name="SEARCH_TERM_MARKER" />. Si no se asigna ningún valor a <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" />, no se usará ninguna URL alternativa para extraer términos de búsqueda.</translation> @@ -5364,7 +5342,6 @@ Si se asigna el valor "False" a esta política o no se configura, el usuario podrá utilizar el navegador sin iniciar sesión en <ph name="PRODUCT_NAME" />.</translation> <translation id="858309738002328421">Bloquear las subidas de archivos grandes</translation> <translation id="8584279193368801689">Restringe el modo de impresión con PIN. Si no se establece esta política, no se aplicará ninguna restricción. Si el modo no está disponible, se ignorará esta política. Ten en cuenta que la función de impresión con PIN solo está habilitada en impresoras que utilizan uno de los protocolos IPPS, HTTPS, USB o IPP por USB.</translation> -<translation id="8585558195682146109">Enviar descargas de usuario para analizarlas</translation> <translation id="8587229956764455752">Permitir la creación de nuevas cuentas de usuario</translation> <translation id="8591713876665299827">Ten en cuenta que esta política está obsoleta y se eliminará de la versión 85 de <ph name="PRODUCT_OS_NAME" />. Utiliza <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" /> en su lugar. @@ -5624,7 +5601,6 @@ <translation id="8942616385591203339">Esta política controla si se muestra Sync Consent al usuario durante el primer inicio de sesión. Se le debería asignar el valor "False" si no es necesario mostrar Sync Consent al usuario en ningún caso. Si se le asigna el valor "False", Sync Consent no se mostrará. Si se le asigna el valor "True" o no se le asigna ningún valor, Sync Consent no se puede mostrar.</translation> -<translation id="8943934315109955032">No comprueba si se infringen las normas de protección de datos sensibles</translation> <translation id="8947415621777543415">Informar de ubicación del dispositivo</translation> <translation id="8948062138228904066">Lista de permitidos de servidores de autenticación</translation> <translation id="8951350807133946005">Establecer directorio de caché de disco</translation> @@ -5638,9 +5614,6 @@ Esta política no se debe habilitar si la política <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> está habilitada, ya que esta función comparte la misma funcionalidad del cliente. En este caso, la sincronización alojada por Google está completamente inhabilitada.</translation> <translation id="8955719471735800169">Volver al principio</translation> -<translation id="8956310900055843601">Si se le asigna el valor True a la política o no se le asigna ningún valor, en la pantalla de inicio de sesión del dispositivo aparecerá un reloj con formato de 24 horas. Las sesiones de usuario también se inician con este formato de forma predeterminada, pero el usuario puede cambiar el formato del reloj de una cuenta si lo desea. - - Si se le asigna el valor False, el dispositivo utilizará el formato de reloj de 12 horas.</translation> <translation id="8959992920425111821">Configuración predeterminada</translation> <translation id="8970205333161758602">Eliminar el mensaje de desactivación de <ph name="PRODUCT_FRAME_NAME" /></translation> <translation id="8976248126101463034">Permitir la autenticación gnubby para los hosts de acceso remoto</translation>
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb index ca81719..1cdcc34 100644 --- a/components/policy/resources/policy_templates_fr.xtb +++ b/components/policy/resources/policy_templates_fr.xtb
@@ -95,7 +95,6 @@ Si cette règle n'est pas définie, les GPO mis en cache peuvent être réutilisés dans un délai maximal de 25 heures. Si cette règle est définie sur 0, la mise en cache des GPO est désactivée. Notez que cela augmente la charge du serveur, car les GPO sont de nouveau téléchargés à chaque récupération de règle, même s'ils ne sont pas modifiés.</translation> -<translation id="1111470455889178048">Envoyer les importations et les téléchargements des utilisateurs pour analyse</translation> <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> ignore tout serveur proxy pour la liste d'hôtes spécifiée ici. Cette règle ne prend effet que si vous avez sélectionné les paramètres de proxy manuels dans l'option "Sélectionner le mode de spécification des paramètres de serveur proxy", et si la règle <ph name="PROXY_SETTINGS_POLICY_NAME" /> n'a pas été spécifiée. @@ -956,16 +955,6 @@ Lorsque cette règle est définie, l'utilisateur ne peut pas remplacer la valeur. Si elle n'est pas définie, l'écran de confidentialité est désactivé initialement, mais l'utilisateur peut le modifier.</translation> -<translation id="2423038190900972331">Contrôle la manière dont <ph name="PRODUCT_NAME" /> vérifie si les données importées, téléchargées, collées à partir du presse-papiers, ou glissées-déposées respectent les règles de protection des données sensibles. - - Si cette règle n'est pas définie, ou si elle est définie sur "Aucune", <ph name="PRODUCT_NAME" /> ne vérifie pas si des règles de protection des données sensibles sont enfreintes. - - Si cette règle est définie sur "Vérifier les téléchargements" et que l'utilisateur tente de télécharger un fichier à partir d'une URL indiquée dans la règle <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" />, <ph name="PRODUCT_NAME" /> vérifie que les données téléchargées sont conformes aux règles de l'entreprise. - - Si cette règle est définie sur "Vérifier les importations" et que l'utilisateur tente d'importer un fichier sur un domaine qui n'est pas indiqué dans la règle <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" />, <ph name="PRODUCT_NAME" /> vérifie que le fichier importé, les données collées à partir du presse-papiers et les données glissées-déposées sont conformes aux règles de l'entreprise. - - Si cette règle est définie sur "Vérifier les importations et les téléchargements", <ph name="PRODUCT_NAME" /> se comporte conformément aux règles indiquées sous "Vérifier les téléchargements" et "Vérifier les importations". - </translation> <translation id="2423255396068675416">Si cette règle est activée ou qu'elle n'est pas configurée, les utilisateurs sont autorisés à exécuter<ph name="PRODUCT_CROSTINI_NAME" />, tant que les règles <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> et <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> sont activées. Si cette règle est désactivée, <ph name="PRODUCT_CROSTINI_NAME" /> est désactivé pour l'utilisateur. Si vous la désactivez, elle est appliquée aux conteneurs <ph name="PRODUCT_CROSTINI_NAME" /> qui vont être lancés, mais pas à ceux qui le sont déjà.</translation> <translation id="2424098959650060417">Permet de déterminer quelles imprimantes soumises à la règle <ph name="BULK_PRINTERS_POLICY_NAME" /> sont accessibles aux utilisateurs. @@ -1080,7 +1069,6 @@ La valeur de la règle doit être indiquée en millisecondes. Elle doit également être inférieure ou égale au délai d'inactivité.</translation> <translation id="2548572254685798999">Enregistrer les informations de navigation sécurisée</translation> <translation id="2550593661567988768">Impression recto seulement</translation> -<translation id="2551520365302988324">Envoyer les importations des utilisateurs pour analyse</translation> <translation id="2552318891854145040">Permet d'établir une liste des favoris où chacun d'eux est un dictionnaire comprenant les clés "<ph name="NAME" />" et "<ph name="URL_LABEL" />". Ces clés contiennent le nom et la cible du favori. Les administrateurs peuvent configurer un sous-dossier en définissant un favori sans clé "<ph name="URL_LABEL" />", mais avec une clé "<ph name="CHILDREN" />" supplémentaire. Cette clé contient également une liste de favoris, dont certains peuvent être aussi des dossiers. Chrome modifie les URL incomplètes comme si elles avaient été soumises via la barre d'adresse. Par exemple, "<ph name="GOOGLE_COM" />" devient "<ph name="HTTPS_GOOGLE_COM" />". Les utilisateurs ne peuvent pas modifier les dossiers dans lesquels les favoris sont placés (bien qu'ils puissent les masquer dans la barre de favoris). Le nom du dossier par défaut est "Favoris gérés", mais vous pouvez le modifier en ajoutant à la règle un sous-dictionnaire contenant la clé unique "<ph name="TOPLEVEL_NAME" />" avec le nom de dossier souhaité comme valeur. Les favoris gérés ne sont pas synchronisés avec le compte utilisateur, et les extensions ne peuvent pas les modifier.</translation> @@ -1838,7 +1826,6 @@ Pour en savoir plus sur <ph name="CORS" />, consultez la page <ph name="CORS_HELP_URL" />. La suppression de cette règle avait été annoncée pour la version 82 de <ph name="PRODUCT_NAME" />, mais elle a eu lieu à la version 84.</translation> -<translation id="3624515566460517364">Vérifier si les importations et les téléchargements respectent les règles de protection des données sensibles</translation> <translation id="3627678165642179114">Activer ou désactiver le service Web de correction orthographique</translation> <translation id="3628480121685794414">Activer l'impression recto</translation> <translation id="3631099945620529777">Si cette règle est définie sur "false", le bouton "Arrêter le processus" est désactivé dans le gestionnaire de tâches. @@ -1995,7 +1982,6 @@ Si cette règle n'est pas configurée ou qu'aucun mode de déverrouillage rapide ne figure dans la liste, aucun de ces modes n'est disponible pour les appareils gérés.</translation> <translation id="3877517141460819966">Mode d'authentification à deux facteurs intégré</translation> -<translation id="3879196885908353077">Vérifier que les téléchargements respectent les règles de protection des données sensibles</translation> <translation id="3879208481373875102">Configurer la liste des applications Web installées d'office</translation> <translation id="388237772682176890">Cette règle a été abandonnée dans la version M53 et supprimée dans la version M54, car le protocole SPDY 3.1 n'est plus pris en charge. @@ -2426,7 +2412,6 @@ La notification est toujours affichée sur les appareils non gérés.</translation> <translation id="4510923771103268849">L'utilisateur est autorisé à accéder à la racine des conteneurs Crostini</translation> <translation id="4515404363392014383">Activer la navigation sécurisée pour les sources fiables</translation> -<translation id="4517928394515633751">Analyser les téléchargements des utilisateurs avec la navigation sécurisée</translation> <translation id="4518251772179446575">Demander chaque fois qu'un site veut suivre la position géographique des utilisateurs</translation> <translation id="4529868888205510667">Si cette règle est définie sur "True" ou n'est pas définie, les utilisateurs peuvent utiliser ARC, sauf si celui-ci est désactivé par un autre moyen. Si elle est définie sur "False", les utilisateurs non affiliés ne peuvent pas utiliser ARC. @@ -2601,15 +2586,6 @@ Si vous saisissez la valeur "*" dans la liste de blocage, tous les hôtes de messagerie native sont bloqués, sauf ceux spécifiquement répertoriés dans la liste d'autorisation. Si cette règle n'est pas configurée, <ph name="PRODUCT_NAME" /> charge alors tous les hôtes de messagerie native installés.</translation> -<translation id="4771144269610910963">Cette règle permet de contrôler l'analyse approfondie des téléchargements des utilisateurs à l'aide de la navigation sécurisée. Si cette règle n'est pas configurée ou si elle est définie sur le paramètre par défaut ("Ne pas analyser les fichiers"), les téléchargements des utilisateurs ne sont pas analysés par la navigation sécurisée. - - Si cette règle est définie sur "Envoyer les téléchargements des utilisateurs pour analyse", les téléchargements des utilisateurs sont envoyés sur le réseau à la navigation sécurisée afin d'y être analysés pour détecter les éventuels logiciels malveillants. - - Si cette règle est définie sur "Envoyer les importations des utilisateurs pour analyse", les importations des utilisateurs sont envoyées sur le réseau à la navigation sécurisée afin d'y être analysées pour détecter les éventuels logiciels malveillants. - - Si cette règle est définie sur "Envoyer les importations et les téléchargements des utilisateurs pour analyse", le produit se comporte conformément aux règles indiquées sous "Envoyer les importations des utilisateurs pour analyse" et "Envoyer les téléchargements des utilisateurs pour analyse". - - Pour savoir comment les utilisateurs et les administrateurs peuvent consulter les résultats de l'analyse, reportez-vous aux règles <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> et <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" />.</translation> <translation id="4787763197941188108">Cette règle permet d'ignorer le format de la page d'impression par défaut. La propriété <ph name="PAGE_SIZE_NAME" /> doit contenir l'un des formats répertoriés ou être définie sur "Personnalisé" si le format du papier requis ne figure pas dans la liste. Si elle est définie sur "Personnalisé", il est obligatoire de spécifier également la propriété <ph name="PAGE_SIZE_CUSTOM_SIZE" />. La hauteur et la largeur souhaitées sont exprimées en micromètres. Dans le cas contraire, la propriété <ph name="PAGE_SIZE_CUSTOM_SIZE" /> ne doit pas être renseignée. Toute règle qui ne respecte pas ces consignes sera ignorée. @@ -2818,7 +2794,6 @@ <translation id="5148753489738115745">Permet de spécifier les paramètres supplémentaires utilisés lorsque <ph name="PRODUCT_FRAME_NAME" /> lance <ph name="PRODUCT_NAME" />. Si cette règle n'est pas configurée, la ligne de commande par défaut est utilisée.</translation> -<translation id="5150323673529584553">Ne pas analyser les fichiers</translation> <translation id="5152787786897382519">Chromium et Google Chrome possèdent tous deux des groupes de règles interdépendantes pour contrôler une fonctionnalité. Ces ensembles sont représentés par les groupes de règles suivants. Les règles pouvant avoir plusieurs sources, seules les valeurs issues de la source ayant la priorité la plus haute sont appliquées. Les valeurs provenant d'une source ayant une priorité inférieure dans le même groupe sont ignorées. L'ordre de priorité est défini à la page <ph name="POLICY_PRIORITY_DOC_URL" />.</translation> <translation id="515816885693899426">Cette règle est obsolète (veuillez utiliser la règle <ph name="URL_BLOCKLIST_POLICY_NAME" /> à la place). @@ -3651,6 +3626,11 @@ Si cette règle n'est pas configurée, <ph name="PRODUCT_NAME" /> charge alors tous les hôtes de messagerie native installés.</translation> <translation id="6224304369267200483">URL/domaines automatiquement autorisés à recevoir une attestation de clé de sécurité</translation> +<translation id="6230442621691161858">Cette fonctionnalité affiche des suggestions de nouveaux contenus à explorer. Les suggestions de contenu concernent des applications, des pages Web et bien plus. + Si cette règle est définie sur "True", les suggestions de nouveaux contenus à explorer sont activées. + Si cette règle est définie sur "False", les suggestions de nouveaux contenus à explorer sont désactivées. + Si cette règle n'est pas définie, les suggestions de nouveaux contenus à explorer sont désactivées pour les utilisateurs gérés et activées pour les autres. + </translation> <translation id="6233173491898450179">Définir le répertoire de téléchargement</translation> <translation id="6234177445959386333">Configurez la liste des URL de connexion d'entreprise pour lesquelles le service de protection par mot de passe doit enregistrer une copie hachée et salée des mots de passe.</translation> <translation id="6242147107333796512">Transmettre les informations liées aux rapports d'erreur, comme l'ID distant, la cause et l'horodatage du problème relevé. @@ -3763,7 +3743,6 @@ <translation id="637934607141010488">Générer une liste des utilisateurs qui se sont récemment connectés à l'appareil. Si cette règle est définie sur "False", aucune liste d'utilisateurs n'est générée.</translation> -<translation id="638668187106406971">Vérifier que les importations respectent les règles de protection des données sensibles</translation> <translation id="6394350458541421998">Cette règle a été supprimée à partir de la version 29 de <ph name="PRODUCT_OS_NAME" />. Veuillez utiliser la règle PresentationScreenDimDelayScale à la place.</translation> <translation id="6401669939808766804">Déconnecter l'utilisateur</translation> <translation id="640244877779556713">Activer la suggestion d'emoji</translation> @@ -4943,7 +4922,6 @@ La valeur de la règle doit être indiquée en millisecondes. Elle doit également être inférieure ou égale au délai d'inactivité.</translation> <translation id="8001701200415781021">Restreindre les comptes Google autorisés à être définis comme comptes de navigation principaux dans <ph name="PRODUCT_NAME" /></translation> -<translation id="8003853057959146975">Envoyer des fichiers pour l'analyse du respect des règles de protection des données sensibles</translation> <translation id="8006219716745491366">Si la règle <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> est activée, la règle <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> vous permet d'établir la liste des URL alternatives pour extraire des termes de recherche du moteur de recherche. Ces URL doivent inclure la chaîne <ph name="SEARCH_TERM_MARKER" />. Si la règle <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> n'est pas configurée, aucune URL alternative n'est utilisée pour extraire les termes de recherche.</translation> @@ -5349,7 +5327,6 @@ Si cette règle est définie sur "False" ou si elle n'est pas configurée, l'utilisateur peut se servir du navigateur sans se connecter à <ph name="PRODUCT_NAME" />.</translation> <translation id="858309738002328421">Bloquer l'importation de fichiers volumineux</translation> <translation id="8584279193368801689">Limite le mode d'impression par code. Si cette règle n'est pas définie, aucune limite ne s'applique. Si le mode est indisponible, cette règle est ignorée. Notez que la fonctionnalité d'impression par code n'est activée que pour les imprimantes utilisant l'un des protocoles IPPS, HTTPS, USB ou IPP sur USB.</translation> -<translation id="8585558195682146109">Envoyer les téléchargements des utilisateurs pour analyse</translation> <translation id="8587229956764455752">Autoriser la création de comptes utilisateur</translation> <translation id="8591713876665299827">Cette règle étant obsolète, elle sera supprimée dans la version 85 de <ph name="PRODUCT_OS_NAME" />. (Veuillez utiliser la règle <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.) @@ -5606,7 +5583,6 @@ <translation id="8942616385591203339">Permet d'activer l'affichage de l'autorisation de synchronisation lors de la première connexion de l'utilisateur. Si cette autorisation n'a jamais besoin d'être montrée à l'utilisateur, cette règle doit être définie sur False. Si cette règle est définie sur False, l'autorisation de synchronisation n'est pas affichée. Si cette règle est définie sur True ou si elle n'est pas configurée, l'autorisation de synchronisation peut être affichée.</translation> -<translation id="8943934315109955032">Ne pas vérifier si les règles de protection des données sensibles sont respectées</translation> <translation id="8947415621777543415">Indiquer l'emplacement de l'appareil</translation> <translation id="8948062138228904066">Liste d'autorisation des serveurs d'authentification</translation> <translation id="8951350807133946005">Définir le répertoire du cache disque</translation> @@ -5620,9 +5596,6 @@ Cette règle ne doit pas être activée si la règle <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> l'est également, car elles partagent la même fonctionnalité côté client. Dans ce cas, le service de synchronisation hébergé par Google est totalement désactivé.</translation> <translation id="8955719471735800169">Haut de page</translation> -<translation id="8956310900055843601">Si cette règle est définie sur "True" ou qu'elle n'est pas configurée, le format 24 heures est utilisé sur l'écran de connexion de l'appareil. Les utilisateurs peuvent modifier ce format dans leur compte, même si celui-ci est défini par défaut. - - Si cette règle est définie sur "False", le format 12 heures est utilisé sur l'appareil.</translation> <translation id="8959992920425111821">Configuration par défaut</translation> <translation id="8970205333161758602">Supprimer l'invite de fermeture de <ph name="PRODUCT_FRAME_NAME" /></translation> <translation id="8976248126101463034">Autoriser l'authentification gnubby pour les hôtes d'accès à distance</translation>
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb index 996ea98..2599a1b 100644 --- a/components/policy/resources/policy_templates_id.xtb +++ b/components/policy/resources/policy_templates_id.xtb
@@ -95,7 +95,6 @@ Jika kebijakan ini tidak disetel, GPO yang disimpan dalam cache dapat digunakan kembali selama maksimal 25 jam. Jika kebijakan ini disetel ke 0, menyimpan GPO ke cache akan dinonaktifkan. Perlu diketahui bahwa ini akan meningkatkan beban server karena GPO akan didownload ulang pada setiap pengambilan kebijakan, walaupun GPO tidak berubah.</translation> -<translation id="1111470455889178048">Kirim upload dan download pengguna untuk pemindaian</translation> <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> akan mengabaikan proxy apa pun untuk daftar host yang diberikan di sini. Kebijakan ini hanya berpengaruh jika Anda telah memilih setelan proxy manual pada 'Pilih cara menentukan setelan server proxy' dan jika kebijakan <ph name="PROXY_SETTINGS_POLICY_NAME" /> tidak ditentukan. @@ -950,16 +949,6 @@ Jika kebijakan ini ditetapkan, pengguna tidak dapat mengganti nilainya. Jika kebijakan ini tidak ditetapkan, layar privasi mula-mula akan dinonaktifkan tetapi dapat dikontrol oleh pengguna.</translation> -<translation id="2423038190900972331">Mengontrol cara <ph name="PRODUCT_NAME" /> memeriksa pelanggaran aturan perlindungan data sensitif pada data yang diupload, didownload, ditempelkan dari papan klip, atau ditarik lalu dilepaskan. - - Jika kebijakan ini tidak ditetapkan atau ditetapkan ke 'Tidak ada', <ph name="PRODUCT_NAME" /> tidak akan memeriksa pelanggaran aturan perlindungan kebijakan data sensitif pada data apa pun. - - Jika kebijakan ini ditetapkan ke 'Periksa download' dan pengguna berusaha mendownload file dari URL dalam kebijakan <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" />, <ph name="PRODUCT_NAME" /> akan memeriksa kepatuhan data yang didownload terhadap aturan perusahaan. - - Jika kebijakan ini ditetapkan ke 'Periksa upload' dan pengguna berusaha mengupload file ke domain yang tidak ada di <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" />, <ph name="PRODUCT_NAME" /> akan memeriksa kepatuhan file yang diupload, data yang ditempelkan dari papan klip, atau data yang ditarik lalu dilepaskan, terhadap aturan perusahaan. - - Jika kebijakan ini ditetapkan ke 'Periksa upload dan download', <ph name="PRODUCT_NAME" /> akan berperilaku sesuai dengan aturan yang dijelaskan di 'Periksa download' dan 'Periksa upload'. - </translation> <translation id="2423255396068675416">Jika kebijakan disetel ke Aktif atau tidak disetel, pengguna dapat menjalankan <ph name="PRODUCT_CROSTINI_NAME" />, selama <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> dan <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> disetel ke Aktif. Jika kebijakan disetel ke Nonaktif, <ph name="PRODUCT_CROSTINI_NAME" /> akan dinonaktifkan bagi pengguna. Jika setelan diubah ke Nonaktif, kebijakan mulai diterapkan ke penampung <ph name="PRODUCT_CROSTINI_NAME" /> baru yang akan dijalankan, bukan yang sudah berjalan.</translation> <translation id="2424098959650060417">Mengontrol printer mana dari <ph name="BULK_PRINTERS_POLICY_NAME" /> yang tersedia untuk pengguna. @@ -1074,7 +1063,6 @@ Nilai kebijakan harus ditentukan dalam milidetik. Nilai dikunci ke kurang dari atau sama dengan penundaan waktu tidak ada aktivitas.</translation> <translation id="2548572254685798999">Laporkan informasi Safe Browsing</translation> <translation id="2550593661567988768">Khusus pencetakan simpleks</translation> -<translation id="2551520365302988324">Kirim upload pengguna untuk pemindaian</translation> <translation id="2552318891854145040">Menyetel kebijakan akan menyiapkan daftar bookmark yang setiap bookmarknya merupakan kamus dengan kunci "<ph name="NAME" />" dan "<ph name="URL_LABEL" />". Kunci ini memiliki nama dan target bookmark. Admin dapat menyiapkan subfolder dengan menentukan bookmark tanpa kunci "<ph name="URL_LABEL" />", tetapi dengan kunci "<ph name="CHILDREN" />" tambahan. Kunci ini juga memiliki daftar bookmark, yang beberapa di antaranya juga merupakan folder. Chrome akan mengubah URL tidak lengkap seolah-olah URL tersebut dikirimkan melalui kolom URL. Misalnya, "<ph name="GOOGLE_COM" />" menjadi "<ph name="HTTPS_GOOGLE_COM" />". Pengguna tidak dapat mengubah folder lokasi bookmark (meskipun pengguna dapat menyembunyikannya dari kolom bookmark). Nama folder default untuk bookmark terkelola adalah "Bookmark terkelola (Managed bookmarks)", tetapi dapat diubah dengan menambahkan sub-kamus baru ke kebijakan dengan kunci tunggal bernama "<ph name="TOPLEVEL_NAME" />" yang berisi nama folder yang diinginkan sebagai nilainya. Bookmark terkelola tidak disinkronkan ke akun pengguna dan ekstensi tidak dapat mengubahnya.</translation> @@ -1837,7 +1825,6 @@ Untuk mengetahui detail <ph name="CORS" />, buka: <ph name="CORS_HELP_URL" />. Perlu diketahui bahwa kebijakan ini sebelumnya diumumkan akan dihapus di <ph name="PRODUCT_NAME" /> versi 82, tetapi saat ini telah dihapus di versi 84.</translation> -<translation id="3624515566460517364">Memeriksa pelanggaran aturan perlindungan data sensitif pada file yang diupload dan didownload.</translation> <translation id="3627678165642179114">Mengaktifkan atau menonaktifkan layanan web memeriksa ejaan</translation> <translation id="3628480121685794414">Aktifkan pencetakan simpleks</translation> <translation id="3631099945620529777">Jika ditetapkan ke False, tombol 'Akhiri proses' akan dinonaktifkan di Pengelola Tugas. @@ -1995,7 +1982,6 @@ Jika kebijakan tidak disetel atau disetel ke daftar kosong, tidak akan ada mode buka kunci cepat yang tersedia bagi perangkat terkelola.</translation> <translation id="3877517141460819966">Mode autentikasi faktor kedua yang terintegrasi</translation> -<translation id="3879196885908353077">Memeriksa pelanggaran aturan perlindungan data sensitif pada download</translation> <translation id="3879208481373875102">Konfigurasi daftar Aplikasi Web yang diinstal otomatis</translation> <translation id="388237772682176890">Kebijakan ini sudah tidak digunakan di M53 dan dihapus di M54, karena dukungan SPDY/3.1 telah dihapus. @@ -2418,7 +2404,6 @@ Notifikasi selalu ditampilkan di perangkat yang tidak dikelola.</translation> <translation id="4510923771103268849">Pengguna diizinkan untuk memiliki akses root ke penampung Crostini</translation> <translation id="4515404363392014383">Aktifkan Safe Browsing untuk sumber tepercaya</translation> -<translation id="4517928394515633751">Memindai download pengguna dengan Safe Browsing</translation> <translation id="4518251772179446575">Tanyakan setiap kali situs ingin melacak lokasi fisik pengguna</translation> <translation id="4529868888205510667">Jika kebijakan ditetapkan ke Benar (True) atau tidak ditetapkan, pengguna akan dapat menggunakan ARC, kecuali ARC dinonaktifkan dengan cara lain. Jika kebijakan ditetapkan ke Salah (False), pengguna yang tidak terafiliasi tidak boleh menggunakan ARC. @@ -2593,15 +2578,6 @@ Nilai '*' untuk daftar yang tidak diizinkan berarti semua host pesan native diblokir kecuali tercantum secara eksplisit dalam daftar yang diizinkan. Jika kebijakan ini tidak disetel, <ph name="PRODUCT_NAME" /> akan memuat semua host pesan native yang diinstal.</translation> -<translation id="4771144269610910963">Kebijakan ini mengontrol pemindaian mendalam pada hasil download pengguna dengan Safe Browsing. Jika tidak ditetapkan, atau ditetapkan ke default, 'Jangan pindai file', hasil download pengguna tidak akan dipindai oleh Safe Browsing. - - Jika ditetapkan ke 'Kirim hasil download pengguna untuk pemindaian', hasil download pengguna akan dikirimkan melalui jaringan ke Safe Browsing untuk pemindaian malware. - - Jika ditetapkan ke 'Kirim hasil upload pengguna untuk pemindaian', hasil upload pengguna akan dikirimkan melalui jaringan ke Safe Browsing untuk pemindaian malware. - - Jika ditetapkan ke 'Kirim hasil upload dan hasil download pengguna untuk pemindaian', akan berperilaku sesuai aturan yang dijelaskan di 'Kirim hasil upload pengguna untuk pemindaian' dan 'Kirim hasil download pengguna untuk pemindaian'. - - Lihat kebijakan <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> dan <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" /> untuk mengetahui bagaimana detail hasil pemindaian ditampilkan kepada pengguna dan admin.</translation> <translation id="4787763197941188108">Mengganti ukuran halaman pencetakan default. <ph name="PAGE_SIZE_NAME" /> harus berisi salah satu format yang tercantum atau 'kustom' jika ukuran kertas yang diminta tidak ada dalam daftar. Jika nilai 'kustom' ditetapkan, properti <ph name="PAGE_SIZE_CUSTOM_SIZE" /> harus ditentukan. Nilai ini menjelaskan tinggi dan lebar yang diinginkan dalam satuan mikrometer. Jika tidak, properti <ph name="PAGE_SIZE_CUSTOM_SIZE" /> tidak harus ditentukan. Kebijakan yang melanggar aturan ini akan diabaikan. @@ -2814,7 +2790,6 @@ <translation id="5148753489738115745">Memungkinkan Anda menentukan parameter tambahan yang digunakan saat <ph name="PRODUCT_FRAME_NAME" /> meluncurkan <ph name="PRODUCT_NAME" />. Jika kebijakan ini tidak disetel, baris perintah default akan digunakan.</translation> -<translation id="5150323673529584553">Jangan pindai file</translation> <translation id="5152787786897382519">Chromium dan Google Chrome memiliki beberapa grup kebijakan yang saling bergantung satu sama lain untuk memberikan kontrol terhadap fitur. Kumpulan ini ditunjukkan oleh grup kebijakan berikut. Karena kebijakan dapat memiliki beberapa sumber, hanya nilai yang berasal dari sumber dengan prioritas tertinggi yang akan diterapkan. Nilai yang berasal dari sumber dengan prioritas lebih rendah di grup yang sama akan diabaikan. Urutan prioritas ditentukan di <ph name="POLICY_PRIORITY_DOC_URL" />.</translation> <translation id="515816885693899426">Kebijakan ini tidak digunakan lagi. Sebagai gantinya, gunakan kebijakan '<ph name="URL_BLOCKLIST_POLICY_NAME" />'. @@ -3646,6 +3621,11 @@ Jika kebijakan ini tidak disetel, <ph name="PRODUCT_NAME" /> akan memuat semua host pesan native yang diinstal.</translation> <translation id="6224304369267200483">URL/domain otomatis mengizinkan pengesahan langsung Kunci Keamanan</translation> +<translation id="6230442621691161858">Fitur ini mengaktifkan saran konten baru untuk dijelajahi. Termasuk aplikasi, halaman web, dan lainnya. + Jika kebijakan ini disetel ke Benar (True), saran konten baru untuk dijelajahi akan diaktifkan. + Jika kebijakan ini disetel ke Salah (False), saran konten baru untuk dijelajahi akan dinonaktifkan. + Jika kebijakan ini tidak disetel, saran konten baru untuk dijelajahi akan dinonaktifkan bagi pengguna terkelola dan akan diaktifkan bagi pengguna lainnya. + </translation> <translation id="6233173491898450179">Setel direktori download</translation> <translation id="6234177445959386333">Mengonfigurasi daftar URL login perusahaan tempat layanan perlindungan sandi harus merekam hash sandi yang dilengkapi salt.</translation> <translation id="6242147107333796512">Melaporkan informasi terkait laporan kerusakan, seperti id remote, @@ -3761,7 +3741,6 @@ <translation id="637934607141010488">Melaporkan daftar pengguna perangkat yang saat ini masuk. Jika kebijakan disetel ke false, pengguna tidak akan dilaporkan.</translation> -<translation id="638668187106406971">Memeriksa pelanggaran aturan perlindungan data sensitif pada file yang diupload</translation> <translation id="6394350458541421998">Kebijakan ini tidak lagi digunakan sejak <ph name="PRODUCT_OS_NAME" /> versi 29. Gunakan kebijakan PresentationScreenDimDelayScale sebagai gantinya.</translation> <translation id="6401669939808766804">Keluarkan pengguna</translation> <translation id="640244877779556713">Mengaktifkan Saran Emoji</translation> @@ -4936,7 +4915,6 @@ Nilai kebijakan harus ditentukan dalam milidetik. Nilai dikunci ke kurang dari atau sama dengan penundaan waktu tidak ada aktivitas.</translation> <translation id="8001701200415781021">Batasi akun Google mana yang diizinkan untuk disetel sebagai akun utama browser di <ph name="PRODUCT_NAME" /></translation> -<translation id="8003853057959146975">Mengirimkan file untuk pemeriksaan pelanggaran aturan perlindungan data sensitif</translation> <translation id="8006219716745491366">Jika <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> aktif, menyetel <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> akan menentukan daftar URL alternatif untuk mengekstrak istilah penelusuran dari mesin telusur. URL harus menyertakan string <ph name="SEARCH_TERM_MARKER" />. Jika <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> tidak disetel, tidak ada URL alternatif yang digunakan untuk mengekstrak istilah penelusuran.</translation> @@ -5336,7 +5314,6 @@ Jika kebijakan ini ditetapkan ke false atau tidak dikonfigurasi, pengguna dapat menggunakan browser tanpa harus login ke <ph name="PRODUCT_NAME" />.</translation> <translation id="858309738002328421">Blokir upload file berukuran besar</translation> <translation id="8584279193368801689">Membatasi mode pencetakan PIN. Kebijakan yang tidak ditetapkan dianggap sebagai tidak ada batasan. Jika mode ini tidak tersedia, kebijakan ini akan diabaikan. Perhatikan bahwa fitur pencetakan PIN hanya diaktifkan untuk printer yang menggunakan salah satu dari protokol IPPS, HTTPS, USB, atau IPP-over-USB.</translation> -<translation id="8585558195682146109">Kirimkan download pengguna untuk pemindaian</translation> <translation id="8587229956764455752">Mengizinkan pembuatan akun pengguna baru</translation> <translation id="8591713876665299827">Perhatikan bahwa kebijakan ini sudah tidak digunakan lagi dan akan dihapus di <ph name="PRODUCT_OS_NAME" /> versi 85. Sebagai gantinya, gunakan <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />. @@ -5581,7 +5558,6 @@ <translation id="8942616385591203339">Kebijakan ini mengontrol apakah Izin Sinkronisasi dapat ditampilkan ke pengguna saat login pertama kali. Kebijakan ini harus disetel ke false jika Izin Sinkronisasi tidak diperlukan bagi pengguna. Jika disetel ke false, Izin Sinkronisasi tidak akan ditampilkan. Jika disetel ke true atau tidak disetel, Izin Sinkronisasi dapat ditampilkan.</translation> -<translation id="8943934315109955032">Tidak memeriksa pelanggaran aturan perlindungan data sensitif</translation> <translation id="8947415621777543415">Laporkan lokasi perangkat</translation> <translation id="8948062138228904066">Daftar server autentikasi yang diizinkan</translation> <translation id="8951350807133946005">Setel direktori cache disk</translation> @@ -5595,9 +5571,6 @@ Kebijakan ini seharusnya tidak diaktifkan jika kebijakan <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> diaktifkan, karena fitur tersebut menggunakan fungsi sisi klien yang sama. Jika terjadi kasus seperti ini, sinkronisasi yang dihosting Google akan dinonaktifkan sepenuhnya.</translation> <translation id="8955719471735800169">Kembali ke atas</translation> -<translation id="8956310900055843601">Jika kebijakan ditetapkan ke Benar (True) atau tidak ditetapkan, layar login perangkat akan menggunakan format waktu 24 jam. Sesi pengguna juga akan menggunakan format ini secara default, tetapi pengguna dapat mengubah format waktu akun. - - Jika kebijakan ditetapkan ke Salah (False), perangkat akan menggunakan format 12 jam.</translation> <translation id="8959992920425111821">Konfigurasi default</translation> <translation id="8970205333161758602">Tindas permintaan penghentian <ph name="PRODUCT_FRAME_NAME" /></translation> <translation id="8976248126101463034">Izinkan autentikasi gnubby untuk host akses jarak jauh</translation>
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb index a5d79e8..b53f262d 100644 --- a/components/policy/resources/policy_templates_it.xtb +++ b/components/policy/resources/policy_templates_it.xtb
@@ -95,7 +95,6 @@ Se la norma non viene impostata, i GPO memorizzati nella cache possono essere riutilizzati per un periodo massimo di 25 ore. Se la norma è impostata su 0, la memorizzazione nella cache del GPO è disattivata. Tieni presente che in questo modo aumenterà il carico del server perché i GPO verranno scaricati nuovamente a ogni recupero della norma, anche se non sono stati modificati.</translation> -<translation id="1111470455889178048">Invia caricamenti e download degli utenti da analizzare</translation> <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> aggirerà qualsiasi proxy per l'elenco di host fornito. Questa norma viene applicata solo se hai selezionato manualmente le impostazioni proxy in "Scegli come specificare le impostazioni del server proxy" e se la norma <ph name="PROXY_SETTINGS_POLICY_NAME" /> non è stata specificata. @@ -928,16 +927,6 @@ Se questo criterio viene impostato, l'utente non potrà sostituire il valore. Se questo criterio non viene impostato, la Schermata sulla privacy verrà inizialmente disattivata, ma potrà essere controllata dall'utente.</translation> -<translation id="2423038190900972331">Consente di stabilire in che modo <ph name="PRODUCT_NAME" /> verifica eventuali violazioni delle regole relative alla protezione dei dati sensibili nei dati caricati, scaricati, incollati dagli appunti o trascinati. - - Se questo criterio non è impostato o è impostato su "Nessuno", <ph name="PRODUCT_NAME" /> non verificherà la presenza di eventuali violazioni delle regole relative alla protezione dei dati sensibili all'interno dei dati. - - Se questo criterio è impostato su "Verifica download" e l'utente tenta di scaricare un file da un URL incluso nel criterio <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" />, <ph name="PRODUCT_NAME" /> verificherà la conformità dei dati scaricati rispetto alle regole aziendali. - - Se questo criterio è impostato su "Verifica caricamenti" e l'utente tenta di caricare un file in un dominio che non è incluso nel criterio <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" />, <ph name="PRODUCT_NAME" /> verificherà la conformità del file caricato, dei dati incollati dagli appunti o dei dati trascinati rispetto alle regole aziendali. - - Se questo criterio viene impostato su "Verifica caricamenti e download", <ph name="PRODUCT_NAME" /> si comporta secondo le regole descritte nelle impostazioni "Verifica download" e "Verifica caricamenti". - </translation> <translation id="2423255396068675416">Se il criterio viene impostato su Attivato o se non viene configurato, gli utenti possono eseguire <ph name="PRODUCT_CROSTINI_NAME" />, finché <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> e <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> sono impostati su Attivato. Se il criterio viene impostato su Disattivato, <ph name="PRODUCT_CROSTINI_NAME" /> viene disattivato per l'utente. Impostando il criterio su Disattivato, questo viene applicato all'avvio di nuovi container <ph name="PRODUCT_CROSTINI_NAME" />, non a quelli già in esecuzione.</translation> <translation id="2424098959650060417">Consente di stabilire quali stampanti del criterio <ph name="BULK_PRINTERS_POLICY_NAME" /> sono a disposizione degli utenti. @@ -1053,7 +1042,6 @@ Il valore del criterio deve essere specificato in millisecondi. I valori devono essere inferiori o uguali al ritardo di inattività.</translation> <translation id="2548572254685798999">Segnala dati di Navigazione sicura</translation> <translation id="2550593661567988768">Solo stampa su un lato</translation> -<translation id="2551520365302988324">Invia caricamenti degli utenti da analizzare</translation> <translation id="2552318891854145040">La configurazione del criterio consente di impostare un elenco di preferiti dove ognuno di questi è un dizionario con le chiavi "<ph name="NAME" />" e "<ph name="URL_LABEL" />" indicanti il nome e la destinazione del preferito. Gli amministratori possono configurare una sottocartella definendo un preferito senza una chiave "<ph name="URL_LABEL" />", ma con una chiave "<ph name="CHILDREN" />" aggiuntiva. Tale chiave contiene anche un elenco di preferiti, alcuni dei quali possono essere anche cartelle. Chrome corregge gli URL incompleti come se fossero stati inviati tramite la barra degli indirizzi. Ad esempio, "<ph name="GOOGLE_COM" />" diventa "<ph name="HTTPS_GOOGLE_COM" />". Gli utenti non possono modificare le cartelle in cui vengono inseriti i preferiti (ma possono nasconderle dalla barra dei Preferiti). Il nome predefinito della cartella per i preferiti gestiti è "Preferiti gestiti", ma può essere modificato aggiungendo un nuovo dizionario secondario al criterio con una chiave unica chiamata "<ph name="TOPLEVEL_NAME" />" e il nome della cartella che preferiscono gli utenti come valore. I preferiti gestiti non vengono sincronizzati con l'account utente e le estensioni non possono modificarli.</translation> @@ -1818,7 +1806,6 @@ Per informazioni dettagliate su <ph name="CORS" />, visita la pagina <ph name="CORS_HELP_URL" />. Tieni presente che, nonostante sia stata comunicata la rimozione di questo criterio nella versione 82 di <ph name="PRODUCT_NAME" />, il criterio è stato rimosso nella versione 84.</translation> -<translation id="3624515566460517364">Verifica eventuali violazioni delle regole relative alla protezione dei dati sensibili di caricamenti e download</translation> <translation id="3627678165642179114">Attiva o disattiva il servizio web di controllo ortografico</translation> <translation id="3628480121685794414">Attiva stampa su un lato</translation> <translation id="3631099945620529777">Se la norma è impostata su false, il pulsante "Termina processo" in Task Manager viene disattivato. @@ -1972,7 +1959,6 @@ Se il criterio non è impostato o è impostato su un elenco vuoto, non saranno disponibili modalità di sblocco rapido per i dispositivi gestiti.</translation> <translation id="3877517141460819966">Modalità di autenticazione a due fattori integrata</translation> -<translation id="3879196885908353077">Verifica eventuali violazioni delle regole relative alla protezione dei dati sensibili dei download</translation> <translation id="3879208481373875102">Configura l'elenco delle app web con installazione forzata</translation> <translation id="388237772682176890">Questa norma è stata ritirata in M53 e rimossa in M54 perché è stato rimosso il supporto di SPDY/3.1. @@ -2395,7 +2381,6 @@ La notifica viene sempre visualizzata sui dispositivi non gestiti.</translation> <translation id="4510923771103268849">L'utente può avere accesso root ai contenitori Crostini</translation> <translation id="4515404363392014383">Attiva Navigazione sicura per le origini attendibili</translation> -<translation id="4517928394515633751">Analizza i download degli utenti tramite Navigazione sicura</translation> <translation id="4518251772179446575">Chiedi ogni volta che un sito desidera monitorare la posizione fisica degli utenti</translation> <translation id="4529868888205510667">Se il criterio è impostato su True o non è configurato, gli utenti possono utilizzare ARC, a meno che ARC sia stato disattivato in altri modi. Se il criterio è impostato su False, gli utenti non affiliati non possono utilizzare ARC. @@ -2571,15 +2556,6 @@ Il valore "*" di una lista bloccata indica che tutti gli host di messaggi nativi sono bloccati, a meno che vengano elencati esplicitamente nella lista consentita. Se questo criterio non viene impostato, <ph name="PRODUCT_NAME" /> caricherà tutti gli host di messaggi nativi installati.</translation> -<translation id="4771144269610910963">Questo criterio consente di controllare l'analisi approfondita dei download degli utenti tramite Navigazione sicura. Se non viene impostato o viene impostata l'opzione predefinita "Non analizzare i file", i download degli utenti non verranno analizzati dalla funzionalità Navigazione sicura. - - Se viene impostata l'opzione "Invia download degli utenti da analizzare", i download degli utenti verranno inviati tramite la rete alla funzionalità Navigazione sicura per verificare l'eventuale presenza di malware. - - Se viene impostata l'opzione "Invia caricamenti degli utenti da analizzare", i caricamenti degli utenti verranno inviati tramite la rete alla funzionalità Navigazione sicura per verificare l'eventuale presenza di malware. - - Se viene impostata l'opzione "Invia caricamenti e download degli utenti da analizzare", il criterio si comporta secondo le regole descritte nelle impostazioni "Invia caricamenti degli utenti da analizzare" e "Invia download degli utenti da analizzare". - - Per informazioni dettagliate sulla modalità di visualizzazione dei risultati dell'analisi per l'utente e l'amministratore, vedi i criteri <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> e <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" />.</translation> <translation id="4787763197941188108">Consente di sostituire le dimensioni della pagina di stampa predefinita. <ph name="PAGE_SIZE_NAME" /> non dovrebbe contenere uno dei formati elencati o "personalizzato" se la dimensione della carta richiesta non è nell'elenco. Se viene fornito il valore "personalizzato", deve essere specificata la proprietà <ph name="PAGE_SIZE_CUSTOM_SIZE" />. Descrive l'altezza e la larghezza desiderate in micrometri. Diversamente la proprietà <ph name="PAGE_SIZE_CUSTOM_SIZE" /> non deve essere specificata. Il criterio che viola queste regole viene ignorato. @@ -2794,7 +2770,6 @@ <translation id="5148753489738115745">Consente di specificare dei parametri aggiuntivi da utilizzare quando <ph name="PRODUCT_FRAME_NAME" /> avvia <ph name="PRODUCT_NAME" />. Se questa norma non viene impostata viene utilizzata la riga di comando predefinita.</translation> -<translation id="5150323673529584553">Non analizzare i file</translation> <translation id="5152787786897382519">Chromium e Google Chrome hanno alcuni gruppi di criteri che dipendono gli uni dagli altri per fornire il controllo di una funzionalità. Questi insiemi sono rappresentati dai seguenti gruppi di criteri. Dato che i criteri possono avere diverse origini, vengono applicati soltanto i valori provenienti dall'origine con la priorità massima. I valori dello stesso gruppo provenienti da un'origine con priorità inferiore vengono ignorati. L'ordine di priorità è definito in <ph name="POLICY_PRIORITY_DOC_URL" />.</translation> <translation id="515816885693899426">Questo criterio è obsoleto. Usa il criterio "<ph name="URL_BLOCKLIST_POLICY_NAME" />". @@ -3620,6 +3595,11 @@ Se questo criterio non viene impostato, <ph name="PRODUCT_NAME" /> caricherà tutti gli host di messaggi nativi installati.</translation> <translation id="6224304369267200483">URL/domini per cui è consentita automaticamente l'attestazione diretta dei token di sicurezza</translation> +<translation id="6230442621691161858">Questa funzionalità consente di attivare suggerimenti relativi a nuovi contenuti da esplorare. Sono incluse app, pagine web e altro. + Se questo criterio viene impostato su True, i suggerimenti relativi a nuovi contenuti da esplorare vengono attivati. + Se questo criterio viene impostato su False, i suggerimenti relativi a nuovi contenuti da esplorare vengono disattivati. + Se questo criterio non viene configurato, saranno disattivati per gli utenti gestiti i suggerimenti per i nuovi contenuti da esplorare e attivati per altri utenti. + </translation> <translation id="6233173491898450179">Imposta directory di download</translation> <translation id="6234177445959386333">Configura l'elenco di URL di accesso aziendale in cui il servizio di protezione tramite password deve acquisire gli hash con salt delle password.</translation> <translation id="6242147107333796512">Segnala informazioni relative ai rapporti sugli arresti anomali, come ID remoto, @@ -3733,7 +3713,6 @@ Se il criterio è configurato, gli utenti non possono apportare modifiche. Se non è configurato, gli utenti possono decidere se mostrare o nascondere la scorciatoia per le app dal menu contestuale della barra dei Preferiti.</translation> <translation id="637934607141010488">Consente di indicare un elenco di utenti del dispositivo che hanno eseguito l'accesso di recente. Se la norma è impostata su False, gli utenti non vengono indicati.</translation> -<translation id="638668187106406971">Verifica eventuali violazioni delle regole relative alla protezione dei dati sensibili dei caricamenti</translation> <translation id="6394350458541421998">La norma non è più supportata a partire dalla versione 29 di <ph name="PRODUCT_OS_NAME" />. Utilizza la norma PresentationScreenDimDelayScale.</translation> <translation id="6401669939808766804">Disconnetti l'utente</translation> <translation id="640244877779556713">Attiva suggerimento di emoji</translation> @@ -4909,7 +4888,6 @@ Il valore del criterio deve essere specificato in millisecondi. I valori devono essere inferiori o uguali al ritardo di inattività.</translation> <translation id="8001701200415781021">Limita gli Account Google che è possibile impostare come account principali del browser in <ph name="PRODUCT_NAME" /></translation> -<translation id="8003853057959146975">Invia file per l'ispezione di eventuali violazioni delle regole relative alla protezione dei dati sensibili</translation> <translation id="8006219716745491366">Se il criterio <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> è attivo, l'assegnazione di un valore al criterio <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> consente di specificare un elenco di URL alternativi per l'estrazione dei termini di ricerca dal motore di ricerca. Gli URL devono includere la stringa <ph name="SEARCH_TERM_MARKER" />. Se il criterio <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> non viene configurato, per l'estrazione dei termini di ricerca non vengono utilizzati URL alternativi.</translation> @@ -5314,7 +5292,6 @@ Se la norma viene impostata su false o non viene configurata, l'utente può utilizzare il browser senza accedere a <ph name="PRODUCT_NAME" />.</translation> <translation id="858309738002328421">Blocca i caricamenti di file di grandi dimensioni</translation> <translation id="8584279193368801689">Consente di limitare la modalità di stampa PIN. Se il criterio non viene impostato non vengono applicate limitazioni. Se la modalità non è disponibile, questo criterio viene ignorato. Tieni presente che la funzionalità di stampa PIN viene attivata solo per le stampanti che usano uno dei protocolli IPPS, HTTPS, USB o IPP-over-USB.</translation> -<translation id="8585558195682146109">Invia download degli utenti da analizzare</translation> <translation id="8587229956764455752">Consenti la creazione di nuovi account utente</translation> <translation id="8591713876665299827">Tieni presente che questo criterio è obsoleto e verrà rimosso nella versione 85 di <ph name="PRODUCT_OS_NAME" />. Usa il criterio <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />. @@ -5558,7 +5535,6 @@ <translation id="8942616385591203339">Questa norma consente di controllare se il consenso alla sincronizzazione può essere mostrato all'utente durante il primo accesso. Dovrebbe essere impostata su false se tale consenso non è mai necessario per l'utente. Se impostata su false, il consenso alla sincronizzazione non verrà visualizzato. Se impostata su true o non viene impostata, il consenso alla sincronizzazione può essere visualizzato.</translation> -<translation id="8943934315109955032">Non verificare eventuali violazioni delle regole relative alla protezione dei dati sensibili</translation> <translation id="8947415621777543415">Segnala posizione del dispositivo</translation> <translation id="8948062138228904066">Lista consentita di server di autenticazione</translation> <translation id="8951350807133946005">Impostazione directory della cache su disco</translation> @@ -5572,9 +5548,6 @@ Questa norma non deve essere attivata quando la norma <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> è attiva, perché tale funzione ha la stessa funzionalità lato client. La sincronizzazione in hosting su Google viene completamente disattivata in questo caso.</translation> <translation id="8955719471735800169">Torna all'inizio</translation> -<translation id="8956310900055843601">Se il criterio viene impostato su True o non viene impostato, nella schermata di accesso del dispositivo viene usato il formato dell'orologio di 24 ore. Questo formato viene usato per impostazione predefinita anche per le sessioni utente, ma gli utenti possono cambiare il formato dell'orologio dell'account. - - Se il criterio viene impostato su False, sul dispositivo viene usato il formato dell'orologio di 12 ore.</translation> <translation id="8959992920425111821">Configurazione predefinita</translation> <translation id="8970205333161758602">Eliminazione del messaggio di richiesta di turndown di <ph name="PRODUCT_FRAME_NAME" /></translation> <translation id="8976248126101463034">Consenti l'autenticazione Gnubby per gli host di accesso remoto</translation>
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb index d54fbc4..2bb031c 100644 --- a/components/policy/resources/policy_templates_ja.xtb +++ b/components/policy/resources/policy_templates_ja.xtb
@@ -95,7 +95,6 @@ このポリシーを未設定にすると、キャッシュされた GPO は最大 25 時間まで再使用される可能性があります。 このポリシーを 0 に設定すると、GPO のキャッシュは無効になります。この場合、GPO は変更が発生していなくてもポリシーを取り込むたびに再ダウンロードされるため、サーバーの負荷は高くなります。</translation> -<translation id="1111470455889178048">ユーザーのアップロードとダウンロードをスキャンに送信する</translation> <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> はここで指定したホストのリストに対してプロキシをすべて無視します。 このポリシーが適用されるのは、[プロキシ サーバー設定の指定方法を選択する] で手動によるプロキシ設定を選択し、<ph name="PROXY_SETTINGS_POLICY_NAME" /> ポリシーが指定されていない場合のみです。 @@ -930,16 +929,6 @@ このポリシーを設定した場合、ユーザーは値をオーバーライドできません。 このポリシーを未設定のままにした場合、初期状態ではプライバシー スクリーンが無効になりますが、ユーザーは設定を変更できます。</translation> -<translation id="2423038190900972331"><ph name="PRODUCT_NAME" /> で、アップロード、ダウンロード、クリップボードから貼り付け、ドラッグ&ドロップしたデータに対して、機密データ保護ルールの違反をチェックする方法を管理します。 - - このポリシーを設定しないか「なし」に設定した場合、<ph name="PRODUCT_NAME" /> では、どのデータに対しても機密データ保護ルールの違反はチェックされません。 - - このポリシーを「ダウンロードをチェックする」に設定していて、ユーザーが <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" /> ポリシーにある URL からファイルをダウンロードしようとした場合、<ph name="PRODUCT_NAME" /> はダウンロードしたファイルに対して、企業ルールの遵守状況をチェックします。 - - このポリシーを「アップロードをチェックする」に設定していて、ユーザーが <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" /> にないドメインにファイルをアップロードしようとした場合、<ph name="PRODUCT_NAME" /> はアップロードしたファイル、クリップボードから貼り付けたデータ、またはドラッグ&ドロップしたデータに対して、企業ルールの遵守状況をチェックします。 - - このポリシーを「アップロードとダウンロードをチェックする」に設定した場合、<ph name="PRODUCT_NAME" /> は「ダウンロードをチェックする」と「アップロードをチェックする」のルールに従って動作します。 - </translation> <translation id="2423255396068675416">このポリシーを有効に設定するか未設定のままにした場合、<ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> と <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> が有効であれば、ユーザーは <ph name="PRODUCT_CROSTINI_NAME" /> を実行できます。このポリシーを無効に設定した場合、ユーザーに対して <ph name="PRODUCT_CROSTINI_NAME" /> はオフになります。このポリシーを無効に変更すると、すでに実行されているコンテナではなく、新しい <ph name="PRODUCT_CROSTINI_NAME" /> コンテナの開始に対してポリシーが適用されます。</translation> <translation id="2424098959650060417">ユーザーが <ph name="BULK_PRINTERS_POLICY_NAME" /> のどのプリンタを使用できるかを制御します。 @@ -1053,7 +1042,6 @@ このポリシーの値はミリ秒単位とし、アイドル待ちの時間と同じかそれより短い時間を指定できます。</translation> <translation id="2548572254685798999">セーフ ブラウジングの情報についてレポートを作成する</translation> <translation id="2550593661567988768">片面印刷のみ</translation> -<translation id="2551520365302988324">ユーザーのアップロードをスキャンに送信する</translation> <translation id="2552318891854145040">このポリシーを設定した場合、ブックマークのリストがセットアップされます。各ブックマークは、ブックマークの名前を定義する「<ph name="NAME" />」キーとブックマークの対象を定義する「<ph name="URL_LABEL" />」キーを含むディクショナリです。管理者は、ブックマークの定義で「<ph name="URL_LABEL" />」の代わりに「<ph name="CHILDREN" />」キーを追加して、サブフォルダをセットアップできます。このキーにもブックマークのリストを指定でき、さらにフォルダを指定することもできます。Chrome では、アドレスバーから不完全な URL が送信されたときと同様に、不完全な URL が修正されます。たとえば「<ph name="GOOGLE_COM" />」は「<ph name="HTTPS_GOOGLE_COM" />」になります。 ユーザーはブックマークが保存されるフォルダを変更できません(ブックマーク バーでフォルダを非表示にすることはできます)。管理対象のブックマークのデフォルトのフォルダ名は「管理対象のブックマーク」です。フォルダ名を変更するには、希望するフォルダ名を値とする「<ph name="TOPLEVEL_NAME" />」キーを 1 つ含む新しいサブディクショナリをポリシーに追加します。管理対象のブックマークは、ユーザー アカウントと同期されず、拡張機能で変更することもできません。</translation> @@ -1812,7 +1800,6 @@ <ph name="CORS" /> の詳細については、<ph name="CORS_HELP_URL" /> をご覧ください。 なお、このポリシーは <ph name="PRODUCT_NAME" /> バージョン 82 で削除される予定でしたが、バージョン 84 で削除されました。</translation> -<translation id="3624515566460517364">アップロードとダウンロードに対して、機密データ保護ルールの違反をチェックする</translation> <translation id="3627678165642179114">スペルチェック ウェブ サービスを有効または無効にする</translation> <translation id="3628480121685794414">片面印刷を有効にする</translation> <translation id="3631099945620529777">false の場合、タスク マネージャで [プロセスを終了] ボタンが無効になります。 @@ -1969,7 +1956,6 @@ このポリシーを設定しない場合やリストを空白にした場合、管理対象のデバイスでクイック ロック解除モードは使用できません。</translation> <translation id="3877517141460819966">統合 2 段階認証モード</translation> -<translation id="3879196885908353077">ダウンロードに対して、機密データ保護ルールの違反をチェックする</translation> <translation id="3879208481373875102">強制的にインストールされるウェブアプリのリストを設定する</translation> <translation id="388237772682176890">SPDY/3.1 がサポートされなくなるため、このポリシーは、M53 でサポート終了、M54 で廃止となります。 @@ -2391,7 +2377,6 @@ 管理対象以外のデバイスでは、通知は常に表示されます。</translation> <translation id="4510923771103268849">Crostini コンテナへのルートアクセスをユーザーに許可する</translation> <translation id="4515404363392014383">信頼できる提供元に対してセーフ ブラウジングを有効にする</translation> -<translation id="4517928394515633751">ユーザーのダウンロードをセーフ ブラウジングでスキャンする</translation> <translation id="4518251772179446575">サイトがユーザーの物理的な現在地を追跡しようとしたときに毎回確認する</translation> <translation id="4529868888205510667">このポリシーを True に設定するか未設定のままにした場合、ユーザーは ARC を使用できます(ARC が他の方法でオフになっている場合を除く)。このポリシーを False に設定した場合、外部のユーザーは ARC を使用できない場合があります。 @@ -2565,15 +2550,6 @@ 拒否リストに値「*」を指定した場合、明示的に許可リストに登録されていない限り、すべてのネイティブ メッセージング ホストがブロックされます。 このポリシーを未設定のままにした場合、<ph name="PRODUCT_NAME" /> はインストールされたネイティブ メッセージング ホストをすべて読み込みます。</translation> -<translation id="4771144269610910963">このポリシーを使用すると、ユーザーのダウンロードに対してセーフ ブラウジングによる詳細なスキャンを行うかどうかを管理できます。このポリシーを設定しないか、デフォルトの「ファイルをスキャンしない」に設定した場合、ユーザーのダウンロードに対してセーフ ブラウジングによるスキャンは行われません。 - - 「ユーザーのダウンロードをスキャンに送信する」に設定した場合は、ユーザーのダウンロードがネットワークを介してセーフ ブラウジングに送信され、不正なソフトウェアのスキャンが行われます。 - - 「ユーザーのアップロードをスキャンに送信する」に設定した場合は、ユーザーのアップロードがネットワークを介してセーフ ブラウジングに送信され、不正なソフトウェアのスキャンが行われます。 - - 「ユーザーのアップロードとダウンロードをスキャンに送信する」に設定した場合は、「ユーザーのアップロードをスキャンに送信する」と「ユーザーのダウンロードをスキャンに送信する」のルールに準じた動作となります。 - - スキャンの結果がユーザーや管理者にどのように表示されるかについて詳しくは、<ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> ポリシーと <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" /> ポリシーをご覧ください。</translation> <translation id="4787763197941188108">デフォルトの印刷ページサイズをオーバーライドします。 <ph name="PAGE_SIZE_NAME" /> にはリストのいずれかの形式または「カスタム」(必要な用紙サイズがリストにない場合)を指定する必要があります。「カスタム」値を使用する場合は、<ph name="PAGE_SIZE_CUSTOM_SIZE" /> プロパティを指定する必要があります。このプロパティには、必要な高さと幅を mm 単位で指定します。それ以外の場合、<ph name="PAGE_SIZE_CUSTOM_SIZE" /> プロパティは指定しないでください。これらのルールにそぐわない場合、ポリシーは無視されます。 @@ -2778,7 +2754,6 @@ <translation id="5148753489738115745"><ph name="PRODUCT_FRAME_NAME" /> により <ph name="PRODUCT_NAME" /> が起動される際に使用される追加パラメータを指定することができます。 このポリシーを設定していない場合、デフォルト コマンド ラインが使用されます。</translation> -<translation id="5150323673529584553">ファイルをスキャンしない</translation> <translation id="5152787786897382519">Chromium と Google Chrome には、機能を制御するための、相互依存型のポリシー グループが用意されています。これらのセットは、次のポリシー グループで表されます。ポリシーに複数のソースが含まれる場合は、優先度の最も高いソースの値のみが適用されます。同じグループ内にある優先度の低いソースの値は無視されます。優先度の順位は <ph name="POLICY_PRIORITY_DOC_URL" /> で定義されているとおりです。</translation> <translation id="515816885693899426">このポリシーはサポートが終了しています。代わりに <ph name="URL_BLOCKLIST_POLICY_NAME" /> ポリシーを使用してください。 @@ -3701,7 +3676,6 @@ <translation id="637934607141010488">最近ログインしたデバイス ユーザーのリストを報告します。 このポリシーが False に設定されている場合、ユーザーは報告されません。</translation> -<translation id="638668187106406971">アップロードに対して、機密データ保護ルールの違反をチェックする</translation> <translation id="6394350458541421998">このポリシーは <ph name="PRODUCT_OS_NAME" /> バージョン 29 で廃止されました。PresentationScreenDimDelayScale ポリシーを代わりに使用してください。</translation> <translation id="6401669939808766804">ユーザーをログアウトする</translation> <translation id="640244877779556713">絵文字の候補を有効にします</translation> @@ -4855,7 +4829,6 @@ このポリシーの値はミリ秒単位とし、アイドル待ちの時間と同じかそれより短い時間を指定できます。</translation> <translation id="8001701200415781021"><ph name="PRODUCT_NAME" /> でブラウザのメイン アカウントとして設定できる Google アカウントを制限する</translation> -<translation id="8003853057959146975">機密データ保護ルールの違反の検査にファイルを送信する</translation> <translation id="8006219716745491366"><ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> がオンの場合に、<ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> では、検索エンジンからの検索キーワードの抽出に使用する代替 URL のリストを指定できます。この URL には <ph name="SEARCH_TERM_MARKER" /> という文字列を含めます。 <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> を未設定のままにした場合、検索キーワードの抽出に代替 URL は使用されません。</translation> @@ -5261,7 +5234,6 @@ このポリシーが false に設定されているか未設定の場合、ユーザーは <ph name="PRODUCT_NAME" /> にログインしなくてもブラウザを使用できます。</translation> <translation id="858309738002328421">大きなファイルのアップロードをブロックする</translation> <translation id="8584279193368801689">PIN 印刷モードを制限します。ポリシーが未設定の場合は、制限なしとして扱われます。このモードを使用できない場合、このポリシーは無視されます。なお、PIN 印刷機能は、IPPS、HTTPS、USB、IPP-over-USB のいずれかのプロトコルを使用するプリンタに対してのみ有効にできます。</translation> -<translation id="8585558195682146109">ユーザーのダウンロードをスキャンに送信する</translation> <translation id="8587229956764455752">新しいユーザー アカウントの作成を許可する</translation> <translation id="8591713876665299827">このポリシーはサポートが終了しており、<ph name="PRODUCT_OS_NAME" /> バージョン 85 で削除されます。代わりに <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" /> を使用してください。 @@ -5518,7 +5490,6 @@ <translation id="8942616385591203339">初回ログイン時に同期の同意メッセージを表示できるかどうかを制御します。ユーザーに同期の同意メッセージを表示する必要がない場合は、このポリシーを false に設定します。 このポリシーが false に設定されている場合、同期の同意メッセージは表示されません。 このポリシーが true に設定されているか未設定の場合は、同期の同意メッセージを表示できます。</translation> -<translation id="8943934315109955032">機密データ保護ルールの違反をチェックしない</translation> <translation id="8947415621777543415">デバイスの位置をレポート</translation> <translation id="8948062138228904066">認証サーバーの許可リスト</translation> <translation id="8951350807133946005">ディスクのキャッシュ ディレクトリの設定</translation> @@ -5532,9 +5503,6 @@ <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> ポリシーが有効に設定されている場合は、同じクライアントサイドの機能が共有されるため、このポリシーは有効にしないでください。この場合、Google でホストされる同期は完全に無効になります。</translation> <translation id="8955719471735800169">トップへ戻る</translation> -<translation id="8956310900055843601">このポリシーを True に設定するか未設定のままにした場合、デバイスのログイン画面では時刻が 24 時間形式で表示されます。ユーザー セッションでもデフォルトでこの形式が使用されます。ただし、ユーザーはアカウントの時刻表示形式を変更できます。 - - このポリシーを False に設定した場合、デバイスでは時刻が 12 時間形式で表示されます。</translation> <translation id="8959992920425111821">デフォルトの構成</translation> <translation id="8970205333161758602"><ph name="PRODUCT_FRAME_NAME" /> のサポート終了メッセージを抑制する</translation> <translation id="8976248126101463034">リモート アクセス ホストに対して gnubby 認証を許可する</translation>
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index 673e856..3453e6c 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb
@@ -95,7 +95,6 @@ 정책이 설정되지 않으면 캐시된 GPO가 최대 25시간 동안 재사용됩니다. 정책이 0으로 설정되면 GPO 캐싱이 사용 중지됩니다. 이렇게 하면 GPO가 바뀌지 않더라도 정책을 가져올 때마다 GPO가 다시 다운로드되기 때문에 서버 로드가 증가합니다.</translation> -<translation id="1111470455889178048">사용자 업로드 및 다운로드 항목을 검사를 위해 보내기</translation> <translation id="1117462881884985156"><ph name="PRODUCT_NAME" />은 여기에 지정된 호스트 목록에 대해 모든 프록시를 우회합니다. 이 정책은 '프록시 서버 설정을 지정하는 방법 선택'에서 수동 프록시 설정을 선택한 경우 및 <ph name="PROXY_SETTINGS_POLICY_NAME" /> 정책을 지정하지 않은 경우에만 적용됩니다. @@ -947,16 +946,6 @@ 이 정책을 설정하면 사용자는 값을 재정의할 수 없습니다. 이 정책을 설정하지 않으면 처음에는 개인정보 보호 화면이 사용 중지되지만 사용자가 이를 제어할 수 있습니다.</translation> -<translation id="2423038190900972331"><ph name="PRODUCT_NAME" />에서 업로드, 다운로드, 클립보드에서 붙여넣기 또는 드래그 앤 드롭된 데이터의 민감한 정보 보호 규칙 위반 여부를 확인하는 방식을 제어합니다. - - 이 정책이 설정되지 않거나 '없음'으로 설정되어 있으면 <ph name="PRODUCT_NAME" />에서는 어떤 데이터의 민감한 정보 보호 규칙 위반 여부도 검사하지 않습니다. - - 이 정책이 '다운로드 검사'로 설정되어 있고 사용자가 <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" /> 정책의 URL에서 파일을 다운로드하려고 하면 <ph name="PRODUCT_NAME" />에서 다운로드된 데이터의 엔터프라이즈 규칙 준수 여부를 검사합니다. - - 이 정책이 '업로드 검사'로 설정되어 있고 사용자가 <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" />에 없는 도메인으로 파일을 업로드하려고 하면 <ph name="PRODUCT_NAME" />에서 업로드된 파일, 클립보드로부터 붙여넣은 데이터 또는 드래그 앤 드롭한 데이터의 엔터프라이즈 규칙 준수 여부를 검사합니다. - - 이 정책이 '업로드 및 다운로드 검사'로 설정되면 <ph name="PRODUCT_NAME" />은 '다운로드 검사' 및 '업로드 검사'에 설명된 규칙에 따라 작동합니다. - </translation> <translation id="2423255396068675416">정책을 사용으로 설정하거나 설정하지 않으면 <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> 및 <ph name="CROSTINI_ALLOWED_POLICY_NAME" />가 사용으로 설정되어 있는 한 사용자가 <ph name="PRODUCT_CROSTINI_NAME" />를 실행할 수 있습니다. 사용 안함으로 설정하면 사용자의 <ph name="PRODUCT_CROSTINI_NAME" />가 사용 중지됩니다. 사용 안함으로 변경하면 기존에 실행 중이던 컨테이너가 아닌 새로 시작되는 <ph name="PRODUCT_CROSTINI_NAME" /> 컨테이너에 정책 적용이 시작됩니다.</translation> <translation id="2424098959650060417"><ph name="BULK_PRINTERS_POLICY_NAME" /> 정책의 프린터 중 사용자에게 제공될 프린터를 관리합니다. @@ -1071,7 +1060,6 @@ 정책 값은 밀리초로 지정되어야 합니다. 유휴 지연 시간보다 작거나 같게 값이 잘립니다.</translation> <translation id="2548572254685798999">세이프 브라우징 정보 보고</translation> <translation id="2550593661567988768">단면 인쇄만</translation> -<translation id="2551520365302988324">사용자 업로드 항목을 검사를 위해 보내기</translation> <translation id="2552318891854145040">정책을 설정하면 북마크 목록이 설정되며 여기에서 각 북마크는 '<ph name="URL_LABEL" />' 및 '<ph name="NAME" />' 키를 포함하는 사전입니다. 이러한 키에는 북마크의 이름 및 대상이 포함됩니다. 관리자는 '<ph name="URL_LABEL" />' 키 없이 북마크를 정의하여 하위 폴더를 설정할 수 있지만, 이때 추가 '<ph name="CHILDREN" />' 키가 있어야 합니다. 이 키에는 북마크 목록도 포함되며, 일부는 폴더일 수도 있습니다. Chrome에서 불완전한 URL을 주소 표시줄을 통해 제출된 것처럼 수정합니다. 예를 들어 '<ph name="GOOGLE_COM" />'이 '<ph name="HTTPS_GOOGLE_COM" />'으로 수정됩니다. 사용자는 북마크가 있는 폴더를 변경할 수 없습니다(단, 북마크바에서 숨길 수는 있음). 관리 북마크의 기본 폴더 이름은 '관리 북마크'이지만 '<ph name="TOPLEVEL_NAME" />'이라는 단일 키와 원하는 폴더 이름으로 값을 설정하여 정책에 새 하위 사전을 추가하면 변경할 수 있습니다. 관리 북마크는 사용자 계정과 동기화되지 않으며 확장 프로그램으로 수정할 수 없습니다.</translation> @@ -1833,7 +1821,6 @@ <ph name="CORS" />의 세부사항을 확인하려면 <ph name="CORS_HELP_URL" /> 페이지를 참고하세요. 이 정책은 <ph name="PRODUCT_NAME" /> 버전 82에서 삭제된다고 발표되었으나, 버전 84에서 삭제되었습니다.</translation> -<translation id="3624515566460517364">업로드 및 다운로드 시 민감한 정보 보호 규칙 위반 여부 검사</translation> <translation id="3627678165642179114">맞춤법 검사 웹 서비스 사용 또는 사용 중지</translation> <translation id="3628480121685794414">단면 인쇄 사용 설정</translation> <translation id="3631099945620529777">false로 설정되면 '프로세스 종료' 버튼이 작업 관리자에서 사용 중지됩니다. @@ -1990,7 +1977,6 @@ 정책을 설정하지 않거나 빈 목록으로 설정하면 관리 기기에서 빠른 잠금 해제 모드를 사용할 수 없습니다.</translation> <translation id="3877517141460819966">통합된 2단계 인증 모드</translation> -<translation id="3879196885908353077">다운로드 시 민감한 정보 보호 규칙 위반 여부 검사</translation> <translation id="3879208481373875102">강제로 설치된 웹 앱 목록 구성</translation> <translation id="388237772682176890">SPDY/3.1 지원이 삭제되어 이 정책은 M53에서 지원 중단되고 M54에서 삭제되었습니다. @@ -2421,7 +2407,6 @@ 관리되지 않는 기기에서는 알림이 항상 표시됩니다.</translation> <translation id="4510923771103268849">사용자는 Crostini 컨테이너에 대한 루트 액세스 권한을 가질 수 있음</translation> <translation id="4515404363392014383">신뢰할 수 있는 소스에서 세이프 브라우징을 사용할 수 있도록 허용</translation> -<translation id="4517928394515633751">세이프 브라우징으로 사용자가 다운로드한 항목 스캔</translation> <translation id="4518251772179446575">사이트에서 사용자의 실제 위치를 추적할 때마다 확인</translation> <translation id="4529868888205510667">ARC가 다른 방법으로 사용 중지되지 않은 이상, 정책을 True로 설정하거나 설정하지 않으면 사용자가 ARC를 사용할 수 있습니다. False로 설정하면 제휴되지 않은 사용자가 ARC를 사용할 수 없습니다. @@ -2596,15 +2581,6 @@ 차단 목록의 '*' 값은 모든 기본 메시지 호스트가 명시적으로 허용 목록에 포함되지 않는 한 차단된다는 의미입니다. 이 정책을 설정하지 않으면 <ph name="PRODUCT_NAME" />에서 설치된 기본 메시지 호스트를 모두 로드합니다.</translation> -<translation id="4771144269610910963">이 정책은 세이프 브라우징을 통한 사용자 다운로드 항목의 심층 검사를 제어합니다. 정책이 설정되지 않거나 기본값인 '파일을 검사하지 않음'으로 설정되면 세이프 브라우징에서 사용자 다운로드 항목을 검사하지 않습니다. - - '사용자 다운로드 항목을 전송하여 검사'로 설정되면 사용자 다운로드 항목이 네트워크를 통해 세이프 브라우징으로 전송되어 멀웨어 검사를 거치게 됩니다. - - '사용자 업로드 항목을 검사를 위해 보내기'로 설정되면 사용자 업로드 항목이 네트워크를 통해 세이프 브라우징으로 전송되어 멀웨어 검사를 거치게 됩니다. - - '사용자 업로드 및 다운로드 항목을 검사를 위해 보내기'로 설정되면 '사용자 업로드 항목을 검사를 위해 보내기' 및 '사용자 다운로드 항목을 검사를 위해 보내기'에서 설명된 규칙에 따라 작동합니다. - - 검사 결과가 사용자와 관리자에게 어떻게 표시되는지 자세히 알아보려면 <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> 및 <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" /> 정책을 참조하세요.</translation> <translation id="4787763197941188108">기본 인쇄 페이지 크기를 재정의합니다. 필수 페이지 크기가 목록에 없을 경우 <ph name="PAGE_SIZE_NAME" />에는 나열된 형식 중 하나 또는 '맞춤 설정'이 포함되어야 합니다. '맞춤 설정' 값이 제공될 경우 <ph name="PAGE_SIZE_CUSTOM_SIZE" /> 속성이 지정되어야 합니다. 원하는 높이와 너비를 마이크로미터 단위로 설명합니다. 그 외의 경우에는 <ph name="PAGE_SIZE_CUSTOM_SIZE" /> 속성을 지정해서는 안 됩니다. 이 규칙을 위반하는 정책은 무시됩니다. @@ -2822,7 +2798,6 @@ <translation id="5148753489738115745"><ph name="PRODUCT_FRAME_NAME" />이(가) <ph name="PRODUCT_NAME" />을(를) 실행할 때 사용되는 추가 매개변수를 지정하도록 허용합니다. 해당 정책이 설정되지 않았다면 기본 명령줄이 사용됩니다.</translation> -<translation id="5150323673529584553">파일을 검사하지 않음</translation> <translation id="5152787786897382519">Chromium과 Chrome의 일부 정책 그룹은 특정 기능 제어를 위해 서로 종속되는 경우도 있습니다. 이러한 세트는 다음의 정책 그룹으로 대표됩니다. 정책의 출처가 여러 개일 수 있으므로 우선순위가 가장 높은 출처의 값만 적용됩니다. 같은 그룹에서 우선순위가 낮은 출처의 값은 무시됩니다. 우선순위는 <ph name="POLICY_PRIORITY_DOC_URL" />에 정의되어 있습니다.</translation> <translation id="515816885693899426">이 정책은 지원 중단되었으므로 '<ph name="URL_BLOCKLIST_POLICY_NAME" />' 정책을 대신 사용하세요. @@ -3769,7 +3744,6 @@ <translation id="637934607141010488">최근 로그인한 기기 사용자 목록을 보고합니다. 이 정책이 false로 설정된 경우 사용자 목록이 보고되지 않습니다.</translation> -<translation id="638668187106406971">업로드 시 민감한 정보 보호 규칙 위반 여부 검사</translation> <translation id="6394350458541421998">이 정책은 <ph name="PRODUCT_OS_NAME" /> 버전 29를 기준으로 지원 중단되었습니다. 대신 PresentationScreenDimDelayScale 정책을 사용해 주시기 바랍니다.</translation> <translation id="6401669939808766804">사용자 로그아웃</translation> <translation id="640244877779556713">추천 그림 이모티콘 사용 설정</translation> @@ -4955,7 +4929,6 @@ 정책 값은 밀리초로 지정되어야 합니다. 유휴 지연 시간보다 작거나 같게 값이 잘립니다.</translation> <translation id="8001701200415781021"><ph name="PRODUCT_NAME" />에서 어떤 Google 계정이 브라우저 기본 계정으로 설정될 수 있는지 제한합니다.</translation> -<translation id="8003853057959146975">민감한 정보 보호 규칙 위반을 검사할 파일 전송</translation> <translation id="8006219716745491366"><ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" />가 사용 설정되어 있으면 <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> 설정은 검색엔진에서 검색어를 추출하기 위한 대체 URL 목록을 지정합니다. URL은 <ph name="SEARCH_TERM_MARKER" /> 문자열을 포함해야 합니다. <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" />을 설정하지 않으면 검색어를 추출할 때 대체 URL이 사용되지 않습니다.</translation> @@ -5370,7 +5343,6 @@ 정책을 False로 설정하거나 설정하지 않으면 사용자는 <ph name="PRODUCT_NAME" />에 로그인하지 않아도 브라우저를 사용할 수 있습니다.</translation> <translation id="858309738002328421">대용량 파일 업로드 차단</translation> <translation id="8584279193368801689">PIN 인쇄 모드를 제한합니다. 정책이 설정되지 않은 경우 제한이 없는 것으로 간주됩니다. 이 모드를 사용할 수 없는 경우 이 정책은 무시됩니다. PIN 인쇄 기능은 IPPS, HTTPS, USB 또는 IPP-over-USB 프로토콜을 사용하는 프린터에서만 지원됩니다.</translation> -<translation id="8585558195682146109">사용자 다운로드 항목을 검사를 위해 보내기</translation> <translation id="8587229956764455752">새로운 사용자 계정 생성 허용</translation> <translation id="8591713876665299827">이 정책은 지원이 중단되었으며 <ph name="PRODUCT_OS_NAME" /> 버전 85에서 삭제될 예정입니다. 대신 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" /> 정책을 사용하세요. @@ -5630,7 +5602,6 @@ <translation id="8942616385591203339">이 정책은 최초 로그인 시 사용자에게 동기화 동의 표시 여부를 제어합니다. 동기화 동의가 사용자에게 필요하지 않은 경우 False로 설정해야 합니다. False로 설정하면 동기화 동의가 표시되지 않습니다. True로 설정하거나 설정하지 않으면 동기화 동의를 표시할 수 있습니다.</translation> -<translation id="8943934315109955032">민감한 정보 보호 규칙 위반 검사 안 함</translation> <translation id="8947415621777543415">기기 위치 신고</translation> <translation id="8948062138228904066">인증 서버 허용 목록</translation> <translation id="8951350807133946005">디스크 캐시 디렉터리 설정</translation> @@ -5644,9 +5615,6 @@ 이 정책은 <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> 정책을 사용하도록 설정한 경우 해당 기능에서 동일한 클라이언트측 기능을 공유하기 때문에 사용 설정하면 안 됩니다. 이 경우 Google에서 호스팅하는 동기화 서비스는 완전히 사용 중지됩니다.</translation> <translation id="8955719471735800169">맨위로</translation> -<translation id="8956310900055843601">정책을 True로 설정하거나 설정하지 않으면 기기의 로그인 화면으로 24시간 시계 형식을 사용합니다. 사용자 세션도 이 형식을 기본으로 사용하지만 사용자가 계정의 시계 형식을 변경할 수 있습니다. - - 정책을 False로 설정하면 기기에서 12시간 시계 형식을 사용합니다.</translation> <translation id="8959992920425111821">기본 구성</translation> <translation id="8970205333161758602"><ph name="PRODUCT_FRAME_NAME" /> 종료 프롬프트를 표시하지 않음</translation> <translation id="8976248126101463034">원격 액세스 호스트에 대한 gnubby 인증 허용</translation>
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index 8bca0ff..f44016e 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb
@@ -95,7 +95,6 @@ Als dit beleid niet is ingesteld, mogen in het cachegeheugen opgeslagen GPO's maximaal gedurende 25 uur opnieuw worden gebruikt. Als dit beleid is ingesteld op 0, worden er geen GPO's in het cachegeheugen opgeslagen. Houd er rekening mee dat de server hierdoor zwaarder wordt belast, aangezien GPO's telkens opnieuw worden gedownload wanneer er beleid wordt opgehaald, zelfs als ze niet zijn gewijzigd.</translation> -<translation id="1111470455889178048">Gebruikersuploads en -downloads verzenden om te laten scannen</translation> <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> omzeilt elke proxy voor de lijst met hosts die hier wordt gespecificeerd. Dit beleid wordt alleen van kracht als je handmatige proxyinstellingen hebt geselecteerd bij 'Kies hoe je proxyserverinstellingen wilt specificeren' en als het beleid <ph name="PROXY_SETTINGS_POLICY_NAME" /> niet is gespecificeerd. @@ -827,7 +826,7 @@ Als je het beleid instelt op 'False' of niet instelt, wordt er geen knop weergegeven.</translation> <translation id="2294382669900758280">Er wordt geen rekening gehouden met het afspelen van video in Android-apps, zelfs niet wanneer dit beleid is ingesteld op <ph name="TRUE" /> (Waar).</translation> <translation id="2299220924812062390">Een lijst met ingeschakelde plug-ins specificeren</translation> -<translation id="2303795211377219696">Automatisch aanvullen inschakelen voor creditcards</translation> +<translation id="2303795211377219696">Automatisch invullen inschakelen voor creditcards</translation> <translation id="2307496301287881990">Statussen van scherm en grafische kaart rapporteren</translation> <translation id="2309390639296060546">Standaardinstelling voor geolocatie</translation> <translation id="2327252517317514801">Domeinen definiëren voor toegang tot G Suite</translation> @@ -926,16 +925,6 @@ Als dit beleid is ingesteld, kan de gebruiker de waarde niet overschrijven. Als dit beleid niet is ingesteld, is het privacyscherm in eerste instantie uitgeschakeld, maar kan de gebruiker dit inschakelen.</translation> -<translation id="2423038190900972331">Hiermee wordt bepaald hoe <ph name="PRODUCT_NAME" /> gegevens die worden geüpload, gedownload, geplakt vanaf het klembord of gesleept en neergezet, controleert op schendingen van de beveiligingsregels voor gevoelige gegevens. - - Als dit beleid niet is ingesteld of is ingesteld op 'Geen', controleert <ph name="PRODUCT_NAME" /> gegevens niet op schendingen van de beveiligingsregels voor gevoelige gegevens. - - Als dit beleid is ingesteld op 'Downloads controleren' en de gebruiker probeert een bestand te downloaden vanaf een URL die in het beleid <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" /> wordt vermeld, controleert <ph name="PRODUCT_NAME" /> de gedownloade gegevens op naleving van bedrijfsregels. - - Als dit beleid is ingesteld op 'Uploads controleren' en de gebruiker probeert een bestand te uploaden naar een domein dat niet in het beleid <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" /> wordt vermeld, controleert <ph name="PRODUCT_NAME" /> het geüploade bestand, gegevens die zijn geplakt vanaf het klembord of gegevens die zijn gesleept en neergezet op naleving van bedrijfsregels. - - Als dit beleid is ingesteld op 'Uploads en downloads controleren', werkt <ph name="PRODUCT_NAME" /> in overeenstemming met de regels die worden beschreven onder 'Downloads controleren' en 'Uploads controleren'. - </translation> <translation id="2423255396068675416">Als je het beleid inschakelt of niet instelt, kunnen gebruikers <ph name="PRODUCT_CROSTINI_NAME" /> uitvoeren, zolang <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> en <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> zijn ingeschakeld. Als je het beleid uitschakelt, wordt <ph name="PRODUCT_CROSTINI_NAME" /> uitgeschakeld voor de gebruiker. Als je het beleid uitschakelt, wordt het beleid toegepast op startende nieuwe <ph name="PRODUCT_CROSTINI_NAME" />-containers en niet op containers die al actief zijn.</translation> <translation id="2424098959650060417">Hiermee wordt beheerd welke printers uit <ph name="BULK_PRINTERS_POLICY_NAME" /> beschikbaar zijn voor gebruikers. @@ -1050,7 +1039,6 @@ De beleidswaarde moet worden gespecificeerd in milliseconden. De opgegeven waarden moeten kleiner dan of gelijk zijn aan de inactieve vertraging.</translation> <translation id="2548572254685798999">Gegevens over Safe Browsing rapporteren</translation> <translation id="2550593661567988768">Alleen enkelzijdig afdrukken</translation> -<translation id="2551520365302988324">Gebruikersuploads verzenden om te laten scannen</translation> <translation id="2552318891854145040">Als je het beleid instelt, wordt er een lijst met bookmarks ingesteld, waarbij elke bookmark een woordenboek is met de sleutels '<ph name="NAME" />' en '<ph name="URL_LABEL" />'. Deze sleutels bevatten de naam en target van de bookmark. Beheerders kunnen een submap instellen door een bookmark zonder de sleutel '<ph name="URL_LABEL" />', maar met de aanvullende sleutel '<ph name="CHILDREN" />' te definiëren. Deze sleutel bevat ook een lijst met bookmarks, waarvan sommige ook mappen kunnen zijn. Chrome vult onvolledige URL's aan alsof ze via de adresbalk zijn opgegeven. Zo wordt '<ph name="GOOGLE_COM" />' aangevuld tot '<ph name="HTTPS_GOOGLE_COM" />'. Gebruikers kunnen de mappen waarin de bookmarks zijn geplaatst niet wijzigen (maar ze kunnen deze wel verbergen via de bookmarkbalk). De standaard mapnaam voor beheerde bookmarks is 'Beheerde bookmarks' maar je kunt deze naam wijzigen door een nieuw subwoordenboek aan het beleid toe te voegen met één sleutel met de naam '<ph name="TOPLEVEL_NAME" />' en met de gewenste map als waarde. Beheerde bookmarks worden niet gesynchroniseerd met het gebruikersaccount en kunnen niet worden gewijzigd via extensies.</translation> @@ -1810,7 +1798,6 @@ Ga naar <ph name="CORS_HELP_URL" /> voor meer informatie over <ph name="CORS" />. Er was aangekondigd dat dit beleid zou worden verwijderd in <ph name="PRODUCT_NAME" /> versie 82, maar dat is versie 84 geworden.</translation> -<translation id="3624515566460517364">Uploads en downloads controleren op schendingen van de beveiligingsregels voor gevoelige gegevens</translation> <translation id="3627678165642179114">Webservice voor spellingcontrole in- of uitschakelen</translation> <translation id="3628480121685794414">Enkelzijdig afdrukken inschakelen</translation> <translation id="3631099945620529777">Als deze optie is ingesteld op 'false', is de knop 'Proces beëindigen' uitgeschakeld in Taakbeheer. @@ -1967,7 +1954,6 @@ Als je het beleid niet instelt of instelt op een lege lijst, zijn er geen modi voor snel ontgrendelen beschikbaar voor beheerde apparaten.</translation> <translation id="3877517141460819966">Geïntegreerde modus voor authenticatie met twee factoren</translation> -<translation id="3879196885908353077">Downloads controleren op schendingen van de beveiligingsregels voor gevoelige gegevens</translation> <translation id="3879208481373875102">Lijst met afgedwongen geïnstalleerde web-apps instellen</translation> <translation id="388237772682176890">Dit beleid is beëindigd in M53 en is verwijderd in M54, omdat de ondersteuning voor SPDY/3.1 is verwijderd. @@ -2072,9 +2058,9 @@ Als dit beleid wordt gebruikt, zijn alle printers voor de gebruiker beschikbaar, behalve de ID's in dit beleid. De ID's moeten overeenkomen met het ID- of GUID-veld in het bestand dat is opgegeven in <ph name="DEVICE_PRINTERS_POLICY_NAME" />. </translation> <translation id="3984028218719007910">Bepaalt of <ph name="PRODUCT_OS_NAME" /> na het afmelden lokale accountgegevens bewaart. Als dit is ingesteld op 'true', bewaart <ph name="PRODUCT_OS_NAME" /> geen bestaande accounts en worden alle gegevens over de gebruikerssessie na het afmelden gewist. Als dit beleid is ingesteld op 'false' of niet is geconfigureerd, bewaart het apparaat mogelijk (gecodeerde) lokale gebruikersgegevens.</translation> -<translation id="398884292557092447">Als je het beleid instelt op True of niet instelt, krijgen gebruikers de controle over 'Automatisch aanvullen' voor creditcards in de UI. +<translation id="398884292557092447">Als je het beleid instelt op True of niet instelt, krijgen gebruikers de controle over 'Automatisch invullen' voor creditcards in de UI. - Als je het beleid instelt op False, worden er nooit creditcardgegevens voorgesteld of ingevuld door 'Automatisch aanvullen'. Ook worden er geen aanvullende creditcardgegevens opgeslagen die gebruikers opgeven als ze internetten.</translation> + Als je het beleid instelt op False, worden er nooit creditcardgegevens voorgesteld of ingevuld door 'Automatisch invullen'. Ook worden er geen aanvullende creditcardgegevens opgeslagen die gebruikers opgeven als ze internetten.</translation> <translation id="3993187551086357615">Uploads en downloads uitstellen totdat het scanresultaat bekend is</translation> <translation id="3997519162482760140">URL's die toegang krijgen tot apparaten voor het vastleggen van video op SAML-inlogpagina's</translation> <translation id="4001275826058808087">IT-beheerders voor zakelijke apparaten kunnen deze markering gebruiken om te bepalen of gebruikers aanbiedingen kunnen inwisselen via registratie van Chrome OS. @@ -2397,7 +2383,6 @@ Op niet-beheerde apparaten wordt de melding altijd weergegeven.</translation> <translation id="4510923771103268849">De gebruiker heeft toestemming voor roottoegang tot Crostini-containers</translation> <translation id="4515404363392014383">'Safe Browsing' inschakelen voor vertrouwde bronnen</translation> -<translation id="4517928394515633751">Gebruikersdownloads scannen met Safe Browsing</translation> <translation id="4518251772179446575">Goedkeuring vragen wanneer een site de fysieke locatie van gebruikers wil bijhouden</translation> <translation id="4529868888205510667">Tenzij ARC op een andere manier is uitgeschakeld, zorgt het instellen van het beleid op True of het niet instellen van het beleid ervoor dat gebruikers ARC kunnen gebruiken. Als het beleid wordt ingesteld op False, kunnen niet-gelieerde gebruikers ARC niet gebruiken. @@ -2529,7 +2514,7 @@ Ga naar https://www.chromestatus.com/features/5675755719622656 voor een volledige uitleg. Als je dit beleid inschakelt, kunnen sites tegelijkertijd navigeren en nieuwe vensters/tabbladen openen. Als dit beleid is uitgeschakeld of niet is ingesteld, kunnen sites niet tegelijkertijd navigeren en nieuwe vensters/tabbladen openen.</translation> -<translation id="4680961954980851756">Automatisch aanvullen inschakelen</translation> +<translation id="4680961954980851756">Automatisch invullen inschakelen</translation> <translation id="4693779768620889402">Op extensies gebaseerde bestemmingen</translation> <translation id="4699592681017489215">Met dit beleid wordt een lokale schakelaar geconfigureerd die kan worden gebruikt om controles voor DNS-onderschepping uit te schakelen. Deze controles proberen te achterhalen of er een proxy achter de browser zit die als omleiding naar onbekende hostnamen dient. @@ -2573,15 +2558,6 @@ De waarde '*' op de blokkeringslijst betekent dat alle hosts voor systeemeigen berichten worden geblokkeerd, tenzij ze expliciet worden vermeld op de toelatingslijst. Als je dit beleid niet instelt, laadt <ph name="PRODUCT_NAME" /> alle geïnstalleerde hosts voor systeemeigen berichten.</translation> -<translation id="4771144269610910963">Met dit beleid worden uitgebreide scans van gebruikersdownloads met Safe Browsing beheerd. Als dit beleid niet is ingesteld of op de standaardinstelling 'Bestanden niet scannen' staat, worden gebruikersdownloads niet gescand door Safe Browsing. - - Als 'Gebruikersdownloads sturen voor scannen' is ingesteld, worden gebruikersdownloads via het netwerk naar Safe Browsing gestuurd om ze te scannen op malware. - - Als 'Gebruikersuploads sturen voor scannen' is ingesteld, worden gebruikersuploads via het netwerk naar Safe Browsing gestuurd om ze te scannen op malware. - - Als 'Gebruikersuploads en -downloads sturen om te laten scannen' is ingesteld, gedraagt deze zich volgens de regels die zijn beschreven onder 'Gebruikersuploads sturen voor scannen' en 'Gebruikersdownloads sturen voor scannen'. - - Lees <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> en <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" /> voor meer informatie over hoe de gebruiker en de beheerder de resultaten van de scans te zien krijgen.</translation> <translation id="4787763197941188108">Hiermee overschrijf je het standaardformaat voor de afdrukpagina. <ph name="PAGE_SIZE_NAME" /> moet een van de vermelde indelingen bevatten of 'custom' als het vereiste papierformaat niet in de lijst staat. Als de waarde 'custom' is opgegeven, moet de eigenschap <ph name="PAGE_SIZE_CUSTOM_SIZE" /> worden gespecificeerd. Dit beschrijft de gewenste hoogte en breedte in micrometers. Anders moet de eigenschap <ph name="PAGE_SIZE_CUSTOM_SIZE" /> niet worden gespecificeerd. Beleid dat deze regels schendt, wordt genegeerd. @@ -2685,9 +2661,9 @@ <translation id="4988291787868618635">Actie die wordt ondernomen wanneer de inactieve vertraging wordt bereikt</translation> <translation id="4996086761250834365">Productanalyse van <ph name="PLUGIN_VM_NAME" /> toestaan</translation> <translation id="500149597848135831">Alle varianten inschakelen</translation> -<translation id="5017369989680827157">Als je het beleid instelt op 'True' of niet instelt, krijgen gebruikers de controle over 'Automatisch aanvullen' voor adressen in de UI. +<translation id="5017369989680827157">Als je het beleid instelt op 'True' of niet instelt, krijgen gebruikers de controle over 'Automatisch invullen' voor adressen in de UI. - Als je het beleid instelt op 'False', wordt er nooit adresinformatie voorgesteld of ingevuld door 'Automatisch aanvullen'. Ook wordt er geen aanvullende adresinformatie opgeslagen die gebruikers opgeven als ze internetten.</translation> + Als je het beleid instelt op 'False', wordt er nooit adresinformatie voorgesteld of ingevuld door 'Automatisch invullen'. Ook wordt er geen aanvullende adresinformatie opgeslagen die gebruikers opgeven als ze internetten.</translation> <translation id="5022551015331996656">Als 'Een lijst met URL's openen' voor het opstarten is geselecteerd, kun je hier de lijst met URL's specificeren die worden geopend. Als je dit niet instelt, worden er geen URL's geopend na het opstarten. Dit beleid functioneert alleen als het beleid RestoreOnStartup is ingesteld op RestoreOnStartupIsURLs. @@ -2791,7 +2767,6 @@ <translation id="5148753489738115745">Hiermee kun je extra parameters opgeven die worden gebruikt wanneer <ph name="PRODUCT_FRAME_NAME" /> <ph name="PRODUCT_NAME" /> start. Als dit beleid niet is ingesteld, wordt de standaardopdrachtregel gebruikt.</translation> -<translation id="5150323673529584553">Bestanden niet scannen</translation> <translation id="5152787786897382519">Zowel Chromium als Google Chrome bevatten enkele beleidsgroepen die voor het beheer van een functie van elkaar afhankelijk zijn. Deze reeksen worden vertegenwoordigd door de volgende beleidsgroepen. Aangezien beleidsregels meerdere bronnen kunnen hebben, worden alleen waarden afkomstig van de bron met de hoogste prioriteit toegepast. Waarden van een bron met een lagere prioriteit in dezelfde groep worden genegeerd. De prioriteitsvolgorde wordt gedefinieerd in <ph name="POLICY_PRIORITY_DOC_URL" />.</translation> <translation id="515816885693899426">Dit beleid is beëindigd. Gebruik in plaats daarvan het beleid <ph name="URL_BLOCKLIST_POLICY_NAME" />. @@ -3315,7 +3290,7 @@ <translation id="5708969689202733975">Toegestane modi voor snel ontgrendelen configureren</translation> <translation id="572155275267014074">Android-instellingen</translation> <translation id="5728154254076636808">Het maken van roaming-exemplaren voor <ph name="PRODUCT_NAME" />-profielgegevens inschakelen</translation> -<translation id="5732972008943405952">Formuliergegevens voor Automatisch aanvullen importeren uit standaardbrowser bij eerste uitvoering</translation> +<translation id="5732972008943405952">Formuliergegevens voor Automatisch invullen importeren uit standaardbrowser bij eerste uitvoering</translation> <translation id="574098933844699859">Aangeven of de systeemgegevens (bijv. Chrome OS-versie, serienummer van apparaat) altijd worden weergegeven (of verborgen) op het inlogscherm. Als het beleid is ingesteld op True, worden systeemgegevens gedwongen weergegeven op het inlogscherm. @@ -3561,9 +3536,9 @@ <translation id="6135398260575578389">Safe Browsing is actief in de uitgebreide modus. Deze modus biedt betere beveiliging, maar vereist dat er meer browsegegevens worden gedeeld met Google.</translation> <translation id="6138636318340561140">Safe Browsing-status van URL's in realtime checken</translation> <translation id="6141402445226505817">Altijd minder nauwkeurige tijdzonedetectie gebruiken</translation> -<translation id="6144046700495610112">Als je het beleid inschakelt, worden de formuliergegevens voor automatisch aanvullen van de vorige standaardbrowser geïmporteerd bij de eerste uitvoering. Als je het beleid uitschakelt of niet instelt, worden formuliergegevens voor automatisch aanvullen niet geïmporteerd bij de eerste uitvoering. +<translation id="6144046700495610112">Als je het beleid inschakelt, worden de formuliergegevens voor automatisch invullen van de vorige standaardbrowser geïmporteerd bij de eerste uitvoering. Als je het beleid uitschakelt of niet instelt, worden formuliergegevens voor automatisch invullen niet geïmporteerd bij de eerste uitvoering. - Als gebruikers het dialoogvenster voor importeren openen, is het selectievakje voor formuliergegevens voor automatisch aanvullen aan- of uitgevinkt in overeenstemming met de waarde van dit beleid.</translation> + Als gebruikers het dialoogvenster voor importeren openen, is het selectievakje voor formuliergegevens voor automatisch invullen aan- of uitgevinkt in overeenstemming met de waarde van dit beleid.</translation> <translation id="614616930188030377">Patronen in deze lijst worden vergeleken met de beveiligingsoorsprong van de aanvragende URL. Als een overeenkomst wordt gevonden of als chrome://flags/#enable-webrtc-hide-local-ips-with-mdns is Uitgeschakeld, worden de lokale IP-adressen weergegeven in WebRTC ICE-kandidaten. Anders worden lokale IP-adressen verborgen met mDNS-hostnamen. @@ -3621,6 +3596,11 @@ Als je dit beleid niet instelt, laadt <ph name="PRODUCT_NAME" /> alle geïnstalleerde hosts voor systeemeigen berichten.</translation> <translation id="6224304369267200483">URL's/domeinen hebben rechtstreekse bevestiging van de beveiligingssleutel toegestaan</translation> +<translation id="6230442621691161858">Met deze functie worden suggesties ingeschakeld om nieuwe content te bekijken. Inclusief apps, webpagina's en meer. + Als dit beleid is ingesteld op True, worden suggesties voor nieuwe content ingeschakeld. + Als dit beleid is ingesteld op False, worden suggesties voor nieuwe content uitgeschakeld. + Als dit beleid niet wordt ingesteld, worden suggesties voor nieuwe content uitgeschakeld voor beheerde gebruikers en ingeschakeld voor andere gebruikers. + </translation> <translation id="6233173491898450179">Downloaddirectory instellen</translation> <translation id="6234177445959386333">Configureer de lijst met zakelijke login-URL's waar de service voor wachtwoordbeveiliging salted hashes van wachtwoorden moet vastleggen.</translation> <translation id="6242147107333796512">Informatie met betrekking tot crashrapporten rapporteren, zoals externe ID, tijdstempel van registratie en oorzaak. @@ -3733,7 +3713,6 @@ <translation id="637934607141010488">Lijst melden met apparaatgebruikers die onlangs zijn ingelogd. Als het beleid is ingesteld op 'false', worden de gebruikers niet gemeld.</translation> -<translation id="638668187106406971">Controleren op schendingen van de beveiligingsregels voor gevoelige gegevens</translation> <translation id="6394350458541421998">Dit beleid wordt niet meer gebruikt sinds <ph name="PRODUCT_OS_NAME" /> versie 29. Gebruik het beleid PresentationScreenDimDelayScale.</translation> <translation id="6401669939808766804">De gebruiker uitloggen</translation> <translation id="640244877779556713">Suggestie voor emoji's inschakelen</translation> @@ -3770,7 +3749,7 @@ De patronen voor overeenkomende herkomst gebruiken een vergelijkbare indeling als die voor het beleid '<ph name="URL_BLOCKLIST_POLICY_NAME" />' (deze worden gedocumenteerd op http://www.chromium.org/administrators/url-blacklist-filter-format). Patronen voor overeenkomende herkomst voor dit beleid mogen geen '/path' or '@query'-elementen bevatten. Patronen die een '/path'- of '@query'-element bevatten, worden genegeerd.</translation> -<translation id="6464074037294098618">Automatisch aanvullen voor adressen inschakelen</translation> +<translation id="6464074037294098618">Automatisch invullen voor adressen inschakelen</translation> <translation id="6467613372414922590">Hosts voor native berichten op gebruikersniveau toestaan (geïnstalleerd zonder beheerdersrechten)</translation> <translation id="6468980648680553776">Dit beleid is beëindigd. Gebruik in plaats daarvan RemoteAccessHostClientDomainList.</translation> <translation id="6473623140202114570">Configureer de lijst met domeinen waar Safe Browsing geen waarschuwingen activeert.</translation> @@ -3949,8 +3928,8 @@ Met dit beleid wordt bepaald of gebruikers die zijn ingeschreven bij 'Geavanceerde beveiliging' hun downloads naar Google mogen sturen om ze te laten scannen. Als dit beleid is ingesteld op True of niet is ingesteld, wordt ingeschreven gebruikers gevraagd hun bestanden naar Google te sturen voor een uitgebreide scan. Als gebruikers 'Scannen' selecteren, worden hun downloads naar Google gestuurd. Als dit beleid is ingesteld op False, ontvangen gebruikers geen melding en worden hun downloads niet naar Google gestuurd.</translation> <translation id="6704994003174661159">Dit beleid bepaalt hoe er wordt omgegaan met onveilige formulieren (formulieren die gegevens sturen via HTTP) die zijn ingesloten in beveiligde sites (HTTPS) in de browser. - Als je het beleid inschakelt of niet instelt, wordt er een waarschuwingsbericht op de volledige pagina weergegeven als er een onveilig formulier wordt gestuurd. Daarnaast wordt er een waarschuwingsballon naast de formuliervelden weergegeven als de focus erop wordt geplaatst en wordt automatisch aanvullen uitgeschakeld voor deze formulieren. - Als je het beleid uitschakelt, worden er geen waarschuwingen weergegeven voor onveilige formulieren en werkt automatisch aanvullen normaal.</translation> + Als je het beleid inschakelt of niet instelt, wordt er een waarschuwingsbericht op de volledige pagina weergegeven als er een onveilig formulier wordt gestuurd. Daarnaast wordt er een waarschuwingsballon naast de formuliervelden weergegeven als de focus erop wordt geplaatst en wordt automatisch invullen uitgeschakeld voor deze formulieren. + Als je het beleid uitschakelt, worden er geen waarschuwingen weergegeven voor onveilige formulieren en werkt automatisch invullen normaal.</translation> <translation id="670597451099978576">Automatisch rechten verlenen aan deze sites om verbinding te maken met USB-apparaten met de opgegeven leveranciers- en product-ID's op het inlogscherm.</translation> <translation id="6723472666969849951">Als je dit beleid instelt, wordt beheerd welke apps en extensies mogen worden geïnstalleerd in <ph name="PRODUCT_NAME" />, met welke hosts ze interactie kunnen hebben en wordt de runtime-toegang beperkt. @@ -4916,11 +4895,10 @@ De beleidswaarde moet worden gespecificeerd in milliseconden. De opgegeven waarden moeten kleiner dan of gelijk zijn aan de inactieve vertraging.</translation> <translation id="8001701200415781021">Beperken welke Google-accounts mogen worden ingesteld als primaire browseraccounts in <ph name="PRODUCT_NAME" /></translation> -<translation id="8003853057959146975">Bestanden sturen voor controle op schendingen van de beveiligingsregels voor gevoelige gegevens</translation> <translation id="8006219716745491366">Als <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> is ingeschakeld en je <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> instelt, wordt er een lijst met alternatieve URL's gespecificeerd om zoektermen uit de zoekmachine te extraheren. De URL's moeten de tekenreeks <ph name="SEARCH_TERM_MARKER" /> bevatten. Als je <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> niet instelt, worden er geen alternatieve URL's gespecificeerd om zoektermen uit de zoekmachine te extraheren.</translation> -<translation id="8009554972280451023">Als je deze instelling inschakelt, worden de instellingen die zijn opgeslagen in <ph name="PRODUCT_NAME" />-profielen, zoals bookmarks, gegevens voor automatisch aanvullen, wachtwoorden, enzovoort, ook geschreven naar een bestand dat is opgeslagen in de map voor roaming-gebruikersprofielen of op een locatie die de beheerder heeft opgegeven via het beleid <ph name="ROAMING_PROFILE_LOCATION_POLICY_NAME" />. Als je dit beleid inschakelt, wordt cloudsynchronisatie uitgeschakeld. +<translation id="8009554972280451023">Als je deze instelling inschakelt, worden de instellingen die zijn opgeslagen in <ph name="PRODUCT_NAME" />-profielen, zoals bookmarks, gegevens voor automatisch invullen, wachtwoorden, enzovoort, ook geschreven naar een bestand dat is opgeslagen in de map voor roaming-gebruikersprofielen of op een locatie die de beheerder heeft opgegeven via het beleid <ph name="ROAMING_PROFILE_LOCATION_POLICY_NAME" />. Als je dit beleid inschakelt, wordt cloudsynchronisatie uitgeschakeld. Als dit beleid is uitgeschakeld of niet wordt ingesteld, worden alleen de gewone lokale profielen gebruikt. @@ -4942,11 +4920,11 @@ Dit beleid kan alleen worden ingesteld via de Google Beheerdersconsole.</translation> <translation id="8033913082323846868">Dit beleid is beëindigd in M70. Gebruik in plaats hiervan AutofillAddressEnabled en AutofillCreditCardEnabled. - Hiermee wordt de functie 'Automatisch aanvullen' van <ph name="PRODUCT_NAME" /> ingeschakeld en wordt gebruikers toegestaan webformulieren automatisch in te vullen met eerder opgeslagen informatie zoals adres- of creditcardgegevens. + Hiermee wordt de functie 'Automatisch invullen' van <ph name="PRODUCT_NAME" /> ingeschakeld en wordt gebruikers toegestaan webformulieren automatisch in te vullen met eerder opgeslagen informatie zoals adres- of creditcardgegevens. - Als je deze instelling uitschakelt, kunnen gebruikers de functie 'Automatisch aanvullen' niet gebruiken. + Als je deze instelling uitschakelt, kunnen gebruikers de functie 'Automatisch invullen' niet gebruiken. - Als je de instelling inschakelt of geen waarde instelt, kunnen gebruikers de opties voor 'Automatisch aanvullen' zelf beheren. Zo kunnen ze profielen voor 'Automatisch aanvullen' configureren en de functie naar wens in- of uitschakelen.</translation> + Als je de instelling inschakelt of geen waarde instelt, kunnen gebruikers de opties voor 'Automatisch invullen' zelf beheren. Zo kunnen ze profielen voor 'Automatisch invullen' configureren en de functie naar wens in- of uitschakelen.</translation> <translation id="8044493735196713914">Opstartmodus van apparaat melden</translation> <translation id="8049769137921877885">Met dit beleid wordt bepaald of beleidsgegevens en het tijdstip van de beleidsfetch worden gerapporteerd. @@ -5216,7 +5194,7 @@ Als je het beleid niet instelt, geeft <ph name="PRODUCT_NAME" /> gebruikers de controle over of het de standaardbrowser is en als dit niet zo is, of er gebruikersmeldingen moeten worden weergegeven. Opmerking: Als <ph name="MS_WIN_NAME" />-beheerders deze instelling inschakelen, werkt dit alleen op systemen met Windows 7. Voor latere versies moet je een bestand voor standaard app-koppelingen implementeren, waarmee <ph name="PRODUCT_NAME" /> de verwerker wordt voor het <ph name="HTTPS_PROTOCOL" />- en <ph name="HTTP_PROTOCOL" />-protocol (en eventueel het <ph name="FTP_PROTOCOL" />-protocol en andere bestandsindelingen). Raadpleeg de Help-pagina van Chrome voor meer informatie (https://support.google.com/chrome?p=make_chrome_default_win).</translation> -<translation id="8445576299806775661">Na elke grote versie-update maakt Chrome een momentopname van bepaalde gedeelten van de browsergegevens van de gebruiker. Deze momentopname kan worden gebruikt voor een latere noodrollback van de versie. Als er een noodrollback wordt uitgevoerd naar een versie waarvoor een gebruiker een bijbehorende momentopname heeft, worden de gegevens in de momentopname hersteld. Zo kunnen gebruikers instellingen als bookmarks en gegevens voor automatisch aanvullen behouden. +<translation id="8445576299806775661">Na elke grote versie-update maakt Chrome een momentopname van bepaalde gedeelten van de browsergegevens van de gebruiker. Deze momentopname kan worden gebruikt voor een latere noodrollback van de versie. Als er een noodrollback wordt uitgevoerd naar een versie waarvoor een gebruiker een bijbehorende momentopname heeft, worden de gegevens in de momentopname hersteld. Zo kunnen gebruikers instellingen als bookmarks en gegevens voor automatisch invullen behouden. Als dit beleid niet is ingesteld, wordt de standaardwaarde 3 gebruikt. @@ -5320,7 +5298,6 @@ Als dit beleid is ingesteld op 'False' of niet is geconfigureerd, kan de gebruiker de browser gebruiken zonder in te loggen bij <ph name="PRODUCT_NAME" />.</translation> <translation id="858309738002328421">Grote bestandsuploads blokkeren</translation> <translation id="8584279193368801689">Beperkt de modus voor afdrukken met pincode. Als het beleid niet is ingesteld, gelden er geen beperkingen. Als de modus niet beschikbaar is, wordt dit beleid genegeerd. Houd er rekening mee dat de functie voor afdrukken met pincode alleen is ingeschakeld voor printers die het protocol IPPS, HTTPS, USB of IPP-over-USB gebruiken.</translation> -<translation id="8585558195682146109">Gebruikersdownloads sturen om te laten scannen</translation> <translation id="8587229956764455752">Het maken van nieuwe gebruikersaccounts toestaan</translation> <translation id="8591713876665299827">Dit beleid is beëindigd en wordt verwijderd in <ph name="PRODUCT_OS_NAME" />-versie 85. Gebruik in plaats daarvan <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />. @@ -5579,7 +5556,6 @@ <translation id="8942616385591203339">Dit beleid bepaalt of er informatie over toestemming voor synchronisatie mag worden getoond aan de gebruiker wanneer deze voor het eerst inlogt. De waarde moet op 'False' worden ingesteld als er nooit toestemming voor synchronisatie is vereist voor de gebruiker. Als dit is ingesteld op 'False', wordt er geen informatie over toestemming voor synchronisatie weergegeven. Als dit is ingesteld op 'True' of als dit niet is ingesteld, kan er informatie over toestemming voor synchronisatie worden weergegeven.</translation> -<translation id="8943934315109955032">Niet controleren op schendingen van de beveiligingsregels voor gevoelige gegevens</translation> <translation id="8947415621777543415">Apparaatlocatie rapporteren</translation> <translation id="8948062138228904066">Toelatingslijst voor verificatieserver</translation> <translation id="8951350807133946005">Directory voor schijfcache instellen</translation> @@ -5593,9 +5569,6 @@ Dit beleid moet niet worden ingeschakeld wanneer het beleid <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> is ingeschakeld, omdat die functie dezelfde functionaliteit aan clientzijde gebruikt. De door Google gehoste synchronisatie wordt in dit geval volledig uitgeschakeld.</translation> <translation id="8955719471735800169">Bovenkant pagina</translation> -<translation id="8956310900055843601">Als je het beleid instelt op 'True' of niet instelt, krijgt het inlogscherm van een apparaat de 24-uurs kloknotatie. Gebruikerssessies maken ook standaard gebruik van deze notatie, maar gebruikers kunnen de kloknotatie van een account wijzigen. - - Als je het beleid instelt op 'False', krijgt een apparaat de 12-uurs kloknotatie.</translation> <translation id="8959992920425111821">Standaard configuratie</translation> <translation id="8970205333161758602">De prompt <ph name="PRODUCT_FRAME_NAME" /> negeren</translation> <translation id="8976248126101463034">Gnubby-verificatie toestaan voor hosts voor externe toegang</translation>
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index b56bb43..8750971 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -95,7 +95,6 @@ Se esta política não for definida, os GPOs salvos em cache poderão ser reutilizados por até 25 horas. Se esta política for definida como 0, o armazenamento de GPO em cache será desativado. Isso aumenta a carga do servidor, já que o download dos GPOs será feito novamente a cada busca da política, mesmo se não houver alteração.</translation> -<translation id="1111470455889178048">Enviar uploads e downloads do usuário para verificação</translation> <translation id="1117462881884985156">O <ph name="PRODUCT_NAME" /> ignorará qualquer proxy para a lista de hosts apresentada aqui. Esta política só terá efeito caso você tenha selecionado as configurações manuais de proxy em "Escolher o modo de especificar as configurações do servidor proxy" e se a política <ph name="PROXY_SETTINGS_POLICY_NAME" /> não tiver sido especificada. @@ -933,16 +932,6 @@ Se esta política for definida, o usuário não poderá modificar o valor. Se esta política não for definida, a tela de privacidade ficará desativada inicialmente, mas poderá ser controlada pelo usuário.</translation> -<translation id="2423038190900972331">Controlar como o <ph name="PRODUCT_NAME" /> verifica se há violações da regra de proteção de dados confidenciais em dados que são enviados, transferidos por download, colados da área de transferência ou arrastados e soltos. - - Se esta política não for definida ou for definida com "Nenhum", o <ph name="PRODUCT_NAME" /> não verificará em nenhum dos dados se há violações da regra de proteção de dados confidenciais. - - Se esta política for definida como "Verificar downloads", e o usuário tentar fazer o download de um arquivo de um URL na política <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" />, o <ph name="PRODUCT_NAME" /> verificará a conformidade dos dados transferidos por download com as regras da empresa. - - Se esta política for definida como "Verificar uploads", e o usuário tentar fazer upload de um arquivo para um domínio que não esteja na <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" />, o <ph name="PRODUCT_NAME" /> verificará a conformidade com as regras da empresa no arquivo enviado, nos dados colados da área de transferência ou nos dados arrastados e soltos. - - Se esta política for definida como "Verificar uploads e downloads", o <ph name="PRODUCT_NAME" /> vai se comportar de acordo com as regras descritas em "Verificar downloads" e "Verificar uploads". - </translation> <translation id="2423255396068675416">Se a política for definida como "Ativada" ou não for definida, os usuários poderão executar o <ph name="PRODUCT_CROSTINI_NAME" />, contanto que <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> e <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> sejam definidas como "Ativada". Se a política for definida como "Desativada", o <ph name="PRODUCT_CROSTINI_NAME" /> será desativado. Se a definição for mudada para "Desativada", a política será aplicada para iniciar novos contêineres <ph name="PRODUCT_CROSTINI_NAME" />, e não para os já existentes.</translation> <translation id="2424098959650060417">Controla quais impressoras da <ph name="BULK_PRINTERS_POLICY_NAME" /> são disponibilizadas para os usuários. @@ -1057,7 +1046,6 @@ O valor da política precisa ser especificado em milissegundos. Os valores são ajustados para serem menores ou iguais ao intervalo de inatividade.</translation> <translation id="2548572254685798999">Fornecer informações sobre o "Navegação segura"</translation> <translation id="2550593661567988768">Apenas impressão simplex</translation> -<translation id="2551520365302988324">Enviar uploads do usuário para verificação</translation> <translation id="2552318891854145040">A definição desta política configura uma lista de favoritos em que cada um deles é um dicionário contendo as chaves "<ph name="NAME" />" e "<ph name="URL_LABEL" />", que definem o nome e o destino do favorito. Os administradores podem configurar uma subpasta definindo um favorito sem uma chave "<ph name="URL_LABEL" />", mas com uma outra chave "<ph name="CHILDREN" />". Essa chave também tem uma lista de favoritos, alguns dos quais podem ser pastas. O Chrome modifica URLs incompletos como se eles tivessem sido enviados pela barra de endereço. Por exemplo, "<ph name="GOOGLE_COM" />" se torna "<ph name="HTTPS_GOOGLE_COM" />". Os usuários não podem mudar as pastas em que os favoritos estão, embora seja possível ocultá-las da barra de favoritos. O nome padrão da pasta de favoritos gerenciados é "Favoritos gerenciados", mas ele pode ser modificado ao adicionar um novo subdicionário à política com uma única chave chamada "<ph name="TOPLEVEL_NAME" />" usando o nome da pasta desejada como valor. Os favoritos gerenciados não são sincronizados com a conta do usuário, e as extensões não podem modificá-los.</translation> @@ -1813,7 +1801,6 @@ Para ver detalhes sobre <ph name="CORS" />, acesse: <ph name="CORS_HELP_URL" />. A remoção desta política foi anunciada para o <ph name="PRODUCT_NAME" /> versão 82, mas ela foi removida na versão 84.</translation> -<translation id="3624515566460517364">Verifica violações da regra de proteção de dados confidenciais em uploads e downloads</translation> <translation id="3627678165642179114">Ativar ou desativar serviço da web de verificação ortográfica</translation> <translation id="3628480121685794414">Ativar impressão simplex</translation> <translation id="3631099945620529777">Se definida como falsa, o botão "Encerrar processo" será desativado no Gerenciador de tarefas. @@ -1970,7 +1957,6 @@ Se a política não for definida ou se ela for definida como uma lista vazia, nenhum modo de desbloqueio rápido estará disponível nos dispositivos gerenciados.</translation> <translation id="3877517141460819966">Modo de autenticação de segundo fator integrado</translation> -<translation id="3879196885908353077">Verifica violações da regra de proteção de dados confidenciais em downloads</translation> <translation id="3879208481373875102">Configurar a lista de apps da Web de instalação forçada</translation> <translation id="388237772682176890">O uso dessa política foi suspenso no M53 e removido no M54, porque a compatibilidade com o SPDY/3.1 foi removida. @@ -2393,7 +2379,6 @@ Em dispositivos não gerenciados, a notificação será sempre exibida.</translation> <translation id="4510923771103268849">O usuário tem permissão de acesso root aos contêineres do Crostini</translation> <translation id="4515404363392014383">Ativar a Navegação segura para fontes confiáveis</translation> -<translation id="4517928394515633751">Verificar downloads de usuários com o "Navegação segura"</translation> <translation id="4518251772179446575">Perguntar sempre que um site quiser rastrear a localização física dos usuários</translation> <translation id="4529868888205510667">A não ser que o ARC seja desativado por outros meios, definir a política como verdadeira ou não defini-la permitirá que os usuários usem o ARC. Definir a política como falsa impedirá que usuários sem afiliação usem o ARC. @@ -2568,15 +2553,6 @@ Um valor "*" da lista de bloqueio significa que todos os hosts de mensagens nativas estão nessa lista, a menos que estejam explicitamente mencionados na lista de permissões. Se a política não for definida, o <ph name="PRODUCT_NAME" /> carregará todos os hosts de mensagens nativas instalados.</translation> -<translation id="4771144269610910963">Esta política controla a verificação detalhada de downloads do usuário com o "Navegação segura". Se ela não for definida ou a configuração padrão "Não verificar arquivos" for escolhida, os downloads do usuário não serão verificados pelo "Navegação segura". - - Se ela for definida como "Enviar downloads do usuário para verificação", os downloads serão enviados pela rede para que o "Navegação segura" faça a verificação de malware. - - Se ela for definida como "Enviar uploads do usuário para verificação", os uploads serão enviados pela rede para que o "Navegação segura" faça a verificação de malware. - - Se ela for definida como "Enviar uploads e downloads do usuário para verificação", o comportamento resultante ocorrerá de acordo com as regras descritas em "Enviar uploads do usuário para verificação" e "Enviar downloads do usuário para verificação". - - Consulte as políticas <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> e <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" /> para ver detalhes sobre como os resultados da verificação são exibidos para o usuário e o administrador.</translation> <translation id="4787763197941188108">Modifica o tamanho da página para impressão padrão. <ph name="PAGE_SIZE_NAME" /> precisa conter um dos formatos listados ou "personalizado" se o tamanho do papel exigido não estiver na lista. Se um valor "personalizado" for fornecido, a propriedade <ph name="PAGE_SIZE_CUSTOM_SIZE" /> precisará ser especificada. Ela descreve a altura e a largura desejadas em micrômetros. Caso contrário, a propriedade <ph name="PAGE_SIZE_CUSTOM_SIZE" /> não precisa ser especificada. A política que violar essas regras será ignorada. @@ -2780,7 +2756,6 @@ Esta política só é eficaz quando a máquina está registrada na <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> do <ph name="PRODUCT_NAME" />. Para o <ph name="PRODUCT_OS_NAME" />, ela sempre é eficaz.</translation> <translation id="5148753489738115745">Permite especificar os parâmetros adicionais que são usados quando o <ph name="PRODUCT_FRAME_NAME" /> inicia o <ph name="PRODUCT_NAME" />. Se essa política não for configurada, será usada a linha de comando padrão.</translation> -<translation id="5150323673529584553">Não verificar arquivos</translation> <translation id="5152787786897382519">O Chromium e o Google Chrome têm alguns grupos de políticas que dependem umas das outras para oferecer controle sobre um recurso. Esses conjuntos são representados pelos seguintes grupos de políticas. Como essas políticas podem ter diversas fontes, apenas os valores da fonte de maior prioridade serão aplicados. Os valores de uma fonte de menor prioridade presente no mesmo grupo serão ignorados. A ordem da prioridade está definida em <ph name="POLICY_PRIORITY_DOC_URL" />.</translation> <translation id="515816885693899426">Esta política está obsoleta. Use a <ph name="URL_BLOCKLIST_POLICY_NAME" />. @@ -3605,6 +3580,11 @@ Se a política não for definida, o <ph name="PRODUCT_NAME" /> carregará todos os hosts de mensagens nativas instalados.</translation> <translation id="6224304369267200483">Os URLs/domínios permitidos automaticamente direcionam a declaração da chave de segurança</translation> +<translation id="6230442621691161858">Esse recurso ativa sugestões de novos conteúdos para você conhecer. Inclui apps, páginas da Web e muito mais. + Se a política for definida como verdadeira, as sugestões de novos conteúdos serão ativadas. + Se ela for definida como falsa, as sugestões serão desativadas. + Se esta política não for definida, as sugestões de novos conteúdos serão desativadas para usuários gerenciados e ativadas para outros usuários. + </translation> <translation id="6233173491898450179">Definir diretório de download</translation> <translation id="6234177445959386333">Configura a lista de URLs de login corporativo em que o serviço de proteção de senha capturará hashes com salt de senhas.</translation> <translation id="6242147107333796512">Enviar informações de relatórios de erros, como ID remoto, carimbo de data/hora da captura e causa. @@ -3717,7 +3697,6 @@ <translation id="637934607141010488">Informa a lista de usuários do dispositivo que fizeram login recentemente. Se a política for definida como "False", os usuários não serão informados.</translation> -<translation id="638668187106406971">Verifica se há violações da regra de proteção de dados confidenciais em uploads</translation> <translation id="6394350458541421998">Esta política teve o uso suspenso a partir da versão 29 do <ph name="PRODUCT_OS_NAME" />. Em vez dela, use a política PresentationScreenDimDelayScale.</translation> <translation id="6401669939808766804">Fazer logout do usuário</translation> <translation id="640244877779556713">Permitir sugestão de emojis</translation> @@ -4892,7 +4871,6 @@ O valor da política precisa ser especificado em milissegundos. Os valores são ajustados para serem menores ou iguais ao intervalo de inatividade.</translation> <translation id="8001701200415781021">Restringir quais Contas do Google são permitidas como principais do navegador no <ph name="PRODUCT_NAME" /></translation> -<translation id="8003853057959146975">Envia arquivos para verificar se há violações da regra de proteção de dados confidenciais</translation> <translation id="8006219716745491366">Se a <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> estiver ativada, definir <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> especificará uma lista de URLs alternativos para extrair termos de pesquisa do mecanismo. Os URLs precisam incluir a string <ph name="SEARCH_TERM_MARKER" />. Se a <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> não for definida, nenhum URL alternativo será usado para extrair termos de pesquisa.</translation> @@ -5302,7 +5280,6 @@ Se esta política for definida como false ou não for configurada, o usuário poderá usar o navegador sem fazer login no <ph name="PRODUCT_NAME" />.</translation> <translation id="858309738002328421">Bloquear upload de arquivos grandes</translation> <translation id="8584279193368801689">Restringe o modo de impressão com PIN. Se a política não for definida, não haverá restrição. Se o modo não estiver disponível, a política será ignorada. O recurso de impressão com PIN está disponível somente para impressoras que usam um dos protocolos IPPS, HTTPS, USB ou IPP-over-USB.</translation> -<translation id="8585558195682146109">Enviar downloads do usuário para verificação</translation> <translation id="8587229956764455752">Permite a criação de novas contas de usuários</translation> <translation id="8591713876665299827">Esta política está obsoleta e será removida na versão 85 do <ph name="PRODUCT_OS_NAME" />. Por isso, passe a usar <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />. @@ -5559,7 +5536,6 @@ <translation id="8942616385591203339">Esta política controla se o consentimento de sincronização pode ser exibido para o usuário durante o primeiro login. É necessário defini-la como falsa se o consentimento de sincronização nunca for necessário para o usuário. Se definida como falsa, o consentimento de sincronização não será exibido. Se definida como verdadeira ou não definida, o consentimento de sincronização poderá ser exibido.</translation> -<translation id="8943934315109955032">Não verifica violações da regra de proteção de dados confidenciais</translation> <translation id="8947415621777543415">Informar a localização do dispositivo</translation> <translation id="8948062138228904066">Lista de permissões do servidor de autenticação</translation> <translation id="8951350807133946005">Definir o diretório de cache de disco</translation> @@ -5573,9 +5549,6 @@ Esta política não deve ser ativada quando a política <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> estiver definida como ativada porque esse recurso usa a mesma funcionalidade do lado do cliente. Nesse caso, a sincronização hospedada pelo Google é completamente desativada.</translation> <translation id="8955719471735800169">Voltar ao início</translation> -<translation id="8956310900055843601">Se a política for definida como verdadeira ou não for definida, a tela de login do dispositivo terá um relógio no formato de 24 horas. As sessões de usuário também usarão esse formato como padrão, mas os usuários poderão mudá-lo para as próprias contas. - - Se a política for definida como falsa, o dispositivo terá um relógio no formato de 12 horas.</translation> <translation id="8959992920425111821">Configuração padrão</translation> <translation id="8970205333161758602">Remover a solicitação de recusa do <ph name="PRODUCT_FRAME_NAME" /></translation> <translation id="8976248126101463034">Permitir autenticação gnubby para hosts de acesso remoto</translation>
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index ee47f551..b45a173c 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb
@@ -95,7 +95,6 @@ Если правило не настроено, кешированные объекты групповой политики могут использоваться в течение 25 часов. Если для правила задано значение 0, кеширование объектов групповой политики отключено. В этом случае нагрузка на сервер возрастает, так как объекты групповой политики приходится заново скачивать при каждом получении правила, даже если они не меняются.</translation> -<translation id="1111470455889178048">Отправлять загруженные и скачанные файлы на проверку</translation> <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> будет игнорировать любые прокси-серверы для хостов, перечисленных в этом списке. Это правило действует, только если не задано <ph name="PROXY_SETTINGS_POLICY_NAME" />, а в разделе "Выбрать способ настройки прокси-сервера" указан ручной режим. @@ -934,16 +933,6 @@ Если это правило настроено, пользователи не смогут переопределить значение. Если значение не задано, изначально экран конфиденциальности будет отключен, но пользователи смогут управлять его настройками.</translation> -<translation id="2423038190900972331">Определяет, как <ph name="PRODUCT_NAME" /> проверяет данные, которые загружают, скачивают, вставляют из буфера обмена и перетаскивают пользователи, на соблюдение правила о защите конфиденциальных данных. - - Если правило не настроено или для него задано значение None, <ph name="PRODUCT_NAME" /> не будет проверять на соблюдение указанного правила никакие данные. - - Если для правила задано значение "Проверять на соблюдение правила о защите конфиденциальных данных скачиваемые файлы" и пользователь попытается скачать файл со страницы, URL которой указан для правила <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" />, то <ph name="PRODUCT_NAME" /> проверит скачанные данные на соответствие корпоративным правилам. - - Если установлено значение "Проверять на соблюдение правила о защите конфиденциальных данных загружаемые файлы" и пользователь попытается загрузить файл в домен, которого нет в списке для правила <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" />, то <ph name="PRODUCT_NAME" /> проверит файл на соответствие корпоративным правилам. Правило также распространяется на данные, вставленные из буфера обмена и добавленные с помощью перетаскивания. - - Если выбрано значение "Проверять на соблюдение правила о защите конфиденциальных данных загружаемые и скачиваемые файлы", <ph name="PRODUCT_NAME" /> действует так же, как при значениях "Проверять на соблюдение правила о защите конфиденциальных данных скачиваемые файлы" и "Проверять на соблюдение правила о защите конфиденциальных данных загружаемые файлы". - </translation> <translation id="2423255396068675416">Если правило включено или не настроено, пользователи могут запускать <ph name="PRODUCT_CROSTINI_NAME" /> при условии, что включены правила <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> и <ph name="CROSTINI_ALLOWED_POLICY_NAME" />. Если правило выключено, пользователь не может запускать <ph name="PRODUCT_CROSTINI_NAME" />. Если выключить правило, оно начнет действовать при последующих попытках запустить любой контейнер <ph name="PRODUCT_CROSTINI_NAME" />, но не будет распространяться на уже запущенные контейнеры.</translation> <translation id="2424098959650060417">Это правило позволяет управлять доступом пользователей к принтерам, указанным в настройках правила <ph name="BULK_PRINTERS_POLICY_NAME" />. @@ -1058,7 +1047,6 @@ Значение указывается в миллисекундах и не должно превышать время задержки при переходе в режим бездействия.</translation> <translation id="2548572254685798999">Передавать информацию Безопасного просмотра</translation> <translation id="2550593661567988768">Только односторонняя печать</translation> -<translation id="2551520365302988324">Отправлять загруженные файлы на проверку</translation> <translation id="2552318891854145040">Если правило настроено, будет создан список закладок, каждая из которых представляет собой словарь, где ключам <ph name="NAME" /> и <ph name="URL_LABEL" /> соответствуют значения – название закладки и URL-адрес сайта. Администраторы также могут задать подпапку для закладок. Для этого вместо ключа <ph name="URL_LABEL" /> следует использовать ключ <ph name="CHILDREN" />, а в качестве его значения указать список вложенных закладок или папок. Chrome дополняет неполные URL так же, как при их вводе в адресной строке. Например, адрес <ph name="GOOGLE_COM" /> будет преобразован в <ph name="HTTPS_GOOGLE_COM" />. Пользователи не смогут изменять папки с закладками, а только скрывать их на панели. По умолчанию папка называется "Управляемые закладки". Чтобы изменить это название, необходимо добавить в правило дополнительный словарь с единственным ключом <ph name="TOPLEVEL_NAME" /> и желаемым названием папки в качестве значения. Управляемые закладки не синхронизируются с аккаунтом пользователя, а расширения не могут их изменять.</translation> @@ -1821,7 +1809,6 @@ Подробнее о технологии <ph name="CORS" />: <ph name="CORS_HELP_URL" />. Мы планировали удалить это правило из <ph name="PRODUCT_NAME" /> с версии 82, но удалили с версии 84.</translation> -<translation id="3624515566460517364">Проверять на соблюдение правила о защите конфиденциальных данных загружаемые и скачиваемые файлы</translation> <translation id="3627678165642179114">Включение и отключение веб-службы проверки правописания</translation> <translation id="3628480121685794414">Включить одностороннюю печать</translation> <translation id="3631099945620529777">Если указано значение False, кнопка "Завершить процесс" в диспетчере задач неактивна. @@ -1979,7 +1966,6 @@ Если правило не настроено или список пуст, на управляемых устройствах не работает ни один способ быстрой разблокировки экрана.</translation> <translation id="3877517141460819966">Встроенный режим двухэтапной аутентификации</translation> -<translation id="3879196885908353077">Проверять на соблюдение правила о защите конфиденциальных данных скачиваемые файлы</translation> <translation id="3879208481373875102">Настройка списка принудительно устанавливаемых веб-приложений</translation> <translation id="388237772682176890">Это правило перестало поддерживаться в M53 и было удалено в M54 вследствие отключения поддержки SPDY/3.1. @@ -2405,7 +2391,6 @@ На устройствах, которыми не управляют администраторы, уведомление показывается в любом случае.</translation> <translation id="4510923771103268849">Разрешить пользователю получать root-доступ к контейнерам Crostini</translation> <translation id="4515404363392014383">Включить режим Безопасного просмотра для надежных источников.</translation> -<translation id="4517928394515633751">Проверять скачанные файлы с помощью Безопасного просмотра</translation> <translation id="4518251772179446575">Спрашивать, если сайт пытается отследить местоположение пользователя</translation> <translation id="4529868888205510667">Если правило не настроено или задано значение True, пользователи могут запускать ARC (при условии, что этот инструмент не отключен другим способом). Если указано значение False, неаффилированные пользователи не могут применять ARC. @@ -2580,15 +2565,6 @@ В черный список, в котором указана звездочка (*), включаются все хосты, за исключением явно добавленных в белый. Если правило не настроено, <ph name="PRODUCT_NAME" /> будет загружать все установленные хосты.</translation> -<translation id="4771144269610910963">Это правило управляет функцией глубокого сканирования скачанных файлов, которая выполняется с помощью Безопасного просмотра. Если правило не настроено или для него задано значение по умолчанию (Не сканировать файлы), сканирование скачанных файлов с помощью Безопасного просмотра не будет выполняться. - - Если установлено значение "Отправлять скачанные файлы на проверку", скачанные пользователями файлы будут отправляться по сети для проверки с помощью Безопасного просмотра на наличие вредоносного ПО. - - Если установлено значение "Отправлять загруженные файлы на проверку", загруженные пользователями файлы будут отправляться по сети для проверки с помощью Безопасного просмотра на наличие вредоносного ПО. - - Если задано значение "Отправлять загруженные и скачанные файлы на проверку", используются те же процедуры, что при значениях "Отправлять загруженные файлы на проверку" и "Отправлять скачанные файлы на проверку". - - Подробнее о том, как результаты проверки показываются для пользователя и администратора, рассказано в описании правил <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> и <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" />.</translation> <translation id="4787763197941188108">Переопределяет размеры страницы по умолчанию для печати. В параметре <ph name="PAGE_SIZE_NAME" /> необходимо выбрать один из форматов, перечисленных в списке. Если необходимого размера страницы там нет, должно быть указано значение custom. Если выбрано значение custom, требуется задать свойство <ph name="PAGE_SIZE_CUSTOM_SIZE" />, которое описывает высоту и ширину в микрометрах. В противном случае значение свойства <ph name="PAGE_SIZE_CUSTOM_SIZE" /> указывать не нужно. Правило, которое нарушает эти условия, игнорируется. @@ -2803,7 +2779,6 @@ <translation id="5148753489738115745">Позволяет задать дополнительные параметры, которые используются при запуске <ph name="PRODUCT_NAME" /> из <ph name="PRODUCT_FRAME_NAME" />. Если это правило не задано, действуют настройки командной строки по умолчанию.</translation> -<translation id="5150323673529584553">Не проверять файлы</translation> <translation id="5152787786897382519">В Chromium и Google Chrome есть группы взаимозависимых правил, которые определяют работу различных функций. Эти группы приведены ниже. Если у правила несколько источников, применяются значения из источника с наивысшим приоритетом, а остальные значения игнорируются. Информация о приоритете правил доступна на странице <ph name="POLICY_PRIORITY_DOC_URL" />.</translation> <translation id="515816885693899426">Это правило больше не поддерживается. Используйте вместо него правило <ph name="URL_BLOCKLIST_POLICY_NAME" />. @@ -3632,6 +3607,11 @@ Если правило не настроено, <ph name="PRODUCT_NAME" /> будет загружать все установленные хосты.</translation> <translation id="6224304369267200483">URL и домены, которым разрешена автоматическая проверка электронных ключей</translation> +<translation id="6230442621691161858">Эта функция позволяет включить показ рекомендаций нового контента, например приложений, веб-страниц и т д. + Если задать значение True, рекомендации нового контента будут включены, + а если значение False – отключены. + Если значение не задано, показ рекомендаций для нового контента будет выключен для управляемых профилей и включен для всех остальных. + </translation> <translation id="6233173491898450179">Выбор каталога для скачиваний</translation> <translation id="6234177445959386333">Настроить список URL входа в корпоративный аккаунт, на которых служба защиты паролей должна записывать хеши с солью для паролей</translation> <translation id="6242147107333796512">Передача данных, связанных с отчетами о сбоях (например, идентификатор, временная метка и причина). @@ -3744,7 +3724,6 @@ <translation id="637934607141010488">Сообщать о пользователях, недавно выполнявших вход на устройстве. Если эта политика не задана или выбрано значение false, отчет о пользователях предоставляться не будет.</translation> -<translation id="638668187106406971">Проверять на соблюдение правила о защите конфиденциальных данных загружаемые файлы</translation> <translation id="6394350458541421998">Это правило не поддерживается в <ph name="PRODUCT_OS_NAME" /> версии 29 и будет исключено из более поздних версий. Вместо него используйте правило PresentationScreenDimDelayScale.</translation> <translation id="6401669939808766804">Выход из системы</translation> <translation id="640244877779556713">Включение подсказок эмодзи</translation> @@ -4916,7 +4895,6 @@ Значение указывается в миллисекундах и не должно превышать время задержки при переходе в режим бездействия.</translation> <translation id="8001701200415781021">Определяет, какой аккаунт Google можно назначить основным в <ph name="PRODUCT_NAME" /></translation> -<translation id="8003853057959146975">Проверять файлы на соблюдение правила о защите конфиденциальных данных</translation> <translation id="8006219716745491366">Если правило <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> включено, то параметр <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> содержит список альтернативных URL, которые используются для извлечения запросов из поисковой системы. Для выполнения этой функции URL должен содержать строку <ph name="SEARCH_TERM_MARKER" />. Если правило <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> не настроить, то для извлечения поисковых запросов не будут использоваться альтернативные URL.</translation> @@ -5324,7 +5302,6 @@ Если правило не настроено или для него выбрано значение False, браузер можно использовать без входа в <ph name="PRODUCT_NAME" />.</translation> <translation id="858309738002328421">Блокировать загрузку больших файлов</translation> <translation id="8584279193368801689">Ограничивает режим печати с вводом PIN-кода. Если правило не задано, ограничение не действует. Если этот режим недоступен, правило будет игнорироваться. Режим печати с вводом PIN-кода доступен только для принтеров, использующих протоколы IPPS, HTTPS, USB или IPP через USB.</translation> -<translation id="8585558195682146109">Отправлять скачанные файлы на проверку</translation> <translation id="8587229956764455752">Разрешить создание новых аккаунтов пользователей</translation> <translation id="8591713876665299827">Правило больше не поддерживается и будет удалено из <ph name="PRODUCT_OS_NAME" /> 85. Вместо него используйте следующее: <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />. @@ -5583,7 +5560,6 @@ <translation id="8942616385591203339">Это правило определяет, запрашивается ли у пользователя согласие на синхронизацию при первом входе. Если согласие не требуется, необходимо выбрать значение False. Если задано значение False, согласие на синхронизацию не запрашивается. Если задано значение True или правило не настроено, согласие на синхронизацию запрашивается.</translation> -<translation id="8943934315109955032">Не проводить проверку на соблюдение правила о защите конфиденциальных данных</translation> <translation id="8947415621777543415">Сообщить местоположение устройства</translation> <translation id="8948062138228904066">Список разрешенных серверов для аутентификации</translation> <translation id="8951350807133946005">Установка каталога кеша на диске</translation> @@ -5597,9 +5573,6 @@ Это правило нельзя включать одновременно с правилом <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" />, так как при этом будут использоваться одни и те же функциональные возможности на стороне клиента. В этом случае службы синхронизации Google будут отключены.</translation> <translation id="8955719471735800169">В начало</translation> -<translation id="8956310900055843601">Если правило не настроено или задано значение True, на экране входа используется 24-часовой формат времени. Этот формат по умолчанию применяется во время сеансов пользователей, но они могут изменить его для своих аккаунтов. - - Если указано значение False, на устройстве используется 12-часовой формат времени.</translation> <translation id="8959992920425111821">Конфигурация по умолчанию</translation> <translation id="8970205333161758602">Скрытие подсказки <ph name="PRODUCT_FRAME_NAME" /></translation> <translation id="8976248126101463034">Позволяет использовать аутентификацию Gnubby для хостов удаленного доступа</translation>
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index 8d168eb5b..6ce02bba 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb
@@ -95,7 +95,6 @@ หากไม่ได้ตั้งค่านโยบาย GPO ที่แคชจะนำมาใช้ซ้ำได้สูงสุด 25 ชั่วโมง หากตั้งค่านโยบายเป็น 0 ระบบจะปิดใช้การแคช GPO โปรดทราบว่าการปิดใช้แคชจะเพิ่มการโหลดเซิร์ฟวอร์เนื่องจากต้องดาวน์โหลด GPO ใหม่ทุกครั้งที่เรียกใช้นโยบายแม้ว่านโยบายจะเป็นเวอร์ชันเดิมก็ตาม</translation> -<translation id="1111470455889178048">ส่งไฟล์ที่ผู้ใช้อัปโหลดและดาวน์โหลดไปสแกน</translation> <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> จะข้ามพร็อกซีสำหรับรายชื่อโฮสต์ที่ระบุไว้ที่นี่ นโยบายนี้จะมีผลในกรณีที่คุณเลือกการตั้งค่าพร็อกซีด้วยตนเองที่ "เลือกวิธีระบุการตั้งค่าพร็อกซีเซิร์ฟเวอร์" และในกรณีที่ไม่มีการระบุนโยบาย <ph name="PROXY_SETTINGS_POLICY_NAME" /> @@ -926,16 +925,6 @@ หากมีการตั้งค่านโยบายนี้ ผู้ใช้จะลบล้างค่าไม่ได้ หากไม่ได้ตั้งค่านโยบายนี้ ระบบจะปิดใช้หน้าจอส่วนตัวในตอนแรก แต่ผู้ใช้จะควบคุมต่อจากนั้นได้</translation> -<translation id="2423038190900972331">ควบคุมวิธีการที่ <ph name="PRODUCT_NAME" /> ตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อนในข้อมูลที่อัปโหลด ดาวน์โหลด วางจากคลิปบอร์ด หรือลากและวาง - - หากไม่ได้ตั้งค่านโยบายนี้หรือตั้งค่าเป็น "ไม่มี" <ph name="PRODUCT_NAME" /> จะไม่ตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อน - - หากตั้งค่านโยบายนี้เป็น "ตรวจสอบการดาวน์โหลด" และผู้ใช้พยายามที่จะดาวน์โหลดไฟล์จาก URL หนึ่งในนโยบาย <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" /> เบราว์เซอร์ <ph name="PRODUCT_NAME" /> จะตรวจสอบการปฏิบัติตามข้อกำหนดของกฎองค์กรของข้อมูลที่ดาวน์โหลดมา - - หากตั้งค่านโยบายนี้เป็น "ตรวจสอบการอัปโหลด" และผู้ใช้พยายามจะอัปโหลดไฟล์ไปยังโดเมนที่ไม่อยู่ใน <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" /> เบราว์เซอร์ <ph name="PRODUCT_NAME" /> จะตรวจสอบการปฏิบัติตามข้อกำหนดของกฎองค์กรของไฟล์ที่อัปโหลด ข้อมูลที่วางจากคลิปบอร์ด หรือข้อมูลที่ลากและวาง - - หากตั้งค่านโยบายนี้เป็น "ตรวจสอบการอัปโหลดและดาวน์โหลด" <ph name="PRODUCT_NAME" /> จะทำงานตามกฎที่อธิบายไว้ภายใต้นโยบาย "ตรวจสอบการดาวน์โหลด" และ "ตรวจสอบการอัปโหลด" - </translation> <translation id="2423255396068675416">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ได้ตั้งค่าจะให้ผู้ใช้เรียกใช้ <ph name="PRODUCT_CROSTINI_NAME" /> ได้ตราบใดที่มีการเปิดใช้ <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> และ <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> การตั้งค่านโยบายเป็น "ปิดใช้" จะปิด <ph name="PRODUCT_CROSTINI_NAME" /> ไม่ให้ผู้ใช้ใช้งาน การเปลี่ยนเป็น "ปิดใช้" จะเริ่มใช้นโยบายเพื่อเริ่มคอนเทนเนอร์ <ph name="PRODUCT_CROSTINI_NAME" /> ใหม่ ไม่ใช่คอนเทนเนอร์ที่ทำงานอยู่แล้ว</translation> <translation id="2424098959650060417">ควบคุมว่าผู้ใช้จะใช้งานเครื่องพิมพ์จาก <ph name="BULK_PRINTERS_POLICY_NAME" /> เครื่องใดได้บ้าง @@ -1050,7 +1039,6 @@ ควรระบุค่าของนโยบายเป็นมิลลิวินาที ค่าจะถูกบีบให้เหลือน้อยกว่าหรือเท่ากับระยะหน่วงเวลาของการไม่มีความเคลื่อนไหว</translation> <translation id="2548572254685798999">รายงานข้อมูล Google Safe Browsing</translation> <translation id="2550593661567988768">การพิมพ์ด้านเดียวเท่านั้น</translation> -<translation id="2551520365302988324">ส่งไฟล์ที่ผู้ใช้อัปโหลดไปสแกน</translation> <translation id="2552318891854145040">การตั้งค่านโยบายนี้จะสร้างรายการบุ๊กมาร์กที่แต่ละรายการเป็นพจนานุกรมที่มีคีย์ "<ph name="NAME" />" และ "<ph name="URL_LABEL" />" คีย์เหล่านี้เก็บชื่อและเป้าหมายของบุ๊กมาร์กไว้ ผู้ดูแลระบบสร้างโฟลเดอร์ย่อยได้โดยกำหนดบุ๊กมาร์กที่ไม่มีคีย์ "<ph name="URL_LABEL" />" แต่มีคีย์ "<ph name="CHILDREN" />" เพิ่มเติม คีย์นี้ยังมีรายการบุ๊กมาร์กด้วย ซึ่งบุ๊กมาร์กบางอันอาจเป็นโฟลเดอร์ด้วยก็ได้ Chrome จะแก้ไข URL ที่ไม่สมบูรณ์ให้เหมือนว่า URL เหล่านั้นได้รับการส่งผ่านทางแถบที่อยู่ เช่น "<ph name="GOOGLE_COM" />" จะเปลี่ยนเป็น "<ph name="HTTPS_GOOGLE_COM" />" ผู้ใช้เปลี่ยนโฟลเดอร์ที่บุ๊กมาร์กอยู่ไม่ได้ (แต่ซ่อนโฟลเดอร์จากแถบบุ๊กมาร์กได้) ชื่อโฟลเดอร์เริ่มต้นของบุ๊กมาร์กที่มีการจัดการคือ "บุ๊กมาร์กที่มีการจัดการ" แต่ก็เปลี่ยนได้โดยเพิ่มพจนานุกรมย่อยใหม่ที่มีคีย์เดียวชื่อ "<ph name="TOPLEVEL_NAME" />" ลงในนโยบาย โดยมีชื่อโฟลเดอร์ที่ต้องการเป็นค่า บุ๊กมาร์กที่มีการจัดการจะไม่ซิงค์กับบัญชีผู้ใช้และส่วนขยายจะแก้ไขบุ๊กมาร์กเหล่านี้ไม่ได้</translation> @@ -1808,7 +1796,6 @@ ดูรายละเอียดเกี่ยวกับ <ph name="CORS" /> ได้ที่ <ph name="CORS_HELP_URL" /> โปรดทราบว่าเราได้ประกาศว่าจะนำนโยบายนี้ออกใน <ph name="PRODUCT_NAME" /> เวอร์ชัน 82 แต่ได้นำออกในเวอร์ชัน 84</translation> -<translation id="3624515566460517364">ตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อนสำหรับการอัปโหลดและดาวน์โหลด</translation> <translation id="3627678165642179114">เปิดหรือปิดใช้งานบริการเว็บสำหรับการตรวจสอบการสะกด</translation> <translation id="3628480121685794414">เปิดใช้การพิมพ์แบบด้านเดียว</translation> <translation id="3631099945620529777">หากตั้งค่าเป็น "เท็จ" ระบบจะปิดใช้ปุ่ม "หยุดกระบวนการ" ในตัวจัดการงาน @@ -1964,7 +1951,6 @@ หากไม่ได้ตั้งค่านโยบายนี้หรือตั้งค่าเป็นรายการที่ว่างเปล่า อุปกรณ์ที่มีการจัดการจะใช้โหมดปลดล็อกด่วนใดๆ ไม่ได้เลย</translation> <translation id="3877517141460819966">โหมดการตรวจสอบสิทธิ์จากปัจจัยที่สองที่ผสานรวม</translation> -<translation id="3879196885908353077">ตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อนสำหรับการดาวน์โหลด</translation> <translation id="3879208481373875102">กำหนดค่ารายการเว็บแอปที่บังคับติดตั้งแล้ว</translation> <translation id="388237772682176890">นโยบายนี้เลิกใช้งานใน M53 และนำออกจาก M54 เนื่องจากไม่มีการสนับสนุน SPDY/3.1 อีกต่อไป @@ -2383,7 +2369,6 @@ การแจ้งเตือนจะแสดงเสมอในอุปกรณ์ที่ไม่มีการจัดการ</translation> <translation id="4510923771103268849">ผู้ใช้มีสิทธิ์เข้าถึงรากของคอนเทนเนอร์ Crostini ได้</translation> <translation id="4515404363392014383">เปิดใช้ Safe Browsing สำหรับแหล่งที่มาที่เชื่อถือได้</translation> -<translation id="4517928394515633751">สแกนการดาวน์โหลดของผู้ใช้ด้วย Google Safe Browsing</translation> <translation id="4518251772179446575">ถามเมื่อไซต์ต้องการติดตามตำแหน่งทางกายภาพของผู้ใช้</translation> <translation id="4529868888205510667">การตั้งค่านโยบายเป็น "จริง" หรือไม่ได้ตั้งค่าจะทำให้ผู้ใช้ใช้ ARC ได้ เว้นแต่จะมีการปิด ARC ไว้ด้วยวิธีการอื่นๆ การตั้งค่านโยบายเป็น "เท็จ" หมายความว่าผู้ใช้ที่ไม่ได้เชื่อมโยงจะใช้ ARC ไม่ได้ @@ -2559,15 +2544,6 @@ ค่า "*" ในรายการที่บล็อกหมายความว่าโฮสต์การรับส่งข้อความดั้งเดิมทั้งหมดถูกบล็อก เว้นแต่จะแสดงอยู่อย่างชัดแจ้งในรายการที่อนุญาต หากไม่ได้ตั้งค่านโยบายนี้ <ph name="PRODUCT_NAME" /> จะโหลดโฮสต์การรับส่งข้อความดั้งเดิมทั้งหมดที่ติดตั้งไว้</translation> -<translation id="4771144269610910963">นโยบายนี้ควบคุมการสแกนการดาวน์โหลดของผู้ใช้อย่างละเอียดด้วย Google Safe Browsing หากไม่ได้ตั้งค่า หรือตั้งเป็นค่าเริ่มต้น "ไม่ต้องสแกนไฟล์" Google Safe Browsing จะไม่สแกนไฟล์ที่ผู้ใช้ดาวน์โหลด - - หากตั้งค่าเป็น "ส่งไฟล์ที่ผู้ใช้ดาวน์โหลดไปสแกน" ระบบจะส่งไฟล์ที่ผู้ใช้ดาวน์โหลดผ่านเครือข่ายไปยัง Google Safe Browsing เพื่อสแกนหามัลแวร์ - - หากตั้งค่าเป็น "ส่งไฟล์ที่ผู้ใช้อัปโหลดไปสแกน" ระบบจะส่งไฟล์ที่ผู้ใช้อัปโหลดผ่านเครือข่ายไปยัง Google Safe Browsing เพื่อสแกนหามัลแวร์ - - หากตั้งค่าเป็น "ส่งไฟล์ที่ผู้ใช้อัปโหลดและดาวน์โหลดไปสแกน" ก็จะทำงานตามกฎที่อธิบายไว้ในตัวเลือก "ส่งไฟล์ที่ผู้ใช้อัปโหลดไปสแกน" และ "ส่งไฟล์ที่ผู้ใช้ดาวน์โหลดไปสแกน" - - ดูรายละเอียดเกี่ยวกับการแสดงผลการสแกนแก่ผู้ใช้และผู้ดูแลระบบได้จากนโยบาย <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> และ <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" /></translation> <translation id="4787763197941188108">ลบล้างขนาดหน้าการพิมพ์เริ่มต้น <ph name="PAGE_SIZE_NAME" /> ควรมีรูปแบบที่อยู่ในรายการ 1 รูปแบบ หรือมีรูปแบบ "ที่กำหนดเอง" หากไม่มีขนาดกระดาษที่จำเป็นอยู่ในรายการ หากระบุค่า "ที่กำหนดเอง" ก็ควรระบุพร็อพเพอร์ตี้ <ph name="PAGE_SIZE_CUSTOM_SIZE" /> ซึ่งอธิบายความสูงและความกว้างที่ต้องการเป็นไมโครเมตรด้วย มิเช่นนั้นก็ไม่ควรมีการระบุพร็อพเพอร์ตี้ <ph name="PAGE_SIZE_CUSTOM_SIZE" /> ระบบจะไม่สนใจนโยบายที่ละเมิดกฎนี้ @@ -2775,7 +2751,6 @@ <translation id="5148753489738115745">ช่วยให้คุณสามารถกำหนดพารามิเตอร์เพิ่มเติมที่จะนำมาใช้เมื่อ <ph name="PRODUCT_FRAME_NAME" /> เปิดใช้งาน <ph name="PRODUCT_NAME" /> หากไม่ได้ตั้งค่านโยบายนี้เอาไว้ คำสั่งที่เป็นค่าเริ่มต้นจะถูกนำมาใช้</translation> -<translation id="5150323673529584553">ไม่ต้องสแกนไฟล์</translation> <translation id="5152787786897382519">ทั้ง Chromium และ Google Chrome ต่างก็มีกลุ่มนโยบายที่พึ่งพากันและกันเพื่อให้การควบคุมฟีเจอร์หนึ่งๆ ชุดเหล่านี้แสดงด้วยกลุ่มนโยบายต่อไปนี้ เนื่องจากนโยบายมีแหล่งที่มาได้หลายแหล่ง ระบบจึงจะใช้เฉพาะค่าที่มาจากแหล่งที่มาที่มีลำดับความสำคัญสูงสุด และจะไม่สนใจค่าที่มาจากแหล่งที่มาที่มีลำดับความสำคัญต่ำในกลุ่มเดียวกัน ลำดับความสำคัญกำหนดไว้ใน <ph name="POLICY_PRIORITY_DOC_URL" /></translation> <translation id="515816885693899426">นโยบายนี้เลิกใช้งานไปแล้ว โปรดใช้นโยบาย "<ph name="URL_BLOCKLIST_POLICY_NAME" />" แทน @@ -3603,6 +3578,11 @@ หากไม่ได้ตั้งค่านโยบายนี้ <ph name="PRODUCT_NAME" /> จะโหลดโฮสต์การรับส่งข้อความดั้งเดิมทั้งหมดที่ติดตั้งไว้</translation> <translation id="6224304369267200483">URL/โดเมนอนุญาตการยืนยันกุญแจรักษาความปลอดภัยโดยตรงโดยอัตโนมัติ</translation> +<translation id="6230442621691161858">ฟีเจอร์นี้จะเปิดใช้คำแนะนำเนื้อหาใหม่ให้สำรวจ รวมแอป หน้าเว็บ และอื่นๆ + หากตั้งค่านโยบายนี้เป็น "จริง" ระบบจะเปิดใช้คำแนะนำเนื้อหาใหม่ให้สำรวจ + หากตั้งค่านโยบายนี้เป็น "เท็จ" ระบบจะปิดใช้คำแนะนำเนื้อหาใหม่ให้สำรวจ + หากไม่ได้ตั้งค่านโยบายนี้ ระบบจะปิดใช้คำแนะนำเนื้อหาใหม่ให้สำรวจสำหรับผู้ใช้ที่มีการจัดการและเปิดใช้สำหรับผู้ใช้อื่นๆ + </translation> <translation id="6233173491898450179">ตั้งค่าไดเรกทอรีสำหรับดาวน์โหลด</translation> <translation id="6234177445959386333">กำหนดค่ารายการ URL สำหรับเข้าสู่ระบบขององค์กรที่บริการป้องกันด้วยรหัสผ่านควรบันทึกแฮชที่ใช้ Salt ของรหัสผ่าน</translation> <translation id="6242147107333796512">รายงานข้อมูลที่เกี่ยวข้องกับรายงานข้อขัดข้อง เช่น รหัสระยะไกล การประทับเวลาการบันทึก และสาเหตุ @@ -3715,7 +3695,6 @@ <translation id="637934607141010488">รายงานรายชื่อผู้ใช้อุปกรณ์ที่เข้าสู่ระบบเมื่อเร็วๆ นี้ หากตั้งค่านโยบายนี้เป็น False จะไม่มีการรายงานผู้ใช้</translation> -<translation id="638668187106406971">ตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อนสำหรับการอัปโหลด</translation> <translation id="6394350458541421998">นโยบายนี้ได้ถูกยกเลิกไปตั้งแต่ <ph name="PRODUCT_OS_NAME" /> เวอร์ชัน 29 โปรดใช้นโยบาย PresentationScreenDimDelayScale แทน</translation> <translation id="6401669939808766804">ออกจากระบบให้ผู้ใช้</translation> <translation id="640244877779556713">เปิดใช้คำแนะนำอีโมจิ</translation> @@ -4889,7 +4868,6 @@ ควรระบุค่าของนโยบายเป็นมิลลิวินาที ค่าจะถูกบีบให้เหลือน้อยกว่าหรือเท่ากับระยะหน่วงเวลาของการไม่มีความเคลื่อนไหว</translation> <translation id="8001701200415781021">จำกัดบัญชี Google ที่อนุญาตให้ตั้งค่าเป็นบัญชีหลักของเบราว์เซอร์ใน <ph name="PRODUCT_NAME" /></translation> -<translation id="8003853057959146975">ส่งไฟล์เพื่อรับการตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อน</translation> <translation id="8006219716745491366">หาก <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> เปิดอยู่ การตั้งค่า <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> จะระบุรายการ URL ทางเลือกสำหรับการแยกข้อความค้นหาออกจากเครื่องมือค้นหา URL ดังกล่าวควรมีสตริง <ph name="SEARCH_TERM_MARKER" /> การไม่ตั้งค่า <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> จะทำให้ไม่มีการใช้ URL ทางเลือกเพื่อแยกข้อความค้นหา</translation> @@ -5301,7 +5279,6 @@ หากตั้งค่านโยบายนี้เป็น "เท็จ" หรือไม่ได้กำหนดค่า ผู้ใช้จะใช้เบราว์เซอร์ได้โดยไม่ต้องลงชื่อเข้าใช้ <ph name="PRODUCT_NAME" /></translation> <translation id="858309738002328421">บล็อกการอัปโหลดไฟล์ขนาดใหญ่</translation> <translation id="8584279193368801689">จำกัดโหมดการพิมพ์ด้วย PIN ระบบจะถือว่าไม่มีข้อจำกัดหากไม่ได้ตั้งค่านโยบาย หากโหมดนี้ไม่พร้อมใช้งาน ระบบจะไม่สนใจนโยบายนี้ โปรดทราบว่าฟีเจอร์การพิมพ์ด้วย PIN จะใช้ได้กับเครื่องพิมพ์ที่ใช้โปรโตคอล IPPS, HTTPS, USB หรือ IPP-over-USB เท่านั้น</translation> -<translation id="8585558195682146109">ส่งไฟล์ที่ผู้ใช้ดาวน์โหลดไปสแกน</translation> <translation id="8587229956764455752">อนุญาตให้สร้างบัญชีผู้ใช้ใหม่</translation> <translation id="8591713876665299827">โปรดทราบว่าจะมีการเลิกใช้งานและนำนโยบายนี้ออกใน <ph name="PRODUCT_OS_NAME" /> เวอร์ชัน 85 โปรดใช้ <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" /> แทน @@ -5558,7 +5535,6 @@ <translation id="8942616385591203339">นโยบายนี้ควบคุมว่าการขอคำยินยอมให้ซิงค์จะแสดงต่อผู้ใช้รายหนึ่งๆ ในระหว่างที่ลงชื่อเข้าใช้เป็นครั้งแรกได้หรือไม่ ตั้งค่านโยบายนี้เป็นเท็จหากไม่จำเป็นต้องขอคำยินยอมให้ซิงค์จากผู้ใช้ หากตั้งค่าเป็นเท็จ ระบบจะไม่แสดงการขอคำยินยอมให้ซิงค์ หากตั้งค่าเป็นจริงหรือไม่ได้ตั้งค่า ระบบจะแสดงการขอคำยินยอมให้ซิงค์</translation> -<translation id="8943934315109955032">ไม่ตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อน</translation> <translation id="8947415621777543415">รายงานตำแหน่งอุปกรณ์</translation> <translation id="8948062138228904066">รายการที่อนุญาตสำหรับเซิร์ฟเวอร์การตรวจสอบสิทธิ์</translation> <translation id="8951350807133946005">ตั้งค่าไดเรกทอรีสำหรับแคชของดิสก์</translation> @@ -5572,9 +5548,6 @@ ไม่ควรเปิดใช้นโยบายนี้เมื่อเปิดใช้นโยบาย <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> อยู่เนื่องจากฟีเจอร์นั้นใช้ฟังก์ชันเดียวกันกับของฝั่งไคลเอ็นต์ ในกรณีนี้ระบบจะปิดใช้การซิงค์ที่โฮสต์บน Google ทั้งหมด</translation> <translation id="8955719471735800169">กลับไปด้านบน</translation> -<translation id="8956310900055843601">การตั้งค่านโยบายเป็น "จริง" หรือไม่ได้ตั้งค่าจะทำให้นาฬิกาในหน้าจอลงชื่อเข้าใช้ของอุปกรณ์มีรูปแบบเป็น 24 ชั่วโมง เซสชันผู้ใช้ก็จะใช้รูปแบบนี้เป็นค่าเริ่มต้นเช่นกัน แต่ผู้ใช้เปลี่ยนรูปแบบนาฬิกาของบัญชีได้ - - การตั้งค่านโยบายเป็น "เท็จ" ทำให้นาฬิกาของอุปกรณ์มีรูปแบบเป็น 12 ชั่วโมง</translation> <translation id="8959992920425111821">การกำหนดค่าเริ่มต้น</translation> <translation id="8970205333161758602">ระงับการแจ้งเตือนการปฏิเสธของ <ph name="PRODUCT_FRAME_NAME" /></translation> <translation id="8976248126101463034">อนุญาตให้ตรวจสอบสิทธิ์ Gnubby สำหรับโฮสต์การเข้าถึงระยะไกล</translation>
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb index fd3aaf69..efdfbde 100644 --- a/components/policy/resources/policy_templates_tr.xtb +++ b/components/policy/resources/policy_templates_tr.xtb
@@ -96,7 +96,6 @@ Bu politika ayarlanmadan bırakılırsa, önbelleğe alınmış GPO'lar 25 saate kadar yeniden kullanılabilir. Bu politika 0 değerine ayarlanırsa, GPO önbelleğe alma devre dışı bırakılır. Her politika getirildiğinde GPO'lar (değişmeseler bile) tekrar indirildiği için bu işlemin sunucu yükünü artıracağını unutmayın.</translation> -<translation id="1111470455889178048">Kullanıcının yüklediklerini ve indirdiklerini tarama için gönder</translation> <translation id="1117462881884985156"><ph name="PRODUCT_NAME" />, burada belirtilen ana makine listesi için tüm proxy'leri atlar. Bu politika yalnızca "Proxy sunucu ayarlarının nasıl belirtileceğini seçin" alanında manuel proxy ayarlarını seçtiyseniz ve <ph name="PROXY_SETTINGS_POLICY_NAME" /> politikası belirtilmediyse uygulanır. @@ -931,16 +930,6 @@ Bu politika ayarlandığında kullanıcı, değeri geçersiz kılamaz. Bu politika ayarlanmadan bırakılırsa gizlilik ekranı başta devre dışı bırakılır, ancak kullanıcı tarafından kontrol edilebilir.</translation> -<translation id="2423038190900972331"><ph name="PRODUCT_NAME" /> ürününün; yüklenen, indirilen, panodan yapıştırılan veya sürüklenip bırakılan verilerin hassas verileri koruma kuralına uygunluğunu nasıl kontrol ettiğini denetler. - - Bu politika ayarlanmazsa veya "Yok" değerine ayarlanırsa <ph name="PRODUCT_NAME" />, hassas verileri koruma kuralı ihlallerini kontrol etmez. - - Bu politika “İndirilenleri denetle” olarak ayarlanırsa kullanıcı <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" /> politikasındaki bir URL'den dosya indirmeye çalışırsa <ph name="PRODUCT_NAME" />, indirilen veriyi kurumsal kurallara uyumluluk açısından denetleyecektir. - - Bu politika “Yüklenenleri denetle” olarak ayarlanır ve kullanıcı <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" /> politikasında bulunmayan bir alan adına dosya yüklemeye çalışırsa <ph name="PRODUCT_NAME" />, yüklenen dosyayı, panodan yapıştırılan veriyi veya sürüklenip bırakılan veriyi kurumsal kurallara uyumluluk açısından denetleyecektir. - - Bu politika “Yüklemeleri ve indirilenleri denetle” olarak ayarlanırsa <ph name="PRODUCT_NAME" />, “İndirilenleri denetle” ve “Yüklemeleri denetle” ayarlarında açıklanan kurallara göre davranır. - </translation> <translation id="2423255396068675416">Politika Etkin değerine ayarlanır veya ayarlanmadan bırakılırsa <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> ve <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> politikaları Etkin değerine ayarlandığı sürece, kullanıcıların <ph name="PRODUCT_CROSTINI_NAME" /> çalıştırmasına izin verilir. Politika Devre Dışı değerine ayarlanırsa <ph name="PRODUCT_CROSTINI_NAME" />, kullanıcı için kapatılır. Politika Devre Dışı olarak değiştirilirse halihazırda çalışan kapsayıcılara değil, başlatılan yeni <ph name="PRODUCT_CROSTINI_NAME" /> kapsayıcılarına uygulanmaya başlar.</translation> <translation id="2424098959650060417">Kullanıcıların <ph name="BULK_PRINTERS_POLICY_NAME" /> politikasından hangi yazıcıları kullanabileceklerini denetler. @@ -1055,7 +1044,6 @@ Politika değeri milisaniye olarak belirtilmelidir. Değerler boşta kalma gecikmesinin altında veya o gecikmeye eşit olacak şekilde ayarlanır.</translation> <translation id="2548572254685798999">Güvenli Tarama bilgilerini bildirme</translation> <translation id="2550593661567988768">Yalnızca tek yönlü yazdır</translation> -<translation id="2551520365302988324">Kullanıcının yüklediklerini tarama için gönder</translation> <translation id="2552318891854145040">Politikayı ayarlamak, her biri "<ph name="NAME" />" ve "<ph name="URL_LABEL" />" anahtarlarna sahip bir sözlük olan yer işaretlerinin listesini oluşturur. Bu anahtarlar yer işaretinin adını ve hedefini içerir. Yöneticiler, "<ph name="URL_LABEL" />" anahtarı olmayan ancak ek "<ph name="CHILDREN" />" anahtarı içeren bir yer işareti tanımlayarak alt klasör oluşturabilir. Bu anahtarda bazıları klasör olabilecek yer işaretleri listesi de olabilir. Chrome, eksik URL'leri adres çubuğu kullanılarak gönderilmiş gibi düzeltir. Örneğin, "<ph name="GOOGLE_COM" />" olan bir URL "<ph name="HTTPS_GOOGLE_COM" />" halini alır. Kullanıcılar, yer işaretlerinin yerleştirildiği klasörleri değiştiremezler (ancak yer işareti çubuğunda gizleyebilirler). Yönetilen yer işaretlerinin varsayılan klasör ismi "Yönetilen Yer İşaretleri"dir fakat politikaya değere istenilen klasör adı yazılan "<ph name="TOPLEVEL_NAME" />" isminde tek bir anahtara sahip yeni bir alt sözlük ekleyerek değiştirilebilir. Yönetilen yer işaretleri kullanıcı hesabıyla senkronize edilmez ve uzantılar bunların üzerinde değişiklik yapamaz.</translation> @@ -1818,7 +1806,6 @@ <ph name="CORS" /> ile ilgili ayrıntılar için şu adresi ziyaret edin: <ph name="CORS_HELP_URL" />. Bu politikanın <ph name="PRODUCT_NAME" /> sürüm 82'de kaldırılacağı duyurulmuştu, ancak sürüm 84'te kaldırıldığını belirtmek isteriz.</translation> -<translation id="3624515566460517364">Yüklemeler ve indirmeler için hassas verileri koruma kuralı ihlallerini denetle</translation> <translation id="3627678165642179114">Yazım denetimi Web hizmetini etkinleştir veya devre dışı bırak</translation> <translation id="3628480121685794414">Tek yönlü yazdırmayı etkinleştir</translation> <translation id="3631099945620529777">False (yanlış) değerine ayarlanırsa Görev Yöneticisi'nde "İşlemi sonlandır" düğmesi devre dışı bırakılır. @@ -1972,7 +1959,6 @@ Politika ayarlanmaz veya boş listeye ayarlanırsa yönetilen cihazlarda hızlı kilit açma modları kullanılamaz.</translation> <translation id="3877517141460819966">Entegre iki etmenli kimlik doğrulama modu</translation> -<translation id="3879196885908353077">İndirmeler için hassas verileri koruma kuralı ihlallerini denetle</translation> <translation id="3879208481373875102">Zorunlu yüklenmiş Web Uygulamaları listesini yapılandır</translation> <translation id="388237772682176890">SPDY/3.1 desteği kaldırıldığı için bu politika M53 sürümünde kullanımdan kaldırılmış ve M54 sürümünde üründen çıkarılmıştır. @@ -2404,7 +2390,6 @@ Bildirim, yönetilmeyen cihazlarda her zaman gösterilir.</translation> <translation id="4510923771103268849">Kullanıcının, Crostini kapsayıcılarına root erişimi olmasına izin verilir</translation> <translation id="4515404363392014383">Güvenilen kaynaklar için Güvenli Tarama'yı etkinleştir</translation> -<translation id="4517928394515633751">Kullanıcıların indirdiklerini Güvenli Tarama ile tara</translation> <translation id="4518251772179446575">Bir site, kullanıcının fiziksel konumunu izlemek istediğinde sor</translation> <translation id="4529868888205510667">ARC diğer yollarla kapatılmadığı sürece, politikanın True (Doğru) değerine ayarlanması veya ayarlanmadan bırakılması, kullanıcıların ARC'yi kullanmasına izin verir. Politikanın False (Yanlış) değerine ayarlanması, bağlı olmayan kullanıcıların ARC'yi kullanamayacağı anlamına gelir. @@ -2580,15 +2565,6 @@ Engellenenler listesi değerinin "*" olması, izin verilenler listesine açıkça eklenmediği sürece tüm yerel mesajlaşma ana makinelerinin engelleneceği anlamına gelir. Bu politika ayarlanmadan bırakılırsa <ph name="PRODUCT_NAME" /> ürünü, tüm yüklü yerel mesajlaşma ana makinelerini yükler.</translation> -<translation id="4771144269610910963">Bu politika kullanıcıların indirdiklerine Güvenli Tarama ile derin tarama uygulanmasını denetler. Bu politika, ayarlanmazsa veya varsayılan değer olan “Dosyaları tarama” olarak ayarlanırsa kullanıcıların indirdiği dosyalar Güvenli Tarama ile taranmaz. - - "Kullanıcıların indirdiklerini tarama için gönder" seçeneğine ayarlanırsa kullanıcıların indirdikleri dosyalar kötü amaçlı yazılım taraması için ağ üzerinden Güvenli Tarama'ya gönderilir. - - "Kullanıcıların yüklediklerini tarama için gönder" seçeneğine ayarlanırsa kullanıcıların yükledikleri dosyalar kötü amaçlı yazılım taraması için ağ üzerinden Güvenli Tarama'ya gönderilir. - - "Kullanıcının yüklediklerini ve indirdiklerini tarama için gönder" seçeneğine ayarlanırsa "Kullanıcının yüklediklerini tarama için gönder" ve "Kullanıcının indirdiklerini tarama için gönder" ayarlarında açıklanan kurallara göre davranır. - - Tarama sonuçlarının kullanıcıya ve yöneticiye nasıl gösterildiğiyle ilgili ayrıntılar için <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> ve <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" /> politikalarına bakın.</translation> <translation id="4787763197941188108">Varsayılan yazdırma sayfa boyutunu geçersiz kılar. <ph name="PAGE_SIZE_NAME" />, listelenen biçimlerden birini veya gereken kağıt boyutu listede yoksa "özel" biçimi içermelidir. "Özel" değer sağlanıyorsa <ph name="PAGE_SIZE_CUSTOM_SIZE" /> özelliği belirtilmelidir. Bu özellik, istenilen yüksekliği ve genişliği mikrometre cinsinden verir. Aksi takdirde <ph name="PAGE_SIZE_CUSTOM_SIZE" /> özelliği belirtilmemelidir. Bu kuralları ihlal eden politika yok sayılır. @@ -2801,7 +2777,6 @@ <translation id="5148753489738115745"><ph name="PRODUCT_FRAME_NAME" /> tarafından <ph name="PRODUCT_NAME" /> başlatıldığında kullanılan ek parametreleri belirtmenize olanak verir. Bu politika ayarlanmazsa varsayılan komut satırı kullanılır.</translation> -<translation id="5150323673529584553">Dosyaları tarama</translation> <translation id="5152787786897382519">Hem Chromium hem de Google Chrome, bir özellik üzerinde kontrol sağlamak için birbirine bağlı bazı politika gruplarına sahiptir. Bu kümeler, aşağıdaki politika grupları tarafından temsil edilir. Politikaların birden çok kaynağı olabileceği düşünülürse, yalnızca en yüksek öncelikli kaynaktan gelen değerler geçerlidir. Aynı gruptaki daha düşük öncelikli kaynaktan gelen değerler, yok sayılır. Öncelik sırası, <ph name="POLICY_PRIORITY_DOC_URL" /> adresinde tanımlanmıştır.</translation> <translation id="515816885693899426">Bu politika kullanımdan kaldırıldı. Bunun yerine lütfen '<ph name="URL_BLOCKLIST_POLICY_NAME" />' politikasını kullanın. @@ -3628,6 +3603,11 @@ Bu politika ayarlanmadan bırakılırsa <ph name="PRODUCT_NAME" /> ürünü, tüm yüklü yerel mesajlaşma ana makinelerini yükler.</translation> <translation id="6224304369267200483">Doğrudan Güvenlik Anahtarı doğrulamasına otomatik olarak izin verilen URL'ler/alan adları</translation> +<translation id="6230442621691161858">Bu özellik, keşfedilecek yeni içerik önerilerini etkinleştirir. Uygulamalar, web sayfaları ve daha fazlasını içerir. + Bu politika Doğru değerine ayarlanırsa keşfedilecek yeni içerik önerileri etkinleştirilir. + Bu politika Yanlış değerine ayarlanırsa keşfedilecek yeni içerik önerileri devre dışı bırakılır. + Bu politika ayarlanmadan bırakılırsa keşfedilecek yeni içerik önerileri, yönetilen kullanıcılar için devre dışı bırakılır, diğer kullanıcılar için etkinleştirilir. + </translation> <translation id="6233173491898450179">İndirme dizinini ayarla</translation> <translation id="6234177445959386333">Şifrelerin rastgele oluşturulmuş karma değerlerinin şifre koruma hizmeti tarafından yakalanması gerektiği kurumsal giriş URL'lerinin listesini yapılandırın.</translation> <translation id="6242147107333796512">Uzak kimlik, yakalama zaman damgası ve kilitlenme nedeni gibi kilitlenme raporlarıyla ilgili bilgileri raporlama. @@ -3740,7 +3720,6 @@ <translation id="637934607141010488">Son zamanlarda giriş yapmış cihaz kullanıcılarının listesini bildirin. Politika yanlış değerine ayarlanırsa kullanıcılar bildirilmez.</translation> -<translation id="638668187106406971">Yüklemeler için hassas verileri koruma kuralı ihlallerini denetle</translation> <translation id="6394350458541421998">Bu politika, <ph name="PRODUCT_OS_NAME" /> Sürüm 29 itibariyle kullanımdan kaldırılmıştır. Lütfen bunun yerine PresentationScreenDimDelayScale politikasını kullanın.</translation> <translation id="6401669939808766804">Kullanıcının oturumunu kapat</translation> <translation id="640244877779556713">Emoji Önerilerini Etkinleştir</translation> @@ -4925,7 +4904,6 @@ Politika değeri milisaniye olarak belirtilmelidir. Değerler boşta kalma gecikmesinin altında veya o gecikmeye eşit olacak şekilde ayarlanır.</translation> <translation id="8001701200415781021"><ph name="PRODUCT_NAME" /> dahilinde hangi Google hesaplarının tarayıcı birincil hesapları olarak ayarlanmasına izin verileceğini kısıtlama</translation> -<translation id="8003853057959146975">Hassas verileri koruma kuralı ihlali incelemesi için dosyaları gönder</translation> <translation id="8006219716745491366"><ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> açıksa <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> protokolünün ayarlanması, arama motorundan arama terimlerini çıkartmak için alternatif URL'lerin bir listesini belirtir. Bu URL'ler, <ph name="SEARCH_TERM_MARKER" /> dizesini içermelidir. <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> protokolü ayarlanmadan bırakılırsa arama terimlerini çıkartmak için alternatif URL kullanılmaz.</translation> @@ -5323,7 +5301,6 @@ Bu politika "false" (yanlış) değerine ayarlanır veya yapılandırılmazsa kullanıcı <ph name="PRODUCT_NAME" /> ürününde oturum açmadan tarayıcıyı kullanabilir.</translation> <translation id="858309738002328421">Büyük dosya yüklemelerini engelle</translation> <translation id="8584279193368801689">PIN ile yazdırma modunu kısıtlar. Politika ayarlanmazsa herhangi bir kısıtlama uygulanmaz. Mod kullanılamıyorsa bu politika yok sayılır. PIN yazdırma özelliğinin yalnızca IPPS, HTTPS, USB veya USB üzerinden IPP protokollerinden bir tanesini kullanan yazıcılar için geçerli olduğunu unutmayın.</translation> -<translation id="8585558195682146109">Kullanıcıların indirdiklerini tarama için gönder</translation> <translation id="8587229956764455752">Yeni kullanıcı hesapları oluşturulmasına izin ver</translation> <translation id="8591713876665299827">Bu politikanın artık kullanılmadığını ve <ph name="PRODUCT_OS_NAME" /> sürüm 85'te kaldırılacağını unutmayın. Lütfen bunun yerine <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" /> politikasını kullanın. @@ -5565,7 +5542,6 @@ <translation id="8942616385591203339">Bu politika, Senkronizasyon İzni'nin ilk oturum açma sırasında kullanıcıya gösterilip gösterilemeyeceğini kontrol eder. Kullanıcı için Senkronizasyon İzni'ne hiçbir zaman gerek duyulmuyorsa false (yanlış) değerine ayarlanmalıdır. False (yanlış) değerine ayarlanırsa Senkronizasyon İzni görüntülenmez. True (doğru) değerine ayarlanır veya hiç ayarlanmazsa Senkronizasyon İzni görüntülenebilir.</translation> -<translation id="8943934315109955032">Hassas verileri koruma kuralı ihlallerini denetleme</translation> <translation id="8947415621777543415">Cihaz konumunu bildir</translation> <translation id="8948062138228904066">Kimlik doğrulama sunucusu izin verilenler listesi</translation> <translation id="8951350807133946005">Disk önbellek dizinini ayarla</translation> @@ -5579,9 +5555,6 @@ <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> politikası etkinken bu politikanın etkinleştirilmemesi gerekir. Zira bu özellik aynı istemci tarafı işlevselliğini paylaşır. Bu durumda, Google tarafından barındırılan senkronizasyon tamamen devre dışı bırakılır.</translation> <translation id="8955719471735800169">Başa dön</translation> -<translation id="8956310900055843601">Politikayı Doğru (True) değerine ayarlar veya ayarlamadan bırakırsanız cihazın oturum açma ekranında 24 saatlik saat biçimi kullanılır. Kullanıcı oturumları da varsayılan olarak bu biçimi kullanır ancak kullanıcılar bir hesabın saat biçimini değiştirebilir. - - Politikayı Yanlış (False) değerine ayarlarsanız cihaz 12 saatlik saat biçimini kullanır.</translation> <translation id="8959992920425111821">Varsayılan yapılandırma</translation> <translation id="8970205333161758602"><ph name="PRODUCT_FRAME_NAME" /> reddetme sorusunu engelle</translation> <translation id="8976248126101463034">Uzak erişim ana makineleri için gnubby kimlik doğrulamasına izin ver</translation>
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb index dcbdbdd7..80b5654 100644 --- a/components/policy/resources/policy_templates_uk.xtb +++ b/components/policy/resources/policy_templates_uk.xtb
@@ -95,7 +95,6 @@ Якщо це правило не налаштовано, кешовану групову політику можна використовувати повторно до 25 годин. Якщо для нього встановлено значення 0, кешування GPO вимкнено. Зауважте, що це збільшує навантаження на сервер, оскільки групова політика перезавантажується для кожного правила, навіть якщо вона не змінилася.</translation> -<translation id="1111470455889178048">Надсилати додані й завантажені файли на перевірку</translation> <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> обходитиме всі проксі з наведеного тут списку хостів. Це правило діє, лише якщо в розділі "Виберіть, як указувати параметри проксі-сервера" вибрано налаштування вручну та якщо не вказано правило <ph name="PROXY_SETTINGS_POLICY_NAME" />. @@ -950,16 +949,6 @@ Якщо це правило налаштовано, користувач не може замінювати його значення. Якщо це правило не налаштовано, екран конфіденційності буде вимкнено, але користувач може змінити цей параметр.</translation> -<translation id="2423038190900972331">Визначає, як <ph name="PRODUCT_NAME" /> перевіряє дані, що додаються, завантажуються, вставляються з буфера або перетягуються, на відповідність правилам щодо захисту конфіденційних даних. - - Якщо це правило не налаштовано або для нього вибрано значення "Немає", <ph name="PRODUCT_NAME" /> не перевіряє дані на відповідність правилам щодо захисту конфіденційних даних. - - Якщо для цього правила вибрано значення "Перевіряти завантажені файли" і користувач намагається завантажити файл з URL-адреси в правилі <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" />, <ph name="PRODUCT_NAME" /> перевіряє завантажені дані на відповідність корпоративним правилам. - - Якщо для цього правила вибрано значення "Перевіряти додані файли" і користувач намагається додати файл у домен, якого немає в правилі <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" />, <ph name="PRODUCT_NAME" /> перевіряє доданий файл і вставлені з буфера або перетягнуті дані на відповідність корпоративним правилам. - - Якщо для цього правила вибрано значення "Перевіряти завантажені й додані файли", <ph name="PRODUCT_NAME" /> діє відповідно до правил "Перевіряти завантажені файли" та "Перевіряти додані файли". - </translation> <translation id="2423255396068675416">Якщо це правило ввімкнено або не налаштовано, а правила <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> і <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> увімкнено, користувач може запускати <ph name="PRODUCT_CROSTINI_NAME" />. Якщо це правило вимкнено, користувач не може запускати <ph name="PRODUCT_CROSTINI_NAME" />. Якщо ви його вимкнете, змінені налаштування стосуватимуться запуску нових контейнерів <ph name="PRODUCT_CROSTINI_NAME" />, а не вже активних.</translation> <translation id="2424098959650060417">Контролює те, які принтери з правила <ph name="BULK_PRINTERS_POLICY_NAME" /> доступні для користувачів. @@ -1074,7 +1063,6 @@ Значення правила вказуються в мілісекундах. Крім того, вони не можуть перевищувати тривалість затримки через неактивність.</translation> <translation id="2548572254685798999">Повідомляти дані Безпечного перегляду</translation> <translation id="2550593661567988768">Лише односторонній друк</translation> -<translation id="2551520365302988324">Надсилати додані файли на перевірку</translation> <translation id="2552318891854145040">Це правило налаштовує список закладок, кожна з яких є каталогом із ключами "<ph name="NAME" />" і "<ph name="URL_LABEL" />", що містять її назву та ціль. Щоб налаштувати підпапку, адміністратор має вказати закладку без ключа "<ph name="URL_LABEL" />", але з додатковим ключем "<ph name="CHILDREN" />". Цей ключ також містить список закладок, деякі з яких можуть бути ще й папками. Chrome виправляє неповні URL-адреси так, ніби їх було надіслано через адресний рядок. Наприклад, <ph name="GOOGLE_COM" /> буде змінено на <ph name="HTTPS_GOOGLE_COM" />. Користувачі не можуть змінювати папки, у яких розміщено закладки, але можуть ховати їх із панелі закладок. За умовчанням папка для керованих закладок має назву "Керовані закладки", але її можна змінити, додавши в правило новий підсловник із єдиним ключем <ph name="TOPLEVEL_NAME" />, де вказується потрібна назва папки. Керовані закладки не синхронізуються з обліковим записом користувача та не змінюються розширеннями.</translation> @@ -1838,7 +1826,6 @@ Докладніше про <ph name="CORS" /> читайте на сторінці <ph name="CORS_HELP_URL" />. Зверніть увагу: раніше ми повідомляли, що вилучимо це правило в <ph name="PRODUCT_NAME" /> версії 82, але видалили його у версії 84.</translation> -<translation id="3624515566460517364">Перевіряти файли, які додаються й завантажуються, на відповідність правилам щодо захисту конфіденційних даних</translation> <translation id="3627678165642179114">Вмикати чи вимикати веб-службу перевірки орфографії</translation> <translation id="3628480121685794414">Увімкнути односторонній друк</translation> <translation id="3631099945620529777">Якщо для цього правила вибрано значення false, у Диспетчері завдань недоступна кнопка "Завершити процес". @@ -1995,7 +1982,6 @@ Якщо це правило не налаштовано або для нього вказано порожній список, швидкі режими розблокування будуть недоступні для керованих пристроїв.</translation> <translation id="3877517141460819966">Вбудовано режим двофакторної автентифікації</translation> -<translation id="3879196885908353077">Перевіряти завантажені файли на відповідність правилам щодо захисту конфіденційних даних</translation> <translation id="3879208481373875102">Налаштувати список примусово встановлюваних веб-додатків</translation> <translation id="388237772682176890">Це правило не діє у версії M53 та видалено у версії M54, оскільки підтримку протоколу SPDY/3.1 припинено. @@ -2418,7 +2404,6 @@ На некерованих пристроях сповіщення відображається завжди.</translation> <translation id="4510923771103268849">Користувач може отримувати доступ до контейнерів Crostini на кореневому рівні</translation> <translation id="4515404363392014383">Увімкнути безпечний перегляд для надійних джерел</translation> -<translation id="4517928394515633751">Перевіряти завантаження за допомогою Безпечного перегляду</translation> <translation id="4518251772179446575">Запитувати щоразу, коли сайт хоче відстежувати фізичне місцезнаходження користувача</translation> <translation id="4529868888205510667">Якщо технологію ARC не вимкнути іншим способом, а для цього правила вибрати значення True або не налаштувати його, користувачі зможуть застосовувати зазначену технологію. Якщо для цього правила вибрано значення False, сторонні користувачі не зможуть застосовувати ARC. @@ -2593,15 +2578,6 @@ Значення "*" в чорному списку вказує на те, що всі хости для обміну повідомленнями з оригінальними додатками заблоковано, якщо їх чітко не вказано в білому списку. Якщо це правило не налаштовано, <ph name="PRODUCT_NAME" /> завантажить усі встановлені хости для обміну повідомленнями з оригінальними додатками.</translation> -<translation id="4771144269610910963">Це правило керує ретельною перевіркою файлів, завантажених користувачем, за допомогою Безпечного перегляду. Якщо його не налаштовано або для нього вибрано значення за умовчанням "Не перевіряти файли", Безпечний перегляд не перевіряє завантажені файли. - - Якщо вибрано значення "Надсилати завантажені файли на перевірку", файли надсилаються через мережу для перевірки на наявність зловмисного програмного забезпечення за допомогою Безпечного перегляду. - - Якщо вибрано значення "Надсилати додані файли на перевірку", файли надсилаються через мережу для перевірки на наявність зловмисного програмного забезпечення за допомогою Безпечного перегляду. - - Якщо вибрано значення "Надсилати додані й завантажені файли на перевірку", правило діє відповідно до правил "Надсилати додані файли на перевірку" та "Надсилати завантажені файли на перевірку". - - Перегляньте правила <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> і <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" />, щоб дізнатися, як користувачі й адміністратор бачать результати перевірки.</translation> <translation id="4787763197941188108">Замінює розміри сторінки для стандартних параметрів друку. <ph name="PAGE_SIZE_NAME" /> має містити один із вказаних форматів або "власне" значення, якщо потрібного розміру паперу немає в списку. Якщо "власне" значення надано, потрібно вказати ресурс <ph name="PAGE_SIZE_CUSTOM_SIZE" />. Це бажана висота й ширина в мікрометрах. В іншому випадку ресурс <ph name="PAGE_SIZE_CUSTOM_SIZE" /> не потрібно вказувати. Правило, яке порушує ці правила, ігнорується. @@ -2818,7 +2794,6 @@ <translation id="5148753489738115745">Дозволяє вказувати додаткові параметри, які використовуються, коли <ph name="PRODUCT_FRAME_NAME" /> запускає <ph name="PRODUCT_NAME" />. Якщо це правило не встановлено, буде використовуватися командний рядок за умовчанням.</translation> -<translation id="5150323673529584553">Не перевіряти файли</translation> <translation id="5152787786897382519">Chromium і Google Chrome мають взаємозалежні групи правил для керування функцією, представлені описаними групами. Оскільки правила можуть мати кілька джерел, застосовуються лише значення з джерела з найвищим пріоритетом. Значення з джерела з нижчим пріоритетом у тій самій групі ігноруватимуться. Порядок пріоритетів визначено тут: <ph name="POLICY_PRIORITY_DOC_URL" />.</translation> <translation id="515816885693899426">Це правило більше не підтримується. Натомість використовуйте <ph name="URL_BLOCKLIST_POLICY_NAME" />. @@ -3648,6 +3623,11 @@ Якщо це правило не налаштовано, <ph name="PRODUCT_NAME" /> завантажить усі встановлені хости для обміну повідомленнями з оригінальними додатками.</translation> <translation id="6224304369267200483">URL-адресам і доменам автоматично дозволене засвідчення ключів безпеки</translation> +<translation id="6230442621691161858">Ця функція вмикає пропозиції нового контенту, зокрема додатків, веб-сторінок тощо. + Якщо для цього правила вибрано значення True, пропозиції нового контенту буде ввімкнено. + Якщо для нього вибрано значення False, такі пропозиції буде вимкнено. + Якщо це правило не налаштовано, пропозиції нового контенту для керованих користувачів буде вимкнено, а для інших – увімкнено. + </translation> <translation id="6233173491898450179">Установити каталог для завантаження</translation> <translation id="6234177445959386333">Налаштування списку URL-адрес для входу в корпоративний обліковий запис, де сервіс захисту паролів має зберігати модифіковані хеші паролів.</translation> <translation id="6242147107333796512">Повідомляти дані щодо звітів про аварійне завершення роботи, як-от ідентифікатор віддаленого пристрою, час збою та причину. @@ -3760,7 +3740,6 @@ <translation id="637934607141010488">Повідомляти про користувачів, які нещодавно входили на пристрій. Якщо це правило не налаштовано або має значення "false", звіт про користувачів не надсилатиметься.</translation> -<translation id="638668187106406971">Перевіряти додані файли на відповідність правилам щодо захисту конфіденційних даних</translation> <translation id="6394350458541421998">Це правило не підтримується від 29-ї версії <ph name="PRODUCT_OS_NAME" />. Натомість використовуйте правило PresentationScreenDimDelayScale.</translation> <translation id="6401669939808766804">Вихід користувача</translation> <translation id="640244877779556713">Увімкнути підказки смайлів</translation> @@ -4939,7 +4918,6 @@ Значення правила вказуються в мілісекундах. Крім того, вони не можуть перевищувати тривалість затримки через неактивність.</translation> <translation id="8001701200415781021">Обмежувати облікові записи Google, які можна вибрати основними у веб-переглядачі <ph name="PRODUCT_NAME" /></translation> -<translation id="8003853057959146975">Надсилати файли на перевірку відповідності правилам захисту конфіденційних даних</translation> <translation id="8006219716745491366">Якщо правило <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> увімкнено, то параметр <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> указує список альтернативних URL-адрес для отримання пошукових термінів із пошукової системи. URL-адреси мають містити сегмент <ph name="SEARCH_TERM_MARKER" />. Якщо правило <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> не налаштовано, для отримання пошукових термінів не використовуються альтернативні URL-адреси.</translation> @@ -5354,7 +5332,6 @@ Якщо це правило не налаштовано або для нього вибрано значення "False", користувач зможе працювати у веб-переглядачі, не входячи в профіль <ph name="PRODUCT_NAME" />.</translation> <translation id="858309738002328421">Блокувати додавання великих файлів</translation> <translation id="8584279193368801689">Обмежує режим друку з PIN-кодом. Якщо це правило не налаштовано, вважається, що воно не має обмежень. Якщо такий режим недоступний, це правило ігнорується. Зауважте, що функція друку з PIN-кодом увімкнена лише для принтерів, які використовують протоколи IPPS, HTTPS, USB або IPP через USB.</translation> -<translation id="8585558195682146109">Надсилати завантажені файли на перевірку</translation> <translation id="8587229956764455752">Дозволити створення облікових записів нових користувачів</translation> <translation id="8591713876665299827">Зауважте, що це правило більше не підтримується та буде вилучене в <ph name="PRODUCT_OS_NAME" /> версії 85. Натомість використовуйте правило <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />. @@ -5611,7 +5588,6 @@ <translation id="8942616385591203339">Це правило визначає, чи можна показувати Синхронізацію згоди під час першого входу користувача. Для нього потрібно встановити значення false, якщо користувачеві ніколи не потрібна Синхронізація згоди. Якщо вибрано значення false, Синхронізація згоди не показуватиметься. Якщо це правило не налаштовано або має значення true, Синхронізація згоди може показуватися.</translation> -<translation id="8943934315109955032">Не перевіряти на відповідність правилам щодо захисту конфіденційних даних</translation> <translation id="8947415621777543415">Повідомляти місцезнаходження пристрою</translation> <translation id="8948062138228904066">Білий список серверів автентифікації</translation> <translation id="8951350807133946005">Налаштування каталогу кешу на диску</translation> @@ -5625,9 +5601,6 @@ Це правило має бути вимкнено, якщо ввімкнено правило <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" />, оскільки ця функція використовує ті самі можливості на стороні клієнта. У такому випадку служби синхронізації, розміщені на серверах Google, повністю вимикаються.</translation> <translation id="8955719471735800169">На початок</translation> -<translation id="8956310900055843601">Якщо для цього правила вибрано значення True або його не налаштовано, на екрані входу на пристрої буде ввімкнено 24-годинний формат годинника. Для сеансів користувача також налаштовано цей формат за умовчанням, але користувачі можуть змінити формат годинника в обліковому записі. - - Якщо для цього правила вибрано значення False, на пристрої буде ввімкнено 12-годинний формат годинника.</translation> <translation id="8959992920425111821">Параметри за умовчанням</translation> <translation id="8970205333161758602">Заборонити запити <ph name="PRODUCT_FRAME_NAME" /> на вимкнення</translation> <translation id="8976248126101463034">Дозволити автентифікацію розширення Gnubby для хостів віддаленого доступу</translation>
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index 3e2ba51..d8026da 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -95,7 +95,6 @@ Nếu bạn không đặt chính sách này, thì GPO đã lưu vào bộ nhớ đệm có thể được sử dụng lại trong tối đa 25 giờ. Nếu đặt chính sách thành 0, thì tùy chọn lưu GPO vào bộ nhớ đệm sẽ bị tắt. Lưu ý rằng điều này sẽ làm tăng tải của máy chủ vì GPO được tải lại xuống mỗi lần tìm nạp chính sách, ngay cả khi chúng không thay đổi.</translation> -<translation id="1111470455889178048">Gửi tệp người dùng đã tải lên và tải xuống để quét</translation> <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> sẽ bỏ qua mọi proxy của danh sách máy chủ được cung cấp ở đây. Chính sách này chỉ có hiệu lực nếu bạn đã chọn các tùy chọn cài đặt proxy thủ công tại phần 'Chọn cách chỉ định cài đặt máy chủ proxy' và nếu bạn chưa chỉ định chính sách <ph name="PROXY_SETTINGS_POLICY_NAME" />. @@ -951,16 +950,6 @@ Khi bạn đặt chính sách này, người dùng sẽ không thể ghi đè giá trị. Nếu bạn không đặt chính sách này, thì màn hình bảo vệ quyền riêng tư sẽ tắt lúc ban đầu nhưng người dùng vẫn có thể kiểm soát.</translation> -<translation id="2423038190900972331">Kiểm soát cách <ph name="PRODUCT_NAME" /> kiểm tra dữ liệu được tải lên, tải xuống, dán từ khay nhớ tạm hoặc kéo và thả xem có vi phạm quy tắc bảo vệ dữ liệu nhạy cảm hay không. - - Nếu bạn không đặt hoặc đặt chính sách này thành 'None', thì <ph name="PRODUCT_NAME" /> sẽ không kiểm tra bất kỳ dữ liệu nào để xem có vi phạm quy tắc bảo vệ dữ liệu nhạy cảm hay không. - - Nếu bạn đặt chính sách này thành 'Kiểm tra tệp đã tải xuống' và người dùng cố tải tệp xuống từ một URL trong chính sách <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" />, thì <ph name="PRODUCT_NAME" /> sẽ kiểm tra dữ liệu được tải xuống xem có tuân thủ các quy tắc của doanh nghiệp hay không. - - Nếu bạn đặt chính sách này thành 'Kiểm tra tệp đã tải lên' và người dùng cố tải tệp lên một miền không có trong <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" />, thì <ph name="PRODUCT_NAME" /> sẽ kiểm tra tệp được tải lên, dữ liệu được dán từ khay nhớ tạm hoặc dữ liệu được kéo và thả xem có tuân thủ các quy tắc của doanh nghiệp hay không. - - Nếu bạn đặt chính sách này thành 'Kiểm tra tệp đã tải lên và tệp đã tải xuống', thì <ph name="PRODUCT_NAME" /> sẽ hoạt động theo các quy tắc nêu trong phần 'Kiểm tra tệp đã tải xuống' và 'Kiểm tra tệp đã tải lên'. - </translation> <translation id="2423255396068675416">Nếu bạn không đặt hoặc đặt chính sách này thành Bật, thì người dùng có thể chạy <ph name="PRODUCT_CROSTINI_NAME" /> miễn là <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> và <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> đều được đặt thành Bật. Việc đặt chính sách này thành Tắt sẽ tắt <ph name="PRODUCT_CROSTINI_NAME" /> đối với người dùng. Khi bạn đổi chính sách này thành Tắt, chính sách sẽ được áp dụng cho các vùng chứa <ph name="PRODUCT_CROSTINI_NAME" /> mới đang khởi động, chứ không phải các vùng chứa đã chạy.</translation> <translation id="2424098959650060417">Kiểm soát những máy in trong <ph name="BULK_PRINTERS_POLICY_NAME" /> mà người dùng có thể sử dụng. @@ -1074,7 +1063,6 @@ Bạn phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn hoặc bằng thời gian chờ khi ở chế độ tạm vắng.</translation> <translation id="2548572254685798999">Báo cáo thông tin Duyệt web an toàn</translation> <translation id="2550593661567988768">Chỉ in một mặt</translation> -<translation id="2551520365302988324">Gửi tệp người dùng đã tải lên để quét</translation> <translation id="2552318891854145040">Nếu bạn đặt chính sách này, thì danh sách dấu trang sẽ được thiết lập, trong đó mỗi dấu trang là một từ điển có khóa "<ph name="NAME" />" và "<ph name="URL_LABEL" />". Những khóa này lưu giữ tên và đích của dấu trang. Quản trị viên có thể thiết lập thư mục con bằng cách xác định một dấu trang không có khóa "<ph name="URL_LABEL" />" nhưng có khóa "<ph name="CHILDREN" />" bổ sung. Khóa này cũng có danh sách dấu trang và một số dấu trang trong đó cũng có thể là thư mục. Chrome sẽ sửa đổi các URL chưa hoàn chỉnh như thể các URL đó được gửi qua thanh địa chỉ. Ví dụ: "<ph name="GOOGLE_COM" />" trở thành "<ph name="HTTPS_GOOGLE_COM" />". Người dùng không thể thay đổi thư mục có chứa dấu trang (nhưng họ có thể ẩn thư mục đó khỏi thanh dấu trang). Thư mục mặc định cho dấu trang được quản lý là "Dấu trang được quản lý". Tuy nhiên, bạn có thể thay đổi bằng cách thêm vào chính sách một từ điển con mới chứa một khóa duy nhất là "<ph name="TOPLEVEL_NAME" />" với giá trị là tên thư mục mong muốn. Dấu trang được quản lý sẽ không đồng bộ hóa với tài khoản người dùng và các tiện ích không có quyền sửa đổi các dấu trang đó.</translation> @@ -1838,7 +1826,6 @@ Để biết thông tin chi tiết về <ph name="CORS" />, hãy truy cập: <ph name="CORS_HELP_URL" />. Xin lưu ý rằng chúng tôi đã thông báo việc loại bỏ chính sách này trong <ph name="PRODUCT_NAME" /> phiên bản 82. Tuy nhiên, chính sách này sẽ bị loại bỏ trong phiên bản 84.</translation> -<translation id="3624515566460517364">Kiểm tra tệp đã tải lên và tệp đã tải xuống để xem có vi phạm quy tắc bảo vệ dữ liệu nhạy cảm hay không</translation> <translation id="3627678165642179114">Bật hoặc tắt dịch vụ web kiểm tra lỗi chính tả</translation> <translation id="3628480121685794414">Bật chế độ in một mặt</translation> <translation id="3631099945620529777">Nếu bạn đặt chính sách này thành false thì nút 'Kết thúc quá trình' sẽ bị tắt trong Trình quản lý tác vụ. @@ -1995,7 +1982,6 @@ Nếu bạn không đặt hoặc đặt chính sách này thành danh sách trống, thì các thiết bị được quản lý sẽ không sử dụng được chế độ mở khóa nhanh</translation> <translation id="3877517141460819966">Chế độ xác thực hai yếu tố tích hợp</translation> -<translation id="3879196885908353077">Kiểm tra tệp đã tải xuống xem có vi phạm quy tắc bảo vệ dữ liệu nhạy cảm hay không</translation> <translation id="3879208481373875102">Định cấu hình danh sách Ứng dụng web buộc cài đặt</translation> <translation id="388237772682176890">Chính sách này không được dùng trong M53 nữa và bị xóa trong M54, vì hỗ trợ của SPDY/3.1 đã bị xóa. @@ -2425,7 +2411,6 @@ Thông báo luôn hiển thị trên các thiết bị không được quản lý.</translation> <translation id="4510923771103268849">Người dùng được phép truy cập gốc vào vùng chứa Crostini</translation> <translation id="4515404363392014383">Bật tính năng Duyệt web an toàn cho các nguồn đáng tin cậy</translation> -<translation id="4517928394515633751">Quét tệp người dùng đã tải xuống bằng tính năng Duyệt web an toàn</translation> <translation id="4518251772179446575">Hỏi bất cứ khi nào trang web muốn theo dõi vị trí thực của người dùng.</translation> <translation id="4529868888205510667">Nếu bạn không tắt ARC theo cách khác, thì việc đặt chính sách này thành True hoặc không đặt đều có nghĩa là cho phép người dùng sử dụng ARC. Nếu bạn đặt chính sách này thành False, thì người dùng chưa liên kết có thể không dùng được ARC. @@ -2600,15 +2585,6 @@ Giá trị danh sách chặn là "*" có nghĩa là tất cả máy chủ nhắn tin gốc đều bị chặn, trừ khi các máy chủ này được liệt kê rõ ràng trong danh sách cho phép. Nếu bạn không đặt chính sách này, thì <ph name="PRODUCT_NAME" /> sẽ tải tất cả máy chủ nhắn tin gốc đã cài đặt.</translation> -<translation id="4771144269610910963">Chính sách này kiểm soát quá trình tính năng Duyệt web an toàn quét sâu các tệp người dùng đã tải xuống. Nếu bạn không đặt hoặc đặt chính sách này thành mặc định là "Không quét tệp", thì tính năng Duyệt web an toàn sẽ không quét các tệp người dùng đã tải xuống. - - Nếu bạn đặt chính sách này thành "Gửi tệp người dùng đã tải xuống để quét", thì các tệp người dùng đã tải xuống sẽ được gửi qua mạng đến tính năng Duyệt web an toàn để quét tìm phần mềm độc hại. - - Nếu bạn đặt chính sách này thành "Gửi tệp người dùng đã tải lên để quét", thì các tệp người dùng đã tải lên sẽ được gửi qua mạng đến tính năng Duyệt web an toàn để quét tìm phần mềm độc hại. - - Nếu bạn đặt chính sách này thành "Gửi tệp người dùng đã tải lên và tải xuống để quét", thì hệ thống sẽ hoạt động theo các quy tắc nêu trong phần "Gửi tệp người dùng đã tải lên để quét" và "Gửi tệp người dùng đã tải xuống để quét". - - Vui lòng xem chính sách <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> và <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" /> để biết thông tin chi tiết về cách kết quả quét xuất hiện đối với người dùng và quản trị viên.</translation> <translation id="4787763197941188108">Ghi đè kích thước trang in mặc định. <ph name="PAGE_SIZE_NAME" /> nên chứa một trong các định dạng được liệt kê hoặc giá trị "tùy chỉnh" nếu kích thước giấy bắt buộc không có trong danh sách đó. Nếu cung cấp giá trị "tùy chỉnh", thì bạn nên chỉ định thuộc tính <ph name="PAGE_SIZE_CUSTOM_SIZE" />. Thuộc tính này mô tả chiều dài và chiều rộng mong muốn tính bằng micromet. Nếu không, bạn không nên chỉ định thuộc tính <ph name="PAGE_SIZE_CUSTOM_SIZE" />. Chính sách vi phạm những quy tắc này sẽ bị bỏ qua. @@ -2827,7 +2803,6 @@ <translation id="5148753489738115745">Cho phép bạn chỉ định tham số bổ sung được sử dụng khi <ph name="PRODUCT_FRAME_NAME" /> chạy <ph name="PRODUCT_NAME" />. Nếu chính sách này không được đặt, dòng lệnh mặc định sẽ được sử dụng.</translation> -<translation id="5150323673529584553">Không quét tệp</translation> <translation id="5152787786897382519">Cả Chromium và Google Chrome đều có một số nhóm chính sách dựa vào nhau để cho phép kiểm soát một tính năng. Các nhóm này được biểu thị qua các nhóm chính sách sau đây. Nếu các chính sách có thể chứa nhiều nguồn, thì chỉ áp dụng những giá trị thuộc nguồn có mức ưu tiên cao nhất. Các giá trị thuộc một nguồn có mức ưu tiên thấp hơn trong cùng một nhóm sẽ bị bỏ qua. Thứ tự ưu tiên được xác định trong <ph name="POLICY_PRIORITY_DOC_URL" />.</translation> <translation id="515816885693899426">Chính sách này không còn dùng nữa, vui lòng sử dụng chính sách "<ph name="URL_BLOCKLIST_POLICY_NAME" />". @@ -3775,7 +3750,6 @@ <translation id="637934607141010488">Danh sách báo cáo người dùng thiết bị đã đăng nhập gần đây. Nếu chính sách này được đặt thành sai, người dùng sẽ không được báo cáo.</translation> -<translation id="638668187106406971">Kiểm tra tệp đã tải lên để xem có vi phạm quy tắc bảo vệ dữ liệu nhạy cảm hay không</translation> <translation id="6394350458541421998">Chính sách này đã chấm dứt kể từ phiên bản <ph name="PRODUCT_OS_NAME" /> 29. Vui lòng sử dụng chính sách PresentationScreenDimDelayScale thay vào đó.</translation> <translation id="6401669939808766804">Đăng xuất người dùng</translation> <translation id="640244877779556713">Bật tùy chọn đề xuất biểu tượng cảm xúc</translation> @@ -4957,7 +4931,6 @@ Bạn phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn hoặc bằng thời gian chờ khi ở chế độ tạm vắng.</translation> <translation id="8001701200415781021">Hạn chế Tài khoản Google nào được phép đặt làm tài khoản chính của trình duyệt trong <ph name="PRODUCT_NAME" /></translation> -<translation id="8003853057959146975">Gửi tệp để kiểm tra xem có vi phạm quy tắc bảo vệ dữ liệu nhạy cảm hay không</translation> <translation id="8006219716745491366">Nếu bạn bật <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" />, thì thao tác đặt <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> sẽ chỉ định danh sách các URL thay thế để trích xuất cụm từ tìm kiếm từ công cụ tìm kiếm. Các URL này phải chứa chuỗi <ph name="SEARCH_TERM_MARKER" />. Nếu bạn không đặt <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" />, thì hệ thống sẽ không sử dụng URL thay thế để trích xuất cụm từ tìm kiếm.</translation> @@ -5372,7 +5345,6 @@ Nếu bạn đặt chính sách này thành false hoặc chưa định cấu hình, thì người dùng có thể sử dụng trình duyệt mà không cần đăng nhập vào <ph name="PRODUCT_NAME" />.</translation> <translation id="858309738002328421">Chặn tải tệp có kích thước lớn lên</translation> <translation id="8584279193368801689">Hạn chế chế độ in mã PIN. Khi bạn không đặt chính sách này, thì tức là không có hạn chế. Nếu không có chế độ này thì chính sách này sẽ bị bỏ qua. Xin lưu ý rằng tính năng in mã PIN chỉ được bật cho những máy in sử dụng một trong các giao thức IPPS, HTTPS, USB hoặc IPP qua USB.</translation> -<translation id="8585558195682146109">Gửi các tệp người dùng đã tải xuống để quét</translation> <translation id="8587229956764455752">Cho phép tạo tài khoản người dùng mới</translation> <translation id="8591713876665299827">Lưu ý rằng chúng tôi không dùng chính sách này nữa và sẽ xóa khỏi <ph name="PRODUCT_OS_NAME" /> phiên bản 85. Thay vào đó, vui lòng sử dụng <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />. @@ -5632,7 +5604,6 @@ <translation id="8942616385591203339">Chính sách này sẽ kiểm soát liệu màn hình Đồng ý đồng bộ hóa có hiển thị với người dùng trong lần đăng nhập đầu tiên hay không. Bạn nên đặt chính sách này thành false nếu không cần hiển thị màn hình Đồng ý đồng bộ hóa cho người dùng. Nếu đặt chính sách thành false, thì màn hình Đồng ý đồng bộ hóa sẽ không hiển thị. Nếu đặt thành true hoặc không đặt chính sách này, thì màn hình Đồng ý đồng bộ hóa có thể được hiển thị.</translation> -<translation id="8943934315109955032">Không kiểm tra xem có vi phạm quy tắc bảo vệ dữ liệu nhạy cảm hay không</translation> <translation id="8947415621777543415">Báo cáo vị trí thiết bị</translation> <translation id="8948062138228904066">Danh sách cho phép máy chủ xác thực</translation> <translation id="8951350807133946005">Thiết lập thư mục bộ nhớ đệm trên đĩa</translation> @@ -5646,9 +5617,6 @@ Không nên bật chính sách này khi chính sách <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> được đặt thành bật vì tính năng đó chia sẻ chức năng tương tự của phía máy khách. Đồng bộ hóa được lưu trữ trên Google bị tắt hoàn toàn trong trường hợp này.</translation> <translation id="8955719471735800169">Quay lại đầu trang</translation> -<translation id="8956310900055843601">Nếu bạn không đặt hoặc đặt chính sách này thành True, thì màn hình đăng nhập của thiết bị sẽ dùng định dạng đồng hồ 24 giờ. Phiên của người dùng cũng sẽ mặc định sử dụng định dạng này, nhưng người dùng có thể thay đổi định dạng đồng hồ của một tài khoản. - - Nếu bạn đặt chính sách này thành False, thì thiết bị sẽ dùng định dạng đồng hồ 12 giờ.</translation> <translation id="8959992920425111821">Cấu hình mặc định</translation> <translation id="8970205333161758602">Loại bỏ lời nhắc từ chối <ph name="PRODUCT_FRAME_NAME" /></translation> <translation id="8976248126101463034">Cho phép xác thực gnubby cho máy chủ truy cập từ xa</translation>
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb index 4cbc8b3..f7008fe9 100644 --- a/components/policy/resources/policy_templates_zh-CN.xtb +++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -95,7 +95,6 @@ 如果此政策未设置,已缓存的 GPO 最多可被重复使用 25 小时。 如果此政策设为 0,系统就会关闭 GPO 缓存。请注意,这样设置会增加服务器负载,因为系统在每次提取政策时都要重新下载 GPO(即使版本未变也是如此)。</translation> -<translation id="1111470455889178048">发送用户上传内容和下载内容进行扫描</translation> <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> 会绕过在此处指定的主机列表中的任何代理。 只有当您在“选择如何指定代理服务器设置”中选择了手动代理设置且未指定 <ph name="PROXY_SETTINGS_POLICY_NAME" /> 政策时,该政策才会生效。 @@ -919,16 +918,6 @@ 如果您设置了此政策,用户将无法覆盖相应值。 如果您未设置此政策,那么隐私保护屏最初会处于停用状态,但用户可以控制该功能。</translation> -<translation id="2423038190900972331">控制 <ph name="PRODUCT_NAME" /> 如何检查上传、下载、拖放或从剪贴板粘贴的数据是否违反敏感数据保护规则。 - - 如果此政策未设置或设为“无”,<ph name="PRODUCT_NAME" /> 将不会检查任何数据是否违反敏感数据保护规则。 - - 如果此政策设为“检查下载内容”,并且用户尝试通过 <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" /> 政策中的网址下载文件,则 <ph name="PRODUCT_NAME" /> 将会检查下载的数据是否符合企业规则。 - - 如果此政策设为“检查上传内容”,并且用户尝试将文件上传至 <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" /> 中未包含的网域,则 <ph name="PRODUCT_NAME" /> 将会检查上传的文件、从剪贴板粘贴的数据或者拖放的数据是否符合企业规则。 - - 如果此政策设为“检查上传内容和下载内容”,<ph name="PRODUCT_NAME" /> 将根据“检查下载内容”和“检查上传内容”所述的规则操作。 - </translation> <translation id="2423255396068675416">如果此政策已启用或未设置,系统会允许用户运行 <ph name="PRODUCT_CROSTINI_NAME" />(前提是 <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> 和 <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> 均已启用)。如果此政策已停用,系统会关闭 <ph name="PRODUCT_CROSTINI_NAME" />,不允许用户使用。如果将此政策的状态改为已停用,此政策将开始应用于新启动的 <ph name="PRODUCT_CROSTINI_NAME" /> 容器,而非应用于已在运行的容器。</translation> <translation id="2424098959650060417">控制用户可以使用 <ph name="BULK_PRINTERS_POLICY_NAME" /> 中的哪些打印机。 @@ -1043,7 +1032,6 @@ 指定的政策值应以毫秒为单位,且不得大于闲置延迟时间。</translation> <translation id="2548572254685798999">报告安全浏览信息</translation> <translation id="2550593661567988768">仅限单面打印</translation> -<translation id="2551520365302988324">发送用户上传内容进行扫描</translation> <translation id="2552318891854145040">设置此政策可创建一个书签列表,其中的每个书签都是一个包含“<ph name="NAME" />”和“<ph name="URL_LABEL" />”键的字典条目。这些键分别指定书签的名称和目标网址。管理员可以创建一个子文件夹,方法是:定义一个不含“<ph name="URL_LABEL" />”键但含一个额外“<ph name="CHILDREN" />”键的书签。这个额外键也会包含一个书签列表,其中的部分书签也可以是文件夹。Chrome 会修正不完整的网址,就像是修正通过地址栏提交的不完整网址一样。例如,将“<ph name="GOOGLE_COM" />”改为“<ph name="HTTPS_GOOGLE_COM" />”。 用户无法更改用于放置书签的文件夹,但可从书签栏中将其隐藏。受管理书签的默认文件夹名称为“受管理的书签”,但用户可以更改该名称,方法是:向此政策中添加一个新的仅包含“<ph name="TOPLEVEL_NAME" />”键的子字典条目,并将键值设为所需的文件夹名称。受管理的书签不会同步到用户帐号中,且无法由扩展程序修改。</translation> @@ -1801,7 +1789,6 @@ 如需详细了解 <ph name="CORS" />,请访问:<ph name="CORS_HELP_URL" />。 请注意,我们曾宣布将在 <ph name="PRODUCT_NAME" /> 82 版中移除此政策,但已改为在 84 版中移除。</translation> -<translation id="3624515566460517364">检查上传内容和下载内容是否违反敏感数据保护规则</translation> <translation id="3627678165642179114">启用或停用拼写检查网络服务</translation> <translation id="3628480121685794414">启用单面打印</translation> <translation id="3631099945620529777">如果设为 false,则任务管理器中的“结束进程”按钮会处于停用状态。 @@ -1955,7 +1942,6 @@ 如果此政策未设置或设为一个空列表,用户将无法在受管理的设备上使用任何快速解锁模式</translation> <translation id="3877517141460819966">集成的双重身份验证模式</translation> -<translation id="3879196885908353077">检查下载内容是否违反敏感数据保护规则</translation> <translation id="3879208481373875102">配置强制安装的 Web 应用的列表</translation> <translation id="388237772682176890">我们在 M53 中弃用了此政策,并在 M54 中移除了此政策(因为 SPDY/3.1 已不再受支持)。 @@ -2377,7 +2363,6 @@ 在不受管理的设备上,系统始终都会显示通知。</translation> <translation id="4510923771103268849">允许用户拥有 Crostini 容器的 root 权限</translation> <translation id="4515404363392014383">针对可信来源启用安全浏览功能</translation> -<translation id="4517928394515633751">使用安全浏览功能扫描用户下载内容</translation> <translation id="4518251772179446575">每次网站尝试跟踪用户的地理位置时都询问我</translation> <translation id="4529868888205510667">除非已通过其他方式关闭 ARC,否则将此政策设为 True 或不设置时,用户可使用 ARC。将此政策设为 False 意味着禁止独立用户使用 ARC。 @@ -2552,15 +2537,6 @@ 屏蔽名单值“*”表示所有本地消息传递主机都已被屏蔽,除非是许可名单中明确列出的本地消息传递主机。 如果此政策未设置,<ph name="PRODUCT_NAME" /> 将会加载所有已安装的本地消息传递主机。</translation> -<translation id="4771144269610910963">此政策用于控制安全浏览功能对用户下载内容的深度扫描。如果此政策未设置,或设为默认的“不扫描文件”,安全浏览功能将不会扫描用户下载内容。 - - 如果此政策设为“发送用户下载内容进行扫描”,系统就会将用户下载内容通过网络发送给安全浏览功能,以进行恶意软件扫描。 - - 如果此政策设为“发送用户上传内容进行扫描”,系统就会将用户上传内容通过网络发送给安全浏览功能,以进行恶意软件扫描。 - - 如果此政策设为“发送用户上传内容和下载内容进行扫描”,则系统将根据“发送用户上传内容进行扫描”和“发送用户下载内容进行扫描”所述的规则操作。 - - 若想详细了解系统会如何向用户和管理员显示扫描结果,请参阅 <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> 和 <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" /> 政策。</translation> <translation id="4787763197941188108">替换默认打印页面大小。 <ph name="PAGE_SIZE_NAME" /> 应包含所列格式之一,如果所需页面大小不在列表中,则应包含“custom”值。如果提供了“custom”值,则应指定 <ph name="PAGE_SIZE_CUSTOM_SIZE" /> 属性,用于指定所需的高度和宽度(以微米为单位)。如果未提供“custom”值,便不应指定 <ph name="PAGE_SIZE_CUSTOM_SIZE" /> 属性。系统会忽略违反这些规则的政策。 @@ -2766,7 +2742,6 @@ <translation id="5148753489738115745">可让您指定在 <ph name="PRODUCT_FRAME_NAME" />启动 <ph name="PRODUCT_NAME" />时所使用的其他参数。 如果未设置此政策,系统将会使用默认命令行。</translation> -<translation id="5150323673529584553">不扫描文件</translation> <translation id="5152787786897382519">Chromium 和 Google Chrome 均有一些政策组,其中的政策以相互依赖的方式来控制某项功能。这些集合由以下政策组表示。如果相关政策有多个来源,系统仅会应用来源优先级最高的值。同一组中来源优先级较低的值会被忽略。<ph name="POLICY_PRIORITY_DOC_URL" /> 中定义了优先级顺序。</translation> <translation id="515816885693899426">此政策已被弃用,请改用“<ph name="URL_BLOCKLIST_POLICY_NAME" />”政策。 @@ -3703,7 +3678,6 @@ <translation id="637934607141010488">报告最近登录过的设备用户列表。 如果此政策设为False,则不报告这些用户。</translation> -<translation id="638668187106406971">检查上传内容是否违反敏感数据保护规则</translation> <translation id="6394350458541421998">此政策从 <ph name="PRODUCT_OS_NAME" />版本 29 起开始弃用。请改用 PresentationScreenDimDelayScale 政策。</translation> <translation id="6401669939808766804">使用户退出</translation> <translation id="640244877779556713">启用表情符号建议</translation> @@ -4512,9 +4486,9 @@ 如果此政策未设置,则意味着 <ph name="ASK_NOTIFICATIONS_POLICY_NAME" /> 政策适用,但用户可以更改此设置。</translation> <translation id="7471828226549672843">默认情况下,当 CCT 首次运行时,系统会显示《服务条款》。如果此政策已停用,《服务条款》对话框在首次运行体验或后续运行期间就不会出现。如果此政策已启用或未设置,《服务条款》对话框会在首次运行体验期间出现。其他注意事项: - - 此政策仅适用于可由统一端点管理供应商配置的全代管式 Android 设备。 + - 此政策仅适用于可由统一端点管理 (Unified Endpoint Management) 供应商配置的全代管式 Android 设备。 - - 如果此政策已停用,BrowserSignin 政策将不会产生任何效力。 + - 如果此政策已停用,BrowserSignin 政策将没有任何效力。 - 如果此政策已停用,系统不会将指标发送给服务器。 @@ -4877,7 +4851,6 @@ 指定的政策值应以毫秒为单位,且不得大于闲置延迟时间。</translation> <translation id="8001701200415781021">限制哪些 Google 帐号可以设置为 <ph name="PRODUCT_NAME" /> 中的浏览器主帐号</translation> -<translation id="8003853057959146975">发送文件以检查是否违反敏感数据保护规则</translation> <translation id="8006219716745491366">如果 <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> 已开启,您便可通过设置 <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> 来指定用于从搜索引擎提取搜索字词的备用网址列表。网址应包含字符串<ph name="SEARCH_TERM_MARKER" />。 如果您不设置 <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" />,系统将不会使用任何备用网址提取搜索字词。</translation> @@ -5281,7 +5254,6 @@ 如果此政策设为 false 或未配置,用户无需登录 <ph name="PRODUCT_NAME" /> 即可使用该浏览器。</translation> <translation id="858309738002328421">禁止上传大型文件</translation> <translation id="8584279193368801689">限制 PIN 码打印模式。如果此政策未设置,则会被视为无限制。如果所设的模式不适用,系统会忽略此政策。请注意,PIN 码打印功能仅针对使用 IPPS、HTTPS、USB 或 IPP-over-USB 协议之一的打印机启用。</translation> -<translation id="8585558195682146109">发送用户下载内容进行扫描</translation> <translation id="8587229956764455752">允许创建新的用户帐号</translation> <translation id="8591713876665299827">请注意,此政策已被弃用,并将在 <ph name="PRODUCT_OS_NAME" />版本 85 中移除。请改用 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />。 @@ -5521,7 +5493,6 @@ <translation id="8942616385591203339">此政策控制是否可在用户首次登录时向其显示同步同意声明。如果用户从不需要查看同步同意声明,则应将此政策设为 false。 如果此政策设为 false,系统将不会显示同步同意声明。 如果此政策设为 true 或未设置,则可以显示同步同意声明。</translation> -<translation id="8943934315109955032">不检查是否违反敏感数据保护规则</translation> <translation id="8947415621777543415">报告设备位置</translation> <translation id="8948062138228904066">身份验证服务器许可名单</translation> <translation id="8951350807133946005">设置磁盘缓存目录</translation> @@ -5535,9 +5506,6 @@ 当 <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> 政策已被启用时,请勿启用此政策,因为这两种政策具有相同的客户端功能。在此种情况下,由 Google 托管的同步服务亦会被完全停用。</translation> <translation id="8955719471735800169">返回页首</translation> -<translation id="8956310900055843601">如果此政策设为 True 或未设置,设备的登录屏幕将使用 24 小时制的时钟格式。用户会话也会默认使用此格式,但用户可以更改相应帐号的时钟格式。 - - 如果此政策设为 False,设备将使用 12 小时制的时钟格式。</translation> <translation id="8959992920425111821">默认配置</translation> <translation id="8970205333161758602">阻止显示 <ph name="PRODUCT_FRAME_NAME" />停止支持的提示</translation> <translation id="8976248126101463034">允许针对远程访问主机进行 gnubby 身份验证</translation>
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb index e6269c6..2e64e57 100644 --- a/components/policy/resources/policy_templates_zh-TW.xtb +++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -95,7 +95,6 @@ 如果你沒有設定這項政策,系統最多會將快取 GPO 重複使用 25 小時。 如將這項政策設為 0,就代表關閉 GPO 快取功能;請注意,這項設定會增加伺服器負載,因為即使 GPO 沒有更動,系統還是必須在每次擷取政策時重新下載 GPO。</translation> -<translation id="1111470455889178048">傳送使用者上傳及下載的內容以供掃描</translation> <translation id="1117462881884985156"><ph name="PRODUCT_NAME" /> 會略過這項政策所指定的一系列主機的 Proxy。 你必須在「選擇如何指定 Proxy 伺服器設定」中選取手動 Proxy 設定,並且未指定 <ph name="PROXY_SETTINGS_POLICY_NAME" /> 政策,這項政策才會生效。 @@ -917,16 +916,6 @@ 設好這項政策後,使用者即無法覆寫設定值。 如果未設定這項政策,系統預設會停用隱私保護畫面,但使用者可以自行變更。</translation> -<translation id="2423038190900972331">控管 <ph name="PRODUCT_NAME" /> 如何檢查使用者上傳、下載、從剪貼簿貼上或拖曳的資料,以檢查內容是否違反機密資料保護規則。 - - 如果不設定這項政策或設為「None」,<ph name="PRODUCT_NAME" /> 不會檢查資料是否違反機密資料保護規則。 - - 如果將這項政策設為「檢查下載檔案」,且使用者嘗試從 <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" /> 政策中列出的網址下載檔案,<ph name="PRODUCT_NAME" /> 會檢查下載的資料是否遵守企業規則。 - - 如果將這項政策設為「檢查上傳檔案」,且使用者嘗試將檔案上傳至未列在 <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" /> 政策中的網域,<ph name="PRODUCT_NAME" /> 會檢查使用者上傳的檔案、從剪貼簿貼上或拖曳的資料是否遵守企業規則。 - - 如果將這項政策設為「檢查上傳及下載檔案」,<ph name="PRODUCT_NAME" /> 將依照「檢查下載檔案」和「檢查上傳檔案」設定的規則執行作業。 - </translation> <translation id="2423255396068675416">如果將這項政策設為啟用或不設定,只要 <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> 和 <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> 設為啟用,使用者即可執行 <ph name="PRODUCT_CROSTINI_NAME" />。如果將這項政策設為停用,系統會將使用者的 <ph name="PRODUCT_CROSTINI_NAME" /> 停用。變更為停用後,系統會開始將這項政策套用到新的 <ph name="PRODUCT_CROSTINI_NAME" /> 容器,不會套用到已經在執行的這類容器。</translation> <translation id="2424098959650060417">根據 <ph name="BULK_PRINTERS_POLICY_NAME" /> 政策控管可供使用的印表機。 @@ -1042,7 +1031,6 @@ 指定政策值時需以毫秒為單位。設定值必須小於或等於閒置延遲時間。</translation> <translation id="2548572254685798999">回報安全瀏覽資訊</translation> <translation id="2550593661567988768">僅限單面列印</translation> -<translation id="2551520365302988324">傳送使用者上傳內容以供掃描</translation> <translation id="2552318891854145040">你可以透過這項政策來設定書籤清單,其中的每個書籤都是一個包含「<ph name="NAME" />」和「<ph name="URL_LABEL" />」索引鍵的條目。這些索引鍵會指定書籤的名稱和目標網址。管理員如果要設定子資料夾,可以定義一個書籤,但不要指定「<ph name="URL_LABEL" />」索引鍵,並額外指定「<ph name="CHILDREN" />」索引鍵。這個索引鍵也會包含書籤清單,其中某些書籤也可以是資料夾。Chrome 會將有缺漏的網址修補完整,就像你在網址列中輸入網址時一樣。舉例來說,系統會自動將「<ph name="GOOGLE_COM" />」改成「<ph name="HTTPS_GOOGLE_COM" />」。 使用者無法變更書籤所在的資料夾,不過可以從書籤列將其隱藏。 @@ -1796,7 +1784,6 @@ 如要進一步瞭解 <ph name="CORS" />,請前往:<ph name="CORS_HELP_URL" />。 請注意,我們之前宣布將在 <ph name="PRODUCT_NAME" /> 第 82 版中移除這項政策,但改為在第 84 版中移除。</translation> -<translation id="3624515566460517364">檢查上傳及下載內容是否違反機密資料保護規則</translation> <translation id="3627678165642179114">啟用或停用拼字檢查網路服務</translation> <translation id="3628480121685794414">啟用單面列印</translation> <translation id="3631099945620529777">如果設為 False,工作管理員中的「結束處理程序」按鈕隨即會停用。 @@ -1948,7 +1935,6 @@ 如果不設定這項政策或將清單設為空白,受管理的裝置將無法使用任何快速解鎖模式。</translation> <translation id="3877517141460819966">整合式雙重驗證模式</translation> -<translation id="3879196885908353077">檢查下載內容是否違反機密資料保護規則</translation> <translation id="3879208481373875102">設定強制安裝的網頁應用程式清單</translation> <translation id="388237772682176890">自 M53 起我們已淘汰這項政策,至 M54 則移除了這項政策 (因為我們已不再支援 SPDY/3.1)。 @@ -2374,7 +2360,6 @@ 未受管理的裝置一律會顯示通知。</translation> <translation id="4510923771103268849">允許使用者擁有 Crostini 容器的 Root 權限</translation> <translation id="4515404363392014383">針對信任的來源啟用「安全瀏覽」</translation> -<translation id="4517928394515633751">透過安全瀏覽功能掃描使用者下載的內容</translation> <translation id="4518251772179446575">詢問網站何時要追蹤使用者的實際位置</translation> <translation id="4529868888205510667">除非已透過其他方式停用 ARC,否則將這項政策設為 True 或不設定時,使用者可以使用 ARC。如果將這項政策設為 False,無關聯的使用者將無法使用 ARC。 @@ -2549,15 +2534,6 @@ 如果將封鎖清單的值設為「*」,系統會封鎖所有內建訊息傳遞主機 (允許清單中明確列出的內建訊息傳遞主機除外)。 如果不設定這項政策,<ph name="PRODUCT_NAME" /> 會載入所有已安裝的內建訊息傳遞主機。</translation> -<translation id="4771144269610910963">這項政策可控管安全瀏覽功能是否要對使用者下載的內容進行深度掃描。如果不設定這項政策,或設為預設的「不要掃描檔案」,安全瀏覽功能將不會掃描使用者下載的內容。 - - 如果將這項政策設為「傳送使用者下載內容以供掃描」,系統會將使用者下載的內容透過網路傳送給安全瀏覽功能,進行惡意軟體掃描。 - - 如果將這項政策設為「傳送使用者上傳內容以供掃描」,系統會將使用者上傳的內容透過網路傳送給安全瀏覽功能,進行惡意軟體掃描。 - - 如果將這項政策設為「傳送使用者上傳及下載的內容以供掃描」,系統會依照「傳送使用者上傳內容以供掃描」以及「傳送使用者下載內容以供掃描」設定的規則執行作業。 - - 如要進一步瞭解使用者和管理員如何查看掃描結果,請參閱 <ph name="DELAY_DELIVER_UNTIL_VERDICT_POLICY_NAME" /> 和 <ph name="UNSAFE_EVENTS_REPORTING_ENABLED" /> 政策。</translation> <translation id="4787763197941188108">覆寫預設的列印頁面大小。 <ph name="PAGE_SIZE_NAME" /> 應包含其中一個列出的格式或是「自訂」(如果清單未列出所需的紙張大小)。如果將值設為「自訂」,則需一併指定 <ph name="PAGE_SIZE_CUSTOM_SIZE" /> 屬性,描述所需的高度和寬度 (以微米為單位)。否則,請勿指定 <ph name="PAGE_SIZE_CUSTOM_SIZE" /> 屬性。系統會忽略違反這些規則的政策。 @@ -2768,7 +2744,6 @@ <translation id="5148753489738115745">允許你指定 <ph name="PRODUCT_FRAME_NAME" /> 啟動 <ph name="PRODUCT_NAME" /> 時使用的其他參數。 如果未設定這項政策,系統會使用預設命令列。</translation> -<translation id="5150323673529584553">不要掃描檔案</translation> <translation id="5152787786897382519">Chromium 和 Google Chrome 有部分政策群組具有相依關係,依此共同管控特定功能。這些組合如下列政策群組所示。由於政策可能具有多個來源,系統只會套用群組中最高優先來源所提供的值,忽略同個群組中優先順序較低的來源所提供的值。請參閱 <ph name="POLICY_PRIORITY_DOC_URL" /> 瞭解來源的優先順序。</translation> <translation id="515816885693899426">這項政策已遭淘汰,請改用「<ph name="URL_BLOCKLIST_POLICY_NAME" />」政策。 @@ -3707,7 +3682,6 @@ <translation id="637934607141010488">回報最近登入的裝置使用者清單。 如果這項政策設為 False,則不會回報這些使用者。</translation> -<translation id="638668187106406971">檢查上傳內容是否違反機密資料保護規則</translation> <translation id="6394350458541421998">我們已於 <ph name="PRODUCT_OS_NAME" />版本 29 中移除這項政策。請改用 PresentationScreenDimDelayScale 政策。</translation> <translation id="6401669939808766804">登出使用者</translation> <translation id="640244877779556713">啟用表情符號建議功能</translation> @@ -4876,7 +4850,6 @@ 指定政策值時需以毫秒為單位。設定值必須小於或等於閒置延遲時間。</translation> <translation id="8001701200415781021">限制哪些 Google 帳戶可以設定為 <ph name="PRODUCT_NAME" /> 中的瀏覽器主要帳戶</translation> -<translation id="8003853057959146975">傳送檔案來檢查檔案是否違反機密資料保護規則</translation> <translation id="8006219716745491366">如果已啟用 <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> 政策,你可以設定 <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> 政策來指定替代網址清單,這份清單中的替代網址會從搜尋引擎中擷取搜尋字詞。網址應包含字串 <ph name="SEARCH_TERM_MARKER" />。 如果未設定 <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> 政策,系統不會使用任何替代網址擷取搜尋字詞。</translation> @@ -5279,7 +5252,6 @@ 如果將這項政策設為 False 或不予設定,使用者不必登入 <ph name="PRODUCT_NAME" /> 即可使用瀏覽器。</translation> <translation id="858309738002328421">禁止上傳大型檔案</translation> <translation id="8584279193368801689">限制 PIN 碼列印模式。如果不設定這項政策,系統會視為未設限制。如果設定的模式不適用,系統會忽略這項政策。請注意,印表機使用的通訊協定必須是 IPPS、HTTPS、USB 或 IPP 型 USB 的其中一種,才能啟用 PIN 碼列印功能。</translation> -<translation id="8585558195682146109">傳送使用者下載內容以供掃描</translation> <translation id="8587229956764455752">允許建立新的使用者帳戶</translation> <translation id="8591713876665299827">請注意,這項政策已遭淘汰,並將在 <ph name="PRODUCT_OS_NAME" />第 85 版中移除。請改用 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />。 @@ -5524,7 +5496,6 @@ <translation id="8942616385591203339">這項政策可控制是否可在使用者初次登入時,向使用者顯示同步處理同意聲明。如果使用者不需要查看同步處理同意聲明,則應設為 false。 如果設為 false,就不會顯示同步處理同意聲明。 如果設為 true 或不予設定,則可顯示同步處理同意聲明。</translation> -<translation id="8943934315109955032">不檢查是否違反機密資料保護規則</translation> <translation id="8947415621777543415">回報裝置位置</translation> <translation id="8948062138228904066">驗證伺服器允許清單</translation> <translation id="8951350807133946005">設定磁碟快取目錄</translation> @@ -5538,9 +5509,6 @@ 啟用 <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> 政策時,請勿啟用這項政策。原因是該功能具有同樣的用戶端功能,會導致 Google 代管的同步處理服務完全停用。</translation> <translation id="8955719471735800169">返回頁首</translation> -<translation id="8956310900055843601">如果將這項政策設為 True 或不設定,裝置登入畫面將使用 24 小時制的時鐘格式。使用者工作階段也會預設使用這個格式,但使用者可變更帳戶的時鐘格式。 - - 如果將這項政策設為 False,裝置將使用 12 小時制的時鐘格式。</translation> <translation id="8959992920425111821">預設設定</translation> <translation id="8970205333161758602">隱藏停止支援 <ph name="PRODUCT_FRAME_NAME" />的提示</translation> <translation id="8976248126101463034">允許針對遠端存取主機進行 gnubby 驗證機制</translation>
diff --git a/components/query_tiles/internal/BUILD.gn b/components/query_tiles/internal/BUILD.gn index 5c8135aa..c990a16 100644 --- a/components/query_tiles/internal/BUILD.gn +++ b/components/query_tiles/internal/BUILD.gn
@@ -45,6 +45,8 @@ "tile_store.cc", "tile_store.h", "tile_types.h", + "tile_utils.cc", + "tile_utils.h", ] public_deps = [ "//components/image_fetcher/core" ] @@ -80,6 +82,7 @@ "tile_service_impl_unittest.cc", "tile_service_scheduler_unittest.cc", "tile_store_unittest.cc", + "tile_utils_unittest.cc", ] deps = [
diff --git a/components/query_tiles/internal/proto_conversion.cc b/components/query_tiles/internal/proto_conversion.cc index dcb26a3..0840af5 100644 --- a/components/query_tiles/internal/proto_conversion.cc +++ b/components/query_tiles/internal/proto_conversion.cc
@@ -9,6 +9,8 @@ #include "base/strings/utf_string_conversions.h" +using TileStatsProto = query_tiles::proto::TileStats; + namespace query_tiles { namespace { @@ -108,6 +110,14 @@ for (auto& tile : group->tiles) { TileToProto(tile.get(), proto->add_tiles()); } + auto& map = *(proto->mutable_tile_stats()); + for (auto& entry : group->tile_stats) { + TileStatsProto stats; + stats.set_score(entry.second.score); + stats.set_last_clicked_time_ms( + TimeToMilliseconds(entry.second.last_clicked_time)); + map[entry.first] = stats; + } } void TileGroupFromProto(TileGroupProto* proto, TileGroup* group) { @@ -120,6 +130,11 @@ TileFromProto(&entry_proto, child.get()); group->tiles.emplace_back(std::move(child)); } + for (auto& entry : proto->tile_stats()) { + group->tile_stats[entry.first] = + TileStats(MillisecondsToTime(entry.second.last_clicked_time_ms()), + entry.second.score()); + } } void TileGroupFromResponse(const ResponseGroupProto& response,
diff --git a/components/query_tiles/internal/tile_group.cc b/components/query_tiles/internal/tile_group.cc index be3df0fe..da1e95a 100644 --- a/components/query_tiles/internal/tile_group.cc +++ b/components/query_tiles/internal/tile_group.cc
@@ -20,6 +20,7 @@ output->tiles.clear(); for (const auto& tile : input.tiles) output->tiles.emplace_back(std::make_unique<Tile>(*tile.get())); + output->tile_stats = input.tile_stats; } } // namespace
diff --git a/components/query_tiles/internal/tile_group.h b/components/query_tiles/internal/tile_group.h index 76eaa771..ce02d38 100644 --- a/components/query_tiles/internal/tile_group.h +++ b/components/query_tiles/internal/tile_group.h
@@ -5,6 +5,7 @@ #ifndef COMPONENTS_QUERY_TILES_INTERNAL_TILE_GROUP_H_ #define COMPONENTS_QUERY_TILES_INTERNAL_TILE_GROUP_H_ +#include <map> #include <memory> #include <string> #include <vector> @@ -40,6 +41,9 @@ // Top level tiles. std::vector<std::unique_ptr<Tile>> tiles; + // Map from tile id to its stats. + std::map<std::string, TileStats> tile_stats; + // Print pretty formatted content in TileGroup struct. std::string DebugString(); };
diff --git a/components/query_tiles/internal/tile_manager.cc b/components/query_tiles/internal/tile_manager.cc index c28c754..d2fd258 100644 --- a/components/query_tiles/internal/tile_manager.cc +++ b/components/query_tiles/internal/tile_manager.cc
@@ -17,10 +17,14 @@ #include "components/query_tiles/internal/tile_config.h" #include "components/query_tiles/internal/tile_iterator.h" #include "components/query_tiles/internal/tile_manager.h" +#include "components/query_tiles/internal/tile_utils.h" namespace query_tiles { namespace { +// A special tile group for tile stats. +constexpr char kTileStatsGroup[] = "tile_stats"; + class TileManagerImpl : public TileManager { public: TileManagerImpl(std::unique_ptr<TileStore> store, @@ -137,6 +141,9 @@ if (!group) continue; + if (pair.first == kTileStatsGroup) + continue; + if (ValidateLocale(group) && !IsGroupExpired(group) && (group->last_updated_ts > last_updated_time)) { last_updated_time = group->last_updated_ts; @@ -152,6 +159,15 @@ status = TileGroupStatus::kNoTiles; } + // Keep the stats group in memory for tile score calculation. + if (loaded_groups.find(kTileStatsGroup) != loaded_groups.end()) { + tile_stats_group_ = std::move(loaded_groups[kTileStatsGroup]); + // prevent the stats group from being deleted. + loaded_groups.erase(kTileStatsGroup); + if (tile_group_) + SortTiles(&tile_group_->tiles, &tile_stats_group_->tile_stats); + } + // Deletes other groups. for (const auto& group_to_delete : loaded_groups) DeleteGroup(group_to_delete.first); @@ -222,6 +238,11 @@ // The tile group in-memory holder. std::unique_ptr<TileGroup> tile_group_; + // The tile group that contains stats for ranking all tiles. + // TODO(qinmin): Having a separate TileGroup just for ranking the tiles + // seems weird, probably do it through a separate store or use PrefService. + std::unique_ptr<TileGroup> tile_stats_group_; + // Clock object. base::Clock* clock_;
diff --git a/components/query_tiles/internal/tile_utils.cc b/components/query_tiles/internal/tile_utils.cc new file mode 100644 index 0000000..8689f160 --- /dev/null +++ b/components/query_tiles/internal/tile_utils.cc
@@ -0,0 +1,84 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <algorithm> +#include <limits> + +#include "components/query_tiles/internal/tile_utils.h" + +namespace query_tiles { +namespace { + +struct TileComparator { + explicit TileComparator(const std::map<std::string, TileStats>& tile_stats) + : tile_stats(tile_stats) {} + + inline bool operator()(const std::unique_ptr<Tile>& a, + const std::unique_ptr<Tile>& b) { + auto iter_a = tile_stats.find(a->id); + auto iter_b = tile_stats.find(b->id); + return (iter_a != tile_stats.end() ? iter_a->second.score : 0) > + (iter_b != tile_stats.end() ? iter_b->second.score : 0); + } + + std::map<std::string, TileStats> tile_stats; +}; + +} // namespace + +void SortTiles(std::vector<std::unique_ptr<Tile>>* tiles, + std::map<std::string, TileStats>* tile_stats) { + if (!tiles || tiles->empty()) + return; + + // Some tiles do not have scores, so the first step is to calculate scores + // for them. + // To calculate scores for new tiles, ordering from the server response will + // be taken into consideration. As the server has already ordered tiles + // according to their importance. + // For example, if the first tile returned by server never appeared before, we + // should set its score to at least the 2nd tile. so that it can show up in + // the first place if no other tiles in the back have a higher score. For + // a new tile at position x, its score should be the minimum of its neighbors + // at position x-1 and x+1. For new tiles showing up at the end, their score + // will be set to 0. + // For example, if the tile scores are (new_tile, 0.5, 0.7), then the adjusted + // score will be (0.5, 0.5, 0.7). Simularly, (0.5, new_tile1, 0.7, new_tile2) + // will result in (0.5, 0.5, 0.7, 0). + double last_score = std::numeric_limits<double>::max(); + size_t new_tile_index = 0; + base::Time now_time = base::Time::Now(); + // Find any tiles that don't have scores, and add new entries for them. + for (size_t i = 0; i < tiles->size(); ++i) { + auto iter = tile_stats->find((*tiles)[i]->id); + // Find a new tile. Skip it for now, will add the entry when we found the + // first + if (iter == tile_stats->end()) + continue; + + // If the previous tiles are new tiles, fill them with a value that is + // minimum of their neighbors. + if (i > new_tile_index) { + double score = std::min(last_score, iter->second.score); + TileStats new_stats(now_time, score); + for (size_t j = new_tile_index; j < i; ++j) + tile_stats->emplace((*tiles)[j]->id, new_stats); + } + // Move |new_tile_index| to the next one that might not have + // a score. + new_tile_index = i + 1; + last_score = iter->second.score; + } + if (new_tile_index < tiles->size()) { + TileStats new_stats(now_time, 0); + for (size_t j = new_tile_index; j < tiles->size(); ++j) + tile_stats->emplace((*tiles)[j]->id, new_stats); + } + // Sort the tiles in descending order. + std::sort(tiles->begin(), tiles->end(), TileComparator(*tile_stats)); + for (auto& tile : *tiles) + SortTiles(&tile->sub_tiles, tile_stats); +} + +} // namespace query_tiles
diff --git a/components/query_tiles/internal/tile_utils.h b/components/query_tiles/internal/tile_utils.h new file mode 100644 index 0000000..b067fd4 --- /dev/null +++ b/components/query_tiles/internal/tile_utils.h
@@ -0,0 +1,24 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_QUERY_TILES_INTERNAL_TILE_UTILS_H_ +#define COMPONENTS_QUERY_TILES_INTERNAL_TILE_UTILS_H_ + +#include <map> +#include <memory> +#include <vector> + +#include "components/query_tiles/tile.h" + +namespace query_tiles { + +// Function to sort a vector of tiles based on their score in |tile_stats|. If +// a tile ID doesn't exists in |tile_stats|, a new entry will be created and +// a score will be calculated. +void SortTiles(std::vector<std::unique_ptr<Tile>>* tiles, + std::map<std::string, TileStats>* tile_stats); + +} // namespace query_tiles + +#endif // COMPONENTS_QUERY_TILES_INTERNAL_TILE_UTILS_H_
diff --git a/components/query_tiles/internal/tile_utils_unittest.cc b/components/query_tiles/internal/tile_utils_unittest.cc new file mode 100644 index 0000000..12b1082 --- /dev/null +++ b/components/query_tiles/internal/tile_utils_unittest.cc
@@ -0,0 +1,103 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/query_tiles/internal/tile_utils.h" + +#include "components/query_tiles/internal/tile_group.h" +#include "components/query_tiles/test/test_utils.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace query_tiles { +namespace { + +TEST(TileUtilsTest, Sort) { + TileGroup group; + test::ResetTestGroup(&group); + + SortTiles(&group.tiles, &group.tile_stats); + EXPECT_EQ(group.tiles[0]->id, "guid-1-3"); + EXPECT_EQ(group.tiles[1]->id, "guid-1-1"); + EXPECT_EQ(group.tiles[2]->id, "guid-1-2"); + EXPECT_EQ(group.tiles[1]->sub_tiles[0]->id, "guid-2-2"); + EXPECT_EQ(group.tiles[1]->sub_tiles[1]->id, "guid-2-1"); + EXPECT_EQ(group.tiles[0]->sub_tiles[0]->id, "guid-1-4"); + EXPECT_EQ(group.tiles[1]->sub_tiles[1]->sub_tiles[0]->id, "guid-3-1"); +} + +TEST(TileUtilsTest, SortWithEmptytile_stats) { + TileGroup group; + test::ResetTestGroup(&group); + + std::map<std::string, TileStats> tile_stats; + + SortTiles(&group.tiles, &tile_stats); + EXPECT_EQ(group.tiles[0]->id, "guid-1-1"); + EXPECT_EQ(group.tiles[1]->id, "guid-1-2"); + EXPECT_EQ(group.tiles[2]->id, "guid-1-3"); + EXPECT_EQ(group.tiles[0]->sub_tiles[0]->id, "guid-2-1"); + EXPECT_EQ(group.tiles[0]->sub_tiles[1]->id, "guid-2-2"); +} + +// If new tiles are at the front, tile ordering should be kept after +// sort. +TEST(TileUtilsTest, SortWithNewTilesAtTheFront) { + TileGroup group; + test::ResetTestGroup(&group); + + std::map<std::string, TileStats> tile_stats; + tile_stats["guid-1-3"] = TileStats(group.last_updated_ts, 0.7); + tile_stats["guid-1-4"] = TileStats(group.last_updated_ts, 0.4); + tile_stats["guid-2-2"] = TileStats(group.last_updated_ts, 0.6); + + SortTiles(&group.tiles, &tile_stats); + EXPECT_EQ(group.tiles[0]->id, "guid-1-1"); + EXPECT_EQ(group.tiles[1]->id, "guid-1-2"); + EXPECT_EQ(group.tiles[2]->id, "guid-1-3"); + EXPECT_EQ(group.tiles[0]->sub_tiles[0]->id, "guid-2-1"); + EXPECT_EQ(group.tiles[0]->sub_tiles[1]->id, "guid-2-2"); + EXPECT_EQ(tile_stats["guid-1-1"].score, 0.7); + EXPECT_EQ(tile_stats["guid-1-2"].score, 0.7); + EXPECT_EQ(tile_stats["guid-2-1"].score, 0.6); +} + +// If new tiles are at the end, tile ordering should be kept after +// sort. +TEST(TileUtilsTest, SortWithNewTilesAtTheEnd) { + TileGroup group; + test::ResetTestGroup(&group); + + std::map<std::string, TileStats> tile_stats; + tile_stats["guid-1-1"] = TileStats(group.last_updated_ts, 0.5); + tile_stats["guid-1-2"] = TileStats(group.last_updated_ts, 0.2); + tile_stats["guid-2-1"] = TileStats(group.last_updated_ts, 0.3); + + SortTiles(&group.tiles, &tile_stats); + EXPECT_EQ(group.tiles[0]->id, "guid-1-1"); + EXPECT_EQ(group.tiles[1]->id, "guid-1-2"); + EXPECT_EQ(group.tiles[2]->id, "guid-1-3"); + EXPECT_EQ(group.tiles[0]->sub_tiles[0]->id, "guid-2-1"); + EXPECT_EQ(group.tiles[0]->sub_tiles[1]->id, "guid-2-2"); + EXPECT_EQ(tile_stats["guid-1-3"].score, 0); + EXPECT_EQ(tile_stats["guid-2-2"].score, 0); +} + +// Test the case that new tiles are in the middle. +TEST(TileUtilsTest, SortWithNewTilesInTheMiddle) { + TileGroup group; + test::ResetTestGroup(&group); + + std::map<std::string, TileStats> tile_stats; + tile_stats["guid-1-1"] = TileStats(group.last_updated_ts, 0.5); + tile_stats["guid-1-3"] = TileStats(group.last_updated_ts, 0.7); + + SortTiles(&group.tiles, &tile_stats); + EXPECT_EQ(group.tiles[0]->id, "guid-1-3"); + EXPECT_EQ(group.tiles[1]->id, "guid-1-1"); + EXPECT_EQ(group.tiles[2]->id, "guid-1-2"); + EXPECT_EQ(tile_stats["guid-1-2"].score, 0.5); +} + +} // namespace + +} // namespace query_tiles
diff --git a/components/query_tiles/proto/tile.proto b/components/query_tiles/proto/tile.proto index 5eba77b..6f891f2 100644 --- a/components/query_tiles/proto/tile.proto +++ b/components/query_tiles/proto/tile.proto
@@ -40,8 +40,18 @@ repeated string search_params = 7; } +// Stats of the tile. Used for ranking tiles. +// Next tag: 3 +message TileStats { + // Timestamp when the tile is last clicked, in ms. + int64 last_clicked_time_ms = 1; + + // Score of the tile, used for ranking. + double score = 2; +} + // Data schema of a group of entries and its metadata. -// Next tag: 5 +// Next tag: 6 message TileGroup { // Unique id of each group. string id = 1; @@ -54,4 +64,7 @@ // Top level tiles; repeated Tile tiles = 4; + + // Map from tile id to its stats. + map<string, TileStats> tile_stats = 5; }
diff --git a/components/query_tiles/test/test_utils.cc b/components/query_tiles/test/test_utils.cc index 12860fc..c871fc3 100644 --- a/components/query_tiles/test/test_utils.cc +++ b/components/query_tiles/test/test_utils.cc
@@ -56,6 +56,13 @@ group->tiles.emplace_back(std::move(test_entry_1)); group->tiles.emplace_back(std::move(test_entry_2)); group->tiles.emplace_back(std::move(test_entry_3)); + group->tile_stats["guid-1-1"] = TileStats(group->last_updated_ts, 0.5); + group->tile_stats["guid-1-2"] = TileStats(group->last_updated_ts, 0.2); + group->tile_stats["guid-1-3"] = TileStats(group->last_updated_ts, 0.7); + group->tile_stats["guid-1-4"] = TileStats(group->last_updated_ts, 0.4); + group->tile_stats["guid-2-1"] = TileStats(group->last_updated_ts, 0.3); + group->tile_stats["guid-2-2"] = TileStats(group->last_updated_ts, 0.6); + group->tile_stats["guid-3-1"] = TileStats(group->last_updated_ts, 0.5); } bool AreTileGroupsIdentical(const TileGroup& lhs, const TileGroup& rhs) { @@ -72,7 +79,7 @@ return false; } - return true; + return lhs.tile_stats == rhs.tile_stats; } bool AreTilesIdentical(const Tile& lhs, const Tile& rhs) {
diff --git a/components/query_tiles/tile.cc b/components/query_tiles/tile.cc index 9ed2b40b..26c93cd 100644 --- a/components/query_tiles/tile.cc +++ b/components/query_tiles/tile.cc
@@ -88,6 +88,19 @@ return url == other.url; } +TileStats::TileStats() = default; + +TileStats::TileStats(base::Time last_clicked_time, double score) + : last_clicked_time(last_clicked_time), score(score) {} + +TileStats::~TileStats() = default; + +TileStats::TileStats(const TileStats& other) = default; + +bool TileStats::operator==(const TileStats& other) const { + return last_clicked_time == other.last_clicked_time && score == other.score; +} + bool Tile::operator==(const Tile& other) const { return id == other.id && display_text == other.display_text && query_text == other.query_text &&
diff --git a/components/query_tiles/tile.h b/components/query_tiles/tile.h index bfdc9c7..5f4df43 100644 --- a/components/query_tiles/tile.h +++ b/components/query_tiles/tile.h
@@ -26,6 +26,21 @@ GURL url; }; +// Stats of a tile, used for ranking. +struct TileStats { + TileStats(); + TileStats(base::Time last_clicked_time, double score); + ~TileStats(); + TileStats(const TileStats& other); + bool operator==(const TileStats& other) const; + + // Last clicked timestamp. + base::Time last_clicked_time; + + // Score of the tile, used for ranking. + double score; +}; + // Represents the in memory structure of Tile. struct Tile { Tile();
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb index 2d3601798..662d2bb53 100644 --- a/components/strings/components_strings_af.xtb +++ b/components/strings/components_strings_af.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Weer aan Wi-Fi koppel</translation> <translation id="1165039591588034296">Fout</translation> <translation id="1165174597379888365">Bladsy is besoek</translation> +<translation id="1174723505405632867">Wil jy <ph name="EMBEDDED_URL" /> toelaat om webkoekies en werfdata te gebruik op <ph name="TOP_LEVEL_URL" />? + +Dit sal andersins deur jou privaatheidinstellings geblokkeer word. Dit sal die inhoud waarmee jy interaksie gehad het, in staat stel om reg te werk, maar kan <ph name="EMBEDDED_URL" /> toelaat om jou aktiwiteit na te spoor.</translation> <translation id="1175364870820465910">Druk uit …</translation> <translation id="1175875016430184367">Tripelkram regs</translation> <translation id="1178581264944972037">Laat wag</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">Beleide</translation> <translation id="2183608646556468874">Foonnommer</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 adres}other{# adresse}}</translation> +<translation id="2187243482123994665">Gebruikerteenwoordigheid</translation> <translation id="2187317261103489799">Bespeur (verstek)</translation> <translation id="2188375229972301266">Veelvuldige pons onder</translation> <translation id="2202020181578195191">Voer 'n geldige vervaljaar in</translation> @@ -533,6 +537,7 @@ seker te maak dat jou instaanbediener werk. As jy dink jy moenie 'n instaanbediener gebruik nie: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> wil weet wanneer jy teenwoordig is</translation> <translation id="3188393374551744535">Rekeningsaldo</translation> <translation id="3194737229810486521"><ph name="URL" /> wil data permanent op jou toestel berg</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> op <ph name="SERVER_NAME" /></translation> @@ -1025,6 +1030,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Masjien</translation> <translation id="5179510805599951267">Nie in <ph name="ORIGINAL_LANGUAGE" /> nie? Meld hierdie fout aan</translation> +<translation id="5179740473595559246">Weet wanneer jy teenwoordig is</translation> <translation id="5190835502935405962">Boekmerkebalk</translation> <translation id="519422657042045905">Annotasie is nie beskikbaar nie</translation> <translation id="5201306358585911203">'n Ingebedde bladsy op hierdie bladsy sê</translation> @@ -1247,6 +1253,7 @@ <translation id="6049488691372270142">Bladsylewering</translation> <translation id="6051221802930200923">Jy kan nie <ph name="SITE" /> nou onmiddellik besoek nie omdat die webwerf sertifikaatvasspelding gebruik. Netwerkfoute en -aanvalle is gewoonlik tydelik en daarom sal hierdie bladsy waarskynlik later werk.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Deel jou teenwoordigheid?</translation> <translation id="6058977677006700226">Gebruik jou kaarte op al jou toestelle?</translation> <translation id="6059925163896151826">USB-toestelle</translation> <translation id="6060009363608157444">Ongeldige DnsOverHttps-modus.</translation> @@ -1376,6 +1383,7 @@ <translation id="6631202559048444592">Daar is meer as een bron vir die beleid teenwoordig, maar die waardes is dieselfde.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Vee uit</translation> +<translation id="6645291930348198241">Kry toegang tot webkoekies en werfdata.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Geen}=1{Vanaf 1 werf (jy sal nie uit jou Google-rekening afgemeld word nie)}other{Vanaf # werwe (jy sal nie uit jou Google-rekening afgemeld word nie)}}</translation> <translation id="6648459603387803038">Jou administrateur kan jou blaaieropstelling oor 'n afstand verander. Aktiwiteit op hierdie toestel kan ook buite Chrome bestuur word.</translation> <translation id="6652101503459149953">Gebruik Windows Hello</translation>
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb index ad07ca2..fe6f897b 100644 --- a/components/strings/components_strings_am.xtb +++ b/components/strings/components_strings_am.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">ከWi-Fi ጋር ዳግም በማገናኘት</translation> <translation id="1165039591588034296">ስህተት</translation> <translation id="1165174597379888365">ገጽ ተጎብኝቷል</translation> +<translation id="1174723505405632867"><ph name="EMBEDDED_URL" /> ኩኪዎችን እና የጣቢያ ውሂብን በ<ph name="TOP_LEVEL_URL" /> ላይ መጠቀም እንዲችል መፍቀድ ይፈልጋሉ? + +አለበለዚያ ይህ በእርስዎ የግላዊነት ቅንብሮች ይታገዳል። ይህ እርስዎ መስተጋብር የፈጠሩበት ይዘት በትክክል እንዲሠራ ይፈቅድለታል፣ ነገር ግን <ph name="EMBEDDED_URL" /> የእርስዎን እንቅስቃሴ እንዲከታተል ሊፈቅድለት ይችላል።</translation> <translation id="1175364870820465910">&አትም…</translation> <translation id="1175875016430184367">ሦስቴ በቀኝ በኩል ስቴፕለር ምታ</translation> <translation id="1178581264944972037">ለአፍታ አቁም</translation> @@ -305,6 +308,7 @@ <translation id="2181821976797666341">መምሪያዎች</translation> <translation id="2183608646556468874">ስልክ ቁጥር</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 አድራሻ}one{# አድራሻዎች}other{# አድራሻዎች}}</translation> +<translation id="2187243482123994665">የተጠቃሚ ተገኝነት</translation> <translation id="2187317261103489799">አግኝ (ነባሪ)</translation> <translation id="2188375229972301266">በርካታ ብስ ግርጌ</translation> <translation id="2202020181578195191">ትክክለኛ የአገልግሎት ማብቂያ ዓመት ያስገቡ</translation> @@ -526,6 +530,7 @@ <translation id="3176929007561373547">ተኪ አገልጋዩ በአግባቡ እየሰራ መሆኑን ለማረጋገጥ የተኪ ቅንብሮችዎን ይፈትሹ ወይም የአውታረ መረብዎ አስተዳዳሪን ያግኙ። ተኪ አገልጋይ መጠቀም እንደሌለብዎት የሚያምኑ ከሆኑ፦ <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> እርስዎ የሚገኙ በሚሆኑበት ጊዜ ማወቅ ይፈልጋሉ</translation> <translation id="3188393374551744535">የመለያ ቀሪ ሒሳብ</translation> <translation id="3194737229810486521"><ph name="URL" /> ውሂብ እስከ መጨረሻው በእርስዎ መሣሪያ ላይ ማከማቸት ይፈልጋል</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> በ<ph name="SERVER_NAME" /> ላይ</translation> @@ -1015,6 +1020,7 @@ <translation id="5171689220826475070">ፋንፎልድ-አውሮፓ</translation> <translation id="5172758083709347301">ማሽን</translation> <translation id="5179510805599951267">በ<ph name="ORIGINAL_LANGUAGE" /> አይደለም? ይህን ስህተት ሪፖርት ያድርጉ</translation> +<translation id="5179740473595559246">እርስዎ የሚገኙ በሚሆኑበት ጊዜ ይወቁ</translation> <translation id="5190835502935405962">የዕልባቶች አሞሌ</translation> <translation id="519422657042045905">ማብራሪያ አይገኝም</translation> <translation id="5201306358585911203">በዚህ ድረ-ገጽ ላይ ያለ የተካተተ ገጽ እንዲህ ይላል፦</translation> @@ -1237,6 +1243,7 @@ <translation id="6049488691372270142">ገጽ ማድረስ</translation> <translation id="6051221802930200923"><ph name="SITE" /> የዕውቅና ማረጋገጫ ሚስማር መሰካትን ስለሚጠቀም ድር ጣቢያውን አሁን መጎብኘት አይችሉም። የአውታረ መረብ ስህተቶች እና ጥቃቶች ብዙውን ጊዜ ጊዜያዊ ስለሆኑ ይህ ገጽ በኋላ ላይ ሊሠራ ይችላል።</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">የእርስዎ መገኘት ይጋራ?</translation> <translation id="6058977677006700226">በሁሉም የእርስዎ መሣሪያዎች ላይ የእርስዎ ኮርዶች ጥቅም ላይ ይዋሉ?</translation> <translation id="6059925163896151826">የዩኤስቢ መሣሪያዎች</translation> <translation id="6060009363608157444">ልክ ያልሆነ የDnsOverHttps ሁነታ።</translation> @@ -1366,6 +1373,7 @@ <translation id="6631202559048444592">ለመመሪያው ከአንድ በላይ ምንጭ ይገኛል፣ ነገር ግን እሴቶቹ ተመሳሳይ ናቸው።</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">አጽዳ</translation> +<translation id="6645291930348198241">ኩኪዎችን እና የጣቢያ ውሂብን ይድረሱ።</translation> <translation id="6646269444027925224">{COUNT,plural, =0{ምንም}=1{ከ1 ጣቢያ (ከእርስዎ የGoogle መለያ ዘግተው እንዲወጡ አይደረጉም)}one{ከ# ጣቢያዎች (ከእርስዎ የGoogle መለያ ዘግተው እንዲወጡ አይደረጉም)}other{ከ# ጣቢያዎች (ከእርስዎ የGoogle መለያ ዘግተው እንዲወጡ አይደረጉም)}}</translation> <translation id="6648459603387803038">የእርስዎ አስተዳዳሪ በርቀት የአሳሽዎን ውቅረት መቀየር ይችላል። በዚህ መሣሪያ ላይ ያለ እንቅስቃሴ ከChrome ውጭም ሊስተዳደር ይችላል።</translation> <translation id="6652101503459149953">Windows Helloን ይጠቀሙ</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb index 0c7f85a..e22275b 100644 --- a/components/strings/components_strings_bg.xtb +++ b/components/strings/components_strings_bg.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Свържете се отново с Wi-Fi.</translation> <translation id="1165039591588034296">Грешка</translation> <translation id="1165174597379888365">Страницата е посетена</translation> +<translation id="1174723505405632867">Искате ли да разрешите на <ph name="EMBEDDED_URL" /> да използва „бисквитки“ и данни за сайтове на <ph name="TOP_LEVEL_URL" />? + +Ако не го направите, това ще бъде блокирано от настройките ви за поверителност. Разрешението ще позволи правилната работа на съдържанието, с което взаимодействахте, но също така може да позволи на <ph name="EMBEDDED_URL" /> да проследява активността ви.</translation> <translation id="1175364870820465910">&Печат...</translation> <translation id="1175875016430184367">Триточково телбодиране отдясно</translation> <translation id="1178581264944972037">Пауза</translation> @@ -307,6 +310,7 @@ <translation id="2181821976797666341">Правила</translation> <translation id="2183608646556468874">Телефонен номер</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 адрес}other{# адреса}}</translation> +<translation id="2187243482123994665">Присъствие на потребителя</translation> <translation id="2187317261103489799">Откриване (по подразбиране)</translation> <translation id="2188375229972301266">Няколко перфорации в долната част</translation> <translation id="2202020181578195191">Въведете валидна година на изтичане</translation> @@ -529,6 +533,7 @@ проверете настройките му или се свържете със системния си администратор. Ако смятате, че не трябва да използвате прокси сървър: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> иска да знае кога присъствате</translation> <translation id="3188393374551744535">Салдо по сметката</translation> <translation id="3194737229810486521"><ph name="URL" /> иска да съхранява за постоянно данни на устройството ви</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> на <ph name="SERVER_NAME" /></translation> @@ -1021,6 +1026,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Машината</translation> <translation id="5179510805599951267">Не е на <ph name="ORIGINAL_LANGUAGE" />? Подайте сигнал за тази грешка</translation> +<translation id="5179740473595559246">Знае кога присъствате</translation> <translation id="5190835502935405962">Лента на отметките</translation> <translation id="519422657042045905">Няма достъп до режима за пояснения</translation> <translation id="5201306358585911203">Страница, вградена в тази страница, изпраща съобщение</translation> @@ -1243,6 +1249,7 @@ <translation id="6049488691372270142">Извеждане на страниците</translation> <translation id="6051221802930200923">В момента не можете да посетите <ph name="SITE" />, защото уебсайтът използва метод за допълнително потвърждаване на сертификатите. Обикновено грешките в мрежата и атаките срещу нея са временни, така че тази страница вероятно ще работи по-късно.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Да се споделя ли информация за присъствието ви?</translation> <translation id="6058977677006700226">Искате ли да използвате картите си на всичките си устройства?</translation> <translation id="6059925163896151826">USB устройства</translation> <translation id="6060009363608157444">Невалиден режим за DnsOverHttps.</translation> @@ -1372,6 +1379,7 @@ <translation id="6631202559048444592">За правилото има повече от един източник, но стойностите са еднакви.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Изчистване</translation> +<translation id="6645291930348198241">Осъществява достъп до „бисквитки“ и данни за сайтове.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Няма}=1{От 1 сайт (няма да излезете от профила си в Google)}other{От # сайта (няма да излезете от профила си в Google)}}</translation> <translation id="6648459603387803038">Администраторът ви може отдалечено да променя настройките на браузъра. Възможно е активността на това устройство да се управлява и извън Chrome.</translation> <translation id="6652101503459149953">Използване на Windows Hello</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb index 36043a4d..7b4c04d3 100644 --- a/components/strings/components_strings_ca.xtb +++ b/components/strings/components_strings_ca.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Torna't a connectar a la xarxa Wi-Fi.</translation> <translation id="1165039591588034296">Error</translation> <translation id="1165174597379888365">Es visita una pàgina</translation> +<translation id="1174723505405632867">Vols permetre que <ph name="EMBEDDED_URL" /> utilitzi les galetes i les dades del lloc web a <ph name="TOP_LEVEL_URL" />? + +En cas contrari, la configuració de privadesa el bloquejarà. Això permetrà que el contingut amb què has interaccionat funcioni correctament, però pot ser que permeti que <ph name="EMBEDDED_URL" /> faci un seguiment de la teva activitat.</translation> <translation id="1175364870820465910">&Imprimeix...</translation> <translation id="1175875016430184367">Grapat triple a la dreta</translation> <translation id="1178581264944972037">Posa en pausa</translation> @@ -305,6 +308,7 @@ <translation id="2181821976797666341">Polítiques</translation> <translation id="2183608646556468874">Número de telèfon</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 adreça}other{# adreces}}</translation> +<translation id="2187243482123994665">Presència d'usuari</translation> <translation id="2187317261103489799">Detecta (opció predeterminada)</translation> <translation id="2188375229972301266">Encunyació múltiple a la part inferior</translation> <translation id="2202020181578195191">Introdueix un any de caducitat vàlid</translation> @@ -527,6 +531,7 @@ assegurar-vos que el servidor intermediari funcioni correctament. Si creieu que no és necessari utilitzar un servidor intermediari: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> vol saber quan estàs present</translation> <translation id="3188393374551744535">Saldo del compte</translation> <translation id="3194737229810486521"><ph name="URL" /> vol emmagatzemar dades al dispositiu de manera permanent</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> a <ph name="SERVER_NAME" /></translation> @@ -1014,6 +1019,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Automàtica</translation> <translation id="5179510805599951267">No està escrita en <ph name="ORIGINAL_LANGUAGE" />? Informa d'aquest error</translation> +<translation id="5179740473595559246">Saber quan hi ets</translation> <translation id="5190835502935405962">Barra d'adreces d'interès</translation> <translation id="519422657042045905">L'anotació no està disponible</translation> <translation id="5201306358585911203">Una pàgina inserida en aquesta pàgina diu</translation> @@ -1236,6 +1242,7 @@ <translation id="6049488691372270142">Lliurament de les pàgines</translation> <translation id="6051221802930200923">En aquests moments no pots visitar <ph name="SITE" /> perquè el lloc web fa servir una fixació de certificat. Els atacs i els errors de xarxa acostumen a ser temporals, o sigui que probablement la pàgina funcionarà més endavant.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Vols compartir la presència?</translation> <translation id="6058977677006700226">Vols utilitzar les targetes en tots els dispositius?</translation> <translation id="6059925163896151826">Dispositius USB</translation> <translation id="6060009363608157444">El mode DnsOverHttps no és vàlid.</translation> @@ -1365,6 +1372,7 @@ <translation id="6631202559048444592">Hi ha més d'un origen en aquesta política, però els valors són els mateixos.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Esborra</translation> +<translation id="6645291930348198241">Accedeix a les galetes i a les dades del lloc web.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Cap}=1{D'1 lloc web (no se't tancarà la sessió del Compte de Google)}other{De # llocs web (no se't tancarà la sessió del Compte de Google)}}</translation> <translation id="6648459603387803038">L'administrador pot modificar la configuració del navegador de manera remota. És possible que l'activitat d'aquest dispositiu també es gestioni fora de Chrome.</translation> <translation id="6652101503459149953">Utilitza Windows Hello</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb index 9ee3f751..a184463 100644 --- a/components/strings/components_strings_cs.xtb +++ b/components/strings/components_strings_cs.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Obnovit připojení k síti Wi-Fi</translation> <translation id="1165039591588034296">Chyba</translation> <translation id="1165174597379888365">Návštěva stránky</translation> +<translation id="1174723505405632867">Chcete webu <ph name="EMBEDDED_URL" /> povolit používat soubory cookie a data webů v doméně <ph name="TOP_LEVEL_URL" />? + +Jinak to vaše nastavení ochrany soukromí bude blokovat. Povolením umožníte správné fungování obsahu, se kterým jste interagovali, ale web <ph name="EMBEDDED_URL" /> také bude moci sledovat vaši aktivitu.</translation> <translation id="1175364870820465910">Tisk...</translation> <translation id="1175875016430184367">Tři sponky vpravo</translation> <translation id="1178581264944972037">Pozastavit</translation> @@ -305,6 +308,7 @@ <translation id="2181821976797666341">Zásady</translation> <translation id="2183608646556468874">Telefonní číslo</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 adresa}few{# adresy}many{# adresy}other{# adres}}</translation> +<translation id="2187243482123994665">Aktivita uživatele</translation> <translation id="2187317261103489799">Rozpoznat (výchozí)</translation> <translation id="2188375229972301266">Několik děr dole</translation> <translation id="2202020181578195191">Zadejte platný rok vypršení platnosti</translation> @@ -524,6 +528,7 @@ <translation id="3169472444629675720">Discover</translation> <translation id="3174168572213147020">Ostrov</translation> <translation id="3176929007561373547">Zkontrolujte nastavení proxy serveru nebo se obraťte na správce sítě, aby ověřil, zda proxy server funguje. Pokud se domníváte, že by proxy server neměl být používán: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> chce vědět, kdy jste aktivní</translation> <translation id="3188393374551744535">Zůstatek na účtu</translation> <translation id="3194737229810486521">Stránka <ph name="URL" /> chce trvale ukládat data v zařízení</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> na serveru <ph name="SERVER_NAME" /></translation> @@ -1010,6 +1015,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Počítač</translation> <translation id="5179510805599951267">Nejedná se o jazyk <ph name="ORIGINAL_LANGUAGE" />? Nahlaste tuto chybu.</translation> +<translation id="5179740473595559246">Vědět, kdy jste aktivní</translation> <translation id="5190835502935405962">Lišta záložek</translation> <translation id="519422657042045905">Poznámky nejsou k dispozici</translation> <translation id="5201306358585911203">Stránka vložená na této stránce říká</translation> @@ -1232,6 +1238,7 @@ <translation id="6049488691372270142">Dodání stránky</translation> <translation id="6051221802930200923">Web <ph name="SITE" /> teď nemůžete navštívit, protože používá připínání certifikátů. Síťové chyby a útoky jsou obvykle dočasné, tato stránka pravděpodobně později bude fungovat.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Sdílet, že jste aktivní?</translation> <translation id="6058977677006700226">Chcete své karty používat na všech svých zařízeních?</translation> <translation id="6059925163896151826">Zařízení USB</translation> <translation id="6060009363608157444">Režim DnsOverHttps je neplatný.</translation> @@ -1360,6 +1367,7 @@ <translation id="6631202559048444592">Pro zásadu je k dispozici několik zdrojů, ale hodnoty jsou stejné.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Vymazat</translation> +<translation id="6645291930348198241">Získat přístup k souborům cookie a datům webů.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Žádné}=1{Z 1 webu (nebudete odhlášeni z účtu Google)}few{Ze # webů (nebudete odhlášeni z účtu Google)}many{Z # webu (nebudete odhlášeni z účtu Google)}other{Z # webů (nebudete odhlášeni z účtu Google)}}</translation> <translation id="6648459603387803038">Administrátor může nastavení prohlížeče vzdáleně změnit. Aktivita na tomto zařízení může být spravována také mimo Chrome.</translation> <translation id="6652101503459149953">Použít Windows Hello</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb index 15115f2..ac48822 100644 --- a/components/strings/components_strings_el.xtb +++ b/components/strings/components_strings_el.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Επανασυνδεθείτε στο Wi-Fi</translation> <translation id="1165039591588034296">Σφάλμα</translation> <translation id="1165174597379888365">Επίσκεψη σελίδας</translation> +<translation id="1174723505405632867">Θέλετε να επιτρέψετε στο <ph name="EMBEDDED_URL" /> να χρησιμοποιεί cookie και δεδομένα ιστοτόπου στο <ph name="TOP_LEVEL_URL" />; + +Σε αντίθετη περίπτωση, θα αποκλειστεί από τις ρυθμίσεις απορρήτου σας. Με αυτήν την ενέργεια, το περιεχόμενο με το οποίο αλληλεπιδράσατε θα λειτουργεί σωστά, αλλά ενδέχεται να επιτραπεί στο <ph name="EMBEDDED_URL" /> να παρακολουθεί τη δραστηριότητά σας.</translation> <translation id="1175364870820465910">&Εκτύπωση...</translation> <translation id="1175875016430184367">Τριπλή συρραφή στα δεξιά</translation> <translation id="1178581264944972037">Παύση</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">Πολιτικές</translation> <translation id="2183608646556468874">Αριθμός τηλεφώνου</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 διεύθυνση}other{# διευθύνσεις}}</translation> +<translation id="2187243482123994665">Παρουσία χρήστη</translation> <translation id="2187317261103489799">Εντοπισμός (προεπιλογή)</translation> <translation id="2188375229972301266">Πολλαπλό τρύπημα στο κάτω μέρος</translation> <translation id="2202020181578195191">Εισαγάγετε ένα έγκυρο έτος λήξης</translation> @@ -533,6 +537,7 @@ να βεβαιωθείτε ότι ο διακομιστής μεσολάβησης λειτουργεί. Εάν δεν πιστεύετε ότι απαιτείται η χρήση διακομιστή μεσολάβησης: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456">Το <ph name="URL" /> θέλει να γνωρίζει πότε είστε ενεργοί.</translation> <translation id="3188393374551744535">Υπόλοιπο λογαριασμού</translation> <translation id="3194737229810486521">Ο ιστότοπος <ph name="URL" /> θέλει να αποθηκεύσει μόνιμα δεδομένα στη συσκευή σας</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> στο <ph name="SERVER_NAME" /></translation> @@ -1026,6 +1031,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Υπολογιστής</translation> <translation id="5179510805599951267">Δεν είναι στα <ph name="ORIGINAL_LANGUAGE" />; Αναφέρετε αυτό το σφάλμα</translation> +<translation id="5179740473595559246">Να γνωρίζει πότε είστε ενεργοί</translation> <translation id="5190835502935405962">Γραμμή σελιδοδεικτών</translation> <translation id="519422657042045905">Ο σχολιασμός δεν διατίθεται</translation> <translation id="5201306358585911203">Μια ενσωματωμένη σελίδα σε αυτήν τη σελίδα λέει</translation> @@ -1248,6 +1254,7 @@ <translation id="6049488691372270142">Παράδοση σελίδας</translation> <translation id="6051221802930200923">Δεν μπορείτε να επισκεφτείτε το <ph name="SITE" /> αυτήν τη στιγμή επειδή ο ιστότοπος χρησιμοποιεί certificate pinning (κλείδωμα πιστοποιητικών). Τα σφάλματα δικτύου και οι επιθέσεις είναι συνήθως προσωρινά, συνεπώς αυτή η σελίδα πιθανότατα θα λειτουργήσει αργότερα.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Κοινοποίηση της παρουσίας σας;</translation> <translation id="6058977677006700226">Χρήση των καρτών σας σε όλες τις συσκευές σας;</translation> <translation id="6059925163896151826">Συσκευές USB</translation> <translation id="6060009363608157444">Μη έγκυρη λειτουργία DnsOverHttps.</translation> @@ -1377,6 +1384,7 @@ <translation id="6631202559048444592">Υπάρχουν πάνω από μία πηγές για την πολιτική, αλλά οι τιμές είναι ίδιες.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Διαγραφή</translation> +<translation id="6645291930348198241">Πρόσβαση σε cookie και δεδομένα ιστοτόπου.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Κανένας}=1{Από 1 ιστότοπο (δεν θα αποσυνδεθείτε από τον Λογαριασμό σας Google)}other{Από # ιστοτόπους (δεν θα αποσυνδεθείτε από τον Λογαριασμό σας Google)}}</translation> <translation id="6648459603387803038">Ο διαχειριστής σας μπορεί να αλλάξει τη ρύθμιση του προγράμματος περιήγησής σας απομακρυσμένα. Η διαχείριση της δραστηριότητας σε αυτήν τη συσκευή μπορεί επίσης να πραγματοποιηθεί εκτός Chrome.</translation> <translation id="6652101503459149953">Χρήση Windows Hello</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb index 6e71870c..725ba45e 100644 --- a/components/strings/components_strings_en-GB.xtb +++ b/components/strings/components_strings_en-GB.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Reconnecting to Wi-Fi</translation> <translation id="1165039591588034296">Error</translation> <translation id="1165174597379888365">Page is visited</translation> +<translation id="1174723505405632867">Do you want to allow <ph name="EMBEDDED_URL" /> to use cookies and site data on <ph name="TOP_LEVEL_URL" />? + +This will otherwise be blocked by your privacy settings. This will allow the content that you interacted with to work correctly, but may allow <ph name="EMBEDDED_URL" /> to track your activity.</translation> <translation id="1175364870820465910">&Print...</translation> <translation id="1175875016430184367">Triple staple right</translation> <translation id="1178581264944972037">Pause</translation> @@ -308,6 +311,7 @@ <translation id="2181821976797666341">Policies</translation> <translation id="2183608646556468874">Phone Number</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 address}other{# addresses}}</translation> +<translation id="2187243482123994665">User presence</translation> <translation id="2187317261103489799">Detect (default)</translation> <translation id="2188375229972301266">Multiple punch bottom</translation> <translation id="2202020181578195191">Enter a valid expiry year</translation> @@ -532,6 +536,7 @@ make sure that the proxy server is working. If you don't believe you should be using a proxy server: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> wants to know when you're present</translation> <translation id="3188393374551744535">Account balance</translation> <translation id="3194737229810486521"><ph name="URL" /> wants to permanently store data on your device</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> on <ph name="SERVER_NAME" /></translation> @@ -1024,6 +1029,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Machine</translation> <translation id="5179510805599951267">Not in <ph name="ORIGINAL_LANGUAGE" />? Report this error</translation> +<translation id="5179740473595559246">Know when you're present</translation> <translation id="5190835502935405962">Bookmarks Bar</translation> <translation id="519422657042045905">Annotation not available</translation> <translation id="5201306358585911203">An embedded page on this page says</translation> @@ -1246,6 +1252,7 @@ <translation id="6049488691372270142">Page delivery</translation> <translation id="6051221802930200923">You cannot visit <ph name="SITE" /> right now because the website uses certificate pinning. Network errors and attacks are usually temporary, so this page will probably work later.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Share your presence?</translation> <translation id="6058977677006700226">Use your cards on all your devices?</translation> <translation id="6059925163896151826">USB devices</translation> <translation id="6060009363608157444">Invalid DnsOverHttps mode.</translation> @@ -1375,6 +1382,7 @@ <translation id="6631202559048444592">More than one source is present for the policy, but the values are the same.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Clear</translation> +<translation id="6645291930348198241">Access cookies and site data.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{None}=1{From 1 site (you won't be signed out of your Google Account)}other{From # sites (you won't be signed out of your Google Account)}}</translation> <translation id="6648459603387803038">Your administrator can change your browser setup remotely. Activity on this device may also be managed outside of Chrome.</translation> <translation id="6652101503459149953">Use Windows Hello</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb index 8e8bd82..525d7ee9 100644 --- a/components/strings/components_strings_es-419.xtb +++ b/components/strings/components_strings_es-419.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Volver a conectarte a Wi-Fi</translation> <translation id="1165039591588034296">Error</translation> <translation id="1165174597379888365">Se visitó una página</translation> +<translation id="1174723505405632867">¿Deseas permitir que <ph name="EMBEDDED_URL" /> use cookies y datos de sitios en <ph name="TOP_LEVEL_URL" />? + +De lo contrario, la configuración de privacidad bloqueará esta acción. Esto permitirá que el contenido con el que interactuaste funcione correctamente, pero es posible que <ph name="EMBEDDED_URL" /> haga un seguimiento de tu actividad.</translation> <translation id="1175364870820465910">Im&primir...</translation> <translation id="1175875016430184367">Grapas triples a la derecha</translation> <translation id="1178581264944972037">Detener</translation> @@ -305,6 +308,7 @@ <translation id="2181821976797666341">Políticas</translation> <translation id="2183608646556468874">Número de teléfono</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 dirección}other{# direcciones}}</translation> +<translation id="2187243482123994665">Presencia del usuario</translation> <translation id="2187317261103489799">Detectar (predeterminado)</translation> <translation id="2188375229972301266">Perforaciones múltiples en la parte inferior</translation> <translation id="2202020181578195191">Ingresa un año de vencimiento válido</translation> @@ -528,6 +532,7 @@ servidor proxy esté funcionando. Si consideras que no necesitas usar un servidor proxy: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> quiere saber cuando estás presente</translation> <translation id="3188393374551744535">Saldo de cuenta</translation> <translation id="3194737229810486521"><ph name="URL" /> desea almacenar datos de forma permanente en el dispositivo</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> en <ph name="SERVER_NAME" /></translation> @@ -1015,6 +1020,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Equipo</translation> <translation id="5179510805599951267">¿No está en <ph name="ORIGINAL_LANGUAGE" />? Informa este error</translation> +<translation id="5179740473595559246">Saber si estás presente</translation> <translation id="5190835502935405962">Barra de favoritos</translation> <translation id="519422657042045905">La anotación no está disponible</translation> <translation id="5201306358585911203">Una página incorporada en esta página dice</translation> @@ -1237,6 +1243,7 @@ <translation id="6049488691372270142">Entrega de páginas</translation> <translation id="6051221802930200923">No puedes visitar <ph name="SITE" /> ahora porque el sitio web usa la fijación de certificados. Los ataques y errores de red suelen ser temporales, por lo que es posible que esta página funcione más tarde.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">¿Deseas compartir tu presencia?</translation> <translation id="6058977677006700226">¿Quieres usar tus tarjetas en todos los dispositivos?</translation> <translation id="6059925163896151826">Dispositivos USB</translation> <translation id="6060009363608157444">Modo DnsOverHttps no válido</translation> @@ -1366,6 +1373,7 @@ <translation id="6631202559048444592">Hay más de una fuente para esta política, pero los valores son los mismos.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Borrar</translation> +<translation id="6645291930348198241">Acceder a las cookies y los datos de sitios</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Ninguno}=1{De 1 sitio (no saldrás de tu cuenta de Google)}other{De # sitios (no saldrás de tu cuenta de Google)}}</translation> <translation id="6648459603387803038">El administrador puede cambiar la configuración de tu navegador de forma remota. Es posible que la actividad en este dispositivo también se administre fuera de Chrome.</translation> <translation id="6652101503459149953">Usar Windows Hello</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb index a6a57dc..cd025d8 100644 --- a/components/strings/components_strings_es.xtb +++ b/components/strings/components_strings_es.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Volver a conectarte a una red Wi-Fi</translation> <translation id="1165039591588034296">Error</translation> <translation id="1165174597379888365">Se visita una página</translation> +<translation id="1174723505405632867">¿Quieres permitir que <ph name="EMBEDDED_URL" /> use tus cookies y datos de sitios web en <ph name="TOP_LEVEL_URL" />? + +De lo contrario, lo impedirá tu configuración de privacidad. Permitirá que el contenido con el que interactúes funcione correctamente, pero se concederá permiso a <ph name="EMBEDDED_URL" /> para que pueda monitorizar tu actividad.</translation> <translation id="1175364870820465910">Im&primir...</translation> <translation id="1175875016430184367">Grapado triple en la parte derecha</translation> <translation id="1178581264944972037">Pausar</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">Políticas</translation> <translation id="2183608646556468874">N.º de teléfono</translation> <translation id="2184405333245229118">{COUNT,plural, =1{Una dirección}other{# direcciones}}</translation> +<translation id="2187243482123994665">Presencia del usuario</translation> <translation id="2187317261103489799">Detectar (predeterminado)</translation> <translation id="2188375229972301266">Perforado múltiple en la parte inferior</translation> <translation id="2202020181578195191">Introduce un año de vencimiento válido</translation> @@ -533,6 +537,7 @@ asegurarte de que el servidor proxy funcione correctamente. Si consideras que no necesitas utilizar un servidor proxy, sigue estas instrucciones: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> quiere saber cuándo estás activo</translation> <translation id="3188393374551744535">Saldo de cuenta</translation> <translation id="3194737229810486521"><ph name="URL" /> quiere almacenar datos de forma permanente en tu dispositivo</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> de <ph name="SERVER_NAME" /></translation> @@ -1025,6 +1030,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Equipo</translation> <translation id="5179510805599951267">¿Esta página no está escrita en <ph name="ORIGINAL_LANGUAGE" />? Informa de este error.</translation> +<translation id="5179740473595559246">Saber cuándo estás activo</translation> <translation id="5190835502935405962">Barra de marcadores</translation> <translation id="519422657042045905">No están disponibles las anotaciones</translation> <translation id="5201306358585911203">Una página insertada en esta dice</translation> @@ -1247,6 +1253,7 @@ <translation id="6049488691372270142">Entrega de página</translation> <translation id="6051221802930200923">No puedes acceder a <ph name="SITE" /> en este momento porque el sitio web utiliza la fijación de certificados. Los ataques y los errores de red suelen ser temporales, por lo que es probable que esta página funcione más tarde.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">¿Compartir tu presencia?</translation> <translation id="6058977677006700226">¿Quieres usar las tarjetas en todos tus dispositivos?</translation> <translation id="6059925163896151826">Dispositivos USB</translation> <translation id="6060009363608157444">Modo DnsOverHttps no válido.</translation> @@ -1376,6 +1383,7 @@ <translation id="6631202559048444592">Esta política tiene más de una fuente, pero los valores son los mismos.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Eliminar</translation> +<translation id="6645291930348198241">Acceder a cookies y datos de sitios web.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Ninguno}=1{De 1 sitio web (no se cerrará la sesión en tu cuenta de Google)}other{De # sitios web (no se cerrará la sesión en tu cuenta de Google)}}</translation> <translation id="6648459603387803038">El administrador puede cambiar la configuración del navegador de forma remota. Es posible que la actividad de este dispositivo también se administre fuera de Chrome.</translation> <translation id="6652101503459149953">Usar Windows Hello</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb index df8c0c3..e15276e 100644 --- a/components/strings/components_strings_fa.xtb +++ b/components/strings/components_strings_fa.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">اتصال مجدد به Wi-Fi</translation> <translation id="1165039591588034296">خطا</translation> <translation id="1165174597379888365">صفحه بازدید شده است</translation> +<translation id="1174723505405632867">میخواهید به <ph name="EMBEDDED_URL" /> اجازه دهید از کوکیها و دادههای سایت در <ph name="TOP_LEVEL_URL" /> استفاده کند؟ + +اگر اجازه ندهید، تنظیمات حریمخصوصی مانع از این دسترسی میشود. این اجازه کمک میکند محتوایی که با آن تعامل داشتهاید درست کار کند، اما میتواند به <ph name="EMBEDDED_URL" /> هم اجازه دهد فعالیت شما را ردیابی کند.</translation> <translation id="1175364870820465910">&چاپ...</translation> <translation id="1175875016430184367">سه منگنه در راست</translation> <translation id="1178581264944972037">مکث</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">خط مشیها</translation> <translation id="2183608646556468874">شماره تلفن</translation> <translation id="2184405333245229118">{COUNT,plural, =1{۱ نشانی}one{# نشانی}other{# نشانی}}</translation> +<translation id="2187243482123994665">حضور کاربر</translation> <translation id="2187317261103489799">تشخیص (پیشفرض)</translation> <translation id="2188375229972301266">چندین سوراخ در پایین</translation> <translation id="2202020181578195191">سال انقضای معتبری وارد کنید</translation> @@ -531,6 +535,7 @@ مطمئن شوید سرور پروکسی کار میکند. اگر مطمئن نیستید که باید از سرور پروکسی استفاده کنید: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> میخواهد از وضعیت حضور شما مطلع شود</translation> <translation id="3188393374551744535">موجودی حساب</translation> <translation id="3194737229810486521"><ph name="URL" /> میخواهد دادهها را برای همیشه در دستگاهتان ذخیره کند</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> در <ph name="SERVER_NAME" /></translation> @@ -1023,6 +1028,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">دستگاه</translation> <translation id="5179510805599951267">به زبان <ph name="ORIGINAL_LANGUAGE" /> نیست؟ گزارش این خطا</translation> +<translation id="5179740473595559246">از وضعیت حضور شما مطلع شود</translation> <translation id="5190835502935405962">نوار نشانکها</translation> <translation id="519422657042045905">حاشیهنویسی دردسترس نیست</translation> <translation id="5201306358585911203">صفحه جاسازیشدهای در این صفحه میگوید</translation> @@ -1245,6 +1251,7 @@ <translation id="6049488691372270142">ارائه صفحه</translation> <translation id="6051221802930200923">درحالحاضر نمیتوانید از <ph name="SITE" /> دیدن کنید، زیرا وبسایت از پین کردن گواهینامه استفاده میکند. خطاهای شبکه و حملهها موقتی هستند، بنابراین احتمالاً این صفحه بعداً کار خواهد کرد.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">وضعیت حضورتان همرسانی شود؟</translation> <translation id="6058977677006700226">از کارتها در همه دستگاههایتان استفاده شود؟</translation> <translation id="6059925163896151826">دستگاههای USB</translation> <translation id="6060009363608157444">حالت DnsOverHttps نامعتبر است.</translation> @@ -1374,6 +1381,7 @@ <translation id="6631202559048444592">بیش از یک منبع برای این خطمشی وجود دارد، اما مقادیر یکسانی دارند.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">پاک کردن</translation> +<translation id="6645291930348198241">به کوکیها و دادههای سایت دسترسی داشته باشد.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{هیچکدام}=1{از ۱ سایت (از سیستم حساب Google خود خارج نخواهید شد)}one{از # سایت (از سیستم حساب Google خود خارج نخواهید شد)}other{از # سایت (از سیستم حساب Google خود خارج نخواهید شد)}}</translation> <translation id="6648459603387803038">سرپرستتان میتواند تنظیم مرورگرتان را ازراهدور تغییر دهد. فعالیت انجامشده در این دستگاه میتواند از خارج از Chrome هم مدیریت شود.</translation> <translation id="6652101503459149953">استفاده از Windows Hello</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb index 293f8af..d42a7ba 100644 --- a/components/strings/components_strings_fr-CA.xtb +++ b/components/strings/components_strings_fr-CA.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">De vous reconnecter au réseau Wi-Fi</translation> <translation id="1165039591588034296">Erreur</translation> <translation id="1165174597379888365">La page est visitée</translation> +<translation id="1174723505405632867">Souhaitez-vous autoriser <ph name="EMBEDDED_URL" /> à utiliser les témoins et les données relatives aux sites sur <ph name="TOP_LEVEL_URL" />? + +À moins que vous accordiez l'autorisation, cet accès sera bloqué par vos paramètres de confidentialité. Cela permettra au contenu avec lequel vous avez interagi de fonctionner correctement, mais pourrait autoriser <ph name="EMBEDDED_URL" /> à faire le suivi de votre activité.</translation> <translation id="1175364870820465910">Im&primer...</translation> <translation id="1175875016430184367">Triple agrafe à droite</translation> <translation id="1178581264944972037">Interrompre</translation> @@ -305,6 +308,7 @@ <translation id="2181821976797666341">Règles</translation> <translation id="2183608646556468874">Numéro de téléphone</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 adresse}one{# adresse}other{# adresses}}</translation> +<translation id="2187243482123994665">Présence de l'utilisateur</translation> <translation id="2187317261103489799">Détecter (par défaut)</translation> <translation id="2188375229972301266">Perforation multiple en bas</translation> <translation id="2202020181578195191">Entrez une année d'expiration valide</translation> @@ -527,6 +531,7 @@ réseau pour vous assurer que le serveur mandataire fonctionne. Si vous ne pensez pas devoir utiliser de serveur mandataire, procédez comme suit : <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> souhaite savoir lorsque vous êtes présent</translation> <translation id="3188393374551744535">Solde du compte</translation> <translation id="3194737229810486521">L'URL <ph name="URL" /> veut stocker de façon permanente des données sur votre appareil</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> sur <ph name="SERVER_NAME" /></translation> @@ -1014,6 +1019,7 @@ <translation id="5171689220826475070">Pli en éventail, Europe</translation> <translation id="5172758083709347301">Machine</translation> <translation id="5179510805599951267">Cette page n'est pas rédigée en <ph name="ORIGINAL_LANGUAGE" />? Signaler l'erreur.</translation> +<translation id="5179740473595559246">Savoir quand vous êtes présent</translation> <translation id="5190835502935405962">Barre de favoris</translation> <translation id="519422657042045905">Le mode d'annotation n'est pas accessible</translation> <translation id="5201306358585911203">Une page intégrée de cette page indique</translation> @@ -1236,6 +1242,7 @@ <translation id="6049488691372270142">Livraison de la page</translation> <translation id="6051221802930200923">Vous ne pouvez pas consulter le site <ph name="SITE" /> pour le moment, car le site Web utilise l'épinglage de certificat. Les erreurs réseau et les attaques sont généralement temporaires. Vous devriez donc pouvoir accéder à cette page plus tard.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Partager votre présence?</translation> <translation id="6058977677006700226">Utiliser vos cartes sur tous vos appareils?</translation> <translation id="6059925163896151826">Appareils USB</translation> <translation id="6060009363608157444">Mode DnsOverHttps incorrect.</translation> @@ -1365,6 +1372,7 @@ <translation id="6631202559048444592">Il existe plusieurs sources pour cette politique, mais les valeurs sont identiques.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Effacer</translation> +<translation id="6645291930348198241">Accéder aux témoins et aux données relatives aux sites.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Aucun}=1{De 1 site (vous ne serez pas déconnecté de votre compte Google)}one{De # site (vous ne serez pas déconnecté de votre compte Google)}other{De # sites (vous ne serez pas déconnecté de votre compte Google)}}</translation> <translation id="6648459603387803038">Votre administrateur peut modifier la configuration de votre navigateur à distance. L'activité sur cet appareil peut aussi être gérée à l'extérieur de Chrome.</translation> <translation id="6652101503459149953">Utiliser Windows Hello</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb index e84e7f6..015bfff 100644 --- a/components/strings/components_strings_fr.xtb +++ b/components/strings/components_strings_fr.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Reconnectez-vous au réseau Wi-Fi</translation> <translation id="1165039591588034296">Erreur</translation> <translation id="1165174597379888365">Page consultée</translation> +<translation id="1174723505405632867">Souhaitez-vous autoriser le site <ph name="EMBEDDED_URL" /> à utiliser les cookies et les données de site sur <ph name="TOP_LEVEL_URL" /> ? + +Par défaut, ce type d'accès est bloqué par vos paramètres de confidentialité. Si vous l'autorisez, les contenus avec lesquels vous avez interagi fonctionneront correctement, mais il se pourrait que le site <ph name="EMBEDDED_URL" /> puisse suivre votre activité.</translation> <translation id="1175364870820465910">Im&primer...</translation> <translation id="1175875016430184367">Triple agrafe à droite</translation> <translation id="1178581264944972037">Suspendre</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">Règles</translation> <translation id="2183608646556468874">Numéro de téléphone</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 adresse}one{# adresse}other{# adresses}}</translation> +<translation id="2187243482123994665">Présence de l'utilisateur</translation> <translation id="2187317261103489799">Détecter (par défaut)</translation> <translation id="2188375229972301266">Multiple perforation en bas</translation> <translation id="2202020181578195191">Saisissez une année d'expiration valide</translation> @@ -531,6 +535,7 @@ vous assurer que le serveur proxy fonctionne. Si vous ne pensez pas devoir utiliser de serveur proxy, procédez comme suit : <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> souhaite savoir quand vous êtes là</translation> <translation id="3188393374551744535">Solde du compte</translation> <translation id="3194737229810486521"><ph name="URL" /> souhaite stocker des données de façon permanente sur votre appareil</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> sur <ph name="SERVER_NAME" /></translation> @@ -1023,6 +1028,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Ordinateur</translation> <translation id="5179510805599951267">Cette page n'est pas rédigée en <ph name="ORIGINAL_LANGUAGE" /> ? Signaler l'erreur</translation> +<translation id="5179740473595559246">Savoir quand vous êtes là</translation> <translation id="5190835502935405962">Barre de favoris</translation> <translation id="519422657042045905">Annotation indisponible</translation> <translation id="5201306358585911203">Une page intégrée à cette page Web indique</translation> @@ -1245,6 +1251,7 @@ <translation id="6049488691372270142">Livraison de la page</translation> <translation id="6051221802930200923">Le site <ph name="SITE" /> est actuellement inaccessible, car il utilise l'épinglage des certificats. Les erreurs réseau et les attaques sont généralement temporaires. Vous devriez donc pouvoir accéder à cette page plus tard.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Indiquer que vous êtes là ?</translation> <translation id="6058977677006700226">Vous utilisez vos cartes sur tous vos appareils ?</translation> <translation id="6059925163896151826">Appareils USB</translation> <translation id="6060009363608157444">Mode DnsOverHttps non valide.</translation> @@ -1374,6 +1381,7 @@ <translation id="6631202559048444592">Il existe plusieurs sources pour cette règle, mais les valeurs sont identiques.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Effacer</translation> +<translation id="6645291930348198241">Accéder aux cookies et aux données de site.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Aucun}=1{De 1 site (vous ne serez pas déconnecté de votre compte Google)}one{De # site (vous ne serez pas déconnecté de votre compte Google)}other{De # sites (vous ne serez pas déconnecté de votre compte Google)}}</translation> <translation id="6648459603387803038">Votre administrateur peut modifier à distance la configuration de votre navigateur. Il se peut que l'activité sur cet appareil soit gérée en dehors de Chrome.</translation> <translation id="6652101503459149953">Utiliser Windows Hello</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb index 0ad166e9a..b29c32db 100644 --- a/components/strings/components_strings_id.xtb +++ b/components/strings/components_strings_id.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Menyambungkan ulang ke Wi-Fi</translation> <translation id="1165039591588034296">Kesalahan</translation> <translation id="1165174597379888365">Halaman dikunjungi</translation> +<translation id="1174723505405632867">Anda ingin mengizinkan <ph name="EMBEDDED_URL" /> menggunakan cookie dan data situs di <ph name="TOP_LEVEL_URL" />? + +Jika tidak, ini akan diblokir oleh setelan privasi Anda. Ini akan memungkinkan konten yang berinteraksi dengan Anda berfungsi sebagaimana mestinya, tetapi mungkin mengizinkan <ph name="EMBEDDED_URL" /> melacak aktivitas Anda.</translation> <translation id="1175364870820465910">&Cetak...</translation> <translation id="1175875016430184367">Tiga jepretan di kanan</translation> <translation id="1178581264944972037">Jeda</translation> @@ -305,6 +308,7 @@ <translation id="2181821976797666341">Kebijakan</translation> <translation id="2183608646556468874">Nomor Telepon</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 alamat}other{# alamat}}</translation> +<translation id="2187243482123994665">Kehadiran pengguna</translation> <translation id="2187317261103489799">Deteksi (default)</translation> <translation id="2188375229972301266">Beberapa lubang di bawah</translation> <translation id="2202020181578195191">Masukkan tahun habis masa berlaku yang valid</translation> @@ -529,6 +533,7 @@ memastikan bahwa server proxy bekerja. Jika Anda tidak yakin harus menggunakan server proxy: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> ingin mengetahui status kehadiran Anda</translation> <translation id="3188393374551744535">Saldo rekening</translation> <translation id="3194737229810486521"><ph name="URL" /> ingin menyimpan data di perangkat Anda secara permanen</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> di <ph name="SERVER_NAME" /></translation> @@ -1015,6 +1020,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Mesin</translation> <translation id="5179510805599951267">Bukan <ph name="ORIGINAL_LANGUAGE" />? Laporkan kesalahan deteksi ini</translation> +<translation id="5179740473595559246">Mengetahui status kehadiran Anda</translation> <translation id="5190835502935405962">Bilah Bookmark</translation> <translation id="519422657042045905">Anotasi tidak tersedia</translation> <translation id="5201306358585911203">Halaman tersemat di halaman ini menyatakan</translation> @@ -1237,6 +1243,7 @@ <translation id="6049488691372270142">Pengiriman halaman</translation> <translation id="6051221802930200923">Anda tidak dapat membuka <ph name="SITE" /> sekarang karena situs menggunakan penyematan sertifikat. Error jaringan dan serangan biasanya bersifat sementara, sehingga halaman ini mungkin akan berfungsi nanti.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Bagikan kehadiran Anda?</translation> <translation id="6058977677006700226">Gunakan kartu Anda di semua perangkat?</translation> <translation id="6059925163896151826">Perangkat USB</translation> <translation id="6060009363608157444">Mode DnsOverHttps tidak valid.</translation> @@ -1366,6 +1373,7 @@ <translation id="6631202559048444592">Ada beberapa sumber yang nilainya sama untuk kebijakan ini.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Hapus</translation> +<translation id="6645291930348198241">Mengakses cookie dan data situs.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Tidak ada}=1{Dari 1 situs (Anda tidak akan logout dari Akun Google)}other{Dari # situs (Anda tidak akan logout dari Akun Google)}}</translation> <translation id="6648459603387803038">Administrator dapat mengubah penyiapan browser Anda dari jarak jauh. Aktivitas di perangkat ini juga dapat dikelola di luar Chrome.</translation> <translation id="6652101503459149953">Gunakan Windows Hello</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb index 2e5339ee..912fbe63 100644 --- a/components/strings/components_strings_is.xtb +++ b/components/strings/components_strings_is.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Tengist aftur Wi-Fi</translation> <translation id="1165039591588034296">Villa</translation> <translation id="1165174597379888365">Síða var opnuð</translation> +<translation id="1174723505405632867">Viltu leyfa <ph name="EMBEDDED_URL" /> að nota fótspor og vefsvæðisgögn á <ph name="TOP_LEVEL_URL" />? + +Ef þú gerir það ekki loka persónuverndarstillingar þínar á þennan aðgang. Þetta gerir vefsvæðinu kleift að bjóða upp á rétta virkni efnisins sem þú valdir en kann að gera <ph name="EMBEDDED_URL" /> kleift að rekja aðgerðir þínar.</translation> <translation id="1175364870820465910">&Prenta...</translation> <translation id="1175875016430184367">Þrjú hefti hægra megin</translation> <translation id="1178581264944972037">Gera hlé</translation> @@ -310,6 +313,7 @@ <translation id="2181821976797666341">Reglur</translation> <translation id="2183608646556468874">Símanúmer</translation> <translation id="2184405333245229118">{COUNT,plural, =1{Eitt heimilisfang}one{# heimilisfang}other{# heimilisföng}}</translation> +<translation id="2187243482123994665">Viðvera notanda</translation> <translation id="2187317261103489799">Greina (sjálfgefið)</translation> <translation id="2188375229972301266">Mörg göt neðst</translation> <translation id="2202020181578195191">Færðu inn gilt lokaár</translation> @@ -534,6 +538,7 @@ ganga úr skugga um að staðgengilsþjónninn starfi rétt. Ef þú heldur að þú ættir ekki að nota staðgengilsþjón: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> vill vita af því þegar þú ert á staðnum</translation> <translation id="3188393374551744535">Reikningsstaða</translation> <translation id="3194737229810486521"><ph name="URL" /> vill fá að geyma gögn varanlega í tækinu þínu</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> á <ph name="SERVER_NAME" /></translation> @@ -1026,6 +1031,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Vél</translation> <translation id="5179510805599951267">Ekki <ph name="ORIGINAL_LANGUAGE" />? Tilkynna þessa villu</translation> +<translation id="5179740473595559246">Vita af því þegar þú ert á staðnum</translation> <translation id="5190835502935405962">Bókamerkjastika</translation> <translation id="519422657042045905">Athugasemdir eru ekki tiltækar</translation> <translation id="5201306358585911203">Innfelld síða á þessari síðu segir</translation> @@ -1248,6 +1254,7 @@ <translation id="6049488691372270142">Síðuafhending</translation> <translation id="6051221802930200923">Þú getur ekki heimsótt <ph name="SITE" /> að svo stöddu þar sem vefsvæðið notast við vottorðafestingu. Netvillur og árásir eru yfirleitt tímabundnar og því mun þessi síða líklega virka síðar.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Deila viðveru þinni?</translation> <translation id="6058977677006700226">Viltu nota kortin þín í öllum tækjum?</translation> <translation id="6059925163896151826">USB-tæki</translation> <translation id="6060009363608157444">Ógild DnsOverHttps-stilling.</translation> @@ -1377,6 +1384,7 @@ <translation id="6631202559048444592">Fleiri en einn uppruni eru til staðar fyrir regluna en gildin eru þau sömu.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Hreinsa</translation> +<translation id="6645291930348198241">Fá aðgang að fótsporum og gögnum vefsvæða.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Ekkert}=1{Frá einu vefsvæði (þú verður ekki skráð(ur) út af Google reikningnum þínum)}one{Frá # vefsvæði (þú verður ekki skráð(ur) út af Google reikningnum þínum)}other{Frá # vefsvæðum (þú verður ekki skráð(ur) út af Google reikningnum þínum)}}</translation> <translation id="6648459603387803038">Kerfisstjórinn þinn getur breytt uppsetningu vafrans með fjartengingu. Virkni þinni í þessu tæki er einnig hægt að stjórna utan Chrome.</translation> <translation id="6652101503459149953">Nota Windows Hello</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb index 1b32dde..df3918e 100644 --- a/components/strings/components_strings_it.xtb +++ b/components/strings/components_strings_it.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Riconnessione alla rete Wi-Fi</translation> <translation id="1165039591588034296">Errore</translation> <translation id="1165174597379888365">Pagina visitata</translation> +<translation id="1174723505405632867">Vuoi consentire al sito <ph name="EMBEDDED_URL" /> di usare cookie e dati del sito su <ph name="TOP_LEVEL_URL" />? + +In caso contrario l'uso sarà bloccato dalle impostazioni sulla privacy. I contenuti con cui hai interagito funzioneranno correttamente, ma il sito <ph name="EMBEDDED_URL" /> potrebbe monitorare la tua attività.</translation> <translation id="1175364870820465910">&Stampa...</translation> <translation id="1175875016430184367">Tripla pinzatura a destra</translation> <translation id="1178581264944972037">Pausa</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">Criteri</translation> <translation id="2183608646556468874">Numero di telefono</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 indirizzo}other{# indirizzi}}</translation> +<translation id="2187243482123994665">Presenza dell'utente</translation> <translation id="2187317261103489799">Rileva (predefinita)</translation> <translation id="2188375229972301266">Perforatura multipla in basso</translation> <translation id="2202020181578195191">Inserisci un anno di scadenza valido</translation> @@ -530,6 +534,7 @@ <translation id="3169472444629675720">Discover</translation> <translation id="3174168572213147020">Isola</translation> <translation id="3176929007561373547">Controlla le impostazioni del proxy o contatta il tuo amministratore di rete per verificare che il server proxy funzioni. Se non ritieni di dover utilizzare un server proxy: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> vuole sapere quando sei presente</translation> <translation id="3188393374551744535">Saldo dell'account</translation> <translation id="3194737229810486521"><ph name="URL" /> vuole memorizzare in modo definitivo i dati sul dispositivo</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> su <ph name="SERVER_NAME" /></translation> @@ -1022,6 +1027,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Computer</translation> <translation id="5179510805599951267">Non in <ph name="ORIGINAL_LANGUAGE" />? Segnala questo errore</translation> +<translation id="5179740473595559246">sapere quando sei presente</translation> <translation id="5190835502935405962">Barra dei Preferiti</translation> <translation id="519422657042045905">Annotazione non disponibile</translation> <translation id="5201306358585911203">Una pagina incorporata in questa pagina dice</translation> @@ -1244,6 +1250,7 @@ <translation id="6049488691372270142">Consegna pagina</translation> <translation id="6051221802930200923">Al momento non puoi visitare il sito web <ph name="SITE" /> perché utilizza il blocco dei certificati. In genere gli errori di rete e gli attacchi sono temporanei, pertanto questa pagina potrebbe funzionare più tardi.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Condividere la tua presenza?</translation> <translation id="6058977677006700226">Utilizzare le carte su tutti i tuoi dispositivi?</translation> <translation id="6059925163896151826">Dispositivi USB</translation> <translation id="6060009363608157444">Modalità DnsOverHttps non valida.</translation> @@ -1372,6 +1379,7 @@ <translation id="6631202559048444592">È presente più di un'origine per questo criterio, ma i valori sono gli stessi.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Cancella</translation> +<translation id="6645291930348198241">Accedere a cookie e dati del sito.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Nessuno}=1{Da 1 sito (non verrai disconnesso dal tuo Account Google)}other{Da # siti (non verrai disconnesso dal tuo Account Google)}}</translation> <translation id="6648459603387803038">L'amministratore può modificare da remoto la configurazione del browser. L'attività svolta su questo dispositivo potrebbe essere gestita anche al di fuori di Chrome.</translation> <translation id="6652101503459149953">Usa Windows Hello</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb index b5e5d4f9..67adfd2 100644 --- a/components/strings/components_strings_iw.xtb +++ b/components/strings/components_strings_iw.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">להתחבר מחדש אל ה-Wi-Fi</translation> <translation id="1165039591588034296">שגיאה</translation> <translation id="1165174597379888365">ביקור בדף</translation> +<translation id="1174723505405632867">האם ברצונך לאפשר ל-<ph name="EMBEDDED_URL" /> להשתמש בקובצי Cookie ובנתונים שב-<ph name="TOP_LEVEL_URL" />? + +ללא הרשאה מפורשת ממך, האפשרות הזו תישאר חסומה בהתאם להגדרות הפרטיות. הרשאה זו תאפשר פעולה תקינה של תוכן שתתקיים איתו אינטראקציה, אבל היא עשויה גם לאפשר ל-<ph name="EMBEDDED_URL" /> לעקוב אחרי הפעילות שלך.</translation> <translation id="1175364870820465910">הדפסה…</translation> <translation id="1175875016430184367">3 סיכות הידוק בצד ימין</translation> <translation id="1178581264944972037">השהה</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">מדיניות</translation> <translation id="2183608646556468874">מספר טלפון</translation> <translation id="2184405333245229118">{COUNT,plural, =1{כתובת אחת}two{שתי כתובות}many{# כתובות}other{# כתובות}}</translation> +<translation id="2187243482123994665">נוכחות משתמש</translation> <translation id="2187317261103489799">זהה (ברירת מחדל)</translation> <translation id="2188375229972301266">ניקובים מרובים בחלק התחתון</translation> <translation id="2202020181578195191">עליך להזין שנת תפוגה חוקית</translation> @@ -533,6 +537,7 @@ כדי לוודא ששרת ה-proxy פועל. אם אינך סבור שעליך להשתמש בשרת proxy: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> רוצה לדעת על זמני הנוכחות שלך</translation> <translation id="3188393374551744535">יתרה בחשבון</translation> <translation id="3194737229810486521"><ph name="URL" /> רוצה לאחסן נתונים במכשיר שלך באופן קבוע</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> בשרת <ph name="SERVER_NAME" /></translation> @@ -1027,6 +1032,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">מכונה</translation> <translation id="5179510805599951267">לא ב<ph name="ORIGINAL_LANGUAGE" />? דיווח על שגיאה זו</translation> +<translation id="5179740473595559246">לדעת על זמני הנוכחות שלך</translation> <translation id="5190835502935405962">סרגל הסימניות</translation> <translation id="519422657042045905">ההערה לא זמינה</translation> <translation id="5201306358585911203">דף מוטמע בדף הזה אומר</translation> @@ -1250,6 +1256,7 @@ <translation id="6049488691372270142">מסירת דף</translation> <translation id="6051221802930200923">נכון לעכשיו אי אפשר לבקר באתר <ph name="SITE" />, מאחר שבאתר הזה נעשה שימוש בנעיצת אישורים. שגיאות רשת ומתקפות הן בדרך כלל זמניות, כך שהדף הזה יחזור כנראה לפעול מאוחר יותר.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">לשתף את הנוכחות שלך?</translation> <translation id="6058977677006700226">רוצה להשתמש בכרטיסים בכל המכשירים שברשותך?</translation> <translation id="6059925163896151826">מכשירי USB</translation> <translation id="6060009363608157444">מצב DnsOverHttps לא חוקי.</translation> @@ -1379,6 +1386,7 @@ <translation id="6631202559048444592">במדיניות הזו קיים יותר ממקור אחד, אבל הערכים זהים.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">ניקוי</translation> +<translation id="6645291930348198241">לקבל גישה לקובצי Cookie ולנתוני אתרים.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{ללא}=1{מאתר אחד (לא תבוצע יציאה מחשבון Google שלך.)}two{מ-# אתרים (לא תבוצע יציאה מחשבון Google שלך.)}many{מ-# אתרים (לא תבוצע יציאה מחשבון Google שלך.)}other{מ-# אתרים (לא תבוצע יציאה מחשבון Google שלך.)}}</translation> <translation id="6648459603387803038">מנהל המערכת יכול לשנות את הגדרת הדפדפן שלך מרחוק. בנוסף, ניתן לנהל את הפעילות במכשיר הזה מחוץ ל-Chrome.</translation> <translation id="6652101503459149953">שימוש ב-Windows Hello</translation>
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb index 8817a664..0baf2d0 100644 --- a/components/strings/components_strings_km.xtb +++ b/components/strings/components_strings_km.xtb
@@ -48,6 +48,9 @@ <translation id="1161325031994447685">កំពុងភ្ជាប់ Wi-Fi ឡើងវិញ</translation> <translation id="1165039591588034296">កំហុសឆ្គង</translation> <translation id="1165174597379888365">ទំព័រត្រូវបានចូលមើល</translation> +<translation id="1174723505405632867">តើអ្នកចង់អនុញ្ញាតឱ្យ <ph name="EMBEDDED_URL" /> ប្រើទិន្នន័យគេហទំព័រ និងខូគីនៅលើ <ph name="TOP_LEVEL_URL" /> ដែរទេ? + +ប្រសិនបើអ្នកមិនអនុញ្ញាតទេ ការកំណត់ឯកជនភាពរបស់អ្នកនឹងទប់ស្កាត់គេហទំព័រនេះ។ ការអនុញ្ញាតនេះនឹងផ្ដល់លទ្ធភាពឱ្យខ្លឹមសារដែលអ្នកបានធ្វើអន្តរកម្មជាមួយអាចដំណើរការបានត្រឹមត្រូវ ប៉ុន្តែអាចនឹងអនុញ្ញាតឱ្យ <ph name="EMBEDDED_URL" /> តាមដានសកម្មភាពរបស់អ្នក។</translation> <translation id="1175364870820465910">បោះពុម្ព...</translation> <translation id="1175875016430184367">កិបបីគ្រាប់ខាងស្ដាំ</translation> <translation id="1178581264944972037">ផ្អាក</translation> @@ -311,6 +314,7 @@ <translation id="2181821976797666341">គោលការណ៍</translation> <translation id="2183608646556468874">លេខទូរសព្ទ</translation> <translation id="2184405333245229118">{COUNT,plural, =1{អាសយដ្ឋាន 1}other{អាសយដ្ឋាន #}}</translation> +<translation id="2187243482123994665">វត្តមានរបស់អ្នកប្រើប្រាស់</translation> <translation id="2187317261103489799">ស្វែងរក (លំនាំដើម)</translation> <translation id="2188375229972301266">ចោះច្រើនរន្ធខាងក្រោម</translation> <translation id="2202020181578195191">បញ្ចូលឆ្នាំផុតកំណត់ឲ្យបានត្រឹមត្រូវ</translation> @@ -536,6 +540,7 @@ មេប្រូកស៊ីកំពុងដំណើរការ។ ប្រសិនបើអ្នកមិនជឿជាក់ថាអ្នកគួរ ប្រើម៉ាស៊ីនមេប្រូកស៊ីឬអត់៖ <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> ចង់ដឹងអំពីពេលវេលាដែលអ្នកមានវត្តមាន</translation> <translation id="3188393374551744535">សមតុល្យគណនី</translation> <translation id="3194737229810486521"><ph name="URL" /> ចង់ផ្ទុកទិន្នន័យនៅលើឧបករណ៍របស់អ្នកជាអចិន្ត្រៃយ៍</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> នៅលើ <ph name="SERVER_NAME" /></translation> @@ -1029,6 +1034,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">ម៉ាស៊ីន</translation> <translation id="5179510805599951267">មិនមែនជា <ph name="ORIGINAL_LANGUAGE" /> ទេ? រាយការណ៍កំហុសឆ្គងនេះ</translation> +<translation id="5179740473595559246">ដឹងអំពីពេលវេលាដែលអ្នកមានវត្តមាន</translation> <translation id="5190835502935405962">របាចំណាំ</translation> <translation id="519422657042045905">មិនមានចំណារទេ</translation> <translation id="5201306358585911203">ទំព័របង្កប់នៅលើទំព័រនេះនិយាយថា</translation> @@ -1251,6 +1257,7 @@ <translation id="6049488691372270142">ការចែកចាយទំព័រ</translation> <translation id="6051221802930200923">អ្នកមិនអាចចូលទៅកាន់ <ph name="SITE" /> ឥឡូវនេះបានទេ ដោយសារតែគេហទំព័រនេះប្រើការខ្ទាស់វិញ្ញាបនបត្រ។ ជាទូទៅបញ្ហាបណ្តាញ ឬការវាយប្រហារកើតឡើងជាបណ្តោះអាសន្ន ដូច្នេះទំព័រនេះនឹងដំណើរការល្អឡើងវិញនៅពេលក្រោយ។</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">ចែករំលែកវត្តមានរបស់អ្នកឬ?</translation> <translation id="6058977677006700226">ប្រើបណ្ណរបស់អ្នកនៅលើឧបករណ៍ទាំងអស់របស់អ្នកឬ?</translation> <translation id="6059925163896151826">ឧបករណ៍ USB</translation> <translation id="6060009363608157444">មុខងារ DnsOverHttps គ្មានសុពលភាព។</translation> @@ -1380,6 +1387,7 @@ <translation id="6631202559048444592">ប្រភពច្រើនជាងមួយមានវត្តមានសម្រាប់គោលការណ៍នេះ ប៉ុន្តែមានតម្លៃដូចគ្នា។</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">ជម្រះ</translation> +<translation id="6645291930348198241">ចូលប្រើទិន្នន័យគេហទំព័រ និងខូគី។</translation> <translation id="6646269444027925224">{COUNT,plural, =0{គ្មាន}=1{ពីទំព័រ 1 (អ្នកនឹងមិនចាកចេញពីគណនី Google របស់អ្នកទេ)}other{ពីទំព័រ # (អ្នកនឹងមិនចាកចេញពីគណនី Google របស់អ្នកទេ)}}</translation> <translation id="6648459603387803038">អ្នកគ្រប់គ្រងរបស់អ្នកអាចប្ដូរការរៀបចំកម្មវិធីរុករកតាមអ៊ីនធឺណិតរបស់អ្នកពីចម្ងាយបាន។ សកម្មភាពនៅលើឧបករណ៍នេះក៏អាចត្រូវបានគ្រប់គ្រងនៅក្រៅ Chrome ផងដែរ។</translation> <translation id="6652101503459149953">ប្រើ Windows Hello</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb index 81ba9fa..2778e72 100644 --- a/components/strings/components_strings_lt.xtb +++ b/components/strings/components_strings_lt.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Iš naujo prisijungti prie „Wi-Fi“</translation> <translation id="1165039591588034296">Klaida</translation> <translation id="1165174597379888365">Puslapyje apsilankyta</translation> +<translation id="1174723505405632867">Ar norite leisti <ph name="EMBEDDED_URL" /> naudoti slapukus ir svetainės duomenis <ph name="TOP_LEVEL_URL" />? + +Kitu atveju tai bus užblokuota pagal jūsų privatumo nustatymus. Taip turinys, su kuriuo sąveikaujate, veiks tinkamai, bet gali būti leidžiama <ph name="EMBEDDED_URL" /> stebėti jūsų veiklą.</translation> <translation id="1175364870820465910">&Spausdinti...</translation> <translation id="1175875016430184367">Trys sankabėlės dešinėje</translation> <translation id="1178581264944972037">Pristabdyti</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">Politika</translation> <translation id="2183608646556468874">Telefono numeris</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 adresas}one{# adresas}few{# adresai}many{# adreso}other{# adresų}}</translation> +<translation id="2187243482123994665">Naudotojo buvimas</translation> <translation id="2187317261103489799">Aptikti (numatytoji parinktis)</translation> <translation id="2188375229972301266">Kelios skylės apačioje</translation> <translation id="2202020181578195191">Įveskite tinkamus galiojimo laiko pabaigos metus</translation> @@ -534,6 +538,7 @@ serveris veikia. Jei manote, kad tarpinio serverio naudoti nereikia: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> nori žinoti, kada esate</translation> <translation id="3188393374551744535">Sąskaitos balansas</translation> <translation id="3194737229810486521"><ph name="URL" /> prašo leidimo nuolat saugoti duomenis jūsų įrenginyje</translation> <translation id="3195213714973468956">„<ph name="PRINTER_NAME" />“ serveryje „<ph name="SERVER_NAME" />“</translation> @@ -1026,6 +1031,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Įrenginys</translation> <translation id="5179510805599951267">Ne <ph name="ORIGINAL_LANGUAGE" /> k.? Pranešti apie šią klaidą</translation> +<translation id="5179740473595559246">Žinoti, kada esate</translation> <translation id="5190835502935405962">Žymių juosta</translation> <translation id="519422657042045905">Komentaras nepasiekiamas</translation> <translation id="5201306358585911203">Šiame puslapyje įterptame puslapyje nurodyta:</translation> @@ -1248,6 +1254,7 @@ <translation id="6049488691372270142">Puslapių teikimas</translation> <translation id="6051221802930200923">Šiuo metu negalite apsilankyti <ph name="SITE" />, nes svetainėje naudojamas sertifikatų prisegimas. Tinklo klaidos ir užpuolimai dažniausiai yra laikini, todėl šis puslapis vėliau tikriausiai veiks.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Bendrinti informaciją apie jūsų buvimą?</translation> <translation id="6058977677006700226">Naudojate korteles visuose įrenginiuose?</translation> <translation id="6059925163896151826">USB įrenginiai</translation> <translation id="6060009363608157444">Netinkamas „DnsOverHttps“ režimas.</translation> @@ -1377,6 +1384,7 @@ <translation id="6631202559048444592">Pateiktas daugiau nei vienas politikos šaltinis, bet vertės vienodos.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Išvalyti</translation> +<translation id="6645291930348198241">Pasiekti slapukus ir svetainės duomenis.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Nėra}=1{Iš 1 svetainės (nebūsite atjungti nuo „Google“ paskyros)}one{Iš # svetainės (nebūsite atjungti nuo „Google“ paskyros)}few{Iš # svetainių (nebūsite atjungti nuo „Google“ paskyros)}many{Iš # svetainės (nebūsite atjungti nuo „Google“ paskyros)}other{Iš # svetainių (nebūsite atjungti nuo „Google“ paskyros)}}</translation> <translation id="6648459603387803038">Administratorius gali nuotoliniu būdu keisti naršyklės sąranką. Veiklą šiame įrenginyje taip pat galima tvarkyti ne naršyklėje „Chrome“.</translation> <translation id="6652101503459149953">Naudoti „Windows Hello“</translation>
diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb index 52624b49..6b02b8f 100644 --- a/components/strings/components_strings_mk.xtb +++ b/components/strings/components_strings_mk.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Повторно да се поврзете на Wi-Fi</translation> <translation id="1165039591588034296">Грешка</translation> <translation id="1165174597379888365">Посетена е страница</translation> +<translation id="1174723505405632867">Дали сакате да дозволите <ph name="EMBEDDED_URL" /> да користи колачиња и податоци за сајтот на <ph name="TOP_LEVEL_URL" />? + +Во спротивно, ова ќе биде блокирано од вашите поставки за приватност. Ова ќе овозможи правилно функционирање на содржините со кои сте имале некаква интеракција, а можеби ќе му овозможи на сајтот <ph name="EMBEDDED_URL" /> да ја следи вашата активност.</translation> <translation id="1175364870820465910">&Печати...</translation> <translation id="1175875016430184367">Тројно спојување десно</translation> <translation id="1178581264944972037">Пауза</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">Политики</translation> <translation id="2183608646556468874">Телефонски број</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 адреса}one{# адреса}other{# адреси}}</translation> +<translation id="2187243482123994665">Присуство на корисник</translation> <translation id="2187317261103489799">Откриј (стандардно)</translation> <translation id="2188375229972301266">Повеќе дупки долу</translation> <translation id="2202020181578195191">Внесете важечка година на истекување</translation> @@ -533,6 +537,7 @@ на мрежата за да проверите дали работи прокси-серверот. Ако сметате дека не треба да користите прокси-сервер: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> сака да знае кога сте присутни</translation> <translation id="3188393374551744535">Состојба на сметката</translation> <translation id="3194737229810486521"><ph name="URL" /> сака трајно да складира податоци на вашиот уред</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> на <ph name="SERVER_NAME" /></translation> @@ -1025,6 +1030,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Машина</translation> <translation id="5179510805599951267">Не е на <ph name="ORIGINAL_LANGUAGE" />? Пријави ја грешката.</translation> +<translation id="5179740473595559246">да знае кога сте присутни</translation> <translation id="5190835502935405962">Лента со обележувачи</translation> <translation id="519422657042045905">Прибелешката не е достапна</translation> <translation id="5201306358585911203">Вметнатата страница во страницава вели</translation> @@ -1247,6 +1253,7 @@ <translation id="6049488691372270142">Испечатена страница</translation> <translation id="6051221802930200923">Не може да го посетите <ph name="SITE" /> во моментов затоа што веб-сајтот користи закачување сертификати. Грешките на мрежата и нападите обично се привремени, така што страницава веројатно ќе работи подоцна.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Да се сподели вашето присуство?</translation> <translation id="6058977677006700226">Дали сакате да ги користите картичките на сите ваши уреди?</translation> <translation id="6059925163896151826">USB-уреди</translation> <translation id="6060009363608157444">Погрешен режим на DnsOverHttps</translation> @@ -1376,6 +1383,7 @@ <translation id="6631202559048444592">Има повеќе извори за правилото, но вредностите се исти.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Исчисти</translation> +<translation id="6645291930348198241">да пристапува до колачиња и податоци за сајтот.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Ниту еден}=1{Од 1 сајт (нема да ве одјавиме од сметката на Google)}one{Од # сајт (нема да ве одјавиме од сметката на Google)}other{Од # сајтови (нема да ве одјавиме од сметката на Google)}}</translation> <translation id="6648459603387803038">Администраторот може далечински да го менува поставувањето на прелистувачот. Со активноста на уредов може да се управува и надвор од Chrome.</translation> <translation id="6652101503459149953">Користи Windows Hello</translation>
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb index 25c2a557..4baa03f0 100644 --- a/components/strings/components_strings_mn.xtb +++ b/components/strings/components_strings_mn.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Wi-Fi-д дахин холбогдож байна</translation> <translation id="1165039591588034296">Алдаа</translation> <translation id="1165174597379888365">Хуудсанд зочилдог</translation> +<translation id="1174723505405632867">Та <ph name="EMBEDDED_URL" />-д <ph name="TOP_LEVEL_URL" /> дээрх күүки болон сайтын өгөгдлийг ашиглахыг зөвшөөрөх үү? + +Үгүй бол таны нууцлалын тохиргооны дагуу үүнийг блоклоно. Энэ нь таны харилцан үйлдэл хийсэн контентод зохистой ажиллах боломжийг олгох боловч <ph name="EMBEDDED_URL" />-д таны үйл ажиллагааг хянахыг зөвшөөрч болзошгүй.</translation> <translation id="1175364870820465910">&Хэвлэх ...</translation> <translation id="1175875016430184367">Баруун талд гурван удаа үдэх</translation> <translation id="1178581264944972037">Түр зогсоох</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">Тохиргоонууд</translation> <translation id="2183608646556468874">Утасны дугаар</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 хаяг}other{# хаяг}}</translation> +<translation id="2187243482123994665">Хэрэглэгч байгаа эсэх</translation> <translation id="2187317261103489799">Илрүүлэх (өгөгдмөл)</translation> <translation id="2188375229972301266">Доод буланд олон нүх цоолох</translation> <translation id="2202020181578195191">Дуусах оныг зөв оруулна уу</translation> @@ -533,6 +537,7 @@ прокси сервер ажиллаж байгаа эсэхийг шалгана уу. Хэрэв та прокси сервер ашиглаж байгаадаа итгэлгүй байвал: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> таныг байгаа үед мэдэхийг хүсэж байна</translation> <translation id="3188393374551744535">Дансны үлдэгдэл</translation> <translation id="3194737229810486521"><ph name="URL" /> таны төхөөрөмжид өгөгдлийг бүрмөсөн хадгалах хүсэлтэй байна</translation> <translation id="3195213714973468956"><ph name="SERVER_NAME" /> дээрх <ph name="PRINTER_NAME" /></translation> @@ -1026,6 +1031,7 @@ <translation id="5171689220826475070">Фанфолд-Европ</translation> <translation id="5172758083709347301">Машин</translation> <translation id="5179510805599951267"><ph name="ORIGINAL_LANGUAGE" /> хэлээр байхгүй байна уу? Энэ алдааг мэдэгдэнэ үү.</translation> +<translation id="5179740473595559246">Таныг байгаа үед мэдэх</translation> <translation id="5190835502935405962">Хайлтын жагсаалтын цонх</translation> <translation id="519422657042045905">Тэмдэглэгээ боломжгүй байна</translation> <translation id="5201306358585911203">Энэ хуудсанд оруулсан хуудас хэлэхдээ</translation> @@ -1248,6 +1254,7 @@ <translation id="6049488691372270142">Цаасны гаралт</translation> <translation id="6051221802930200923"><ph name="SITE" /> нь сертификат баталгаажуулалтыг ашигладаг тул тус вэбсайтад одоогоор зочлох боломжгүй байна. Сүлжээний алдаа, халдлага нь ихэвчлэн түр зуурынх байдаг тул энэ хуудас удахгүй хэвийн ажиллана.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Байгаа эсэхээ хуваалцах уу?</translation> <translation id="6058977677006700226">Картаа бүх төхөөрөмж дээрээ ашиглах уу?</translation> <translation id="6059925163896151826">USB төхөөрөмж</translation> <translation id="6060009363608157444">DnsOverHttps горим буруу байна.</translation> @@ -1376,6 +1383,7 @@ <translation id="6631202559048444592">Удирдамжид нэгээс олон эх сурвалж байгаа хэдий ч утгууд нь ижил байна.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Цэвэрлэх</translation> +<translation id="6645291930348198241">Күүки болон сайтын өгөгдөлд хандах.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Байхгүй}=1{1 сайтаас (таныг Google Бүртгэлээс тань гаргахгүй)}other{# сайтаас (таныг Google Бүртгэлээс тань гаргахгүй)}}</translation> <translation id="6648459603387803038">Танай администратор хөтчийн тань тохируулгыг алсаас өөрчлөх боломжтой. Энэ төхөөрөмж дээрх үйл ажиллагааг мөн Chrome-с гадуур удирддаг байж болно.</translation> <translation id="6652101503459149953">Windows Hello-г ашиглах</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb index 28033bb4..1a18a6fe9 100644 --- a/components/strings/components_strings_ms.xtb +++ b/components/strings/components_strings_ms.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Menyambung semula kepada Wi-Fi</translation> <translation id="1165039591588034296">Ralat</translation> <translation id="1165174597379888365">Halaman dilawati</translation> +<translation id="1174723505405632867">Adakah anda mahu membenarkan <ph name="EMBEDDED_URL" /> menggunakan kuki dan data tapak pada <ph name="TOP_LEVEL_URL" />? + +Jika tidak, ini akan disekat oleh tetapan privasi anda. Kebenaran ini akan membolehkan kandungan yang mempunyai interaksi dengan anda berfungsi dengan betul, tetapi mungkin akan membenarkan <ph name="EMBEDDED_URL" /> menjejaki aktiviti anda.</translation> <translation id="1175364870820465910">&Cetak...</translation> <translation id="1175875016430184367">Tiga kokot kanan</translation> <translation id="1178581264944972037">Jeda</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">Dasar</translation> <translation id="2183608646556468874">Nombor Telefon</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 alamat}other{# alamat}}</translation> +<translation id="2187243482123994665">Kehadiran pengguna</translation> <translation id="2187317261103489799">Kesan (lalai)</translation> <translation id="2188375229972301266">Berbilang tebukan bawah</translation> <translation id="2202020181578195191">Masukkan tahun tamat tempoh yang sah</translation> @@ -533,6 +537,7 @@ memastikan pelayan proksi berfungsi. Jika anda tidak percaya anda perlu menggunakan pelayan proksi: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> ingin tahu waktu anda ada</translation> <translation id="3188393374551744535">Baki akaun</translation> <translation id="3194737229810486521"><ph name="URL" /> mahu menyimpan data pada peranti anda secara kekal</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> pada <ph name="SERVER_NAME" /></translation> @@ -1026,6 +1031,7 @@ <translation id="5171689220826475070">Fanfold-Eropah</translation> <translation id="5172758083709347301">Mesin</translation> <translation id="5179510805599951267">Bukan dalam <ph name="ORIGINAL_LANGUAGE" />? Laporkan ralat ini</translation> +<translation id="5179740473595559246">Tahu waktu anda ada</translation> <translation id="5190835502935405962">Bar Penanda Halaman</translation> <translation id="519422657042045905">Anotasi tidak tersedia</translation> <translation id="5201306358585911203">Halaman terbenam pada halaman ini menyatakan</translation> @@ -1248,6 +1254,7 @@ <translation id="6049488691372270142">Penghantaran halaman</translation> <translation id="6051221802930200923">Anda tidak boleh melawati <ph name="SITE" /> sekarang kerana tapak web ini menggunakan penyematan sijil. Ralat dan serangan rangkaian biasanya bersifat sementara. Oleh sebab itu, halaman ini mungkin akan berfungsi semula kemudian.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Kongsi kehadiran anda?</translation> <translation id="6058977677006700226">Gunakan kad anda pada semua peranti anda?</translation> <translation id="6059925163896151826">Peranti USB</translation> <translation id="6060009363608157444">Mod DnsOverHttps tidak sah.</translation> @@ -1377,6 +1384,7 @@ <translation id="6631202559048444592">Lebih daripada satu sumber terdapat dalam dasar ini, tetapi nilainya sama.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Kosongkan</translation> +<translation id="6645291930348198241">Akses kuki dan data tapak.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Tiada}=1{Daripada 1 tapak (anda tidak akan dilog keluar daripada Akaun Google anda)}other{Daripada # tapak (anda tidak akan dilog keluar daripada Akaun Google anda)}}</translation> <translation id="6648459603387803038">Pentadbir anda boleh menukar persediaan penyemak imbas anda dari jauh. Aktiviti pada peranti ini mungkin turut diurus di luar Chrome.</translation> <translation id="6652101503459149953">Gunakan Windows Hello</translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb index 6f67653..cddcb707 100644 --- a/components/strings/components_strings_my.xtb +++ b/components/strings/components_strings_my.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Wi-Fi သို့ပြန်လည်ချိတ်ဆက်နေသည်</translation> <translation id="1165039591588034296">အမှား</translation> <translation id="1165174597379888365">စာမျက်နှာကို ဝင်ကြည့်ခဲ့သည်</translation> +<translation id="1174723505405632867"><ph name="TOP_LEVEL_URL" /> တွင် ကွတ်ကီးနှင့် ဝဘ်ဆိုက်ဒေတာများ သုံးရန် <ph name="EMBEDDED_URL" /> ကို ခွင့်ပြုလိုသလား။ + +သို့မဟုတ်ပါက ၎င်းကို သင့်ပုဂ္ဂိုလ်ရေးဆက်တင်များက ပိတ်ထားပါမည်။ ၎င်းက သင်နှင့်ပြန်လှန်တုံ့ပြန်သော အကြောင်းအရာများကို မှန်ကန်စွာ လုပ်ဆောင်ခွင့်ပြုမည် ဖြစ်သော်လည်း သင့်လုပ်ဆောင်ချက်ကို <ph name="EMBEDDED_URL" /> အား ခြေရာခံခွင့်ပြုနိုင်သည်။</translation> <translation id="1175364870820465910">&ပရင့်ထုတ်ရန်...</translation> <translation id="1175875016430184367">ညာဘက်တွင် ချုပ်စက်ဖြင့် သုံးချက်ချုပ်ရန်</translation> <translation id="1178581264944972037">ဆိုင်းငံ့ထားရန်</translation> @@ -311,6 +314,7 @@ <translation id="2181821976797666341">ပေါ်လစီများ</translation> <translation id="2183608646556468874">ဖုန်းနံပါတ်</translation> <translation id="2184405333245229118">{COUNT,plural, =1{လိပ်စာ ၁ ခု}other{လိပ်စာ # ခု}}</translation> +<translation id="2187243482123994665">အသုံးပြုသူ ရှိနေမှု</translation> <translation id="2187317261103489799">ရှာကြည့်ရန် (မူရင်း)</translation> <translation id="2188375229972301266">အောက်ခြေတွင် အများအပြားဖောက်ရန်</translation> <translation id="2202020181578195191">မှန်ကန်သည့် ကုန်ဆုံးမည့်ခုနှစ်ကို ထည့်ပါ</translation> @@ -534,6 +538,7 @@ <translation id="3169472444629675720">Discover</translation> <translation id="3174168572213147020">ကျွန်း</translation> <translation id="3176929007561373547">ဤပရော့စီဆာဗာအလုပ်လုပ်ကြောင်း သေချာမှုရှိစေရန် သင့်ပရော့စီဆက်တင်ကို စစ်ဆေးပါ သို့မဟုတ် သင့်ကွန်ယက်စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။ အကယ်၍သင်မယုံကြည်လျှင် ပရော့စီဆာဗာကို အသုံးပြုသင့်သည် − <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456">သင်ရှိနေသည်ကို <ph name="URL" /> က သိလိုသည်</translation> <translation id="3188393374551744535">အကောင့် လက်ကျန်ငွေ</translation> <translation id="3194737229810486521"><ph name="URL" /> သည် ဒေတာများကို သင်၏စက်တွင် အမြဲတမ်းသိုလှောင်လိုသည်</translation> <translation id="3195213714973468956"><ph name="SERVER_NAME" /> ရှိ <ph name="PRINTER_NAME" /></translation> @@ -1025,6 +1030,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">စက်</translation> <translation id="5179510805599951267"><ph name="ORIGINAL_LANGUAGE" />တွင် မရှိဘူးလား? ဤမှားယွင်းချက်ကို အစီရင်ခံမည်။</translation> +<translation id="5179740473595559246">သင်ရှိနေသည်ကို သိခြင်း</translation> <translation id="5190835502935405962">စာညှပ် ဘား</translation> <translation id="519422657042045905">မှတ်ချက် မရနိုင်ပါ</translation> <translation id="5201306358585911203">ဤစာမျက်နှာပေါ်တွင် ထည့်ထားသည့် စာမျက်နှာက ဆိုထားသည်မှာ</translation> @@ -1247,6 +1253,7 @@ <translation id="6049488691372270142">စာမျက်နှာ ပေးပို့မှု</translation> <translation id="6051221802930200923"><ph name="SITE" /> သည် အသိအမှတ်ပြုလက်မှတ်တုပခြင်းအား ခုခံကာကွယ်သည့်စနစ်ကို အသုံးပြုထားသောကြောင့် ၎င်းအား လောလောဆယ် ဖွင့်၍မရပါ။ ကွန်ရက်အမှားအယွင်းများနှင့် တိုက်ခိုက်မှုများမှာ ပုံမှန်အားဖြင့် ခဏတာသာ ဖြစ်သည့်အတွက် ဤစာမျက်နှာကို နောက်ပိုင်းတွင် ပြန်ဖွင့်၍ရနိုင်ပါသည်။</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">သင်ရှိနေမှုကို မျှဝေမလား။</translation> <translation id="6058977677006700226">သင့်စက်များအားလုံးတွင် ကတ်များကို အသုံးပြုမလား။</translation> <translation id="6059925163896151826">USB စက်ပစ္စည်းများ</translation> <translation id="6060009363608157444">DnsOverHttps မုဒ် မမှန်ပါ။</translation> @@ -1375,6 +1382,7 @@ <translation id="6631202559048444592">မူဝါဒအတွက် ရင်းမြစ် တစ်ခုမကရှိသော်လည်း တန်ဖိုးများ အတူတူဖြစ်သည်။</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">ရှင်းရန်</translation> +<translation id="6645291930348198241">ကွတ်ကီးနှင့် ဝဘ်ဆိုက်ဒေတာများ သုံးခြင်း။</translation> <translation id="6646269444027925224">{COUNT,plural, =0{တစ်ခုမျှမရှိပါ}=1{ဝဘ်ဆိုက် ၁ ခုမှ (သင်၏ Google အကောင့်မှနေ၍ ထွက်သွားမည်မဟုတ်ပါ)}other{ဝဘ်ဆိုက် # ခုမှ (သင်၏ Google အကောင့်မှနေ၍ ထွက်သွားမည်မဟုတ်ပါ)}}</translation> <translation id="6648459603387803038">သင့်စီမံခန့်ခွဲသူက သင်၏ဘရောင်ဇာ စနစ်ထည့်သွင်းမှုကို အဝေးမှ ပြောင်းလဲနိုင်ပါသည်။ ဤစက်ပေါ်ရှိ လုပ်ဆောင်ချက်များကိုလည်း Chrome ပြင်ပမှ စီမံခန့်ခွဲထားခြင်း ဖြစ်နိုင်သည်။</translation> <translation id="6652101503459149953">'Windows ဟယ်လို' သုံးရန်</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb index 3fb91944..58097dc 100644 --- a/components/strings/components_strings_nl.xtb +++ b/components/strings/components_strings_nl.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Maak opnieuw verbinding met wifi</translation> <translation id="1165039591588034296">Fout</translation> <translation id="1165174597379888365">Pagina is bezocht</translation> +<translation id="1174723505405632867">Wil je toestaan dat <ph name="EMBEDDED_URL" /> cookies en sitegegevens gebruikt op <ph name="TOP_LEVEL_URL" />? + +Anders wordt dit geblokkeerd door je privacyinstellingen. Hierdoor werkt de content die je hebt gebruikt correct, maar kan <ph name="EMBEDDED_URL" /> mogelijk je activiteit bijhouden.</translation> <translation id="1175364870820465910">&Afdrukken...</translation> <translation id="1175875016430184367">Drie nietjes rechts</translation> <translation id="1178581264944972037">Onderbreken</translation> @@ -306,6 +309,7 @@ <translation id="2181821976797666341">Beleid</translation> <translation id="2183608646556468874">Telefoonnummer</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 adres}other{# adressen}}</translation> +<translation id="2187243482123994665">Aanwezigheid van gebruiker</translation> <translation id="2187317261103489799">Detecteren (standaard)</translation> <translation id="2188375229972301266">Meerdere perforaties onder</translation> <translation id="2202020181578195191">Geef een geldig vervaljaar op</translation> @@ -424,7 +428,7 @@ <translation id="2702801445560668637">Leeslijst</translation> <translation id="2704283930420550640">Waarde komt niet overeen met notatie.</translation> <translation id="2705137772291741111">De in het cachegeheugen opgeslagen versie van deze site is niet bereikbaar.</translation> -<translation id="2709516037105925701">Automatisch aanvullen</translation> +<translation id="2709516037105925701">Automatisch invullen</translation> <translation id="2713444072780614174">Wit</translation> <translation id="2715612312510870559"><ph name="UPDATE_CREDIT_CARD_FOCUSED_FRIENDLY_MATCH_TEXT" />. Druk op Tab en vervolgens op Enter om je betalingen en creditcardgegevens te beheren in de Chrome-instellingen.</translation> <translation id="2721148159707890343">Verzoek geslaagd</translation> @@ -525,6 +529,7 @@ <translation id="3169472444629675720">Discover</translation> <translation id="3174168572213147020">Eiland</translation> <translation id="3176929007561373547">Controleer je proxyinstellingen of neem contact op met je netwerkbeheerder om te controleren of de proxyserver werkt. Als je denkt dat je geen proxyserver zou moeten gebruiken: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> wil weten wanneer je aanwezig bent</translation> <translation id="3188393374551744535">Accountsaldo</translation> <translation id="3194737229810486521"><ph name="URL" /> vraagt toestemming om gegevens permanent op je apparaat op te slaan</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> op <ph name="SERVER_NAME" /></translation> @@ -845,7 +850,7 @@ <translation id="4435702339979719576">Briefkaart</translation> <translation id="443673843213245140">Het gebruik van een proxy is uitgeschakeld, maar er is wel een expliciete proxyconfiguratie opgegeven.</translation> <translation id="4466881336512663640">Hiermee gaan formulierwijzigingen verloren. Weet je zeker dat je wilt doorgaan?</translation> -<translation id="4476953670630786061">Dit formulier is niet beveiligd. Automatisch aanvullen is uitgeschakeld.</translation> +<translation id="4476953670630786061">Dit formulier is niet beveiligd. Automatisch invullen is uitgeschakeld.</translation> <translation id="4477350412780666475">Volgend nummer</translation> <translation id="4482953324121162758">Deze site wordt niet vertaald.</translation> <translation id="4490717597759821841">A7</translation> @@ -1015,6 +1020,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Computer</translation> <translation id="5179510805599951267">Niet in het <ph name="ORIGINAL_LANGUAGE" />? Deze fout melden</translation> +<translation id="5179740473595559246">Weten wanneer je aanwezig bent</translation> <translation id="5190835502935405962">Bookmarkbalk</translation> <translation id="519422657042045905">Annotatie niet beschikbaar</translation> <translation id="5201306358585911203">Een ingesloten pagina op deze pagina meldt het volgende</translation> @@ -1237,6 +1243,7 @@ <translation id="6049488691372270142">Pagina-uitvoer</translation> <translation id="6051221802930200923">Je kunt <ph name="SITE" /> momenteel niet bezoeken, omdat de website gebruikmaakt van certificaatpinning. Netwerkfouten en aanvallen zijn doorgaans tijdelijk, dus deze pagina werkt later waarschijnlijk correct.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Je aanwezigheid delen?</translation> <translation id="6058977677006700226">Je passen gebruiken op al je apparaten?</translation> <translation id="6059925163896151826">USB-apparaten</translation> <translation id="6060009363608157444">Ongeldige DnsOverHttps-modus.</translation> @@ -1365,6 +1372,7 @@ <translation id="6631202559048444592">Er zijn meerdere bronnen aanwezig voor het beleid, maar de waarden zijn gelijk.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Wissen</translation> +<translation id="6645291930348198241">Toegang krijgen tot cookies en sitegegevens.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Geen}=1{Van 1 site (je wordt niet uitgelogd bij je Google-account)}other{Van # sites (je wordt niet uitgelogd bij je Google-account)}}</translation> <translation id="6648459603387803038">Je beheerder kan je browserinstellingen op afstand wijzigen. Activiteit op dit apparaat kan ook buiten Chrome worden beheerd.</translation> <translation id="6652101503459149953">Windows Hello gebruiken</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index 905433e..b934a14 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Koble til Wi-Fi på nytt</translation> <translation id="1165039591588034296">Feil</translation> <translation id="1165174597379888365">En nettside besøkes</translation> +<translation id="1174723505405632867">Vil du gi <ph name="EMBEDDED_URL" /> tillatelse til å bruke informasjonskapsler og nettstedsdata på <ph name="TOP_LEVEL_URL" />? + +I motsatt fall blir dette blokkert av personverninnstillingene. Dette gjør at innholdet du brukte, får lov til å fungere som det skal, men det kan også gjøre det mulig for <ph name="EMBEDDED_URL" /> å spore aktiviteten din.</translation> <translation id="1175364870820465910">&Skriv ut...</translation> <translation id="1175875016430184367">Tre stifter høyre</translation> <translation id="1178581264944972037">Stans midlertidig</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">Retningslinjer</translation> <translation id="2183608646556468874">Telefonnummer</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 adresse}other{# adresser}}</translation> +<translation id="2187243482123994665">Brukertilstedeværelse</translation> <translation id="2187317261103489799">Oppdag (standard)</translation> <translation id="2188375229972301266">Flere hull bunn</translation> <translation id="2202020181578195191">Angi et gyldig utløpsår</translation> @@ -533,6 +537,7 @@ for å forsikre deg om at den fungerer. Følg disse instruksjonene hvis du ikke tror du trenger å bruke noen proxy-tjener: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> vil vite når du er til stede</translation> <translation id="3188393374551744535">Kontosaldo</translation> <translation id="3194737229810486521"><ph name="URL" /> ber om å lagre data permanent på enheten din</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> på <ph name="SERVER_NAME" /></translation> @@ -1025,6 +1030,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Datamaskin</translation> <translation id="5179510805599951267">Er ikke dette <ph name="ORIGINAL_LANGUAGE" />? Rapportér denne feilen</translation> +<translation id="5179740473595559246">vite når du er til stede</translation> <translation id="5190835502935405962">Bokmerkerad</translation> <translation id="519422657042045905">Annotering er ikke tilgjengelig</translation> <translation id="5201306358585911203">På en innebygd side på denne siden står det</translation> @@ -1247,6 +1253,7 @@ <translation id="6049488691372270142">Sidelevering</translation> <translation id="6051221802930200923">Du kan ikke gå til <ph name="SITE" /> akkurat nå, siden nettstedet bruker sertifikatfesting. Nettverksfeil og -angrep er vanligvis midlertidige, så denne siden fungerer sannsynligvis senere.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Vil du dele tilstedeværelsen din?</translation> <translation id="6058977677006700226">Vil du bruke kortene på alle enhetene dine?</translation> <translation id="6059925163896151826">USB-enheter</translation> <translation id="6060009363608157444">Ugyldig DnsOverHttps-modus.</translation> @@ -1376,6 +1383,7 @@ <translation id="6631202559048444592">Regelen har mer enn én kilde, men verdiene er like.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Tøm</translation> +<translation id="6645291930348198241">få tilgang til informasjonskapsler og nettstedsdata</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Ingen}=1{Fra 1 nettsted (du blir ikke logget av Google-kontoen din)}other{Fra # nettsteder (du blir ikke logget av Google-kontoen din)}}</translation> <translation id="6648459603387803038">Administratoren kan endre nettleseroppsettet eksternt. Aktiviteten på denne enheten kan også administreres utenfor Chrome.</translation> <translation id="6652101503459149953">Bruk Windows Hello</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb index 63117d7..73e9054 100644 --- a/components/strings/components_strings_pl.xtb +++ b/components/strings/components_strings_pl.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Ponownie połącz się z Wi-Fi</translation> <translation id="1165039591588034296">Błąd</translation> <translation id="1165174597379888365">Odwiedzono stronę</translation> +<translation id="1174723505405632867">Czy chcesz zezwolić stronie <ph name="EMBEDDED_URL" /> na używanie plików cookie i danych witryn ze strony <ph name="TOP_LEVEL_URL" />? + +Jeśli się nie zgodzisz, zostaną one zablokowane ze względu na Twoje ustawienia prywatności. Jeśli wyrazisz zgodę, to treści, z którymi wchodzisz w interakcję, będą działać prawidłowo, ale strona <ph name="EMBEDDED_URL" /> może zacząć śledzić Twoją aktywność.</translation> <translation id="1175364870820465910">&Drukuj...</translation> <translation id="1175875016430184367">Trzy zszywki po prawej</translation> <translation id="1178581264944972037">Wstrzymaj</translation> @@ -305,6 +308,7 @@ <translation id="2181821976797666341">Zasady</translation> <translation id="2183608646556468874">Numer telefonu</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 adres}few{# adresy}many{# adresów}other{# adresu}}</translation> +<translation id="2187243482123994665">Obecność użytkownika</translation> <translation id="2187317261103489799">Wykrywaj (domyślnie)</translation> <translation id="2188375229972301266">Wiele otworów na dole</translation> <translation id="2202020181578195191">Wpisz rok w prawidłowym formacie</translation> @@ -529,6 +533,7 @@ by upewnić się, że serwer proxy działa. Jeśli uważasz, że nie powinien być on używany: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456">Strona <ph name="URL" /> chce wiedzieć, kiedy używasz urządzenia</translation> <translation id="3188393374551744535">Saldo konta</translation> <translation id="3194737229810486521"><ph name="URL" /> chce na stałe przechowywać dane na Twoim urządzeniu</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> na serwerze <ph name="SERVER_NAME" /></translation> @@ -1016,6 +1021,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Komputer</translation> <translation id="5179510805599951267">Jeśli to nie jest język <ph name="ORIGINAL_LANGUAGE" />, zgłoś błąd</translation> +<translation id="5179740473595559246">Wiedzieć, kiedy używasz urządzenia</translation> <translation id="5190835502935405962">Pasek zakładek</translation> <translation id="519422657042045905">Adnotacja niedostępna</translation> <translation id="5201306358585911203">Komunikat z elementu umieszczonego na bieżącej stronie</translation> @@ -1238,6 +1244,7 @@ <translation id="6049488691372270142">Podawanie stron</translation> <translation id="6051221802930200923">Nie możesz teraz otworzyć strony <ph name="SITE" />, ponieważ stosuje ona przypinanie certyfikatów. Błędy sieciowe i ataki są zazwyczaj tymczasowe, więc prawdopodobnie strona będzie dostępna później.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Chcesz udostępniać informacje o obecności?</translation> <translation id="6058977677006700226">Chcesz używać swoich kart na wszystkich urządzeniach?</translation> <translation id="6059925163896151826">Urządzenia USB</translation> <translation id="6060009363608157444">Nieprawidłowy tryb DnsOverHttps.</translation> @@ -1367,6 +1374,7 @@ <translation id="6631202559048444592">Dla tej zasady określono więcej niż jedno źródło, ale wartości tych źródeł są jednakowe.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Wyczyść</translation> +<translation id="6645291930348198241">Dostęp do plików cookie i danych witryn.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Brak}=1{Z 1 witryny (nie spowoduje to wylogowania z konta Google)}few{Z # witryn (nie spowoduje to wylogowania z konta Google)}many{Z # witryn (nie spowoduje to wylogowania z konta Google)}other{Z # witryny (nie spowoduje to wylogowania z konta Google)}}</translation> <translation id="6648459603387803038">Administrator może zdalnie zmienić konfigurację przeglądarki. Aktywność na tym urządzeniu może być zarządzana również poza Chrome.</translation> <translation id="6652101503459149953">Używaj Windows Hello</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index 2cf6a8e..fcdaa7b4 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Conectar à rede Wi-Fi novamente</translation> <translation id="1165039591588034296">Erro</translation> <translation id="1165174597379888365">Uma página é acessada</translation> +<translation id="1174723505405632867">Você quer permitir que <ph name="EMBEDDED_URL" /> use cookies e dados do site em <ph name="TOP_LEVEL_URL" />? + +Se não fizer isso, a permissão será bloqueada pelas configurações de privacidade. Se permitir, o conteúdo com que você interagiu funcionará corretamente, mas <ph name="EMBEDDED_URL" /> poderá rastrear suas atividades.</translation> <translation id="1175364870820465910">&Imprimir...</translation> <translation id="1175875016430184367">Três grampos no lado direito</translation> <translation id="1178581264944972037">Pausar</translation> @@ -305,6 +308,7 @@ <translation id="2181821976797666341">Políticas</translation> <translation id="2183608646556468874">Número de telefone</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 endereço}one{# endereço}other{# endereços}}</translation> +<translation id="2187243482123994665">Presença do usuário</translation> <translation id="2187317261103489799">Detectar (padrão)</translation> <translation id="2188375229972301266">Perfuração múltipla na parte inferior</translation> <translation id="2202020181578195191">Informe um ano de validade válido</translation> @@ -527,6 +531,7 @@ verificar se o servidor proxy está funcionando. Se você acredita que não deve usar um servidor proxy: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> quer saber quando você está presente</translation> <translation id="3188393374551744535">Saldo da conta</translation> <translation id="3194737229810486521"><ph name="URL" /> quer armazenar permanentemente os dados no seu dispositivo</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> em <ph name="SERVER_NAME" /></translation> @@ -1014,6 +1019,7 @@ <translation id="5171689220826475070">Fanfold European</translation> <translation id="5172758083709347301">Máquina</translation> <translation id="5179510805599951267">Não está em <ph name="ORIGINAL_LANGUAGE" />? Informe este erro</translation> +<translation id="5179740473595559246">Saber quando você está presente</translation> <translation id="5190835502935405962">Barra de favoritos</translation> <translation id="519422657042045905">Anotação indisponível</translation> <translation id="5201306358585911203">Uma página incorporada nesta página diz</translation> @@ -1236,6 +1242,7 @@ <translation id="6049488691372270142">Entrega de página</translation> <translation id="6051221802930200923">Não é possível acessar <ph name="SITE" /> no momento, porque o site usa bloqueio de certificados. Como os ataques e erros de rede são geralmente temporários, esta pagina provavelmente funcionará mais tarde.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Compartilhar sua presença?</translation> <translation id="6058977677006700226">Usar seus cartões em todos os dispositivos?</translation> <translation id="6059925163896151826">Dispositivos USB</translation> <translation id="6060009363608157444">Modo DnsOverHttps inválido.</translation> @@ -1365,6 +1372,7 @@ <translation id="6631202559048444592">Há mais de uma fonte para esta política, mas os valores são os mesmos.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Limpar</translation> +<translation id="6645291930348198241">Acesso a cookies e dados do site.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Nenhum}=1{De 1 site (você não será desconectado da sua Conta do Google)}one{De # site (você não será desconectado da sua Conta do Google)}other{De # sites (você não será desconectado da sua Conta do Google)}}</translation> <translation id="6648459603387803038">O administrador pode mudar as configurações do navegador remotamente. A atividade deste dispositivo também pode ser gerenciada fora do Chrome.</translation> <translation id="6652101503459149953">Usar Windows Hello</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb index 6eca88c..7e7cb00 100644 --- a/components/strings/components_strings_pt-PT.xtb +++ b/components/strings/components_strings_pt-PT.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Ligar novamente à rede Wi-Fi</translation> <translation id="1165039591588034296">Erro</translation> <translation id="1165174597379888365">A página é visitada</translation> +<translation id="1174723505405632867">Pretende permitir que <ph name="EMBEDDED_URL" /> utilize cookies e dados de sites em <ph name="TOP_LEVEL_URL" />? + +Se não permitir, isto será bloqueado pelas suas definições de privacidade. Isto vai permitir que o conteúdo com o qual interagiu funcione corretamente, mas pode permitir que <ph name="EMBEDDED_URL" /> monitorize a sua atividade.</translation> <translation id="1175364870820465910">Im&primir...</translation> <translation id="1175875016430184367">Agrafo triplo à direita</translation> <translation id="1178581264944972037">Pausa</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">Políticas</translation> <translation id="2183608646556468874">Número de telefone</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 endereço}other{# endereços}}</translation> +<translation id="2187243482123994665">Presença do utilizador</translation> <translation id="2187317261103489799">Detetar (predefinição)</translation> <translation id="2188375229972301266">Perfuração múltipla na parte inferior</translation> <translation id="2202020181578195191">Introduza um ano de expiração válido</translation> @@ -533,6 +537,7 @@ se certificar de que o servidor proxy está a funcionar. Se achar que não deve utilizar um servidor proxy: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> pretende saber quando está presente.</translation> <translation id="3188393374551744535">Saldo da conta</translation> <translation id="3194737229810486521"><ph name="URL" /> pretende armazenar permanentemente dados no seu dispositivo.</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> no servidor <ph name="SERVER_NAME" /></translation> @@ -1025,6 +1030,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Equipamento</translation> <translation id="5179510805599951267">Não está em <ph name="ORIGINAL_LANGUAGE" />? Comunicar este erro</translation> +<translation id="5179740473595559246">Saber quando está presente.</translation> <translation id="5190835502935405962">Barra de marcadores</translation> <translation id="519422657042045905">As notas não estão disponíveis.</translation> <translation id="5201306358585911203">Uma página incorporada nesta página diz</translation> @@ -1247,6 +1253,7 @@ <translation id="6049488691372270142">Fornecimento da página</translation> <translation id="6051221802930200923">Não pode visitar <ph name="SITE" /> neste momento, porque o Website utiliza a afixação de certificados. Os erros de rede e os ataques são geralmente temporários, pelo que esta página deverá funcionar mais tarde.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Pretende partilhar a sua presença?</translation> <translation id="6058977677006700226">Pretende utilizar os seus cartões em todos os seus dispositivos?</translation> <translation id="6059925163896151826">Dispositivos USB</translation> <translation id="6060009363608157444">Modo DnsOverHttps inválido.</translation> @@ -1376,6 +1383,7 @@ <translation id="6631202559048444592">Existe mais de uma origem para a política, mas os valores são iguais.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Limpar</translation> +<translation id="6645291930348198241">Aceder aos cookies e dados de sites.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Nenhum}=1{De 1 site (a sessão na sua Conta Google não é terminada).}other{De # sites (a sessão na sua Conta Google não é terminada).}}</translation> <translation id="6648459603387803038">O administrador pode alterar a configuração do navegador remotamente. A atividade neste dispositivo também pode ser gerida fora do Chrome.</translation> <translation id="6652101503459149953">Utilizar o Windows Hello</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index 9e01301..148a7ee 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Подключитесь к сети Wi-Fi ещё раз.</translation> <translation id="1165039591588034296">Ошибка</translation> <translation id="1165174597379888365">Посещена страница</translation> +<translation id="1174723505405632867">Разрешить сайту <ph name="EMBEDDED_URL" /> использовать файлы cookie и данные сайта <ph name="TOP_LEVEL_URL" />? + +Если вы не предоставите разрешение, доступ будет заблокирован настройками конфиденциальности. Если вы предоставите разрешение, контент, с которым вы взаимодействуете, будет отображаться корректно, однако сайт <ph name="EMBEDDED_URL" /> получит доступ к сведениям о ваших действиях.</translation> <translation id="1175364870820465910">&Печать...</translation> <translation id="1175875016430184367">Три скобы справа</translation> <translation id="1178581264944972037">Пауза</translation> @@ -305,6 +308,7 @@ <translation id="2181821976797666341">Правила</translation> <translation id="2183608646556468874">Номер телефона</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 адрес}one{# адрес}few{# адреса}many{# адресов}other{# адреса}}</translation> +<translation id="2187243482123994665">Присутствие пользователя</translation> <translation id="2187317261103489799">Определять (по умолчанию)</translation> <translation id="2188375229972301266">Несколько отверстий снизу</translation> <translation id="2202020181578195191">Недопустимый формат года.</translation> @@ -526,6 +530,7 @@ <translation id="3176929007561373547">Проверьте настройки прокси-сервера или попросите администратора задать верные параметры. В противном случае^ <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456">Сайт <ph name="URL" /> запрашивает информацию о вашем присутствии.</translation> <translation id="3188393374551744535">Баланс</translation> <translation id="3194737229810486521">Сайт <ph name="URL" /> запрашивает разрешение на постоянное хранение данных на вашем устройстве.</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> на <ph name="SERVER_NAME" /></translation> @@ -1013,6 +1018,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Локальный компьютер</translation> <translation id="5179510805599951267">Это не <ph name="ORIGINAL_LANGUAGE" />? Сообщите об ошибке</translation> +<translation id="5179740473595559246">Сообщать о вашем присутствии.</translation> <translation id="5190835502935405962">Панель закладок</translation> <translation id="519422657042045905">В этот PDF-файл нельзя добавлять заметки</translation> <translation id="5201306358585911203">Подтвердите действие</translation> @@ -1235,6 +1241,7 @@ <translation id="6049488691372270142">Выдача страниц</translation> <translation id="6051221802930200923">Веб-сайт <ph name="SITE" /> использует механизм Certificate Pinning, поэтому на нем могла произойти подмена сертификата. Открыть сайт в настоящее время нельзя. Сбой мог быть вызван сетевой ошибкой или действиями злоумышленников. Скорее всего, сайт заработает через некоторое время.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Передавать информацию о вашем присутствии?</translation> <translation id="6058977677006700226">Хотите использовать карты на всех устройствах?</translation> <translation id="6059925163896151826">USB-устройства</translation> <translation id="6060009363608157444">Недопустимый режим DnsOverHttps.</translation> @@ -1364,6 +1371,7 @@ <translation id="6631202559048444592">Для этого правила существует более одного источника с одинаковыми значениями.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Удалить</translation> +<translation id="6645291930348198241">Доступ к файлам cookie и данным сайта.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Нет}=1{С 1 сайта (вы останетесь в аккаунте Google)}one{С # сайта (вы останетесь в аккаунте Google)}few{С # сайтов (вы останетесь в аккаунте Google)}many{С # сайтов (вы останетесь в аккаунте Google)}other{С # сайта (вы останетесь в аккаунте Google)}}</translation> <translation id="6648459603387803038">Администратор может удаленно менять настройки браузера и управлять действиями вне браузера Chrome на этом устройстве.</translation> <translation id="6652101503459149953">Использовать Windows Hello</translation>
diff --git a/components/strings/components_strings_si.xtb b/components/strings/components_strings_si.xtb index b716afd..70b9ead3 100644 --- a/components/strings/components_strings_si.xtb +++ b/components/strings/components_strings_si.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Wi-Fi වෙත යළි සම්බන්ධ වෙමින්</translation> <translation id="1165039591588034296">දෝෂයක්</translation> <translation id="1165174597379888365">පිටුවට පිවිසේ</translation> +<translation id="1174723505405632867">ඔබට <ph name="EMBEDDED_URL" /> හට <ph name="TOP_LEVEL_URL" /> මත කුකී සහ අඩවි දත්ත භාවිත කිරීමට ඉඩ දීමට අවශ්යද? + +මෙය එසේ නැතිනම් ඔබේ පෞද්ගලිකත්ව සැකසීම් මඟින් අවහිර කරනු ඇත. මෙය ඔබ අන්තර්ක්රියා කළ අන්තර්ගතයට නිවැරදිව ක්රියා කිරීමට ඉඩ දෙන නමුත් <ph name="EMBEDDED_URL" /> හට ඔබේ ක්රියාකාරකම හඹා යාමට ඉඩ දිය හැකිය.</translation> <translation id="1175364870820465910">&මුද්රණය...</translation> <translation id="1175875016430184367">දකුණට තුන් වරක් ස්ටේපල් කරන්න</translation> <translation id="1178581264944972037">විරාමය</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">ප්රතිපත්ති</translation> <translation id="2183608646556468874">දුරකථන අංකය</translation> <translation id="2184405333245229118">{COUNT,plural, =1{ලිපින 1}one{ලිපින #}other{ලිපින #}}</translation> +<translation id="2187243482123994665">පරිශීලකයාගේ සිටීම</translation> <translation id="2187317261103489799">හදුනාගන්න (පෙරනිමි)</translation> <translation id="2188375229972301266">පහළට ඇනීම් බොහොමයක්</translation> <translation id="2202020181578195191">වලංගු කල් ඉකුත් වීමේ වසරක් ඇතුළු කරන්න</translation> @@ -531,6 +535,7 @@ තහවුරු කරගැනීමට ඔබේ ජාල පරිපාලක අමතන්න. ඔබ ප්රොක්සි සේවාදායකයක් භාවිත කළ යුතු බව ඔබ විශ්වාස නොකරන්නේ නම්: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> හට ඔබ සිටින වේලාව දැන ගැනීමට අවශ්යයි</translation> <translation id="3188393374551744535">ගිණුම් ශේෂය</translation> <translation id="3194737229810486521"><ph name="URL" /> හට ඔබේ උපාංගයේ දත්ත ස්ථිරව ගබඩා කිරීමට අවශ්යයි</translation> <translation id="3195213714973468956"><ph name="SERVER_NAME" /> මත <ph name="PRINTER_NAME" /></translation> @@ -1020,6 +1025,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">යන්ත්රය</translation> <translation id="5179510805599951267"><ph name="ORIGINAL_LANGUAGE" /> තුළ නැතිද? මෙම දෝෂය වාර්තා කරන්න</translation> +<translation id="5179740473595559246">ඔබ සිටින්නේ මොන වේලාවටදැයි දැන ගැනීමට</translation> <translation id="5190835502935405962">පොත්සලකුණු තීරුව</translation> <translation id="519422657042045905">අනුසටහන නොලැබේ</translation> <translation id="5201306358585911203">මෙම පිටුවෙහි කාවැද්දූ පිටුවක් කියයි</translation> @@ -1242,6 +1248,7 @@ <translation id="6049488691372270142">පිටු බෙදා හැරීම</translation> <translation id="6051221802930200923">වෙබ් අඩවිය සහතික ඇමිණීම් භාවිතා කරන නිසා ඔබට මේ දැන් <ph name="SITE" /> වෙත පිවිසිය නොහැක. ජාල දෝෂ සහ ප්රහාර සාමාන්යයෙන් තාවකාලිකය, එනිසා මෙම පිටුව සමහර විට පසුව වැඩ කරනු ඇත.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">ඔබගේ සිටීම බෙදා ගන්නද?</translation> <translation id="6058977677006700226">ඔබේ කාඩ්පත් ඔබේ උපාංග සියල්ල මත භාවිත කරන්නේද?</translation> <translation id="6059925163896151826">USB උපාංග</translation> <translation id="6060009363608157444">අවලංගු DnsOverHttps ප්රකාරය.</translation> @@ -1371,6 +1378,7 @@ <translation id="6631202559048444592">මෙම ප්රතිපත්තිය සඳහා එකකට වැඩි මූලාශ්ර තිබේ, නමුත් අගයවල් සමානයි.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">මකන්න</translation> +<translation id="6645291930348198241">කුකී සහ වෙබ් අඩවි දත්ත වෙත ප්රවේශ වන්න.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{කිසිවක් නැත}=1{අඩවි 1කින් (ඔබව ඔබේ Google ගිණුමෙන් වරනය නොවනු ඇත)}one{අඩවි #කින් (ඔබව ඔබේ Google ගිණුමෙන් වරනය නොවනු ඇත)}other{අඩවි #කින් (ඔබව ඔබේ Google ගිණුමෙන් වරනය නොවනු ඇත)}}</translation> <translation id="6648459603387803038">ඔබේ පරිපාලකට දුරස්ථව ඔබේ බ්රවුසර සැකසීම වෙනස් කළ හැකිය. මෙම උපාංගය මත ක්රියාකාරකම Chrome හට පිටතින් ද කළමනා කරනු ලැබිය හැක.</translation> <translation id="6652101503459149953">Windows Hello භාවිත කරන්න</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb index b4dd50bd8..8adaacf 100644 --- a/components/strings/components_strings_sk.xtb +++ b/components/strings/components_strings_sk.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Znovu sa pripojiť k sieti Wi‑Fi</translation> <translation id="1165039591588034296">Chyba</translation> <translation id="1165174597379888365">Navštívenie stránky</translation> +<translation id="1174723505405632867">Chcete povoliť webu <ph name="EMBEDDED_URL" /> používať súbory cookie a údaje webu na <ph name="TOP_LEVEL_URL" />? + +Ich používanie by bolo inak blokované vašimi nastaveniami ochrany súkromia. Umožníte tak správne fungovanie používaného obsahu, ale zároveň tým môžete umožniť webu <ph name="EMBEDDED_URL" /> sledovať vašu aktivitu.</translation> <translation id="1175364870820465910">&Tlačiť...</translation> <translation id="1175875016430184367">Tri spinky vpravo</translation> <translation id="1178581264944972037">Pozastaviť</translation> @@ -305,6 +308,7 @@ <translation id="2181821976797666341">Pravidlá</translation> <translation id="2183608646556468874">Telefónne číslo</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 adresa}few{# adresy}many{# adresy}other{# adries}}</translation> +<translation id="2187243482123994665">Prítomnosť používateľa</translation> <translation id="2187317261103489799">Rozpoznávať (predvolené)</translation> <translation id="2188375229972301266">Viacero dierok dole</translation> <translation id="2202020181578195191">Zadajte platný rok vypršania platnosti</translation> @@ -524,6 +528,7 @@ <translation id="3169472444629675720">Discover</translation> <translation id="3174168572213147020">Ostrov</translation> <translation id="3176929007561373547">Skontrolujte nastavenia proxy servera alebo kontaktujte správcu siete a požiadajte ho, aby skontroloval, či proxy server funguje. Ak sa domnievate, že by ste nemali používať proxy server: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> chce vedieť, kedy ste prítomný/-á</translation> <translation id="3188393374551744535">Zostatok na účte</translation> <translation id="3194737229810486521"><ph name="URL" /> chce natrvalo ukladať dáta vo vašom zariadení</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> na serveri <ph name="SERVER_NAME" /></translation> @@ -1010,6 +1015,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Počítač</translation> <translation id="5179510805599951267">Text sa nezobrazil v jazyku <ph name="ORIGINAL_LANGUAGE" />? Nahláste túto chybu</translation> +<translation id="5179740473595559246">Vedieť, kedy ste prítomný/-á</translation> <translation id="5190835502935405962">Panel so záložkami</translation> <translation id="519422657042045905">Anotácia nie je k dispozícii</translation> <translation id="5201306358585911203">Vložená stránka na tejto stránke hovorí</translation> @@ -1232,6 +1238,7 @@ <translation id="6049488691372270142">Doručenie strany</translation> <translation id="6051221802930200923">Web <ph name="SITE" /> momentálne nemôžete navštíviť, pretože používa pripínanie certifikátov. Chyby siete a útoky sú zvyčajne dočasné, takže by táto stránka mala neskôr pravdepodobne fungovať.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Chcete informovať o svojej prítomnosti?</translation> <translation id="6058977677006700226">Chcete použiť svoje karty vo všetkých zariadeniach?</translation> <translation id="6059925163896151826">Zariadenia USB</translation> <translation id="6060009363608157444">Neplatný režim DnsOverHttps.</translation> @@ -1360,6 +1367,7 @@ <translation id="6631202559048444592">V rámci tohto pravidla je k dispozícii viacero zdrojov, ale ich hodnoty sú rovnaké.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Vymazať</translation> +<translation id="6645291930348198241">Používať súbory cookie a údaje webov.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Žiadne}=1{Z 1 webu (neodhlásime vás z účtu Google)}few{Z # webov (neodhlásime vás z účtu Google)}many{From # sites (you won't be signed out of your Google Account)}other{Z # webov (neodhlásime vás z účtu Google)}}</translation> <translation id="6648459603387803038">Nastavenia prehliadača môže vzdialene zmeniť správca. Aktivita v tomto zariadení môže byť tiež spravovaná mimo Chromu.</translation> <translation id="6652101503459149953">Použiť Windows Hello</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb index d9b65e68..7d32c8a 100644 --- a/components/strings/components_strings_sl.xtb +++ b/components/strings/components_strings_sl.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">znova vzpostaviti povezavo z omrežjem Wi-Fi</translation> <translation id="1165039591588034296">Napaka</translation> <translation id="1165174597379888365">Stran je obiskana</translation> +<translation id="1174723505405632867">Ali želite za <ph name="EMBEDDED_URL" /> omogočiti uporabo piškotkov in podatkov spletnih mest na <ph name="TOP_LEVEL_URL" />? + +V nasprotnem primeru bodo to blokirale nastavitve zasebnosti. S tem bo vsebina, ki ste jo uporabljali, pravilno delovala, vendar pa bo ponudnik <ph name="EMBEDDED_URL" /> morda lahko spremljal vašo dejavnost.</translation> <translation id="1175364870820465910">&Natisni ...</translation> <translation id="1175875016430184367">Trojno spenjanje na desni</translation> <translation id="1178581264944972037">Prekini</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">Pravilniki</translation> <translation id="2183608646556468874">Telefonska številka</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 naslov}one{# naslov}two{# naslova}few{# naslovi}other{# naslovov}}</translation> +<translation id="2187243482123994665">Prisotnost uporabnika</translation> <translation id="2187317261103489799">Zaznava (privzeto)</translation> <translation id="2188375229972301266">Večkratno luknjanje spodaj</translation> <translation id="2202020181578195191">Vnesite veljavno leto poteka veljavnosti</translation> @@ -533,6 +537,7 @@ poskrbite za delovanje strežnika proxy. Če menite, da vam strežnika proxy ni treba uporabljati: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> želi vedeti, ali ste prisotni</translation> <translation id="3188393374551744535">Stanje na računu</translation> <translation id="3194737229810486521"><ph name="URL" /> želi trajno shraniti podatke v vaši napravi</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> v strežniku <ph name="SERVER_NAME" /></translation> @@ -1025,6 +1030,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Računalnik</translation> <translation id="5179510805599951267">Ni v <ph name="ORIGINAL_LANGUAGE" />? Obvestite nas o tej napaki</translation> +<translation id="5179740473595559246">Vedenje, kdaj ste prisotni</translation> <translation id="5190835502935405962">Vrstica z zaznamki</translation> <translation id="519422657042045905">Pripisi niso na voljo</translation> <translation id="5201306358585911203">Vdelana stran na tej spletni strani sporoča:</translation> @@ -1247,6 +1253,7 @@ <translation id="6049488691372270142">Dostava strani</translation> <translation id="6051221802930200923">Spletnega mesta <ph name="SITE" /> trenutno ni mogoče obiskati, ker uporablja pripenjanje potrdil. Napake omrežja in napadi na omrežje so običajno začasni, zato bo ta stran verjetno delovala pozneje.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Želite objaviti prisotnost?</translation> <translation id="6058977677006700226">Želite kartice uporabljati v vseh svojih napravah?</translation> <translation id="6059925163896151826">Naprave USB</translation> <translation id="6060009363608157444">Neveljaven način DnsOverHttps.</translation> @@ -1376,6 +1383,7 @@ <translation id="6631202559048444592">Za pravilnik je več virov, vendar so vrednosti enake.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Izbriši</translation> +<translation id="6645291930348198241">Dostop do piškotkov in podatkov spletnih mest.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Nič}=1{Na 1 spletnem mestu (iz Google Računa ne boste odjavljeni)}one{Na # spletnem mestu (iz Google Računa ne boste odjavljeni)}two{Na # spletnih mestih (iz Google Računa ne boste odjavljeni)}few{Na # spletnih mestih (iz Google Računa ne boste odjavljeni)}other{Na # spletnih mestih (iz Google Računa ne boste odjavljeni)}}</translation> <translation id="6648459603387803038">Skrbnik lahko spremeni nastavitev brskalnika na daljavo. Dejavnost v tej napravi morda tudi upravljajo zunaj Chroma.</translation> <translation id="6652101503459149953">Uporabi Windows Hello</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb index 0e42f8f..1a4e470 100644 --- a/components/strings/components_strings_sq.xtb +++ b/components/strings/components_strings_sq.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Të rilidhesh me Wi-Fi</translation> <translation id="1165039591588034296">Gabim</translation> <translation id="1165174597379888365">Faqja është vizituar</translation> +<translation id="1174723505405632867">Dëshiron ta lejosh <ph name="EMBEDDED_URL" /> të përdorë kukit dhe të dhënat e sajtit në <ph name="TOP_LEVEL_URL" />? + +Ndryshe kjo do të bllokohet nga cilësimet e tua të privatësisë. Kjo do ta lejojë përmbajtjen me të cilën ndërveprove që të funksionojë në rregull, por mund të lejojë që <ph name="EMBEDDED_URL" /> të monitorojë aktivitetin tënd.</translation> <translation id="1175364870820465910">&Printo...</translation> <translation id="1175875016430184367">Tri kapje me tel djathtas</translation> <translation id="1178581264944972037">Pauzë</translation> @@ -308,6 +311,7 @@ <translation id="2181821976797666341">Politikat</translation> <translation id="2183608646556468874">Numri i telefonit</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 adresë}other{# adresa}}</translation> +<translation id="2187243482123994665">Prania e përdoruesit</translation> <translation id="2187317261103489799">Zbulo (parazgjedhja)</translation> <translation id="2188375229972301266">Shumë shpime poshtë</translation> <translation id="2202020181578195191">Fut një vit të vlefshëm skadimi</translation> @@ -530,6 +534,7 @@ për t'u siguruar që serveri përfaqësues po punon. Nëse nuk beson se duhet të përdorësh një server përfaqësues: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> dëshiron të dijë kur je i pranishëm</translation> <translation id="3188393374551744535">Balanca e llogarisë</translation> <translation id="3194737229810486521"><ph name="URL" /> kërkon të ruajë në mënyrë të përhershme të dhëna në pajisjen tënde</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> në <ph name="SERVER_NAME" /></translation> @@ -1020,6 +1025,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Pajisja</translation> <translation id="5179510805599951267">Jo në <ph name="ORIGINAL_LANGUAGE" />? Raportoje këtë gabim</translation> +<translation id="5179740473595559246">Të dijë se kur je i pranishëm</translation> <translation id="5190835502935405962">Shiriti i faqeshënuesve</translation> <translation id="519422657042045905">Shënimi nuk ofrohet</translation> <translation id="5201306358585911203">Një faqe e integruar në këtë faqe thotë</translation> @@ -1242,6 +1248,7 @@ <translation id="6049488691372270142">Dorëzimi i faqes</translation> <translation id="6051221802930200923">Nuk mund ta vizitosh <ph name="SITE" /> në këtë moment sepse sajti i uebit përdor gozhdimin e certifikatës. Gabimet dhe sulmet e rrjetit janë zakonisht të përkohshme, prandaj kjo faqe ndoshta do të funksionojë më vonë.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Të ndahet prania jote?</translation> <translation id="6058977677006700226">Dëshiron t'i përdorësh kartat në të gjitha pajisjet e tua?</translation> <translation id="6059925163896151826">Pajisjet USB</translation> <translation id="6060009363608157444">Modalitet i pavlefshëm DnsOverHttps.</translation> @@ -1370,6 +1377,7 @@ <translation id="6631202559048444592">Është i pranishëm më shumë se një burim për politikën, por vlerat janë të njëjta.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Pastro</translation> +<translation id="6645291930348198241">Të ketë qasje te kukit dhe të dhënat e sajtit.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Asnjë}=1{Nga 1 sajt (nuk do të dalësh nga llogaria jote e Google)}other{Nga # sajte (nuk do të dalësh nga llogaria jote e Google)}}</translation> <translation id="6648459603387803038">Administratori yt mund të ndryshojë konfigurimin e shfletuesit në distancë. Aktiviteti në këtë pajisje mund të menaxhohet edhe jashtë Chrome.</translation> <translation id="6652101503459149953">Përdor Windows Hello</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb index 72e92ca..a7e1f9c3 100644 --- a/components/strings/components_strings_sr-Latn.xtb +++ b/components/strings/components_strings_sr-Latn.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">ponovo da se povežete sa Wi-Fi mrežom</translation> <translation id="1165039591588034296">Greška</translation> <translation id="1165174597379888365">Stranica je posećena</translation> +<translation id="1174723505405632867">Želite li da dozvolite da <ph name="EMBEDDED_URL" /> koristi kolačiće i podatke o sajtovima na <ph name="TOP_LEVEL_URL" />? + +To inače blokiraju podešavanja privatnosti. To omogućava da sadržaj sa kojim ste imali interakciju ispravno radi, ali može da omogući i da <ph name="EMBEDDED_URL" /> prati vaše aktivnosti.</translation> <translation id="1175364870820465910">&Odštampaj...</translation> <translation id="1175875016430184367">Trostruko spajanje na desnoj strani</translation> <translation id="1178581264944972037">Pauziraj</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">Smernice</translation> <translation id="2183608646556468874">Broj telefona</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 adresa}one{# adresa}few{# adrese}other{# adresa}}</translation> +<translation id="2187243482123994665">Prisustvo korisnika</translation> <translation id="2187317261103489799">Otkrij (podrazumevano)</translation> <translation id="2188375229972301266">Višestruko bušenje na dnu</translation> <translation id="2202020181578195191">Unesite važeću godinu isteka</translation> @@ -533,6 +537,7 @@ biste se uverili da proksi server funkcioniše. Ako mislite da ne treba da koristite proksi server: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> želi da zna kada ste prisutni</translation> <translation id="3188393374551744535">Stanje na računu</translation> <translation id="3194737229810486521"><ph name="URL" /> želi da trajno skladišti podatke na uređaju</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> na: <ph name="SERVER_NAME" /></translation> @@ -1025,6 +1030,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Računar</translation> <translation id="5179510805599951267">Nije <ph name="ORIGINAL_LANGUAGE" />? Prijavite ovu grešku</translation> +<translation id="5179740473595559246">da zna kada ste prisutni</translation> <translation id="5190835502935405962">Traka sa obeleživačima</translation> <translation id="519422657042045905">Napomena nije dostupna</translation> <translation id="5201306358585911203">Ugrađena stranica na ovoj veb-stranici navodi:</translation> @@ -1247,6 +1253,7 @@ <translation id="6049488691372270142">Isporuka stranica</translation> <translation id="6051221802930200923">Trenutno ne možete da posetite <ph name="SITE" /> jer veb-sajt koristi proveru sertifikata. Greške i napadi na mreži su obično privremeni, pa će ova stranica verovatno funkcionisati kasnije.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Želite li da delite prisustvo?</translation> <translation id="6058977677006700226">Želite li da koristite kartice na svim uređajima?</translation> <translation id="6059925163896151826">USB uređaji</translation> <translation id="6060009363608157444">Režim DnsOverHttps je nevažeći.</translation> @@ -1375,6 +1382,7 @@ <translation id="6631202559048444592">Prisutno je više izvora sa istim vrednostima za ove smernice.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Obriši</translation> +<translation id="6645291930348198241">da pristupa kolačićima i podacima o sajtovima.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{None}=1{Sa 1 sajta (nećemo vas odjaviti sa Google naloga)}one{Sa # sajta (nećemo vas odjaviti sa Google naloga)}few{Sa # sajta (nećemo vas odjaviti sa Google naloga)}other{Sa # sajtova (nećemo vas odjaviti sa Google naloga)}}</translation> <translation id="6648459603387803038">Administrator može daljinski da promeni podešavanje pregledača. Aktivnostima na ovom uređaju može da se upravlja i van Chrome-a.</translation> <translation id="6652101503459149953">Koristi Windows Hello</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb index 40ada40..306d1f05 100644 --- a/components/strings/components_strings_sr.xtb +++ b/components/strings/components_strings_sr.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">поново да се повежете са Wi-Fi мрежом</translation> <translation id="1165039591588034296">Грешка</translation> <translation id="1165174597379888365">Страница је посећена</translation> +<translation id="1174723505405632867">Желите ли да дозволите да <ph name="EMBEDDED_URL" /> користи колачиће и податке о сајтовима на <ph name="TOP_LEVEL_URL" />? + +То иначе блокирају подешавања приватности. То омогућава да садржај са којим сте имали интеракцију исправно ради, али може да омогући и да <ph name="EMBEDDED_URL" /> прати ваше активности.</translation> <translation id="1175364870820465910">&Одштампај...</translation> <translation id="1175875016430184367">Троструко спајање на десној страни</translation> <translation id="1178581264944972037">Паузирај</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">Смернице</translation> <translation id="2183608646556468874">Број телефона</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 адреса}one{# адреса}few{# адресе}other{# адреса}}</translation> +<translation id="2187243482123994665">Присуство корисника</translation> <translation id="2187317261103489799">Откриј (подразумевано)</translation> <translation id="2188375229972301266">Вишеструко бушење на дну</translation> <translation id="2202020181578195191">Унесите важећу годину истека</translation> @@ -533,6 +537,7 @@ бисте се уверили да прокси сервер функционише. Ако мислите да не треба да користите прокси сервер: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> жели да зна када сте присутни</translation> <translation id="3188393374551744535">Стање на рачуну</translation> <translation id="3194737229810486521"><ph name="URL" /> жели да трајно складишти податке на уређају</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> на: <ph name="SERVER_NAME" /></translation> @@ -1025,6 +1030,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Рачунар</translation> <translation id="5179510805599951267">Није <ph name="ORIGINAL_LANGUAGE" />? Пријавите ову грешку</translation> +<translation id="5179740473595559246">да зна када сте присутни</translation> <translation id="5190835502935405962">Трака са обележивачима</translation> <translation id="519422657042045905">Напомена није доступна</translation> <translation id="5201306358585911203">Уграђена страница на овој веб-страници наводи:</translation> @@ -1247,6 +1253,7 @@ <translation id="6049488691372270142">Испорука страница</translation> <translation id="6051221802930200923">Тренутно не можете да посетите <ph name="SITE" /> јер веб-сајт користи проверу сертификата. Грешке и напади на мрежи су обично привремени, па ће ова страница вероватно функционисати касније.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Желите ли да делите присуство?</translation> <translation id="6058977677006700226">Желите ли да користите картице на свим уређајима?</translation> <translation id="6059925163896151826">USB уређаји</translation> <translation id="6060009363608157444">Режим DnsOverHttps је неважећи.</translation> @@ -1375,6 +1382,7 @@ <translation id="6631202559048444592">Присутно је више извора са истим вредностима за ове смернице.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Обриши</translation> +<translation id="6645291930348198241">да приступа колачићима и подацима о сајтовима.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{None}=1{Са 1 сајта (нећемо вас одјавити са Google налога)}one{Са # сајта (нећемо вас одјавити са Google налога)}few{Са # сајта (нећемо вас одјавити са Google налога)}other{Са # сајтова (нећемо вас одјавити са Google налога)}}</translation> <translation id="6648459603387803038">Администратор може даљински да промени подешавање прегледача. Активностима на овом уређају може да се управља и ван Chrome-а.</translation> <translation id="6652101503459149953">Користи Windows Hello</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb index fb8ea410..ce58959 100644 --- a/components/strings/components_strings_sv.xtb +++ b/components/strings/components_strings_sv.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">återansluta till Wi-Fi</translation> <translation id="1165039591588034296">Fel</translation> <translation id="1165174597379888365">En sida besöks</translation> +<translation id="1174723505405632867">Vill du tillåta att <ph name="EMBEDDED_URL" /> använder cookies och webbplatsdata på <ph name="TOP_LEVEL_URL" />? + +Annars blockeras detta av sekretessinställningarna. Om du tillåter detta kan innehållet du öppnade fungera korrekt, men det kan hända att <ph name="EMBEDDED_URL" /> kan registrera din aktivitet.</translation> <translation id="1175364870820465910">Skriv &ut...</translation> <translation id="1175875016430184367">Tre häftklamrar till höger</translation> <translation id="1178581264944972037">Paus</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">Policyer</translation> <translation id="2183608646556468874">Telefonnummer</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 adress}other{# adresser}}</translation> +<translation id="2187243482123994665">Användarens närvaro</translation> <translation id="2187317261103489799">Identifiera (standard)</translation> <translation id="2188375229972301266">Flera hål längst ned</translation> <translation id="2202020181578195191">Ange ett giltigt utgångsår</translation> @@ -533,6 +537,7 @@ kontrollera att proxyservern fungerar. Om du inte tror att du ska använda en proxyserver: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> vill registrera om du är närvarande</translation> <translation id="3188393374551744535">Kontosaldo</translation> <translation id="3194737229810486521"><ph name="URL" /> vill lagra data permanent på din enhet</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> på <ph name="SERVER_NAME" /></translation> @@ -1025,6 +1030,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Dator</translation> <translation id="5179510805599951267">Inte på <ph name="ORIGINAL_LANGUAGE" />? Rapportera felet</translation> +<translation id="5179740473595559246">Registrera om du är närvarande</translation> <translation id="5190835502935405962">Bokmärkesfältet</translation> <translation id="519422657042045905">Kommentering är inte tillgängligt</translation> <translation id="5201306358585911203">På en inbäddad sida på den här sidan står det</translation> @@ -1247,6 +1253,7 @@ <translation id="6049488691372270142">Sidvisning</translation> <translation id="6051221802930200923">Du kan inte besöka <ph name="SITE" /> just nu eftersom tekniken att fästa certifikat används på webbplatsen. Nätverksfel och attacker är ofta tillfälliga, så sidan kommer förmodligen att fungera senare.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Vill du dela information om din närvaro?</translation> <translation id="6058977677006700226">Vill du använda dina kort på alla enheter?</translation> <translation id="6059925163896151826">USB-enheter</translation> <translation id="6060009363608157444">Ogiltigt läge för DnsOverHttps.</translation> @@ -1376,6 +1383,7 @@ <translation id="6631202559048444592">Den här principen har fler än en källa, men med samma värden.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Rensa</translation> +<translation id="6645291930348198241">få åtkomst till cookies och webbplatsdata.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Ingen}=1{Från 1 webbplats (du loggas inte ut från Google-kontot)}other{Från # webbplatser (du loggas inte ut från Google-kontot)}}</translation> <translation id="6648459603387803038">Administratören kan ändra webbläsarinställningarna på distans. Aktivitet på den här enheten kan hanteras även utanför Chrome.</translation> <translation id="6652101503459149953">Använd Windows Hello</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb index 28094344..4178e0f 100644 --- a/components/strings/components_strings_sw.xtb +++ b/components/strings/components_strings_sw.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Kuunganisha tena kwenye Wi-Fi</translation> <translation id="1165039591588034296">Hitilafu</translation> <translation id="1165174597379888365">Ukurasa unatembelewa</translation> +<translation id="1174723505405632867">Ungependa kuruhusu <ph name="EMBEDDED_URL" /> itumie data ya tovuti na vidakuzi kwenye <ph name="TOP_LEVEL_URL" />? + +Usipoiruhusu, itazuiwa na mipangilio yako ya faragha. Hali hii itaruhusu maudhui ambayo umetumia yafanye kazi ipasavyo, lakini huenda ikaruhusu <ph name="EMBEDDED_URL" /> ifuatilie shughuli zako.</translation> <translation id="1175364870820465910">&Chapisha...</translation> <translation id="1175875016430184367">Bana mara tatu kulia</translation> <translation id="1178581264944972037">Sitisha</translation> @@ -308,6 +311,7 @@ <translation id="2181821976797666341">Sera</translation> <translation id="2183608646556468874">Nambari ya Simu</translation> <translation id="2184405333245229118">{COUNT,plural, =1{Anwani 1}other{Anwani #}}</translation> +<translation id="2187243482123994665">Upatikanaji wa mtumiaji</translation> <translation id="2187317261103489799">Gundua (chaguomsingi)</translation> <translation id="2188375229972301266">Toboa mara kadhaa chini</translation> <translation id="2202020181578195191">Andika mwaka sahihi wa kuisha kwa muda wa matumizi</translation> @@ -532,6 +536,7 @@ kuhakikisha kuwa seva mbadala inafanya kazi. Ikiwa huamini kwamba unapaswa kuwa ukitumia seva mbadala: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> ingependa kujua unapopatikana</translation> <translation id="3188393374551744535">Salio la akaunti</translation> <translation id="3194737229810486521"><ph name="URL" /> inataka kuhifadhi data kwenye kifaa chako kwa muda mrefu</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> kwenye <ph name="SERVER_NAME" /></translation> @@ -1024,6 +1029,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Mashine</translation> <translation id="5179510805599951267">Haiko katika <ph name="ORIGINAL_LANGUAGE" />? Ripoti hitilafu hii</translation> +<translation id="5179740473595559246">Kujua unapopatikana</translation> <translation id="5190835502935405962">Sehemu ya Alamisho</translation> <translation id="519422657042045905">Vidokezi havipatikani</translation> <translation id="5201306358585911203">Ukurasa uliopachikwa kwenye ukurasa huu unasema</translation> @@ -1246,6 +1252,7 @@ <translation id="6049488691372270142">Utumaji wa ukurasa</translation> <translation id="6051221802930200923">Huwezi kutembelea <ph name="SITE" /> sasa hivi kwa sababu tovuti hii inatumia ubandikaji cheti. Hitilafu na uvamizi wa mtandao kwa kawaida huwa vya muda, kwa hivyo ukurasa huu huenda utafanya kazi baadaye.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Ungependa kushiriki maelezo ya wakati unapatikana?</translation> <translation id="6058977677006700226">Ungependa kutumia kadi zako kwenye vifaa vyako vyote?</translation> <translation id="6059925163896151826">Vifaa vya USB</translation> <translation id="6060009363608157444">Hali ya DnsOverHttps isiyo sahihi.</translation> @@ -1375,6 +1382,7 @@ <translation id="6631202559048444592">Sera hii ina zaidi ya chanzo kimoja, lakini thamani zinafanana.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Futa</translation> +<translation id="6645291930348198241">Kufikia data ya tovuti na vidakuzi.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Hamna}=1{Kutoka tovuti 1 (hutaondolewa kwenye Akaunti ya Google)}other{Kutoka tovuti # (hutaondolewa kwenye Akaunti ya Google)}}</translation> <translation id="6648459603387803038">Msimamizi wako anaweza kubadilisha mipangilio ya kivinjari chako kwa mbali. Huenda shughuli kwenye kifaa hiki zikadhibitiwa nje ya Chrome.</translation> <translation id="6652101503459149953">Tumia Windows Hello</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index 298d9ea..397868bc 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Wi-Fiకి మళ్లీ కనెక్ట్ చేయడం</translation> <translation id="1165039591588034296">ఎర్రర్</translation> <translation id="1165174597379888365">పేజీని సందర్శించినప్పుడు</translation> +<translation id="1174723505405632867"><ph name="TOP_LEVEL_URL" />లోని కుక్కీలను, సైట్ డేటాను ఉపయోగించడానికి మీరు <ph name="EMBEDDED_URL" />ను అనుమతించాలనుకుంటున్నారా? + +లేదంటే, దీనిని మీ గోప్యతా సెట్టింగ్లు బ్లాక్ చేయవచ్చు. ఇది మీరు ఇంటరాక్ట్ అయిన కంటెంట్ సక్రమంగా పని చేసేలా అనుమతిస్తుంది, కానీ మీ యాక్టివిటీని ట్రాక్ చేయడానికి <ph name="EMBEDDED_URL" />ను అనుమతించవచ్చు.</translation> <translation id="1175364870820465910">&ముద్రించు...</translation> <translation id="1175875016430184367">కుడివైపు ట్రిపుల్ స్టేపుల్</translation> <translation id="1178581264944972037">పాజ్ చేయి</translation> @@ -311,6 +314,7 @@ <translation id="2181821976797666341">విధానాలు</translation> <translation id="2183608646556468874">ఫోన్ నంబర్</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 చిరునామా}other{# చిరునామాలు}}</translation> +<translation id="2187243482123994665">యూజర్ ఉనికి</translation> <translation id="2187317261103489799">గుర్తించు (డిఫాల్ట్)</translation> <translation id="2188375229972301266">దిగువ భాగంలో అనేక రంధ్రాలు</translation> <translation id="2202020181578195191">చెల్లుబాటు అయ్యే గడువు ముగింపు సంవత్సరాన్ని నమోదు చేయండి</translation> @@ -533,6 +537,7 @@ మీ నెట్వర్క్ నిర్వాహకుడిని సంప్రదించండి. మీరు ప్రాక్సీ సర్వర్నే ఉపయోగిస్తున్నట్లు మీకు నమ్మకంగా లేకుంటే: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" />, మీ ఉనికిని తెలుసుకోవాలనుకుంటోంది</translation> <translation id="3188393374551744535">ఖాతా బ్యాలెన్స్</translation> <translation id="3194737229810486521"><ph name="URL" /> శాశ్వతంగా డేటాను మీ పరికరంలో నిల్వ చేయాలనుకుంటోంది</translation> <translation id="3195213714973468956"><ph name="SERVER_NAME" />లో <ph name="PRINTER_NAME" /></translation> @@ -1025,6 +1030,7 @@ <translation id="5171689220826475070">ఫ్యాన్ఫోల్డ్-యూరోపియన్</translation> <translation id="5172758083709347301">మెషీన్</translation> <translation id="5179510805599951267"><ph name="ORIGINAL_LANGUAGE" />లో లేదా? ఈ ఎర్రర్ను నివేదించండి</translation> +<translation id="5179740473595559246">మీ ఉనికిని తెలుసుకోవాలనుకుంటోంది</translation> <translation id="5190835502935405962">బుక్మార్క్ల బార్</translation> <translation id="519422657042045905">అదనపు గమనిక అందుబాటులో లేదు</translation> <translation id="5201306358585911203">ఈ పేజీలోని పొందుపరిచిన పేజీ ఇలా చెబుతోంది</translation> @@ -1247,6 +1253,7 @@ <translation id="6049488691372270142">పేజీ డెలివరీ</translation> <translation id="6051221802930200923">సర్టిఫికెట్ను పిన్ చేసే పద్ధతిని వెబ్సైట్ ఉపయోగిస్తుంది. కనుక మీరు ప్రస్తుతానికి <ph name="SITE" />ను సందర్శించలేరు. నెట్వర్క్ ఎర్రర్లు మరియు దాడులు సాధారణంగా తాత్కాలికమే, కనుక ఈ పేజీ తర్వాత పని చేయవచ్చు.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">మీ ఉనికిని షేర్ చేయాలా?</translation> <translation id="6058977677006700226">మీ కార్డ్లను మీ అన్ని పరికరాలలో ఉపయోగించాలా?</translation> <translation id="6059925163896151826">USB పరికరాలు</translation> <translation id="6060009363608157444">చెల్లని DnsOverHttps మోడ్.</translation> @@ -1376,6 +1383,7 @@ <translation id="6631202559048444592">ఈ విధానంలో ఒకటి కంటే ఎక్కువ మూలాధారాలు ఉన్నాయి, కానీ విలువలు ఒకటే విధంగా ఉన్నాయి.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">క్లియర్ చేయి</translation> +<translation id="6645291930348198241">కుక్కీలను, సైట్ డేటాను యాక్సెస్ చేయాలనుకుంటోంది.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{ఏవీ లేవు}=1{1 సైట్ నుండి (మీరు మీ Google ఖాతా నుండి సైన్ అవుట్ చేయబడరు)}other{# సైట్ల నుండి (మీరు మీ Google ఖాతా నుండి సైన్ అవుట్ చేయబడరు)}}</translation> <translation id="6648459603387803038">మీ అడ్మినిస్ట్రేటర్ మీ బ్రౌజర్ సెటప్ను రిమోట్ విధానంలో మార్చవచ్చు. ఈ పరికరంలోని యాక్టివిటీని Chrome వెలుపల కూడా మేనేజ్ చేయవచ్చు.</translation> <translation id="6652101503459149953">Windows Helloను ఉపయోగించండి</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb index c348b45..544cb938 100644 --- a/components/strings/components_strings_th.xtb +++ b/components/strings/components_strings_th.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">เชื่อมต่อ Wi-Fi ใหม่</translation> <translation id="1165039591588034296">ข้อผิดพลาด</translation> <translation id="1165174597379888365">มีการเข้าชมหน้าเว็บ</translation> +<translation id="1174723505405632867">คุณต้องการอนุญาตให้ <ph name="EMBEDDED_URL" /> ใช้คุกกี้และข้อมูลเว็บไซต์ใน <ph name="TOP_LEVEL_URL" /> ไหม + +หากไม่ การตั้งค่าความเป็นส่วนตัวจะบล็อกการเข้าถึงนี้ การอนุญาตจะช่วยให้เนื้อหาที่คุณโต้ตอบด้วยทำงานอย่างถูกต้อง แต่ก็อาจอนุญาตให้ <ph name="EMBEDDED_URL" /> ติดตามกิจกรรมของคุณด้วย</translation> <translation id="1175364870820465910">&พิมพ์...</translation> <translation id="1175875016430184367">เย็บด้วยลวดเย็บกระดาษด้านขวา 3 ครั้ง</translation> <translation id="1178581264944972037">หยุดชั่วคราว</translation> @@ -305,6 +308,7 @@ <translation id="2181821976797666341">นโยบาย</translation> <translation id="2183608646556468874">หมายเลขโทรศัพท์</translation> <translation id="2184405333245229118">{COUNT,plural, =1{ที่อยู่ 1 รายการ}other{ที่อยู่ # รายการ}}</translation> +<translation id="2187243482123994665">การใช้งานอยู่ของผู้ใช้</translation> <translation id="2187317261103489799">ตรวจหา (ค่าเริ่มต้น)</translation> <translation id="2188375229972301266">เจาะรูด้านล่างหลายรู</translation> <translation id="2202020181578195191">ป้อนปีที่หมดอายุที่ถูกต้อง</translation> @@ -527,6 +531,7 @@ ตรวจสอบว่าพร็อกซีเซิร์ฟเวอร์ทำงานอยู่ หากคุณคิดว่าไม่ควร ใช้พร็อกซีเซิร์ฟเวอร์ ให้ดำเนินการดังนี้: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> ต้องการทราบเมื่อคุณมีการเคลื่อนไหว</translation> <translation id="3188393374551744535">เงินคงเหลือ</translation> <translation id="3194737229810486521"><ph name="URL" /> ต้องการจัดเก็บข้อมูลอย่างถาวรในอุปกรณ์ของคุณ</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> ใน <ph name="SERVER_NAME" /></translation> @@ -1013,6 +1018,7 @@ <translation id="5171689220826475070">กระดาษต่อเนื่องแบบยุโรป</translation> <translation id="5172758083709347301">ผู้ใช้คอมพิวเตอร์นี้</translation> <translation id="5179510805599951267">หากไม่มีในภาษา <ph name="ORIGINAL_LANGUAGE" /> ให้รายงานข้อผิดพลาดนี้</translation> +<translation id="5179740473595559246">ทราบเมื่อคุณใช้งานอยู่</translation> <translation id="5190835502935405962">แถบบุ๊กมาร์ก</translation> <translation id="519422657042045905">โหมดคำอธิบายประกอบไม่พร้อมใช้งาน</translation> <translation id="5201306358585911203">หน้าที่ฝังไว้ในหน้าเว็บนี้บอกว่า</translation> @@ -1235,6 +1241,7 @@ <translation id="6049488691372270142">หน้าที่แสดง</translation> <translation id="6051221802930200923">คุณไม่สามารถไปที่ <ph name="SITE" /> ได้ในขณะนี้เนื่องจากเว็บไซต์ใช้การตรึงใบรับรอง โดยปกติข้อผิดพลาดของเครือข่ายและการโจมตีจะเกิดขึ้นเพียงชั่วคราว หน้านี้จึงอาจใช้งานได้ในภายหลัง</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">แชร์การเคลื่อนไหวของคุณไหม</translation> <translation id="6058977677006700226">ต้องการใช้บัตรในอุปกรณ์ทุกเครื่องไหม</translation> <translation id="6059925163896151826">อุปกรณ์ USB</translation> <translation id="6060009363608157444">โหมด DnsOverHttps ไม่ถูกต้อง</translation> @@ -1364,6 +1371,7 @@ <translation id="6631202559048444592">นโยบายนี้มีแหล่งที่มามากกว่า 1 แห่งแต่มีค่าต่างๆ เหมือนกัน</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">ล้าง</translation> +<translation id="6645291930348198241">เข้าถึงคุกกี้และข้อมูลเว็บไซต์</translation> <translation id="6646269444027925224">{COUNT,plural, =0{ไม่มี}=1{จาก 1 เว็บไซต์ (คุณจะไม่ออกจากระบบบัญชี Google)}other{จาก # เว็บไซต์ (คุณจะไม่ออกจากระบบบัญชี Google)}}</translation> <translation id="6648459603387803038">ผู้ดูแลระบบจะเปลี่ยนการตั้งค่าเบราว์เซอร์จากระยะไกลได้ กิจกรรมในอุปกรณ์นี้อาจมีการจัดการภายนอก Chrome ได้ด้วย</translation> <translation id="6652101503459149953">ใช้ Windows Hello</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb index 1d34305..42271ef 100644 --- a/components/strings/components_strings_tr.xtb +++ b/components/strings/components_strings_tr.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Kablosuz ağa yeniden bağlanma</translation> <translation id="1165039591588034296">Hata</translation> <translation id="1165174597379888365">Sayfa ziyaret edildi</translation> +<translation id="1174723505405632867"><ph name="EMBEDDED_URL" /> sitesinin, <ph name="TOP_LEVEL_URL" /> üzerinde çerezleri ve site verilerini kullanmasına izin vermek istiyor musunuz? + +Aksi halde bu işlem gizlilik ayarlarınız tarafından engellenecek. Buna izin vermek etkileşimde bulunduğunuz içeriğin doğru çalışmasını sağlar, ancak <ph name="EMBEDDED_URL" /> sitesinin etkinliğinizi izlemesine de imkan verebilir.</translation> <translation id="1175364870820465910">Ya&zdır...</translation> <translation id="1175875016430184367">Sağda üçlü zımba</translation> <translation id="1178581264944972037">Duraklat</translation> @@ -306,6 +309,7 @@ <translation id="2181821976797666341">Politikalar</translation> <translation id="2183608646556468874">Telefon Numarası</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 adres}other{# adres}}</translation> +<translation id="2187243482123994665">Kullanıcı etkinliği</translation> <translation id="2187317261103489799">Algıla (varsayılan)</translation> <translation id="2188375229972301266">Altta çoklu zımba</translation> <translation id="2202020181578195191">Geçerli bir son kullanma yılı girin</translation> @@ -528,6 +532,7 @@ proxy ayarlarınızı kontrol edin veya ağ yöneticinize danışın. Proxy sunucu kullanmamanız gerektiğini düşünüyorsanız: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456"><ph name="URL" /> sitesi, etkin olduğunuzda bilmek istiyor</translation> <translation id="3188393374551744535">Hesap bakiyesi</translation> <translation id="3194737229810486521"><ph name="URL" />, cihazınıza kalıcı olarak veri depolamak istiyor</translation> <translation id="3195213714973468956"><ph name="SERVER_NAME" /> üzerinde <ph name="PRINTER_NAME" /></translation> @@ -1016,6 +1021,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Makine</translation> <translation id="5179510805599951267"><ph name="ORIGINAL_LANGUAGE" /> dilinde değil mi? Bu hatayı bildirin</translation> +<translation id="5179740473595559246">Etkin olduğunuzda bilmek</translation> <translation id="5190835502935405962">Yer İşareti Çubuğu</translation> <translation id="519422657042045905">Ek açıklama kullanılamıyor</translation> <translation id="5201306358585911203">Bu sayfadaki yerleşik bir sayfanın mesajı</translation> @@ -1238,6 +1244,7 @@ <translation id="6049488691372270142">Sayfa teslimi</translation> <translation id="6051221802930200923"><ph name="SITE" /> sitesi sertifika sabitleme yöntemi kullandığından siteyi şu anda ziyaret edemezsiniz. Ağ hataları ve saldırılar genellikle geçici olduğundan bu sayfa muhtemelen daha sonra çalışacaktır.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Etkin olduğunuz paylaşılsın mı?</translation> <translation id="6058977677006700226">Kartlarınızı tüm cihazlarınızda kullanmak istiyor musunuz?</translation> <translation id="6059925163896151826">USB cihazları</translation> <translation id="6060009363608157444">Geçersiz DnsOverHttps modu.</translation> @@ -1367,6 +1374,7 @@ <translation id="6631202559048444592">Bu politikada birden fazla kaynak var, ancak değerler aynı.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Temizle</translation> +<translation id="6645291930348198241">Çerezlere ve site verilerine erişmek.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Yok}=1{1 siteden (Google Hesabınızdan çıkış yapılmaz)}other{# siteden (Google Hesabınızdan çıkış yapılmaz)}}</translation> <translation id="6648459603387803038">Yöneticiniz, tarayıcınızın kurulumunu uzaktan değiştirebilir. Bu cihazdaki etkinlikler Chrome dışında da yönetilebilir.</translation> <translation id="6652101503459149953">Windows Hello'yu kullan</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb index 045743c..ddcb04b0 100644 --- a/components/strings/components_strings_uk.xtb +++ b/components/strings/components_strings_uk.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">знову під’єднати пристрій до мережі Wi-Fi</translation> <translation id="1165039591588034296">Помилка</translation> <translation id="1165174597379888365">Відвідано сторінку</translation> +<translation id="1174723505405632867">Надати сайту <ph name="EMBEDDED_URL" /> доступ до файлів cookie й даних на сайті <ph name="TOP_LEVEL_URL" />? + +Інакше доступ буде заблоковано відповідно до ваших налаштувань конфіденційності. Якщо ви надасте доступ, контент, з яким ви взаємодіяли, працюватиме належним чином, але сайт <ph name="EMBEDDED_URL" /> зможе відстежувати ваші дії.</translation> <translation id="1175364870820465910">&Друк...</translation> <translation id="1175875016430184367">Тричі скріпити праворуч</translation> <translation id="1178581264944972037">Пауза</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">Правила</translation> <translation id="2183608646556468874">Номер телефону</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 адреса}one{# адреса}few{# адреси}many{# адрес}other{# адреси}}</translation> +<translation id="2187243482123994665">Дані про те, чи ви активні</translation> <translation id="2187317261103489799">Визначати (за умовчанням)</translation> <translation id="2188375229972301266">Пробити кілька отворів унизу</translation> <translation id="2202020181578195191">Введіть дійсний рік закінчення терміну дії</translation> @@ -531,6 +535,7 @@ щоб переконатися, що проксі-сервер працює. Якщо ви вважаєте, що не потрібно використовувати проксі-сервер, виконайте вказані нижче дії. <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456">Сайт <ph name="URL" /> хоче отримати доступ до даних про те, чи ви активні</translation> <translation id="3188393374551744535">Баланс рахунку</translation> <translation id="3194737229810486521">Сайт <ph name="URL" /> хоче постійно зберігати дані на вашому пристрої</translation> <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> на сервері <ph name="SERVER_NAME" /></translation> @@ -1023,6 +1028,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Комп’ютер</translation> <translation id="5179510805599951267">Це не <ph name="ORIGINAL_LANGUAGE" />? Повідомте про помилку</translation> +<translation id="5179740473595559246">Отримати доступ до даних про те, чи ви активні</translation> <translation id="5190835502935405962">Панель закладок</translation> <translation id="519422657042045905">Анотація недоступна</translation> <translation id="5201306358585911203">Повідомлення з вбудованої сторінки на цій сторінці</translation> @@ -1245,6 +1251,7 @@ <translation id="6049488691372270142">Подача сторінки</translation> <translation id="6051221802930200923">Зараз не можна перейти на сторінку <ph name="SITE" />, оскільки цей веб-сайт використовує закріплення сертифікатів. Помилки мережі й атаки зазвичай тимчасові, тому ця сторінка, скоріш за все, запрацює пізніше.</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Надати доступ до даних про те, чи ви активні?</translation> <translation id="6058977677006700226">Використовувати картки на всіх ваших пристроях?</translation> <translation id="6059925163896151826">Пристрої USB</translation> <translation id="6060009363608157444">Недійсний режим DnsOverHttps.</translation> @@ -1374,6 +1381,7 @@ <translation id="6631202559048444592">У правилі є кілька джерел з однаковими значеннями.</translation> <translation id="663260587451432563">JIS B4</translation> <translation id="6643016212128521049">Очистити</translation> +<translation id="6645291930348198241">Отримати доступ до файлів cookie й даних сайту.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Немає}=1{З 1 сайту (ви не вийдете з облікового запису Google)}one{З # сайту (ви не вийдете з облікового запису Google)}few{З # сайтів (ви не вийдете з облікового запису Google)}many{З # сайтів (ви не вийдете з облікового запису Google)}other{З # сайту (ви не вийдете з облікового запису Google)}}</translation> <translation id="6648459603387803038">Адміністратор може змінити налаштування веб-переглядача віддалено. Діями на цьому пристрої можна керувати за межами Chrome.</translation> <translation id="6652101503459149953">Використовувати Windows Hello</translation>
diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb index fbdfd00c..9de89b88 100644 --- a/components/strings/components_strings_zu.xtb +++ b/components/strings/components_strings_zu.xtb
@@ -47,6 +47,9 @@ <translation id="1161325031994447685">Ixhuma kabusha ku-Wi-Fi</translation> <translation id="1165039591588034296">Iphutha</translation> <translation id="1165174597379888365">Ikhasi livakashelwe</translation> +<translation id="1174723505405632867">Ingabe uyafuna ukuvumela i-<ph name="EMBEDDED_URL" /> ukuthi isebenzise amakhukhi nedatha yesayithi ku-<ph name="TOP_LEVEL_URL" />? + +Lokhu uma kungenjalo kuzovinjelwa izilungiselelo zakho zobumfihlo. Lokhu kuzovumela okuqukethwe ohlanganyela nakho ukuthi kusebenze kahle, kodwa kungavumela i-<ph name="EMBEDDED_URL" /> ukuthi ilandelele umsebenzi wakho.</translation> <translation id="1175364870820465910">&Phrinta...</translation> <translation id="1175875016430184367">Ukunamathisela okuthathu kwesokudla</translation> <translation id="1178581264944972037">Misa isikhashana</translation> @@ -309,6 +312,7 @@ <translation id="2181821976797666341">Izinqubomgomo</translation> <translation id="2183608646556468874">Inombolo yefoni</translation> <translation id="2184405333245229118">{COUNT,plural, =1{1 ikheli}one{# amakheli}other{# amakheli}}</translation> +<translation id="2187243482123994665">Ukuba khona komsebenzisi</translation> <translation id="2187317261103489799">Thola (okuzenzakalelayo)</translation> <translation id="2188375229972301266">Ukushaya kaningi phansi</translation> <translation id="2202020181578195191">Faka unyaka ovumelekile wokuphelelwa isikhathi</translation> @@ -531,6 +535,7 @@ <translation id="3174168572213147020">Isiqhingi</translation> <translation id="3176929007561373547">Hlola izilungiselelo zakho zommeleli noma uxhumane nomlawuli wakho wenethiwekhi ukuze uqiniseke ukuthi iseva elibamba iyasebenza. Uma ungakholwa ukuthi kumele usebenzise iseva elibamba: <ph name="PLATFORM_TEXT" /></translation> +<translation id="3184534047932533456">I-<ph name="URL" /> ifuna ukwazi lapho ukhona</translation> <translation id="3188393374551744535">Ibhalansi ye-akhawunti</translation> <translation id="3194737229810486521">I-<ph name="URL" /> ifuna ukugcina unaphakade idatha kudivayisi yakho</translation> <translation id="3195213714973468956">I-<ph name="PRINTER_NAME" /> ku-<ph name="SERVER_NAME" /></translation> @@ -1022,6 +1027,7 @@ <translation id="5171689220826475070">Fanfold-European</translation> <translation id="5172758083709347301">Umshini</translation> <translation id="5179510805599951267">Akukho ngesi-<ph name="ORIGINAL_LANGUAGE" />? Bika leli phutha</translation> +<translation id="5179740473595559246">Ukwazi lapho ukhona</translation> <translation id="5190835502935405962">Ibha yamabhukhimakhi</translation> <translation id="519422657042045905">Isichasiselo asitholakali</translation> <translation id="5201306358585911203">Ikhasi elishumekiwe kuleli khasi lewebhu lithi</translation> @@ -1244,6 +1250,7 @@ <translation id="6049488691372270142">Ukulethwa kwekhasi</translation> <translation id="6051221802930200923">Awukwazi ukuvakashela i-<ph name="SITE" /> okwamanje ngoba iwebhusayithi isebenzisa ukuphina kwesitifiketi. Amaphutha wenethiwekhi nokuhlaselwa kuvamise ukuba ngokwesikhashana, ngakho-ke leli khasi lizosebenza ngemuva kwesikhathi..</translation> <translation id="6052284303005792909">•</translation> +<translation id="6053328359599022071">Yabelana ngokuba khona kwakho?</translation> <translation id="6058977677006700226">Sebenzisa amakhadi akho kuwo onke amadivayisi akho?</translation> <translation id="6059925163896151826">Amadivayisi e-USB</translation> <translation id="6060009363608157444">Imodi ye-DnsOverHttps engavumelekile.</translation> @@ -1373,6 +1380,7 @@ <translation id="6631202559048444592">Ngaphezu komthombo owodwa ukhona kwinqubomgomo, kodwa amavelu ayafana.</translation> <translation id="663260587451432563">I-JIS B4</translation> <translation id="6643016212128521049">Sula</translation> +<translation id="6645291930348198241">Finyelela amakhukhi nedatha yesayithi.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Lutho}=1{Kusukela kusayithi elingu-1 (ngeke ukhishwe ngemvume ku-akhawunti yakho ye-Google)}one{Kusukela kumasayithi angu-# (ngeke ukhishwe ngemvume ku-akhawunti yakho ye-Google)}other{Kusukela kumasayithi angu-# (ngeke ukhishwe ngemvume ku-akhawunti yakho ye-Google)}}</translation> <translation id="6648459603387803038">Umlawuli wakho angaguqula ukusethwa kwesiphequluli sakho akude. Umsebenzi kule divayisi ungaphinda aphathwe ngaphandle kwe-Chrome.</translation> <translation id="6652101503459149953">Sebenzisa i-Windows Hello</translation>
diff --git a/components/viz/service/display/gl_renderer.cc b/components/viz/service/display/gl_renderer.cc index 60912b5..e5179c0 100644 --- a/components/viz/service/display/gl_renderer.cc +++ b/components/viz/service/display/gl_renderer.cc
@@ -60,7 +60,6 @@ #include "gpu/command_buffer/common/gpu_memory_allocation.h" #include "gpu/config/gpu_driver_bug_workaround_type.h" #include "gpu/config/gpu_feature_info.h" -#include "media/base/media_switches.h" #include "third_party/skia/include/core/SkBitmap.h" #include "third_party/skia/include/core/SkColor.h" #include "third_party/skia/include/core/SkColorFilter.h"
diff --git a/content/browser/back_forward_cache_browsertest.cc b/content/browser/back_forward_cache_browsertest.cc index 31111e45..15a3c28b 100644 --- a/content/browser/back_forward_cache_browsertest.cc +++ b/content/browser/back_forward_cache_browsertest.cc
@@ -41,7 +41,6 @@ #include "content/public/browser/back_forward_cache.h" #include "content/public/browser/frame_service_base.h" #include "content/public/browser/global_routing_id.h" -#include "content/public/browser/idle_manager.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/site_isolation_policy.h" @@ -54,7 +53,6 @@ #include "content/public/test/browser_test_utils.h" #include "content/public/test/content_browser_test.h" #include "content/public/test/content_browser_test_utils.h" -#include "content/public/test/idle_test_utils.h" #include "content/public/test/navigation_handle_observer.h" #include "content/public/test/test_navigation_observer.h" #include "content/public/test/test_navigation_throttle.h" @@ -680,20 +678,6 @@ base::OnceClosure restore_from_back_forward_cache_sent_; }; -class FakeIdleTimeProvider : public IdleManager::IdleTimeProvider { - public: - FakeIdleTimeProvider() = default; - ~FakeIdleTimeProvider() override = default; - FakeIdleTimeProvider(const FakeIdleTimeProvider&) = delete; - FakeIdleTimeProvider& operator=(const FakeIdleTimeProvider&) = delete; - - base::TimeDelta CalculateIdleTime() override { - return base::TimeDelta::FromSeconds(0); - } - - bool CheckIdleStateIsLocked() override { return false; } -}; - } // namespace // Navigate from A to B and go back. @@ -2191,9 +2175,6 @@ RenderFrameHostImpl* rfh_a = current_frame_host(); RenderFrameDeletedObserver deleted(rfh_a); - content::IdleManagerHelper::SetIdleTimeProviderForTest( - rfh_a, std::make_unique<FakeIdleTimeProvider>()); - EXPECT_TRUE(ExecJs(rfh_a, R"( new Promise(async resolve => { let idleDetector = new IdleDetector();
diff --git a/content/browser/browsing_instance.cc b/content/browser/browsing_instance.cc index 684d467..b5a6cce5 100644 --- a/content/browser/browsing_instance.cc +++ b/content/browser/browsing_instance.cc
@@ -223,7 +223,9 @@ } SiteInfo BrowsingInstance::ComputeSiteInfoForURL(const GURL& url) const { - return SiteInstanceImpl::ComputeSiteInfo(isolation_context_, url); + return SiteInstanceImpl::ComputeSiteInfo( + isolation_context_, url, is_coop_coep_cross_origin_isolated_, + coop_coep_cross_origin_isolated_origin_); } } // namespace content
diff --git a/content/browser/child_process_security_policy_impl.cc b/content/browser/child_process_security_policy_impl.cc index c9ca4b2b..de19a079a 100644 --- a/content/browser/child_process_security_policy_impl.cc +++ b/content/browser/child_process_security_policy_impl.cc
@@ -174,8 +174,12 @@ } // static -ProcessLock ProcessLock::CreateAllowAnySite() { - return ProcessLock(SiteInfo(GURL(), GURL(), false)); +ProcessLock ProcessLock::CreateAllowAnySite( + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin) { + return ProcessLock(SiteInfo(GURL(), GURL(), false, + is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin)); } ProcessLock::ProcessLock(const SiteInfo& site_info) : site_info_(site_info) {} @@ -189,7 +193,7 @@ ProcessLock::~ProcessLock() = default; bool ProcessLock::IsASiteOrOrigin() const { - const GURL& lock_url = ProcessLock::lock_url(); + const GURL lock_url = ProcessLock::lock_url(); return lock_url.has_scheme() && lock_url.has_host() && lock_url.is_valid(); } @@ -203,6 +207,15 @@ return origin == process_lock_origin; } +bool ProcessLock::IsCompatibleWithCoopCoepCrossOriginIsolation( + const SiteInfo& site_info) const { + return site_info_.has_value() && + site_info_->is_coop_coep_cross_origin_isolated() == + site_info.is_coop_coep_cross_origin_isolated() && + site_info_->coop_coep_cross_origin_isolated_origin() == + site_info.coop_coep_cross_origin_isolated_origin(); +} + bool ProcessLock::operator==(const ProcessLock& rhs) const { // As we add additional features to SiteInfo, we'll expand this comparison. // Note that this should *not* compare site_url() values from the SiteInfo, @@ -214,7 +227,11 @@ if (is_equal && site_info_.has_value()) { is_equal = site_info_->process_lock_url() == rhs.site_info_->process_lock_url() && - site_info_->is_origin_keyed() == rhs.site_info_->is_origin_keyed(); + site_info_->is_origin_keyed() == rhs.site_info_->is_origin_keyed() && + (site_info_->is_coop_coep_cross_origin_isolated() == + rhs.site_info_->is_coop_coep_cross_origin_isolated()) && + (site_info_->coop_coep_cross_origin_isolated_origin() == + rhs.site_info_->coop_coep_cross_origin_isolated_origin()); } return is_equal; @@ -233,6 +250,13 @@ if (is_origin_keyed()) ret += " origin-keyed"; + if (is_coop_coep_cross_origin_isolated()) + ret += " cross-origin-isolated"; + + if (coop_coep_cross_origin_isolated_origin().has_value()) { + ret += " coi-origin='" + + coop_coep_cross_origin_isolated_origin()->GetDebugString() + "'"; + } } else { ret += " no-site-info"; } @@ -530,14 +554,23 @@ if (process_lock_.is_invalid()) { DCHECK(lowest_browsing_instance_id_.is_null()); CHECK(lock.allows_any_site() || lock.is_locked_to_site()); - } else if (process_lock_.allows_any_site()) { - // TODO(acolwell): Remove ability to lock to an allows_any_site - // lock multiple times. Legacy behavior allows the old "lock to site" - // path to generate an "allow_any_site" lock if an empty URL is passed to - // SiteInstanceImpl::SetSite(). - CHECK(lock.allows_any_site() || lock.is_locked_to_site()); } else { - NOTREACHED() << "Unexpected lock type."; + // Verify that we are not trying to update the lock with different + // COOP/COEP information. + CHECK_EQ(process_lock_.is_coop_coep_cross_origin_isolated(), + lock.is_coop_coep_cross_origin_isolated()); + CHECK(process_lock_.coop_coep_cross_origin_isolated_origin() == + lock.coop_coep_cross_origin_isolated_origin()); + + if (process_lock_.allows_any_site()) { + // TODO(acolwell): Remove ability to lock to an allows_any_site + // lock multiple times. Legacy behavior allows the old "lock to site" + // path to generate an "allow_any_site" lock if an empty URL is passed + // to SiteInstanceImpl::SetSite(). + CHECK(lock.allows_any_site() || lock.is_locked_to_site()); + } else { + NOTREACHED() << "Unexpected lock type."; + } } process_lock_ = lock; @@ -774,7 +807,10 @@ BrowserContext* browser_context) { Add(child_id, browser_context); LockProcess(IsolationContext(BrowsingInstanceId(1), browser_context), - child_id, ProcessLock::CreateAllowAnySite()); + child_id, + ProcessLock::CreateAllowAnySite( + false /* is_coop_coep_cross_origin_isolated */, + base::nullopt /* coop_coep_cross_origin_isolated_origin */)); } void ChildProcessSecurityPolicyImpl::Remove(int child_id) { @@ -1455,14 +1491,18 @@ int child_id, const IsolationContext& isolation_context, const url::Origin& origin, - const GURL& url) { + const GURL& url, + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin) { const url::Origin url_origin = url::Origin::Resolve(url, origin); if (!CanAccessDataForOrigin(child_id, url_origin)) { // Check for special cases, like blob:null/ and data: URLs, where the // origin does not contain information to match against the process lock, // but using the whole URL can result in a process lock match. const ProcessLock expected_process_lock = - SiteInstanceImpl::DetermineProcessLock(isolation_context, url); + SiteInstanceImpl::DetermineProcessLock( + isolation_context, url, is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin); const ProcessLock& actual_process_lock = GetProcessLock(child_id); if (actual_process_lock == expected_process_lock) return CanCommitStatus::CAN_COMMIT_ORIGIN_AND_URL; @@ -1596,8 +1636,18 @@ // below will return a ProcessLock with an (internally) identical // site_url, one that does not use effective URLs. That's ok in this // instance since we only ever look at the lock url. - expected_process_lock = - SiteInstanceImpl::DetermineProcessLock(isolation_context, url); + // + // Since we are dealing with a valid ProcessLock at this point, we know + // the lock contains valid COOP/COEP information because that information + // must be provided when creating the locks. + // TODO(acolwell): Provide a way for callers, that know + // their request's require COOP/COEP handling, to pass in their COOP/COEP + // information so it can be used here instead of the values in + // |actual_process_lock|. + expected_process_lock = SiteInstanceImpl::DetermineProcessLock( + isolation_context, url, + actual_process_lock.is_coop_coep_cross_origin_isolated(), + actual_process_lock.coop_coep_cross_origin_isolated_origin()); if (actual_process_lock.is_locked_to_site()) { // Jail-style enforcement - a process with a lock can only access data @@ -1658,8 +1708,10 @@ return true; } - SiteInfo site_info = - SiteInstanceImpl::ComputeSiteInfo(isolation_context, url); + SiteInfo site_info = SiteInstanceImpl::ComputeSiteInfo( + isolation_context, url, + actual_process_lock.is_coop_coep_cross_origin_isolated(), + actual_process_lock.coop_coep_cross_origin_isolated_origin()); // A process that's not locked to any site can only access data from // origins that do not require a locked process. @@ -1711,7 +1763,7 @@ int child_id, const GURL& url) { SiteInfo site_info = - SiteInstanceImpl::ComputeSiteInfo(isolation_context, url); + SiteInstanceImpl::ComputeSiteInfoForTesting(isolation_context, url); LockProcess(isolation_context, child_id, ProcessLock(site_info)); }
diff --git a/content/browser/child_process_security_policy_impl.h b/content/browser/child_process_security_policy_impl.h index 57d9198e..4234718e 100644 --- a/content/browser/child_process_security_policy_impl.h +++ b/content/browser/child_process_security_policy_impl.h
@@ -78,8 +78,13 @@ static ProcessLock CreateForErrorPage(); // Create a lock that that represents a process that is associated with at - // least one SiteInstance, but is not locked to a specific site. - static ProcessLock CreateAllowAnySite(); + // least one SiteInstance, but is not locked to a specific site. Any request + // that wants to commit in this process must have COOP/COEP information that + // matches the values used to create this lock. + static ProcessLock CreateAllowAnySite( + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& + coop_coep_cross_origin_isolated_origin); ProcessLock(); explicit ProcessLock(const SiteInfo& site_info); @@ -99,12 +104,16 @@ bool is_invalid() const { return !site_info_.has_value(); } // Returns true if the process is locked, but it is not restricted to a - // specific site. Any site is allowed to commit in the process. + // specific site. Any site is allowed to commit in the process as long as + // the request's COOP/COEP information matches the info provided when + // the lock was created. bool allows_any_site() const { return site_info_.has_value() && site_info_->process_lock_url().is_empty(); } - // Returns true if the lock is restricted to a specific site. + // Returns true if the lock is restricted to a specific site and requires + // the request's COOP/COEP information to match the values provided when + // the lock was created. bool is_locked_to_site() const { return site_info_.has_value() && !site_info_->process_lock_url().is_empty(); } @@ -127,6 +136,24 @@ return site_info_.has_value() && site_info_->is_origin_keyed(); } + // Representing agent cluster's "cross-origin isolated" concept. + // https://html.spec.whatwg.org/multipage/webappapis.html#dom-crossoriginisolated + // This property is renderer process global because we ensure that a + // renderer process host only cross-origin isolated agents or only + // non-cross-origin isolated agents, not both. + bool is_coop_coep_cross_origin_isolated() const { + return site_info_.has_value() && + site_info_->is_coop_coep_cross_origin_isolated(); + } + + // If is_coop_coep_cross_origin_isolated() returns true, this returns the + // origin shared across all top level frames in the renderer process. + base::Optional<url::Origin> coop_coep_cross_origin_isolated_origin() const { + return site_info_.has_value() + ? site_info_->coop_coep_cross_origin_isolated_origin() + : base::nullopt; + } + // Returns whether lock_url() is at least at the granularity of a site (i.e., // a scheme plus eTLD+1, like https://google.com). Also returns true if the // lock is to a more specific origin (e.g., https://accounts.google.com), but @@ -143,6 +170,11 @@ // Returns true if |origin| matches the lock's origin. bool MatchesOrigin(const url::Origin& origin) const; + // Returns true if the COOP/COEP origin isolation information in this lock + // is set and matches the information in |site_info|. + bool IsCompatibleWithCoopCoepCrossOriginIsolation( + const SiteInfo& site_info) const; + bool operator==(const ProcessLock& rhs) const; bool operator!=(const ProcessLock& rhs) const; @@ -329,8 +361,10 @@ const GURL& url, bool url_is_precursor_of_opaque_origin); - // Determines if the combination of |origin| & |url| is safe to commit to - // the process associated with |child_id|. + // Determines if the combination of |origin|, |url|, + // |is_coop_coep_cross_origin_isolated|, and + // |coop_coep_cross_origin_isolated_origin| is safe to commit to the process + // associated with |child_id|. // // Returns CAN_COMMIT_ORIGIN_AND_URL if it is safe to commit the |origin| and // |url| combination to the process associated with |child_id|. @@ -340,7 +374,10 @@ int child_id, const IsolationContext& isolation_context, const url::Origin& origin, - const GURL& url); + const GURL& url, + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& + coop_coep_cross_origin_isolated_origin); // This function will check whether |origin| requires process isolation // within |isolation_context|, and if so, it will return true and put the
diff --git a/content/browser/cookie_store/cookie_store_manager.cc b/content/browser/cookie_store/cookie_store_manager.cc index c62e7b30..64fea4c 100644 --- a/content/browser/cookie_store/cookie_store_manager.cc +++ b/content/browser/cookie_store/cookie_store_manager.cc
@@ -16,9 +16,9 @@ #include "content/browser/service_worker/service_worker_metrics.h" #include "content/browser/service_worker/service_worker_registration.h" #include "content/browser/service_worker/service_worker_version.h" -#include "content/common/service_worker/service_worker_utils.h" #include "content/public/browser/browser_context.h" #include "net/base/registry_controlled_domains/registry_controlled_domain.h" +#include "third_party/blink/public/common/service_worker/service_worker_scope_match.h" #include "third_party/blink/public/common/service_worker/service_worker_status_code.h" #include "third_party/blink/public/mojom/service_worker/service_worker_event_status.mojom.h" #include "url/gurl.h" @@ -187,7 +187,7 @@ } for (const auto& mojo_subscription : mojo_subscriptions) { - if (!ServiceWorkerUtils::ScopeMatches(service_worker_registration->scope(), + if (!blink::ServiceWorkerScopeMatches(service_worker_registration->scope(), mojo_subscription->url)) { // Blink should have validated subscription URLs against the service // worker registration scope. A mismatch here means that the renderer was
diff --git a/content/browser/cross_origin_opener_policy_browsertest.cc b/content/browser/cross_origin_opener_policy_browsertest.cc index 46a1ff73..b75a6744 100644 --- a/content/browser/cross_origin_opener_policy_browsertest.cc +++ b/content/browser/cross_origin_opener_policy_browsertest.cc
@@ -860,9 +860,7 @@ // The page and its popup should be in different processes even though the // process limit was reached. - // TODO(clamy, pmeuleman, ahemery): The assert below should be false once we - // fix the process reuse for COOP. - EXPECT_EQ(current_frame_host()->GetProcess(), + EXPECT_NE(current_frame_host()->GetProcess(), popup_webcontents->GetMainFrame()->GetProcess()); } @@ -891,9 +889,7 @@ // The page and its popup should be in different processes even though the // process limit was reached. - // TODO(clamy, pmeuleman, ahemery): The assert below should be false once we - // fix the process reuse for COOP. - EXPECT_EQ(current_frame_host()->GetProcess(), + EXPECT_NE(current_frame_host()->GetProcess(), popup_webcontents->GetMainFrame()->GetProcess()); // Navigate to a new page without COOP and COEP. Because of process reuse, it @@ -1989,6 +1985,7 @@ SiteInstanceImpl* current_si = current_frame_host()->GetSiteInstance(); EXPECT_TRUE(current_si->IsCoopCoepCrossOriginIsolated()); EXPECT_FALSE(current_si->IsRelatedSiteInstance(previous_si.get())); + EXPECT_NE(current_si->GetProcess(), previous_si->GetProcess()); } // Navigation to the same cross-origin isolated page. @@ -2009,6 +2006,7 @@ SiteInstanceImpl* current_si = current_frame_host()->GetSiteInstance(); EXPECT_FALSE(current_si->IsCoopCoepCrossOriginIsolated()); EXPECT_FALSE(current_si->IsRelatedSiteInstance(previous_si.get())); + EXPECT_NE(current_si->GetProcess(), previous_si->GetProcess()); } // Back navigation from a cross-origin isolated page to a non cross-origin @@ -2030,6 +2028,8 @@ ->IsCoopCoepCrossOriginIsolated()); EXPECT_FALSE(non_cross_origin_isolated_site_instance->IsRelatedSiteInstance( cross_origin_isolated_site_instance.get())); + EXPECT_NE(non_cross_origin_isolated_site_instance->GetProcess(), + cross_origin_isolated_site_instance->GetProcess()); } // Cross origin navigation in between two cross-origin isolated pages. @@ -2042,6 +2042,7 @@ EXPECT_TRUE(site_instance_1->IsCoopCoepCrossOriginIsolated()); EXPECT_TRUE(site_instance_2->IsCoopCoepCrossOriginIsolated()); EXPECT_FALSE(site_instance_1->IsRelatedSiteInstance(site_instance_2)); + EXPECT_NE(site_instance_1->GetProcess(), site_instance_2->GetProcess()); } } @@ -2077,6 +2078,7 @@ SiteInstanceImpl* current_si = current_frame_host()->GetSiteInstance(); EXPECT_TRUE(current_si->IsCoopCoepCrossOriginIsolated()); EXPECT_FALSE(current_si->IsRelatedSiteInstance(previous_si.get())); + EXPECT_NE(current_si->GetProcess(), previous_si->GetProcess()); } // Navigation to the same cross-origin isolated page. @@ -2097,6 +2099,7 @@ SiteInstanceImpl* current_si = current_frame_host()->GetSiteInstance(); EXPECT_FALSE(current_si->IsCoopCoepCrossOriginIsolated()); EXPECT_FALSE(current_si->IsRelatedSiteInstance(previous_si.get())); + EXPECT_NE(current_si->GetProcess(), previous_si->GetProcess()); } // Cross origin navigation in between two cross-origin isolated pages. @@ -2109,6 +2112,7 @@ EXPECT_TRUE(site_instance_1->IsCoopCoepCrossOriginIsolated()); EXPECT_TRUE(site_instance_2->IsCoopCoepCrossOriginIsolated()); EXPECT_FALSE(site_instance_1->IsRelatedSiteInstance(site_instance_2)); + EXPECT_NE(site_instance_1->GetProcess(), site_instance_2->GetProcess()); } } @@ -2169,6 +2173,7 @@ SiteInstanceImpl* iframe_si = iframe->GetSiteInstance(); EXPECT_TRUE(iframe_si->IsCoopCoepCrossOriginIsolated()); EXPECT_TRUE(iframe_si->IsRelatedSiteInstance(main_si)); + EXPECT_EQ(iframe_si->GetProcess(), main_si->GetProcess()); } } @@ -2239,6 +2244,8 @@ EXPECT_FALSE(popup_frame->GetSiteInstance()->IsRelatedSiteInstance( current_frame_host()->GetSiteInstance())); EXPECT_FALSE(popup_frame->frame_tree_node()->opener()); + EXPECT_NE(popup_frame->GetSiteInstance()->GetProcess(), + current_frame_host()->GetSiteInstance()->GetProcess()); } } @@ -2338,6 +2345,7 @@ EXPECT_FALSE(NavigateToURL(shell(), invalid_url)); SiteInstanceImpl* current_si = current_frame_host()->GetSiteInstance(); EXPECT_FALSE(current_si->IsRelatedSiteInstance(previous_si.get())); + EXPECT_NE(current_si->GetProcess(), previous_si->GetProcess()); EXPECT_FALSE(current_si->IsCoopCoepCrossOriginIsolated()); } }
diff --git a/content/browser/idle/idle_manager_impl.cc b/content/browser/idle/idle_manager_impl.cc index 83b66e4d..20d5257 100644 --- a/content/browser/idle/idle_manager_impl.cc +++ b/content/browser/idle/idle_manager_impl.cc
@@ -137,7 +137,7 @@ BrowserContext::GetPermissionController(browser_context_); DCHECK(permission_controller); PermissionStatus status = permission_controller->GetPermissionStatus( - PermissionType::IDLE_DETECTION, origin.GetURL(), origin.GetURL()); + PermissionType::NOTIFICATIONS, origin.GetURL(), origin.GetURL()); return status == PermissionStatus::GRANTED; }
diff --git a/content/browser/idle/idle_manager_unittest.cc b/content/browser/idle/idle_manager_unittest.cc index 912db8e..6e9d58a 100644 --- a/content/browser/idle/idle_manager_unittest.cc +++ b/content/browser/idle/idle_manager_unittest.cc
@@ -93,7 +93,7 @@ void SetPermissionStatus(const GURL& origin, blink::mojom::PermissionStatus permission_status) { ON_CALL(*permission_manager_, - GetPermissionStatus(PermissionType::IDLE_DETECTION, origin, origin)) + GetPermissionStatus(PermissionType::NOTIFICATIONS, origin, origin)) .WillByDefault(Return(permission_status)); } @@ -368,7 +368,7 @@ bad_message_observer.WaitForBadMessage()); } -TEST_F(IdleManagerTest, PermissionDenied) { +TEST_F(IdleManagerTest, NotificationPermissionDisabled) { SetPermissionStatus(url(), blink::mojom::PermissionStatus::DENIED); MockIdleMonitor monitor;
diff --git a/content/browser/isolated_origin_browsertest.cc b/content/browser/isolated_origin_browsertest.cc index d19dbaed..86db1d94 100644 --- a/content/browser/isolated_origin_browsertest.cc +++ b/content/browser/isolated_origin_browsertest.cc
@@ -79,7 +79,10 @@ } ProcessLock ProcessLockFromUrl(const std::string& url) { - return ProcessLock(SiteInfo(GURL(url), GURL(url), false)); + return ProcessLock( + SiteInfo(GURL(url), GURL(url), false /* is_origin_keyed */, + false /* is_coop_coep_cross_origin_isolated */, + base::nullopt /* coop_coep_cross_origin_isolated_origin */)); } WebContentsImpl* web_contents() const { @@ -96,7 +99,9 @@ ProcessLock GetStrictProcessLock(const GURL& url) { GURL origin_url = url::Origin::Create(url).GetURL(); return ProcessLock( - SiteInfo(origin_url, origin_url, false /* is_origin_keyed */)); + SiteInfo(origin_url, origin_url, false /* is_origin_keyed */, + false /* is_coop_coep_cross_origin_isolated */, + base::nullopt /* coop_coep_cross_origin_isolated_origin */)); } private: @@ -424,8 +429,10 @@ GURL isolated_suborigin_url( https_server()->GetURL("isolated.foo.com", "/isolate_origin")); GURL origin_url = url::Origin::Create(isolated_suborigin_url).GetURL(); - auto expected_isolated_suborigin_lock = - ProcessLock(SiteInfo(origin_url, origin_url, true /* is_origin_keyed */)); + auto expected_isolated_suborigin_lock = ProcessLock( + SiteInfo(origin_url, origin_url, true /* is_origin_keyed */, + false /* is_coop_coep_cross_origin_isolated */, + base::nullopt /* coop_coep_cross_origin_isolated_origin */)); EXPECT_TRUE(NavigateToURL(shell(), test_url)); EXPECT_EQ(2u, shell()->web_contents()->GetAllFrames().size()); @@ -1405,11 +1412,11 @@ // Calculate the expected SiteInfo for each URL. Both |foo_url| and // |bar_url| should have a site URL of |app_url|, but the process locks // should be foo.com and bar.com. - SiteInfo foo_site_info = SiteInstanceImpl::ComputeSiteInfo( + SiteInfo foo_site_info = SiteInstanceImpl::ComputeSiteInfoForTesting( web_contents()->GetSiteInstance()->GetIsolationContext(), foo_url); EXPECT_EQ(app_url, foo_site_info.site_url()); EXPECT_EQ(foo_url.GetOrigin(), foo_site_info.process_lock_url()); - SiteInfo bar_site_info = SiteInstanceImpl::ComputeSiteInfo( + SiteInfo bar_site_info = SiteInstanceImpl::ComputeSiteInfoForTesting( web_contents()->GetSiteInstance()->GetIsolationContext(), bar_url); EXPECT_EQ(app_url, bar_site_info.site_url()); EXPECT_EQ(bar_url.GetOrigin(), bar_site_info.process_lock_url()); @@ -1963,7 +1970,7 @@ const GURL& url) { return RenderProcessHostImpl::IsSuitableHost( process, isolation_context, - SiteInstanceImpl::ComputeSiteInfo(isolation_context, url), + SiteInstanceImpl::ComputeSiteInfoForTesting(isolation_context, url), /* is_guest= */ false); }; EXPECT_TRUE(is_suitable_host(foo_process, foo_url));
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc index 166b389..6c6e3f5 100644 --- a/content/browser/renderer_host/navigation_request.cc +++ b/content/browser/renderer_host/navigation_request.cc
@@ -1439,7 +1439,9 @@ // starting SiteInstance. starting_site_instance_ = frame_tree_node->current_frame_host()->GetSiteInstance(); - site_info_ = GetSiteInfoForCommonParamsURL(); + site_info_ = GetSiteInfoForCommonParamsURL( + starting_site_instance_->IsCoopCoepCrossOriginIsolated(), + starting_site_instance_->CoopCoepCrossOriginIsolatedOrigin()); // Compute the redirect chain. // TODO(clamy): Try to simplify this and have the redirects be part of @@ -1891,7 +1893,14 @@ RenderProcessHost* expected_process = site_instance->HasProcess() ? site_instance->GetProcess() : nullptr; - WillRedirectRequest(common_params_->referrer->url, expected_process); + bool is_coop_coep_cross_origin_isolated; + base::Optional<url::Origin> coop_coep_cross_origin_isolated_origin; + frame_tree_node_->render_manager()->GetCoopCoepCrossOriginIsolationInfo( + this, &is_coop_coep_cross_origin_isolated, + &coop_coep_cross_origin_isolated_origin); + WillRedirectRequest(common_params_->referrer->url, + is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin, expected_process); } void NavigationRequest::CheckForIsolationOptIn(const GURL& url) { @@ -2371,10 +2380,13 @@ // https://crbug.com/738634. SiteInstanceImpl* instance = render_frame_host_->GetSiteInstance(); const IsolationContext& isolation_context = instance->GetIsolationContext(); + auto site_info = SiteInstanceImpl::ComputeSiteInfo( + isolation_context, common_params_->url, + instance->IsCoopCoepCrossOriginIsolated(), + instance->CoopCoepCrossOriginIsolatedOrigin()); if (!instance->HasSite() && - SiteInstanceImpl::DoesSiteInfoRequireDedicatedProcess( - isolation_context, SiteInstanceImpl::ComputeSiteInfo( - isolation_context, common_params_->url))) { + SiteInstanceImpl::DoesSiteInfoRequireDedicatedProcess(isolation_context, + site_info)) { instance->ConvertToDefaultOrSetSite(common_params_->url); } @@ -3350,11 +3362,16 @@ } void NavigationRequest::UpdateSiteInfo( + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin, RenderProcessHost* post_redirect_process) { - SiteInfo new_site_info = GetSiteInfoForCommonParamsURL(); int post_redirect_process_id = post_redirect_process ? post_redirect_process->GetID() : ChildProcessHost::kInvalidUniqueID; + + SiteInfo new_site_info = + GetSiteInfoForCommonParamsURL(is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin); if (new_site_info == site_info_ && post_redirect_process_id == expected_render_process_host_id_) { return; @@ -3932,11 +3949,14 @@ void NavigationRequest::WillRedirectRequest( const GURL& new_referrer_url, + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin, RenderProcessHost* post_redirect_process) { EnterChildTraceEvent("WillRedirectRequest", this, "url", common_params_->url.possibly_invalid_spec()); UpdateStateFollowingRedirect(new_referrer_url); - UpdateSiteInfo(post_redirect_process); + UpdateSiteInfo(is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin, post_redirect_process); if (IsSelfReferentialURL()) { SetState(CANCELING); @@ -4096,11 +4116,16 @@ } } -SiteInfo NavigationRequest::GetSiteInfoForCommonParamsURL() const { +SiteInfo NavigationRequest::GetSiteInfoForCommonParamsURL( + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin) + const { // TODO(alexmos): Using |starting_site_instance_|'s IsolationContext may not // be correct for cross-BrowsingInstance redirects. return SiteInstanceImpl::ComputeSiteInfo( - starting_site_instance_->GetIsolationContext(), common_params_->url); + starting_site_instance_->GetIsolationContext(), common_params_->url, + is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin); } // TODO(zetamoo): Try to merge this function inside its callers.
diff --git a/content/browser/renderer_host/navigation_request.h b/content/browser/renderer_host/navigation_request.h index 6bbb5493..0cafd8ae 100644 --- a/content/browser/renderer_host/navigation_request.h +++ b/content/browser/renderer_host/navigation_request.h
@@ -414,7 +414,13 @@ // redirects. |post_redirect_process| is the renderer process that should // handle the navigation following the redirect if it can be handled by an // existing RenderProcessHost. Otherwise, it should be null. - void UpdateSiteInfo(RenderProcessHost* post_redirect_process); + // |is_coop_coep_cross_origin_isolated| & + // |coop_coep_cross_origin_isolated_origin| is the new COOP/COEP info + // extracted from the redirect response. + void UpdateSiteInfo( + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin, + RenderProcessHost* post_redirect_process); int nav_entry_id() const { return nav_entry_id_; } @@ -925,8 +931,15 @@ // the navigation now that it has been redirected. It can be null if there is // no live process that can be used. In that case, a suitable renderer process // will be created at commit time. - void WillRedirectRequest(const GURL& new_referrer_url, - RenderProcessHost* post_redirect_process); + // + // |is_coop_coep_cross_origin_isolated| & + // |coop_coep_cross_origin_isolated_origin| is the new COOP/COEP info + // extracted from the redirect response. + void WillRedirectRequest( + const GURL& new_referrer_url, + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin, + RenderProcessHost* post_redirect_process); // Called when the URLRequest will fail. void WillFailRequest(); @@ -955,7 +968,10 @@ // Helper function that computes the SiteInfo for |common_params_.url|. // Note: |site_info_| should only be updated with the result of this function. - SiteInfo GetSiteInfoForCommonParamsURL() const; + SiteInfo GetSiteInfoForCommonParamsURL( + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin) + const; // Updates the state of the navigation handle after encountering a server // redirect.
diff --git a/content/browser/renderer_host/navigation_request_unittest.cc b/content/browser/renderer_host/navigation_request_unittest.cc index e3567b2a..56a09b1b 100644 --- a/content/browser/renderer_host/navigation_request_unittest.cc +++ b/content/browser/renderer_host/navigation_request_unittest.cc
@@ -113,7 +113,10 @@ base::BindOnce(&NavigationRequestTest::UpdateThrottleCheckResult, base::Unretained(this))); - request_->WillRedirectRequest(GURL(), nullptr); + request_->WillRedirectRequest( + GURL(), false /* is_coop_coep_cross_origin_isolated */, + base::nullopt /* coop_coep_cross_origin_isolated_origin */, + nullptr /* post_redirect_process */); } // Helper function to call WillFailRequest on |handle|. If this function
diff --git a/content/browser/renderer_host/navigator.cc b/content/browser/renderer_host/navigator.cc index f59b32c..e44c9e0 100644 --- a/content/browser/renderer_host/navigator.cc +++ b/content/browser/renderer_host/navigator.cc
@@ -135,11 +135,14 @@ // Embedders might disable locking for WebUI URLs, which is bad idea, however // this method should take this into account. + SiteInstanceImpl* site_instance = render_frame_host->GetSiteInstance(); SiteInfo site_info = SiteInstanceImpl::ComputeSiteInfo( - render_frame_host->GetSiteInstance()->GetIsolationContext(), url); - bool should_lock_process = SiteInstanceImpl::ShouldLockProcess( - render_frame_host->GetSiteInstance()->GetIsolationContext(), site_info, - render_frame_host->GetSiteInstance()->IsGuest()); + site_instance->GetIsolationContext(), url, + site_instance->IsCoopCoepCrossOriginIsolated(), + site_instance->CoopCoepCrossOriginIsolatedOrigin()); + bool should_lock_process = + SiteInstanceImpl::ShouldLockProcess(site_instance->GetIsolationContext(), + site_info, site_instance->IsGuest()); // If the |render_frame_host| has any WebUI bindings, disallow URLs that are // not allowed in a WebUI renderer process. @@ -247,7 +250,11 @@ } bool is_cross_document_same_site_navigation = !is_same_document_navigation && - old_frame_host->IsNavigationSameSite(params.url); + old_frame_host->IsNavigationSameSite( + params.url, + render_frame_host->GetSiteInstance()->IsCoopCoepCrossOriginIsolated(), + render_frame_host->GetSiteInstance() + ->CoopCoepCrossOriginIsolatedOrigin()); if (is_cross_document_same_site_navigation) { UMA_HISTOGRAM_BOOLEAN( "BackForwardCache.ProactiveSameSiteBISwap.SameSiteNavigationDidSwap",
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc index ead54af..c7f2d8e 100644 --- a/content/browser/renderer_host/render_frame_host_impl.cc +++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -5496,7 +5496,8 @@ auto* policy = ChildProcessSecurityPolicyImpl::GetInstance(); const CanCommitStatus can_commit_status = policy->CanCommitOriginAndUrl( GetProcess()->GetID(), GetSiteInstance()->GetIsolationContext(), origin, - url); + url, GetSiteInstance()->IsCoopCoepCrossOriginIsolated(), + GetSiteInstance()->CoopCoepCrossOriginIsolatedOrigin()); if (can_commit_status != CanCommitStatus::CAN_COMMIT_ORIGIN_AND_URL) { LogCanCommitOriginAndUrlFailureReason("cpspi_disallowed_commit"); return can_commit_status; @@ -5873,7 +5874,9 @@ if (old_frame_host->GetProcess() != GetProcess()) { return false; } - if (!old_frame_host->IsNavigationSameSite(dest_url)) { + if (!old_frame_host->IsNavigationSameSite( + dest_url, GetSiteInstance()->IsCoopCoepCrossOriginIsolated(), + GetSiteInstance()->CoopCoepCrossOriginIsolatedOrigin())) { return false; } DCHECK(frame_tree_node_->IsMainFrame()); @@ -7898,10 +7901,13 @@ } void RenderFrameHostImpl::SetLastCommittedSiteInfo(const GURL& url) { - SiteInfo site_info = url.is_empty() - ? SiteInfo() - : SiteInstanceImpl::ComputeSiteInfo( - GetSiteInstance()->GetIsolationContext(), url); + SiteInfo site_info = + url.is_empty() + ? SiteInfo() + : SiteInstanceImpl::ComputeSiteInfo( + GetSiteInstance()->GetIsolationContext(), url, + GetSiteInstance()->IsCoopCoepCrossOriginIsolated(), + GetSiteInstance()->CoopCoepCrossOriginIsolatedOrigin()); if (last_committed_site_info_ == site_info) return; @@ -8065,7 +8071,16 @@ BackForwardCacheImpl::GetChannelAssociatedMessageHandlingPolicy()); } -bool RenderFrameHostImpl::IsNavigationSameSite(const GURL& dest_url) { +bool RenderFrameHostImpl::IsNavigationSameSite( + const GURL& dest_url, + bool is_coop_coep_cross_origin_isolated, + base::Optional<url::Origin> coop_coep_cross_origin_isolated_origin) { + if (GetSiteInstance()->IsCoopCoepCrossOriginIsolated() != + is_coop_coep_cross_origin_isolated || + GetSiteInstance()->CoopCoepCrossOriginIsolatedOrigin() != + coop_coep_cross_origin_isolated_origin) { + return false; + } return GetSiteInstance()->IsNavigationSameSite( last_successful_url(), GetLastCommittedOrigin(), frame_tree_node()->IsMainFrame(), dest_url);
diff --git a/content/browser/renderer_host/render_frame_host_impl.h b/content/browser/renderer_host/render_frame_host_impl.h index 260569c6..69fd45c 100644 --- a/content/browser/renderer_host/render_frame_host_impl.h +++ b/content/browser/renderer_host/render_frame_host_impl.h
@@ -567,7 +567,17 @@ // current contents of this frame. This is the primary entry point for // determining if a navigation to |dest_url| should stay in this // RenderFrameHost's SiteInstance. - bool IsNavigationSameSite(const GURL& dest_url); + // + // |is_coop_coep_cross_origin_isolated| should be true if the response for + // |dest_url| has set COOP and COEP headers to same-origin and require-corp + // respectively. + // if |is_coop_coep_cross_origin_isolated| is true, + // |coop_coep_cross_origin_isolated_origin| indicates the top level origin + // of the page. + bool IsNavigationSameSite( + const GURL& dest_url, + bool is_coop_coep_cross_origin_isolated, + base::Optional<url::Origin> coop_coep_cross_origin_isolated_origin); // Returns |frame_origin| if this frame is the top (i.e. root) frame in the // frame tree. Otherwise, it returns the top frame's origin.
diff --git a/content/browser/renderer_host/render_frame_host_manager.cc b/content/browser/renderer_host/render_frame_host_manager.cc index a99aca2..abe9ae0 100644 --- a/content/browser/renderer_host/render_frame_host_manager.cc +++ b/content/browser/renderer_host/render_frame_host_manager.cc
@@ -93,7 +93,9 @@ // same-site navigations, as well as to renderer-initiated navigations. bool ShouldSwapBrowsingInstancesForDynamicIsolation( RenderFrameHostImpl* current_rfh, - const GURL& destination_effective_url) { + const GURL& destination_effective_url, + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin) { // Only main frames are eligible to swap BrowsingInstances. if (!current_rfh->frame_tree_node()->IsMainFrame()) return false; @@ -109,8 +111,10 @@ auto& current_isolation_context = current_instance->GetIsolationContext(); if (SiteInstanceImpl::DoesSiteInfoRequireDedicatedProcess( current_isolation_context, - SiteInstanceImpl::ComputeSiteInfo(current_isolation_context, - destination_effective_url))) { + SiteInstanceImpl::ComputeSiteInfo( + current_isolation_context, destination_effective_url, + is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin))) { return false; } @@ -121,7 +125,9 @@ IsolationContext future_isolation_context( current_instance->GetBrowserContext()); auto future_site_info = SiteInstanceImpl::ComputeSiteInfo( - future_isolation_context, destination_effective_url); + future_isolation_context, destination_effective_url, + is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin); return SiteInstanceImpl::DoesSiteInfoRequireDedicatedProcess( future_isolation_context, future_site_info); } @@ -1181,6 +1187,8 @@ SiteInstanceImpl* current_instance, SiteInstance* destination_instance, const GURL& destination_url, + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin, bool destination_is_view_source_mode, ui::PageTransition transition, bool is_failure, @@ -1189,7 +1197,6 @@ bool cross_origin_opener_policy_mismatch, bool was_server_redirect, bool should_replace_current_entry, - bool is_coop_coep_cross_origin_isolated, bool is_speculative) { // A subframe must stay in the same BrowsingInstance as its parent. if (!frame_tree_node_->IsMainFrame()) @@ -1313,7 +1320,9 @@ // after user has typed in a password) can utilize a dedicated process when // possible (e.g., when there are no existing script references). if (ShouldSwapBrowsingInstancesForDynamicIsolation( - render_frame_host_.get(), destination_effective_url)) { + render_frame_host_.get(), destination_effective_url, + is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin)) { return ShouldSwapBrowsingInstance::kYes_ForceSwap; } @@ -1327,7 +1336,9 @@ is_failure && SiteIsolationPolicy::IsErrorPageIsolationEnabled( frame_tree_node_->IsMainFrame()); if (current_instance->HasSite() && - !render_frame_host_->IsNavigationSameSite(destination_url) && + !render_frame_host_->IsNavigationSameSite( + destination_url, is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin) && !CanUseSourceSiteInstance( destination_url, source_instance, was_server_redirect, is_failure, is_coop_coep_cross_origin_isolated, is_speculative) && @@ -1340,13 +1351,17 @@ // Experimental mode to swap BrowsingInstances on most navigations when there // are no other windows in the BrowsingInstance. - return ShouldProactivelySwapBrowsingInstance(destination_url, is_reload, - should_replace_current_entry); + return ShouldProactivelySwapBrowsingInstance( + destination_url, is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin, is_reload, + should_replace_current_entry); } ShouldSwapBrowsingInstance RenderFrameHostManager::ShouldProactivelySwapBrowsingInstance( const GURL& destination_url, + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin, bool is_reload, bool should_replace_current_entry) { // If we've disabled proactive BrowsingInstance swap for this RenderFrameHost, @@ -1421,7 +1436,9 @@ if (is_reload) return ShouldSwapBrowsingInstance::kNo_Reload; - bool is_same_site = render_frame_host_->IsNavigationSameSite(destination_url); + bool is_same_site = render_frame_host_->IsNavigationSameSite( + destination_url, is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin); if (is_same_site) { // If it's a same-site navigation, we should only swap if same-site // ProactivelySwapBrowsingInstance is enabled, or if same-site @@ -1470,6 +1487,8 @@ scoped_refptr<SiteInstance> RenderFrameHostManager::GetSiteInstanceForNavigation( const GURL& dest_url, + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin, SiteInstanceImpl* source_instance, SiteInstanceImpl* dest_instance, SiteInstanceImpl* candidate_instance, @@ -1482,7 +1501,6 @@ bool was_server_redirect, bool cross_origin_opener_policy_mismatch, bool should_replace_current_entry, - bool is_coop_coep_cross_origin_isolated, bool is_speculative, bool* did_same_site_proactive_browsing_instance_swap) { // Make sure |did_same_site_proactive_browsing_instance_swap| is initialized @@ -1537,14 +1555,17 @@ ? current_entry->IsViewSourceMode() : dest_is_view_source_mode; + SiteInstanceImpl* current_instance_impl = + static_cast<SiteInstanceImpl*>(current_instance); ShouldSwapBrowsingInstance should_swap_result = ShouldSwapBrowsingInstancesForNavigation( current_effective_url, current_is_view_source_mode, source_instance, - static_cast<SiteInstanceImpl*>(current_instance), dest_instance, - dest_url, dest_is_view_source_mode, transition, is_failure, is_reload, - is_same_document, cross_origin_opener_policy_mismatch, - was_server_redirect, should_replace_current_entry, - is_coop_coep_cross_origin_isolated, is_speculative); + current_instance_impl, dest_instance, dest_url, + is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin, dest_is_view_source_mode, + transition, is_failure, is_reload, is_same_document, + cross_origin_opener_policy_mismatch, was_server_redirect, + should_replace_current_entry, is_speculative); bool proactive_swap = (should_swap_result == ShouldSwapBrowsingInstance::kYes_CrossSiteProactiveSwap || @@ -1558,9 +1579,11 @@ should_swap_result); } SiteInstanceDescriptor new_instance_descriptor = DetermineSiteInstanceForURL( - dest_url, source_instance, current_instance, dest_instance, transition, - is_failure, dest_is_restore, dest_is_view_source_mode, should_swap, - was_server_redirect, is_coop_coep_cross_origin_isolated, is_speculative); + dest_url, is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin, source_instance, current_instance, + dest_instance, transition, is_failure, dest_is_restore, + dest_is_view_source_mode, should_swap, was_server_redirect, + is_speculative); scoped_refptr<SiteInstance> new_instance = ConvertToSiteInstance( new_instance_descriptor, candidate_instance, is_speculative); @@ -1653,7 +1676,9 @@ IsSameSiteBackForwardCacheEnabled(); if (is_same_site_proactive_swap_enabled && is_history_navigation && swapped_browsing_instance && - render_frame_host_->IsNavigationSameSite(dest_url)) { + render_frame_host_->IsNavigationSameSite( + dest_url, is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin)) { reuse_current_process_if_possible = true; } @@ -1718,6 +1743,8 @@ RenderFrameHostManager::SiteInstanceDescriptor RenderFrameHostManager::DetermineSiteInstanceForURL( const GURL& dest_url, + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin, SiteInstance* source_instance, SiteInstance* current_instance, SiteInstance* dest_instance, @@ -1727,7 +1754,6 @@ bool dest_is_view_source_mode, bool force_browsing_instance_swap, bool was_server_redirect, - bool is_coop_coep_cross_origin_isolated, bool is_speculative) { // Note that this function should return SiteInstance with // SiteInstanceRelation::UNRELATED relation to |current_instance| iff @@ -1841,7 +1867,9 @@ DCHECK_EQ(controller.GetBrowserContext(), current_instance_impl->GetBrowserContext()); const SiteInfo dest_site_info = SiteInstanceImpl::ComputeSiteInfo( - current_instance_impl->GetIsolationContext(), dest_url); + current_instance_impl->GetIsolationContext(), dest_url, + is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin); bool use_process_per_site = RenderProcessHostImpl::ShouldUseProcessPerSite( current_instance_impl->GetBrowserContext(), dest_site_info) && @@ -1886,7 +1914,9 @@ } // Use the current SiteInstance for same site navigations. - if (render_frame_host_->IsNavigationSameSite(dest_url) && + if (render_frame_host_->IsNavigationSameSite( + dest_url, is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin) && IsSiteInstanceCompatibleWithCoopCoepCrossOriginIsolation( render_frame_host_->GetSiteInstance(), frame_tree_node_->IsMainFrame(), dest_url, @@ -1912,16 +1942,22 @@ if (!frame_tree_node_->IsMainFrame()) { RenderFrameHostImpl* main_frame = frame_tree_node_->frame_tree()->root()->current_frame_host(); - if (IsCandidateSameSite(main_frame, dest_url)) + if (IsCandidateSameSite(main_frame, dest_url, + is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin)) return SiteInstanceDescriptor(main_frame->GetSiteInstance()); RenderFrameHostImpl* parent = frame_tree_node_->parent(); - if (IsCandidateSameSite(parent, dest_url)) + if (IsCandidateSameSite(parent, dest_url, + is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin)) return SiteInstanceDescriptor(parent->GetSiteInstance()); } if (frame_tree_node_->opener()) { RenderFrameHostImpl* opener_frame = frame_tree_node_->opener()->current_frame_host(); - if (IsCandidateSameSite(opener_frame, dest_url)) + if (IsCandidateSameSite(opener_frame, dest_url, + is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin)) return SiteInstanceDescriptor(opener_frame->GetSiteInstance()); } @@ -1947,8 +1983,10 @@ bool dest_url_requires_dedicated_process = SiteInstanceImpl::DoesSiteInfoRequireDedicatedProcess( parent_isolation_context, - SiteInstanceImpl::ComputeSiteInfo(parent_isolation_context, - dest_url)); + SiteInstanceImpl::ComputeSiteInfo( + parent_isolation_context, dest_url, + is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin)); if (!parent->GetSiteInstance()->RequiresDedicatedProcess() && !dest_url_requires_dedicated_process) { return SiteInstanceDescriptor(parent->GetSiteInstance()); @@ -2103,10 +2141,20 @@ return true; } -bool RenderFrameHostManager::IsCandidateSameSite(RenderFrameHostImpl* candidate, - const GURL& dest_url) { +bool RenderFrameHostManager::IsCandidateSameSite( + RenderFrameHostImpl* candidate, + const GURL& dest_url, + bool is_coop_coep_cross_origin_isolated, + base::Optional<url::Origin> coop_coep_cross_origin_isolated_origin) { DCHECK_EQ(delegate_->GetControllerForRenderManager().GetBrowserContext(), candidate->GetSiteInstance()->GetBrowserContext()); + if (candidate->GetSiteInstance()->IsCoopCoepCrossOriginIsolated() != + is_coop_coep_cross_origin_isolated || + candidate->GetSiteInstance()->CoopCoepCrossOriginIsolatedOrigin() != + coop_coep_cross_origin_isolated_origin) { + return false; + } + // Note: We are mixing the frame_tree_node_->IsMainFrame() status of this // object with the URL & origin of |candidate|. This is to determine if // |dest_url| would be considered "same site" if |candidate| occupied the @@ -2467,6 +2515,38 @@ return created; } +void RenderFrameHostManager::GetCoopCoepCrossOriginIsolationInfo( + NavigationRequest* navigation_request, + bool* is_coop_coep_cross_origin_isolated, + base::Optional<url::Origin>* coop_coep_cross_origin_isolated_origin) { + *is_coop_coep_cross_origin_isolated = false; + *coop_coep_cross_origin_isolated_origin = base::nullopt; + + if (base::FeatureList::IsEnabled(network::features::kCrossOriginIsolated)) { + if (frame_tree_node_->IsMainFrame()) { + *is_coop_coep_cross_origin_isolated = + navigation_request->coop_status().current_coop().value == + network::mojom::CrossOriginOpenerPolicyValue::kSameOriginPlusCoep; + if (*is_coop_coep_cross_origin_isolated) { + *coop_coep_cross_origin_isolated_origin = + url::Origin::Create(navigation_request->common_params().url); + } + } else { + // If we are in an iframe, we inherit the cross-origin isolated state of + // the top level frame. This can be inferred from the main frame + // SiteInstance. Note that Iframes have to pass COEP tests in + // |OnResponseStarted| before being loaded and inheriting this + // cross-origin isolated state. + SiteInstanceImpl* main_frame_site_instance = + render_frame_host_->GetMainFrame()->GetSiteInstance(); + *is_coop_coep_cross_origin_isolated = + main_frame_site_instance->IsCoopCoepCrossOriginIsolated(); + *coop_coep_cross_origin_isolated_origin = + main_frame_site_instance->CoopCoepCrossOriginIsolatedOrigin(); + } + } +} + scoped_refptr<SiteInstance> RenderFrameHostManager::GetSiteInstanceForNavigationRequest( NavigationRequest* request) { @@ -2501,27 +2581,15 @@ NavigationTypeUtils::IsReload(request->common_params().navigation_type); bool did_same_site_proactive_browsing_instance_swap = false; - bool is_coop_coep_cross_origin_isolated = false; - if (base::FeatureList::IsEnabled(network::features::kCrossOriginIsolated)) { - if (frame_tree_node_->IsMainFrame()) { - is_coop_coep_cross_origin_isolated = - request->coop_status().current_coop().value == - network::mojom::CrossOriginOpenerPolicyValue::kSameOriginPlusCoep; - } else { - // If we are in an iframe, we inherit the cross-origin isolated state of - // the top level frame. This can be inferred from the main frame - // SiteInstance. Note that Iframes have to pass COEP tests in - // |OnResponseStarted| before being loaded and inheriting this - // cross-origin isolated state. - is_coop_coep_cross_origin_isolated = - render_frame_host_->GetMainFrame() - ->GetSiteInstance() - ->IsCoopCoepCrossOriginIsolated(); - } - } + bool is_coop_coep_cross_origin_isolated; + base::Optional<url::Origin> coop_coep_cross_origin_isolated_origin; + GetCoopCoepCrossOriginIsolationInfo(request, + &is_coop_coep_cross_origin_isolated, + &coop_coep_cross_origin_isolated_origin); scoped_refptr<SiteInstance> dest_site_instance = GetSiteInstanceForNavigation( - request->common_params().url, request->GetSourceSiteInstance(), + request->common_params().url, is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin, request->GetSourceSiteInstance(), request->dest_site_instance(), candidate_site_instance, request->common_params().transition, request->state() >= NavigationRequest::CANCELING, is_reload, @@ -2529,7 +2597,6 @@ request->is_view_source(), request->WasServerRedirect(), request->coop_status().require_browsing_instance_swap(), request->common_params().should_replace_current_entry, - is_coop_coep_cross_origin_isolated, request->state() < NavigationRequest::NavigationState:: WILL_REDIRECT_REQUEST /* is_speculative */, &did_same_site_proactive_browsing_instance_swap);
diff --git a/content/browser/renderer_host/render_frame_host_manager.h b/content/browser/renderer_host/render_frame_host_manager.h index 822686b..b8d5110b 100644 --- a/content/browser/renderer_host/render_frame_host_manager.h +++ b/content/browser/renderer_host/render_frame_host_manager.h
@@ -524,6 +524,13 @@ attach_to_inner_delegate_state_ = AttachToInnerDelegateState::ATTACHED; } + // Computes the COOP/COEP information based on the |navigation_request| + // and current |frame_tree_node_| & |render_frame_host_| info. + void GetCoopCoepCrossOriginIsolationInfo( + NavigationRequest* navigation_request, + bool* is_coop_coep_cross_origin_isolated, + base::Optional<url::Origin>* coop_coep_cross_origin_isolated_origin); + private: friend class NavigatorTest; friend class RenderFrameHostManagerTest; @@ -622,6 +629,8 @@ SiteInstanceImpl* current_instance, SiteInstance* destination_instance, const GURL& destination_url, + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin, bool destination_is_view_source_mode, ui::PageTransition transition, bool is_failure, @@ -630,17 +639,20 @@ bool cross_origin_opener_policy_mismatch, bool was_server_redirect, bool should_replace_current_entry, - bool is_coop_coep_cross_origin_isolated, bool is_speculative); ShouldSwapBrowsingInstance ShouldProactivelySwapBrowsingInstance( const GURL& destination_url, + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin, bool is_reload, bool should_replace_current_entry); // Returns the SiteInstance to use for the navigation. scoped_refptr<SiteInstance> GetSiteInstanceForNavigation( const GURL& dest_url, + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin, SiteInstanceImpl* source_instance, SiteInstanceImpl* dest_instance, SiteInstanceImpl* candidate_instance, @@ -653,7 +665,6 @@ bool was_server_redirect, bool cross_origin_opener_policy_mismatch, bool should_replace_current_entry, - bool is_coop_coep_cross_origin_isolated, bool is_speculative, bool* did_same_site_proactive_browsing_instance_swap); @@ -662,6 +673,13 @@ // SiteInstance. The actual SiteInstance can then be obtained calling // ConvertToSiteInstance with the descriptor. // + // |is_coop_coep_cross_origin_isolated| should be true if the response for + // |dest_url| has set COOP and COEP headers to same-origin and require-corp + // respectively. + // if |is_coop_coep_cross_origin_isolated| is true, + // |coop_coep_cross_origin_isolated_origin| indicates the top level origin + // of the page. + // // |source_instance| is the SiteInstance of the frame that initiated the // navigation. |current_instance| is the SiteInstance of the frame that is // currently navigating. |dest_instance| is a predetermined SiteInstance that @@ -678,6 +696,8 @@ // This is a helper function for GetSiteInstanceForNavigation. SiteInstanceDescriptor DetermineSiteInstanceForURL( const GURL& dest_url, + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin, SiteInstance* source_instance, SiteInstance* current_instance, SiteInstance* dest_instance, @@ -687,7 +707,6 @@ bool dest_is_view_source_mode, bool force_browsing_instance_swap, bool was_server_redirect, - bool is_coop_coep_cross_origin_isolated, bool is_speculative); // Returns true if a navigation to |dest_url| that uses the specified @@ -733,8 +752,11 @@ // |dest_url|. This method is a special case for handling hosted apps in // this object. Most code should call IsNavigationSameSite() on // |candidate| instead of this method. - bool IsCandidateSameSite(RenderFrameHostImpl* candidate, - const GURL& dest_url); + bool IsCandidateSameSite( + RenderFrameHostImpl* candidate, + const GURL& dest_url, + bool is_coop_coep_cross_origin_isolated, + base::Optional<url::Origin> coop_coep_cross_origin_isolated_origin); // Ensure that we have created all needed proxies for a new RFH with // SiteInstance |new_instance|: (1) create swapped-out RVHs and proxies for
diff --git a/content/browser/renderer_host/render_frame_host_manager_browsertest.cc b/content/browser/renderer_host/render_frame_host_manager_browsertest.cc index ccea500..52c8aa86 100644 --- a/content/browser/renderer_host/render_frame_host_manager_browsertest.cc +++ b/content/browser/renderer_host/render_frame_host_manager_browsertest.cc
@@ -8595,8 +8595,8 @@ root->current_frame_host()->GetSiteInstance()->GetIsolationContext(); EXPECT_TRUE(SiteInstanceImpl::DoesSiteInfoRequireDedicatedProcess( current_isolation_context, - SiteInstanceImpl::ComputeSiteInfo(current_isolation_context, - GURL("http://foo.com")))); + SiteInstanceImpl::ComputeSiteInfoForTesting(current_isolation_context, + GURL("http://foo.com")))); // Set up the work to be done after the renderer is asked to commit // |siteless_url|, but before the corresponding DidCommitProvisionalLoad IPC @@ -8672,8 +8672,11 @@ EXPECT_NE(process1, process2); EXPECT_EQ(GURL("http://foo.com"), web_contents->GetMainFrame()->GetSiteInstance()->GetSiteURL()); - EXPECT_EQ(ProcessLock(SiteInfo(GURL("http://foo.com"), GURL("http://foo.com"), - false /* is_origin_keyed */)), + EXPECT_EQ(ProcessLock(SiteInfo( + GURL("http://foo.com"), GURL("http://foo.com"), + false /* is_origin_keyed */, + false /* is_coop_coep_cross_origin_isolated */, + base::nullopt /* coop_coep_cross_origin_isolated_origin */)), policy->GetProcessLock(process2->GetID())); // Ensure also that the foo.com process didn't change midway through the
diff --git a/content/browser/renderer_host/render_frame_host_manager_unittest.cc b/content/browser/renderer_host/render_frame_host_manager_unittest.cc index e464e82f..f2f860d 100644 --- a/content/browser/renderer_host/render_frame_host_manager_unittest.cc +++ b/content/browser/renderer_host/render_frame_host_manager_unittest.cc
@@ -3340,7 +3340,7 @@ NavigationSimulator::NavigateAndCommitFromBrowser(contents(), kFooUrl); scoped_refptr<SiteInstanceImpl> initial_instance = main_test_rfh()->GetSiteInstance(); - SiteInfo foo_site_info = SiteInstanceImpl::ComputeSiteInfo( + SiteInfo foo_site_info = SiteInstanceImpl::ComputeSiteInfoForTesting( initial_instance->GetIsolationContext(), kFooUrl); if (AreDefaultSiteInstancesEnabled()) { EXPECT_TRUE(initial_instance->IsDefaultSiteInstance()); @@ -3360,7 +3360,7 @@ main_test_rfh()->GetSiteInstance())); EXPECT_EQ(kOriginalUrl, main_test_rfh()->GetSiteInstance()->original_url()); - SiteInfo expected_site_info = SiteInstanceImpl::ComputeSiteInfo( + SiteInfo expected_site_info = SiteInstanceImpl::ComputeSiteInfoForTesting( main_test_rfh()->GetSiteInstance()->GetIsolationContext(), kOriginalUrl); EXPECT_EQ(expected_site_info, main_test_rfh()->GetSiteInstance()->GetSiteInfo());
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index f89c1b74..2f32152 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -3178,11 +3178,12 @@ ChildProcessSecurityPolicyImpl::GetInstance()->LockProcess( isolation_context, GetID(), process_lock); - // Note that SetProcessLock is only called once per RenderProcessHostImpl - // (when committing a navigation into an empty renderer). Therefore, the - // call to NotifyRendererOfLockedStateUpdate below is insufficient for setting - // up renderers respawned after crashing - this is handled by another call to - // NotifyRendererOfLockedStateUpdate from OnProcessLaunched. + // Note that SetProcessLock is only called on ProcessLock state transitions. + // (e.g. invalid -> allows_any_site and allows_any_site -> locked_to_site). + // Therefore, the call to NotifyRendererOfLockedStateUpdate below is + // insufficient for setting up renderers respawned after crashing - this is + // handled by another call to NotifyRendererOfLockedStateUpdate from + // OnProcessLaunched. NotifyRendererOfLockedStateUpdate(); } @@ -3199,6 +3200,9 @@ if (process_lock.is_invalid()) return; + GetRendererInterface()->SetIsCrossOriginIsolated( + process_lock.is_coop_coep_cross_origin_isolated()); + if (!process_lock.IsASiteOrOrigin()) return; @@ -4164,6 +4168,15 @@ if (process_lock != ProcessLock(site_info)) return false; } else { + // Even when this process is not locked to a site, it is still associated + // with a particular COOP/COEP configuration. Ensure that it cannot be + // reused for destinations with incompatible COOP/COEP requirements. + if (process_lock.allows_any_site() && + !process_lock.IsCompatibleWithCoopCoepCrossOriginIsolation( + site_info)) { + return false; + } + if (!host->IsUnused() && SiteInstanceImpl::ShouldLockProcess( isolation_context, site_info, is_guest)) { // If this process has been used to host any other content, it cannot @@ -4179,7 +4192,7 @@ return false; } - // If this site_url is going to require a dedicated process, then check + // If this site_info is going to require a dedicated process, then check // whether this process has a pending navigation to a URL for which // SiteInstance does not assign site URLs. If this is the case, it is not // safe to reuse this process for a navigation which itself assigns site @@ -4968,7 +4981,6 @@ } // Pass bits of global renderer state to the renderer. - GetRendererInterface()->SetIsCrossOriginIsolated(cross_origin_isolated_); GetRendererInterface()->SetUserAgent( GetContentClient()->browser()->GetUserAgent()); GetRendererInterface()->SetUserAgentMetadata(
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h index 74cf373..915903e 100644 --- a/content/browser/renderer_host/render_process_host_impl.h +++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -1227,13 +1227,6 @@ friend class IOThreadHostImpl; base::Optional<base::SequenceBound<IOThreadHostImpl>> io_thread_host_impl_; - // Representing agent cluster's "cross-origin isolated" concept. - // TODO(yhirano): Have the spec URL. - // This property is renderer process global because we ensure that a - // renderer process host only cross-origin isolated agents or only - // non-cross-origin isolated agents, not both. - const bool cross_origin_isolated_ = false; - base::WeakPtrFactory<RenderProcessHostImpl> weak_factory_{this}; DISALLOW_COPY_AND_ASSIGN(RenderProcessHostImpl);
diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc index 7a8f516..add88a52 100644 --- a/content/browser/service_worker/service_worker_browsertest.cc +++ b/content/browser/service_worker/service_worker_browsertest.cc
@@ -82,7 +82,6 @@ #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/loader/url_loader_throttle.h" #include "third_party/blink/public/common/service_worker/service_worker_status_code.h" -#include "third_party/blink/public/common/service_worker/service_worker_utils.h" #include "third_party/blink/public/common/web_preferences/web_preferences.h" #include "third_party/blink/public/mojom/loader/code_cache.mojom-test-utils.h"
diff --git a/content/browser/service_worker/service_worker_container_host.cc b/content/browser/service_worker/service_worker_container_host.cc index c727f822..5cb7b2d 100644 --- a/content/browser/service_worker/service_worker_container_host.cc +++ b/content/browser/service_worker/service_worker_container_host.cc
@@ -25,6 +25,7 @@ #include "content/public/common/origin_util.h" #include "mojo/public/cpp/bindings/callback_helpers.h" #include "third_party/blink/public/common/features.h" +#include "third_party/blink/public/common/service_worker/service_worker_scope_match.h" namespace content { @@ -455,7 +456,7 @@ void ServiceWorkerContainerHost::AddMatchingRegistration( ServiceWorkerRegistration* registration) { DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); - DCHECK(ServiceWorkerUtils::ScopeMatches(registration->scope(), url_)); + DCHECK(blink::ServiceWorkerScopeMatches(registration->scope(), url_)); if (!IsContextSecureForServiceWorker()) return; size_t key = registration->scope().spec().size(); @@ -1125,7 +1126,7 @@ for (const auto& key_registration : registrations) { ServiceWorkerRegistration* registration = key_registration.second; if (!registration->is_uninstalled() && - ServiceWorkerUtils::ScopeMatches(registration->scope(), url_)) { + blink::ServiceWorkerScopeMatches(registration->scope(), url_)) { AddMatchingRegistration(registration); } }
diff --git a/content/browser/service_worker/service_worker_context_core.cc b/content/browser/service_worker/service_worker_context_core.cc index bb6e8ed..248da7d 100644 --- a/content/browser/service_worker/service_worker_context_core.cc +++ b/content/browser/service_worker/service_worker_context_core.cc
@@ -47,7 +47,6 @@ #include "net/http/http_response_headers.h" #include "net/http/http_response_info.h" #include "storage/browser/quota/quota_manager_proxy.h" -#include "third_party/blink/public/common/service_worker/service_worker_utils.h" #include "third_party/blink/public/mojom/service_worker/service_worker_container_type.mojom.h" #include "third_party/blink/public/mojom/service_worker/service_worker_registration.mojom.h" #include "url/gurl.h"
diff --git a/content/browser/service_worker/service_worker_context_wrapper.cc b/content/browser/service_worker/service_worker_context_wrapper.cc index a7bfb72..a25e2d2 100644 --- a/content/browser/service_worker/service_worker_context_wrapper.cc +++ b/content/browser/service_worker/service_worker_context_wrapper.cc
@@ -48,6 +48,7 @@ #include "storage/browser/quota/quota_client_type.h" #include "storage/browser/quota/quota_manager_proxy.h" #include "storage/browser/quota/special_storage_policy.h" +#include "third_party/blink/public/common/service_worker/service_worker_scope_match.h" #include "third_party/blink/public/common/service_worker/service_worker_status_code.h" #include "third_party/blink/public/mojom/service_worker/service_worker_registration.mojom.h" @@ -195,7 +196,7 @@ // static bool ServiceWorkerContext::ScopeMatches(const GURL& scope, const GURL& url) { - return ServiceWorkerUtils::ScopeMatches(scope, url); + return blink::ServiceWorkerScopeMatches(scope, url); } // static
diff --git a/content/browser/service_worker/service_worker_controllee_request_handler.cc b/content/browser/service_worker/service_worker_controllee_request_handler.cc index e2c6c975..e48f72f 100644 --- a/content/browser/service_worker/service_worker_controllee_request_handler.cc +++ b/content/browser/service_worker/service_worker_controllee_request_handler.cc
@@ -31,7 +31,6 @@ #include "net/base/url_util.h" #include "services/network/public/cpp/resource_request_body.h" #include "third_party/blink/public/common/loader/resource_type_util.h" -#include "third_party/blink/public/common/service_worker/service_worker_utils.h" #if BUILDFLAG(ENABLE_OFFLINE_PAGES) #include "components/offline_pages/core/request_header/offline_page_header.h"
diff --git a/content/browser/service_worker/service_worker_host.cc b/content/browser/service_worker/service_worker_host.cc index aab836e..664b30d5 100644 --- a/content/browser/service_worker/service_worker_host.cc +++ b/content/browser/service_worker/service_worker_host.cc
@@ -23,7 +23,6 @@ #include "mojo/public/cpp/bindings/message.h" #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/messaging/message_port_channel.h" -#include "third_party/blink/public/common/service_worker/service_worker_utils.h" #include "third_party/blink/public/mojom/service_worker/service_worker_client.mojom.h" namespace content {
diff --git a/content/browser/service_worker/service_worker_metrics.cc b/content/browser/service_worker/service_worker_metrics.cc index 5208527..bc4fc96 100644 --- a/content/browser/service_worker/service_worker_metrics.cc +++ b/content/browser/service_worker/service_worker_metrics.cc
@@ -19,7 +19,6 @@ #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/common/content_client.h" -#include "third_party/blink/public/common/service_worker/service_worker_utils.h" namespace content {
diff --git a/content/browser/service_worker/service_worker_new_script_loader.cc b/content/browser/service_worker/service_worker_new_script_loader.cc index c18bc89..51df7e12 100644 --- a/content/browser/service_worker/service_worker_new_script_loader.cc +++ b/content/browser/service_worker/service_worker_new_script_loader.cc
@@ -25,7 +25,6 @@ #include "net/cert/cert_status_flags.h" #include "net/http/http_response_info.h" #include "services/network/public/mojom/url_response_head.mojom.h" -#include "third_party/blink/public/common/service_worker/service_worker_utils.h" namespace content {
diff --git a/content/browser/service_worker/service_worker_process_manager_unittest.cc b/content/browser/service_worker/service_worker_process_manager_unittest.cc index 3174f516..49397d7 100644 --- a/content/browser/service_worker/service_worker_process_manager_unittest.cc +++ b/content/browser/service_worker/service_worker_process_manager_unittest.cc
@@ -104,7 +104,7 @@ AllocateWorkerProcess_WithProcessReuse) { const int kEmbeddedWorkerId = 100; const GURL kSiteUrl = GURL("http://example.com"); - SiteInfo site_info = SiteInstanceImpl::ComputeSiteInfo( + SiteInfo site_info = SiteInstanceImpl::ComputeSiteInfoForTesting( IsolationContext(browser_context_.get()), kSiteUrl); // Create a process that is hosting a frame with kSiteUrl. @@ -148,7 +148,7 @@ AllocateWorkerProcess_WithoutProcessReuse) { const int kEmbeddedWorkerId = 100; const GURL kSiteUrl = GURL("http://example.com"); - SiteInfo site_info = SiteInstanceImpl::ComputeSiteInfo( + SiteInfo site_info = SiteInstanceImpl::ComputeSiteInfoForTesting( IsolationContext(browser_context_.get()), kSiteUrl); // Create a process that is hosting a frame with kSiteUrl.
diff --git a/content/browser/service_worker/service_worker_register_job.cc b/content/browser/service_worker/service_worker_register_job.cc index b75b249..e93dfb78 100644 --- a/content/browser/service_worker/service_worker_register_job.cc +++ b/content/browser/service_worker/service_worker_register_job.cc
@@ -27,12 +27,11 @@ #include "content/browser/service_worker/service_worker_registry.h" #include "content/browser/service_worker/service_worker_version.h" #include "content/browser/url_loader_factory_getter.h" -#include "content/common/service_worker/service_worker_utils.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "net/base/net_errors.h" +#include "third_party/blink/public/common/service_worker/service_worker_scope_match.h" #include "third_party/blink/public/common/service_worker/service_worker_type_converters.h" -#include "third_party/blink/public/common/service_worker/service_worker_utils.h" #include "third_party/blink/public/mojom/service_worker/service_worker_object.mojom.h" namespace content { @@ -780,7 +779,7 @@ !it->IsAtEnd(); it->Advance()) { ServiceWorkerContainerHost* container_host = it->GetContainerHost(); DCHECK(container_host->IsContainerForClient()); - if (!ServiceWorkerUtils::ScopeMatches(registration->scope(), + if (!blink::ServiceWorkerScopeMatches(registration->scope(), container_host->url())) { continue; }
diff --git a/content/browser/service_worker/service_worker_registry.cc b/content/browser/service_worker/service_worker_registry.cc index 88ba014..05516f05 100644 --- a/content/browser/service_worker/service_worker_registry.cc +++ b/content/browser/service_worker/service_worker_registry.cc
@@ -22,6 +22,7 @@ #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "storage/browser/quota/special_storage_policy.h" +#include "third_party/blink/public/common/service_worker/service_worker_scope_match.h" #include "third_party/blink/public/common/service_worker/service_worker_status_code.h" namespace content { @@ -769,7 +770,7 @@ DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); DCHECK(!client_url.has_ref()); - LongestScopeMatcher matcher(client_url); + blink::ServiceWorkerLongestScopeMatcher matcher(client_url); ServiceWorkerRegistration* match = nullptr; // TODO(nhiroki): This searches over installing registrations linearly and it
diff --git a/content/browser/service_worker/service_worker_script_loader_factory.cc b/content/browser/service_worker/service_worker_script_loader_factory.cc index 76ad0c5a..13c8c39 100644 --- a/content/browser/service_worker/service_worker_script_loader_factory.cc +++ b/content/browser/service_worker/service_worker_script_loader_factory.cc
@@ -22,7 +22,6 @@ #include "mojo/public/cpp/bindings/self_owned_receiver.h" #include "services/network/public/cpp/request_destination.h" #include "services/network/public/cpp/shared_url_loader_factory.h" -#include "third_party/blink/public/common/service_worker/service_worker_utils.h" namespace content {
diff --git a/content/browser/service_worker/service_worker_storage.cc b/content/browser/service_worker/service_worker_storage.cc index c6516a23..e74d43d 100644 --- a/content/browser/service_worker/service_worker_storage.cc +++ b/content/browser/service_worker/service_worker_storage.cc
@@ -21,10 +21,10 @@ #include "base/trace_event/trace_event.h" #include "components/services/storage/public/cpp/constants.h" #include "content/browser/service_worker/service_worker_disk_cache.h" -#include "content/common/service_worker/service_worker_utils.h" #include "net/base/completion_once_callback.h" #include "net/base/net_errors.h" #include "storage/browser/quota/quota_manager_proxy.h" +#include "third_party/blink/public/common/service_worker/service_worker_scope_match.h" #include "third_party/blink/public/mojom/quota/quota_types.mojom.h" #include "third_party/blink/public/mojom/service_worker/service_worker_object.mojom.h" #include "third_party/blink/public/mojom/service_worker/service_worker_registration.mojom.h" @@ -1565,7 +1565,7 @@ status = ServiceWorkerDatabase::Status::kErrorNotFound; // Find one with a scope match. - LongestScopeMatcher matcher(client_url); + blink::ServiceWorkerLongestScopeMatcher matcher(client_url); int64_t match = blink::mojom::kInvalidServiceWorkerRegistrationId; for (const auto& registration_data : registration_data_list) if (matcher.MatchLongest(registration_data->scope))
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc index de9f53f..51049c14 100644 --- a/content/browser/service_worker/service_worker_version.cc +++ b/content/browser/service_worker/service_worker_version.cc
@@ -55,7 +55,6 @@ #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/origin_trials/trial_token_validator.h" #include "third_party/blink/public/common/service_worker/service_worker_type_converters.h" -#include "third_party/blink/public/common/service_worker/service_worker_utils.h" namespace content { namespace {
diff --git a/content/browser/site_instance_impl.cc b/content/browser/site_instance_impl.cc index 1c4c4194..ed973ac9 100644 --- a/content/browser/site_instance_impl.cc +++ b/content/browser/site_instance_impl.cc
@@ -65,30 +65,54 @@ SiteInfo SiteInfo::CreateForErrorPage() { return SiteInfo(GURL(content::kUnreachableWebDataURL), GURL(content::kUnreachableWebDataURL), - false /* is_origin_keyed */); + false /* is_origin_keyed */, + false /* is_coop_coep_cross_origin_isolated */, + base::nullopt /* coop_coep_cross_origin_isolated_origin */); } // static -SiteInfo SiteInfo::CreateForDefaultSiteInstance() { +SiteInfo SiteInfo::CreateForDefaultSiteInstance( + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin) { return SiteInfo(SiteInstanceImpl::GetDefaultSiteURL(), SiteInstanceImpl::GetDefaultSiteURL(), - false /* is_origin_keyed */); + false /* is_origin_keyed */, + is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin); } -SiteInfo::SiteInfo(const GURL& site_url, - const GURL& process_lock_url, - bool is_origin_keyed) +SiteInfo::SiteInfo() = default; +SiteInfo::SiteInfo(const SiteInfo& rhs) = default; + +SiteInfo::~SiteInfo() = default; + +SiteInfo::SiteInfo( + const GURL& site_url, + const GURL& process_lock_url, + bool is_origin_keyed, + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& coop_coep_cross_origin_isolated_origin) : site_url_(site_url), process_lock_url_(process_lock_url), - is_origin_keyed_(is_origin_keyed) {} + is_origin_keyed_(is_origin_keyed), + is_coop_coep_cross_origin_isolated_(is_coop_coep_cross_origin_isolated), + coop_coep_cross_origin_isolated_origin_( + coop_coep_cross_origin_isolated_origin) { + DCHECK_EQ(is_coop_coep_cross_origin_isolated_, + coop_coep_cross_origin_isolated_origin_.has_value()); +} // static auto SiteInfo::MakeTie(const SiteInfo& site_info) { return std::tie(site_info.site_url_.possibly_invalid_spec(), site_info.process_lock_url_.possibly_invalid_spec(), - site_info.is_origin_keyed_); + site_info.is_origin_keyed_, + site_info.is_coop_coep_cross_origin_isolated_, + site_info.coop_coep_cross_origin_isolated_origin_); } +SiteInfo& SiteInfo::operator=(const SiteInfo& rhs) = default; + bool SiteInfo::operator==(const SiteInfo& other) const { return MakeTie(*this) == MakeTie(other); } @@ -113,6 +137,15 @@ if (is_origin_keyed_) debug_string += ", origin-keyed"; + if (is_coop_coep_cross_origin_isolated_) + debug_string += ", cross-origin isolated"; + + if (coop_coep_cross_origin_isolated_origin_.has_value()) { + debug_string += ", coi-origin='" + + coop_coep_cross_origin_isolated_origin_->GetDebugString() + + "'"; + } + return debug_string; } @@ -158,7 +191,7 @@ DCHECK(browser_context); return base::WrapRefCounted(new SiteInstanceImpl(new BrowsingInstance( browser_context, false /* is_coop_coep_cross_origin_isolated */, - base::nullopt))); + base::nullopt /* coop_coep_cross_origin_isolated_origin */))); } // static @@ -197,7 +230,7 @@ // BrowsingInstance created. scoped_refptr<BrowsingInstance> instance(new BrowsingInstance( browser_context, false /* is_coop_coep_cross_origin_isolated */, - base::nullopt)); + base::nullopt /* coop_coep_cross_origin_isolated_origin */)); // We do NOT want to allow the default site instance here because workers // need to be kept separate from other sites. @@ -229,7 +262,7 @@ scoped_refptr<SiteInstanceImpl> site_instance = base::WrapRefCounted(new SiteInstanceImpl(new BrowsingInstance( browser_context, false /* is_coop_coep_cross_origin_isolated */, - base::nullopt))); + base::nullopt /* coop_coep_cross_origin_isolated_origin */))); site_instance->is_guest_ = true; @@ -237,7 +270,9 @@ // do for user provided URLs. Callers expect GetSiteURL() to return the // value they provide in |guest_site_url|. site_instance->SetSiteInfoInternal( - SiteInfo(guest_site_url, guest_site_url, false /* is_origin_keyed */)); + SiteInfo(guest_site_url, guest_site_url, false /* is_origin_keyed */, + site_instance->IsCoopCoepCrossOriginIsolated(), + site_instance->CoopCoepCrossOriginIsolatedOrigin())); return site_instance; } @@ -485,7 +520,9 @@ "site id", id_); DCHECK(!has_site_); original_url_ = GetDefaultSiteURL(); - SetSiteInfoInternal(SiteInfo::CreateForDefaultSiteInstance()); + SetSiteInfoInternal(SiteInfo::CreateForDefaultSiteInstance( + browsing_instance_->is_coop_coep_cross_origin_isolated(), + browsing_instance_->coop_coep_cross_origin_isolated_origin())); } void SiteInstanceImpl::SetSiteInfoInternal(const SiteInfo& site_info) { @@ -734,7 +771,9 @@ // prevent SiteInstances with no site URL from being used for URLs // that should be routed to the default SiteInstance. DCHECK_EQ(site_info_.site_url(), GetDefaultSiteURL()); - auto site_info = ComputeSiteInfo(GetIsolationContext(), url); + auto site_info = ComputeSiteInfo(GetIsolationContext(), url, + IsCoopCoepCrossOriginIsolated(), + CoopCoepCrossOriginIsolatedOrigin()); return CanBePlacedInDefaultSiteInstance(GetIsolationContext(), url, site_info) && !browsing_instance_->HasSiteInstance(site_info); @@ -956,10 +995,16 @@ } bool SiteInstanceImpl::DoesSiteInfoForURLMatch(const GURL& url) { - auto site_info = ComputeSiteInfo(GetIsolationContext(), url); + // TODO(acolwell, ahemery): Update callers to pass in COOP/COEP info into + // this method. The code is currently safe because the caller checks to make + // sure the COOP/COEP info matches on this object before calling this method. + auto site_info = ComputeSiteInfo(GetIsolationContext(), url, + IsCoopCoepCrossOriginIsolated(), + CoopCoepCrossOriginIsolatedOrigin()); if (kCreateForURLAllowsDefaultSiteInstance && CanBePlacedInDefaultSiteInstance(GetIsolationContext(), url, site_info)) { - site_info = SiteInfo::CreateForDefaultSiteInstance(); + site_info = SiteInfo::CreateForDefaultSiteInstance( + IsCoopCoepCrossOriginIsolated(), CoopCoepCrossOriginIsolatedOrigin()); } return site_info_ == site_info; @@ -992,9 +1037,12 @@ url); } +// static SiteInfo SiteInstanceImpl::ComputeSiteInfo( const IsolationContext& isolation_context, - const GURL& url) { + const GURL& url, + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& cross_origin_isolated_origin) { // The call to GetSiteForURL() below is only allowed on the UI thread, due to // its possible use of effective urls. DCHECK_CURRENTLY_ON(BrowserThread::UI); @@ -1005,15 +1053,29 @@ return SiteInfo(GetSiteForURL(isolation_context, url), DetermineProcessLockURL(isolation_context, url), - is_origin_keyed); + is_origin_keyed, is_coop_coep_cross_origin_isolated, + cross_origin_isolated_origin); +} + +// static +SiteInfo SiteInstanceImpl::ComputeSiteInfoForTesting( + const IsolationContext& isolation_context, + const GURL& url) { + return ComputeSiteInfo( + isolation_context, url, false /* is_coop_coep_cross_origin_isolated */, + base::nullopt /* coop_coep_cross_origin_isolated_origin */); } // static ProcessLock SiteInstanceImpl::DetermineProcessLock( const IsolationContext& isolation_context, - const GURL& url) { + const GURL& url, + bool is_coop_coep_cross_origin_isolated, + base::Optional<url::Origin> coop_coep_cross_origin_isolated_origin) { if (BrowserThread::CurrentlyOn(BrowserThread::UI)) - return ProcessLock(ComputeSiteInfo(isolation_context, url)); + return ProcessLock(ComputeSiteInfo(isolation_context, url, + is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin)); DCHECK_CURRENTLY_ON(BrowserThread::IO); GURL lock_url = DetermineProcessLockURL(isolation_context, url); @@ -1022,7 +1084,9 @@ isolation_context, url::Origin::Create(url)); // In the SiteInfo constructor below we pass the lock url as the site URL // also, assuming the IO-thread caller won't be looking at the site url. - return ProcessLock(SiteInfo(lock_url, lock_url, is_origin_keyed)); + return ProcessLock(SiteInfo(lock_url, lock_url, is_origin_keyed, + is_coop_coep_cross_origin_isolated, + coop_coep_cross_origin_isolated_origin)); } // static @@ -1316,7 +1380,8 @@ if (process_lock.is_invalid()) { // Update the process lock state to signal that the process has been // associated with a SiteInstance that is not locked to a site yet. - auto new_process_lock = ProcessLock::CreateAllowAnySite(); + auto new_process_lock = ProcessLock::CreateAllowAnySite( + IsCoopCoepCrossOriginIsolated(), CoopCoepCrossOriginIsolatedOrigin()); process_->SetProcessLock(GetIsolationContext(), new_process_lock); } else { CHECK(process_lock.allows_any_site()) @@ -1378,7 +1443,8 @@ } else if (process_lock.is_invalid()) { // Update the process lock state to signal that the process has been // associated with a SiteInstance that is not locked to a site yet. - auto new_process_lock = ProcessLock::CreateAllowAnySite(); + auto new_process_lock = ProcessLock::CreateAllowAnySite( + IsCoopCoepCrossOriginIsolated(), CoopCoepCrossOriginIsolatedOrigin()); process_->SetProcessLock(GetIsolationContext(), new_process_lock); } else { CHECK(process_lock.allows_any_site())
diff --git a/content/browser/site_instance_impl.h b/content/browser/site_instance_impl.h index 0e9117d..ecebcc5 100644 --- a/content/browser/site_instance_impl.h +++ b/content/browser/site_instance_impl.h
@@ -51,7 +51,10 @@ class CONTENT_EXPORT SiteInfo { public: static SiteInfo CreateForErrorPage(); - static SiteInfo CreateForDefaultSiteInstance(); + static SiteInfo CreateForDefaultSiteInstance( + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& + coop_coep_cross_origin_isolated_origin); // The SiteInfo constructor should take in all values needed for comparing two // SiteInfos, to help ensure all creation sites are updated accordingly when @@ -59,8 +62,13 @@ // accordingly. SiteInfo(const GURL& site_url, const GURL& process_lock_url, - bool is_origin_keyed); - SiteInfo() = default; + bool is_origin_keyed, + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& + coop_coep_cross_origin_isolated_origin); + SiteInfo(); + SiteInfo(const SiteInfo& rhs); + ~SiteInfo(); // Returns the site URL associated with all of the documents and workers in // this principal, as described above. @@ -106,9 +114,24 @@ // in their site urls. bool is_origin_keyed() const { return is_origin_keyed_; } + // Returns true if this SiteInfo is part of a CoopCoepCrossOriginIsolated + // BrowsingInstance. + bool is_coop_coep_cross_origin_isolated() const { + return is_coop_coep_cross_origin_isolated_; + } + + // If is_coop_coep_cross_origin_isolated() returns true, this returns the + // origin shared across all top level frames in the + // CoopCoepCrossOriginIsolated BrowsingInstance. + base::Optional<url::Origin> coop_coep_cross_origin_isolated_origin() const { + return coop_coep_cross_origin_isolated_origin_; + } + // Returns false if the site_url() is empty. bool is_empty() const { return site_url().possibly_invalid_spec().empty(); } + SiteInfo& operator=(const SiteInfo& rhs); + bool operator==(const SiteInfo& other) const; bool operator!=(const SiteInfo& other) const; @@ -132,6 +155,16 @@ // isolation. In contrast, the site-level URLs that are typically used in // SiteInfo include subdomains, as do command-line isolated origins. bool is_origin_keyed_ = false; + + // Indicates if this SiteInfo is part of a CoopCoepCrossOriginIsolated + // BrowsingInstance. (i.e. A page that has a cross-origin-opener-policy of + // same-origin and a cross-origin-embedder-policy of require-corp.) + bool is_coop_coep_cross_origin_isolated_ = false; + + // If |is_coop_coep_cross_origin_isolated_| returns true, this returns the + // origin shared across all top level frames in the + // CoopCoepCrossOriginIsolated BrowsingInstance. + base::Optional<url::Origin> coop_coep_cross_origin_isolated_origin_; }; CONTENT_EXPORT std::ostream& operator<<(std::ostream& out, @@ -305,8 +338,17 @@ // process_lock_url computed. This function can only be called on the UI // thread since it expects an effective URL. // Note: eventually this function will replace GetSiteForURL(). - static SiteInfo ComputeSiteInfo(const IsolationContext& isolation_context, - const GURL& url); + static SiteInfo ComputeSiteInfo( + const IsolationContext& isolation_context, + const GURL& url, + bool is_coop_coep_cross_origin_isolated, + const base::Optional<url::Origin>& cross_origin_isolated_origin); + + // Helper method for tests that don't trigger special COOP/COEP + // functionality. + static SiteInfo ComputeSiteInfoForTesting( + const IsolationContext& isolation_context, + const GURL& url); // Returns the site for the given URL, which includes only the scheme and // registered domain. Returns an empty GURL if the URL has no host. @@ -329,7 +371,9 @@ // this will return a ProcessLock that doesn't consider effective URLs. static ProcessLock DetermineProcessLock( const IsolationContext& isolation_context, - const GURL& url); + const GURL& url, + bool is_coop_coep_cross_origin_isolated, + base::Optional<url::Origin> coop_coep_cross_origin_isolated_origin); // Set the web site that this SiteInstance is rendering pages for. // This includes the scheme and registered domain, but not the port. If the
diff --git a/content/browser/site_instance_impl_unittest.cc b/content/browser/site_instance_impl_unittest.cc index 897ab5f..dfe9e43 100644 --- a/content/browser/site_instance_impl_unittest.cc +++ b/content/browser/site_instance_impl_unittest.cc
@@ -56,7 +56,15 @@ const GURL& url) { return SiteInstanceImpl::DoesSiteInfoRequireDedicatedProcess( isolation_context, - SiteInstanceImpl::ComputeSiteInfo(isolation_context, url)); + SiteInstanceImpl::ComputeSiteInfoForTesting(isolation_context, url)); +} + +SiteInfo CreateSimpleSiteInfo(const GURL& process_lock_url, + bool is_origin_keyed) { + return SiteInfo(GURL("https://www.foo.com"), process_lock_url, + is_origin_keyed, + false /* is_coop_coep_cross_origin_isolated */, + base::nullopt /* coop_coep_cross_origin_isolated_origin */); } } // namespace @@ -175,8 +183,8 @@ BrowserContext* context() { return &context_; } SiteInfo GetSiteInfoForURL(const std::string& url) { - return SiteInstanceImpl::ComputeSiteInfo(IsolationContext(&context_), - GURL(url)); + return SiteInstanceImpl::ComputeSiteInfoForTesting( + IsolationContext(&context_), GURL(url)); } static bool IsSameSite(BrowserContext* context, @@ -201,24 +209,20 @@ // Test SiteInfos with identical site URLs but various lock URLs, including // variations of each that are origin keyed ("ok"). TEST_F(SiteInstanceTest, SiteInfoAsContainerKey) { - SiteInfo site_info_1(GURL("https://www.foo.com"), GURL("https://foo.com"), - false /* is_origin_keyed */); - SiteInfo site_info_1ok(GURL("https://www.foo.com"), GURL("https://foo.com"), - true /* is_origin_keyed */); - SiteInfo site_info_2(GURL("https://www.foo.com"), GURL("https://www.foo.com"), - false /* is_origin_keyed */); - SiteInfo site_info_2ok(GURL("https://www.foo.com"), - GURL("https://www.foo.com"), - true /* is_origin_keyed */); - SiteInfo site_info_3(GURL("https://www.foo.com"), GURL("https://sub.foo.com"), - false /* is_origin_keyed */); - SiteInfo site_info_3ok(GURL("https://www.foo.com"), - GURL("https://sub.foo.com"), - true /* is_origin_keyed */); - SiteInfo site_info_4(GURL("https://www.foo.com"), GURL(), - false /* is_origin_keyed */); - SiteInfo site_info_4ok(GURL("https://www.foo.com"), GURL(), - true /* is_origin_keyed */); + auto site_info_1 = CreateSimpleSiteInfo(GURL("https://foo.com"), + false /* is_origin_keyed */); + auto site_info_1ok = + CreateSimpleSiteInfo(GURL("https://foo.com"), true /* is_origin_keyed */); + auto site_info_2 = CreateSimpleSiteInfo(GURL("https://www.foo.com"), + false /* is_origin_keyed */); + auto site_info_2ok = CreateSimpleSiteInfo(GURL("https://www.foo.com"), + true /* is_origin_keyed */); + auto site_info_3 = CreateSimpleSiteInfo(GURL("https://sub.foo.com"), + false /* is_origin_keyed */); + auto site_info_3ok = CreateSimpleSiteInfo(GURL("https://sub.foo.com"), + true /* is_origin_keyed */); + auto site_info_4 = CreateSimpleSiteInfo(GURL(), false /* is_origin_keyed */); + auto site_info_4ok = CreateSimpleSiteInfo(GURL(), true /* is_origin_keyed */); // Test SiteInfoOperators. // Use EXPECT_TRUE and == below to avoid need to define SiteInfo::operator<<. @@ -643,9 +647,11 @@ EXPECT_EQ(app_url, site_url); } - SiteInfo expected_site_info(app_url /* site_url */, - nonapp_site_url /* process_lock_url */, - false /* is_origin_keyed */); + SiteInfo expected_site_info( + app_url /* site_url */, nonapp_site_url /* process_lock_url */, + false /* is_origin_keyed */, + false /* is_coop_coep_cross_origin_isolated */, + base::nullopt /* coop_coep_cross_origin_isolated_origin */); // New SiteInstance in a new BrowsingInstance with a predetermined URL. { @@ -1436,9 +1442,11 @@ SetBrowserClientForTesting(&modified_client); std::unique_ptr<TestBrowserContext> browser_context(new TestBrowserContext()); - SiteInfo expected_site_info(app_url /* site_url */, - original_url /* process_lock_url */, - false /* is_origin_keyed */); + SiteInfo expected_site_info( + app_url /* site_url */, original_url /* process_lock_url */, + false /* is_origin_keyed */, + false /* is_coop_coep_cross_origin_isolated */, + base::nullopt /* coop_coep_cross_origin_isolated_origin */); // New SiteInstance in a new BrowsingInstance with a predetermined URL. In // this and subsequent cases, the site URL should consist of the effective @@ -1483,7 +1491,9 @@ ProcessLock ProcessLockFromString(const std::string& url) { return ProcessLock( - SiteInfo(GURL(url), GURL(url), false /* is_origin_keyed */)); + SiteInfo(GURL(url), GURL(url), false /* is_origin_keyed */, + false /* is_coop_coep_cross_origin_isolated */, + base::nullopt /* coop_coep_cross_origin_isolated_origin */)); } } // namespace
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc index b2e80cb6..1db9644 100644 --- a/content/browser/site_per_process_browsertest.cc +++ b/content/browser/site_per_process_browsertest.cc
@@ -14759,10 +14759,14 @@ auto* policy = ChildProcessSecurityPolicyImpl::GetInstance(); int process_id = root->current_frame_host()->GetProcess()->GetID(); IsolationContext isolation_context(controller.GetBrowserContext()); - auto start_url_lock = - SiteInstanceImpl::DetermineProcessLock(isolation_context, start_url); - auto another_url_lock = - SiteInstanceImpl::DetermineProcessLock(isolation_context, another_url); + auto start_url_lock = SiteInstanceImpl::DetermineProcessLock( + isolation_context, start_url, + false /* is_coop_coep_cross_origin_isolated */, + base::nullopt /* coop_coep_cross_origin_isolated_origin */); + auto another_url_lock = SiteInstanceImpl::DetermineProcessLock( + isolation_context, another_url, + false /* is_coop_coep_cross_origin_isolated */, + base::nullopt /* coop_coep_cross_origin_isolated_origin */); EXPECT_EQ(start_url_lock, policy->GetProcessLock(process_id)); EXPECT_NE(another_url_lock, policy->GetProcessLock(process_id));
diff --git a/content/browser/webui/web_ui_navigation_browsertest.cc b/content/browser/webui/web_ui_navigation_browsertest.cc index 8057345..89517de 100644 --- a/content/browser/webui/web_ui_navigation_browsertest.cc +++ b/content/browser/webui/web_ui_navigation_browsertest.cc
@@ -50,7 +50,7 @@ const GURL& url) { return SiteInstanceImpl::DoesSiteInfoRequireDedicatedProcess( isolation_context, - SiteInstanceImpl::ComputeSiteInfo(isolation_context, url)); + SiteInstanceImpl::ComputeSiteInfoForTesting(isolation_context, url)); } } // namespace
diff --git a/content/common/service_worker/service_worker_utils.cc b/content/common/service_worker/service_worker_utils.cc index 0de8e1b..20ce5b58 100644 --- a/content/common/service_worker/service_worker_utils.cc +++ b/content/common/service_worker/service_worker_utils.cc
@@ -66,13 +66,6 @@ } // static -bool ServiceWorkerUtils::ScopeMatches(const GURL& scope, const GURL& url) { - DCHECK(!scope.has_ref()); - return base::StartsWith(url.spec(), scope.spec(), - base::CompareCase::SENSITIVE); -} - -// static bool ServiceWorkerUtils::IsPathRestrictionSatisfied( const GURL& scope, const GURL& script_url, @@ -245,14 +238,4 @@ return ".Unknown"; } -bool LongestScopeMatcher::MatchLongest(const GURL& scope) { - if (!ServiceWorkerUtils::ScopeMatches(scope, url_)) - return false; - if (match_.is_empty() || match_.spec().size() < scope.spec().size()) { - match_ = scope; - return true; - } - return false; -} - } // namespace content
diff --git a/content/common/service_worker/service_worker_utils.h b/content/common/service_worker/service_worker_utils.h index 33462720..31d4eae 100644 --- a/content/common/service_worker/service_worker_utils.h +++ b/content/common/service_worker/service_worker_utils.h
@@ -29,9 +29,6 @@ static bool IsMainRequestDestination( network::mojom::RequestDestination destination); - // Returns true if |scope| matches |url|. - CONTENT_EXPORT static bool ScopeMatches(const GURL& scope, const GURL& url); - // Returns true if the script at |script_url| is allowed to control |scope| // according to Service Worker's path restriction policy. If // |service_worker_allowed| is not null, it points to the @@ -84,21 +81,6 @@ std::string* error_message); }; -class CONTENT_EXPORT LongestScopeMatcher { - public: - explicit LongestScopeMatcher(const GURL& url) : url_(url) {} - virtual ~LongestScopeMatcher() {} - - // Returns true if |scope| matches |url_| longer than |match_|. - bool MatchLongest(const GURL& scope); - - private: - const GURL url_; - GURL match_; - - DISALLOW_COPY_AND_ASSIGN(LongestScopeMatcher); -}; - } // namespace content #endif // CONTENT_COMMON_SERVICE_WORKER_SERVICE_WORKER_UTILS_H_
diff --git a/content/common/service_worker/service_worker_utils_unittest.cc b/content/common/service_worker/service_worker_utils_unittest.cc index 1b0cc91..960b6c3 100644 --- a/content/common/service_worker/service_worker_utils_unittest.cc +++ b/content/common/service_worker/service_worker_utils_unittest.cc
@@ -32,92 +32,6 @@ } // namespace -TEST(ServiceWorkerUtilsTest, ScopeMatches) { - ASSERT_TRUE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/"), GURL("http://www.example.com/"))); - ASSERT_TRUE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/"), - GURL("http://www.example.com/page.html"))); - - ASSERT_FALSE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/"), GURL("https://www.example.com/"))); - ASSERT_FALSE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/"), - GURL("https://www.example.com/page.html"))); - ASSERT_TRUE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/"), GURL("http://www.example.com/#a"))); - - ASSERT_FALSE(ServiceWorkerUtils::ScopeMatches(GURL("http://www.example.com/"), - GURL("http://www.foo.com/"))); - ASSERT_FALSE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/"), GURL("https://www.foo.com/page.html"))); - - // '*' is not a wildcard. - ASSERT_FALSE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/*"), GURL("http://www.example.com/x"))); - ASSERT_FALSE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/*"), GURL("http://www.example.com/"))); - ASSERT_FALSE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/*"), GURL("http://www.example.com/xx"))); - ASSERT_TRUE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/*"), GURL("http://www.example.com/*"))); - - ASSERT_TRUE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/*/x"), GURL("http://www.example.com/*/x"))); - ASSERT_FALSE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/*/x"), GURL("http://www.example.com/a/x"))); - ASSERT_FALSE( - ServiceWorkerUtils::ScopeMatches(GURL("http://www.example.com/*/x/*"), - GURL("http://www.example.com/a/x/b"))); - ASSERT_FALSE( - ServiceWorkerUtils::ScopeMatches(GURL("http://www.example.com/*/x/*"), - GURL("http://www.example.com/*/x/b"))); - - // '?' is not a wildcard. - ASSERT_FALSE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/?"), GURL("http://www.example.com/x"))); - ASSERT_FALSE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/?"), GURL("http://www.example.com/"))); - ASSERT_FALSE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/?"), GURL("http://www.example.com/xx"))); - ASSERT_TRUE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/?"), GURL("http://www.example.com/?"))); - - // Query string is part of the resource. - ASSERT_TRUE( - ServiceWorkerUtils::ScopeMatches(GURL("http://www.example.com/?a=b"), - GURL("http://www.example.com/?a=b"))); - ASSERT_TRUE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/?a="), GURL("http://www.example.com/?a=b"))); - ASSERT_TRUE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/"), GURL("http://www.example.com/?a=b"))); - - // URLs canonicalize \ to / so this is equivalent to "...//x" - ASSERT_TRUE(ServiceWorkerUtils::ScopeMatches( - GURL("http://www.example.com/\\x"), GURL("http://www.example.com//x"))); - - // URLs that are in different origin shouldn't match. - ASSERT_FALSE(ServiceWorkerUtils::ScopeMatches( - GURL("https://evil.com"), GURL("https://evil.com.example.com"))); -} - -TEST(ServiceWorkerUtilsTest, FindLongestScopeMatch) { - LongestScopeMatcher matcher(GURL("http://www.example.com/xxx")); - - // "/xx" should be matched longest. - ASSERT_TRUE(matcher.MatchLongest(GURL("http://www.example.com/x"))); - ASSERT_FALSE(matcher.MatchLongest(GURL("http://www.example.com/"))); - ASSERT_TRUE(matcher.MatchLongest(GURL("http://www.example.com/xx"))); - - // "/xxx" should be matched longer than "/xx". - ASSERT_TRUE(matcher.MatchLongest(GURL("http://www.example.com/xxx"))); - - // The second call with the same URL should return false. - ASSERT_FALSE(matcher.MatchLongest(GURL("http://www.example.com/xxx"))); - - ASSERT_FALSE(matcher.MatchLongest(GURL("http://www.example.com/xxxx"))); -} - TEST(ServiceWorkerUtilsTest, PathRestriction_Basic) { EXPECT_TRUE(IsPathRestrictionSatisfied(GURL("http://example.com/"), GURL("http://example.com/sw.js")));
diff --git a/content/public/common/common_param_traits_macros.h b/content/public/common/common_param_traits_macros.h index eb26646b..fa94ec0e 100644 --- a/content/public/common/common_param_traits_macros.h +++ b/content/public/common/common_param_traits_macros.h
@@ -66,10 +66,9 @@ IPC_ENUM_TRAITS_MIN_MAX_VALUE(ui::HoverType, ui::HOVER_TYPE_FIRST, ui::HOVER_TYPE_LAST) -IPC_ENUM_TRAITS_MIN_MAX_VALUE( - blink::web_pref::ImageAnimationPolicy, - blink::web_pref::IMAGE_ANIMATION_POLICY_ALLOWED, - blink::web_pref::IMAGE_ANIMATION_POLICY_NO_ANIMATION) +IPC_ENUM_TRAITS_MIN_MAX_VALUE(blink::web_pref::ImageAnimationPolicy, + blink::web_pref::kImageAnimationPolicyAllowed, + blink::web_pref::kImageAnimationPolicyNoAnimation) IPC_ENUM_TRAITS_MIN_MAX_VALUE(blink::web_pref::ViewportStyle, blink::web_pref::ViewportStyle::DEFAULT, blink::web_pref::ViewportStyle::LAST)
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index fec6ac1..e18052a7 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc
@@ -620,7 +620,7 @@ // Subresource prefetching+loading via Signed HTTP Exchange // https://www.chromestatus.com/features/5126805474246656 const base::Feature kSignedExchangeSubresourcePrefetch{ - "SignedExchangeSubresourcePrefetch", base::FEATURE_DISABLED_BY_DEFAULT}; + "SignedExchangeSubresourcePrefetch", base::FEATURE_ENABLED_BY_DEFAULT}; // Origin-Signed HTTP Exchanges (for WebPackage Loading) // https://www.chromestatus.com/features/5745285984681984
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 79aaf66..bcac6e7 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -158,7 +158,6 @@ #include "third_party/blink/public/common/loader/record_load_histograms.h" #include "third_party/blink/public/common/loader/url_loader_throttle.h" #include "third_party/blink/public/common/logging/logging_utils.h" -#include "third_party/blink/public/common/service_worker/service_worker_utils.h" #include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h" #include "third_party/blink/public/mojom/blob/blob.mojom.h" #include "third_party/blink/public/mojom/choosers/file_chooser.mojom.h"
diff --git a/content/renderer/service_worker/service_worker_context_client.cc b/content/renderer/service_worker/service_worker_context_client.cc index aecbe53..0052ec5 100644 --- a/content/renderer/service_worker/service_worker_context_client.cc +++ b/content/renderer/service_worker/service_worker_context_client.cc
@@ -44,7 +44,6 @@ #include "services/network/public/cpp/wrapper_shared_url_loader_factory.h" #include "third_party/blink/public/common/messaging/message_port_channel.h" #include "third_party/blink/public/common/service_worker/service_worker_status_code.h" -#include "third_party/blink/public/common/service_worker/service_worker_utils.h" #include "third_party/blink/public/mojom/blob/blob.mojom.h" #include "third_party/blink/public/mojom/browser_interface_broker.mojom.h" #include "third_party/blink/public/mojom/loader/request_context_frame_type.mojom.h"
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index c9457ee..8c4fa7ea 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -671,6 +671,7 @@ "//media/test/data/four-colors-rot-270.mp4", "//media/test/data/four-colors-vp9.webm", "//media/test/data/four-colors-vp9-i420a.webm", + "//media/test/data/four-colors-incompatible-stride.y4m", # For power "//media/test/data/bear-1280x720.mp4",
diff --git a/content/test/data/gpu/pixel_video_media_stream_incompatible_stride.html b/content/test/data/gpu/pixel_video_media_stream_incompatible_stride.html new file mode 100644 index 0000000..d0b579d --- /dev/null +++ b/content/test/data/gpu/pixel_video_media_stream_incompatible_stride.html
@@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<head> +<title>Media Stream Incompatible Stride Video test</title> +<style type="text/css"> +.nomargin { + margin: 0px auto; +} +</style> +<script src="pixel_video_media_stream_test.js"></script> +</head> +<body onload="main()"> +<div id="container" style="position:absolute; top:0px; left:0px"> +<video class="nomargin" id="video" width="240" height="135"> +</video> +</div> +</body> +</html>
diff --git a/content/test/data/gpu/pixel_video_media_stream_test.js b/content/test/data/gpu/pixel_video_media_stream_test.js new file mode 100644 index 0000000..c86f2b4 --- /dev/null +++ b/content/test/data/gpu/pixel_video_media_stream_test.js
@@ -0,0 +1,32 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +var video; + +// Some videos are less than 60 fps, so actual video frame presentations +// could be much less than 30. +var g_swaps_before_success = 30 + +async function main() { + video = document.getElementById("video"); + video.loop = true; + video.requestVideoFrameCallback(waitForVideoToPlay); + video.srcObject = await navigator.mediaDevices.getUserMedia({video: true}); + video.play(); +} + +function waitForVideoToPlay() { + chrome.gpuBenchmarking.addSwapCompletionEventListener( + waitForSwapsToComplete); +} + +function waitForSwapsToComplete() { + g_swaps_before_success--; + if (g_swaps_before_success > 0) { + chrome.gpuBenchmarking.addSwapCompletionEventListener( + waitForSwapsToComplete); + } else { + domAutomationController.send("SUCCESS"); + } +}
diff --git a/content/test/fuzzer/BUILD.gn b/content/test/fuzzer/BUILD.gn index 9c72c008..6a8f1117 100644 --- a/content/test/fuzzer/BUILD.gn +++ b/content/test/fuzzer/BUILD.gn
@@ -4,6 +4,7 @@ # Fuzzers for content/ components. +import("//mojo/public/tools/bindings/mojom.gni") import("//mojo/public/tools/fuzzers/mojolpm.gni") import("//testing/libfuzzer/fuzzer_test.gni") import("//third_party/protobuf/proto_library.gni") @@ -281,3 +282,72 @@ proto_deps = [ "//media/capture/mojom:video_capture_mojolpm" ] } } + +mojolpm_fuzzer_test("presentation_service_mojolpm_fuzzer") { + sources = [ "presentation_service_mojolpm_fuzzer.cc" ] + + proto_source = "presentation_service_mojolpm_fuzzer.proto" + + deps = [ + ":controller_presentation_service_delegate_for_fuzzing", + "//base/test:test_support", + "//content/browser:for_content_tests", + "//content/public/browser:browser", + "//content/test:content_unittests", + "//content/test:test_support", + "//services/network:test_support", + "//storage/browser:test_support", + "//ui/events/devices:devices", + ] + + proto_deps = [ + ":controller_presentation_service_delegate_for_fuzzing_proto", + "//third_party/blink/public/mojom:mojom_platform_mojolpm", + ] +} + +if (enable_mojom_fuzzer) { + static_library("controller_presentation_service_delegate_for_fuzzing") { + # Should only be used in the fuzzer this was made for + visibility = [ ":presentation_service_mojolpm_fuzzer" ] + + sources = [ + "controller_presentation_service_delegate_for_fuzzing.cc", + "controller_presentation_service_delegate_for_fuzzing.h", + ] + + deps = [ + ":controller_presentation_service_delegate_for_fuzzing_proto", + "//base", + "//content/public/browser:browser", + "//media:test_support", + "//third_party/blink/public/mojom:mojom_platform_mojolpm", + "//url/mojom:url_mojom_gurl_mojolpm", + ] + + testonly = true + } + + proto_library("controller_presentation_service_delegate_for_fuzzing_proto") { + # Should only be used in the fuzzer this was made for, and its + # generated rules + visibility = [ "//content/test/fuzzer:*" ] + + proto_in_dir = "//" + + sources = [ "controller_presentation_service_delegate_for_fuzzing.proto" ] + generate_python = false + + proto_deps = [ + "//third_party/blink/public/mojom:mojom_platform_mojolpm", + "//url/mojom:url_mojom_gurl_mojolpm", + ] + link_deps = [ + "//third_party/blink/public/mojom:mojom_platform_mojolpm", + "//url/mojom:url_mojom_gurl_mojolpm", + ] + + import_dirs = [ root_gen_dir ] + testonly = true + } +}
diff --git a/content/test/fuzzer/controller_presentation_service_delegate_for_fuzzing.cc b/content/test/fuzzer/controller_presentation_service_delegate_for_fuzzing.cc new file mode 100644 index 0000000..3b2ef33 --- /dev/null +++ b/content/test/fuzzer/controller_presentation_service_delegate_for_fuzzing.cc
@@ -0,0 +1,402 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <memory> +#include <string> +#include <utility> + +#include "content/test/fuzzer/controller_presentation_service_delegate_for_fuzzing.h" + +#include "base/notreached.h" +#include "base/task/post_task.h" +#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" +#include "third_party/blink/public/mojom/presentation/presentation.mojom-mojolpm.h" +#include "url/mojom/url.mojom-mojolpm.h" + +// Code copy of a limit of the same name +// This allows preventing the fake making bad calls +// See "content/browser/presentation/presentation_service_impl.cc" +static constexpr size_t kMaxPresentationIdLength = 256; + +ControllerPresentationServiceDelegateForFuzzing:: + ControllerPresentationServiceDelegateForFuzzing() { + DETACH_FROM_SEQUENCE(sequence_checker_); +} + +ControllerPresentationServiceDelegateForFuzzing:: + ~ControllerPresentationServiceDelegateForFuzzing() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + for (auto& observer_pair : observers_) + observer_pair.second->OnDelegateDestroyed(); +} + +void ControllerPresentationServiceDelegateForFuzzing::AddObserver( + int render_process_id, + int render_frame_id, + ControllerPresentationServiceDelegate::Observer* observer) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + observers_[content::GlobalFrameRoutingId(render_process_id, + render_frame_id)] = observer; +} + +void ControllerPresentationServiceDelegateForFuzzing::RemoveObserver( + int render_process_id, + int render_frame_id) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + observers_.erase( + content::GlobalFrameRoutingId(render_process_id, render_frame_id)); +} + +void ControllerPresentationServiceDelegateForFuzzing::Reset( + int render_process_id, + int render_frame_id) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + // Intentionally, we do not reset all callbacks, in order to mimic + // `ControllerPresentationServiceDelegateImpl` as closely as possible. + listeners_.clear(); + set_default_presentation_urls_callback_.Reset(); +} + +void ControllerPresentationServiceDelegateForFuzzing:: + SetDefaultPresentationUrls( + const content::PresentationRequest& request, + content::DefaultPresentationConnectionCallback callback) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + set_default_presentation_urls_callback_ = std::move(callback); +} + +void ControllerPresentationServiceDelegateForFuzzing::StartPresentation( + const content::PresentationRequest& request, + content::PresentationConnectionCallback success_cb, + content::PresentationConnectionErrorCallback error_cb) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + start_presentation_success_cb_ = std::move(success_cb); + start_presentation_error_cb_ = std::move(error_cb); +} + +void ControllerPresentationServiceDelegateForFuzzing::ReconnectPresentation( + const content::PresentationRequest& request, + const std::string& presentation_id, + content::PresentationConnectionCallback success_cb, + content::PresentationConnectionErrorCallback error_cb) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + reconnect_presentation_success_cb_ = std::move(success_cb); + reconnect_presentation_error_cb_ = std::move(error_cb); +} + +void ControllerPresentationServiceDelegateForFuzzing::CloseConnection( + int render_process_id, + int render_frame_id, + const std::string& presentation_id) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + start_presentation_success_cb_.Reset(); + start_presentation_error_cb_.Reset(); + reconnect_presentation_success_cb_.Reset(); + reconnect_presentation_error_cb_.Reset(); +} + +void ControllerPresentationServiceDelegateForFuzzing::Terminate( + int render_process_id, + int render_frame_id, + const std::string& presentation_id) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + start_presentation_success_cb_.Reset(); + start_presentation_error_cb_.Reset(); + reconnect_presentation_success_cb_.Reset(); + reconnect_presentation_error_cb_.Reset(); +} + +std::unique_ptr<media::FlingingController> +ControllerPresentationServiceDelegateForFuzzing::GetFlingingController( + int render_process_id, + int render_frame_id, + const std::string& presentation_id) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + // This should not fail. As the MojoLPM fuzzer this fake was designed to work + // with has no way to call this. + NOTIMPLEMENTED(); + return nullptr; +} + +void ControllerPresentationServiceDelegateForFuzzing:: + ListenForConnectionStateChange( + int render_process_id, + int render_frame_id, + const blink::mojom::PresentationInfo& connection, + const content::PresentationConnectionStateChangedCallback& + state_changed_cb) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + listen_for_connection_state_change_state_changed_cb_ = + std::move(state_changed_cb); +} + +bool ControllerPresentationServiceDelegateForFuzzing:: + AddScreenAvailabilityListener( + int render_process_id, + int render_frame_id, + content::PresentationScreenAvailabilityListener* listener) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + listeners_[listener->GetAvailabilityUrl()] = listener; + return true; +} + +void ControllerPresentationServiceDelegateForFuzzing:: + RemoveScreenAvailabilityListener( + int render_process_id, + int render_frame_id, + content::PresentationScreenAvailabilityListener* listener) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + listeners_.erase(listener->GetAvailabilityUrl()); +} +void ControllerPresentationServiceDelegateForFuzzing:: + HandleListenersGetAvailabilityUrl( + const mojolpm::url::mojom::Url& proto_url) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + GURL url; + if (!mojolpm::FromProto(proto_url, url)) + return; + base::PostTask( + FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&ControllerPresentationServiceDelegateForFuzzing:: + CallListenersGetAvailabilityUrl, + GetWeakPtr(), std::move(url))); +} + +void ControllerPresentationServiceDelegateForFuzzing:: + CallListenersGetAvailabilityUrl(GURL url) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + if (!listeners_.count(url)) + return; + listeners_[url]->GetAvailabilityUrl(); +} +void ControllerPresentationServiceDelegateForFuzzing:: + HandleListenersOnScreenAvailabilityChanged( + const mojolpm::url::mojom::Url& proto_url, + const mojolpm::blink::mojom::ScreenAvailability& + proto_screen_availability) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + GURL url; + if (!mojolpm::FromProto(proto_url, url)) + return; + blink::mojom::ScreenAvailability screen_availability; + if (!mojolpm::FromProto(proto_screen_availability, screen_availability)) + return; + base::PostTask( + FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&ControllerPresentationServiceDelegateForFuzzing:: + CallListenersOnScreenAvailabilityChanged, + GetWeakPtr(), std::move(url), + std::move(screen_availability))); +} + +void ControllerPresentationServiceDelegateForFuzzing:: + CallListenersOnScreenAvailabilityChanged( + GURL url, + blink::mojom::ScreenAvailability screen_availability) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + if (!listeners_.count(url)) + return; + listeners_[url]->OnScreenAvailabilityChanged(std::move(screen_availability)); +} + +void ControllerPresentationServiceDelegateForFuzzing:: + HandleSetDefaultPresentationUrls( + const mojolpm::blink::mojom::PresentationConnectionResult& + proto_result) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + blink::mojom::PresentationConnectionResultPtr result; + if (!mojolpm::FromProto(proto_result, result)) + return; + base::PostTask( + FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&ControllerPresentationServiceDelegateForFuzzing:: + CallSetDefaultPresentationUrls, + GetWeakPtr(), std::move(result))); +} + +void ControllerPresentationServiceDelegateForFuzzing:: + CallSetDefaultPresentationUrls( + blink::mojom::PresentationConnectionResultPtr result_ptr) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + if (set_default_presentation_urls_callback_.is_null()) + return; + set_default_presentation_urls_callback_.Run(std::move(result_ptr)); +} + +void ControllerPresentationServiceDelegateForFuzzing:: + HandleStartPresentationSuccess( + const mojolpm::blink::mojom::PresentationConnectionResult& + proto_result) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + blink::mojom::PresentationConnectionResultPtr result; + if (!mojolpm::FromProto(proto_result, result)) + return; + base::PostTask( + FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&ControllerPresentationServiceDelegateForFuzzing:: + CallStartPresentationSuccess, + GetWeakPtr(), std::move(result))); +} + +void ControllerPresentationServiceDelegateForFuzzing:: + CallStartPresentationSuccess( + blink::mojom::PresentationConnectionResultPtr result_ptr) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + if (result_ptr->presentation_info->id.length() > kMaxPresentationIdLength) + return; + if (start_presentation_success_cb_.is_null()) + return; + std::move(start_presentation_success_cb_).Run(std::move(result_ptr)); +} + +void ControllerPresentationServiceDelegateForFuzzing:: + HandleStartPresentationError( + const mojolpm::blink::mojom::PresentationError& proto_error) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + blink::mojom::PresentationErrorPtr error; + if (!mojolpm::FromProto(proto_error, error)) + return; + base::PostTask( + FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&ControllerPresentationServiceDelegateForFuzzing:: + CallStartPresentationError, + GetWeakPtr(), std::move(error))); +} + +void ControllerPresentationServiceDelegateForFuzzing:: + CallStartPresentationError(blink::mojom::PresentationErrorPtr error_ptr) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + if (start_presentation_error_cb_.is_null()) + return; + std::move(start_presentation_error_cb_).Run(*std::move(error_ptr)); +} + +void ControllerPresentationServiceDelegateForFuzzing:: + HandleReconnectPresentationSuccess( + const mojolpm::blink::mojom::PresentationConnectionResult& + proto_result) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + blink::mojom::PresentationConnectionResultPtr result; + if (!mojolpm::FromProto(proto_result, result)) + return; + base::PostTask( + FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&ControllerPresentationServiceDelegateForFuzzing:: + CallReconnectPresentationSuccess, + GetWeakPtr(), std::move(result))); +} + +void ControllerPresentationServiceDelegateForFuzzing:: + CallReconnectPresentationSuccess( + blink::mojom::PresentationConnectionResultPtr result_ptr) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + if (reconnect_presentation_success_cb_.is_null()) + return; + std::move(reconnect_presentation_success_cb_).Run(std::move(result_ptr)); +} + +void ControllerPresentationServiceDelegateForFuzzing:: + HandleReconnectPresentationError( + const mojolpm::blink::mojom::PresentationError& proto_error) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + blink::mojom::PresentationErrorPtr error; + if (!mojolpm::FromProto(proto_error, error)) + return; + base::PostTask( + FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&ControllerPresentationServiceDelegateForFuzzing:: + CallReconnectPresentationError, + GetWeakPtr(), std::move(error))); +} + +void ControllerPresentationServiceDelegateForFuzzing:: + CallReconnectPresentationError( + blink::mojom::PresentationErrorPtr error_ptr) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + if (reconnect_presentation_error_cb_.is_null()) + return; + std::move(reconnect_presentation_error_cb_).Run(*std::move(error_ptr)); +} + +void ControllerPresentationServiceDelegateForFuzzing:: + HandleListenForConnectionStateChangeStateChanged( + const mojolpm::blink::mojom::PresentationConnectionState& + proto_connection_state) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + blink::mojom::PresentationConnectionState connection_state; + if (!mojolpm::FromProto(proto_connection_state, connection_state)) + return; + base::PostTask( + FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&ControllerPresentationServiceDelegateForFuzzing:: + CallListenForConnectionStateChangeStateChanged, + GetWeakPtr(), std::move(connection_state))); +} + +void ControllerPresentationServiceDelegateForFuzzing:: + CallListenForConnectionStateChangeStateChanged( + blink::mojom::PresentationConnectionState connection_state) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + if (listen_for_connection_state_change_state_changed_cb_.is_null()) + return; + content::PresentationConnectionStateChangeInfo state_change_info{ + connection_state}; + std::move(listen_for_connection_state_change_state_changed_cb_) + .Run(state_change_info); +} + +void ControllerPresentationServiceDelegateForFuzzing::NextAction( + const Action& action) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + switch (action.action_case()) { + case Action::kListenerGetAvailabilityUrl: { + HandleListenersGetAvailabilityUrl( + action.listener_get_availability_url().listener_availability_url()); + } break; + + case Action::kListenerOnScreenAvailabilityChanged: { + HandleListenersOnScreenAvailabilityChanged( + action.listener_on_screen_availability_changed() + .listener_availability_url(), + action.listener_on_screen_availability_changed() + .screen_availability()); + } break; + + case Action::kSetDefaultPresentationUrls: { + HandleSetDefaultPresentationUrls(action.set_default_presentation_urls() + .presentation_connection_result()); + } break; + + case Action::kStartPresentationSuccess: { + HandleStartPresentationSuccess( + action.start_presentation_success().presentation_connection_result()); + } break; + + case Action::kStartPresentationError: { + HandleStartPresentationError( + action.start_presentation_error().presentation_error()); + } break; + + case Action::kReconnectPresentationSuccess: { + HandleReconnectPresentationSuccess(action.reconnect_presentation_success() + .presentation_connection_result()); + } break; + + case Action::kReconnectPresentationError: { + HandleReconnectPresentationError( + action.reconnect_presentation_error().presentation_error()); + } break; + + case Action::kListenForConnectionStateChangeStateChanged: { + HandleListenForConnectionStateChangeStateChanged( + action.listen_for_connection_state_change_state_changed() + .presentation_connection_state()); + } break; + + case Action::ACTION_NOT_SET: + break; + } +}
diff --git a/content/test/fuzzer/controller_presentation_service_delegate_for_fuzzing.h b/content/test/fuzzer/controller_presentation_service_delegate_for_fuzzing.h new file mode 100644 index 0000000..5556f36 --- /dev/null +++ b/content/test/fuzzer/controller_presentation_service_delegate_for_fuzzing.h
@@ -0,0 +1,191 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_TEST_FUZZER_CONTROLLER_PRESENTATION_SERVICE_DELEGATE_FOR_FUZZING_H_ +#define CONTENT_TEST_FUZZER_CONTROLLER_PRESENTATION_SERVICE_DELEGATE_FOR_FUZZING_H_ + +#include <map> +#include <memory> +#include <string> + +#include "content/public/browser/global_routing_id.h" +#include "content/public/browser/presentation_screen_availability_listener.h" +#include "content/public/browser/presentation_service_delegate.h" +#include "content/test/fuzzer/controller_presentation_service_delegate_for_fuzzing.pb.h" +#include "media/base/flinging_controller.h" +#include "third_party/blink/public/mojom/presentation/presentation.mojom.h" + +// Fake for the `ControllerPresentationServiceDelegate` interface +// +// This fake is limited to do callback, observer and listener behaviours, +// according to a set of actions specified by a protobuf. +// So it is not suitable for tests. It is designed for a fuzzer. +// +// Usage: call the component as expected as the delegate interface. +// To run the callables provided, use `NextAction`, +// provide a protobuf of the `Action` message - there lists the possible calls. +// This will instruct the fake to run the callbacks accordingly. +// +// The callables are run on the UI thread, as the delegate interface is expected +// to be called on the UI thread. +// In the case of MojoLPM fuzzers, `NextAction` should be called on the fuzzer +// thread. +class ControllerPresentationServiceDelegateForFuzzing + : public content::ControllerPresentationServiceDelegate { + public: + ControllerPresentationServiceDelegateForFuzzing(); + ~ControllerPresentationServiceDelegateForFuzzing() override; + + // Used to run one callable. + // These are set by using this as implementation of the delegate interface. + // The callable is specified by the `action`, as defined in assocciated proto. + // + // All calls must be run on the same sequence + // (for MojoLPM fuzzers, it should be the fuzzer thread) + void NextAction( + const content::fuzzing:: + controller_presentation_service_delegate_for_fuzzing::proto::Action& + action); + + // ControllerPresentationServiceDelegate implementation + void AddObserver(int render_process_id, + int render_frame_id, + Observer* observer) override; + + void RemoveObserver(int render_process_id, int render_frame_id) override; + + void Reset(int render_process_id, int render_frame_id) override; + + bool AddScreenAvailabilityListener( + int render_process_id, + int render_frame_id, + content::PresentationScreenAvailabilityListener* listener) override; + + void RemoveScreenAvailabilityListener( + int render_process_id, + int render_frame_id, + content::PresentationScreenAvailabilityListener* listener) override; + + void SetDefaultPresentationUrls( + const content::PresentationRequest& request, + content::DefaultPresentationConnectionCallback callback) override; + + void StartPresentation( + const content::PresentationRequest& request, + content::PresentationConnectionCallback success_cb, + content::PresentationConnectionErrorCallback error_cb) override; + + void ReconnectPresentation( + const content::PresentationRequest& request, + const std::string& presentation_id, + content::PresentationConnectionCallback success_cb, + content::PresentationConnectionErrorCallback error_cb) override; + + void CloseConnection(int render_process_id, + int render_frame_id, + const std::string& presentation_id) override; + + void Terminate(int render_process_id, + int render_frame_id, + const std::string& presentation_id) override; + + std::unique_ptr<media::FlingingController> GetFlingingController( + int render_process_id, + int render_frame_id, + const std::string& presentation_id) override; + + void ListenForConnectionStateChange( + int render_process_id, + int render_frame_id, + const blink::mojom::PresentationInfo& connection, + const content::PresentationConnectionStateChangedCallback& + state_changed_cb) override; + + private: + using Action = content::fuzzing:: + controller_presentation_service_delegate_for_fuzzing::proto::Action; + + // Use to invoke the callbacks & registered callables + // For each, we have two member functions, where the first calls the second. + // The first is prefixed by `Handle`, which takes the raw protobuf datatype, + // and is run on the same thread as `NextAction` (for MojoLPM: fuzzer thread). + // The second is prefixed by `Call` which invokes the call with the converted + // datatype, and is run on the UI thread. + void HandleListenersGetAvailabilityUrl( + const mojolpm::url::mojom::Url& proto_url); + void CallListenersGetAvailabilityUrl(GURL url); + + void HandleListenersOnScreenAvailabilityChanged( + const mojolpm::url::mojom::Url& proto_url, + const mojolpm::blink::mojom::ScreenAvailability& + proto_screen_availability); + void CallListenersOnScreenAvailabilityChanged( + GURL url, + blink::mojom::ScreenAvailability screen_availability); + + void HandleSetDefaultPresentationUrls( + const mojolpm::blink::mojom::PresentationConnectionResult& proto_result); + void CallSetDefaultPresentationUrls( + blink::mojom::PresentationConnectionResultPtr result_ptr); + + void HandleStartPresentationSuccess( + const mojolpm::blink::mojom::PresentationConnectionResult& proto_result); + void CallStartPresentationSuccess( + blink::mojom::PresentationConnectionResultPtr result_ptr); + + void HandleStartPresentationError( + const mojolpm::blink::mojom::PresentationError& proto_error); + void CallStartPresentationError(blink::mojom::PresentationErrorPtr error_ptr); + + void HandleReconnectPresentationSuccess( + const mojolpm::blink::mojom::PresentationConnectionResult& proto_result); + void CallReconnectPresentationSuccess( + blink::mojom::PresentationConnectionResultPtr result_ptr); + + void HandleReconnectPresentationError( + const mojolpm::blink::mojom::PresentationError& proto_error); + void CallReconnectPresentationError( + blink::mojom::PresentationErrorPtr error_ptr); + + void HandleListenForConnectionStateChangeStateChanged( + const mojolpm::blink::mojom::PresentationConnectionState& + proto_connection_state); + void CallListenForConnectionStateChangeStateChanged( + blink::mojom::PresentationConnectionState connection_state); + + base::WeakPtr<ControllerPresentationServiceDelegateForFuzzing> GetWeakPtr() { + return weak_factory_.GetWeakPtr(); + } + + // We store all callbacks as single callables; not queued nor out of order, + // as this mimics the real delegate as closely as possible + std::map<content::GlobalFrameRoutingId, + content::PresentationServiceDelegate::Observer*> + observers_; + + std::map<GURL, content::PresentationScreenAvailabilityListener*> listeners_; + + content::DefaultPresentationConnectionCallback + set_default_presentation_urls_callback_; + + content::PresentationConnectionCallback start_presentation_success_cb_; + + content::PresentationConnectionErrorCallback start_presentation_error_cb_; + + content::PresentationConnectionCallback reconnect_presentation_success_cb_; + + content::PresentationConnectionErrorCallback reconnect_presentation_error_cb_; + + content::PresentationConnectionStateChangedCallback + listen_for_connection_state_change_state_changed_cb_; + + SEQUENCE_CHECKER(sequence_checker_); + + // `PostTask`ing the calls onto the UI thread is not guaranteed to outlive + // `this`. So a weak pointer is necessary for those calls. + base::WeakPtrFactory<ControllerPresentationServiceDelegateForFuzzing> + weak_factory_{this}; +}; + +#endif // CONTENT_TEST_FUZZER_CONTROLLER_PRESENTATION_SERVICE_DELEGATE_FOR_FUZZING_H_
diff --git a/content/test/fuzzer/controller_presentation_service_delegate_for_fuzzing.proto b/content/test/fuzzer/controller_presentation_service_delegate_for_fuzzing.proto new file mode 100644 index 0000000..97c620a3 --- /dev/null +++ b/content/test/fuzzer/controller_presentation_service_delegate_for_fuzzing.proto
@@ -0,0 +1,58 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Message format for `ControllerPresentationServiceDelegateForFuzzing` +// An `Action` will run a callable + +syntax = "proto2"; + +package content.fuzzing.controller_presentation_service_delegate_for_fuzzing.proto; + +import "third_party/blink/public/mojom/presentation/presentation.mojom.mojolpm.proto"; +import "url/mojom/url.mojom.mojolpm.proto"; + +// Used to specify actions, which will run the appropriate call onto the +// specified, by url,`PresentationScreenAvailabilityListener`. +// Having been registered with the fake, through the interface as the delegate. +message GetAvailabilityUrlAction { + required mojolpm.url.mojom.Url listener_availability_url = 1; +} +message OnScreenAvailabilityChangedAction { + required mojolpm.url.mojom.Url listener_availability_url = 1; + required mojolpm.blink.mojom.ScreenAvailability screen_availability = 2; +} + +// Used to specify actions, which would run a callback established through the +// interface as the delegate +message PresentationConnectionAction { + required mojolpm.blink.mojom.PresentationConnectionResult + presentation_connection_result = 1; +} +message PresentationConnectionErrorAction { + required mojolpm.blink.mojom.PresentationError presentation_error = 1; +} +message PresentationConnectionStateChangedAction { + required mojolpm.blink.mojom.PresentationConnectionState + presentation_connection_state = 1; +} + +// Actions that can be performed by the fake. +message Action { + oneof action { + GetAvailabilityUrlAction listener_get_availability_url = 1; + OnScreenAvailabilityChangedAction listener_on_screen_availability_changed = + 2; + + PresentationConnectionAction set_default_presentation_urls = 3; + + PresentationConnectionAction start_presentation_success = 4; + PresentationConnectionErrorAction start_presentation_error = 5; + + PresentationConnectionAction reconnect_presentation_success = 6; + PresentationConnectionErrorAction reconnect_presentation_error = 7; + + PresentationConnectionStateChangedAction + listen_for_connection_state_change_state_changed = 8; + } +}
diff --git a/content/test/fuzzer/presentation_service_mojolpm_fuzzer.cc b/content/test/fuzzer/presentation_service_mojolpm_fuzzer.cc new file mode 100644 index 0000000..e189705 --- /dev/null +++ b/content/test/fuzzer/presentation_service_mojolpm_fuzzer.cc
@@ -0,0 +1,374 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <stdint.h> +#include <memory> +#include <string> +#include <utility> + +#include "base/at_exit.h" +#include "base/base_switches.h" +#include "base/bind.h" +#include "base/bind_helpers.h" +#include "base/command_line.h" +#include "base/i18n/icu_util.h" +#include "base/macros.h" +#include "base/optional.h" +#include "base/run_loop.h" +#include "base/task/post_task.h" +#include "base/test/test_switches.h" +#include "base/test/test_timeouts.h" +#include "base/threading/platform_thread.h" +#include "base/threading/thread.h" +#include "content/browser/gpu/gpu_data_manager_impl.h" // nogncheck +#include "content/browser/network_service_instance_impl.h" // nogncheck +#include "content/browser/presentation/presentation_service_impl.h" // nogncheck +#include "content/browser/presentation/presentation_test_utils.h" +#include "content/browser/site_instance_impl.h" // nogncheck +#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/presentation_request.h" +#include "content/public/browser/presentation_service_delegate.h" +#include "content/public/browser/site_instance.h" +#include "content/public/common/content_client.h" +#include "content/public/common/content_switches.h" +#include "content/public/test/browser_task_environment.h" +#include "content/public/test/mock_navigation_handle.h" +#include "content/public/test/test_browser_context.h" +#include "content/public/test/test_content_client_initializer.h" +#include "content/public/test/test_renderer_host.h" +#include "content/test/fuzzer/controller_presentation_service_delegate_for_fuzzing.h" +#include "content/test/fuzzer/presentation_service_mojolpm_fuzzer.pb.h" +#include "content/test/test_render_frame_host.h" +#include "content/test/test_web_contents.h" +#include "mojo/core/embedder/embedder.h" +#include "mojo/public/cpp/bindings/interface_ptr.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" +#include "third_party/blink/public/mojom/presentation/presentation.mojom-mojolpm.h" +#include "third_party/libprotobuf-mutator/src/src/libfuzzer/libfuzzer_macro.h" +#include "ui/events/devices/device_data_manager.h" + +const char* cmdline[] = {"presentation_service_mojolpm_fuzzer", nullptr}; + +// Global environment needed to run the interface being tested. +// +// This will be created once, before fuzzing starts, and will be shared between +// all testcases. It is created on the main thread. +// +// At a minimum, we should always be able to set up the command line, i18n and +// mojo, and create the thread on which the fuzzer will be run. We want to avoid +// (as much as is reasonable) any state being preserved between testcases. +// +// We try to create an environment that matches the real browser process as +// much as possible, so we use real platform threads in the task environment. +class ContentFuzzerEnvironment { + public: + ContentFuzzerEnvironment() + : fuzzer_thread_((base::CommandLine::Init(1, cmdline), "fuzzer_thread")) { + TestTimeouts::Initialize(); + logging::SetMinLogLevel(logging::LOG_FATAL); + mojo::core::Init(); + base::i18n::InitializeICU(); + fuzzer_thread_.StartAndWaitForTesting(); + + content::ForceCreateNetworkServiceDirectlyForTesting(); + } + + scoped_refptr<base::SequencedTaskRunner> fuzzer_task_runner() { + return fuzzer_thread_.task_runner(); + } + + private: + base::AtExitManager at_exit_manager_; + base::Thread fuzzer_thread_; + content::TestContentClientInitializer content_client_initializer_; +}; + +ContentFuzzerEnvironment& GetEnvironment() { + static base::NoDestructor<ContentFuzzerEnvironment> environment; + return *environment; +} + +scoped_refptr<base::SequencedTaskRunner> GetFuzzerTaskRunner() { + return GetEnvironment().fuzzer_task_runner(); +} + +// Per-testcase state needed to run the interface being tested. +// +// The lifetime of this is scoped to a single testcase, and it is created and +// destroyed from the fuzzer sequence. +// +// This owns the instance of `PresentationServiceImpl` to be fuzzed, and the +// mock delegate instance that will be used by the service instance. +// This class inherits from `RenderViewHostTestHarness` as the service +// instance relies on using a `RenderFrameHost` instance. +// +// TODO(clovispj) investigate performance loss this causes: +// The test harness has the drawback it owns a `BrowserTaskEnvironment`, so it +// becomes scoped per testcase - it would be preferred to be global to all. +// +// We use a single `PresentationServiceImpl` which can be bound to multiple +// remotes, to imitate true behaviour as much as possbile. +class PresentationServiceTestcase : public content::RenderViewHostTestHarness { + public: + explicit PresentationServiceTestcase( + const content::fuzzing::presentation_service::proto::Testcase& testcase); + ~PresentationServiceTestcase() override; + + // Returns true once either all of the actions in the testcase have been + // performed, or the per-testcase action limit has been exceeded. + // + // This should only be called from the fuzzer sequence. + bool IsFinished(); + + // If there are still actions remaining in the testcase, this will perform the + // next sequence of actions before returning. + // + // If IsFinished() would return true, then calling this function is a no-op. + // + // This should only be called from the fuzzer sequence. + void NextAction(); + + private: + using Action = content::fuzzing::presentation_service::proto::Action; + + void SetUp() override; + void SetUpOnUIThread(); + + void TearDown() override; + void TearDownOnUIThread(); + + // Create and bind a new instance for fuzzing. This needs to make sure that + // the new instance has been created and bound on the correct sequence before + // returning. + void AddPresentationService(uint32_t id); + + void TestBody() override {} + + // The proto message describing the test actions to perform. + const content::fuzzing::presentation_service::proto::Testcase& testcase_; + + // Apply a reasonable upper-bound on testcase complexity to avoid timeouts. + const int max_action_count_ = 512; + + // Apply a reasonable upper-bound on maximum size of action that we will + // deserialize. (This is deliberately slightly larger than max mojo message + // size) + const size_t max_action_size_ = 300 * 1024 * 1024; + + // Count of total actions performed in this testcase. + int action_count_ = 0; + + // The index of the next sequence of actions to execute. + int next_sequence_idx_ = 0; + + // A fake delegate which we can control with protobuf messages, + // the actions of which are also within our fuzzer's actions. + // Required as `PresentationServiceDelegateImpl` expects UI interaction. + std::unique_ptr<ControllerPresentationServiceDelegateForFuzzing> + controller_delegate_; + + // Component which we fuzz + std::unique_ptr<content::PresentationServiceImpl> presentation_service_; + + SEQUENCE_CHECKER(sequence_checker_); +}; + +PresentationServiceTestcase::PresentationServiceTestcase( + const content::fuzzing::presentation_service::proto::Testcase& testcase) + : RenderViewHostTestHarness( + base::test::TaskEnvironment::TimeSource::MOCK_TIME, + base::test::TaskEnvironment::MainThreadType::DEFAULT, + base::test::TaskEnvironment::ThreadPoolExecutionMode::ASYNC, + base::test::TaskEnvironment::ThreadingMode::MULTIPLE_THREADS, + content::BrowserTaskEnvironment::REAL_IO_THREAD), + testcase_(testcase) { + SetUp(); +} + +PresentationServiceTestcase::~PresentationServiceTestcase() { + TearDown(); +} + +bool PresentationServiceTestcase::IsFinished() { + return next_sequence_idx_ >= testcase_.sequence_indexes_size(); +} + +void PresentationServiceTestcase::NextAction() { + if (next_sequence_idx_ < testcase_.sequence_indexes_size()) { + auto sequence_idx = testcase_.sequence_indexes(next_sequence_idx_++); + const auto& sequence = + testcase_.sequences(sequence_idx % testcase_.sequences_size()); + for (auto action_idx : sequence.action_indexes()) { + if (!testcase_.actions_size() || ++action_count_ > max_action_count_) { + return; + } + const auto& action = + testcase_.actions(action_idx % testcase_.actions_size()); + if (action.ByteSizeLong() > max_action_size_) { + return; + } + switch (action.action_case()) { + case Action::kRunThread: { + if (action.run_thread().id()) { + base::RunLoop run_loop(base::RunLoop::Type::kNestableTasksAllowed); + base::PostTask(FROM_HERE, {content::BrowserThread::UI}, + run_loop.QuitClosure()); + run_loop.Run(); + } else { + base::RunLoop run_loop(base::RunLoop::Type::kNestableTasksAllowed); + base::PostTask(FROM_HERE, {content::BrowserThread::IO}, + run_loop.QuitClosure()); + run_loop.Run(); + } + } break; + + case Action::kNewPresentationService: { + AddPresentationService(action.new_presentation_service().id()); + } break; + + case Action::kPresentationServiceRemoteAction: { + mojolpm::HandleRemoteAction( + action.presentation_service_remote_action()); + } break; + + case Action::kPresentationControllerReceiverAction: { + mojolpm::HandleReceiverAction( + action.presentation_controller_receiver_action()); + } break; + + case Action::kPresentationReceiverReceiverAction: { + mojolpm::HandleReceiverAction( + action.presentation_receiver_receiver_action()); + } break; + + case Action::kControllerDelegateAction: { + controller_delegate_->NextAction(action.controller_delegate_action()); + } break; + + case Action::ACTION_NOT_SET: + break; + } + } + } +} + +void PresentationServiceTestcase::SetUp() { + RenderViewHostTestHarness::SetUp(); + + base::RunLoop run_loop; + base::PostTaskAndReply( + FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&PresentationServiceTestcase::SetUpOnUIThread, + base::Unretained(this)), + run_loop.QuitClosure()); + run_loop.Run(); +} + +void PresentationServiceTestcase::SetUpOnUIThread() { + content::TestRenderFrameHost* render_frame_host = + static_cast<content::TestWebContents*>(web_contents())->GetMainFrame(); + render_frame_host->InitializeRenderFrameIfNeeded(); + + presentation_service_ = + content::PresentationServiceImpl::Create(render_frame_host); + + controller_delegate_ = + std::make_unique<ControllerPresentationServiceDelegateForFuzzing>(); + presentation_service_->SetControllerDelegateForTesting( + controller_delegate_.get()); +} + +void PresentationServiceTestcase::TearDown() { + base::RunLoop run_loop; + base::PostTaskAndReply( + FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&PresentationServiceTestcase::TearDownOnUIThread, + base::Unretained(this)), + run_loop.QuitClosure()); + run_loop.Run(); + + RenderViewHostTestHarness::TearDown(); +} + +void PresentationServiceTestcase::TearDownOnUIThread() { + presentation_service_.reset(); + controller_delegate_.reset(); +} + +void PresentationServiceTestcase::AddPresentationService(uint32_t id) { + mojo::Remote<::blink::mojom::PresentationService> remote; + auto receiver = remote.BindNewPipeAndPassReceiver(); + + // `Unretained` is safe here, as `run_loop.Run()` blocks until + // `PostTaskAndReply` calls the quit closure. + base::RunLoop run_loop(base::RunLoop::Type::kNestableTasksAllowed); + base::PostTaskAndReply( + FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&content::PresentationServiceImpl::Bind, + base::Unretained(presentation_service_.get()), + std::move(receiver)), + run_loop.QuitClosure()); + run_loop.Run(); + + mojolpm::GetContext()->AddInstance(id, std::move(remote)); +} + +// Helper function to keep scheduling fuzzer actions on the current runloop +// until the testcase has completed, and then quit the runloop. +void NextAction(PresentationServiceTestcase* testcase, + base::RepeatingClosure quit_closure) { + if (!testcase->IsFinished()) { + testcase->NextAction(); + GetFuzzerTaskRunner()->PostTask( + FROM_HERE, base::BindOnce(NextAction, base::Unretained(testcase), + std::move(quit_closure))); + } else { + GetFuzzerTaskRunner()->PostTask(FROM_HERE, std::move(quit_closure)); + } +} + +// Helper function to setup and run the testcase, since we need to do that from +// the fuzzer sequence rather than the main thread. +void RunTestcase(PresentationServiceTestcase* testcase) { + mojo::Message message; + auto dispatch_context = + std::make_unique<mojo::internal::MessageDispatchContext>(&message); + + mojolpm::GetContext()->StartTestcase(); + + base::RunLoop fuzzer_run_loop(base::RunLoop::Type::kNestableTasksAllowed); + GetFuzzerTaskRunner()->PostTask( + FROM_HERE, base::BindOnce(NextAction, base::Unretained(testcase), + fuzzer_run_loop.QuitClosure())); + fuzzer_run_loop.Run(); + + mojolpm::GetContext()->EndTestcase(); +} + +DEFINE_BINARY_PROTO_FUZZER( + const content::fuzzing::presentation_service::proto::Testcase& + proto_testcase) { + if (!proto_testcase.actions_size() || !proto_testcase.sequences_size() || + !proto_testcase.sequence_indexes_size()) { + return; + } + + // Make sure that the environment is initialized before we do anything else. + GetEnvironment(); + + PresentationServiceTestcase testcase(proto_testcase); + + base::RunLoop ui_run_loop(base::RunLoop::Type::kNestableTasksAllowed); + + // Unretained is safe here, because ui_run_loop has to finish before testcase + // goes out of scope. + GetFuzzerTaskRunner()->PostTaskAndReply( + FROM_HERE, base::BindOnce(RunTestcase, base::Unretained(&testcase)), + ui_run_loop.QuitClosure()); + + ui_run_loop.Run(); +}
diff --git a/content/test/fuzzer/presentation_service_mojolpm_fuzzer.proto b/content/test/fuzzer/presentation_service_mojolpm_fuzzer.proto new file mode 100644 index 0000000..b9405e0 --- /dev/null +++ b/content/test/fuzzer/presentation_service_mojolpm_fuzzer.proto
@@ -0,0 +1,61 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Message format for the MojoLPM fuzzer for the PresentationService interface. + +syntax = "proto2"; + +package content.fuzzing.presentation_service.proto; + +import "content/test/fuzzer/controller_presentation_service_delegate_for_fuzzing.proto"; +import "third_party/blink/public/mojom/presentation/presentation.mojom.mojolpm.proto"; + +// Bind a new PresentationService remote +message NewPresentationServiceAction { + required uint32 id = 1; +} + +// Run the specific sequence for (an indeterminate) period. This is not +// intended to create a specific ordering, but to allow the fuzzer to delay a +// later task until previous tasks have completed. +message RunThreadAction { + enum ThreadId { + IO = 0; + UI = 1; + } + + required ThreadId id = 1; +} + +// Actions that can be performed by the fuzzer. +message Action { + oneof action { + RunThreadAction run_thread = 1; + + NewPresentationServiceAction new_presentation_service = 2; + mojolpm.blink.mojom.PresentationService.RemoteAction + presentation_service_remote_action = 3; + + mojolpm.blink.mojom.PresentationController.ReceiverAction + presentation_controller_receiver_action = 4; + mojolpm.blink.mojom.PresentationReceiver.ReceiverAction + presentation_receiver_receiver_action = 5; + + content.fuzzing.controller_presentation_service_delegate_for_fuzzing.proto + .Action controller_delegate_action = 6; + } +} + +// Sequence provides a level of indirection which allows Testcase to compactly +// express repeated sequences of actions. +message Sequence { + repeated uint32 action_indexes = 1 [packed = true]; +} + +// Testcase is the top-level message type interpreted by the fuzzer. +message Testcase { + repeated Action actions = 1; + repeated Sequence sequences = 2; + repeated uint32 sequence_indexes = 3 [packed = true]; +}
diff --git a/content/test/gpu/gpu_tests/pixel_test_pages.py b/content/test/gpu/gpu_tests/pixel_test_pages.py index 97a680a..aa23c23 100644 --- a/content/test/gpu/gpu_tests/pixel_test_pages.py +++ b/content/test/gpu/gpu_tests/pixel_test_pages.py
@@ -5,8 +5,11 @@ # This is more akin to a .pyl/JSON file, so it's expected to be long. # pylint: disable=too-many-lines +import os + from gpu_tests import common_browser_args as cba from gpu_tests import skia_gold_matching_algorithms as algo +from gpu_tests import path_util CRASH_TYPE_GPU = 'gpu' @@ -110,6 +113,14 @@ ] +def GetMediaStreamTestBrowserArgs(media_stream_source_relpath): + return [ + '--use-fake-device-for-media-stream', '--use-fake-ui-for-media-stream', + '--use-file-for-fake-video-capture=' + + os.path.join(path_util.GetChromiumSrcDir(), media_stream_source_relpath) + ] + + class PixelTestPages(object): @staticmethod def DefaultPages(base_name): @@ -224,6 +235,13 @@ max_different_pixels=31100, pixel_delta_threshold=30, edge_threshold=250)), + PixelTestPage( + 'pixel_video_media_stream_incompatible_stride.html', + base_name + '_Video_Media_Stream_Incompatible_Stride', + browser_args=GetMediaStreamTestBrowserArgs( + 'media/test/data/four-colors-incompatible-stride.y4m'), + test_rect=[0, 0, 240, 135], + matching_algorithm=VERY_PERMISSIVE_SOBEL_ALGO), # The MP4 contains H.264 which is primarily hardware decoded on bots. PixelTestPage(
diff --git a/content/test/gpu/gpu_tests/skia_gold/gpu_skia_gold_session_unittest.py b/content/test/gpu/gpu_tests/skia_gold/gpu_skia_gold_session_unittest.py index b7a4c1f..5b09458 100755 --- a/content/test/gpu/gpu_tests/skia_gold/gpu_skia_gold_session_unittest.py +++ b/content/test/gpu/gpu_tests/skia_gold/gpu_skia_gold_session_unittest.py
@@ -48,10 +48,18 @@ call_args = cmd_mock.call_args[0][0] self.assertIn('diff', call_args) assertArgWith(self, call_args, '--corpus', 'corpus') - assertArgWith(self, call_args, '--instance', 'instance') + # TODO(skbug.com/10610): Remove the -public once we go back to using the + # non-public instance, or add a second test for testing that the correct + # instance is chosen if we decide to support both depending on what the + # user is authenticated for. + assertArgWith(self, call_args, '--instance', 'instance-public') assertArgWith(self, call_args, '--input', 'png_file') assertArgWith(self, call_args, '--test', 'name') - assertArgWith(self, call_args, '--work-dir', self._working_dir) + # TODO(skbug.com/10611): Re-add this assert and remove the check for the + # absence of the directory once we switch back to using the proper working + # directory. + # assertArgWith(self, call_args, '--work-dir', self._working_dir) + self.assertNotIn(self._working_dir, call_args) i = call_args.index('--out-dir') # The output directory should not be a subdirectory of the working # directory.
diff --git a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt index 28f96aa..617ab383 100644 --- a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
@@ -79,6 +79,7 @@ crbug.com/1084367 [ fuchsia no-use-skia-dawn ] Pixel_Video_MP4 [ Skip ] crbug.com/1084367 [ fuchsia no-use-skia-dawn ] Pixel_Video_VP9 [ Skip ] crbug.com/1084367 [ fuchsia no-use-skia-dawn ] Pixel_Video_VP9_DXVA [ Skip ] +crbug.com/1084367 [ fuchsia no-use-skia-dawn ] Pixel_Video_Media_Stream_Incompatible_Stride [ Skip ] # Fuchsia issues crbug.com/1115673 [ fuchsia no-use-skia-dawn ] Pixel_WebGLCopyImage [ Skip ] @@ -363,6 +364,7 @@ crbug.com/1021566 [ use-skia-dawn skia-renderer ] Pixel_Video_MP4_FourColors_Rot_270 [ Skip ] crbug.com/1021566 [ use-skia-dawn skia-renderer ] Pixel_Video_MP4_FourColors_Rot_90 [ Skip ] crbug.com/1021566 [ use-skia-dawn ] Pixel_Video_VP9 [ Skip ] +crbug.com/1021566 [ use-skia-dawn ] Pixel_Video_Media_Stream_Incompatible_Stride [ Skip ] crbug.com/1021566 [ use-skia-dawn ] Pixel_WebGLCopyImage [ Skip ] crbug.com/1021566 [ use-skia-dawn ] Pixel_WebGLGreenTriangle_AA_Alpha [ Skip ] crbug.com/1021566 [ use-skia-dawn ] Pixel_WebGLGreenTriangle_AA_NoAlpha [ Skip ] @@ -387,3 +389,6 @@ # Likely produces a Dawn validation errors that makes rendering skipped. crbug.com/1097735 [ use-skia-dawn ] Pixel_PaintWorkletTransform [ Failure ] + +# Cannot use a file in source directory on host for fake video capture device on Android +crbug.com/1077211 [ android no-use-skia-dawn ] Pixel_Video_Media_Stream_Incompatible_Stride [ Skip ]
diff --git a/content/test/gpu/gpu_tests/test_expectations/trace_test_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/trace_test_expectations.txt index 89230ec..fcabe2f 100644 --- a/content/test/gpu/gpu_tests/test_expectations/trace_test_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/trace_test_expectations.txt
@@ -60,6 +60,7 @@ crbug.com/1096431 [ fuchsia ] TraceTest_Video_MP4_Rounded_Corner [ Skip ] crbug.com/1096431 [ fuchsia ] TraceTest_Video_VP9 [ Skip ] crbug.com/1096431 [ fuchsia ] TraceTest_Video_VP9_DXVA [ Skip ] +crbug.com/1096431 [ fuchsia ] TraceTest_Video_Media_Stream_Incompatible_Stride [ Skip ] # Skip unaccelerated canvas test since we don't use swap chains without GPU compositing. crbug.com/1009860 [ win10 ] SwapChainTraceTest_CanvasUnacceleratedLowLatency2D [ Skip ] @@ -129,3 +130,6 @@ [ fuchsia ] DeviceTraceTest_RepeatedWebGLTo2D_SoftwareCompositing [ Skip ] [ fuchsia ] DeviceTraceTest_Canvas2DTabSwitch_SoftwareCompositing [ Skip ] [ fuchsia ] DeviceTraceTest_WebGLReadPixelsTabSwitch_SoftwareCompositing [ Skip ] + +# Cannot use a file in Chromium checkout for fake video capture device on Android +crbug.com/1077211 [ android ] TraceTest_Video_Media_Stream_Incompatible_Stride [ Skip ]
diff --git a/docs/android_debugging_instructions.md b/docs/android_debugging_instructions.md index 236d253..9430ed5 100644 --- a/docs/android_debugging_instructions.md +++ b/docs/android_debugging_instructions.md
@@ -4,6 +4,11 @@ [TOC] +## Instructions for Google Employees + +See also +[go/clankium/06-debugging-clank](https://goto.google.com/clankium/06-debugging-clank). + ## Launching You can run the app by using one of the wrappers.
diff --git a/docs/clang_sheriffing.md b/docs/clang_sheriffing.md index 124a3dee..1f4f5f3 100644 --- a/docs/clang_sheriffing.md +++ b/docs/clang_sheriffing.md
@@ -24,6 +24,9 @@ quickly noticed and fixed by the original author of a breaking commit, but that is sadly not always the case. +We try to update Clang (roughly) weekly. Time permitting, try to [update the +compiler](updating_clang.md) when bots are green enough. + [TOC] ## Disk out of space
diff --git a/extensions/browser/api/automation_internal/automation_internal_api.cc b/extensions/browser/api/automation_internal/automation_internal_api.cc index e0ae655..066b5a41 100644 --- a/extensions/browser/api/automation_internal/automation_internal_api.cc +++ b/extensions/browser/api/automation_internal/automation_internal_api.cc
@@ -381,8 +381,8 @@ params->opt_args.additional_properties, &hit_test_params)); action->action = ax::mojom::Action::kHitTest; action->target_point = gfx::Point(hit_test_params.x, hit_test_params.y); - action->hit_test_event_to_fire = - ui::ParseEvent(hit_test_params.event_to_fire.c_str()); + action->hit_test_event_to_fire = ui::ParseAXEnum<ax::mojom::Event>( + hit_test_params.event_to_fire.c_str()); if (action->hit_test_event_to_fire == ax::mojom::Event::kNone) return RespondNow(NoArguments()); break;
diff --git a/extensions/renderer/api/automation/automation_internal_custom_bindings.cc b/extensions/renderer/api/automation/automation_internal_custom_bindings.cc index 3b36960..3f6c1897 100644 --- a/extensions/renderer/api/automation/automation_internal_custom_bindings.cc +++ b/extensions/renderer/api/automation/automation_internal_custom_bindings.cc
@@ -483,8 +483,8 @@ ui::AXTreeID tree_id = ui::AXTreeID::FromString(*v8::String::Utf8Value(isolate, args[0])); int node_id = args[1].As<v8::Int32>()->Value(); - ax::mojom::Event event_type = - ui::ParseEvent(*v8::String::Utf8Value(isolate, args[2])); + auto event_type = ui::ParseAXEnum<ax::mojom::Event>( + *v8::String::Utf8Value(isolate, args[2])); AutomationAXTreeWrapper* tree_wrapper = automation_bindings_->GetAutomationAXTreeWrapperFromTreeID(tree_id); @@ -999,8 +999,8 @@ [](v8::Isolate* isolate, v8::ReturnValue<v8::Value> result, ui::AXTree* tree, ui::AXNode* node, const std::string& attribute_name) { - ax::mojom::StringAttribute attribute = - ui::ParseStringAttribute(attribute_name.c_str()); + auto attribute = + ui::ParseAXEnum<ax::mojom::StringAttribute>(attribute_name.c_str()); const char* attr_value; if (attribute == ax::mojom::StringAttribute::kFontFamily || attribute == ax::mojom::StringAttribute::kLanguage) { @@ -1019,8 +1019,8 @@ [](v8::Isolate* isolate, v8::ReturnValue<v8::Value> result, ui::AXTree* tree, ui::AXNode* node, const std::string& attribute_name) { - ax::mojom::BoolAttribute attribute = - ui::ParseBoolAttribute(attribute_name.c_str()); + auto attribute = + ui::ParseAXEnum<ax::mojom::BoolAttribute>(attribute_name.c_str()); bool attr_value; if (!node->data().GetBoolAttribute(attribute, &attr_value)) return; @@ -1032,8 +1032,8 @@ [](v8::Isolate* isolate, v8::ReturnValue<v8::Value> result, ui::AXTree* tree, ui::AXNode* node, const std::string& attribute_name) { - ax::mojom::IntAttribute attribute = - ui::ParseIntAttribute(attribute_name.c_str()); + auto attribute = + ui::ParseAXEnum<ax::mojom::IntAttribute>(attribute_name.c_str()); int attr_value; if (attribute == ax::mojom::IntAttribute::kPosInSet && @@ -1053,8 +1053,8 @@ [](v8::Isolate* isolate, v8::ReturnValue<v8::Value> result, ui::AXTree* tree, ui::AXNode* node, const std::string& attribute_name) { - ax::mojom::IntAttribute attribute = - ui::ParseIntAttribute(attribute_name.c_str()); + auto attribute = + ui::ParseAXEnum<ax::mojom::IntAttribute>(attribute_name.c_str()); std::set<int32_t> ids = tree->GetReverseRelations(attribute, node->id()); v8::Local<v8::Context> context = isolate->GetCurrentContext(); @@ -1073,8 +1073,8 @@ [](v8::Isolate* isolate, v8::ReturnValue<v8::Value> result, ui::AXTree* tree, ui::AXNode* node, const std::string& attribute_name) { - ax::mojom::FloatAttribute attribute = - ui::ParseFloatAttribute(attribute_name.c_str()); + auto attribute = + ui::ParseAXEnum<ax::mojom::FloatAttribute>(attribute_name.c_str()); float attr_value; if (!node->data().GetFloatAttribute(attribute, &attr_value)) @@ -1091,8 +1091,8 @@ [](v8::Isolate* isolate, v8::ReturnValue<v8::Value> result, ui::AXTree* tree, ui::AXNode* node, const std::string& attribute_name) { - ax::mojom::IntListAttribute attribute = - ui::ParseIntListAttribute(attribute_name.c_str()); + auto attribute = ui::ParseAXEnum<ax::mojom::IntListAttribute>( + attribute_name.c_str()); if (!node->data().HasIntListAttribute(attribute)) return; const std::vector<int32_t>& attr_value = @@ -1113,8 +1113,8 @@ [](v8::Isolate* isolate, v8::ReturnValue<v8::Value> result, ui::AXTree* tree, ui::AXNode* node, const std::string& attribute_name) { - ax::mojom::IntListAttribute attribute = - ui::ParseIntListAttribute(attribute_name.c_str()); + auto attribute = ui::ParseAXEnum<ax::mojom::IntListAttribute>( + attribute_name.c_str()); std::set<int32_t> ids = tree->GetReverseRelations(attribute, node->id()); v8::Local<v8::Context> context = isolate->GetCurrentContext(); @@ -1278,8 +1278,8 @@ [](v8::Isolate* isolate, v8::ReturnValue<v8::Value> result, ui::AXTree* tree, ui::AXNode* node, const std::string& attribute_name) { - ax::mojom::StringAttribute attr = - ui::ParseStringAttribute(attribute_name.c_str()); + auto attr = + ui::ParseAXEnum<ax::mojom::StringAttribute>(attribute_name.c_str()); if (attr == ax::mojom::StringAttribute::kNone) { // Set result as empty array. result.Set(v8::Array::New(isolate, 0)); @@ -1383,7 +1383,7 @@ // spin button. const std::string& role_string = node->GetStringAttribute(ax::mojom::StringAttribute::kRole); - ax::mojom::Role role = ui::ParseRole(role_string.c_str()); + auto role = ui::ParseAXEnum<ax::mojom::Role>(role_string.c_str()); if (role == ax::mojom::Role::kSlider || role == ax::mojom::Role::kSpinButton) { standard_actions.push_back(
diff --git a/gpu/command_buffer/service/BUILD.gn b/gpu/command_buffer/service/BUILD.gn index 7bdea11..56cb734 100644 --- a/gpu/command_buffer/service/BUILD.gn +++ b/gpu/command_buffer/service/BUILD.gn
@@ -448,7 +448,7 @@ "texture_owner.h", ] - deps += [ "//media/base/android:android" ] + deps += [ "//base" ] # TODO(cblume): http://crbug.com/911313 # Abstract out the platform specific defines. Right now we need the android @@ -515,8 +515,6 @@ ":gles2", "//base/test:test_support", "//gpu:test_support", - "//media/base:base", - "//media/base/android:android", "//testing/gmock", "//testing/gtest", "//ui/gl",
diff --git a/gpu/command_buffer/service/DEPS b/gpu/command_buffer/service/DEPS index ced2955..ff50b4a7 100644 --- a/gpu/command_buffer/service/DEPS +++ b/gpu/command_buffer/service/DEPS
@@ -10,13 +10,3 @@ "+components/viz/common/resources/resource_format_utils.h", "+components/viz/common/resources/resource_sizes.h", ] - -specific_include_rules = { - "image_reader_gl_owner_unittest\.cc": [ - "+media/base/media_switches.h", - "+media/base/android/media_codec_util.h", - ], - "image_reader_gl_owner\.cc": [ - "+media/base/android/media_codec_util.h", - ], -}
diff --git a/gpu/command_buffer/service/image_reader_gl_owner.cc b/gpu/command_buffer/service/image_reader_gl_owner.cc index bfc7f47..837750ff 100644 --- a/gpu/command_buffer/service/image_reader_gl_owner.cc +++ b/gpu/command_buffer/service/image_reader_gl_owner.cc
@@ -9,6 +9,7 @@ #include <stdint.h> #include "base/android/android_hardware_buffer_compat.h" +#include "base/android/android_image_reader_compat.h" #include "base/android/jni_android.h" #include "base/android/scoped_hardware_buffer_fence_sync.h" #include "base/logging.h" @@ -20,7 +21,6 @@ #include "base/threading/thread_task_runner_handle.h" #include "gpu/command_buffer/service/abstract_texture.h" #include "gpu/ipc/common/android/android_image_reader_utils.h" -#include "media/base/android/media_codec_util.h" #include "ui/gl/android/android_surface_control_compat.h" #include "ui/gl/gl_fence_android_native_fence_sync.h" #include "ui/gl/gl_utils.h" @@ -62,10 +62,11 @@ uint32_t NumRequiredMaxImages(TextureOwner::Mode mode) { if (IsSurfaceControl(mode) || mode == TextureOwner::Mode::kAImageReaderInsecureMultithreaded) { - DCHECK(!media::MediaCodecUtil::LimitAImageReaderMaxSizeToOne()); + DCHECK(!base::android::AndroidImageReader::LimitAImageReaderMaxSizeToOne()); return 3; } - return media::MediaCodecUtil::LimitAImageReaderMaxSizeToOne() ? 1 : 2; + return base::android::AndroidImageReader::LimitAImageReaderMaxSizeToOne() ? 1 + : 2; } } // namespace
diff --git a/gpu/command_buffer/service/image_reader_gl_owner_unittest.cc b/gpu/command_buffer/service/image_reader_gl_owner_unittest.cc index 2f03c9f1..cd675ad 100644 --- a/gpu/command_buffer/service/image_reader_gl_owner_unittest.cc +++ b/gpu/command_buffer/service/image_reader_gl_owner_unittest.cc
@@ -8,11 +8,11 @@ #include <memory> #include <utility> +#include "base/android/android_image_reader_compat.h" #include "base/test/task_environment.h" #include "gpu/command_buffer/service/abstract_texture.h" #include "gpu/command_buffer/service/image_reader_gl_owner.h" #include "gpu/command_buffer/service/mock_abstract_texture.h" -#include "media/base/android/media_codec_util.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/gl/gl_bindings.h" #include "ui/gl/gl_context_egl.h" @@ -149,7 +149,9 @@ return; EXPECT_EQ(static_cast<ImageReaderGLOwner*>(image_reader_.get()) ->max_images_for_testing(), - media::MediaCodecUtil::LimitAImageReaderMaxSizeToOne() ? 1 : 2); + base::android::AndroidImageReader::LimitAImageReaderMaxSizeToOne() + ? 1 + : 2); } class ImageReaderGLOwnerSecureSurfaceControlTest
diff --git a/infra/config/generated/cr-buildbucket.cfg b/infra/config/generated/cr-buildbucket.cfg index 19932fb..28a14aa 100644 --- a/infra/config/generated/cr-buildbucket.cfg +++ b/infra/config/generated/cr-buildbucket.cfg
@@ -11295,7 +11295,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.fyi\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.fyi\",\"recipe\":\"chromium\"}" execution_timeout_secs: 36000 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -11576,7 +11576,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.fyi\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.fyi\",\"recipe\":\"chromium\"}" execution_timeout_secs: 36000 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
diff --git a/infra/config/lib/ci.star b/infra/config/lib/ci.star index d8d99a7..78dbdd4 100644 --- a/infra/config/lib/ci.star +++ b/infra/config/lib/ci.star
@@ -113,6 +113,7 @@ swarming_tags = ["vpython:native-python-wrapper"], triggered_by = [milestone_vars.ci_poller], goma_use_luci_auth = True, + # TODO(crbug.com/1129723): set default goma_backend here. ) default_values.update(kwargs) for k, v in default_values.items():
diff --git a/infra/config/subprojects/chromium/ci.star b/infra/config/subprojects/chromium/ci.star index b89eaa4..6fde551 100644 --- a/infra/config/subprojects/chromium/ci.star +++ b/infra/config/subprojects/chromium/ci.star
@@ -2526,7 +2526,7 @@ category = "linux", ), experimental = True, - goma_backend = None, + goma_backend = goma.backend.RBE_PROD, ) # This is launching & collecting entirely isolated tests. @@ -2537,7 +2537,7 @@ category = "mac", short_name = "beta", ), - goma_backend = None, + goma_backend = goma.backend.RBE_PROD, main_console_view = None, triggered_by = ["ci/Mac Builder"], )
diff --git a/ios/chrome/app/strings/resources/ios_strings_af.xtb b/ios/chrome/app/strings/resources/ios_strings_af.xtb index 1aa465a..2714e72 100644 --- a/ios/chrome/app/strings/resources/ios_strings_af.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_af.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Veiligblaai</translation> <translation id="4281844954008187215">Diensbepalings</translation> <translation id="430793432425771671">Sinkroniseer alles</translation> +<translation id="4309403553630140242">Dubbeltik vir meer inligting</translation> <translation id="430967081421617822">Alle tye</translation> <translation id="4334428914252001502">1 ongeleesde artikel.</translation> <translation id="4338650699862464074">Stuur URL'e van bladsye wat jy besoek na Google toe.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Deel …</translation> <translation id="7192050974311852563">Begin aanteken</translation> <translation id="7203585745079012652">Praat antwoorde terug</translation> +<translation id="7207383424303353046">Nuut: Maak werwe outomaties in Chrome oop deur dit jou verstekblaaierprogram te maak. <ph name="BEGIN_LINK" />Maak instellings oop<ph name="END_LINK" /></translation> <translation id="721597782417389033">Ongeldige kaartbynaam</translation> <translation id="7265758999917665941">Nooit vir hierdie werf nie</translation> <translation id="7272437679830969316">Kan nie jou identiteit verifieer nie. Wagwoord is nie gekopieer nie.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Aflaai is klaar</translation> <translation id="8073872304774253879">Maak soektogte en blaai-ervaring beter</translation> <translation id="8076014560081431679">Gestoorde werfinstellings sal nie uitgevee word nie en sal dalk jou blaaigewoontes weerspieël. <ph name="BEGIN_LINK" />Kom meer te wete<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Hierdie instelling word bestuur; dubbeltik vir meer inligting</translation> <translation id="8105368624971345109">Skakel af</translation> <translation id="8114753159095730575">Lêer kan afgelaai word. Opsies is naby die onderkant van die skerm beskikbaar.</translation> <translation id="8131740175452115882">Bevestig</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb index 26b15c04..d57e778 100644 --- a/ios/chrome/app/strings/resources/ios_strings_am.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">የጥንቃቄ አሰሳ</translation> <translation id="4281844954008187215">የአግልግሎት ውል</translation> <translation id="430793432425771671">ሁሉንም ያመሳስሉ</translation> +<translation id="4309403553630140242">ለተጨማሪ መረጃ ሁለቴ መታ ያድርጉ</translation> <translation id="430967081421617822">የምንጊዜም</translation> <translation id="4334428914252001502">1 ያልተነበበ ጽሑፍ።</translation> <translation id="4338650699862464074">የሚጎበኟቸው የገጾች ዩአርኤሎችን ወደ Google ይላኩ።</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">አጋራ...</translation> <translation id="7192050974311852563">መግባት ይጀምሩ</translation> <translation id="7203585745079012652">መልሶችን ተመልሰህ ተናገር</translation> +<translation id="7207383424303353046">አዲስ፦ Chrome የእርስዎን ነባሪ የአሳሽ መተግበሪያ በማድረግ ጣቢያዎችን በራስ-ሰር በChrome ውስጥ ይክፈቱ። <ph name="BEGIN_LINK" />ቅንብሮችን ይክፈቱ<ph name="END_LINK" /></translation> <translation id="721597782417389033">ልክ ያልሆነ ቅጽል ስም</translation> <translation id="7265758999917665941">ለዚህ ጣቢያ በጭራሽ</translation> <translation id="7272437679830969316">የእርስዎን ማንነት ማረጋገጥ አልተቻለም። የይለፍ ቃል አልተቀዳም።</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">ማውረድ ተጠናቅቋል</translation> <translation id="8073872304774253879">ፍለጋዎችን እና አሰሳን የተሻለ ያድርጉ</translation> <translation id="8076014560081431679">የተቀመጡ ጣቢያ ቅንብሮች አይሰረዙም፣ እና የእርስዎን የአሰሳ ልማዶች ሊያንጸባርቁ ይችሉ ይሆናል። <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">ይህ ቅንብር የሚተዳደር ነው፣ ለተጨማሪ መረጃ ሁለቴ መታ ያድርጉ</translation> <translation id="8105368624971345109">አጥፋ</translation> <translation id="8114753159095730575">ፋይል ለመውረድ ይገኛል። አማራጮች ከማያ ገጹ ግርጌ አጠገብ ይገኛሉ።</translation> <translation id="8131740175452115882">አረጋግጥ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb index df3ade86..1bccaa3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">مشاركة...</translation> <translation id="7192050974311852563">بدء التسجيل</translation> <translation id="7203585745079012652">النطق بالإجابات</translation> +<translation id="7207383424303353046">جديد: يمكنك فتح المواقع الإلكترونية في Chrome تلقائيًا من خلال جعله تطبيق المتصفِّح التلقائي. <ph name="BEGIN_LINK" />فتح الإعدادات<ph name="END_LINK" /></translation> <translation id="721597782417389033">لقب البطاقة غير صالح</translation> <translation id="7265758999917665941">عدم حفظ كلمة المرور لهذا الموقع الإلكتروني</translation> <translation id="7272437679830969316">تعذَّر التحقق من هويتك. لم يتم نسخ كلمة المرور.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_as.xtb b/ios/chrome/app/strings/resources/ios_strings_as.xtb index afa7412..3cb4e4bd 100644 --- a/ios/chrome/app/strings/resources/ios_strings_as.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_as.xtb
@@ -97,6 +97,7 @@ <translation id="1965935827552890526">Chromeৰ খোলা থকা অন্য ৱিণ্ড’ত আপুনি কি কৰি আছিল সেয়া সমাপ্ত কৰক।</translation> <translation id="1974060860693918893">উন্নত</translation> <translation id="1989112275319619282">ব্ৰাউজ কৰক</translation> +<translation id="1992734845128748707">ডিফ’ল্ট ব্ৰাউজাৰ সলনি কৰক…</translation> <translation id="2015722694326466240">পাছৱৰ্ড চাবলৈ আপুনি প্ৰথমে এই ডিভাইচটোত এটা পাছক‘ড ছেট কৰিব লাগিব।</translation> <translation id="2073572773299281212"><ph name="DAYS" />দিনৰ পূৰ্বে সক্ৰিয় আছিল</translation> <translation id="2074131957428911366">আপুনি কি ছিংক কৰিব লাগে সেয়া <ph name="BEGIN_LINK" />ছেটিংসমূহ<ph name="END_LINK" />-লৈ গৈ যেতিয়াই মন যায় তেতিয়াই সলনি কৰিব পাৰে।</translation> @@ -559,6 +560,7 @@ <translation id="7189598951263744875">শ্বেয়াৰ কৰক...</translation> <translation id="7192050974311852563">ল’গ কৰা প্ৰক্ৰিয়া আৰম্ভ কৰক</translation> <translation id="7203585745079012652">সঁহাৰিটো কৈ দিয়ক</translation> +<translation id="7207383424303353046">নতুন: Chromeক আপোনাৰ ডিফ’ল্ট ব্ৰাউজাৰ এপ্ বনাই ছাইটসমূহ স্বয়ংক্ৰিয়ভাৱে তাত খোলক। <ph name="BEGIN_LINK" />ছেটিংসমূহ খোলক<ph name="END_LINK" /></translation> <translation id="721597782417389033">কার্ডৰ উপনাম অমান্য</translation> <translation id="7265758999917665941">এই ছাইটটোৰ বাবে কেতিয়াও নহয়</translation> <translation id="7272437679830969316">আপোনাৰ পৰিচয় সত্যাপন কৰিব পৰা নগ’ল। পাছৱৰ্ড প্ৰতিলিপি কৰা নহ’ল।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_az.xtb b/ios/chrome/app/strings/resources/ios_strings_az.xtb index 20448eb..cb091e7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_az.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_az.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">Paylaşın...</translation> <translation id="7192050974311852563">Qeydiyyata Başlayın</translation> <translation id="7203585745079012652">Geri Cavab</translation> +<translation id="7207383424303353046">Yeni: Defolt Brauzer tətbiqiniz etməklə, saytları Chrome'da avtomatik açın. <ph name="BEGIN_LINK" />Ayarları açın<ph name="END_LINK" /></translation> <translation id="721597782417389033">Yanlış Kart Ləqəbi</translation> <translation id="7265758999917665941">Bu sayt üçün heç vaxt yadda saxlamayın</translation> <translation id="7272437679830969316">Kimliyinizi doğrulamaq mümkün deyil. Parol kopyalanmayıb.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_be.xtb b/ios/chrome/app/strings/resources/ios_strings_be.xtb index ac63af2..c2e3fb1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_be.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_be.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">Абагуліць...</translation> <translation id="7192050974311852563">Пачаць вядзенне журнала</translation> <translation id="7203585745079012652">Агучваць атрыманыя адказы</translation> +<translation id="7207383424303353046">Навінка. Зрабіце Chrome стандартным браўзерам, каб сайты адкрываліся ў ім аўтаматычна. <ph name="BEGIN_LINK" />Адкрыць Налады<ph name="END_LINK" /></translation> <translation id="721597782417389033">Несапраўдны псеўданім карткі</translation> <translation id="7265758999917665941">Ніколі для гэтага сайта</translation> <translation id="7272437679830969316">Не ўдалося спраўдзіць вашу асобу. Пароль не скапіраваны.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb index de78e31..3f1b5e8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Безопасно сърфиране</translation> <translation id="4281844954008187215">Условия за ползване</translation> <translation id="430793432425771671">Синхронизиране на всичко</translation> +<translation id="4309403553630140242">Докоснете два пъти за повече информация</translation> <translation id="430967081421617822">За цялото време</translation> <translation id="4334428914252001502">1 непрочетена статия.</translation> <translation id="4338650699862464074">Изпраща до Google URL адресите на посещаваните от вас страници.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Споделяне...</translation> <translation id="7192050974311852563">Стартиране на регистрирането</translation> <translation id="7203585745079012652">Изговаряне на отговорите</translation> +<translation id="7207383424303353046">Ново: Отваряйте сайтовете автоматично в Chrome, като го направите стандартното си приложение за браузър. <ph name="BEGIN_LINK" />Отворете настройките<ph name="END_LINK" /></translation> <translation id="721597782417389033">Псевдонимът на картата е невалиден</translation> <translation id="7265758999917665941">Никога за този сайт</translation> <translation id="7272437679830969316">Паролата не бе копирана поради неуспешно удостоверяване.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Изтеглянето завърши</translation> <translation id="8073872304774253879">Подобряване на търсенията и сърфирането</translation> <translation id="8076014560081431679">Запазените настройки за сайтове няма да бъдат изтрити и може да отразяват навиците ви при сърфиране. <ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Тази настройка се управлява. За повече информация докоснете два пъти</translation> <translation id="8105368624971345109">Изключване</translation> <translation id="8114753159095730575">Наличен е файл за изтегляне. Съответните опции са достъпни в долната част на екрана.</translation> <translation id="8131740175452115882">Потвърждаване</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_strings_bn.xtb index 89ba9ba69..b7efbdd1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
@@ -562,6 +562,7 @@ <translation id="7189598951263744875">শেয়ার করুন...</translation> <translation id="7192050974311852563">লগ করা শুরু করুন</translation> <translation id="7203585745079012652">আবার উত্তরগুলি বলে</translation> +<translation id="7207383424303353046">নতুন: Chrome-কে আপনার ডিফল্ট ব্রাউজার অ্যাপ হিসেবে সেট করে এতে অটোমেটিক সাইট খুলুন। <ph name="BEGIN_LINK" />সেটিংস খুলুন<ph name="END_LINK" /></translation> <translation id="721597782417389033">কার্ডের বিশেষ নামটি সঠিক নয়</translation> <translation id="7265758999917665941">এই সাইটের জন্য কখনই নয়</translation> <translation id="7272437679830969316">আপনার পরিচয় যাচাই করা যাবে না। পাসওয়ার্ড কপি করা হয়নি।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_strings_bs.xtb index dce96d7..31fc0e0 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">Dijeli...</translation> <translation id="7192050974311852563">Pokreni zapisivanje</translation> <translation id="7203585745079012652">Izgovori odgovore</translation> +<translation id="7207383424303353046">Novo: Postavite Chrome kao zadanu aplikaciju preglednika i automatski u njemu otvarajte web lokacije. <ph name="BEGIN_LINK" />Otvori Postavke<ph name="END_LINK" /></translation> <translation id="721597782417389033">Nevažeći nadimak kartice</translation> <translation id="7265758999917665941">Nikada za ovu web lokaciju</translation> <translation id="7272437679830969316">Nije moguće potvrditi vaš identitet. Lozinka nije kopirana.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb index a3c20c5..dcb9b48 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Navegació segura</translation> <translation id="4281844954008187215">Condicions del servei</translation> <translation id="430793432425771671">Sincronitza-ho tot</translation> +<translation id="4309403553630140242">Fes doble toc per obtenir més informació</translation> <translation id="430967081421617822">Tot el període</translation> <translation id="4334428914252001502">Un article no llegit.</translation> <translation id="4338650699862464074">Envia a Google els URL de les pàgines que visites.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Comparteix...</translation> <translation id="7192050974311852563">Inicia el registre</translation> <translation id="7203585745079012652">Pronuncia les respostes</translation> +<translation id="7207383424303353046">Novetat: obre llocs web a Chrome automàticament establint-lo com a aplicació de navegador predeterminada. <ph name="BEGIN_LINK" />Obre Configuració<ph name="END_LINK" /></translation> <translation id="721597782417389033">L'àlies de la targeta no és vàlid</translation> <translation id="7265758999917665941">Mai per a aquest lloc web</translation> <translation id="7272437679830969316">No es pot verificar la teva identitat. La contrasenya no s'ha copiat.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">La baixada ha finalitzat</translation> <translation id="8073872304774253879">Millora les cerques i la navegació</translation> <translation id="8076014560081431679">La configuració desada del lloc no se suprimirà i és possible que reflecteixi els vostres hàbits de navegació. <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Aquesta configuració està gestionada. Fes doble toc per obtenir més informació.</translation> <translation id="8105368624971345109">Desactiva</translation> <translation id="8114753159095730575">La baixada de fitxers està disponible. Opcions disponibles a la part inferior de la pantalla.</translation> <translation id="8131740175452115882">Confirma</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb index 05f6ed0c8..78a2336 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Bezpečné prohlížení</translation> <translation id="4281844954008187215">Smluvní podmínky</translation> <translation id="430793432425771671">Synchronizovat vše</translation> +<translation id="4309403553630140242">Další informace zobrazíte dvojitým klepnutím</translation> <translation id="430967081421617822">Od počátku věků</translation> <translation id="4334428914252001502">1 nepřečtený článek.</translation> <translation id="4338650699862464074">Odesílá do Googlu adresy URL navštívených stránek.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Sdílet...</translation> <translation id="7192050974311852563">Začít protokolovat</translation> <translation id="7203585745079012652">Vyslovovat odpovědi</translation> +<translation id="7207383424303353046">Novinka: Nastavte si Chrome jako výchozí prohlížeč a otevírejte weby automaticky v Chromu. <ph name="BEGIN_LINK" />Otevřít nastavení<ph name="END_LINK" /></translation> <translation id="721597782417389033">Neplatná přezdívka karty</translation> <translation id="7265758999917665941">Pro tento web nikdy</translation> <translation id="7272437679830969316">Vaši totožnost nelze ověřit. Heslo nebylo zkopírováno.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Stahování bylo dokončeno</translation> <translation id="8073872304774253879">Vylepšit vyhledávání a procházení</translation> <translation id="8076014560081431679">Uložená nastavení webů nebudou smazána a mohou vypovídat o vašich zvycích při prohlížení. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Toto nastavení je spravováno, dvojitým klepnutím zobrazíte další informace</translation> <translation id="8105368624971345109">Vypnout</translation> <translation id="8114753159095730575">Je k dispozici soubor ke stažení. Možnosti jsou k dispozici ve spodní části obrazovky.</translation> <translation id="8131740175452115882">Potvrdit</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb index 6044e77..7c0b6b3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">Del...</translation> <translation id="7192050974311852563">Start logføring</translation> <translation id="7203585745079012652">Giv talte svar</translation> +<translation id="7207383424303353046">Nyt! Åbn automatisk websites i Chrome ved at gøre den til din standardbrowser. <ph name="BEGIN_LINK" />Åbn indstillinger<ph name="END_LINK" /></translation> <translation id="721597782417389033">Kortets kaldenavn er ugyldigt</translation> <translation id="7265758999917665941">Aldrig for dette website</translation> <translation id="7272437679830969316">Din identitet kunne ikke bekræftes. Adgangskoden blev ikke kopieret.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb index db12f98..908f565 100644 --- a/ios/chrome/app/strings/resources/ios_strings_de.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -97,6 +97,7 @@ <translation id="1965935827552890526">Sie können zu Ihrem offenem Chrome-Fenster zurückkehren, um Ihre vorherige Aktion abzuschließen.</translation> <translation id="1974060860693918893">Erweitert</translation> <translation id="1989112275319619282">Durchsuchen</translation> +<translation id="1992734845128748707">Standardbrowser ändern…</translation> <translation id="2015722694326466240">Um die Passwörter zu sehen, müssen Sie zuerst einen Passcode auf Ihrem Gerät einrichten.</translation> <translation id="2073572773299281212">Vor <ph name="DAYS" /> Tagen aktiv</translation> <translation id="2074131957428911366">Sie können in den <ph name="BEGIN_LINK" />Einstellungen<ph name="END_LINK" /> auswählen, was Sie synchronisieren möchten.</translation> @@ -560,6 +561,7 @@ <translation id="7189598951263744875">Teilen...</translation> <translation id="7192050974311852563">Protokollierung starten</translation> <translation id="7203585745079012652">Gesprochene Antworten</translation> +<translation id="7207383424303353046">Neu: Websites werden automatisch in Chrome geöffnet, wenn Sie es als Standard-Browser-App festlegen. <ph name="BEGIN_LINK" />Zu den Einstellungen<ph name="END_LINK" /></translation> <translation id="721597782417389033">Ungültiger Kartenalias</translation> <translation id="7265758999917665941">Für diese Website niemals</translation> <translation id="7272437679830969316">Ihre Identität konnte nicht bestätigt werden. Das Passwort wurde nicht kopiert.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb index b81242d..7965e500 100644 --- a/ios/chrome/app/strings/resources/ios_strings_el.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Ασφαλής περιήγηση</translation> <translation id="4281844954008187215">Όροι Παροχής Υπηρεσιών</translation> <translation id="430793432425771671">Συγχρονισμός όλων</translation> +<translation id="4309403553630140242">Πατήστε δύο φορές για περισσότερες πληροφορίες.</translation> <translation id="430967081421617822">Από την αρχή</translation> <translation id="4334428914252001502">1 μη αναγνωσμένο άρθρο.</translation> <translation id="4338650699862464074">Αποστέλλει στην Google URL των σελίδων που επισκέπτεστε.</translation> @@ -562,6 +563,7 @@ <translation id="7189598951263744875">Κοινοποίηση…</translation> <translation id="7192050974311852563">Έναρξη καταγραφής</translation> <translation id="7203585745079012652">Εκφώνηση απαντήσεων</translation> +<translation id="7207383424303353046">Νέο: Ανοίξτε ιστοτόπους αυτόματα στο Chrome, ορίζοντάς το ως προεπιλεγμένη εφαρμογή προγράμματος περιήγησης. <ph name="BEGIN_LINK" />Άνοιγμα Ρυθμίσεων<ph name="END_LINK" /></translation> <translation id="721597782417389033">Μη έγκυρο ψευδώνυμο κάρτας</translation> <translation id="7265758999917665941">Ποτέ για αυτόν τον ιστότοπο</translation> <translation id="7272437679830969316">Δεν είναι δυνατή η επαλήθευση της ταυτότητας σας. Ο κωδικός πρόσβασης δεν αντιγράφηκε.</translation> @@ -639,6 +641,7 @@ <translation id="8073670137947914548">Η λήψη ολοκληρώθηκε</translation> <translation id="8073872304774253879">Βελτιώστε τις αναζητήσεις και την περιήγηση</translation> <translation id="8076014560081431679">Οι αποθηκευμένες ρυθμίσεις ιστότοπου δεν θα διαγραφούν και ενδέχεται να υποδεικνύουν τις συνήθειες περιήγησής σας. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Αυτή η ρύθμιση είναι διαχειριζόμενη. Πατήστε δύο φορές για περισσότερες πληροφορίες.</translation> <translation id="8105368624971345109">Απενεργοποίηση</translation> <translation id="8114753159095730575">Η λήψη του αρχείου είναι διαθέσιμη. Οι διαθέσιμες επιλογές βρίσκονται κοντά στο κάτω μέρος της οθόνης.</translation> <translation id="8131740175452115882">Επιβεβαίωση</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb index bba7696..57eaf9a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Safe Browsing</translation> <translation id="4281844954008187215">Terms of Service</translation> <translation id="430793432425771671">Sync Everything</translation> +<translation id="4309403553630140242">Double-tap for more information</translation> <translation id="430967081421617822">All time</translation> <translation id="4334428914252001502">One unread article.</translation> <translation id="4338650699862464074">Sends URLs of pages that you visit to Google.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Share...</translation> <translation id="7192050974311852563">Start logging</translation> <translation id="7203585745079012652">Speak Answers Back</translation> +<translation id="7207383424303353046">New: Open sites in Chrome automatically by making it your default browser app. <ph name="BEGIN_LINK" />Open settings<ph name="END_LINK" /></translation> <translation id="721597782417389033">Invalid card nickname</translation> <translation id="7265758999917665941">Never for this site</translation> <translation id="7272437679830969316">Can't verify your identity. Password not copied.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Download finished</translation> <translation id="8073872304774253879">Make searches and browsing better</translation> <translation id="8076014560081431679">Saved site settings will not be deleted and may reflect your browsing habits. <ph name="BEGIN_LINK" />Find out more<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">This setting is managed; double-tap for more information</translation> <translation id="8105368624971345109">Turn Off</translation> <translation id="8114753159095730575">File download is available. Options available near bottom of screen.</translation> <translation id="8131740175452115882">Confirm</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb index 1ca10f71..e6686b4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Navegación segura</translation> <translation id="4281844954008187215">Condiciones del Servicio</translation> <translation id="430793432425771671">Sincronizar todo</translation> +<translation id="4309403553630140242">Presiona dos veces para obtener más información</translation> <translation id="430967081421617822">Todo el tiempo</translation> <translation id="4334428914252001502">1 artículo sin leer.</translation> <translation id="4338650699862464074">Envía a Google las URL de las páginas que visitas.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Compartir...</translation> <translation id="7192050974311852563">Iniciar registro</translation> <translation id="7203585745079012652">Decir las respuestas</translation> +<translation id="7207383424303353046">Nueva función: Para que los sitios se abran de forma automática en la app de Chrome, elígela como predeterminada. <ph name="BEGIN_LINK" />Abrir Configuración<ph name="END_LINK" /></translation> <translation id="721597782417389033">El sobrenombre de la tarjeta no es válido</translation> <translation id="7265758999917665941">Nunca para este sitio</translation> <translation id="7272437679830969316">No se puede verificar tu identidad. La contraseña no se copió.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Descarga completa</translation> <translation id="8073872304774253879">Mejorar las búsquedas y la navegación</translation> <translation id="8076014560081431679">Las opciones de configuración de sitios guardadas no se borrarán y es posible que reflejen tus hábitos de navegación. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Esta configuración está administrada; presiona dos veces para obtener más información</translation> <translation id="8105368624971345109">Desactivar</translation> <translation id="8114753159095730575">El archivo ya se puede descargar. Las opciones disponibles se muestran junto a la parte inferior de la pantalla.</translation> <translation id="8131740175452115882">Confirmar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb index 38ac085..57a88b3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Navegación Segura</translation> <translation id="4281844954008187215">Términos del Servicio</translation> <translation id="430793432425771671">Sincronizar todo</translation> +<translation id="4309403553630140242">Toca dos veces para consultar más información</translation> <translation id="430967081421617822">Desde siempre</translation> <translation id="4334428914252001502">1 artículo no leído.</translation> <translation id="4338650699862464074">Envía las URL de las páginas que visitas a Google.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Compartir...</translation> <translation id="7192050974311852563">Iniciar registro</translation> <translation id="7203585745079012652">Decir las respuestas</translation> +<translation id="7207383424303353046">Novedad: Abre sitios web en Chrome automáticamente configurándolo como tu aplicación de navegador predeterminada. <ph name="BEGIN_LINK" />Abrir Configuración<ph name="END_LINK" /></translation> <translation id="721597782417389033">Nombre de la tarjeta no válido</translation> <translation id="7265758999917665941">Jamás para este sitio web</translation> <translation id="7272437679830969316">No se puede verificar tu identidad. No se ha copiado la contraseña.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Descarga finalizada</translation> <translation id="8073872304774253879">Mejorar las búsquedas y la navegación</translation> <translation id="8076014560081431679">No se eliminará la configuración guardada de los sitios web, lo cual puede reflejar tus hábitos de navegación. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Este ajuste está gestionado. Toca dos veces para obtener más información.</translation> <translation id="8105368624971345109">Desactivar</translation> <translation id="8114753159095730575">La descarga de archivos está disponible. Hay opciones disponibles en la parte inferior de la pantalla.</translation> <translation id="8131740175452115882">Confirmar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb index 5cc13c7f..9fa451f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_et.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">Jaga ...</translation> <translation id="7192050974311852563">Alusta logimist</translation> <translation id="7203585745079012652">Vastuste esitamine</translation> +<translation id="7207383424303353046">Uus: avage saidid automaatselt Chrome'is, määrates selle vaikebrauseriks. <ph name="BEGIN_LINK" />Ava seaded<ph name="END_LINK" /></translation> <translation id="721597782417389033">Kaardi sobimatu hüüdnimi</translation> <translation id="7265758999917665941">Selle saidi puhul mitte kunagi</translation> <translation id="7272437679830969316">Teie isikut ei õnnestu tuvastada. Parooli ei kopeeritud.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_strings_eu.xtb index 9c34743..63de4587e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_eu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">Partekatu…</translation> <translation id="7192050974311852563">Hasi erregistratzen</translation> <translation id="7203585745079012652">Erantzun ahots bidez</translation> +<translation id="7207383424303353046">Berria: ezarri Chrome arakatzaile lehenetsi gisa eta ireki webguneak bertan automatikoki. <ph name="BEGIN_LINK" />Ireki ezarpenak<ph name="END_LINK" /></translation> <translation id="721597782417389033">Txartelaren goitizenak ez du balio</translation> <translation id="7265758999917665941">Inoiz ez webgune honetan</translation> <translation id="7272437679830969316">Ezin da egiaztatu identitatea. Ez da kopiatu pasahitza.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb index 9753f62..f2e6deb 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">مرور ایمن</translation> <translation id="4281844954008187215">شرایط استفاده از سرویس</translation> <translation id="430793432425771671">همگامسازی همه چیز</translation> +<translation id="4309403553630140242">برای اطلاعات بیشتر دو ضربه بزنید</translation> <translation id="430967081421617822">از ابتدا تا الآن</translation> <translation id="4334428914252001502">۱ مقاله خواندهنشده.</translation> <translation id="4338650699862464074">نشانی وب صفحههایی را که بازدید میکنید برای Google ارسال میکند.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">در حال اشتراکگذاری...</translation> <translation id="7192050974311852563">شروع گزارشگیری</translation> <translation id="7203585745079012652">پاسخ گفتاری</translation> +<translation id="7207383424303353046">جدید: Chrome را بهعنوان برنامه مرورگر پیشفرض تنظیم کنید تا سایتها بهطور خودکار در آن باز شوند. <ph name="BEGIN_LINK" />باز کردن تنظیمات<ph name="END_LINK" /></translation> <translation id="721597782417389033">نام مستعار کارت نامعتبر است</translation> <translation id="7265758999917665941">هرگز برای این سایت</translation> <translation id="7272437679830969316">نمیتوانیم هویتتان را به تأیید برسانیم. گذرواژه کپی نشد.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">بارگیری به پایان رسید</translation> <translation id="8073872304774253879">بهبود جستجوها و مرور</translation> <translation id="8076014560081431679">تنظیمات ذخیرهشده سایت حذف نمیشوند و احتمالاً عادات مرور شما را نشان میدهند. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">این تنظیم مدیریت میشود، برای اطلاعات بیشتر دو ضربه بزنید</translation> <translation id="8105368624971345109">خاموش کردن</translation> <translation id="8114753159095730575">بارگیری فایل دردسترس است. گزینهها نزدیک انتهای صفحه دردسترس است.</translation> <translation id="8131740175452115882">تأیید</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb index e2856b6..7af78bfa 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">Jaa...</translation> <translation id="7192050974311852563">Aloita kirjaus</translation> <translation id="7203585745079012652">Puhu vastaukset</translation> +<translation id="7207383424303353046">Uutta: Avaa sivustot Chromessa automaattisesti tekemällä siitä oletusselainsovelluksesi. <ph name="BEGIN_LINK" />Avaa Asetukset<ph name="END_LINK" /></translation> <translation id="721597782417389033">Virheellinen kortin lempinimi</translation> <translation id="7265758999917665941">Ei koskaan tälle sivustolle</translation> <translation id="7272437679830969316">Henkilöllisyytesi vahvistaminen ei onnistunut. Salasanaa ei kopioitu.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb index 4ca069ce..0c5eb2c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">Ibahagi...</translation> <translation id="7192050974311852563">Simulan ang Pag-log</translation> <translation id="7203585745079012652">Bigkasin ang Mga Sagot</translation> +<translation id="7207383424303353046">Bago: Awtomatikong buksan ang mga site sa Chrome sa pamamagitan ng paggawa ritong Default na Browser App mo. <ph name="BEGIN_LINK" />Buksan ang Mga Setting<ph name="END_LINK" /></translation> <translation id="721597782417389033">Invalid ang Nickname ng Card</translation> <translation id="7265758999917665941">Hindi Kailanman Para sa Site na Ito</translation> <translation id="7272437679830969316">Hindi ma-verify ang iyong pagkakakilanlan. Hindi nakopya ang password.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb index fd4da7f2..b59d437 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Navigation sécurisée</translation> <translation id="4281844954008187215">Conditions d'utilisation</translation> <translation id="430793432425771671">Tout synchroniser</translation> +<translation id="4309403553630140242">Touchez l'écran deux fois pour en savoir plus.</translation> <translation id="430967081421617822">Toujours</translation> <translation id="4334428914252001502">1 article non lu.</translation> <translation id="4338650699862464074">Envoie les URL des pages que vous consultez à Google.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Partager…</translation> <translation id="7192050974311852563">Commencer la journalisation</translation> <translation id="7203585745079012652">Réponses vocales</translation> +<translation id="7207383424303353046">Nouveau : Ouvrez automatiquement les sites dans Chrome en le définissant comme application de navigation par défaut.<ph name="BEGIN_LINK" />Accéder aux paramètres<ph name="END_LINK" /></translation> <translation id="721597782417389033">Pseudo de carte incorrect</translation> <translation id="7265758999917665941">Jamais pour ce site</translation> <translation id="7272437679830969316">Impossible de vérifier votre identité. Le mot de passe n'a pas été copié.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Téléchargement terminé</translation> <translation id="8073872304774253879">Améliorer les recherches et de la navigation</translation> <translation id="8076014560081431679">Les paramètres de site sauvegardés ne seront pas supprimés et peuvent donner des indications sur vos habitudes de navigation. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Ce paramètre est géré; touchez deux fois pour en savoir plus</translation> <translation id="8105368624971345109">Désactiver</translation> <translation id="8114753159095730575">Le téléchargement du fichier est disponible. Options présentées vers le bas de l’écran.</translation> <translation id="8131740175452115882">Confirmer</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb index a8d833f0..baf41d2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Navigation sécurisée</translation> <translation id="4281844954008187215">Conditions d'utilisation</translation> <translation id="430793432425771671">Tout synchroniser</translation> +<translation id="4309403553630140242">Appuyez deux fois pour obtenir plus d'informations</translation> <translation id="430967081421617822">Toutes les données</translation> <translation id="4334428914252001502">1 article non lu.</translation> <translation id="4338650699862464074">Envoie à Google les URL des pages que vous consultez.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Partager…</translation> <translation id="7192050974311852563">Démarrer la journalisation</translation> <translation id="7203585745079012652">Énoncer les réponses</translation> +<translation id="7207383424303353046">Nouveau : Ouvrez automatiquement les sites dans Chrome en le définissant comme appli de navigation par défaut. <ph name="BEGIN_LINK" />Accéder aux paramètres<ph name="END_LINK" /></translation> <translation id="721597782417389033">Pseudo incorrect associé à la carte</translation> <translation id="7265758999917665941">Jamais pour ce site</translation> <translation id="7272437679830969316">Impossible de confirmer votre identité. Mot de passe non copié.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Téléchargement terminé</translation> <translation id="8073872304774253879">Améliorer les recherches et la navigation</translation> <translation id="8076014560081431679">Les paramètres de site enregistrés ne seront pas supprimés et peuvent donner des indications sur vos habitudes de navigation. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Il s'agit d'un paramètre géré, appuyez deux fois pour plus d'informations</translation> <translation id="8105368624971345109">Désactiver</translation> <translation id="8114753159095730575">Vous pouvez télécharger des fichiers. Différentes options sont disponibles au bas de l'écran.</translation> <translation id="8131740175452115882">Confirmer</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_strings_gl.xtb index 29c4338..40bd60c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gl.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">Compartir...</translation> <translation id="7192050974311852563">Iniciar rexistro</translation> <translation id="7203585745079012652">Dicir as respostas</translation> +<translation id="7207383424303353046">Novidade: Abre sitios en Chrome automaticamente configurándoo como o teu navegador predeterminado. <ph name="BEGIN_LINK" />Abrir Configuración<ph name="END_LINK" /></translation> <translation id="721597782417389033">O alcume da tarxeta non é válido</translation> <translation id="7265758999917665941">Nunca neste sitio</translation> <translation id="7272437679830969316">Non se pode verificar a túa identidade, polo que non se copiou o contrasinal.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb index d5bb470..9499987 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">શેર કરો...</translation> <translation id="7192050974311852563">લૉગિંગ શરૂ કરો</translation> <translation id="7203585745079012652">જવાબો પાછા બોલો</translation> +<translation id="7207383424303353046">નવું: Chromeને તમારી ડિફૉલ્ટ બ્રાઉઝર ઍપ બનાવીને સાઇટને તેમાં ઑટોમૅટિક રીતે ખોલો. <ph name="BEGIN_LINK" />સેટિંગ ખોલો<ph name="END_LINK" /></translation> <translation id="721597782417389033">કાર્ડનું અમાન્ય ઉપનામ</translation> <translation id="7265758999917665941">આ સાઇટ માટે ક્યારેય નહીં</translation> <translation id="7272437679830969316">તમારી ઓળખની ચકાસણી કરી શકાતી નથી. પાસવર્ડ કૉપિ કરેલો નથી.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb index a20403c..881509c4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">शेयर करें...</translation> <translation id="7192050974311852563">लॉग करना शुरू करें</translation> <translation id="7203585745079012652">उत्तर फिर से बोलें</translation> +<translation id="7207383424303353046">नई सुविधा: Chrome को अपने डिफ़ॉल्ट ब्राउज़र ऐप्लिकेशन के रूप में सेट करके, साइटों को अपने-आप खोलें. <ph name="BEGIN_LINK" />सेटिंग खोलें<ph name="END_LINK" /></translation> <translation id="721597782417389033">कार्ड का प्रचलित नाम अमान्य है</translation> <translation id="7265758999917665941">इस साइट के लिए कभी नहीं</translation> <translation id="7272437679830969316">आपकी पहचान की पुष्टि नहीं हो पा रही है. पासवर्ड कॉपी नहीं हुआ.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb index 39725627..269f983 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">Dijeli...</translation> <translation id="7192050974311852563">Započni zapisivanje</translation> <translation id="7203585745079012652">Izgovaranje odgovora</translation> +<translation id="7207383424303353046">Novo: automatski otvorite web-lokacije u Chromeu tako što ćete ga postaviti kao zadanu aplikaciju preglednika. <ph name="BEGIN_LINK" />Otvorite Postavke<ph name="END_LINK" /></translation> <translation id="721597782417389033">Nadimak kartice nije važeći</translation> <translation id="7265758999917665941">Nikad za ovu web lokaciju</translation> <translation id="7272437679830969316">Potvrda identiteta nije moguća. Zaporka nije kopirana.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb index 7b22ad0..673cd14b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">Megosztás...</translation> <translation id="7192050974311852563">Naplózás indítása</translation> <translation id="7203585745079012652">Mondja ki a válaszokat</translation> +<translation id="7207383424303353046">Újdonság: Ha alapértelmezett böngészőként állítja be a Chrome-ot, automatikusan nyithat meg benne webhelyeket. <ph name="BEGIN_LINK" />Beállítások megnyitása<ph name="END_LINK" />.</translation> <translation id="721597782417389033">Érvénytelen egyedi kártyanév</translation> <translation id="7265758999917665941">Ezen a webhelyen soha</translation> <translation id="7272437679830969316">Nem sikerült ellenőrizni a személyazonosságát. A jelszó nem lett másolva.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_strings_hy.xtb index 5ca874c1..8b95f41d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hy.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hy.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">Կիսվել…</translation> <translation id="7192050974311852563">Սկսել գրանցումը</translation> <translation id="7203585745079012652">Կարդալ պատասխանները</translation> +<translation id="7207383424303353046">Նորո՛ւյթ․ Chrome-ում ավտոմատ եղանակով կայքեր բացելու համար դարձրեք այն ձեր կանխադրված դիտարկիչը։ <ph name="BEGIN_LINK" />Բացել կարգավորումները<ph name="END_LINK" /></translation> <translation id="721597782417389033">Քարտի կեղծանունն անվավեր է</translation> <translation id="7265758999917665941">Երբեք չպահել այս կայքի համար</translation> <translation id="7272437679830969316">Չհաջողվեց հաստատել ձեր ինքնությունը: Գաղտնաբառը չի պատճենվել:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb index 35ee4d2..35ca2a87 100644 --- a/ios/chrome/app/strings/resources/ios_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Safe Browsing</translation> <translation id="4281844954008187215">Persyaratan Layanan</translation> <translation id="430793432425771671">Sinkronkan Semua</translation> +<translation id="4309403553630140242">Ketuk dua kali untuk mengetahui informasi selengkapnya</translation> <translation id="430967081421617822">Semua</translation> <translation id="4334428914252001502">1 artikel belum dibaca.</translation> <translation id="4338650699862464074">Mengirimkan URL halaman yang Anda buka ke Google.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Bagikan...</translation> <translation id="7192050974311852563">Mulai Logging</translation> <translation id="7203585745079012652">Ucapkan Jawabannya</translation> +<translation id="7207383424303353046">Baru: Buka situs di Chrome secara otomatis dengan menjadikan Chrome sebagai Aplikasi Browser Default Anda. <ph name="BEGIN_LINK" />Buka Setelan<ph name="END_LINK" /></translation> <translation id="721597782417389033">Nama Panggilan Kartu Tidak Valid</translation> <translation id="7265758999917665941">Jangan Pernah Untuk Situs Ini</translation> <translation id="7272437679830969316">Tidak dapat memverifikasi identitas. Sandi tidak disalin.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Download selesai</translation> <translation id="8073872304774253879">Jadikan Penelusuran dan Penjelajahan Lebih Baik</translation> <translation id="8076014560081431679">Setelan situs yang disimpan tidak akan dihapus dan dapat mencerminkan kebiasaan penjelajahan Anda. <ph name="BEGIN_LINK" />Pelajari lebih lanjut<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Setelan ini dikelola, ketuk dua kali untuk mengetahui informasi selengkapnya</translation> <translation id="8105368624971345109">Nonaktifkan</translation> <translation id="8114753159095730575">Download file tersedia. Opsi tersedia di dekat bagian bawah layar.</translation> <translation id="8131740175452115882">Konfirmasi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_is.xtb b/ios/chrome/app/strings/resources/ios_strings_is.xtb index ae0fffb..4fa73e6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_is.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_is.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Örugg vefnotkun</translation> <translation id="4281844954008187215">Þjónustuskilmálar</translation> <translation id="430793432425771671">Samstilla allt</translation> +<translation id="4309403553630140242">Ýttu tvisvar til að fá frekari upplýsingar.</translation> <translation id="430967081421617822">Frá upphafi</translation> <translation id="4334428914252001502">1 ólesin grein.</translation> <translation id="4338650699862464074">Senda vefslóðir síðna sem þú ferð á til Google.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Deila...</translation> <translation id="7192050974311852563">Hefja skráningu</translation> <translation id="7203585745079012652">Lesa upp svör</translation> +<translation id="7207383424303353046">Nýtt: Opnaðu vefsvæði sjálfkrafa í Chrome sjálfkrafa með því að gera það að sjálfgefnu vafraforriti. <ph name="BEGIN_LINK" />Opna stillingar<ph name="END_LINK" /></translation> <translation id="721597782417389033">Ógilt gælunafn korts</translation> <translation id="7265758999917665941">Aldrei fyrir þetta vefsvæði</translation> <translation id="7272437679830969316">Ekki tókst að staðfesta hver þú ert. Aðgangsorð var ekki afritað.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Niðurhali lokið</translation> <translation id="8073872304774253879">Bæta leit og vefskoðun</translation> <translation id="8076014560081431679">Vistuðum stillingum vefsvæða verður ekki eytt og þær kunna að endurspegla vefnotkun þína. <ph name="BEGIN_LINK" />Frekari upplýsingar<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Þessari stillingu er stjórnað, ýttu tvisvar til að fá frekari upplýsingar</translation> <translation id="8105368624971345109">Slökkva</translation> <translation id="8114753159095730575">Hægt er að sækja skrá. Valkostir eru í boði neðarlega á skjánum.</translation> <translation id="8131740175452115882">Staðfesta</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb index c80b861..8fd298f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_it.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Navigazione sicura</translation> <translation id="4281844954008187215">Termini di servizio</translation> <translation id="430793432425771671">Sincronizza tutto</translation> +<translation id="4309403553630140242">Tocca due volte per ulteriori informazioni</translation> <translation id="430967081421617822">Dall'inizio</translation> <translation id="4334428914252001502">1 articolo da leggere.</translation> <translation id="4338650699862464074">Invia a Google gli URL delle pagine che visiti.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Condividi...</translation> <translation id="7192050974311852563">Avvia logging</translation> <translation id="7203585745079012652">Pronuncia le risposte</translation> +<translation id="7207383424303353046">Novità: apri automaticamente siti in Chrome impostandolo come App browser predefinita. <ph name="BEGIN_LINK" />Apri le Impostazioni<ph name="END_LINK" /></translation> <translation id="721597782417389033">Nickname carta non valido</translation> <translation id="7265758999917665941">Mai per questo sito</translation> <translation id="7272437679830969316">Impossibile verificare la tua identità. Password non copiata.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Download terminato</translation> <translation id="8073872304774253879">Migliora le ricerche e le attività di navigazione</translation> <translation id="8076014560081431679">Le impostazioni del sito salvate non verranno eliminate e potrebbero rispecchiare le tue abitudini di navigazione. <ph name="BEGIN_LINK" />Ulteriori informazioni<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Questa impostazione è gestita, fai doppio clic per ulteriori informazioni</translation> <translation id="8105368624971345109">Disattiva</translation> <translation id="8114753159095730575">È possibile il download dei file. Le opzioni sono disponibili nella parte inferiore della schermata.</translation> <translation id="8131740175452115882">Conferma</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb index 3ac11c3..26d0e62 100644 --- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">גלישה בטוחה</translation> <translation id="4281844954008187215">תנאי שירות</translation> <translation id="430793432425771671">סנכרון הכל</translation> +<translation id="4309403553630140242">לחיצה פעמיים תציג מידע נוסף</translation> <translation id="430967081421617822">משחר ההיסטוריה</translation> <translation id="4334428914252001502">מאמר אחד שלא נקרא.</translation> <translation id="4338650699862464074">שליחת כתובות URL של דפים שנכנסת אליהם אל Google.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">שיתוף...</translation> <translation id="7192050974311852563">התחלת רישום ביומן</translation> <translation id="7203585745079012652">משוב לתשובות על-ידי דיבור</translation> +<translation id="7207383424303353046">חדש: אם Chrome יוגדר כאפליקציית הדפדפן בברירת מחדל, אתרים ייפתחו בו באופן אוטומטי. <ph name="BEGIN_LINK" />לפתיחת ההגדרות<ph name="END_LINK" /></translation> <translation id="721597782417389033">כינוי הכרטיס לא חוקי</translation> <translation id="7265758999917665941">אף פעם עבור אתר זה</translation> <translation id="7272437679830969316">לא ניתן לאמת את הזהות שלך. הסיסמה לא הועתקה.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">ההורדה הסתיימה</translation> <translation id="8073872304774253879">שיפור החיפושים והגלישה</translation> <translation id="8076014560081431679">הגדרות אתרים שנשמרו לא יימחקו ועשויות לשקף את הרגלי הגלישה שלך. <ph name="BEGIN_LINK" />למידע נוסף<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">ההגדרה הזו מנוהלת. יש ללחוץ פעמיים לקבלת מידע נוסף</translation> <translation id="8105368624971345109">כבה</translation> <translation id="8114753159095730575">יש קובץ זמין להורדה. האפשרויות זמינות בחלק התחתון של המסך.</translation> <translation id="8131740175452115882">אישור</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb index fe11911..d5c4056 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">共有...</translation> <translation id="7192050974311852563">ログ記録を開始</translation> <translation id="7203585745079012652">回答を音声で聞く</translation> +<translation id="7207383424303353046">新機能: Chrome でサイトを自動的に開くよう、既定のブラウザアプリに設定できます。<ph name="BEGIN_LINK" />設定を開く<ph name="END_LINK" /></translation> <translation id="721597782417389033">無効なカード ニックネーム</translation> <translation id="7265758999917665941">このサイトでは保存しない</translation> <translation id="7272437679830969316">ユーザー認証に失敗しました。パスワードはコピーされませんでした。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ka.xtb b/ios/chrome/app/strings/resources/ios_strings_ka.xtb index 321c0bbd..d5cf66c7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ka.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ka.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">გაზიარება…</translation> <translation id="7192050974311852563">ჟურნალირების დაწყება</translation> <translation id="7203585745079012652">აბრუნებს ხმოვან პასუხებს</translation> +<translation id="7207383424303353046">სიახლე: ავტომატურად გახსენით საიტები Chrome-ში — აქციეთ ის ბრაუზერის ნაგულისხმევ აპად. <ph name="BEGIN_LINK" />პარამეტრების გახსნა<ph name="END_LINK" /></translation> <translation id="721597782417389033">ბარათის მეტსახელი არასწორია</translation> <translation id="7265758999917665941">არასდროს ამ საიტისთვის</translation> <translation id="7272437679830969316">თქვენი ვინაობა ვერ დადასტურდა. პაროლი არ დაკოპირდა.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_strings_kk.xtb index 9989e10..0732ee78 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">Бөлісу…</translation> <translation id="7192050974311852563">Тіркеуді бастау</translation> <translation id="7203585745079012652">Жауаптарды дыбыстау</translation> +<translation id="7207383424303353046">Жаңалық: Chrome қолданбасын әдепкі браузер етіп қойсаңыз, сайттар автоматты түрде сол браузерде ашылады. <ph name="BEGIN_LINK" />Параметрлерді ашу<ph name="END_LINK" /></translation> <translation id="721597782417389033">Картаның лақап аты жарамсыз</translation> <translation id="7265758999917665941">Бұл сайт үшін ешқашан</translation> <translation id="7272437679830969316">Жеке басыңыз расталмады. Құпия сөз көшірілмеді.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_km.xtb b/ios/chrome/app/strings/resources/ios_strings_km.xtb index c8759ee..1374e49 100644 --- a/ios/chrome/app/strings/resources/ios_strings_km.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_km.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">ការរុករកដោយសុវត្ថិភាព</translation> <translation id="4281844954008187215">លក្ខខណ្ឌសេវាកម្ម</translation> <translation id="430793432425771671">ធ្វើសមកាលកម្មគ្រប់យ៉ាង</translation> +<translation id="4309403553630140242">ចុចពីរដង ដើម្បីទទួលបានព័ត៌មានបន្ថែម</translation> <translation id="430967081421617822">គ្រប់ពេល</translation> <translation id="4334428914252001502">អត្ថបទមិនទាន់អាន 1។</translation> <translation id="4338650699862464074">ផ្ញើ URL នៃទំព័រដែលអ្នកចូលមើលទៅ Google ។</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">ចែករំលែក…</translation> <translation id="7192050974311852563">ចាប់ផ្ដើមការធ្វើកំណត់ហេតុ</translation> <translation id="7203585745079012652">ឆ្លើយតបទៅវិញ</translation> +<translation id="7207383424303353046">ថ្មី៖ បើកគេហទំព័រនៅក្នុង Chrome ដោយស្វ័យប្រវត្តិដោយធ្វើឱ្យ Chrome ក្លាយជាកម្មវិធីរុករកតាមអ៊ីនធឺណិតលំនាំដើមរបស់អ្នក។ <ph name="BEGIN_LINK" />បើកការកំណត់<ph name="END_LINK" /></translation> <translation id="721597782417389033">ឈ្មោះហៅក្រៅរបស់កាតមិនត្រឹមត្រូវ</translation> <translation id="7265758999917665941">មិនចងចាំសម្រាប់គេហទំព័រនេះទេ</translation> <translation id="7272437679830969316">មិនអាចផ្ទៀងផ្ទាត់អត្តសញ្ញាណរបស់អ្នកបានទេ។ ពាក្យសម្ងាត់មិនបានចម្លង។</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">បានបញ្ចប់ការទាញយក</translation> <translation id="8073872304774253879">ធ្វើឱ្យការស្វែងរក និងការរុករកប្រសើរជាងមុន</translation> <translation id="8076014560081431679">ការកំណត់គេហទំព័រដែលបានរក្សាទុកនឹងមិនត្រូវបានលុបនោះទេ ហើយវាអាចនឹងឆ្លុះបញ្ចាំងពីទម្លាប់រុករករបស់អ្នក។ <ph name="BEGIN_LINK" />ស្វែងយល់បន្ថែំម<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">ការកំណត់នេះត្រូវបានគ្រប់គ្រង សូមចុចពីរដង ដើម្បីទទួលបានព័ត៌មានបន្ថែម</translation> <translation id="8105368624971345109">បិទ</translation> <translation id="8114753159095730575">អាចទាញយកឯកសារបានហើយ។ មានជម្រើសនៅក្បែរផ្នែកខាងក្រោមនៃអេក្រង់។</translation> <translation id="8131740175452115882">អះអាង</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb index cb4e433e..4da2450d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">ಹಂಚಿ...</translation> <translation id="7192050974311852563">ಲಾಗ್ ಮಾಡುವುದನ್ನು ಪ್ರಾರಂಭಿಸಿ</translation> <translation id="7203585745079012652">ಉತ್ತರಗಳನ್ನು ಮತ್ತೆ ಮಾತನಾಡಿ</translation> +<translation id="7207383424303353046">ಹೊಸತು: Chrome ಅನ್ನು ನಿಮ್ಮ ಡೀಫಾಲ್ಟ್ ಬ್ರೌಸರ್ ಆ್ಯಪ್ ಮಾಡಿಕೊಳ್ಳುವ ಮೂಲಕ ಅದರಲ್ಲಿ ಸೈಟ್ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತೆರೆಯಿರಿ. <ph name="BEGIN_LINK" />ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಿರಿ<ph name="END_LINK" /></translation> <translation id="721597782417389033">ಕಾರ್ಡ್ ಅಡ್ಡಹೆಸರು ಅಮಾನ್ಯವಾಗಿದೆ</translation> <translation id="7265758999917665941">ಈ ಸೈಟ್ಗೆ ಎಂದಿಗೂ ಬೇಡ</translation> <translation id="7272437679830969316">ನಿಮ್ಮ ಗುರುತನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ನಕಲಿಸಲಾಗಿಲ್ಲ.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb index 24a06452..b278d5c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">공유...</translation> <translation id="7192050974311852563">로깅 시작</translation> <translation id="7203585745079012652">음성 응답</translation> +<translation id="7207383424303353046">새로운 기능: 사이트가 자동으로 Chrome에서 열리도록 Chrome을 기본 브라우저 앱으로 설정하세요. <ph name="BEGIN_LINK" />설정 열기<ph name="END_LINK" /></translation> <translation id="721597782417389033">잘못된 카드 닉네임</translation> <translation id="7265758999917665941">이 사이트 제외</translation> <translation id="7272437679830969316">신원을 인증할 수 없습니다. 비밀번호가 복사되지 않았습니다.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_strings_ky.xtb index 576d3a4..46e0a15 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ky.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
@@ -97,7 +97,7 @@ <translation id="1965935827552890526">Жасап жаткан нерсени Chrome'дун ачык терезесинде улантыңыз.</translation> <translation id="1974060860693918893">Өркүндөтүлгөн</translation> <translation id="1989112275319619282">Серептөө</translation> -<translation id="1992734845128748707">Демейки серепчи өзгөрүү…</translation> +<translation id="1992734845128748707">Демейки серепчини өзгөртүү…</translation> <translation id="2015722694326466240">Сырсөздөрдү көрүү үчүн, адегенде, түзмөгүңүздөгү өткөрүүчү кодду жөндөп алышыңыз керек.</translation> <translation id="2073572773299281212"><ph name="DAYS" /> күн мурун жигердүү болгон</translation> <translation id="2074131957428911366">Эмнени шайкештирүү керек экенин <ph name="BEGIN_LINK" />жөндөөлөрдөн<ph name="END_LINK" /> ар дайым тандай аласыз.</translation> @@ -561,6 +561,7 @@ <translation id="7189598951263744875">Бөлүшүү…</translation> <translation id="7192050974311852563">Таржымалын жыйнап баштоо</translation> <translation id="7203585745079012652">Жоопторду айтуу</translation> +<translation id="7207383424303353046">Жаңы: Chrome'ду демейки серепчи колдонмоңуз кылып алып, анда сайттарды автоматтык түрдө ачыңыз. <ph name="BEGIN_LINK" />Жөндөөлөрдү ачуу<ph name="END_LINK" /></translation> <translation id="721597782417389033">Картанын ылакап аты туура эмес</translation> <translation id="7265758999917665941">Бул сайт үчүн эч качан</translation> <translation id="7272437679830969316">Аныктыгыңыз тастыкталган жок. Сырсөз көчүрүлгөн жок.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_strings_lo.xtb index ac762de9..031b63c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lo.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">ແບ່ງປັນ...</translation> <translation id="7192050974311852563">ເລີ່ມການບັນທຶກ</translation> <translation id="7203585745079012652">ເວົ້າຄຳຕອບກັບຄືນ</translation> +<translation id="7207383424303353046">ໃໝ່: ເປີດເວັບໄຊໃນ Chrome ໂດຍອັດຕະໂນມັດໂດຍການເຮັດໃຫ້ມັນເປັນແອັບໂປຣແກຣມທ່ອງເວັບເລີ່ມຕົ້ນຂອງທ່ານ. <ph name="BEGIN_LINK" />ເປີດການຕັ້ງຄ່າ<ph name="END_LINK" /></translation> <translation id="721597782417389033">ຊື່ຫຼິ້ນບັດບໍ່ຖືກຕ້ອງ</translation> <translation id="7265758999917665941">ບໍ່ເລີຍສໍາລັບເວັບໄຊນີ້</translation> <translation id="7272437679830969316">ບໍ່ສາມາດພິສູດຢືນຢັນຕົວຕົນຂອງທ່ານໄດ້. ບໍ່ໄດ້ສຳເນົາລະຫັດຜ່ານ.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb index ff49fcd9..fde0369 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Saugus naršymas</translation> <translation id="4281844954008187215">Paslaugų teikimo sąlygos</translation> <translation id="430793432425771671">Sinchronizuoti viską</translation> +<translation id="4309403553630140242">Norėdami gauti daugiau informacijos, dukart palieskite.</translation> <translation id="430967081421617822">Visas laikotarpis</translation> <translation id="4334428914252001502">1 neskaitytas straipsnis.</translation> <translation id="4338650699862464074">Siunčiami „Google“ puslapių, kuriuose lankotės, URL.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Bendrinti...</translation> <translation id="7192050974311852563">Pradėti registravimą</translation> <translation id="7203585745079012652">Sakyti atsakymus</translation> +<translation id="7207383424303353046">Naujiena: automatiškai atidarykite svetaines naršyklėje „Chrome“, nustatę ją kaip numatytąją naršyklės programą. <ph name="BEGIN_LINK" />Atidarykite skiltį „Nustatymai“<ph name="END_LINK" /></translation> <translation id="721597782417389033">Netinkamas kortelės slapyvardis</translation> <translation id="7265758999917665941">Niekada šioje svetainėje</translation> <translation id="7272437679830969316">Nepavyko patvirtinti tapatybės. Slaptažodis nenukopijuotas.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Atsisiuntimas užbaigtas</translation> <translation id="8073872304774253879">Tobulinti paieškas ir naršymą</translation> <translation id="8076014560081431679">Išsaugoti svetainių nustatymai nebus ištrinti ir gali nurodyti naršymo įpročius. <ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Šis nustatymas tvarkomas, norėdami gauti daugiau informacijos dukart palieskite</translation> <translation id="8105368624971345109">Išjungti</translation> <translation id="8114753159095730575">Galima atsisiųsti failą. Parinktys pasiekiamos netoli ekrano apačios.</translation> <translation id="8131740175452115882">Patvirtinti</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb index 7bfbe85..18f681b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">Kopīgot...</translation> <translation id="7192050974311852563">Sākt reģistrēšanu</translation> <translation id="7203585745079012652">Izrunāt atbildes skaļi</translation> +<translation id="7207383424303353046">Jaunums: automātiski atveriet vietnes pārlūkā Chrome, iestatot to kā savu noklusējuma pārlūka lietotni. <ph name="BEGIN_LINK" />Atvērt iestatījumus<ph name="END_LINK" /></translation> <translation id="721597782417389033">Nederīgs kredītkartes apzīmējums</translation> <translation id="7265758999917665941">Nekad šai vietnei</translation> <translation id="7272437679830969316">Nevar apstiprināt jūsu identitāti. Parole nav nokopēta.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mk.xtb b/ios/chrome/app/strings/resources/ios_strings_mk.xtb index 274b558..41c1a06 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mk.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Безбедно прелистување</translation> <translation id="4281844954008187215">Услови за користење</translation> <translation id="430793432425771671">Синхронизирај сѐ</translation> +<translation id="4309403553630140242">Допрете двапати за повеќе информации</translation> <translation id="430967081421617822">Цело време</translation> <translation id="4334428914252001502">1 непрочитана статија.</translation> <translation id="4338650699862464074">Ги испраќа URL-адресите на страниците што ги посетувате во Google.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Сподели…</translation> <translation id="7192050974311852563">Започни со собирање евиденција</translation> <translation id="7203585745079012652">Изговарај ги одговорите</translation> +<translation id="7207383424303353046">Ново: автоматски отворајте сајтови во Chrome така што ќе го направите ваша стандардна апликација за прелистувач. <ph name="BEGIN_LINK" />Отворете „Поставки“<ph name="END_LINK" /></translation> <translation id="721597782417389033">Неважечки прекар на картичка</translation> <translation id="7265758999917665941">Никогаш за овој сајт</translation> <translation id="7272437679830969316">Не може да се потврди вашиот идентитет. Лозинката не е копирана.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Преземањето заврши</translation> <translation id="8073872304774253879">Подобрете ги пребарувањата и прелистувањето</translation> <translation id="8076014560081431679">Поставките на зачуваните сајтови нема да се избришат и може да ги отсликуваат вашите навики за прелистување. <ph name="BEGIN_LINK" />Дознајте повеќе<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Поставкава е управувана, допрете двапати за повеќе информации</translation> <translation id="8105368624971345109">Исклучи</translation> <translation id="8114753159095730575">Достапна е датотека за преземање. Достапни се опции на дното на екранот.</translation> <translation id="8131740175452115882">Потврди</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb index 2b0a7205..67294f1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">പങ്കിടുക...</translation> <translation id="7192050974311852563">ലോഗിംഗ് ആരംഭിക്കുക</translation> <translation id="7203585745079012652">മറുപടിയായി ഉത്തരങ്ങൾ പറയുക</translation> +<translation id="7207383424303353046">പുതിയത്: Chrome നിങ്ങളുടെ ഡിഫോൾഡ് ബ്രൈസർ ആപ്പ് ആയി സജ്ജീകരിച്ച് അതിൽ സൈറ്റുകൾ സ്വയമേവ തുറക്കൂ. <ph name="BEGIN_LINK" />ക്രമീകരണം തുറക്കുക<ph name="END_LINK" /></translation> <translation id="721597782417389033">കാർഡിന്റെ വിളിപ്പേര് അസാധുവാണ്</translation> <translation id="7265758999917665941">ഈ സൈറ്റിൻ്റെ പാസ്വേഡ് ഓർക്കേണ്ടതില്ല</translation> <translation id="7272437679830969316">നിങ്ങളുടെ ഐഡന്റിറ്റി പരിശോധിച്ചുറപ്പിക്കാനാകില്ല. പാസ്വേഡ് പകർത്തിയില്ല.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_strings_mn.xtb index d8bc9cc06..1e7c9b0 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Аюулгүй үзэх</translation> <translation id="4281844954008187215">Үйлчилгээний нөхцөл</translation> <translation id="430793432425771671">Бүгдийг синк хийх</translation> +<translation id="4309403553630140242">Дэлгэрэнгүй мэдээлэл авахын тулд хоёр товшино уу</translation> <translation id="430967081421617822">Бүх цаг</translation> <translation id="4334428914252001502">Уншаагүй 1 нийтлэл.</translation> <translation id="4338650699862464074">Таны зочилсон хуудасны URL-г Google-д илгээдэг.</translation> @@ -560,6 +561,7 @@ <translation id="7189598951263744875">Хуваалцах...</translation> <translation id="7192050974311852563">Лог хийж эхлэх</translation> <translation id="7203585745079012652">Хариултыг буцааж хэлэх</translation> +<translation id="7207383424303353046">Шинэ: Chrome-г өгөгдмөл хөтчийн аппаа болгоод, сайтуудыг үүн дээр автоматаар нээгээрэй. <ph name="BEGIN_LINK" />Тохиргоог нээх<ph name="END_LINK" /></translation> <translation id="721597782417389033">Картын буруу хоч</translation> <translation id="7265758999917665941">Энэ сайтад хэзээ ч хадгалахгүй</translation> <translation id="7272437679830969316">Таныг баталгаажуулж чадсангүй. Нууц үгийг хуулаагүй байна.</translation> @@ -637,6 +639,7 @@ <translation id="8073670137947914548">Татаж дууслаа</translation> <translation id="8073872304774253879">Хайлт болон хөтлөх явцыг сайжруулах</translation> <translation id="8076014560081431679">Сайтын хадгалсан тохиргоо устахгүй бөгөөд таны хайлтын тохиргоонд нөлөөлж болзошгүй. <ph name="BEGIN_LINK" />Дэлгэрэнгүй үзэх<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Энэ тохиргоог удирддаг. Дэлгэрэнгүй мэдээлэл авахын тулд хоёр товшино уу</translation> <translation id="8105368624971345109">Унтраах</translation> <translation id="8114753159095730575">Файл татаж авах боломжтой. Дэлгэцийн доод хэсгийн сонголтууд боломжтой.</translation> <translation id="8131740175452115882">Батлах</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb index 7039a5d..abaee8ec 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -562,6 +562,7 @@ <translation id="7189598951263744875">सामयिक करा...</translation> <translation id="7192050974311852563">लॉग इन करणे सुरू करा</translation> <translation id="7203585745079012652">उत्तरे वाचून सांगा</translation> +<translation id="7207383424303353046">नवीन: Chrome ला तुमचे डीफॉल्ट ब्राउझर अॅप सेट करून त्यामध्ये आपोआप साइट उघडा. <ph name="BEGIN_LINK" />सेटिंग्ज उघडा<ph name="END_LINK" /></translation> <translation id="721597782417389033">कार्डाचे चुकीचे टोपणनाव</translation> <translation id="7265758999917665941">या साइटसाठी कधीही नाही</translation> <translation id="7272437679830969316">तुमच्या ओळखीची पडताळणी करता आली नाही. पासवर्ड कॉपी केला नाही.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb index 42a7372..7fa9499 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Penyemakan Imbas Selamat</translation> <translation id="4281844954008187215">Syarat Perkhidmatan</translation> <translation id="430793432425771671">Segerakkan Semua</translation> +<translation id="4309403553630140242">Ketik dua kali untuk mendapatkan maklumat lanjut</translation> <translation id="430967081421617822">Sepanjang Masa</translation> <translation id="4334428914252001502">1 artikel belum dibaca.</translation> <translation id="4338650699862464074">Menghantar URL halaman yang anda lawati kepada Google.</translation> @@ -382,7 +383,7 @@ <translation id="5388358297987318779">Buka Imej</translation> <translation id="5407969256130905701">Buang Perubahan</translation> <translation id="5409365236829784218">Tiada aplikasi dipasang yang boleh membuka fail ini.</translation> -<translation id="5416022985862681400">7 Hari Terakhir</translation> +<translation id="5416022985862681400">7 Hari Lalu</translation> <translation id="543338862236136125">Edit kata laluan</translation> <translation id="5433691172869980887">Nama pengguna disalin</translation> <translation id="54401264925851789">Maklumat Halaman Keselamatan</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Kongsi...</translation> <translation id="7192050974311852563">Mula Mengelog</translation> <translation id="7203585745079012652">Sebut Kembali Jawapan</translation> +<translation id="7207383424303353046">Baharu: Buka tapak dalam Chrome secara automatik dengan menjadikan Chrome Apl Penyemak Imbas Lalai anda. <ph name="BEGIN_LINK" />Buka Tetapan<ph name="END_LINK" /></translation> <translation id="721597782417389033">Nama Panggilan Kad Tidak Sah</translation> <translation id="7265758999917665941">Jangan Sekali-kali untuk Tapak Ini</translation> <translation id="7272437679830969316">Tidak dapat mengesahkan identiti anda. Kata laluan tidak disalin.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Muat turun selesai</translation> <translation id="8073872304774253879">Perbaik Carian dan Penyemakan Imbas</translation> <translation id="8076014560081431679">Tetapan tapak yang disimpan tidak akan dipadamkan dan mungkin mencerminkan tabiat semak imbas anda. <ph name="BEGIN_LINK" />Ketahui lebih lanjut<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Tetapan ini diurus, ketik dua kali untuk mendapatkan maklumat lanjut</translation> <translation id="8105368624971345109">Matikan</translation> <translation id="8114753159095730575">Muat turun fail tersedia. Pilihan tersedia di bahagian bawah skrin.</translation> <translation id="8131740175452115882">Sahkan</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb index b581b94..4ea4bc3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_my.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_my.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">လုံခြုံစွာ ဖွင့်ကြည့်ခြင်း</translation> <translation id="4281844954008187215">ဝန်ဆောင်မှု စည်းမျဉ်းများ</translation> <translation id="430793432425771671">အားလုံး စင့်ခ်မည်</translation> +<translation id="4309403553630140242">နောက်ထပ်အချက်အလက်အတွက် နှစ်ချက်တို့ပါ</translation> <translation id="430967081421617822">အစအဆုံး</translation> <translation id="4334428914252001502">မဖတ်ရသေးသော ဆောင်းပါး ၁ ပုဒ်။</translation> <translation id="4338650699862464074">သင်ဝင်ကြည့်သည့် စာမျက်နှာများ၏ URL များကို Google သို့ ပို့သည်။</translation> @@ -560,6 +561,7 @@ <translation id="7189598951263744875">ဝေမျှရန်...</translation> <translation id="7192050974311852563">မှတ်တမ်းစတင်ရန်</translation> <translation id="7203585745079012652">အဖြေများကို ပြန်လည်ပြောကြားမည်</translation> +<translation id="7207383424303353046">အသစ်- Chrome ကို 'မူရင်း ဘရောင်ဇာအက်ပ်' ပြုလုပ်ခြင်းဖြင့် ဝဘ်ဆိုက်များကို ၎င်းတွင် အလိုအလျောက်ဖွင့်နိုင်သည်။ <ph name="BEGIN_LINK" />ဆက်တင်များ ဖွင့်ရန်<ph name="END_LINK" /></translation> <translation id="721597782417389033">မမှန်ကန်သော ကတ်နာမည်ပြောင်</translation> <translation id="7265758999917665941">ဤဝဘ်ဆိုက်အတွက် လုံးဝမလုပ်ရန်</translation> <translation id="7272437679830969316">သင်မည်သူမည်ဝါဖြစ်ကြောင်း အတည်ပြု၍ မရနိုင်ပါ။ စကားဝှက်ကို မိတ္ထူကူးမထားပါ။</translation> @@ -637,6 +639,7 @@ <translation id="8073670137947914548">ဒေါင်းလုဒ်လုပ်ပြီးပါပြီ</translation> <translation id="8073872304774253879">ရှာဖွေမှုနှင့် ဖွင့်ကြည့်မှု ပိုမိုကောင်းမွန်အောင် ပြုလုပ်ခြင်း</translation> <translation id="8076014560081431679">သိမ်းဆည်းထားသည့် ဆိုက်ဆက်တင်များကိုတော့ ဖျက်လိုက်မည် မဟုတ်ဘဲ သင်အင်တာနက် အသုံးပြုမှု အမူအကျင့်များကို ဖော်ပြပါလိမ့်မည်။ <ph name="BEGIN_LINK" />ပိုမိုလေ့လာရန်<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">ဤဆက်တင်ကို စီမံခန့်ခွဲထားသည်၊ နောက်ထပ်အချက်အလက်အတွက် နှစ်ချက်တို့ပါ</translation> <translation id="8105368624971345109">ပိတ်ပါ</translation> <translation id="8114753159095730575">ဖိုင်ကို ဒေါင်းလုဒ်လုပ်နိုင်ပါပြီ။ မျက်နှာပြင်အောက်ခြေနားတွင် ရွေးချယ်စရာများ ရှိပါသည်။</translation> <translation id="8131740175452115882">အတည်ပြုရန်</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_strings_ne.xtb index 1347d254..97baf64 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ne.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ne.xtb
@@ -97,6 +97,7 @@ <translation id="1965935827552890526">तपाईंले Chrome मा खुला रहेको अर्को विन्डोमा गरिरहनुभएको कार्य पूरा गर्नुहोस्।</translation> <translation id="1974060860693918893">उन्नत</translation> <translation id="1989112275319619282">ब्राउज गर्नुहोस्</translation> +<translation id="1992734845128748707">पूर्वनिर्धारित ब्राउजर परिवर्तन गर्नुहोस्…</translation> <translation id="2015722694326466240">पासवर्डहरू हेर्नका लागि सर्वप्रथम तपाईंले अनिवार्य रूपमा आफ्नो यन्त्रमा कुनै पासकोड सेट गर्नुपर्छ।</translation> <translation id="2073572773299281212"><ph name="DAYS" /> दिनअघि सक्रिय</translation> <translation id="2074131957428911366">तपाईं जुनसुकै बेला <ph name="BEGIN_LINK" />सेटिङहरू<ph name="END_LINK" /> मा गई सिंक गर्ने कुरा छनौट गर्न सक्नुहुन्छ।</translation> @@ -560,6 +561,7 @@ <translation id="7189598951263744875">सेयर गर्नुहोस्...</translation> <translation id="7192050974311852563">लग गर्न सुरु गर्नुहोस्</translation> <translation id="7203585745079012652">जवाफहरू पुन: भन्नुहोस्</translation> +<translation id="7207383424303353046">नयाँ: Open sites in Chrome आफ्नो पूर्वनिर्धारित ब्राउजर एप बनाएर साइटहरू स्वतः Chrome मा खोल्नुहोस्। <ph name="BEGIN_LINK" />सेटिङ खोल्नुहोस्pen Settings<ph name="END_LINK" /></translation> <translation id="721597782417389033">कार्डको उपनाम अवैध छ</translation> <translation id="7265758999917665941">यो साइटका हकमा कहिल्यै पनि नसम्झनुहोस्</translation> <translation id="7272437679830969316">तपाईंको पहिचान पुष्टि गर्न सकिएन। पासवर्डको प्रतिलिपि गरिएको छैन।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb index 9f1fb83..a20a4ed 100644 --- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -154,7 +154,7 @@ <translation id="2702801445560668637">Leeslijst</translation> <translation id="2704491540504985681">Downloads</translation> <translation id="2704606927547763573">Gekopieerd</translation> -<translation id="2709516037105925701">Automatisch aanvullen</translation> +<translation id="2709516037105925701">Automatisch invullen</translation> <translation id="2712127207578915686">Kan bestand niet openen</translation> <translation id="2718352093833049315">Alleen via wifi</translation> <translation id="2747003861858887689">Vorig veld</translation> @@ -242,7 +242,7 @@ <translation id="3581564640715911333">Aanbieden pagina's in andere talen te vertalen</translation> <translation id="3588820906588687999">Afbeelding openen op nieuw tabblad</translation> <translation id="3603009562372709545">Link-URL kopiëren</translation> -<translation id="3607167657931203000">Gegevens van Automatisch aanvullen</translation> +<translation id="3607167657931203000">Gegevens van Automatisch invullen</translation> <translation id="3609785682760573515">Synchroniseren...</translation> <translation id="3638472932233958418">Webpagina's vooraf laden</translation> <translation id="3670030362669914947">Nummer</translation> @@ -293,6 +293,7 @@ <translation id="4277990410970811858">Safe Browsing</translation> <translation id="4281844954008187215">Servicevoorwaarden</translation> <translation id="430793432425771671">Alles synchroniseren</translation> +<translation id="4309403553630140242">Dubbeltik voor meer informatie</translation> <translation id="430967081421617822">Altijd</translation> <translation id="4334428914252001502">1 ongelezen artikel.</translation> <translation id="4338650699862464074">Verzendt de URL's van pagina's die je bezoekt naar Google.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Delen</translation> <translation id="7192050974311852563">Logboekregistratie starten</translation> <translation id="7203585745079012652">Antwoorden uitspreken</translation> +<translation id="7207383424303353046">Nieuw: Open sites automatisch in Chrome door het als je standaard browser-app in te stellen. <ph name="BEGIN_LINK" />Instellingen openen<ph name="END_LINK" /></translation> <translation id="721597782417389033">Ongeldige bijnaam kaart</translation> <translation id="7265758999917665941">Nooit voor deze site</translation> <translation id="7272437679830969316">Kan je identiteit niet verifiëren. Wachtwoord niet gekopieerd.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Downloaden is voltooid</translation> <translation id="8073872304774253879">Zoekopdrachten en browsefunctionaliteit verbeteren</translation> <translation id="8076014560081431679">Opgeslagen site-instellingen worden niet verwijderd en kunnen je browsegedrag weerspiegelen. <ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Deze instelling wordt beheerd, dubbeltik voor meer informatie</translation> <translation id="8105368624971345109">Uitschakelen</translation> <translation id="8114753159095730575">Bestand downloaden is beschikbaar. Opties beschikbaar onderaan het scherm.</translation> <translation id="8131740175452115882">Bevestigen</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb index e936a0e..af1cfe8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_no.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Safe Browsing</translation> <translation id="4281844954008187215">Vilkår for bruk</translation> <translation id="430793432425771671">Synkroniser alt</translation> +<translation id="4309403553630140242">Dobbelttrykk for å se mer informasjon</translation> <translation id="430967081421617822">Alle datoer</translation> <translation id="4334428914252001502">1 ulest artikkel.</translation> <translation id="4338650699862464074">Sender Google nettadressene til sider du besøker.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Del</translation> <translation id="7192050974311852563">Start loggføring</translation> <translation id="7203585745079012652">Svar med tale</translation> +<translation id="7207383424303353046">Nyhet: Åpne nettsteder i Chrome automatisk ved å angi den som standard nettleserapp. <ph name="BEGIN_LINK" />Åpne Innstillinger<ph name="END_LINK" /></translation> <translation id="721597782417389033">Ugyldig kallenavn på kortet</translation> <translation id="7265758999917665941">Aldri for dette nettstedet</translation> <translation id="7272437679830969316">Kan ikke bekrefte identiteten din. Passordet er ikke kopiert.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Nedlastingen er fullført</translation> <translation id="8073872304774253879">Gjør søking og surfing bedre</translation> <translation id="8076014560081431679">Lagrede nettstedsinnstillinger slettes ikke og kan gjenspeile nettleserbruken din. <ph name="BEGIN_LINK" />Finn ut mer<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Denne innstillingen er administrert – dobbelttrykk for mer informasjon</translation> <translation id="8105368624971345109">Slå av</translation> <translation id="8114753159095730575">Filnedlasting er tilgjengelig. Du finner alternativer på nedre del av skjermen.</translation> <translation id="8131740175452115882">Bekreft</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_or.xtb b/ios/chrome/app/strings/resources/ios_strings_or.xtb index d54c9b35..4bfdbce 100644 --- a/ios/chrome/app/strings/resources/ios_strings_or.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_or.xtb
@@ -559,6 +559,7 @@ <translation id="7189598951263744875">ସେୟାର୍ କରନ୍ତୁ...</translation> <translation id="7192050974311852563">ଲଗିଂ ଆରମ୍ଭ କରନ୍ତୁ</translation> <translation id="7203585745079012652">ପୁଣିଥରେ ଉତ୍ତର କୁହନ୍ତୁ</translation> +<translation id="7207383424303353046">ନୂଆ: Chromeକୁ ଆପଣଙ୍କର ଡିଫଲ୍ଟ ବ୍ରାଉଜର୍ ଆପ୍ ଭାବେ ସେଟ୍ କରି ସାଇଟଗୁଡ଼ିକୁ ଏଥିରେ ସ୍ୱଚାଳିତ ଭାବରେ ଖୋଲନ୍ତୁ। <ph name="BEGIN_LINK" />ସେଟିଂସ୍ ଖୋଲନ୍ତୁ<ph name="END_LINK" /></translation> <translation id="721597782417389033">କାର୍ଡର ଅବୈଧ ଡାକନାମ</translation> <translation id="7265758999917665941">ଏହି ସାଇଟ୍ ପାଇଁ ଆଦୌ ନୁହେଁ</translation> <translation id="7272437679830969316">ଆପଣଙ୍କର ପରିଚୟ ଯାଞ୍ଚ କରିପାରିବ ନାହିଁ। ପାସ୍ୱର୍ଡ କପି ହୋଇନାହିଁ।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pa.xtb b/ios/chrome/app/strings/resources/ios_strings_pa.xtb index b1ce45c..43ea6944 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pa.xtb
@@ -97,6 +97,7 @@ <translation id="1965935827552890526">ਤੁਸੀਂ ਆਪਣੀ ਦੂਜੀ ਖੁੱਲ੍ਹੀ Chrome ਵਿੰਡੋ ਵਿੱਚ ਜੋ ਕੰਮ ਕਰ ਰਹੇ ਸੀ, ਉਸਨੂੰ ਪੂਰਾ ਕਰੋ।</translation> <translation id="1974060860693918893">ਉੱਨਤ</translation> <translation id="1989112275319619282">ਬ੍ਰਾਊਜ਼ ਕਰੋ</translation> +<translation id="1992734845128748707">ਪੂਰਵ-ਨਿਰਧਾਰਤ ਬ੍ਰਾਊਜ਼ਰ ਬਦਲੋ…</translation> <translation id="2015722694326466240">ਪਾਸਵਰਡਾਂ ਨੂੰ ਦੇਖਣ ਲਈ, ਪਹਿਲਾਂ ਤੁਹਾਨੂੰ ਆਪਣੇ ਡੀਵਾਈਸ 'ਤੇ ਕਿਸੇ ਪਾਸਕੋਡ ਨੂੰ ਸੈੱਟ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।</translation> <translation id="2073572773299281212"><ph name="DAYS" /> ਦਿਨ ਪਹਿਲਾਂ ਕਿਰਿਆਸ਼ੀਲ</translation> <translation id="2074131957428911366">ਤੁਸੀਂ <ph name="BEGIN_LINK" />ਸੈਟਿੰਗਾਂ<ph name="END_LINK" /> ਵਿੱਚ ਹਮੇਸ਼ਾਂ ਇਹ ਚੁਣ ਸਕਦੇ ਹੋ ਕਿ ਕਿਸਦਾ ਸਮਕਾਲੀਕਰਨ ਕਰਨਾ ਹੈ।</translation> @@ -560,6 +561,7 @@ <translation id="7189598951263744875">ਸ਼ੇਅਰ ਕਰੋ...</translation> <translation id="7192050974311852563">ਲੌਗਿੰਗ ਸ਼ੁਰੂ ਕਰੋ</translation> <translation id="7203585745079012652">ਜਵਾਬ ਦੁਬਾਰਾ ਬੋਲੋ</translation> +<translation id="7207383424303353046">ਨਵਾਂ: Chrome ਨੂੰ ਆਪਣੀ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਬ੍ਰਾਊਜ਼ਰ ਐਪ ਬਣਾ ਕੇ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਇਸ ਵਿੱਚ ਸਾਈਟਾਂ ਖੋਲ੍ਹੋ। <ph name="BEGIN_LINK" />ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ<ph name="END_LINK" /></translation> <translation id="721597782417389033">ਕਾਰਡ ਦਾ ਉਪਨਾਮ ਅਵੈਧ ਹੈ</translation> <translation id="7265758999917665941">ਇਸ ਸਾਈਟ ਲਈ ਕਦੇ ਵੀ ਨਹੀਂ</translation> <translation id="7272437679830969316">ਤੁਹਾਡੀ ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ। ਪਾਸਵਰਡ ਕਾਪੀ ਨਹੀਂ ਕੀਤਾ ਗਿਆ।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb index 0eb1fb43..1d371d8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Bezpieczne przeglądanie</translation> <translation id="4281844954008187215">Warunki korzystania z usługi</translation> <translation id="430793432425771671">Synchronizuj wszystko</translation> +<translation id="4309403553630140242">Kliknij dwukrotnie, by dowiedzieć się więcej</translation> <translation id="430967081421617822">Od początku</translation> <translation id="4334428914252001502">Jeden nieprzeczytany artykuł.</translation> <translation id="4338650699862464074">Adresy URL odwiedzanych stron będą wysyłane do Google.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Udostępnij...</translation> <translation id="7192050974311852563">Uruchom rejestrowanie</translation> <translation id="7203585745079012652">Odczytuj odpowiedzi</translation> +<translation id="7207383424303353046">Nowość: ustaw aplikację Chrome jako przeglądarkę domyślną, by strony otwierały się w niej automatycznie. <ph name="BEGIN_LINK" />Otwórz ustawienia<ph name="END_LINK" /></translation> <translation id="721597782417389033">Nieprawidłowa nazwa karty</translation> <translation id="7265758999917665941">Nigdy dla tej witryny</translation> <translation id="7272437679830969316">Nie można zweryfikować Twojej tożsamości. Hasło nie zostało skopiowane.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Pobieranie zakończone</translation> <translation id="8073872304774253879">Ulepsz wyszukiwanie i przeglądanie</translation> <translation id="8076014560081431679">Zapisane ustawienia witryn nie zostaną usunięte i mogą zawierać informacje o Twoim korzystaniu z przeglądarki. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">To ustawienie jest zarządzenie. Kliknij dwukrotnie, by dowiedzieć się więcej.</translation> <translation id="8105368624971345109">Wyłącz</translation> <translation id="8114753159095730575">Pobrany plik jest dostępny. Opcje są dostępne u dołu ekranu.</translation> <translation id="8131740175452115882">Potwierdź</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb index b55f81d..355cae7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Navegação segura</translation> <translation id="4281844954008187215">Termos de Serviço</translation> <translation id="430793432425771671">Sincronizar tudo</translation> +<translation id="4309403553630140242">Toque duas vezes para ver mais informações</translation> <translation id="430967081421617822">Todo o período</translation> <translation id="4334428914252001502">1 artigo não lido.</translation> <translation id="4338650699862464074">Envia URLs das páginas que você visita para o Google.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Compartilhar...</translation> <translation id="7192050974311852563">Iniciar registro</translation> <translation id="7203585745079012652">Falar as respostas</translation> +<translation id="7207383424303353046">Novidade: defina o Chrome como seu app padrão de navegador para abrir sites automaticamente nele. <ph name="BEGIN_LINK" />Abrir Configurações<ph name="END_LINK" /></translation> <translation id="721597782417389033">Apelido do cartão inválido</translation> <translation id="7265758999917665941">Nunca para este site</translation> <translation id="7272437679830969316">Não é possível verificar sua identidade. Senha não copiada.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Download concluído</translation> <translation id="8073872304774253879">Melhorar as pesquisas e a navegação</translation> <translation id="8076014560081431679">As configurações salvas em sites não são excluídas e podem refletir seus hábitos de navegação. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Esta configuração é gerenciada. Toque duas vezes para ver mais informações</translation> <translation id="8105368624971345109">Desativar</translation> <translation id="8114753159095730575">O download de arquivo está disponível. Opções disponíveis perto da parte inferior da tela.</translation> <translation id="8131740175452115882">Confirmar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb index 56eb3d7..8823866 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Navegação segura</translation> <translation id="4281844954008187215">Termos de Utilização</translation> <translation id="430793432425771671">Sincronizar Tudo</translation> +<translation id="4309403553630140242">Toque duas vezes para obter mais informações.</translation> <translation id="430967081421617822">Sempre</translation> <translation id="4334428914252001502">1 artigo não lido.</translation> <translation id="4338650699862464074">Envia para a Google os URLs das páginas que visita.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Partilhar...</translation> <translation id="7192050974311852563">Iniciar registo</translation> <translation id="7203585745079012652">Ouvir Respostas</translation> +<translation id="7207383424303353046">Novidade: abra automaticamente os sites no Chrome ao torná-lo a sua app de navegador predefinida. <ph name="BEGIN_LINK" />Abra as Definições<ph name="END_LINK" /></translation> <translation id="721597782417389033">Pseudónimo do cartão inválido</translation> <translation id="7265758999917665941">Nunca para este site</translation> <translation id="7272437679830969316">Não é possível validar a sua identidade. Palavra-passe não copiada.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Transferência concluída</translation> <translation id="8073872304774253879">Melhorar as pesquisas e a navegação</translation> <translation id="8076014560081431679">As definições de sites guardadas não são eliminadas e podem refletir os seus hábitos de navegação. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Esta definição é gerida. Toque duas vezes para obter mais informações.</translation> <translation id="8105368624971345109">Desativar</translation> <translation id="8114753159095730575">A transferência de ficheiros está disponível. Opções disponíveis junto à parte inferior do ecrã.</translation> <translation id="8131740175452115882">Confirmar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb index 51cc7064..236f2ed 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">Trimite...</translation> <translation id="7192050974311852563">Activează înregistrarea în jurnal</translation> <translation id="7203585745079012652">Primești răspunsuri vocale</translation> +<translation id="7207383424303353046">Nou: deschide automat site-uri în Chrome setând-o ca aplicație browser prestabilită. <ph name="BEGIN_LINK" />Deschide Setările<ph name="END_LINK" /></translation> <translation id="721597782417389033">Pseudonimul cardului nu este valid</translation> <translation id="7265758999917665941">Niciodată pentru acest site</translation> <translation id="7272437679830969316">Nu ți se poate confirma identitatea. Parola nu a fost copiată.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb index 870c3fbb..0b2099f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Безопасный просмотр</translation> <translation id="4281844954008187215">Условия использования</translation> <translation id="430793432425771671">Синхронизировать все</translation> +<translation id="4309403553630140242">Чтобы посмотреть подробную информацию, нажмите дважды.</translation> <translation id="430967081421617822">Все время</translation> <translation id="4334428914252001502">1 непрочитанная статья.</translation> <translation id="4338650699862464074">Отправлять URL страниц, которые вы посещаете, в Google.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Поделиться…</translation> <translation id="7192050974311852563">Начать запись журнала</translation> <translation id="7203585745079012652">Озвучивать результаты поиска</translation> +<translation id="7207383424303353046">Новинка! Чтобы автоматически открывать сайты в Chrome, сделайте его браузером по умолчанию. <ph name="BEGIN_LINK" />Перейти в настройки<ph name="END_LINK" /></translation> <translation id="721597782417389033">Недопустимое название карты</translation> <translation id="7265758999917665941">Никогда для этого сайта</translation> <translation id="7272437679830969316">Не удалось пройти проверку. Пароль не скопирован.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Скачивание завершено</translation> <translation id="8073872304774253879">Улучшить функции поиска и просмотра страниц</translation> <translation id="8076014560081431679">Настройки сайтов не изменятся, поэтому данные о вашей работе в Интернете сохранятся. <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Эту настройку можно изменить. Нажмите дважды, чтобы узнать больше.</translation> <translation id="8105368624971345109">Отключить</translation> <translation id="8114753159095730575">Файл доступен для скачивания. Параметры указаны в нижней части экрана.</translation> <translation id="8131740175452115882">Подтвердить</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_si.xtb b/ios/chrome/app/strings/resources/ios_strings_si.xtb index 85aaf13..a11b513 100644 --- a/ios/chrome/app/strings/resources/ios_strings_si.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_si.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">ආරක්ෂිත බ්රවුස් කිරීම</translation> <translation id="4281844954008187215">සේවා කොන්දේසි</translation> <translation id="430793432425771671">සියලු දේ සමමුහුර්ත කරන්න</translation> +<translation id="4309403553630140242">වැඩිදුර තොරතුරු සඳහා දෙවරක් තට්ටු කරන්න</translation> <translation id="430967081421617822">සියලු කාලය තුළ</translation> <translation id="4334428914252001502">1 නොකියවූ ලිපියක්.</translation> <translation id="4338650699862464074">Google වෙත ඔබ පිවිසෙන පිටු URL යවයි.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">බෙදා ගන්න…</translation> <translation id="7192050974311852563">ලොග් කිරීම අරඹන්න</translation> <translation id="7203585745079012652">පිළිතුරු ආපසු දෙන්න</translation> +<translation id="7207383424303353046">නව: ඔබගේ පෙරනිමි බ්රව්සර යෙදුම බවට Chrome පත් කිරීමෙන් එහි අඩවි ස්වයංක්රියව විවෘත කරන්න. <ph name="BEGIN_LINK" />සැකසීම් විවෘත කරන්න<ph name="END_LINK" /></translation> <translation id="721597782417389033">වලංගු නොවන කාඩ්පත් අපනාමය</translation> <translation id="7265758999917665941">කිසි විටෙක මෙම වෙබ් අඩවිය සඳහා නැත</translation> <translation id="7272437679830969316">ඔබගේ අනන්යතාව තහවුරු කළ නොහැකිය. මුරපදය පිටපත් නොකරන ලදී.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">බාගැනීම අවසන් වී ඇත</translation> <translation id="8073872304774253879">සෙවීම් සහ බ්රවුස් කිරීම තවත් හොඳ කරන්න</translation> <translation id="8076014560081431679">සුරැකි අඩවි සැකසීම් නොමැකෙනු ඇති අතර එයින් ඔබගේ බ්රවුස් කිරීමේ පුරුදු පිළිබිඹු විය හැක. <ph name="BEGIN_LINK" />තවත් දැන ගන්න<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">මෙම සැකසීම කළමනාකරණය කර ඇත, වැඩි විස්තර සඳහා දෙවරක් තට්ටු කරන්න</translation> <translation id="8105368624971345109">ක්රියා විරහිත කරන්න</translation> <translation id="8114753159095730575">ගොනුව බාගත හැකි වේ. තිරයේ පහළට ආසන්නව විකල්ප තිබේ.</translation> <translation id="8131740175452115882">තහවුරු කරන්න</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb index 8eb20b88..d5016317 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Bezpečné prehliadanie</translation> <translation id="4281844954008187215">Zmluvné podmienky</translation> <translation id="430793432425771671">Synchronizovať všetko</translation> +<translation id="4309403553630140242">Ďalšie informácie získate dvojitým klepnutím</translation> <translation id="430967081421617822">Za celé obdobie</translation> <translation id="4334428914252001502">1 neprečítaný článok.</translation> <translation id="4338650699862464074">Odosiela Googlu webové adresy navštívených stránok.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Zdieľať...</translation> <translation id="7192050974311852563">Spustiť zapisovanie do denníka</translation> <translation id="7203585745079012652">Vysloviť odpovede</translation> +<translation id="7207383424303353046">Novinka: Nastavte si Chrome ako predvolenú aplikáciu prehliadača a otvárajte v ňom weby automaticky. <ph name="BEGIN_LINK" />Otvoriť nastavenia<ph name="END_LINK" /></translation> <translation id="721597782417389033">Neplatná prezývka karty</translation> <translation id="7265758999917665941">Nikdy pre tento web</translation> <translation id="7272437679830969316">Vašu totožnosť nie je možné overiť. Heslo sa neskopírovalo.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Sťahovanie bolo dokončené</translation> <translation id="8073872304774253879">Zlepšovať vyhľadávanie a prehliadanie</translation> <translation id="8076014560081431679">Uložené nastavenia webov sa neodstránia a môžu odrážať vaše návyky prehliadania. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Toto nastavenie je spravované. Viac sa dozviete po dvojitom klepnutí.</translation> <translation id="8105368624971345109">Vypnúť</translation> <translation id="8114753159095730575">Súbor je k dispozícii na stiahnutie. Možnosti sú k dispozícii v dolnej časti obrazovky.</translation> <translation id="8131740175452115882">Potvrdiť</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb index 144c239..aa09641 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Varno brskanje</translation> <translation id="4281844954008187215">Pogoji storitve</translation> <translation id="430793432425771671">Sinhroniziraj vse</translation> +<translation id="4309403553630140242">Dvakrat se dotaknite, če želite več informacij</translation> <translation id="430967081421617822">Od začetka</translation> <translation id="4334428914252001502">1 neprebran članek.</translation> <translation id="4338650699862464074">Googlu pošlje URL-je strani, ki jih obiščete.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Deli z drugimi</translation> <translation id="7192050974311852563">Začni pisanje dnevnika</translation> <translation id="7203585745079012652">Izgovorjava odgovorov</translation> +<translation id="7207383424303353046">Novo: Samodejno odpiranje spletnih mest v Chromu tako, da ga nastavite kot privzeti brskalnik. <ph name="BEGIN_LINK" />Odpiranje nastavitev<ph name="END_LINK" /></translation> <translation id="721597782417389033">Neveljaven vzdevek za kartico</translation> <translation id="7265758999917665941">Nikoli za to spletno mesto</translation> <translation id="7272437679830969316">Identitete ni mogoče preveriti. Geslo ni kopirano.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Prenos končan</translation> <translation id="8073872304774253879">Izboljšanje iskanja in brskanja</translation> <translation id="8076014560081431679">Shranjene nastavitve spletnih mest ne bodo izbrisane in morda odražajo vaše brskalne navade. <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Ta nastavitev je upravljana; dvakrat se dotaknite, če želite več informacij.</translation> <translation id="8105368624971345109">Izklop</translation> <translation id="8114753159095730575">Prenos datotek je na voljo. Možnosti so na voljo pri dnu zaslona.</translation> <translation id="8131740175452115882">Potrdi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_strings_sq.xtb index 6197569..e5f35f9d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sq.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Shfletimi i sigurt</translation> <translation id="4281844954008187215">Kushtet e shërbimit</translation> <translation id="430793432425771671">Sinkronizo gjithçka</translation> +<translation id="4309403553630140242">Trokit dy herë për më shumë informacion</translation> <translation id="430967081421617822">Gjatë të gjithë kohës</translation> <translation id="4334428914252001502">1 artikull i palexuar.</translation> <translation id="4338650699862464074">Dërgon te Google URL-të e faqeve që ti viziton.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Ndaj...</translation> <translation id="7192050974311852563">Fillo regjistrimin</translation> <translation id="7203585745079012652">Thuaji përgjigjet mbrapsht</translation> +<translation id="7207383424303353046">E re: Hap automatikisht sajtet në Chrome duke e bërë atë aplikacionin e parazgjedhur të shfletuesit. <ph name="BEGIN_LINK" />Hap "Cilësimet"<ph name="END_LINK" /></translation> <translation id="721597782417389033">Pseudonim i pavlefshëm karte</translation> <translation id="7265758999917665941">Asnjëherë për këtë faqe</translation> <translation id="7272437679830969316">Nuk mund të verifikohet identiteti yt. Fjalëkalimi nuk u kopjua.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Shkarkimi përfundoi</translation> <translation id="8073872304774253879">Përmirëson kërkimet dhe shfletimin</translation> <translation id="8076014560081431679">Cilësimet e ruajtura të sajteve nuk do të fshihen dhe mund të pasqyrojnë zakonet e tua të shfletimit. <ph name="BEGIN_LINK" />Mëso më shumë<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Ky cilësim menaxhohet, trokit dy herë për më shumë informacion</translation> <translation id="8105368624971345109">Çaktivizo</translation> <translation id="8114753159095730575">Ofrohet shkarkimi i skedarit. Opsionet ofrohen pranë fundit të ekranit.</translation> <translation id="8131740175452115882">Konfirmo</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb index 9b47340..b4804b7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Bezbedno pregledanje</translation> <translation id="4281844954008187215">Uslovi korišćenja usluge</translation> <translation id="430793432425771671">Sinhronizuj sve</translation> +<translation id="4309403553630140242">Dvaput dodirnite za više informacija</translation> <translation id="430967081421617822">Oduvek</translation> <translation id="4334428914252001502">1 nepročitan članak.</translation> <translation id="4338650699862464074">Šalje URL-ove stranica koje posećujete Google-u.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Deli...</translation> <translation id="7192050974311852563">Pokreni evidentiranje</translation> <translation id="7203585745079012652">Izgovaraj odgovore</translation> +<translation id="7207383424303353046">Novo: Otvarajte sajtove u Chrome-u automatski tako što ćete ga podesiti kao podrazumevanu aplikaciju za pregledač. <ph name="BEGIN_LINK" />Otvorite Podešavanja<ph name="END_LINK" /></translation> <translation id="721597782417389033">Nevažeći nadimak kartice</translation> <translation id="7265758999917665941">Nikada za ovaj sajt</translation> <translation id="7272437679830969316">Verifikacija identiteta nije uspela. Lozinka nije kopirana.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Preuzimanje je završeno</translation> <translation id="8073872304774253879">Poboljšaj pretrage i pregledanje</translation> <translation id="8076014560081431679">Nećemo izbrisati sačuvana podešavanja sajtova i ona mogu da odražavaju vaše navike pri pregledanju. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Ovim podešavanjem se upravlja. Dvaput dodirnite za više informacija</translation> <translation id="8105368624971345109">Isključi</translation> <translation id="8114753159095730575">Preuzimanje datoteke nije dostupno. Opcije su navedene u dnu ekrana.</translation> <translation id="8131740175452115882">Potvrdi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb index b59e89a..ae29f8b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Безбедно прегледање</translation> <translation id="4281844954008187215">Услови коришћења услуге</translation> <translation id="430793432425771671">Синхронизуј све</translation> +<translation id="4309403553630140242">Двапут додирните за више информација</translation> <translation id="430967081421617822">Одувек</translation> <translation id="4334428914252001502">1 непрочитан чланак.</translation> <translation id="4338650699862464074">Шаље URL-ове страница које посећујете Google-у.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Дели...</translation> <translation id="7192050974311852563">Покрени евидентирање</translation> <translation id="7203585745079012652">Изговарај одговоре</translation> +<translation id="7207383424303353046">Ново: Отварајте сајтове у Chrome-у аутоматски тако што ћете га подесити као подразумевану апликацију за прегледач. <ph name="BEGIN_LINK" />Отворите Подешавања<ph name="END_LINK" /></translation> <translation id="721597782417389033">Неважећи надимак картице</translation> <translation id="7265758999917665941">Никада за овај сајт</translation> <translation id="7272437679830969316">Верификација идентитета није успела. Лозинка није копирана.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Преузимање је завршено</translation> <translation id="8073872304774253879">Побољшај претраге и прегледање</translation> <translation id="8076014560081431679">Нећемо избрисати сачувана подешавања сајтова и она могу да одражавају ваше навике при прегледању. <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Овим подешавањем се управља. Двапут додирните за више информација</translation> <translation id="8105368624971345109">Искључи</translation> <translation id="8114753159095730575">Преузимање датотеке није доступно. Опције су наведене у дну екрана.</translation> <translation id="8131740175452115882">Потврди</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb index 37c59bf8..64d1bd6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Säker webbsökning</translation> <translation id="4281844954008187215">Användarvillkor</translation> <translation id="430793432425771671">Synkronisera allt</translation> +<translation id="4309403553630140242">Tryck snabbt två gånger för mer information</translation> <translation id="430967081421617822">Sedan kontot skapades</translation> <translation id="4334428914252001502">1 oläst artikel.</translation> <translation id="4338650699862464074">Skickar webbadresser till sidor du besöker till Google.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Dela ...</translation> <translation id="7192050974311852563">Starta loggning</translation> <translation id="7203585745079012652">Läs upp svaren</translation> +<translation id="7207383424303353046">Nyhet! Öppna automatiskt webbplatser i Chrome genom att ställa in Chrome som standardwebbläsarapp. <ph name="BEGIN_LINK" />Öppna inställningarna<ph name="END_LINK" /></translation> <translation id="721597782417389033">Ogiltigt kortnamn</translation> <translation id="7265758999917665941">Aldrig på den här webbplatsen</translation> <translation id="7272437679830969316">Det gick inte att verifiera din identitet. Lösenordet har inte kopierats.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Nedladdningen är klar</translation> <translation id="8073872304774253879">Förbättra sökningar och surfande</translation> <translation id="8076014560081431679">Sparade webbplatsinställningar raderas inte och kan visa dina surfvanor. <ph name="BEGIN_LINK" />Läs mer<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Den här inställningen hanteras – tryck snabbt två gånger för mer information</translation> <translation id="8105368624971345109">Inaktivera</translation> <translation id="8114753159095730575">En filnedladdning är tillgänglig. Alternativ visas nära skärmens nederkant.</translation> <translation id="8131740175452115882">Bekräfta</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb index 25b2e4ad..b4d8a3b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Kuvinjari Salama</translation> <translation id="4281844954008187215">Sheria na Masharti</translation> <translation id="430793432425771671">Sawazisha Kila kitu</translation> +<translation id="4309403553630140242">Gusa mara mbili ili upate maelezo zaidi</translation> <translation id="430967081421617822">Muda Wote</translation> <translation id="4334428914252001502">Hujasoma makala 1.</translation> <translation id="4338650699862464074">Hutuma URL za kurasa unazotembelea kwa Google.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Shiriki...</translation> <translation id="7192050974311852563">Anza Kuleta Kumbukumbu</translation> <translation id="7203585745079012652">Tamka Majibu</translation> +<translation id="7207383424303353046">Mpya: Fungua tovuti kiotomatiki katika Chrome kwa kuiweka iwe Programu Chaguomsingi ya Kuvinjari. <ph name="BEGIN_LINK" />Fungua Mipangilio<ph name="END_LINK" /></translation> <translation id="721597782417389033">Jina la Kuwakilisha Kadi si Sahihi</translation> <translation id="7265758999917665941">Isikumbuke Kamwe Katika Tovuti Hii</translation> <translation id="7272437679830969316">Utambulisho wako haujathibitishwa. Nenosiri halijanakiliwa.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Imemaliza kupakua</translation> <translation id="8073872304774253879">Boresha Utafutaji na Kuvinjari</translation> <translation id="8076014560081431679">Mipangilio ya tovuti iliyohifadhiwa haitafutwa na inaweza kuonyesha mtindo wako wa kuvinjari. <ph name="BEGIN_LINK" />Pata maelezo zaidi<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Mipangilio hii inadhibitiwa, gusa mara mbili ili upate maelezo zaidi</translation> <translation id="8105368624971345109">Zima</translation> <translation id="8114753159095730575">Unaweza kupakua faili. Chaguo zinapatikana karibu na sehemu ya chini ya skrini.</translation> <translation id="8131740175452115882">Thibitisha</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb index c25923f..34679c1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -97,6 +97,7 @@ <translation id="1965935827552890526">திறந்திருக்கும் மற்றொரு Chrome சாளரத்தில் நீங்கள் செய்துகொண்டிருந்தவற்றை நிறைவுசெய்யுங்கள்.</translation> <translation id="1974060860693918893">மேம்பட்டவை</translation> <translation id="1989112275319619282">உலாவு</translation> +<translation id="1992734845128748707">இயல்பு உலாவியை மாற்றுங்கள்…</translation> <translation id="2015722694326466240">கடவுச்சொற்களைப் பார்க்க, முதலில் உங்கள் சாதனத்தில் கடவுக்குறியீட்டை அமைக்க வேண்டும்.</translation> <translation id="2073572773299281212"><ph name="DAYS" /> நாட்களுக்கு முன் பயன்படுத்தியுள்ளார்</translation> <translation id="2074131957428911366">எவற்றை ஒத்திசைக்க வேண்டும் என்பதை <ph name="BEGIN_LINK" />அமைப்புகளில்<ph name="END_LINK" /> எப்போது வேண்டுமானாலும் தேர்வுசெய்யலாம்.</translation> @@ -560,6 +561,7 @@ <translation id="7189598951263744875">பகிர்...</translation> <translation id="7192050974311852563">பதிவுசெய்</translation> <translation id="7203585745079012652">பதில்களை மீண்டும் படி</translation> +<translation id="7207383424303353046">புதிது: Chromeமை உங்கள் இயல்பு உலாவி ஆப்ஸாக அமைப்பதன் மூலம் தளங்கள் தானாகவே அதில் திறக்கப்படும். <ph name="BEGIN_LINK" />அமைப்புகளைத் திற<ph name="END_LINK" /></translation> <translation id="721597782417389033">கார்டின் புனைப்பெயர் தவறானது</translation> <translation id="7265758999917665941">இந்தத் தளத்திற்கு எப்போதும் வேண்டாம்</translation> <translation id="7272437679830969316">அடையாளத்தைச் சரிபார்க்க முடியவில்லை. கடவுச்சொல் நகலெடுக்கப்படவில்லை.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index b9f202d..10038614 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">సురక్షిత బ్రౌజింగ్</translation> <translation id="4281844954008187215">సేవా నిబంధనలు</translation> <translation id="430793432425771671">ప్రతి ఒక్కటీ సమకాలీకరించండి</translation> +<translation id="4309403553630140242">మరింత సమాచారం కోసం రెండుసార్లు నొక్కండి</translation> <translation id="430967081421617822">మొత్తం సమయం</translation> <translation id="4334428914252001502">1 చదవని కథనం ఉంది.</translation> <translation id="4338650699862464074">మీరు సందర్శించే పేజీల URLలను Googleకు పంపుతుంది.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">భాగస్వామ్యం చేయి...</translation> <translation id="7192050974311852563">లాగ్ చేయడం ప్రారంభించు</translation> <translation id="7203585745079012652">సమాధానాలను చదివి వినిపించు</translation> +<translation id="7207383424303353046">కొత్తది: Chromeను మీ ఆటోమేటిక్ బ్రౌజర్ యాప్గా చేయడం ద్వారా, సైట్లను దానిలో ఆటోమేటిక్గా తెరవండి. <ph name="BEGIN_LINK" />సెట్టింగ్లను తెరవండి<ph name="END_LINK" /></translation> <translation id="721597782417389033">కార్డ్ మారుపేరు చెల్లదు</translation> <translation id="7265758999917665941">ఈ సైట్ కోసం ఎప్పటికీ వద్దు</translation> <translation id="7272437679830969316">మీ గుర్తింపును ధృవీకరించడం సాధ్యపడలేదు. పాస్వర్డ్ కాపీ చేయబడలేదు.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">డౌన్లోడ్ పూర్తయింది</translation> <translation id="8073872304774253879">సెర్చ్లను, బ్రౌజింగ్ను మెరుగుపరచండి</translation> <translation id="8076014560081431679">సేవ్ చేసిన సైట్ సెట్టింగ్లు తొలగించబడవు, ఇవి మీ బ్రౌజింగ్ అలవాట్లను ప్రదర్శించవచ్చు. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">ఈ సెట్టింగ్ మేనేజ్ చేయబడుతుంది, మరింత సమాచారం కోసం రెండుసార్లు నొక్కండి</translation> <translation id="8105368624971345109">ఆఫ్ చేయి</translation> <translation id="8114753159095730575">ఫైల్ డౌన్లోడ్ అందుబాటులో ఉంది. ఎంపికలు స్క్రీన్ దిగువ భాగంలో అందుబాటులో ఉంటాయి.</translation> <translation id="8131740175452115882">నిర్ధారించు</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb index b6eb186d..d1922d5 100644 --- a/ios/chrome/app/strings/resources/ios_strings_th.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Google Safe Browsing</translation> <translation id="4281844954008187215">ข้อกำหนดในการให้บริการ</translation> <translation id="430793432425771671">ซิงค์ทุกอย่าง</translation> +<translation id="4309403553630140242">แตะสองครั้งเพื่อดูข้อมูลเพิ่มเติม</translation> <translation id="430967081421617822">ตั้งแต่ต้น</translation> <translation id="4334428914252001502">บทความที่ยังไม่ได้อ่าน 1 รายการ</translation> <translation id="4338650699862464074">ส่ง URL ของหน้าที่คุณเข้าชมไปยัง Google</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">แชร์...</translation> <translation id="7192050974311852563">เริ่มต้นการบันทึก</translation> <translation id="7203585745079012652">พูดคำตอบกลับ</translation> +<translation id="7207383424303353046">ใหม่: เปิดเว็บไซต์ใน Chrome โดยอัตโนมัติด้วยการตั้งเป็นแอปเบราว์เซอร์เริ่มต้น <ph name="BEGIN_LINK" />เปิดการตั้งค่า<ph name="END_LINK" /></translation> <translation id="721597782417389033">ชื่อเล่นของบัตรไม่ถูกต้อง</translation> <translation id="7265758999917665941">ไม่จดจำสำหรับเว็บไซต์นี้</translation> <translation id="7272437679830969316">ยืนยันตัวตนของคุณไม่ได้ คัดลอกรหัสผ่านไม่สำเร็จ</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">ดาวน์โหลดเสร็จแล้ว</translation> <translation id="8073872304774253879">ปรับปรุงการค้นหาและการท่องเว็บให้ดียิ่งขึ้น</translation> <translation id="8076014560081431679">การตั้งค่าเว็บไซต์ที่บันทึกไว้จะไม่ถูกลบและอาจส่งผลกับลักษณะการท่องเว็บของคุณ <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">การตั้งค่านี้ได้รับการจัดการ แตะสองครั้งเพื่อดูข้อมูลเพิ่มเติม</translation> <translation id="8105368624971345109">ปิด</translation> <translation id="8114753159095730575">การดาวน์โหลดไฟล์พร้อมใช้งาน มีตัวเลือกอยู่ทางด้านล่างของหน้าจอ</translation> <translation id="8131740175452115882">ยืนยัน</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb index 20146ee..76756a4b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Güvenli Tarama</translation> <translation id="4281844954008187215">Hizmet Şartları</translation> <translation id="430793432425771671">Her Şeyi Senkronize Et</translation> +<translation id="4309403553630140242">Daha fazla bilgi için iki kez dokunun</translation> <translation id="430967081421617822">Tüm Zamanlar</translation> <translation id="4334428914252001502">1 okunmamış makale.</translation> <translation id="4338650699862464074">Ziyaret ettiğiniz sayfaların URL'lerini Google'a gönderir.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Paylaş...</translation> <translation id="7192050974311852563">Günlüğe Kaydetmeyi Başlat</translation> <translation id="7203585745079012652">Yanıtı Sesli Söyle</translation> +<translation id="7207383424303353046">Yeni: Varsayılan Tarayıcı Uygulamanız yaparak siteleri Chrome'da otomatik bir şekilde açın. <ph name="BEGIN_LINK" />Ayarları Aç<ph name="END_LINK" /></translation> <translation id="721597782417389033">Kart İçin Geçersiz Takma Ad</translation> <translation id="7265758999917665941">Bu Site İçin Hiçbir Zaman</translation> <translation id="7272437679830969316">Kimliğiniz doğrulanamıyor. Şifre kopyalanmadı.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">İndirme tamamlandı</translation> <translation id="8073872304774253879">Aramaları ve Göz Atmayı Daha İyi Yap</translation> <translation id="8076014560081431679">Kayıtlı site ayarları silinmez ve web'e göz atma alışkanlıklarınızı yansıtabilir. <ph name="BEGIN_LINK" />Daha fazla bilgi edinin<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Bu ayar yönetilir. Daha fazla bilgi için iki kez dokunun.</translation> <translation id="8105368624971345109">Kapat</translation> <translation id="8114753159095730575">Dosya indirme işlevi kullanılabilir. Seçenekler ekranın alt tarafındadır.</translation> <translation id="8131740175452115882">Onayla</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb index 78a1f7c..193eef67 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Безпечний перегляд</translation> <translation id="4281844954008187215">Умови використання</translation> <translation id="430793432425771671">Синхронізувати все</translation> +<translation id="4309403553630140242">Двічі торкніться, щоб дізнатися більше</translation> <translation id="430967081421617822">Увесь час</translation> <translation id="4334428914252001502">1 непрочитана стаття.</translation> <translation id="4338650699862464074">Надсилає в Google URL-адреси відвіданих сторінок.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Поділитися...</translation> <translation id="7192050974311852563">Почати ведення журналів</translation> <translation id="7203585745079012652">Озвучувати відповіді</translation> +<translation id="7207383424303353046">Новинка: щоб автоматично відкривати сайти в додатку Chrome, установіть його своїм веб-переглядачем за умовчанням. <ph name="BEGIN_LINK" />Відкрити налаштування<ph name="END_LINK" /></translation> <translation id="721597782417389033">Недійсний псевдонім картки</translation> <translation id="7265758999917665941">Ніколи для цього сайту</translation> <translation id="7272437679830969316">Не вдалося підтвердити особу. Пароль не скопійовано.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Завантаження завершено</translation> <translation id="8073872304774253879">Покращувати пошук і веб-перегляд</translation> <translation id="8076014560081431679">Збережені налаштування, які можуть стосуватися ваших зацікавлень в Інтернеті, не буде видалено. <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Цим налаштуванням керує адміністратор. Двічі торкніться, щоб дізнатися більше</translation> <translation id="8105368624971345109">Вимкнути</translation> <translation id="8114753159095730575">Доступне завантаження файлу. Параметри можна знайти внизу екрана.</translation> <translation id="8131740175452115882">Підтвердити</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_strings_ur.xtb index 4598a042..48f59909 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ur.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">اشتراک کریں…</translation> <translation id="7192050974311852563">لاگ کرنا شروع کریں</translation> <translation id="7203585745079012652">جوابات دوبارہ بولیں</translation> +<translation id="7207383424303353046">نیا: Chrome کو اپنا ڈیفالٹ براؤزر ایپ بنا کر سائٹس کو اس میں خودکار طور پر کھولیں۔ سیٹنگیں کھولیں۔ <ph name="BEGIN_LINK" />ترتیبات کھولیں<ph name="END_LINK" /></translation> <translation id="721597782417389033">کارڈ کا غلط عرفی نام</translation> <translation id="7265758999917665941">اس سائٹ کیلئے کبھی نہیں</translation> <translation id="7272437679830969316">آپ کی شناخت کی توثیق نہیں کی جا سکتی۔ پاسورڈ کاپی نہیں ہوا۔</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uz.xtb b/ios/chrome/app/strings/resources/ios_strings_uz.xtb index f91c70f..30dd8da 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uz.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uz.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">Ulashish…</translation> <translation id="7192050974311852563">Yozib olishni boshlash</translation> <translation id="7203585745079012652">Qidiruv natijalari o‘qilsin</translation> +<translation id="7207383424303353046">Yangi: Saytlar Chrome brauzerida avtomatik ochilishi uchun uni birlamchi brauzer etib tayinlash kifoya. <ph name="BEGIN_LINK" />Sozlamalarni ochish<ph name="END_LINK" /></translation> <translation id="721597782417389033">Karta nomi yaroqsiz</translation> <translation id="7265758999917665941">Bu saytda hech qachon</translation> <translation id="7272437679830969316">Shaxsingiz tasdiqlanmadi. Paroldan nusxa olinmadi.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb index 60215438..ec5162a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">Chia sẻ...</translation> <translation id="7192050974311852563">Bắt đầu ghi nhật ký</translation> <translation id="7203585745079012652">Trả lời bằng giọng nói</translation> +<translation id="7207383424303353046">Mới: Tự động mở các trang web trên Chrome bằng cách đặt Chrome làm Ứng dụng trình duyệt mặc định. <ph name="BEGIN_LINK" />Mở phần Cài đặt<ph name="END_LINK" /></translation> <translation id="721597782417389033">Biệt hiệu của thẻ không hợp lệ</translation> <translation id="7265758999917665941">Không bao giờ đối với trang web này</translation> <translation id="7272437679830969316">Không thể xác minh danh tính của bạn. Chưa sao chép mật khẩu.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb index bc92399a..1b7d4c4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">分享...</translation> <translation id="7192050974311852563">开始生成日志</translation> <translation id="7203585745079012652">说出答案</translation> +<translation id="7207383424303353046">新功能:将 Chrome 设为默认浏览器应用,即可自动在 Chrome 中打开网站。<ph name="BEGIN_LINK" />打开“设置”<ph name="END_LINK" /></translation> <translation id="721597782417389033">卡的昵称无效</translation> <translation id="7265758999917665941">此网站一律不保存密码</translation> <translation id="7272437679830969316">无法验证您的身份。未复制密码。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb index aa4324fe..1743d1690 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">分享...</translation> <translation id="7192050974311852563">開始記錄</translation> <translation id="7203585745079012652">語音答覆</translation> +<translation id="7207383424303353046">新功能:將 Chrome 設為預設瀏覽器應用程式,即可自動以 Chrome 開啟網站。<ph name="BEGIN_LINK" />開啟設定<ph name="END_LINK" /></translation> <translation id="721597782417389033">無效的信用卡暱稱</translation> <translation id="7265758999917665941">一律不儲存此網站的密碼</translation> <translation id="7272437679830969316">無法驗證您的身分。未複製密碼。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb index 843189a1..0c07169 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -561,6 +561,7 @@ <translation id="7189598951263744875">分享...</translation> <translation id="7192050974311852563">開始記錄</translation> <translation id="7203585745079012652">語音答覆</translation> +<translation id="7207383424303353046">新功能:將 Chrome 設為預設的瀏覽器應用程式,即可自動在 Chrome 中開啟網站。<ph name="BEGIN_LINK" />開啟設定<ph name="END_LINK" /></translation> <translation id="721597782417389033">卡片暱稱無效</translation> <translation id="7265758999917665941">一律不儲存這個網站的密碼</translation> <translation id="7272437679830969316">無法驗證你的身分,因此未複製密碼。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zu.xtb b/ios/chrome/app/strings/resources/ios_strings_zu.xtb index 02113d5..877229c6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zu.xtb
@@ -293,6 +293,7 @@ <translation id="4277990410970811858">Ukuphequlula okuphephile</translation> <translation id="4281844954008187215">Imigomo yesevisi</translation> <translation id="430793432425771671">Vumelanisa yonke into</translation> +<translation id="4309403553630140242">Thepha kabili ukuze uthole olunye ulwazi</translation> <translation id="430967081421617822">Sonke isikhathi</translation> <translation id="4334428914252001502">1 i-athikili engafundiwe.</translation> <translation id="4338650699862464074">Ithumela ama-URL amakhasi owavakashelayo ku-Google.</translation> @@ -561,6 +562,7 @@ <translation id="7189598951263744875">Yabelana...</translation> <translation id="7192050974311852563">Qala ukuloga</translation> <translation id="7203585745079012652">Khulumela emuva izimpendulo</translation> +<translation id="7207383424303353046">Okusha: Vula amasayithi ku-Chrome ngokuzenzekelayo ngokwenza kube Uhlelo Lwakho Lokusebenza Lwesiphequluli Oluzenzakalelayo. <ph name="BEGIN_LINK" />Vula Amasethingi<ph name="END_LINK" /></translation> <translation id="721597782417389033">Isiteketiso Sekhadi Esingavumelekile</translation> <translation id="7265758999917665941">Ungalokothi kuleli sayithi</translation> <translation id="7272437679830969316">Ayikwazi ukuqinisekisa ubunikazi bakho. Iphasiwedi ayikopishiwe.</translation> @@ -638,6 +640,7 @@ <translation id="8073670137947914548">Ukulanda kuqedile</translation> <translation id="8073872304774253879">Yenza usesho nokuphequlula kube ngcono</translation> <translation id="8076014560081431679">Izilungiselelo ezilondoloziwe zesayithi ngeke zize zisuswe futhi zingabonisa imikhuba yakho yokuphequlula. <ph name="BEGIN_LINK" />Funda kabanzi<ph name="END_LINK" /></translation> +<translation id="8079602123447022758">Leli sethingi liphethwe, thepha kabili ukuthola ulwazi olwengeziwe</translation> <translation id="8105368624971345109">Vala</translation> <translation id="8114753159095730575">Ukulanda ifayela kuyatholakala. Izinketho zitholakala eduze kwangaphansi kwesikrini.</translation> <translation id="8131740175452115882">Qinisekisa</translation>
diff --git a/ios/chrome/browser/metrics/BUILD.gn b/ios/chrome/browser/metrics/BUILD.gn index 56fdc65..50c0a8f 100644 --- a/ios/chrome/browser/metrics/BUILD.gn +++ b/ios/chrome/browser/metrics/BUILD.gn
@@ -268,10 +268,6 @@ import("//components/metrics/generate_expired_histograms_array.gni") generate_expired_histograms_array("expired_histograms_array") { - inputs = [ - "//tools/metrics/histograms/histograms.xml", - "//tools/metrics/histograms/enums.xml", - ] namespace = "" header_filename = "ios_expired_histograms_array.h" major_branch_date_filepath = "//chrome/MAJOR_BRANCH_DATE"
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_nl.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_nl.xtb index 46660a1..3ea80d0d 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_nl.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_nl.xtb
@@ -6,19 +6,19 @@ <translation id="1977167321677356409">Wachtwoord</translation> <translation id="2712586044587587728">Je Chrome-wachtwoorden zijn beschikbaar voor gebruik in andere apps. Je kunt dit op elk moment uitschakelen in de app Instellingen.</translation> <translation id="3580107423202590938">Geen Chrome-wachtwoorden</translation> -<translation id="3753678329684433031">Chrome-wachtwoord automatisch aanvullen</translation> +<translation id="3753678329684433031">Chrome-wachtwoord automatisch invullen</translation> <translation id="3789385946721385622">Gebruikersnaam</translation> <translation id="4064278913989596727">Help</translation> <translation id="4241076354893135477">Geen Chrome-wachtwoorden</translation> <translation id="5118084770294029567">Alle wachtwoorden</translation> <translation id="5148402015874782921">Annuleren</translation> <translation id="5366190986669335938">Krijg vanuit elke app toegang tot de wachtwoorden die je opslaat in Chrome.</translation> -<translation id="579113627088729016">'Automatisch aanvullen' inschakelen</translation> +<translation id="579113627088729016">'Automatisch invullen' inschakelen</translation> <translation id="5824290706342306555">Als je aan de slag wilt gaan, sla je een aantal wachtwoorden op in Chrome of log je in met je Google-account.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7013045517548357694">Toegang krijgen tot wachtwoorden...</translation> <translation id="7021375594770280489">Meer informatie</translation> -<translation id="7294706895582948780">Chrome-wachtwoorden automatisch aanvullen</translation> +<translation id="7294706895582948780">Chrome-wachtwoorden automatisch invullen</translation> <translation id="7362314760212854110">Je bent onlangs uitgelogd van je Google-account. Log in bij Chrome om je wachtwoorden te bekijken.</translation> <translation id="8190452200642501331">Details weergeven</translation> <translation id="8219905600827687498">Voorgestelde wachtwoorden</translation>
diff --git a/media/audio/audio_thread_hang_monitor.h b/media/audio/audio_thread_hang_monitor.h index 363dd69..89a3758 100644 --- a/media/audio/audio_thread_hang_monitor.h +++ b/media/audio/audio_thread_hang_monitor.h
@@ -21,7 +21,6 @@ #include "base/time/time.h" #include "base/timer/timer.h" #include "media/base/media_export.h" -#include "media/base/media_switches.h" namespace base { class TickClock;
diff --git a/media/base/BUILD.gn b/media/base/BUILD.gn index 94712ff3..20b75e8 100644 --- a/media/base/BUILD.gn +++ b/media/base/BUILD.gn
@@ -395,6 +395,7 @@ "CoreVideo.framework", "CoreFoundation.framework", "CoreGraphics.framework", + "IOSurface.framework", ] } else if (is_win) { sources += [ "user_input_monitor_win.cc" ]
diff --git a/media/base/android/BUILD.gn b/media/base/android/BUILD.gn index 16425c1..785bf0c70 100644 --- a/media/base/android/BUILD.gn +++ b/media/base/android/BUILD.gn
@@ -19,13 +19,6 @@ "//media/filters", ] - if (is_android) { - visibility += [ - "//gpu/command_buffer/service:gles2_sources", - "//gpu/command_buffer/service:android_texture_owner_unittests", - ] - } - sources = [ "android_cdm_factory.cc", "android_cdm_factory.h",
diff --git a/media/base/android/media_codec_util.cc b/media/base/android/media_codec_util.cc index 45c08d5..ab1975a 100644 --- a/media/base/android/media_codec_util.cc +++ b/media/base/android/media_codec_util.cc
@@ -416,16 +416,4 @@ "OMX.Exynos.avc.dec.secure" == codec_name); } -// static -bool MediaCodecUtil::LimitAImageReaderMaxSizeToOne() { - // Using MIBOX for both MiBox 4k and MiBox S 4k devices. - std::string disabled_model = "MIBOX"; - const std::string model(base::android::BuildInfo::GetInstance()->model()); - if (base::StartsWith(model, disabled_model, - base::CompareCase::INSENSITIVE_ASCII)) { - return true; - } - return false; -} - } // namespace media
diff --git a/media/base/android/media_codec_util.h b/media/base/android/media_codec_util.h index b000efb..5fd273d 100644 --- a/media/base/android/media_codec_util.h +++ b/media/base/android/media_codec_util.h
@@ -131,11 +131,6 @@ // WARNING: This can't be used from the renderer process since it attempts to // create a MediaCodec (which requires permissions) to get the codec name. static bool CodecNeedsFlushWorkaround(MediaCodecBridge* codec); - - // Some devices do not support more than 1 image to be acquired from the - // AImageReader.(crbug.com/1051705). This method returns true for those - // devices. - static bool LimitAImageReaderMaxSizeToOne(); }; } // namespace media
diff --git a/media/base/video_frame.cc b/media/base/video_frame.cc index 943f8167..20da65f 100644 --- a/media/base/video_frame.cc +++ b/media/base/video_frame.cc
@@ -647,6 +647,77 @@ #if defined(OS_MAC) // static +scoped_refptr<VideoFrame> VideoFrame::WrapIOSurface( + gfx::GpuMemoryBufferHandle handle, + const gfx::Rect& visible_rect, + base::TimeDelta timestamp) { + if (handle.type != gfx::GpuMemoryBufferType::IO_SURFACE_BUFFER) { + DLOG(ERROR) << "Non-IOSurface handle."; + return nullptr; + } + if (!handle.mach_port) { + DLOG(ERROR) << "Invalid mach port."; + return nullptr; + } + base::ScopedCFTypeRef<IOSurfaceRef> io_surface( + IOSurfaceLookupFromMachPort(handle.mach_port)); + if (!io_surface) { + DLOG(ERROR) << "Unable to lookup IOSurface."; + return nullptr; + } + + // Only support NV12 IOSurfaces. + const OSType cv_pixel_format = IOSurfaceGetPixelFormat(io_surface); + if (cv_pixel_format != kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange) { + DLOG(ERROR) << "Invalid (non-NV12) pixel format."; + return nullptr; + } + const VideoPixelFormat pixel_format = PIXEL_FORMAT_NV12; + + // Retrieve the layout parameters for |io_surface_|. + const size_t num_planes = IOSurfaceGetPlaneCount(io_surface); + const gfx::Size size(IOSurfaceGetWidth(io_surface), + IOSurfaceGetHeight(io_surface)); + std::vector<int32_t> strides; + for (size_t i = 0; i < num_planes; ++i) + strides.push_back(IOSurfaceGetBytesPerRowOfPlane(io_surface, i)); + base::Optional<VideoFrameLayout> layout = + media::VideoFrameLayout::CreateWithStrides(pixel_format, size, strides); + if (!layout) { + DLOG(ERROR) << "Invalid layout."; + return nullptr; + } + + const StorageType storage_type = STORAGE_UNOWNED_MEMORY; + if (!IsValidConfig(pixel_format, storage_type, size, visible_rect, size)) { + DLOG(ERROR) << "Invalid config."; + return nullptr; + } + + // Lock the IOSurface for CPU read access. After the VideoFrame is created, + // add a destruction callback to unlock the IOSurface. + kern_return_t lock_result = + IOSurfaceLock(io_surface, kIOSurfaceLockReadOnly, nullptr); + if (lock_result != kIOReturnSuccess) { + DLOG(ERROR) << "Failed to lock IOSurface."; + return nullptr; + } + auto unlock_lambda = [](base::ScopedCFTypeRef<IOSurfaceRef> io_surface) { + IOSurfaceUnlock(io_surface, kIOSurfaceLockReadOnly, nullptr); + }; + + scoped_refptr<VideoFrame> frame = + new VideoFrame(*layout, storage_type, visible_rect, size, timestamp); + for (size_t i = 0; i < num_planes; ++i) { + frame->data_[i] = reinterpret_cast<uint8_t*>( + IOSurfaceGetBaseAddressOfPlane(io_surface, i)); + } + frame->AddDestructionObserver( + base::BindOnce(unlock_lambda, std::move(io_surface))); + return frame; +} + +// static scoped_refptr<VideoFrame> VideoFrame::WrapCVPixelBuffer( CVPixelBufferRef cv_pixel_buffer, base::TimeDelta timestamp) {
diff --git a/media/base/video_frame.h b/media/base/video_frame.h index ee8f9e0..a1e9e07 100644 --- a/media/base/video_frame.h +++ b/media/base/video_frame.h
@@ -47,6 +47,7 @@ namespace gfx { class GpuMemoryBuffer; +struct GpuMemoryBufferHandle; } namespace media { @@ -277,6 +278,13 @@ static scoped_refptr<VideoFrame> WrapCVPixelBuffer( CVPixelBufferRef cv_pixel_buffer, base::TimeDelta timestamp); + + // Wraps a provided IOSurface with a VideoFrame. The IOSurface is retained + // and locked for the lifetime of the VideoFrame. + static scoped_refptr<VideoFrame> WrapIOSurface( + gfx::GpuMemoryBufferHandle handle, + const gfx::Rect& visible_rect, + base::TimeDelta timestamp); #endif // Wraps |frame|. |visible_rect| must be a sub rect within
diff --git a/media/gpu/android/video_frame_factory_impl.cc b/media/gpu/android/video_frame_factory_impl.cc index 1c7a4511..70b6698 100644 --- a/media/gpu/android/video_frame_factory_impl.cc +++ b/media/gpu/android/video_frame_factory_impl.cc
@@ -6,6 +6,7 @@ #include <memory> +#include "base/android/android_image_reader_compat.h" #include "base/bind.h" #include "base/bind_helpers.h" #include "base/callback.h" @@ -19,7 +20,6 @@ #include "gpu/command_buffer/service/shared_context_state.h" #include "gpu/command_buffer/service/texture_owner.h" #include "gpu/config/gpu_finch_features.h" -#include "media/base/android/media_codec_util.h" #include "media/base/bind_to_current_loop.h" #include "media/base/media_switches.h" #include "media/base/video_frame.h" @@ -45,7 +45,7 @@ if (features::IsAImageReaderEnabled() && base::FeatureList::IsEnabled(media::kWebViewZeroCopyVideo) && - !media::MediaCodecUtil::LimitAImageReaderMaxSizeToOne()) { + !base::android::AndroidImageReader::LimitAImageReaderMaxSizeToOne()) { return VideoFrameMetadata::CopyMode::kCopyMailboxesOnly; } else { return VideoFrameMetadata::CopyMode::kCopyToNewTexture; @@ -58,7 +58,7 @@ if (copy_mode == VideoFrameMetadata::kCopyMailboxesOnly) { DCHECK(features::IsAImageReaderEnabled() && base::FeatureList::IsEnabled(media::kWebViewZeroCopyVideo) && - !media::MediaCodecUtil::LimitAImageReaderMaxSizeToOne()); + !base::android::AndroidImageReader::LimitAImageReaderMaxSizeToOne()); return gpu::TextureOwner::Mode::kAImageReaderInsecureMultithreaded; }
diff --git a/media/gpu/vaapi/vaapi_dmabuf_video_frame_mapper.cc b/media/gpu/vaapi/vaapi_dmabuf_video_frame_mapper.cc index b39f4df..e23f1ff 100644 --- a/media/gpu/vaapi/vaapi_dmabuf_video_frame_mapper.cc +++ b/media/gpu/vaapi/vaapi_dmabuf_video_frame_mapper.cc
@@ -97,12 +97,13 @@ std::vector<std::unique_ptr<uint16_t[]>> p016le_buffers(kNumPlanes); if (src_video_frame->format() == PIXEL_FORMAT_P016LE) { for (size_t i = 0; i < kNumPlanes; i++) { - p016le_buffers[i] = std::make_unique<uint16_t[]>(planes[i].size); + const gfx::Size plane_size = VideoFrame::PlaneSize( + PIXEL_FORMAT_P016LE, i, src_video_frame->visible_rect().size()); + p016le_buffers[i] = std::make_unique<uint16_t[]>(planes[i].size / 2); ConvertP010ToP016LE(reinterpret_cast<const uint16_t*>(addrs[i]), planes[i].stride, p016le_buffers[i].get(), - planes[i].stride, - src_video_frame->visible_rect().width(), - src_video_frame->visible_rect().height()); + planes[i].stride, plane_size.width(), + plane_size.height()); addrs[i] = reinterpret_cast<uint8_t*>(p016le_buffers[i].get()); } }
diff --git a/media/renderers/DEPS b/media/renderers/DEPS index 740a6a35..b2e1ca7 100644 --- a/media/renderers/DEPS +++ b/media/renderers/DEPS
@@ -7,6 +7,7 @@ "+media/base/bind_to_current_loop.h", "+media/base/speech_recognition_client.h", "+third_party/khronos/GLES2", + "+third_party/khronos/GLES3", "+ul/gl/gl_enums.h", ]
diff --git a/media/renderers/video_resource_updater.cc b/media/renderers/video_resource_updater.cc index 12bbd7c2..bea2c88 100644 --- a/media/renderers/video_resource_updater.cc +++ b/media/renderers/video_resource_updater.cc
@@ -46,6 +46,7 @@ #include "media/video/half_float_maker.h" #include "third_party/khronos/GLES2/gl2.h" #include "third_party/khronos/GLES2/gl2ext.h" +#include "third_party/khronos/GLES3/gl3.h" #include "third_party/libyuv/include/libyuv.h" #include "third_party/skia/include/core/SkCanvas.h" #include "ui/gfx/geometry/size_conversions.h" @@ -1163,10 +1164,12 @@ const size_t bytes_per_row = viz::ResourceSizes::CheckedWidthInBytes<size_t>( resource_size_pixels.width(), plane_resource_format); + // Use 4-byte row alignment (OpenGL default) for upload performance. // Assuming that GL_UNPACK_ALIGNMENT has not changed from default. - const size_t upload_image_stride = - cc::MathUtil::CheckedRoundUp<size_t>(bytes_per_row, 4u); + constexpr size_t kDefaultUnpackAlignment = 4; + const size_t upload_image_stride = cc::MathUtil::CheckedRoundUp<size_t>( + bytes_per_row, kDefaultUnpackAlignment); const size_t resource_bit_depth = static_cast<size_t>(viz::BitsPerPixel(plane_resource_format)); @@ -1174,20 +1177,35 @@ // Data downshifting is needed if the resource bit depth is not enough. const bool needs_bit_downshifting = bits_per_channel > resource_bit_depth; - // A copy to adjust strides is needed if those are different and both source - // and destination have the same bit depth. - const bool needs_stride_adaptation = - (bits_per_channel == resource_bit_depth) && - (upload_image_stride != static_cast<size_t>(video_stride_bytes)); - // We need to convert the incoming data if we're transferring to half float, // if the need a bit downshift or if the strides need to be reconciled. - const bool needs_conversion = plane_resource_format == viz::LUMINANCE_F16 || - needs_bit_downshifting || - needs_stride_adaptation; + const bool needs_conversion = + plane_resource_format == viz::LUMINANCE_F16 || needs_bit_downshifting; + + constexpr size_t kDefaultUnpackRowLength = 0; + GLuint unpack_row_length = kDefaultUnpackRowLength; + GLuint unpack_alignment = kDefaultUnpackAlignment; const uint8_t* pixels; + if (!needs_conversion) { + // Stride adaptation is needed if source and destination strides are + // different but they have the same bit depth. + const bool needs_stride_adaptation = + (bits_per_channel == resource_bit_depth) && + (upload_image_stride != static_cast<size_t>(video_stride_bytes)); + if (needs_stride_adaptation) { + const int bytes_per_element = + VideoFrame::BytesPerElement(video_frame->format(), i); + // Stride is aligned to VideoFrameLayout::kFrameAddressAlignment (32) + // which should be divisible by pixel size for YUV formats (1, 2 or 4). + DCHECK_EQ(video_stride_bytes % bytes_per_element, 0); + // Unpack row length is in pixels not bytes. + unpack_row_length = video_stride_bytes / bytes_per_element; + // Use a non-standard alignment only if necessary. + if (video_stride_bytes % kDefaultUnpackAlignment != 0) + unpack_alignment = bytes_per_element; + } pixels = video_frame->data(i); } else { // Avoid malloc for each frame/plane if possible. @@ -1218,14 +1236,7 @@ video_stride_bytes / 2, upload_pixels_.get(), upload_image_stride, scale, bytes_per_row, resource_size_pixels.height()); } else { - // Make a copy to reconcile stride, size and format being equal. - DCHECK(needs_stride_adaptation); - DCHECK(plane_resource_format == viz::LUMINANCE_8 || - plane_resource_format == viz::RED_8); - libyuv::CopyPlane(video_frame->data(i), video_stride_bytes, - upload_pixels_.get(), upload_image_stride, - resource_size_pixels.width(), - resource_size_pixels.height()); + NOTREACHED(); } pixels = upload_pixels_.get(); @@ -1238,12 +1249,18 @@ DCHECK(GLSupportsFormat(plane_resource_format)); { HardwarePlaneResource::ScopedTexture scope(gl, plane_resource); + gl->BindTexture(plane_resource->texture_target(), scope.texture_id()); + + gl->PixelStorei(GL_UNPACK_ROW_LENGTH, unpack_row_length); + gl->PixelStorei(GL_UNPACK_ALIGNMENT, unpack_alignment); gl->TexSubImage2D(plane_resource->texture_target(), 0, 0, 0, resource_size_pixels.width(), resource_size_pixels.height(), GLDataFormat(plane_resource_format), GLDataType(plane_resource_format), pixels); + gl->PixelStorei(GL_UNPACK_ROW_LENGTH, kDefaultUnpackRowLength); + gl->PixelStorei(GL_UNPACK_ALIGNMENT, kDefaultUnpackAlignment); } plane_resource->SetUniqueId(video_frame->unique_id(), i);
diff --git a/media/test/data/README.md b/media/test/data/README.md index 2565eb2..ce6f621 100644 --- a/media/test/data/README.md +++ b/media/test/data/README.md
@@ -268,6 +268,13 @@ Actual video frames are the same as four-colors.mp4, except it specifies a rotation of 270 degrees in mp4 meta data. +#### four-colors-incompatible-stride.y4m +A 962x540 raw YUV single frame video with 4 color blocks (Y,R,G,B) and a GL +incompatible stride. Converted from four-colors.mp4 using ffmpeg: +``` +ffmpeg -i four-colors.mp4 -vf "scale=w=962:h=540,format=yuv420p" -frames:v 1 four-colors-incompatible-stride.y4m +``` + #### four-colors-vp9.webm A 960x540 vp9 video with 4 color blocks (Y,R,G,B) in every frame. This is converted from four-colors.mp4 by ffmpeg.
diff --git a/media/test/data/four-colors-incompatible-stride.y4m b/media/test/data/four-colors-incompatible-stride.y4m new file mode 100644 index 0000000..8d94e2e3 --- /dev/null +++ b/media/test/data/four-colors-incompatible-stride.y4m
@@ -0,0 +1,3 @@ +YUV4MPEG2 W962 H540 F12:1 Ip A0:0 C420mpeg2 XYSCSS=420MPEG2 +FRAME +¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMy¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÈMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMz½ÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÇNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNM{¾ÞßÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞËNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNz¾ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßàßÈNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMx²ÆÓËÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÈÊÆº¨¡¯¶¹·¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶ºÁ¶ªk***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½¼k********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************)**xª·······························································································································································································································································································································································································································································································«k********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************)**{¨·······························································································································································································································································································································································································································································································«k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************¬¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼k***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************«¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½¼07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07bkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio07ckjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio/5cljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjio05dljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjiob;4777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777773JÓïïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððòê1'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++@Óðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïïòê1',,++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*++AÓððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððððððððððððððððððððððððððððððððððððððððððððððððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððððððððððððððððððððððððððððððððððððððððððððððððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððððððððððððððððððððððððððððððððððððððððððïðïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððððððððððððððððððððððððððððððððððððððððððïðïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððððððððððððððððððððððððððððððððððððïðïïðððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððððððððððððððððððððððððððððððððððððððññððððïïððóè/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððððððððððððððððððððððððððððððððððððïïððïïïïîîïïñè/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððððððððððððððððððððððððððððððððððððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððððððððððððððððððððððððððððððððïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððððððððððððððððððððððððððððððïïïððïïïïïïïïïîîïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððððððððððððððððððððððððððððïïðïïððððïïððððïïññóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððððððððððððððððððððððððððññðïïððïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððððððððððððððððððððñððððïïïïððïïïïïïïïïïððïïïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððððððððððððððððððððððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððððððððððððððððððððððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððððððððððððððððððððïïïïïïïïïððïïïïïïïïïïððïïïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððððððððððððððððððïðïððïïððððïïðïïððððïïððððïððïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððððððððððððððððððïðïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððððððððððððððïïððððïïïïïïïïîîïîîïïïïîîïïïïîîïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððððððððððððððïððïððïïðïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððððððððððððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððððððððððïïïïïïïïïïïïïïïïïïïîîïîîïïïïîîïïïïîîïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððððððððïïððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððððððððïïððððïððïððïððïïððððïïðïïððððïïððððïððïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððððïïïïðïïïïïïïïðïïïïïïððïðïððïïïïïïïïïïïïïïïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððïïðïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððïïðïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïððððïïðïðïïïïïðïïïïïïïïðïïïïïïððïðïððïïïïïïïïïïïïïïïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððððððððïðððððððððððïððïïððððïïðïïððððïïððððïððïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïððïðïïïïïïïïïïïïîïïïïïïïïïïïîïïîîïïïïîîïîîïïïïîîïïïïîîïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïððïðððñððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïðððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïðïïïïïïïïïïïïïïïïïïîïïïïïïïïïïïîïïîîïïïïîîïîîïïïïîîïïïïîîïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïðððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððððððððïðððððððððððððððððððïðððððððððððïððïïððððïïðïïððððïïððððïïððòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïðñðïïïðïðïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððïðððððððððððððððððððïððïððïðððððïððïïðïððïðïïðïïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïððïðððððððððððððððððððïððïððïðððððïððïïðïððïðïïðïïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïððïïïðïïïïïîïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïðððððððððððððððððððððððððððððððïðððððïððïððïððïïððððïïðïïððððïïððððïððïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïððïðððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïððððððððïïïðïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïîïïïïïïïïïïïïïïïïïïïïîîïîîïïïïîîïïïïïïïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïðððððïðððððñðððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïðððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïðððððïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïîïïïïïïïïïïïïïïïïïïïïîîïîîïïïïîîïïïïïïïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïðððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððïðððððððððððððððððððððððððððððððððððððððððððïðððððïððïððïððïïððððïïðïïððððïïððððïððïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïððïïïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððððððððððððððððððððððððððððððððððððððððïððïïñðïððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððïððïððððððððððððððððððððððððððððððððððððððððïððïïñðïððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïðððððððððïïðïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïððïïïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïðððððïñðððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïðððððïððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïððïððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðððððððððððïððîïððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððïðððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïðïïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïññóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óðïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïîïïïïïïïïïïïïïïîïïîïïïïïïïïîïïîïïîïïïïïîïïîïïïïïïïïïïïîïïîïïïïïîïðïïïïðððïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïîïïïïïïïïïïïîïïîîïïïïîîïîîïïïïîîïïïïîîïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððððïððïððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïððððïïððïðïððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïðððïïïðïðïðïïðïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïîïïïïïïïïïïïîïïîîïïïïîîïîîïïïïîîïïïïîîïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððïððïððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïññóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïðððððïððïðððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïïïïðïðïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïðïððïðððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïïðïððïðïïðïïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïððððïïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïïðïððïðïïðïïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïïïïïïïðïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïðððððððððððïððïïððððïïðïïððððïïððððïïððòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïððïðððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïïððïïïïïïïïïïïïïïïïïïïïîïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïîïïïïïïïïïïïîïïîîïïïïîîïîîïïïïîîïïïïîîïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïððïïðððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððïðïïïðððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïððððïïððïðïððïïïïïïïîïïïïïïïïïïïïïïîïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïîïïïïïïïïïïïîïïîîïïïïîîïîîïïïïîîïïïïîîïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïððððñïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïññóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïðððððððððððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððîïïïðïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïðïïïïïïððïðïððïïïïïïïïïïððïïïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððïðððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïððïððððïïðïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïðïïïïïïððïðïððïïïïïïïïïïððïïïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïðððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïðððððïððïððïððïïððððïïðïïððððïïððððïððïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïððïððïðððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððîðïïïïðïïïïïïïïïïïîïïïïïïïïïïïïïïîïïïïïïïïïïïïïïîïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïîïïïïïïïïïïïîïïîîïïïïîîïîîïïïïîîïïïïîîïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïïðïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïððïïðïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïðïîïïïðïïïïïïïïïïïïïïïïîïïïïïïïïïïïïïïîïïïïïïïïïïïïïïîïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïîïïïïïïïïïïïîïïîîïïïïîîïîîïïïïîîïïïïîîïïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïðððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððïðððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïðððððïððïððïððïïððððïïðïïððððïïððððïððïòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïïððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïïððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððïððïððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððïðïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïðððððñððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óðððððððððððððððððððððððððððððððððððððððððððððððððððððïïððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððïðïðïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððïðïðïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððððððððððððððððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óðððððððððððððððððððððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óðððððððððððððððððððððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððððððððïððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óðððððððððððððððððððððïïððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óðððððððððððððððððððððïïððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óðððððððððððððððððððððïïððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððïðïððïïððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððððððððððððððððïðïððïïððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óðððððððððððððððïïðïððïïððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óðððððððððððððððïïðïððïïððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óðððððððððïðððððïïðïððïïððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óðððððððïðïðððððïïðïððïïððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óðððððððïðïðððððïïðïððïïððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððòé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?Óððñïððïïðïðððððïïðïððïïððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïððððððððððððððïðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïððïððïðððððïððïððïððïïððððïïðïïððððïïððððïïððóé/%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))?²æðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲæðîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîïѲçñïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïðÒ³èñïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïÒ xwvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoB """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""":xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoA """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#":xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvwvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()(())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*?xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxoE()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*? \ No newline at end of file
diff --git a/net/nqe/network_quality_estimator.cc b/net/nqe/network_quality_estimator.cc index e122708..79303c8 100644 --- a/net/nqe/network_quality_estimator.cc +++ b/net/nqe/network_quality_estimator.cc
@@ -637,10 +637,19 @@ if (!params_->get_signal_strength_and_detailed_network_id()) return base::nullopt; - // Do not call more than once per 30 seconds. + if (params_->weight_multiplier_per_signal_strength_level() >= 1.0) + return base::nullopt; + + if ((current_network_id_.type != NetworkChangeNotifier::CONNECTION_WIFI) && + !NetworkChangeNotifier::IsConnectionCellular(current_network_id_.type)) { + return base::nullopt; + } + + // Do not call more than once per |wifi_signal_strength_query_interval| + // duration. if (last_signal_strength_check_timestamp_.has_value() && (tick_clock_->NowTicks() - last_signal_strength_check_timestamp_.value() < - base::TimeDelta::FromSeconds(30)) && + params_->wifi_signal_strength_query_interval()) && (last_signal_strength_check_timestamp_.value() > last_connection_change_)) { return base::nullopt; @@ -648,15 +657,22 @@ last_signal_strength_check_timestamp_ = tick_clock_->NowTicks(); -#if defined(OS_ANDROID) - if (params_->weight_multiplier_per_signal_strength_level() >= 1.0) - return INT32_MIN; - if (NetworkChangeNotifier::IsConnectionCellular(current_network_id_.type)) - return android::cellular_signal_strength::GetSignalStrengthLevel().value_or( - INT32_MIN); -#endif // OS_ANDROID + if (current_network_id_.type == NetworkChangeNotifier::CONNECTION_WIFI) { + UMA_HISTOGRAM_BOOLEAN("NQE.SignalStrengthQueried.WiFi", true); - return INT32_MIN; +#if defined(OS_ANDROID) + return android::GetWifiSignalLevel(); +#endif // OS_ANDROID + } + + if (NetworkChangeNotifier::IsConnectionCellular(current_network_id_.type)) { + UMA_HISTOGRAM_BOOLEAN("NQE.SignalStrengthQueried.Cellular", true); +#if defined(OS_ANDROID) + return android::cellular_signal_strength::GetSignalStrengthLevel(); +#endif // OS_ANDROID + } + + return base::nullopt; } void NetworkQualityEstimator::UpdateSignalStrength() {
diff --git a/net/nqe/network_quality_estimator_params.cc b/net/nqe/network_quality_estimator_params.cc index 0c312031..7fe22912 100644 --- a/net/nqe/network_quality_estimator_params.cc +++ b/net/nqe/network_quality_estimator_params.cc
@@ -514,6 +514,12 @@ params_, "get_signal_strength_and_detailed_network_id", "false") == "true"), + // Default 30 minutes. + wifi_signal_strength_query_interval_( + base::TimeDelta::FromSeconds(GetValueForVariationParam( + params_, + "wifi_signal_strength_query_interval_seconds", + 30 * 60))), use_small_responses_(false) { DCHECK(hanging_request_http_rtt_upper_bound_transport_rtt_multiplier_ == -1 || hanging_request_http_rtt_upper_bound_transport_rtt_multiplier_ > 0);
diff --git a/net/nqe/network_quality_estimator_params.h b/net/nqe/network_quality_estimator_params.h index af8bb08..3d7dc2e 100644 --- a/net/nqe/network_quality_estimator_params.h +++ b/net/nqe/network_quality_estimator_params.h
@@ -261,6 +261,12 @@ return get_signal_strength_and_detailed_network_id_; } + // Returns the minimum duration between two consecutuve calls for querying the + // current WiFi network's signal strength. + base::TimeDelta wifi_signal_strength_query_interval() const { + return wifi_signal_strength_query_interval_; + } + // Sets the forced effective connection type as |type|. void SetForcedEffectiveConnectionTypeForTesting(EffectiveConnectionType type); @@ -295,6 +301,7 @@ const bool cap_ect_based_on_signal_strength_; const double upper_bound_typical_kbps_multiplier_; const bool get_signal_strength_and_detailed_network_id_; + const base::TimeDelta wifi_signal_strength_query_interval_; bool use_small_responses_;
diff --git a/net/nqe/network_quality_estimator_unittest.cc b/net/nqe/network_quality_estimator_unittest.cc index c91cca1d5..246e736 100644 --- a/net/nqe/network_quality_estimator_unittest.cc +++ b/net/nqe/network_quality_estimator_unittest.cc
@@ -3060,9 +3060,15 @@ // Tests that the signal strength API is not called too frequently. TEST_F(NetworkQualityEstimatorTest, CheckSignalStrength) { + base::HistogramTester histogram_tester; + constexpr char histogram_name[] = "NQE.SignalStrengthQueried.WiFi"; + constexpr int kWiFiSignalStrengthQueryIntervalSeconds = 30 * 60; + std::map<std::string, std::string> variation_params; variation_params["get_signal_strength_and_detailed_network_id"] = "true"; TestNetworkQualityEstimator estimator(variation_params); + estimator.SimulateNetworkChange( + NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI, "test"); base::SimpleTestTickClock tick_clock; tick_clock.SetNowTicks(base::TimeTicks::Now()); @@ -3071,47 +3077,47 @@ base::Optional<int32_t> signal_strength = estimator.GetCurrentSignalStrengthWithThrottling(); - EXPECT_FALSE(signal_strength); signal_strength = estimator.GetCurrentSignalStrengthWithThrottling(); - EXPECT_FALSE(signal_strength); + histogram_tester.ExpectTotalCount(histogram_name, 1); - // Advance clock by 30 seconds. The signal strength API should now be called. - tick_clock.Advance(base::TimeDelta::FromSeconds(30)); + // Advance clock by |kWiFiSignalStrengthQueryIntervalSeconds|. The signal + // strength API should now be called. + tick_clock.Advance( + base::TimeDelta::FromSeconds(kWiFiSignalStrengthQueryIntervalSeconds)); signal_strength = estimator.GetCurrentSignalStrengthWithThrottling(); - EXPECT_TRUE(signal_strength); + histogram_tester.ExpectTotalCount(histogram_name, 2); // Calling it again should return no value. signal_strength = estimator.GetCurrentSignalStrengthWithThrottling(); - EXPECT_FALSE(signal_strength); - tick_clock.Advance(base::TimeDelta::FromSeconds(27)); + tick_clock.Advance(base::TimeDelta::FromSeconds( + kWiFiSignalStrengthQueryIntervalSeconds - 3)); signal_strength = estimator.GetCurrentSignalStrengthWithThrottling(); - EXPECT_FALSE(signal_strength); + histogram_tester.ExpectTotalCount(histogram_name, 2); // Move the clock by another 4 seconds. Since it's more than 30 seconds since // the strength was last available, it should be available again. - tick_clock.Advance(base::TimeDelta::FromSeconds(4)); + tick_clock.Advance(base::TimeDelta::FromSeconds(3)); signal_strength = estimator.GetCurrentSignalStrengthWithThrottling(); - EXPECT_TRUE(signal_strength); + histogram_tester.ExpectTotalCount(histogram_name, 3); signal_strength = estimator.GetCurrentSignalStrengthWithThrottling(); - EXPECT_FALSE(signal_strength); + histogram_tester.ExpectTotalCount(histogram_name, 3); // Changing the connection type should make the signal strength available // again. estimator.SimulateNetworkChange( - NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN, "test"); - signal_strength = estimator.GetCurrentSignalStrengthWithThrottling(); - EXPECT_TRUE(signal_strength); + NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI, "test"); + histogram_tester.ExpectTotalCount(histogram_name, 5); tick_clock.Advance(base::TimeDelta::FromMilliseconds(2)); signal_strength = estimator.GetCurrentSignalStrengthWithThrottling(); - EXPECT_TRUE(signal_strength); + histogram_tester.ExpectTotalCount(histogram_name, 6); tick_clock.Advance(base::TimeDelta::FromMilliseconds(2)); signal_strength = estimator.GetCurrentSignalStrengthWithThrottling(); - EXPECT_FALSE(signal_strength); + histogram_tester.ExpectTotalCount(histogram_name, 6); } TEST_F(NetworkQualityEstimatorTest, CheckSignalStrengthDisabledByDefault) {
diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc index 51897a5..1c11b49 100644 --- a/pdf/pdfium/pdfium_engine.cc +++ b/pdf/pdfium/pdfium_engine.cc
@@ -222,6 +222,7 @@ return false; } +#if defined(PDF_ENABLE_V8) gin::IsolateHolder* g_isolate_holder = nullptr; bool IsV8Initialized() { @@ -247,6 +248,7 @@ delete g_isolate_holder; g_isolate_holder = nullptr; } +#endif // defined(PDF_ENABLE_V8) // Returns true if the given |area| and |form_type| combination from // PDFiumEngine::GetCharIndex() indicates it is a form text area. @@ -396,7 +398,11 @@ FPDF_LIBRARY_CONFIG config; config.version = 3; config.m_pUserFontPaths = nullptr; + config.m_pIsolate = nullptr; + config.m_pPlatform = nullptr; + config.m_v8EmbedderSlot = gin::kEmbedderPDFium; +#if defined(PDF_ENABLE_V8) if (enable_v8) { SetUpV8(); config.m_pIsolate = v8::Isolate::GetCurrent(); @@ -404,11 +410,9 @@ // will manipulate the pointer value should gin::V8Platform someday have // multiple base classes. config.m_pPlatform = static_cast<v8::Platform*>(gin::V8Platform::Get()); - } else { - config.m_pIsolate = nullptr; - config.m_pPlatform = nullptr; } - config.m_v8EmbedderSlot = gin::kEmbedderPDFium; +#endif // defined(PDF_ENABLE_V8) + FPDF_InitLibraryWithConfig(&config); #if defined(OS_LINUX) || defined(OS_CHROMEOS) @@ -420,8 +424,10 @@ void ShutdownSDK() { FPDF_DestroyLibrary(); +#if defined(PDF_ENABLE_V8) if (IsV8Initialized()) TearDownV8(); +#endif // defined(PDF_ENABLE_V8) } PDFEngine::AccessibilityLinkInfo::AccessibilityLinkInfo() = default; @@ -458,8 +464,10 @@ mouse_down_state_(PDFiumPage::NONSELECTABLE_AREA, PDFiumPage::LinkTarget()), print_(this) { +#if defined(PDF_ENABLE_V8) if (enable_javascript) DCHECK(IsV8Initialized()); +#endif // defined(PDF_ENABLE_V8) IFSDK_PAUSE::version = 1; IFSDK_PAUSE::user = nullptr;
diff --git a/pdf/pdfium/pdfium_engine.h b/pdf/pdfium/pdfium_engine.h index fbed9e0..c880ae7 100644 --- a/pdf/pdfium/pdfium_engine.h +++ b/pdf/pdfium/pdfium_engine.h
@@ -62,6 +62,7 @@ // Exposed for testing. enum class FocusElementType { kNone, kDocument, kPage }; + // NOTE: |enable_javascript| is ignored when PDF_ENABLE_V8 is not defined. PDFiumEngine(PDFEngine::Client* client, bool enable_javascript); PDFiumEngine(const PDFiumEngine&) = delete; PDFiumEngine& operator=(const PDFiumEngine&) = delete;
diff --git a/pdf/pdfium/pdfium_form_filler.h b/pdf/pdfium/pdfium_form_filler.h index e362db8..4ccc317 100644 --- a/pdf/pdfium/pdfium_form_filler.h +++ b/pdf/pdfium/pdfium_form_filler.h
@@ -19,6 +19,7 @@ class PDFiumFormFiller : public FPDF_FORMFILLINFO, public IPDF_JSPLATFORM { public: + // NOTE: |enable_javascript| is ignored when PDF_ENABLE_V8 is not defined. PDFiumFormFiller(PDFiumEngine* engine, bool enable_javascript); PDFiumFormFiller(const PDFiumFormFiller&) = delete; PDFiumFormFiller& operator=(const PDFiumFormFiller&) = delete;
diff --git a/pdf/ppapi_migration/url_loader.cc b/pdf/ppapi_migration/url_loader.cc index 00b28b72..a6174df9 100644 --- a/pdf/ppapi_migration/url_loader.cc +++ b/pdf/ppapi_migration/url_loader.cc
@@ -8,6 +8,7 @@ #include <stdint.h> #include <algorithm> +#include <string> #include <utility> #include "base/bind.h" @@ -16,6 +17,7 @@ #include "base/memory/weak_ptr.h" #include "base/notreached.h" #include "net/base/net_errors.h" +#include "net/http/http_util.h" #include "pdf/ppapi_migration/callback.h" #include "ppapi/c/pp_errors.h" #include "ppapi/c/trusted/ppb_url_loader_trusted.h" @@ -27,6 +29,7 @@ #include "ppapi/cpp/url_response_info.h" #include "ppapi/cpp/var.h" #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-shared.h" +#include "third_party/blink/public/platform/web_http_header_visitor.h" #include "third_party/blink/public/platform/web_string.h" #include "third_party/blink/public/platform/web_url.h" #include "third_party/blink/public/platform/web_url_error.h" @@ -38,6 +41,29 @@ namespace chrome_pdf { +namespace { + +// Taken from `content/renderer/pepper/url_response_info_util.cc`. +class HeadersToString final : public blink::WebHTTPHeaderVisitor { + public: + explicit HeadersToString(std::string& buffer_ref) : buffer_ref_(buffer_ref) {} + + void VisitHeader(const blink::WebString& name, + const blink::WebString& value) override { + if (!buffer_ref_.empty()) + buffer_ref_.append("\n"); + buffer_ref_.append(name.Utf8()); + buffer_ref_.append(": "); + buffer_ref_.append(value.Utf8()); + } + + private: + // Reference allows writing directly into `UrlResponse::headers`. + std::string& buffer_ref_; +}; + +} // namespace + UrlRequest::UrlRequest() = default; UrlRequest::UrlRequest(const UrlRequest& other) = default; UrlRequest::UrlRequest(UrlRequest&& other) noexcept = default; @@ -83,6 +109,15 @@ blink_request.SetUrl(GURL(request.url)); blink_request.SetHttpMethod(blink::WebString::FromASCII(request.method)); + if (!request.headers.empty()) { + net::HttpUtil::HeadersIterator it(request.headers.begin(), + request.headers.end(), "\n\r"); + while (it.GetNext()) { + blink_request.AddHttpHeaderField(blink::WebString::FromUTF8(it.name()), + blink::WebString::FromUTF8(it.values())); + } + } + blink_request.SetRequestContext(blink::mojom::RequestContextType::PLUGIN); blink_request.SetRequestDestination( network::mojom::RequestDestination::kEmbed); @@ -150,8 +185,12 @@ void BlinkUrlLoader::DidReceiveResponse(const blink::WebURLResponse& response) { DCHECK_EQ(state_, LoadingState::kOpening); + // Modeled on `content::DataFromWebURLResponse()`. mutable_response().status_code = response.HttpStatusCode(); + HeadersToString headers_to_string(mutable_response().headers); + response.VisitHttpHeaderFields(&headers_to_string); + state_ = LoadingState::kStreamingData; std::move(open_callback_).Run(PP_OK); } @@ -278,11 +317,11 @@ if (request.ignore_redirects) pp_request.SetFollowRedirects(false); - if (request.custom_referrer_url.has_value()) - pp_request.SetCustomReferrerURL(request.custom_referrer_url.value()); + if (!request.custom_referrer_url.empty()) + pp_request.SetCustomReferrerURL(request.custom_referrer_url); - if (request.headers.has_value()) - pp_request.SetHeaders(request.headers.value()); + if (!request.headers.empty()) + pp_request.SetHeaders(request.headers); if (!request.body.empty()) pp_request.AppendDataToBody(request.body.data(), request.body.size()); @@ -324,7 +363,7 @@ if (headers_var.is_string()) { mutable_response().headers = headers_var.AsString(); } else { - mutable_response().headers.reset(); + mutable_response().headers.clear(); } std::move(callback).Run(result);
diff --git a/pdf/ppapi_migration/url_loader.h b/pdf/ppapi_migration/url_loader.h index 4dd7e04..defb618 100644 --- a/pdf/ppapi_migration/url_loader.h +++ b/pdf/ppapi_migration/url_loader.h
@@ -14,7 +14,6 @@ #include "base/containers/circular_deque.h" #include "base/containers/span.h" #include "base/memory/weak_ptr.h" -#include "base/optional.h" #include "pdf/ppapi_migration/callback.h" #include "ppapi/cpp/instance_handle.h" #include "ppapi/cpp/url_loader.h" @@ -47,10 +46,10 @@ bool ignore_redirects = false; // Custom referrer URL. - base::Optional<std::string> custom_referrer_url; + std::string custom_referrer_url; // HTTP headers as a single string of `\n`-delimited key-value pairs. - base::Optional<std::string> headers; + std::string headers; // Request body. std::string body; @@ -69,7 +68,7 @@ int32_t status_code = 0; // HTTP headers as a single string of `\n`-delimited key-value pairs. - base::Optional<std::string> headers; + std::string headers; }; // Abstraction for a Blink or Pepper URL loader.
diff --git a/pdf/ppapi_migration/url_loader_unittest.cc b/pdf/ppapi_migration/url_loader_unittest.cc index 2007cebf..ed0d2d26 100644 --- a/pdf/ppapi_migration/url_loader_unittest.cc +++ b/pdf/ppapi_migration/url_loader_unittest.cc
@@ -4,14 +4,20 @@ #include "pdf/ppapi_migration/url_loader.h" +#include <stddef.h> + #include <memory> +#include <string> #include <utility> +#include <vector> #include "base/bind.h" #include "base/callback.h" #include "base/containers/span.h" #include "base/memory/weak_ptr.h" #include "base/single_thread_task_runner.h" +#include "base/strings/string_split.h" +#include "base/strings/string_util.h" #include "base/test/mock_callback.h" #include "net/base/net_errors.h" #include "pdf/ppapi_migration/callback.h" @@ -19,6 +25,7 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-shared.h" +#include "third_party/blink/public/platform/web_http_header_visitor.h" #include "third_party/blink/public/platform/web_string.h" #include "third_party/blink/public/platform/web_url.h" #include "third_party/blink/public/platform/web_url_error.h" @@ -39,9 +46,24 @@ using ::testing::NiceMock; using ::testing::ReturnNull; using ::testing::SaveArg; +using ::testing::UnorderedElementsAreArray; constexpr base::span<const char> kFakeData = "fake data"; +size_t GetRequestHeaderCount(const blink::WebURLRequest& request) { + struct : public blink::WebHTTPHeaderVisitor { + void VisitHeader(const blink::WebString& name, + const blink::WebString& value) override { + ++count; + } + + size_t count = 0; + } counting_header_visitor; + + request.VisitHttpHeaderFields(&counting_header_visitor); + return counting_header_visitor.count; +} + blink::WebURLError MakeWebURLError(int reason) { return blink::WebURLError(reason, GURL()); } @@ -143,6 +165,7 @@ EXPECT_FALSE(saved_options_.grant_universal_access); EXPECT_EQ(GURL("http://example.com/fake.pdf"), GURL(saved_request_.Url())); EXPECT_EQ("FAKE", saved_request_.HttpMethod().Ascii()); + EXPECT_EQ(0u, GetRequestHeaderCount(saved_request_)); EXPECT_EQ(blink::mojom::RequestContextType::PLUGIN, saved_request_.GetRequestContext()); EXPECT_EQ(network::mojom::RequestDestination::kEmbed, @@ -167,6 +190,24 @@ loader_->Open(UrlRequest(), mock_callback_.Get()); } +TEST_F(BlinkUrlLoaderTest, OpenWithHeaders) { + UrlRequest request; + request.headers = base::JoinString( + { + "Content-Length: 123", + "Content-Type: application/pdf", + "Non-ASCII-Value: 🙃", + }, + "\n"); + loader_->Open(request, mock_callback_.Get()); + + EXPECT_EQ(3u, GetRequestHeaderCount(saved_request_)); + EXPECT_EQ("123", saved_request_.HttpHeaderField("Content-Length").Utf8()); + EXPECT_EQ("application/pdf", + saved_request_.HttpHeaderField("Content-Type").Utf8()); + EXPECT_EQ("🙃", saved_request_.HttpHeaderField("Non-ASCII-Value").Utf8()); +} + TEST_F(BlinkUrlLoaderTest, DidReceiveResponse) { loader_->Open(UrlRequest(), mock_callback_.Get()); EXPECT_CALL(mock_callback_, Run(PP_OK)); @@ -176,6 +217,26 @@ loader_->DidReceiveResponse(response); EXPECT_EQ(204, loader_->response().status_code); + EXPECT_EQ("", loader_->response().headers); +} + +TEST_F(BlinkUrlLoaderTest, DidReceiveResponseWithHeaders) { + loader_->Open(UrlRequest(), mock_callback_.Get()); + + blink::WebURLResponse response; + response.AddHttpHeaderField("Content-Length", "123"); + response.AddHttpHeaderField("Content-Type", "application/pdf"); + response.AddHttpHeaderField("Non-ASCII-Value", "🙃"); + loader_->DidReceiveResponse(response); + + std::vector<std::string> split_headers = + base::SplitString(loader_->response().headers, "\n", + base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL); + EXPECT_THAT(split_headers, UnorderedElementsAreArray({ + "Content-Length: 123", + "Content-Type: application/pdf", + "Non-ASCII-Value: 🙃", + })); } TEST_F(BlinkUrlLoaderTest, DidReceiveData) {
diff --git a/pdf/url_loader_wrapper_impl.cc b/pdf/url_loader_wrapper_impl.cc index 7266ef72..a70966f 100644 --- a/pdf/url_loader_wrapper_impl.cc +++ b/pdf/url_loader_wrapper_impl.cc
@@ -294,7 +294,7 @@ } void URLLoaderWrapperImpl::SetHeadersFromLoader() { - SetResponseHeaders(url_loader_->response().headers.value_or("")); + SetResponseHeaders(url_loader_->response().headers); } } // namespace chrome_pdf
diff --git a/services/network/quic_transport.cc b/services/network/quic_transport.cc index 8a06b3e..7ab0e4c4 100644 --- a/services/network/quic_transport.cc +++ b/services/network/quic_transport.cc
@@ -91,8 +91,8 @@ incoming_(stream), readable_(std::move(readable)), writable_(std::move(writable)), - readable_watcher_(FROM_HERE, ArmingPolicy::AUTOMATIC), - writable_watcher_(FROM_HERE, ArmingPolicy::AUTOMATIC) { + readable_watcher_(FROM_HERE, ArmingPolicy::MANUAL), + writable_watcher_(FROM_HERE, ArmingPolicy::MANUAL) { DCHECK(outgoing_); DCHECK(incoming_); DCHECK(readable_); @@ -108,8 +108,8 @@ id_(outgoing->id()), outgoing_(outgoing), readable_(std::move(readable)), - readable_watcher_(FROM_HERE, ArmingPolicy::AUTOMATIC), - writable_watcher_(FROM_HERE, ArmingPolicy::AUTOMATIC) { + readable_watcher_(FROM_HERE, ArmingPolicy::MANUAL), + writable_watcher_(FROM_HERE, ArmingPolicy::MANUAL) { DCHECK(outgoing_); DCHECK(readable_); Init(); @@ -123,8 +123,8 @@ id_(incoming->id()), incoming_(incoming), writable_(std::move(writable)), - readable_watcher_(FROM_HERE, ArmingPolicy::AUTOMATIC), - writable_watcher_(FROM_HERE, ArmingPolicy::AUTOMATIC) { + readable_watcher_(FROM_HERE, ArmingPolicy::MANUAL), + writable_watcher_(FROM_HERE, ArmingPolicy::MANUAL) { DCHECK(incoming_); DCHECK(writable_); Init(); @@ -165,6 +165,7 @@ MOJO_HANDLE_SIGNAL_NEW_DATA_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, MOJO_TRIGGER_CONDITION_SIGNALS_SATISFIED, base::BindRepeating(&Stream::OnReadable, base::Unretained(this))); + readable_watcher_.ArmOrNotify(); } if (incoming_) { @@ -176,6 +177,7 @@ writable_.get(), MOJO_HANDLE_SIGNAL_WRITABLE, MOJO_TRIGGER_CONDITION_SIGNALS_SATISFIED, base::BindRepeating(&Stream::OnWritable, base::Unretained(this))); + writable_watcher_.ArmOrNotify(); } } @@ -192,6 +194,7 @@ MojoResult result = readable_->BeginReadData( &data, &available, MOJO_BEGIN_READ_DATA_FLAG_NONE); if (result == MOJO_RESULT_SHOULD_WAIT) { + readable_watcher_.Arm(); return; } if (result == MOJO_RESULT_FAILED_PRECONDITION) { @@ -241,6 +244,7 @@ MojoResult result = writable_->BeginWriteData( &buffer, &available, MOJO_BEGIN_WRITE_DATA_FLAG_NONE); if (result == MOJO_RESULT_SHOULD_WAIT) { + writable_watcher_.Arm(); return; } if (result == MOJO_RESULT_FAILED_PRECONDITION) {
diff --git a/testing/buildbot/chrome.json b/testing/buildbot/chrome.json index d52d44e..e76cb816 100644 --- a/testing/buildbot/chrome.json +++ b/testing/buildbot/chrome.json
@@ -6,74 +6,6 @@ "chromiumos_preflight" ] }, - "chromeos-betty-arc-r-chrome": { - "additional_compile_targets": [ - "chromiumos_preflight" - ], - "gtest_tests": [ - { - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "device_type": "eve-arc-r|kevin", - "os": "ChromeOS", - "pool": "chrome.tests" - } - ], - "idempotent": false, - "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "chrome_all_tast_tests", - "test_id_prefix": "ninja://chromeos:chrome_all_tast_tests/" - }, - { - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "device_type": "eve-arc-r|kevin", - "os": "ChromeOS", - "pool": "chrome.tests" - } - ], - "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "cros_browser_sanity_test", - "test_id_prefix": "ninja://chromeos:cros_browser_sanity_test/" - }, - { - "args": [ - "--strip-chrome" - ], - "merge": { - "script": "//tools/perf/process_perf_results.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "device_type": "eve-arc-r|kevin", - "os": "ChromeOS", - "pool": "chrome.tests" - } - ], - "idempotent": false, - "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "disk_usage_tast_test", - "test_id_prefix": "ninja://chromeos:disk_usage_tast_test/" - } - ] - }, "chromeos-betty-pi-arc-cfi-thin-lto-chrome": { "additional_compile_targets": [ "chromiumos_preflight" @@ -791,109 +723,6 @@ } ] }, - "chromeos-eve-arc-r-chrome": { - "additional_compile_targets": [ - "chromiumos_preflight" - ], - "gtest_tests": [ - { - "args": [ - "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.base_unittests.filter" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "device_type": "eve-arc-r", - "os": "ChromeOS", - "pool": "chrome.tests" - } - ], - "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "base_unittests", - "test_id_prefix": "ninja://base:base_unittests/", - "trigger_script": { - "script": "//testing/trigger_scripts/chromeos_device_trigger.py" - } - }, - { - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "device_type": "eve-arc-r", - "os": "ChromeOS", - "pool": "chrome.tests" - } - ], - "idempotent": false, - "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "chrome_all_tast_tests", - "test_id_prefix": "ninja://chromeos:chrome_all_tast_tests/", - "trigger_script": { - "script": "//testing/trigger_scripts/chromeos_device_trigger.py" - } - }, - { - "experiment_percentage": 100, - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "device_type": "eve-arc-r", - "os": "ChromeOS", - "pool": "chrome.tests" - } - ], - "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "cros_browser_sanity_test", - "test_id_prefix": "ninja://chromeos:cros_browser_sanity_test/", - "trigger_script": { - "script": "//testing/trigger_scripts/chromeos_device_trigger.py" - } - }, - { - "args": [ - "--strip-chrome" - ], - "merge": { - "script": "//tools/perf/process_perf_results.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "device_type": "eve-arc-r", - "os": "ChromeOS", - "pool": "chrome.tests" - } - ], - "idempotent": false, - "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "disk_usage_tast_test", - "test_id_prefix": "ninja://chromeos:disk_usage_tast_test/", - "trigger_script": { - "script": "//testing/trigger_scripts/chromeos_device_trigger.py" - } - } - ] - }, "chromeos-eve-chrome": { "additional_compile_targets": [ "chromiumos_preflight"
diff --git a/testing/buildbot/generate_buildbot_json.py b/testing/buildbot/generate_buildbot_json.py index 7f95d8d..9acf8a23 100755 --- a/testing/buildbot/generate_buildbot_json.py +++ b/testing/buildbot/generate_buildbot_json.py
@@ -1442,7 +1442,7 @@ def get_internal_waterfalls(self): # Similar to get_builders_that_do_not_actually_exist above, but for # waterfalls defined in internal configs. - return ['chrome', 'chrome.pgo', 'internal.soda'] + return ['chrome', 'chrome.pgo', 'internal.chrome.fyi', 'internal.soda'] def check_input_file_consistency(self, verbose=False): self.check_input_files_sorting(verbose)
diff --git a/testing/buildbot/internal.chrome.fyi.json b/testing/buildbot/internal.chrome.fyi.json new file mode 100644 index 0000000..7e7798c --- /dev/null +++ b/testing/buildbot/internal.chrome.fyi.json
@@ -0,0 +1,175 @@ +{ + "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {}, + "AAAAA2 See generate_buildbot_json.py to make changes": {}, + "chromeos-betty-arc-r-chrome": { + "additional_compile_targets": [ + "chromiumos_preflight" + ], + "gtest_tests": [ + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "eve-arc-r|kevin", + "os": "ChromeOS", + "pool": "chrome.tests" + } + ], + "idempotent": false, + "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "chrome_all_tast_tests", + "test_id_prefix": "ninja://chromeos:chrome_all_tast_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "eve-arc-r|kevin", + "os": "ChromeOS", + "pool": "chrome.tests" + } + ], + "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "cros_browser_sanity_test", + "test_id_prefix": "ninja://chromeos:cros_browser_sanity_test/" + }, + { + "args": [ + "--strip-chrome" + ], + "merge": { + "script": "//tools/perf/process_perf_results.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "eve-arc-r|kevin", + "os": "ChromeOS", + "pool": "chrome.tests" + } + ], + "idempotent": false, + "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "disk_usage_tast_test", + "test_id_prefix": "ninja://chromeos:disk_usage_tast_test/" + } + ] + }, + "chromeos-eve-arc-r-chrome": { + "additional_compile_targets": [ + "chromiumos_preflight" + ], + "gtest_tests": [ + { + "args": [ + "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.base_unittests.filter" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "eve-arc-r", + "os": "ChromeOS", + "pool": "chrome.tests" + } + ], + "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "base_unittests", + "test_id_prefix": "ninja://base:base_unittests/", + "trigger_script": { + "script": "//testing/trigger_scripts/chromeos_device_trigger.py" + } + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "eve-arc-r", + "os": "ChromeOS", + "pool": "chrome.tests" + } + ], + "idempotent": false, + "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "chrome_all_tast_tests", + "test_id_prefix": "ninja://chromeos:chrome_all_tast_tests/", + "trigger_script": { + "script": "//testing/trigger_scripts/chromeos_device_trigger.py" + } + }, + { + "experiment_percentage": 100, + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "eve-arc-r", + "os": "ChromeOS", + "pool": "chrome.tests" + } + ], + "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "cros_browser_sanity_test", + "test_id_prefix": "ninja://chromeos:cros_browser_sanity_test/", + "trigger_script": { + "script": "//testing/trigger_scripts/chromeos_device_trigger.py" + } + }, + { + "args": [ + "--strip-chrome" + ], + "merge": { + "script": "//tools/perf/process_perf_results.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "eve-arc-r", + "os": "ChromeOS", + "pool": "chrome.tests" + } + ], + "idempotent": false, + "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "disk_usage_tast_test", + "test_id_prefix": "ninja://chromeos:disk_usage_tast_test/", + "trigger_script": { + "script": "//testing/trigger_scripts/chromeos_device_trigger.py" + } + } + ] + } +}
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index ef437c33..c63672a 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -20,35 +20,6 @@ 'chromiumos_preflight', ], }, - 'chromeos-betty-arc-r-chrome': { - 'additional_compile_targets': [ - 'chromiumos_preflight', - ], - 'test_suites': { - 'gtest_tests': 'chromeos_browser_integration_tests', - }, - 'swarming': { - 'dimension_sets': [ - { - 'pool': 'chrome.tests', - # Due to the nature of the ARC VM inside CrOS, betty-arc-r tests - # can't run on GCE images. GCE VM -> CrOS VM -> Android VM proves - # to be too many layers of virtualization for the tests. However, - # we can use KVM-enable baremetal machines in the lab, which - # avoids the GCE VM layer and makes the tests happier. Use the - # device hosts in the CrOS device pool for this purpose since - # they're all running CrOS tests anyway. - 'os': 'ChromeOS', - # The eve-arc-r and kevin pools aren't very busy, use those. Note - # that the devices themselves will be unused for the duration of - # these tests. - # FIXME: Allocate dedicated baremetal machines for these tests - # rather than using CrOS device bots. - 'device_type': 'eve-arc-r|kevin', - }, - ], - }, - }, 'chromeos-betty-pi-arc-cfi-thin-lto-chrome': { 'additional_compile_targets': [ 'chromiumos_preflight', @@ -84,24 +55,6 @@ ], }, }, - 'chromeos-eve-arc-r-chrome': { - 'additional_compile_targets': [ - 'chromiumos_preflight', - ], - 'test_suites': { - 'gtest_tests': 'chromeos_device_gtests', - }, - 'swarming': { - 'dimension_sets': [ - { - 'os': 'ChromeOS', - 'device_type': 'eve-arc-r', - 'pool': 'chrome.tests', - }, - ], - }, - 'os_type': 'chromeos' - }, 'chromeos-eve-chrome': { 'additional_compile_targets': [ 'chromiumos_preflight', @@ -5568,6 +5521,61 @@ { 'project': 'chrome', 'bucket': 'ci', + 'name': 'internal.chrome.fyi', + 'mixins': ['chrome-tester-service-account'], + 'machines': { + 'chromeos-betty-arc-r-chrome': { + 'additional_compile_targets': [ + 'chromiumos_preflight', + ], + 'test_suites': { + 'gtest_tests': 'chromeos_browser_integration_tests', + }, + 'swarming': { + 'dimension_sets': [ + { + 'pool': 'chrome.tests', + # Due to the nature of the ARC VM inside CrOS, betty-arc-r tests + # can't run on GCE images. GCE VM -> CrOS VM -> Android VM proves + # to be too many layers of virtualization for the tests. However, + # we can use KVM-enable baremetal machines in the lab, which + # avoids the GCE VM layer and makes the tests happier. Use the + # device hosts in the CrOS device pool for this purpose since + # they're all running CrOS tests anyway. + 'os': 'ChromeOS', + # The eve-arc-r and kevin pools aren't very busy, use those. Note + # that the devices themselves will be unused for the duration of + # these tests. + # FIXME: Allocate dedicated baremetal machines for these tests + # rather than using CrOS device bots. + 'device_type': 'eve-arc-r|kevin', + }, + ], + }, + }, + 'chromeos-eve-arc-r-chrome': { + 'additional_compile_targets': [ + 'chromiumos_preflight', + ], + 'test_suites': { + 'gtest_tests': 'chromeos_device_gtests', + }, + 'swarming': { + 'dimension_sets': [ + { + 'os': 'ChromeOS', + 'device_type': 'eve-arc-r', + 'pool': 'chrome.tests', + }, + ], + }, + 'os_type': 'chromeos' + }, + }, + }, + { + 'project': 'chrome', + 'bucket': 'ci', 'name': 'internal.soda', 'machines': { 'soda-linux': {
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 70913c6f..2698fb4 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -3368,6 +3368,9 @@ "experiments": [ { "name": "Enabled", + "params": { + "min_os_version": "14.0.1" + }, "enable_features": [ "DefaultBrowserFullscreenPromo" ] @@ -4046,6 +4049,24 @@ ] } ], + "LiveCaptionInProductHelp": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "IPH_LiveCaption" + ] + } + ] + } + ], "LoadingPredictorDisregardAlwaysAccessesNetwork": [ { "platforms": [
diff --git a/third_party/blink/common/BUILD.gn b/third_party/blink/common/BUILD.gn index 644f9e77..190dc0f 100644 --- a/third_party/blink/common/BUILD.gn +++ b/third_party/blink/common/BUILD.gn
@@ -147,6 +147,7 @@ "peerconnection/webrtc_ip_handling_policy.cc", "permissions/permission_utils.cc", "scheduler/web_scheduler_tracked_feature.cc", + "service_worker/service_worker_scope_match.cc", "service_worker/service_worker_status_code.cc", "service_worker/service_worker_type_converters.cc", "switches.cc", @@ -251,6 +252,7 @@ "origin_trials/trial_token_unittest.cc", "origin_trials/trial_token_validator_unittest.cc", "page/content_to_visible_time_reporter_unittest.cc", + "service_worker/service_worker_scope_match_unittest.cc", "test/run_all_unittests.cc", "tokens/multi_token_unittest.cc", "tokens/tokens_mojom_traits_unittest.cc",
diff --git a/third_party/blink/common/service_worker/service_worker_scope_match.cc b/third_party/blink/common/service_worker/service_worker_scope_match.cc new file mode 100644 index 0000000..f9627d4 --- /dev/null +++ b/third_party/blink/common/service_worker/service_worker_scope_match.cc
@@ -0,0 +1,33 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/public/common/service_worker/service_worker_scope_match.h" + +#include "base/strings/string_util.h" + +namespace blink { + +bool ServiceWorkerScopeMatches(const GURL& scope, const GURL& url) { + DCHECK(!scope.has_ref()); + return base::StartsWith(url.spec(), scope.spec(), + base::CompareCase::SENSITIVE); +} + +ServiceWorkerLongestScopeMatcher::ServiceWorkerLongestScopeMatcher( + const GURL& url) + : url_(url) {} + +ServiceWorkerLongestScopeMatcher::~ServiceWorkerLongestScopeMatcher() = default; + +bool ServiceWorkerLongestScopeMatcher::MatchLongest(const GURL& scope) { + if (!ServiceWorkerScopeMatches(scope, url_)) + return false; + if (match_.is_empty() || match_.spec().size() < scope.spec().size()) { + match_ = scope; + return true; + } + return false; +} + +} // namespace blink
diff --git a/third_party/blink/common/service_worker/service_worker_scope_match_unittest.cc b/third_party/blink/common/service_worker/service_worker_scope_match_unittest.cc new file mode 100644 index 0000000..c6117f40 --- /dev/null +++ b/third_party/blink/common/service_worker/service_worker_scope_match_unittest.cc
@@ -0,0 +1,94 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/public/common/service_worker/service_worker_scope_match.h" + +#include "testing/gtest/include/gtest/gtest.h" + +namespace blink { + +TEST(ServiceWorkerScopeMatchTest, ScopeMatches) { + ASSERT_TRUE(ServiceWorkerScopeMatches(GURL("http://www.example.com/"), + GURL("http://www.example.com/"))); + ASSERT_TRUE( + ServiceWorkerScopeMatches(GURL("http://www.example.com/"), + GURL("http://www.example.com/page.html"))); + + ASSERT_FALSE(ServiceWorkerScopeMatches(GURL("http://www.example.com/"), + GURL("https://www.example.com/"))); + ASSERT_FALSE( + ServiceWorkerScopeMatches(GURL("http://www.example.com/"), + GURL("https://www.example.com/page.html"))); + ASSERT_TRUE(ServiceWorkerScopeMatches(GURL("http://www.example.com/"), + GURL("http://www.example.com/#a"))); + + ASSERT_FALSE(ServiceWorkerScopeMatches(GURL("http://www.example.com/"), + GURL("http://www.foo.com/"))); + ASSERT_FALSE(ServiceWorkerScopeMatches( + GURL("http://www.example.com/"), GURL("https://www.foo.com/page.html"))); + + // '*' is not a wildcard. + ASSERT_FALSE(ServiceWorkerScopeMatches(GURL("http://www.example.com/*"), + GURL("http://www.example.com/x"))); + ASSERT_FALSE(ServiceWorkerScopeMatches(GURL("http://www.example.com/*"), + GURL("http://www.example.com/"))); + ASSERT_FALSE(ServiceWorkerScopeMatches(GURL("http://www.example.com/*"), + GURL("http://www.example.com/xx"))); + ASSERT_TRUE(ServiceWorkerScopeMatches(GURL("http://www.example.com/*"), + GURL("http://www.example.com/*"))); + + ASSERT_TRUE(ServiceWorkerScopeMatches(GURL("http://www.example.com/*/x"), + GURL("http://www.example.com/*/x"))); + ASSERT_FALSE(ServiceWorkerScopeMatches(GURL("http://www.example.com/*/x"), + GURL("http://www.example.com/a/x"))); + ASSERT_FALSE(ServiceWorkerScopeMatches(GURL("http://www.example.com/*/x/*"), + GURL("http://www.example.com/a/x/b"))); + ASSERT_FALSE(ServiceWorkerScopeMatches(GURL("http://www.example.com/*/x/*"), + GURL("http://www.example.com/*/x/b"))); + + // '?' is not a wildcard. + ASSERT_FALSE(ServiceWorkerScopeMatches(GURL("http://www.example.com/?"), + GURL("http://www.example.com/x"))); + ASSERT_FALSE(ServiceWorkerScopeMatches(GURL("http://www.example.com/?"), + GURL("http://www.example.com/"))); + ASSERT_FALSE(ServiceWorkerScopeMatches(GURL("http://www.example.com/?"), + GURL("http://www.example.com/xx"))); + ASSERT_TRUE(ServiceWorkerScopeMatches(GURL("http://www.example.com/?"), + GURL("http://www.example.com/?"))); + + // Query string is part of the resource. + ASSERT_TRUE(ServiceWorkerScopeMatches(GURL("http://www.example.com/?a=b"), + GURL("http://www.example.com/?a=b"))); + ASSERT_TRUE(ServiceWorkerScopeMatches(GURL("http://www.example.com/?a="), + GURL("http://www.example.com/?a=b"))); + ASSERT_TRUE(ServiceWorkerScopeMatches(GURL("http://www.example.com/"), + GURL("http://www.example.com/?a=b"))); + + // URLs canonicalize \ to / so this is equivalent to "...//x" + ASSERT_TRUE(ServiceWorkerScopeMatches(GURL("http://www.example.com/\\x"), + GURL("http://www.example.com//x"))); + + // URLs that are in different origin shouldn't match. + ASSERT_FALSE(ServiceWorkerScopeMatches(GURL("https://evil.com"), + GURL("https://evil.com.example.com"))); +} + +TEST(ServiceWorkerScopeMatchTest, FindLongestScopeMatch) { + ServiceWorkerLongestScopeMatcher matcher(GURL("http://www.example.com/xxx")); + + // "/xx" should be matched longest. + ASSERT_TRUE(matcher.MatchLongest(GURL("http://www.example.com/x"))); + ASSERT_FALSE(matcher.MatchLongest(GURL("http://www.example.com/"))); + ASSERT_TRUE(matcher.MatchLongest(GURL("http://www.example.com/xx"))); + + // "/xxx" should be matched longer than "/xx". + ASSERT_TRUE(matcher.MatchLongest(GURL("http://www.example.com/xxx"))); + + // The second call with the same URL should return false. + ASSERT_FALSE(matcher.MatchLongest(GURL("http://www.example.com/xxx"))); + + ASSERT_FALSE(matcher.MatchLongest(GURL("http://www.example.com/xxxx"))); +} + +} // namespace blink
diff --git a/third_party/blink/common/web_preferences/web_preferences.cc b/third_party/blink/common/web_preferences/web_preferences.cc index 7141ad9..e95e7a4e 100644 --- a/third_party/blink/common/web_preferences/web_preferences.cc +++ b/third_party/blink/common/web_preferences/web_preferences.cc
@@ -42,13 +42,6 @@ STATIC_ASSERT_ENUM(EDITING_BEHAVIOR_CHROMEOS, WebSettings::EditingBehavior::kChromeOS); -STATIC_ASSERT_ENUM(IMAGE_ANIMATION_POLICY_ALLOWED, - WebSettings::ImageAnimationPolicy::kAllowed); -STATIC_ASSERT_ENUM(IMAGE_ANIMATION_POLICY_ANIMATION_ONCE, - WebSettings::ImageAnimationPolicy::kAnimateOnce); -STATIC_ASSERT_ENUM(IMAGE_ANIMATION_POLICY_NO_ANIMATION, - WebSettings::ImageAnimationPolicy::kNoAnimation); - STATIC_ASSERT_ENUM(ui::POINTER_TYPE_NONE, blink::kPointerTypeNone); STATIC_ASSERT_ENUM(ui::POINTER_TYPE_COARSE, blink::kPointerTypeCoarse); STATIC_ASSERT_ENUM(ui::POINTER_TYPE_FINE, blink::kPointerTypeFine); @@ -175,7 +168,7 @@ record_whole_document(false), cookie_enabled(true), accelerated_video_decode_enabled(false), - animation_policy(IMAGE_ANIMATION_POLICY_ALLOWED), + animation_policy(kImageAnimationPolicyAllowed), user_gesture_required_for_presentation(true), text_tracks_enabled(false), text_track_margin_percentage(0.0f),
diff --git a/third_party/blink/public/common/BUILD.gn b/third_party/blink/public/common/BUILD.gn index e35c7e1..70ad2c2 100644 --- a/third_party/blink/public/common/BUILD.gn +++ b/third_party/blink/public/common/BUILD.gn
@@ -167,10 +167,10 @@ "scheduler/web_scheduler_tracked_feature.h", "security/security_style.h", "security_context/insecure_request_policy.h", + "service_worker/service_worker_scope_match.h", "service_worker/service_worker_status_code.h", "service_worker/service_worker_type_converters.h", "service_worker/service_worker_types.h", - "service_worker/service_worker_utils.h", "sms/sms_receiver_destroyed_reason.h", "sms/sms_receiver_outcome.h", "switches.h", @@ -183,6 +183,7 @@ "web_cache/web_cache_resource_type_stats.h", "web_package/signed_exchange_consts.h", "web_package/web_package_request_matcher.h", + "web_preferences/image_animation_policy.h", "web_preferences/web_preferences.h", "widget/device_emulation_params.h", "widget/screen_info.h",
diff --git a/third_party/blink/public/common/service_worker/service_worker_scope_match.h b/third_party/blink/public/common/service_worker/service_worker_scope_match.h new file mode 100644 index 0000000..c80bf055 --- /dev/null +++ b/third_party/blink/public/common/service_worker/service_worker_scope_match.h
@@ -0,0 +1,38 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_SERVICE_WORKER_SERVICE_WORKER_SCOPE_MATCH_H_ +#define THIRD_PARTY_BLINK_PUBLIC_COMMON_SERVICE_WORKER_SERVICE_WORKER_SCOPE_MATCH_H_ + +#include "third_party/blink/public/common/common_export.h" +#include "url/gurl.h" + +namespace blink { + +// Returns true if |scope| matches |url|. +bool BLINK_COMMON_EXPORT ServiceWorkerScopeMatches(const GURL& scope, + const GURL& url); + +// A helper class for finding the longest matching scope. +class BLINK_COMMON_EXPORT ServiceWorkerLongestScopeMatcher { + public: + explicit ServiceWorkerLongestScopeMatcher(const GURL& url); + ~ServiceWorkerLongestScopeMatcher(); + + ServiceWorkerLongestScopeMatcher(const ServiceWorkerLongestScopeMatcher&) = + delete; + ServiceWorkerLongestScopeMatcher& operator=( + const ServiceWorkerLongestScopeMatcher&) = delete; + + // Returns true if |scope| matches |url_| longer than |match_|. + bool MatchLongest(const GURL& scope); + + private: + const GURL url_; + GURL match_; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_PUBLIC_COMMON_SERVICE_WORKER_SERVICE_WORKER_SCOPE_MATCH_H_
diff --git a/third_party/blink/public/common/service_worker/service_worker_utils.h b/third_party/blink/public/common/service_worker/service_worker_utils.h deleted file mode 100644 index 50c5c14..0000000 --- a/third_party/blink/public/common/service_worker/service_worker_utils.h +++ /dev/null
@@ -1,46 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_SERVICE_WORKER_SERVICE_WORKER_UTILS_H_ -#define THIRD_PARTY_BLINK_PUBLIC_COMMON_SERVICE_WORKER_SERVICE_WORKER_UTILS_H_ - -#include "third_party/blink/public/common/common_export.h" - -namespace blink { - -// Specifies strategy to generate V8 eager code cache when a script is stored -// into CacheStorage by a service worker. Eager code cache is more exhaustive -// code cache and generated by specifing v8::ScriptCompiler::kEagerCompile. -// Refer to https://crbug.com/768705 for more details. -// -// The default strategy is |kDuringInstallEvent|. -// -// IMPORTANT NOTE: We have some other heuristics/mechanisms to generate -// (non eager) code cache outside service worker. This does NOT affect other -// code caching mechanisms. -enum class EagerCodeCacheStrategy { - // Never generate eager code cache. - kDontGenerate, - // Generate eager code cache when Cache#put() is called in install event - // handlers. The promise of Cache#put() is resolved after the code cache is - // generated. Don't generate eager code cache outside install event handlers. - kDuringInstallEvent, - // This specifies the same behavior as |kDuringInstallEvent| but also - // schedules an idle task to generate eager code cache if Cache#put() - // is called outside install event handlers (e.g. fetch event handlers). - // The promise of Cache#put() doesn't wait for cache generation when put() - // is called outside install event handlers. - kOnIdleTask, -}; - -BLINK_COMMON_EXPORT extern const char kServiceWorkerEagerCodeCacheStrategy[]; - -class ServiceWorkerUtils { - public: - static EagerCodeCacheStrategy BLINK_COMMON_EXPORT GetEagerCodeCacheStrategy(); -}; - -} // namespace blink - -#endif // THIRD_PARTY_BLINK_PUBLIC_COMMON_SERVICE_WORKER_SERVICE_WORKER_UTILS_H_
diff --git a/third_party/blink/renderer/platform/graphics/image_animation_policy.h b/third_party/blink/public/common/web_preferences/image_animation_policy.h similarity index 67% rename from third_party/blink/renderer/platform/graphics/image_animation_policy.h rename to third_party/blink/public/common/web_preferences/image_animation_policy.h index 5398f0c..e181fff6 100644 --- a/third_party/blink/renderer/platform/graphics/image_animation_policy.h +++ b/third_party/blink/public/common/web_preferences/image_animation_policy.h
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_IMAGE_ANIMATION_POLICY_H_ -#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_IMAGE_ANIMATION_POLICY_H_ +#ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_WEB_PREFERENCES_IMAGE_ANIMATION_POLICY_H_ +#define THIRD_PARTY_BLINK_PUBLIC_COMMON_WEB_PREFERENCES_IMAGE_ANIMATION_POLICY_H_ namespace blink { +namespace web_pref { // ImageAnimationPolicy is used for controlling image animation // when image frame is rendered for animation - enum ImageAnimationPolicy { // Animate the image (the default). kImageAnimationPolicyAllowed, @@ -19,6 +19,7 @@ kImageAnimationPolicyNoAnimation }; +} // namespace web_pref } // namespace blink -#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_IMAGE_ANIMATION_POLICY_H_ +#endif // THIRD_PARTY_BLINK_PUBLIC_COMMON_WEB_PREFERENCES_IMAGE_ANIMATION_POLICY_H_
diff --git a/third_party/blink/public/common/web_preferences/web_preferences.h b/third_party/blink/public/common/web_preferences/web_preferences.h index 94716578a5..dad41e69 100644 --- a/third_party/blink/public/common/web_preferences/web_preferences.h +++ b/third_party/blink/public/common/web_preferences/web_preferences.h
@@ -15,6 +15,7 @@ #include "net/nqe/effective_connection_type.h" #include "third_party/blink/public/common/common_export.h" #include "third_party/blink/public/common/css/preferred_color_scheme.h" +#include "third_party/blink/public/common/web_preferences/image_animation_policy.h" #include "third_party/blink/public/mojom/v8_cache_options.mojom-forward.h" #include "ui/base/pointer/pointer_device.h" #include "url/gurl.h" @@ -38,16 +39,6 @@ EDITING_BEHAVIOR_LAST = EDITING_BEHAVIOR_CHROMEOS }; -// ImageAnimationPolicy is used for controlling image animation -// when image frame is rendered for animation. -// See third_party/WebKit/Source/platform/graphics/ImageAnimationPolicy.h -// for information on the options. -enum ImageAnimationPolicy { - IMAGE_ANIMATION_POLICY_ALLOWED, - IMAGE_ANIMATION_POLICY_ANIMATION_ONCE, - IMAGE_ANIMATION_POLICY_NO_ANIMATION -}; - enum class ViewportStyle { DEFAULT, MOBILE, TELEVISION, LAST = TELEVISION }; // Defines the autoplay policy to be used. Should match the class in
diff --git a/third_party/blink/public/mojom/web_feature/web_feature.mojom b/third_party/blink/public/mojom/web_feature/web_feature.mojom index cf54bf78..7f3cca4 100644 --- a/third_party/blink/public/mojom/web_feature/web_feature.mojom +++ b/third_party/blink/public/mojom/web_feature/web_feature.mojom
@@ -2800,7 +2800,10 @@ // The above items are available in M86 branch. kWebTransport = 3472, - kIdleDetectionPermissionRequested = 3473, + kWebkitPrerenderStartEventFired = 3473, + kWebkitPrerenderStopEventFired = 3474, + kWebkitPrerenderLoadEventFired = 3475, + kWebkitPrerenderDOMContentLoadedEventFired = 3476, // Add new features immediately above this line. Don't change assigned // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/public/strings/translations/blink_strings_nl.xtb b/third_party/blink/public/strings/translations/blink_strings_nl.xtb index 5f04c4c..7092551 100644 --- a/third_party/blink/public/strings/translations/blink_strings_nl.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_nl.xtb
@@ -61,7 +61,7 @@ <translation id="2653659639078652383">Verzenden</translation> <translation id="2657045182931379222">grafisch object</translation> <translation id="2674318244760992338">voettekst</translation> -<translation id="2709516037105925701">Automatisch aanvullen</translation> +<translation id="2709516037105925701">Automatisch invullen</translation> <translation id="2723001399770238859">audio</translation> <translation id="2746543609216772311">Waarde moet <ph name="MINIMUM_DATE_OR_TIME" /> of later zijn.</translation> <translation id="2759744352195237655">pop-upknop</translation>
diff --git a/third_party/blink/public/web/web_settings.h b/third_party/blink/public/web/web_settings.h index 5db081d3..c18a232 100644 --- a/third_party/blink/public/web/web_settings.h +++ b/third_party/blink/public/web/web_settings.h
@@ -53,8 +53,6 @@ // WebCore/page/Settings.h. class WebSettings { public: - enum class ImageAnimationPolicy { kAllowed, kAnimateOnce, kNoAnimation }; - enum class EditingBehavior { kMac, kWin, kUnix, kAndroid, kChromeOS }; // Selection strategy defines how the selection granularity changes when the @@ -157,7 +155,7 @@ virtual void SetHighlightAds(bool) = 0; virtual void SetHyperlinkAuditingEnabled(bool) = 0; virtual void SetIgnoreMainFrameOverflowHiddenQuirk(bool) = 0; - virtual void SetImageAnimationPolicy(ImageAnimationPolicy) = 0; + virtual void SetImageAnimationPolicy(web_pref::ImageAnimationPolicy) = 0; virtual void SetImagesEnabled(bool) = 0; virtual void SetInlineTextBoxAccessibilityEnabled(bool) = 0; virtual void SetJavaScriptCanAccessClipboard(bool) = 0;
diff --git a/third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.cc b/third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.cc index cb3ee3b..4443d82 100644 --- a/third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.cc +++ b/third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.cc
@@ -368,12 +368,11 @@ // script evaluation code paths. if (!block.CanContinue()) { ForbidExecution(); - } - - if (IsExecutionForbidden()) { return ClassicEvaluationResult(); } + CHECK(!IsExecutionForbidden()); + if (!block.HasCaught()) { // Step 10. If evaluationStatus is a normal completion, then return // evaluationStatus. [spec text]
diff --git a/third_party/blink/renderer/core/css/css_properties.json5 b/third_party/blink/renderer/core/css/css_properties.json5 index 92a248b..7f79c759 100644 --- a/third_party/blink/renderer/core/css/css_properties.json5 +++ b/third_party/blink/renderer/core/css/css_properties.json5
@@ -5134,7 +5134,7 @@ name: "advance-override", is_descriptor: true, is_property: false, - runtime_flag: "CSSFontMetricsOverride", + runtime_flag: "CSSFontFaceAdvanceOverride", }, { name: "line-gap-override",
diff --git a/third_party/blink/renderer/core/css/css_selector.cc b/third_party/blink/renderer/core/css/css_selector.cc index 5a1440b..46da104 100644 --- a/third_party/blink/renderer/core/css/css_selector.cc +++ b/third_party/blink/renderer/core/css/css_selector.cc
@@ -50,6 +50,25 @@ namespace blink { +namespace { + +unsigned MaximumSpecificity(const CSSSelectorList* list) { + if (!list) + return 0; + + unsigned result = 0; + const CSSSelector* selector; + for (selector = list->First(); selector; + selector = CSSSelectorList::Next(*selector)) { + unsigned specificity = selector->Specificity(); + if (result < specificity) + result = specificity; + } + return result; +} + +} // namespace + struct SameSizeAsCSSSelector { unsigned bitfields; void* pointers[1]; @@ -103,13 +122,13 @@ // FIXME: Pseudo-elements and pseudo-classes do not have the same specificity. // This function isn't quite correct. // http://www.w3.org/TR/selectors/#specificity - if (ignore_specificity_) - return 0; switch (match_) { case kId: return kIdSpecificity; case kPseudoClass: switch (GetPseudoType()) { + case kPseudoWhere: + return 0; case kPseudoHost: case kPseudoHostContext: // We dynamically compute the specificity of :host and :host-context @@ -118,10 +137,11 @@ case kPseudoNot: DCHECK(SelectorList()); return SelectorList()->First()->Specificity(); + case kPseudoIs: + return MaximumSpecificity(SelectorList()); // FIXME: PseudoAny should base the specificity on the sub-selectors. // See http://lists.w3.org/Archives/Public/www-style/2010Sep/0530.html case kPseudoAny: - case kPseudoIs: default: break; } @@ -1173,22 +1193,6 @@ *this); } -bool CSSSelector::HasPseudoIs() const { - for (const CSSSelector* s = this; s; s = s->TagHistory()) { - if (s->GetPseudoType() == CSSSelector::kPseudoIs) - return true; - } - return false; -} - -bool CSSSelector::HasPseudoWhere() const { - for (const CSSSelector* s = this; s; s = s->TagHistory()) { - if (s->GetPseudoType() == CSSSelector::kPseudoWhere) - return true; - } - return false; -} - CSSSelector::RareData::RareData(const AtomicString& value) : matching_value_(value), serializing_value_(value),
diff --git a/third_party/blink/renderer/core/css/css_selector.h b/third_party/blink/renderer/core/css/css_selector.h index f43ed7895..20139c5 100644 --- a/third_party/blink/renderer/core/css/css_selector.h +++ b/third_party/blink/renderer/core/css/css_selector.h
@@ -368,9 +368,6 @@ bool IsLastInTagHistory() const { return is_last_in_tag_history_; } void SetLastInTagHistory(bool is_last) { is_last_in_tag_history_ = is_last; } - bool IgnoreSpecificity() const { return ignore_specificity_; } - void SetIgnoreSpecificity(bool ignore) { ignore_specificity_ = ignore; } - // https://drafts.csswg.org/selectors/#compound bool IsCompound() const; @@ -401,8 +398,6 @@ // Returns true if the immediately preceeding simple selector is ::part. bool FollowsPart() const; bool NeedsUpdatedDistribution() const; - bool HasPseudoIs() const; - bool HasPseudoWhere() const; private: unsigned relation_ : 4; // enum RelationType @@ -415,7 +410,6 @@ unsigned tag_is_implicit_ : 1; unsigned relation_is_affected_by_pseudo_content_ : 1; unsigned is_last_in_original_list_ : 1; - unsigned ignore_specificity_ : 1; void SetPseudoType(PseudoType pseudo_type) { pseudo_type_ = pseudo_type; @@ -542,7 +536,6 @@ tag_is_implicit_(false), relation_is_affected_by_pseudo_content_(false), is_last_in_original_list_(false), - ignore_specificity_(false), data_(DataUnion::kConstructEmptyValue) {} inline CSSSelector::CSSSelector(const QualifiedName& tag_q_name, @@ -557,7 +550,6 @@ tag_is_implicit_(tag_is_implicit), relation_is_affected_by_pseudo_content_(false), is_last_in_original_list_(false), - ignore_specificity_(false), data_(tag_q_name) {} inline CSSSelector::CSSSelector(const CSSSelector& o) @@ -572,7 +564,6 @@ relation_is_affected_by_pseudo_content_( o.relation_is_affected_by_pseudo_content_), is_last_in_original_list_(o.is_last_in_original_list_), - ignore_specificity_(o.ignore_specificity_), data_(DataUnion::kConstructUninitialized) { if (o.match_ == kTag) { new (&data_.tag_q_name_) QualifiedName(o.data_.tag_q_name_);
diff --git a/third_party/blink/renderer/core/css/css_selector_list.cc b/third_party/blink/renderer/core/css/css_selector_list.cc index 592ae1760..724a0cc 100644 --- a/third_party/blink/renderer/core/css/css_selector_list.cc +++ b/third_party/blink/renderer/core/css/css_selector_list.cc
@@ -57,188 +57,6 @@ return list; } -CSSSelectorList CSSSelectorList::ConcatenateListExpansion( - const CSSSelectorList& expanded, - const CSSSelectorList& original) { - unsigned expanded_length = expanded.ComputeLength(); - unsigned original_length = original.ComputeLength(); - unsigned total_length = expanded_length + original_length; - - CSSSelectorList list; - list.selector_array_ = reinterpret_cast<CSSSelector*>( - WTF::Partitions::FastMalloc(WTF::Partitions::ComputeAllocationSize( - total_length, sizeof(CSSSelector)), - kCSSSelectorTypeName)); - - unsigned list_index = 0; - for (unsigned i = 0; i < expanded_length; ++i) { - new (&list.selector_array_[list_index]) - CSSSelector(expanded.selector_array_[i]); - ++list_index; - } - DCHECK(list.selector_array_[list_index - 1].IsLastInOriginalList()); - DCHECK(list.selector_array_[list_index - 1].IsLastInSelectorList()); - list.selector_array_[list_index - 1].SetLastInSelectorList(false); - for (unsigned i = 0; i < original_length; ++i) { - new (&list.selector_array_[list_index]) - CSSSelector(original.selector_array_[i]); - ++list_index; - } - DCHECK(list.selector_array_[list_index - 1].IsLastInOriginalList()); - DCHECK(list.selector_array_[list_index - 1].IsLastInSelectorList()); - return list; -} - -Vector<const CSSSelector*> SelectorBoundaries(const CSSSelectorList& list) { - Vector<const CSSSelector*> result; - for (const CSSSelector* s = list.First(); s; s = list.Next(*s)) { - result.push_back(s); - } - result.push_back(list.First() + list.ComputeLength()); - return result; -} - -void AddToList(CSSSelector*& destination, - const CSSSelector* begin, - const CSSSelector* end) { - for (const CSSSelector* current = begin; current != end; ++current) { - new (destination) CSSSelector(*current); - destination->SetLastInSelectorList(false); - destination->SetLastInOriginalList(false); - destination++; - } -} - -void AddToList(CSSSelector*& destination, - const CSSSelector* begin, - const CSSSelector* end, - const CSSSelector* selector_to_expand) { - for (const CSSSelector* current = begin; current != end; ++current) { - new (destination) CSSSelector(*current); - DCHECK_EQ(current + 1 == end, current->IsLastInTagHistory()); - if (current->IsLastInTagHistory()) { - destination->SetRelation(selector_to_expand->Relation()); - if (!selector_to_expand->IsLastInTagHistory()) - destination->SetLastInTagHistory(false); - } - if (selector_to_expand->GetPseudoType() == CSSSelector::kPseudoWhere || - selector_to_expand->IgnoreSpecificity()) - destination->SetIgnoreSpecificity(true); - destination->SetLastInSelectorList(false); - destination->SetLastInOriginalList(false); - destination++; - } -} - -CSSSelectorList CSSSelectorList::ExpandedFirstPseudoClass() const { - DCHECK(this->RequiresExpansion()); - unsigned original_length = this->ComputeLength(); - Vector<const CSSSelector*> selector_boundaries = SelectorBoundaries(*this); - - size_t begin = 0; - CSSSelectorList transformed = this->Copy(); - while (!selector_boundaries[begin]->HasPseudoIs() && - !selector_boundaries[begin]->HasPseudoWhere()) - ++begin; - - const CSSSelector* selector_to_expand_begin = selector_boundaries[begin]; - const CSSSelector* selector_to_expand_end = selector_boundaries[begin + 1]; - unsigned selector_to_expand_length = - static_cast<unsigned>(selector_to_expand_end - selector_to_expand_begin); - - const CSSSelector* simple_selector = selector_to_expand_begin; - while (simple_selector->GetPseudoType() != CSSSelector::kPseudoIs && - simple_selector->GetPseudoType() != CSSSelector::kPseudoWhere) { - simple_selector = simple_selector->TagHistory(); - } - - unsigned inner_selector_length = - simple_selector->SelectorList()->ComputeLength(); - Vector<const CSSSelector*> selector_arg_boundaries = - SelectorBoundaries(*simple_selector->SelectorList()); - - wtf_size_t num_args = - SafeCast<wtf_size_t>(selector_arg_boundaries.size()) - 1; - unsigned other_selectors_length = original_length - selector_to_expand_length; - - wtf_size_t expanded_selector_list_length = - (selector_to_expand_length - 1) * num_args + inner_selector_length + - other_selectors_length; - - // Do not perform expansion if the selector list size is too large to create - // RuleData - if (expanded_selector_list_length > 8192) - return CSSSelectorList(); - - CSSSelectorList list; - list.selector_array_ = - reinterpret_cast<CSSSelector*>(WTF::Partitions::FastMalloc( - WTF::Partitions::ComputeAllocationSize(expanded_selector_list_length, - sizeof(CSSSelector)), - kCSSSelectorTypeName)); - - CSSSelector* destination = list.selector_array_; - - AddToList(destination, selector_boundaries[0], selector_to_expand_begin); - for (wtf_size_t i = 0; i < num_args; ++i) { - AddToList(destination, selector_to_expand_begin, simple_selector); - AddToList(destination, selector_arg_boundaries[i], - selector_arg_boundaries[i + 1], simple_selector); - AddToList(destination, simple_selector + 1, selector_to_expand_end); - } - AddToList(destination, selector_to_expand_end, selector_boundaries.back()); - - DCHECK(destination == list.selector_array_ + expanded_selector_list_length); - - list.selector_array_[expanded_selector_list_length - 1].SetLastInOriginalList( - true); - list.selector_array_[expanded_selector_list_length - 1].SetLastInSelectorList( - true); - - return list; -} - -CSSSelectorList CSSSelectorList::TransformForListExpansion() { - DCHECK_GT(this->ComputeLength(), 0u); - DCHECK( - this->selector_array_[this->ComputeLength() - 1].IsLastInOriginalList()); - DCHECK(this->RequiresExpansion()); - - // Append the expanded form of matches to the original selector list - CSSSelectorList transformed = this->Copy(); - do { - transformed = transformed.ExpandedFirstPseudoClass(); - } while (transformed.RequiresExpansion()); - - if (transformed.ComputeLength() == 0) - return CSSSelectorList(); - return CSSSelectorList::ConcatenateListExpansion(transformed, *this); -} - -bool CSSSelectorList::HasPseudoIs() const { - for (const CSSSelector* s = FirstForCSSOM(); s; s = Next(*s)) { - if (s->HasPseudoIs()) - return true; - } - return false; -} - -bool CSSSelectorList::HasPseudoWhere() const { - for (const CSSSelector* s = FirstForCSSOM(); s; s = Next(*s)) { - if (s->HasPseudoWhere()) - return true; - } - return false; -} - -bool CSSSelectorList::RequiresExpansion() const { - for (const CSSSelector* s = FirstForCSSOM(); s; s = Next(*s)) { - if (s->HasPseudoIs() || s->HasPseudoWhere()) - return true; - } - return false; -} - CSSSelectorList CSSSelectorList::AdoptSelectorVector( Vector<std::unique_ptr<CSSParserSelector>>& selector_vector) { size_t flattened_size = 0;
diff --git a/third_party/blink/renderer/core/css/css_selector_list.h b/third_party/blink/renderer/core/css/css_selector_list.h index 51f354b..26d334788 100644 --- a/third_party/blink/renderer/core/css/css_selector_list.h +++ b/third_party/blink/renderer/core/css/css_selector_list.h
@@ -71,16 +71,6 @@ o.selector_array_ = nullptr; } - static CSSSelectorList ConcatenateListExpansion( - const CSSSelectorList& expanded, - const CSSSelectorList& original); - - CSSSelectorList ExpandedFirstPseudoClass() const; - CSSSelectorList TransformForListExpansion(); - bool HasPseudoIs() const; - bool HasPseudoWhere() const; - bool RequiresExpansion() const; - CSSSelectorList& operator=(CSSSelectorList&& o) { DCHECK(this != &o); DeleteSelectorsIfNeeded();
diff --git a/third_party/blink/renderer/core/css/css_selector_test.cc b/third_party/blink/renderer/core/css/css_selector_test.cc index b87d968..65212137 100644 --- a/third_party/blink/renderer/core/css/css_selector_test.cc +++ b/third_party/blink/renderer/core/css/css_selector_test.cc
@@ -3,12 +3,29 @@ // found in the LICENSE file. #include "third_party/blink/renderer/core/css/css_test_helpers.h" +#include "third_party/blink/renderer/core/css/parser/css_parser.h" +#include "third_party/blink/renderer/core/css/parser/css_parser_context.h" #include "third_party/blink/renderer/core/css/rule_set.h" #include "testing/gtest/include/gtest/gtest.h" +#include <iostream> + namespace blink { +namespace { + +unsigned Specificity(const String& selector_text) { + CSSSelectorList selector_list = CSSParser::ParseSelector( + StrictCSSParserContext(SecureContextMode::kInsecureContext), nullptr, + selector_text); + + const CSSSelector* selector = selector_list.First(); + return selector->Specificity(); +} + +} // namespace + TEST(CSSSelector, Representations) { css_test_helpers::TestStyleSheet sheet; @@ -76,4 +93,31 @@ EXPECT_FALSE(selector.MatchNth(2)); } +TEST(CSSSelector, Specificity_Is) { + EXPECT_EQ(Specificity(".a :is(.b, div.c)"), Specificity(".a div.c")); + EXPECT_EQ(Specificity(".a :is(.c#d, .e)"), Specificity(".a .c#d")); + EXPECT_EQ(Specificity(":is(.e+.f, .g>.b, .h)"), Specificity(".e+.f")); + EXPECT_EQ(Specificity(".a :is(.e+.f, .g>.b, .h#i)"), Specificity(".a .h#i")); + EXPECT_EQ(Specificity(".a+:is(.b+span.f, :is(.c>.e, .g))"), + Specificity(".a+.b+span.f")); + EXPECT_EQ(Specificity("div > :is(div:where(span:where(.b ~ .c)))"), + Specificity("div > div")); + EXPECT_EQ(Specificity(":is(.c + .c + .c, .b + .c:not(span), .b + .c + .e)"), + Specificity(".c + .c + .c")); +} + +TEST(CSSSelector, Specificity_Where) { + EXPECT_EQ(Specificity(".a :where(.b, div.c)"), Specificity(".a")); + EXPECT_EQ(Specificity(".a :where(.c#d, .e)"), Specificity(".a")); + EXPECT_EQ(Specificity(":where(.e+.f, .g>.b, .h)"), Specificity("*")); + EXPECT_EQ(Specificity(".a :where(.e+.f, .g>.b, .h#i)"), Specificity(".a")); + EXPECT_EQ(Specificity("div > :where(.b+span.f, :where(.c>.e, .g))"), + Specificity("div")); + EXPECT_EQ(Specificity("div > :where(div:is(span:is(.b ~ .c)))"), + Specificity("div")); + EXPECT_EQ( + Specificity(":where(.c + .c + .c, .b + .c:not(span), .b + .c + .e)"), + Specificity("*")); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/css/mathml.css b/third_party/blink/renderer/core/css/mathml.css index 46c9233..cfabf35 100644 --- a/third_party/blink/renderer/core/css/mathml.css +++ b/third_party/blink/renderer/core/css/mathml.css
@@ -27,6 +27,11 @@ @namespace "http://www.w3.org/1998/Math/MathML"; +/* Default display */ +* { + display: math; +} + /* By default, we only display the MathML formulas without any formatting other than the one specified by the display attribute. */ math { display: inline-math; @@ -47,11 +52,6 @@ outline: auto 1px -webkit-focus-ring-color; } -maction, merror, mfrac, mi, mmultiscripts, mn, mo, mover, mpadded, mphantom, mprescripts, mroot, mrow, ms, msqrt, mspace, mstyle, msub, msup, msubsup, mtext, munder, munderover, none -{ - display: math; -} - mphantom { visibility: hidden; }
diff --git a/third_party/blink/renderer/core/css/parser/css_selector_parser.cc b/third_party/blink/renderer/core/css/parser/css_selector_parser.cc index c3f74e7..ee1a668 100644 --- a/third_party/blink/renderer/core/css/parser/css_selector_parser.cc +++ b/third_party/blink/renderer/core/css/parser/css_selector_parser.cc
@@ -30,9 +30,6 @@ return CSSSelectorList(); parser.RecordUsageAndDeprecations(result); - - if (result.RequiresExpansion()) - return result.TransformForListExpansion(); return result; } @@ -46,9 +43,6 @@ stream.ConsumeWhitespace(); CSSSelectorList result = parser.ConsumeComplexSelectorList(stream, observer); parser.RecordUsageAndDeprecations(result); - - if (result.RequiresExpansion()) - return result.TransformForListExpansion(); return result; } @@ -618,8 +612,7 @@ std::unique_ptr<CSSSelectorList> selector_list = std::make_unique<CSSSelectorList>(); *selector_list = ConsumeCompoundSelectorList(block); - if (!selector_list->IsValid() || !block.AtEnd() || - selector_list->HasPseudoIs() || selector_list->HasPseudoWhere()) + if (!selector_list->IsValid() || !block.AtEnd()) return nullptr; selector->SetSelectorList(std::move(selector_list)); return selector;
diff --git a/third_party/blink/renderer/core/css/parser/css_selector_parser_test.cc b/third_party/blink/renderer/core/css/parser/css_selector_parser_test.cc index 0c3a231..ead76aa 100644 --- a/third_party/blink/renderer/core/css/parser/css_selector_parser_test.cc +++ b/third_party/blink/renderer/core/css/parser/css_selector_parser_test.cc
@@ -386,40 +386,6 @@ } } -TEST(CSSSelectorParserTest, InvalidNestingPseudoIs) { - // :is() is currently not supported within these pseudo classes as they - // currently do not support complex selector arguments (:is() does - // support this and the expansion of :is() may provide complex selector - // arguments to these pseudo classes). Most of these test cases should - // eventually be removed once they support complex selector arguments. - const char* test_cases[] = {":-webkit-any(:is(.a))", - "::cue(:is(.a))", - ":cue(:is(.a))", - ":host(:is(.a))", - ":host-context(:is(.a))", - ":lang(:is(.a))", - ":not(:is(.a))", - ":nth-child(:is(.a))", - ":nth-last-child(:is(.a))", - ":nth-last-of-type(:is(.a))", - ":nth-of-type(:is(.a))", - "::slotted(:is(.a))"}; - - auto* context = MakeGarbageCollected<CSSParserContext>( - kHTMLStandardMode, SecureContextMode::kInsecureContext); - auto* sheet = MakeGarbageCollected<StyleSheetContents>(context); - - for (auto* test_case : test_cases) { - SCOPED_TRACE(test_case); - CSSTokenizer tokenizer(test_case); - const auto tokens = tokenizer.TokenizeToEOF(); - CSSParserTokenRange range(tokens); - CSSSelectorList list = - CSSSelectorParser::ParseSelector(range, context, sheet); - EXPECT_FALSE(list.IsValid()); - } -} - TEST(CSSSelectorParserTest, InvalidPseudoIsArguments) { // Pseudo-elements are not valid within :is() as per the spec: // https://drafts.csswg.org/selectors-4/#matches @@ -460,40 +426,6 @@ } } -TEST(CSSSelectorParserTest, InvalidNestingPseudoWhere) { - // :where() is currently not supported within these pseudo classes as they - // currently do not support complex selector arguments (:where() does support - // this and the expansion of :where() may provide complex selector arguments - // to these pseudo classes). Most of these test cases should eventually be - // removed once they support complex selector arguments. - const char* test_cases[] = {":-webkit-any(:where(.a))", - "::cue(:where(.a))", - ":cue(:where(.a))", - ":host(:where(.a))", - ":host-context(:where(.a))", - ":lang(:where(.a))", - ":not(:where(.a))", - ":nth-child(:where(.a))", - ":nth-last-child(:where(.a))", - ":nth-last-of-type(:where(.a))", - ":nth-of-type(:where(.a))", - "::slotted(:where(.a))"}; - - auto* context = MakeGarbageCollected<CSSParserContext>( - kHTMLStandardMode, SecureContextMode::kInsecureContext); - auto* sheet = MakeGarbageCollected<StyleSheetContents>(context); - - for (const char* test_case : test_cases) { - SCOPED_TRACE(test_case); - CSSTokenizer tokenizer(test_case); - const auto tokens = tokenizer.TokenizeToEOF(); - CSSParserTokenRange range(tokens); - CSSSelectorList list = - CSSSelectorParser::ParseSelector(range, context, sheet); - EXPECT_FALSE(list.IsValid()); - } -} - namespace { const auto TagLocalName = [](const CSSSelector* selector) {
diff --git a/third_party/blink/renderer/core/css/rule_feature_set.cc b/third_party/blink/renderer/core/css/rule_feature_set.cc index da88f15..8976a6c 100644 --- a/third_party/blink/renderer/core/css/rule_feature_set.cc +++ b/third_party/blink/renderer/core/css/rule_feature_set.cc
@@ -176,6 +176,9 @@ return true; case CSSSelector::kPseudoIs: case CSSSelector::kPseudoWhere: + // TODO(crbug.com/1127347): Implement invalidation for :where and :is. + NOTIMPLEMENTED(); + return true; case CSSSelector::kPseudoUnknown: case CSSSelector::kPseudoLeftPage: case CSSSelector::kPseudoRightPage: @@ -196,8 +199,10 @@ pseudo == CSSSelector::kPseudoCue || pseudo == CSSSelector::kPseudoHost || pseudo == CSSSelector::kPseudoHostContext || + pseudo == CSSSelector::kPseudoIs || pseudo == CSSSelector::kPseudoNot || - pseudo == CSSSelector::kPseudoSlotted; + pseudo == CSSSelector::kPseudoSlotted || + pseudo == CSSSelector::kPseudoWhere; } bool RequiresSubtreeInvalidation(const CSSSelector& selector) {
diff --git a/third_party/blink/renderer/core/css/rule_feature_set_test.cc b/third_party/blink/renderer/core/css/rule_feature_set_test.cc index 39fb0857..3ed89c8 100644 --- a/third_party/blink/renderer/core/css/rule_feature_set_test.cc +++ b/third_party/blink/renderer/core/css/rule_feature_set_test.cc
@@ -1256,23 +1256,6 @@ ExpectNoInvalidation(invalidation_lists.siblings); } -TEST_F(RuleFeatureSetTest, pseudoIsTooLarge) { - // RuleData cannot support selectors at index 8192 or beyond so the expansion - // is limited to this size - EXPECT_EQ(RuleFeatureSet::kSelectorNeverMatches, - CollectFeatures(":is(.a#a, .b#b, .c#c, .d#d) + " - ":is(.e#e, .f#f, .g#g, .h#h) + " - ":is(.i#i, .j#j, .k#k, .l#l) + " - ":is(.m#m, .n#n, .o#o, .p#p) + " - ":is(.q#q, .r#r, .s#s, .t#t) + " - ":is(.u#u, .v#v, .w#w, .x#x)")); - - InvalidationLists invalidation_lists; - CollectInvalidationSetsForClass(invalidation_lists, "a"); - ExpectNoInvalidation(invalidation_lists.descendants); - ExpectNoInvalidation(invalidation_lists.siblings); -} - TEST_F(RuleFeatureSetTest, pseudoWhere) { EXPECT_EQ(RuleFeatureSet::kSelectorMayMatch, CollectFeatures(":where(.w, .x)")); @@ -1372,23 +1355,6 @@ ExpectNoInvalidation(invalidation_lists.siblings); } -TEST_F(RuleFeatureSetTest, pseudoWhereTooLarge) { - // RuleData cannot support selectors at index 8192 or beyond so the expansion - // is limited to this size - EXPECT_EQ(RuleFeatureSet::kSelectorNeverMatches, - CollectFeatures(":where(.a#a, .b#b, .c#c, .d#d) + " - ":where(.e#e, .f#f, .g#g, .h#h) + " - ":where(.i#i, .j#j, .k#k, .l#l) + " - ":where(.m#m, .n#n, .o#o, .p#p) + " - ":where(.q#q, .r#r, .s#s, .t#t) + " - ":where(.u#u, .v#v, .w#w, .x#x)")); - - InvalidationLists invalidation_lists; - CollectInvalidationSetsForClass(invalidation_lists, "a"); - ExpectNoInvalidation(invalidation_lists.descendants); - ExpectNoInvalidation(invalidation_lists.siblings); -} - TEST_F(RuleFeatureSetTest, invalidatesParts) { EXPECT_EQ(RuleFeatureSet::kSelectorMayMatch, CollectFeatures(".a .b::part(partname)"));
diff --git a/third_party/blink/renderer/core/css/rule_set_test.cc b/third_party/blink/renderer/core/css/rule_set_test.cc index 359b6e9d..4a7f429 100644 --- a/third_party/blink/renderer/core/css/rule_set_test.cc +++ b/third_party/blink/renderer/core/css/rule_set_test.cc
@@ -257,56 +257,6 @@ ASSERT_EQ(2u, rules->size()); } -TEST(RuleSetTest, findBestRuleSetAndAdd_PseudoIs) { - css_test_helpers::TestStyleSheet sheet; - - sheet.AddCSSRules(".a :is(.b+.c, .d>:is(.e, .f)) { }"); - RuleSet& rule_set = sheet.GetRuleSet(); - { - AtomicString str("c"); - const HeapVector<Member<const RuleData>>* rules = rule_set.ClassRules(str); - ASSERT_EQ(1u, rules->size()); - ASSERT_EQ(str, rules->at(0)->Selector().Value()); - } - { - AtomicString str("e"); - const HeapVector<Member<const RuleData>>* rules = rule_set.ClassRules(str); - ASSERT_EQ(1u, rules->size()); - ASSERT_EQ(str, rules->at(0)->Selector().Value()); - } - { - AtomicString str("f"); - const HeapVector<Member<const RuleData>>* rules = rule_set.ClassRules(str); - ASSERT_EQ(1u, rules->size()); - ASSERT_EQ(str, rules->at(0)->Selector().Value()); - } -} - -TEST(RuleSetTest, findBestRuleSetAndAdd_PseudoWhere) { - css_test_helpers::TestStyleSheet sheet; - - sheet.AddCSSRules(".a :where(.b+.c, .d>:where(.e, .f)) { }"); - RuleSet& rule_set = sheet.GetRuleSet(); - { - AtomicString str("c"); - const HeapVector<Member<const RuleData>>* rules = rule_set.ClassRules(str); - ASSERT_EQ(1u, rules->size()); - ASSERT_EQ(str, rules->at(0)->Selector().Value()); - } - { - AtomicString str("e"); - const HeapVector<Member<const RuleData>>* rules = rule_set.ClassRules(str); - ASSERT_EQ(1u, rules->size()); - ASSERT_EQ(str, rules->at(0)->Selector().Value()); - } - { - AtomicString str("f"); - const HeapVector<Member<const RuleData>>* rules = rule_set.ClassRules(str); - ASSERT_EQ(1u, rules->size()); - ASSERT_EQ(str, rules->at(0)->Selector().Value()); - } -} - TEST(RuleSetTest, findBestRuleSetAndAdd_PartPseudoElements) { css_test_helpers::TestStyleSheet sheet; @@ -316,39 +266,6 @@ ASSERT_EQ(2u, rules->size()); } -TEST(RuleSetTest, findBestRuleSetAndAdd_PseudoIsTooLarge) { - // RuleData cannot support selectors at index 8192 or beyond so the expansion - // is limited to this size - css_test_helpers::TestStyleSheet sheet; - - sheet.AddCSSRules( - ":is(.a#a, .b#b, .c#c, .d#d) + " - ":is(.e#e, .f#f, .g#g, .h#h) + " - ":is(.i#i, .j#j, .k#k, .l#l) + " - ":is(.m#m, .n#n, .o#o, .p#p) + " - ":is(.q#q, .r#r, .s#s, .t#t) + " - ":is(.u#u, .v#v, .w#w, .x#x) { }", - true); - - RuleSet& rule_set = sheet.GetRuleSet(); - ASSERT_EQ(0u, rule_set.RuleCount()); -} - -TEST(RuleSetTest, findBestRuleSetAndAdd_PseudoWhereTooLarge) { - // RuleData cannot support selectors at index 8192 or beyond so the expansion - // is limited to this size - css_test_helpers::TestStyleSheet sheet; - - sheet.AddCSSRules( - ":where(.a#a, .b#b, .c#c, .d#d) + :where(.e#e, .f#f, .g#g, .h#h) + " - ":where(.i#i, .j#j, .k#k, .l#l) + :where(.m#m, .n#n, .o#o, .p#p) + " - ":where(.q#q, .r#r, .s#s, .t#t) + :where(.u#u, .v#v, .w#w, .x#x) { }", - true); - - RuleSet& rule_set = sheet.GetRuleSet(); - ASSERT_EQ(0u, rule_set.RuleCount()); -} - TEST(RuleSetTest, SelectorIndexLimit) { // It's not feasible to run this test for a large number of bits. If the // number of bits have increased to a large number, consider removing this
diff --git a/third_party/blink/renderer/core/css/selector_checker.cc b/third_party/blink/renderer/core/css/selector_checker.cc index 1a75770..e1132f7 100644 --- a/third_party/blink/renderer/core/css/selector_checker.cc +++ b/third_party/blink/renderer/core/css/selector_checker.cc
@@ -1096,10 +1096,13 @@ } case CSSSelector::kPseudoTarget: return element == element.GetDocument().CssTarget(); + case CSSSelector::kPseudoIs: + case CSSSelector::kPseudoWhere: case CSSSelector::kPseudoAny: { SelectorCheckingContext sub_context(context); sub_context.is_sub_selector = true; - DCHECK(selector.SelectorList()); + if (!selector.SelectorList()) + break; for (sub_context.selector = selector.SelectorList()->First(); sub_context.selector; sub_context.selector = CSSSelectorList::Next( *sub_context.selector)) { @@ -1342,8 +1345,6 @@ case CSSSelector::kPseudoCornerPresent: return false; case CSSSelector::kPseudoUnknown: - case CSSSelector::kPseudoIs: - case CSSSelector::kPseudoWhere: default: NOTREACHED(); break;
diff --git a/third_party/blink/renderer/core/dom/events/event_target.cc b/third_party/blink/renderer/core/dom/events/event_target.cc index 8b908f3..30c6510 100644 --- a/third_party/blink/renderer/core/dom/events/event_target.cc +++ b/third_party/blink/renderer/core/dom/events/event_target.cc
@@ -207,6 +207,14 @@ {event_type_names::kPointerover, WebFeature::kPointerOverOutFired}, {event_type_names::kPointerout, WebFeature::kPointerOverOutFired}, {event_type_names::kSearch, WebFeature::kSearchEventFired}, + {event_type_names::kWebkitprerenderstart, + WebFeature::kWebkitPrerenderStartEventFired}, + {event_type_names::kWebkitprerenderstop, + WebFeature::kWebkitPrerenderStopEventFired}, + {event_type_names::kWebkitprerenderload, + WebFeature::kWebkitPrerenderLoadEventFired}, + {event_type_names::kWebkitprerenderdomcontentloaded, + WebFeature::kWebkitPrerenderDOMContentLoadedEventFired}, }; for (const auto& counted_event : counted_events) { if (CheckTypeThenUseCount(event, counted_event.event_type,
diff --git a/third_party/blink/renderer/core/execution_context/agent.cc b/third_party/blink/renderer/core/execution_context/agent.cc index 69955bd..d869d6a 100644 --- a/third_party/blink/renderer/core/execution_context/agent.cc +++ b/third_party/blink/renderer/core/execution_context/agent.cc
@@ -45,7 +45,8 @@ // static void Agent::SetIsCrossOriginIsolated(bool value) { #if DCHECK_IS_ON() - DCHECK(!is_cross_origin_isolated_set); + if (is_cross_origin_isolated_set) + DCHECK_EQ(is_cross_origin_isolated, value); is_cross_origin_isolated_set = true; #endif is_cross_origin_isolated = value;
diff --git a/third_party/blink/renderer/core/exported/web_settings_impl.cc b/third_party/blink/renderer/core/exported/web_settings_impl.cc index 603c329..7e152afa 100644 --- a/third_party/blink/renderer/core/exported/web_settings_impl.cc +++ b/third_party/blink/renderer/core/exported/web_settings_impl.cc
@@ -234,9 +234,9 @@ settings_->SetLoadsImagesAutomatically(loads_images_automatically); } -void WebSettingsImpl::SetImageAnimationPolicy(ImageAnimationPolicy policy) { - settings_->SetImageAnimationPolicy( - static_cast<blink::ImageAnimationPolicy>(policy)); +void WebSettingsImpl::SetImageAnimationPolicy( + web_pref::ImageAnimationPolicy policy) { + settings_->SetImageAnimationPolicy(policy); } void WebSettingsImpl::SetImagesEnabled(bool enabled) { @@ -796,11 +796,4 @@ settings_->SetAccessibilityIncludeSvgGElement(include); } -STATIC_ASSERT_ENUM(WebSettings::ImageAnimationPolicy::kAllowed, - kImageAnimationPolicyAllowed); -STATIC_ASSERT_ENUM(WebSettings::ImageAnimationPolicy::kAnimateOnce, - kImageAnimationPolicyAnimateOnce); -STATIC_ASSERT_ENUM(WebSettings::ImageAnimationPolicy::kNoAnimation, - kImageAnimationPolicyNoAnimation); - } // namespace blink
diff --git a/third_party/blink/renderer/core/exported/web_settings_impl.h b/third_party/blink/renderer/core/exported/web_settings_impl.h index f38a70a4..cff80135 100644 --- a/third_party/blink/renderer/core/exported/web_settings_impl.h +++ b/third_party/blink/renderer/core/exported/web_settings_impl.h
@@ -100,7 +100,7 @@ void SetHighlightAds(bool) override; void SetHyperlinkAuditingEnabled(bool) override; void SetIgnoreMainFrameOverflowHiddenQuirk(bool) override; - void SetImageAnimationPolicy(ImageAnimationPolicy) override; + void SetImageAnimationPolicy(web_pref::ImageAnimationPolicy) override; void SetImagesEnabled(bool) override; void SetInlineTextBoxAccessibilityEnabled(bool) override; void SetJavaScriptCanAccessClipboard(bool) override;
diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc index 8fba56a..32d37edc 100644 --- a/third_party/blink/renderer/core/exported/web_view_impl.cc +++ b/third_party/blink/renderer/core/exported/web_view_impl.cc
@@ -1998,8 +1998,7 @@ settings->SetV8CacheOptions(prefs.v8_cache_options); - settings->SetImageAnimationPolicy( - static_cast<WebSettings::ImageAnimationPolicy>(prefs.animation_policy)); + settings->SetImageAnimationPolicy(prefs.animation_policy); settings->SetPresentationRequiresUserGesture( prefs.user_gesture_required_for_presentation);
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.cc b/third_party/blink/renderer/core/frame/local_frame_view.cc index f777aec7..e57db66 100644 --- a/third_party/blink/renderer/core/frame/local_frame_view.cc +++ b/third_party/blink/renderer/core/frame/local_frame_view.cc
@@ -2797,6 +2797,8 @@ } } } + if (GetPage()) + GetPage()->Animator().ReportFrameAnimations(GetCompositorAnimationHost()); } bool LocalFrameView::RunAccessibilityLifecyclePhase(
diff --git a/third_party/blink/renderer/core/frame/settings.h b/third_party/blink/renderer/core/frame/settings.h index 2d0c7fc..905e24b1 100644 --- a/third_party/blink/renderer/core/frame/settings.h +++ b/third_party/blink/renderer/core/frame/settings.h
@@ -33,6 +33,7 @@ #include "base/macros.h" #include "third_party/blink/public/common/css/navigation_controls.h" #include "third_party/blink/public/common/css/preferred_color_scheme.h" +#include "third_party/blink/public/common/web_preferences/image_animation_policy.h" #include "third_party/blink/public/mojom/manifest/display_mode.mojom-shared.h" #include "third_party/blink/public/mojom/v8_cache_options.mojom-blink.h" #include "third_party/blink/public/platform/pointer_properties.h" @@ -51,7 +52,6 @@ #include "third_party/blink/renderer/platform/fonts/generic_font_family_settings.h" #include "third_party/blink/renderer/platform/geometry/int_size.h" #include "third_party/blink/renderer/platform/graphics/dark_mode_settings.h" -#include "third_party/blink/renderer/platform/graphics/image_animation_policy.h" #include "third_party/blink/renderer/platform/timer.h" #include "third_party/blink/renderer/platform/weborigin/kurl.h"
diff --git a/third_party/blink/renderer/core/frame/settings.json5 b/third_party/blink/renderer/core/frame/settings.json5 index d50cf1c..93fe7213 100644 --- a/third_party/blink/renderer/core/frame/settings.json5 +++ b/third_party/blink/renderer/core/frame/settings.json5
@@ -501,8 +501,8 @@ }, { name: "imageAnimationPolicy", - initial: "kImageAnimationPolicyAllowed", - type: "ImageAnimationPolicy", + initial: "web_pref::kImageAnimationPolicyAllowed", + type: "web_pref::ImageAnimationPolicy", }, // Html preload scanning is a fast, early scan of HTML documents to find loadable
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc index 8ab1063..64adbc56 100644 --- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc +++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
@@ -471,6 +471,9 @@ void HTMLCanvasElement::DidDraw(const FloatRect& rect) { if (rect.IsEmpty()) return; + if (GetLayoutObject() && GetLayoutObject()->PreviousVisibilityVisible() && + GetDocument().GetPage()) + GetDocument().GetPage()->Animator().SetHasCanvasInvalidation(true); canvas_is_clear_ = false; if (GetLayoutObject() && !LowLatencyEnabled()) GetLayoutObject()->SetShouldCheckForPaintInvalidation();
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element_test.cc b/third_party/blink/renderer/core/html/canvas/html_canvas_element_test.cc index 2fa0996..0e771716 100644 --- a/third_party/blink/renderer/core/html/canvas/html_canvas_element_test.cc +++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element_test.cc
@@ -9,7 +9,11 @@ namespace blink { -using HTMLCanvasElementTest = RenderingTest; +class HTMLCanvasElementTest : public RenderingTest { + public: + HTMLCanvasElementTest() + : RenderingTest(MakeGarbageCollected<SingleChildLocalFrameClient>()) {} +}; TEST_F(HTMLCanvasElementTest, CreateLayerUpdatesCompositing) { // Enable script so that the canvas will create a LayoutHTMLCanvas. @@ -29,4 +33,86 @@ EXPECT_EQ(CompositingReason::kCanvas, layer->DirectCompositingReasons()); } +TEST_F(HTMLCanvasElementTest, CanvasInvalidation) { + GetDocument().GetSettings()->SetScriptEnabled(true); + + SetBodyInnerHTML("<canvas id='canvas' width='10px' height='10px'></canvas>"); + EXPECT_FALSE( + GetDocument().GetPage()->Animator().has_canvas_invalidation_for_test()); + auto* script = GetDocument().CreateRawElement(html_names::kScriptTag); + script->setTextContent(R"JS( + var canvas = document.getElementById('canvas'); + var ctx = canvas.getContext('2d'); + ctx.fillStyle = 'green'; + ctx.fillRect(0, 0, 10, 10); + )JS"); + GetDocument().body()->appendChild(script); + EXPECT_TRUE( + GetDocument().GetPage()->Animator().has_canvas_invalidation_for_test()); + RunDocumentLifecycle(); + EXPECT_FALSE( + GetDocument().GetPage()->Animator().has_canvas_invalidation_for_test()); +} + +TEST_F(HTMLCanvasElementTest, CanvasNotInvalidatedOnFirstFrameInDOM) { + GetDocument().GetSettings()->SetScriptEnabled(true); + EXPECT_FALSE( + GetDocument().GetPage()->Animator().has_canvas_invalidation_for_test()); + auto* script = GetDocument().CreateRawElement(html_names::kScriptTag); + script->setTextContent(R"JS( + var canvas = document.createElement('canvas'); + document.body.appendChild(canvas); + var ctx = canvas.getContext('2d'); + ctx.fillStyle = 'green'; + ctx.fillRect(0, 0, 10, 10); + )JS"); + GetDocument().body()->appendChild(script); + EXPECT_FALSE( + GetDocument().GetPage()->Animator().has_canvas_invalidation_for_test()); +} + +TEST_F(HTMLCanvasElementTest, CanvasNotInvalidatedOnFirstPaint) { + GetDocument().GetSettings()->SetScriptEnabled(true); + SetBodyInnerHTML("<canvas id='canvas' style='display:none'></canvas>"); + EXPECT_FALSE( + GetDocument().GetPage()->Animator().has_canvas_invalidation_for_test()); + RunDocumentLifecycle(); + auto* script = GetDocument().CreateRawElement(html_names::kScriptTag); + script->setTextContent(R"JS( + var canvas = document.getElementById('canvas'); + canvas.style.display = 'block'; + var ctx = canvas.getContext('2d'); + ctx.fillStyle = 'green'; + ctx.fillRect(0, 0, 10, 10); + )JS"); + GetDocument().body()->appendChild(script); + EXPECT_FALSE( + GetDocument().GetPage()->Animator().has_canvas_invalidation_for_test()); +} + +TEST_F(HTMLCanvasElementTest, CanvasInvalidationInFrame) { + SetBodyInnerHTML(R"HTML( + <iframe id='iframe'></iframe> + )HTML"); + SetChildFrameHTML(R"HTML( + <canvas id='canvas' width='10px' height='10px'></canvas> + )HTML"); + + GetDocument().GetSettings()->SetScriptEnabled(true); + ChildDocument().GetSettings()->SetScriptEnabled(true); + EXPECT_FALSE( + ChildDocument().GetPage()->Animator().has_canvas_invalidation_for_test()); + RunDocumentLifecycle(); + auto* script = ChildDocument().CreateRawElement(html_names::kScriptTag); + script->setTextContent(R"JS( + var canvas = document.getElementById('canvas'); + var ctx = canvas.getContext('2d'); + ctx.fillStyle = 'green'; + ctx.fillRect(0, 0, 10, 10); + )JS"); + ChildDocument().body()->appendChild(script); + EXPECT_TRUE( + GetDocument().GetPage()->Animator().has_canvas_invalidation_for_test()); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/html/forms/html_input_element.cc b/third_party/blink/renderer/core/html/forms/html_input_element.cc index c6e9bf4..240a846 100644 --- a/third_party/blink/renderer/core/html/forms/html_input_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_input_element.cc
@@ -1264,6 +1264,14 @@ input_type_->SetValueAsDouble(new_value, event_behavior, exception_state); } +Decimal HTMLInputElement::RatioValue() const { + DCHECK_EQ(type(), input_type_names::kRange); + const StepRange step_range(CreateStepRange(kRejectAny)); + const Decimal old_value = + ParseToDecimalForNumberType(value(), step_range.DefaultValue()); + return step_range.ProportionFromValue(step_range.ClampValue(old_value)); +} + void HTMLInputElement::SetValueFromRenderer(const String& value) { // File upload controls will never use this. DCHECK_NE(type(), input_type_names::kFile);
diff --git a/third_party/blink/renderer/core/html/forms/html_input_element.h b/third_party/blink/renderer/core/html/forms/html_input_element.h index 5d82aa8..04857422 100644 --- a/third_party/blink/renderer/core/html/forms/html_input_element.h +++ b/third_party/blink/renderer/core/html/forms/html_input_element.h
@@ -174,6 +174,11 @@ ExceptionState&, TextFieldEventBehavior = TextFieldEventBehavior::kDispatchNoEvent); + // For type=range, returns a ratio of the current value in the range between + // min and max. i.e. (value - min) / (max - min) + // For other types, this function fails with DCHECK(). + Decimal RatioValue() const; + String ValueOrDefaultLabel() const; // This function dispatches 'input' event for non-textfield types. Callers
diff --git a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc index c5a81277..6a68b0f 100644 --- a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc +++ b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc
@@ -471,8 +471,6 @@ resize_timer_active_ = false; frame_overlay_.reset(); frame_resource_name_ = 0; - if (persistent_tool_) - persistent_tool_->Dispose(); persistent_tool_ = nullptr; PickTheRightTool(); SetNeedsUnbufferedInput(false); @@ -722,8 +720,6 @@ Response InspectorOverlayAgent::setShowGridOverlays( std::unique_ptr<protocol::Array<protocol::Overlay::GridNodeHighlightConfig>> grid_node_highlight_configs) { - if (persistent_tool_) - persistent_tool_->Dispose(); persistent_tool_ = nullptr; if (grid_node_highlight_configs->size()) { @@ -1395,9 +1391,6 @@ if (!view || !frame) return; - if (inspect_tool_ && inspect_tool_ != persistent_tool_) - inspect_tool_->Dispose(); - if (inspect_tool && enabled_.Get()) { inspect_tool_ = inspect_tool; // If the tool supports persistent overlays, the resources of the persistent
diff --git a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h index 688d480..f4890891 100644 --- a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h +++ b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h
@@ -99,7 +99,6 @@ virtual void Draw(float scale) {} virtual void Dispatch(const String& message) {} virtual void Trace(Visitor* visitor) const; - virtual void Dispose() {} virtual bool HideOnHideHighlight(); virtual bool HideOnMouseMove();
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc index 7d66db7..71f1b8b 100644 --- a/third_party/blink/renderer/core/layout/layout_object.cc +++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -3822,7 +3822,8 @@ return GetDocument().View()->IsVisible(); } -bool LayoutObject::GetImageAnimationPolicy(ImageAnimationPolicy& policy) { +bool LayoutObject::GetImageAnimationPolicy( + web_pref::ImageAnimationPolicy& policy) { if (!GetDocument().GetSettings()) return false; policy = GetDocument().GetSettings()->GetImageAnimationPolicy();
diff --git a/third_party/blink/renderer/core/layout/layout_object.h b/third_party/blink/renderer/core/layout/layout_object.h index 727a59d..4adf5ac 100644 --- a/third_party/blink/renderer/core/layout/layout_object.h +++ b/third_party/blink/renderer/core/layout/layout_object.h
@@ -2111,7 +2111,7 @@ void ImageNotifyFinished(ImageResourceContent*) override; void NotifyImageFullyRemoved(ImageResourceContent*) override; bool WillRenderImage() final; - bool GetImageAnimationPolicy(ImageAnimationPolicy&) final; + bool GetImageAnimationPolicy(web_pref::ImageAnimationPolicy&) final; void Remove() { if (Parent())
diff --git a/third_party/blink/renderer/core/layout/layout_slider_track.cc b/third_party/blink/renderer/core/layout/layout_slider_track.cc index 1dee998..abaa25a 100644 --- a/third_party/blink/renderer/core/layout/layout_slider_track.cc +++ b/third_party/blink/renderer/core/layout/layout_slider_track.cc
@@ -33,9 +33,7 @@ #include "third_party/blink/renderer/core/dom/shadow_root.h" #include "third_party/blink/renderer/core/html/forms/html_input_element.h" -#include "third_party/blink/renderer/core/html/forms/slider_thumb_element.h" #include "third_party/blink/renderer/core/html/forms/slider_track_element.h" -#include "third_party/blink/renderer/core/html/parser/html_parser_idioms.h" #include "third_party/blink/renderer/core/html/shadow/shadow_element_names.h" namespace blink { @@ -43,13 +41,6 @@ LayoutSliderTrack::LayoutSliderTrack(SliderTrackElement* element) : LayoutBlockFlow(element) {} -inline static Decimal SliderPosition(HTMLInputElement* element) { - const StepRange step_range(element->CreateStepRange(kRejectAny)); - const Decimal old_value = - ParseToDecimalForNumberType(element->value(), step_range.DefaultValue()); - return step_range.ProportionFromValue(step_range.ClampValue(old_value)); -} - void LayoutSliderTrack::UpdateLayout() { auto* input = To<HTMLInputElement>(GetNode()->OwnerShadowHost()); const bool is_vertical = !StyleRef().IsHorizontalWritingMode(); @@ -73,7 +64,7 @@ if (!thumb) return; - double percentage_offset = SliderPosition(input).ToDouble(); + double percentage_offset = input->RatioValue().ToDouble(); LayoutUnit available_extent = is_vertical ? ContentHeight() : ContentWidth(); available_extent -= is_vertical ? thumb->Size().Height() : thumb->Size().Width();
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_items_builder.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_items_builder.cc index a167081..3052c2f7 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_items_builder.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_items_builder.cc
@@ -142,11 +142,6 @@ return c == kCarriageReturnCharacter || c == kFormFeedCharacter; } -inline bool IsCollapsibleSpace(UChar c) { - return c == kSpaceCharacter || c == kNewlineCharacter || - c == kTabulationCharacter || c == kCarriageReturnCharacter; -} - // Characters needing a separate control item than other text items. // It makes the line breaker easier to handle. inline bool IsControlItemCharacter(UChar c) { @@ -165,12 +160,12 @@ unsigned* offset, UChar* c) { DCHECK_EQ(*c, string[*offset]); - DCHECK(IsCollapsibleSpace(*c)); + DCHECK(Character::IsCollapsibleSpace(*c)); bool space_run_has_newline = *c == kNewlineCharacter; for ((*offset)++; *offset < string.length(); (*offset)++) { *c = string[*offset]; space_run_has_newline |= *c == kNewlineCharacter; - if (!IsCollapsibleSpace(*c)) + if (!Character::IsCollapsibleSpace(*c)) break; } return space_run_has_newline; @@ -322,7 +317,8 @@ break; case NGInlineItem::kNotCollapsible: { const String& source_text = layout_text->GetText(); - if (source_text.length() && IsCollapsibleSpace(source_text[0])) { + if (source_text.length() && + Character::IsCollapsibleSpace(source_text[0])) { // If the start of the original string was collapsed, it may be // restored. if (original_string[old_item0.StartOffset()] != kSpaceCharacter) @@ -518,7 +514,7 @@ unsigned i = 0; UChar c = string[i]; bool space_run_has_newline = false; - if (IsCollapsibleSpace(c)) { + if (Character::IsCollapsibleSpace(c)) { // Find the end of the collapsible space run. space_run_has_newline = MoveToEndOfCollapsibleSpaces(string, &i, &c); @@ -624,11 +620,11 @@ while (true) { // Append the non-space text until we find a collapsible space. // |string[i]| is guaranteed not to be a space. - DCHECK(!IsCollapsibleSpace(string[i])); + DCHECK(!Character::IsCollapsibleSpace(string[i])); unsigned start_of_non_space = i; for (i++; i < string.length(); i++) { c = string[i]; - if (IsCollapsibleSpace(c)) + if (Character::IsCollapsibleSpace(c)) break; } text_.Append(string, start_of_non_space, i - start_of_non_space); @@ -641,7 +637,7 @@ // Process a collapsible space run. First, find the end of the run. DCHECK_EQ(c, string[i]); - DCHECK(IsCollapsibleSpace(c)); + DCHECK(Character::IsCollapsibleSpace(c)); unsigned start_of_spaces = i; space_run_has_newline = MoveToEndOfCollapsibleSpaces(string, &i, &c);
diff --git a/third_party/blink/renderer/core/layout/ng/ng_constraint_space.cc b/third_party/blink/renderer/core/layout/ng/ng_constraint_space.cc index e50b6a5..f306e0e 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_constraint_space.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_constraint_space.cc
@@ -127,8 +127,8 @@ String NGConstraintSpace::ToString() const { return String::Format("Offset: %s,%s Size: %sx%s Clearance: %s", - bfc_offset_.line_offset.ToString().Ascii().c_str(), - bfc_offset_.block_offset.ToString().Ascii().c_str(), + BfcOffset().line_offset.ToString().Ascii().c_str(), + BfcOffset().block_offset.ToString().Ascii().c_str(), AvailableSize().inline_size.ToString().Ascii().c_str(), AvailableSize().block_size.ToString().Ascii().c_str(), HasClearanceOffset()
diff --git a/third_party/blink/renderer/core/loader/image_loader.cc b/third_party/blink/renderer/core/loader/image_loader.cc index fb271af6..57d5b6a4 100644 --- a/third_party/blink/renderer/core/loader/image_loader.cc +++ b/third_party/blink/renderer/core/loader/image_loader.cc
@@ -939,7 +939,8 @@ count->ClearAndCheckLoadEvent(); } -bool ImageLoader::GetImageAnimationPolicy(ImageAnimationPolicy& policy) { +bool ImageLoader::GetImageAnimationPolicy( + web_pref::ImageAnimationPolicy& policy) { if (!GetElement()->GetDocument().GetSettings()) return false;
diff --git a/third_party/blink/renderer/core/loader/image_loader.h b/third_party/blink/renderer/core/loader/image_loader.h index 35c725c..4996a03 100644 --- a/third_party/blink/renderer/core/loader/image_loader.h +++ b/third_party/blink/renderer/core/loader/image_loader.h
@@ -135,7 +135,7 @@ bool HadError() const { return !failed_load_url_.IsEmpty(); } - bool GetImageAnimationPolicy(ImageAnimationPolicy&) final; + bool GetImageAnimationPolicy(web_pref::ImageAnimationPolicy&) final; ScriptPromise Decode(ScriptState*, ExceptionState&);
diff --git a/third_party/blink/renderer/core/loader/prerender_test.cc b/third_party/blink/renderer/core/loader/prerender_test.cc index 65b2eba..0cbbf7dd 100644 --- a/third_party/blink/renderer/core/loader/prerender_test.cc +++ b/third_party/blink/renderer/core/loader/prerender_test.cc
@@ -227,6 +227,12 @@ return item->textContent(); } + bool IsUseCounted(mojom::WebFeature web_feature) { + Document* document = + web_view_helper_.LocalMainFrame()->GetFrame()->GetDocument(); + return document->IsUseCounted(web_feature); + } + void ExecuteScript(const char* code) { web_view_helper_.LocalMainFrame()->ExecuteScript( WebScriptSource(WebString::FromUTF8(code))); @@ -267,21 +273,31 @@ EXPECT_EQ(0u, prerender->CancelCount()); EXPECT_EQ(0u, prerender->AbandonCount()); + EXPECT_FALSE(IsUseCounted(WebFeature::kWebkitPrerenderStartEventFired)); prerender->NotifyDidStartPrerender(); EXPECT_EQ(1u, ConsoleLength()); EXPECT_EQ("webkitprerenderstart", ConsoleAt(0)); + EXPECT_TRUE(IsUseCounted(WebFeature::kWebkitPrerenderStartEventFired)); + EXPECT_FALSE( + IsUseCounted(WebFeature::kWebkitPrerenderDOMContentLoadedEventFired)); prerender->NotifyDidSendDOMContentLoadedForPrerender(); EXPECT_EQ(2u, ConsoleLength()); EXPECT_EQ("webkitprerenderdomcontentloaded", ConsoleAt(1)); + EXPECT_TRUE( + IsUseCounted(WebFeature::kWebkitPrerenderDOMContentLoadedEventFired)); + EXPECT_FALSE(IsUseCounted(WebFeature::kWebkitPrerenderLoadEventFired)); prerender->NotifyDidSendLoadForPrerender(); EXPECT_EQ(3u, ConsoleLength()); EXPECT_EQ("webkitprerenderload", ConsoleAt(2)); + EXPECT_TRUE(IsUseCounted(WebFeature::kWebkitPrerenderLoadEventFired)); + EXPECT_FALSE(IsUseCounted(WebFeature::kWebkitPrerenderStopEventFired)); prerender->NotifyDidStopPrerender(); EXPECT_EQ(4u, ConsoleLength()); EXPECT_EQ("webkitprerenderstop", ConsoleAt(3)); + EXPECT_TRUE(IsUseCounted(WebFeature::kWebkitPrerenderStopEventFired)); } TEST_F(PrerenderTest, CancelPrerender) {
diff --git a/third_party/blink/renderer/core/loader/resource/image_resource_content.cc b/third_party/blink/renderer/core/loader/resource/image_resource_content.cc index e3d9451..33de45e 100644 --- a/third_party/blink/renderer/core/loader/resource/image_resource_content.cc +++ b/third_party/blink/renderer/core/loader/resource/image_resource_content.cc
@@ -542,7 +542,8 @@ if (!image_) return; - ImageAnimationPolicy new_policy = kImageAnimationPolicyAllowed; + web_pref::ImageAnimationPolicy new_policy = + web_pref::kImageAnimationPolicyAllowed; { ProhibitAddRemoveObserverInScope prohibit_add_remove_observer_in_scope( this);
diff --git a/third_party/blink/renderer/core/loader/resource/image_resource_observer.h b/third_party/blink/renderer/core/loader/resource/image_resource_observer.h index 1127615..a5d24aa 100644 --- a/third_party/blink/renderer/core/loader/resource/image_resource_observer.h +++ b/third_party/blink/renderer/core/loader/resource/image_resource_observer.h
@@ -23,9 +23,9 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_RESOURCE_IMAGE_RESOURCE_OBSERVER_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_RESOURCE_IMAGE_RESOURCE_OBSERVER_H_ +#include "third_party/blink/public/common/web_preferences/image_animation_policy.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/style/style_image.h" -#include "third_party/blink/renderer/platform/graphics/image_animation_policy.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_priority.h" #include "third_party/blink/renderer/platform/wtf/forward.h" @@ -74,7 +74,9 @@ // Called to get imageAnimation policy from settings. An implementation of // this method is not allowed to add or remove ImageResource observers. - virtual bool GetImageAnimationPolicy(ImageAnimationPolicy&) { return false; } + virtual bool GetImageAnimationPolicy(web_pref::ImageAnimationPolicy&) { + return false; + } // Return the observer's requested resource priority. An implementation of // this method is not allowed to add or remove ImageResource observers.
diff --git a/third_party/blink/renderer/core/loader/threadable_loader.cc b/third_party/blink/renderer/core/loader/threadable_loader.cc index bba7f9b5..0fe36e7 100644 --- a/third_party/blink/renderer/core/loader/threadable_loader.cc +++ b/third_party/blink/renderer/core/loader/threadable_loader.cc
@@ -38,7 +38,6 @@ #include "services/network/public/cpp/cors/cors_error_status.h" #include "services/network/public/mojom/cors.mojom-blink.h" #include "services/network/public/mojom/fetch_api.mojom-blink.h" -#include "third_party/blink/public/common/service_worker/service_worker_utils.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/task_type.h" #include "third_party/blink/public/platform/web_security_origin.h"
diff --git a/third_party/blink/renderer/core/page/page_animator.cc b/third_party/blink/renderer/core/page/page_animator.cc index c9caf01..5d07ada 100644 --- a/third_party/blink/renderer/core/page/page_animator.cc +++ b/third_party/blink/renderer/core/page/page_animator.cc
@@ -5,6 +5,7 @@ #include "third_party/blink/renderer/core/page/page_animator.h" #include "base/auto_reset.h" +#include "cc/animation/animation_host.h" #include "third_party/blink/renderer/core/animation/document_animations.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/local_frame_view.h" @@ -120,6 +121,16 @@ Clock().SetAllowedToDynamicallyUpdateTime(true); } +void PageAnimator::SetHasCanvasInvalidation(bool has_canvas_invalidation) { + has_canvas_invalidation_ = has_canvas_invalidation; +} + +void PageAnimator::ReportFrameAnimations(cc::AnimationHost* animation_host) { + if (animation_host) + animation_host->SetHasCanvasInvalidation(has_canvas_invalidation_); + has_canvas_invalidation_ = false; +} + void PageAnimator::SetSuppressFrameRequestsWorkaroundFor704763Only( bool suppress_frame_requests) { // If we are enabling the suppression and it was already enabled then we must
diff --git a/third_party/blink/renderer/core/page/page_animator.h b/third_party/blink/renderer/core/page/page_animator.h index 529ff4c..5f1b37a 100644 --- a/third_party/blink/renderer/core/page/page_animator.h +++ b/third_party/blink/renderer/core/page/page_animator.h
@@ -12,6 +12,10 @@ #include "third_party/blink/renderer/core/dom/document_lifecycle.h" #include "third_party/blink/renderer/platform/heap/handle.h" +namespace cc { +class AnimationHost; +} + namespace blink { class LocalFrame; @@ -45,6 +49,11 @@ DocumentUpdateReason reason); AnimationClock& Clock() { return animation_clock_; } HeapVector<Member<Animation>> GetAnimations(const TreeScope&); + void SetHasCanvasInvalidation(bool has_canvas_invalidation); + bool has_canvas_invalidation_for_test() const { + return has_canvas_invalidation_; + } + void ReportFrameAnimations(cc::AnimationHost* animation_host); private: Member<Page> page_; @@ -52,6 +61,8 @@ bool updating_layout_and_style_for_painting_; bool suppress_frame_requests_workaround_for704763_only_ = false; AnimationClock animation_clock_; + // True if the current main frame has canvas invalidation. + bool has_canvas_invalidation_ = false; }; } // namespace blink
diff --git a/third_party/blink/renderer/core/resize_observer/resize_observer_test.cc b/third_party/blink/renderer/core/resize_observer/resize_observer_test.cc index 712b8cd..2de33e2 100644 --- a/third_party/blink/renderer/core/resize_observer/resize_observer_test.cc +++ b/third_party/blink/renderer/core/resize_observer/resize_observer_test.cc
@@ -254,7 +254,6 @@ const HeapLinkedHashSet<WeakMember<ResizeObserver>>& observers = controller.Observers(); ASSERT_EQ(observers.size(), 0U); - v8::HandleScope scope(v8::Isolate::GetCurrent()); LocalFrame* frame = Window().GetFrame(); @@ -263,12 +262,10 @@ // ClassicScript::CreateUnspecifiedScript( ScriptSourceCode("var ro = new ResizeObserver( entries => {});")) - ->RunScriptAndReturnValue( - frame, ScriptController::kExecuteScriptWhenScriptsDisabled); + ->RunScript(frame, ScriptController::kExecuteScriptWhenScriptsDisabled); ASSERT_EQ(observers.size(), 1U); ClassicScript::CreateUnspecifiedScript(ScriptSourceCode("ro = undefined;")) - ->RunScriptAndReturnValue( - frame, ScriptController::kExecuteScriptWhenScriptsDisabled); + ->RunScript(frame, ScriptController::kExecuteScriptWhenScriptsDisabled); ThreadState::Current()->CollectAllGarbageForTesting(); WebHeap::CollectAllGarbageForTesting(); ASSERT_EQ(observers.IsEmpty(), true); @@ -281,15 +278,13 @@ "var el = document.createElement('div');" "ro.observe(el);" "ro = undefined;")) - ->RunScriptAndReturnValue( - frame, ScriptController::kExecuteScriptWhenScriptsDisabled); + ->RunScript(frame, ScriptController::kExecuteScriptWhenScriptsDisabled); ASSERT_EQ(observers.size(), 1U); ThreadState::Current()->CollectAllGarbageForTesting(); WebHeap::CollectAllGarbageForTesting(); ASSERT_EQ(observers.size(), 1U); ClassicScript::CreateUnspecifiedScript(ScriptSourceCode("el = undefined;")) - ->RunScriptAndReturnValue( - frame, ScriptController::kExecuteScriptWhenScriptsDisabled); + ->RunScript(frame, ScriptController::kExecuteScriptWhenScriptsDisabled); ThreadState::Current()->CollectAllGarbageForTesting(); WebHeap::CollectAllGarbageForTesting(); ASSERT_EQ(observers.IsEmpty(), true);
diff --git a/third_party/blink/renderer/core/script/module_script_test.cc b/third_party/blink/renderer/core/script/module_script_test.cc index dbdb166..eb25d05 100644 --- a/third_party/blink/renderer/core/script/module_script_test.cc +++ b/third_party/blink/renderer/core/script/module_script_test.cc
@@ -107,7 +107,7 @@ ClassicScript::CreateUnspecifiedScript( ScriptSourceCode("window.foo = undefined;")) - ->RunScriptAndReturnValue(&scope.GetFrame()); + ->RunScript(&scope.GetFrame()); } // Accessors for ModuleScript private members. @@ -249,7 +249,7 @@ ClassicScript::CreateUnspecifiedScript( ScriptSourceCode(LargeSourceText(), ScriptSourceLocationType::kInternal, cache_handler)) - ->RunScriptAndReturnValue(&scope.GetFrame()); + ->RunScript(&scope.GetFrame()); checkpoint.Call(4); @@ -390,7 +390,7 @@ ClassicScript::CreateUnspecifiedScript( ScriptSourceCode(LargeSourceText(), ScriptSourceLocationType::kInternal, cache_handler)) - ->RunScriptAndReturnValue(&scope.GetFrame()); + ->RunScript(&scope.GetFrame()); checkpoint.Call(4); TestFoo(scope);
diff --git a/third_party/blink/renderer/core/style/style_fetched_image.cc b/third_party/blink/renderer/core/style/style_fetched_image.cc index 1489135..d19e89e 100644 --- a/third_party/blink/renderer/core/style/style_fetched_image.cc +++ b/third_party/blink/renderer/core/style/style_fetched_image.cc
@@ -187,7 +187,8 @@ image_->LoadDeferredImage(document_->Fetcher()); } -bool StyleFetchedImage::GetImageAnimationPolicy(ImageAnimationPolicy& policy) { +bool StyleFetchedImage::GetImageAnimationPolicy( + web_pref::ImageAnimationPolicy& policy) { if (!document_ || !document_->GetSettings()) { return false; }
diff --git a/third_party/blink/renderer/core/style/style_fetched_image.h b/third_party/blink/renderer/core/style/style_fetched_image.h index a0aa856..ba4af55 100644 --- a/third_party/blink/renderer/core/style/style_fetched_image.h +++ b/third_party/blink/renderer/core/style/style_fetched_image.h
@@ -82,7 +82,7 @@ // ImageResourceObserver overrides void ImageNotifyFinished(ImageResourceContent*) override; - bool GetImageAnimationPolicy(ImageAnimationPolicy&) override; + bool GetImageAnimationPolicy(web_pref::ImageAnimationPolicy&) override; Member<ImageResourceContent> image_; Member<const Document> document_;
diff --git a/third_party/blink/renderer/core/svg/animation/smil_time_container.cc b/third_party/blink/renderer/core/svg/animation/smil_time_container.cc index e009d30..759e2af 100644 --- a/third_party/blink/renderer/core/svg/animation/smil_time_container.cc +++ b/third_party/blink/renderer/core/svg/animation/smil_time_container.cc
@@ -330,7 +330,7 @@ // yield the same value. max_presentation_time_ = SMILTime::Latest() - SMILTime::Epsilon(); presentation_time_ = ClampPresentationTime(new_presentation_time); - if (AnimationPolicy() != kImageAnimationPolicyAnimateOnce) + if (AnimationPolicy() != web_pref::kImageAnimationPolicyAnimateOnce) return; const SMILTime kAnimationPolicyOnceDuration = SMILTime::FromSecondsD(3); max_presentation_time_ = @@ -410,15 +410,15 @@ } } -ImageAnimationPolicy SMILTimeContainer::AnimationPolicy() const { +web_pref::ImageAnimationPolicy SMILTimeContainer::AnimationPolicy() const { const Settings* settings = GetDocument().GetSettings(); return settings ? settings->GetImageAnimationPolicy() - : kImageAnimationPolicyAllowed; + : web_pref::kImageAnimationPolicyAllowed; } bool SMILTimeContainer::AnimationsDisabled() const { return !GetDocument().IsActive() || - AnimationPolicy() == kImageAnimationPolicyNoAnimation; + AnimationPolicy() == web_pref::kImageAnimationPolicyNoAnimation; } void SMILTimeContainer::UpdateDocumentOrderIndexes() {
diff --git a/third_party/blink/renderer/core/svg/animation/smil_time_container.h b/third_party/blink/renderer/core/svg/animation/smil_time_container.h index 81370a9..9ebbc1a 100644 --- a/third_party/blink/renderer/core/svg/animation/smil_time_container.h +++ b/third_party/blink/renderer/core/svg/animation/smil_time_container.h
@@ -27,10 +27,10 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_SVG_ANIMATION_SMIL_TIME_CONTAINER_H_ #include "base/time/time.h" +#include "third_party/blink/public/common/web_preferences/image_animation_policy.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/svg/animation/priority_queue.h" #include "third_party/blink/renderer/core/svg/animation/smil_time.h" -#include "third_party/blink/renderer/platform/graphics/image_animation_policy.h" #include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/timer.h" #include "third_party/blink/renderer/platform/wtf/hash_set.h" @@ -95,7 +95,7 @@ void ScheduleAnimationFrame(base::TimeDelta delay_time); void CancelAnimationFrame(); void WakeupTimerFired(TimerBase*); - ImageAnimationPolicy AnimationPolicy() const; + web_pref::ImageAnimationPolicy AnimationPolicy() const; bool AnimationsDisabled() const; class TimingUpdate; void UpdateAnimationsAndScheduleFrameIfNeeded(TimingUpdate&);
diff --git a/third_party/blink/renderer/core/svg/animation/smil_time_container_test.cc b/third_party/blink/renderer/core/svg/animation/smil_time_container_test.cc index d511302..a22a04a 100644 --- a/third_party/blink/renderer/core/svg/animation/smil_time_container_test.cc +++ b/third_party/blink/renderer/core/svg/animation/smil_time_container_test.cc
@@ -137,7 +137,8 @@ private: static void OverrideSettings(Settings& settings) { - settings.SetImageAnimationPolicy(kImageAnimationPolicyAnimateOnce); + settings.SetImageAnimationPolicy( + web_pref::kImageAnimationPolicyAnimateOnce); } base::TimeTicks current_time_;
diff --git a/third_party/blink/renderer/core/testing/internal_settings.cc b/third_party/blink/renderer/core/testing/internal_settings.cc index 515fc55..97cd1a9 100644 --- a/third_party/blink/renderer/core/testing/internal_settings.cc +++ b/third_party/blink/renderer/core/testing/internal_settings.cc
@@ -481,11 +481,14 @@ ExceptionState& exception_state) { InternalSettingsGuardForSettings(); if (EqualIgnoringASCIICase(policy, "allowed")) { - GetSettings()->SetImageAnimationPolicy(kImageAnimationPolicyAllowed); + GetSettings()->SetImageAnimationPolicy( + web_pref::kImageAnimationPolicyAllowed); } else if (EqualIgnoringASCIICase(policy, "once")) { - GetSettings()->SetImageAnimationPolicy(kImageAnimationPolicyAnimateOnce); + GetSettings()->SetImageAnimationPolicy( + web_pref::kImageAnimationPolicyAnimateOnce); } else if (EqualIgnoringASCIICase(policy, "none")) { - GetSettings()->SetImageAnimationPolicy(kImageAnimationPolicyNoAnimation); + GetSettings()->SetImageAnimationPolicy( + web_pref::kImageAnimationPolicyNoAnimation); } else { exception_state.ThrowDOMException( DOMExceptionCode::kSyntaxError,
diff --git a/third_party/blink/renderer/core/testing/internal_settings.h b/third_party/blink/renderer/core/testing/internal_settings.h index 3c0a163..f377cb4 100644 --- a/third_party/blink/renderer/core/testing/internal_settings.h +++ b/third_party/blink/renderer/core/testing/internal_settings.h
@@ -27,12 +27,12 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_INTERNAL_SETTINGS_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_INTERNAL_SETTINGS_H_ +#include "third_party/blink/public/common/web_preferences/image_animation_policy.h" #include "third_party/blink/public/mojom/manifest/display_mode.mojom-shared.h" #include "third_party/blink/renderer/core/editing/editing_behavior_types.h" #include "third_party/blink/renderer/core/page/page.h" #include "third_party/blink/renderer/core/testing/internal_settings_generated.h" #include "third_party/blink/renderer/platform/geometry/int_size.h" -#include "third_party/blink/renderer/platform/graphics/image_animation_policy.h" #include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" @@ -67,7 +67,7 @@ bool lang_attribute_aware_form_control_ui_enabled_; bool images_enabled_; String default_video_poster_url_; - ImageAnimationPolicy original_image_animation_policy_; + web_pref::ImageAnimationPolicy original_image_animation_policy_; bool original_scroll_top_left_interop_enabled_; };
diff --git a/third_party/blink/renderer/modules/accessibility/ax_position.cc b/third_party/blink/renderer/modules/accessibility/ax_position.cc index 45f44531..4503db7 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_position.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_position.cc
@@ -428,9 +428,11 @@ return container_object_->ComputedName().length(); } + const LayoutObject* layout_object = container_node->GetLayoutObject(); + if (!layout_object || !layout_object->IsText()) + return container_object_->ComputedName().length(); LayoutBlockFlow* formatting_context = - NGOffsetMapping::GetInlineFormattingContextOf( - *container_node->GetLayoutObject()); + NGOffsetMapping::GetInlineFormattingContextOf(*layout_object); const NGOffsetMapping* container_offset_mapping = formatting_context ? NGInlineNode::GetOffsetMapping(formatting_context) : nullptr; @@ -482,11 +484,23 @@ return false; } + const Document* document = container_object_->GetDocument(); + DCHECK(document->IsActive()); + DCHECK(!document->NeedsLayoutTreeUpdate()); + if (!document->IsActive() || document->NeedsLayoutTreeUpdate()) { + if (failure_reason) { + *failure_reason = + "\nPosition invalid: document is either not active or it needs " + "layout tree update."; + } + return false; + } + if (IsTextPosition()) { if (text_offset_or_child_index_ > MaxTextOffset()) { if (failure_reason) { *failure_reason = String::Format( - "\nPosition invalid: text offset too large.\n%d vs. %d", + "\nPosition invalid: text offset too large.\n%d vs. %d.", text_offset_or_child_index_, MaxTextOffset()); } return false; @@ -496,7 +510,7 @@ container_object_->ChildCountIncludingIgnored()) { if (failure_reason) { *failure_reason = String::Format( - "\nPosition invalid: child index too large.\n%d vs. %d", + "\nPosition invalid: child index too large.\n%d vs. %d.", text_offset_or_child_index_, container_object_->ChildCountIncludingIgnored()); } @@ -504,8 +518,6 @@ } } - DCHECK(container_object_->GetDocument()->IsActive()); - DCHECK(!container_object_->GetDocument()->NeedsLayoutTreeUpdate()); #if DCHECK_IS_ON() DCHECK_EQ(container_object_->GetDocument()->DomTreeVersion(), dom_tree_version_);
diff --git a/third_party/blink/renderer/modules/cookie_store/service_worker_registration_cookies.idl b/third_party/blink/renderer/modules/cookie_store/service_worker_registration_cookies.idl index 75930687..2a8ce24 100644 --- a/third_party/blink/renderer/modules/cookie_store/service_worker_registration_cookies.idl +++ b/third_party/blink/renderer/modules/cookie_store/service_worker_registration_cookies.idl
@@ -10,5 +10,5 @@ RuntimeEnabled=CookieStoreWorker, ImplementedAs=ServiceWorkerRegistrationCookies ] partial interface ServiceWorkerRegistration { - readonly attribute CookieStoreManager cookies; + [SameObject] readonly attribute CookieStoreManager cookies; };
diff --git a/third_party/blink/renderer/modules/idle/BUILD.gn b/third_party/blink/renderer/modules/idle/BUILD.gn index b5e9abb..65836c24 100644 --- a/third_party/blink/renderer/modules/idle/BUILD.gn +++ b/third_party/blink/renderer/modules/idle/BUILD.gn
@@ -8,9 +8,5 @@ sources = [ "idle_detector.cc", "idle_detector.h", - "idle_manager.cc", - "idle_manager.h", ] - - deps = [ "//third_party/blink/renderer/modules/permissions" ] }
diff --git a/third_party/blink/renderer/modules/idle/DEPS b/third_party/blink/renderer/modules/idle/DEPS index 8964ea2..e9d07a5 100644 --- a/third_party/blink/renderer/modules/idle/DEPS +++ b/third_party/blink/renderer/modules/idle/DEPS
@@ -3,6 +3,5 @@ "+third_party/blink/renderer/modules/event_modules.h", "+third_party/blink/renderer/modules/event_target_modules.h", "+third_party/blink/renderer/modules/modules_export.h", - "+third_party/blink/renderer/modules/permissions/permission_utils.h", "+third_party/blink/renderer/modules/idle", ]
diff --git a/third_party/blink/renderer/modules/idle/idle_detector.cc b/third_party/blink/renderer/modules/idle/idle_detector.cc index ecc231cb..8dafda3 100644 --- a/third_party/blink/renderer/modules/idle/idle_detector.cc +++ b/third_party/blink/renderer/modules/idle/idle_detector.cc
@@ -8,6 +8,7 @@ #include "base/time/time.h" #include "mojo/public/cpp/bindings/remote.h" +#include "third_party/blink/public/common/browser_interface_broker_proxy.h" #include "third_party/blink/public/mojom/feature_policy/feature_policy.mojom-blink.h" #include "third_party/blink/public/mojom/idle/idle_manager.mojom-blink.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_idle_options.h" @@ -15,11 +16,11 @@ #include "third_party/blink/renderer/core/dom/dom_exception.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/execution_context/security_context.h" -#include "third_party/blink/renderer/modules/idle/idle_manager.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/bindings/script_state.h" #include "third_party/blink/renderer/platform/heap/heap.h" #include "third_party/blink/renderer/platform/heap/persistent.h" + namespace blink { namespace { @@ -40,7 +41,9 @@ } IdleDetector::IdleDetector(ExecutionContext* context) - : ExecutionContextClient(context), receiver_(this, context) {} + : ExecutionContextClient(context), + receiver_(this, context), + idle_service_(context) {} IdleDetector::~IdleDetector() = default; @@ -82,17 +85,6 @@ } } -// static -ScriptPromise IdleDetector::requestPermission(ScriptState* script_state, - ExceptionState& exception_state) { - if (!script_state->ContextIsValid()) - return ScriptPromise(); - - auto* context = ExecutionContext::From(script_state); - return IdleManager::From(context)->RequestPermission(script_state, - exception_state); -} - ScriptPromise IdleDetector::start(ScriptState* script_state, const IdleOptions* options, ExceptionState& exception_state) { @@ -136,16 +128,21 @@ // See https://bit.ly/2S0zRAS for task types. scoped_refptr<base::SingleThreadTaskRunner> task_runner = - context->GetTaskRunner(TaskType::kMiscPlatformAPI); + GetExecutionContext()->GetTaskRunner(TaskType::kMiscPlatformAPI); + + if (!idle_service_.is_bound()) { + GetExecutionContext()->GetBrowserInterfaceBroker().GetInterface( + idle_service_.BindNewPipeAndPassReceiver(task_runner)); + idle_service_.set_disconnect_handler(WTF::Bind( + &IdleDetector::OnServiceDisconnected, WrapWeakPersistent(this))); + } mojo::PendingRemote<mojom::blink::IdleMonitor> remote; receiver_.Bind(remote.InitWithNewPipeAndPassReceiver(), task_runner); - receiver_.set_disconnect_handler(WTF::Bind( - &IdleDetector::OnMonitorDisconnected, WrapWeakPersistent(this))); auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state); ScriptPromise promise = resolver->Promise(); - IdleManager::From(context)->AddMonitor( + idle_service_->AddMonitor( threshold_, std::move(remote), WTF::Bind(&IdleDetector::OnAddMonitor, WrapWeakPersistent(this), WrapPersistent(resolver))); @@ -164,16 +161,18 @@ resolver_ = nullptr; } + idle_service_.reset(); receiver_.reset(); } -void IdleDetector::OnMonitorDisconnected() { +void IdleDetector::OnServiceDisconnected() { if (resolver_) { resolver_->Reject(MakeGarbageCollected<DOMException>( DOMExceptionCode::kNotSupportedError, "Idle detection not available.")); resolver_ = nullptr; } + idle_service_.reset(); receiver_.reset(); } @@ -184,7 +183,7 @@ case IdleManagerError::kPermissionDisabled: resolver->Reject(MakeGarbageCollected<DOMException>( DOMExceptionCode::kNotAllowedError, - "Idle detection permission denied")); + "Notification permission disabled")); break; case IdleManagerError::kSuccess: DCHECK(state); @@ -213,6 +212,7 @@ visitor->Trace(signal_); visitor->Trace(resolver_); visitor->Trace(receiver_); + visitor->Trace(idle_service_); EventTargetWithInlineData::Trace(visitor); ExecutionContextClient::Trace(visitor); ActiveScriptWrappable::Trace(visitor);
diff --git a/third_party/blink/renderer/modules/idle/idle_detector.h b/third_party/blink/renderer/modules/idle/idle_detector.h index ccc6d65..d2e3c70 100644 --- a/third_party/blink/renderer/modules/idle/idle_detector.h +++ b/third_party/blink/renderer/modules/idle/idle_detector.h
@@ -50,7 +50,6 @@ // IdleDetector IDL interface. String userState() const; String screenState() const; - static ScriptPromise requestPermission(ScriptState*, ExceptionState&); ScriptPromise start(ScriptState*, const IdleOptions*, ExceptionState&); DEFINE_ATTRIBUTE_EVENT_LISTENER(change, kChange) @@ -62,7 +61,7 @@ void Update(mojom::blink::IdleStatePtr state) override; void Abort(AbortSignal*); - void OnMonitorDisconnected(); + void OnServiceDisconnected(); void OnAddMonitor(ScriptPromiseResolver*, mojom::blink::IdleManagerError, mojom::blink::IdleStatePtr); @@ -79,6 +78,9 @@ IdleDetector, HeapMojoWrapperMode::kWithoutContextObserver> receiver_; + HeapMojoRemote<mojom::blink::IdleManager, + HeapMojoWrapperMode::kWithoutContextObserver> + idle_service_; }; } // namespace blink
diff --git a/third_party/blink/renderer/modules/idle/idle_detector.idl b/third_party/blink/renderer/modules/idle/idle_detector.idl index e582e0c..fcff94f4 100644 --- a/third_party/blink/renderer/modules/idle/idle_detector.idl +++ b/third_party/blink/renderer/modules/idle/idle_detector.idl
@@ -24,6 +24,5 @@ readonly attribute UserIdleState? userState; readonly attribute ScreenIdleState? screenState; attribute EventHandler onchange; - [Exposed=Window, CallWith=ScriptState, RaisesException, MeasureAs=IdleDetectionPermissionRequested] static Promise<PermissionState> requestPermission(); [CallWith=ScriptState, RaisesException, MeasureAs=IdleDetectionStart] Promise<void> start(optional IdleOptions options = {}); };
diff --git a/third_party/blink/renderer/modules/idle/idle_manager.cc b/third_party/blink/renderer/modules/idle/idle_manager.cc deleted file mode 100644 index 3710156..0000000 --- a/third_party/blink/renderer/modules/idle/idle_manager.cc +++ /dev/null
@@ -1,110 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "third_party/blink/renderer/modules/idle/idle_manager.h" - -#include "third_party/blink/public/common/browser_interface_broker_proxy.h" -#include "third_party/blink/renderer/bindings/core/v8/script_promise.h" -#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" -#include "third_party/blink/renderer/core/frame/local_dom_window.h" -#include "third_party/blink/renderer/core/frame/local_frame.h" -#include "third_party/blink/renderer/modules/permissions/permission_utils.h" -#include "third_party/blink/renderer/platform/bindings/exception_state.h" -#include "third_party/blink/renderer/platform/wtf/functional.h" - -namespace blink { - -// static -const char IdleManager::kSupplementName[] = "IdleManager"; - -// static -IdleManager* IdleManager::From(ExecutionContext* context) { - DCHECK(context); - DCHECK(context->IsContextThread()); - - IdleManager* manager = - Supplement<ExecutionContext>::From<IdleManager>(context); - if (!manager) { - manager = MakeGarbageCollected<IdleManager>(context); - Supplement<ExecutionContext>::ProvideTo(*context, manager); - } - - return manager; -} - -IdleManager::IdleManager(ExecutionContext* context) - : Supplement<ExecutionContext>(*context), - idle_service_(context), - permission_service_(context) {} - -IdleManager::~IdleManager() = default; - -ScriptPromise IdleManager::RequestPermission(ScriptState* script_state, - ExceptionState& exception_state) { - ExecutionContext* context = GetSupplementable(); - DCHECK_EQ(context, ExecutionContext::From(script_state)); - - // This function is annotated with [Exposed=Window]. - DCHECK(context->IsWindow()); - auto* window = To<LocalDOMWindow>(context); - - if (!LocalFrame::HasTransientUserActivation(window->GetFrame())) { - exception_state.ThrowDOMException( - DOMExceptionCode::kNotAllowedError, - "Must be handling a user gesture to show a permission request."); - return ScriptPromise(); - } - - // This interface is annotated with [SecureContext]. - DCHECK(context->IsSecureContext()); - - if (!permission_service_.is_bound()) { - // See https://bit.ly/2S0zRAS for task types. - scoped_refptr<base::SingleThreadTaskRunner> task_runner = - context->GetTaskRunner(TaskType::kMiscPlatformAPI); - ConnectToPermissionService( - context, - permission_service_.BindNewPipeAndPassReceiver(std::move(task_runner))); - } - - auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state); - ScriptPromise promise = resolver->Promise(); - - permission_service_->RequestPermission( - CreatePermissionDescriptor(mojom::blink::PermissionName::IDLE_DETECTION), - LocalFrame::HasTransientUserActivation(window->GetFrame()), - WTF::Bind(&IdleManager::OnPermissionRequestComplete, WrapPersistent(this), - WrapPersistent(resolver))); - return promise; -} - -void IdleManager::AddMonitor( - base::TimeDelta threshold, - mojo::PendingRemote<mojom::blink::IdleMonitor> monitor, - mojom::blink::IdleManager::AddMonitorCallback callback) { - if (!idle_service_.is_bound()) { - ExecutionContext* context = GetSupplementable(); - // See https://bit.ly/2S0zRAS for task types. - scoped_refptr<base::SingleThreadTaskRunner> task_runner = - context->GetTaskRunner(TaskType::kMiscPlatformAPI); - context->GetBrowserInterfaceBroker().GetInterface( - idle_service_.BindNewPipeAndPassReceiver(task_runner)); - } - - idle_service_->AddMonitor(threshold, std::move(monitor), std::move(callback)); -} - -void IdleManager::Trace(Visitor* visitor) const { - visitor->Trace(idle_service_); - visitor->Trace(permission_service_); - Supplement<ExecutionContext>::Trace(visitor); -} - -void IdleManager::OnPermissionRequestComplete( - ScriptPromiseResolver* resolver, - mojom::blink::PermissionStatus status) { - resolver->Resolve(PermissionStatusToString(status)); -} - -} // namespace blink
diff --git a/third_party/blink/renderer/modules/idle/idle_manager.h b/third_party/blink/renderer/modules/idle/idle_manager.h deleted file mode 100644 index 66c22c75..0000000 --- a/third_party/blink/renderer/modules/idle/idle_manager.h +++ /dev/null
@@ -1,53 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_IDLE_IDLE_MANAGER_H_ -#define THIRD_PARTY_BLINK_RENDERER_MODULES_IDLE_IDLE_MANAGER_H_ - -#include "third_party/blink/public/mojom/idle/idle_manager.mojom-blink.h" -#include "third_party/blink/public/mojom/permissions/permission.mojom-blink.h" -#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h" -#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h" -#include "third_party/blink/renderer/platform/supplementable.h" - -namespace blink { - -class ExceptionState; -class ExecutionContext; -class ScriptPromise; -class ScriptPromiseResolver; -class ScriptState; - -class IdleManager final : public GarbageCollected<IdleManager>, - public Supplement<ExecutionContext> { - public: - static const char kSupplementName[]; - - static IdleManager* From(ExecutionContext*); - - explicit IdleManager(ExecutionContext*); - ~IdleManager(); - - ScriptPromise RequestPermission(ScriptState*, ExceptionState&); - void AddMonitor(base::TimeDelta threshold, - mojo::PendingRemote<mojom::blink::IdleMonitor>, - mojom::blink::IdleManager::AddMonitorCallback); - - void Trace(Visitor*) const override; - - private: - void OnPermissionRequestComplete(ScriptPromiseResolver*, - mojom::blink::PermissionStatus); - - HeapMojoRemote<mojom::blink::IdleManager, - HeapMojoWrapperMode::kWithoutContextObserver> - idle_service_; - HeapMojoRemote<mojom::blink::PermissionService, - HeapMojoWrapperMode::kWithoutContextObserver> - permission_service_; -}; - -} // namespace blink - -#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_IDLE_IDLE_MANAGER_H_
diff --git a/third_party/blink/renderer/modules/webcodecs/video_encoder.cc b/third_party/blink/renderer/modules/webcodecs/video_encoder.cc index 3cc3a4b6..74b3c7b5 100644 --- a/third_party/blink/renderer/modules/webcodecs/video_encoder.cc +++ b/third_party/blink/renderer/modules/webcodecs/video_encoder.cc
@@ -129,16 +129,19 @@ std::unique_ptr<VideoEncoder::ParsedConfig> VideoEncoder::ParseConfig( const VideoEncoderConfig* config, ExceptionState& exception_state) { + constexpr int kMaxSupportedFrameSize = 8000; auto parsed = std::make_unique<ParsedConfig>(); parsed->options.height = config->height(); - if (parsed->options.height == 0) { + if (parsed->options.height == 0 || + parsed->options.height > kMaxSupportedFrameSize) { exception_state.ThrowTypeError("Invalid height."); return nullptr; } parsed->options.width = config->width(); - if (parsed->options.width == 0) { + if (parsed->options.width == 0 || + parsed->options.width > kMaxSupportedFrameSize) { exception_state.ThrowTypeError("Invalid width."); return nullptr; }
diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn index 03f3c33..89822809 100644 --- a/third_party/blink/renderer/platform/BUILD.gn +++ b/third_party/blink/renderer/platform/BUILD.gn
@@ -988,7 +988,6 @@ "graphics/identifiability_paint_op_digest.h", "graphics/image.cc", "graphics/image.h", - "graphics/image_animation_policy.h", "graphics/image_data_buffer.cc", "graphics/image_data_buffer.h", "graphics/image_decoder_wrapper.cc",
diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image.cc b/third_party/blink/renderer/platform/graphics/bitmap_image.cc index ba2a147..6e9b2c1 100644 --- a/third_party/blink/renderer/platform/graphics/bitmap_image.cc +++ b/third_party/blink/renderer/platform/graphics/bitmap_image.cc
@@ -50,15 +50,16 @@ namespace blink { -int GetRepetitionCountWithPolicyOverride(int actual_count, - ImageAnimationPolicy policy) { +int GetRepetitionCountWithPolicyOverride( + int actual_count, + web_pref::ImageAnimationPolicy policy) { if (actual_count == kAnimationNone || - policy == kImageAnimationPolicyNoAnimation) { + policy == web_pref::kImageAnimationPolicyNoAnimation) { return kAnimationNone; } if (actual_count == kAnimationLoopOnce || - policy == kImageAnimationPolicyAnimateOnce) { + policy == web_pref::kImageAnimationPolicyAnimateOnce) { return kAnimationLoopOnce; } @@ -67,7 +68,7 @@ BitmapImage::BitmapImage(ImageObserver* observer, bool is_multipart) : Image(observer, is_multipart), - animation_policy_(kImageAnimationPolicyAllowed), + animation_policy_(web_pref::kImageAnimationPolicyAllowed), all_data_received_(false), have_size_(false), size_available_(false), @@ -434,7 +435,7 @@ return decoder_ && decoder_->RepetitionCount() != kAnimationNone; } -void BitmapImage::SetAnimationPolicy(ImageAnimationPolicy policy) { +void BitmapImage::SetAnimationPolicy(web_pref::ImageAnimationPolicy policy) { if (animation_policy_ == policy) return;
diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image.h b/third_party/blink/renderer/platform/graphics/bitmap_image.h index 71b5aa5..5b5600d0 100644 --- a/third_party/blink/renderer/platform/graphics/bitmap_image.h +++ b/third_party/blink/renderer/platform/graphics/bitmap_image.h
@@ -31,11 +31,11 @@ #include <memory> #include "base/memory/weak_ptr.h" #include "base/optional.h" +#include "third_party/blink/public/common/web_preferences/image_animation_policy.h" #include "third_party/blink/renderer/platform/geometry/int_size.h" #include "third_party/blink/renderer/platform/graphics/color.h" #include "third_party/blink/renderer/platform/graphics/deferred_image_decoder.h" #include "third_party/blink/renderer/platform/graphics/image.h" -#include "third_party/blink/renderer/platform/graphics/image_animation_policy.h" #include "third_party/blink/renderer/platform/image-decoders/image_animation.h" #include "third_party/blink/renderer/platform/timer.h" #include "third_party/blink/renderer/platform/wtf/casting.h" @@ -80,8 +80,10 @@ void ResetAnimation() override; bool MaybeAnimated() override; - void SetAnimationPolicy(ImageAnimationPolicy) override; - ImageAnimationPolicy AnimationPolicy() override { return animation_policy_; } + void SetAnimationPolicy(web_pref::ImageAnimationPolicy) override; + web_pref::ImageAnimationPolicy AnimationPolicy() override { + return animation_policy_; + } scoped_refptr<Image> ImageForDefaultFrame() override; @@ -159,7 +161,7 @@ // data is updated in DataChanged. PaintImage cached_frame_; - ImageAnimationPolicy + web_pref::ImageAnimationPolicy animation_policy_; // Whether or not we can play animation. bool all_data_received_ : 1; // Whether we've received all our data.
diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image_test.cc b/third_party/blink/renderer/platform/graphics/bitmap_image_test.cc index 455fb7f6..d7fa3b62 100644 --- a/third_party/blink/renderer/platform/graphics/bitmap_image_test.cc +++ b/third_party/blink/renderer/platform/graphics/bitmap_image_test.cc
@@ -687,17 +687,17 @@ // In all cases, the image shouldn't animate. // Only one loop allowed. - image_->SetAnimationPolicy(kImageAnimationPolicyAnimateOnce); + image_->SetAnimationPolicy(web_pref::kImageAnimationPolicyAnimateOnce); image = image_->PaintImageForCurrentFrame(); EXPECT_EQ(image.repetition_count(), kAnimationNone); // No animation allowed. - image_->SetAnimationPolicy(kImageAnimationPolicyNoAnimation); + image_->SetAnimationPolicy(web_pref::kImageAnimationPolicyNoAnimation); image = image_->PaintImageForCurrentFrame(); EXPECT_EQ(image.repetition_count(), kAnimationNone); // Default policy. - image_->SetAnimationPolicy(kImageAnimationPolicyAllowed); + image_->SetAnimationPolicy(web_pref::kImageAnimationPolicyAllowed); image = image_->PaintImageForCurrentFrame(); EXPECT_EQ(image.repetition_count(), kAnimationNone); } @@ -716,17 +716,17 @@ // other cases, it remains loop once. // Only one loop allowed. - image_->SetAnimationPolicy(kImageAnimationPolicyAnimateOnce); + image_->SetAnimationPolicy(web_pref::kImageAnimationPolicyAnimateOnce); image = image_->PaintImageForCurrentFrame(); EXPECT_EQ(image.repetition_count(), kAnimationLoopOnce); // No animation allowed. - image_->SetAnimationPolicy(kImageAnimationPolicyNoAnimation); + image_->SetAnimationPolicy(web_pref::kImageAnimationPolicyNoAnimation); image = image_->PaintImageForCurrentFrame(); EXPECT_EQ(image.repetition_count(), kAnimationNone); // Default policy. - image_->SetAnimationPolicy(kImageAnimationPolicyAllowed); + image_->SetAnimationPolicy(web_pref::kImageAnimationPolicyAllowed); image = image_->PaintImageForCurrentFrame(); EXPECT_EQ(image.repetition_count(), kAnimationLoopOnce); } @@ -744,17 +744,17 @@ // The repetition count is determined by the animation policy. // Only one loop allowed. - image_->SetAnimationPolicy(kImageAnimationPolicyAnimateOnce); + image_->SetAnimationPolicy(web_pref::kImageAnimationPolicyAnimateOnce); image = image_->PaintImageForCurrentFrame(); EXPECT_EQ(image.repetition_count(), kAnimationLoopOnce); // No animation allowed. - image_->SetAnimationPolicy(kImageAnimationPolicyNoAnimation); + image_->SetAnimationPolicy(web_pref::kImageAnimationPolicyNoAnimation); image = image_->PaintImageForCurrentFrame(); EXPECT_EQ(image.repetition_count(), kAnimationNone); // Default policy. - image_->SetAnimationPolicy(kImageAnimationPolicyAllowed); + image_->SetAnimationPolicy(web_pref::kImageAnimationPolicyAllowed); image = image_->PaintImageForCurrentFrame(); EXPECT_EQ(image.repetition_count(), repetition_count_); }
diff --git a/third_party/blink/renderer/platform/graphics/image.h b/third_party/blink/renderer/platform/graphics/image.h index 35a6c4ec..a41843b 100644 --- a/third_party/blink/renderer/platform/graphics/image.h +++ b/third_party/blink/renderer/platform/graphics/image.h
@@ -30,11 +30,11 @@ #include "base/macros.h" #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" +#include "third_party/blink/public/common/web_preferences/image_animation_policy.h" #include "third_party/blink/renderer/platform/geometry/float_point.h" #include "third_party/blink/renderer/platform/geometry/float_size.h" #include "third_party/blink/renderer/platform/geometry/int_rect.h" #include "third_party/blink/renderer/platform/graphics/graphics_types.h" -#include "third_party/blink/renderer/platform/graphics/image_animation_policy.h" #include "third_party/blink/renderer/platform/graphics/image_observer.h" #include "third_party/blink/renderer/platform/graphics/image_orientation.h" #include "third_party/blink/renderer/platform/graphics/paint/paint_image.h" @@ -154,9 +154,9 @@ virtual bool MaybeAnimated() { return false; } // Set animationPolicy - virtual void SetAnimationPolicy(ImageAnimationPolicy) {} - virtual ImageAnimationPolicy AnimationPolicy() { - return kImageAnimationPolicyAllowed; + virtual void SetAnimationPolicy(web_pref::ImageAnimationPolicy) {} + virtual web_pref::ImageAnimationPolicy AnimationPolicy() { + return web_pref::kImageAnimationPolicyAllowed; } // Advances an animated image. For BitmapImage (e.g., animated gifs) this
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index f64798f..3d84bbf 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -462,6 +462,11 @@ status: "experimental", }, { + name: "CSSFontFaceAdvanceOverride", + status: "test", + depends_on: ["CSSFontMetricsOverride"], + }, + { name: "CSSFontMetricsOverride", status: "test", },
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/agent_group_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/agent_group_scheduler_impl.cc index 4f331c6b..7e7d4ee 100644 --- a/third_party/blink/renderer/platform/scheduler/main_thread/agent_group_scheduler_impl.cc +++ b/third_party/blink/renderer/platform/scheduler/main_thread/agent_group_scheduler_impl.cc
@@ -4,11 +4,18 @@ #include "third_party/blink/renderer/platform/scheduler/main_thread/agent_group_scheduler_impl.h" +#include "third_party/blink/public/platform/task_type.h" #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h" namespace blink { namespace scheduler { +MainThreadTaskQueue::QueueCreationParams DefaultTaskQueueCreationParams() { + return MainThreadTaskQueue::QueueCreationParams( + MainThreadTaskQueue::QueueType::kDefault) + .SetShouldMonitorQuiescence(true); +} + static AgentGroupSchedulerImpl* g_current_agent_group_scheduler_impl; // static @@ -26,9 +33,14 @@ AgentGroupSchedulerImpl::AgentGroupSchedulerImpl( MainThreadSchedulerImpl* main_thread_scheduler) - : main_thread_scheduler_(main_thread_scheduler) {} + : default_task_queue_(main_thread_scheduler->NewTaskQueue( + DefaultTaskQueueCreationParams())), + default_task_runner_(default_task_queue_->CreateTaskRunner( + TaskType::kMainThreadTaskQueueDefault)), + main_thread_scheduler_(main_thread_scheduler) {} AgentGroupSchedulerImpl::~AgentGroupSchedulerImpl() { + default_task_queue_->ShutdownTaskQueue(); if (main_thread_scheduler_) { main_thread_scheduler_->RemoveAgentGroupScheduler(this); }
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/agent_group_scheduler_impl.h b/third_party/blink/renderer/platform/scheduler/main_thread/agent_group_scheduler_impl.h index 5bde163..578c651b 100644 --- a/third_party/blink/renderer/platform/scheduler/main_thread/agent_group_scheduler_impl.h +++ b/third_party/blink/renderer/platform/scheduler/main_thread/agent_group_scheduler_impl.h
@@ -5,14 +5,18 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_MAIN_THREAD_AGENT_GROUP_SCHEDULER_IMPL_H_ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_MAIN_THREAD_AGENT_GROUP_SCHEDULER_IMPL_H_ +#include "base/memory/scoped_refptr.h" #include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/scheduler/public/agent_group_scheduler.h" -#include <memory> +namespace base { +class SingleThreadTaskRunner; +} namespace blink { namespace scheduler { class MainThreadSchedulerImpl; +class MainThreadTaskQueue; // AgentGroupScheduler implementation which schedules per-AgentSchedulingGroup // tasks. @@ -26,11 +30,16 @@ AgentGroupSchedulerImpl(const AgentGroupSchedulerImpl&) = delete; AgentGroupSchedulerImpl& operator=(const AgentGroupSchedulerImpl&) = delete; ~AgentGroupSchedulerImpl() override; + scoped_refptr<base::SingleThreadTaskRunner> DefaultTaskRunner() { + return default_task_runner_; + } MainThreadSchedulerImpl* GetMainThreadScheduler() { return main_thread_scheduler_; } private: + scoped_refptr<MainThreadTaskQueue> default_task_queue_; + scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_; MainThreadSchedulerImpl* main_thread_scheduler_; // Not owned. };
diff --git a/third_party/blink/renderer/platform/text/character.h b/third_party/blink/renderer/platform/text/character.h index b02220f..903cbdd 100644 --- a/third_party/blink/renderer/platform/text/character.h +++ b/third_party/blink/renderer/platform/text/character.h
@@ -108,6 +108,12 @@ // http://unicode.org/reports/tr9/#Directional_Formatting_Characters static bool IsBidiControl(UChar32 character); + // Collapsible white space characters defined in CSS: + // https://drafts.csswg.org/css-text-3/#collapsible-white-space + static bool IsCollapsibleSpace(UChar c) { + return c == kSpaceCharacter || c == kNewlineCharacter || + c == kTabulationCharacter || c == kCarriageReturnCharacter; + } static bool TreatAsSpace(UChar32 c) { return c == kSpaceCharacter || c == kTabulationCharacter || c == kNewlineCharacter || c == kNoBreakSpaceCharacter;
diff --git a/third_party/blink/tools/blinkpy/web_tests/controllers/manager.py b/third_party/blink/tools/blinkpy/web_tests/controllers/manager.py index 693a95d..603fb67 100644 --- a/third_party/blink/tools/blinkpy/web_tests/controllers/manager.py +++ b/third_party/blink/tools/blinkpy/web_tests/controllers/manager.py
@@ -36,6 +36,7 @@ The Manager object has a constructor and one main method called run. """ +import fnmatch import json import logging import random @@ -113,12 +114,17 @@ exit_code=exit_codes.NO_TESTS_EXIT_STATUS) test_names = self._finder.split_into_chunks(all_test_names) - if self._options.order == 'natural': test_names.sort(key=self._port.test_key) elif self._options.order == 'random': test_names.sort() random.Random(self._options.seed).shuffle(test_names) + elif self._options.order == 'none': + # Restore the test order to user specified order. + # base.tests() may change the order as it returns tests in the + # real, external/wpt, virtual order. + if paths: + test_names = self._restore_order(paths, test_names) if not self._options.no_expectations: self._printer.write_update('Parsing expectations ...') @@ -286,6 +292,16 @@ tests_to_retry = self._tests_to_retry(retry_results) return (initial_results, all_retry_results) + def _restore_order(self, paths, test_names): + original_test_names = list(test_names) + test_names = [] + for path in paths: + for test in original_test_names: + if test.startswith(path) or fnmatch.fnmatch(test, path): + test_names.append(test) + test_names += list(set(original_test_names) - set(test_names)) + return test_names + def _collect_tests(self, args): return self._finder.find_tests( args,
diff --git a/third_party/blink/tools/blinkpy/web_tests/controllers/manager_unittest.py b/third_party/blink/tools/blinkpy/web_tests/controllers/manager_unittest.py index 14e5ce3..9cacb9e 100644 --- a/third_party/blink/tools/blinkpy/web_tests/controllers/manager_unittest.py +++ b/third_party/blink/tools/blinkpy/web_tests/controllers/manager_unittest.py
@@ -218,3 +218,36 @@ if not port.host.filesystem.exists(dir_name): deleted_dir_count = deleted_dir_count + 1 self.assertEqual(deleted_dir_count, 5) + + def test_restore_order(self): + host = MockHost() + port = host.port_factory.get('test-mac-mac10.10') + + def get_manager(): + manager = Manager(port, + options=optparse.Values({'max_locked_shards': + 1}), + printer=FakePrinter()) + return manager + + manager = get_manager() + paths = [ + "external/wpt/css/css-backgrounds/animations/background-size-interpolation.html", + "virtual/gpu/fast/canvas/CanvasFillTextWithMinimalSize.html", + "fast/backgrounds/size/backgroundSize-*" + ] + # As returned by base.tests() + test_names = [ + "virtual/gpu/fast/canvas/CanvasFillTextWithMinimalSize.html", + "fast/backgrounds/size/backgroundSize-in-background-shorthand.html", + "fast/backgrounds/size/backgroundSize-viewportPercentage-width.html", + "external/wpt/css/css-backgrounds/animations/background-size-interpolation.html" + ] + expected_order = [ + "external/wpt/css/css-backgrounds/animations/background-size-interpolation.html", + "virtual/gpu/fast/canvas/CanvasFillTextWithMinimalSize.html", + "fast/backgrounds/size/backgroundSize-in-background-shorthand.html", + "fast/backgrounds/size/backgroundSize-viewportPercentage-width.html" + ] + test_names_restored = manager._restore_order(paths, test_names) + self.assertEqual(expected_order, test_names_restored)
diff --git a/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_finder.py b/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_finder.py index c12825f5..11ad6e51 100644 --- a/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_finder.py +++ b/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_finder.py
@@ -91,8 +91,9 @@ running_all_tests = True test_files = filter_tests(test_files, [f.split('::') for f in filters]) - # de-dupe the test list here before running them. + # de-dupe the test list and paths here before running them. test_files = list(OrderedDict.fromkeys(test_files)) + paths = list(OrderedDict.fromkeys(paths)) return (paths, test_files, running_all_tests) def _times_trie(self):
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 976f32d..148b678 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -1229,7 +1229,6 @@ crbug.com/6606 external/wpt/mathml/presentation-markup/fractions/frac-parameters-gap-005.html [ Failure ] crbug.com/6606 external/wpt/mathml/presentation-markup/fractions/frac-parameters-gap-006.html [ Failure ] crbug.com/6606 external/wpt/mathml/presentation-markup/mrow/inferred-mrow-stretchy.html [ Failure ] -crbug.com/6606 external/wpt/mathml/presentation-markup/mrow/legacy-mfenced-element-001.html [ Failure ] crbug.com/6606 external/wpt/mathml/presentation-markup/mrow/legacy-mrow-like-elements-001.html [ Failure ] crbug.com/6606 external/wpt/mathml/presentation-markup/mrow/legacy-mrow-like-elements-002.html [ Failure ] crbug.com/6606 external/wpt/mathml/presentation-markup/operators/embellished-operator-001.html [ Failure ] @@ -1338,6 +1337,9 @@ crbug.com/929098 external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-change-checkbox.html [ Failure ] crbug.com/929098 virtual/dark-color-scheme/external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-change-checkbox.html [ Pass ] +crbug.com/1127347 external/wpt/css/selectors/invalidation/is.html [ Failure ] +crbug.com/1127347 external/wpt/css/selectors/invalidation/where.html [ Failure ] + # ====== Style team owned tests to here ====== # ====== Form Controls Refresh (chrome://flags/#form-controls-refresh) failures from here ======
diff --git a/third_party/blink/web_tests/editing/pasteboard/mathml-sanitizer-bypass.html b/third_party/blink/web_tests/editing/pasteboard/mathml-sanitizer-bypass.html index 7040ec7446..31fc99a 100644 --- a/third_party/blink/web_tests/editing/pasteboard/mathml-sanitizer-bypass.html +++ b/third_party/blink/web_tests/editing/pasteboard/mathml-sanitizer-bypass.html
@@ -18,14 +18,21 @@ 'Check whether we have MathML or not'); } +function hasRedBackground(element) { + return window.getComputedStyle(element). + getPropertyValue("background-color") == "rgb(255, 0, 0)" || + Array.from(element.children).some(hasRedBackground); +} + // crbug.com/1011950 selection_test( '<div contenteditable>te|st</div>', selection => { - selection.setClipboardData('<math><xss style=display:block>t<style>X<a title="</style><img src onerror=alert(1)>">.<a>.'); + selection.setClipboardData('<math><xss style=display:block>t<style>X<a title="</style><img src onerror=assert_unreached()>">.<a>.'); selection.document.execCommand('paste'); + assert_false(hasRedBackground(document.documentElement)); }, - '<div contenteditable>te<br>t<img src>">.<a>.|</a>st</div>', + '<div contenteditable>te<math><xss style="display:block"><style>X<a title="</style><img src onerror=assert_unreached()>">.<a></a></a></style></xss></math>t|st</div>', 'Paste blocks script injection'); // crbug.com/1017871 @@ -34,8 +41,9 @@ selection => { selection.setClipboardData('<math><xss style=display:block>t<style>X<a title="</style><style>*{background:red}</style>">.<a>.'); selection.document.execCommand('paste'); + assert_false(hasRedBackground(document.documentElement)); }, - '<div contenteditable>te<br>t">.<a>.|</a>st</div>', + '<div contenteditable>te<math><xss style="display:block"><style>X<a title="</style><style>*{background:red}</style>">.<a></a></a></style></xss></math>t|st</div>', 'Paste blocks HTML style injection'); // crbug.com/1017871 @@ -44,9 +52,11 @@ selection => { selection.setClipboardData('A<math>B<a style=display:block>C<title>D<a id="</title><svg><style>*{background:red}</style>">c'); selection.document.execCommand('paste'); + assert_false(hasRedBackground(document.documentElement)); }, supportsEditableMathML - ? '<div contenteditable>teA<br>C|<svg></svg>st</div>' + ? '<div contenteditable>teA<math>B<a style="display:block"><title>D<a id="</title><svg><style>*{background:red}</style>"></a></title></a></math>C|st</div>' : '<div contenteditable>teA<math>B<br></math>C|<svg></svg>st</div>', 'Paste blocks SVG style injection'); + </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/is-where-parsing-expected.txt b/third_party/blink/web_tests/external/wpt/css/selectors/is-where-parsing-expected.txt index f58dd82..aab5eeb 100644 --- a/third_party/blink/web_tests/external/wpt/css/selectors/is-where-parsing-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/selectors/is-where-parsing-expected.txt
@@ -2,8 +2,8 @@ PASS Multiple selectors with combinators PASS Nested :is PASS Nested :where -FAIL Nested inside :host, without combinators assert_equals: Nested inside :host, without combinators: :host(:is(div)) expected ":host(:is(div))" but got "random-selector" -PASS Nested inside :host, with combinators +PASS Nested inside :host, without combinators +FAIL Nested inside :host, with combinators assert_not_equals: Nested inside :host, with combinators: :host(:is(div .foo)) got disallowed value ":host(:is(div .foo))" PASS Pseudo-classes inside PASS Pseudo-classes after PASS Pseudo-elements after
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/parsing/attribute.html b/third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-attribute.html similarity index 100% rename from third_party/blink/web_tests/external/wpt/css/selectors/parsing/attribute.html rename to third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-attribute.html
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/parsing/child.html b/third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-child.html similarity index 100% rename from third_party/blink/web_tests/external/wpt/css/selectors/parsing/child.html rename to third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-child.html
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/parsing/class.html b/third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-class.html similarity index 100% rename from third_party/blink/web_tests/external/wpt/css/selectors/parsing/class.html rename to third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-class.html
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/parsing/descendant.html b/third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-descendant.html similarity index 100% rename from third_party/blink/web_tests/external/wpt/css/selectors/parsing/descendant.html rename to third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-descendant.html
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/parsing/id.html b/third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-id.html similarity index 100% rename from third_party/blink/web_tests/external/wpt/css/selectors/parsing/id.html rename to third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-id.html
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/parsing/is.html b/third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-is.html similarity index 100% rename from third_party/blink/web_tests/external/wpt/css/selectors/parsing/is.html rename to third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-is.html
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/parsing/not.html b/third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-not.html similarity index 100% rename from third_party/blink/web_tests/external/wpt/css/selectors/parsing/not.html rename to third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-not.html
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/parsing/sibling.html b/third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-sibling.html similarity index 100% rename from third_party/blink/web_tests/external/wpt/css/selectors/parsing/sibling.html rename to third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-sibling.html
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/parsing/universal.html b/third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-universal.html similarity index 100% rename from third_party/blink/web_tests/external/wpt/css/selectors/parsing/universal.html rename to third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-universal.html
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/parsing/where.html b/third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-where.html similarity index 100% rename from third_party/blink/web_tests/external/wpt/css/selectors/parsing/where.html rename to third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-where.html
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/query/query-is.html b/third_party/blink/web_tests/external/wpt/css/selectors/query/query-is.html new file mode 100644 index 0000000..918eaee7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/selectors/query/query-is.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>Selectors Level 4: query using :is()</title> + <link rel="help" href="https://drafts.csswg.org/selectors/#matches"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/css/support/query-testcommon.js"></script> +</head> +<body> + <div id="a1" class="a"> + <div class="b" id="b1"></div> + <div class="c" id="c1"></div> + <div class="c" id="d"></div> + <div class="e" id="e1"></div> + <div class="f" id="f1"></div> + <div class="g"> + <div class="b" id="b2"> + <div class="b" id="b3"></div> + </div> + </div> + <div class="h" id="h1"></div> + </div> + <div class="c" id="c2"> + <div id="a2" class="a"></div> + <div class="e" id="e2"></div> + </div> + <script> + 'use strict'; + + // Simple selector arguments are supported by :is + test_query_selector(document, '.a :is(.b, .c)', + ['b1', 'c1', 'd', 'b2', 'b3']); + + // Compound selector arguments are supported by :is + test_query_selector(document, '.a :is(.c#d, .e)', + ['d', 'e1']); + + // Complex selector arguments are supported by :is + test_query_selector(document, '.a :is(.e+.f, .g>.b, .h)', + ['f1', 'b2', 'h1']); + + // Nested selector arguments are supported by :is + test_query_selector(document, '.a+:is(.b+.f, :is(.c>.e, .g))', + 'e2'); + + // Nested :where selector arguments are supported by :is + test_query_selector(document, '.a :is(:where(:where(.b ~ .c)))', + ['c1', 'd']); + + // Nested :not selector arguments are supported by :is + test_query_selector(document, '.b + :is(.c + .c + .c, .b + .c:not(span), .b + .c + .e) ~ .h', + ['h1']); + </script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/query/query-where.html b/third_party/blink/web_tests/external/wpt/css/selectors/query/query-where.html new file mode 100644 index 0000000..b7cf5e1b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/selectors/query/query-where.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>Selectors Level 4: query using :where()</title> + <link rel="help" href="https://drafts.csswg.org/selectors/#zero-matches"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/css/support/query-testcommon.js"></script> +</head> +<body> + <div id="a1" class="a"> + <div class="b" id="b1"></div> + <div class="c" id="c1"></div> + <div class="c" id="d"></div> + <div class="e" id="e1"></div> + <div class="f" id="f1"></div> + <div class="g"> + <div class="b" id="b2"> + <div class="b" id="b3"></div> + </div> + </div> + <div class="h" id="h1"></div> + </div> + <div class="c" id="c2"> + <div id="a2" class="a"></div> + <div class="e" id="e2"></div> + </div> + <script> + 'use strict'; + + // Simple selector arguments are supported by :where + test_query_selector(document, '.a :where(.b, .c)', + ['b1', 'c1', 'd', 'b2', 'b3']); + + // Compound selector arguments are supported by :where + test_query_selector(document, '.a :where(.c#d, .e)', + ['d', 'e1']); + + // Complex selector arguments are supported by :where + test_query_selector(document, '.a :where(.e+.f, .g>.b, .h)', + ['f1', 'b2', 'h1']); + + // Nested selector arguments are supported by :where + test_query_selector(document, '.a+:where(.b+.f, :where(.c>.e, .g))', + ['e2']); + + // Nested :is selector arguments are supported by :where + test_query_selector(document, '.a :where(:is(:is(.b ~ .c)))', + ['c1', 'd']); + + // Nested :not selector arguments are supported by :where + test_query_selector(document, '.b + :where(.c + .c + .c, .b + .c:not(span), .b + .c + .e) ~ .h', + ['h1']); + </script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/support/query-testcommon.js b/third_party/blink/web_tests/external/wpt/css/support/query-testcommon.js new file mode 100644 index 0000000..73246e17 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/support/query-testcommon.js
@@ -0,0 +1,18 @@ +'use strict'; + +function test_query_selector(parentNode, selector, expected) { + if (!Array.isArray(expected)) + expected = [ expected ]; + + test(function(){ + const elementList = parentNode.querySelectorAll(selector); + assert_equals(elementList.length, expected.length); + + for (let i = 0; i < elementList.length; ++i) { + if (typeof expected[i] === 'string') + assert_equals(elementList[i].id, expected[i]); + else + assert_equals(elementList[i], expected[i]); + } + }, "Selector '" + selector + '" should find the expected elements'); +}
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/cross-origin-isolated-permission.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/cross-origin-isolated-permission.https-expected.txt index f5520f6b..d48cc4da 100644 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/cross-origin-isolated-permission.https-expected.txt +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/cross-origin-isolated-permission.https-expected.txt
@@ -1,8 +1,8 @@ This is a testharness.js-based test. -FAIL origin = https://web-platform.test:8444, value = undefined assert_equals: expected true but got false -FAIL origin = https://web-platform.test:8444, value = * assert_equals: expected true but got false -FAIL origin = https://web-platform.test:8444, value = 'self' assert_equals: expected true but got false -PASS origin = https://web-platform.test:8444, value = 'none' +PASS origin = https://web-platform.test:8444, value = undefined +PASS origin = https://web-platform.test:8444, value = * +PASS origin = https://web-platform.test:8444, value = 'self' +FAIL origin = https://web-platform.test:8444, value = 'none' assert_equals: expected false but got true PASS origin = https://www1.web-platform.test:8444, value = undefined FAIL origin = https://www1.web-platform.test:8444, value = * assert_equals: expected true but got false PASS origin = https://www1.web-platform.test:8444, value = 'self'
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep.https-expected.txt deleted file mode 100644 index 44fd456..0000000 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep.https-expected.txt +++ /dev/null
@@ -1,12 +0,0 @@ -This is a testharness.js-based test. -PASS Same-origin popup with coop/coep -PASS historical: "same-site" popup with coop/coep -PASS Same-origin popup with coop unsafe-none/coep -PASS historical: "same-site" popup with coop unsafe-none/coep -PASS Same-origin popup with coop unsafe-none without coep -PASS historical: "same-site" popup with coop unsafe-none without coep -PASS Same-origin popup without coep -PASS historical: "same-site" popup without coep -FAIL Bonus: window.crossOriginIsolated assert_true: expected true got false -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-sharedworker-success.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-sharedworker-success.https-expected.txt index 7ee8feb..5eb5812 100644 --- a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-sharedworker-success.https-expected.txt +++ b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-sharedworker-success.https-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. FAIL postMessaging to a dedicated sub-worker allows them to see each others' modifications Worker is not defined -FAIL Bonus: self.crossOriginIsolated assert_true: expected true got false +PASS Bonus: self.crossOriginIsolated Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.https-expected.txt deleted file mode 100644 index 54f23662..0000000 --- a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.https-expected.txt +++ /dev/null
@@ -1,5 +0,0 @@ -This is a testharness.js-based test. -PASS postMessaging to a dedicated sub-worker allows them to see each others' modifications -FAIL Bonus: self.crossOriginIsolated assert_true: expected true got false -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/idle-detection/basics.tentative.https.window.js b/third_party/blink/web_tests/external/wpt/idle-detection/basics.tentative.https.window.js index 7fa8578..8abbbb7 100644 --- a/third_party/blink/web_tests/external/wpt/idle-detection/basics.tentative.https.window.js +++ b/third_party/blink/web_tests/external/wpt/idle-detection/basics.tentative.https.window.js
@@ -5,7 +5,7 @@ 'use strict'; promise_setup(async t => { - await test_driver.set_permission({name: 'idle-detection'}, 'granted', false); + await test_driver.set_permission({ name: 'notifications' }, 'granted', false); }) promise_test(async t => {
diff --git a/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html b/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html index 6c6ff6f..5f5b5a8 100644 --- a/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html +++ b/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html
@@ -21,7 +21,7 @@ relative_worker_frame_path; promise_setup(async () => { - await test_driver.set_permission({ name: 'idle-detection' }, 'granted', false); + await test_driver.set_permission({ name: 'notifications' }, 'granted', false); }); promise_test(async t => {
diff --git a/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-feature-policy-attribute.https.sub.html b/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-feature-policy-attribute.https.sub.html index f3cfa0e..06d58bc3 100644 --- a/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-feature-policy-attribute.https.sub.html +++ b/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-feature-policy-attribute.https.sub.html
@@ -17,7 +17,7 @@ const cross_origin_worker_frame_src = sub + same_origin_worker_frame_src; promise_setup(async () => { - await test_driver.set_permission({ name: 'idle-detection' }, 'granted', false); + await test_driver.set_permission({ name: 'notifications' }, 'granted', false); }); promise_test(async t => {
diff --git a/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-feature-policy.https.sub.html b/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-feature-policy.https.sub.html index 75d1540..10cce8b3 100644 --- a/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-feature-policy.https.sub.html +++ b/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-feature-policy.https.sub.html
@@ -17,7 +17,7 @@ const cross_origin_worker_frame_src = sub + same_origin_worker_frame_src; promise_setup(async () => { - await test_driver.set_permission({ name: 'idle-detection' }, 'granted', false); + await test_driver.set_permission({ name: 'notifications' }, 'granted', false); }); promise_test(async t => {
diff --git a/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-default-feature-policy.https.sub.html b/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-default-feature-policy.https.sub.html index f0766ae9..4eaf6c3 100644 --- a/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-default-feature-policy.https.sub.html +++ b/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-default-feature-policy.https.sub.html
@@ -14,7 +14,7 @@ same_origin_src; promise_setup(async () => { - await test_driver.set_permission({ name: 'idle-detection' }, 'granted', false); + await test_driver.set_permission({ name: 'notifications' }, 'granted', false); }); promise_test(async t => {
diff --git a/third_party/blink/web_tests/external/wpt/idle-detection/idle-permission.tentative.https.window.js b/third_party/blink/web_tests/external/wpt/idle-detection/idle-permission.tentative.https.window.js index b6c66e9..af83876 100644 --- a/third_party/blink/web_tests/external/wpt/idle-detection/idle-permission.tentative.https.window.js +++ b/third_party/blink/web_tests/external/wpt/idle-detection/idle-permission.tentative.https.window.js
@@ -3,32 +3,22 @@ 'use strict'; promise_test(async t => { - await test_driver.set_permission({name: 'idle-detection'}, 'denied', false); + await test_driver.set_permission( + { name: 'notifications' }, 'denied', false); - let detector = new IdleDetector(); - await promise_rejects_dom(t, 'NotAllowedError', detector.start()); -}, 'Denying idle-detection permission should block access.'); + let detector = new IdleDetector(); + await promise_rejects_dom(t, 'NotAllowedError', detector.start()); +}, "Deny notifications permission should work."); promise_test(async t => { - await test_driver.set_permission({name: 'idle-detection'}, 'granted', false); + await test_driver.set_permission( + { name: 'notifications' }, 'granted', false); - let detector = new IdleDetector(); - await detector.start(); + let detector = new IdleDetector(); + await detector.start(); - assert_true( - ['active', 'idle'].includes(detector.userState), - 'has a valid user state'); - assert_true( - ['locked', 'unlocked'].includes(detector.screenState), - 'has a valid screen state'); -}, 'Granting idle-detection permission should allow access.'); - -promise_test(async t => { - await test_driver.set_permission({name: 'idle-detection'}, 'prompt', false); - - await promise_rejects_dom(t, 'NotAllowedError', IdleDetector.requestPermission()); - - await test_driver.bless('request permission'); - let state = await IdleDetector.requestPermission(); - assert_equals(state, 'prompt'); -}, 'The idle-detection permission cannot be requested without a user gesture'); + assert_true(['active', 'idle'].includes(detector.userState), + 'has a valid user state'); + assert_true(['locked', 'unlocked'].includes(detector.screenState), + 'has a valid screen state'); +}, "Grant notifications permission should work.");
diff --git a/third_party/blink/web_tests/external/wpt/idle-detection/idlharness-worker.https.window.js b/third_party/blink/web_tests/external/wpt/idle-detection/idlharness-worker.https.window.js index 5464e992..96198642 100644 --- a/third_party/blink/web_tests/external/wpt/idle-detection/idlharness-worker.https.window.js +++ b/third_party/blink/web_tests/external/wpt/idle-detection/idlharness-worker.https.window.js
@@ -4,7 +4,7 @@ 'use strict'; promise_test(async t => { - await test_driver.set_permission({name: 'idle-detection'}, 'granted', false); + await test_driver.set_permission({ name: 'notifications' }, 'granted', false); await fetch_tests_from_worker(new Worker('resources/idlharness-worker.js')); }, 'Run idlharness tests in a worker.');
diff --git a/third_party/blink/web_tests/external/wpt/idle-detection/idlharness.https.window.js b/third_party/blink/web_tests/external/wpt/idle-detection/idlharness.https.window.js index 98c590fb..f2b32d8 100644 --- a/third_party/blink/web_tests/external/wpt/idle-detection/idlharness.https.window.js +++ b/third_party/blink/web_tests/external/wpt/idle-detection/idlharness.https.window.js
@@ -11,7 +11,7 @@ ['idle-detection.tentative'], ['dom', 'html'], async (idl_array, t) => { - await test_driver.set_permission({ name: 'idle-detection' }, 'granted', false); + await test_driver.set_permission({ name: 'notifications' }, 'granted', false); self.idle = new IdleDetector(); let watcher = new EventWatcher(t, self.idle, ["change"]);
diff --git a/third_party/blink/web_tests/external/wpt/idle-detection/interceptor.https.html b/third_party/blink/web_tests/external/wpt/idle-detection/interceptor.https.html index 25dea12b..e597bd3e 100644 --- a/third_party/blink/web_tests/external/wpt/idle-detection/interceptor.https.html +++ b/third_party/blink/web_tests/external/wpt/idle-detection/interceptor.https.html
@@ -11,7 +11,7 @@ 'use strict'; promise_setup(async t => { - await test_driver.set_permission({ name: 'idle-detection' }, 'granted', false); + await test_driver.set_permission({ name: 'notifications' }, 'granted', false); if (isChromiumBased) { await loadChromiumResources(); }
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/idle-detection.tentative.idl b/third_party/blink/web_tests/external/wpt/interfaces/idle-detection.tentative.idl index 865370a2..066e1ede 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/idle-detection.tentative.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/idle-detection.tentative.idl
@@ -21,6 +21,5 @@ readonly attribute UserIdleState? userState; readonly attribute ScreenIdleState? screenState; attribute EventHandler onchange; - [Exposed=Window] static Promise<PermissionState> requestPermission(); Promise<any> start(optional IdleOptions options = {}); };
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/mrow-preferred-width-expected.txt b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/mrow-preferred-width-expected.txt deleted file mode 100644 index 2e6534d6..0000000 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/mrow-preferred-width-expected.txt +++ /dev/null
@@ -1,5 +0,0 @@ -This is a testharness.js-based test. -FAIL Preferred width of mrow with mspace children assert_approx_equals: unknown expected 15 +/- 1 but got 30 -PASS Preferred width of mrow with mn and mo children -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/spacing-expected.txt b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/spacing-expected.txt deleted file mode 100644 index ae516407..0000000 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/spacing-expected.txt +++ /dev/null
@@ -1,12 +0,0 @@ -This is a testharness.js-based test. -PASS operator spacing inside Mrow -PASS operator spacing inside Sqrt -PASS operator spacing inside Style -PASS operator spacing inside Error -PASS operator spacing inside Phantom -PASS operator spacing inside Math -FAIL operator spacing inside Menclose assert_greater_than_equal: expected a number greater than or equal to 50 but got -8 -PASS operator spacing inside Mpadded -FAIL operator spacing inside Unknown assert_greater_than_equal: expected a number greater than or equal to 50 but got -8 -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/inspector-protocol/emulation/idle_detection/idle-emulation-tests.js b/third_party/blink/web_tests/inspector-protocol/emulation/idle_detection/idle-emulation-tests.js index e38d773..1d07709 100644 --- a/third_party/blink/web_tests/inspector-protocol/emulation/idle_detection/idle-emulation-tests.js +++ b/third_party/blink/web_tests/inspector-protocol/emulation/idle_detection/idle-emulation-tests.js
@@ -33,7 +33,7 @@ await dp.Browser.grantPermissions({ origin: location.origin, - permissions: ['idleDetection'], + permissions: ['notifications'], }); // Prepare and run IdleDetector.
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt index 9454760e..fd5e058fc 100644 --- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt +++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -4506,7 +4506,6 @@ method constructor method timeRemaining interface IdleDetector : EventTarget - static method requestPermission attribute @@toStringTag getter onchange getter screenState
diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec index 7caba01..9ee0acf3 100644 --- a/tools/gritsettings/resource_ids.spec +++ b/tools/gritsettings/resource_ids.spec
@@ -331,6 +331,9 @@ "chromeos/components/diagnostics_ui/resources/diagnostics_app_resources.grd": { "includes": [2517], }, + "chromeos/components/file_manager/resources/file_manager_resources.grd": { + "includes": [2518], + }, "chromeos/components/help_app_ui/resources/help_app_resources.grd": { "includes": [2520], },
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index b972237..ef654e6 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -15,11 +15,9 @@ 'masters': { 'chrome': { 'chromeos-arm-generic-cfi-thin-lto-chrome': 'chromeos_arm-generic_cfi_thin_lto_official', - 'chromeos-betty-arc-r-chrome': 'chromeos_betty-arc-r_include_unwind_tables_official_use_fake_dbus_clients', 'chromeos-betty-pi-arc-cfi-thin-lto-chrome': 'chromeos_betty-pi-arc_cfi_thin_lto_official', 'chromeos-betty-pi-arc-chrome': 'chromeos_betty-pi-arc_include_unwind_tables_official_use_fake_dbus_clients', 'chromeos-eve-chrome': 'chromeos_eve_include_unwind_tables_official', - 'chromeos-eve-arc-r-chrome': 'chromeos_eve-arc-r_include_unwind_tables_official', 'chromeos-kevin-chrome': 'chromeos_kevin_include_unwind_tables_official', # Don't include unwind tables for the remaining three builders since # they monitor binary size growth, which may be affected by the tables. @@ -668,6 +666,8 @@ 'internal.chrome.fyi': { 'chromeos-amd64-generic-lacros-internal-rel': 'chromeos_amd64-generic_lacros_rel', + 'chromeos-betty-arc-r-chrome': 'chromeos_betty-arc-r_include_unwind_tables_official_use_fake_dbus_clients', + 'chromeos-eve-arc-r-chrome': 'chromeos_eve-arc-r_include_unwind_tables_official', 'linux-autofill-captured-sites-rel': 'release_bot', 'linux-password-manager-captured-sites-rel': 'release_bot', 'lorenz-graph-dbg': 'android_debug_static_bot',
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 673a733..ecd2dc3 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -29184,7 +29184,10 @@ <int value="3470" label="ElementAttachInternalsBeforeConstructor"/> <int value="3471" label="SMILElementHasRepeatNEventListener"/> <int value="3472" label="WebTransport"/> - <int value="3473" label="IdleDetectionPermissionRequested"/> + <int value="3473" label="WebkitPrerenderStartEventFired"/> + <int value="3474" label="WebkitPrerenderStopEventFired"/> + <int value="3475" label="WebkitPrerenderLoadEventFired"/> + <int value="3476" label="WebkitPrerenderDOMContentLoadedEventFired"/> </enum> <enum name="FeaturePolicyAllowlistType"> @@ -42654,7 +42657,6 @@ <int value="19815558" label="EnableSettingsShortcutSearch:disabled"/> <int value="21055794" label="OpenXR:enabled"/> <int value="23556595" label="MarkHttpAs:enabled"/> - <int value="24124916" label="PrefetchPrivacyChanges:enabled"/> <int value="26875005" label="disable-explicit-dma-fences"/> <int value="27507364" label="apps-keep-chrome-alive"/> <int value="29212695" label="OfflineIndicator:enabled"/> @@ -43594,7 +43596,6 @@ <int value="1036068554" label="enable-android-pay-integration-v2"/> <int value="1036565901" label="AssistPersonalInfo:enabled"/> <int value="1037961753" label="CCTIncognito:disabled"/> - <int value="1038234679" label="PrefetchPrivacyChanges:disabled"/> <int value="1038264914" label="PerDeskShelf:enabled"/> <int value="1042202617" label="RemoteCopyReceiver:enabled"/> <int value="1043291220" label="OverviewSwipeToClose:disabled"/> @@ -74106,6 +74107,8 @@ <int value="20" label="ApkWebInstallFailed"/> <int value="21" label="CancelledOnWebAppProviderShuttingDown"/> <int value="22" label="WebAppProviderNotReady"/> + <int value="23" label="SuccessOfflineOnlyInstall"/> + <int value="24" label="SuccessOfflineFallbackInstall"/> </enum> <enum name="WebAppInstallSource">
diff --git a/tools/metrics/histograms/generate_expired_histograms_array.py b/tools/metrics/histograms/generate_expired_histograms_array.py index 423f9e2..bd0b321 100755 --- a/tools/metrics/histograms/generate_expired_histograms_array.py +++ b/tools/metrics/histograms/generate_expired_histograms_array.py
@@ -13,6 +13,7 @@ import extract_histograms import merge_xml +import histogram_paths _DATE_FILE_RE = re.compile(r".*MAJOR_BRANCH_DATE=(.+).*") _CURRENT_MILESTONE_RE = re.compile(r"MAJOR=([0-9]{2,3})\n") @@ -232,7 +233,7 @@ arguments.major_branch_date_filepath: File path for base date. arguments.milestone_filepath: File path for milestone information. """ - descriptions = merge_xml.MergeFiles(arguments.inputs) + descriptions = merge_xml.MergeFiles(histogram_paths.ALL_XMLS) with open(arguments.major_branch_date_filepath, "r") as date_file: branch_file_content = date_file.read() with open(arguments.milestone_filepath, "r") as milestone_file: @@ -277,10 +278,6 @@ "-m", required=True, help="A path to the file with the milestone information.") - arg_parser.add_argument( - "inputs", - nargs="+", - help="Paths to .xml files with histogram descriptions.") return arg_parser.parse_args()
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index d1042f9..fc2b6d1 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -19039,3910 +19039,6 @@ <summary>Records whenever a Blimp tab toggles visibility.</summary> </histogram> -<histogram name="Blink.Accessibility.NumTreeUpdatesQueuedBeforeLayout" - units="updates" expires_after="M86"> - <owner>aboxhall@chromium.org</owner> - <owner>chrome-a11y-core@chromium.org</owner> - <summary> - Records how many tree updates were queued at the time updates are being - processed after layout. If we are trying to process too many updates at - once, we should investigate how we might be able to merge similar updates - without losing important information. - </summary> -</histogram> - -<histogram name="Blink.Animate.UpdateTime" units="microseconds" - expires_after="2021-03-15"> -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> - -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> - -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> - - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Time spent processing main frame animations during a main frame update. - - This histogram does not record metrics on machines with low-resolution - clocks. - </summary> -</histogram> - -<histogram name="Blink.Animation.CompositedAnimationFailureReason" - enum="CompositorAnimationsFailureReason" expires_after="2021-02-14"> - <owner>smcgruer@chromium.org</owner> - <owner>animations-dev@chromium.org</owner> - <summary> - Reasons an Animation is not suitable for running on the compositor thread. - - Note that a given Animation may have more than one reason, so this histogram - cannot be used to determine the overall rate of 'composited' vs - 'noncomposited' animations. - </summary> -</histogram> - -<histogram name="Blink.Binding.CreateV8ContextForMainFrame" - units="microseconds" expires_after="2019-04-16"> - <obsolete> - Removed as of 04/2019 with the removal of field trial experiment settings. - </obsolete> - <owner>peria@chromium.org</owner> - <summary> - Time spent to create a v8::Context instance during a page loading in the - main-frame window. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram name="Blink.Binding.CreateV8ContextForNonMainFrame" - units="microseconds" expires_after="2019-04-16"> - <obsolete> - Removed as of 04/2019 with the removal of field trial experiment settings. - </obsolete> - <owner>peria@chromium.org</owner> - <summary> - Time spent to create a v8::Context instance during a page loading in a - non-main-frame window, e.g. iframe. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram name="Blink.Binding.InitializeMainLocalWindowProxy" - units="microseconds" expires_after="M80"> - <obsolete> - Removed as of 04/2019 with the removal of field trial experiment settings. - </obsolete> - <owner>peria@chromium.org</owner> - <summary> - Time spent initializing LocalWindowProxy during a page loading in main - windows. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram name="Blink.Binding.InitializeMainRemoteWindowProxy" - units="microseconds" expires_after="2019-04-16"> - <obsolete> - Removed as of 04/2019 with the removal of field trial experiment settings. - </obsolete> - <owner>peria@chromium.org</owner> - <summary> - Time spent initializing RemoteWindowProxy during a page loading in main - frame of OOPIF. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram name="Blink.Binding.InitializeMainWindowProxy" units="microseconds" - expires_after="2017-03-26"> - <obsolete> - Removed as of 03/2017. This metric was split into two metrics depending if - it figures time for local window proxies or remote ones. - </obsolete> - <owner>peria@chromium.org</owner> - <summary> - Time spent initializing WindowProxy during a page loading in main windows. - </summary> -</histogram> - -<histogram name="Blink.Binding.InitializeNonMainLocalWindowProxy" - units="microseconds" expires_after="2019-04-16"> - <obsolete> - Removed as of 04/2019 with the removal of field trial experiment settings. - </obsolete> - <owner>peria@chromium.org</owner> - <summary> - Time spent initializing LocalWindowProxy during a page loading in non-main - windows, e.g. iframe. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram name="Blink.Binding.InitializeNonMainRemoteWindowProxy" - units="microseconds" expires_after="2019-04-16"> - <obsolete> - Removed as of 04/2019 with the removal of field trial experiment settings. - </obsolete> - <owner>peria@chromium.org</owner> - <summary> - Time spent initializing RemoteWindowProxy during a page loading in OOPIF. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram name="Blink.Binding.InitializeNonMainWindowProxy" - units="microseconds" expires_after="2017-03-26"> - <obsolete> - Removed as of 03/2017. This metric was split into two metrics depending if - it figures time for local window proxies or remote ones. - </obsolete> - <owner>peria@chromium.org</owner> - <summary> - Time spent initializing WindowProxy during a page loading in non-main - windows, e.g. iframe. - </summary> -</histogram> - -<histogram name="Blink.Binding.InitializeWindowProxy" units="microseconds" - expires_after="2016-11-01"> - <obsolete> - Removed as of 10/2016. This metric was split into two metrics depending if - it figures time for main windows. - </obsolete> - <owner>peria@chromium.org</owner> - <summary>Time spent initializing WindowProxy during a page loading.</summary> -</histogram> - -<histogram name="Blink.BudgetAPI.QueryBudget" units="budget" - expires_after="2018-08-20"> - <obsolete> - Removed as of 08/2018 (M70) with the removal of the Budget API. - </obsolete> - <owner>peter@chromium.org</owner> - <summary> - Whenever the Budget API framework receives a query for the current budget, - this records the total budget available to the origin, which is an internal - Chrome value for the amount of background processing an origin can do - without visibly alerting the user. Scale for the budget is 0 to 100. Care - should be taken when drawing conclusions from this metric, as budget is - based on both engagement and usage, so could vary significantly based on - user behaviour and origin. - </summary> -</histogram> - -<histogram name="Blink.BudgetAPI.Reserve" enum="BooleanSuccess" - expires_after="2018-08-20"> - <obsolete> - Removed as of 08/2018 (M70) with the removal of the Budget API. - </obsolete> - <owner>peter@chromium.org</owner> - <summary> - Whenever the Budget API framework receives a request to reserve budget for a - future background operation, this records whether the reserve request - succeeded or not. - </summary> -</histogram> - -<histogram name="Blink.Canvas.2DLayerBridgeIsDeferred" enum="BooleanSuccess" - expires_after="2021-01-31"> - <obsolete> - Removed as the deferral path is always used now - 11/2019. - </obsolete> - <owner>aaronhk@chromium.org</owner> - <owner>fserb@chromium.org</owner> - <summary> - Records if a 2D Layer Bridge is using deferred rendering when it is - destroyed. Emitted in Canvas2DLayerBridge::~Canvas2DLayerBridge. - </summary> -</histogram> - -<histogram name="Blink.Canvas.2DPrintingAsVector" enum="BooleanSuccess" - expires_after="2021-01-31"> - <owner>fserb@chromium.org</owner> - <owner>juanmihd@chromium.org</owner> - <summary> - Records if a Canvas is being printed as a vector or as an image. - </summary> -</histogram> - -<histogram name="Blink.Canvas.ContentChangeMode" - enum="BooleanContentChangeMode" expires_after="2021-03-07"> - <owner>yiyix@chromium.org</owner> - <owner>fserb@chromium.org</owner> - <summary> - Records whether the contents in the canvas buffer needed to be preserved via - a copy when replacing the target buffer for drawing a new frame. This metric - is recorded each time the target buffer needs to be replaced. It's recorded - once per frame. - </summary> -</histogram> - -<histogram name="Blink.Canvas.ContextType" enum="CanvasContextType" - expires_after="2021-01-31"> - <owner>fserb@chromium.org</owner> - <owner>aaronhk@chromium.org</owner> - <summary> - Records the context type names used to create canvas rendering contexts. - </summary> -</histogram> - -<histogram name="Blink.Canvas.CreateImageBitmapSource" - enum="CanvasCreateImageBitmapSource" expires_after="2021-01-31"> - <owner>fserb@chromium.org</owner> - <owner>aaronhk@chromium.org</owner> - <summary> - The source from which an ImageBitmap is created by a createImageBitmap call. - </summary> -</histogram> - -<histogram name="Blink.Canvas.DrawImage" units="microseconds" - expires_after="2021-01-31"> - <obsolete> - Replaced with Blink.Canvas.DrawImage.Duration in 10/2018. - </obsolete> - <owner>fserb@chromium.org</owner> - <summary> - Time spent on 2D canvas drawImage API call. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram base="true" name="Blink.Canvas.DrawImage.Duration" - units="microseconds" expires_after="2021-01-31"> - <owner>fserb@chromium.org</owner> - <owner>aaronhk@chromium.org</owner> - <summary> - Time spent on the main thread during a 2D canvas drawImage API call. - - Note: This metric drops reports on clients with low-resolution clocks, which - means these reports will be biased against a portion of the population on - Windows. See Windows.HasHighResolutionTimeTicks for the affected sample. - </summary> -</histogram> - -<histogram base="true" name="Blink.Canvas.DrawImage.SqrtNumberOfPixels" - units="sqrt(pixels)" expires_after="2021-01-31"> - <owner>fserb@chromium.org</owner> - <owner>aaronhk@chromium.org</owner> - <summary> - Stores the square root of the number of pixels drawn into a Canvas. - Different histograms per CanvasImageSource. - </summary> -</histogram> - -<histogram name="Blink.Canvas.GetImageData" units="microseconds" - expires_after="2018-10-26"> - <obsolete> - Replaced with Blink.Canvas.GetImageDataScaledDuration in 10/2018. - </obsolete> - <owner>fserb@chromium.org</owner> - <summary> - Time spent on 2D canvas getImageData API call. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram base="true" name="Blink.Canvas.GetImageDataScaledDuration" - units="microseconds * 10/sqrt(pixels)" expires_after="2021-01-31"> - <owner>fserb@chromium.org</owner> - <owner>aaronhk@chromium.org</owner> - <summary> - Time in microseconds * 10 (10e-5 seconds) spent on the 2D canvas - getImageData API call, divided by the square root of the total number of - pixels of the image extracted from the canvas. Smaller is faster. - - The idea behind this elaborated unit is that the bigger the area of a canvas - the longer the operation GetImageData takes, so we want a way to measure the - overall performance regardless of the size of the canvas. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram name="Blink.Canvas.GPUAccelerated2DCanvasDisableDeferralReason" - enum="CanvasGPUAccelerated2DCanvasDisableDeferralReason" - expires_after="2019-12-31"> - <obsolete> - Canvas doesn't disable deferral anymore since July 2019. - </obsolete> - <owner>fserb@chromium.org</owner> - <owner>aaronhk@chromium.org</owner> - <summary> - The reasons why a GPU accelerated canvas stopped deferring its rendering - operations. - </summary> -</histogram> - -<histogram name="Blink.Canvas.GPUFallbackToCPU" - enum="CanvasGPUFallbackToCPUScenario" expires_after="2021-01-31"> - <owner>fserb@chromium.org</owner> - <summary>Logs the occurrences of canvas fallback from GPU to CPU.</summary> -</histogram> - -<histogram name="Blink.Canvas.HasRendered" enum="Boolean" - expires_after="2021-01-31"> - <owner>juanmihd@chromium.org</owner> - <owner>fserb@chromium.org</owner> - <summary> - Records if the canvas has been rendered at least once. Recorded on disposal. - </summary> -</histogram> - -<histogram name="Blink.Canvas.HibernationEvents" enum="CanvasHibernationEvent" - expires_after="2021-01-31"> - <owner>fserb@chromium.org</owner> - <summary> - Records the occurrence of events related to 2D canvas GPU resource - hibernation. - </summary> -</histogram> - -<histogram name="Blink.Canvas.IsComposited" enum="BooleanSuccess" - expires_after="2021-01-31"> - <owner>aaronhk@chromium.org</owner> - <owner>fserb@chromium.org</owner> - <summary> - Records if the canvas context is composited or not. Recorded in - HTMLCanvasElement::GetCanvasRenderingContext. - </summary> -</histogram> - -<histogram name="Blink.Canvas.MaximumInflightResources" - units="canvas resources" expires_after="2021-01-31"> - <owner>aaronhk@chromium.org</owner> - <owner>fserb@chromium.org</owner> - <summary> - Reports the maximum number or canvas resources used at any one time by a - canvas resource provider. Logged in the destructor of - CanvasResourceProvider. - </summary> -</histogram> - -<histogram name="Blink.Canvas.NumCanvasesPerPage" units="canvases" - expires_after="2021-01-31"> - <owner>aaronhk@chromium.org</owner> - <owner>fserb@chromium.org</owner> - <summary> - When a Document is shutdown, reports the number of canvases on that page. - </summary> -</histogram> - -<histogram name="Blink.Canvas.OffscreenCommitTimer" units="microseconds" - expires_after="2018-11-01"> - <obsolete> - Removed in 10/2018. Offscreen Canvas no longer needs commits. - </obsolete> - <owner>fserb@chromium.org</owner> - <owner>xidachen@chromium.org</owner> - <summary> - Wall clock durations of OffscreenCanvas.commit() calls. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram name="Blink.Canvas.PutImageData" units="microseconds" - expires_after="2018-10-26"> - <obsolete> - Replaced with Blink.Canvas.PutImageDataScaledDuration in 10/2018. - </obsolete> - <owner>fserb@chromium.org</owner> - <summary> - Time spent on 2D canvas putImageData API call. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram base="true" name="Blink.Canvas.PutImageDataScaledDuration" - units="microseconds * 10/sqrt(pixels)" expires_after="2021-01-31"> - <owner>fserb@chromium.org</owner> - <owner>aaronhk@chromium.org</owner> - <summary> - Time in microseconds * 10 (10e-5 seconds) spent on the 2D canvas - putImageData API call, divided by the square root of the total number of - pixels of the imageData painted into the canvas. Smaller is faster. - - The idea behind this elaborated unit is that the bigger the area of a canvas - the longer the operation PutImageData takes, so we want a way to measure the - overall performance regardless of the size of the canvas. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram name="Blink.Canvas.RasterDuration" units="microseconds" - expires_after="2021-01-31"> - <owner>aaronhk@chromium.org</owner> - <owner>fserb@chromium.org</owner> - <summary> - Records the CPU, GPU and combined raster time for a random sampling of - canvas frames for accelerated and deferred canvases. Records wall time for a - random sampling of unaccelerated canvases. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram base="true" name="Blink.Canvas.RequestedImageMimeTypes" - enum="RequestedImageMimeType" expires_after="2021-01-31"> - <owner>fserb@chromium.org</owner> - <owner>aaronhk@chromium.org</owner> - <summary> - Records the occurence of image file formats passed into toDataURL and toBlob - functions in canvas. - </summary> -</histogram> - -<histogram name="Blink.Canvas.ResourceProviderIsAccelerated" - enum="BooleanHardwareAccelerated" expires_after="2021-01-31"> - <owner>aaronhk@chromium.org</owner> - <owner>fserb@chromium.org</owner> - <summary>Logs if the canvas resource provider is accelerated or not.</summary> -</histogram> - -<histogram name="Blink.Canvas.ResourceProviderType" - enum="CanvasResourceProviderType" expires_after="2021-01-31"> - <owner>aaronhk@chromium.org</owner> - <owner>fserb@chromium.org</owner> - <summary>Records the type of resource provider used for a canvas.</summary> -</histogram> - -<histogram name="Blink.Canvas.ResourceProviderUsage" - enum="CanvasResourceProviderUsage" expires_after="2021-01-31"> - <owner>aaronhk@chromium.org</owner> - <owner>fserb@chromium.org</owner> - <summary> - Records the requested resource usage for a canvas resource provider. - </summary> -</histogram> - -<histogram name="Blink.Canvas.SqrtNumberOfPixels" units="sqrt(pixels)" - expires_after="2021-01-31"> - <owner>aaronhk@chromium.org</owner> - <owner>fserb@chromium.org</owner> - <summary> - Stores the square root of the number of pixels in a new or resized offscreen - canvas. Emitted from CanvasRenderingContextHost::RecordCanvasSizeToUMA. - </summary> -</histogram> - -<histogram base="true" name="Blink.Canvas.ToBlob.CompleteEncodingDelay" - units="microseconds" expires_after="2021-01-31"> - <owner>fserb@chromium.org</owner> - <owner>aaronhk@chromium.org</owner> - <summary> - This metric measures the total time spent on completing encoding all the - rows of an image (jpeg or png), as part of a canvas.toBlob API call. - Encoding occurs during one or more idle periods on the main thread and the - waiting time of the next idle period is included in the measurement. If the - code has swtiched to force encoding path, we will not measure the delay in - this metric. - - This metric is useful in helping us adjust the IdleTaskCompleteTimeoutDelay - in canvas.toBlob. When the encoding idle task is delayed for longer than - IdleTaskCompleteTimeoutDelay, the browser will switch to a non-idle task to - force encoding to happen on the main thread. - - In addition, metric values from OffscreenCanvas.convertToBlob API call are - also gathered into this histogram, because the logic flow is exactly the - same as canvas.toBlob. It's worth to note that the values can come from idle - tasks on either main or worker thread. - - Note: This metric drops reports on clients with low-resolution clocks, which - means these reports will be biased against a portion of the population on - Windows. See Windows.HasHighResolutionTimeTicks for the affected sample. - </summary> -</histogram> - -<histogram name="Blink.Canvas.ToBlob.IdleEncodeDuration" units="microseconds" - expires_after="2017-12-04"> - <obsolete> - Replaced with Blink.Canvas.ToBlob.CompleteEncodingDelay in 2017/12. - </obsolete> - <owner>fserb@chromium.org</owner> - <owner>aaronhk@chromium.org</owner> - <summary> - This metric measures the total time spent on encoding all the rows of an - image (jpeg or png), excluding the waiting time of next idle periods. This - is part of a canvas.toBlob API call. Encoding occurs during one or more idle - periods on the main thread. - </summary> -</histogram> - -<histogram base="true" name="Blink.Canvas.ToBlob.IdleTaskStatus" - enum="IdleTaskStatus" expires_after="2021-01-31"> - <owner>fserb@chromium.org</owner> - <owner>aaronhk@chromium.org</owner> - <summary> - Records the status of the idle task when finishing a toBlob call. - - In addition, metric values from OffscreenCanvas.convertToBlob API call are - also gathered into this histogram, because the logic flow is exactly the - same as canvas.toBlob. It's worth to note that the values can come from idle - tasks on either main or worker thread. - </summary> -</histogram> - -<histogram base="true" name="Blink.Canvas.ToBlob.InitiateEncodingDelay" - units="microseconds" expires_after="2021-01-31"> - <owner>fserb@chromium.org</owner> - <owner>aaronhk@chromium.org</owner> - <summary> - This metric measures the time spent from initiating image encoding (jpeg or - png) on idle task to the actual execution time of initiation, as part of a - canvas.toBlob API call. - - This metric is useful in helping us adjust the IdleTaskStartTimeoutDelay in - canvas.toBlob. When the initialization idle task is delayed for longer than - IdleTaskStartTimeoutDelay, the browser will switch to a non-idle task to - force initialization and encoding to occur on the main thread. - - In addition, metric values from OffscreenCanvas.convertToBlob API call are - also gathered into this histogram, because the logic flow is exactly the - same as canvas.toBlob. It's worth to note that the values can come from idle - tasks on either main or worker thread. - - Note: This metric drops reports on clients with low-resolution clocks, which - means these reports will be biased against a portion of the population on - Windows. See Windows.HasHighResolutionTimeTicks for the affected sample. - </summary> -</histogram> - -<histogram base="true" name="Blink.Canvas.ToBlob.ScaledDuration" - units="microseconds/sqrt(pixels)" expires_after="2021-01-31"> - <owner>fserb@chromium.org</owner> - <owner>aaronhk@chromium.org</owner> - <summary> - Time in microseconds spent on the 2D canvas toBlob API call, divided by the - square root of the total number of pixels of the canvas. - - In addition, metric values from OffscreenCanvas.convertToBlob API call are - also gathered into this histogram, because the logic flow is exactly the - same as canvas.toBlob. It's worth to note that the values can come from idle - tasks on either main or worker thread. - - Note: This metric drops reports on clients with low-resolution clocks, which - means these reports will be biased against a portion of the population on - Windows. See Windows.HasHighResolutionTimeTicks for the affected sample. - </summary> -</histogram> - -<histogram name="Blink.Canvas.ToBlobDuration" units="microseconds" - expires_after="2018-10-30"> - <obsolete> - Replaced with Blink.Canvas.ToBlob.ScaledDuration in 10/2018. - </obsolete> - <owner>fserb@chromium.org</owner> - <owner>aaronhk@chromium.org</owner> - <summary> - Time spent on 2D canvas toBlob API call. - - In addition, metric values from OffscreenCanvas.convertToBlob API call are - also gathered into this histogram, because the logic flow is exactly the - same as canvas.toBlob. It's worth to note that the values can come from idle - tasks on either main or worker thread. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram name="Blink.Canvas.ToDataURL" units="microseconds" - expires_after="2018-11-02"> - <obsolete> - Replaced with Blink.Canvas.ToDataURLScaledDuration in 10/2018. - </obsolete> - <owner>fserb@chromium.org</owner> - <summary> - Time spent on 2D canvas toDataURL API call. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram base="true" name="Blink.Canvas.ToDataURLScaledDuration" - units="microseconds/sqrt(pixels)" expires_after="2021-01-31"> - <owner>fserb@chromium.org</owner> - <owner>aaronhk@chromium.org</owner> - <summary> - Time spent on 2D canvas toDataURL API call divided by the square root of the - total number of pixels of the image. Smaller is faster. - - The idea behind this unit is that the bigger the area of a canvas the longer - the operation ToDataURL takes, so we want a way to measure the overall - performance regardless of the size of the canvas. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram name="Blink.Canvas.WillReadFrequently" - enum="BooleanWillReadFrequently" expires_after="2021-01-31"> - <owner>fserb@chromium.org</owner> - <summary> - Logs if the canvas is initialized to be read frequently or not. - </summary> -</histogram> - -<histogram name="Blink.CheckerableImageCount" enum="CheckerableImageType" - expires_after="2018-05-08"> - <obsolete> - Removed on 2018-05-04. - </obsolete> - <owner>khushalsagar@chromium.org</owner> - <summary> - The number of images which could have been checkered (async decoded) for a - performance gain, split by the DOM element type on which they were used. - This is recorded each time an image for an element created by the page is - loaded, either from the network or the local cache. The browser heuristics - define an image to be checkerable if it is expected to have a long decode - duration. Since these images may be on the rendering critical path, decoding - them asychronously from painting other content can provide better - performance be reducing overall content checkerboarding. - </summary> -</histogram> - -<histogram name="Blink.ColorGamut.Destination" enum="Gamut" expires_after="M85"> - <owner>brianosman@chromium.org</owner> - <owner>mcasas@google.com</owner> - <owner>ccameron@chromium.org</owner> - <summary>Gamut properties of destination color space.</summary> -</histogram> - -<histogram name="Blink.ColorGamut.Source" enum="Gamut" expires_after="M80"> - <obsolete> - No useful signal. Deprecated 7/2019. - </obsolete> - <owner>brianosman@chromium.org</owner> - <owner>mcasas@google.com</owner> - <owner>ccameron@chromium.org</owner> - <summary>Gamut properties of image color space.</summary> -</histogram> - -<histogram name="Blink.ColorSpace.Destination" enum="Gamma" expires_after="M85"> - <owner>brianosman@chromium.org</owner> - <owner>mcasas@google.com</owner> - <owner>ccameron@chromium.org</owner> - <summary>Gamma properties of destination color space.</summary> -</histogram> - -<histogram name="Blink.ColorSpace.Destination.ExtractedRawData" - enum="ColorSpaceExtractedRawDataResult" expires_after="2017-02-28"> - <obsolete> - Merged into Blink.ColorSpace.Destination.ICCResult on 2017-02-28. - </obsolete> - <owner>ccameron@chromium.org</owner> - <summary> - Whether or not the output color space ICC profile was able to produce raw - transfer function tables. - </summary> -</histogram> - -<histogram name="Blink.ColorSpace.Destination.ICCResult" - enum="ICCProfileAnalyzeResult" expires_after="2020-03-08"> - <obsolete> - No useful signal. Deprecated 2020-03-03. - </obsolete> - <owner>brianosman@chromium.org</owner> - <owner>mcasas@google.com</owner> - <owner>ccameron@chromium.org</owner> - <summary> - The result of analyzing the destiation color space's ICC profile. - </summary> -</histogram> - -<histogram name="Blink.ColorSpace.Destination.LinearFitError" units="units" - expires_after="2017-02-28"> - <obsolete> - Linear fit found to be always inaccurate on 2017-02-28. - </obsolete> - <owner>ccameron@chromium.org</owner> - <summary> - The L-infinity error (in 8-bit values) of the numerical approximation of - table-based ICC profile transfer functions, when falling back to a linear - approximation. - </summary> -</histogram> - -<histogram name="Blink.ColorSpace.Destination.Matrix" - enum="ColorSpaceMatrixResult" expires_after="2017-02-28"> - <obsolete> - Merged into Blink.ColorSpace.Destination.ICCResult on 2017-02-28. - </obsolete> - <owner>ccameron@chromium.org</owner> - <summary> - Whether or not to-XYZD50 matrix was extracted from the output color space - ICC profile. - </summary> -</histogram> - -<histogram name="Blink.ColorSpace.Destination.NonlinearFitConverged" - enum="ColorSpaceNonlinearFitConverged" expires_after="2018-05-17"> - <obsolete> - Nonlinear fit code moved to skcms on 2018-04-25. - </obsolete> - <owner>ccameron@chromium.org</owner> - <summary> - Whether or not the nonlinear least squares fit of the table-based ICC - profile transfer function for a single channel converged. - </summary> -</histogram> - -<histogram name="Blink.ColorSpace.Destination.NonlinearFitError" units="units" - expires_after="2018-05-17"> - <obsolete> - Nonlinear fit code moved to skcms on 2018-04-25. - </obsolete> - <owner>ccameron@chromium.org</owner> - <summary> - The L-infinity error (in 8-bit values) of the numerical approximation of - table-based ICC profile transfer functions for a single channel, when the - nonlinear approximation converged. - </summary> -</histogram> - -<histogram name="Blink.ColorSpace.Destination.NonlinearFitErrorCombined" - units="units" expires_after="M85"> - <owner>brianosman@chromium.org</owner> - <owner>mcasas@google.com</owner> - <owner>ccameron@chromium.org</owner> - <summary> - The L-infinity error (in 8-bit values) of the numerical approximation of - table-based ICC profile transfer functions for all channels combined, when - the nonlinear approximation converged. - </summary> -</histogram> - -<histogram name="Blink.ColorSpace.Destination.Numerical" - enum="ColorSpaceNumericalResult" expires_after="2017-02-28"> - <obsolete> - Merged into Blink.ColorSpace.Destination.ICCResult on 2017-02-28. - </obsolete> - <owner>ccameron@chromium.org</owner> - <summary> - Whether or not the output color space ICC profile has a numerical transfer - function. - </summary> -</histogram> - -<histogram name="Blink.ColorSpace.Destination.OneMinusTMax" units="units" - expires_after="2017-02-28"> - <obsolete> - TMax found to almost always be 1 on 2017-02-28. - </obsolete> - <owner>ccameron@chromium.org</owner> - <summary> - One minus the maximum value of table-based ICC profile transfer functions as - an 8-bit fixed-point value. This histogram is temporary, to see if we can - bake in the assumption that it will almost always be 255. - </summary> -</histogram> - -<histogram name="Blink.ColorSpace.Destination.TMin" units="units" - expires_after="2017-02-28"> - <obsolete> - TMin found to almost always be 0 on 2017-02-28. - </obsolete> - <owner>ccameron@chromium.org</owner> - <summary> - The minimum value of table-based ICC profile transfer functions as an 8-bit - fixed-point value. This histogram is temporary, to see if we can bake in the - assumption that it will almost always be 0. - </summary> -</histogram> - -<histogram name="Blink.ColorSpace.Source" enum="Gamma" expires_after="M77"> - <obsolete> - No useful signal. Deprecated 7/2019. - </obsolete> - <owner>brianosman@chromium.org</owner> - <owner>mcasas@google.com</owner> - <owner>ccameron@chromium.org</owner> - <summary>Gamma properties of image color space.</summary> -</histogram> - -<histogram base="true" name="Blink.Compositing.LayerPromotionCount" - units="units" expires_after="2021-01-24"> - <owner>pdr@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Number of composited layers based on various reasons. Recorded when a page - finishes its layer updates. - </summary> -</histogram> - -<histogram name="Blink.Compositing.UpdateTime" units="microseconds" - expires_after="2021-03-01"> - <obsolete> - Obsolete as of http://crrev.com/794384 and M86. - </obsolete> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Time spent updating compositing in the Blink document lifecycle. This is the - legacy compositing approach. BlinkGenPropertyTrees launches part of the new - compositing approach and will use both this and - Blink.CompositingCommit.UpdateTime. - - Note: As of M70, this histogram has stopped recording metrics on machines - with low-resolution clocks. - - TODO(crbug.com/1100711): This is being replaced soon by CompositingInputs + - CompositingAssignments (== Compositing). - </summary> -</histogram> - -<histogram name="Blink.CompositingAssignments.UpdateTime" units="microseconds" - expires_after="2021-03-01"> -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> - - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Time spent updating compositing assignments in the Blink document lifecycle. - This is the legacy compositing approach. - - Note: this histogram has stopped recording metrics on machines with - low-resolution clocks. - </summary> -</histogram> - -<histogram name="Blink.CompositingCommit.UpdateTime" units="microseconds" - expires_after="2021-03-01"> -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> - - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Time spent updating and pushing layers at the end of the paint step in the - Blink document lifecycle. This is the new compositing approach in - CompositeAfterPaint and is largely implemented by PaintArtifactCompositor. - BlinkGenPropertyTrees is an incremental launch of part of the new - compositing approach and will use both this and - Blink.{CompositingInputs+CompositingAssignments}.UpdateTime. - - Note: As of M70, this histogram has stopped recording metrics on machines - with low-resolution clocks. - </summary> -</histogram> - -<histogram name="Blink.CompositingInputs.UpdateTime" units="microseconds" - expires_after="2021-03-01"> -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> - - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Time spent updating compositing inputs in the Blink document lifecycle. This - is the legacy compositing approach. - - Note: this histogram has stopped recording metrics on machines with - low-resolution clocks. - </summary> -</histogram> - -<histogram name="Blink.Compression.CompressionStream.Format" - enum="CompressionStreamsFormat" expires_after="2021-01-24"> - <owner>ricea@chromium.org</owner> - <owner>yhirano@chromium.org</owner> - <summary> - Compression format passed to the constructor of the JavaScript API - "CompressionStream", which is used for lossless compression of - arbitrary binary data. Recorded once per call to the constructor. This - measures which compression formats are most commonly used in the wild. - </summary> -</histogram> - -<histogram name="Blink.Compression.DecompressionStream.Format" - enum="CompressionStreamsFormat" expires_after="2021-01-24"> - <owner>ricea@chromium.org</owner> - <owner>yhirano@chromium.org</owner> - <summary> - Compression format passed to the constructor of the JavaScript API - "DecompressionStream", which is used for lossless decompression of - arbitrary binary data. Recorded once per call to the constructor. This - measures which compression formats are most commonly used in the wild. - </summary> -</histogram> - -<histogram name="Blink.CookieJar.SyncCookiesSetTime" units="microseconds" - expires_after="2020-01-20"> - <obsolete> - Removed as of 01/20/2020. - </obsolete> - <owner>kinuko@chromium.org</owner> - <owner>dcheng@chromium.org</owner> - <summary> - Microseconds per sync IPC call to set cookies. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram name="Blink.CookieJar.SyncCookiesTime" units="microseconds" - expires_after="2020-01-20"> - <obsolete> - Removed as of 01/20/2020. - </obsolete> - <owner>kinuko@chromium.org</owner> - <owner>dcheng@chromium.org</owner> - <summary> - Microseconds per sync IPC call to fetch cookies. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram name="Blink.CookieStore.MatchType" enum="CookieStoreMatchType" - expires_after="M87"> - <owner>ayui@chromium.org</owner> - <owner>pwnall@chromium.org</owner> - <summary> - Records match type option set by the developer for Cookie Store query APIs - to measure the usage of the option during Origin Trial to better evaluate - the best shape of the API. - </summary> -</histogram> - -<histogram name="Blink.CSSPaintValue.PaintOffThread" - enum="BooleanCompositorCSSPaint" expires_after="2021-09-08"> - <owner>xidachen@chromium.org</owner> - <owner>smcgruer@chromium.org</owner> - <summary> - Records if a CSS Paint is painted on the compositor thread or has fallen - back to the main thread. - </summary> -</histogram> - -<histogram name="Blink.DecodedImage.CanvasExpanded" - enum="BooleanCanvasExpanded" expires_after="2016-11-30"> - <obsolete> - Removed as of 11/29/2016. - </obsolete> - <owner>ryansturm@chromium.org</owner> - <owner>bengr@google.com</owner> - <summary> - The original canvas dimensions were sufficient to determine image size. This - is logged once per image header decode, which happens typically twice per - image on the page. - </summary> -</histogram> - -<histogram name="Blink.DecodedImage.DensitySizeCorrectionDetected" - enum="BooleanPresent" expires_after="2021-01-03"> - <owner>schenney@chromium.org</owner> - <owner>noam.j.rosenthal@gmail.com</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Indicates whether a decoded image contains density correction metadata, i.e. - when its resolution and dimension EXIF values match. - </summary> -</histogram> - -<histogram name="Blink.DecodedImage.EffectiveDimensionsLocation" units="bytes" - expires_after="2016-11-30"> - <obsolete> - Removed as of 11/29/2016. - </obsolete> - <owner>ryansturm@chromium.org</owner> - <owner>bengr@google.com</owner> - <summary> - How many bytes of the file were read before an image width and height were - determined. This is logged once per image header decode, which happens - typically twice per image on the page. - </summary> -</histogram> - -<histogram name="Blink.DecodedImage.JpegDensity" units="0.01 bits per pixel" - expires_after="2018-08-31"> - <obsolete> - Removed as of 08/23/2018. Replaced by Blink.DecodedImage.JpegDensity.* - </obsolete> - <owner>deymo@google.com</owner> - <owner>compression-dev@google.com</owner> - <summary> - The compressed image density measured in 0.01 bits per pixel. This is logged - once per image load after the whole image is loaded and only for JPEGs with - at least 100 pixels on each dimension. - </summary> -</histogram> - -<histogram name="Blink.DecodedImage.JpegDensity.1000px" - units="0.01 bits per pixel" expires_after="2020-08-10"> - <obsolete> - Removed in M79. Replaced by Blink.DecodedImage.JpegDensity.KiBWeighted. - </obsolete> - <owner>deymo@google.com</owner> - <owner>compression-dev@google.com</owner> - <summary> - The compressed image density measured in 0.01 bits per pixel. This is logged - once per image load after the whole image is loaded and only for JPEGs with - at least 1000 pixels on the smallest dimension (width or height). - </summary> -</histogram> - -<histogram name="Blink.DecodedImage.JpegDensity.100px" - units="0.01 bits per pixel" expires_after="2020-02-23"> - <obsolete> - Removed in M79. Replaced by Blink.DecodedImage.JpegDensity.KiBWeighted. - </obsolete> - <owner>deymo@google.com</owner> - <owner>compression-dev@google.com</owner> - <summary> - The compressed image density measured in 0.01 bits per pixel. This is logged - once per image load after the whole image is loaded and only for JPEGs with - at least 100 pixels on the smallest dimension (width or height) but less - than 400 pixels on the smallest dimension. - </summary> -</histogram> - -<histogram name="Blink.DecodedImage.JpegDensity.400px" - units="0.01 bits per pixel" expires_after="2020-02-23"> - <obsolete> - Removed in M79. Replaced by Blink.DecodedImage.JpegDensity.KiBWeighted. - </obsolete> - <owner>deymo@google.com</owner> - <owner>compression-dev@google.com</owner> - <summary> - The compressed image density measured in 0.01 bits per pixel. This is logged - once per image load after the whole image is loaded and only for JPEGs with - at least 400 pixels on the smallest dimension (width or height) but less - than 1000 pixels on the smallest dimension. - </summary> -</histogram> - -<histogram name="Blink.DecodedImage.JpegDensity.KiBWeighted" - units="0.01 bits per pixel" expires_after="2021-02-14"> - <owner>deymo@google.com</owner> - <owner>compression-dev@google.com</owner> - <summary> - The compressed image size in KiB per image density measured in 0.01 bits per - pixel. This is logged once per image load after the whole image is loaded - and only for JPEGs with at least 100 pixels on the smallest dimension (width - or height). The reported count for a sample represents the image size - rounded to the nearest KiB. - </summary> -</histogram> - -<histogram name="Blink.DecodedImage.Orientation" enum="DecodedImageOrientation" - expires_after="M81"> - <owner>andrescj@chromium.org</owner> - <owner>rob.buis@samsung.org</owner> - <summary>Image orientation inferred during decode.</summary> -</histogram> - -<histogram name="Blink.DecodedImage.WebPFileFormat" enum="WebPFileFormat" - expires_after="2021-02-14"> - <owner>mcasas@chromium.org</owner> - <owner>andrescj@chromium.org</owner> - <summary> - WebP file format parsed during Blink's header parsing phase (which should - happen only once per image). - </summary> -</histogram> - -<histogram name="Blink.DecodedImage.XCanvasExpansion" units="pixels" - expires_after="2016-11-30"> - <obsolete> - Removed as of 11/29/2016. - </obsolete> - <owner>ryansturm@chromium.org</owner> - <owner>bengr@google.com</owner> - <summary> - How much the canvas width needed to be expanded as a result of the first - frame's width and x-offset being larger than the initial canvas width. This - is logged once per image header decode, which happens typically twice per - image on the page. - </summary> -</histogram> - -<histogram name="Blink.DecodedImage.YCanvasExpansion" units="pixels" - expires_after="2016-11-30"> - <obsolete> - Removed as of 11/29/2016. - </obsolete> - <owner>ryansturm@chromium.org</owner> - <owner>bengr@google.com</owner> - <summary> - How much the canvas height needed to be expanded as a result of the first - frame's height and y-offset being larger than the initial canvas height. - This is logged once per image header decode, which happens typically twice - per image on the page. - </summary> -</histogram> - -<histogram name="Blink.DecodedImageType" enum="DecodedImageType" - expires_after="2021-02-07"> - <owner>urvang@chromium.org</owner> - <summary>Image codec inferred during decode.</summary> -</histogram> - -<histogram name="Blink.EffectiveZoom" units="%" expires_after="2021-03-01"> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - The EffectiveZoom as reported by ComputedStyle in a Blink renderer. The - value is reported each time the effective zoom is set to a new value. The - maximum zoom reported is 400% to keep the histogram of reasonable size. - </summary> -</histogram> - -<histogram name="Blink.EventListenerDuration.Resize" units="microseconds" - expires_after="2018-01-17"> - <obsolete> - Removed 01/2018. - </obsolete> - <owner>bokan@chromium.org</owner> - <summary> - Time it takes to execute all the `resize` event listeners on a page when a - resize event is fired. Tracked only for the main frame. - </summary> -</histogram> - -<histogram name="Blink.Fetch.RequestResourceTime" units="microseconds" - expires_after="M82"> - <owner>csharrison@chromium.org</owner> - <summary> - The total microseconds spent in ResourceFetcher::requestResource. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram name="Blink.Fonts.AndroidFontLookupLoadFromFileTime" units="ms" - expires_after="M88"> - <owner>drott@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Records the duration it takes to load the font lookup table from file. - Reported when the font unique name lookup table is loaded at browser startup - on Android and loading was successful. The metric is not recorded when the - file did not exist or could not be parsed; use - Blink.Fonts.AndroidFontScanningLoadFromFileSuccess to determine how often - this metric is recorded. - </summary> -</histogram> - -<histogram name="Blink.Fonts.AndroidFontLookupTableReadyTime" units="ms" - expires_after="M88"> - <owner>drott@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Records the duration it takes from starting to prepare the font lookup table - until it is ready. Independent of whether it is loaded from file or whether - the fonts are scanned. Reported when the font unique name lookup table is - loaded at browser startup on Android. - </summary> -</histogram> - -<histogram name="Blink.Fonts.AndroidFontScanningLoadFromFileSuccess" - enum="BooleanSuccess" expires_after="M88"> - <owner>drott@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Counts the ratio of whether it was possible to load the font table from file - successfully or not. Reported when the font unique name lookup table is - loaded at browser startup on Android. - </summary> -</histogram> - -<histogram name="Blink.Fonts.AndroidFontScanningPersistToFileSuccess" - enum="BooleanSuccess" expires_after="M88"> - <owner>drott@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Counts the ratio of whether it was possible to store the font table to disk - after the metadata has been indexed. Reported on Android when the font - unique name lookup table is stored after indexing. - </summary> -</histogram> - -<histogram name="Blink.Fonts.AndroidFontScanningResult" - enum="FontScanningResult" expires_after="M88"> - <owner>drott@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Reports success or failure of extracting metadata from a single font file. - Reported when the font unique name lookup table is rebuilt on Android (i.e. - after a firmware update or first start with empty cache folder). - </summary> -</histogram> - -<histogram name="Blink.Fonts.AndroidFontScanningTableBuildTime" units="ms" - expires_after="M88"> - <owner>drott@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Records duration of scanning available fonts for font name metadata, sorting - the list and making it available to renderers. Reported when the font unique - name lookup table is rebuilt on Android (i.e. after a firmware update or - first start with empty cache folder). - </summary> -</histogram> - -<histogram name="Blink.Fonts.AndroidFontScanningUpdateNeeded" - enum="BooleanSuccess" expires_after="M88"> - <owner>drott@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Counts the ratio of whether it was necessary to rebuild the font table or - not. Reported when after the unique name lookup table is loaded from disk at - browser startup on Android. - </summary> -</histogram> - -<histogram name="Blink.Fonts.DataAccess.StreamCreation" enum="BooleanSuccess" - expires_after="M88"> - <owner>oyiptong@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <owner>storage-dev@chromium.org</owner> - <summary> - Counts success or failure in attempting to obtain font bytes as stream with - base address from Skia. - </summary> -</histogram> - -<histogram name="Blink.Fonts.Enumeration.Duration" units="ms" - expires_after="M88"> - <owner>oyiptong@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <owner>storage-dev@chromium.org</owner> - <summary> - Records duration of enumerating available fonts for font name metadata. - Reported on Mac platforms only, when the fonts are enumerated from the - system APIs if there is a cache miss. - </summary> -</histogram> - -<histogram name="Blink.Fonts.HarfBuzzFaceZeroCopyAccess" enum="BooleanSuccess" - expires_after="M88"> - <owner>drott@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Counts success or failure of attempting to access font tables using the zero - copy instantiation method in the HarfBuzz integration layer. This value is - only recorded on non-Mac platforms. Reported each time a HarfBuzz face - object is created. - </summary> -</histogram> - -<histogram name="Blink.Fonts.ShapeCache" units="units" expires_after="M81"> - <owner>eae@chromium.org</owner> - <summary> - Total number of entries in all Blink ShapeCache instances. The value is - reported each time the FontCache::purge() method is called. - </summary> -</histogram> - -<histogram name="Blink.Fonts.VariableFontsRatio" - enum="WebFontInstantiationResult" expires_after="M88"> - <owner>drott@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Tracks adoption ratio of variable fonts compared to conventional (in the - sense of non-variable) web fonts. Recorded at the time of instantiating a - Skia SkTypeface from the successfully decoded web font blob. - </summary> -</histogram> - -<histogram name="Blink.Fonts.WindowsUniqueLocalFontInstantiationResult" - enum="WindowsUniqueLocalFontInstantiationResult" expires_after="M88"> - <owner>drott@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Tracks whether a locally uniquely matched font can be instantiated inside - the renderer. Recorded at the time the renderer tries to instantiate the - font in the font cache. If it fails (in rare cases), it can either be caused - by the font being placed outside the Windows Fonts directory, or for an - unknown reason. Track this to identify whether a browser side helper is - needed to open the file handle outside the sandbox and pass it into the - renderer. - </summary> -</histogram> - -<histogram name="Blink.Fonts.WinFallback.LegacyNoneFound" units="units" - expires_after="M88"> - <owner>drott@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Tracks Blink Windows font fallback results while migrating to API based - fallback vs. the previous use of a hard-coded list. Records a data point - when the legacy hard-coded list code did not find fallback for a particular - Unicode code block ID (ICU::UBlockCode). Recorded at the time of Blink - layout code requesting a fallback font for a character and locale. - </summary> -</histogram> - -<histogram name="Blink.Fonts.WinFallback.LegacyWinAPIDisagree" units="units" - expires_after="M88"> - <owner>drott@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Tracks Blink Windows font fallback results while migrating to API based - fallback vs. the previous use of a hard-coded list. Records a data point - when the Windows API out of process fallback code and the legacy hard-coded - list fallback code disagree in fallback font result for a particular Unicode - code block ID (ICU::UBlockCode). Recorded at the time of Blink layout code - requesting a fallback font for a character and locale. - </summary> -</histogram> - -<histogram name="Blink.Fonts.WinFallback.NoFallbackFound" units="units" - expires_after="M88"> - <owner>drott@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Tracks Blink Windows font fallback results while migrating to API based - fallback vs. the previous use of a hard-coded list. Records a data point - when no fallback font result was found for a particular Unicode code block - ID (ICU::UBlockCode) through either the out-of-process Windows DWrite API or - the hard-coded list fallback code. Recorded at the time of Blink layout code - requesting a fallback font for a character and locale. - </summary> -</histogram> - -<histogram name="Blink.Fonts.WinFallback.WinAPINoneFound" units="units" - expires_after="M88"> - <owner>drott@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Tracks Blink Windows font fallback results while migrating to API based - fallback vs. the previous use of a hard-coded list. Records a data point - when the Windows API out of process fallback code did not find fallback for - a particular Unicode code block ID (ICU::UBlockCode). Recorded at the time - of Blink layout code requesting a fallback font for a character and locale. - </summary> -</histogram> - -<histogram name="Blink.ForcedStyleAndLayout.UpdateTime" units="microseconds" - expires_after="2021-03-15"> -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> - - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Time spent computing layouts due to Javascript value requests. Specifically, - time spent in Blink Document::UpdateStyleAndLayoutIgnorePendingStylesheets. - - This histogram only records metrics on machines with high-resolution clocks. - </summary> -</histogram> - -<histogram name="Blink.Gesture.Merged" enum="GestureMergeState" - expires_after="M77"> - <obsolete> - UserActivationV2 made UserGestureTokens obselete, so the merge stats is now - irrelevant. - </obsolete> - <owner>jyasskin@chromium.org</owner> - <owner>domenic@google.com</owner> - <summary> - How many times two user gesture tokens were merged by UserGestureIndicator, - and whether each token had an active gesture. One of the new token's - gestures, if any, is moved to the old token. - </summary> -</histogram> - -<histogram name="Blink.HandleInputEvents.UpdateTime" units="microseconds" - expires_after="2021-03-01"> -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> - - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Time spent processing rAF-aligned input during a main frame update. - - This histogram does not record metrics on machines with low-resolution - clocks. - </summary> -</histogram> - -<histogram name="Blink.HitTestDocumentUpdate.UpdateTime" units="microseconds" - expires_after="2021-03-01"> -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> - - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Time spent preparing the document for hit testing during a main frame - update. It does not compute the actual hit test time, rather the style, - layout, compositing, etc time to prepare for the test. - - This histogram does not record metrics on machines with low-resolution - clocks. - </summary> -</histogram> - -<histogram name="Blink.HTMLParsing.ChunkCount" units="chunks" - expires_after="2021-03-31"> - <owner>schenney@chromium.org</owner> - <owner>dom-dev@chromium.org</owner> - <summary> - The number of chunks parsed while loading a page. Each chunk represents a - piece of the HTML content that can be loaded without blocking or yielding. - - This histogram does not record metrics on machines with low-resolution - clocks. - </summary> -</histogram> - -<histogram name="Blink.HTMLParsing.ParsingTimeMax" units="microseconds" - expires_after="2021-03-31"> - <owner>schenney@chromium.org</owner> - <owner>dom-dev@chromium.org</owner> - <summary> - While parsing a page, the maximum time used to parse a single chunk before - being blocked, yielding or completing, in microseconds. - - This histogram does not record metrics on machines with low-resolution - clocks. - </summary> -</histogram> - -<histogram name="Blink.HTMLParsing.ParsingTimeMin" units="microseconds" - expires_after="2021-03-31"> - <owner>schenney@chromium.org</owner> - <owner>dom-dev@chromium.org</owner> - <summary> - While parsing a page, the minimum time used to parse a single chunk before - being blocked, yielding or completing, in microseconds. - - This histogram does not record metrics on machines with low-resolution - clocks. - </summary> -</histogram> - -<histogram name="Blink.HTMLParsing.ParsingTimeTotal" units="microseconds" - expires_after="2021-03-31"> - <owner>schenney@chromium.org</owner> - <owner>dom-dev@chromium.org</owner> - <summary> - While parsing a page, the total amount of time spent in the - HTMLDocumentParser performing parsing, in microseconds. - - This histogram does not record metrics on machines with low-resolution - clocks. - </summary> -</histogram> - -<histogram name="Blink.HTMLParsing.TokensParsedAverage" units="tokens" - expires_after="2021-03-31"> - <owner>schenney@chromium.org</owner> - <owner>dom-dev@chromium.org</owner> - <summary> - While parsing a page, the average number of tokens parsed across all chunks. - </summary> -</histogram> - -<histogram name="Blink.HTMLParsing.TokensParsedMax" units="tokens" - expires_after="2021-03-31"> - <owner>schenney@chromium.org</owner> - <owner>dom-dev@chromium.org</owner> - <summary> - While parsing a page, the maximum number of tokens parsed as a chunk. - </summary> -</histogram> - -<histogram name="Blink.HTMLParsing.TokensParsedMin" units="tokens" - expires_after="2021-03-31"> - <owner>schenney@chromium.org</owner> - <owner>dom-dev@chromium.org</owner> - <summary> - While parsing a page, the minimum number of tokens parsed as a chunk. - </summary> -</histogram> - -<histogram name="Blink.HTMLParsing.YieldedTimeAverage" units="microseconds" - expires_after="2021-03-31"> - <owner>schenney@chromium.org</owner> - <owner>dom-dev@chromium.org</owner> - <summary> - While parsing a page, the average time between parsing of two chunks, in - microseconds. Will not be recorded if only one chunk was parsed. - - This histogram does not record metrics on machines with low-resolution - clocks. - </summary> -</histogram> - -<histogram name="Blink.HTMLParsing.YieldedTimeMax" units="microseconds" - expires_after="2021-03-31"> - <owner>schenney@chromium.org</owner> - <owner>dom-dev@chromium.org</owner> - <summary> - While parsing a page, the maximum time between parsing of two chunks, in - microseconds. Will not be recorded if only one chunk was parsed. - - This histogram does not record metrics on machines with low-resolution - clocks. - </summary> -</histogram> - -<histogram name="Blink.HTMLParsing.YieldedTimeMin" units="microseconds" - expires_after="2021-03-31"> - <owner>schenney@chromium.org</owner> - <owner>dom-dev@chromium.org</owner> - <summary> - While parsing a page, the minimum time between parsing of two chunks, in - microseconds. Will not be recorded if only one chunk was parsed. - - This histogram does not record metrics on machines with low-resolution - clocks. - </summary> -</histogram> - -<histogram name="Blink.ImageDecoders.IncrementalDecodeNeeded" - enum="IncrementalDecodeNeeded" expires_after="2021-01-31"> - <owner>mbarowsky@chromium.org</owner> - <owner>andrescj@chromium.org</owner> - <summary> - For JPEG and WebP images, whether all image data has been received before - decoding begins or whether we are still receiving data and will need to send - partial image data to the decoder and pause/resume decoding until complete. - - It is emitted when the DeferredImageDecoder is about to create the first - DecodingImageGenerator for an image. - </summary> -</histogram> - -<histogram base="true" name="Blink.ImageDecoders.IncrementallyDecodedByteSize" - units="bytes" expires_after="2021-03-07"> - <owner>mbarowsky@chromium.org</owner> - <owner>andrescj@chromium.org</owner> - <summary> - Images for which only partial image data has been received before decoding - begins. This may be because the image is very large or complex (less - compressed) or because of slow network or resource loading. More precisely, - the bucket in which the decode will be counted (IncrementallyDecoded or - InitiallyFullyDecoded) is computed when the DeferredImageDecoder is about to - create the first DecodingImageGenerator for an image and the byte size is - emitted when all data is received. - </summary> -</histogram> - -<histogram base="true" name="Blink.ImageDecoders.InitiallyFullyDecodedByteSize" - units="bytes" expires_after="2021-02-07"> - <owner>mbarowsky@chromium.org</owner> - <owner>andrescj@chromium.org</owner> - <summary> - Images for which all image data has been received before decoding begins. - This may be because the image has a small file size (very compressed), - because of a fast network/resource loading connection, because the data was - preloaded with JavaScript, or because a decode was requested through - JavaScript IMG.decode() API, which must wait for all data to be received per - the specification. More precisely, the bucket in which the decode will be - counted (IncrementallyDecoded or InitiallyFullyDecoded) is computed when the - DeferredImageDecoder is about to create the first DecodingImageGenerator for - an image and the byte size is emitted when all data is received. - </summary> -</histogram> - -<histogram name="Blink.ImageDecoders.Jpeg.Area" units="pixels" - expires_after="2021-02-28"> - <owner>andrescj@chromium.org</owner> - <summary> - Number of pixels in a decoded JPEG image. Recorded after decoding is done by - Blink's JPEG decoder (as opposed to, possibly, a hardware decode - accelerator). Tracking the image area may include degenerate cases, e.g., an - image with area = 10000 and dimensions = 1x10000. However, it is reasonable - to assume these cases are relatively rare and the area of the image can - serve as a proxy of how useful a decode accelerator can be (the larger the - area, the better). - </summary> -</histogram> - -<histogram name="Blink.ImageDecoders.Jpeg.ColorSpace" enum="JpegColorSpace" - expires_after="2021-02-07"> - <owner>andrescj@chromium.org</owner> - <owner>mcasas@chromium.org</owner> - <summary> - JPEG color space of a decoded image as guessed by libjpeg_turbo. Recorded - after decoding is done by Blink's JPEG decoder (as opposed to, possibly, a - hardware decode accelerator). When the color space is YCbCr, the chroma - subsampling is also recorded. - </summary> -</histogram> - -<histogram name="Blink.ImplCompositorCommit.UpdateTime" units="microseconds" - expires_after="2021-03-01"> -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> - - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Time spent updating layers in the compositor thread during a - ProxyMain::BeginMainFrame. It is the actual work time, excluding time spent - waiting for the compositor thread to begin. - - Note: This histogram does not record metrics on machines with low-resolution - clocks. - </summary> -</histogram> - -<histogram name="Blink.IntersectionObservation.UpdateTime" units="microseconds" - expires_after="2021-03-15"> -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> - - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Time spent computing IntersectionObserver observations in the Blink document - lifecycle. - - Note: As of M70, this histogram has stopped recording metrics on machines - with low-resolution clocks. - </summary> -</histogram> - -<histogram name="Blink.KeyboardLock.MethodCalled" enum="KeyboardLockMethods" - expires_after="2020-12-31"> - <owner>joedow@chromium.org</owner> - <owner>garykac@chromium.org</owner> - <summary> - Records each call to the navigator.keyboard{Lock|Unlock} methods. - </summary> -</histogram> - -<histogram name="Blink.Layout.NGRatio.Blocks" units="%" - expires_after="2021-04-15"> - <owner>tkent@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Records LayoutNG ratio for the number of blocks. - - This records a percentage of LayoutNG-based blocks relative to all blocks. - This is recorded once per page on unloading the page. A value takes into - account of all frames in a single page. - - See https://bit.ly/ng-ratio for more details. - </summary> -</histogram> - -<histogram name="Blink.Layout.NGRatio.Calls" units="%" - expires_after="2021-04-15"> - <owner>tkent@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Records LayoutNG ratio for the number of UpdateLayout calls. - - This records a percentage of UpdateLayout() calls for LayoutNG-based objects - relative to all UpdateLayout() calls. This is recorded once per page on - unloading the page. A value takes into account of all frames in a single - page. - - See https://bit.ly/ng-ratio for more details. - </summary> -</histogram> - -<histogram name="Blink.Layout.UpdateTime" units="microseconds" - expires_after="2021-02-28"> -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> - - <owner>schenney@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Time spent updating layout in the Blink document lifecycle. - - This histogram does not record metrics on machines with low-resolution - clocks. - </summary> -</histogram> - -<histogram name="Blink.LazyLoad.CrossOriginFrames.InitialDeferralAction" - enum="LazyLoad.FrameInitialDeferralAction" expires_after="2021-03-07"> - <owner>sclittle@chromium.org</owner> - <summary> - Records the initial lazy loading action taken for a cross-origin iframe. - </summary> -</histogram> - -<histogram - name="Blink.LazyLoad.CrossOriginFrames.LoadStartedAfterBeingDeferred" - enum="NQEEffectiveConnectionType" expires_after="2021-02-21"> - <owner>sclittle@chromium.org</owner> - <summary> - Records the effective connection type whenever a lazily-loaded iframe that - wasn't initially hidden or near the viewport starts loading. The count for - an effective connection type in this histogram can be subtracted from the - 'Deferred' bucket from the - Blink.LazyLoad.CrossOriginFrames.InitialDeferralAction.* histogram for the - corresponding effective connection type to determine the number of iframes - that LazyLoad is avoiding to load altogether. - </summary> -</histogram> - -<histogram name="Blink.LazyLoad.CrossOriginFrames.VisibleAfterBeingDeferred" - enum="NQEEffectiveConnectionType" expires_after="2021-02-21"> - <owner>sclittle@chromium.org</owner> - <summary> - Records the effective connection type whenever a lazily-loaded iframe that - wasn't initially hidden or near the viewport becomes visible. The count for - an effective connection type in this histogram can be subtracted from the - corresponding count in - Blink.LazyLoad.CrossOriginFrames.LoadStartedAfterBeingDeferred to determine - how many iframes were loaded unnecessarily by LazyLoad. - </summary> -</histogram> - -<histogram base="true" name="Blink.MainFrame.AnimateRatio" units="%" - expires_after="2020-11-08"> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The percentage of time between a BeginMainFrame and paint results commit in - Blink that is used for computing Main Frame animations and rAF callbacks. - </summary> -</histogram> - -<histogram base="true" name="Blink.MainFrame.CompositingAssignmentsRatio" - units="%" expires_after="2020-11-08"> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The percentage of time between a BeginMainFrame and paint results commit in - Blink that is used for computing compositing assignments. - </summary> -</histogram> - -<histogram base="true" name="Blink.MainFrame.CompositingCommitRatio" units="%" - expires_after="2020-11-08"> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The percentage of time between a BeginMainFrame and paint results commit in - Blink that is used for committing paint results to the compositor. - </summary> -</histogram> - -<histogram base="true" name="Blink.MainFrame.CompositingInputsRatio" units="%" - expires_after="2020-11-08"> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The percentage of time between a BeginMainFrame and paint results commit in - Blink that is used for computing compositing inputs. - </summary> -</histogram> - -<histogram base="true" name="Blink.MainFrame.CompositingRatio" units="%" - expires_after="2020-11-08"> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The percentage of time between a BeginMainFrame and paint results commit in - Blink that is used for computing Compositing. - </summary> -</histogram> - -<histogram base="true" name="Blink.MainFrame.ForcedStyleAndLayoutRatio" - units="%" expires_after="2021-01-10"> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The time between each paint results commit used in computing forced style - recalc and layouts for this document and ancestors as a percentage of the - Blink local frame lifecycle update time. - </summary> -</histogram> - -<histogram base="true" name="Blink.MainFrame.HandleInputEventsRatio" units="%" - expires_after="2020-11-08"> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The percentage of time between a BeginMainFrame and paint results commit in - Blink that is used for processing rAF aligned input. - </summary> -</histogram> - -<histogram base="true" name="Blink.MainFrame.HitTestDocumentUpdateRatio" - units="%" expires_after="2020-11-08"> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The percentage of time between a BeginMainFrame and paint results commit in - Blink that is used for updating the document in preparation for hit testing. - </summary> -</histogram> - -<histogram base="true" name="Blink.MainFrame.ImplCompositorCommitRatio" - units="%" expires_after="2020-11-08"> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The percentage of time between a BeginMainFrame and paint results commit in - Blink that is used for committing the layer tree to the impl thread, - excluding time spend waiting for the CC thread to begin processing. - </summary> -</histogram> - -<histogram base="true" name="Blink.MainFrame.IntersectionObservationRatio" - units="%" expires_after="2020-11-08"> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The percentage of time between a BeginMainFrame and paint results commit in - Blink that is used for computing Intersection Observations. - </summary> -</histogram> - -<histogram base="true" name="Blink.MainFrame.LayoutRatio" units="%" - expires_after="2021-03-15"> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The percentage of time between a BeginMainFrame and paint results commit in - Blink that is used for computing Layout. - </summary> -</histogram> - -<histogram base="true" name="Blink.MainFrame.PaintRatio" units="%" - expires_after="2021-03-15"> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The percentage of time between a BeginMainFrame and paint results commit in - Blink that is used for computing Paint. - </summary> -</histogram> - -<histogram base="true" name="Blink.MainFrame.PrePaintRatio" units="%" - expires_after="2020-11-08"> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The percentage of time between a BeginMainFrame and paint results commit in - Blink that is used for computing PrePaint. - </summary> -</histogram> - -<histogram base="true" name="Blink.MainFrame.ProxyCommitRatio" units="%" - expires_after="2020-11-08"> - <obsolete> - Replaced with separate ImplCompositorCommit and WaitForCommit metrics and - removed in M84. - </obsolete> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The percentage of time between a BeginMainFrame and paint results commit in - Blink that is used for committing the layer tree to the impl thread. - </summary> -</histogram> - -<histogram base="true" name="Blink.MainFrame.ScrollingCoordinatorRatio" - units="%" expires_after="2020-11-08"> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The percentage of the total BeginMainFrame execution time used for the - ScrollingCoordinator update in Blink, for each frame that we record. - Recorded in ScrollingCoordinator::UpdateAfterPaint. - </summary> -</histogram> - -<histogram base="true" name="Blink.MainFrame.StyleAndLayoutRatio" units="%" - expires_after="2020-06-21"> - <obsolete> - Replaced with separate Style and Layout metrics and removed in M81. - </obsolete> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The percentage of time between a BeginMainFrame and paint results commit in - Blink that is used for computing Style and Layout. - </summary> -</histogram> - -<histogram base="true" name="Blink.MainFrame.StyleRatio" units="%" - expires_after="2020-11-08"> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The percentage of time between a BeginMainFrame and paint results commit in - Blink that is used for computing Style. - </summary> -</histogram> - -<histogram base="true" name="Blink.MainFrame.UpdateLayersRatio" units="%" - expires_after="2021-03-15"> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The percentage of time between a BeginMainFrame and paint results commit in - Blink that is spent in LayerTreeHost::UpdateLayers. - </summary> -</histogram> - -<histogram name="Blink.MainFrame.UpdateTime" units="microseconds" - expires_after="2021-02-14"> -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> - -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> - -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> - - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Time between a BeginMainFrame and paint results commit in Blink. - - This histogram will not record metrics on machines with low-resolution - clocks. - </summary> -</histogram> - -<histogram name="Blink.MainFrame.WaitForCommitRatio" units="%" - expires_after="2020-11-08"> - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> -<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> - - <summary> - The percentage of time between a BeginMainFrame and paint results commit in - Blink that is spent waiting for the CC thread to begin processing. - </summary> -</histogram> - -<histogram name="Blink.MediaDocument.DownloadButton" - enum="MediaDocumentDownloadButtonType" expires_after="2017-08-22"> - <obsolete> - Removed 08/2017 as it is integrated into media controller. - </obsolete> - <owner>qinmin@chromium.org</owner> - <summary> - Records how the download button on the MediaDocument is used. - </summary> -</histogram> - -<histogram name="Blink.MediaElement.Autoplay" enum="MediaElementAutoPlay" - expires_after="2016-11-30"> - <obsolete> - Removed 11/2016 in Issue 666370 with the deprecation of Autoplay experiment. - </obsolete> - <owner>oysteine@chromium.org</owner> - <summary> - Records user observation and interaction with Media HTML elements that - feature autoplay, either script-controlled or through the attribute. - </summary> -</histogram> - -<histogram name="Blink.MemoryCache.RevalidationPolicy" - enum="RevalidationPolicy" expires_after="2021-04-21"> - <owner>hiroshige@chromium.org</owner> - <owner>loading-dev@chromium.org</owner> - <summary> - RevalidationPolicy used for non-preloading requests for each resource type. - https://crbug.com/579496 - </summary> -</histogram> - -<histogram name="Blink.MemoryCache.RevalidationPolicy.AsyncScript" - enum="RevalidationPolicy" expires_after="2021-04-21"> - <owner>hiroshige@chromium.org</owner> - <owner>lizeb@chromium.org</owner> - <owner>loading-dev@chromium.org</owner> - <summary> - RevalidationPolicy used for non-preloading requests of async and defer - scripts. https://crbug.com/1043679 - </summary> -</histogram> - -<histogram name="Blink.MemoryCache.RevalidationPolicy.Dead" - enum="RevalidationPolicy" expires_after="2021-04-21"> - <owner>hiroshige@chromium.org</owner> - <owner>loading-dev@chromium.org</owner> - <summary> - RevalidationPolicy used for requests that hit Resource only referenced from - MemoryCache for each resource type. https://crbug.com/579496 Requests - counted by this are also counted by Blink.MemoryCache.RevalidationPolicy or - Blink.MemoryCache.RevalidationPolicy.Preload. - </summary> -</histogram> - -<histogram name="Blink.MemoryCache.RevalidationPolicy.Preload" - enum="RevalidationPolicy" expires_after="2021-04-21"> - <owner>hiroshige@chromium.org</owner> - <owner>loading-dev@chromium.org</owner> - <summary> - RevalidationPolicy used for preloading requests for each resource type. - https://crbug.com/579496 - </summary> -</histogram> - -<histogram name="Blink.OffscreenCanvas.ContextType" enum="CanvasContextType" - expires_after="2021-01-31"> - <owner>aaronhk@chromium.org</owner> - <owner>fserb@chromium.org</owner> - <summary> - Records the context type names used to create offscreen canvas rendering - contexts. Recorded in OffscreenCanvas::GetCanvasRenderingContext - </summary> -</histogram> - -<histogram name="Blink.OffscreenCanvas.NewOffscreenCanvas" enum="Boolean" - expires_after="2021-01-31"> - <owner>aaronhk@chromium.org</owner> - <owner>fserb@chromium.org</owner> - <summary> - Records the creation of a new offscreen canvas in OffscreenCanvas::Create. - </summary> -</histogram> - -<histogram name="Blink.OffscreenCanvas.SqrtNumberOfPixels" units="sqrt(pixels)" - expires_after="2021-01-31"> - <owner>aaronhk@chromium.org</owner> - <owner>fserb@chromium.org</owner> - <summary> - Stores the square root of the number of pixels in a new or resized offscreen - canvas. Emitted from CanvasRenderingContextHost::RecordCanvasSizeToUMA. - </summary> -</histogram> - -<histogram name="Blink.OffscreenCanvas.TransferControlToOffscreen" - enum="Boolean" expires_after="2021-01-31"> - <owner>aaronhk@chromium.org</owner> - <owner>fserb@chromium.org</owner> - <summary> - Records a call to transfer a canvas offscreen. True indicates a successful - transfer, false for a failure. - </summary> -</histogram> - -<histogram name="Blink.OffscreenCanvas.Transferred" enum="Boolean" - expires_after="2021-01-31"> - <owner>aaronhk@chromium.org</owner> - <owner>fserb@chromium.org</owner> - <summary> - Records when an offscreen canvas has been transferred from the main thread - to a worker. - </summary> -</histogram> - -<histogram name="Blink.Paint.CachedItemPercentage" units="%" - expires_after="2021-03-01"> - <owner>wangxianzhu@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Percentage of cached display items among all display items. Higher value - means higher performance beause of less paint invalidation. Recorded when we - finish updating paint in the Blink document lifecycle. - </summary> -</histogram> - -<histogram name="Blink.Paint.CachedSubsequencePercentage" units="%" - expires_after="2021-03-01"> - <owner>wangxianzhu@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Percentage of cached subsequences of display items among all subsequences. - Higher value means higher performance beause of less subsequence - invalidation. Recorded when we finish updating paint in the Blink document - lifecycle. - </summary> -</histogram> - -<histogram name="Blink.Paint.IndexedItemPercentage" units="%" - expires_after="2020-03-01"> - <obsolete> - Not very useful for identifying performance issues. - </obsolete> - <owner>paint-dev@chromium.org</owner> - <summary> - Percentage of display items that are put into the index because of - out-of-order display item matching. Higher value means lower performance - beause of the cost of out-of-order matching and indexing. Recorded when we - finish updating paint in the Blink document lifecycle. - </summary> -</histogram> - -<histogram name="Blink.Paint.NumDisplayItems" units="count" - expires_after="2020-03-01"> - <obsolete> - Not very useful for identifying performance issues. - </obsolete> - <owner>paint-dev@chromium.org</owner> - <summary> - Total number of display items (including cached and repainted) in the - painted result. Recorded when we finish updating paint in the Blink document - lifecycle. - </summary> -</histogram> - -<histogram name="Blink.Paint.NumPaintChunks" units="count" - expires_after="2020-03-01"> - <obsolete> - Not very useful for identifying performance issues. - </obsolete> - <owner>paint-dev@chromium.org</owner> - <summary> - Total number of paint chunks in the painted result. Recorded when we finish - updating paint in the Blink document lifecycle. - </summary> -</histogram> - -<histogram name="Blink.Paint.NumSubsequences" units="count" - expires_after="2020-03-01"> - <obsolete> - Not very useful for identifying performance issues. - </obsolete> - <owner>paint-dev@chromium.org</owner> - <summary> - Total number of subsequences (including cached and repainted) in the painted - result. Recorded when we finish updating paint in the Blink document - lifecycle. - </summary> -</histogram> - -<histogram name="Blink.Paint.UpdateTime" units="microseconds" - expires_after="2021-02-14"> -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> - -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> - -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> - - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Time spent updating paint in the Blink document lifecycle. - - Note: As of M70, this histogram has stopped recording metrics on machines - with low-resolution clocks. - </summary> -</histogram> - -<histogram name="Blink.PaintInvalidation.UpdateTime" units="microseconds" - expires_after="2018-02-22"> - <obsolete> - SlimmingPaintInvalidation is enabled by default, so this histogram is no - longer being logged. Was removed in 02-2018. - </obsolete> - <owner>paint-dev@chromium.org</owner> - <summary> - Time spent updating paint invalidation in the Blink document lifecycle. Not - available when SlimmingPaintInvalidation or SlimmingPaintV2 is enabled. - </summary> -</histogram> - -<histogram name="Blink.PrePaint.UpdateTime" units="microseconds" - expires_after="2021-02-21"> -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> - -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> - -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> - - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Time spent updating paint properties and paint invalidation in the Blink - document lifecycle. Available when SlimmingPaintInvalidation or - SlimmingPaintV2 is enabled. - - Note: As of M70, this histogram has stopped recording metrics on machines - with low-resolution clocks. - </summary> -</histogram> - -<histogram name="Blink.ProxyCommit.UpdateTime" units="microseconds" - expires_after="2020-11-08"> - <obsolete> - Replaced with separate ImplCompositorCommit and WaitForCommit metrics and - removed in M84. - </obsolete> -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> - -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> - -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> - - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Time spent commiting the layer tree to the impl thread in a main frame - update. - - Note: This histogram does not record metrics on machines with low-resolution - clocks. - </summary> -</histogram> - -<histogram name="Blink.Render.DisplayLockActivationReason" - enum="DisplayLockActivationReason" expires_after="2021-03-15"> - <owner>vmpstr@chromium.org</owner> - <owner>chrishtr@chromium.org</owner> - <summary>This indicates the reason for display-locking activation</summary> -</histogram> - -<histogram name="Blink.ResourceFetcher.StaleWhileRevalidate" - enum="BooleanAttempted" expires_after="2020-01-26"> - <obsolete> - Removed as of 02/2020. - </obsolete> - <owner>dtapuska@chromium.org</owner> - <owner>kenjibaheux@google.com</owner> - <summary>Count of resources attempted Stale Revalidation.</summary> -</histogram> - -<histogram name="Blink.ResourceFetcher.StaleWhileRevalidateDuration" units="ms" - expires_after="2020-04-05"> - <owner>dtapuska@chromium.org</owner> - <owner>kenjibaheux@google.com</owner> - <summary>Duration of completed stale revalidation attempts.</summary> -</histogram> - -<histogram base="true" name="Blink.ResourceLoadScheduler.DecodedBytes" - units="bytes" expires_after="2018-08-06"> - <obsolete> - Removed as of 8/2018. - </obsolete> -<!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" --> - - <owner>toyoshim@chromium.org</owner> - <owner>ksakamoto@chromium.org</owner> - <summary>Count received data size in bytes for each resource.</summary> -</histogram> - -<histogram name="Blink.ResourceLoadScheduler.DecodedBytes.KBPerFrameStatus" - enum="RendererSchedulerFrameType2" expires_after="2020-04-30"> - <obsolete> - Removed as of 02/2020. - </obsolete> - <owner>toyoshim@chromium.org</owner> - <owner>altimin@chromium.org</owner> - <summary> - Total decoded size of resources associated with frames of a particular type. - Recorded when a fetch has been completed. - - Each bucket of the histogram cointains the total size of all requests - associated with frames with a particular frame status in kilobytes. - </summary> -</histogram> - -<histogram base="true" name="Blink.ResourceLoadScheduler.PeakRequests" - units="requests" expires_after="M80"> - <obsolete> - Removed as of 6/2019. - </obsolete> -<!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" --> - - <owner>ksakamoto@chromium.org</owner> - <owner>toyoshim@chromium.org</owner> - <summary> - The largest number of outstanding resource requests issued by a frame until - the network 2-quiet (no more than 2 active network requests for 1 seconds). - </summary> -</histogram> - -<histogram name="Blink.ResourceLoadScheduler.RequestCount" - enum="ResourceLoadSchedulerCircumstance" expires_after="2020-04-30"> - <obsolete> - Removed as of 02/2020. - </obsolete> - <owner>toyoshim@chromium.org</owner> - <owner>ksakamoto@chromium.org</owner> - <summary> - Count resource request circumstance, e.g. from the main frame vs sub-frames, - or in throttled state vs in not-throttled state, on each resource load - completion. - </summary> -</histogram> - -<histogram name="Blink.ResourceLoadScheduler.ThrottlingStateChangeCount" - units="changes" expires_after="M77"> - <obsolete> - Removed as of 6/2019. - </obsolete> - <owner>toyoshim@chromium.org</owner> - <owner>ksakamoto@chromium.org</owner> - <summary> - Count how many times the scheduler has changed throttling status from the - frame creation until network activity quiets. - </summary> -</histogram> - -<histogram base="true" name="Blink.ResourceLoadScheduler.TotalDecodedBytes" - units="bytes" expires_after="M80"> - <obsolete> - Removed as of 6/2019. - </obsolete> -<!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" --> - - <owner>toyoshim@chromium.org</owner> - <owner>altimin@chromium.org</owner> - <summary> - Total received data size in bytes to load resources from the frame creation - until network activity quiets. - </summary> -</histogram> - -<histogram base="true" name="Blink.ResourceLoadScheduler.TotalRequestCount" - units="requests" expires_after="M80"> - <obsolete> - Removed as of 6/2019. - </obsolete> -<!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" --> - - <owner>toyoshim@chromium.org</owner> - <owner>ksakamoto@chromium.org</owner> - <summary> - Total number of resource requests completed from the frame creation until - network activity quiets. - </summary> -</histogram> - -<histogram base="true" name="Blink.ResourceLoadScheduler.TotalTrafficBytes" - units="bytes" expires_after="M80"> - <obsolete> - Removed as of 6/2019. - </obsolete> -<!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" --> - - <owner>toyoshim@chromium.org</owner> - <owner>altimin@chromium.org</owner> - <summary> - Total traffic data in bytes transferred over networks to load resources from - the frame creation until network activity quiets. - </summary> -</histogram> - -<histogram base="true" name="Blink.ResourceLoadScheduler.TrafficBytes" - units="bytes" expires_after="2018-08-06"> - <obsolete> - Removed as of 8/2018. - </obsolete> -<!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" --> - - <owner>toyoshim@chromium.org</owner> - <owner>ksakamoto@chromium.org</owner> - <summary> - Count traffic data size in bytes transferred over networks to load each - resource. - </summary> -</histogram> - -<histogram name="Blink.ResourceLoadScheduler.TrafficBytes.KBPerFrameStatus" - enum="RendererSchedulerFrameType2" expires_after="2020-02-02"> - <owner>toyoshim@chromium.org</owner> - <owner>altimin@chromium.org</owner> - <summary> - Total encoded size of resources associated with frames of a particular type. - Recorded when a fetch has been completed. - - Each bucket of the histogram cointains the total size of all requests - associated with frames with a particular frame status in kilobytes. - </summary> -</histogram> - -<histogram name="Blink.RestoredCachedStyleSheet" - enum="RestoredCachedStyleSheet" expires_after="2016-01-20"> - <obsolete> - Removed 01/2016 and replaced by Blink.RestoredCachedStyleSheet2 - </obsolete> - <owner>kouhei@chromium.org</owner> - <summary> - On each link stylesheet tag resolve, record whether a Blink MemoryCached - StyleSheetContents was reused. - </summary> -</histogram> - -<histogram name="Blink.RestoredCachedStyleSheet2" enum="StyleSheetCacheStatus" - expires_after="2017-04-11"> - <obsolete> - Removed 04/2017. - </obsolete> - <owner>kouhei@chromium.org</owner> - <summary> - On each link stylesheet tag resolve, record which cache Blink hit. - </summary> -</histogram> - -<histogram name="Blink.ScanPendingActivityDuration" units="ms" - expires_after="M85"> - <owner>haraken@chromium.org</owner> - <summary> - Duration of time taken to scan pending activities of all V8 wrappers in a - worker thread. - </summary> -</histogram> - -<histogram name="Blink.Script.AsyncScriptCount" units="count" - expires_after="2021-05-25"> - <owner>dom@chromium.org</owner> - <owner>chrome-loading@google.com</owner> - <summary> - The total number of async scripts associated with a document at the time - parsing has finished. - </summary> -</histogram> - -<histogram name="Blink.Script.ForceDeferredScripts.Mainframe" units="count" - expires_after="2021-02-28"> - <owner>dougarnett@chromium.org</owner> - <owner>hiroshige@chromium.org</owner> - <summary> - Number of synchronous scripts that were deferred for a mainframe by the - ForceDeferScriptIntervention. This includes both inline scripts and external - scripts that had their execution deferred until after parsing completes. - Recorded when there is at least one force deferred script for the frame. - </summary> -</histogram> - -<histogram name="Blink.Script.ForceDeferredScripts.Mainframe.External" - units="count" expires_after="2021-02-28"> - <owner>dougarnett@chromium.org</owner> - <owner>hiroshige@chromium.org</owner> - <summary> - Number of external synchronous scripts that were deferred for a mainframe by - the ForceDeferScriptIntervention. Recorded when there is at least one force - deferred script for the frame (not necessarily external). - </summary> -</histogram> - -<histogram name="Blink.Script.ForceDeferredScripts.Subframe" units="count" - expires_after="2021-02-28"> - <owner>dougarnett@chromium.org</owner> - <owner>hiroshige@chromium.org</owner> - <summary> - Number of synchronous scripts that were deferred for a subframe by the - ForceDeferScriptIntervention. This includes both inline scripts and external - scripts that had their execution deferred until after parsing completes. - Recorded when there is at least one force deferred script for the frame. - </summary> -</histogram> - -<histogram name="Blink.Script.ForceDeferredScripts.Subframe.External" - units="count" expires_after="2021-02-28"> - <owner>dougarnett@chromium.org</owner> - <owner>hiroshige@chromium.org</owner> - <summary> - Number of external synchronous scripts that were deferred for a subframe by - the ForceDeferScriptIntervention. Recorded when there is at least one force - deferred script for the frame (not necessarily external). - </summary> -</histogram> - -<histogram name="Blink.Script.SchedulingType" enum="ScriptSchedulingType" - expires_after="2021-02-28"> - <owner>kouhei@chromium.org</owner> - <owner>hiroshige@chromium.org</owner> - <summary> - Number of script elements for each scheduling type, recorded for each - successful #prepare-a-script. - </summary> -</histogram> - -<histogram name="Blink.ScriptValueSerializer.DOMWrapperCount" units="objects" - expires_after="2016-11-15"> - <obsolete> - Used to justify distribution of serialized data in the wild, but unlikely to - be useful to track long-term. - </obsolete> - <owner>platform-architecture-dev@chromium.org</owner> - <summary> - Number of DOM wrappers serialized as part of an object passed to - postMessage, IndexedDB, or another API that serializes script values. - </summary> -</histogram> - -<histogram name="Blink.ScriptValueSerializer.JSObjectCount" units="objects" - expires_after="2016-11-15"> - <obsolete> - Used to justify distribution of serialized data in the wild, but unlikely to - be useful to track long-term. - </obsolete> - <owner>platform-architecture-dev@chromium.org</owner> - <summary> - Number of JavaScript objects (other than DOM wrappers) serialized as part of - an object passed to postMessage, IndexedDB, or another API that serializes - script values. - </summary> -</histogram> - -<histogram name="Blink.ScriptValueSerializer.PrimitiveCount" units="values" - expires_after="2016-11-15"> - <obsolete> - Used to justify distribution of serialized data in the wild, but unlikely to - be useful to track long-term. - </obsolete> - <owner>platform-architecture-dev@chromium.org</owner> - <summary> - Number of primitive values (numbers, strings, etc.) serialized as part of an - object passed to postMessage, IndexedDB, or another API that serializes - script values. - </summary> -</histogram> - -<histogram name="Blink.ScrollingCoordinator.UpdateTime" units="microseconds" - expires_after="2021-03-15"> -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> - -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> - -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> - - <owner>pdr@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - The time it took to update scrolling coordinator data (scroll gesture - regions, touch event rects, and main thread scrolling reasons). These values - are calculated during the main-thread blink lifecycle. - - Warning: This metric may include reports from clients with low-resolution - clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports - will cause this metric to have an abnormal distribution. When considering - revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. - </summary> -</histogram> - -<histogram name="Blink.SharedBuffer.FailedLock" enum="ResourceType" - expires_after="M85"> - <obsolete> - Removed 08/2016 since SharedBuffer::unlock() was successfully removed. - </obsolete> - <owner>hiroshige@chromium.org</owner> - <summary> - Number of failed SharedBuffer::lock() calls for each resource type. - https://crbug.com/603791 - </summary> -</histogram> - -<histogram name="Blink.SharedBuffer.SuccessfulLock" enum="ResourceType" - expires_after="M85"> - <obsolete> - Removed 08/2016 since SharedBuffer::unlock() was successfully removed. - </obsolete> - <owner>hiroshige@chromium.org</owner> - <summary> - Number of successful SharedBuffer::lock() calls for each resource type. - https://crbug.com/603791 - </summary> -</histogram> - -<histogram name="Blink.SharedBuffer.Unlock" enum="ResourceType" - expires_after="M85"> - <obsolete> - Removed 08/2016 since SharedBuffer::unlock() was successfully removed. - </obsolete> - <owner>hiroshige@chromium.org</owner> - <summary> - Number of SharedBuffer::unlock() calls for each resource type. - https://crbug.com/603791 - </summary> -</histogram> - -<histogram name="Blink.Sms.Receive.DestroyedReason" - enum="SmsReceiverDestroyedReason" expires_after="M88"> - <owner>goto@chromium.org</owner> - <owner>reillyg@chromium.org</owner> - <owner>ayui@chromium.org</owner> - <summary> - Records the reason an SMS Service is destroyed before request completion. - </summary> -</histogram> - -<histogram name="Blink.Sms.Receive.Infobar" enum="SMSReceiverInfobarAction" - expires_after="M88"> - <owner>goto@chromium.org</owner> - <owner>reillyg@chromium.org</owner> - <owner>ayui@chromium.org</owner> - <summary> - Records how many times the infobar was called and how many times the infobar - replaced a keyboard. - </summary> -</histogram> - -<histogram name="Blink.Sms.Receive.Outcome" enum="SMSReceiverOutcome" - expires_after="M88"> - <owner>goto@chromium.org</owner> - <owner>reillyg@chromium.org</owner> - <owner>ayui@chromium.org</owner> - <summary>Records the result of a call to the SmsReceiver API.</summary> -</histogram> - -<histogram name="Blink.Sms.Receive.RequestedTimeout" units="ms" - expires_after="M81"> - <obsolete> - Removed 9/2019 since the concept of timeouts have been removed. - https://crbug.com/1000376 - </obsolete> - <owner>goto@chromium.org</owner> - <owner>reillyg@chromium.org</owner> - <owner>ayui@chromium.org</owner> - <summary> - Records the timeout value specified when the API is called regardless of - whether or not the call actually timed out. The value of 0 indicates that no - value was specified. - </summary> -</histogram> - -<histogram name="Blink.Sms.Receive.TimeCancel" units="ms" expires_after="M88"> - <owner>goto@chromium.org</owner> - <owner>reillyg@chromium.org</owner> - <owner>ayui@chromium.org</owner> - <summary> - Records the duration from when the API is called to when the user presses - the cancel button to abort SMS retrieval. - </summary> -</histogram> - -<histogram name="Blink.Sms.Receive.TimeCancelOnKeyboardDismissal" units="ms" - expires_after="M88"> - <owner>goto@chromium.org</owner> - <owner>reillyg@chromium.org</owner> - <owner>juncai@chromium.org</owner> - <owner>ayui@chromium.org</owner> - <summary> - Records the duration from when the keyboard was replaced with an infobar - until when the user clicked the cancel button. - </summary> -</histogram> - -<histogram name="Blink.Sms.Receive.TimeCancelOnSuccess" units="ms" - expires_after="M88"> - <owner>goto@chromium.org</owner> - <owner>reillyg@chromium.org</owner> - <owner>ayui@chromium.org</owner> - <summary> - Records the time from when a successful SMS was retrieved to when the user - presses the Cancel button. - </summary> -</histogram> - -<histogram name="Blink.Sms.Receive.TimeContinueOnSuccess" units="ms" - expires_after="M88"> - <owner>goto@chromium.org</owner> - <owner>reillyg@chromium.org</owner> - <owner>ayui@chromium.org</owner> - <summary> - Records the time from when a successful SMS was retrieved to when the user - presses the Continue button. - </summary> -</histogram> - -<histogram name="Blink.Sms.Receive.TimeSmsReceive" units="ms" - expires_after="M88"> - <owner>goto@chromium.org</owner> - <owner>reillyg@chromium.org</owner> - <owner>ayui@chromium.org</owner> - <summary> - Records the duration from when the API is called to when an SMS has been - successfully received. - </summary> -</histogram> - -<histogram name="Blink.Sms.Receive.TimeSuccess" units="ms" expires_after="M88"> - <owner>goto@chromium.org</owner> - <owner>reillyg@chromium.org</owner> - <owner>ayui@chromium.org</owner> - <summary> - Records the duration from when the API is called to when the user - successfully receives the SMS and presses continue to pass the incoming SMS - to the site and proceed with the SMS verification flow. - </summary> -</histogram> - -<histogram name="Blink.Sms.Receive.TimeTimeoutExceeded" units="ms" - expires_after="M81"> - <obsolete> - Removed 9/2019 since the concept of timeouts have been removed. - https://crbug.com/1000376 - </obsolete> - <owner>goto@chromium.org</owner> - <owner>reillyg@chromium.org</owner> - <owner>ayui@chromium.org</owner> - <summary> - Records the duration from when the API is called to when the user gets timed - out of the SMS verification flow because no SMS was received within the - specified timeout window. - </summary> -</histogram> - -<histogram name="Blink.SpatialNavigation.Advance" units="microseconds" - expires_after="M85"> - <owner>bokan@chromium.org</owner> - <summary> - Time it takes to find best candidate element, set focus or scroll for given - directional input. - </summary> -</histogram> - -<histogram name="Blink.Style.UpdateTime" units="microseconds" - expires_after="2021-03-15"> -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> - -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> - -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> - - <owner>schenney@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Time spent updating style in the Blink document lifecycle. - - This histogram does not record metrics on machines with low-resolution - clocks. - </summary> -</histogram> - -<histogram name="Blink.StyleAndLayout.UpdateTime" units="microseconds" - expires_after="2020-08-10"> - <obsolete> - Replaced with separate Style and Layout metrics and removed in M81. - </obsolete> -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> - -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> - -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> - - <owner>schenney@chromium.org</owner> - <owner>layout-dev@chromium.org</owner> - <summary> - Time spent updating style and layout in the Blink document lifecycle. - - Note: As of M70, this histogram has stopped recording metrics on machines - with low-resolution clocks. - </summary> -</histogram> - -<histogram name="Blink.ThreadedIconLoader.LoadTime" units="ms" - expires_after="2020-12-01"> - <owner>nator@chromium.org</owner> - <owner>rayankans@chromium.org</owner> - <summary> - The number of milliseconds it took to finish successfully loading an icon - using ThreadedIconLoader. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.AnimatedCSSProperties" - enum="MappedCSSProperties" expires_after="never"> -<!-- expires-never: used by Chrome Platform Status dashboard --> - -<!-- https://www.chromestatus.com/metrics/css/animated --> - - <owner>chasej@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Records usage of animated CSS properties used on a page, either statically - or dynamically, from the time the page is initialised to when it is closed - or navigated away from. Each property is counted at most once per page per - view via PageLoadMetricsObserver. - </summary> - <details> - This histogram counts CSS properties only when they are animated by a CSS - Animation. Refer to Blink.UseCounter.CSSProperties for more details. - - As of M69, Blink.UseCounter.AnimatedCSSProperties is moved from the blink - side to the browser side. - </details> -</histogram> - -<histogram - name="Blink.UseCounter.AnimatedCSSProperties_TestBrowserProcessLogging" - enum="MappedCSSProperties" expires_after="2018-06-12"> - <obsolete> - Renamed to Blink.UseCounter.AnimatedCSSProperties in 03/2018, M69. The old - blink UseCounter is flawed in OOPIF, so moved to the browser side instead. - </obsolete> - <owner>chasej@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Records usage of animated CSS properties used across all frames in a page, - either statically or dynamically, from the time the page is initialised to - when it is closed or navigated away from. Each property is counted at most - once per page view except kTotalPagesMeasuredCSSSampleId which represents a - page load (enum value of 1) and is counted exactly once per page view. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.CSSProperties" enum="MappedCSSProperties" - expires_after="never"> -<!-- expires-never: used by Chrome Platform Status dashboard --> - -<!-- https://www.chromestatus.com/metrics/css/animated --> - - <owner>chasej@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Records usage of CSS properties used on a page, either statically or - dynamically, from the time the page is initialised to when it is closed or - navigated away from. Each property is counted at most once per page per view - via PageLoadMetricsObserver. - </summary> - <details> - The first time a CSS property is parsed on a page, the histogram is updated - to increment the counter. Each histogram bucket corresponds to a CSS - property (eg. width, border-radius). The exception is the 'Total pages - measured' bucket - this counts the number of pages that CSS properties were - counted on. When a page navigation occurs the page count bucket is - incremented and tracking of the set of which properties have been seen is - reset. - - These numbers give the percentage of pages that use a CSS property. For - example, if the 'border-radius' histogram bucket has a count of 250, and the - page count bucket (i.e. bucket number 1) has a count of 1000 - this means - that 1000 pages were recorded, and border-radius was used on 25% of those - pages. - - Note that CSS properties used inside of SVG images are tracked separately in - the Blink.UseCounter.SVGImage.CSSProperties histogram. - - As of M57 this histogram supercedes WebCore.FeatureObserver.CSSProperties. - - As of M69, Blink.UseCounter.AnimatedCSSProperties is moved from the blink - side to the browser side. - </details> -</histogram> - -<histogram name="Blink.UseCounter.CSSProperties_TestBrowserProcessLogging" - enum="MappedCSSProperties" expires_after="2018-06-12"> - <obsolete> - Renamed to Blink.UseCounter.CSSProperties in 03/2018, M69. The old blink - UseCounter is flawed in OOPIF, so moved to the browser side instead. - </obsolete> - <owner>chasej@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Records usage of CSS properties used across all frames in a page, either - statically or dynamically, from the time the page is initialised to when it - is closed or navigated away from. Each property is counted at most once per - page per view except kTotalPagesMeasuredCSSSampleId which represents a page - load (enum value of 1) and is counted exactly once per page view. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.DocumentPolicy.Enforced" - enum="DocumentPolicyFeature" expires_after="2021-03-31"> - <owner>iclelland@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Counts enforced DocumentPolicyViolationReport generated in a document. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.DocumentPolicy.Header" - enum="DocumentPolicyFeature" expires_after="2021-03-31"> - <owner>iclelland@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Counts the use of a specific document policy via the - "Document-Policy" HTTP response header. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.DocumentPolicy.PolicyAttribute" - enum="DocumentPolicyFeature" expires_after="2021-03-31"> - <owner>iclelland@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Counts the use of a specific document policy via the "policy" - attribute. Each policy is counted only once per page load. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.DocumentPolicy.ReportOnly" - enum="DocumentPolicyFeature" expires_after="2021-03-31"> - <owner>iclelland@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Counts report only DocumentPolicyViolationReport generated in a document. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.Extensions.Features" enum="FeatureObserver" - expires_after="2021-01-31"> - <owner>chasej@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Count of how many page loads use various features for pages with a - chrome-extension:// URL only. The PageVisits bucket is incremented for each - page load, and the other buckets incremented at most once per PageVisit via - the WebCore::UserCounter class. - </summary> - <details> - Warning: This histogram represents pre-renderer metrics and so is flawed - under OOPIF. - </details> -</histogram> - -<histogram name="Blink.UseCounter.FeaturePolicy.Allow" - enum="FeaturePolicyFeature" expires_after="2020-10-31"> - <owner>iclelland@chromium.org</owner> - <summary> - Counts the use of a specific feature policy via the "allow" - attribute. Each policy is counted only once per page load. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.FeaturePolicy.AttributeAllowlistType" - enum="FeaturePolicyAllowlistType" expires_after="2021-01-03"> - <owner>iclelland@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Logs the type of allowlist used in a Feature-Policy "allow" - attribute; whether it is empty, or contains only a single keyword, is - composed only of keywords, or contains explicit tuple origins. Recorded at - the point that the attribute is parsed. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.FeaturePolicy.Header" - enum="FeaturePolicyFeature" expires_after="2021-03-15"> - <owner>iclelland@chromium.org</owner> - <summary> - Counts the use of a specific feature policy via the - "Feature-Policy" HTTP response header. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.FeaturePolicy.HeaderAllowlistType" - enum="FeaturePolicyAllowlistType" expires_after="2021-01-03"> - <owner>iclelland@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Logs the type of allowlist used in a Feature-Policy header; whether it is - empty, or contains only a single keyword, is composed only of keywords, or - contains explicit tuple origins. Recorded at the point that the header is - parsed. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.FeaturePolicy.ImageDownscalingRatio" - units="%" expires_after="2020-08-16"> - <obsolete> - Feature moved from feature policy to document policy in M82. Histogram and - recording code removed for feature policy. Histogram and recording code will - be added for document policy. - </obsolete> - <owner>iclelland@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Logs downscaling ratio in percentage for images enforced by feature policy - oversized-images policy going into origin trials in M75. If an image's - downscaling ratio is 1, it will be represented as 10 percent, if an image's - downscaling ratio is 5, it will be represented as 50 percents. Recorded when - oversized-images policy is enforced and the image is about to be painted. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.FeaturePolicy.ImageFormats" - enum="FeaturePolicyImageCompressionFormat" expires_after="M80"> - <obsolete> - Feature moved from feature policy to document policy in M82. Histogram and - recording code removed for feature policy. Histogram and recording code will - be added for document policy. - </obsolete> - <owner>iclelland@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Counts ImageFileFormats (lossy, lossless, webp animation, others) of images - enforced by feature policy unoptimized-images policy going into origin - trials in M75. Recorded when images finish decoding the mime type. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.FeaturePolicy.LosslessImageCompression" - units="%" expires_after="M80"> - <obsolete> - Feature moved from feature policy to document policy in M82. Histogram and - recording code removed for feature policy. Histogram and recording code will - be added for document policy. - </obsolete> - <owner>iclelland@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Logs compression ratio in percentage with 1KB overhead for lossless type - images enforced by feature policy unoptimized-lossless-images policy going - into origin trials in M75. If an image's compression ratio is 0.1, it will - be represented as 1 percent, if an image's compression ratio is 5, it will - be represented as 50 percents. Recorded when unoptimized-lossless-images - policy is enforced and the image finishes decoding its mime type. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.FeaturePolicy.LossyImageCompression" - units="%" expires_after="M80"> - <obsolete> - Feature moved from feature policy to document policy in M82. Histogram and - recording code removed for feature policy. Histogram and recording code will - be added for document policy. - </obsolete> - <owner>iclelland@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Logs compression ratio with 1KB overhead for lossy type images enforced by - feature policy unoptimized-lossy-images policy going into origin trials in - M75. If an image's compression ratio is 0.1, it will be represented as 1 - percent, if an image's compression ratio is 5, it will be represented as 50 - percents. Recorded when unoptimized-lossy-images policy is enforced and the - image finishes decoding its mime type. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.FeaturePolicy.PotentialViolation" - enum="FeaturePolicyFeature" expires_after="2021-01-03"> - <owner>iclelland@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Tracks potential violations of feature policies in a document. This is - emitted once all the conditions for violating the feature policy are met in - the document; regardless of whether or not the feature has been disabled in - the document; in other words, it still records a potential violation even if - there won't be a violation report generated. Note that this is recorded once - per document. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.FeaturePolicy.ProposalWouldChangeBehaviour" - enum="FeaturePolicyFeature" expires_after="2021-03-07"> - <owner>iclelland@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Counts when the result of calling IsFeatureEnabled for an Execution Context - would be different under the proposal in https://crbug.com/937171. Each - feature is counted only once per execution context. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.FeaturePolicy.StrictLosslessImageCompression" - units="%" expires_after="M80"> - <obsolete> - Feature moved from feature policy to document policy in M82. Histogram and - recording code removed for feature policy. Histogram and recording code will - be added for document policy. - </obsolete> - <owner>iclelland@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Logs compression ratio with 10KB overhead for lossless type images enforced - by feature policy unoptimized-lossless-images-strict policy going into - origin trials in M75. If an image's compression ratio is 0.1, it will be - represented as 1 percent, if an image's compression ratio is 5, it will be - represented as 50 percents. Recorded when unoptimized-lossless-images-strict - policy is enforced and the image finishes decoding its mime type. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.Features" enum="FeatureObserver" - expires_after="never"> -<!-- expires-never: used by Chrome Platform Status dashboard --> - -<!-- https://www.chromestatus.com/metrics/css/animated --> - - <owner>chasej@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Count of how many page loads use various features across all frames in a - page. The PageVisits bucket is incremented for each page load, and the other - buckets incremented at most once per PageVisit via blink::UseCounter and - UseCounterPageLoadMetricsObserver. - </summary> - <details> - Note that features used inside of SVG images are tracked separately in the - Blink.UseCounter.SVGImage.Features histogram. Features used inside of - extension pages are tracked separately in the - Blink.UseCounter.Extensions.Features histogram. - </details> -</histogram> - -<histogram name="Blink.UseCounter.Features_Legacy" enum="FeatureObserver" - expires_after="M81"> - <obsolete> - Replaced by Blink.UseCounter.Features in M67. See crbug.com/849695. - </obsolete> - <owner>chasej@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Count of how many page loads use various features. The PageVisits bucket is - incremented for each page load, and the other buckets incremented at most - once per PageVisit via the blink::UseCounter class. - </summary> - <details> - This histogram recorded values in the renderer process. With the addition of - OOPIF, the counts could be inaccurate due to multiple renderer processes for - a page. It was replaced by an implementation that records values in the - browser process. - </details> -</histogram> - -<histogram name="Blink.UseCounter.Features_TestBrowserProcessLogging" - enum="FeatureObserver" expires_after="2018-03-13"> - <obsolete> - Renamed to Blink.UseCounter.Features in 03/2018, M67. The old blink - UseCounter is flawed in OOPIF, so moved to the browser side (this) instead. - </obsolete> - <owner>chasej@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Count of how many page loads use various features across all frames in a - page. The PageVisits bucket is incremented for each page load, and the other - buckets incremented at most once per PageVisit via the WebCore::UseCounter - class. This counter lives in browser process. - </summary> -</histogram> - -<histogram name="Blink.UseCounter.File.Features" enum="FeatureObserver" - expires_after="2021-01-10"> - <owner>yhirano@chromium.org</owner> - <owner>mkwst@chromium.org</owner> - <summary> - Count of how many `file:` URL page loads use various features across all - frames in the page. This histogram has the same semantics as - "Blink.UseCounter.Features", but applies only to `file:` URLs - (which that histogram does not include). - </summary> - <details> - Refer to "Blink.UseCounter.Features" for more details. - </details> -</histogram> - -<histogram name="Blink.UseCounter.MainFrame.Features" enum="FeatureObserver" - expires_after="never"> -<!-- expires-never: Companion to Blink.UseCounter.Features, which is also expires-never. --> - - <owner>chasej@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Count of how many page loads use various features across in the main frame - of a page. The PageVisits bucket is incremented at the beginning of each - page load and the other buckets incremented at most once per PageVisit via - blink::UseCounter and UseCounterPageLoadMetricsObserver throughout the - lifetime of a page load metrics observer. - </summary> - <details> - This histogram counts usage of web features in main frame only. Refer to - Blink.UseCounter.Features for more details. - </details> -</histogram> - -<histogram name="Blink.UseCounter.SVGImage.AnimatedCSSProperties" - enum="MappedCSSProperties" expires_after="2018-06-19"> - <obsolete> - Removed in 06/2018, M69 since the histogram is not really useful. See - https://crbug.com/804645. - </obsolete> - <owner>chasej@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Like Blink.UseCounter.AnimatedCSSProperties but specifically for the case of - CSS properties used inside of an SVG image. - </summary> - <details> - Warning: This histogram represents pre-renderer metrics and so is flawed - under OOPIF. - - This histogram counts usage of animated CSS properties only. Refer to - Blink.UseCounter.SVGImage.CSSProperties for details. - </details> -</histogram> - -<histogram name="Blink.UseCounter.SVGImage.CSSProperties" - enum="MappedCSSProperties" expires_after="2018-06-19"> - <obsolete> - Removed in 06/2018, M69 since the histogram is not really useful. See - https://crbug.com/804645. - </obsolete> - <owner>chasej@chromium.org</owner> - <owner>feature-control@chromium.org</owner> - <summary> - Like Blink.UseCounter.CSSProperties but specifically for the case of CSS - properties used inside of an SVG image. - </summary> - <details> - Warning: This histogram represents pre-renderer metrics and so is flawed - under OOPIF. - - The 'Total pages measured' bucket is incremented each time a new SVG image - is created. Note that the same SVG image can be used across multiple tabs in - a single renderer but this counts as a single usage. See - http://crbug.com/236262. - </details> -</histogram> - -<histogram name="Blink.UseCounter.SVGImage.Features" enum="FeatureObserver" - expires_after="2019-05-15"> - <obsolete> - Removed in 05/2019, M76. Every SVGImage has it's own Page instance and - multiple web pages can share the usage of a single SVGImage. Previously - Blink.UseCounter.Features was recorded on the Blink side per Page; metrics - from SVGImage needed to be recorded in a separate histogram. Now that - metrics are recorded on the browser side, feature usage from SVGImage is - measured via page load metrics, on Blink.UseCounter.Features, once per page - load. This histogram is no longer needed. - </obsolete> - <summary> - Like Blink.UseCounter.Features except specifically for the case of SVG - Images. - </summary> - <details> - Warning: This histogram represents pre-renderer metrics and so is flawed - under OOPIF. - - Count of how many SVG images use various features. The PageVisits bucket is - incremented each time a new SVG image is created. Note that the same SVG - image can be used across multiple tabs in a single renderer but this counts - as a single usage. See http://crbug.com/236262. - </details> -</histogram> - -<histogram name="Blink.VisibleBeforeLoaded.LazyLoadEligibleFrames.BelowTheFold" - enum="NQEEffectiveConnectionType" expires_after="2021-02-21"> - <owner>sclittle@chromium.org</owner> - <summary> - Records the effective connection type whenever a lazyload-eligible (i.e. - cross-origin and non-hidden) iframe that was initially below the fold - becomes visible before it finishes loading. - </summary> -</histogram> - -<histogram name="Blink.VisibleBeforeLoaded.LazyLoadImages.AboveTheFold" - enum="NQEEffectiveConnectionType" expires_after="2021-01-17"> - <owner>sclittle@chromium.org</owner> - <owner>rajendrant@chromium.org</owner> - <summary> - Records the effective connection type whenever a lazily loaded image that - was initially above the fold becomes visible before it finishes loading. - </summary> -</histogram> - -<histogram name="Blink.VisibleBeforeLoaded.LazyLoadImages.BelowTheFold" - enum="NQEEffectiveConnectionType" expires_after="2021-02-21"> - <owner>sclittle@chromium.org</owner> - <owner>rajendrant@chromium.org</owner> - <summary> - Records the effective connection type whenever a lazily loaded image that - was initially below the fold becomes visible before it finishes loading. - </summary> -</histogram> - -<histogram name="Blink.VisibleLoadTime.LazyLoadEligibleFrames.AboveTheFold" - units="ms" expires_after="2021-02-21"> - <owner>sclittle@chromium.org</owner> - <summary> - Milliseconds spent waiting for an above the fold iframe to load. Only fires - for iframes that would be eligible for lazy loading, i.e. cross-origin and - non-hidden. - </summary> -</histogram> - -<histogram name="Blink.VisibleLoadTime.LazyLoadEligibleFrames.BelowTheFold" - units="ms" expires_after="2021-02-21"> - <owner>sclittle@chromium.org</owner> - <summary> - Milliseconds spent waiting for a below the fold iframe to load. Only fires - for iframes that would be eligible for lazy loading, i.e. cross-origin and - non-hidden. - </summary> -</histogram> - -<histogram base="true" name="Blink.VisibleLoadTime.LazyLoadImages.AboveTheFold" - units="ms" expires_after="2021-02-21"> - <owner>rajendrant@chromium.org</owner> - <owner>bengr@chromium.org</owner> - <summary> - Milliseconds spent waiting for an above the fold image element to load. 0ms - is recorded if the image is already loaded by the time user scrolls to it. - EffectiveConnectionType (2G, 3G, etc) is recorded as suffix to this - histogram. - </summary> -</histogram> - -<histogram base="true" name="Blink.VisibleLoadTime.LazyLoadImages.BelowTheFold" - units="ms" expires_after="2021-02-21"> - <owner>rajendrant@chromium.org</owner> - <owner>bengr@chromium.org</owner> - <summary> - Milliseconds spent waiting for a below the fold image element to load. 0ms - is recorded if the image is already loaded by the time user scrolls to it. - EffectiveConnectionType (2G, 3G, etc) is recorded as suffix to this - histogram. - </summary> -</histogram> - -<histogram name="Blink.WaitForCommit.UpdateTime" units="microseconds" - expires_after="2021-03-01"> -<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> - - <owner>schenney@chromium.org</owner> - <owner>paint-dev@chromium.org</owner> - <summary> - Time spent waiting for the compositor thread to begin processing a layer - update inside ProxyMain::BeginMainFrame. - - Note: This histogram does not record metrics on machines with low-resolution - clocks. - </summary> -</histogram> - -<histogram name="Blink.WindowOpen.FromAdState" enum="WindowOpenFromAdState" - expires_after="2019-08-30"> - <owner>yaoxia@chromium.org</owner> - <owner>csharrison@chromium.org</owner> - <summary> - Indicates whether the page called window.open() with an ad script in the - stack and/or from an ad subframe. Recorded whenever window.open() is called - when AdTagging is enabled. - </summary> -</histogram> - -<histogram name="Blink.XHR.setRequestHeader.HeaderValueCategoryInRFC7230" - enum="XMLHttpRequestHeaderValueCategoryInRFC7230" - expires_after="2017-06-01"> - <obsolete> - Removed 06/2017 in Issues 455099 and 681769 (M61). - </obsolete> - <owner>hiroshige@chromium.org</owner> - <summary> - The count of XMLHttpRequest.setRequestHeader() calls where header values are - invalid/valid but affected by normalization/valid in RFC 7230. - https://crbug.com/455099. - </summary> -</histogram> - -<histogram name="BlinkGC.AtomicPhaseMarking" units="ms" expires_after="M81"> - <obsolete> - See BlinkGC.TimeForAtomicPhaseMarking. - </obsolete> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Duration of finishing marking the transitive closure of objects during the - final Blink garbage collection pause. Recorded at the end of each garbage - collection. - </summary> -</histogram> - -<histogram name="BlinkGC.CollectGarbage" units="ms" expires_after="2018-06-07"> - <obsolete> - Removed 06/2018. The sample taken here was a mix of marking, sweeping and - compaction. Replaced by BlinkGC.AtomicPhaseMarking for the marking phase and - BlinkGC.TimeForTotalCollectGarbage for the overal time. - </obsolete> - <owner>haraken@chromium.org</owner> - <summary> - Duration of time taken to run Heap::collectGarbage(). Recorded at the end of - each garbage collection. - </summary> -</histogram> - -<histogram name="BlinkGC.CollectionRate" units="%" expires_after="M84"> - <owner>haraken@chromium.org</owner> - <summary> - The percentage of objects that have been collected by a Blink GC. 0 is - passed if there were no objects when a Blink GC started. - </summary> -</histogram> - -<histogram name="BlinkGC.CommittedSize" units="MB" expires_after="2020-02-16"> - <obsolete> - Removed as of 07/2019. Use Memory.Renderer.* and - Memory.Experimental.Renderer2.* instead. - </obsolete> - <owner>haraken@chromium.org</owner> - <summary> - The committed memory size in Blink GC. The value is reported when we see the - highest memory usage we've ever seen in the renderer process. - </summary> -</histogram> - -<histogram name="BlinkGC.CompleteSweep" units="ms" expires_after="M81"> - <obsolete> - Removed 07/2019. Replaced by BlinkGC.TimeForCompleteSweep. - </obsolete> - <owner>haraken@chromium.org</owner> - <summary>Duration of time taken to run ThreadState::completeSweep().</summary> -</histogram> - -<histogram name="BlinkGC.GCReason" enum="GCReason" expires_after="M84"> - <owner>haraken@chromium.org</owner> - <summary>A type of Blink GC.</summary> -</histogram> - -<histogram name="BlinkGC.LowMemoryPageNavigationGC.Reduction" units="MB" - expires_after="M77"> - <owner>keishi@chromium.org</owner> - <summary> - Amount of memory reduced with the GC triggered on page navigation while the - device is in a low memory state. Only implemented on low end Android devices - at the moment. Memory usage is approximated by summing the memory usage of - the following allocators: BlinkGC, PartitionAlloc, and V8 main thread - isolate heap. - </summary> -</histogram> - -<histogram name="BlinkGC.MainThreadMarkingThroughput" units="MB/s" - expires_after="M88"> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Marking throughput considering all durations of all marking phases on the - main thread and marked bytes within one Blink garbage collection cycle. - Reported once per garbage collection cycle at the end. Only reported for - platforms supporting high resolution clocks and when more than 1MB of live - objects have been found. - </summary> -</histogram> - -<histogram name="BlinkGC.ObjectSizeAfterGC" units="KB" expires_after="M88"> - <owner>haraken@chromium.org</owner> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - The size of allocated objects just after Blink GC is triggered. - </summary> -</histogram> - -<histogram name="BlinkGC.ObjectSizeBeforeGC" units="KB" expires_after="M88"> - <owner>haraken@chromium.org</owner> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - The size of allocated objects just before Blink GC is triggered. - </summary> -</histogram> - -<histogram name="BlinkGC.ObjectSizeFreedByHeapCompaction" units="KB" - expires_after="M81"> - <owner>haraken@chromium.org</owner> - <summary> - The total size of objects freed by BlinkGC's heap compaction. This is - recorded once following each compaction. - </summary> -</histogram> - -<histogram name="BlinkGC.PerformPendingSweep" units="ms" - expires_after="2015-03-30"> - <obsolete> - Removed at 2014 Jan. - </obsolete> - <owner>haraken@chromium.org</owner> - <summary> - Duration of time taken to run ThreadState::performPendingSweep(). - </summary> -</histogram> - -<histogram name="BlinkGC.SlowIncrementalMarkingFinalize.AtomicPhaseMarking" - units="ms" expires_after="M77"> - <obsolete> - Removed 07/2019. Data gathering finished with the result that slow marking - finalization was mostly caused by visiting DOM wrappers or premature - finalization. - </obsolete> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Duration of finishing marking the transitive closure of objects during the - final Blink garbage collection pause. Only recorded when incremental marking - finalization took at least 40ms. - </summary> -</histogram> - -<histogram name="BlinkGC.SlowIncrementalMarkingFinalize.EagerSweep" units="ms" - expires_after="M80"> - <obsolete> - Removed 07/2019. Data gathering finished with the result that slow marking - finalization was mostly caused by visiting DOM wrappers or premature - finalization. - </obsolete> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Duration of time taken to run eager sweep finalizers finalizers. Only - recorded when incremental marking finalization took at least 40ms. - </summary> -</histogram> - -<histogram - name="BlinkGC.SlowIncrementalMarkingFinalize.IncrementalMarkingFinalize" - units="ms" expires_after="M77"> - <obsolete> - Removed 07/2019. Data gathering finished with the result that slow marking - finalization was mostly caused by visiting DOM wrappers or premature - finalization. - </obsolete> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Duration of time for incremental marking finalization. Only recorded when - incremental marking finalization took at least 40ms. - </summary> -</histogram> - -<histogram name="BlinkGC.SlowIncrementalMarkingFinalize.InvokePreFinalizers" - units="ms" expires_after="M77"> - <obsolete> - Removed 07/2019. Data gathering finished with the result that slow marking - finalization was mostly caused by visiting DOM wrappers or premature - finalization. - </obsolete> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Duration of time taken to invoke pre finalizers. Only recorded when - incremental marking finalization took at least 40ms. - </summary> -</histogram> - -<histogram name="BlinkGC.SlowIncrementalMarkingFinalize.MarkWeakProcessing" - units="ms" expires_after="M77"> - <obsolete> - Removed 07/2019. Data gathering finished with the result that slow marking - finalization was mostly caused by visiting DOM wrappers or premature - finalization. - </obsolete> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Duration of time taken for weak processing. Only recorded when incremental - marking finalization took at least 40ms. - </summary> -</histogram> - -<histogram - name="BlinkGC.SlowIncrementalMarkingFinalize.VisitCrossThreadPersistents" - units="ms" expires_after="M77"> - <obsolete> - Removed 07/2019. Data gathering finished with the result that slow marking - finalization was mostly caused by visiting DOM wrappers or premature - finalization. - </obsolete> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Duration of time taken to visit cross thread persistents. Only recorded when - incremental marking finalization took at least 40ms. - </summary> -</histogram> - -<histogram name="BlinkGC.SlowIncrementalMarkingFinalize.VisitDOMWrappers" - units="ms" expires_after="M77"> - <obsolete> - Removed 07/2019. Data gathering finished with the result that slow marking - finalization was mostly caused by visiting DOM wrappers or premature - finalization. - </obsolete> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Duration of time taken to visit DOM wrappers. Only recorded when incremental - marking finalization took at least 40ms. - </summary> -</histogram> - -<histogram name="BlinkGC.TimeForAtomicPhase" units="ms" expires_after="M88"> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Duration of overall garbage collection time when the garbage collector is - invoked for finishing a garbage collection. This includes finishing up any - already running garbage collection operation. Recorded at the end of each - garbage collection. - </summary> -</histogram> - -<histogram name="BlinkGC.TimeForAtomicPhaseMarking" units="ms" - expires_after="M88"> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Duration of finishing marking the transitive closure of objects during the - final Blink garbage collection pause. Recorded at the end of each garbage - collection. - </summary> -</histogram> - -<histogram name="BlinkGC.TimeForCoalesce" units="ms" expires_after="M80"> - <obsolete> - Removed 07/2019. Coalescing is not used anymore. - </obsolete> - <owner>haraken@chromium.org</owner> - <owner>hpayer@chromium.org</owner> - <summary> - Duration of memory coalesce operation in the Blink GC. Reported once per - coalesce operation. - </summary> -</histogram> - -<histogram name="BlinkGC.TimeForCompleteSweep" units="ms" expires_after="M88"> - <owner>bikineev@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Duration of the pause that completes sweeping. Reported once per garbage - collection at the end. - </summary> -</histogram> - -<histogram name="BlinkGC.TimeForGCCycle" units="ms" expires_after="M88"> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Sum of all durations of individual phases within one Blink garbage - collection. Reported once per garbage collection at the end. - </summary> -</histogram> - -<histogram name="BlinkGC.TimeForGlobalWeakProcessing" units="ms" - expires_after="M88"> - <owner>haraken@chromium.org</owner> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Duration of time taken to run global weak processing of Blink GC. - </summary> -</histogram> - -<histogram name="BlinkGC.TimeForHeapCompaction" units="ms" expires_after="M88"> - <owner>haraken@chromium.org</owner> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Duration of wall time taken to run BlinkGC's heap compaction. - </summary> -</histogram> - -<histogram name="BlinkGC.TimeForIncrementalMarking" units="ms" - expires_after="M88"> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Sum of all durations of incremental marking phases within one Blink garbage - collection cycle. Reported once per garbage collection at the end. - </summary> -</histogram> - -<histogram name="BlinkGC.TimeForInvokingPreFinalizers" units="ms" - expires_after="M88"> - <owner>haraken@chromium.org</owner> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Duration of time taken to run ThreadState::invokePreFinalizers(). - </summary> -</histogram> - -<histogram name="BlinkGC.TimeForMarking" units="ms" expires_after="M88"> - <owner>omerkatz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Accumulated sum of all durations of individual phases contributing to - marking (main thread and background helpers) within one Blink garbage - collection. Reported once per garbage collection at the end. - </summary> -</histogram> - -<histogram name="BlinkGC.TimeForMarkingRoots" units="ms" expires_after="M88"> - <owner>omerkatz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Duration of marking roots within one Blink garbage collection. Reported once - per garbage collection at the end. - </summary> -</histogram> - -<histogram name="BlinkGC.TimeForNestedInV8" units="ms" expires_after="M88"> - <owner>mlippautz@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Duration of the time of Blink garbage collection spent nested in a V8 - garbage collection. Reported once per garbage collection at the end. - </summary> -</histogram> - -<histogram name="BlinkGC.TimeForStoppingThreads" units="ms" - expires_after="2017-02-13"> - <obsolete> - As of 02/2017, the code to stop Blink threads was removed. - </obsolete> - <owner>haraken@chromium.org</owner> - <summary> - Duration of time taken to stop all Blink threads before starting a GC. - </summary> -</histogram> - -<histogram name="BlinkGC.TimeForSweepingAllObjects" units="ms" - expires_after="M77"> - <obsolete> - As of 07/2019, this metric is replaced by BlinkGC.TimeForSweepingSum. - </obsolete> - <owner>haraken@chromium.org</owner> - <summary>Accumulated time taken to sweep all objects.</summary> -</histogram> - -<histogram name="BlinkGC.TimeForSweepingBackground" units="ms" - expires_after="M88"> - <owner>bikineev@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Sum of all durations of individual phases contributing to sweeping on - background helpers within one Blink garbage collection. Reported once per - garbage collection at the end. - </summary> -</histogram> - -<histogram name="BlinkGC.TimeForSweepingForeground" units="ms" - expires_after="M88"> - <owner>bikineev@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Sum of all durations of individual phases contributing to sweeping on the - main thread within one Blink garbage collection. Reported once per garbage - collection at the end. - </summary> -</histogram> - -<histogram name="BlinkGC.TimeForSweepingSum" units="ms" expires_after="M88"> - <owner>bikineev@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - Accumulated sum of all durations of individual phases contributing to - sweeping (main thread and background helpers) within one Blink garbage - collection. Reported once per garbage collection at the end. - </summary> -</histogram> - -<histogram name="BlinkGC.TimeForThreadLocalWeakProcessing" units="ms" - expires_after="2017-02-26"> - <obsolete> - As of 02/2017, the code for thread-local weak processing was removed. - </obsolete> - <owner>haraken@chromium.org</owner> - <summary>Duration of time taken to run thread-local weak processing.</summary> -</histogram> - -<histogram name="BlinkGC.TimeForTotalCollectGarbage" units="ms" - expires_after="M84"> - <owner>haraken@chromium.org</owner> - <owner>hpayer@chromium.org</owner> - <summary> - Duration of total Blink garbage collection time when the garbage collector - is invoked for finishing a garbage collection. This includes finishing up - any already running garbage collection operation as well as potentially - performing a follow-up collection synchronously. Recorded each time after - invoking the Blink garbage collector. - </summary> -</histogram> - -<histogram name="BlinkGC.TotalAllocatedSpace" units="KB" expires_after="M88"> - <owner>haraken@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - The total size of allocated space in OS when a Blink GC is triggered. - </summary> -</histogram> - -<histogram name="BlinkGC.TotalObjectSpace" units="KB" expires_after="M88"> - <owner>haraken@chromium.org</owner> - <owner>oilpan-reviews@chromium.org</owner> - <summary> - The total size of object space in all threads when a Blink GC is triggered. - </summary> -</histogram> - <histogram name="BloatedRenderer.HandlingInBrowser" enum="BloatedRendererHandlingInBrowser" expires_after="M80"> <obsolete> @@ -94445,6 +90541,17 @@ </summary> </histogram> +<histogram name="NavigationPredictor.IsPubliclyRoutable" enum="Boolean" + expires_after="M90"> + <owner>tbansal@chromium.org</owner> + <owner>ryansturm@chromium.org</owner> + <summary> + Set to true if the IP address of the origin of the main frame URL is + publically routable. Recorded everytime a preconnect attempt is made by the + navigation predictor. + </summary> +</histogram> + <histogram base="true" name="NavigationPredictor.LinkClickedPrerenderResult" enum="NavigationPredictorLinkClickedPrerenderResult" expires_after="M85"> <owner>ryansturm@chromium.org</owner> @@ -115591,7 +111698,7 @@ </histogram> <histogram name="NQE.CellularSignalStrength.ECTReduction" - units="ECT level reduction" expires_after="2020-01-26"> + units="ECT level reduction" expires_after="2021-01-26"> <owner>tbansal@chromium.org</owner> <summary> Number of buckets by which effective connection type was reduced or capped @@ -115613,6 +111720,9 @@ <histogram name="NQE.CellularSignalStrength.LevelDifference" units="Signal Strength Level" expires_after="2020-01-26"> + <obsolete> + Obsoleted. + </obsolete> <owner>tbansal@chromium.org</owner> <owner>bengr@chromium.org</owner> <summary> @@ -116203,6 +112313,15 @@ </summary> </histogram> +<histogram base="true" name="NQE.SignalStrengthQueried" enum="Boolean" + expires_after="2021-09-14"> + <owner>tbansal@chromium.org</owner> + <owner>mcrouse@chromium.org</owner> + <summary> + Recorded as true when the signal strength of the current network is queried. + </summary> +</histogram> + <histogram name="NQE.ThroughputAnalyzer.HangingRequests.Erased" units="count" expires_after="2019-03-06"> <obsolete> @@ -166494,7 +162613,7 @@ </histogram> <histogram name="SignedExchange.CertificateFetch.CacheHit" - enum="BooleanCacheHit" expires_after="2020-10-01"> + enum="BooleanCacheHit" expires_after="2021-04-01"> <owner>ksakamoto@chromium.org</owner> <owner>kinuko@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -166505,7 +162624,7 @@ </histogram> <histogram name="SignedExchange.CertVerificationResult" enum="NetErrorCodes" - expires_after="2020-10-01"> + expires_after="2021-04-01"> <owner>ksakamoto@chromium.org</owner> <owner>kinuko@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -166515,7 +162634,7 @@ </histogram> <histogram name="SignedExchange.CTVerificationResult" enum="CTComplianceStatus" - expires_after="2020-10-01"> + expires_after="2021-04-01"> <owner>ksakamoto@chromium.org</owner> <owner>kinuko@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -166525,7 +162644,7 @@ </histogram> <histogram name="SignedExchange.FallbackRedirectLoop" enum="BooleanDetected" - expires_after="2020-10-01"> + expires_after="2021-04-01"> <owner>ksakamoto@chromium.org</owner> <owner>kinuko@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -166553,7 +162672,7 @@ </histogram> <histogram name="SignedExchange.LoadResult2" enum="SignedExchangeLoadResult" - expires_after="2021-01-24"> + expires_after="2021-04-01"> <owner>ksakamoto@chromium.org</owner> <owner>kinuko@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -166564,7 +162683,7 @@ </histogram> <histogram name="SignedExchange.OCSPResponseStatus" enum="OCSPResponseStatus" - expires_after="2020-10-01"> + expires_after="2021-04-01"> <owner>ksakamoto@chromium.org</owner> <owner>kinuko@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -166575,7 +162694,7 @@ </histogram> <histogram name="SignedExchange.OCSPRevocationStatus" - enum="OCSPRevocationStatus" expires_after="2020-10-01"> + enum="OCSPRevocationStatus" expires_after="2021-04-01"> <owner>ksakamoto@chromium.org</owner> <owner>kinuko@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -166600,7 +162719,7 @@ </histogram> <histogram name="SignedExchange.Prefetch.LoadResult2" - enum="SignedExchangeLoadResult" expires_after="2020-10-01"> + enum="SignedExchangeLoadResult" expires_after="2021-04-01"> <owner>kinuko@chromium.org</owner> <owner>ksakamoto@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -166611,7 +162730,7 @@ </histogram> <histogram name="SignedExchange.Prefetch.Precision.30Seconds" - enum="BooleanUsage" expires_after="2020-10-01"> + enum="BooleanUsage" expires_after="2021-04-01"> <owner>kinuko@chromium.org</owner> <owner>ksakamoto@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -166624,7 +162743,7 @@ </histogram> <histogram name="SignedExchange.Prefetch.Recall.30Seconds" enum="BooleanUsage" - expires_after="2020-10-01"> + expires_after="2021-04-01"> <owner>kinuko@chromium.org</owner> <owner>ksakamoto@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -166636,7 +162755,7 @@ </histogram> <histogram name="SignedExchange.SignatureVerificationError.Expired" - units="seconds" expires_after="2020-10-01"> + units="seconds" expires_after="2021-04-01"> <owner>kinuko@chromium.org</owner> <owner>ksakamoto@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -166647,7 +162766,7 @@ </histogram> <histogram name="SignedExchange.SignatureVerificationError.NotYetValid" - units="seconds" expires_after="2020-10-01"> + units="seconds" expires_after="2021-04-01"> <owner>ksakamoto@chromium.org</owner> <owner>kinuko@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -166658,7 +162777,7 @@ </histogram> <histogram name="SignedExchange.SignatureVerificationResult" - enum="SignedExchangeSignatureVerificationResult" expires_after="2021-01-24"> + enum="SignedExchangeSignatureVerificationResult" expires_after="2021-04-01"> <owner>kinuko@chromium.org</owner> <owner>ksakamoto@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -166669,7 +162788,7 @@ </histogram> <histogram name="SignedExchange.Time.CertificateFetch.Failure" units="ms" - expires_after="2020-10-01"> + expires_after="2021-04-01"> <owner>ksakamoto@chromium.org</owner> <owner>kinuko@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -166680,7 +162799,7 @@ </histogram> <histogram name="SignedExchange.Time.CertificateFetch.Success" units="ms" - expires_after="2020-10-01"> + expires_after="2021-04-01"> <owner>ksakamoto@chromium.org</owner> <owner>kinuko@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -166691,7 +162810,7 @@ </histogram> <histogram name="SignedExchange.Time.SignatureVerify" units="ms" - expires_after="2021-01-24"> + expires_after="2021-04-01"> <owner>ksakamoto@chromium.org</owner> <owner>kinuko@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -166702,7 +162821,7 @@ </histogram> <histogram name="SignedExchange.TimeUntilExpiration" units="seconds" - expires_after="2020-10-01"> + expires_after="2021-04-01"> <owner>kinuko@chromium.org</owner> <owner>ksakamoto@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -166714,7 +162833,7 @@ </histogram> <histogram name="SignedExchange.ValidityPingDuration" units="ms" - expires_after="2020-10-01"> + expires_after="2021-04-01"> <owner>kinuko@chromium.org</owner> <owner>ksakamoto@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -166725,7 +162844,7 @@ </histogram> <histogram name="SignedExchange.ValidityPingResult" - enum="SignedExchangeValidityPingResult" expires_after="2020-10-01"> + enum="SignedExchangeValidityPingResult" expires_after="2021-04-01"> <owner>kinuko@chromium.org</owner> <owner>ksakamoto@chromium.org</owner> <owner>horo@chromium.org</owner> @@ -192513,6 +188632,10 @@ <histogram name="Webapp.InstallDuration.System" units="ms" expires_after="2021-03-07"> + <obsolete> + Replaced by Webapp.SystemApps.FreshInstallDuration in 09/2020, issue + https://crbug.com/1129275. + </obsolete> <owner>calamity@chromium.org</owner> <owner>ortuno@chromium.org</owner> <summary> @@ -192703,6 +188826,19 @@ </summary> </histogram> +<histogram name="Webapp.SystemApps.FreshInstallDuration" units="ms" + expires_after="2021-03-07"> + <owner>calamity@chromium.org</owner> + <owner>ortuno@chromium.org</owner> + <summary> + Records the time taken to perform a fresh install of all system web apps. It + measures the time from when we dispatch a call to install them, until we get + all the installation results. This intentionally excludes the scenario where + we don't request to install all the apps for consistency. Recorded in + milliseconds, from 1 millisecond to 3 minutes. + </summary> +</histogram> + <histogram name="Webapp.UninstallDialogAction" enum="WebappUninstallDialogAction" expires_after="2020-12-30"> <owner>benwells@chromium.org</owner> @@ -212524,6 +208660,12 @@ <affected-histogram name="NQE.RTT.RawObservation"/> </histogram_suffixes> +<histogram_suffixes name="NQE.SignalStrengthQueried" separator="."> + <suffix name="Cellular" label="On cellular network."/> + <suffix name="WiFi" label="On WiFi network."/> + <affected-histogram name="NQE.SignalStrengthQueried"/> +</histogram_suffixes> + <histogram_suffixes name="NumLayersBucket" separator="."> <obsolete> Removed 2018-07 as the non bucketed metrics are enough for future reference. @@ -220302,13 +216444,22 @@ <affected-histogram name="WebApp.Engagement"/> </histogram_suffixes> -<histogram_suffixes name="WebAppSystemAppNameForLogging" separator="."> - <suffix name="BrowserSettings" label="Browser Settings"/> +<histogram_suffixes name="WebAppSystemAppInternalName" separator="."> + <suffix name="BrowserSettings" label="Browser Settings"> + <obsolete> + Deprecated as of 2019-12-24. + </obsolete> + </suffix> <suffix name="Camera" label="Camera"/> + <suffix name="Diagnostics" label="Diagnostics"/> <suffix name="Discover" label="Discovery"/> <suffix name="Help" label="Help"/> <suffix name="Media" label="Media"/> <suffix name="OSSettings" label="OS Settings"/> + <suffix name="PrintManagement" label="PrintManagement"/> + <suffix name="Sample" label="Sample"/> + <suffix name="Scanning" label="Scanning"/> + <suffix name="Telemetry" label="Telemetry"/> <suffix name="Terminal" label="Terminal"/> <affected-histogram name="Webapp.InstallResult.System.Apps"/> </histogram_suffixes>
diff --git a/tools/metrics/histograms/histograms_index.txt b/tools/metrics/histograms/histograms_index.txt index 27cbede..fd81203 100644 --- a/tools/metrics/histograms/histograms_index.txt +++ b/tools/metrics/histograms/histograms_index.txt
@@ -1,4 +1,5 @@ tools/metrics/histograms/histograms.xml +tools/metrics/histograms/histograms_xml/Blink/histograms.xml tools/metrics/histograms/histograms_xml/Fingerprint/histograms.xml tools/metrics/histograms/histograms_xml/UMA/histograms.xml -tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml +tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml \ No newline at end of file
diff --git a/tools/metrics/histograms/histograms_xml/Blink/histograms.xml b/tools/metrics/histograms/histograms_xml/Blink/histograms.xml new file mode 100644 index 0000000..5e6ee84 --- /dev/null +++ b/tools/metrics/histograms/histograms_xml/Blink/histograms.xml
@@ -0,0 +1,2372 @@ +<!-- +Copyright 2020 The Chromium Authors. All rights reserved. +Use of this source code is governed by a BSD-style license that can be +found in the LICENSE file. +--> + +<!-- +This file is used to generate a comprehensive list of Blink histograms along +with a detailed description for each histogram. + +For best practices on writing histogram descriptions, see +https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md + +For brief details on how to modify this file to add your description, see +https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/one-pager.md + +Please send CLs to chromium-metrics-reviews@google.com rather than to specific +individuals. These CLs will be automatically reassigned to a reviewer within +about 5 minutes. This approach helps the metrics team to load-balance incoming +reviews. Googlers can read more about this at go/gwsq-gerrit. +--> + +<histogram-configuration> + +<histograms> + +<histogram name="Blink.Accessibility.NumTreeUpdatesQueuedBeforeLayout" + units="updates" expires_after="M86"> + <owner>aboxhall@chromium.org</owner> + <owner>chrome-a11y-core@chromium.org</owner> + <summary> + Records how many tree updates were queued at the time updates are being + processed after layout. If we are trying to process too many updates at + once, we should investigate how we might be able to merge similar updates + without losing important information. + </summary> +</histogram> + +<histogram name="Blink.Animate.UpdateTime" units="microseconds" + expires_after="2021-01-10"> +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> + +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> + +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> + + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Time spent processing main frame animations during a main frame update. + + This histogram does not record metrics on machines with low-resolution + clocks. + </summary> +</histogram> + +<histogram name="Blink.Animation.CompositedAnimationFailureReason" + enum="CompositorAnimationsFailureReason" expires_after="2021-02-14"> + <owner>smcgruer@chromium.org</owner> + <owner>animations-dev@chromium.org</owner> + <summary> + Reasons an Animation is not suitable for running on the compositor thread. + + Note that a given Animation may have more than one reason, so this histogram + cannot be used to determine the overall rate of 'composited' vs + 'noncomposited' animations. + </summary> +</histogram> + +<histogram name="Blink.Canvas.2DPrintingAsVector" enum="BooleanSuccess" + expires_after="2021-01-31"> + <owner>fserb@chromium.org</owner> + <owner>juanmihd@chromium.org</owner> + <summary> + Records if a Canvas is being printed as a vector or as an image. + </summary> +</histogram> + +<histogram name="Blink.Canvas.ContentChangeMode" + enum="BooleanContentChangeMode" expires_after="2021-03-07"> + <owner>yiyix@chromium.org</owner> + <owner>fserb@chromium.org</owner> + <summary> + Records whether the contents in the canvas buffer needed to be preserved via + a copy when replacing the target buffer for drawing a new frame. This metric + is recorded each time the target buffer needs to be replaced. It's recorded + once per frame. + </summary> +</histogram> + +<histogram name="Blink.Canvas.ContextType" enum="CanvasContextType" + expires_after="2021-01-31"> + <owner>fserb@chromium.org</owner> + <owner>aaronhk@chromium.org</owner> + <summary> + Records the context type names used to create canvas rendering contexts. + </summary> +</histogram> + +<histogram name="Blink.Canvas.CreateImageBitmapSource" + enum="CanvasCreateImageBitmapSource" expires_after="2021-01-31"> + <owner>fserb@chromium.org</owner> + <owner>aaronhk@chromium.org</owner> + <summary> + The source from which an ImageBitmap is created by a createImageBitmap call. + </summary> +</histogram> + +<histogram base="true" name="Blink.Canvas.DrawImage.Duration" + units="microseconds" expires_after="2021-01-31"> + <owner>fserb@chromium.org</owner> + <owner>aaronhk@chromium.org</owner> + <summary> + Time spent on the main thread during a 2D canvas drawImage API call. + + Note: This metric drops reports on clients with low-resolution clocks, which + means these reports will be biased against a portion of the population on + Windows. See Windows.HasHighResolutionTimeTicks for the affected sample. + </summary> +</histogram> + +<histogram base="true" name="Blink.Canvas.DrawImage.SqrtNumberOfPixels" + units="sqrt(pixels)" expires_after="2021-01-31"> + <owner>fserb@chromium.org</owner> + <owner>aaronhk@chromium.org</owner> + <summary> + Stores the square root of the number of pixels drawn into a Canvas. + Different histograms per CanvasImageSource. + </summary> +</histogram> + +<histogram base="true" name="Blink.Canvas.GetImageDataScaledDuration" + units="microseconds * 10/sqrt(pixels)" expires_after="2021-01-31"> + <owner>fserb@chromium.org</owner> + <owner>aaronhk@chromium.org</owner> + <summary> + Time in microseconds * 10 (10e-5 seconds) spent on the 2D canvas + getImageData API call, divided by the square root of the total number of + pixels of the image extracted from the canvas. Smaller is faster. + + The idea behind this elaborated unit is that the bigger the area of a canvas + the longer the operation GetImageData takes, so we want a way to measure the + overall performance regardless of the size of the canvas. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.Canvas.GPUFallbackToCPU" + enum="CanvasGPUFallbackToCPUScenario" expires_after="2021-01-31"> + <owner>fserb@chromium.org</owner> + <summary>Logs the occurrences of canvas fallback from GPU to CPU.</summary> +</histogram> + +<histogram name="Blink.Canvas.HasRendered" enum="Boolean" + expires_after="2021-01-31"> + <owner>juanmihd@chromium.org</owner> + <owner>fserb@chromium.org</owner> + <summary> + Records if the canvas has been rendered at least once. Recorded on disposal. + </summary> +</histogram> + +<histogram name="Blink.Canvas.HibernationEvents" enum="CanvasHibernationEvent" + expires_after="2021-01-31"> + <owner>fserb@chromium.org</owner> + <summary> + Records the occurrence of events related to 2D canvas GPU resource + hibernation. + </summary> +</histogram> + +<histogram name="Blink.Canvas.IsComposited" enum="BooleanSuccess" + expires_after="2021-01-31"> + <owner>aaronhk@chromium.org</owner> + <owner>fserb@chromium.org</owner> + <summary> + Records if the canvas context is composited or not. Recorded in + HTMLCanvasElement::GetCanvasRenderingContext. + </summary> +</histogram> + +<histogram name="Blink.Canvas.MaximumInflightResources" + units="canvas resources" expires_after="2021-01-31"> + <owner>aaronhk@chromium.org</owner> + <owner>fserb@chromium.org</owner> + <summary> + Reports the maximum number or canvas resources used at any one time by a + canvas resource provider. Logged in the destructor of + CanvasResourceProvider. + </summary> +</histogram> + +<histogram name="Blink.Canvas.NumCanvasesPerPage" units="canvases" + expires_after="2021-01-31"> + <owner>aaronhk@chromium.org</owner> + <owner>fserb@chromium.org</owner> + <summary> + When a Document is shutdown, reports the number of canvases on that page. + </summary> +</histogram> + +<histogram base="true" name="Blink.Canvas.PutImageDataScaledDuration" + units="microseconds * 10/sqrt(pixels)" expires_after="2021-01-31"> + <owner>fserb@chromium.org</owner> + <owner>aaronhk@chromium.org</owner> + <summary> + Time in microseconds * 10 (10e-5 seconds) spent on the 2D canvas + putImageData API call, divided by the square root of the total number of + pixels of the imageData painted into the canvas. Smaller is faster. + + The idea behind this elaborated unit is that the bigger the area of a canvas + the longer the operation PutImageData takes, so we want a way to measure the + overall performance regardless of the size of the canvas. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.Canvas.RasterDuration" units="microseconds" + expires_after="2021-01-31"> + <owner>aaronhk@chromium.org</owner> + <owner>fserb@chromium.org</owner> + <summary> + Records the CPU, GPU and combined raster time for a random sampling of + canvas frames for accelerated and deferred canvases. Records wall time for a + random sampling of unaccelerated canvases. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram base="true" name="Blink.Canvas.RequestedImageMimeTypes" + enum="RequestedImageMimeType" expires_after="2021-01-31"> + <owner>fserb@chromium.org</owner> + <owner>aaronhk@chromium.org</owner> + <summary> + Records the occurence of image file formats passed into toDataURL and toBlob + functions in canvas. + </summary> +</histogram> + +<histogram name="Blink.Canvas.ResourceProviderIsAccelerated" + enum="BooleanHardwareAccelerated" expires_after="2021-01-31"> + <owner>aaronhk@chromium.org</owner> + <owner>fserb@chromium.org</owner> + <summary>Logs if the canvas resource provider is accelerated or not.</summary> +</histogram> + +<histogram name="Blink.Canvas.ResourceProviderType" + enum="CanvasResourceProviderType" expires_after="2021-01-31"> + <owner>aaronhk@chromium.org</owner> + <owner>fserb@chromium.org</owner> + <summary>Records the type of resource provider used for a canvas.</summary> +</histogram> + +<histogram name="Blink.Canvas.ResourceProviderUsage" + enum="CanvasResourceProviderUsage" expires_after="2021-01-31"> + <owner>aaronhk@chromium.org</owner> + <owner>fserb@chromium.org</owner> + <summary> + Records the requested resource usage for a canvas resource provider. + </summary> +</histogram> + +<histogram name="Blink.Canvas.SqrtNumberOfPixels" units="sqrt(pixels)" + expires_after="2021-01-31"> + <owner>aaronhk@chromium.org</owner> + <owner>fserb@chromium.org</owner> + <summary> + Stores the square root of the number of pixels in a new or resized offscreen + canvas. Emitted from CanvasRenderingContextHost::RecordCanvasSizeToUMA. + </summary> +</histogram> + +<histogram base="true" name="Blink.Canvas.ToBlob.CompleteEncodingDelay" + units="microseconds" expires_after="2021-01-31"> + <owner>fserb@chromium.org</owner> + <owner>aaronhk@chromium.org</owner> + <summary> + This metric measures the total time spent on completing encoding all the + rows of an image (jpeg or png), as part of a canvas.toBlob API call. + Encoding occurs during one or more idle periods on the main thread and the + waiting time of the next idle period is included in the measurement. If the + code has swtiched to force encoding path, we will not measure the delay in + this metric. + + This metric is useful in helping us adjust the IdleTaskCompleteTimeoutDelay + in canvas.toBlob. When the encoding idle task is delayed for longer than + IdleTaskCompleteTimeoutDelay, the browser will switch to a non-idle task to + force encoding to happen on the main thread. + + In addition, metric values from OffscreenCanvas.convertToBlob API call are + also gathered into this histogram, because the logic flow is exactly the + same as canvas.toBlob. It's worth to note that the values can come from idle + tasks on either main or worker thread. + + Note: This metric drops reports on clients with low-resolution clocks, which + means these reports will be biased against a portion of the population on + Windows. See Windows.HasHighResolutionTimeTicks for the affected sample. + </summary> +</histogram> + +<histogram base="true" name="Blink.Canvas.ToBlob.IdleTaskStatus" + enum="IdleTaskStatus" expires_after="2021-01-31"> + <owner>fserb@chromium.org</owner> + <owner>aaronhk@chromium.org</owner> + <summary> + Records the status of the idle task when finishing a toBlob call. + + In addition, metric values from OffscreenCanvas.convertToBlob API call are + also gathered into this histogram, because the logic flow is exactly the + same as canvas.toBlob. It's worth to note that the values can come from idle + tasks on either main or worker thread. + </summary> +</histogram> + +<histogram base="true" name="Blink.Canvas.ToBlob.InitiateEncodingDelay" + units="microseconds" expires_after="2021-01-31"> + <owner>fserb@chromium.org</owner> + <owner>aaronhk@chromium.org</owner> + <summary> + This metric measures the time spent from initiating image encoding (jpeg or + png) on idle task to the actual execution time of initiation, as part of a + canvas.toBlob API call. + + This metric is useful in helping us adjust the IdleTaskStartTimeoutDelay in + canvas.toBlob. When the initialization idle task is delayed for longer than + IdleTaskStartTimeoutDelay, the browser will switch to a non-idle task to + force initialization and encoding to occur on the main thread. + + In addition, metric values from OffscreenCanvas.convertToBlob API call are + also gathered into this histogram, because the logic flow is exactly the + same as canvas.toBlob. It's worth to note that the values can come from idle + tasks on either main or worker thread. + + Note: This metric drops reports on clients with low-resolution clocks, which + means these reports will be biased against a portion of the population on + Windows. See Windows.HasHighResolutionTimeTicks for the affected sample. + </summary> +</histogram> + +<histogram base="true" name="Blink.Canvas.ToBlob.ScaledDuration" + units="microseconds/sqrt(pixels)" expires_after="2021-01-31"> + <owner>fserb@chromium.org</owner> + <owner>aaronhk@chromium.org</owner> + <summary> + Time in microseconds spent on the 2D canvas toBlob API call, divided by the + square root of the total number of pixels of the canvas. + + In addition, metric values from OffscreenCanvas.convertToBlob API call are + also gathered into this histogram, because the logic flow is exactly the + same as canvas.toBlob. It's worth to note that the values can come from idle + tasks on either main or worker thread. + + Note: This metric drops reports on clients with low-resolution clocks, which + means these reports will be biased against a portion of the population on + Windows. See Windows.HasHighResolutionTimeTicks for the affected sample. + </summary> +</histogram> + +<histogram base="true" name="Blink.Canvas.ToDataURLScaledDuration" + units="microseconds/sqrt(pixels)" expires_after="2021-01-31"> + <owner>fserb@chromium.org</owner> + <owner>aaronhk@chromium.org</owner> + <summary> + Time spent on 2D canvas toDataURL API call divided by the square root of the + total number of pixels of the image. Smaller is faster. + + The idea behind this unit is that the bigger the area of a canvas the longer + the operation ToDataURL takes, so we want a way to measure the overall + performance regardless of the size of the canvas. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.Canvas.WillReadFrequently" + enum="BooleanWillReadFrequently" expires_after="2021-01-31"> + <owner>fserb@chromium.org</owner> + <summary> + Logs if the canvas is initialized to be read frequently or not. + </summary> +</histogram> + +<histogram name="Blink.ColorGamut.Destination" enum="Gamut" expires_after="M85"> + <owner>brianosman@chromium.org</owner> + <owner>mcasas@google.com</owner> + <owner>ccameron@chromium.org</owner> + <summary>Gamut properties of destination color space.</summary> +</histogram> + +<histogram name="Blink.ColorSpace.Destination" enum="Gamma" expires_after="M85"> + <owner>brianosman@chromium.org</owner> + <owner>mcasas@google.com</owner> + <owner>ccameron@chromium.org</owner> + <summary>Gamma properties of destination color space.</summary> +</histogram> + +<histogram name="Blink.ColorSpace.Destination.NonlinearFitErrorCombined" + units="units" expires_after="M85"> + <owner>brianosman@chromium.org</owner> + <owner>mcasas@google.com</owner> + <owner>ccameron@chromium.org</owner> + <summary> + The L-infinity error (in 8-bit values) of the numerical approximation of + table-based ICC profile transfer functions for all channels combined, when + the nonlinear approximation converged. + </summary> +</histogram> + +<histogram base="true" name="Blink.Compositing.LayerPromotionCount" + units="units" expires_after="2021-01-24"> + <owner>pdr@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Number of composited layers based on various reasons. Recorded when a page + finishes its layer updates. + </summary> +</histogram> + +<histogram name="Blink.CompositingAssignments.UpdateTime" units="microseconds" + expires_after="2021-03-01"> +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> + + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Time spent updating compositing assignments in the Blink document lifecycle. + This is the legacy compositing approach. + + Note: this histogram has stopped recording metrics on machines with + low-resolution clocks. + </summary> +</histogram> + +<histogram name="Blink.CompositingCommit.UpdateTime" units="microseconds" + expires_after="2021-03-01"> +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> + + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Time spent updating and pushing layers at the end of the paint step in the + Blink document lifecycle. This is the new compositing approach in + CompositeAfterPaint and is largely implemented by PaintArtifactCompositor. + BlinkGenPropertyTrees is an incremental launch of part of the new + compositing approach and will use both this and + Blink.{CompositingInputs+CompositingAssignments}.UpdateTime. + + Note: As of M70, this histogram has stopped recording metrics on machines + with low-resolution clocks. + </summary> +</histogram> + +<histogram name="Blink.CompositingInputs.UpdateTime" units="microseconds" + expires_after="2021-03-01"> +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> + + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Time spent updating compositing inputs in the Blink document lifecycle. This + is the legacy compositing approach. + + Note: this histogram has stopped recording metrics on machines with + low-resolution clocks. + </summary> +</histogram> + +<histogram name="Blink.Compression.CompressionStream.Format" + enum="CompressionStreamsFormat" expires_after="2021-01-24"> + <owner>ricea@chromium.org</owner> + <owner>yhirano@chromium.org</owner> + <summary> + Compression format passed to the constructor of the JavaScript API + "CompressionStream", which is used for lossless compression of + arbitrary binary data. Recorded once per call to the constructor. This + measures which compression formats are most commonly used in the wild. + </summary> +</histogram> + +<histogram name="Blink.Compression.DecompressionStream.Format" + enum="CompressionStreamsFormat" expires_after="2021-01-24"> + <owner>ricea@chromium.org</owner> + <owner>yhirano@chromium.org</owner> + <summary> + Compression format passed to the constructor of the JavaScript API + "DecompressionStream", which is used for lossless decompression of + arbitrary binary data. Recorded once per call to the constructor. This + measures which compression formats are most commonly used in the wild. + </summary> +</histogram> + +<histogram name="Blink.CookieStore.MatchType" enum="CookieStoreMatchType" + expires_after="M87"> + <owner>ayui@chromium.org</owner> + <owner>pwnall@chromium.org</owner> + <summary> + Records match type option set by the developer for Cookie Store query APIs + to measure the usage of the option during Origin Trial to better evaluate + the best shape of the API. + </summary> +</histogram> + +<histogram name="Blink.CSSPaintValue.PaintOffThread" + enum="BooleanCompositorCSSPaint" expires_after="2021-09-08"> + <owner>xidachen@chromium.org</owner> + <owner>smcgruer@chromium.org</owner> + <summary> + Records if a CSS Paint is painted on the compositor thread or has fallen + back to the main thread. + </summary> +</histogram> + +<histogram name="Blink.DecodedImage.DensitySizeCorrectionDetected" + enum="BooleanPresent" expires_after="2021-01-03"> + <owner>schenney@chromium.org</owner> + <owner>noam.j.rosenthal@gmail.com</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Indicates whether a decoded image contains density correction metadata, i.e. + when its resolution and dimension EXIF values match. + </summary> +</histogram> + +<histogram name="Blink.DecodedImage.JpegDensity.KiBWeighted" + units="0.01 bits per pixel" expires_after="2021-02-14"> + <owner>deymo@google.com</owner> + <owner>compression-dev@google.com</owner> + <summary> + The compressed image size in KiB per image density measured in 0.01 bits per + pixel. This is logged once per image load after the whole image is loaded + and only for JPEGs with at least 100 pixels on the smallest dimension (width + or height). The reported count for a sample represents the image size + rounded to the nearest KiB. + </summary> +</histogram> + +<histogram name="Blink.DecodedImage.Orientation" enum="DecodedImageOrientation" + expires_after="M81"> + <owner>andrescj@chromium.org</owner> + <owner>rob.buis@samsung.org</owner> + <summary>Image orientation inferred during decode.</summary> +</histogram> + +<histogram name="Blink.DecodedImage.WebPFileFormat" enum="WebPFileFormat" + expires_after="2021-02-14"> + <owner>mcasas@chromium.org</owner> + <owner>andrescj@chromium.org</owner> + <summary> + WebP file format parsed during Blink's header parsing phase (which should + happen only once per image). + </summary> +</histogram> + +<histogram name="Blink.DecodedImageType" enum="DecodedImageType" + expires_after="2021-02-07"> + <owner>urvang@chromium.org</owner> + <summary>Image codec inferred during decode.</summary> +</histogram> + +<histogram name="Blink.EffectiveZoom" units="%" expires_after="2021-03-01"> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + The EffectiveZoom as reported by ComputedStyle in a Blink renderer. The + value is reported each time the effective zoom is set to a new value. The + maximum zoom reported is 400% to keep the histogram of reasonable size. + </summary> +</histogram> + +<histogram name="Blink.Fetch.RequestResourceTime" units="microseconds" + expires_after="M82"> + <owner>csharrison@chromium.org</owner> + <summary> + The total microseconds spent in ResourceFetcher::requestResource. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.Fonts.AndroidFontLookupLoadFromFileTime" units="ms" + expires_after="M88"> + <owner>drott@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Records the duration it takes to load the font lookup table from file. + Reported when the font unique name lookup table is loaded at browser startup + on Android and loading was successful. The metric is not recorded when the + file did not exist or could not be parsed; use + Blink.Fonts.AndroidFontScanningLoadFromFileSuccess to determine how often + this metric is recorded. + </summary> +</histogram> + +<histogram name="Blink.Fonts.AndroidFontLookupTableReadyTime" units="ms" + expires_after="M88"> + <owner>drott@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Records the duration it takes from starting to prepare the font lookup table + until it is ready. Independent of whether it is loaded from file or whether + the fonts are scanned. Reported when the font unique name lookup table is + loaded at browser startup on Android. + </summary> +</histogram> + +<histogram name="Blink.Fonts.AndroidFontScanningLoadFromFileSuccess" + enum="BooleanSuccess" expires_after="M88"> + <owner>drott@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Counts the ratio of whether it was possible to load the font table from file + successfully or not. Reported when the font unique name lookup table is + loaded at browser startup on Android. + </summary> +</histogram> + +<histogram name="Blink.Fonts.AndroidFontScanningPersistToFileSuccess" + enum="BooleanSuccess" expires_after="M88"> + <owner>drott@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Counts the ratio of whether it was possible to store the font table to disk + after the metadata has been indexed. Reported on Android when the font + unique name lookup table is stored after indexing. + </summary> +</histogram> + +<histogram name="Blink.Fonts.AndroidFontScanningResult" + enum="FontScanningResult" expires_after="M88"> + <owner>drott@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Reports success or failure of extracting metadata from a single font file. + Reported when the font unique name lookup table is rebuilt on Android (i.e. + after a firmware update or first start with empty cache folder). + </summary> +</histogram> + +<histogram name="Blink.Fonts.AndroidFontScanningTableBuildTime" units="ms" + expires_after="M88"> + <owner>drott@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Records duration of scanning available fonts for font name metadata, sorting + the list and making it available to renderers. Reported when the font unique + name lookup table is rebuilt on Android (i.e. after a firmware update or + first start with empty cache folder). + </summary> +</histogram> + +<histogram name="Blink.Fonts.AndroidFontScanningUpdateNeeded" + enum="BooleanSuccess" expires_after="M88"> + <owner>drott@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Counts the ratio of whether it was necessary to rebuild the font table or + not. Reported when after the unique name lookup table is loaded from disk at + browser startup on Android. + </summary> +</histogram> + +<histogram name="Blink.Fonts.DataAccess.StreamCreation" enum="BooleanSuccess" + expires_after="M88"> + <owner>oyiptong@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <owner>storage-dev@chromium.org</owner> + <summary> + Counts success or failure in attempting to obtain font bytes as stream with + base address from Skia. + </summary> +</histogram> + +<histogram name="Blink.Fonts.Enumeration.Duration" units="ms" + expires_after="M88"> + <owner>oyiptong@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <owner>storage-dev@chromium.org</owner> + <summary> + Records duration of enumerating available fonts for font name metadata. + Reported on Mac platforms only, when the fonts are enumerated from the + system APIs if there is a cache miss. + </summary> +</histogram> + +<histogram name="Blink.Fonts.HarfBuzzFaceZeroCopyAccess" enum="BooleanSuccess" + expires_after="M88"> + <owner>drott@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Counts success or failure of attempting to access font tables using the zero + copy instantiation method in the HarfBuzz integration layer. This value is + only recorded on non-Mac platforms. Reported each time a HarfBuzz face + object is created. + </summary> +</histogram> + +<histogram name="Blink.Fonts.ShapeCache" units="units" expires_after="M81"> + <owner>eae@chromium.org</owner> + <summary> + Total number of entries in all Blink ShapeCache instances. The value is + reported each time the FontCache::purge() method is called. + </summary> +</histogram> + +<histogram name="Blink.Fonts.VariableFontsRatio" + enum="WebFontInstantiationResult" expires_after="M88"> + <owner>drott@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Tracks adoption ratio of variable fonts compared to conventional (in the + sense of non-variable) web fonts. Recorded at the time of instantiating a + Skia SkTypeface from the successfully decoded web font blob. + </summary> +</histogram> + +<histogram name="Blink.Fonts.WindowsUniqueLocalFontInstantiationResult" + enum="WindowsUniqueLocalFontInstantiationResult" expires_after="M88"> + <owner>drott@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Tracks whether a locally uniquely matched font can be instantiated inside + the renderer. Recorded at the time the renderer tries to instantiate the + font in the font cache. If it fails (in rare cases), it can either be caused + by the font being placed outside the Windows Fonts directory, or for an + unknown reason. Track this to identify whether a browser side helper is + needed to open the file handle outside the sandbox and pass it into the + renderer. + </summary> +</histogram> + +<histogram name="Blink.Fonts.WinFallback.LegacyNoneFound" units="units" + expires_after="M88"> + <owner>drott@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Tracks Blink Windows font fallback results while migrating to API based + fallback vs. the previous use of a hard-coded list. Records a data point + when the legacy hard-coded list code did not find fallback for a particular + Unicode code block ID (ICU::UBlockCode). Recorded at the time of Blink + layout code requesting a fallback font for a character and locale. + </summary> +</histogram> + +<histogram name="Blink.Fonts.WinFallback.LegacyWinAPIDisagree" units="units" + expires_after="M88"> + <owner>drott@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Tracks Blink Windows font fallback results while migrating to API based + fallback vs. the previous use of a hard-coded list. Records a data point + when the Windows API out of process fallback code and the legacy hard-coded + list fallback code disagree in fallback font result for a particular Unicode + code block ID (ICU::UBlockCode). Recorded at the time of Blink layout code + requesting a fallback font for a character and locale. + </summary> +</histogram> + +<histogram name="Blink.Fonts.WinFallback.NoFallbackFound" units="units" + expires_after="M88"> + <owner>drott@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Tracks Blink Windows font fallback results while migrating to API based + fallback vs. the previous use of a hard-coded list. Records a data point + when no fallback font result was found for a particular Unicode code block + ID (ICU::UBlockCode) through either the out-of-process Windows DWrite API or + the hard-coded list fallback code. Recorded at the time of Blink layout code + requesting a fallback font for a character and locale. + </summary> +</histogram> + +<histogram name="Blink.Fonts.WinFallback.WinAPINoneFound" units="units" + expires_after="M88"> + <owner>drott@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Tracks Blink Windows font fallback results while migrating to API based + fallback vs. the previous use of a hard-coded list. Records a data point + when the Windows API out of process fallback code did not find fallback for + a particular Unicode code block ID (ICU::UBlockCode). Recorded at the time + of Blink layout code requesting a fallback font for a character and locale. + </summary> +</histogram> + +<histogram name="Blink.ForcedStyleAndLayout.UpdateTime" units="microseconds" + expires_after="2021-01-10"> +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> + + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Time spent computing layouts due to Javascript value requests. Specifically, + time spent in Blink Document::UpdateStyleAndLayoutIgnorePendingStylesheets. + + This histogram only records metrics on machines with high-resolution clocks. + </summary> +</histogram> + +<histogram name="Blink.HandleInputEvents.UpdateTime" units="microseconds" + expires_after="2021-03-01"> +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> + + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Time spent processing rAF-aligned input during a main frame update. + + This histogram does not record metrics on machines with low-resolution + clocks. + </summary> +</histogram> + +<histogram name="Blink.HitTestDocumentUpdate.UpdateTime" units="microseconds" + expires_after="2021-03-01"> +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> + + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Time spent preparing the document for hit testing during a main frame + update. It does not compute the actual hit test time, rather the style, + layout, compositing, etc time to prepare for the test. + + This histogram does not record metrics on machines with low-resolution + clocks. + </summary> +</histogram> + +<histogram name="Blink.HTMLParsing.ChunkCount" units="chunks" + expires_after="2021-03-31"> + <owner>schenney@chromium.org</owner> + <owner>dom-dev@chromium.org</owner> + <summary> + The number of chunks parsed while loading a page. Each chunk represents a + piece of the HTML content that can be loaded without blocking or yielding. + + This histogram does not record metrics on machines with low-resolution + clocks. + </summary> +</histogram> + +<histogram name="Blink.HTMLParsing.ParsingTimeMax" units="microseconds" + expires_after="2021-03-31"> + <owner>schenney@chromium.org</owner> + <owner>dom-dev@chromium.org</owner> + <summary> + While parsing a page, the maximum time used to parse a single chunk before + being blocked, yielding or completing, in microseconds. + + This histogram does not record metrics on machines with low-resolution + clocks. + </summary> +</histogram> + +<histogram name="Blink.HTMLParsing.ParsingTimeMin" units="microseconds" + expires_after="2021-03-31"> + <owner>schenney@chromium.org</owner> + <owner>dom-dev@chromium.org</owner> + <summary> + While parsing a page, the minimum time used to parse a single chunk before + being blocked, yielding or completing, in microseconds. + + This histogram does not record metrics on machines with low-resolution + clocks. + </summary> +</histogram> + +<histogram name="Blink.HTMLParsing.ParsingTimeTotal" units="microseconds" + expires_after="2021-03-31"> + <owner>schenney@chromium.org</owner> + <owner>dom-dev@chromium.org</owner> + <summary> + While parsing a page, the total amount of time spent in the + HTMLDocumentParser performing parsing, in microseconds. + + This histogram does not record metrics on machines with low-resolution + clocks. + </summary> +</histogram> + +<histogram name="Blink.HTMLParsing.TokensParsedAverage" units="tokens" + expires_after="2021-03-31"> + <owner>schenney@chromium.org</owner> + <owner>dom-dev@chromium.org</owner> + <summary> + While parsing a page, the average number of tokens parsed across all chunks. + </summary> +</histogram> + +<histogram name="Blink.HTMLParsing.TokensParsedMax" units="tokens" + expires_after="2021-03-31"> + <owner>schenney@chromium.org</owner> + <owner>dom-dev@chromium.org</owner> + <summary> + While parsing a page, the maximum number of tokens parsed as a chunk. + </summary> +</histogram> + +<histogram name="Blink.HTMLParsing.TokensParsedMin" units="tokens" + expires_after="2021-03-31"> + <owner>schenney@chromium.org</owner> + <owner>dom-dev@chromium.org</owner> + <summary> + While parsing a page, the minimum number of tokens parsed as a chunk. + </summary> +</histogram> + +<histogram name="Blink.HTMLParsing.YieldedTimeAverage" units="microseconds" + expires_after="2021-03-31"> + <owner>schenney@chromium.org</owner> + <owner>dom-dev@chromium.org</owner> + <summary> + While parsing a page, the average time between parsing of two chunks, in + microseconds. Will not be recorded if only one chunk was parsed. + + This histogram does not record metrics on machines with low-resolution + clocks. + </summary> +</histogram> + +<histogram name="Blink.HTMLParsing.YieldedTimeMax" units="microseconds" + expires_after="2021-03-31"> + <owner>schenney@chromium.org</owner> + <owner>dom-dev@chromium.org</owner> + <summary> + While parsing a page, the maximum time between parsing of two chunks, in + microseconds. Will not be recorded if only one chunk was parsed. + + This histogram does not record metrics on machines with low-resolution + clocks. + </summary> +</histogram> + +<histogram name="Blink.HTMLParsing.YieldedTimeMin" units="microseconds" + expires_after="2021-03-31"> + <owner>schenney@chromium.org</owner> + <owner>dom-dev@chromium.org</owner> + <summary> + While parsing a page, the minimum time between parsing of two chunks, in + microseconds. Will not be recorded if only one chunk was parsed. + + This histogram does not record metrics on machines with low-resolution + clocks. + </summary> +</histogram> + +<histogram name="Blink.ImageDecoders.IncrementalDecodeNeeded" + enum="IncrementalDecodeNeeded" expires_after="2021-01-31"> + <owner>mbarowsky@chromium.org</owner> + <owner>andrescj@chromium.org</owner> + <summary> + For JPEG and WebP images, whether all image data has been received before + decoding begins or whether we are still receiving data and will need to send + partial image data to the decoder and pause/resume decoding until complete. + + It is emitted when the DeferredImageDecoder is about to create the first + DecodingImageGenerator for an image. + </summary> +</histogram> + +<histogram base="true" name="Blink.ImageDecoders.IncrementallyDecodedByteSize" + units="bytes" expires_after="2021-03-07"> + <owner>mbarowsky@chromium.org</owner> + <owner>andrescj@chromium.org</owner> + <summary> + Images for which only partial image data has been received before decoding + begins. This may be because the image is very large or complex (less + compressed) or because of slow network or resource loading. More precisely, + the bucket in which the decode will be counted (IncrementallyDecoded or + InitiallyFullyDecoded) is computed when the DeferredImageDecoder is about to + create the first DecodingImageGenerator for an image and the byte size is + emitted when all data is received. + </summary> +</histogram> + +<histogram base="true" name="Blink.ImageDecoders.InitiallyFullyDecodedByteSize" + units="bytes" expires_after="2021-02-07"> + <owner>mbarowsky@chromium.org</owner> + <owner>andrescj@chromium.org</owner> + <summary> + Images for which all image data has been received before decoding begins. + This may be because the image has a small file size (very compressed), + because of a fast network/resource loading connection, because the data was + preloaded with JavaScript, or because a decode was requested through + JavaScript IMG.decode() API, which must wait for all data to be received per + the specification. More precisely, the bucket in which the decode will be + counted (IncrementallyDecoded or InitiallyFullyDecoded) is computed when the + DeferredImageDecoder is about to create the first DecodingImageGenerator for + an image and the byte size is emitted when all data is received. + </summary> +</histogram> + +<histogram name="Blink.ImageDecoders.Jpeg.Area" units="pixels" + expires_after="2021-02-28"> + <owner>andrescj@chromium.org</owner> + <summary> + Number of pixels in a decoded JPEG image. Recorded after decoding is done by + Blink's JPEG decoder (as opposed to, possibly, a hardware decode + accelerator). Tracking the image area may include degenerate cases, e.g., an + image with area = 10000 and dimensions = 1x10000. However, it is reasonable + to assume these cases are relatively rare and the area of the image can + serve as a proxy of how useful a decode accelerator can be (the larger the + area, the better). + </summary> +</histogram> + +<histogram name="Blink.ImageDecoders.Jpeg.ColorSpace" enum="JpegColorSpace" + expires_after="2021-02-07"> + <owner>andrescj@chromium.org</owner> + <owner>mcasas@chromium.org</owner> + <summary> + JPEG color space of a decoded image as guessed by libjpeg_turbo. Recorded + after decoding is done by Blink's JPEG decoder (as opposed to, possibly, a + hardware decode accelerator). When the color space is YCbCr, the chroma + subsampling is also recorded. + </summary> +</histogram> + +<histogram name="Blink.ImplCompositorCommit.UpdateTime" units="microseconds" + expires_after="2021-03-01"> +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> + + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Time spent updating layers in the compositor thread during a + ProxyMain::BeginMainFrame. It is the actual work time, excluding time spent + waiting for the compositor thread to begin. + + Note: This histogram does not record metrics on machines with low-resolution + clocks. + </summary> +</histogram> + +<histogram name="Blink.IntersectionObservation.UpdateTime" units="microseconds" + expires_after="2021-01-10"> +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> + + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Time spent computing IntersectionObserver observations in the Blink document + lifecycle. + + Note: As of M70, this histogram has stopped recording metrics on machines + with low-resolution clocks. + </summary> +</histogram> + +<histogram name="Blink.KeyboardLock.MethodCalled" enum="KeyboardLockMethods" + expires_after="2020-12-31"> + <owner>joedow@chromium.org</owner> + <owner>garykac@chromium.org</owner> + <summary> + Records each call to the navigator.keyboard{Lock|Unlock} methods. + </summary> +</histogram> + +<histogram name="Blink.Layout.NGRatio.Blocks" units="%" + expires_after="2021-04-15"> + <owner>tkent@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Records LayoutNG ratio for the number of blocks. + + This records a percentage of LayoutNG-based blocks relative to all blocks. + This is recorded once per page on unloading the page. A value takes into + account of all frames in a single page. + + See https://bit.ly/ng-ratio for more details. + </summary> +</histogram> + +<histogram name="Blink.Layout.NGRatio.Calls" units="%" + expires_after="2021-04-15"> + <owner>tkent@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Records LayoutNG ratio for the number of UpdateLayout calls. + + This records a percentage of UpdateLayout() calls for LayoutNG-based objects + relative to all UpdateLayout() calls. This is recorded once per page on + unloading the page. A value takes into account of all frames in a single + page. + + See https://bit.ly/ng-ratio for more details. + </summary> +</histogram> + +<histogram name="Blink.Layout.UpdateTime" units="microseconds" + expires_after="2021-02-28"> +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> + + <owner>schenney@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Time spent updating layout in the Blink document lifecycle. + + This histogram does not record metrics on machines with low-resolution + clocks. + </summary> +</histogram> + +<histogram name="Blink.LazyLoad.CrossOriginFrames.InitialDeferralAction" + enum="LazyLoad.FrameInitialDeferralAction" expires_after="2021-03-07"> + <owner>sclittle@chromium.org</owner> + <summary> + Records the initial lazy loading action taken for a cross-origin iframe. + </summary> +</histogram> + +<histogram + name="Blink.LazyLoad.CrossOriginFrames.LoadStartedAfterBeingDeferred" + enum="NQEEffectiveConnectionType" expires_after="2021-02-21"> + <owner>sclittle@chromium.org</owner> + <summary> + Records the effective connection type whenever a lazily-loaded iframe that + wasn't initially hidden or near the viewport starts loading. The count for + an effective connection type in this histogram can be subtracted from the + 'Deferred' bucket from the + Blink.LazyLoad.CrossOriginFrames.InitialDeferralAction.* histogram for the + corresponding effective connection type to determine the number of iframes + that LazyLoad is avoiding to load altogether. + </summary> +</histogram> + +<histogram name="Blink.LazyLoad.CrossOriginFrames.VisibleAfterBeingDeferred" + enum="NQEEffectiveConnectionType" expires_after="2021-02-21"> + <owner>sclittle@chromium.org</owner> + <summary> + Records the effective connection type whenever a lazily-loaded iframe that + wasn't initially hidden or near the viewport becomes visible. The count for + an effective connection type in this histogram can be subtracted from the + corresponding count in + Blink.LazyLoad.CrossOriginFrames.LoadStartedAfterBeingDeferred to determine + how many iframes were loaded unnecessarily by LazyLoad. + </summary> +</histogram> + +<histogram base="true" name="Blink.MainFrame.AnimateRatio" units="%" + expires_after="2020-11-08"> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The percentage of time between a BeginMainFrame and paint results commit in + Blink that is used for computing Main Frame animations and rAF callbacks. + </summary> +</histogram> + +<histogram base="true" name="Blink.MainFrame.CompositingAssignmentsRatio" + units="%" expires_after="2020-11-08"> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The percentage of time between a BeginMainFrame and paint results commit in + Blink that is used for computing compositing assignments. + </summary> +</histogram> + +<histogram base="true" name="Blink.MainFrame.CompositingCommitRatio" units="%" + expires_after="2020-11-08"> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The percentage of time between a BeginMainFrame and paint results commit in + Blink that is used for committing paint results to the compositor. + </summary> +</histogram> + +<histogram base="true" name="Blink.MainFrame.CompositingInputsRatio" units="%" + expires_after="2020-11-08"> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The percentage of time between a BeginMainFrame and paint results commit in + Blink that is used for computing compositing inputs. + </summary> +</histogram> + +<histogram base="true" name="Blink.MainFrame.CompositingRatio" units="%" + expires_after="2020-11-08"> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The percentage of time between a BeginMainFrame and paint results commit in + Blink that is used for computing Compositing. + </summary> +</histogram> + +<histogram base="true" name="Blink.MainFrame.ForcedStyleAndLayoutRatio" + units="%" expires_after="2021-01-10"> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The time between each paint results commit used in computing forced style + recalc and layouts for this document and ancestors as a percentage of the + Blink local frame lifecycle update time. + </summary> +</histogram> + +<histogram base="true" name="Blink.MainFrame.HandleInputEventsRatio" units="%" + expires_after="2020-11-08"> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The percentage of time between a BeginMainFrame and paint results commit in + Blink that is used for processing rAF aligned input. + </summary> +</histogram> + +<histogram base="true" name="Blink.MainFrame.HitTestDocumentUpdateRatio" + units="%" expires_after="2020-11-08"> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The percentage of time between a BeginMainFrame and paint results commit in + Blink that is used for updating the document in preparation for hit testing. + </summary> +</histogram> + +<histogram base="true" name="Blink.MainFrame.ImplCompositorCommitRatio" + units="%" expires_after="2020-11-08"> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The percentage of time between a BeginMainFrame and paint results commit in + Blink that is used for committing the layer tree to the impl thread, + excluding time spend waiting for the CC thread to begin processing. + </summary> +</histogram> + +<histogram base="true" name="Blink.MainFrame.IntersectionObservationRatio" + units="%" expires_after="2020-11-08"> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The percentage of time between a BeginMainFrame and paint results commit in + Blink that is used for computing Intersection Observations. + </summary> +</histogram> + +<histogram base="true" name="Blink.MainFrame.LayoutRatio" units="%" + expires_after="2021-01-10"> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The percentage of time between a BeginMainFrame and paint results commit in + Blink that is used for computing Layout. + </summary> +</histogram> + +<histogram base="true" name="Blink.MainFrame.PaintRatio" units="%" + expires_after="2021-01-10"> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The percentage of time between a BeginMainFrame and paint results commit in + Blink that is used for computing Paint. + </summary> +</histogram> + +<histogram base="true" name="Blink.MainFrame.PrePaintRatio" units="%" + expires_after="2020-11-08"> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The percentage of time between a BeginMainFrame and paint results commit in + Blink that is used for computing PrePaint. + </summary> +</histogram> + +<histogram base="true" name="Blink.MainFrame.ScrollingCoordinatorRatio" + units="%" expires_after="2020-11-08"> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The percentage of the total BeginMainFrame execution time used for the + ScrollingCoordinator update in Blink, for each frame that we record. + Recorded in ScrollingCoordinator::UpdateAfterPaint. + </summary> +</histogram> + +<histogram base="true" name="Blink.MainFrame.StyleRatio" units="%" + expires_after="2020-11-08"> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The percentage of time between a BeginMainFrame and paint results commit in + Blink that is used for computing Style. + </summary> +</histogram> + +<histogram base="true" name="Blink.MainFrame.UpdateLayersRatio" units="%" + expires_after="2021-01-10"> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The percentage of time between a BeginMainFrame and paint results commit in + Blink that is spent in LayerTreeHost::UpdateLayers. + </summary> +</histogram> + +<histogram name="Blink.MainFrame.UpdateTime" units="microseconds" + expires_after="2021-02-14"> +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> + +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> + +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> + + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Time between a BeginMainFrame and paint results commit in Blink. + + This histogram will not record metrics on machines with low-resolution + clocks. + </summary> +</histogram> + +<histogram name="Blink.MainFrame.WaitForCommitRatio" units="%" + expires_after="2020-11-08"> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The percentage of time between a BeginMainFrame and paint results commit in + Blink that is spent waiting for the CC thread to begin processing. + </summary> +</histogram> + +<histogram name="Blink.MemoryCache.RevalidationPolicy" + enum="RevalidationPolicy" expires_after="2021-04-21"> + <owner>hiroshige@chromium.org</owner> + <owner>loading-dev@chromium.org</owner> + <summary> + RevalidationPolicy used for non-preloading requests for each resource type. + https://crbug.com/579496 + </summary> +</histogram> + +<histogram name="Blink.MemoryCache.RevalidationPolicy.AsyncScript" + enum="RevalidationPolicy" expires_after="2021-04-21"> + <owner>hiroshige@chromium.org</owner> + <owner>lizeb@chromium.org</owner> + <owner>loading-dev@chromium.org</owner> + <summary> + RevalidationPolicy used for non-preloading requests of async and defer + scripts. https://crbug.com/1043679 + </summary> +</histogram> + +<histogram name="Blink.MemoryCache.RevalidationPolicy.Dead" + enum="RevalidationPolicy" expires_after="2021-04-21"> + <owner>hiroshige@chromium.org</owner> + <owner>loading-dev@chromium.org</owner> + <summary> + RevalidationPolicy used for requests that hit Resource only referenced from + MemoryCache for each resource type. https://crbug.com/579496 Requests + counted by this are also counted by Blink.MemoryCache.RevalidationPolicy or + Blink.MemoryCache.RevalidationPolicy.Preload. + </summary> +</histogram> + +<histogram name="Blink.MemoryCache.RevalidationPolicy.Preload" + enum="RevalidationPolicy" expires_after="2021-04-21"> + <owner>hiroshige@chromium.org</owner> + <owner>loading-dev@chromium.org</owner> + <summary> + RevalidationPolicy used for preloading requests for each resource type. + https://crbug.com/579496 + </summary> +</histogram> + +<histogram name="Blink.OffscreenCanvas.ContextType" enum="CanvasContextType" + expires_after="2021-01-31"> + <owner>aaronhk@chromium.org</owner> + <owner>fserb@chromium.org</owner> + <summary> + Records the context type names used to create offscreen canvas rendering + contexts. Recorded in OffscreenCanvas::GetCanvasRenderingContext + </summary> +</histogram> + +<histogram name="Blink.OffscreenCanvas.NewOffscreenCanvas" enum="Boolean" + expires_after="2021-01-31"> + <owner>aaronhk@chromium.org</owner> + <owner>fserb@chromium.org</owner> + <summary> + Records the creation of a new offscreen canvas in OffscreenCanvas::Create. + </summary> +</histogram> + +<histogram name="Blink.OffscreenCanvas.SqrtNumberOfPixels" units="sqrt(pixels)" + expires_after="2021-01-31"> + <owner>aaronhk@chromium.org</owner> + <owner>fserb@chromium.org</owner> + <summary> + Stores the square root of the number of pixels in a new or resized offscreen + canvas. Emitted from CanvasRenderingContextHost::RecordCanvasSizeToUMA. + </summary> +</histogram> + +<histogram name="Blink.OffscreenCanvas.TransferControlToOffscreen" + enum="Boolean" expires_after="2021-01-31"> + <owner>aaronhk@chromium.org</owner> + <owner>fserb@chromium.org</owner> + <summary> + Records a call to transfer a canvas offscreen. True indicates a successful + transfer, false for a failure. + </summary> +</histogram> + +<histogram name="Blink.OffscreenCanvas.Transferred" enum="Boolean" + expires_after="2021-01-31"> + <owner>aaronhk@chromium.org</owner> + <owner>fserb@chromium.org</owner> + <summary> + Records when an offscreen canvas has been transferred from the main thread + to a worker. + </summary> +</histogram> + +<histogram name="Blink.Paint.CachedItemPercentage" units="%" + expires_after="2021-03-01"> + <owner>wangxianzhu@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Percentage of cached display items among all display items. Higher value + means higher performance beause of less paint invalidation. Recorded when we + finish updating paint in the Blink document lifecycle. + </summary> +</histogram> + +<histogram name="Blink.Paint.CachedSubsequencePercentage" units="%" + expires_after="2021-03-01"> + <owner>wangxianzhu@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Percentage of cached subsequences of display items among all subsequences. + Higher value means higher performance beause of less subsequence + invalidation. Recorded when we finish updating paint in the Blink document + lifecycle. + </summary> +</histogram> + +<histogram name="Blink.Paint.UpdateTime" units="microseconds" + expires_after="2021-02-14"> +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> + +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> + +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> + + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Time spent updating paint in the Blink document lifecycle. + + Note: As of M70, this histogram has stopped recording metrics on machines + with low-resolution clocks. + </summary> +</histogram> + +<histogram name="Blink.PrePaint.UpdateTime" units="microseconds" + expires_after="2021-02-21"> +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> + +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> + +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> + + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Time spent updating paint properties and paint invalidation in the Blink + document lifecycle. Available when SlimmingPaintInvalidation or + SlimmingPaintV2 is enabled. + + Note: As of M70, this histogram has stopped recording metrics on machines + with low-resolution clocks. + </summary> +</histogram> + +<histogram name="Blink.Render.DisplayLockActivationReason" + enum="DisplayLockActivationReason" expires_after="2020-12-31"> + <owner>vmpstr@chromium.org</owner> + <owner>chrishtr@chromium.org</owner> + <summary>This indicates the reason for display-locking activation</summary> +</histogram> + +<histogram name="Blink.ResourceFetcher.StaleWhileRevalidateDuration" units="ms" + expires_after="2020-04-05"> + <owner>dtapuska@chromium.org</owner> + <owner>kenjibaheux@google.com</owner> + <summary>Duration of completed stale revalidation attempts.</summary> +</histogram> + +<histogram name="Blink.ResourceLoadScheduler.TrafficBytes.KBPerFrameStatus" + enum="RendererSchedulerFrameType2" expires_after="2020-02-02"> + <owner>toyoshim@chromium.org</owner> + <owner>altimin@chromium.org</owner> + <summary> + Total encoded size of resources associated with frames of a particular type. + Recorded when a fetch has been completed. + + Each bucket of the histogram cointains the total size of all requests + associated with frames with a particular frame status in kilobytes. + </summary> +</histogram> + +<histogram name="Blink.ScanPendingActivityDuration" units="ms" + expires_after="M85"> + <owner>haraken@chromium.org</owner> + <summary> + Duration of time taken to scan pending activities of all V8 wrappers in a + worker thread. + </summary> +</histogram> + +<histogram name="Blink.Script.AsyncScriptCount" units="count" + expires_after="2021-05-25"> + <owner>dom@chromium.org</owner> + <owner>chrome-loading@google.com</owner> + <summary> + The total number of async scripts associated with a document at the time + parsing has finished. + </summary> +</histogram> + +<histogram name="Blink.Script.ForceDeferredScripts.Mainframe" units="count" + expires_after="2021-02-28"> + <owner>dougarnett@chromium.org</owner> + <owner>hiroshige@chromium.org</owner> + <summary> + Number of synchronous scripts that were deferred for a mainframe by the + ForceDeferScriptIntervention. This includes both inline scripts and external + scripts that had their execution deferred until after parsing completes. + Recorded when there is at least one force deferred script for the frame. + </summary> +</histogram> + +<histogram name="Blink.Script.ForceDeferredScripts.Mainframe.External" + units="count" expires_after="2021-02-28"> + <owner>dougarnett@chromium.org</owner> + <owner>hiroshige@chromium.org</owner> + <summary> + Number of external synchronous scripts that were deferred for a mainframe by + the ForceDeferScriptIntervention. Recorded when there is at least one force + deferred script for the frame (not necessarily external). + </summary> +</histogram> + +<histogram name="Blink.Script.ForceDeferredScripts.Subframe" units="count" + expires_after="2021-02-28"> + <owner>dougarnett@chromium.org</owner> + <owner>hiroshige@chromium.org</owner> + <summary> + Number of synchronous scripts that were deferred for a subframe by the + ForceDeferScriptIntervention. This includes both inline scripts and external + scripts that had their execution deferred until after parsing completes. + Recorded when there is at least one force deferred script for the frame. + </summary> +</histogram> + +<histogram name="Blink.Script.ForceDeferredScripts.Subframe.External" + units="count" expires_after="2021-02-28"> + <owner>dougarnett@chromium.org</owner> + <owner>hiroshige@chromium.org</owner> + <summary> + Number of external synchronous scripts that were deferred for a subframe by + the ForceDeferScriptIntervention. Recorded when there is at least one force + deferred script for the frame (not necessarily external). + </summary> +</histogram> + +<histogram name="Blink.Script.SchedulingType" enum="ScriptSchedulingType" + expires_after="2021-02-28"> + <owner>kouhei@chromium.org</owner> + <owner>hiroshige@chromium.org</owner> + <summary> + Number of script elements for each scheduling type, recorded for each + successful #prepare-a-script. + </summary> +</histogram> + +<histogram name="Blink.ScrollingCoordinator.UpdateTime" units="microseconds" + expires_after="2021-01-10"> +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> + +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> + +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> + + <owner>pdr@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + The time it took to update scrolling coordinator data (scroll gesture + regions, touch event rects, and main thread scrolling reasons). These values + are calculated during the main-thread blink lifecycle. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.Sms.Receive.DestroyedReason" + enum="SmsReceiverDestroyedReason" expires_after="M88"> + <owner>goto@chromium.org</owner> + <owner>reillyg@chromium.org</owner> + <owner>ayui@chromium.org</owner> + <summary> + Records the reason an SMS Service is destroyed before request completion. + </summary> +</histogram> + +<histogram name="Blink.Sms.Receive.Infobar" enum="SMSReceiverInfobarAction" + expires_after="M88"> + <owner>goto@chromium.org</owner> + <owner>reillyg@chromium.org</owner> + <owner>ayui@chromium.org</owner> + <summary> + Records how many times the infobar was called and how many times the infobar + replaced a keyboard. + </summary> +</histogram> + +<histogram name="Blink.Sms.Receive.Outcome" enum="SMSReceiverOutcome" + expires_after="M88"> + <owner>goto@chromium.org</owner> + <owner>reillyg@chromium.org</owner> + <owner>ayui@chromium.org</owner> + <summary>Records the result of a call to the SmsReceiver API.</summary> +</histogram> + +<histogram name="Blink.Sms.Receive.TimeCancel" units="ms" expires_after="M88"> + <owner>goto@chromium.org</owner> + <owner>reillyg@chromium.org</owner> + <owner>ayui@chromium.org</owner> + <summary> + Records the duration from when the API is called to when the user presses + the cancel button to abort SMS retrieval. + </summary> +</histogram> + +<histogram name="Blink.Sms.Receive.TimeCancelOnKeyboardDismissal" units="ms" + expires_after="M88"> + <owner>goto@chromium.org</owner> + <owner>reillyg@chromium.org</owner> + <owner>juncai@chromium.org</owner> + <owner>ayui@chromium.org</owner> + <summary> + Records the duration from when the keyboard was replaced with an infobar + until when the user clicked the cancel button. + </summary> +</histogram> + +<histogram name="Blink.Sms.Receive.TimeCancelOnSuccess" units="ms" + expires_after="M88"> + <owner>goto@chromium.org</owner> + <owner>reillyg@chromium.org</owner> + <owner>ayui@chromium.org</owner> + <summary> + Records the time from when a successful SMS was retrieved to when the user + presses the Cancel button. + </summary> +</histogram> + +<histogram name="Blink.Sms.Receive.TimeContinueOnSuccess" units="ms" + expires_after="M88"> + <owner>goto@chromium.org</owner> + <owner>reillyg@chromium.org</owner> + <owner>ayui@chromium.org</owner> + <summary> + Records the time from when a successful SMS was retrieved to when the user + presses the Continue button. + </summary> +</histogram> + +<histogram name="Blink.Sms.Receive.TimeSmsReceive" units="ms" + expires_after="M88"> + <owner>goto@chromium.org</owner> + <owner>reillyg@chromium.org</owner> + <owner>ayui@chromium.org</owner> + <summary> + Records the duration from when the API is called to when an SMS has been + successfully received. + </summary> +</histogram> + +<histogram name="Blink.Sms.Receive.TimeSuccess" units="ms" expires_after="M88"> + <owner>goto@chromium.org</owner> + <owner>reillyg@chromium.org</owner> + <owner>ayui@chromium.org</owner> + <summary> + Records the duration from when the API is called to when the user + successfully receives the SMS and presses continue to pass the incoming SMS + to the site and proceed with the SMS verification flow. + </summary> +</histogram> + +<histogram name="Blink.SpatialNavigation.Advance" units="microseconds" + expires_after="M85"> + <owner>bokan@chromium.org</owner> + <summary> + Time it takes to find best candidate element, set focus or scroll for given + directional input. + </summary> +</histogram> + +<histogram name="Blink.Style.UpdateTime" units="microseconds" + expires_after="2021-01-10"> +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> + +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> + +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> + + <owner>schenney@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Time spent updating style in the Blink document lifecycle. + + This histogram does not record metrics on machines with low-resolution + clocks. + </summary> +</histogram> + +<histogram name="Blink.ThreadedIconLoader.LoadTime" units="ms" + expires_after="2020-12-01"> + <owner>nator@chromium.org</owner> + <owner>rayankans@chromium.org</owner> + <summary> + The number of milliseconds it took to finish successfully loading an icon + using ThreadedIconLoader. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.AnimatedCSSProperties" + enum="MappedCSSProperties" expires_after="never"> +<!-- expires-never: used by Chrome Platform Status dashboard --> + +<!-- https://www.chromestatus.com/metrics/css/animated --> + + <owner>chasej@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Records usage of animated CSS properties used on a page, either statically + or dynamically, from the time the page is initialised to when it is closed + or navigated away from. Each property is counted at most once per page per + view via PageLoadMetricsObserver. + </summary> + <details> + This histogram counts CSS properties only when they are animated by a CSS + Animation. Refer to Blink.UseCounter.CSSProperties for more details. + + As of M69, Blink.UseCounter.AnimatedCSSProperties is moved from the blink + side to the browser side. + </details> +</histogram> + +<histogram name="Blink.UseCounter.CSSProperties" enum="MappedCSSProperties" + expires_after="never"> +<!-- expires-never: used by Chrome Platform Status dashboard --> + +<!-- https://www.chromestatus.com/metrics/css/animated --> + + <owner>chasej@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Records usage of CSS properties used on a page, either statically or + dynamically, from the time the page is initialised to when it is closed or + navigated away from. Each property is counted at most once per page per view + via PageLoadMetricsObserver. + </summary> + <details> + The first time a CSS property is parsed on a page, the histogram is updated + to increment the counter. Each histogram bucket corresponds to a CSS + property (eg. width, border-radius). The exception is the 'Total pages + measured' bucket - this counts the number of pages that CSS properties were + counted on. When a page navigation occurs the page count bucket is + incremented and tracking of the set of which properties have been seen is + reset. + + These numbers give the percentage of pages that use a CSS property. For + example, if the 'border-radius' histogram bucket has a count of 250, and the + page count bucket (i.e. bucket number 1) has a count of 1000 - this means + that 1000 pages were recorded, and border-radius was used on 25% of those + pages. + + Note that CSS properties used inside of SVG images are tracked separately in + the Blink.UseCounter.SVGImage.CSSProperties histogram. + + As of M57 this histogram supercedes WebCore.FeatureObserver.CSSProperties. + + As of M69, Blink.UseCounter.AnimatedCSSProperties is moved from the blink + side to the browser side. + </details> +</histogram> + +<histogram name="Blink.UseCounter.DocumentPolicy.Enforced" + enum="DocumentPolicyFeature" expires_after="2021-03-31"> + <owner>iclelland@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Counts enforced DocumentPolicyViolationReport generated in a document. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.DocumentPolicy.Header" + enum="DocumentPolicyFeature" expires_after="2021-03-31"> + <owner>iclelland@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Counts the use of a specific document policy via the + "Document-Policy" HTTP response header. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.DocumentPolicy.PolicyAttribute" + enum="DocumentPolicyFeature" expires_after="2021-03-31"> + <owner>iclelland@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Counts the use of a specific document policy via the "policy" + attribute. Each policy is counted only once per page load. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.DocumentPolicy.ReportOnly" + enum="DocumentPolicyFeature" expires_after="2021-03-31"> + <owner>iclelland@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Counts report only DocumentPolicyViolationReport generated in a document. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.Extensions.Features" enum="FeatureObserver" + expires_after="2021-01-31"> + <owner>chasej@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Count of how many page loads use various features for pages with a + chrome-extension:// URL only. The PageVisits bucket is incremented for each + page load, and the other buckets incremented at most once per PageVisit via + the WebCore::UserCounter class. + </summary> + <details> + Warning: This histogram represents pre-renderer metrics and so is flawed + under OOPIF. + </details> +</histogram> + +<histogram name="Blink.UseCounter.FeaturePolicy.Allow" + enum="FeaturePolicyFeature" expires_after="2020-10-31"> + <owner>iclelland@chromium.org</owner> + <summary> + Counts the use of a specific feature policy via the "allow" + attribute. Each policy is counted only once per page load. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.FeaturePolicy.AttributeAllowlistType" + enum="FeaturePolicyAllowlistType" expires_after="2021-01-03"> + <owner>iclelland@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Logs the type of allowlist used in a Feature-Policy "allow" + attribute; whether it is empty, or contains only a single keyword, is + composed only of keywords, or contains explicit tuple origins. Recorded at + the point that the attribute is parsed. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.FeaturePolicy.Header" + enum="FeaturePolicyFeature" expires_after="2021-01-10"> + <owner>iclelland@chromium.org</owner> + <summary> + Counts the use of a specific feature policy via the + "Feature-Policy" HTTP response header. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.FeaturePolicy.HeaderAllowlistType" + enum="FeaturePolicyAllowlistType" expires_after="2021-01-03"> + <owner>iclelland@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Logs the type of allowlist used in a Feature-Policy header; whether it is + empty, or contains only a single keyword, is composed only of keywords, or + contains explicit tuple origins. Recorded at the point that the header is + parsed. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.FeaturePolicy.PotentialViolation" + enum="FeaturePolicyFeature" expires_after="2021-01-03"> + <owner>iclelland@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Tracks potential violations of feature policies in a document. This is + emitted once all the conditions for violating the feature policy are met in + the document; regardless of whether or not the feature has been disabled in + the document; in other words, it still records a potential violation even if + there won't be a violation report generated. Note that this is recorded once + per document. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.FeaturePolicy.ProposalWouldChangeBehaviour" + enum="FeaturePolicyFeature" expires_after="2021-03-07"> + <owner>iclelland@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Counts when the result of calling IsFeatureEnabled for an Execution Context + would be different under the proposal in https://crbug.com/937171. Each + feature is counted only once per execution context. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.Features" enum="FeatureObserver" + expires_after="never"> +<!-- expires-never: used by Chrome Platform Status dashboard --> + +<!-- https://www.chromestatus.com/metrics/css/animated --> + + <owner>chasej@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Count of how many page loads use various features across all frames in a + page. The PageVisits bucket is incremented for each page load, and the other + buckets incremented at most once per PageVisit via blink::UseCounter and + UseCounterPageLoadMetricsObserver. + </summary> + <details> + Note that features used inside of SVG images are tracked separately in the + Blink.UseCounter.SVGImage.Features histogram. Features used inside of + extension pages are tracked separately in the + Blink.UseCounter.Extensions.Features histogram. + </details> +</histogram> + +<histogram name="Blink.UseCounter.File.Features" enum="FeatureObserver" + expires_after="2021-01-10"> + <owner>yhirano@chromium.org</owner> + <owner>mkwst@chromium.org</owner> + <summary> + Count of how many `file:` URL page loads use various features across all + frames in the page. This histogram has the same semantics as + "Blink.UseCounter.Features", but applies only to `file:` URLs + (which that histogram does not include). + </summary> + <details> + Refer to "Blink.UseCounter.Features" for more details. + </details> +</histogram> + +<histogram name="Blink.UseCounter.MainFrame.Features" enum="FeatureObserver" + expires_after="never"> +<!-- expires-never: Companion to Blink.UseCounter.Features, which is also expires-never. --> + + <owner>chasej@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Count of how many page loads use various features across in the main frame + of a page. The PageVisits bucket is incremented at the beginning of each + page load and the other buckets incremented at most once per PageVisit via + blink::UseCounter and UseCounterPageLoadMetricsObserver throughout the + lifetime of a page load metrics observer. + </summary> + <details> + This histogram counts usage of web features in main frame only. Refer to + Blink.UseCounter.Features for more details. + </details> +</histogram> + +<histogram name="Blink.VisibleBeforeLoaded.LazyLoadEligibleFrames.BelowTheFold" + enum="NQEEffectiveConnectionType" expires_after="2021-02-21"> + <owner>sclittle@chromium.org</owner> + <summary> + Records the effective connection type whenever a lazyload-eligible (i.e. + cross-origin and non-hidden) iframe that was initially below the fold + becomes visible before it finishes loading. + </summary> +</histogram> + +<histogram name="Blink.VisibleBeforeLoaded.LazyLoadImages.AboveTheFold" + enum="NQEEffectiveConnectionType" expires_after="2021-01-17"> + <owner>sclittle@chromium.org</owner> + <owner>rajendrant@chromium.org</owner> + <summary> + Records the effective connection type whenever a lazily loaded image that + was initially above the fold becomes visible before it finishes loading. + </summary> +</histogram> + +<histogram name="Blink.VisibleBeforeLoaded.LazyLoadImages.BelowTheFold" + enum="NQEEffectiveConnectionType" expires_after="2021-02-21"> + <owner>sclittle@chromium.org</owner> + <owner>rajendrant@chromium.org</owner> + <summary> + Records the effective connection type whenever a lazily loaded image that + was initially below the fold becomes visible before it finishes loading. + </summary> +</histogram> + +<histogram name="Blink.VisibleLoadTime.LazyLoadEligibleFrames.AboveTheFold" + units="ms" expires_after="2021-02-21"> + <owner>sclittle@chromium.org</owner> + <summary> + Milliseconds spent waiting for an above the fold iframe to load. Only fires + for iframes that would be eligible for lazy loading, i.e. cross-origin and + non-hidden. + </summary> +</histogram> + +<histogram name="Blink.VisibleLoadTime.LazyLoadEligibleFrames.BelowTheFold" + units="ms" expires_after="2021-02-21"> + <owner>sclittle@chromium.org</owner> + <summary> + Milliseconds spent waiting for a below the fold iframe to load. Only fires + for iframes that would be eligible for lazy loading, i.e. cross-origin and + non-hidden. + </summary> +</histogram> + +<histogram base="true" name="Blink.VisibleLoadTime.LazyLoadImages.AboveTheFold" + units="ms" expires_after="2021-02-21"> + <owner>rajendrant@chromium.org</owner> + <owner>bengr@chromium.org</owner> + <summary> + Milliseconds spent waiting for an above the fold image element to load. 0ms + is recorded if the image is already loaded by the time user scrolls to it. + EffectiveConnectionType (2G, 3G, etc) is recorded as suffix to this + histogram. + </summary> +</histogram> + +<histogram base="true" name="Blink.VisibleLoadTime.LazyLoadImages.BelowTheFold" + units="ms" expires_after="2021-02-21"> + <owner>rajendrant@chromium.org</owner> + <owner>bengr@chromium.org</owner> + <summary> + Milliseconds spent waiting for a below the fold image element to load. 0ms + is recorded if the image is already loaded by the time user scrolls to it. + EffectiveConnectionType (2G, 3G, etc) is recorded as suffix to this + histogram. + </summary> +</histogram> + +<histogram name="Blink.WaitForCommit.UpdateTime" units="microseconds" + expires_after="2021-03-01"> +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> + + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Time spent waiting for the compositor thread to begin processing a layer + update inside ProxyMain::BeginMainFrame. + + Note: This histogram does not record metrics on machines with low-resolution + clocks. + </summary> +</histogram> + +<histogram name="Blink.WindowOpen.FromAdState" enum="WindowOpenFromAdState" + expires_after="2019-08-30"> + <owner>yaoxia@chromium.org</owner> + <owner>csharrison@chromium.org</owner> + <summary> + Indicates whether the page called window.open() with an ad script in the + stack and/or from an ad subframe. Recorded whenever window.open() is called + when AdTagging is enabled. + </summary> +</histogram> + +<histogram name="BlinkGC.CollectionRate" units="%" expires_after="M84"> + <owner>haraken@chromium.org</owner> + <summary> + The percentage of objects that have been collected by a Blink GC. 0 is + passed if there were no objects when a Blink GC started. + </summary> +</histogram> + +<histogram name="BlinkGC.GCReason" enum="GCReason" expires_after="M84"> + <owner>haraken@chromium.org</owner> + <summary>A type of Blink GC.</summary> +</histogram> + +<histogram name="BlinkGC.LowMemoryPageNavigationGC.Reduction" units="MB" + expires_after="M77"> + <owner>keishi@chromium.org</owner> + <summary> + Amount of memory reduced with the GC triggered on page navigation while the + device is in a low memory state. Only implemented on low end Android devices + at the moment. Memory usage is approximated by summing the memory usage of + the following allocators: BlinkGC, PartitionAlloc, and V8 main thread + isolate heap. + </summary> +</histogram> + +<histogram name="BlinkGC.MainThreadMarkingThroughput" units="MB/s" + expires_after="M88"> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Marking throughput considering all durations of all marking phases on the + main thread and marked bytes within one Blink garbage collection cycle. + Reported once per garbage collection cycle at the end. Only reported for + platforms supporting high resolution clocks and when more than 1MB of live + objects have been found. + </summary> +</histogram> + +<histogram name="BlinkGC.ObjectSizeAfterGC" units="KB" expires_after="M88"> + <owner>haraken@chromium.org</owner> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + The size of allocated objects just after Blink GC is triggered. + </summary> +</histogram> + +<histogram name="BlinkGC.ObjectSizeBeforeGC" units="KB" expires_after="M88"> + <owner>haraken@chromium.org</owner> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + The size of allocated objects just before Blink GC is triggered. + </summary> +</histogram> + +<histogram name="BlinkGC.ObjectSizeFreedByHeapCompaction" units="KB" + expires_after="M81"> + <owner>haraken@chromium.org</owner> + <summary> + The total size of objects freed by BlinkGC's heap compaction. This is + recorded once following each compaction. + </summary> +</histogram> + +<histogram name="BlinkGC.TimeForAtomicPhase" units="ms" expires_after="M88"> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Duration of overall garbage collection time when the garbage collector is + invoked for finishing a garbage collection. This includes finishing up any + already running garbage collection operation. Recorded at the end of each + garbage collection. + </summary> +</histogram> + +<histogram name="BlinkGC.TimeForAtomicPhaseMarking" units="ms" + expires_after="M88"> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Duration of finishing marking the transitive closure of objects during the + final Blink garbage collection pause. Recorded at the end of each garbage + collection. + </summary> +</histogram> + +<histogram name="BlinkGC.TimeForCompleteSweep" units="ms" expires_after="M88"> + <owner>bikineev@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Duration of the pause that completes sweeping. Reported once per garbage + collection at the end. + </summary> +</histogram> + +<histogram name="BlinkGC.TimeForGCCycle" units="ms" expires_after="M88"> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Sum of all durations of individual phases within one Blink garbage + collection. Reported once per garbage collection at the end. + </summary> +</histogram> + +<histogram name="BlinkGC.TimeForGlobalWeakProcessing" units="ms" + expires_after="M88"> + <owner>haraken@chromium.org</owner> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Duration of time taken to run global weak processing of Blink GC. + </summary> +</histogram> + +<histogram name="BlinkGC.TimeForHeapCompaction" units="ms" expires_after="M88"> + <owner>haraken@chromium.org</owner> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Duration of wall time taken to run BlinkGC's heap compaction. + </summary> +</histogram> + +<histogram name="BlinkGC.TimeForIncrementalMarking" units="ms" + expires_after="M88"> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Sum of all durations of incremental marking phases within one Blink garbage + collection cycle. Reported once per garbage collection at the end. + </summary> +</histogram> + +<histogram name="BlinkGC.TimeForInvokingPreFinalizers" units="ms" + expires_after="M88"> + <owner>haraken@chromium.org</owner> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Duration of time taken to run ThreadState::invokePreFinalizers(). + </summary> +</histogram> + +<histogram name="BlinkGC.TimeForMarking" units="ms" expires_after="M88"> + <owner>omerkatz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Accumulated sum of all durations of individual phases contributing to + marking (main thread and background helpers) within one Blink garbage + collection. Reported once per garbage collection at the end. + </summary> +</histogram> + +<histogram name="BlinkGC.TimeForMarkingRoots" units="ms" expires_after="M88"> + <owner>omerkatz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Duration of marking roots within one Blink garbage collection. Reported once + per garbage collection at the end. + </summary> +</histogram> + +<histogram name="BlinkGC.TimeForNestedInV8" units="ms" expires_after="M88"> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Duration of the time of Blink garbage collection spent nested in a V8 + garbage collection. Reported once per garbage collection at the end. + </summary> +</histogram> + +<histogram name="BlinkGC.TimeForSweepingBackground" units="ms" + expires_after="M88"> + <owner>bikineev@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Sum of all durations of individual phases contributing to sweeping on + background helpers within one Blink garbage collection. Reported once per + garbage collection at the end. + </summary> +</histogram> + +<histogram name="BlinkGC.TimeForSweepingForeground" units="ms" + expires_after="M88"> + <owner>bikineev@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Sum of all durations of individual phases contributing to sweeping on the + main thread within one Blink garbage collection. Reported once per garbage + collection at the end. + </summary> +</histogram> + +<histogram name="BlinkGC.TimeForSweepingSum" units="ms" expires_after="M88"> + <owner>bikineev@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Accumulated sum of all durations of individual phases contributing to + sweeping (main thread and background helpers) within one Blink garbage + collection. Reported once per garbage collection at the end. + </summary> +</histogram> + +<histogram name="BlinkGC.TimeForTotalCollectGarbage" units="ms" + expires_after="M84"> + <owner>haraken@chromium.org</owner> + <owner>hpayer@chromium.org</owner> + <summary> + Duration of total Blink garbage collection time when the garbage collector + is invoked for finishing a garbage collection. This includes finishing up + any already running garbage collection operation as well as potentially + performing a follow-up collection synchronously. Recorded each time after + invoking the Blink garbage collector. + </summary> +</histogram> + +<histogram name="BlinkGC.TotalAllocatedSpace" units="KB" expires_after="M88"> + <owner>haraken@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + The total size of allocated space in OS when a Blink GC is triggered. + </summary> +</histogram> + +<histogram name="BlinkGC.TotalObjectSpace" units="KB" expires_after="M88"> + <owner>haraken@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + The total size of object space in all threads when a Blink GC is triggered. + </summary> +</histogram> + +</histograms> + +</histogram-configuration>
diff --git a/tools/metrics/histograms/histograms_xml/obsolete_histograms.xml b/tools/metrics/histograms/histograms_xml/obsolete_histograms.xml index bb2ef8a..7e3a504 100644 --- a/tools/metrics/histograms/histograms_xml/obsolete_histograms.xml +++ b/tools/metrics/histograms/histograms_xml/obsolete_histograms.xml
@@ -1,12 +1,12 @@ <!-- -Copyright 2013 The Chromium Authors. All rights reserved. +Copyright 2020 The Chromium Authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> <!-- -This file is used to store a list of obsolete Chrome histograms along with a detailed -description for each histogram. +This file is used to generate a comprehensive list of obsolete histograms along +with a detailed description for each histogram. For best practices on writing histogram descriptions, see https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md @@ -24,6 +24,1567 @@ <histograms> +<histogram name="Blink.Binding.CreateV8ContextForMainFrame" + units="microseconds" expires_after="2019-04-16"> + <obsolete> + Removed as of 04/2019 with the removal of field trial experiment settings. + </obsolete> + <owner>peria@chromium.org</owner> + <summary> + Time spent to create a v8::Context instance during a page loading in the + main-frame window. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.Binding.CreateV8ContextForNonMainFrame" + units="microseconds" expires_after="2019-04-16"> + <obsolete> + Removed as of 04/2019 with the removal of field trial experiment settings. + </obsolete> + <owner>peria@chromium.org</owner> + <summary> + Time spent to create a v8::Context instance during a page loading in a + non-main-frame window, e.g. iframe. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.Binding.InitializeMainLocalWindowProxy" + units="microseconds" expires_after="M80"> + <obsolete> + Removed as of 04/2019 with the removal of field trial experiment settings. + </obsolete> + <owner>peria@chromium.org</owner> + <summary> + Time spent initializing LocalWindowProxy during a page loading in main + windows. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.Binding.InitializeMainRemoteWindowProxy" + units="microseconds" expires_after="2019-04-16"> + <obsolete> + Removed as of 04/2019 with the removal of field trial experiment settings. + </obsolete> + <owner>peria@chromium.org</owner> + <summary> + Time spent initializing RemoteWindowProxy during a page loading in main + frame of OOPIF. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.Binding.InitializeMainWindowProxy" units="microseconds" + expires_after="2017-03-26"> + <obsolete> + Removed as of 03/2017. This metric was split into two metrics depending if + it figures time for local window proxies or remote ones. + </obsolete> + <owner>peria@chromium.org</owner> + <summary> + Time spent initializing WindowProxy during a page loading in main windows. + </summary> +</histogram> + +<histogram name="Blink.Binding.InitializeNonMainLocalWindowProxy" + units="microseconds" expires_after="2019-04-16"> + <obsolete> + Removed as of 04/2019 with the removal of field trial experiment settings. + </obsolete> + <owner>peria@chromium.org</owner> + <summary> + Time spent initializing LocalWindowProxy during a page loading in non-main + windows, e.g. iframe. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.Binding.InitializeNonMainRemoteWindowProxy" + units="microseconds" expires_after="2019-04-16"> + <obsolete> + Removed as of 04/2019 with the removal of field trial experiment settings. + </obsolete> + <owner>peria@chromium.org</owner> + <summary> + Time spent initializing RemoteWindowProxy during a page loading in OOPIF. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.Binding.InitializeNonMainWindowProxy" + units="microseconds" expires_after="2017-03-26"> + <obsolete> + Removed as of 03/2017. This metric was split into two metrics depending if + it figures time for local window proxies or remote ones. + </obsolete> + <owner>peria@chromium.org</owner> + <summary> + Time spent initializing WindowProxy during a page loading in non-main + windows, e.g. iframe. + </summary> +</histogram> + +<histogram name="Blink.Binding.InitializeWindowProxy" units="microseconds" + expires_after="2016-11-01"> + <obsolete> + Removed as of 10/2016. This metric was split into two metrics depending if + it figures time for main windows. + </obsolete> + <owner>peria@chromium.org</owner> + <summary>Time spent initializing WindowProxy during a page loading.</summary> +</histogram> + +<histogram name="Blink.BudgetAPI.QueryBudget" units="budget" + expires_after="2018-08-20"> + <obsolete> + Removed as of 08/2018 (M70) with the removal of the Budget API. + </obsolete> + <owner>peter@chromium.org</owner> + <summary> + Whenever the Budget API framework receives a query for the current budget, + this records the total budget available to the origin, which is an internal + Chrome value for the amount of background processing an origin can do + without visibly alerting the user. Scale for the budget is 0 to 100. Care + should be taken when drawing conclusions from this metric, as budget is + based on both engagement and usage, so could vary significantly based on + user behaviour and origin. + </summary> +</histogram> + +<histogram name="Blink.BudgetAPI.Reserve" enum="BooleanSuccess" + expires_after="2018-08-20"> + <obsolete> + Removed as of 08/2018 (M70) with the removal of the Budget API. + </obsolete> + <owner>peter@chromium.org</owner> + <summary> + Whenever the Budget API framework receives a request to reserve budget for a + future background operation, this records whether the reserve request + succeeded or not. + </summary> +</histogram> + +<histogram name="Blink.Canvas.2DLayerBridgeIsDeferred" enum="BooleanSuccess" + expires_after="2021-01-31"> + <obsolete> + Removed as the deferral path is always used now - 11/2019. + </obsolete> + <owner>aaronhk@chromium.org</owner> + <owner>fserb@chromium.org</owner> + <summary> + Records if a 2D Layer Bridge is using deferred rendering when it is + destroyed. Emitted in Canvas2DLayerBridge::~Canvas2DLayerBridge. + </summary> +</histogram> + +<histogram name="Blink.Canvas.DrawImage" units="microseconds" + expires_after="2021-01-31"> + <obsolete> + Replaced with Blink.Canvas.DrawImage.Duration in 10/2018. + </obsolete> + <owner>fserb@chromium.org</owner> + <summary> + Time spent on 2D canvas drawImage API call. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.Canvas.GetImageData" units="microseconds" + expires_after="2018-10-26"> + <obsolete> + Replaced with Blink.Canvas.GetImageDataScaledDuration in 10/2018. + </obsolete> + <owner>fserb@chromium.org</owner> + <summary> + Time spent on 2D canvas getImageData API call. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.Canvas.GPUAccelerated2DCanvasDisableDeferralReason" + enum="CanvasGPUAccelerated2DCanvasDisableDeferralReason" + expires_after="2019-12-31"> + <obsolete> + Canvas doesn't disable deferral anymore since July 2019. + </obsolete> + <owner>fserb@chromium.org</owner> + <owner>aaronhk@chromium.org</owner> + <summary> + The reasons why a GPU accelerated canvas stopped deferring its rendering + operations. + </summary> +</histogram> + +<histogram name="Blink.Canvas.OffscreenCommitTimer" units="microseconds" + expires_after="2018-11-01"> + <obsolete> + Removed in 10/2018. Offscreen Canvas no longer needs commits. + </obsolete> + <owner>fserb@chromium.org</owner> + <owner>xidachen@chromium.org</owner> + <summary> + Wall clock durations of OffscreenCanvas.commit() calls. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.Canvas.PutImageData" units="microseconds" + expires_after="2018-10-26"> + <obsolete> + Replaced with Blink.Canvas.PutImageDataScaledDuration in 10/2018. + </obsolete> + <owner>fserb@chromium.org</owner> + <summary> + Time spent on 2D canvas putImageData API call. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.Canvas.ToBlob.IdleEncodeDuration" units="microseconds" + expires_after="2017-12-04"> + <obsolete> + Replaced with Blink.Canvas.ToBlob.CompleteEncodingDelay in 2017/12. + </obsolete> + <owner>fserb@chromium.org</owner> + <owner>aaronhk@chromium.org</owner> + <summary> + This metric measures the total time spent on encoding all the rows of an + image (jpeg or png), excluding the waiting time of next idle periods. This + is part of a canvas.toBlob API call. Encoding occurs during one or more idle + periods on the main thread. + </summary> +</histogram> + +<histogram name="Blink.Canvas.ToBlobDuration" units="microseconds" + expires_after="2018-10-30"> + <obsolete> + Replaced with Blink.Canvas.ToBlob.ScaledDuration in 10/2018. + </obsolete> + <owner>fserb@chromium.org</owner> + <owner>aaronhk@chromium.org</owner> + <summary> + Time spent on 2D canvas toBlob API call. + + In addition, metric values from OffscreenCanvas.convertToBlob API call are + also gathered into this histogram, because the logic flow is exactly the + same as canvas.toBlob. It's worth to note that the values can come from idle + tasks on either main or worker thread. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.Canvas.ToDataURL" units="microseconds" + expires_after="2018-11-02"> + <obsolete> + Replaced with Blink.Canvas.ToDataURLScaledDuration in 10/2018. + </obsolete> + <owner>fserb@chromium.org</owner> + <summary> + Time spent on 2D canvas toDataURL API call. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.CheckerableImageCount" enum="CheckerableImageType" + expires_after="2018-05-08"> + <obsolete> + Removed on 2018-05-04. + </obsolete> + <owner>khushalsagar@chromium.org</owner> + <summary> + The number of images which could have been checkered (async decoded) for a + performance gain, split by the DOM element type on which they were used. + This is recorded each time an image for an element created by the page is + loaded, either from the network or the local cache. The browser heuristics + define an image to be checkerable if it is expected to have a long decode + duration. Since these images may be on the rendering critical path, decoding + them asychronously from painting other content can provide better + performance be reducing overall content checkerboarding. + </summary> +</histogram> + +<histogram name="Blink.ColorGamut.Source" enum="Gamut" expires_after="M80"> + <obsolete> + No useful signal. Deprecated 7/2019. + </obsolete> + <owner>brianosman@chromium.org</owner> + <owner>mcasas@google.com</owner> + <owner>ccameron@chromium.org</owner> + <summary>Gamut properties of image color space.</summary> +</histogram> + +<histogram name="Blink.ColorSpace.Destination.ExtractedRawData" + enum="ColorSpaceExtractedRawDataResult" expires_after="2017-02-28"> + <obsolete> + Merged into Blink.ColorSpace.Destination.ICCResult on 2017-02-28. + </obsolete> + <owner>ccameron@chromium.org</owner> + <summary> + Whether or not the output color space ICC profile was able to produce raw + transfer function tables. + </summary> +</histogram> + +<histogram name="Blink.ColorSpace.Destination.ICCResult" + enum="ICCProfileAnalyzeResult" expires_after="2020-03-08"> + <obsolete> + No useful signal. Deprecated 2020-03-03. + </obsolete> + <owner>brianosman@chromium.org</owner> + <owner>mcasas@google.com</owner> + <owner>ccameron@chromium.org</owner> + <summary> + The result of analyzing the destiation color space's ICC profile. + </summary> +</histogram> + +<histogram name="Blink.ColorSpace.Destination.LinearFitError" units="units" + expires_after="2017-02-28"> + <obsolete> + Linear fit found to be always inaccurate on 2017-02-28. + </obsolete> + <owner>ccameron@chromium.org</owner> + <summary> + The L-infinity error (in 8-bit values) of the numerical approximation of + table-based ICC profile transfer functions, when falling back to a linear + approximation. + </summary> +</histogram> + +<histogram name="Blink.ColorSpace.Destination.Matrix" + enum="ColorSpaceMatrixResult" expires_after="2017-02-28"> + <obsolete> + Merged into Blink.ColorSpace.Destination.ICCResult on 2017-02-28. + </obsolete> + <owner>ccameron@chromium.org</owner> + <summary> + Whether or not to-XYZD50 matrix was extracted from the output color space + ICC profile. + </summary> +</histogram> + +<histogram name="Blink.ColorSpace.Destination.NonlinearFitConverged" + enum="ColorSpaceNonlinearFitConverged" expires_after="2018-05-17"> + <obsolete> + Nonlinear fit code moved to skcms on 2018-04-25. + </obsolete> + <owner>ccameron@chromium.org</owner> + <summary> + Whether or not the nonlinear least squares fit of the table-based ICC + profile transfer function for a single channel converged. + </summary> +</histogram> + +<histogram name="Blink.ColorSpace.Destination.NonlinearFitError" units="units" + expires_after="2018-05-17"> + <obsolete> + Nonlinear fit code moved to skcms on 2018-04-25. + </obsolete> + <owner>ccameron@chromium.org</owner> + <summary> + The L-infinity error (in 8-bit values) of the numerical approximation of + table-based ICC profile transfer functions for a single channel, when the + nonlinear approximation converged. + </summary> +</histogram> + +<histogram name="Blink.ColorSpace.Destination.Numerical" + enum="ColorSpaceNumericalResult" expires_after="2017-02-28"> + <obsolete> + Merged into Blink.ColorSpace.Destination.ICCResult on 2017-02-28. + </obsolete> + <owner>ccameron@chromium.org</owner> + <summary> + Whether or not the output color space ICC profile has a numerical transfer + function. + </summary> +</histogram> + +<histogram name="Blink.ColorSpace.Destination.OneMinusTMax" units="units" + expires_after="2017-02-28"> + <obsolete> + TMax found to almost always be 1 on 2017-02-28. + </obsolete> + <owner>ccameron@chromium.org</owner> + <summary> + One minus the maximum value of table-based ICC profile transfer functions as + an 8-bit fixed-point value. This histogram is temporary, to see if we can + bake in the assumption that it will almost always be 255. + </summary> +</histogram> + +<histogram name="Blink.ColorSpace.Destination.TMin" units="units" + expires_after="2017-02-28"> + <obsolete> + TMin found to almost always be 0 on 2017-02-28. + </obsolete> + <owner>ccameron@chromium.org</owner> + <summary> + The minimum value of table-based ICC profile transfer functions as an 8-bit + fixed-point value. This histogram is temporary, to see if we can bake in the + assumption that it will almost always be 0. + </summary> +</histogram> + +<histogram name="Blink.ColorSpace.Source" enum="Gamma" expires_after="M77"> + <obsolete> + No useful signal. Deprecated 7/2019. + </obsolete> + <owner>brianosman@chromium.org</owner> + <owner>mcasas@google.com</owner> + <owner>ccameron@chromium.org</owner> + <summary>Gamma properties of image color space.</summary> +</histogram> + +<histogram name="Blink.Compositing.UpdateTime" units="microseconds" + expires_after="2021-03-01"> + <obsolete> + Obsolete as of http://crrev.com/794384 and M86. + </obsolete> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Time spent updating compositing in the Blink document lifecycle. This is the + legacy compositing approach. BlinkGenPropertyTrees launches part of the new + compositing approach and will use both this and + Blink.CompositingCommit.UpdateTime. + + Note: As of M70, this histogram has stopped recording metrics on machines + with low-resolution clocks. + + TODO(crbug.com/1100711): This is being replaced soon by CompositingInputs + + CompositingAssignments (== Compositing). + </summary> +</histogram> + +<histogram name="Blink.CookieJar.SyncCookiesSetTime" units="microseconds" + expires_after="2020-01-20"> + <obsolete> + Removed as of 01/20/2020. + </obsolete> + <owner>kinuko@chromium.org</owner> + <owner>dcheng@chromium.org</owner> + <summary> + Microseconds per sync IPC call to set cookies. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.CookieJar.SyncCookiesTime" units="microseconds" + expires_after="2020-01-20"> + <obsolete> + Removed as of 01/20/2020. + </obsolete> + <owner>kinuko@chromium.org</owner> + <owner>dcheng@chromium.org</owner> + <summary> + Microseconds per sync IPC call to fetch cookies. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + +<histogram name="Blink.DecodedImage.CanvasExpanded" + enum="BooleanCanvasExpanded" expires_after="2016-11-30"> + <obsolete> + Removed as of 11/29/2016. + </obsolete> + <owner>ryansturm@chromium.org</owner> + <owner>bengr@google.com</owner> + <summary> + The original canvas dimensions were sufficient to determine image size. This + is logged once per image header decode, which happens typically twice per + image on the page. + </summary> +</histogram> + +<histogram name="Blink.DecodedImage.EffectiveDimensionsLocation" units="bytes" + expires_after="2016-11-30"> + <obsolete> + Removed as of 11/29/2016. + </obsolete> + <owner>ryansturm@chromium.org</owner> + <owner>bengr@google.com</owner> + <summary> + How many bytes of the file were read before an image width and height were + determined. This is logged once per image header decode, which happens + typically twice per image on the page. + </summary> +</histogram> + +<histogram name="Blink.DecodedImage.JpegDensity" units="0.01 bits per pixel" + expires_after="2018-08-31"> + <obsolete> + Removed as of 08/23/2018. Replaced by Blink.DecodedImage.JpegDensity.* + </obsolete> + <owner>deymo@google.com</owner> + <owner>compression-dev@google.com</owner> + <summary> + The compressed image density measured in 0.01 bits per pixel. This is logged + once per image load after the whole image is loaded and only for JPEGs with + at least 100 pixels on each dimension. + </summary> +</histogram> + +<histogram name="Blink.DecodedImage.JpegDensity.1000px" + units="0.01 bits per pixel" expires_after="2020-08-10"> + <obsolete> + Removed in M79. Replaced by Blink.DecodedImage.JpegDensity.KiBWeighted. + </obsolete> + <owner>deymo@google.com</owner> + <owner>compression-dev@google.com</owner> + <summary> + The compressed image density measured in 0.01 bits per pixel. This is logged + once per image load after the whole image is loaded and only for JPEGs with + at least 1000 pixels on the smallest dimension (width or height). + </summary> +</histogram> + +<histogram name="Blink.DecodedImage.JpegDensity.100px" + units="0.01 bits per pixel" expires_after="2020-02-23"> + <obsolete> + Removed in M79. Replaced by Blink.DecodedImage.JpegDensity.KiBWeighted. + </obsolete> + <owner>deymo@google.com</owner> + <owner>compression-dev@google.com</owner> + <summary> + The compressed image density measured in 0.01 bits per pixel. This is logged + once per image load after the whole image is loaded and only for JPEGs with + at least 100 pixels on the smallest dimension (width or height) but less + than 400 pixels on the smallest dimension. + </summary> +</histogram> + +<histogram name="Blink.DecodedImage.JpegDensity.400px" + units="0.01 bits per pixel" expires_after="2020-02-23"> + <obsolete> + Removed in M79. Replaced by Blink.DecodedImage.JpegDensity.KiBWeighted. + </obsolete> + <owner>deymo@google.com</owner> + <owner>compression-dev@google.com</owner> + <summary> + The compressed image density measured in 0.01 bits per pixel. This is logged + once per image load after the whole image is loaded and only for JPEGs with + at least 400 pixels on the smallest dimension (width or height) but less + than 1000 pixels on the smallest dimension. + </summary> +</histogram> + +<histogram name="Blink.DecodedImage.XCanvasExpansion" units="pixels" + expires_after="2016-11-30"> + <obsolete> + Removed as of 11/29/2016. + </obsolete> + <owner>ryansturm@chromium.org</owner> + <owner>bengr@google.com</owner> + <summary> + How much the canvas width needed to be expanded as a result of the first + frame's width and x-offset being larger than the initial canvas width. This + is logged once per image header decode, which happens typically twice per + image on the page. + </summary> +</histogram> + +<histogram name="Blink.DecodedImage.YCanvasExpansion" units="pixels" + expires_after="2016-11-30"> + <obsolete> + Removed as of 11/29/2016. + </obsolete> + <owner>ryansturm@chromium.org</owner> + <owner>bengr@google.com</owner> + <summary> + How much the canvas height needed to be expanded as a result of the first + frame's height and y-offset being larger than the initial canvas height. + This is logged once per image header decode, which happens typically twice + per image on the page. + </summary> +</histogram> + +<histogram name="Blink.EventListenerDuration.Resize" units="microseconds" + expires_after="2018-01-17"> + <obsolete> + Removed 01/2018. + </obsolete> + <owner>bokan@chromium.org</owner> + <summary> + Time it takes to execute all the `resize` event listeners on a page when a + resize event is fired. Tracked only for the main frame. + </summary> +</histogram> + +<histogram name="Blink.Gesture.Merged" enum="GestureMergeState" + expires_after="M77"> + <obsolete> + UserActivationV2 made UserGestureTokens obselete, so the merge stats is now + irrelevant. + </obsolete> + <owner>jyasskin@chromium.org</owner> + <owner>domenic@google.com</owner> + <summary> + How many times two user gesture tokens were merged by UserGestureIndicator, + and whether each token had an active gesture. One of the new token's + gestures, if any, is moved to the old token. + </summary> +</histogram> + +<histogram base="true" name="Blink.MainFrame.ProxyCommitRatio" units="%" + expires_after="2020-11-08"> + <obsolete> + Replaced with separate ImplCompositorCommit and WaitForCommit metrics and + removed in M84. + </obsolete> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The percentage of time between a BeginMainFrame and paint results commit in + Blink that is used for committing the layer tree to the impl thread. + </summary> +</histogram> + +<histogram base="true" name="Blink.MainFrame.StyleAndLayoutRatio" units="%" + expires_after="2020-06-21"> + <obsolete> + Replaced with separate Style and Layout metrics and removed in M81. + </obsolete> + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> +<!-- Name completed by histogram_suffixes name="BlinkMainFrameUpdateTimeSuffixes" --> + + <summary> + The percentage of time between a BeginMainFrame and paint results commit in + Blink that is used for computing Style and Layout. + </summary> +</histogram> + +<histogram name="Blink.MediaDocument.DownloadButton" + enum="MediaDocumentDownloadButtonType" expires_after="2017-08-22"> + <obsolete> + Removed 08/2017 as it is integrated into media controller. + </obsolete> + <owner>qinmin@chromium.org</owner> + <summary> + Records how the download button on the MediaDocument is used. + </summary> +</histogram> + +<histogram name="Blink.MediaElement.Autoplay" enum="MediaElementAutoPlay" + expires_after="2016-11-30"> + <obsolete> + Removed 11/2016 in Issue 666370 with the deprecation of Autoplay experiment. + </obsolete> + <owner>oysteine@chromium.org</owner> + <summary> + Records user observation and interaction with Media HTML elements that + feature autoplay, either script-controlled or through the attribute. + </summary> +</histogram> + +<histogram name="Blink.Paint.IndexedItemPercentage" units="%" + expires_after="2020-03-01"> + <obsolete> + Not very useful for identifying performance issues. + </obsolete> + <owner>paint-dev@chromium.org</owner> + <summary> + Percentage of display items that are put into the index because of + out-of-order display item matching. Higher value means lower performance + beause of the cost of out-of-order matching and indexing. Recorded when we + finish updating paint in the Blink document lifecycle. + </summary> +</histogram> + +<histogram name="Blink.Paint.NumDisplayItems" units="count" + expires_after="2020-03-01"> + <obsolete> + Not very useful for identifying performance issues. + </obsolete> + <owner>paint-dev@chromium.org</owner> + <summary> + Total number of display items (including cached and repainted) in the + painted result. Recorded when we finish updating paint in the Blink document + lifecycle. + </summary> +</histogram> + +<histogram name="Blink.Paint.NumPaintChunks" units="count" + expires_after="2020-03-01"> + <obsolete> + Not very useful for identifying performance issues. + </obsolete> + <owner>paint-dev@chromium.org</owner> + <summary> + Total number of paint chunks in the painted result. Recorded when we finish + updating paint in the Blink document lifecycle. + </summary> +</histogram> + +<histogram name="Blink.Paint.NumSubsequences" units="count" + expires_after="2020-03-01"> + <obsolete> + Not very useful for identifying performance issues. + </obsolete> + <owner>paint-dev@chromium.org</owner> + <summary> + Total number of subsequences (including cached and repainted) in the painted + result. Recorded when we finish updating paint in the Blink document + lifecycle. + </summary> +</histogram> + +<histogram name="Blink.PaintInvalidation.UpdateTime" units="microseconds" + expires_after="2018-02-22"> + <obsolete> + SlimmingPaintInvalidation is enabled by default, so this histogram is no + longer being logged. Was removed in 02-2018. + </obsolete> + <owner>paint-dev@chromium.org</owner> + <summary> + Time spent updating paint invalidation in the Blink document lifecycle. Not + available when SlimmingPaintInvalidation or SlimmingPaintV2 is enabled. + </summary> +</histogram> + +<histogram name="Blink.ProxyCommit.UpdateTime" units="microseconds" + expires_after="2020-11-08"> + <obsolete> + Replaced with separate ImplCompositorCommit and WaitForCommit metrics and + removed in M84. + </obsolete> +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> + +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> + +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> + + <owner>schenney@chromium.org</owner> + <owner>paint-dev@chromium.org</owner> + <summary> + Time spent commiting the layer tree to the impl thread in a main frame + update. + + Note: This histogram does not record metrics on machines with low-resolution + clocks. + </summary> +</histogram> + +<histogram name="Blink.ResourceFetcher.StaleWhileRevalidate" + enum="BooleanAttempted" expires_after="2020-01-26"> + <obsolete> + Removed as of 02/2020. + </obsolete> + <owner>dtapuska@chromium.org</owner> + <owner>kenjibaheux@google.com</owner> + <summary>Count of resources attempted Stale Revalidation.</summary> +</histogram> + +<histogram base="true" name="Blink.ResourceLoadScheduler.DecodedBytes" + units="bytes" expires_after="2018-08-06"> + <obsolete> + Removed as of 8/2018. + </obsolete> +<!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" --> + + <owner>toyoshim@chromium.org</owner> + <owner>ksakamoto@chromium.org</owner> + <summary>Count received data size in bytes for each resource.</summary> +</histogram> + +<histogram name="Blink.ResourceLoadScheduler.DecodedBytes.KBPerFrameStatus" + enum="RendererSchedulerFrameType2" expires_after="2020-04-30"> + <obsolete> + Removed as of 02/2020. + </obsolete> + <owner>toyoshim@chromium.org</owner> + <owner>altimin@chromium.org</owner> + <summary> + Total decoded size of resources associated with frames of a particular type. + Recorded when a fetch has been completed. + + Each bucket of the histogram cointains the total size of all requests + associated with frames with a particular frame status in kilobytes. + </summary> +</histogram> + +<histogram base="true" name="Blink.ResourceLoadScheduler.PeakRequests" + units="requests" expires_after="M80"> + <obsolete> + Removed as of 6/2019. + </obsolete> +<!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" --> + + <owner>ksakamoto@chromium.org</owner> + <owner>toyoshim@chromium.org</owner> + <summary> + The largest number of outstanding resource requests issued by a frame until + the network 2-quiet (no more than 2 active network requests for 1 seconds). + </summary> +</histogram> + +<histogram name="Blink.ResourceLoadScheduler.RequestCount" + enum="ResourceLoadSchedulerCircumstance" expires_after="2020-04-30"> + <obsolete> + Removed as of 02/2020. + </obsolete> + <owner>toyoshim@chromium.org</owner> + <owner>ksakamoto@chromium.org</owner> + <summary> + Count resource request circumstance, e.g. from the main frame vs sub-frames, + or in throttled state vs in not-throttled state, on each resource load + completion. + </summary> +</histogram> + +<histogram name="Blink.ResourceLoadScheduler.ThrottlingStateChangeCount" + units="changes" expires_after="M77"> + <obsolete> + Removed as of 6/2019. + </obsolete> + <owner>toyoshim@chromium.org</owner> + <owner>ksakamoto@chromium.org</owner> + <summary> + Count how many times the scheduler has changed throttling status from the + frame creation until network activity quiets. + </summary> +</histogram> + +<histogram base="true" name="Blink.ResourceLoadScheduler.TotalDecodedBytes" + units="bytes" expires_after="M80"> + <obsolete> + Removed as of 6/2019. + </obsolete> +<!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" --> + + <owner>toyoshim@chromium.org</owner> + <owner>altimin@chromium.org</owner> + <summary> + Total received data size in bytes to load resources from the frame creation + until network activity quiets. + </summary> +</histogram> + +<histogram base="true" name="Blink.ResourceLoadScheduler.TotalRequestCount" + units="requests" expires_after="M80"> + <obsolete> + Removed as of 6/2019. + </obsolete> +<!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" --> + + <owner>toyoshim@chromium.org</owner> + <owner>ksakamoto@chromium.org</owner> + <summary> + Total number of resource requests completed from the frame creation until + network activity quiets. + </summary> +</histogram> + +<histogram base="true" name="Blink.ResourceLoadScheduler.TotalTrafficBytes" + units="bytes" expires_after="M80"> + <obsolete> + Removed as of 6/2019. + </obsolete> +<!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" --> + + <owner>toyoshim@chromium.org</owner> + <owner>altimin@chromium.org</owner> + <summary> + Total traffic data in bytes transferred over networks to load resources from + the frame creation until network activity quiets. + </summary> +</histogram> + +<histogram base="true" name="Blink.ResourceLoadScheduler.TrafficBytes" + units="bytes" expires_after="2018-08-06"> + <obsolete> + Removed as of 8/2018. + </obsolete> +<!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" --> + + <owner>toyoshim@chromium.org</owner> + <owner>ksakamoto@chromium.org</owner> + <summary> + Count traffic data size in bytes transferred over networks to load each + resource. + </summary> +</histogram> + +<histogram name="Blink.RestoredCachedStyleSheet" + enum="RestoredCachedStyleSheet" expires_after="2016-01-20"> + <obsolete> + Removed 01/2016 and replaced by Blink.RestoredCachedStyleSheet2 + </obsolete> + <owner>kouhei@chromium.org</owner> + <summary> + On each link stylesheet tag resolve, record whether a Blink MemoryCached + StyleSheetContents was reused. + </summary> +</histogram> + +<histogram name="Blink.RestoredCachedStyleSheet2" enum="StyleSheetCacheStatus" + expires_after="2017-04-11"> + <obsolete> + Removed 04/2017. + </obsolete> + <owner>kouhei@chromium.org</owner> + <summary> + On each link stylesheet tag resolve, record which cache Blink hit. + </summary> +</histogram> + +<histogram name="Blink.ScriptValueSerializer.DOMWrapperCount" units="objects" + expires_after="2016-11-15"> + <obsolete> + Used to justify distribution of serialized data in the wild, but unlikely to + be useful to track long-term. + </obsolete> + <owner>platform-architecture-dev@chromium.org</owner> + <summary> + Number of DOM wrappers serialized as part of an object passed to + postMessage, IndexedDB, or another API that serializes script values. + </summary> +</histogram> + +<histogram name="Blink.ScriptValueSerializer.JSObjectCount" units="objects" + expires_after="2016-11-15"> + <obsolete> + Used to justify distribution of serialized data in the wild, but unlikely to + be useful to track long-term. + </obsolete> + <owner>platform-architecture-dev@chromium.org</owner> + <summary> + Number of JavaScript objects (other than DOM wrappers) serialized as part of + an object passed to postMessage, IndexedDB, or another API that serializes + script values. + </summary> +</histogram> + +<histogram name="Blink.ScriptValueSerializer.PrimitiveCount" units="values" + expires_after="2016-11-15"> + <obsolete> + Used to justify distribution of serialized data in the wild, but unlikely to + be useful to track long-term. + </obsolete> + <owner>platform-architecture-dev@chromium.org</owner> + <summary> + Number of primitive values (numbers, strings, etc.) serialized as part of an + object passed to postMessage, IndexedDB, or another API that serializes + script values. + </summary> +</histogram> + +<histogram name="Blink.SharedBuffer.FailedLock" enum="ResourceType" + expires_after="M85"> + <obsolete> + Removed 08/2016 since SharedBuffer::unlock() was successfully removed. + </obsolete> + <owner>hiroshige@chromium.org</owner> + <summary> + Number of failed SharedBuffer::lock() calls for each resource type. + https://crbug.com/603791 + </summary> +</histogram> + +<histogram name="Blink.SharedBuffer.SuccessfulLock" enum="ResourceType" + expires_after="M85"> + <obsolete> + Removed 08/2016 since SharedBuffer::unlock() was successfully removed. + </obsolete> + <owner>hiroshige@chromium.org</owner> + <summary> + Number of successful SharedBuffer::lock() calls for each resource type. + https://crbug.com/603791 + </summary> +</histogram> + +<histogram name="Blink.SharedBuffer.Unlock" enum="ResourceType" + expires_after="M85"> + <obsolete> + Removed 08/2016 since SharedBuffer::unlock() was successfully removed. + </obsolete> + <owner>hiroshige@chromium.org</owner> + <summary> + Number of SharedBuffer::unlock() calls for each resource type. + https://crbug.com/603791 + </summary> +</histogram> + +<histogram name="Blink.Sms.Receive.RequestedTimeout" units="ms" + expires_after="M81"> + <obsolete> + Removed 9/2019 since the concept of timeouts have been removed. + https://crbug.com/1000376 + </obsolete> + <owner>goto@chromium.org</owner> + <owner>reillyg@chromium.org</owner> + <owner>ayui@chromium.org</owner> + <summary> + Records the timeout value specified when the API is called regardless of + whether or not the call actually timed out. The value of 0 indicates that no + value was specified. + </summary> +</histogram> + +<histogram name="Blink.Sms.Receive.TimeTimeoutExceeded" units="ms" + expires_after="M81"> + <obsolete> + Removed 9/2019 since the concept of timeouts have been removed. + https://crbug.com/1000376 + </obsolete> + <owner>goto@chromium.org</owner> + <owner>reillyg@chromium.org</owner> + <owner>ayui@chromium.org</owner> + <summary> + Records the duration from when the API is called to when the user gets timed + out of the SMS verification flow because no SMS was received within the + specified timeout window. + </summary> +</histogram> + +<histogram name="Blink.StyleAndLayout.UpdateTime" units="microseconds" + expires_after="2020-08-10"> + <obsolete> + Replaced with separate Style and Layout metrics and removed in M81. + </obsolete> +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> + +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> + +<!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> + + <owner>schenney@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> + <summary> + Time spent updating style and layout in the Blink document lifecycle. + + Note: As of M70, this histogram has stopped recording metrics on machines + with low-resolution clocks. + </summary> +</histogram> + +<histogram + name="Blink.UseCounter.AnimatedCSSProperties_TestBrowserProcessLogging" + enum="MappedCSSProperties" expires_after="2018-06-12"> + <obsolete> + Renamed to Blink.UseCounter.AnimatedCSSProperties in 03/2018, M69. The old + blink UseCounter is flawed in OOPIF, so moved to the browser side instead. + </obsolete> + <owner>chasej@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Records usage of animated CSS properties used across all frames in a page, + either statically or dynamically, from the time the page is initialised to + when it is closed or navigated away from. Each property is counted at most + once per page view except kTotalPagesMeasuredCSSSampleId which represents a + page load (enum value of 1) and is counted exactly once per page view. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.CSSProperties_TestBrowserProcessLogging" + enum="MappedCSSProperties" expires_after="2018-06-12"> + <obsolete> + Renamed to Blink.UseCounter.CSSProperties in 03/2018, M69. The old blink + UseCounter is flawed in OOPIF, so moved to the browser side instead. + </obsolete> + <owner>chasej@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Records usage of CSS properties used across all frames in a page, either + statically or dynamically, from the time the page is initialised to when it + is closed or navigated away from. Each property is counted at most once per + page per view except kTotalPagesMeasuredCSSSampleId which represents a page + load (enum value of 1) and is counted exactly once per page view. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.FeaturePolicy.ImageDownscalingRatio" + units="%" expires_after="2020-08-16"> + <obsolete> + Feature moved from feature policy to document policy in M82. Histogram and + recording code removed for feature policy. Histogram and recording code will + be added for document policy. + </obsolete> + <owner>iclelland@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Logs downscaling ratio in percentage for images enforced by feature policy + oversized-images policy going into origin trials in M75. If an image's + downscaling ratio is 1, it will be represented as 10 percent, if an image's + downscaling ratio is 5, it will be represented as 50 percents. Recorded when + oversized-images policy is enforced and the image is about to be painted. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.FeaturePolicy.ImageFormats" + enum="FeaturePolicyImageCompressionFormat" expires_after="M80"> + <obsolete> + Feature moved from feature policy to document policy in M82. Histogram and + recording code removed for feature policy. Histogram and recording code will + be added for document policy. + </obsolete> + <owner>iclelland@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Counts ImageFileFormats (lossy, lossless, webp animation, others) of images + enforced by feature policy unoptimized-images policy going into origin + trials in M75. Recorded when images finish decoding the mime type. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.FeaturePolicy.LosslessImageCompression" + units="%" expires_after="M80"> + <obsolete> + Feature moved from feature policy to document policy in M82. Histogram and + recording code removed for feature policy. Histogram and recording code will + be added for document policy. + </obsolete> + <owner>iclelland@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Logs compression ratio in percentage with 1KB overhead for lossless type + images enforced by feature policy unoptimized-lossless-images policy going + into origin trials in M75. If an image's compression ratio is 0.1, it will + be represented as 1 percent, if an image's compression ratio is 5, it will + be represented as 50 percents. Recorded when unoptimized-lossless-images + policy is enforced and the image finishes decoding its mime type. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.FeaturePolicy.LossyImageCompression" + units="%" expires_after="M80"> + <obsolete> + Feature moved from feature policy to document policy in M82. Histogram and + recording code removed for feature policy. Histogram and recording code will + be added for document policy. + </obsolete> + <owner>iclelland@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Logs compression ratio with 1KB overhead for lossy type images enforced by + feature policy unoptimized-lossy-images policy going into origin trials in + M75. If an image's compression ratio is 0.1, it will be represented as 1 + percent, if an image's compression ratio is 5, it will be represented as 50 + percents. Recorded when unoptimized-lossy-images policy is enforced and the + image finishes decoding its mime type. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.FeaturePolicy.StrictLosslessImageCompression" + units="%" expires_after="M80"> + <obsolete> + Feature moved from feature policy to document policy in M82. Histogram and + recording code removed for feature policy. Histogram and recording code will + be added for document policy. + </obsolete> + <owner>iclelland@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Logs compression ratio with 10KB overhead for lossless type images enforced + by feature policy unoptimized-lossless-images-strict policy going into + origin trials in M75. If an image's compression ratio is 0.1, it will be + represented as 1 percent, if an image's compression ratio is 5, it will be + represented as 50 percents. Recorded when unoptimized-lossless-images-strict + policy is enforced and the image finishes decoding its mime type. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.Features_Legacy" enum="FeatureObserver" + expires_after="M81"> + <obsolete> + Replaced by Blink.UseCounter.Features in M67. See crbug.com/849695. + </obsolete> + <owner>chasej@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Count of how many page loads use various features. The PageVisits bucket is + incremented for each page load, and the other buckets incremented at most + once per PageVisit via the blink::UseCounter class. + </summary> + <details> + This histogram recorded values in the renderer process. With the addition of + OOPIF, the counts could be inaccurate due to multiple renderer processes for + a page. It was replaced by an implementation that records values in the + browser process. + </details> +</histogram> + +<histogram name="Blink.UseCounter.Features_TestBrowserProcessLogging" + enum="FeatureObserver" expires_after="2018-03-13"> + <obsolete> + Renamed to Blink.UseCounter.Features in 03/2018, M67. The old blink + UseCounter is flawed in OOPIF, so moved to the browser side (this) instead. + </obsolete> + <owner>chasej@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Count of how many page loads use various features across all frames in a + page. The PageVisits bucket is incremented for each page load, and the other + buckets incremented at most once per PageVisit via the WebCore::UseCounter + class. This counter lives in browser process. + </summary> +</histogram> + +<histogram name="Blink.UseCounter.SVGImage.AnimatedCSSProperties" + enum="MappedCSSProperties" expires_after="2018-06-19"> + <obsolete> + Removed in 06/2018, M69 since the histogram is not really useful. See + https://crbug.com/804645. + </obsolete> + <owner>chasej@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Like Blink.UseCounter.AnimatedCSSProperties but specifically for the case of + CSS properties used inside of an SVG image. + </summary> + <details> + Warning: This histogram represents pre-renderer metrics and so is flawed + under OOPIF. + + This histogram counts usage of animated CSS properties only. Refer to + Blink.UseCounter.SVGImage.CSSProperties for details. + </details> +</histogram> + +<histogram name="Blink.UseCounter.SVGImage.CSSProperties" + enum="MappedCSSProperties" expires_after="2018-06-19"> + <obsolete> + Removed in 06/2018, M69 since the histogram is not really useful. See + https://crbug.com/804645. + </obsolete> + <owner>chasej@chromium.org</owner> + <owner>feature-control@chromium.org</owner> + <summary> + Like Blink.UseCounter.CSSProperties but specifically for the case of CSS + properties used inside of an SVG image. + </summary> + <details> + Warning: This histogram represents pre-renderer metrics and so is flawed + under OOPIF. + + The 'Total pages measured' bucket is incremented each time a new SVG image + is created. Note that the same SVG image can be used across multiple tabs in + a single renderer but this counts as a single usage. See + http://crbug.com/236262. + </details> +</histogram> + +<histogram name="Blink.UseCounter.SVGImage.Features" enum="FeatureObserver" + expires_after="2019-05-15"> + <obsolete> + Removed in 05/2019, M76. Every SVGImage has it's own Page instance and + multiple web pages can share the usage of a single SVGImage. Previously + Blink.UseCounter.Features was recorded on the Blink side per Page; metrics + from SVGImage needed to be recorded in a separate histogram. Now that + metrics are recorded on the browser side, feature usage from SVGImage is + measured via page load metrics, on Blink.UseCounter.Features, once per page + load. This histogram is no longer needed. + </obsolete> + <summary> + Like Blink.UseCounter.Features except specifically for the case of SVG + Images. + </summary> + <details> + Warning: This histogram represents pre-renderer metrics and so is flawed + under OOPIF. + + Count of how many SVG images use various features. The PageVisits bucket is + incremented each time a new SVG image is created. Note that the same SVG + image can be used across multiple tabs in a single renderer but this counts + as a single usage. See http://crbug.com/236262. + </details> +</histogram> + +<histogram name="Blink.XHR.setRequestHeader.HeaderValueCategoryInRFC7230" + enum="XMLHttpRequestHeaderValueCategoryInRFC7230" + expires_after="2017-06-01"> + <obsolete> + Removed 06/2017 in Issues 455099 and 681769 (M61). + </obsolete> + <owner>hiroshige@chromium.org</owner> + <summary> + The count of XMLHttpRequest.setRequestHeader() calls where header values are + invalid/valid but affected by normalization/valid in RFC 7230. + https://crbug.com/455099. + </summary> +</histogram> + +<histogram name="BlinkGC.AtomicPhaseMarking" units="ms" expires_after="M81"> + <obsolete> + See BlinkGC.TimeForAtomicPhaseMarking. + </obsolete> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Duration of finishing marking the transitive closure of objects during the + final Blink garbage collection pause. Recorded at the end of each garbage + collection. + </summary> +</histogram> + +<histogram name="BlinkGC.CollectGarbage" units="ms" expires_after="2018-06-07"> + <obsolete> + Removed 06/2018. The sample taken here was a mix of marking, sweeping and + compaction. Replaced by BlinkGC.AtomicPhaseMarking for the marking phase and + BlinkGC.TimeForTotalCollectGarbage for the overal time. + </obsolete> + <owner>haraken@chromium.org</owner> + <summary> + Duration of time taken to run Heap::collectGarbage(). Recorded at the end of + each garbage collection. + </summary> +</histogram> + +<histogram name="BlinkGC.CommittedSize" units="MB" expires_after="2020-02-16"> + <obsolete> + Removed as of 07/2019. Use Memory.Renderer.* and + Memory.Experimental.Renderer2.* instead. + </obsolete> + <owner>haraken@chromium.org</owner> + <summary> + The committed memory size in Blink GC. The value is reported when we see the + highest memory usage we've ever seen in the renderer process. + </summary> +</histogram> + +<histogram name="BlinkGC.CompleteSweep" units="ms" expires_after="M81"> + <obsolete> + Removed 07/2019. Replaced by BlinkGC.TimeForCompleteSweep. + </obsolete> + <owner>haraken@chromium.org</owner> + <summary>Duration of time taken to run ThreadState::completeSweep().</summary> +</histogram> + +<histogram name="BlinkGC.PerformPendingSweep" units="ms" + expires_after="2015-03-30"> + <obsolete> + Removed at 2014 Jan. + </obsolete> + <owner>haraken@chromium.org</owner> + <summary> + Duration of time taken to run ThreadState::performPendingSweep(). + </summary> +</histogram> + +<histogram name="BlinkGC.SlowIncrementalMarkingFinalize.AtomicPhaseMarking" + units="ms" expires_after="M77"> + <obsolete> + Removed 07/2019. Data gathering finished with the result that slow marking + finalization was mostly caused by visiting DOM wrappers or premature + finalization. + </obsolete> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Duration of finishing marking the transitive closure of objects during the + final Blink garbage collection pause. Only recorded when incremental marking + finalization took at least 40ms. + </summary> +</histogram> + +<histogram name="BlinkGC.SlowIncrementalMarkingFinalize.EagerSweep" units="ms" + expires_after="M80"> + <obsolete> + Removed 07/2019. Data gathering finished with the result that slow marking + finalization was mostly caused by visiting DOM wrappers or premature + finalization. + </obsolete> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Duration of time taken to run eager sweep finalizers finalizers. Only + recorded when incremental marking finalization took at least 40ms. + </summary> +</histogram> + +<histogram + name="BlinkGC.SlowIncrementalMarkingFinalize.IncrementalMarkingFinalize" + units="ms" expires_after="M77"> + <obsolete> + Removed 07/2019. Data gathering finished with the result that slow marking + finalization was mostly caused by visiting DOM wrappers or premature + finalization. + </obsolete> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Duration of time for incremental marking finalization. Only recorded when + incremental marking finalization took at least 40ms. + </summary> +</histogram> + +<histogram name="BlinkGC.SlowIncrementalMarkingFinalize.InvokePreFinalizers" + units="ms" expires_after="M77"> + <obsolete> + Removed 07/2019. Data gathering finished with the result that slow marking + finalization was mostly caused by visiting DOM wrappers or premature + finalization. + </obsolete> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Duration of time taken to invoke pre finalizers. Only recorded when + incremental marking finalization took at least 40ms. + </summary> +</histogram> + +<histogram name="BlinkGC.SlowIncrementalMarkingFinalize.MarkWeakProcessing" + units="ms" expires_after="M77"> + <obsolete> + Removed 07/2019. Data gathering finished with the result that slow marking + finalization was mostly caused by visiting DOM wrappers or premature + finalization. + </obsolete> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Duration of time taken for weak processing. Only recorded when incremental + marking finalization took at least 40ms. + </summary> +</histogram> + +<histogram + name="BlinkGC.SlowIncrementalMarkingFinalize.VisitCrossThreadPersistents" + units="ms" expires_after="M77"> + <obsolete> + Removed 07/2019. Data gathering finished with the result that slow marking + finalization was mostly caused by visiting DOM wrappers or premature + finalization. + </obsolete> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Duration of time taken to visit cross thread persistents. Only recorded when + incremental marking finalization took at least 40ms. + </summary> +</histogram> + +<histogram name="BlinkGC.SlowIncrementalMarkingFinalize.VisitDOMWrappers" + units="ms" expires_after="M77"> + <obsolete> + Removed 07/2019. Data gathering finished with the result that slow marking + finalization was mostly caused by visiting DOM wrappers or premature + finalization. + </obsolete> + <owner>mlippautz@chromium.org</owner> + <owner>oilpan-reviews@chromium.org</owner> + <summary> + Duration of time taken to visit DOM wrappers. Only recorded when incremental + marking finalization took at least 40ms. + </summary> +</histogram> + +<histogram name="BlinkGC.TimeForCoalesce" units="ms" expires_after="M80"> + <obsolete> + Removed 07/2019. Coalescing is not used anymore. + </obsolete> + <owner>haraken@chromium.org</owner> + <owner>hpayer@chromium.org</owner> + <summary> + Duration of memory coalesce operation in the Blink GC. Reported once per + coalesce operation. + </summary> +</histogram> + +<histogram name="BlinkGC.TimeForStoppingThreads" units="ms" + expires_after="2017-02-13"> + <obsolete> + As of 02/2017, the code to stop Blink threads was removed. + </obsolete> + <owner>haraken@chromium.org</owner> + <summary> + Duration of time taken to stop all Blink threads before starting a GC. + </summary> +</histogram> + +<histogram name="BlinkGC.TimeForSweepingAllObjects" units="ms" + expires_after="M77"> + <obsolete> + As of 07/2019, this metric is replaced by BlinkGC.TimeForSweepingSum. + </obsolete> + <owner>haraken@chromium.org</owner> + <summary>Accumulated time taken to sweep all objects.</summary> +</histogram> + +<histogram name="BlinkGC.TimeForThreadLocalWeakProcessing" units="ms" + expires_after="2017-02-26"> + <obsolete> + As of 02/2017, the code for thread-local weak processing was removed. + </obsolete> + <owner>haraken@chromium.org</owner> + <summary>Duration of time taken to run thread-local weak processing.</summary> +</histogram> + <histogram name="UMA.ClientIdMigrated" enum="BooleanMigrated" expires_after="2015-06-01"> <obsolete>
diff --git a/tools/metrics/histograms/split_xml.py b/tools/metrics/histograms/split_xml.py index 5557bf4..a591873c 100644 --- a/tools/metrics/histograms/split_xml.py +++ b/tools/metrics/histograms/split_xml.py
@@ -173,7 +173,7 @@ value is a list of nodes or another dict. output_dir: The output directory of the resulting folders. """ - for key, val in document_dict: + for key, val in document_dict.items(): if isinstance(val, list): _OutputToFolderAndXML(val, output_dir, key) else:
diff --git a/ui/accessibility/ax_enum_util.cc b/ui/accessibility/ax_enum_util.cc index f17e077..f61025e91 100644 --- a/ui/accessibility/ax_enum_util.cc +++ b/ui/accessibility/ax_enum_util.cc
@@ -140,132 +140,6 @@ return ""; } -ax::mojom::Event ParseEvent(const char* event) { - if (0 == strcmp(event, "none")) - return ax::mojom::Event::kNone; - if (0 == strcmp(event, "activedescendantchanged")) - return ax::mojom::Event::kActiveDescendantChanged; - if (0 == strcmp(event, "alert")) - return ax::mojom::Event::kAlert; - if (0 == strcmp(event, "ariaAttributeChanged")) - return ax::mojom::Event::kAriaAttributeChanged; - if (0 == strcmp(event, "autocorrectionOccured")) - return ax::mojom::Event::kAutocorrectionOccured; - if (0 == strcmp(event, "blur")) - return ax::mojom::Event::kBlur; - if (0 == strcmp(event, "checkedStateChanged")) - return ax::mojom::Event::kCheckedStateChanged; - if (0 == strcmp(event, "childrenChanged")) - return ax::mojom::Event::kChildrenChanged; - if (0 == strcmp(event, "clicked")) - return ax::mojom::Event::kClicked; - if (0 == strcmp(event, "controlsChanged")) - return ax::mojom::Event::kControlsChanged; - if (0 == strcmp(event, "documentSelectionChanged")) - return ax::mojom::Event::kDocumentSelectionChanged; - if (0 == strcmp(event, "documentTitleChanged")) - return ax::mojom::Event::kDocumentTitleChanged; - if (0 == strcmp(event, "endOfTest")) - return ax::mojom::Event::kEndOfTest; - if (0 == strcmp(event, "expandedChanged")) - return ax::mojom::Event::kExpandedChanged; - if (0 == strcmp(event, "focus")) - return ax::mojom::Event::kFocus; - if (0 == strcmp(event, "focusAfterMenuClose")) - return ax::mojom::Event::kFocusAfterMenuClose; - if (0 == strcmp(event, "focusContext")) - return ax::mojom::Event::kFocusContext; - if (0 == strcmp(event, "hide")) - return ax::mojom::Event::kHide; - if (0 == strcmp(event, "hitTestResult")) - return ax::mojom::Event::kHitTestResult; - if (0 == strcmp(event, "hover")) - return ax::mojom::Event::kHover; - if (0 == strcmp(event, "imageFrameUpdated")) - return ax::mojom::Event::kImageFrameUpdated; - if (0 == strcmp(event, "invalidStatusChanged")) - return ax::mojom::Event::kInvalidStatusChanged; - if (0 == strcmp(event, "layoutComplete")) - return ax::mojom::Event::kLayoutComplete; - if (0 == strcmp(event, "liveRegionCreated")) - return ax::mojom::Event::kLiveRegionCreated; - if (0 == strcmp(event, "liveRegionChanged")) - return ax::mojom::Event::kLiveRegionChanged; - if (0 == strcmp(event, "loadComplete")) - return ax::mojom::Event::kLoadComplete; - if (0 == strcmp(event, "loadStart")) - return ax::mojom::Event::kLoadStart; - if (0 == strcmp(event, "locationChanged")) - return ax::mojom::Event::kLocationChanged; - if (0 == strcmp(event, "mediaStartedPlaying")) - return ax::mojom::Event::kMediaStartedPlaying; - if (0 == strcmp(event, "mediaStoppedPlaying")) - return ax::mojom::Event::kMediaStoppedPlaying; - if (0 == strcmp(event, "menuEnd")) - return ax::mojom::Event::kMenuEnd; - if (0 == strcmp(event, "menuListItemSelected")) - return ax::mojom::Event::kMenuListItemSelected; - if (0 == strcmp(event, "menuListValueChanged")) - return ax::mojom::Event::kMenuListValueChanged; - if (0 == strcmp(event, "menuPopupEnd")) - return ax::mojom::Event::kMenuPopupEnd; - if (0 == strcmp(event, "menuPopupStart")) - return ax::mojom::Event::kMenuPopupStart; - if (0 == strcmp(event, "menuStart")) - return ax::mojom::Event::kMenuStart; - if (0 == strcmp(event, "mouseCanceled")) - return ax::mojom::Event::kMouseCanceled; - if (0 == strcmp(event, "mouseDragged")) - return ax::mojom::Event::kMouseDragged; - if (0 == strcmp(event, "mouseMoved")) - return ax::mojom::Event::kMouseMoved; - if (0 == strcmp(event, "mousePressed")) - return ax::mojom::Event::kMousePressed; - if (0 == strcmp(event, "mouseReleased")) - return ax::mojom::Event::kMouseReleased; - if (0 == strcmp(event, "rowCollapsed")) - return ax::mojom::Event::kRowCollapsed; - if (0 == strcmp(event, "rowCountChanged")) - return ax::mojom::Event::kRowCountChanged; - if (0 == strcmp(event, "rowExpanded")) - return ax::mojom::Event::kRowExpanded; - if (0 == strcmp(event, "scrollPositionChanged")) - return ax::mojom::Event::kScrollPositionChanged; - if (0 == strcmp(event, "scrolledToAnchor")) - return ax::mojom::Event::kScrolledToAnchor; - if (0 == strcmp(event, "selectedChildrenChanged")) - return ax::mojom::Event::kSelectedChildrenChanged; - if (0 == strcmp(event, "selection")) - return ax::mojom::Event::kSelection; - if (0 == strcmp(event, "selectionAdd")) - return ax::mojom::Event::kSelectionAdd; - if (0 == strcmp(event, "selectionRemove")) - return ax::mojom::Event::kSelectionRemove; - if (0 == strcmp(event, "show")) - return ax::mojom::Event::kShow; - if (0 == strcmp(event, "stateChanged")) - return ax::mojom::Event::kStateChanged; - if (0 == strcmp(event, "textChanged")) - return ax::mojom::Event::kTextChanged; - if (0 == strcmp(event, "textSelectionChanged")) - return ax::mojom::Event::kTextSelectionChanged; - if (0 == strcmp(event, "tooltipClosed")) - return ax::mojom::Event::kTooltipClosed; - if (0 == strcmp(event, "tooltipOpened")) - return ax::mojom::Event::kTooltipOpened; - if (0 == strcmp(event, "windowActivated")) - return ax::mojom::Event::kWindowActivated; - if (0 == strcmp(event, "windowDeactivated")) - return ax::mojom::Event::kWindowDeactivated; - if (0 == strcmp(event, "windowVisibilityChanged")) - return ax::mojom::Event::kWindowVisibilityChanged; - if (0 == strcmp(event, "treeChanged")) - return ax::mojom::Event::kTreeChanged; - if (0 == strcmp(event, "valueChanged")) - return ax::mojom::Event::kValueChanged; - return ax::mojom::Event::kNone; -} - const char* ToString(ax::mojom::Role role) { switch (role) { case ax::mojom::Role::kNone: @@ -649,386 +523,6 @@ return ""; } -ax::mojom::Role ParseRole(const char* role) { - if (0 == strcmp(role, "none")) - return ax::mojom::Role::kNone; - if (0 == strcmp(role, "abbr")) - return ax::mojom::Role::kAbbr; - if (0 == strcmp(role, "alertDialog")) - return ax::mojom::Role::kAlertDialog; - if (0 == strcmp(role, "alert")) - return ax::mojom::Role::kAlert; - if (0 == strcmp(role, "anchor")) - return ax::mojom::Role::kAnchor; - if (0 == strcmp(role, "application")) - return ax::mojom::Role::kApplication; - if (0 == strcmp(role, "article")) - return ax::mojom::Role::kArticle; - if (0 == strcmp(role, "audio")) - return ax::mojom::Role::kAudio; - if (0 == strcmp(role, "banner")) - return ax::mojom::Role::kBanner; - if (0 == strcmp(role, "blockquote")) - return ax::mojom::Role::kBlockquote; - if (0 == strcmp(role, "button")) - return ax::mojom::Role::kButton; - if (0 == strcmp(role, "canvas")) - return ax::mojom::Role::kCanvas; - if (0 == strcmp(role, "caption")) - return ax::mojom::Role::kCaption; - if (0 == strcmp(role, "caret")) - return ax::mojom::Role::kCaret; - if (0 == strcmp(role, "cell")) - return ax::mojom::Role::kCell; - if (0 == strcmp(role, "checkBox")) - return ax::mojom::Role::kCheckBox; - if (0 == strcmp(role, "client")) - return ax::mojom::Role::kClient; - if (0 == strcmp(role, "code")) - return ax::mojom::Role::kCode; - if (0 == strcmp(role, "colorWell")) - return ax::mojom::Role::kColorWell; - if (0 == strcmp(role, "columnHeader")) - return ax::mojom::Role::kColumnHeader; - if (0 == strcmp(role, "column")) - return ax::mojom::Role::kColumn; - if (0 == strcmp(role, "comboBoxGrouping")) - return ax::mojom::Role::kComboBoxGrouping; - if (0 == strcmp(role, "comboBoxMenuButton")) - return ax::mojom::Role::kComboBoxMenuButton; - if (0 == strcmp(role, "comment")) - return ax::mojom::Role::kComment; - if (0 == strcmp(role, "complementary")) - return ax::mojom::Role::kComplementary; - if (0 == strcmp(role, "contentDeletion")) - return ax::mojom::Role::kContentDeletion; - if (0 == strcmp(role, "contentInsertion")) - return ax::mojom::Role::kContentInsertion; - if (0 == strcmp(role, "contentInfo")) - return ax::mojom::Role::kContentInfo; - if (0 == strcmp(role, "date")) - return ax::mojom::Role::kDate; - if (0 == strcmp(role, "dateTime")) - return ax::mojom::Role::kDateTime; - if (0 == strcmp(role, "definition")) - return ax::mojom::Role::kDefinition; - if (0 == strcmp(role, "descriptionListDetail")) - return ax::mojom::Role::kDescriptionListDetail; - if (0 == strcmp(role, "descriptionList")) - return ax::mojom::Role::kDescriptionList; - if (0 == strcmp(role, "descriptionListTerm")) - return ax::mojom::Role::kDescriptionListTerm; - if (0 == strcmp(role, "desktop")) - return ax::mojom::Role::kDesktop; - if (0 == strcmp(role, "details")) - return ax::mojom::Role::kDetails; - if (0 == strcmp(role, "dialog")) - return ax::mojom::Role::kDialog; - if (0 == strcmp(role, "directory")) - return ax::mojom::Role::kDirectory; - if (0 == strcmp(role, "disclosureTriangle")) - return ax::mojom::Role::kDisclosureTriangle; - if (0 == strcmp(role, "docAbstract")) - return ax::mojom::Role::kDocAbstract; - if (0 == strcmp(role, "docAcknowledgments")) - return ax::mojom::Role::kDocAcknowledgments; - if (0 == strcmp(role, "docAfterword")) - return ax::mojom::Role::kDocAfterword; - if (0 == strcmp(role, "docAppendix")) - return ax::mojom::Role::kDocAppendix; - if (0 == strcmp(role, "docBackLink")) - return ax::mojom::Role::kDocBackLink; - if (0 == strcmp(role, "docBiblioEntry")) - return ax::mojom::Role::kDocBiblioEntry; - if (0 == strcmp(role, "docBibliography")) - return ax::mojom::Role::kDocBibliography; - if (0 == strcmp(role, "docBiblioRef")) - return ax::mojom::Role::kDocBiblioRef; - if (0 == strcmp(role, "docChapter")) - return ax::mojom::Role::kDocChapter; - if (0 == strcmp(role, "docColophon")) - return ax::mojom::Role::kDocColophon; - if (0 == strcmp(role, "docConclusion")) - return ax::mojom::Role::kDocConclusion; - if (0 == strcmp(role, "docCover")) - return ax::mojom::Role::kDocCover; - if (0 == strcmp(role, "docCredit")) - return ax::mojom::Role::kDocCredit; - if (0 == strcmp(role, "docCredits")) - return ax::mojom::Role::kDocCredits; - if (0 == strcmp(role, "docDedication")) - return ax::mojom::Role::kDocDedication; - if (0 == strcmp(role, "docEndnote")) - return ax::mojom::Role::kDocEndnote; - if (0 == strcmp(role, "docEndnotes")) - return ax::mojom::Role::kDocEndnotes; - if (0 == strcmp(role, "docEpigraph")) - return ax::mojom::Role::kDocEpigraph; - if (0 == strcmp(role, "docEpilogue")) - return ax::mojom::Role::kDocEpilogue; - if (0 == strcmp(role, "docErrata")) - return ax::mojom::Role::kDocErrata; - if (0 == strcmp(role, "docExample")) - return ax::mojom::Role::kDocExample; - if (0 == strcmp(role, "docFootnote")) - return ax::mojom::Role::kDocFootnote; - if (0 == strcmp(role, "docForeword")) - return ax::mojom::Role::kDocForeword; - if (0 == strcmp(role, "docGlossary")) - return ax::mojom::Role::kDocGlossary; - if (0 == strcmp(role, "docGlossref")) - return ax::mojom::Role::kDocGlossRef; - if (0 == strcmp(role, "docIndex")) - return ax::mojom::Role::kDocIndex; - if (0 == strcmp(role, "docIntroduction")) - return ax::mojom::Role::kDocIntroduction; - if (0 == strcmp(role, "docNoteRef")) - return ax::mojom::Role::kDocNoteRef; - if (0 == strcmp(role, "docNotice")) - return ax::mojom::Role::kDocNotice; - if (0 == strcmp(role, "docPageBreak")) - return ax::mojom::Role::kDocPageBreak; - if (0 == strcmp(role, "docPageList")) - return ax::mojom::Role::kDocPageList; - if (0 == strcmp(role, "docPart")) - return ax::mojom::Role::kDocPart; - if (0 == strcmp(role, "docPreface")) - return ax::mojom::Role::kDocPreface; - if (0 == strcmp(role, "docPrologue")) - return ax::mojom::Role::kDocPrologue; - if (0 == strcmp(role, "docPullquote")) - return ax::mojom::Role::kDocPullquote; - if (0 == strcmp(role, "docQna")) - return ax::mojom::Role::kDocQna; - if (0 == strcmp(role, "docSubtitle")) - return ax::mojom::Role::kDocSubtitle; - if (0 == strcmp(role, "docTip")) - return ax::mojom::Role::kDocTip; - if (0 == strcmp(role, "docToc")) - return ax::mojom::Role::kDocToc; - if (0 == strcmp(role, "document")) - return ax::mojom::Role::kDocument; - if (0 == strcmp(role, "embeddedObject")) - return ax::mojom::Role::kEmbeddedObject; - if (0 == strcmp(role, "emphasis")) - return ax::mojom::Role::kEmphasis; - if (0 == strcmp(role, "feed")) - return ax::mojom::Role::kFeed; - if (0 == strcmp(role, "figcaption")) - return ax::mojom::Role::kFigcaption; - if (0 == strcmp(role, "figure")) - return ax::mojom::Role::kFigure; - if (0 == strcmp(role, "footer")) - return ax::mojom::Role::kFooter; - if (0 == strcmp(role, "footerAsNonLandmark")) - return ax::mojom::Role::kFooterAsNonLandmark; - if (0 == strcmp(role, "form")) - return ax::mojom::Role::kForm; - if (0 == strcmp(role, "genericContainer")) - return ax::mojom::Role::kGenericContainer; - if (0 == strcmp(role, "graphicsDocument")) - return ax::mojom::Role::kGraphicsDocument; - if (0 == strcmp(role, "graphicsObject")) - return ax::mojom::Role::kGraphicsObject; - if (0 == strcmp(role, "graphicsSymbol")) - return ax::mojom::Role::kGraphicsSymbol; - if (0 == strcmp(role, "grid")) - return ax::mojom::Role::kGrid; - if (0 == strcmp(role, "group")) - return ax::mojom::Role::kGroup; - if (0 == strcmp(role, "heading")) - return ax::mojom::Role::kHeading; - if (0 == strcmp(role, "header")) - return ax::mojom::Role::kHeader; - if (0 == strcmp(role, "headerAsNonLandmark")) - return ax::mojom::Role::kHeaderAsNonLandmark; - if (0 == strcmp(role, "pdfActionableHighlight")) - return ax::mojom::Role::kPdfActionableHighlight; - if (0 == strcmp(role, "iframe")) - return ax::mojom::Role::kIframe; - if (0 == strcmp(role, "iframePresentational")) - return ax::mojom::Role::kIframePresentational; - if (0 == strcmp(role, "ignored")) - return ax::mojom::Role::kIgnored; - if (0 == strcmp(role, "imageMap")) - return ax::mojom::Role::kImageMap; - if (0 == strcmp(role, "image")) - return ax::mojom::Role::kImage; - if (0 == strcmp(role, "imeCandidate")) - return ax::mojom::Role::kImeCandidate; - if (0 == strcmp(role, "inlineTextBox")) - return ax::mojom::Role::kInlineTextBox; - if (0 == strcmp(role, "inputTime")) - return ax::mojom::Role::kInputTime; - if (0 == strcmp(role, "keyboard")) - return ax::mojom::Role::kKeyboard; - if (0 == strcmp(role, "labelText")) - return ax::mojom::Role::kLabelText; - if (0 == strcmp(role, "layoutTable")) - return ax::mojom::Role::kLayoutTable; - if (0 == strcmp(role, "layoutTableCell")) - return ax::mojom::Role::kLayoutTableCell; - if (0 == strcmp(role, "layoutTableRow")) - return ax::mojom::Role::kLayoutTableRow; - if (0 == strcmp(role, "legend")) - return ax::mojom::Role::kLegend; - if (0 == strcmp(role, "lineBreak")) - return ax::mojom::Role::kLineBreak; - if (0 == strcmp(role, "link")) - return ax::mojom::Role::kLink; - if (0 == strcmp(role, "listBoxOption")) - return ax::mojom::Role::kListBoxOption; - if (0 == strcmp(role, "listBox")) - return ax::mojom::Role::kListBox; - if (0 == strcmp(role, "listGrid")) - return ax::mojom::Role::kListGrid; - if (0 == strcmp(role, "listItem")) - return ax::mojom::Role::kListItem; - if (0 == strcmp(role, "listMarker")) - return ax::mojom::Role::kListMarker; - if (0 == strcmp(role, "list")) - return ax::mojom::Role::kList; - if (0 == strcmp(role, "log")) - return ax::mojom::Role::kLog; - if (0 == strcmp(role, "main")) - return ax::mojom::Role::kMain; - if (0 == strcmp(role, "mark")) - return ax::mojom::Role::kMark; - if (0 == strcmp(role, "marquee")) - return ax::mojom::Role::kMarquee; - if (0 == strcmp(role, "math")) - return ax::mojom::Role::kMath; - if (0 == strcmp(role, "menu")) - return ax::mojom::Role::kMenu; - if (0 == strcmp(role, "menuBar")) - return ax::mojom::Role::kMenuBar; - if (0 == strcmp(role, "menuItem")) - return ax::mojom::Role::kMenuItem; - if (0 == strcmp(role, "menuItemCheckBox")) - return ax::mojom::Role::kMenuItemCheckBox; - if (0 == strcmp(role, "menuItemRadio")) - return ax::mojom::Role::kMenuItemRadio; - if (0 == strcmp(role, "menuListOption")) - return ax::mojom::Role::kMenuListOption; - if (0 == strcmp(role, "menuListPopup")) - return ax::mojom::Role::kMenuListPopup; - if (0 == strcmp(role, "meter")) - return ax::mojom::Role::kMeter; - if (0 == strcmp(role, "navigation")) - return ax::mojom::Role::kNavigation; - if (0 == strcmp(role, "note")) - return ax::mojom::Role::kNote; - if (0 == strcmp(role, "pane")) - return ax::mojom::Role::kPane; - if (0 == strcmp(role, "paragraph")) - return ax::mojom::Role::kParagraph; - if (0 == strcmp(role, "pluginObject")) - return ax::mojom::Role::kPluginObject; - if (0 == strcmp(role, "popUpButton")) - return ax::mojom::Role::kPopUpButton; - if (0 == strcmp(role, "portal")) - return ax::mojom::Role::kPortal; - if (0 == strcmp(role, "pre")) - return ax::mojom::Role::kPre; - if (0 == strcmp(role, "presentational")) - return ax::mojom::Role::kPresentational; - if (0 == strcmp(role, "progressIndicator")) - return ax::mojom::Role::kProgressIndicator; - if (0 == strcmp(role, "radioButton")) - return ax::mojom::Role::kRadioButton; - if (0 == strcmp(role, "radioGroup")) - return ax::mojom::Role::kRadioGroup; - if (0 == strcmp(role, "region")) - return ax::mojom::Role::kRegion; - if (0 == strcmp(role, "rootWebArea")) - return ax::mojom::Role::kRootWebArea; - if (0 == strcmp(role, "row")) - return ax::mojom::Role::kRow; - if (0 == strcmp(role, "rowGroup")) - return ax::mojom::Role::kRowGroup; - if (0 == strcmp(role, "rowHeader")) - return ax::mojom::Role::kRowHeader; - if (0 == strcmp(role, "ruby")) - return ax::mojom::Role::kRuby; - if (0 == strcmp(role, "rubyAnnotation")) - return ax::mojom::Role::kRubyAnnotation; - if (0 == strcmp(role, "section")) - return ax::mojom::Role::kSection; - if (0 == strcmp(role, "scrollBar")) - return ax::mojom::Role::kScrollBar; - if (0 == strcmp(role, "scrollView")) - return ax::mojom::Role::kScrollView; - if (0 == strcmp(role, "search")) - return ax::mojom::Role::kSearch; - if (0 == strcmp(role, "searchBox")) - return ax::mojom::Role::kSearchBox; - if (0 == strcmp(role, "slider")) - return ax::mojom::Role::kSlider; - if (0 == strcmp(role, "sliderThumb")) - return ax::mojom::Role::kSliderThumb; - if (0 == strcmp(role, "spinButton")) - return ax::mojom::Role::kSpinButton; - if (0 == strcmp(role, "splitter")) - return ax::mojom::Role::kSplitter; - if (0 == strcmp(role, "staticText")) - return ax::mojom::Role::kStaticText; - if (0 == strcmp(role, "status")) - return ax::mojom::Role::kStatus; - if (0 == strcmp(role, "suggestion")) - return ax::mojom::Role::kSuggestion; - if (0 == strcmp(role, "svgRoot")) - return ax::mojom::Role::kSvgRoot; - if (0 == strcmp(role, "switch")) - return ax::mojom::Role::kSwitch; - if (0 == strcmp(role, "strong")) - return ax::mojom::Role::kStrong; - if (0 == strcmp(role, "tabList")) - return ax::mojom::Role::kTabList; - if (0 == strcmp(role, "tabPanel")) - return ax::mojom::Role::kTabPanel; - if (0 == strcmp(role, "tab")) - return ax::mojom::Role::kTab; - if (0 == strcmp(role, "tableHeaderContainer")) - return ax::mojom::Role::kTableHeaderContainer; - if (0 == strcmp(role, "table")) - return ax::mojom::Role::kTable; - if (0 == strcmp(role, "term")) - return ax::mojom::Role::kTerm; - if (0 == strcmp(role, "textField")) - return ax::mojom::Role::kTextField; - if (0 == strcmp(role, "textFieldWithComboBox")) - return ax::mojom::Role::kTextFieldWithComboBox; - if (0 == strcmp(role, "time")) - return ax::mojom::Role::kTime; - if (0 == strcmp(role, "timer")) - return ax::mojom::Role::kTimer; - if (0 == strcmp(role, "titleBar")) - return ax::mojom::Role::kTitleBar; - if (0 == strcmp(role, "toggleButton")) - return ax::mojom::Role::kToggleButton; - if (0 == strcmp(role, "toolbar")) - return ax::mojom::Role::kToolbar; - if (0 == strcmp(role, "treeGrid")) - return ax::mojom::Role::kTreeGrid; - if (0 == strcmp(role, "treeItem")) - return ax::mojom::Role::kTreeItem; - if (0 == strcmp(role, "tree")) - return ax::mojom::Role::kTree; - if (0 == strcmp(role, "unknown")) - return ax::mojom::Role::kUnknown; - if (0 == strcmp(role, "tooltip")) - return ax::mojom::Role::kTooltip; - if (0 == strcmp(role, "video")) - return ax::mojom::Role::kVideo; - if (0 == strcmp(role, "webArea")) - return ax::mojom::Role::kWebArea; - if (0 == strcmp(role, "webView")) - return ax::mojom::Role::kWebView; - if (0 == strcmp(role, "window")) - return ax::mojom::Role::kWindow; - return ax::mojom::Role::kNone; -} - const char* ToString(ax::mojom::State state) { switch (state) { case ax::mojom::State::kNone: @@ -1074,48 +568,6 @@ return ""; } -ax::mojom::State ParseState(const char* state) { - if (0 == strcmp(state, "none")) - return ax::mojom::State::kNone; - if (0 == strcmp(state, "autofillAvailable")) - return ax::mojom::State::kAutofillAvailable; - if (0 == strcmp(state, "collapsed")) - return ax::mojom::State::kCollapsed; - if (0 == strcmp(state, "default")) - return ax::mojom::State::kDefault; - if (0 == strcmp(state, "editable")) - return ax::mojom::State::kEditable; - if (0 == strcmp(state, "expanded")) - return ax::mojom::State::kExpanded; - if (0 == strcmp(state, "focusable")) - return ax::mojom::State::kFocusable; - if (0 == strcmp(state, "horizontal")) - return ax::mojom::State::kHorizontal; - if (0 == strcmp(state, "hovered")) - return ax::mojom::State::kHovered; - if (0 == strcmp(state, "ignored")) - return ax::mojom::State::kIgnored; - if (0 == strcmp(state, "invisible")) - return ax::mojom::State::kInvisible; - if (0 == strcmp(state, "linked")) - return ax::mojom::State::kLinked; - if (0 == strcmp(state, "multiline")) - return ax::mojom::State::kMultiline; - if (0 == strcmp(state, "multiselectable")) - return ax::mojom::State::kMultiselectable; - if (0 == strcmp(state, "protected")) - return ax::mojom::State::kProtected; - if (0 == strcmp(state, "required")) - return ax::mojom::State::kRequired; - if (0 == strcmp(state, "richlyEditable")) - return ax::mojom::State::kRichlyEditable; - if (0 == strcmp(state, "vertical")) - return ax::mojom::State::kVertical; - if (0 == strcmp(state, "visited")) - return ax::mojom::State::kVisited; - return ax::mojom::State::kNone; -} - const char* ToString(ax::mojom::Action action) { switch (action) { case ax::mojom::Action::kNone: @@ -1191,78 +643,6 @@ return ""; } -ax::mojom::Action ParseAction(const char* action) { - if (0 == strcmp(action, "none")) - return ax::mojom::Action::kNone; - if (0 == strcmp(action, "annotatePageImages")) - return ax::mojom::Action::kAnnotatePageImages; - if (0 == strcmp(action, "blur")) - return ax::mojom::Action::kBlur; - if (0 == strcmp(action, "clearAccessibilityFocus")) - return ax::mojom::Action::kClearAccessibilityFocus; - if (0 == strcmp(action, "collapse")) - return ax::mojom::Action::kCollapse; - if (0 == strcmp(action, "customAction")) - return ax::mojom::Action::kCustomAction; - if (0 == strcmp(action, "decrement")) - return ax::mojom::Action::kDecrement; - if (0 == strcmp(action, "doDefault")) - return ax::mojom::Action::kDoDefault; - if (0 == strcmp(action, "expand")) - return ax::mojom::Action::kExpand; - if (0 == strcmp(action, "focus")) - return ax::mojom::Action::kFocus; - if (0 == strcmp(action, "getImageData")) - return ax::mojom::Action::kGetImageData; - if (0 == strcmp(action, "getTextLocation")) - return ax::mojom::Action::kGetTextLocation; - if (0 == strcmp(action, "hitTest")) - return ax::mojom::Action::kHitTest; - if (0 == strcmp(action, "increment")) - return ax::mojom::Action::kIncrement; - if (0 == strcmp(action, "loadInlineTextBoxes")) - return ax::mojom::Action::kLoadInlineTextBoxes; - if (0 == strcmp(action, "replaceSelectedText")) - return ax::mojom::Action::kReplaceSelectedText; - if (0 == strcmp(action, "scrollBackward")) - return ax::mojom::Action::kScrollBackward; - if (0 == strcmp(action, "scrollForward")) - return ax::mojom::Action::kScrollForward; - if (0 == strcmp(action, "scrollUp")) - return ax::mojom::Action::kScrollUp; - if (0 == strcmp(action, "scrollDown")) - return ax::mojom::Action::kScrollDown; - if (0 == strcmp(action, "scrollLeft")) - return ax::mojom::Action::kScrollLeft; - if (0 == strcmp(action, "scrollRight")) - return ax::mojom::Action::kScrollRight; - if (0 == strcmp(action, "scrollToMakeVisible")) - return ax::mojom::Action::kScrollToMakeVisible; - if (0 == strcmp(action, "scrollToPoint")) - return ax::mojom::Action::kScrollToPoint; - if (0 == strcmp(action, "setAccessibilityFocus")) - return ax::mojom::Action::kSetAccessibilityFocus; - if (0 == strcmp(action, "setScrollOffset")) - return ax::mojom::Action::kSetScrollOffset; - if (0 == strcmp(action, "setSelection")) - return ax::mojom::Action::kSetSelection; - if (0 == strcmp(action, "setSequentialFocusNavigationStartingPoint")) - return ax::mojom::Action::kSetSequentialFocusNavigationStartingPoint; - if (0 == strcmp(action, "setValue")) - return ax::mojom::Action::kSetValue; - if (0 == strcmp(action, "showContextMenu")) - return ax::mojom::Action::kShowContextMenu; - if (0 == strcmp(action, "signalEndOfTest")) - return ax::mojom::Action::kSignalEndOfTest; - if (0 == strcmp(action, "showTooltip")) - return ax::mojom::Action::kShowTooltip; - if (0 == strcmp(action, "hideTooltip")) - return ax::mojom::Action::kHideTooltip; - if (0 == strcmp(action, "internalInvalidateTree")) - return ax::mojom::Action::kInternalInvalidateTree; - return ax::mojom::Action::kNone; -} - const char* ToString(ax::mojom::ActionFlags action_flags) { switch (action_flags) { case ax::mojom::ActionFlags::kNone: @@ -1276,16 +656,6 @@ return ""; } -ax::mojom::ActionFlags ParseActionFlags(const char* action_flags) { - if (0 == strcmp(action_flags, "none")) - return ax::mojom::ActionFlags::kNone; - if (0 == strcmp(action_flags, "requestImages")) - return ax::mojom::ActionFlags::kRequestImages; - if (0 == strcmp(action_flags, "requestInlineTextBoxes")) - return ax::mojom::ActionFlags::kRequestInlineTextBoxes; - return ax::mojom::ActionFlags::kNone; -} - const char* ToString(ax::mojom::ScrollAlignment scroll_alignment) { switch (scroll_alignment) { case ax::mojom::ScrollAlignment::kNone: @@ -1305,24 +675,6 @@ } } -ax::mojom::ScrollAlignment ParseScrollAlignment(const char* scroll_alignment) { - if (0 == strcmp(scroll_alignment, "none")) - return ax::mojom::ScrollAlignment::kNone; - if (0 == strcmp(scroll_alignment, "scrollAlignmentCenter")) - return ax::mojom::ScrollAlignment::kScrollAlignmentCenter; - if (0 == strcmp(scroll_alignment, "scrollAlignmentTop")) - return ax::mojom::ScrollAlignment::kScrollAlignmentTop; - if (0 == strcmp(scroll_alignment, "scrollAlignmentBottom")) - return ax::mojom::ScrollAlignment::kScrollAlignmentBottom; - if (0 == strcmp(scroll_alignment, "scrollAlignmentLeft")) - return ax::mojom::ScrollAlignment::kScrollAlignmentLeft; - if (0 == strcmp(scroll_alignment, "scrollAlignmentRight")) - return ax::mojom::ScrollAlignment::kScrollAlignmentRight; - if (0 == strcmp(scroll_alignment, "scrollAlignmentClosestEdge")) - return ax::mojom::ScrollAlignment::kScrollAlignmentClosestEdge; - return ax::mojom::ScrollAlignment::kNone; -} - const char* ToString(ax::mojom::DefaultActionVerb default_action_verb) { switch (default_action_verb) { case ax::mojom::DefaultActionVerb::kNone: @@ -1379,33 +731,6 @@ return ""; } -ax::mojom::DefaultActionVerb ParseDefaultActionVerb( - const char* default_action_verb) { - if (0 == strcmp(default_action_verb, "none")) - return ax::mojom::DefaultActionVerb::kNone; - if (0 == strcmp(default_action_verb, "activate")) - return ax::mojom::DefaultActionVerb::kActivate; - if (0 == strcmp(default_action_verb, "check")) - return ax::mojom::DefaultActionVerb::kCheck; - if (0 == strcmp(default_action_verb, "click")) - return ax::mojom::DefaultActionVerb::kClick; - // Some screen readers, such as Jaws, expect the following spelling of this - // verb. - if (0 == strcmp(default_action_verb, "click-ancestor")) - return ax::mojom::DefaultActionVerb::kClickAncestor; - if (0 == strcmp(default_action_verb, "jump")) - return ax::mojom::DefaultActionVerb::kJump; - if (0 == strcmp(default_action_verb, "open")) - return ax::mojom::DefaultActionVerb::kOpen; - if (0 == strcmp(default_action_verb, "press")) - return ax::mojom::DefaultActionVerb::kPress; - if (0 == strcmp(default_action_verb, "select")) - return ax::mojom::DefaultActionVerb::kSelect; - if (0 == strcmp(default_action_verb, "uncheck")) - return ax::mojom::DefaultActionVerb::kUncheck; - return ax::mojom::DefaultActionVerb::kNone; -} - const char* ToString(ax::mojom::Mutation mutation) { switch (mutation) { case ax::mojom::Mutation::kNone: @@ -1423,20 +748,6 @@ return ""; } -ax::mojom::Mutation ParseMutation(const char* mutation) { - if (0 == strcmp(mutation, "none")) - return ax::mojom::Mutation::kNone; - if (0 == strcmp(mutation, "nodeCreated")) - return ax::mojom::Mutation::kNodeCreated; - if (0 == strcmp(mutation, "subtreeCreated")) - return ax::mojom::Mutation::kSubtreeCreated; - if (0 == strcmp(mutation, "nodeChanged")) - return ax::mojom::Mutation::kNodeChanged; - if (0 == strcmp(mutation, "nodeRemoved")) - return ax::mojom::Mutation::kNodeRemoved; - return ax::mojom::Mutation::kNone; -} - const char* ToString(ax::mojom::StringAttribute string_attribute) { switch (string_attribute) { case ax::mojom::StringAttribute::kNone: @@ -1498,64 +809,6 @@ return ""; } -ax::mojom::StringAttribute ParseStringAttribute(const char* string_attribute) { - if (0 == strcmp(string_attribute, "none")) - return ax::mojom::StringAttribute::kNone; - if (0 == strcmp(string_attribute, "accessKey")) - return ax::mojom::StringAttribute::kAccessKey; - if (0 == strcmp(string_attribute, "ariaInvalidValue")) - return ax::mojom::StringAttribute::kAriaInvalidValue; - if (0 == strcmp(string_attribute, "autoComplete")) - return ax::mojom::StringAttribute::kAutoComplete; - if (0 == strcmp(string_attribute, "childTreeId")) - return ax::mojom::StringAttribute::kChildTreeId; - if (0 == strcmp(string_attribute, "className")) - return ax::mojom::StringAttribute::kClassName; - if (0 == strcmp(string_attribute, "containerLiveRelevant")) - return ax::mojom::StringAttribute::kContainerLiveRelevant; - if (0 == strcmp(string_attribute, "containerLiveStatus")) - return ax::mojom::StringAttribute::kContainerLiveStatus; - if (0 == strcmp(string_attribute, "description")) - return ax::mojom::StringAttribute::kDescription; - if (0 == strcmp(string_attribute, "display")) - return ax::mojom::StringAttribute::kDisplay; - if (0 == strcmp(string_attribute, "fontFamily")) - return ax::mojom::StringAttribute::kFontFamily; - if (0 == strcmp(string_attribute, "htmlTag")) - return ax::mojom::StringAttribute::kHtmlTag; - if (0 == strcmp(string_attribute, "imageAnnotation")) - return ax::mojom::StringAttribute::kImageAnnotation; - if (0 == strcmp(string_attribute, "imageDataUrl")) - return ax::mojom::StringAttribute::kImageDataUrl; - if (0 == strcmp(string_attribute, "innerHtml")) - return ax::mojom::StringAttribute::kInnerHtml; - if (0 == strcmp(string_attribute, "inputType")) - return ax::mojom::StringAttribute::kInputType; - if (0 == strcmp(string_attribute, "keyShortcuts")) - return ax::mojom::StringAttribute::kKeyShortcuts; - if (0 == strcmp(string_attribute, "language")) - return ax::mojom::StringAttribute::kLanguage; - if (0 == strcmp(string_attribute, "name")) - return ax::mojom::StringAttribute::kName; - if (0 == strcmp(string_attribute, "liveRelevant")) - return ax::mojom::StringAttribute::kLiveRelevant; - if (0 == strcmp(string_attribute, "liveStatus")) - return ax::mojom::StringAttribute::kLiveStatus; - if (0 == strcmp(string_attribute, "placeholder")) - return ax::mojom::StringAttribute::kPlaceholder; - if (0 == strcmp(string_attribute, "role")) - return ax::mojom::StringAttribute::kRole; - if (0 == strcmp(string_attribute, "roleDescription")) - return ax::mojom::StringAttribute::kRoleDescription; - if (0 == strcmp(string_attribute, "tooltip")) - return ax::mojom::StringAttribute::kTooltip; - if (0 == strcmp(string_attribute, "url")) - return ax::mojom::StringAttribute::kUrl; - if (0 == strcmp(string_attribute, "value")) - return ax::mojom::StringAttribute::kValue; - return ax::mojom::StringAttribute::kNone; -} - const char* ToString(ax::mojom::IntAttribute int_attribute) { switch (int_attribute) { case ax::mojom::IntAttribute::kNone: @@ -1685,132 +938,6 @@ return ""; } -ax::mojom::IntAttribute ParseIntAttribute(const char* int_attribute) { - if (0 == strcmp(int_attribute, "none")) - return ax::mojom::IntAttribute::kNone; - if (0 == strcmp(int_attribute, "defaultActionVerb")) - return ax::mojom::IntAttribute::kDefaultActionVerb; - if (0 == strcmp(int_attribute, "dropeffect")) - return ax::mojom::IntAttribute::kDropeffect; - if (0 == strcmp(int_attribute, "scrollX")) - return ax::mojom::IntAttribute::kScrollX; - if (0 == strcmp(int_attribute, "scrollXMin")) - return ax::mojom::IntAttribute::kScrollXMin; - if (0 == strcmp(int_attribute, "scrollXMax")) - return ax::mojom::IntAttribute::kScrollXMax; - if (0 == strcmp(int_attribute, "scrollY")) - return ax::mojom::IntAttribute::kScrollY; - if (0 == strcmp(int_attribute, "scrollYMin")) - return ax::mojom::IntAttribute::kScrollYMin; - if (0 == strcmp(int_attribute, "scrollYMax")) - return ax::mojom::IntAttribute::kScrollYMax; - if (0 == strcmp(int_attribute, "textSelStart")) - return ax::mojom::IntAttribute::kTextSelStart; - if (0 == strcmp(int_attribute, "textSelEnd")) - return ax::mojom::IntAttribute::kTextSelEnd; - if (0 == strcmp(int_attribute, "ariaColumnCount")) - return ax::mojom::IntAttribute::kAriaColumnCount; - if (0 == strcmp(int_attribute, "ariaCellColumnIndex")) - return ax::mojom::IntAttribute::kAriaCellColumnIndex; - if (0 == strcmp(int_attribute, "ariaCellColumnSpan")) - return ax::mojom::IntAttribute::kAriaCellColumnSpan; - if (0 == strcmp(int_attribute, "ariaRowCount")) - return ax::mojom::IntAttribute::kAriaRowCount; - if (0 == strcmp(int_attribute, "ariaCellRowIndex")) - return ax::mojom::IntAttribute::kAriaCellRowIndex; - if (0 == strcmp(int_attribute, "ariaCellRowSpan")) - return ax::mojom::IntAttribute::kAriaCellRowSpan; - if (0 == strcmp(int_attribute, "tableRowCount")) - return ax::mojom::IntAttribute::kTableRowCount; - if (0 == strcmp(int_attribute, "tableColumnCount")) - return ax::mojom::IntAttribute::kTableColumnCount; - if (0 == strcmp(int_attribute, "tableHeaderId")) - return ax::mojom::IntAttribute::kTableHeaderId; - if (0 == strcmp(int_attribute, "tableRowIndex")) - return ax::mojom::IntAttribute::kTableRowIndex; - if (0 == strcmp(int_attribute, "tableRowHeaderId")) - return ax::mojom::IntAttribute::kTableRowHeaderId; - if (0 == strcmp(int_attribute, "tableColumnIndex")) - return ax::mojom::IntAttribute::kTableColumnIndex; - if (0 == strcmp(int_attribute, "tableColumnHeaderId")) - return ax::mojom::IntAttribute::kTableColumnHeaderId; - if (0 == strcmp(int_attribute, "tableCellColumnIndex")) - return ax::mojom::IntAttribute::kTableCellColumnIndex; - if (0 == strcmp(int_attribute, "tableCellColumnSpan")) - return ax::mojom::IntAttribute::kTableCellColumnSpan; - if (0 == strcmp(int_attribute, "tableCellRowIndex")) - return ax::mojom::IntAttribute::kTableCellRowIndex; - if (0 == strcmp(int_attribute, "tableCellRowSpan")) - return ax::mojom::IntAttribute::kTableCellRowSpan; - if (0 == strcmp(int_attribute, "sortDirection")) - return ax::mojom::IntAttribute::kSortDirection; - if (0 == strcmp(int_attribute, "hierarchicalLevel")) - return ax::mojom::IntAttribute::kHierarchicalLevel; - if (0 == strcmp(int_attribute, "nameFrom")) - return ax::mojom::IntAttribute::kNameFrom; - if (0 == strcmp(int_attribute, "descriptionFrom")) - return ax::mojom::IntAttribute::kDescriptionFrom; - if (0 == strcmp(int_attribute, "activedescendantId")) - return ax::mojom::IntAttribute::kActivedescendantId; - if (0 == strcmp(int_attribute, "errormessageId")) - return ax::mojom::IntAttribute::kErrormessageId; - if (0 == strcmp(int_attribute, "inPageLinkTargetId")) - return ax::mojom::IntAttribute::kInPageLinkTargetId; - if (0 == strcmp(int_attribute, "memberOfId")) - return ax::mojom::IntAttribute::kMemberOfId; - if (0 == strcmp(int_attribute, "nextOnLineId")) - return ax::mojom::IntAttribute::kNextOnLineId; - if (0 == strcmp(int_attribute, "popupForId")) - return ax::mojom::IntAttribute::kPopupForId; - if (0 == strcmp(int_attribute, "previousOnLineId")) - return ax::mojom::IntAttribute::kPreviousOnLineId; - if (0 == strcmp(int_attribute, "restriction")) - return ax::mojom::IntAttribute::kRestriction; - if (0 == strcmp(int_attribute, "setSize")) - return ax::mojom::IntAttribute::kSetSize; - if (0 == strcmp(int_attribute, "posInSet")) - return ax::mojom::IntAttribute::kPosInSet; - if (0 == strcmp(int_attribute, "colorValue")) - return ax::mojom::IntAttribute::kColorValue; - if (0 == strcmp(int_attribute, "ariaCurrentState")) - return ax::mojom::IntAttribute::kAriaCurrentState; - if (0 == strcmp(int_attribute, "backgroundColor")) - return ax::mojom::IntAttribute::kBackgroundColor; - if (0 == strcmp(int_attribute, "color")) - return ax::mojom::IntAttribute::kColor; - if (0 == strcmp(int_attribute, "haspopup")) - return ax::mojom::IntAttribute::kHasPopup; - if (0 == strcmp(int_attribute, "invalidState")) - return ax::mojom::IntAttribute::kInvalidState; - if (0 == strcmp(int_attribute, "checkedState")) - return ax::mojom::IntAttribute::kCheckedState; - if (0 == strcmp(int_attribute, "listStyle")) - return ax::mojom::IntAttribute::kListStyle; - if (0 == strcmp(int_attribute, "text-align")) - return ax::mojom::IntAttribute::kTextAlign; - if (0 == strcmp(int_attribute, "textDirection")) - return ax::mojom::IntAttribute::kTextDirection; - if (0 == strcmp(int_attribute, "textPosition")) - return ax::mojom::IntAttribute::kTextPosition; - if (0 == strcmp(int_attribute, "textStyle")) - return ax::mojom::IntAttribute::kTextStyle; - if (0 == strcmp(int_attribute, "textOverlineStyle")) - return ax::mojom::IntAttribute::kTextOverlineStyle; - if (0 == strcmp(int_attribute, "textStrikethroughStyle")) - return ax::mojom::IntAttribute::kTextStrikethroughStyle; - if (0 == strcmp(int_attribute, "textUnderlineStyle")) - return ax::mojom::IntAttribute::kTextUnderlineStyle; - if (0 == strcmp(int_attribute, "previousFocusId")) - return ax::mojom::IntAttribute::kPreviousFocusId; - if (0 == strcmp(int_attribute, "nextFocusId")) - return ax::mojom::IntAttribute::kNextFocusId; - if (0 == strcmp(int_attribute, "imageAnnotationStatus")) - return ax::mojom::IntAttribute::kImageAnnotationStatus; - if (0 == strcmp(int_attribute, "domNodeId")) - return ax::mojom::IntAttribute::kDOMNodeId; - return ax::mojom::IntAttribute::kNone; -} - const char* ToString(ax::mojom::FloatAttribute float_attribute) { switch (float_attribute) { case ax::mojom::FloatAttribute::kNone: @@ -1834,26 +961,6 @@ return ""; } -ax::mojom::FloatAttribute ParseFloatAttribute(const char* float_attribute) { - if (0 == strcmp(float_attribute, "none")) - return ax::mojom::FloatAttribute::kNone; - if (0 == strcmp(float_attribute, "valueForRange")) - return ax::mojom::FloatAttribute::kValueForRange; - if (0 == strcmp(float_attribute, "minValueForRange")) - return ax::mojom::FloatAttribute::kMinValueForRange; - if (0 == strcmp(float_attribute, "maxValueForRange")) - return ax::mojom::FloatAttribute::kMaxValueForRange; - if (0 == strcmp(float_attribute, "stepValueForRange")) - return ax::mojom::FloatAttribute::kStepValueForRange; - if (0 == strcmp(float_attribute, "fontSize")) - return ax::mojom::FloatAttribute::kFontSize; - if (0 == strcmp(float_attribute, "fontWeight")) - return ax::mojom::FloatAttribute::kFontWeight; - if (0 == strcmp(float_attribute, "textIndent")) - return ax::mojom::FloatAttribute::kTextIndent; - return ax::mojom::FloatAttribute::kNone; -} - const char* ToString(ax::mojom::BoolAttribute bool_attribute) { switch (bool_attribute) { case ax::mojom::BoolAttribute::kNone: @@ -1901,50 +1008,6 @@ return ""; } -ax::mojom::BoolAttribute ParseBoolAttribute(const char* bool_attribute) { - if (0 == strcmp(bool_attribute, "none")) - return ax::mojom::BoolAttribute::kNone; - if (0 == strcmp(bool_attribute, "busy")) - return ax::mojom::BoolAttribute::kBusy; - if (0 == strcmp(bool_attribute, "editableRoot")) - return ax::mojom::BoolAttribute::kEditableRoot; - if (0 == strcmp(bool_attribute, "containerLiveAtomic")) - return ax::mojom::BoolAttribute::kContainerLiveAtomic; - if (0 == strcmp(bool_attribute, "containerLiveBusy")) - return ax::mojom::BoolAttribute::kContainerLiveBusy; - if (0 == strcmp(bool_attribute, "grabbed")) - return ax::mojom::BoolAttribute::kGrabbed; - if (0 == strcmp(bool_attribute, "liveAtomic")) - return ax::mojom::BoolAttribute::kLiveAtomic; - if (0 == strcmp(bool_attribute, "modal")) - return ax::mojom::BoolAttribute::kModal; - if (0 == strcmp(bool_attribute, "updateLocationOnly")) - return ax::mojom::BoolAttribute::kUpdateLocationOnly; - if (0 == strcmp(bool_attribute, "canvasHasFallback")) - return ax::mojom::BoolAttribute::kCanvasHasFallback; - if (0 == strcmp(bool_attribute, "scrollable")) - return ax::mojom::BoolAttribute::kScrollable; - if (0 == strcmp(bool_attribute, "clickable")) - return ax::mojom::BoolAttribute::kClickable; - if (0 == strcmp(bool_attribute, "clipsChildren")) - return ax::mojom::BoolAttribute::kClipsChildren; - if (0 == strcmp(bool_attribute, "notUserSelectableStyle")) - return ax::mojom::BoolAttribute::kNotUserSelectableStyle; - if (0 == strcmp(bool_attribute, "selected")) - return ax::mojom::BoolAttribute::kSelected; - if (0 == strcmp(bool_attribute, "selectedFromFocus")) - return ax::mojom::BoolAttribute::kSelectedFromFocus; - if (0 == strcmp(bool_attribute, "supportsTextLocation")) - return ax::mojom::BoolAttribute::kSupportsTextLocation; - if (0 == strcmp(bool_attribute, "isLineBreakingObject")) - return ax::mojom::BoolAttribute::kIsLineBreakingObject; - if (0 == strcmp(bool_attribute, "isPageBreakingObject")) - return ax::mojom::BoolAttribute::kIsPageBreakingObject; - if (0 == strcmp(bool_attribute, "hasAriaAttribute")) - return ax::mojom::BoolAttribute::kHasAriaAttribute; - return ax::mojom::BoolAttribute::kNone; -} - const char* ToString(ax::mojom::IntListAttribute int_list_attribute) { switch (int_list_attribute) { case ax::mojom::IntListAttribute::kNone: @@ -1984,43 +1047,6 @@ return ""; } -ax::mojom::IntListAttribute ParseIntListAttribute( - const char* int_list_attribute) { - if (0 == strcmp(int_list_attribute, "none")) - return ax::mojom::IntListAttribute::kNone; - if (0 == strcmp(int_list_attribute, "indirectChildIds")) - return ax::mojom::IntListAttribute::kIndirectChildIds; - if (0 == strcmp(int_list_attribute, "controlsIds")) - return ax::mojom::IntListAttribute::kControlsIds; - if (0 == strcmp(int_list_attribute, "detailsIds")) - return ax::mojom::IntListAttribute::kDetailsIds; - if (0 == strcmp(int_list_attribute, "describedbyIds")) - return ax::mojom::IntListAttribute::kDescribedbyIds; - if (0 == strcmp(int_list_attribute, "flowtoIds")) - return ax::mojom::IntListAttribute::kFlowtoIds; - if (0 == strcmp(int_list_attribute, "labelledbyIds")) - return ax::mojom::IntListAttribute::kLabelledbyIds; - if (0 == strcmp(int_list_attribute, "radioGroupIds")) - return ax::mojom::IntListAttribute::kRadioGroupIds; - if (0 == strcmp(int_list_attribute, "markerTypes")) - return ax::mojom::IntListAttribute::kMarkerTypes; - if (0 == strcmp(int_list_attribute, "markerStarts")) - return ax::mojom::IntListAttribute::kMarkerStarts; - if (0 == strcmp(int_list_attribute, "markerEnds")) - return ax::mojom::IntListAttribute::kMarkerEnds; - if (0 == strcmp(int_list_attribute, "characterOffsets")) - return ax::mojom::IntListAttribute::kCharacterOffsets; - if (0 == strcmp(int_list_attribute, "cachedLineStarts")) - return ax::mojom::IntListAttribute::kCachedLineStarts; - if (0 == strcmp(int_list_attribute, "wordStarts")) - return ax::mojom::IntListAttribute::kWordStarts; - if (0 == strcmp(int_list_attribute, "wordEnds")) - return ax::mojom::IntListAttribute::kWordEnds; - if (0 == strcmp(int_list_attribute, "customActionIds")) - return ax::mojom::IntListAttribute::kCustomActionIds; - return ax::mojom::IntListAttribute::kNone; -} - const char* ToString(ax::mojom::StringListAttribute string_list_attribute) { switch (string_list_attribute) { case ax::mojom::StringListAttribute::kNone: @@ -2032,15 +1058,6 @@ return ""; } -ax::mojom::StringListAttribute ParseStringListAttribute( - const char* string_list_attribute) { - if (0 == strcmp(string_list_attribute, "none")) - return ax::mojom::StringListAttribute::kNone; - if (0 == strcmp(string_list_attribute, "customActionDescriptions")) - return ax::mojom::StringListAttribute::kCustomActionDescriptions; - return ax::mojom::StringListAttribute::kNone; -} - const char* ToString(ax::mojom::ListStyle list_style) { switch (list_style) { case ax::mojom::ListStyle::kNone: @@ -2062,24 +1079,6 @@ return ""; } -ax::mojom::ListStyle ParseListStyle(const char* list_style) { - if (0 == strcmp(list_style, "none")) - return ax::mojom::ListStyle::kNone; - if (0 == strcmp(list_style, "circle")) - return ax::mojom::ListStyle::kCircle; - if (0 == strcmp(list_style, "disc")) - return ax::mojom::ListStyle::kDisc; - if (0 == strcmp(list_style, "image")) - return ax::mojom::ListStyle::kImage; - if (0 == strcmp(list_style, "numeric")) - return ax::mojom::ListStyle::kNumeric; - if (0 == strcmp(list_style, "other")) - return ax::mojom::ListStyle::kOther; - if (0 == strcmp(list_style, "square")) - return ax::mojom::ListStyle::kSquare; - return ax::mojom::ListStyle::kNone; -} - const char* ToString(ax::mojom::MarkerType marker_type) { switch (marker_type) { case ax::mojom::MarkerType::kNone: @@ -2099,22 +1098,6 @@ return ""; } -ax::mojom::MarkerType ParseMarkerType(const char* marker_type) { - if (0 == strcmp(marker_type, "none")) - return ax::mojom::MarkerType::kNone; - if (0 == strcmp(marker_type, "spelling")) - return ax::mojom::MarkerType::kSpelling; - if (0 == strcmp(marker_type, "grammar")) - return ax::mojom::MarkerType::kGrammar; - if (0 == strcmp(marker_type, "textMatch")) - return ax::mojom::MarkerType::kTextMatch; - if (0 == strcmp(marker_type, "activeSuggestion")) - return ax::mojom::MarkerType::kActiveSuggestion; - if (0 == strcmp(marker_type, "suggestion")) - return ax::mojom::MarkerType::kSuggestion; - return ax::mojom::MarkerType::kNone; -} - const char* ToString(ax::mojom::MoveDirection move_direction) { switch (move_direction) { case ax::mojom::MoveDirection::kForward: @@ -2126,14 +1109,6 @@ return ""; } -ax::mojom::MoveDirection ParseMoveDirection(const char* move_direction) { - if (0 == strcmp(move_direction, "forward")) - return ax::mojom::MoveDirection::kForward; - if (0 == strcmp(move_direction, "backward")) - return ax::mojom::MoveDirection::kBackward; - return ax::mojom::MoveDirection::kForward; -} - const char* ToString(ax::mojom::Command command) { switch (command) { case ax::mojom::Command::kClearSelection: @@ -2167,38 +1142,6 @@ return ""; } -ax::mojom::Command ParseCommand(const char* command) { - if (0 == strcmp(command, "clearSelection")) - return ax::mojom::Command::kClearSelection; - if (0 == strcmp(command, "cut")) - return ax::mojom::Command::kCut; - if (0 == strcmp(command, "delete")) - return ax::mojom::Command::kDelete; - if (0 == strcmp(command, "dictate")) - return ax::mojom::Command::kDictate; - if (0 == strcmp(command, "extendSelection")) - return ax::mojom::Command::kExtendSelection; - if (0 == strcmp(command, "format")) - return ax::mojom::Command::kFormat; - if (0 == strcmp(command, "insert")) - return ax::mojom::Command::kInsert; - if (0 == strcmp(command, "marker")) - return ax::mojom::Command::kMarker; - if (0 == strcmp(command, "moveSelection")) - return ax::mojom::Command::kMoveSelection; - if (0 == strcmp(command, "paste")) - return ax::mojom::Command::kPaste; - if (0 == strcmp(command, "replace")) - return ax::mojom::Command::kReplace; - if (0 == strcmp(command, "setSelection")) - return ax::mojom::Command::kSetSelection; - if (0 == strcmp(command, "type")) - return ax::mojom::Command::kType; - - // Return the default command. - return ax::mojom::Command::kType; -} - const char* ToString(ax::mojom::TextBoundary text_boundary) { switch (text_boundary) { case ax::mojom::TextBoundary::kCharacter: @@ -2244,48 +1187,6 @@ return ""; } -ax::mojom::TextBoundary ParseTextBoundary(const char* text_boundary) { - if (0 == strcmp(text_boundary, "object")) - return ax::mojom::TextBoundary::kObject; - if (0 == strcmp(text_boundary, "character")) - return ax::mojom::TextBoundary::kCharacter; - if (0 == strcmp(text_boundary, "format")) - return ax::mojom::TextBoundary::kFormat; - if (0 == strcmp(text_boundary, "lineEnd")) - return ax::mojom::TextBoundary::kLineEnd; - if (0 == strcmp(text_boundary, "lineStart")) - return ax::mojom::TextBoundary::kLineStart; - if (0 == strcmp(text_boundary, "lineStartOrEnd")) - return ax::mojom::TextBoundary::kLineStartOrEnd; - if (0 == strcmp(text_boundary, "pageEnd")) - return ax::mojom::TextBoundary::kPageEnd; - if (0 == strcmp(text_boundary, "pageStart")) - return ax::mojom::TextBoundary::kPageStart; - if (0 == strcmp(text_boundary, "pageStartOrEnd")) - return ax::mojom::TextBoundary::kPageStartOrEnd; - if (0 == strcmp(text_boundary, "paragraphEnd")) - return ax::mojom::TextBoundary::kParagraphEnd; - if (0 == strcmp(text_boundary, "paragraphStart")) - return ax::mojom::TextBoundary::kParagraphStart; - if (0 == strcmp(text_boundary, "paragraphStartOrEnd")) - return ax::mojom::TextBoundary::kParagraphStartOrEnd; - if (0 == strcmp(text_boundary, "sentenceEnd")) - return ax::mojom::TextBoundary::kSentenceEnd; - if (0 == strcmp(text_boundary, "sentenceStart")) - return ax::mojom::TextBoundary::kSentenceStart; - if (0 == strcmp(text_boundary, "sentenceStartOrEnd")) - return ax::mojom::TextBoundary::kSentenceStartOrEnd; - if (0 == strcmp(text_boundary, "webPage")) - return ax::mojom::TextBoundary::kWebPage; - if (0 == strcmp(text_boundary, "wordEnd")) - return ax::mojom::TextBoundary::kWordEnd; - if (0 == strcmp(text_boundary, "wordStart")) - return ax::mojom::TextBoundary::kWordStart; - if (0 == strcmp(text_boundary, "wordStartOrEnd")) - return ax::mojom::TextBoundary::kWordStartOrEnd; - return ax::mojom::TextBoundary::kObject; -} - const char* ToString(ax::mojom::TextDecorationStyle text_decoration_style) { switch (text_decoration_style) { case ax::mojom::TextDecorationStyle::kNone: @@ -2305,23 +1206,6 @@ return ""; } -ax::mojom::TextDecorationStyle ParseTextDecorationStyle( - const char* text_decoration_style) { - if (0 == strcmp(text_decoration_style, "none")) - return ax::mojom::TextDecorationStyle::kNone; - if (0 == strcmp(text_decoration_style, "solid")) - return ax::mojom::TextDecorationStyle::kSolid; - if (0 == strcmp(text_decoration_style, "dashed")) - return ax::mojom::TextDecorationStyle::kDashed; - if (0 == strcmp(text_decoration_style, "dotted")) - return ax::mojom::TextDecorationStyle::kDotted; - if (0 == strcmp(text_decoration_style, "double")) - return ax::mojom::TextDecorationStyle::kDouble; - if (0 == strcmp(text_decoration_style, "wavy")) - return ax::mojom::TextDecorationStyle::kWavy; - return ax::mojom::TextDecorationStyle::kNone; -} - const char* ToString(ax::mojom::TextAlign text_align) { switch (text_align) { case ax::mojom::TextAlign::kNone: @@ -2339,20 +1223,6 @@ return ""; } -ax::mojom::TextAlign ParseTextAlign(const char* text_align) { - if (0 == strcmp(text_align, "none")) - return ax::mojom::TextAlign::kNone; - if (0 == strcmp(text_align, "left")) - return ax::mojom::TextAlign::kLeft; - if (0 == strcmp(text_align, "right")) - return ax::mojom::TextAlign::kRight; - if (0 == strcmp(text_align, "center")) - return ax::mojom::TextAlign::kCenter; - if (0 == strcmp(text_align, "justify")) - return ax::mojom::TextAlign::kJustify; - return ax::mojom::TextAlign::kNone; -} - const char* ToString(ax::mojom::WritingDirection text_direction) { switch (text_direction) { case ax::mojom::WritingDirection::kNone: @@ -2370,20 +1240,6 @@ return ""; } -ax::mojom::WritingDirection ParseTextDirection(const char* text_direction) { - if (0 == strcmp(text_direction, "none")) - return ax::mojom::WritingDirection::kNone; - if (0 == strcmp(text_direction, "ltr")) - return ax::mojom::WritingDirection::kLtr; - if (0 == strcmp(text_direction, "rtl")) - return ax::mojom::WritingDirection::kRtl; - if (0 == strcmp(text_direction, "ttb")) - return ax::mojom::WritingDirection::kTtb; - if (0 == strcmp(text_direction, "btt")) - return ax::mojom::WritingDirection::kBtt; - return ax::mojom::WritingDirection::kNone; -} - const char* ToString(ax::mojom::TextPosition text_position) { switch (text_position) { case ax::mojom::TextPosition::kNone: @@ -2397,16 +1253,6 @@ return ""; } -ax::mojom::TextPosition ParseTextPosition(const char* text_position) { - if (0 == strcmp(text_position, "none")) - return ax::mojom::TextPosition::kNone; - if (0 == strcmp(text_position, "subscript")) - return ax::mojom::TextPosition::kSubscript; - if (0 == strcmp(text_position, "superscript")) - return ax::mojom::TextPosition::kSuperscript; - return ax::mojom::TextPosition::kNone; -} - const char* ToString(ax::mojom::TextStyle text_style) { switch (text_style) { case ax::mojom::TextStyle::kNone: @@ -2426,22 +1272,6 @@ return ""; } -ax::mojom::TextStyle ParseTextStyle(const char* text_style) { - if (0 == strcmp(text_style, "none")) - return ax::mojom::TextStyle::kNone; - if (0 == strcmp(text_style, "bold")) - return ax::mojom::TextStyle::kBold; - if (0 == strcmp(text_style, "italic")) - return ax::mojom::TextStyle::kItalic; - if (0 == strcmp(text_style, "underline")) - return ax::mojom::TextStyle::kUnderline; - if (0 == strcmp(text_style, "lineThrough")) - return ax::mojom::TextStyle::kLineThrough; - if (0 == strcmp(text_style, "overline")) - return ax::mojom::TextStyle::kOverline; - return ax::mojom::TextStyle::kNone; -} - const char* ToString(ax::mojom::AriaCurrentState aria_current_state) { switch (aria_current_state) { case ax::mojom::AriaCurrentState::kNone: @@ -2467,29 +1297,6 @@ return ""; } -ax::mojom::AriaCurrentState ParseAriaCurrentState( - const char* aria_current_state) { - if (0 == strcmp(aria_current_state, "none")) - return ax::mojom::AriaCurrentState::kNone; - if (0 == strcmp(aria_current_state, "false")) - return ax::mojom::AriaCurrentState::kFalse; - if (0 == strcmp(aria_current_state, "true")) - return ax::mojom::AriaCurrentState::kTrue; - if (0 == strcmp(aria_current_state, "page")) - return ax::mojom::AriaCurrentState::kPage; - if (0 == strcmp(aria_current_state, "step")) - return ax::mojom::AriaCurrentState::kStep; - if (0 == strcmp(aria_current_state, "location")) - return ax::mojom::AriaCurrentState::kLocation; - if (0 == strcmp(aria_current_state, "unclippedLocation")) - return ax::mojom::AriaCurrentState::kUnclippedLocation; - if (0 == strcmp(aria_current_state, "date")) - return ax::mojom::AriaCurrentState::kDate; - if (0 == strcmp(aria_current_state, "time")) - return ax::mojom::AriaCurrentState::kTime; - return ax::mojom::AriaCurrentState::kNone; -} - const char* ToString(ax::mojom::HasPopup has_popup) { switch (has_popup) { case ax::mojom::HasPopup::kFalse: @@ -2511,23 +1318,6 @@ return ""; } -ax::mojom::HasPopup ParseHasPopup(const char* has_popup) { - if (0 == strcmp(has_popup, "true")) - return ax::mojom::HasPopup::kTrue; - if (0 == strcmp(has_popup, "menu")) - return ax::mojom::HasPopup::kMenu; - if (0 == strcmp(has_popup, "listbox")) - return ax::mojom::HasPopup::kListbox; - if (0 == strcmp(has_popup, "tree")) - return ax::mojom::HasPopup::kTree; - if (0 == strcmp(has_popup, "grid")) - return ax::mojom::HasPopup::kGrid; - if (0 == strcmp(has_popup, "dialog")) - return ax::mojom::HasPopup::kDialog; - - return ax::mojom::HasPopup::kFalse; -} - const char* ToString(ax::mojom::InvalidState invalid_state) { switch (invalid_state) { case ax::mojom::InvalidState::kNone: @@ -2543,18 +1333,6 @@ return ""; } -ax::mojom::InvalidState ParseInvalidState(const char* invalid_state) { - if (0 == strcmp(invalid_state, "none")) - return ax::mojom::InvalidState::kNone; - if (0 == strcmp(invalid_state, "false")) - return ax::mojom::InvalidState::kFalse; - if (0 == strcmp(invalid_state, "true")) - return ax::mojom::InvalidState::kTrue; - if (0 == strcmp(invalid_state, "other")) - return ax::mojom::InvalidState::kOther; - return ax::mojom::InvalidState::kNone; -} - const char* ToString(ax::mojom::Restriction restriction) { switch (restriction) { case ax::mojom::Restriction::kNone: @@ -2568,16 +1346,6 @@ return ""; } -ax::mojom::Restriction ParseRestriction(const char* restriction) { - if (0 == strcmp(restriction, "none")) - return ax::mojom::Restriction::kNone; - if (0 == strcmp(restriction, "readOnly")) - return ax::mojom::Restriction::kReadOnly; - if (0 == strcmp(restriction, "disabled")) - return ax::mojom::Restriction::kDisabled; - return ax::mojom::Restriction::kNone; -} - const char* ToString(ax::mojom::CheckedState checked_state) { switch (checked_state) { case ax::mojom::CheckedState::kNone: @@ -2593,18 +1361,6 @@ return ""; } -ax::mojom::CheckedState ParseCheckedState(const char* checked_state) { - if (0 == strcmp(checked_state, "none")) - return ax::mojom::CheckedState::kNone; - if (0 == strcmp(checked_state, "false")) - return ax::mojom::CheckedState::kFalse; - if (0 == strcmp(checked_state, "true")) - return ax::mojom::CheckedState::kTrue; - if (0 == strcmp(checked_state, "mixed")) - return ax::mojom::CheckedState::kMixed; - return ax::mojom::CheckedState::kNone; -} - const char* ToString(ax::mojom::SortDirection sort_direction) { switch (sort_direction) { case ax::mojom::SortDirection::kNone: @@ -2622,20 +1378,6 @@ return ""; } -ax::mojom::SortDirection ParseSortDirection(const char* sort_direction) { - if (0 == strcmp(sort_direction, "none")) - return ax::mojom::SortDirection::kNone; - if (0 == strcmp(sort_direction, "unsorted")) - return ax::mojom::SortDirection::kUnsorted; - if (0 == strcmp(sort_direction, "ascending")) - return ax::mojom::SortDirection::kAscending; - if (0 == strcmp(sort_direction, "descending")) - return ax::mojom::SortDirection::kDescending; - if (0 == strcmp(sort_direction, "other")) - return ax::mojom::SortDirection::kOther; - return ax::mojom::SortDirection::kNone; -} - const char* ToString(ax::mojom::NameFrom name_from) { switch (name_from) { case ax::mojom::NameFrom::kNone: @@ -2663,30 +1405,6 @@ return ""; } -ax::mojom::NameFrom ParseNameFrom(const char* name_from) { - if (0 == strcmp(name_from, "none")) - return ax::mojom::NameFrom::kNone; - if (0 == strcmp(name_from, "uninitialized")) - return ax::mojom::NameFrom::kUninitialized; - if (0 == strcmp(name_from, "attribute")) - return ax::mojom::NameFrom::kAttribute; - if (0 == strcmp(name_from, "attributeExplicitlyEmpty")) - return ax::mojom::NameFrom::kAttributeExplicitlyEmpty; - if (0 == strcmp(name_from, "caption")) - return ax::mojom::NameFrom::kCaption; - if (0 == strcmp(name_from, "contents")) - return ax::mojom::NameFrom::kContents; - if (0 == strcmp(name_from, "placeholder")) - return ax::mojom::NameFrom::kPlaceholder; - if (0 == strcmp(name_from, "relatedElement")) - return ax::mojom::NameFrom::kRelatedElement; - if (0 == strcmp(name_from, "title")) - return ax::mojom::NameFrom::kTitle; - if (0 == strcmp(name_from, "value")) - return ax::mojom::NameFrom::kValue; - return ax::mojom::NameFrom::kNone; -} - const char* ToString(ax::mojom::DescriptionFrom description_from) { switch (description_from) { case ax::mojom::DescriptionFrom::kNone: @@ -2706,22 +1424,6 @@ return ""; } -ax::mojom::DescriptionFrom ParseDescriptionFrom(const char* description_from) { - if (0 == strcmp(description_from, "none")) - return ax::mojom::DescriptionFrom::kNone; - if (0 == strcmp(description_from, "uninitialized")) - return ax::mojom::DescriptionFrom::kUninitialized; - if (0 == strcmp(description_from, "attribute")) - return ax::mojom::DescriptionFrom::kAttribute; - if (0 == strcmp(description_from, "contents")) - return ax::mojom::DescriptionFrom::kContents; - if (0 == strcmp(description_from, "relatedElement")) - return ax::mojom::DescriptionFrom::kRelatedElement; - if (0 == strcmp(description_from, "title")) - return ax::mojom::DescriptionFrom::kTitle; - return ax::mojom::DescriptionFrom::kNone; -} - const char* ToString(ax::mojom::EventFrom event_from) { switch (event_from) { case ax::mojom::EventFrom::kNone: @@ -2737,18 +1439,6 @@ return ""; } -ax::mojom::EventFrom ParseEventFrom(const char* event_from) { - if (0 == strcmp(event_from, "none")) - return ax::mojom::EventFrom::kNone; - if (0 == strcmp(event_from, "user")) - return ax::mojom::EventFrom::kUser; - if (0 == strcmp(event_from, "page")) - return ax::mojom::EventFrom::kPage; - if (0 == strcmp(event_from, "action")) - return ax::mojom::EventFrom::kAction; - return ax::mojom::EventFrom::kNone; -} - const char* ToString(ax::mojom::Gesture gesture) { switch (gesture) { case ax::mojom::Gesture::kNone: @@ -2800,54 +1490,6 @@ return ""; } -ax::mojom::Gesture ParseGesture(const char* gesture) { - if (0 == strcmp(gesture, "none")) - return ax::mojom::Gesture::kNone; - if (0 == strcmp(gesture, "click")) - return ax::mojom::Gesture::kClick; - if (0 == strcmp(gesture, "swipeLeft1")) - return ax::mojom::Gesture::kSwipeLeft1; - if (0 == strcmp(gesture, "swipeUp1")) - return ax::mojom::Gesture::kSwipeUp1; - if (0 == strcmp(gesture, "swipeRight1")) - return ax::mojom::Gesture::kSwipeRight1; - if (0 == strcmp(gesture, "swipeDown1")) - return ax::mojom::Gesture::kSwipeDown1; - if (0 == strcmp(gesture, "swipeLeft2")) - return ax::mojom::Gesture::kSwipeLeft2; - if (0 == strcmp(gesture, "swipeUp2")) - return ax::mojom::Gesture::kSwipeUp2; - if (0 == strcmp(gesture, "swipeRight2")) - return ax::mojom::Gesture::kSwipeRight2; - if (0 == strcmp(gesture, "swipeDown2")) - return ax::mojom::Gesture::kSwipeDown2; - if (0 == strcmp(gesture, "swipeLeft3")) - return ax::mojom::Gesture::kSwipeLeft3; - if (0 == strcmp(gesture, "swipeUp3")) - return ax::mojom::Gesture::kSwipeUp3; - if (0 == strcmp(gesture, "swipeRight3")) - return ax::mojom::Gesture::kSwipeRight3; - if (0 == strcmp(gesture, "swipeDown3")) - return ax::mojom::Gesture::kSwipeDown3; - if (0 == strcmp(gesture, "swipeLeft4")) - return ax::mojom::Gesture::kSwipeLeft4; - if (0 == strcmp(gesture, "swipeUp4")) - return ax::mojom::Gesture::kSwipeUp4; - if (0 == strcmp(gesture, "swipeRight4")) - return ax::mojom::Gesture::kSwipeRight4; - if (0 == strcmp(gesture, "swipeDown4")) - return ax::mojom::Gesture::kSwipeDown4; - if (0 == strcmp(gesture, "tap2")) - return ax::mojom::Gesture::kTap2; - if (0 == strcmp(gesture, "tap3")) - return ax::mojom::Gesture::kTap3; - if (0 == strcmp(gesture, "tap4")) - return ax::mojom::Gesture::kTap4; - if (0 == strcmp(gesture, "touchExplore")) - return ax::mojom::Gesture::kTouchExplore; - return ax::mojom::Gesture::kNone; -} - const char* ToString(ax::mojom::TextAffinity text_affinity) { switch (text_affinity) { case ax::mojom::TextAffinity::kNone: @@ -2861,16 +1503,6 @@ return ""; } -ax::mojom::TextAffinity ParseTextAffinity(const char* text_affinity) { - if (0 == strcmp(text_affinity, "none")) - return ax::mojom::TextAffinity::kNone; - if (0 == strcmp(text_affinity, "downstream")) - return ax::mojom::TextAffinity::kDownstream; - if (0 == strcmp(text_affinity, "upstream")) - return ax::mojom::TextAffinity::kUpstream; - return ax::mojom::TextAffinity::kNone; -} - const char* ToString(ax::mojom::TreeOrder tree_order) { switch (tree_order) { case ax::mojom::TreeOrder::kNone: @@ -2888,20 +1520,6 @@ return ""; } -ax::mojom::TreeOrder ParseTreeOrder(const char* tree_order) { - if (0 == strcmp(tree_order, "none")) - return ax::mojom::TreeOrder::kNone; - if (0 == strcmp(tree_order, "undefined")) - return ax::mojom::TreeOrder::kUndefined; - if (0 == strcmp(tree_order, "before")) - return ax::mojom::TreeOrder::kBefore; - if (0 == strcmp(tree_order, "equal")) - return ax::mojom::TreeOrder::kEqual; - if (0 == strcmp(tree_order, "after")) - return ax::mojom::TreeOrder::kAfter; - return ax::mojom::TreeOrder::kNone; -} - const char* ToString(ax::mojom::ImageAnnotationStatus status) { switch (status) { case ax::mojom::ImageAnnotationStatus::kNone: @@ -2929,32 +1547,6 @@ return ""; } -ax::mojom::ImageAnnotationStatus ParseImageAnnotationStatus( - const char* status) { - if (0 == strcmp(status, "none")) - return ax::mojom::ImageAnnotationStatus::kNone; - if (0 == strcmp(status, "kWillNotAnnotateDueToScheme")) - return ax::mojom::ImageAnnotationStatus::kWillNotAnnotateDueToScheme; - if (0 == strcmp(status, "ineligibleForAnnotation")) - return ax::mojom::ImageAnnotationStatus::kIneligibleForAnnotation; - if (0 == strcmp(status, "eligibleForAnnotation")) - return ax::mojom::ImageAnnotationStatus::kEligibleForAnnotation; - if (0 == strcmp(status, "silentlyEligibleForAnnotation")) - return ax::mojom::ImageAnnotationStatus::kSilentlyEligibleForAnnotation; - if (0 == strcmp(status, "annotationPending")) - return ax::mojom::ImageAnnotationStatus::kAnnotationPending; - if (0 == strcmp(status, "annotationSucceeded")) - return ax::mojom::ImageAnnotationStatus::kAnnotationSucceeded; - if (0 == strcmp(status, "annotationEmpty")) - return ax::mojom::ImageAnnotationStatus::kAnnotationEmpty; - if (0 == strcmp(status, "annotationAdult")) - return ax::mojom::ImageAnnotationStatus::kAnnotationAdult; - if (0 == strcmp(status, "annotationProcessFailed")) - return ax::mojom::ImageAnnotationStatus::kAnnotationProcessFailed; - - return ax::mojom::ImageAnnotationStatus::kNone; -} - const char* ToString(ax::mojom::Dropeffect dropeffect) { switch (dropeffect) { case ax::mojom::Dropeffect::kCopy: @@ -2974,18 +1566,4 @@ return ""; } -ax::mojom::Dropeffect ParseDropeffect(const char* dropeffect) { - if (0 == strcmp(dropeffect, "copy")) - return ax::mojom::Dropeffect::kCopy; - if (0 == strcmp(dropeffect, "execute")) - return ax::mojom::Dropeffect::kExecute; - if (0 == strcmp(dropeffect, "link")) - return ax::mojom::Dropeffect::kLink; - if (0 == strcmp(dropeffect, "move")) - return ax::mojom::Dropeffect::kMove; - if (0 == strcmp(dropeffect, "popup")) - return ax::mojom::Dropeffect::kPopup; - return ax::mojom::Dropeffect::kNone; -} - } // namespace ui
diff --git a/ui/accessibility/ax_enum_util.h b/ui/accessibility/ax_enum_util.h index 154a26e8..2c48f29 100644 --- a/ui/accessibility/ax_enum_util.h +++ b/ui/accessibility/ax_enum_util.h
@@ -5,8 +5,13 @@ #ifndef UI_ACCESSIBILITY_AX_ENUM_UTIL_H_ #define UI_ACCESSIBILITY_AX_ENUM_UTIL_H_ +#include <map> #include <string> +#include "base/logging.h" +#include "base/no_destructor.h" +#include "base/notreached.h" +#include "base/stl_util.h" #include "ui/accessibility/ax_base_export.h" #include "ui/accessibility/ax_enums.mojom-forward.h" @@ -14,24 +19,18 @@ // ax::mojom::Event AX_BASE_EXPORT const char* ToString(ax::mojom::Event event); -AX_BASE_EXPORT ax::mojom::Event ParseEvent(const char* event); // ax::mojom::Role AX_BASE_EXPORT const char* ToString(ax::mojom::Role role); -AX_BASE_EXPORT ax::mojom::Role ParseRole(const char* role); // ax::mojom::State AX_BASE_EXPORT const char* ToString(ax::mojom::State state); -AX_BASE_EXPORT ax::mojom::State ParseState(const char* state); // ax::mojom::Action AX_BASE_EXPORT const char* ToString(ax::mojom::Action action); -AX_BASE_EXPORT ax::mojom::Action ParseAction(const char* action); // ax::mojom::ActionFlags AX_BASE_EXPORT const char* ToString(ax::mojom::ActionFlags action_flags); -AX_BASE_EXPORT ax::mojom::ActionFlags ParseActionFlags( - const char* action_flags); // ax::mojom::DefaultActionVerb AX_BASE_EXPORT const char* ToString( @@ -41,156 +40,129 @@ AX_BASE_EXPORT std::string ToLocalizedString( ax::mojom::DefaultActionVerb action_verb); -AX_BASE_EXPORT ax::mojom::DefaultActionVerb ParseDefaultActionVerb( - const char* default_action_verb); - // ax::mojom::Mutation AX_BASE_EXPORT const char* ToString(ax::mojom::Mutation mutation); -AX_BASE_EXPORT ax::mojom::Mutation ParseMutation(const char* mutation); // ax::mojom::StringAttribute AX_BASE_EXPORT const char* ToString( ax::mojom::StringAttribute string_attribute); -AX_BASE_EXPORT ax::mojom::StringAttribute ParseStringAttribute( - const char* string_attribute); // ax::mojom::IntAttribute AX_BASE_EXPORT const char* ToString(ax::mojom::IntAttribute int_attribute); -AX_BASE_EXPORT ax::mojom::IntAttribute ParseIntAttribute( - const char* int_attribute); // ax::mojom::FloatAttribute AX_BASE_EXPORT const char* ToString(ax::mojom::FloatAttribute float_attribute); -AX_BASE_EXPORT ax::mojom::FloatAttribute ParseFloatAttribute( - const char* float_attribute); // ax::mojom::BoolAttribute AX_BASE_EXPORT const char* ToString(ax::mojom::BoolAttribute bool_attribute); -AX_BASE_EXPORT ax::mojom::BoolAttribute ParseBoolAttribute( - const char* bool_attribute); // ax::mojom::IntListAttribute AX_BASE_EXPORT const char* ToString( ax::mojom::IntListAttribute int_list_attribute); -AX_BASE_EXPORT ax::mojom::IntListAttribute ParseIntListAttribute( - const char* int_list_attribute); // ax::mojom::StringListAttribute AX_BASE_EXPORT const char* ToString( ax::mojom::StringListAttribute string_list_attribute); -AX_BASE_EXPORT ax::mojom::StringListAttribute ParseStringListAttribute( - const char* string_list_attribute); // ax::mojom::ListStyle AX_BASE_EXPORT const char* ToString(ax::mojom::ListStyle list_style); -AX_BASE_EXPORT ax::mojom::ListStyle ParseListStyle(const char* list_style); // ax::mojom::MarkerType AX_BASE_EXPORT const char* ToString(ax::mojom::MarkerType marker_type); -AX_BASE_EXPORT ax::mojom::MarkerType ParseMarkerType(const char* marker_type); // ax::mojom::MoveDirection AX_BASE_EXPORT const char* ToString(ax::mojom::MoveDirection move_direction); -AX_BASE_EXPORT ax::mojom::MoveDirection ParseMoveDirection( - const char* move_direction); // ax::mojom::Command AX_BASE_EXPORT const char* ToString(ax::mojom::Command command); -AX_BASE_EXPORT ax::mojom::Command ParseCommand(const char* command); // ax::mojom::TextBoundary AX_BASE_EXPORT const char* ToString(ax::mojom::TextBoundary text_boundary); -AX_BASE_EXPORT ax::mojom::TextBoundary ParseTextBoundary( - const char* text_boundary); // ax:mojom::TextDecorationStyle AX_BASE_EXPORT const char* ToString( ax::mojom::TextDecorationStyle text_decoration_style); -AX_BASE_EXPORT ax::mojom::TextDecorationStyle ParseTextDecorationStyle( - const char* text_decoration_style); // ax::mojom::TextAlign AX_BASE_EXPORT const char* ToString(ax::mojom::TextAlign text_align); -AX_BASE_EXPORT ax::mojom::TextAlign ParseTextAlign(const char* text_align); // ax::mojom::WritingDirection AX_BASE_EXPORT const char* ToString(ax::mojom::WritingDirection text_direction); -AX_BASE_EXPORT ax::mojom::WritingDirection ParseTextDirection( - const char* text_direction); // ax::mojom::TextPosition AX_BASE_EXPORT const char* ToString(ax::mojom::TextPosition text_position); -AX_BASE_EXPORT ax::mojom::TextPosition ParseTextPosition( - const char* text_position); // ax::mojom::TextStyle AX_BASE_EXPORT const char* ToString(ax::mojom::TextStyle text_style); -AX_BASE_EXPORT ax::mojom::TextStyle ParseTextStyle(const char* text_style); // ax::mojom::AriaCurrentState AX_BASE_EXPORT const char* ToString( ax::mojom::AriaCurrentState aria_current_state); -AX_BASE_EXPORT ax::mojom::AriaCurrentState ParseAriaCurrentState( - const char* aria_current_state); // ax::mojom::HasPopup AX_BASE_EXPORT const char* ToString(ax::mojom::HasPopup has_popup); -AX_BASE_EXPORT ax::mojom::HasPopup ParseHasPopup(const char* has_popup); // ax::mojom::InvalidState AX_BASE_EXPORT const char* ToString(ax::mojom::InvalidState invalid_state); -AX_BASE_EXPORT ax::mojom::InvalidState ParseInvalidState( - const char* invalid_state); // ax::mojom::Restriction AX_BASE_EXPORT const char* ToString(ax::mojom::Restriction restriction); -AX_BASE_EXPORT ax::mojom::Restriction ParseRestriction(const char* restriction); // ax::mojom::CheckedState AX_BASE_EXPORT const char* ToString(ax::mojom::CheckedState checked_state); -AX_BASE_EXPORT ax::mojom::CheckedState ParseCheckedState( - const char* checked_state); // ax::mojom::SortDirection AX_BASE_EXPORT const char* ToString(ax::mojom::SortDirection sort_direction); -AX_BASE_EXPORT ax::mojom::SortDirection ParseSortDirection( - const char* sort_direction); // ax::mojom::NameFrom AX_BASE_EXPORT const char* ToString(ax::mojom::NameFrom name_from); -AX_BASE_EXPORT ax::mojom::NameFrom ParseNameFrom(const char* name_from); // ax::mojom::DescriptionFrom AX_BASE_EXPORT const char* ToString( ax::mojom::DescriptionFrom description_from); -AX_BASE_EXPORT ax::mojom::DescriptionFrom ParseDescriptionFrom( - const char* description_from); // ax::mojom::EventFrom AX_BASE_EXPORT const char* ToString(ax::mojom::EventFrom event_from); -AX_BASE_EXPORT ax::mojom::EventFrom ParseEventFrom(const char* event_from); // ax::mojom::Gesture AX_BASE_EXPORT const char* ToString(ax::mojom::Gesture gesture); -AX_BASE_EXPORT ax::mojom::Gesture ParseGesture(const char* gesture); // ax::mojom::TextAffinity AX_BASE_EXPORT const char* ToString(ax::mojom::TextAffinity text_affinity); -AX_BASE_EXPORT ax::mojom::TextAffinity ParseTextAffinity( - const char* text_affinity); // ax::mojom::TreeOrder AX_BASE_EXPORT const char* ToString(ax::mojom::TreeOrder tree_order); -AX_BASE_EXPORT ax::mojom::TreeOrder ParseTreeOrder(const char* tree_order); // ax::mojom::ImageAnnotationStatus AX_BASE_EXPORT const char* ToString(ax::mojom::ImageAnnotationStatus status); -AX_BASE_EXPORT ax::mojom::ImageAnnotationStatus ParseImageAnnotationStatus( - const char* status); // ax::mojom::Dropeffect AX_BASE_EXPORT const char* ToString(ax::mojom::Dropeffect dropeffect); -AX_BASE_EXPORT ax::mojom::Dropeffect ParseDropeffect(const char* dropeffect); + +// Convert from the string representation of an enum defined in ax_enums.mojom +// into the enum value. The first time this is called, builds up a map. +// Relies on the existence of ui::ToString(enum). +template <typename T> +T ParseAXEnum(const char* attribute) { + static base::NoDestructor<std::map<std::string, T>> attr_map; + if (attr_map->empty()) { + (*attr_map)[""] = T::kNone; + for (int i = static_cast<int>(T::kMinValue); + i <= static_cast<int>(T::kMaxValue); i++) { + auto attr = static_cast<T>(i); + std::string str = ui::ToString(attr); + if (!base::Contains(*attr_map, str)) + (*attr_map)[str] = attr; + } + } + auto iter = attr_map->find(attribute); + if (iter != attr_map->end()) + return iter->second; + + LOG(ERROR) << "Could not parse: " << attribute; + NOTREACHED(); + return T::kNone; +} } // namespace ui
diff --git a/ui/accessibility/ax_enum_util_unittest.cc b/ui/accessibility/ax_enum_util_unittest.cc index b0b0c7d..49dc4b4 100644 --- a/ui/accessibility/ax_enum_util_unittest.cc +++ b/ui/accessibility/ax_enum_util_unittest.cc
@@ -16,24 +16,26 @@ // Templatized function that tests that for a mojom enum // such as ax::mojom::Role, ax::mojom::Event, etc. we can // call ToString() on the enum to get a string, and then -// ParseEnumName() on the string to get back the original +// ParseAXEnum() on the string to get back the original // value. Also tests what happens when we call ToString -// or ParseEnumName on a bogus value. +// or ParseAXEnum on a bogus value. template <typename T> void TestEnumStringConversion( - T(ParseFunction)(const char*), int32_t(step)(int32_t) = [](int32_t val) { return val + 1; }) { // Check every valid enum value. for (int i = static_cast<int>(T::kMinValue); i <= static_cast<int>(T::kMaxValue); i = step(i)) { T src = static_cast<T>(i); std::string str = ToString(src); - auto dst = ParseFunction(str.c_str()); + auto dst = ParseAXEnum<T>(str.c_str()); EXPECT_EQ(src, dst); } - // Parse a bogus string. - EXPECT_EQ(T::kNone, ParseFunction("bogus")); + // Trying to parse a bogus string should crash. + EXPECT_DEATH_IF_SUPPORTED(ParseAXEnum<T>("bogus"), "Check failed"); + + // Parse the empty string. + EXPECT_EQ(T::kNone, ParseAXEnum<T>("")); // Convert a bogus value to a string. int out_of_range_value = static_cast<int>(T::kMaxValue) + 1; @@ -71,74 +73,72 @@ } TEST(AXEnumUtilTest, Event) { - TestEnumStringConversion<ax::mojom::Event>(ParseEvent); + TestEnumStringConversion<ax::mojom::Event>(); } TEST(AXEnumUtilTest, Role) { - TestEnumStringConversion<ax::mojom::Role>(ParseRole); + TestEnumStringConversion<ax::mojom::Role>(); } TEST(AXEnumUtilTest, State) { - TestEnumStringConversion<ax::mojom::State>(ParseState); + TestEnumStringConversion<ax::mojom::State>(); } TEST(AXEnumUtilTest, Action) { - TestEnumStringConversion<ax::mojom::Action>(ParseAction); + TestEnumStringConversion<ax::mojom::Action>(); } TEST(AXEnumUtilTest, ActionFlags) { - TestEnumStringConversion<ax::mojom::ActionFlags>(ParseActionFlags); + TestEnumStringConversion<ax::mojom::ActionFlags>(); } TEST(AXEnumUtilTest, DefaultActionVerb) { - TestEnumStringConversion<ax::mojom::DefaultActionVerb>( - ParseDefaultActionVerb); + TestEnumStringConversion<ax::mojom::DefaultActionVerb>(); } TEST(AXEnumUtilTest, Mutation) { - TestEnumStringConversion<ax::mojom::Mutation>(ParseMutation); + TestEnumStringConversion<ax::mojom::Mutation>(); } TEST(AXEnumUtilTest, StringAttribute) { - TestEnumStringConversion<ax::mojom::StringAttribute>(ParseStringAttribute); + TestEnumStringConversion<ax::mojom::StringAttribute>(); TestAXNodeDataSetter<ax::mojom::StringAttribute>( &AXNodeData::AddStringAttribute, std::string()); } TEST(AXEnumUtilTest, IntAttribute) { - TestEnumStringConversion<ax::mojom::IntAttribute>(ParseIntAttribute); + TestEnumStringConversion<ax::mojom::IntAttribute>(); TestAXNodeDataSetter<ax::mojom::IntAttribute>(&AXNodeData::AddIntAttribute, 0); } TEST(AXEnumUtilTest, FloatAttribute) { - TestEnumStringConversion<ax::mojom::FloatAttribute>(ParseFloatAttribute); + TestEnumStringConversion<ax::mojom::FloatAttribute>(); TestAXNodeDataSetter<ax::mojom::FloatAttribute>( &AXNodeData::AddFloatAttribute, 0.0f); } TEST(AXEnumUtilTest, BoolAttribute) { - TestEnumStringConversion<ax::mojom::BoolAttribute>(ParseBoolAttribute); + TestEnumStringConversion<ax::mojom::BoolAttribute>(); TestAXNodeDataSetter<ax::mojom::BoolAttribute>(&AXNodeData::AddBoolAttribute, false); } TEST(AXEnumUtilTest, IntListAttribute) { - TestEnumStringConversion<ax::mojom::IntListAttribute>(ParseIntListAttribute); + TestEnumStringConversion<ax::mojom::IntListAttribute>(); TestAXNodeDataSetter<ax::mojom::IntListAttribute>( &AXNodeData::AddIntListAttribute, std::vector<int32_t>()); } TEST(AXEnumUtilTest, StringListAttribute) { - TestEnumStringConversion<ax::mojom::StringListAttribute>( - ParseStringListAttribute); + TestEnumStringConversion<ax::mojom::StringListAttribute>(); TestAXNodeDataSetter<ax::mojom::StringListAttribute>( &AXNodeData::AddStringListAttribute, std::vector<std::string>()); } TEST(AXEnumUtilTest, MarkerType) { TestEnumStringConversion<ax::mojom::MarkerType>( - ParseMarkerType, [](int32_t val) { + [](int32_t val) { return val == 0 ? 1 : // 8 (Composition) is // explicitly skipped in @@ -148,97 +148,95 @@ } TEST(AXEnumUtilTest, Text_Decoration_Style) { - TestEnumStringConversion<ax::mojom::TextDecorationStyle>( - ParseTextDecorationStyle); + TestEnumStringConversion<ax::mojom::TextDecorationStyle>(); } TEST(AXEnumUtilTest, ListStyle) { - TestEnumStringConversion<ax::mojom::ListStyle>(ParseListStyle); + TestEnumStringConversion<ax::mojom::ListStyle>(); } TEST(AXEnumUtilTest, MoveDirection) { - TestEnumStringConversion<ax::mojom::MoveDirection>(ParseMoveDirection); + TestEnumStringConversion<ax::mojom::MoveDirection>(); } TEST(AXEnumUtilTest, Command) { - TestEnumStringConversion<ax::mojom::Command>(ParseCommand); + TestEnumStringConversion<ax::mojom::Command>(); } TEST(AXEnumUtilTest, TextAlign) { - TestEnumStringConversion<ax::mojom::TextAlign>(ParseTextAlign); + TestEnumStringConversion<ax::mojom::TextAlign>(); } TEST(AXEnumUtilTest, TextBoundary) { - TestEnumStringConversion<ax::mojom::TextBoundary>(ParseTextBoundary); + TestEnumStringConversion<ax::mojom::TextBoundary>(); } TEST(AXEnumUtilTest, TextDirection) { - TestEnumStringConversion<ax::mojom::WritingDirection>(ParseTextDirection); + TestEnumStringConversion<ax::mojom::WritingDirection>(); } TEST(AXEnumUtilTest, TextPosition) { - TestEnumStringConversion<ax::mojom::TextPosition>(ParseTextPosition); + TestEnumStringConversion<ax::mojom::TextPosition>(); } TEST(AXEnumUtilTest, TextStyle) { - TestEnumStringConversion<ax::mojom::TextStyle>(ParseTextStyle); + TestEnumStringConversion<ax::mojom::TextStyle>(); } TEST(AXEnumUtilTest, AriaCurrentState) { - TestEnumStringConversion<ax::mojom::AriaCurrentState>(ParseAriaCurrentState); + TestEnumStringConversion<ax::mojom::AriaCurrentState>(); } TEST(AXEnumUtilTest, HasPopup) { - TestEnumStringConversion<ax::mojom::HasPopup>(ParseHasPopup); + TestEnumStringConversion<ax::mojom::HasPopup>(); } TEST(AXEnumUtilTest, InvalidState) { - TestEnumStringConversion<ax::mojom::InvalidState>(ParseInvalidState); + TestEnumStringConversion<ax::mojom::InvalidState>(); } TEST(AXEnumUtilTest, Restriction) { - TestEnumStringConversion<ax::mojom::Restriction>(ParseRestriction); + TestEnumStringConversion<ax::mojom::Restriction>(); } TEST(AXEnumUtilTest, CheckedState) { - TestEnumStringConversion<ax::mojom::CheckedState>(ParseCheckedState); + TestEnumStringConversion<ax::mojom::CheckedState>(); } TEST(AXEnumUtilTest, SortDirection) { - TestEnumStringConversion<ax::mojom::SortDirection>(ParseSortDirection); + TestEnumStringConversion<ax::mojom::SortDirection>(); } TEST(AXEnumUtilTest, NameFrom) { - TestEnumStringConversion<ax::mojom::NameFrom>(ParseNameFrom); + TestEnumStringConversion<ax::mojom::NameFrom>(); } TEST(AXEnumUtilTest, DescriptionFrom) { - TestEnumStringConversion<ax::mojom::DescriptionFrom>(ParseDescriptionFrom); + TestEnumStringConversion<ax::mojom::DescriptionFrom>(); } TEST(AXEnumUtilTest, EventFrom) { - TestEnumStringConversion<ax::mojom::EventFrom>(ParseEventFrom); + TestEnumStringConversion<ax::mojom::EventFrom>(); } TEST(AXEnumUtilTest, Gesture) { - TestEnumStringConversion<ax::mojom::Gesture>(ParseGesture); + TestEnumStringConversion<ax::mojom::Gesture>(); } TEST(AXEnumUtilTest, TextAffinity) { - TestEnumStringConversion<ax::mojom::TextAffinity>(ParseTextAffinity); + TestEnumStringConversion<ax::mojom::TextAffinity>(); } TEST(AXEnumUtilTest, TreeOrder) { - TestEnumStringConversion<ax::mojom::TreeOrder>(ParseTreeOrder); + TestEnumStringConversion<ax::mojom::TreeOrder>(); } TEST(AXEnumUtilTest, ImageAnnotationStatus) { - TestEnumStringConversion<ax::mojom::ImageAnnotationStatus>( - ParseImageAnnotationStatus); + TestEnumStringConversion<ax::mojom::ImageAnnotationStatus>(); } TEST(AXEnumUtilTest, Dropeffect) { - TestEnumStringConversion<ax::mojom::Dropeffect>(ParseDropeffect); + TestEnumStringConversion<ax::mojom::Dropeffect>(); } } // namespace ui
diff --git a/ui/chromeos/file_manager_strings.grdp b/ui/chromeos/file_manager_strings.grdp index d6604b6..3e60d3e 100644 --- a/ui/chromeos/file_manager_strings.grdp +++ b/ui/chromeos/file_manager_strings.grdp
@@ -282,6 +282,9 @@ <message name="IDS_FILE_BROWSER_FORMAT_DEVICE_BUTTON_LABEL" desc="Title of the action for formatting removable device."> Format device </message> + <message name="IDS_FILE_BROWSER_REPARTITION_DEVICE_BUTTON_LABEL" desc="Title of the action for repartitioning removable device."> + Format device + </message> <message name="IDS_FILE_BROWSER_CONFIGURE_VOLUME_BUTTON_LABEL" desc="Title of the action for configuring the selected volume."> Configure </message> @@ -967,9 +970,17 @@ <message name="IDS_FILE_BROWSER_FORMAT_DIALOG_TITLE" desc="Title of the format USB drive dialog."> Format <ph name="DRIVE_NAME">$1<ex>Untitled USB</ex></ph> </message> + <!-- TODO (crbug/1129692): Clean up after SinglePartitionFormat launch. --> <message name="IDS_FILE_BROWSER_FORMAT_DIALOG_MESSAGE" desc="Advisory message shown before formatting a USB drive."> Formatting a drive will delete all data stored on it. This action cannot be undone. </message> + <message name="IDS_FILE_BROWSER_FORMAT_PARTITION_DIALOG_MESSAGE" desc="Advisory message shown before formatting a USB partition."> + Formatting a partition will erase all data stored on it. This action cannot be undone. + </message> + <!-- TODO END --> + <message name="IDS_FILE_BROWSER_REPARTITION_DIALOG_MESSAGE" desc="Advisory message shown before formatting a USB drive."> + Formatting a drive will erase all data stored on it and remove all existing partitions, including partitions that may not be visible. This action cannot be undone. + </message> <message name="IDS_FILE_BROWSER_FORMAT_DIALOG_DELETE_WARNING" desc="Advisory message shown before formatting a USB drive that contains files."> <ph name="TOTAL_FILE_SIZE">$1<ex>38.3 MB</ex></ph> of files will be deleted </message> @@ -979,10 +990,17 @@ <message name="IDS_FILE_BROWSER_FORMAT_DIALOG_FORMAT_LABEL" desc="Label for the format filesystem selector"> Format </message> + <!-- TODO (crbug/1129692): Clean up after SinglePartitionFormat launch. --> <message name="IDS_FILE_BROWSER_FORMAT_DIALOG_CONFIRM_LABEL" desc="Label for the confirm button"> Erase and Format </message> - + <message name="IDS_FILE_BROWSER_FORMAT_DIALOG_CONFIRM_SHORT_LABEL" desc="Label for the confirm button"> + Format + </message> + <!-- TODO END --> + <message name="IDS_FILE_BROWSER_REPARTITION_DIALOG_CONFIRM_LABEL" desc="Label for the confirm button"> + Format + </message> <message name="IDS_FILE_BROWSER_FORMAT_PROGRESS_MESSAGE" desc="Notification message displayed while formatting an external drive"> Formatting <ph name="DRIVE_NAME">$1<ex>My USB</ex></ph>... </message> @@ -1505,6 +1523,14 @@ More sub-folders... </message> +<!-- Holding space --> + <message name="IDS_FILE_BROWSER_HOLDING_SPACE_PIN_TO_SHELF_COMMAND_LABEL" desc="Label for the command which pins one or more files to the holding space in the shelf."> + Pin to shelf + </message> + <message name="IDS_FILE_BROWSER_HOLDING_SPACE_UNPIN_FROM_SHELF_COMMAND_LABEL" desc="Label for the command which unpins one or more files from the holding space in the shelf."> + Unpin from shelf + </message> + <!-- Common for Audio player and Media player --> <message name="IDS_MEDIA_PLAYER_PLAY_BUTTON_LABEL" desc="Label for the Play button of media players (audio player / video player)."> Play
diff --git a/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_FORMAT_DIALOG_CONFIRM_SHORT_LABEL.png.sha1 b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_FORMAT_DIALOG_CONFIRM_SHORT_LABEL.png.sha1 new file mode 100644 index 0000000..01d0c2b --- /dev/null +++ b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_FORMAT_DIALOG_CONFIRM_SHORT_LABEL.png.sha1
@@ -0,0 +1 @@ +855f89d6bfea4e770be6bce1ab16a852dec0ff88 \ No newline at end of file
diff --git a/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_FORMAT_PARTITION_DIALOG_MESSAGE.png.sha1 b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_FORMAT_PARTITION_DIALOG_MESSAGE.png.sha1 new file mode 100644 index 0000000..1dab426 --- /dev/null +++ b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_FORMAT_PARTITION_DIALOG_MESSAGE.png.sha1
@@ -0,0 +1 @@ +714ece9a5539651427c85b4558db36035b8971ff \ No newline at end of file
diff --git a/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_HOLDING_SPACE_PIN_TO_SHELF_COMMAND_LABEL.png.sha1 b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_HOLDING_SPACE_PIN_TO_SHELF_COMMAND_LABEL.png.sha1 new file mode 100644 index 0000000..f9fd6fb7 --- /dev/null +++ b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_HOLDING_SPACE_PIN_TO_SHELF_COMMAND_LABEL.png.sha1
@@ -0,0 +1 @@ +181fed33b616724b577baae4bb348b49cff99d64 \ No newline at end of file
diff --git a/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_HOLDING_SPACE_UNPIN_FROM_SHELF_COMMAND_LABEL.png.sha1 b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_HOLDING_SPACE_UNPIN_FROM_SHELF_COMMAND_LABEL.png.sha1 new file mode 100644 index 0000000..55263c9 --- /dev/null +++ b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_HOLDING_SPACE_UNPIN_FROM_SHELF_COMMAND_LABEL.png.sha1
@@ -0,0 +1 @@ +e4ca1df9d0d4be011790d89df27a6e9ab58a5698 \ No newline at end of file
diff --git a/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_REPARTITION_DEVICE_BUTTON_LABEL.png.sha1 b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_REPARTITION_DEVICE_BUTTON_LABEL.png.sha1 new file mode 100644 index 0000000..51c7fbf --- /dev/null +++ b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_REPARTITION_DEVICE_BUTTON_LABEL.png.sha1
@@ -0,0 +1 @@ +6c29f496e0668f03cec2d93378fcfec5835c8286 \ No newline at end of file
diff --git a/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_REPARTITION_DIALOG_CONFIRM_LABEL.png.sha1 b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_REPARTITION_DIALOG_CONFIRM_LABEL.png.sha1 new file mode 100644 index 0000000..89148f5 --- /dev/null +++ b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_REPARTITION_DIALOG_CONFIRM_LABEL.png.sha1
@@ -0,0 +1 @@ +64cbe33a78e5ce43a4948f80e99e965409f523d1 \ No newline at end of file
diff --git a/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_REPARTITION_DIALOG_MESSAGE.png.sha1 b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_REPARTITION_DIALOG_MESSAGE.png.sha1 new file mode 100644 index 0000000..a7e135ca --- /dev/null +++ b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_REPARTITION_DIALOG_MESSAGE.png.sha1
@@ -0,0 +1 @@ +fab0f4fd70ba3d1f4210fee05ed78ff447ec9092 \ No newline at end of file
diff --git a/ui/chromeos/translations/ui_chromeos_strings_af.xtb b/ui/chromeos/translations/ui_chromeos_strings_af.xtb index fea63ad..9e314a1 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_af.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_af.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Weens sekuriteitsredes kon daar nie by die lêer ingegaan word nie.</translation> <translation id="169515659049020177">Skuifsleutel</translation> <translation id="1722487484194605434">Kompakteer tans <ph name="NUMBER_OF_ITEMS" /> items …</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> items is gekopieer.</translation> <translation id="174173592514158117">Wys alle Play-vouers</translation> <translation id="174937106936716857">Totale aantal lêers</translation> <translation id="1775381402323441512">Video-inligting</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Ongeldige karakter: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Viëtnamese sleutelbord (TCVN)</translation> <translation id="2168214441502403371">Persiese sleutelbord</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> is geskuif.</translation> <translation id="2198315389084035571">Vereenvoudigde Chinees</translation> <translation id="2208158072373999562">Zip-argief</translation> <translation id="2225536596944493418">Is jy seker jy wil <ph name="NUMBER_OF_ITEMS" /> items uitvee?</translation> <translation id="2230062665678605299">Kon nie vouer "<ph name="FOLDER_NAME" />" skep nie. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Geskuif.</translation> <translation id="2278988676849463018">Kannada-sleutelbord (foneties)</translation> <translation id="2288278176040912387">Platespeler</translation> <translation id="2291538123825441971">Maak tans <ph name="NUMBER_OF_FILES" /> lêers oop.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Alles is gerugsteun!</translation> <translation id="3626281679859535460">Helderheid</translation> <translation id="3644896802912593514">Breedte</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> items is geskuif.</translation> <translation id="3645531960514756307">Ontspeld vouer</translation> <translation id="3678559383040232393">Maltese sleutelbord</translation> <translation id="3685122418104378273">Google Drive-sinkronisering is by verstek afgeskakel wanneer dit mobiele data gebruik.</translation> @@ -395,6 +399,7 @@ Maak nie saak wat met jou toestel gebeur nie, jou lêers is veilig geberg in Google Drive.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Deel, skep en werk saam met ander<ph name="MARKUP_8" /> aan lêers op een plek.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Gekopieer.</translation> <translation id="5275973617553375938">Het lêers van Google Drive herwin</translation> <translation id="5317780077021120954">Berg</translation> <translation id="5318819489018851358">Deel met Linux</translation> @@ -593,6 +598,7 @@ <translation id="751507702149411736">Wit Russies</translation> <translation id="7544853251252956727">Skommel</translation> <translation id="7547811415869834682">Nederlands</translation> +<translation id="7551643184018910560">Speld aan rak vas</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Wag net 'n oomblik</translation> <translation id="7603724359189955920">Roosters</translation> @@ -676,6 +682,7 @@ <translation id="8299269255470343364">Japannees</translation> <translation id="8312871300878166382">Plak in vouer</translation> <translation id="8329978297633540474">Gewone teks</translation> +<translation id="8335587457941836791">Ontspeld van rak af</translation> <translation id="8336153091935557858">Gister <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Yslandse sleutelbord</translation> <translation id="8342318071240498787">'n Lêer of gids met dieselfde naam bestaan reeds.</translation> @@ -748,6 +755,7 @@ <translation id="943972244133411984">Gewysig deur</translation> <translation id="945522503751344254">Stuur terugvoer</translation> <translation id="947144732524271678">Kies 'n reeks van <ph name="ENTRY_COUNT" /> inskrywings van <ph name="FROM_ENTRY_NAME" /> tot <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> is gekopieer.</translation> <translation id="981121421437150478">Vanlyn</translation> <translation id="988685240266037636">'n Lêer met die naam "<ph name="FILE_NAME" />" bestaan reeds. Wil jy dit vervang?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_am.xtb b/ui/chromeos/translations/ui_chromeos_strings_am.xtb index 8aa0cff..aac19fd 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_am.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_am.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">ይህ ፋይል በደህንነት ምክንያቶች ሊደረስበት አልተቻለም።</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> ንጥሎችን በማመቅ ላይ...</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> ንጥሎች ተቀድተዋል።</translation> <translation id="174173592514158117">ሁሉንም የPlay አቃፊዎችን አሳይ</translation> <translation id="174937106936716857">ጠቅላላ ፋይል ብዛት</translation> <translation id="1775381402323441512">የቪዲዮ መረጃ</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">ልክ ያልሆነ ቁምፊ፦ <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">የቪዬትናምኛ ቁልፍ ሰሌዳ (ቲሲቪኤን)</translation> <translation id="2168214441502403371">የፋርስ ቁልፍ ሰሌዳ</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> ተወስደዋል።</translation> <translation id="2198315389084035571">ቀላል ቻይንኛ</translation> <translation id="2208158072373999562">የZip ማህደር</translation> <translation id="2225536596944493418">እርግጠኛ ነዎት <ph name="NUMBER_OF_ITEMS" /> ንጥሎችን መሰረዝ ይፈልጋሉ?</translation> <translation id="2230062665678605299">የ«<ph name="FOLDER_NAME" />» አቃፊን መፍጠር አልተቻለም። <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">ተወስደዋል።</translation> <translation id="2278988676849463018">የካናዳ ቁልፍ ሰሌዳ (ፎነቲክ)</translation> <translation id="2288278176040912387">የሙዚቃ ማጫወቻ</translation> <translation id="2291538123825441971"><ph name="NUMBER_OF_FILES" /> ፋይሎችን በመክፈት ላይ።</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">ሁሉም በምትኬ ተቀምጧል!</translation> <translation id="3626281679859535460">ብሩህነት</translation> <translation id="3644896802912593514">ስፋት</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> ንጥሎች ተወስደዋል።</translation> <translation id="3645531960514756307">አቃፍን አታያይዝ</translation> <translation id="3678559383040232393">Maltese የቁልፍ ሰሌዳ</translation> <translation id="3685122418104378273">የሞባይል ውሂብ ጥቅም ላይ በሚውልበት ጊዜ Google Drive ማመሳሰል በነባሪ ይሰናከላል።</translation> @@ -395,6 +399,7 @@ መሣሪያዎ ምንም ነገር ቢሆን ፋይሎችዎ በጥንቃቄ Google Drive ላይ ተከማችተዋል።<ph name="MARKUP_6" /> ፋይሎችን በአንድ ቦታ ላይ <ph name="MARKUP_7" />ያጋሩ፣ ይፍጠሩ እና ያቀናጁ<ph name="MARKUP_8" />።<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">ተቀድቷል።</translation> <translation id="5275973617553375938">ከGoogle Drive መልሰው የተገኙ ፋይሎች</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">አስቀምጥ</translation> @@ -593,6 +598,7 @@ <translation id="751507702149411736">ቤላራሻኛ</translation> <translation id="7544853251252956727">በውዝ</translation> <translation id="7547811415869834682">ደች</translation> +<translation id="7551643184018910560">መደርደሪያ ላይ ሰካ</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">አንድ ሰከንድ ብቻ ይጠብቁ</translation> <translation id="7603724359189955920">ፍርግርግ</translation> @@ -676,6 +682,7 @@ <translation id="8299269255470343364">ጃፓንኛ</translation> <translation id="8312871300878166382">ወደ አቃፊ ውስጥ ይለጥፉ</translation> <translation id="8329978297633540474">ስነጣ አልባ ጽሑፍ</translation> +<translation id="8335587457941836791">ከመደርደሪያ ንቀል</translation> <translation id="8336153091935557858">ትላንትና <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">የአይስላንድ ቁልፍ ሰሌዳ</translation> <translation id="8342318071240498787">ተመሳሳዩን ስም የያዘ ፋይል ወይም አቃፊ አስቀድሞ አለ።</translation> @@ -748,6 +755,7 @@ <translation id="943972244133411984">የተቀየረው በ</translation> <translation id="945522503751344254">ግብረመልስ ላክ</translation> <translation id="947144732524271678">ከ<ph name="FROM_ENTRY_NAME" /> እስከ <ph name="TO_ENTRY_NAME" /> ያሉ የ<ph name="ENTRY_COUNT" /> ግቤቶች ክልል ተመርጧል።</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> ተቀድቷል።</translation> <translation id="981121421437150478">ከመስመር ውጪ</translation> <translation id="988685240266037636">«<ph name="FILE_NAME" />» ፋይል አስቀድሞ አለ። ሊተኩት ይፈልጋሉ?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> ሜባ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb index 6a76925..213921e 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">البيلاروسية</translation> <translation id="7544853251252956727">ترتيب عشوائي</translation> <translation id="7547811415869834682">الهولندية</translation> +<translation id="7551643184018910560">تثبيت في الرف</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">انتظر قليلاً</translation> <translation id="7603724359189955920">شبكات</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">اليابانية</translation> <translation id="8312871300878166382">لصق في مجلد</translation> <translation id="8329978297633540474">نص عادي</translation> +<translation id="8335587457941836791">إزالة التثبيت من الرف</translation> <translation id="8336153091935557858">الأمس <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">لوحة مفاتيح أيسلندية</translation> <translation id="8342318071240498787">هناك ملف أو دليل موجود بهذا الاسم فعلاً.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_as.xtb b/ui/chromeos/translations/ui_chromeos_strings_as.xtb index 242385b..1940e618 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_as.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_as.xtb
@@ -588,6 +588,7 @@ <translation id="751507702149411736">বেলাৰ’ছিয়ান</translation> <translation id="7544853251252956727">সানমিহলি কৰক</translation> <translation id="7547811415869834682">ডাচ্চ</translation> +<translation id="7551643184018910560">শ্বেল্ফত পিন কৰক</translation> <translation id="7576032389798113292">৬x৪</translation> <translation id="7589661784326793847">কেইছেকেণ্ডমান অপেক্ষা কৰক</translation> <translation id="7603724359189955920">গ্ৰীড</translation> @@ -670,6 +671,7 @@ <translation id="8299269255470343364">জাপানী</translation> <translation id="8312871300878166382">ফ’ল্ডাৰত পে’ষ্ট কৰক</translation> <translation id="8329978297633540474">সাধাৰণ পাঠ</translation> +<translation id="8335587457941836791">শ্বেল্ফৰ পৰা আনপিন কৰক</translation> <translation id="8336153091935557858">কালি <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">আইচলেণ্ডিক কীব'ৰ্ড</translation> <translation id="8342318071240498787">একেটা নামৰ ফাইল বা ডাইৰেক্টৰী আগৰেপৰাই আছে৷</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_az.xtb b/ui/chromeos/translations/ui_chromeos_strings_az.xtb index 98552a6c..884fd1a 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_az.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_az.xtb
@@ -593,6 +593,7 @@ <translation id="751507702149411736">Belarusca</translation> <translation id="7544853251252956727">Qarışdırın</translation> <translation id="7547811415869834682">Holland</translation> +<translation id="7551643184018910560">Rəfə sancaqlayın</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Bir saniyə gözləyin</translation> <translation id="7603724359189955920">Cədvəl</translation> @@ -674,6 +675,7 @@ <translation id="8299269255470343364">Yapon</translation> <translation id="8312871300878166382">Qovluğa yerləşdirin</translation> <translation id="8329978297633540474">Tam mətn</translation> +<translation id="8335587457941836791">Buferdən çıxarın</translation> <translation id="8336153091935557858">Dünən <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">İsland klaviaturası</translation> <translation id="8342318071240498787">Eyni adlı fayl və ya kataloq var.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_be.xtb b/ui/chromeos/translations/ui_chromeos_strings_be.xtb index d3248caa..f9cecd5 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_be.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_be.xtb
@@ -593,6 +593,7 @@ <translation id="751507702149411736">Беларуская</translation> <translation id="7544853251252956727">Перамяшаць</translation> <translation id="7547811415869834682">Галандская</translation> +<translation id="7551643184018910560">Замацаваць на паліцы</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Пачакайце</translation> <translation id="7603724359189955920">Сеткі</translation> @@ -676,6 +677,7 @@ <translation id="8299269255470343364">Японская</translation> <translation id="8312871300878166382">Уставіць у папку</translation> <translation id="8329978297633540474">Звычайны тэкст</translation> +<translation id="8335587457941836791">Адмацаваць з паліцы</translation> <translation id="8336153091935557858">Учора, <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Ісландская клавіятура</translation> <translation id="8342318071240498787">Файл або каталог з такой назвай ужо існуе.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bg.xtb b/ui/chromeos/translations/ui_chromeos_strings_bg.xtb index 4a83f8f5..15223cf 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_bg.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">От съображения за сигурност не можа да бъде осъществен достъп до файла.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> елемента се компресират...</translation> +<translation id="1731889557567069540">Копирахте <ph name="NUMBER_OF_ITEMS" /> елемента.</translation> <translation id="174173592514158117">Показване на всички папки от Google Play</translation> <translation id="174937106936716857">Общ брой файлове</translation> <translation id="1775381402323441512">Информация за видеофайла</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Невалиден знак: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Виетнамска клавиатура (TCVN)</translation> <translation id="2168214441502403371">Персийска клавиатура</translation> +<translation id="2197363559908958454">Преместихте <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="2198315389084035571">опростен китайски</translation> <translation id="2208158072373999562">Компресиран архивен файл</translation> <translation id="2225536596944493418">Наистина ли искате да изтриете <ph name="NUMBER_OF_ITEMS" /> елемента?</translation> <translation id="2230062665678605299">Не можем да създадем папката „<ph name="FOLDER_NAME" />“. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Преместено.</translation> <translation id="2278988676849463018">Каннада клавиатура (фонетична)</translation> <translation id="2288278176040912387">Грамофон</translation> <translation id="2291538123825441971">Отварят се <ph name="NUMBER_OF_FILES" /> файла.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">На всичко бе създадено резервно копие!</translation> <translation id="3626281679859535460">Яркост</translation> <translation id="3644896802912593514">Ширина</translation> +<translation id="3645233063072417428">Преместихте <ph name="NUMBER_OF_ITEMS" /> елемента.</translation> <translation id="3645531960514756307">Освобождаване на папката</translation> <translation id="3678559383040232393">Малтийска клавиатура</translation> <translation id="3685122418104378273">Синхронизирането на Google Диск е деактивирано по подразбиране, когато се използват мобилни данни.</translation> @@ -395,6 +399,7 @@ Каквото и да се случи с устройството ви, те ще се съхраняват надеждно в Google Диск.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Споделяйте, създавайте и работете съвместно<ph name="MARKUP_8" /> по файлове с други хора – всичко от едно място.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Копирано.</translation> <translation id="5275973617553375938">Възстановени от Google Диск файлове</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Запазване</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">белоруски</translation> <translation id="7544853251252956727">Разбъркване</translation> <translation id="7547811415869834682">нидерландски</translation> +<translation id="7551643184018910560">Фиксиране в лавицата</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Изчакайте само секунда</translation> <translation id="7603724359189955920">Решетки</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">японски</translation> <translation id="8312871300878166382">Поставяне в папка</translation> <translation id="8329978297633540474">Неформатиран текст</translation> +<translation id="8335587457941836791">Освобождаване от лавицата</translation> <translation id="8336153091935557858">Вчера, <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Исландска клавиатура</translation> <translation id="8342318071240498787">Вече съществува файл или директория със същото име.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Променено от</translation> <translation id="945522503751344254">Изпращане на отзиви</translation> <translation id="947144732524271678">Избрахте <ph name="ENTRY_COUNT" /> елемента – от <ph name="FROM_ENTRY_NAME" /> до <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615">Копирахте <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="981121421437150478">Офлайн</translation> <translation id="988685240266037636">Вече съществува файл с име „<ph name="FILE_NAME" />“. Искате ли да го замените?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> МБ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb index 407c780..ff920700b 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
@@ -593,6 +593,7 @@ <translation id="751507702149411736">বেলারুশীয়</translation> <translation id="7544853251252956727">শাফল করুন</translation> <translation id="7547811415869834682">ডাচ</translation> +<translation id="7551643184018910560">শেল্ফে পিন করুন</translation> <translation id="7576032389798113292">৬x৪</translation> <translation id="7589661784326793847">এক সেকেন্ড অপেক্ষা করুন</translation> <translation id="7603724359189955920">গ্রিড</translation> @@ -676,6 +677,7 @@ <translation id="8299269255470343364">জাপানী</translation> <translation id="8312871300878166382">ফোল্ডারের মধ্যে পেস্ট করুন</translation> <translation id="8329978297633540474">সাধারণ টেক্সট</translation> +<translation id="8335587457941836791">তাক থেকে আনপিন করুন</translation> <translation id="8336153091935557858">গতলাক <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">আইসল্যান্ডিক কীবোর্ড</translation> <translation id="8342318071240498787">একই নাম সহ ফাইল অথবা একটি নির্দেশিকা ইতিমধ্যেই বিদ্যমান আছে৷</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb index d1ff8e5..4d8c71f8 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">Bjeloruska</translation> <translation id="7544853251252956727">Izmiješaj</translation> <translation id="7547811415869834682">Holandska</translation> +<translation id="7551643184018910560">Zakači za policu</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Samo trenutak</translation> <translation id="7603724359189955920">Mreže</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">japanski</translation> <translation id="8312871300878166382">Zalijepi u folder</translation> <translation id="8329978297633540474">Obični tekst</translation> +<translation id="8335587457941836791">Otkači s police</translation> <translation id="8336153091935557858">Jučer, u <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Islandska tastatura</translation> <translation id="8342318071240498787">Fajl ili direktorij s istim nazivom već postoji.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb index 5400c69..cdb81e62 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">No s'ha pogut accedir al fitxer per qüestions de seguretat.</translation> <translation id="169515659049020177">Maj</translation> <translation id="1722487484194605434">S'estan comprimint <ph name="NUMBER_OF_ITEMS" /> elements...</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> elements copiats.</translation> <translation id="174173592514158117">Mostra totes les carpetes de Play</translation> <translation id="174937106936716857">Total de fitxers</translation> <translation id="1775381402323441512">Informació del vídeo</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Caràcter no vàlid: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Teclat vietnamita (TCVN)</translation> <translation id="2168214441502403371">Teclat persa</translation> +<translation id="2197363559908958454">S'han mogut <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="2198315389084035571">Xinès simplificat</translation> <translation id="2208158072373999562">Fitxer zip</translation> <translation id="2225536596944493418">Confirmes que vols suprimir <ph name="NUMBER_OF_ITEMS" /> elements?</translation> <translation id="2230062665678605299">No es pot crear la carpeta "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">S'ha mogut.</translation> <translation id="2278988676849463018">Teclat kannada (fonètic)</translation> <translation id="2288278176040912387">Tocadiscos</translation> <translation id="2291538123825441971">S'estan obrint <ph name="NUMBER_OF_FILES" /> fitxers.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Tots els elements tenen una còpia de seguretat.</translation> <translation id="3626281679859535460">Brillantor</translation> <translation id="3644896802912593514">Amplada</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> elements moguts.</translation> <translation id="3645531960514756307">Deixa de fixar la carpeta</translation> <translation id="3678559383040232393">Teclat maltès</translation> <translation id="3685122418104378273">La sincronització amb Google Drive està desactivada de manera predeterminada en utilitzar les dades mòbils.</translation> @@ -395,6 +399,7 @@ Passi el que passi amb el vostre dispositiu, els fitxers s'emmagatzemen amb tota seguretat a Google Drive.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Compartiu, creeu fitxers i col·laboreu-hi<ph name="MARKUP_8" /> amb altres persones; tot en un sol lloc.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">S'ha copiat.</translation> <translation id="5275973617553375938">Fitxers recuperats de Google Drive</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Desa</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">Bielorús</translation> <translation id="7544853251252956727">Aleatori</translation> <translation id="7547811415869834682">Neerlandès</translation> +<translation id="7551643184018910560">Fixa al prestatge</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Espereu un moment.</translation> <translation id="7603724359189955920">Quadrícules</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">Japonès</translation> <translation id="8312871300878166382">Enganxa a la carpeta</translation> <translation id="8329978297633540474">Text sense format</translation> +<translation id="8335587457941836791">No el fixis al prestatge</translation> <translation id="8336153091935557858">Ahir a les <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Teclat islandès</translation> <translation id="8342318071240498787">Ja existeix un fitxer o un directori amb aquest nom.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Modificat per</translation> <translation id="945522503751344254">Envia suggeriments</translation> <translation id="947144732524271678">S'ha seleccionat un interval de <ph name="ENTRY_COUNT" /> entrades, de l'entrada <ph name="FROM_ENTRY_NAME" /> a <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615">S'ha copiat <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="981121421437150478">Sense connexió</translation> <translation id="988685240266037636">El nom de fitxer "<ph name="FILE_NAME" />" ja existeix. El vols substituir?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_cs.xtb b/ui/chromeos/translations/ui_chromeos_strings_cs.xtb index d48f2e2..10857b2 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_cs.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Soubor je z bezpečnostních důvodů nedostupný.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">Komprimace <ph name="NUMBER_OF_ITEMS" /> položek...</translation> +<translation id="1731889557567069540">Zkopírované položky: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="174173592514158117">Zobrazit všechny složky Play</translation> <translation id="174937106936716857">Celkový počet souborů</translation> <translation id="1775381402323441512">Informace o videu</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Neplatný znak: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Vietnamská klávesnice (TCVN)</translation> <translation id="2168214441502403371">Perská klávesnice</translation> +<translation id="2197363559908958454">Přesunuté položky: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="2198315389084035571">Zjednodušená čínština</translation> <translation id="2208158072373999562">Archiv ZIP</translation> <translation id="2225536596944493418">Opravdu chcete tyto položky (<ph name="NUMBER_OF_ITEMS" />) smazat?</translation> <translation id="2230062665678605299">Složku „<ph name="FOLDER_NAME" />“ se nepodařilo vytvořit. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Přesunuto.</translation> <translation id="2278988676849463018">Kannadská klávesnice (fonetická)</translation> <translation id="2288278176040912387">Gramofon</translation> <translation id="2291538123825441971">Otevírání <ph name="NUMBER_OF_FILES" /> souborů.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Vše je zálohováno</translation> <translation id="3626281679859535460">Jas</translation> <translation id="3644896802912593514">Šířka</translation> +<translation id="3645233063072417428">Přesunuté položky: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="3645531960514756307">Odepnout složku</translation> <translation id="3678559383040232393">Maltská klávesnice</translation> <translation id="3685122418104378273">Když používáte mobilní datové připojení, synchronizace s Diskem Google je ve výchozím nastavení vypnutá.</translation> @@ -394,6 +398,7 @@ <ph name="MARKUP_4" />Mějte své soubory v bezpečí.<ph name="MARKUP_5" /> Vaše soubory jsou bezpečně uloženy na Disku Google bez ohledu na to, co se stane s vaším zařízením.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Sdílejte, vytvářejte a spolupracujte<ph name="MARKUP_8" /> na souborech s ostatními, a to vše na jednom místě.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Zkopírováno.</translation> <translation id="5275973617553375938">Obnovené soubory z Disku Google</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Uložit</translation> @@ -593,6 +598,7 @@ <translation id="751507702149411736">běloruština</translation> <translation id="7544853251252956727">Přehrávat náhodně</translation> <translation id="7547811415869834682">holandština</translation> +<translation id="7551643184018910560">Připnout k poličce</translation> <translation id="7576032389798113292">6:4</translation> <translation id="7589661784326793847">Chvilku strpení</translation> <translation id="7603724359189955920">Mřížky</translation> @@ -676,6 +682,7 @@ <translation id="8299269255470343364">japonština</translation> <translation id="8312871300878166382">Vložit do složky</translation> <translation id="8329978297633540474">Prostý text</translation> +<translation id="8335587457941836791">Uvolnit z poličky</translation> <translation id="8336153091935557858">Včera <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Islandská klávesnice</translation> <translation id="8342318071240498787">Soubor nebo složka s daným názvem již existuje.</translation> @@ -748,6 +755,7 @@ <translation id="943972244133411984">Upravil(a)</translation> <translation id="945522503751344254">Odeslat zpětnou vazbu</translation> <translation id="947144732524271678">Vybrali jste položky <ph name="FROM_ENTRY_NAME" /> až <ph name="TO_ENTRY_NAME" /> (celkem <ph name="ENTRY_COUNT" />).</translation> +<translation id="949308258121608615">Zkopírované položky: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="981121421437150478">Offline</translation> <translation id="988685240266037636">Soubor s názvem „<ph name="FILE_NAME" />“ již existuje. Chcete jej nahradit?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_da.xtb b/ui/chromeos/translations/ui_chromeos_strings_da.xtb index 8b22fe6b..8ab49f8 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_da.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">Hviderussisk</translation> <translation id="7544853251252956727">Bland</translation> <translation id="7547811415869834682">Hollandsk</translation> +<translation id="7551643184018910560">Fastgør til hylde</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Vent et øjeblik</translation> <translation id="7603724359189955920">Gitre</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">Japansk</translation> <translation id="8312871300878166382">Indsæt i mappe</translation> <translation id="8329978297633540474">Almindelig tekst</translation> +<translation id="8335587457941836791">Frigør fra hylden</translation> <translation id="8336153091935557858">I går <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Islandsk tastatur</translation> <translation id="8342318071240498787">Der findes allerede en fil eller en mappe med samme navn.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_de.xtb b/ui/chromeos/translations/ui_chromeos_strings_de.xtb index 2415b145..716babd15 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_de.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">Weißrussisch</translation> <translation id="7544853251252956727">Zufallsmix</translation> <translation id="7547811415869834682">Niederländisch</translation> +<translation id="7551643184018910560">An Ablage anpinnen</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Einen Moment bitte</translation> <translation id="7603724359189955920">Gitter</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">Japanisch</translation> <translation id="8312871300878166382">In Ordner einfügen</translation> <translation id="8329978297633540474">Unformatierter Text</translation> +<translation id="8335587457941836791">Von Ablage loslösen</translation> <translation id="8336153091935557858">Gestern <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Isländische Tastatur</translation> <translation id="8342318071240498787">Es ist bereits eine Datei oder ein Verzeichnis mit dem gleichen Namen vorhanden.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_el.xtb b/ui/chromeos/translations/ui_chromeos_strings_el.xtb index a12f776..bab6a4a9 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_el.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_el.xtb
@@ -71,6 +71,7 @@ <translation id="1673103856845176271">Για λόγους ασφαλείας, η πρόσβαση στο αρχείο δεν ήταν δυνατή.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">Συμπίεση <ph name="NUMBER_OF_ITEMS" /> στοιχείων...</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> στοιχεία αντιγράφηκαν.</translation> <translation id="174173592514158117">Εμφάνιση όλων των φακέλων του Play</translation> <translation id="174937106936716857">Συνολικός αριθμός αρχείων</translation> <translation id="1775381402323441512">Πληροφορίες βίντεο</translation> @@ -112,10 +113,12 @@ <translation id="2163152940313951844">Μη έγκυρος χαρακτήρας: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Πληκτρολόγιο Βιετναμικών (TCVN)</translation> <translation id="2168214441502403371">Πληκτρολόγιο Περσικών</translation> +<translation id="2197363559908958454">Το <ph name="NUMBER_OF_ITEMS" /> μετακινήθηκε.</translation> <translation id="2198315389084035571">Απλοποιημένα Κινεζικά</translation> <translation id="2208158072373999562">Αρχείο Zip</translation> <translation id="2225536596944493418">Είστε βέβαιοι ότι θέλετε να διαγράψετε <ph name="NUMBER_OF_ITEMS" /> στοιχεία;</translation> <translation id="2230062665678605299">Δεν είναι δυνατή η δημιουργία του φακέλου "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Μετακινήθηκε.</translation> <translation id="2278988676849463018">Πληκτρολόγιο Κανάντα (Φωνητικό)</translation> <translation id="2288278176040912387">Πικάπ</translation> <translation id="2291538123825441971">Άνοιγμα <ph name="NUMBER_OF_FILES" /> αρχείων.</translation> @@ -242,6 +245,7 @@ <translation id="3620292326130836921">Δημιουργήθηκαν αντίγραφα ασφαλείας για όλα τα αρχεία!</translation> <translation id="3626281679859535460">Φωτεινότητα</translation> <translation id="3644896802912593514">Πλάτος</translation> +<translation id="3645233063072417428">Μετακινήθηκαν <ph name="NUMBER_OF_ITEMS" /> στοιχεία.</translation> <translation id="3645531960514756307">Ξεκαρφίτσωμα φακέλου</translation> <translation id="3678559383040232393">Πληκτρολόγιο Μάλτας</translation> <translation id="3685122418104378273">Ο συγχρονισμός του Google Drive είναι απενεργοποιημένος από προεπιλογή όταν χρησιμοποιούνται δεδομένα κινητής τηλεφωνίας.</translation> @@ -407,6 +411,7 @@ Ό,τι και να συμβεί στη συσκευή σας, τα αρχεία σας αποθηκεύονται με ασφάλεια στο Google Drive.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Κοινή χρήση, δημιουργία και συνεργασία<ph name="MARKUP_8" /> σε αρχεία με άλλους χρήστες σε ένα μέρος.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Αντιγράφηκε.</translation> <translation id="5275973617553375938">Ανακτημένα αρχεία από το Google Drive</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Αποθήκευση</translation> @@ -611,6 +616,7 @@ <translation id="7544853251252956727">Τυχαία αναπαραγωγή</translation> <translation id="7547811415869834682">Ολλανδικά </translation> +<translation id="7551643184018910560">Καρφίτσωμα στο ράφι</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Περιμένετε λίγο</translation> <translation id="7603724359189955920">Πλέγματα</translation> @@ -696,6 +702,7 @@ </translation> <translation id="8312871300878166382">Επικόλληση στο φάκελο</translation> <translation id="8329978297633540474">Απλό κείμενο</translation> +<translation id="8335587457941836791">Ξεκαρφίτσωμα από το ράφι</translation> <translation id="8336153091935557858">Χθες <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Ισλανδικό πληκτρολόγιο</translation> <translation id="8342318071240498787">Υπάρχει ήδη αρχείο ή κατάλογος με το ίδιο όνομα.</translation> @@ -772,6 +779,7 @@ <translation id="943972244133411984">Τροποποιήθηκε από</translation> <translation id="945522503751344254">Αποστολή σχολίων</translation> <translation id="947144732524271678">Επιλέχθηκε ένα εύρος <ph name="ENTRY_COUNT" /> καταχωρίσεων από το <ph name="FROM_ENTRY_NAME" /> έως το <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615">Το <ph name="NUMBER_OF_ITEMS" /> αντιγράφηκε.</translation> <translation id="981121421437150478">Εκτός σύνδεσης</translation> <translation id="988685240266037636">Υπάρχει ήδη ένα αρχείο με την ονομασία "<ph name="FILE_NAME" />". Θέλετε να το αντικαταστήσετε;</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb index d0da7b1..3b6ed19 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">The file could not be accessed for security reasons.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">Zipping <ph name="NUMBER_OF_ITEMS" /> items…</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> items copied.</translation> <translation id="174173592514158117">Show all Play folders</translation> <translation id="174937106936716857">Total file count</translation> <translation id="1775381402323441512">Video info</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Invalid character: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Vietnamese keyboard (TCVN)</translation> <translation id="2168214441502403371">Persian keyboard</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> moved.</translation> <translation id="2198315389084035571">Simplified Chinese</translation> <translation id="2208158072373999562">Zip archive</translation> <translation id="2225536596944493418">Are you sure that you want to delete <ph name="NUMBER_OF_ITEMS" /> items?</translation> <translation id="2230062665678605299">Unable to create folder "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Moved.</translation> <translation id="2278988676849463018">Kannada keyboard (Phonetic)</translation> <translation id="2288278176040912387">Record player</translation> <translation id="2291538123825441971">Opening <ph name="NUMBER_OF_FILES" /> files.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">All backed up!</translation> <translation id="3626281679859535460">Brightness</translation> <translation id="3644896802912593514">Width</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> items moved.</translation> <translation id="3645531960514756307">Unpin folder</translation> <translation id="3678559383040232393">Maltese keyboard</translation> <translation id="3685122418104378273">Google Drive sync is disabled by default, when using mobile data.</translation> @@ -395,6 +399,7 @@ No matter what happens to your device, your files are safely stored in Google Drive.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Share, create and collaborate<ph name="MARKUP_8" /> on files with others all in one place.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Copied.</translation> <translation id="5275973617553375938">Recovered files from Google Drive</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Save</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">Belarusian</translation> <translation id="7544853251252956727">Shuffle</translation> <translation id="7547811415869834682">Dutch</translation> +<translation id="7551643184018910560">Pin to shelf</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Wait just a sec</translation> <translation id="7603724359189955920">Grids</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">Japanese</translation> <translation id="8312871300878166382">Paste into folder</translation> <translation id="8329978297633540474">Plain text</translation> +<translation id="8335587457941836791">Unpin from shelf</translation> <translation id="8336153091935557858">Yesterday <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Icelandic keyboard</translation> <translation id="8342318071240498787">A file or a directory with the same name already exists.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Modified by</translation> <translation id="945522503751344254">Send feedback</translation> <translation id="947144732524271678">Selected a range of <ph name="ENTRY_COUNT" /> entries from <ph name="FROM_ENTRY_NAME" /> to <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> copied.</translation> <translation id="981121421437150478">Offline</translation> <translation id="988685240266037636">A file named '<ph name="FILE_NAME" />' already exists. Do you want to replace it?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb index 581bd824..edf7c73 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">No se pudo acceder al archivo por razones de seguridad.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">Comprimiendo <ph name="NUMBER_OF_ITEMS" /> elementos…</translation> +<translation id="1731889557567069540">Se copiaron <ph name="NUMBER_OF_ITEMS" /> elementos.</translation> <translation id="174173592514158117">Mostrar todas las carpetas de Play</translation> <translation id="174937106936716857">Cantidad total de archivos</translation> <translation id="1775381402323441512">Información del video</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Carácter no válido: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Teclado vietnamita (TCVN)</translation> <translation id="2168214441502403371">Teclado persa</translation> +<translation id="2197363559908958454">Se movió <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="2198315389084035571">Chino simplificado</translation> <translation id="2208158072373999562">Archivo Zip</translation> <translation id="2225536596944493418">¿Estás seguro que deseas borrar <ph name="NUMBER_OF_ITEMS" /> elementos ?</translation> <translation id="2230062665678605299">No se puede crear la carpeta "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Se movió.</translation> <translation id="2278988676849463018">Teclado canarés (fonético)</translation> <translation id="2288278176040912387">Tocadiscos</translation> <translation id="2291538123825441971">Abriendo <ph name="NUMBER_OF_FILES" /> archivos</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Todos los archivos están guardados en una copia de seguridad.</translation> <translation id="3626281679859535460">Brillo</translation> <translation id="3644896802912593514">Ancho</translation> +<translation id="3645233063072417428">Se movieron <ph name="NUMBER_OF_ITEMS" /> elementos.</translation> <translation id="3645531960514756307">No fijar carpeta</translation> <translation id="3678559383040232393">Teclado maltés</translation> <translation id="3685122418104378273">La sincronización con Google Drive está inhabilitada de manera predeterminada cuando se usan los datos móviles.</translation> @@ -395,6 +399,7 @@ Tus archivos se almacenan de forma segura en Google Drive, sin importar lo que le suceda a tu dispositivo.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Crea archivos, compártelos y colabora en ellos<ph name="MARKUP_8" /> con otras personas, todo desde un solo lugar.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Se copió.</translation> <translation id="5275973617553375938">Archivos recuperados de Google Drive</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Guardar</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">Bielorruso</translation> <translation id="7544853251252956727">Reproducir aleatoriamente</translation> <translation id="7547811415869834682">Holandés</translation> +<translation id="7551643184018910560">Fijar en la biblioteca</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Espera un momento.</translation> <translation id="7603724359189955920">Cuadrículas</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">Japonés</translation> <translation id="8312871300878166382">Pegar en la carpeta</translation> <translation id="8329978297633540474">Texto sin formato</translation> +<translation id="8335587457941836791">No fijar en la biblioteca</translation> <translation id="8336153091935557858">Ayer a las <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Teclado islandés</translation> <translation id="8342318071240498787">Ya existe un archivo o un directorio con el mismo nombre.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Modificado por</translation> <translation id="945522503751344254">Enviar comentarios</translation> <translation id="947144732524271678">Se seleccionó un rango de <ph name="ENTRY_COUNT" /> entradas de <ph name="FROM_ENTRY_NAME" /> a <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615">Se copió <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="981121421437150478">Sin conexión</translation> <translation id="988685240266037636">Ya existe un archivo con el nombre "<ph name="FILE_NAME" />". ¿Quieres reemplazarlo?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es.xtb b/ui/chromeos/translations/ui_chromeos_strings_es.xtb index 50670d1..61522f6 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_es.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_es.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">No se ha podido acceder al archivo por razones de seguridad.</translation> <translation id="169515659049020177">Mayús</translation> <translation id="1722487484194605434">Se están comprimiendo <ph name="NUMBER_OF_ITEMS" /> elementos...</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> elementos copiados.</translation> <translation id="174173592514158117">Mostrar todas las carpetas de Play</translation> <translation id="174937106936716857">Número total de archivos</translation> <translation id="1775381402323441512">Información del vídeo</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Carácter no válido: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Teclado vietnamita (TCVN)</translation> <translation id="2168214441502403371">Teclado persa</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> movido.</translation> <translation id="2198315389084035571">Chino simplificado</translation> <translation id="2208158072373999562">Archivo zip</translation> <translation id="2225536596944493418">¿Seguro que quieres eliminar estos <ph name="NUMBER_OF_ITEMS" /> elementos?</translation> <translation id="2230062665678605299">No se puede crear la carpeta "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Movido.</translation> <translation id="2278988676849463018">Teclado canarés (fonético)</translation> <translation id="2288278176040912387">Tocadiscos</translation> <translation id="2291538123825441971">Se están abriendo <ph name="NUMBER_OF_FILES" /> archivos.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Se ha realizado la copia de seguridad de todos los archivos</translation> <translation id="3626281679859535460">Brillo</translation> <translation id="3644896802912593514">Anchura</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> elementos movidos.</translation> <translation id="3645531960514756307">No fijar carpeta</translation> <translation id="3678559383040232393">Teclado maltés</translation> <translation id="3685122418104378273">La sincronización con Google Drive está inhabilitada de forma predeterminada en redes de datos móviles.</translation> @@ -395,6 +399,7 @@ Pase lo que pase con el dispositivo, los archivos estarán almacenados de forma segura en Google Drive.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Comparte y crea archivos<ph name="MARKUP_8" /> y colabora en archivos con otros usuarios desde un único lugar.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Copiado.</translation> <translation id="5275973617553375938">Archivos recuperados de Google Drive</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Guardar</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">Bielorruso</translation> <translation id="7544853251252956727">Reproducir aleatoriamente</translation> <translation id="7547811415869834682">neerlandés</translation> +<translation id="7551643184018910560">Fijar en la estantería</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Espera un segundo</translation> <translation id="7603724359189955920">Cuadrículas</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">Japonés</translation> <translation id="8312871300878166382">Pegar en la carpeta</translation> <translation id="8329978297633540474">Texto sin formato</translation> +<translation id="8335587457941836791">No fijar en la estantería</translation> <translation id="8336153091935557858">Ayer a las <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Teclado islandés</translation> <translation id="8342318071240498787">Ya existe un archivo o un directorio con el mismo nombre.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Modificado por</translation> <translation id="945522503751344254">Enviar comentarios</translation> <translation id="947144732524271678">Se ha seleccionado un intervalo de <ph name="ENTRY_COUNT" /> elementos desde <ph name="FROM_ENTRY_NAME" /> hasta <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> copiado.</translation> <translation id="981121421437150478">Sin conexión</translation> <translation id="988685240266037636">Ya existe el archivo "<ph name="FILE_NAME" />". ¿Quieres sustituirlo?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_et.xtb b/ui/chromeos/translations/ui_chromeos_strings_et.xtb index 31fa757..3baabfd 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_et.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_et.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">valgevene keel</translation> <translation id="7544853251252956727">Esita juhuslikus järjekorras</translation> <translation id="7547811415869834682">hollandi keel</translation> +<translation id="7551643184018910560">Riiulile kinnitamine</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Oodake sekund</translation> <translation id="7603724359189955920">Ruudustikud</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">jaapani keel</translation> <translation id="8312871300878166382">Kleebi kausta</translation> <translation id="8329978297633540474">Lihttekst</translation> +<translation id="8335587457941836791">Riiulilt vabastamine</translation> <translation id="8336153091935557858">Eile kell <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Islandi klaviatuur</translation> <translation id="8342318071240498787">Sama nimega fail või kataloog on juba olemas.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb index fb7b38d..3b8c48d 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb
@@ -593,6 +593,7 @@ <translation id="751507702149411736">Bielorrusiarra</translation> <translation id="7544853251252956727">Ausazko erreprodukzioa</translation> <translation id="7547811415869834682">Nederlandarra</translation> +<translation id="7551643184018910560">Ainguratu apalean</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Itxaron segundotxo batez</translation> <translation id="7603724359189955920">Saretak</translation> @@ -676,6 +677,7 @@ <translation id="8299269255470343364">Japoniarra</translation> <translation id="8312871300878166382">Itsatsi karpetan</translation> <translation id="8329978297633540474">Testu arrunta</translation> +<translation id="8335587457941836791">Desainguratu apaletik</translation> <translation id="8336153091935557858">Atzo (<ph name="YESTERDAY_DAYTIME" />)</translation> <translation id="8336579025507394412">Teklatu islandiarra</translation> <translation id="8342318071240498787">Badago lehendik ere izen hori duen fitxategi edo direktorio bat.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb index ecf5b1e..5a62437 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">دسترسی به این فایل به دلایل امنیتی ممکن نبود.</translation> <translation id="169515659049020177">تبدیل</translation> <translation id="1722487484194605434">در حال فشردهسازی <ph name="NUMBER_OF_ITEMS" /> مورد…</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> مورد کپی شد.</translation> <translation id="174173592514158117">نمایش همه پوشههای Play</translation> <translation id="174937106936716857">تعداد کل فایلها</translation> <translation id="1775381402323441512">اطلاعات ویدیو</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">نویسه نامعتبر: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">صفحهکلید ویتنامی (TCVN)</translation> <translation id="2168214441502403371">صفحهکلید فارسی</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> مورد منتقل شد.</translation> <translation id="2198315389084035571">چینی ساده</translation> <translation id="2208158072373999562">فایل بایگانی زیپ</translation> <translation id="2225536596944493418">مطمئنید میخواهید <ph name="NUMBER_OF_ITEMS" /> مورد را حذف کنید؟</translation> <translation id="2230062665678605299">پوشه «<ph name="FOLDER_NAME" />» را نمیتوان ایجاد کرد.<ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">منتقل شد.</translation> <translation id="2278988676849463018">صفحهکلید کانارا (آوایی)</translation> <translation id="2288278176040912387">ضبط صوت</translation> <translation id="2291538123825441971">درحال باز کردن <ph name="NUMBER_OF_FILES" /> فایل.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">همه پشتیبانگیری شدند.</translation> <translation id="3626281679859535460">روشنایی</translation> <translation id="3644896802912593514">عرض</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> مورد منتقل شد.</translation> <translation id="3645531960514756307">برداشتن پین پوشه</translation> <translation id="3678559383040232393">صفحهکلید مالتی</translation> <translation id="3685122418104378273">هنگام استفاده از دادههای شبکه همراه، همگامسازی Google Drive بهصورت پیشفرض غیرفعال است.</translation> @@ -395,6 +399,7 @@ مهم نیست برای دستگاه شما چه اتفاقی میافتد، فایلهای شما در Google Drive بهصورت امن ذخیره میشوند.<ph name="MARKUP_6" /> فایلها را با دیگران <ph name="MARKUP_7" />اشتراکگذاری، ایجاد و مشارکت<ph name="MARKUP_8" /> کنید، همه این کارها را در یک مکان انجام دهید.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">کپی شد.</translation> <translation id="5275973617553375938">فایلهای بازیابیشده از Google Drive</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">ذخیره</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">بلاروسی</translation> <translation id="7544853251252956727">درهم</translation> <translation id="7547811415869834682">هلند</translation> +<translation id="7551643184018910560">پین به راهانداز</translation> <translation id="7576032389798113292">۶x۴</translation> <translation id="7589661784326793847">چند ثانیه صبر کنید</translation> <translation id="7603724359189955920">شبکهها</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">ژاپنی</translation> <translation id="8312871300878166382">جایگذاری در پوشه</translation> <translation id="8329978297633540474">نوشتار ساده</translation> +<translation id="8335587457941836791">جدا کردن از راهانداز</translation> <translation id="8336153091935557858">دیروز <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">صفحهکلید ایسلندی</translation> <translation id="8342318071240498787">یک فایل یا یک پوشه با همین نام از قبل وجود دارد.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">اصلاحشده توسط</translation> <translation id="945522503751344254">ارسال بازخورد</translation> <translation id="947144732524271678">مجموعهای از <ph name="ENTRY_COUNT" /> ورودی، از <ph name="FROM_ENTRY_NAME" /> تا <ph name="TO_ENTRY_NAME" /> انتخاب شد.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> کپی شد.</translation> <translation id="981121421437150478">آفلاین</translation> <translation id="988685240266037636">فایلی با نام «<ph name="FILE_NAME" />» ازقبل وجود دارد. میخواهید آن را جایگزین کنید؟</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> مگابایت</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb index f8731e3..54d94d3 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">valkovenäjä</translation> <translation id="7544853251252956727">Satunnaistoisto</translation> <translation id="7547811415869834682">hollanti</translation> +<translation id="7551643184018910560">Kiinnitä hyllyyn</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Odota hetki</translation> <translation id="7603724359189955920">Ruudukot</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">japani</translation> <translation id="8312871300878166382">Liitä kansioon</translation> <translation id="8329978297633540474">Vain teksti</translation> +<translation id="8335587457941836791">Poista kiinnitys hyllystä</translation> <translation id="8336153091935557858">eilen <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Islantilainen näppäimistö</translation> <translation id="8342318071240498787">Samanniminen tiedosto tai hakemisto on jo olemassa.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fil.xtb b/ui/chromeos/translations/ui_chromeos_strings_fil.xtb index 9727dfd..5cabbaa 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fil.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fil.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">Belarusian</translation> <translation id="7544853251252956727">I-shuffle</translation> <translation id="7547811415869834682">Dutch</translation> +<translation id="7551643184018910560">I-pin sa shelf</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Maghintay lamang ng isang segundo</translation> <translation id="7603724359189955920">Mga Grid</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">Japanese</translation> <translation id="8312871300878166382">I-paste sa loob ng folder</translation> <translation id="8329978297633540474">Plain text</translation> +<translation id="8335587457941836791">I-unpin mula sa shelf</translation> <translation id="8336153091935557858">Kahapon <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Icelandic keyboard</translation> <translation id="8342318071240498787">Umiiral na ang isang file o direktoryong may parehong pangalan.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb b/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb index a7027123..d8950a41 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Le fichier n'est pas accessible pour des raisons de sécurité.</translation> <translation id="169515659049020177">Maj</translation> <translation id="1722487484194605434">Compression de <ph name="NUMBER_OF_ITEMS" /> éléments en cours…</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> éléments copiés</translation> <translation id="174173592514158117">Afficher tous les dossiers Google Play</translation> <translation id="174937106936716857">Nombre total de fichiers</translation> <translation id="1775381402323441512">Renseignements sur le fichier vidéo</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Caractère incorrect : <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Clavier vietnamien (TCVN)</translation> <translation id="2168214441502403371">Clavier perse</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> éléments déplacés.</translation> <translation id="2198315389084035571">Chinois simplifié</translation> <translation id="2208158072373999562">Archive ZIP</translation> <translation id="2225536596944493418">Voulez-vous vraiment supprimer <ph name="NUMBER_OF_ITEMS" /> éléments?</translation> <translation id="2230062665678605299">Impossible de créer le dossier « <ph name="FOLDER_NAME" /> ». <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Déplacés.</translation> <translation id="2278988676849463018">Clavier kannada (phonétique)</translation> <translation id="2288278176040912387">Tourne-disque</translation> <translation id="2291538123825441971">Ouverture de <ph name="NUMBER_OF_FILES" /> fichiers en cours…</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Tous les fichiers ont été sauvegardés!</translation> <translation id="3626281679859535460">Luminosité</translation> <translation id="3644896802912593514">Largeur</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> éléments déplacés.</translation> <translation id="3645531960514756307">Annuler l'épinglage du dossier</translation> <translation id="3678559383040232393">Clavier maltais</translation> <translation id="3685122418104378273">La synchronisation Google Disque est désactivée par défaut, lors de l'utilisation de données mobiles.</translation> @@ -397,6 +401,7 @@ Peu importe ce qui arrive à votre appareil, vos fichiers sont stockés en toute sécurité dans Google Disque.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Partagez, créez et collaborez<ph name="MARKUP_8" /> sur les mêmes fichiers pour tout le monde, à un seul endroit.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Copié.</translation> <translation id="5275973617553375938">Fichiers récupérés de Google Disque</translation> <translation id="5317780077021120954">Enregistrer</translation> <translation id="5318819489018851358">Partager avec Linux</translation> @@ -595,6 +600,7 @@ <translation id="751507702149411736">Biélorusse</translation> <translation id="7544853251252956727">Aléatoire</translation> <translation id="7547811415869834682">Hollandais</translation> +<translation id="7551643184018910560">Épingler sur l'étagère</translation> <translation id="7576032389798113292">6:4</translation> <translation id="7589661784326793847">Veuillez patienter un court instant.</translation> <translation id="7603724359189955920">Grilles</translation> @@ -678,6 +684,7 @@ <translation id="8299269255470343364">Japonais</translation> <translation id="8312871300878166382">Coller dans le dossier</translation> <translation id="8329978297633540474">Texte brut</translation> +<translation id="8335587457941836791">Retirer de l'étagère</translation> <translation id="8336153091935557858">Hier à <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Clavier islandais</translation> <translation id="8342318071240498787">Un fichier ou un répertoire du même nom existe déjà.</translation> @@ -750,6 +757,7 @@ <translation id="943972244133411984">Modifié par</translation> <translation id="945522503751344254">Envoyer un commentaire à Google</translation> <translation id="947144732524271678">Vous avez sélectionné une plage de <ph name="ENTRY_COUNT" /> entrées, de <ph name="FROM_ENTRY_NAME" /> à <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> éléments copiés.</translation> <translation id="981121421437150478">Hors ligne</translation> <translation id="988685240266037636">Un fichier nommé « <ph name="FILE_NAME" /> » existe déjà. Voulez-vous le remplacer?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> Mo</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb index ce450f47..8e80113 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Impossible d'accéder au fichier pour des raisons de sécurité.</translation> <translation id="169515659049020177">Maj</translation> <translation id="1722487484194605434">Compression de <ph name="NUMBER_OF_ITEMS" /> éléments…</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> éléments copiés.</translation> <translation id="174173592514158117">Afficher tous les dossiers Play</translation> <translation id="174937106936716857">Nombre total de fichiers</translation> <translation id="1775381402323441512">Informations sur le fichier vidéo</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Caractère non valide : <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Clavier vietnamien (TCVN)</translation> <translation id="2168214441502403371">Clavier persan</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> éléments déplacés.</translation> <translation id="2198315389084035571">Chinois simplifié</translation> <translation id="2208158072373999562">Archive ZIP</translation> <translation id="2225536596944493418">Voulez-vous vraiment supprimer <ph name="NUMBER_OF_ITEMS" /> éléments ?</translation> <translation id="2230062665678605299">Impossible de créer le dossier "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Déplacé.</translation> <translation id="2278988676849463018">Clavier kannada (phonétique)</translation> <translation id="2288278176040912387">Tourne-disque</translation> <translation id="2291538123825441971">Ouverture de <ph name="NUMBER_OF_FILES" /> fichiers.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Tout le contenu a été sauvegardé</translation> <translation id="3626281679859535460">Luminosité</translation> <translation id="3644896802912593514">Largeur</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> éléments déplacés.</translation> <translation id="3645531960514756307">Retirer le dossier</translation> <translation id="3678559383040232393">Clavier maltais</translation> <translation id="3685122418104378273">Par défaut, la synchronisation Google Drive est désactivée lors de l'utilisation des données mobiles.</translation> @@ -395,6 +399,7 @@ Peu importe ce qui se passe sur votre appareil, vos fichiers sont stockés en toute sécurité dans Google Drive.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Travaillez en groupe, et créez et partagez<ph name="MARKUP_8" /> des fichiers depuis une seule et même interface.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Copié.</translation> <translation id="5275973617553375938">Fichiers récupérés sur Google Drive</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Enregistrer</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">Biélorusse</translation> <translation id="7544853251252956727">Aléatoire</translation> <translation id="7547811415869834682">Néerlandais</translation> +<translation id="7551643184018910560">Épingler sur l'étagère</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Veuillez patienter un court instant.</translation> <translation id="7603724359189955920">Grilles</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">Japonais</translation> <translation id="8312871300878166382">Coller dans le dossier</translation> <translation id="8329978297633540474">Texte brut</translation> +<translation id="8335587457941836791">Retirer de l'étagère</translation> <translation id="8336153091935557858">Hier à <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Clavier islandais</translation> <translation id="8342318071240498787">Un fichier ou un répertoire du même nom existe déjà.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Modifié par</translation> <translation id="945522503751344254">Envoyer un commentaire</translation> <translation id="947144732524271678"><ph name="ENTRY_COUNT" /> éléments sélectionnés, de <ph name="FROM_ENTRY_NAME" /> à <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> éléments copiés.</translation> <translation id="981121421437150478">Hors connexion</translation> <translation id="988685240266037636">Un fichier intitulé "<ph name="FILE_NAME" />" existe déjà. Voulez-vous le remplacer ?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> Mo</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_gl.xtb b/ui/chromeos/translations/ui_chromeos_strings_gl.xtb index 8cf638e..f167f75 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_gl.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_gl.xtb
@@ -593,6 +593,7 @@ <translation id="751507702149411736">Bielorruso</translation> <translation id="7544853251252956727">Reprodución aleatoria</translation> <translation id="7547811415869834682">Neerlandés</translation> +<translation id="7551643184018910560">Fixar no estante</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Espere só un segundo</translation> <translation id="7603724359189955920">Cuadrícula</translation> @@ -676,6 +677,7 @@ <translation id="8299269255470343364">Xaponés</translation> <translation id="8312871300878166382">Pegar no cartafol</translation> <translation id="8329978297633540474">Texto sen formato</translation> +<translation id="8335587457941836791">Deixar de fixar no estante</translation> <translation id="8336153091935557858">Onte ás <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Teclado islandés</translation> <translation id="8342318071240498787">Xa existe un ficheiro ou un directorio co mesmo nome.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb index 0833f40..4a13925a 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">બેલારુશિયન</translation> <translation id="7544853251252956727">શફલ કરો</translation> <translation id="7547811415869834682">ડચ</translation> +<translation id="7551643184018910560">શેલ્ફ પર પિન કરો</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">ક્ષણભર રોકાવ</translation> <translation id="7603724359189955920">ગ્રીડ</translation> @@ -675,6 +676,7 @@ <translation id="8299269255470343364">જાપાનીઝ</translation> <translation id="8312871300878166382">ફોલ્ડરમાં પેસ્ટ કરો</translation> <translation id="8329978297633540474">સાદી ટેક્સ્ટ</translation> +<translation id="8335587457941836791">શેલ્ફમાંથી અનપિન કરો</translation> <translation id="8336153091935557858">ગઈ કાલે <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">આઇસલેન્ડિક કીબોર્ડ</translation> <translation id="8342318071240498787">સમાન નામની ફાઇલ અથવા ડિરેક્ટરી પહેલાથી જ અસ્તિત્વમાં છે.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb index 9edf6d00..92569279 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">बेलारूसी</translation> <translation id="7544853251252956727">शफ़ल करें</translation> <translation id="7547811415869834682">डच</translation> +<translation id="7551643184018910560">अलमारी से पिन करें</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">बस एक सेकंड प्रतीक्षा करें</translation> <translation id="7603724359189955920">ग्रिड</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">जापानी</translation> <translation id="8312871300878166382">फ़ोल्डर में चिपकाएं</translation> <translation id="8329978297633540474">सादा लेख</translation> +<translation id="8335587457941836791">अलमारी से टैब बड़ी करें</translation> <translation id="8336153091935557858">कल <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">आइसलैंडिक कीबोर्ड</translation> <translation id="8342318071240498787">समान नाम वाली फ़ाइल या निर्देशिका पहले से ही मौजूद है.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb index e32406b..83f9031 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">Bjeloruski</translation> <translation id="7544853251252956727">Reproduciraj nasumično</translation> <translation id="7547811415869834682">Nizozemski</translation> +<translation id="7551643184018910560">Prikvači na policu</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Pričekajte trenutak</translation> <translation id="7603724359189955920">Rešetke</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">Japanski</translation> <translation id="8312871300878166382">Zalijepi u mapu</translation> <translation id="8329978297633540474">Običan tekst</translation> +<translation id="8335587457941836791">Otkvači s police</translation> <translation id="8336153091935557858">Jučer u <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Islandska tipkovnica</translation> <translation id="8342318071240498787">Datoteka ili direktorij s istim imenom već postoje.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hu.xtb b/ui/chromeos/translations/ui_chromeos_strings_hu.xtb index 2ec459a39..93002bab 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_hu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">fehérorosz</translation> <translation id="7544853251252956727">Keverés</translation> <translation id="7547811415869834682">holland</translation> +<translation id="7551643184018910560">Rögzítés a polcra</translation> <translation id="7576032389798113292">6×4</translation> <translation id="7589661784326793847">Egy pillanat…</translation> <translation id="7603724359189955920">Rácsok</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">japán</translation> <translation id="8312871300878166382">Beillesztés mappába</translation> <translation id="8329978297633540474">Egyszerű szöveg</translation> +<translation id="8335587457941836791">Rögzítés feloldása a polcon</translation> <translation id="8336153091935557858">Tegnap <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Izlandi billentyűzet</translation> <translation id="8342318071240498787">Már létezik ugyanezzel a névvel egy fájl vagy egy könyvtár.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hy.xtb b/ui/chromeos/translations/ui_chromeos_strings_hy.xtb index 67a373dd..11b0d54 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_hy.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_hy.xtb
@@ -593,6 +593,7 @@ <translation id="751507702149411736">Բելառուսական</translation> <translation id="7544853251252956727">Խառնել</translation> <translation id="7547811415869834682">Հոլանդական</translation> +<translation id="7551643184018910560">Ամրացնել դարակին</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Մեկ վայրկյան</translation> <translation id="7603724359189955920">Ցանց</translation> @@ -676,6 +677,7 @@ <translation id="8299269255470343364">Ճապոնական</translation> <translation id="8312871300878166382">Տեղադրել պանակում</translation> <translation id="8329978297633540474">Պարզ տեքստ</translation> +<translation id="8335587457941836791">Ապամրացնել դարակից</translation> <translation id="8336153091935557858">Երեկ <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Իսլանդերենի ստեղնաշար</translation> <translation id="8342318071240498787">Այս անունով ֆայլ կամ գրացուցակ արդեն առկա է:</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_id.xtb b/ui/chromeos/translations/ui_chromeos_strings_id.xtb index 1617c79..fed7661 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_id.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_id.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">File tidak dapat diakses karena alasan keamanan.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">Membuat file zip <ph name="NUMBER_OF_ITEMS" /> item...</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> item disalin.</translation> <translation id="174173592514158117">Tampilkan semua folder Play</translation> <translation id="174937106936716857">Jumlah file total</translation> <translation id="1775381402323441512">Info video</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Karakter tidak valid: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Keyboard Vietnam (TCVN)</translation> <translation id="2168214441502403371">Keyboard Persia</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> dipindahkan.</translation> <translation id="2198315389084035571">China Aksara Sederhana</translation> <translation id="2208158072373999562">Arsip Zip</translation> <translation id="2225536596944493418">Yakin ingin menghapus <ph name="NUMBER_OF_ITEMS" /> item?</translation> <translation id="2230062665678605299">Tidak dapat membuat folder "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Dipindahkan.</translation> <translation id="2278988676849463018">Keyboard Kannada (Fonetik)</translation> <translation id="2288278176040912387">Pemutar piringan hitam</translation> <translation id="2291538123825441971">Membuka <ph name="NUMBER_OF_FILES" /> file.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Semua dicadangkan!</translation> <translation id="3626281679859535460">Kecerahan</translation> <translation id="3644896802912593514">Lebar</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> item dipindahkan.</translation> <translation id="3645531960514756307">Lepas pin pada folder</translation> <translation id="3678559383040232393">Keyboard Malta</translation> <translation id="3685122418104378273">Sinkronisasi Google Drive dinonaktifkan secara default saat menggunakan data seluler.</translation> @@ -395,6 +399,7 @@ Apa pun yang terjadi pada perangkat, file Anda tersimpan dengan aman di Google Drive.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Berbagi, membuat, dan berkolaborasi<ph name="MARKUP_8" /> dalam file bersama orang lain, semuanya di satu tempat.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Disalin.</translation> <translation id="5275973617553375938">File yang dipulihkan dari Google Drive</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Simpan</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">Belarusian</translation> <translation id="7544853251252956727">Acak</translation> <translation id="7547811415869834682">Belanda</translation> +<translation id="7551643184018910560">Pin ke rak</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Tunggu sebentar</translation> <translation id="7603724359189955920">Petak</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">Jepang</translation> <translation id="8312871300878166382">Tempelkan ke folder</translation> <translation id="8329978297633540474">Teks biasa</translation> +<translation id="8335587457941836791">Lepaskan pin dari rak</translation> <translation id="8336153091935557858"><ph name="YESTERDAY_DAYTIME" /> kemarin</translation> <translation id="8336579025507394412">Keyboard Islandia</translation> <translation id="8342318071240498787">Sudah ada file atau direktori dengan nama yang sama.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Diubah oleh</translation> <translation id="945522503751344254">Kirim masukan</translation> <translation id="947144732524271678">Rentang <ph name="ENTRY_COUNT" /> entri dari <ph name="FROM_ENTRY_NAME" /> ke <ph name="TO_ENTRY_NAME" /> dipilih.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> disalin.</translation> <translation id="981121421437150478">Offline</translation> <translation id="988685240266037636">File bernama "<ph name="FILE_NAME" />" sudah ada. Ingin menggantinya?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_is.xtb b/ui/chromeos/translations/ui_chromeos_strings_is.xtb index 232868b..f60f2f9 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_is.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_is.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Af öryggisástæðum var ekki hægt að opna skrána.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">Zip-þjappar <ph name="NUMBER_OF_ITEMS" /> atriði...</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> atriði afrituð.</translation> <translation id="174173592514158117">Sýna allar Play möppur</translation> <translation id="174937106936716857">Heildarfjöldi skráa</translation> <translation id="1775381402323441512">Upplýsingar um myndskeið</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Ógildur stafur: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Víetnamskt lyklaborð (TCVN)</translation> <translation id="2168214441502403371">Persneskt lyklaborð</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> flutt.</translation> <translation id="2198315389084035571">Kínverska (einfölduð)</translation> <translation id="2208158072373999562">ZIP-safnskrá</translation> <translation id="2225536596944493418">Ertu viss um að þú viljir eyða <ph name="NUMBER_OF_ITEMS" /> atriðum?</translation> <translation id="2230062665678605299">Ekki er hægt að búa til möppuna „<ph name="FOLDER_NAME" />“. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Flutt.</translation> <translation id="2278988676849463018">Kannada-lyklaborð (hljóðritun)</translation> <translation id="2288278176040912387">Grammófónn</translation> <translation id="2291538123825441971">Opnar <ph name="NUMBER_OF_FILES" /> skrár.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Allt afritað!</translation> <translation id="3626281679859535460">Birtustig</translation> <translation id="3644896802912593514">Breidd</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> atriði færð.</translation> <translation id="3645531960514756307">Losa möppu</translation> <translation id="3678559383040232393">Maltneskt lyklaborð</translation> <translation id="3685122418104378273">Sjálfgefið er slökkt á Google Drive samstillingu þegar farsímagögn eru notuð.</translation> @@ -395,6 +399,7 @@ Jafnvel þótt eitthvað komi fyrir tækið þitt eru skrárnar þínar öruggar á Google Drive.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Þú getur deilt, búið til og<ph name="MARKUP_8" /> unnið í skrám ásamt öðrum, allt á einum stað.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Afritað.</translation> <translation id="5275973617553375938">Endurheimtar skrár af Google Drive</translation> <translation id="5317780077021120954">Vista</translation> <translation id="5318819489018851358">Deila með Linux</translation> @@ -593,6 +598,7 @@ <translation id="751507702149411736">Hvítrússneskt</translation> <translation id="7544853251252956727">Stokka</translation> <translation id="7547811415869834682">Hollenskt</translation> +<translation id="7551643184018910560">Festa á hillu</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Hinkraðu augnablik</translation> <translation id="7603724359189955920">Grind</translation> @@ -676,6 +682,7 @@ <translation id="8299269255470343364">Japanskt</translation> <translation id="8312871300878166382">Líma inn í möppu</translation> <translation id="8329978297633540474">Ósniðinn texti</translation> +<translation id="8335587457941836791">Losa úr hillu</translation> <translation id="8336153091935557858">Í gær <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Íslenskt lyklaborð</translation> <translation id="8342318071240498787">Skrá eða mappa með sama heiti er þegar til.</translation> @@ -748,6 +755,7 @@ <translation id="943972244133411984">Breytt af</translation> <translation id="945522503751344254">Senda ábendingu</translation> <translation id="947144732524271678">Valdi <ph name="ENTRY_COUNT" /> færslur, <ph name="FROM_ENTRY_NAME" />–<ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> afritað.</translation> <translation id="981121421437150478">Ónettengt</translation> <translation id="988685240266037636">Skrá með heitið „<ph name="FILE_NAME" />“ er þegar fyrir hendi. Viltu skipta henni út?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_it.xtb b/ui/chromeos/translations/ui_chromeos_strings_it.xtb index c1907fb..d7c98a1 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_it.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_it.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Impossibile accedere al file per motivi di sicurezza.</translation> <translation id="169515659049020177">Maiusc</translation> <translation id="1722487484194605434">Compressione di <ph name="NUMBER_OF_ITEMS" /> elementi...</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> elementi copiati.</translation> <translation id="174173592514158117">Mostra tutte le cartelle di Play</translation> <translation id="174937106936716857">Numero totale di file</translation> <translation id="1775381402323441512">Info video</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Carattere non valido: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Tastiera Vietnamita (TCVN)</translation> <translation id="2168214441502403371">Tastiera Persiano</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> spostato.</translation> <translation id="2198315389084035571">Cinese semplificato</translation> <translation id="2208158072373999562">Archivio Zip</translation> <translation id="2225536596944493418">Vuoi eliminare <ph name="NUMBER_OF_ITEMS" /> elementi?</translation> <translation id="2230062665678605299">Impossibile creare la cartella "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Spostato.</translation> <translation id="2278988676849463018">Tastiera Kannada (fonetica)</translation> <translation id="2288278176040912387">Giradischi</translation> <translation id="2291538123825441971">Apertura di file <ph name="NUMBER_OF_FILES" />.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Backup di tutti i contenuti completato.</translation> <translation id="3626281679859535460">Luminosità</translation> <translation id="3644896802912593514">Larghezza</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> elementi spostati.</translation> <translation id="3645531960514756307">Sblocca cartella</translation> <translation id="3678559383040232393">Tastiera Maltese</translation> <translation id="3685122418104378273">La sincronizzazione con Google Drive è disattivata per impostazione predefinita quando vengono utilizzati i dati mobili.</translation> @@ -394,6 +398,7 @@ <ph name="MARKUP_4" />Tieni al sicuro i tuoi file.<ph name="MARKUP_5" /> Qualsiasi cosa accada al tuo dispositivo, i tuoi file rimangono memorizzati al sicuro in Google Drive.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Condividi, crea e collabora<ph name="MARKUP_8" /> a file con altre persone, il tutto in un'unica posizione.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Copiato.</translation> <translation id="5275973617553375938">File recuperati da Google Drive</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Salva</translation> @@ -593,6 +598,7 @@ <translation id="751507702149411736">Bielorusso</translation> <translation id="7544853251252956727">Riproduzione casuale</translation> <translation id="7547811415869834682">Olandese</translation> +<translation id="7551643184018910560">Fissa sullo shelf</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Aspetta solo un secondo</translation> <translation id="7603724359189955920">Griglie</translation> @@ -676,6 +682,7 @@ <translation id="8299269255470343364">Giapponese</translation> <translation id="8312871300878166382">Incolla nella cartella</translation> <translation id="8329978297633540474">Testo normale</translation> +<translation id="8335587457941836791">Stacca dallo shelf</translation> <translation id="8336153091935557858">Ieri alle <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Tastiera islandese</translation> <translation id="8342318071240498787">Esiste già un file o una directory con lo stesso nome.</translation> @@ -748,6 +755,7 @@ <translation id="943972244133411984">Modificato da</translation> <translation id="945522503751344254">Invia feedback</translation> <translation id="947144732524271678">È stato selezionato un intervallo di <ph name="ENTRY_COUNT" /> elementi da <ph name="FROM_ENTRY_NAME" /> a <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> copiato.</translation> <translation id="981121421437150478">Offline</translation> <translation id="988685240266037636">Esiste già un file chiamato "<ph name="FILE_NAME" />". Vuoi sostituirlo?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb index 39be0ec..1bbc74d7 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">לא היתה אפשרות לגשת לקובץ מסיבות אבטחה.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">מכווץ <ph name="NUMBER_OF_ITEMS" /> פריטים…</translation> +<translation id="1731889557567069540">הועתקו <ph name="NUMBER_OF_ITEMS" /> פריטים.</translation> <translation id="174173592514158117">הצגת כל תיקיות Play</translation> <translation id="174937106936716857">מספר הקבצים הכולל</translation> <translation id="1775381402323441512">פרטי הסרטון</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">תו לא חוקי: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">מקלדת וייטנאמית (TCVN)</translation> <translation id="2168214441502403371">מקלדת פרסית</translation> +<translation id="2197363559908958454">ההעברה של <ph name="NUMBER_OF_ITEMS" /> הסתיימה.</translation> <translation id="2198315389084035571">סינית פשוטה</translation> <translation id="2208158072373999562">ארכיון Zip</translation> <translation id="2225536596944493418"><ph name="NUMBER_OF_ITEMS" /> פריטים יימחקו. להמשיך?</translation> <translation id="2230062665678605299">לא ניתן ליצור את התיקיה "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">ההעברה הסתיימה.</translation> <translation id="2278988676849463018">מקלדת קנאדה (פונטית)</translation> <translation id="2288278176040912387">פטיפון</translation> <translation id="2291538123825441971"><ph name="NUMBER_OF_FILES" /> קבצים נפתחים.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">הכל מגובה!</translation> <translation id="3626281679859535460">בהירות</translation> <translation id="3644896802912593514">רוחב</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> פריטים הועברו.</translation> <translation id="3645531960514756307">ביטול הצמדת התיקייה</translation> <translation id="3678559383040232393">מקלדת מלטית</translation> <translation id="3685122418104378273">הסנכרון של Google Drive מושבת כברירת מחדל בעת שימוש בנתונים לנייד.</translation> @@ -396,6 +400,7 @@ ב-Google Drive.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />שתף, צור ועבוד במשותף<ph name="MARKUP_8" /> על קבצים עם אנשים נוספים - הכל במקום אחד.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">ההעתקה הסתיימה.</translation> <translation id="5275973617553375938">קבצים ששוחזרו מ-Google Drive</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">שמור</translation> @@ -595,6 +600,7 @@ <translation id="751507702149411736">ביילורוסית</translation> <translation id="7544853251252956727">ערבוב</translation> <translation id="7547811415869834682">הולנדית</translation> +<translation id="7551643184018910560">הצמד למדף</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">המתן מספר רגעים</translation> <translation id="7603724359189955920">רשתות</translation> @@ -678,6 +684,7 @@ <translation id="8299269255470343364">יפנית</translation> <translation id="8312871300878166382">הדבק בתיקייה</translation> <translation id="8329978297633540474">טקסט רגיל</translation> +<translation id="8335587457941836791">ביטול הצמדה למדף</translation> <translation id="8336153091935557858">אתמול <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">מקלדת איסלנדית</translation> <translation id="8342318071240498787">קובץ או ספריה עם אותו שם כבר קיימים.</translation> @@ -750,6 +757,7 @@ <translation id="943972244133411984">שונה על ידי</translation> <translation id="945522503751344254"> שליחת משוב</translation> <translation id="947144732524271678">בחרת טווח של <ph name="ENTRY_COUNT" /> פריטים, מ-<ph name="FROM_ENTRY_NAME" /> עד <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615">ההעתקה של <ph name="NUMBER_OF_ITEMS" /> הסתיימה.</translation> <translation id="981121421437150478">לא מקוון</translation> <translation id="988685240266037636">כבר קיים קובץ בשם "<ph name="FILE_NAME" />". רוצה להחליף אותו?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ja.xtb b/ui/chromeos/translations/ui_chromeos_strings_ja.xtb index b73fb0c..6033de4 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ja.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">ベラルーシ語</translation> <translation id="7544853251252956727">シャッフル</translation> <translation id="7547811415869834682">オランダ語</translation> +<translation id="7551643184018910560">シェルフに固定</translation> <translation id="7576032389798113292">6×4</translation> <translation id="7589661784326793847">少々お待ちください</translation> <translation id="7603724359189955920">グリッド</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">日本語</translation> <translation id="8312871300878166382">フォルダに貼り付け</translation> <translation id="8329978297633540474">テキスト</translation> +<translation id="8335587457941836791">シェルフの固定解除</translation> <translation id="8336153091935557858">昨日 <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">アイスランド語キーボード</translation> <translation id="8342318071240498787">同じ名前のファイルまたはディレクトリが既に存在しています。</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ka.xtb b/ui/chromeos/translations/ui_chromeos_strings_ka.xtb index b03c975f0..08377b6 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ka.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ka.xtb
@@ -593,6 +593,7 @@ <translation id="751507702149411736">ბელორუსული</translation> <translation id="7544853251252956727">არეულად დაკვრა</translation> <translation id="7547811415869834682">ჰოლანდიური</translation> +<translation id="7551643184018910560">დაამაგრეთ თაროზე</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">დაელოდეთ ერთი წამი</translation> <translation id="7603724359189955920">ბადეები</translation> @@ -676,6 +677,7 @@ <translation id="8299269255470343364">იაპონური</translation> <translation id="8312871300878166382">ჩასმა საქაღალდეში</translation> <translation id="8329978297633540474">ჩვეულებრივი ტექსტი</translation> +<translation id="8335587457941836791">მოხსენით თაროდან</translation> <translation id="8336153091935557858">გუშინ <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">ისლანდიური კლავიატურა</translation> <translation id="8342318071240498787">ფაილი ან დირექტორია ამ სახელით უკვე არსებობს.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kk.xtb b/ui/chromeos/translations/ui_chromeos_strings_kk.xtb index 98b17e07..ec47e324 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_kk.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_kk.xtb
@@ -593,6 +593,7 @@ <translation id="751507702149411736">беларус</translation> <translation id="7544853251252956727">Кездейсоқ</translation> <translation id="7547811415869834682">голланд</translation> +<translation id="7551643184018910560">Сөреге бекіту</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Күте тұрыңыз</translation> <translation id="7603724359189955920">Торлар</translation> @@ -676,6 +677,7 @@ <translation id="8299269255470343364">жапон</translation> <translation id="8312871300878166382">Қалта ішіне қою</translation> <translation id="8329978297633540474">Қарапайым мәтін</translation> +<translation id="8335587457941836791">Сөреден босату</translation> <translation id="8336153091935557858">Кеше <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Исланд пернетақтасы</translation> <translation id="8342318071240498787">Бұндай атауы бар файл немесе каталог бұрыннан бар.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_km.xtb b/ui/chromeos/translations/ui_chromeos_strings_km.xtb index 4fd54be..25109f98 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_km.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_km.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">ឯកសារនេះមិនអាចត្រូវបានចូលប្រើទេដោយសារហេតុផលសុវត្ថិភាព។</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">កំពុងបង្រួមធាតុ <ph name="NUMBER_OF_ITEMS" /> ...</translation> +<translation id="1731889557567069540">បានចម្លងធាតុ <ph name="NUMBER_OF_ITEMS" />។</translation> <translation id="174173592514158117">បង្ហាញថត Play ទាំងអស់</translation> <translation id="174937106936716857">ការរាប់ឯកសារសរុប</translation> <translation id="1775381402323441512">ព័ត៌មានអំពីវីដេអូ</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">តួអក្សរមិនត្រឹមត្រូវ៖ <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">ក្តារចុចវៀតណាម (TCVN)</translation> <translation id="2168214441502403371">ក្តារចុចពែក</translation> +<translation id="2197363559908958454">បានផ្លាស់ទី <ph name="NUMBER_OF_ITEMS" />។</translation> <translation id="2198315389084035571">ភាសាចិនសាមញ្ញ</translation> <translation id="2208158072373999562">បណ្ណាសារឯកសារបង្រួម</translation> <translation id="2225536596944493418">តើអ្នកប្រាកដថាចង់លុបធាតុ <ph name="NUMBER_OF_ITEMS" /> ដែរទេ?</translation> <translation id="2230062665678605299">មិនអាចបង្កើតថតឯកសារ "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">បានផ្លាស់ទី។</translation> <translation id="2278988676849463018">ក្តារចុចកាណាដា (Phonetic)</translation> <translation id="2288278176040912387">ឧបករណ៍ចាក់ថាស</translation> <translation id="2291538123825441971">កំពុងបើកឯកសារ <ph name="NUMBER_OF_FILES" />។</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">បានបម្រុងទុកអស់ហើយ!</translation> <translation id="3626281679859535460">កម្រិតពន្លឺ</translation> <translation id="3644896802912593514">ទទឹង</translation> +<translation id="3645233063072417428">បានផ្លាស់ទីធាតុ <ph name="NUMBER_OF_ITEMS" />។</translation> <translation id="3645531960514756307">ដកខ្ទាស់ថត</translation> <translation id="3678559383040232393">ក្តារចុចម៉ាល់ថេស</translation> <translation id="3685122418104378273">សមកម្ម Google Drive ត្រូវបានបិទដំណើរការតាមលំនាំដើម នៅពេលប្រើទិន្នន័យចល័ត។</translation> @@ -395,6 +399,7 @@ មិនថាមានអ្វីកើតឡើងចំពោះឧបករណ៍របស់អ្នក ឯកសាររបស់អ្នកនៅតែត្រូវបានផ្ទុកដោយសុវត្ថិភាពនៅលើ Google ថាសដដែល។<ph name="MARKUP_6" /> <ph name="MARKUP_7" />ចែករំលែក បង្កើត និងធ្វើការសហការ<ph name="MARKUP_8" /> នៅលើឯកសារជាមួយអ្នកដ៏ទៃនៅក្នុងកន្លែងតែមួយ។<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">បានចម្លង។</translation> <translation id="5275973617553375938">ឯកសារដែលបានសង្គ្រោះពី Google Drive</translation> <translation id="5317780077021120954">រក្សាទុក</translation> <translation id="5318819489018851358">ចែករំលែកជាមួយ Linux</translation> @@ -593,6 +598,7 @@ <translation id="751507702149411736">ភាសាបេឡារុស្ស</translation> <translation id="7544853251252956727">ច្របល់</translation> <translation id="7547811415869834682">ភាសាហូឡង់</translation> +<translation id="7551643184018910560">ដៅទៅធ្នើ</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">រង់ចាំមួយភ្លែត</translation> <translation id="7603724359189955920">ក្រឡា</translation> @@ -676,6 +682,7 @@ <translation id="8299269255470343364">ភាសាជប៉ុន</translation> <translation id="8312871300878166382">បិទភ្ជាប់ទៅក្នុងថតឯកសារ</translation> <translation id="8329978297633540474">អត្ថបទធម្មតា</translation> +<translation id="8335587457941836791">ដកការដៅចេញពីធ្នើ</translation> <translation id="8336153091935557858">ម្សិលមិញ <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">ក្តារចុចអាយឡេន៍</translation> <translation id="8342318071240498787">មានឯកសារ ឬថតឯកសារដែលមានឈ្មោះដូចនេះមានរួចទៅហើយ។</translation> @@ -748,6 +755,7 @@ <translation id="943972244133411984">កែសម្រួលដោយ</translation> <translation id="945522503751344254">ផ្ញើមតិ</translation> <translation id="947144732524271678">បានជ្រើសរើសធាតុ <ph name="ENTRY_COUNT" /> ជួរចាប់ពី <ph name="FROM_ENTRY_NAME" /> ដល់ <ph name="TO_ENTRY_NAME" /> ។</translation> +<translation id="949308258121608615">បានចម្លង <ph name="NUMBER_OF_ITEMS" />។</translation> <translation id="981121421437150478">ក្រៅបណ្តាញ</translation> <translation id="988685240266037636">ឯកសារដែលដាក់ឈ្មោះ "<ph name="FILE_NAME" />" មានរួចហើយ។ តើអ្នកចង់ជំនួសវាដែរទេ?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb index ebd3ae6..50e07eb3 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
@@ -586,6 +586,7 @@ <translation id="751507702149411736">ಬೆಲರೂಸಿಯನ್</translation> <translation id="7544853251252956727">ಶಫಲ್ ಮಾಡಿ</translation> <translation id="7547811415869834682">ಡಚ್</translation> +<translation id="7551643184018910560">ಶೆಲ್ಫ್ಗೆ ಪಿನ್ ಮಾಡು</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">ಸ್ವಲ್ಪ ಕಾಯಿರಿ</translation> <translation id="7603724359189955920">ಗ್ರಿಡ್ಗಳು</translation> @@ -665,6 +666,7 @@ <translation id="8299269255470343364">ಜಪಾನೀಸ್</translation> <translation id="8312871300878166382">ಫೋಲ್ಡರ್ಗೆ ಅಂಟಿಸಿ</translation> <translation id="8329978297633540474">ಸರಳ ಪಠ್ಯ</translation> +<translation id="8335587457941836791">ಶೆಲ್ಫ್ನಿಂದ ಅನ್ಪಿನ್ ಮಾಡು</translation> <translation id="8336153091935557858">ನಿನ್ನೆ <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">ಐಸ್ಲ್ಯಾಂಡಿಕ್ ಕೀಬೋರ್ಡ್</translation> <translation id="8342318071240498787">ಒಂದೇ ಹೆಸರಿನೊಂದಿಗೆ ಫೈಲ್ ಅಥವಾ ಡೈರೆಕ್ಟರಿ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb index f8f43818..4ebcc62 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">벨로루시어</translation> <translation id="7544853251252956727">셔플</translation> <translation id="7547811415869834682">네덜란드어</translation> +<translation id="7551643184018910560">임시보관함에 고정</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">잠시만 기다려 주세요.</translation> <translation id="7603724359189955920">격자</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">일본어</translation> <translation id="8312871300878166382">폴더에 붙여넣기</translation> <translation id="8329978297633540474">일반 텍스트</translation> +<translation id="8335587457941836791">임시보관함에서 고정 해제</translation> <translation id="8336153091935557858">어제 <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">아이슬란드어 키보드</translation> <translation id="8342318071240498787">같은 이름을 가진 파일 또는 디렉터리가 이미 존재합니다.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ky.xtb b/ui/chromeos/translations/ui_chromeos_strings_ky.xtb index 9182e0d5..eccf44e 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ky.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ky.xtb
@@ -593,6 +593,7 @@ <translation id="751507702149411736">Беларусча</translation> <translation id="7544853251252956727">Аралаш</translation> <translation id="7547811415869834682">Голландча</translation> +<translation id="7551643184018910560">Текчеге кадап коюу</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Бир секунд күтө туруңуз</translation> <translation id="7603724359189955920">Торчолор</translation> @@ -676,6 +677,7 @@ <translation id="8299269255470343364">Жапончо</translation> <translation id="8312871300878166382">Папкага чаптоо</translation> <translation id="8329978297633540474">Жөнөкөй текст</translation> +<translation id="8335587457941836791">Текчеден бошотуу</translation> <translation id="8336153091935557858">Кечээ <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Исландча баскычтоп</translation> <translation id="8342318071240498787">Мындай аталыштагы файл же каталог мурунтан эле бар.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lo.xtb b/ui/chromeos/translations/ui_chromeos_strings_lo.xtb index 318d44e..9c362ee 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_lo.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_lo.xtb
@@ -593,6 +593,7 @@ <translation id="751507702149411736">ພາສາເບລາຣຸສ</translation> <translation id="7544853251252956727">ສັບປ່ຽນ</translation> <translation id="7547811415869834682">ພາສາດັຊ</translation> +<translation id="7551643184018910560">ປັກໝຸດໃສ່ຖ້ານ</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">ລໍຖ້າຈັກໜ້ອຍ</translation> <translation id="7603724359189955920">ຕາໜ່າງ</translation> @@ -676,6 +677,7 @@ <translation id="8299269255470343364">ພາສາຍີ່ປຸ່ນ</translation> <translation id="8312871300878166382">ແປະໃສ່ໃນໂຟລເດີ</translation> <translation id="8329978297633540474">ຂໍ້ຄວາມທໍາມະດາ</translation> +<translation id="8335587457941836791">ຖອນປັກໝຸດຈາກຖ້ານ</translation> <translation id="8336153091935557858">ມື້ວານນີ້ <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">ຄີບອດພາສາໄອແລນດິກ</translation> <translation id="8342318071240498787">ມີໄຟລ໌ ຫຼືໄດເຣັກຕໍຣີທີ່ມີຊື່ດຽວກັນຢູ່ແລ້ວ.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lt.xtb b/ui/chromeos/translations/ui_chromeos_strings_lt.xtb index 2a3bb267..fcd879b 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_lt.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Failo nepavyko pasiekti dėl saugumo.</translation> <translation id="169515659049020177">Antrojo lygio klavišas</translation> <translation id="1722487484194605434">Archyvuojama elementų: <ph name="NUMBER_OF_ITEMS" />...</translation> +<translation id="1731889557567069540">Nukopijuota tiek elementų: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="174173592514158117">Rodyti visus „Play“ aplankus</translation> <translation id="174937106936716857">Bendras failų skaičius</translation> <translation id="1775381402323441512">Vaizdo įrašo informacija</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Netinkamas simbolis: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Vietnamietiška klaviatūra (TCVN)</translation> <translation id="2168214441502403371">Persiška klaviatūra</translation> +<translation id="2197363559908958454">Perkelta: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="2198315389084035571">Supaprastinta kinų k.</translation> <translation id="2208158072373999562">Talpusis archyvas</translation> <translation id="2225536596944493418">Ar tikrai norite ištrinti <ph name="NUMBER_OF_ITEMS" /> element.?</translation> <translation id="2230062665678605299">Nepavyko sukurti aplanko „<ph name="FOLDER_NAME" />“. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Perkelta.</translation> <translation id="2278988676849463018">Kanadietiška klaviatūra (fonetinė)</translation> <translation id="2288278176040912387">Grotuvas</translation> <translation id="2291538123825441971">Atidaroma failų: <ph name="NUMBER_OF_FILES" />.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Atsarginis kopijavimas baigtas!</translation> <translation id="3626281679859535460">Šviesumas</translation> <translation id="3644896802912593514">Plotis</translation> +<translation id="3645233063072417428">Perkelta elementų: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="3645531960514756307">Atsegti aplanką</translation> <translation id="3678559383040232393">Maltiečių klaviatūra</translation> <translation id="3685122418104378273">„Google“ disko sinchronizavimas pagal numatytuosius nustatymus yra išjungtas, kai naudojami mobiliojo ryšio duomenys.</translation> @@ -395,6 +399,7 @@ Kad ir kas nutiktų jūsų įrenginiui, failai patikimai saugomi „Google“ diske.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Bendrinkite, kurkite ir naudokite<ph name="MARKUP_8" /> failus su kitais vienoje vietoje.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Nukopijuota.</translation> <translation id="5275973617553375938">Atkurti failai iš „Google“ disko</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Išsaugoti</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">Baltarusių</translation> <translation id="7544853251252956727">Maišyti</translation> <translation id="7547811415869834682">Olandų</translation> +<translation id="7551643184018910560">Prisegti prie lentynos</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Luktelėkite sekundėlę</translation> <translation id="7603724359189955920">Tinkleliai</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">Japonų</translation> <translation id="8312871300878166382">Įklijuoti į aplanką</translation> <translation id="8329978297633540474">Grynasis tekstas</translation> +<translation id="8335587457941836791">Atsegti nuo lentynos</translation> <translation id="8336153091935557858">Vakar <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Islandiška klaviatūra</translation> <translation id="8342318071240498787">Failas ar katalogas tokiu pačiu pavadinimu jau yra.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Pakeitė</translation> <translation id="945522503751344254">Siųsti atsiliepimą</translation> <translation id="947144732524271678">Pasirinkti įrašai nuo „<ph name="FROM_ENTRY_NAME" />“ iki „<ph name="TO_ENTRY_NAME" />“, iš viso <ph name="ENTRY_COUNT" />.</translation> +<translation id="949308258121608615">Nukopijuota: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="981121421437150478">Neprisijungus</translation> <translation id="988685240266037636">Failas pavadinimu „<ph name="FILE_NAME" />“ jau yra. Ar norite jį pakeisti?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb index dee98c0..5a7a8c9 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">Baltkrievu valoda</translation> <translation id="7544853251252956727">Sajaukt</translation> <translation id="7547811415869834682">Holandiešu valoda</translation> +<translation id="7551643184018910560">Piespraust plauktam</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Mirkli uzgaidiet!</translation> <translation id="7603724359189955920">Režģi</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">Japāņu valoda</translation> <translation id="8312871300878166382">Ielīmēt mapē</translation> <translation id="8329978297633540474">Vienkāršs teksts</translation> +<translation id="8335587457941836791">Atspraust no plaukta</translation> <translation id="8336153091935557858">Vakar plkst. <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Īslandiešu tastatūras izkārtojums</translation> <translation id="8342318071240498787">Fails vai direktorijs ar šādu nosaukumu jau pastāv.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mk.xtb b/ui/chromeos/translations/ui_chromeos_strings_mk.xtb index 230bece..7058b66d 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_mk.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_mk.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Не можеше да се пристапи до датотеката поради безбедносни причини.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">Се пакуваат <ph name="NUMBER_OF_ITEMS" /> ставки…</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> ставки се копирани.</translation> <translation id="174173592514158117">Прикажи ги сите папки на Play</translation> <translation id="174937106936716857">Вкупен број датотеки</translation> <translation id="1775381402323441512">Информации за видеото</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Неважечки знак: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">виетнамска тастатура (TCVN)</translation> <translation id="2168214441502403371">персиска тастатура</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> е преместена.</translation> <translation id="2198315389084035571">поедноставен кинески</translation> <translation id="2208158072373999562">Архива Zip</translation> <translation id="2225536596944493418">Дали сигурно сакате да избришете <ph name="NUMBER_OF_ITEMS" /> ставки?</translation> <translation id="2230062665678605299">Не може да се создаде папка „<ph name="FOLDER_NAME" />“. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Преместено.</translation> <translation id="2278988676849463018">канада тастатура (фонетска)</translation> <translation id="2288278176040912387">Грамофон</translation> <translation id="2291538123825441971">Се отвораат <ph name="NUMBER_OF_FILES" /> датотеки.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Сѐ е ископирано!</translation> <translation id="3626281679859535460">Осветленост</translation> <translation id="3644896802912593514">Ширина</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> ставки се преместени.</translation> <translation id="3645531960514756307">Откачете ја папката</translation> <translation id="3678559383040232393">Малтешка тастатура</translation> <translation id="3685122418104378273">Кога се користат мобилни податоци, синхронизацијата со Google Drive стандардно е оневозможена.</translation> @@ -395,6 +399,7 @@ Што и да се случува со уредот, вашите датотеки се безбедно складирани во Google Drive.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Споделувајте, создавајте и соработувајте<ph name="MARKUP_8" /> на датотеки со други, сѐ на едно место.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Копирано.</translation> <translation id="5275973617553375938">Повратени датотеки од Google Диск</translation> <translation id="5317780077021120954">Зачувај</translation> <translation id="5318819489018851358">Споделете со Linux</translation> @@ -593,6 +598,7 @@ <translation id="751507702149411736">белоруска</translation> <translation id="7544853251252956727">Измешај</translation> <translation id="7547811415869834682">Холандски</translation> +<translation id="7551643184018910560">Прикачи на полицата</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Почекајте малку</translation> <translation id="7603724359189955920">Мрежи</translation> @@ -676,6 +682,7 @@ <translation id="8299269255470343364">јапонски</translation> <translation id="8312871300878166382">Залепи во папка</translation> <translation id="8329978297633540474">Обичен текст</translation> +<translation id="8335587457941836791">Откачи од полица</translation> <translation id="8336153091935557858">Вчера <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">исландска тастатура</translation> <translation id="8342318071240498787">Веќе постои датотека или директориум со истото име.</translation> @@ -748,6 +755,7 @@ <translation id="943972244133411984">Изменето од</translation> <translation id="945522503751344254">Испратете повратни информации</translation> <translation id="947144732524271678">Избравте опсег од <ph name="ENTRY_COUNT" /> записи од <ph name="FROM_ENTRY_NAME" /> до <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> е копирана.</translation> <translation id="981121421437150478">Без мрежа</translation> <translation id="988685240266037636">Веќе постои датотека со име „<ph name="FILE_NAME" />“. Дали сакате да ја замените?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb index dacf324..45cb149 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">ബെലാറുഷ്യൻ</translation> <translation id="7544853251252956727">ഷഫിൾ ചെയ്യുക</translation> <translation id="7547811415869834682">ഡച്ച്</translation> +<translation id="7551643184018910560">ഷെൽഫിലേക്ക് പിൻ ചെയ്യുക</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">ഒരു നിമിഷം കാത്തിരിക്കുക</translation> <translation id="7603724359189955920">ഗ്രിഡുകൾ</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">ജാപ്പനീസ്</translation> <translation id="8312871300878166382">ഫോൾഡറിൽ ഒട്ടിക്കുക</translation> <translation id="8329978297633540474">പ്ലെയിന് വാചകം</translation> +<translation id="8335587457941836791">ഷെൽഫിൽ നിന്ന് അൺപിൻ ചെയ്യുക</translation> <translation id="8336153091935557858">ഇന്നലെ <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">ഐസ്ലാൻഡിക് കീബോർഡ്</translation> <translation id="8342318071240498787">സമാന പേരിലുള്ള ഫയൽ അല്ലെങ്കിൽ ഡയറക്റ്ററി ഇതിനകം നിലവിലുണ്ട്.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mn.xtb b/ui/chromeos/translations/ui_chromeos_strings_mn.xtb index 7e28fa66..0f52ef4 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_mn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_mn.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Файлд аюулгүй байдлын үүднээс нэвтэрч чадсангүй.</translation> <translation id="169515659049020177">Солих</translation> <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> зүйлийг zip хийж байна...</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> зүйлийг хуулсан.</translation> <translation id="174173592514158117">Play-н бүх хавтсыг харуулах</translation> <translation id="174937106936716857">Нийт файлын тоо</translation> <translation id="1775381402323441512">Видеоны мэдээлэл</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Хүчингүй тэмдэгт: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Вьетнам хэлний гар (TCVN)</translation> <translation id="2168214441502403371">Перс хэлний гар</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" />-г зөөсөн.</translation> <translation id="2198315389084035571">Хялбаршуулсан Хятад хэл</translation> <translation id="2208158072373999562">Зип архив</translation> <translation id="2225536596944493418">Та <ph name="NUMBER_OF_ITEMS" /> зүйлийг устгахдаа итгэлтэй байна уу?</translation> <translation id="2230062665678605299">"<ph name="FOLDER_NAME" /> ". <ph name="ERROR_MESSAGE" /> хавтас үүсгэх боломжгүй байна</translation> +<translation id="2275059641601412272">Зөөсөн.</translation> <translation id="2278988676849463018">Каннада хэлний гар (дуудлагын)</translation> <translation id="2288278176040912387">Бичлэг тоглуулагч</translation> <translation id="2291538123825441971"><ph name="NUMBER_OF_FILES" /> файлыг нээж байна.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Бүгдийг хадгалсан болно!</translation> <translation id="3626281679859535460">Цайралт</translation> <translation id="3644896802912593514">Өргөн</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> зүйлийг зөөсөн.</translation> <translation id="3645531960514756307">Фолдерийг тогтоосныг болиулах</translation> <translation id="3678559383040232393">Мальти хэлний гар</translation> <translation id="3685122418104378273">Гар утасны мэдээллийг ашиглаж байх үед Google Drive синк нь автоматаар идэвхгүй болно.</translation> @@ -393,6 +397,7 @@ Таны төхөөрөмжид юу ч тохиолдсон санаа зовох хэрэггүй. Учир нь таны файлыг Google Драйвт аюулгүй хадгалсан байна.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Бусадтай бүх файлаа<ph name="MARKUP_8" /> нэг газар үүсгэж, хуваалцаж, ажиллаарай.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Хуулсан.</translation> <translation id="5275973617553375938">Google Drive-аас файлуудыг сэргээлээ</translation> <translation id="5317780077021120954">Хадгалах</translation> <translation id="5318819489018851358">Linux-р хуваалцах</translation> @@ -591,6 +596,7 @@ <translation id="751507702149411736">Беларус</translation> <translation id="7544853251252956727">Тохиолдлоор тоглуулах</translation> <translation id="7547811415869834682">Голланд</translation> +<translation id="7551643184018910560">Програмын жагсаалтын өмнө гаргах</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Түр хүлээнэ үү</translation> <translation id="7603724359189955920">Toрлол</translation> @@ -674,6 +680,7 @@ <translation id="8299269255470343364">Япон</translation> <translation id="8312871300878166382">Хавтас руу наах</translation> <translation id="8329978297633540474">Энгийн текст</translation> +<translation id="8335587457941836791">Програмын жагсаалтын эхэнд байрлуулахыг болих</translation> <translation id="8336153091935557858">Өчигдөр <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Исланд хэлний гар</translation> <translation id="8342318071240498787">Ийм нэртэй файл болон файлын хадгалалтын сан байна.</translation> @@ -746,6 +753,7 @@ <translation id="943972244133411984">Өөрчилсөн</translation> <translation id="945522503751344254">Санал хүсэлт илгээх</translation> <translation id="947144732524271678"><ph name="FROM_ENTRY_NAME" />-с <ph name="TO_ENTRY_NAME" /> хүртэлх <ph name="ENTRY_COUNT" /> оролтын мужийг сонгосон.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" />-г хуулсан.</translation> <translation id="981121421437150478">Offline</translation> <translation id="988685240266037636">"<ph name="FILE_NAME" />" нэртэй файл аль хэдийн байна. Та үүнийг солих уу?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> МБ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb index 4844edb..33b1d76 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">बेलारुशियन</translation> <translation id="7544853251252956727">शफल करा</translation> <translation id="7547811415869834682">डच</translation> +<translation id="7551643184018910560">शेल्फवर पिन करा</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">फक्त एक सेकंद प्रतीक्षा करा</translation> <translation id="7603724359189955920">ग्रिड</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">जपानी</translation> <translation id="8312871300878166382">फोल्डरमध्ये पेस्ट करा</translation> <translation id="8329978297633540474">साधा मजकूर</translation> +<translation id="8335587457941836791">शेल्फपासून अनपिन करा</translation> <translation id="8336153091935557858">काल <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">आइसलँडिक कीबोर्ड</translation> <translation id="8342318071240498787">समान नावाची एखादी फाइल किंवा डिरेक्टरी आधीपासूनच अस्तित्वात आहे.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ms.xtb b/ui/chromeos/translations/ui_chromeos_strings_ms.xtb index 9feab668..4fd5f47 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ms.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ms.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Fail tidak boleh diakses atas sebab keselamatan.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">Mengezip <ph name="NUMBER_OF_ITEMS" /> item...</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> item disalin.</translation> <translation id="174173592514158117">Tunjukkan semua folder Play</translation> <translation id="174937106936716857">Jumlah kiraan fail</translation> <translation id="1775381402323441512">Maklumat video</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Aksara tidak sah: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Papan kekunci bahasa Vietnam (TCVN)</translation> <translation id="2168214441502403371">Papan kekunci bahasa Parsi</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> dialihkan.</translation> <translation id="2198315389084035571">Bahasa Cina Mudah</translation> <translation id="2208158072373999562">Arkib zip</translation> <translation id="2225536596944493418">Adakah anda pasti anda mahu memadamkan <ph name="NUMBER_OF_ITEMS" /> item?</translation> <translation id="2230062665678605299">Tidak dapat membuat folder "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Dialihkan.</translation> <translation id="2278988676849463018">Papan kekunci bahasa Kannada (Fonetik)</translation> <translation id="2288278176040912387">Pemain Piring Hitam</translation> <translation id="2291538123825441971">Membuka <ph name="NUMBER_OF_FILES" /> fail.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Semua disandarkan!</translation> <translation id="3626281679859535460">Kecerahan</translation> <translation id="3644896802912593514">Lebar</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> item dialihkan.</translation> <translation id="3645531960514756307">Nyahsemat folder</translation> <translation id="3678559383040232393">Papan kekunci Malta</translation> <translation id="3685122418104378273">Penyegerakan Google Drive dilumpuhkan secara lalai, apabila menggunakan data mudah alih.</translation> @@ -395,6 +399,7 @@ Tidak kira apa yang berlaku kepada peranti anda, fail anda disimpan dengan selamat dalam Google Drive.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Kongsi, buat dan bekerjasama<ph name="MARKUP_8" /> pada fail dengan orang lain, semuanya pada satu tempat.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Disalin.</translation> <translation id="5275973617553375938">Fail yang diperoleh semula dari Google Drive</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Simpan</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">Bahasa Belarus</translation> <translation id="7544853251252956727">Rombak</translation> <translation id="7547811415869834682">Bahasa Belanda</translation> +<translation id="7551643184018910560">Sematkan pada rak</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Sila tunggu sebentar</translation> <translation id="7603724359189955920">Grid</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">Bahasa Jepun</translation> <translation id="8312871300878166382">Tampal ke folder</translation> <translation id="8329978297633540474">Teks biasa</translation> +<translation id="8335587457941836791">Nyahsemat dari rak</translation> <translation id="8336153091935557858">Semalam <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Papan kekunci Iceland</translation> <translation id="8342318071240498787">Fail atau direktori dengan nama yang sama telah wujud.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Diubah suai oleh</translation> <translation id="945522503751344254">Hantar maklum balas</translation> <translation id="947144732524271678">Memilih <ph name="ENTRY_COUNT" /> masukan daripada <ph name="FROM_ENTRY_NAME" /> hingga <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> disalin.</translation> <translation id="981121421437150478">Luar talian</translation> <translation id="988685240266037636">Fail bernama "<ph name="FILE_NAME" />" sudah wujud. Adakah anda mahu menggantikannya?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_my.xtb b/ui/chromeos/translations/ui_chromeos_strings_my.xtb index bd18e3e8..c69e7c7 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_my.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_my.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">လုံခြုံရေးအချက်လက်များကြောင့် ဤဖိုင်အား အသုံးပြု၍ မရပါ။</translation> <translation id="169515659049020177">Shift ကီး</translation> <translation id="1722487484194605434">ဖိုင် <ph name="NUMBER_OF_ITEMS" /> ခု ဇစ်လုပ်နေသည်…</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> ခု မိတ္ထူကူးထားသည်။</translation> <translation id="174173592514158117">Play ဖိုင်တွဲအားလုံး ပြရန်</translation> <translation id="174937106936716857">စုစုပေါင်းဖိုင်အရေအတွက်</translation> <translation id="1775381402323441512">ဗီဒီယိုအချက်အလက်</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">အက္ခရာ မမှန်ကန်ပါ- <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">ဗီယက်နမ် ကီးဘုတ် (TCVN)</translation> <translation id="2168214441502403371">ပါရှား ကီးဘုတ်</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> ခု ရွှေ့ထားသည်။</translation> <translation id="2198315389084035571">ရိုးရှင်း တရုတ်</translation> <translation id="2208158072373999562">Zip မှတ်တမ်း</translation> <translation id="2225536596944493418">အကြောင်းအရာ <ph name="NUMBER_OF_ITEMS" />ခုကို ဖျက်လိုသည်မှာ သေချာသလား။</translation> <translation id="2230062665678605299">ဖိုလ်ဒါ "<ph name="FOLDER_NAME" />"ကို ဖန်တီး မရခဲ့ပါ။ <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">ရွှေ့ထားသည်။</translation> <translation id="2278988676849463018">ကန္နာဒါ ကီးဘုတ်(Phonetic)</translation> <translation id="2288278176040912387">ကစားသူ မှတ်တမ်းတင်</translation> <translation id="2291538123825441971">ဖိုင် <ph name="NUMBER_OF_FILES" /> ခု ဖွင့်နေသည်။</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">အားလုံးအရံသိမ်းဆည်းပြီးပါပြီ!</translation> <translation id="3626281679859535460">တောက်ပမှု</translation> <translation id="3644896802912593514">အလျား</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> ခု ရွှေ့ပြီးပြီ။</translation> <translation id="3645531960514756307">ဖိုင်တွဲကို ပင်ဖြုတ်ရန်</translation> <translation id="3678559383040232393">Maltese ကီးဘုတ်</translation> <translation id="3685122418104378273">မိုဘိုင်း ဒေတာကို အသုံးပြုချိန်မှာ ပုံသေအားဖြင့် Google ဒရိုက်ဗ် စင့်ကို ပိတ်ထားသည်။</translation> @@ -395,6 +399,7 @@ သင့်စက်ပစ္စည်း ဘာဖြစ်ဖြစ် သင့်ဖိုင်များကို Google Drive တွင်လုံခြုံစွာ သိမ်းဆည်းထားပါသည်။<ph name="MARKUP_6" /> <ph name="MARKUP_7" />ဖိုင်များကို မျှဝေခြင်း၊ ပြုစုခြင်းနှင့် ပူးပေါင်းလုပ်ဆောင်ခြင်း<ph name="MARKUP_8" /> တို့ကို တစ်နေရာတည်းတွင်လုပ်ဆောင်နိုင်သည်<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">မိတ္ထူကူးထားသည်။</translation> <translation id="5275973617553375938">Google Drive မှရှာဖွေထားသည့် ဖိုင်များ</translation> <translation id="5317780077021120954">သိမ်းရန်</translation> <translation id="5318819489018851358">Linux ဖြင့် မျှဝေရန်</translation> @@ -593,6 +598,7 @@ <translation id="751507702149411736">ဘယ်လာရုရှမ်း</translation> <translation id="7544853251252956727">ရောသမမွှေပါ</translation> <translation id="7547811415869834682">ဒတ်ချ</translation> +<translation id="7551643184018910560">စင်သို့ ပင်ထိုးရန်</translation> <translation id="7576032389798113292">၆x၄</translation> <translation id="7589661784326793847">ခဏလေး</translation> <translation id="7603724359189955920">မျဉ်းများ</translation> @@ -676,6 +682,7 @@ <translation id="8299269255470343364">ဂျပန်</translation> <translation id="8312871300878166382">ဖိုင်တွဲထဲသို့ ကူးထည့်ရန်</translation> <translation id="8329978297633540474">ရိုးရိုး စာသား</translation> +<translation id="8335587457941836791">စင် ပေါ်မှ ထုတ်ပစ်ရန်</translation> <translation id="8336153091935557858">မနေ့က <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">အိုက်စလန် ကီးဘုတ်</translation> <translation id="8342318071240498787">တူညီသည့် အမည်ဖြင့် ဖိုင်တစ်ဖိုင် သို့မဟုတ် လမ်းကြောင်းတစ်ခု ရှိပြီးဖြစ်သည်။</translation> @@ -748,6 +755,7 @@ <translation id="943972244133411984">ပြုပြင်ထားသူ</translation> <translation id="945522503751344254">အကြံပြုချက် ပေးပို့မည်</translation> <translation id="947144732524271678"><ph name="FROM_ENTRY_NAME" /> မှ<ph name="TO_ENTRY_NAME" /> သို့ ထည့်သွင်းမှု အပိုင်းအခြား <ph name="ENTRY_COUNT" /> ခု ကို ရွေးထားသည်။</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> ခု မိတ္တူကူးထားသည်။</translation> <translation id="981121421437150478">အော့ဖ်လိုင်း</translation> <translation id="988685240266037636">"<ph name="FILE_NAME" />" အမည်ဖြင့် ဖိုင်ရှိပြီးဖြစ်ပါသည်။ ၎င်းကို အစားထိုးလိုပါသလား။</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb index 2f2b81147..22e30133 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb
@@ -593,6 +593,7 @@ <translation id="751507702149411736">बेलारूसियन</translation> <translation id="7544853251252956727">मिसाउनुहोस्</translation> <translation id="7547811415869834682">डच</translation> +<translation id="7551643184018910560">शेल्फमा पिन गर्नुहोस्</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">केवल एक सेकेन्ड प्रतिक्षा गर्नुहोस्</translation> <translation id="7603724359189955920">ग्रिडहरू</translation> @@ -676,6 +677,7 @@ <translation id="8299269255470343364">जापानिज</translation> <translation id="8312871300878166382">फोल्डरमा टाँस्नुहोस्</translation> <translation id="8329978297633540474">सादा पाठ</translation> +<translation id="8335587457941836791">शेल्फबाट अनपिन गर्नुहोस्</translation> <translation id="8336153091935557858">हिजो <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">आइसल्यान्डिक किबोर्ड</translation> <translation id="8342318071240498787">यही नामको फाइल वा एक निर्देशिका पहिले नै अस्तित्वमा छ ।</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_nl.xtb b/ui/chromeos/translations/ui_chromeos_strings_nl.xtb index 074992cc..da7022f7 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_nl.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Uit veiligheidsoverwegingen kan het bestand niet worden geopend.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> items inpakken...</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> items gekopieerd.</translation> <translation id="174173592514158117">Alle Play-mappen weergeven</translation> <translation id="174937106936716857">Totaal aantal bestanden</translation> <translation id="1775381402323441512">Videogegevens</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Ongeldig teken: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Vietnamees toetsenbord (TCVN)</translation> <translation id="2168214441502403371">Perzisch toetsenbord</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> verplaatst.</translation> <translation id="2198315389084035571">Vereenvoudigd Chinees</translation> <translation id="2208158072373999562">Zip-archiefbestand</translation> <translation id="2225536596944493418">Weet je zeker dat je <ph name="NUMBER_OF_ITEMS" /> items wilt verwijderen?</translation> <translation id="2230062665678605299">Kan map '<ph name="FOLDER_NAME" />' niet maken. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Verplaatst.</translation> <translation id="2278988676849463018">Kannada toetsenbord (fonetisch)</translation> <translation id="2288278176040912387">Platenspeler</translation> <translation id="2291538123825441971"><ph name="NUMBER_OF_FILES" /> bestanden openen.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Er is een back-up van alles gemaakt</translation> <translation id="3626281679859535460">Helderheid</translation> <translation id="3644896802912593514">Breedte</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> items verplaatst.</translation> <translation id="3645531960514756307">Map losmaken</translation> <translation id="3678559383040232393">Maltees toetsenbord</translation> <translation id="3685122418104378273">De synchronisatie van Google Drive is bij het gebruik van mobiele data standaard uitgeschakeld.</translation> @@ -396,6 +400,7 @@ Wat er ook gebeurt met je apparaat, je bestanden worden veilig opgeslagen in Google Drive.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Bestanden delen, maken en eraan samenwerken<ph name="MARKUP_8" /> met anderen allemaal op één locatie.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Gekopieerd.</translation> <translation id="5275973617553375938">Bestanden hersteld vanaf Google Drive</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Opslaan</translation> @@ -595,6 +600,7 @@ <translation id="751507702149411736">Wit-Russisch</translation> <translation id="7544853251252956727">Shuffle</translation> <translation id="7547811415869834682">Nederlands</translation> +<translation id="7551643184018910560">Vastzetten op plank</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Een ogenblik geduld</translation> <translation id="7603724359189955920">Rasters</translation> @@ -678,6 +684,7 @@ <translation id="8299269255470343364">Japans</translation> <translation id="8312871300878166382">Plakken in map</translation> <translation id="8329978297633540474">Platte tekst</translation> +<translation id="8335587457941836791">Losmaken van plank</translation> <translation id="8336153091935557858">Gisteren <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">IJslands toetsenbord</translation> <translation id="8342318071240498787">Er bestaat al een bestand of map met dezelfde naam.</translation> @@ -750,6 +757,7 @@ <translation id="943972244133411984">Aangepast door</translation> <translation id="945522503751344254">Feedback sturen</translation> <translation id="947144732524271678">Een bereik van <ph name="ENTRY_COUNT" /> items van <ph name="FROM_ENTRY_NAME" /> tot <ph name="TO_ENTRY_NAME" /> is geselecteerd.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> gekopieerd.</translation> <translation id="981121421437150478">Offline</translation> <translation id="988685240266037636">Er bestaat al een bestand met de naam '<ph name="FILE_NAME" />'. Wil je dit bestand vervangen?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_no.xtb b/ui/chromeos/translations/ui_chromeos_strings_no.xtb index baf10b3..1171d86 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_no.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_no.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Filen kunne ikke åpnes av sikkerhetsårsaker.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">Zipper <ph name="NUMBER_OF_ITEMS" /> elementer …</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> elementer er kopiert.</translation> <translation id="174173592514158117">Vis alle Play-mapper</translation> <translation id="174937106936716857">Totalt antall filer</translation> <translation id="1775381402323441512">Videoinformasjon</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Ugyldig tegn: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Vietnamesisk tastatur (TCVN)</translation> <translation id="2168214441502403371">Persisk tastatur</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> er flyttet.</translation> <translation id="2198315389084035571">Kinesisk (forenklet)</translation> <translation id="2208158072373999562">.zip-arkiv</translation> <translation id="2225536596944493418">Er du sikker på at du vil slette <ph name="NUMBER_OF_ITEMS" /> elementer?</translation> <translation id="2230062665678605299">Kunne ikke opprette mappen «<ph name="FOLDER_NAME" />». <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Flyttet.</translation> <translation id="2278988676849463018">Kannada-tastatur (fonetisk)</translation> <translation id="2288278176040912387">Platespiller</translation> <translation id="2291538123825441971">Åpner <ph name="NUMBER_OF_FILES" /> filer.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Alt er sikkerhetskopiert!</translation> <translation id="3626281679859535460">Lysstyrke</translation> <translation id="3644896802912593514">Bredde</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> elementer er flyttet.</translation> <translation id="3645531960514756307">Løsne mappen</translation> <translation id="3678559383040232393">Maltesisk tastatur</translation> <translation id="3685122418104378273">Google Disk-synkronisering er deaktivert som standard ved bruk av mobile data.</translation> @@ -395,6 +399,7 @@ Uansett hva som skjer med enheten din, er filene dine trygt lagret i Google Disk.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Del, skap og samarbeid<ph name="MARKUP_8" /> med andre om filer – alt på ett sted.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Kopiert.</translation> <translation id="5275973617553375938">Gjenopprettede filer fra Google Disk</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Lagre</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">Hviterussisk</translation> <translation id="7544853251252956727">Spill i tilfeldig rekkefølge</translation> <translation id="7547811415869834682">Nederlandsk</translation> +<translation id="7551643184018910560">Fest til hyllen</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Vent et øyeblikk</translation> <translation id="7603724359189955920">Rutenett</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">Japansk</translation> <translation id="8312871300878166382">Lim inn i mappen</translation> <translation id="8329978297633540474">Ren tekst</translation> +<translation id="8335587457941836791">Løsne fra hyllen</translation> <translation id="8336153091935557858">I går kl. <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Islandsk tastatur</translation> <translation id="8342318071240498787">Det finnes allerede en fil eller en katalog med det samme navnet.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Endret av</translation> <translation id="945522503751344254">Send tilbakemelding</translation> <translation id="947144732524271678">Valgte et område med <ph name="ENTRY_COUNT" /> oppføringer – fra <ph name="FROM_ENTRY_NAME" /> til <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> er kopiert.</translation> <translation id="981121421437150478">Uten nett</translation> <translation id="988685240266037636">Filnavnet «<ph name="FILE_NAME" />» finnes allerede. Vil du erstatte filen med dette navnet?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_or.xtb b/ui/chromeos/translations/ui_chromeos_strings_or.xtb index 7e8da91..294991d 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_or.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_or.xtb
@@ -588,6 +588,7 @@ <translation id="751507702149411736">ବେଲାରଷୀୟ</translation> <translation id="7544853251252956727">ଅଦଳବଦଳ</translation> <translation id="7547811415869834682">ଡଚ୍</translation> +<translation id="7551643184018910560">ସେଲ୍ଫରେ ପିନ୍ କରନ୍ତୁ</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">ଗୋଟିଏ ସେକେଣ୍ଡ ଅପେକ୍ଷା କରନ୍ତୁ</translation> <translation id="7603724359189955920">ଗ୍ରିଡ୍ସ</translation> @@ -671,6 +672,7 @@ <translation id="8299269255470343364">ଜାପାନୀ</translation> <translation id="8312871300878166382">ଫୋଲ୍ଡର୍ରେ ପେଷ୍ଟ କରନ୍ତୁ</translation> <translation id="8329978297633540474">କେବଳ ଟେକ୍ସଟ୍</translation> +<translation id="8335587457941836791">ସେଲ୍ଫରୁ ଅନପିନ୍ କରନ୍ତୁ</translation> <translation id="8336153091935557858">ଗତକାଲି <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">ଆଇସ୍ଲାଣ୍ଡିକ୍ କୀବୋର୍ଡ</translation> <translation id="8342318071240498787">ସମାନ ନାମ ଥିବା ଗୋଟିଏ ଫାଇଲ୍ କିମ୍ବା ଡିରେକ୍ଟୋରୀ ପୂର୍ବରୁ ବିଦ୍ୟମାନ ଅଛି।</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pa.xtb b/ui/chromeos/translations/ui_chromeos_strings_pa.xtb index 93b13d7..24ac337 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pa.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pa.xtb
@@ -593,6 +593,7 @@ <translation id="751507702149411736">Belarusian</translation> <translation id="7544853251252956727">ਸ਼ੱਫਲ ਕਰੋ</translation> <translation id="7547811415869834682">ਡੱਚ</translation> +<translation id="7551643184018910560">ਸ਼ੈਲਫ ਤੇ ਪਿਨ ਕਰੋ</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">ਕੇਵਲ ਇੱਕ ਸਕਿੰਟ ਠਹਿਰੋ</translation> <translation id="7603724359189955920">ਗਰਿੱਡ</translation> @@ -676,6 +677,7 @@ <translation id="8299269255470343364">ਜਾਪਾਨੀ</translation> <translation id="8312871300878166382">ਫੋਲਡਰ ਵਿੱਚ ਪੇਸਟ ਕਰੋ</translation> <translation id="8329978297633540474">ਸਰਲ ਲਿਖਤ</translation> +<translation id="8335587457941836791">ਸ਼ੈਲਫ ਤੋਂ ਅਨਪਿਨ ਕਰੋ</translation> <translation id="8336153091935557858">ਕੱਲ੍ਹ <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">ਆਈਸਲੈਂਡੀ ਕੀ-ਬੋਰਡ</translation> <translation id="8342318071240498787">ਸਮਾਨ ਨਾਮ ਵਾਲੀ ਇੱਕ ਫਾਈਲ ਜਾਂ ਡਾਇਰੈਕਟਰੀ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ।</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb index b07aab1f..d698847 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Nie można uzyskać dostępu do pliku ze względów bezpieczeństwa.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">Pakuję elementy (<ph name="NUMBER_OF_ITEMS" />)...</translation> +<translation id="1731889557567069540">Liczba skopiowanych elementów: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="174173592514158117">Pokaż wszystkie foldery Play</translation> <translation id="174937106936716857">Łączna liczba plików</translation> <translation id="1775381402323441512">Informacje o pliku wideo</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Nieprawidłowy znak: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Klawiatura wietnamska (TCVN)</translation> <translation id="2168214441502403371">Klawiatura perska</translation> +<translation id="2197363559908958454">Przeniesiono <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="2198315389084035571">chiński uproszczony</translation> <translation id="2208158072373999562">Archiwum ZIP</translation> <translation id="2225536596944493418">Czy na pewno chcesz usunąć te elementy (<ph name="NUMBER_OF_ITEMS" />)?</translation> <translation id="2230062665678605299">Nie można utworzyć folderu „<ph name="FOLDER_NAME" />”. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Przeniesiono.</translation> <translation id="2278988676849463018">Klawiatura kannada (fonetyczna)</translation> <translation id="2288278176040912387">Gramofon</translation> <translation id="2291538123825441971">Otwieram pliki (<ph name="NUMBER_OF_FILES" />).</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Wszystko ma już kopię zapasową.</translation> <translation id="3626281679859535460">Jasność</translation> <translation id="3644896802912593514">Szerokość</translation> +<translation id="3645233063072417428">Liczba przeniesionych elementów: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="3645531960514756307">Odepnij folder</translation> <translation id="3678559383040232393">Klawiatura maltańska</translation> <translation id="3685122418104378273">Gdy komórkowa transmisja danych jest włączona, synchronizacja z Dyskiem Google jest domyślnie wyłączona.</translation> @@ -395,6 +399,7 @@ Niezależnie od tego, co stanie się z Twoim urządzeniem, pliki będą bezpiecznie zapisane na Dysku Google.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Udostępniaj i twórz pliki oraz edytuj<ph name="MARKUP_8" /> je z innymi użytkownikami – wszystko w jednym miejscu.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Skopiowano.</translation> <translation id="5275973617553375938">Pliki odzyskane z Dysku Google</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Zapisz</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">Białoruski</translation> <translation id="7544853251252956727">Odtwarzaj losowo</translation> <translation id="7547811415869834682">Niderlandzki</translation> +<translation id="7551643184018910560">Przypnij do półki</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Chwileczkę</translation> <translation id="7603724359189955920">Siatki</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">Japoński</translation> <translation id="8312871300878166382">Wklej do folderu</translation> <translation id="8329978297633540474">Zwykły tekst</translation> +<translation id="8335587457941836791">Odepnij z półki</translation> <translation id="8336153091935557858">Wczoraj, <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Klawiatura islandzka</translation> <translation id="8342318071240498787">Plik lub katalog o tej nazwie już istnieje.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Zmodyfikowany przez:</translation> <translation id="945522503751344254">Prześlij opinię</translation> <translation id="947144732524271678">Wybrano zakres <ph name="ENTRY_COUNT" /> elementów. Od: <ph name="FROM_ENTRY_NAME" /> do: <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615">Skopiowano <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="981121421437150478">Offline</translation> <translation id="988685240266037636">Istnieje już plik „<ph name="FILE_NAME" />”. Czy chcesz go zastąpić?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb index 33af25b1..a76434f8 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Não foi possível acessar o arquivo por motivos de segurança.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">Compactando <ph name="NUMBER_OF_ITEMS" /> itens…</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> itens copiados.</translation> <translation id="174173592514158117">Mostrar todas as pastas do Google Play</translation> <translation id="174937106936716857">Contagem total de arquivos</translation> <translation id="1775381402323441512">Informações sobre o vídeo</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Caractere inválido: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Teclado vietnamita (TCVN)</translation> <translation id="2168214441502403371">Teclado persa</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> movido.</translation> <translation id="2198315389084035571">Chinês simplificado</translation> <translation id="2208158072373999562">Arquivo Zip</translation> <translation id="2225536596944493418">Tem certeza de que quer excluir <ph name="NUMBER_OF_ITEMS" /> itens?</translation> <translation id="2230062665678605299">Não é possível criar a pasta "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Movido.</translation> <translation id="2278988676849463018">Teclado canará (fonético)</translation> <translation id="2288278176040912387">Gravador</translation> <translation id="2291538123825441971">Abrindo <ph name="NUMBER_OF_FILES" /> arquivos.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Backup completo.</translation> <translation id="3626281679859535460">Brilho</translation> <translation id="3644896802912593514">Largura</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> itens movidos.</translation> <translation id="3645531960514756307">Liberar pasta</translation> <translation id="3678559383040232393">Teclado maltês</translation> <translation id="3685122418104378273">A sincronização do Google Drive é desativada por padrão durante o uso de dados móveis.</translation> @@ -395,6 +399,7 @@ Aconteça o que acontecer com seu dispositivo, seus arquivos ficam armazenados em segurança no Google Drive.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Compartilhe, crie e colabore<ph name="MARKUP_8" /> em arquivos com outras pessoas em um só lugar.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Copiado.</translation> <translation id="5275973617553375938">Arquivos recuperados a partir do Google Drive</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Salvar</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">Bielorrusso</translation> <translation id="7544853251252956727">Ordem aleatória</translation> <translation id="7547811415869834682">Holandês</translation> +<translation id="7551643184018910560">Fixar na estante</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Aguarde um segundo</translation> <translation id="7603724359189955920">Grades</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">Japonês</translation> <translation id="8312871300878166382">Colar na pasta</translation> <translation id="8329978297633540474">Texto sem formatação</translation> +<translation id="8335587457941836791">Desafixar da estante</translation> <translation id="8336153091935557858">Ontem <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Teclado para islandês</translation> <translation id="8342318071240498787">Já existe um arquivo ou diretório com o mesmo nome.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Modificado por</translation> <translation id="945522503751344254">Enviar comentários</translation> <translation id="947144732524271678">Foram selecionadas <ph name="ENTRY_COUNT" /> entradas de <ph name="FROM_ENTRY_NAME" /> até <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> copiado</translation> <translation id="981121421437150478">Off-line</translation> <translation id="988685240266037636">Já existe um arquivo chamado "<ph name="FILE_NAME" />". Você quer substitui-lo?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb index 9ebabe88..769c4ef 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Não foi possível aceder ao ficheiro por razões de segurança.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">A comprimir <ph name="NUMBER_OF_ITEMS" /> itens…</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> itens copiados.</translation> <translation id="174173592514158117">Mostrar todas as pastas do Google Play</translation> <translation id="174937106936716857">Contagem total de ficheiros</translation> <translation id="1775381402323441512">Informações do vídeo</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Caráter inválido: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Teclado vietnamita (TCVN)</translation> <translation id="2168214441502403371">Teclado persa</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> movidos(s).</translation> <translation id="2198315389084035571">Chinês Simplificado</translation> <translation id="2208158072373999562">Ficheiro zip</translation> <translation id="2225536596944493418">Tem a certeza de que pretende eliminar <ph name="NUMBER_OF_ITEMS" /> itens?</translation> <translation id="2230062665678605299">Não é possível criar a pasta "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Movido.</translation> <translation id="2278988676849463018">Teclado canarim (fonético)</translation> <translation id="2288278176040912387">Gira-discos</translation> <translation id="2291538123825441971">A abrir <ph name="NUMBER_OF_FILES" /> ficheiros…</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Foi feita uma cópia de segurança de todos os ficheiros!</translation> <translation id="3626281679859535460">Brilho</translation> <translation id="3644896802912593514">Largura</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> itens movidos.</translation> <translation id="3645531960514756307">Soltar pasta</translation> <translation id="3678559383040232393">Teclado maltês</translation> <translation id="3685122418104378273">Quando utiliza dados móveis, a sincronização do Google Drive é desativada por predefinição.</translation> @@ -395,6 +399,7 @@ Independentemente do que acontecer ao seu dispositivo, os seus ficheiros estão armazenados em segurança no Google Drive.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Partilhe, crie e colabore<ph name="MARKUP_8" /> em ficheiros com outras pessoas, tudo num único local.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Copiado.</translation> <translation id="5275973617553375938">Ficheiros recuperados do Google Drive</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Guardar</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">Bielorrusso</translation> <translation id="7544853251252956727">Reproduzir aleatoriamente</translation> <translation id="7547811415869834682">Holandês</translation> +<translation id="7551643184018910560">Fixar na prateleira</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Aguarde um momento</translation> <translation id="7603724359189955920">Grelhas</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">Japonês</translation> <translation id="8312871300878166382">Colar numa pasta</translation> <translation id="8329978297633540474">Texto simples</translation> +<translation id="8335587457941836791">Soltar da prateleira</translation> <translation id="8336153091935557858">Ontem <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Teclado islandês</translation> <translation id="8342318071240498787">Já existe um ficheiro ou diretório com o mesmo nome.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Modificado por</translation> <translation id="945522503751344254">Enviar feedback</translation> <translation id="947144732524271678">Selecionou um intervalo de <ph name="ENTRY_COUNT" /> entradas de <ph name="FROM_ENTRY_NAME" /> a <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> copiado(s).</translation> <translation id="981121421437150478">Offline</translation> <translation id="988685240266037636">Já existe um ficheiro com o nome "<ph name="FILE_NAME" />". Pretende substituí-lo?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ro.xtb b/ui/chromeos/translations/ui_chromeos_strings_ro.xtb index 010f691..7485d66 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ro.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">Belarusă</translation> <translation id="7544853251252956727">Redă aleatoriu</translation> <translation id="7547811415869834682">Neerlandeză</translation> +<translation id="7551643184018910560">Fixați în raft</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Așteptați puțin</translation> <translation id="7603724359189955920">Grile</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">Japoneză</translation> <translation id="8312871300878166382">Inserați în dosar</translation> <translation id="8329978297633540474">Text simplu</translation> +<translation id="8335587457941836791">Anulați fixarea din raft</translation> <translation id="8336153091935557858">Ieri, la <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Tastatură islandeză</translation> <translation id="8342318071240498787">Un fișier sau un director cu același nume există deja.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb index 462f419..57a8570 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Доступ к файлу ограничен по соображениям безопасности.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">Архивирование объектов (<ph name="NUMBER_OF_ITEMS" />)…</translation> +<translation id="1731889557567069540">Скопировано объектов: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="174173592514158117">Показать все папки Google Play</translation> <translation id="174937106936716857">Общее количество файлов</translation> <translation id="1775381402323441512">Информация о видео</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Недопустимый символ: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Вьетнамская раскладка (TCVN)</translation> <translation id="2168214441502403371">Персидская раскладка</translation> +<translation id="2197363559908958454">Перемещено: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="2198315389084035571">Китайский (упрощенный)</translation> <translation id="2208158072373999562">ZIP-архив</translation> <translation id="2225536596944493418">Вы действительно хотите удалить объекты (<ph name="NUMBER_OF_ITEMS" />)?</translation> <translation id="2230062665678605299">Не удалось создать папку "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Перемещено.</translation> <translation id="2278988676849463018">Раскладка каннада (фонетическая)</translation> <translation id="2288278176040912387">Патефон</translation> <translation id="2291538123825441971">Открываются файлы (<ph name="NUMBER_OF_FILES" />).</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Данные сохранены!</translation> <translation id="3626281679859535460">Яркость</translation> <translation id="3644896802912593514">Ширина</translation> +<translation id="3645233063072417428">Перемещено объектов: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="3645531960514756307">Открепить папку</translation> <translation id="3678559383040232393">Мальтийская раскладка</translation> <translation id="3685122418104378273">Синхронизация Google Диска по мобильной сети отключена по умолчанию.</translation> @@ -395,6 +399,7 @@ Даже если с устройством что-то произойдет, резервная копия ваших данных хранится на Google Диске.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Вы можете создавать файлы, предоставлять к ним общий доступ и работать над ними<ph name="MARKUP_8" /> вместе с коллегами в одном удобном сервисе.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Скопировано.</translation> <translation id="5275973617553375938">Восстановленные файлы с Google Диска</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Сохранить</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">Белорусский</translation> <translation id="7544853251252956727">Перемешать</translation> <translation id="7547811415869834682">Нидерландская</translation> +<translation id="7551643184018910560">Закрепить на панели запуска</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Подождите…</translation> <translation id="7603724359189955920">Сетка</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">Японский</translation> <translation id="8312871300878166382">Вставить в папку</translation> <translation id="8329978297633540474">Обычный текст</translation> +<translation id="8335587457941836791">Открепить от панели запуска</translation> <translation id="8336153091935557858">Вчера, <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Исландская раскладка клавиатуры</translation> <translation id="8342318071240498787">Такой файл или каталог уже существуют.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Кем изменено</translation> <translation id="945522503751344254">Отправить отзыв</translation> <translation id="947144732524271678">Выбраны объекты от "<ph name="FROM_ENTRY_NAME" />" до "<ph name="TO_ENTRY_NAME" />" (всего <ph name="ENTRY_COUNT" />).</translation> +<translation id="949308258121608615">Скопировано: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="981121421437150478">Офлайн</translation> <translation id="988685240266037636">Файл "<ph name="FILE_NAME" />" уже существует. Заменить его?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> МБ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_si.xtb b/ui/chromeos/translations/ui_chromeos_strings_si.xtb index fdc3c97..f51e8e6 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_si.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_si.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">ආරක්ෂිත හේතූන් මත මෙම ගොනුවට පිවිසිය නොහැක.</translation> <translation id="169515659049020177">SHIFT</translation> <translation id="1722487484194605434">අයිතම <ph name="NUMBER_OF_ITEMS" />ක් සිප් කෙරේ...</translation> +<translation id="1731889557567069540">අයිතම <ph name="NUMBER_OF_ITEMS" />ක් පිටපත් කරන ලදී.</translation> <translation id="174173592514158117">සියලු Play ෆෝල්ඩර පෙන්වන්න</translation> <translation id="174937106936716857">මුළු ගොනු ගණන</translation> <translation id="1775381402323441512">වීඩියෝ තොරතුරු</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">අවලංගු අනුලකුණ: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">වියට්නාම යතුරු පුවරුව (TCVN)</translation> <translation id="2168214441502403371">පර්සියානු යතුරු පුවරුව</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> ගෙන යන ලදී.</translation> <translation id="2198315389084035571">සරල කළ චීන</translation> <translation id="2208158072373999562">Zip සංරක්ෂකය</translation> <translation id="2225536596944493418">ඔබට අයිතම <ph name="NUMBER_OF_ITEMS" /> මැකීමට අවශ්ය බව ඔබට තහවුරුද?</translation> <translation id="2230062665678605299">මෙම ෆෝල්ඩරය සෑදීමට නොහැක "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">ගෙන යන ලදී.</translation> <translation id="2278988676849463018">කන්නඩා යතුරු පුවරුව (ශබ්දිම)</translation> <translation id="2288278176040912387">තැටි වාදකය</translation> <translation id="2291538123825441971">ගොනු <ph name="NUMBER_OF_FILES" />ක් විවෘත කිරීම.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">සියල්ල උපස්ථ කර ඇත!</translation> <translation id="3626281679859535460">දීප්තිය</translation> <translation id="3644896802912593514">පළල</translation> +<translation id="3645233063072417428">අයිතම <ph name="NUMBER_OF_ITEMS" />ක් ගෙන යන ලදී.</translation> <translation id="3645531960514756307">ෆෝල්ඩරය නොඅමුණන්න</translation> <translation id="3678559383040232393">මෝල්ටියානු යතුරුපුවරුව</translation> <translation id="3685122418104378273">ජංගම දත්ත භාවිතා කරන විට, Google Drive සමමුහුර්තය සුපුරුද්දෙන් අබල කර ඇත.</translation> @@ -395,6 +399,7 @@ ඔබගේ උපාංගයට කුමක් වුවත් කමක් නැත, ඔබගේ ගොනු ආරක්ෂිතව Google Drive තුළ ගබඩා වී ඇත.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />බෙදා ගෙන, නිර්මාණය කර සහයෝගයෙන් කටයුතු කරන්න<ph name="MARKUP_8" /> ගොනු මත අනෙක් අය සමඟ එකම තැනකින්.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">පිටපත් කරන ලදි.</translation> <translation id="5275973617553375938">Google Drive වෙතින් නැවත ලබාගත්</translation> <translation id="5317780077021120954">සුරකින්න</translation> <translation id="5318819489018851358">Linux සමග බෙදාගන්න</translation> @@ -593,6 +598,7 @@ <translation id="751507702149411736">බෙලෝරුසියානු</translation> <translation id="7544853251252956727">කලවම් කරන්න</translation> <translation id="7547811415869834682">ලංදේසි</translation> +<translation id="7551643184018910560">රාක්කය වෙත අමුණන්න</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">මොහොතක් රැඳී සිටින්න</translation> <translation id="7603724359189955920">ජාලක</translation> @@ -676,6 +682,7 @@ <translation id="8299269255470343364">ජපන්</translation> <translation id="8312871300878166382">ෆෝල්ඩරය තුළ අලවන්න</translation> <translation id="8329978297633540474">සරල පෙළ</translation> +<translation id="8335587457941836791">රාක්කයෙන් ඉවත්කරන්න</translation> <translation id="8336153091935557858">ඊයේ <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">අයිස්ලන්තික යතුරු පුවරුව</translation> <translation id="8342318071240498787">එකම නම ඇති ගොනුවක් හෝ නාමාවලියක් දැනටමත් පවතී.</translation> @@ -748,6 +755,7 @@ <translation id="943972244133411984">වෙනස් කරන ලද්දේ</translation> <translation id="945522503751344254">අදහස් හා යෝජනා යවන්න</translation> <translation id="947144732524271678"><ph name="FROM_ENTRY_NAME" /> සිට <ph name="TO_ENTRY_NAME" /> දක්වා <ph name="ENTRY_COUNT" /> ඇතුළත් කිරීම් පරාසයක් තේරිණි.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> පිටපත් කරන ලදි.</translation> <translation id="981121421437150478">ඕෆ්ලයින්</translation> <translation id="988685240266037636">"<ph name="FILE_NAME" />" නමැති ෆෝල්ඩරයක් දැනටමත් පවතියි. ඔබට එය ප්රතිස්ථාපන කළ යුතුද?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb index eb3311d..a41c7e3 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Súbor je z bezpečnostných dôvodov nedostupný.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">Prebieha komprimovanie <ph name="NUMBER_OF_ITEMS" /> položiek…</translation> +<translation id="1731889557567069540">Počet skopírovaných položiek: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="174173592514158117">Zobraziť všetky priečinky Play</translation> <translation id="174937106936716857">Celkový počet súborov</translation> <translation id="1775381402323441512">Informácie o videu</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Neplatný znak: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Vietnamská klávesnica (TCVN)</translation> <translation id="2168214441502403371">Perzská klávesnica</translation> +<translation id="2197363559908958454">Presunuté: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="2198315389084035571">zjednodušená čínština</translation> <translation id="2208158072373999562">Archív ZIP</translation> <translation id="2225536596944493418">Naozaj chcete odstrániť príslušné položky (<ph name="NUMBER_OF_ITEMS" />)?</translation> <translation id="2230062665678605299">Priečinok <ph name="FOLDER_NAME" /> sa nepodarilo vytvoriť. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Presunuté.</translation> <translation id="2278988676849463018">Kannadská klávesnica (fonetický prepis)</translation> <translation id="2288278176040912387">Gramofón</translation> <translation id="2291538123825441971">Otvárajú sa súbory (<ph name="NUMBER_OF_FILES" />).</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Všetko je zálohované!</translation> <translation id="3626281679859535460">Jas</translation> <translation id="3644896802912593514">Šírka</translation> +<translation id="3645233063072417428">Počet presunutých položiek: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="3645531960514756307">Odopnúť priečinok</translation> <translation id="3678559383040232393">Maltézska klávesnica</translation> <translation id="3685122418104378273">Synchronizácia Disku Google je pri používaní mobilných dát v predvolenom nastavení zakázaná.</translation> @@ -395,6 +399,7 @@ Vaše súbory sú bezpečne uložené na Disku Google bez ohľadu na to, čo sa stane s vaším zariadením.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Zdieľajte a vytvárajte súbory, spolupracuje na nich<ph name="MARKUP_8" /> s ostatnými, a to všetko na jednom mieste.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Skopírované.</translation> <translation id="5275973617553375938">Obnovené súbory z Disku Google</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Uložiť</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">Bieloruština</translation> <translation id="7544853251252956727">Náhodne prehrávať</translation> <translation id="7547811415869834682">Holandčina</translation> +<translation id="7551643184018910560">Pripnúť na poličku</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Vydržte chvíľu</translation> <translation id="7603724359189955920">Mriežky</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">Japončina</translation> <translation id="8312871300878166382">Prilepiť do priečinka</translation> <translation id="8329978297633540474">Obyčajný text</translation> +<translation id="8335587457941836791">Odopnúť z poličky</translation> <translation id="8336153091935557858">Včera o <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Islandská klávesnica</translation> <translation id="8342318071240498787">Súbor alebo priečinok s daným názvom už existuje.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Upravil(a):</translation> <translation id="945522503751344254">Odoslať spätnú väzbu</translation> <translation id="947144732524271678">Bol vybraný rozsah <ph name="ENTRY_COUNT" /> položiek od <ph name="FROM_ENTRY_NAME" /> do <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615">Skopírované: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="981121421437150478">Offline</translation> <translation id="988685240266037636">Súbor s názvom <ph name="FILE_NAME" /> už existuje. Chcete ho nahradiť?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb index 6747ff1..a5df1765 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Do datoteke zaradi varnosti ni bilo mogoče dostopati.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">Ustvarjanje arhiva zip s toliko elementi: <ph name="NUMBER_OF_ITEMS" /> …</translation> +<translation id="1731889557567069540">Št. kopiranih elementov: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="174173592514158117">Prikaz vseh map v Googlu Play</translation> <translation id="174937106936716857">Skupno število datotek</translation> <translation id="1775381402323441512">Podatki o videoposnetku</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Neveljavni znak: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Tipkovnica za vietnamščino (TCVN)</translation> <translation id="2168214441502403371">Tipkovnica za perzijščino</translation> +<translation id="2197363559908958454">Št. premaknjenih: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="2198315389084035571">poenostavljena kitajščina</translation> <translation id="2208158072373999562">Arhiv zip</translation> <translation id="2225536596944493418">Ali ste prepričani, da želite izbrisati toliko elementov: <ph name="NUMBER_OF_ITEMS" />?</translation> <translation id="2230062665678605299">Ni bilo mogoče ustvariti mape »<ph name="FOLDER_NAME" />«. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Premaknjeno.</translation> <translation id="2278988676849463018">Tipkovnica za kanareščino (fonetična)</translation> <translation id="2288278176040912387">Gramofon</translation> <translation id="2291538123825441971">Odpiranje toliko datotek: <ph name="NUMBER_OF_FILES" />.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Vse je varnostno kopirano!</translation> <translation id="3626281679859535460">Svetlost</translation> <translation id="3644896802912593514">Širina</translation> +<translation id="3645233063072417428">Toliko elementov je bilo premaknjenih: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="3645531960514756307">Odpni mapo</translation> <translation id="3678559383040232393">Malteška tipkovnica</translation> <translation id="3685122418104378273">Sinhronizacija z Googlom Drive je ob uporabi prenosa podatkov v mobilnih omrežjih privzeto onemogočena.</translation> @@ -395,6 +399,7 @@ Datoteke so varno shranjene v Googlu Drive ne glede na to, kaj se zgodi z napravo.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Delite datoteke z drugimi, jih ustvarjajte in sodelujte<ph name="MARKUP_8" /> na enem mestu.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Kopirano.</translation> <translation id="5275973617553375938">Obnovljene datoteke iz Googla Drive</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Shrani</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">beloruščina</translation> <translation id="7544853251252956727">Naključno predvajanje</translation> <translation id="7547811415869834682">nizozemščina</translation> +<translation id="7551643184018910560">Pripenjanje na polico</translation> <translation id="7576032389798113292">6 x 4</translation> <translation id="7589661784326793847">Počakajte trenutek</translation> <translation id="7603724359189955920">Mreže</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">japonščina</translation> <translation id="8312871300878166382">Prilepi v mapo</translation> <translation id="8329978297633540474">Golo besedilo</translation> +<translation id="8335587457941836791">Odpenjanje s police</translation> <translation id="8336153091935557858">Včeraj <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Islandska tipkovnica</translation> <translation id="8342318071240498787">Datoteka ali imenik s tem imenom že obstaja.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Spremenil(-a):</translation> <translation id="945522503751344254">Pošiljanje povratnih informacij</translation> <translation id="947144732524271678">Izbran je nabor vnosov (<ph name="ENTRY_COUNT" />) od <ph name="FROM_ENTRY_NAME" /> do <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615">Št. kopiranih: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="981121421437150478">Brez povezave</translation> <translation id="988685240266037636">Datoteka z imenom »<ph name="FILE_NAME" />« že obstaja. Ali jo želite zamenjati?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sq.xtb b/ui/chromeos/translations/ui_chromeos_strings_sq.xtb index 2797c6d..ff23ba8 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sq.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sq.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Qasja te skedari ishte e pamundur për arsye sigurie.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">Po ngjesh <ph name="NUMBER_OF_ITEMS" /> artikuj...</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> artikuj të kopjuar.</translation> <translation id="174173592514158117">Shfaq të gjitha dosjet e Play</translation> <translation id="174937106936716857">Numri total i skedarëve</translation> <translation id="1775381402323441512">Informacionet e videos</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Karakter i pavlefshëm: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Tastiera vietnameze (TCVN)</translation> <translation id="2168214441502403371">Tastiera persiane</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> është zhvendosur.</translation> <translation id="2198315389084035571">Kinezishte e thjeshtuar</translation> <translation id="2208158072373999562">Arkivi i ngjeshur</translation> <translation id="2225536596944493418">Je i sigurt që dëshiron të fshish <ph name="NUMBER_OF_ITEMS" /> artikuj?</translation> <translation id="2230062665678605299">Nuk mundi ta krijonte dosjen "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Zhvendosur.</translation> <translation id="2278988676849463018">Tastierë Kannada (fonetike)</translation> <translation id="2288278176040912387">Gramafoni</translation> <translation id="2291538123825441971">Po hapen <ph name="NUMBER_OF_FILES" /> skedarë.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Të gjitha u rezervuan!</translation> <translation id="3626281679859535460">Ndriçimi</translation> <translation id="3644896802912593514">Gjerësia</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> artikuj janë zhvendosur.</translation> <translation id="3645531960514756307">Zhgozhdo dosjen</translation> <translation id="3678559383040232393">Tastierë në maltisht</translation> <translation id="3685122418104378273">Sinkronizimi i "Diskut të Google" është çaktivizuar si parazgjedhje kur përdor të dhënat celulare.</translation> @@ -395,6 +399,7 @@ Pavarësisht se çfarë ndodh me pajisjen tënde, skedarët e tu janë ruajtur në mënyrë të sigurt në "Diskun e Google".<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Ndaj, krijo dhe bashkëpuno<ph name="MARKUP_8" /> me të tjerët për skedarët, të gjitha në një vend të vetëm.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Kopjuar.</translation> <translation id="5275973617553375938">Skedarët e rikuperuar nga "Disku i Google"</translation> <translation id="5317780077021120954">Ruaj</translation> <translation id="5318819489018851358">Ndaj me Linux</translation> @@ -593,6 +598,7 @@ <translation id="751507702149411736">Bjellorusisht</translation> <translation id="7544853251252956727">Përziej</translation> <translation id="7547811415869834682">Hollandisht</translation> +<translation id="7551643184018910560">Gozhdo në raft</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Prit vetëm një sekondë</translation> <translation id="7603724359189955920">Rrjeta</translation> @@ -676,6 +682,7 @@ <translation id="8299269255470343364">Japonisht</translation> <translation id="8312871300878166382">Ngjite në dosje</translation> <translation id="8329978297633540474">Tekst i thjeshtë</translation> +<translation id="8335587457941836791">Hiq gozhdimin nga rafti</translation> <translation id="8336153091935557858">Dje <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Tastierë në islandisht</translation> <translation id="8342318071240498787">Ekziston tashmë një skedar ose një direktori me të njëjtin emër.</translation> @@ -748,6 +755,7 @@ <translation id="943972244133411984">Modifikuar nga</translation> <translation id="945522503751344254">Dërgo komente</translation> <translation id="947144732524271678">U zgjodh një gamë prej <ph name="ENTRY_COUNT" /> regjistrimesh nga <ph name="FROM_ENTRY_NAME" /> në <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> janë kopjuar.</translation> <translation id="981121421437150478">Jashtë linje</translation> <translation id="988685240266037636">Skedari me emrin "<ph name="FILE_NAME" />" ekziston. Dëshiron ta zëvendësosh?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb index fff3a56..29ba63ca 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Nije moguće pristupiti datoteci iz bezbednosnih razloga.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">Stavke (<ph name="NUMBER_OF_ITEMS" />) se dodaju u datoteku...</translation> +<translation id="1731889557567069540">Kopirano stavki: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="174173592514158117">Prikaži sve Play direktorijume</translation> <translation id="174937106936716857">Ukupan broj datoteka</translation> <translation id="1775381402323441512">Informacije o video datoteci</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Nevažeći znak: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Vijetnamska tastatura (TCVN)</translation> <translation id="2168214441502403371">Persijska tastatura</translation> +<translation id="2197363559908958454">Premešteno stavki: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="2198315389084035571">kineski (pojednostavljeni)</translation> <translation id="2208158072373999562">Zip arhiva</translation> <translation id="2225536596944493418">Želite li stvarno da izbrišete stavke (<ph name="NUMBER_OF_ITEMS" />)?</translation> <translation id="2230062665678605299">Nije moguće napraviti direktorijum „<ph name="FOLDER_NAME" />“. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Premešteno je.</translation> <translation id="2278988676849463018">Kanada tastatura (fonetska)</translation> <translation id="2288278176040912387">Gramofon</translation> <translation id="2291538123825441971">Otvaraju se datoteke (<ph name="NUMBER_OF_FILES" />).</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Napravljene su rezervne kopije svih datoteka!</translation> <translation id="3626281679859535460">Osvetljenost</translation> <translation id="3644896802912593514">Širina</translation> +<translation id="3645233063072417428">Premeštenih stavki: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="3645531960514756307">Otkači direktorijum</translation> <translation id="3678559383040232393">Malteška tastatura</translation> <translation id="3685122418104378273">Sinhronizacija sa Google diskom je podrazumevano onemogućena kada se koristi mobilna veza za prenos podataka.</translation> @@ -395,6 +399,7 @@ Bez obzira na to šta se desi sa uređajem, datoteke se bezbedno čuvaju na Google disku.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Delite i pravite datoteke i sarađujte<ph name="MARKUP_8" /> na njima sa drugima, i sve to na jednom mestu.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Kopirano je.</translation> <translation id="5275973617553375938">Vraćene datoteke sa Google diska</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Sačuvaj</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">beloruski</translation> <translation id="7544853251252956727">Pusti nasumično</translation> <translation id="7547811415869834682">holandski</translation> +<translation id="7551643184018910560">Zakači na policu</translation> <translation id="7576032389798113292">6×4</translation> <translation id="7589661784326793847">Sačekajte trenutak</translation> <translation id="7603724359189955920">Mreže</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">japanski</translation> <translation id="8312871300878166382">Nalepi u direktorijum</translation> <translation id="8329978297633540474">Čisti tekst</translation> +<translation id="8335587457941836791">Otkači sa police</translation> <translation id="8336153091935557858">Juče u <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Islandska tastatura</translation> <translation id="8342318071240498787">Već postoji datoteka ili direktorijum sa istim nazivom.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Izmenio/la</translation> <translation id="945522503751344254">Pošalji povratne informacije</translation> <translation id="947144732524271678">Izabrali ste niz stavki (<ph name="ENTRY_COUNT" />) od stavke <ph name="FROM_ENTRY_NAME" /> do stavke <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615">Kopirano stavki: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="981121421437150478">Oflajn</translation> <translation id="988685240266037636">Datoteka „<ph name="FILE_NAME" />“ već postoji. Da li želite da je zamenite?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb index 939373dc..1a42ae5 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Није могуће приступити датотеци из безбедносних разлога.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">Ставке (<ph name="NUMBER_OF_ITEMS" />) се додају у датотеку...</translation> +<translation id="1731889557567069540">Копирано ставки: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="174173592514158117">Прикажи све Play директоријуме</translation> <translation id="174937106936716857">Укупан број датотека</translation> <translation id="1775381402323441512">Информације о видео датотеци</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Неважећи знак: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Вијетнамска тастатура (TCVN)</translation> <translation id="2168214441502403371">Персијска тастатура</translation> +<translation id="2197363559908958454">Премештено ставки: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="2198315389084035571">кинески (поједностављени)</translation> <translation id="2208158072373999562">Zip архива</translation> <translation id="2225536596944493418">Желите ли стварно да избришете ставке (<ph name="NUMBER_OF_ITEMS" />)?</translation> <translation id="2230062665678605299">Није могуће направити директоријум „<ph name="FOLDER_NAME" />“. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Премештено је.</translation> <translation id="2278988676849463018">Канада тастатура (фонетска)</translation> <translation id="2288278176040912387">Грамофон</translation> <translation id="2291538123825441971">Отварају се датотеке (<ph name="NUMBER_OF_FILES" />).</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Направљене су резервне копије свих датотека!</translation> <translation id="3626281679859535460">Осветљеност</translation> <translation id="3644896802912593514">Ширина</translation> +<translation id="3645233063072417428">Премештених ставки: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="3645531960514756307">Откачи директоријум</translation> <translation id="3678559383040232393">Малтешка тастатура</translation> <translation id="3685122418104378273">Синхронизација са Google диском је подразумевано онемогућена када се користи мобилна веза за пренос података.</translation> @@ -395,6 +399,7 @@ Без обзира на то шта се деси са уређајем, датотеке се безбедно чувају на Google диску.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Делите и правите датотеке и сарађујте<ph name="MARKUP_8" /> на њима са другима, и све то на једном месту.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Копирано је.</translation> <translation id="5275973617553375938">Враћене датотеке са Google диска</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Сачувај</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">белоруски</translation> <translation id="7544853251252956727">Пусти насумично</translation> <translation id="7547811415869834682">холандски</translation> +<translation id="7551643184018910560">Закачи на полицу</translation> <translation id="7576032389798113292">6×4</translation> <translation id="7589661784326793847">Сачекајте тренутак</translation> <translation id="7603724359189955920">Мреже</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">јапански</translation> <translation id="8312871300878166382">Налепи у директоријум</translation> <translation id="8329978297633540474">Чисти текст</translation> +<translation id="8335587457941836791">Откачи са полице</translation> <translation id="8336153091935557858">Јуче у <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Исландска тастатура</translation> <translation id="8342318071240498787">Већ постоји датотека или директоријум са истим називом.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Изменио/ла</translation> <translation id="945522503751344254">Пошаљи повратне информације</translation> <translation id="947144732524271678">Изабрали сте низ ставки (<ph name="ENTRY_COUNT" />) од ставке <ph name="FROM_ENTRY_NAME" /> до ставке <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615">Копирано ставки: <ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="981121421437150478">Офлајн</translation> <translation id="988685240266037636">Датотека „<ph name="FILE_NAME" />“ већ постоји. Да ли желите да је замените?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb index 4b737d1..34a8f330 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Det gick inte att öppna filen av säkerhetsskäl.</translation> <translation id="169515659049020177">Skift</translation> <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> objekt komprimeras ...</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> objekt har kopierats.</translation> <translation id="174173592514158117">Visa alla Play-mappar</translation> <translation id="174937106936716857">Totalt antal filer</translation> <translation id="1775381402323441512">Videoinformation</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Ogiltigt tecken: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Tangentbord för vietnamesiska (TCVN)</translation> <translation id="2168214441502403371">Tangentbord för persiska</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> har flyttats.</translation> <translation id="2198315389084035571">kinesiska (förenklad)</translation> <translation id="2208158072373999562">Zip-arkiv</translation> <translation id="2225536596944493418">Vill du ta bort <ph name="NUMBER_OF_ITEMS" /> objekt?</translation> <translation id="2230062665678605299">Det går inte att skapa mappen <ph name="FOLDER_NAME" />. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Flyttad.</translation> <translation id="2278988676849463018">Tangentbord för kannada (fonetiskt)</translation> <translation id="2288278176040912387">Skivspelare</translation> <translation id="2291538123825441971">Öppnar <ph name="NUMBER_OF_FILES" /> filer.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Allt har säkerhetskopierats!</translation> <translation id="3626281679859535460">Ljusstyrka</translation> <translation id="3644896802912593514">Bredd</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> objekt flyttades.</translation> <translation id="3645531960514756307">Lossa mapp</translation> <translation id="3678559383040232393">Maltesiskt tangentbord</translation> <translation id="3685122418104378273">Google Drive-synkronisering inaktiveras som standard när mobildata används.</translation> @@ -395,6 +399,7 @@ Oavsett vad som händer med din enhet förvaras filerna säkert i Google Drive.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Dela, skapa och jobba<ph name="MARKUP_8" /> med filer tillsammans med andra på ett och samma ställe.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Kopierad.</translation> <translation id="5275973617553375938">Återställda filer från Google Drive</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Spara</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">vitryska</translation> <translation id="7544853251252956727">Blanda</translation> <translation id="7547811415869834682">nederländska</translation> +<translation id="7551643184018910560">Fäst på hyllan</translation> <translation id="7576032389798113292">6:4</translation> <translation id="7589661784326793847">Ett ögonblick</translation> <translation id="7603724359189955920">Rutnät</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">japanska</translation> <translation id="8312871300878166382">Klistra in i mapp</translation> <translation id="8329978297633540474">Oformaterad text</translation> +<translation id="8335587457941836791">Ta bort från hyllan</translation> <translation id="8336153091935557858">Igår kl. <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Isländskt tangentbord</translation> <translation id="8342318071240498787">Det finns redan en fil eller en katalog med samma namn.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Ändrades av</translation> <translation id="945522503751344254">Skicka feedback</translation> <translation id="947144732524271678"><ph name="ENTRY_COUNT" /> poster har markerats från och med <ph name="FROM_ENTRY_NAME" /> till och med <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> har kopierats.</translation> <translation id="981121421437150478">Offline</translation> <translation id="988685240266037636">Det finns redan en fil med namnet <ph name="FILE_NAME" />. Vill du ersätta den?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb index fd85085..9113e4e6 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Faili isingeweza kufikiwa kwa sababu za usalama.</translation> <translation id="169515659049020177">Hama</translation> <translation id="1722487484194605434">Inabana vipengee <ph name="NUMBER_OF_ITEMS" /> ...</translation> +<translation id="1731889557567069540">Vipengee <ph name="NUMBER_OF_ITEMS" /> vimenakiliwa.</translation> <translation id="174173592514158117">Onyesha folda zote za Google Play</translation> <translation id="174937106936716857">Jumla ya idadi ya faili</translation> <translation id="1775381402323441512">Maelezo ya video</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Herufi si sahihi: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Kibodi ya Kivietnamu (TCVN)</translation> <translation id="2168214441502403371">Kibodi ya Kiajemi</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> imehamishwa.</translation> <translation id="2198315389084035571">Kichina Kilichorahisishwa</translation> <translation id="2208158072373999562">Kumbukumbu ya Zip</translation> <translation id="2225536596944493418">Je, una uhakika ungependa kufuta vipengee <ph name="NUMBER_OF_ITEMS" />?</translation> <translation id="2230062665678605299">Haiwezi kuunda folda "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Imehamishwa.</translation> <translation id="2278988676849463018">Kibodi ya Kannada (Fonetiki)</translation> <translation id="2288278176040912387">Kicheza rekodi</translation> <translation id="2291538123825441971">Inafungua faili <ph name="NUMBER_OF_FILES" />.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Zote zimehifadhiwa nakala!</translation> <translation id="3626281679859535460">Ung'aavu</translation> <translation id="3644896802912593514">Upana</translation> +<translation id="3645233063072417428">Vipengee <ph name="NUMBER_OF_ITEMS" /> vimehamishwa.</translation> <translation id="3645531960514756307">Bandua folda</translation> <translation id="3678559383040232393">Kibodi ya Kimalta</translation> <translation id="3685122418104378273">Usawazishaji wa Hifadhi ya Google umezimwa kwa chaguomsingi wakati wa kutumia data ya kifaa cha mkononi.</translation> @@ -395,6 +399,7 @@ Haijalishi kitakachotendekea kifaa chako, faili zako zinahifadhiwa kwa njia salama katika Hifadhi ya Google.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Shiriki, unda na ushirikiane<ph name="MARKUP_8" /> kwenye faili na wengine, vyote mahali pamoja.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Imenakiliwa.</translation> <translation id="5275973617553375938">Faili zilizorejeshwa kutoka Hifadhi ya Google</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Hifadhi</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">Kibelarusi</translation> <translation id="7544853251252956727">Changanya</translation> <translation id="7547811415869834682">Kiholanzi</translation> +<translation id="7551643184018910560">Bandika kwenye rafu</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Subiri kidogo</translation> <translation id="7603724359189955920">Gridi</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">Kijapani</translation> <translation id="8312871300878166382">Bandika ndani ya folda</translation> <translation id="8329978297633540474">Matini makavu</translation> +<translation id="8335587457941836791">Banua kutoka kwenye rafu</translation> <translation id="8336153091935557858">Jana <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Kibodi ya Kiayalandi</translation> <translation id="8342318071240498787">Faili au saraka iliyo na jina sawa tayari ipo.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Ilibadilishwa na</translation> <translation id="945522503751344254">Tuma maoni</translation> <translation id="947144732524271678">Umechagua fungu lenye vipengee <ph name="ENTRY_COUNT" /> kuanzia <ph name="FROM_ENTRY_NAME" /> hadi <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> imenakiliwa.</translation> <translation id="981121421437150478">Nje ya mtandao</translation> <translation id="988685240266037636">Faili yenye jina "<ph name="FILE_NAME" />" tayari ipo. Ungependa kuibadilisha?</translation> <translation id="996903396648773764">MB <ph name="NUMBER_OF_MB" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ta.xtb b/ui/chromeos/translations/ui_chromeos_strings_ta.xtb index 42da7e5..a0a939e4 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ta.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ta.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">பெலாரஷ்யன்</translation> <translation id="7544853251252956727">கலை</translation> <translation id="7547811415869834682">டச்சு</translation> +<translation id="7551643184018910560">அடுக்கில் பொருத்து</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">ஒரு வினாடி காத்திருக்கவும்</translation> <translation id="7603724359189955920">கட்டங்கள்</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">ஜாப்பனீஸ்</translation> <translation id="8312871300878166382">கோப்புறையில் ஒட்டு</translation> <translation id="8329978297633540474">எளிய உரை</translation> +<translation id="8335587457941836791">அடுக்கிலிருந்து பிரித்தெடு</translation> <translation id="8336153091935557858">நேற்று <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">ஐஸ்லாண்டிக் விசைப்பலகை</translation> <translation id="8342318071240498787">ஒரே பெயருடைய கோப்பு அல்லது கோப்பகம் ஏற்கனவே உள்ளன.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_te.xtb b/ui/chromeos/translations/ui_chromeos_strings_te.xtb index 14dbfa5..32f1b55a 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_te.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">భద్రతా కారణాల దృష్ట్యా ఫైల్ను ప్రాప్యత చేయడం సాధ్యపడదు.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> అంశాలను జిప్ చేస్తోంది...</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> ఐటమ్లు కాపీ చేయబడ్డాయి.</translation> <translation id="174173592514158117">అన్ని ప్లే ఫోల్డర్లను చూపు</translation> <translation id="174937106936716857">మొత్తం ఫైల్ల సంఖ్య</translation> <translation id="1775381402323441512">వీడియో సమాచారం</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">చెల్లని అక్షరం: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">వియత్నామీస్ కీబోర్డ్ (TCVN)</translation> <translation id="2168214441502403371">పర్షియన్ కీబోర్డ్</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" />ను తరలించడం జరిగింది.</translation> <translation id="2198315389084035571">సరళీకృత చైనీస్</translation> <translation id="2208158072373999562">జిప్ ఆర్కైవ్</translation> <translation id="2225536596944493418">మీరు <ph name="NUMBER_OF_ITEMS" /> అంశాలను ఖచ్చితంగా తొలగించాలనుకుంటున్నారా?</translation> <translation id="2230062665678605299">"<ph name="FOLDER_NAME" />" ఫోల్డర్ను సృష్టించడం సాధ్యపడలేదు. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">తరలించబడింది.</translation> <translation id="2278988676849463018">కన్నడ కీబోర్డ్ (ఫొనెటిక్)</translation> <translation id="2288278176040912387">రికార్డ్ ప్లేయర్</translation> <translation id="2291538123825441971"><ph name="NUMBER_OF_FILES" /> ఫైల్లను తెరుస్తోంది.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">అన్నీ బ్యాకప్ చేయబడ్డాయి!</translation> <translation id="3626281679859535460">ప్రకాశం</translation> <translation id="3644896802912593514">వెడల్పు</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> ఐటెమ్లు తరలించబడ్డాయి.</translation> <translation id="3645531960514756307">ఫోల్డర్ను అన్పిన్ చేయి</translation> <translation id="3678559383040232393">మాల్టెసె కీబోర్డ్</translation> <translation id="3685122418104378273">మొబైల్ డేటాను ఉపయోగిస్తున్నప్పుడు Google డిస్క్ సింక్ డిఫాల్ట్గా నిలిపివేయబడుతుంది.</translation> @@ -395,6 +399,7 @@ మీ పరికరానికి ఏ విధమైన ఆపద సంభవించినా ఫర్వాలేదు, మీ ఫైల్లు Google డిస్క్లో సురక్షితంగా నిల్వ చేయబడి ఉంటాయి.<ph name="MARKUP_6" /> అన్ని ఫైల్లు ఒకే చోట ఉంటాయి, కాబట్టి <ph name="MARKUP_7" />షేర్ చేయండి, సృష్టించండి, వాటిపై ఇతరులతో కలిసి పని చేయండి<ph name="MARKUP_8" />.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">కాపీ చేయబడింది.</translation> <translation id="5275973617553375938">Google డిస్క్ నుండి పునరుద్ధరించబడిన ఫైల్లు</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">సేవ్ చేయి</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">బెలారుషియన్</translation> <translation id="7544853251252956727">షఫుల్ చేయి</translation> <translation id="7547811415869834682">డచ్</translation> +<translation id="7551643184018910560">అరకు పిన్ చేయండి</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">ఒక క్షణం వేచి ఉండండి</translation> <translation id="7603724359189955920">గ్రిడ్లు</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">జపనీస్</translation> <translation id="8312871300878166382">ఫోల్డర్లోకి అతికించు</translation> <translation id="8329978297633540474">సాదా వచనం</translation> +<translation id="8335587457941836791">అర నుండి అన్పిన్ చేయండి</translation> <translation id="8336153091935557858">నిన్న <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">ఐస్ల్యాండిక్ కీబోర్డ్</translation> <translation id="8342318071240498787">ఫైల్ లేదా డైరెక్టరీ అదే పేరుతో ఇప్పటికే ఉనికిలో ఉంది.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">వీరు సవరించారు</translation> <translation id="945522503751344254">ఫీడ్బ్యాక్ పంపండి</translation> <translation id="947144732524271678"><ph name="FROM_ENTRY_NAME" /> నుండి <ph name="TO_ENTRY_NAME" /> మధ్యలో ఉన్న <ph name="ENTRY_COUNT" /> నమోదులు ఎంపిక చేయబడ్డాయి.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" />ను కాపీ చేయడం జరిగింది.</translation> <translation id="981121421437150478">ఆఫ్లైన్</translation> <translation id="988685240266037636">"<ph name="FILE_NAME" />" పేరు గల ఫైల్ ఇప్పటికే వినియోగంలో ఉంది. మీరు దీనిని భర్తీ చేయాలనుకుంటున్నారా?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_th.xtb b/ui/chromeos/translations/ui_chromeos_strings_th.xtb index 16a5fdcd..1ee48a2 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_th.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_th.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">ไม่สามารถเข้าถึงไฟล์เนื่องจากเหตุผลด้านความปลอดภัย</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">กำลังซิป <ph name="NUMBER_OF_ITEMS" /> รายการ...</translation> +<translation id="1731889557567069540">คัดลอก <ph name="NUMBER_OF_ITEMS" /> รายการแล้ว</translation> <translation id="174173592514158117">แสดงโฟลเดอร์ Play ทั้งหมด</translation> <translation id="174937106936716857">จำนวนไฟล์ทั้งหมด</translation> <translation id="1775381402323441512">ข้อมูลวิดีโอ</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">อักขระไม่ถูกต้อง: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">แป้นพิมพ์ภาษาเวียดนาม (TCVN)</translation> <translation id="2168214441502403371">แป้นพิมพ์ภาษาเปอร์เซีย</translation> +<translation id="2197363559908958454">ย้าย <ph name="NUMBER_OF_ITEMS" /> รายการแล้ว</translation> <translation id="2198315389084035571">จีนตัวย่อ</translation> <translation id="2208158072373999562">การเก็บถาวรแบบ Zip</translation> <translation id="2225536596944493418">แน่ใจไหมว่าต้องการลบ <ph name="NUMBER_OF_ITEMS" /> รายการ</translation> <translation id="2230062665678605299">ไม่สามารถสร้างโฟลเดอร์ "<ph name="FOLDER_NAME" />" <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">ย้ายแล้ว</translation> <translation id="2278988676849463018">แป้นพิมพ์ภาษากันนาดา (คำที่ใช้ออกเสียง)</translation> <translation id="2288278176040912387">เครื่องเล่นแผ่นเสียง</translation> <translation id="2291538123825441971">กำลังเปิด <ph name="NUMBER_OF_FILES" /> ไฟล์</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">สำรองข้อมูลทั้งหมดแล้ว!</translation> <translation id="3626281679859535460">ความสว่าง</translation> <translation id="3644896802912593514">ความกว้าง</translation> +<translation id="3645233063072417428">ย้าย <ph name="NUMBER_OF_ITEMS" /> รายการแล้ว</translation> <translation id="3645531960514756307">เลิกตรึงโฟลเดอร์</translation> <translation id="3678559383040232393">แป้นพิมพ์มอลตา</translation> <translation id="3685122418104378273">เมื่อใช้ข้อมูลมือถือ การซิงค์ Google ไดรฟ์จะปิดใช้อยู่เป็นค่าเริ่มต้น</translation> @@ -395,6 +399,7 @@ ไม่ว่าจะเกิดอะไรขึ้นกับอุปกรณ์ของคุณ ไฟล์จะได้รับการจัดเก็บไว้อย่างปลอดภัยใน Google ไดรฟ์<ph name="MARKUP_6" /> <ph name="MARKUP_7" />แชร์ สร้าง และทำงานร่วมกัน<ph name="MARKUP_8" /> กับผู้อื่นบนไฟล์ได้ทั้งหมดในที่เดียว<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">คัดลอกแล้ว</translation> <translation id="5275973617553375938">ไฟล์ที่กู้คืนจาก Google ไดรฟ์</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">บันทึก</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">เบลารุส</translation> <translation id="7544853251252956727">สุ่มเพลง</translation> <translation id="7547811415869834682">ดัตช์</translation> +<translation id="7551643184018910560">ตรึงที่ชั้นวาง</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">รอสักครู่</translation> <translation id="7603724359189955920">ตารางกริด</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">ญี่ปุ่น</translation> <translation id="8312871300878166382">วางลงในโฟลเดอร์</translation> <translation id="8329978297633540474">ข้อความล้วน</translation> +<translation id="8335587457941836791">เลิกตรึงในชั้นวาง</translation> <translation id="8336153091935557858">เมื่อวานนี้ <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">แป้นพิมพ์ไอซ์แลนด์</translation> <translation id="8342318071240498787">มีไฟล์หรือไดเรกทอรีที่มีชื่อเดียวกันนี้อยู่แล้ว</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">แก้ไขโดย</translation> <translation id="945522503751344254">ส่งความคิดเห็น</translation> <translation id="947144732524271678">เลือกรายการทั้งหมด <ph name="ENTRY_COUNT" /> รายการตั้งแต่ <ph name="FROM_ENTRY_NAME" /> จนถึง <ph name="TO_ENTRY_NAME" /></translation> +<translation id="949308258121608615">คัดลอก <ph name="NUMBER_OF_ITEMS" /> แล้ว</translation> <translation id="981121421437150478">ออฟไลน์</translation> <translation id="988685240266037636">มีไฟล์ชื่อ "<ph name="FILE_NAME" />" อยู่แล้ว คุณต้องการแทนที่ไฟล์ดังกล่าวไหม</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb index fd0c802..570654ca 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Güvenlik nedenleriyle dosyaya erişilemedi.</translation> <translation id="169515659049020177">ÜstKrktr</translation> <translation id="1722487484194605434"><ph name="NUMBER_OF_ITEMS" /> öğe sıkıştırılıyor...</translation> +<translation id="1731889557567069540"><ph name="NUMBER_OF_ITEMS" /> öğe kopyalandı.</translation> <translation id="174173592514158117">Tüm Play klasörlerini göster</translation> <translation id="174937106936716857">Toplam dosya sayısı</translation> <translation id="1775381402323441512">Video bilgileri</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Geçersiz karakter: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Vietnamca klavye (TCVN)</translation> <translation id="2168214441502403371">Farsça klavye</translation> +<translation id="2197363559908958454"><ph name="NUMBER_OF_ITEMS" /> öğe taşındı.</translation> <translation id="2198315389084035571">Basitleştirilmiş Çince</translation> <translation id="2208158072373999562">Zip arşivi</translation> <translation id="2225536596944493418"><ph name="NUMBER_OF_ITEMS" /> öğeyi silmek istediğiniz emin misiniz?</translation> <translation id="2230062665678605299">"<ph name="FOLDER_NAME" />" klasörü oluşturulamıyor. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Taşındı.</translation> <translation id="2278988676849463018">Kannada dili klavye (Fonetik)</translation> <translation id="2288278176040912387">Plak çalar</translation> <translation id="2291538123825441971"><ph name="NUMBER_OF_FILES" /> dosya açılıyor.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Tümü yedeklendi!</translation> <translation id="3626281679859535460">Parlaklık</translation> <translation id="3644896802912593514">Genişlik</translation> +<translation id="3645233063072417428"><ph name="NUMBER_OF_ITEMS" /> öğe taşındı.</translation> <translation id="3645531960514756307">Klasörün sabitlemesini kaldır</translation> <translation id="3678559383040232393">Malta diline özgü klavye</translation> <translation id="3685122418104378273">Mobil veriler kullanılırken Google Drive senkronizasyonu varsayılan olarak devre dışıdır.</translation> @@ -395,6 +399,7 @@ Cihazınıza ne olursa olsun, dosyalarınız Google Drive'da güvenli şekilde saklanır.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Tek bir yerden dosya oluşturun, başkalarıyla paylaşın ve<ph name="MARKUP_8" /> ortak çalışın.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Kopyalandı.</translation> <translation id="5275973617553375938">Dosyalar Google Drive'dan geri yüklendi</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Kaydet</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">Beyaz Rusça</translation> <translation id="7544853251252956727">Karıştır</translation> <translation id="7547811415869834682">Felemenkçe</translation> +<translation id="7551643184018910560">Rafa sabitle</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Bir saniye bekleyin</translation> <translation id="7603724359189955920">Izgaralar</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">Japonca</translation> <translation id="8312871300878166382">Klasörünün içine yapıştır</translation> <translation id="8329978297633540474">Düz metin</translation> +<translation id="8335587457941836791">Raftaki sabitlemeyi kaldır</translation> <translation id="8336153091935557858">Dün <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">İzlanda klavyesi</translation> <translation id="8342318071240498787">Aynı adda bir dosya veya dizin zaten var.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Değiştiren:</translation> <translation id="945522503751344254">Geri bildirim gönder</translation> <translation id="947144732524271678"><ph name="FROM_ENTRY_NAME" /> - <ph name="TO_ENTRY_NAME" /> arasında <ph name="ENTRY_COUNT" /> giriş seçildi.</translation> +<translation id="949308258121608615"><ph name="NUMBER_OF_ITEMS" /> öğe kopyalandı.</translation> <translation id="981121421437150478">Çevrimdışı</translation> <translation id="988685240266037636">"<ph name="FILE_NAME" />" adlı bir dosya zaten var. Değiştirmek istiyor musunuz?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_uk.xtb b/ui/chromeos/translations/ui_chromeos_strings_uk.xtb index 1f1bb7b..1f6a0fc 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_uk.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_uk.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Доступ до файлу неможливо отримати з міркувань безпеки.</translation> <translation id="169515659049020177">Shift</translation> <translation id="1722487484194605434">Архівування елементів (<ph name="NUMBER_OF_ITEMS" />)…</translation> +<translation id="1731889557567069540">Елементи скопійовано (<ph name="NUMBER_OF_ITEMS" />).</translation> <translation id="174173592514158117">Показати всі папки Play</translation> <translation id="174937106936716857">Усього файлів</translation> <translation id="1775381402323441512">Інформація про відео</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Недійсний символ: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">В’єтнамська клавіатура (TCVN)</translation> <translation id="2168214441502403371">Перська клавіатура</translation> +<translation id="2197363559908958454">Елементи переміщено (<ph name="NUMBER_OF_ITEMS" />).</translation> <translation id="2198315389084035571">китайська (спрощена)</translation> <translation id="2208158072373999562">Архів Zip</translation> <translation id="2225536596944493418">Видалити елементи (<ph name="NUMBER_OF_ITEMS" />)?</translation> <translation id="2230062665678605299">Не вдається створити папку "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Переміщено.</translation> <translation id="2278988676849463018">Клавіатура каннада (фонетична)</translation> <translation id="2288278176040912387">Грамофон</translation> <translation id="2291538123825441971">Відкриваються файли (<ph name="NUMBER_OF_FILES" />).</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Усі файли імпортовано!</translation> <translation id="3626281679859535460">Яскравість</translation> <translation id="3644896802912593514">Ширина</translation> +<translation id="3645233063072417428">Елементи переміщено (<ph name="NUMBER_OF_ITEMS" />).</translation> <translation id="3645531960514756307">Відкріпити папку</translation> <translation id="3678559383040232393">Мальтійська клавіатура</translation> <translation id="3685122418104378273">Коли використовується мобільний Інтернет, синхронізацію Google Диска вимкнено за умовчанням.</translation> @@ -395,6 +399,7 @@ Незалежно від того, що станеться з вашим пристроєм, файли надійно зберігаються на Google Диску.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Надсилайте та створюйте файли, а також працюйте<ph name="MARKUP_8" /> над ними разом з іншими – усе в одному місці.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Скопійовано.</translation> <translation id="5275973617553375938">Відновлені файли з Google Диска</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> <translation id="5317780077021120954">Зберегти</translation> @@ -594,6 +599,7 @@ <translation id="751507702149411736">Білоруська</translation> <translation id="7544853251252956727">Перемішати</translation> <translation id="7547811415869834682">Нідерландська</translation> +<translation id="7551643184018910560">Закріпити на полиці</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Зачекайте</translation> <translation id="7603724359189955920">Сітка</translation> @@ -677,6 +683,7 @@ <translation id="8299269255470343364">Японська</translation> <translation id="8312871300878166382">Вставити в папку</translation> <translation id="8329978297633540474">Звичайний текст</translation> +<translation id="8335587457941836791">Відкріпити з полиці</translation> <translation id="8336153091935557858">Учора <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Ісландська клавіатура</translation> <translation id="8342318071240498787">Файл або каталог з таким же ім’ям уже існує.</translation> @@ -749,6 +756,7 @@ <translation id="943972244133411984">Змінено користувачем</translation> <translation id="945522503751344254">Надіслати відгук</translation> <translation id="947144732524271678">Вибрано елементи (<ph name="ENTRY_COUNT" />): від <ph name="FROM_ENTRY_NAME" /> до <ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615">Елементи скопійовано (<ph name="NUMBER_OF_ITEMS" />).</translation> <translation id="981121421437150478">Офлайн</translation> <translation id="988685240266037636">Файл із назвою "<ph name="FILE_NAME" />" уже існує. Замінити його?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> МБ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ur.xtb b/ui/chromeos/translations/ui_chromeos_strings_ur.xtb index 9e105bc..8297da2 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ur.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ur.xtb
@@ -593,6 +593,7 @@ <translation id="751507702149411736">بيلاروسی</translation> <translation id="7544853251252956727">شفل کریں</translation> <translation id="7547811415869834682">ڈچ</translation> +<translation id="7551643184018910560">شیلف میں پن کریں</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">بس ایک سیکنڈ انتظار کریں</translation> <translation id="7603724359189955920">گرڈز</translation> @@ -676,6 +677,7 @@ <translation id="8299269255470343364">جاپانی</translation> <translation id="8312871300878166382">فولڈر میں پیسٹ کریں</translation> <translation id="8329978297633540474">سادہ متن</translation> +<translation id="8335587457941836791">شیلف سے پن ہٹائیں</translation> <translation id="8336153091935557858">گزشتہ کل <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">آئس لینڈک کی بورڈ</translation> <translation id="8342318071240498787">اسی نام کی ایک فائل یا ڈائریکٹری پہلے سے موجود ہے۔</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_uz.xtb b/ui/chromeos/translations/ui_chromeos_strings_uz.xtb index c2a62ce..0fa867a 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_uz.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_uz.xtb
@@ -593,6 +593,7 @@ <translation id="751507702149411736">Belarus tilida</translation> <translation id="7544853251252956727">Tasodifiy</translation> <translation id="7547811415869834682">Golland tili</translation> +<translation id="7551643184018910560">Javonga qadab qo‘yish</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Kutib turing...</translation> <translation id="7603724359189955920">To‘r</translation> @@ -676,6 +677,7 @@ <translation id="8299269255470343364">Yapon tili</translation> <translation id="8312871300878166382">Jild ichiga qo‘shib qo‘yish</translation> <translation id="8329978297633540474">Oddiy matn</translation> +<translation id="8335587457941836791">Javondan olib tashlash</translation> <translation id="8336153091935557858">Kecha <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Island klaviaturasi</translation> <translation id="8342318071240498787">Shu nomli fayl yoki katalog avvaldan mavjud.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb index 4fc4332..f38a266 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">Tiếng Bê-la-rút</translation> <translation id="7544853251252956727">Phát ngẫu nhiên</translation> <translation id="7547811415869834682">Tiếng Hà Lan</translation> +<translation id="7551643184018910560">Ghim vào giá</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Xin đợi một chút</translation> <translation id="7603724359189955920">Lưới</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">Tiếng Nhật</translation> <translation id="8312871300878166382">Dán vào thư mục</translation> <translation id="8329978297633540474">Văn bản thuần túy</translation> +<translation id="8335587457941836791">Bỏ ghim khỏi giá</translation> <translation id="8336153091935557858">Hôm qua <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Bàn phím Iceland</translation> <translation id="8342318071240498787">Tệp hoặc thư mục có cùng tên đã tồn tại.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb index 5e3d812..cf64bc55 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
@@ -589,6 +589,7 @@ <translation id="751507702149411736">白俄罗斯语</translation> <translation id="7544853251252956727">随机播放</translation> <translation id="7547811415869834682">荷兰语</translation> +<translation id="7551643184018910560">固定到任务栏</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">请稍候</translation> <translation id="7603724359189955920">网格</translation> @@ -672,6 +673,7 @@ <translation id="8299269255470343364">日语</translation> <translation id="8312871300878166382">粘贴到文件夹中</translation> <translation id="8329978297633540474">纯文本</translation> +<translation id="8335587457941836791">取消固定到任务栏</translation> <translation id="8336153091935557858">昨天<ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">冰岛语键盘</translation> <translation id="8342318071240498787">已存在具有相同名称的文件或目录。</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb index 4faf0d8..819d912c 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">白俄羅斯文</translation> <translation id="7544853251252956727">隨機播放</translation> <translation id="7547811415869834682">荷蘭文</translation> +<translation id="7551643184018910560">固定至檔案櫃</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">請稍候片刻</translation> <translation id="7603724359189955920">網格</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">日文</translation> <translation id="8312871300878166382">貼入資料夾</translation> <translation id="8329978297633540474">純文字</translation> +<translation id="8335587457941836791">從檔案櫃中取消固定</translation> <translation id="8336153091935557858">昨天<ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">冰島文鍵盤配置</translation> <translation id="8342318071240498787">已存在名稱相同的檔案或目錄。</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb index 00a7534..abb465a6 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
@@ -594,6 +594,7 @@ <translation id="751507702149411736">白俄羅斯語</translation> <translation id="7544853251252956727">隨機播放</translation> <translation id="7547811415869834682">荷蘭文</translation> +<translation id="7551643184018910560">固定至檔案櫃</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">請稍候片刻</translation> <translation id="7603724359189955920">網格</translation> @@ -677,6 +678,7 @@ <translation id="8299269255470343364">日文</translation> <translation id="8312871300878166382">貼入資料夾</translation> <translation id="8329978297633540474">純文字</translation> +<translation id="8335587457941836791">從檔案櫃中取消固定</translation> <translation id="8336153091935557858">昨天<ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">冰島文鍵盤配置</translation> <translation id="8342318071240498787">已存在名稱相同的檔案或目錄。</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zu.xtb b/ui/chromeos/translations/ui_chromeos_strings_zu.xtb index 766aacb..d16ac58 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_zu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_zu.xtb
@@ -70,6 +70,7 @@ <translation id="1673103856845176271">Ifayela alikwazanga ukufinyelelwa ngenxa yezizathu zokuvikela.</translation> <translation id="169515659049020177">U-Shift</translation> <translation id="1722487484194605434">Izipha izinto ezingu-<ph name="NUMBER_OF_ITEMS" />...</translation> +<translation id="1731889557567069540">izinto ezingu-<ph name="NUMBER_OF_ITEMS" /> zikopishiwe.</translation> <translation id="174173592514158117">Bonisa onke amafolda e-Google Play</translation> <translation id="174937106936716857">Inani lokubalwa kwefayela</translation> <translation id="1775381402323441512">Ulwazi lwevidiyo</translation> @@ -110,10 +111,12 @@ <translation id="2163152940313951844">Inhlamvu engavumelekile: <ph name="CHARACTER_NAME" /></translation> <translation id="2164862903024139959">Ikhibhodi ye-Vietnamese (TCVN)</translation> <translation id="2168214441502403371">Ikhibhodi ye-Persian</translation> +<translation id="2197363559908958454">kuhanjiswe okungu-<ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="2198315389084035571">isi-Sipmlified Chinese</translation> <translation id="2208158072373999562">Ingobo yomlando yeziphu</translation> <translation id="2225536596944493418">Ingabe ufuna ukususa izinto ze-<ph name="NUMBER_OF_ITEMS" />?</translation> <translation id="2230062665678605299">Ayikwazi ukudala ifolda le-"<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2275059641601412272">Kuhanjisiwe.</translation> <translation id="2278988676849463018">Ikhibhodi ye-Kannada (Ifonetiki)</translation> <translation id="2288278176040912387">Isidlali serekhodi</translation> <translation id="2291538123825441971">Ukuvula amafayela e-<ph name="NUMBER_OF_FILES" />.</translation> @@ -235,6 +238,7 @@ <translation id="3620292326130836921">Konke kwenziwe isipele!</translation> <translation id="3626281679859535460">Ukukhanya</translation> <translation id="3644896802912593514">Ububanzi</translation> +<translation id="3645233063072417428">izinto ezihanjisiwe ezingu-<ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="3645531960514756307">Susa ukuphina ifolda</translation> <translation id="3678559383040232393">Ikhibhodi ye-Maltese</translation> <translation id="3685122418104378273">Ukuvumelanisa kwe-Google Drayivu kukhutshaziwe ngokuzenzakalela, uma kusetshenziswa idatha yeselula.</translation> @@ -395,6 +399,7 @@ Noma ngabe kwenzakalani kudivayisi yakho, amafayela wakho agcinwa ngokuvikelekile ku-Google Drayivu.<ph name="MARKUP_6" /> <ph name="MARKUP_7" />Yabelana, dala futhi hlanganyela<ph name="MARKUP_8" /> kumafayela nabanye endaweni eyodwa.<ph name="MARKUP_9" /></translation> +<translation id="5274350207900771082">Kukopishiwe.</translation> <translation id="5275973617553375938">Amafayela atholiwe kusuka ku-Google Drayivu</translation> <translation id="5317780077021120954">Londoloza</translation> <translation id="5318819489018851358">Yabelana ne-Linux</translation> @@ -593,6 +598,7 @@ <translation id="751507702149411736">Isi-Belarusian</translation> <translation id="7544853251252956727">Shova</translation> <translation id="7547811415869834682">Isi-Dutch</translation> +<translation id="7551643184018910560">Phina kushelufu</translation> <translation id="7576032389798113292">6x4</translation> <translation id="7589661784326793847">Linda isekhondi nje</translation> <translation id="7603724359189955920">Ama-grid</translation> @@ -676,6 +682,7 @@ <translation id="8299269255470343364">Isi-Japanese</translation> <translation id="8312871300878166382">Namathisela kufolda</translation> <translation id="8329978297633540474">Umbhalo osobala</translation> +<translation id="8335587457941836791">Khipha ukuphina kusuka kushelufu</translation> <translation id="8336153091935557858">Izolo ngo-<ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">Ikhibhodi ye-Icelandic</translation> <translation id="8342318071240498787">Ifayela noma uhla lwemibhalo olunegama elifanayo seluvele likhona</translation> @@ -748,6 +755,7 @@ <translation id="943972244133411984">Kushintshwe ngu-</translation> <translation id="945522503751344254">Thumela impendulo</translation> <translation id="947144732524271678">Ibanga elikhethiwe lokungenayo kwe-<ph name="ENTRY_COUNT" /> kusuka ku-<ph name="FROM_ENTRY_NAME" /> kuya ku-<ph name="TO_ENTRY_NAME" />.</translation> +<translation id="949308258121608615">kukopishwe okungu-<ph name="NUMBER_OF_ITEMS" />.</translation> <translation id="981121421437150478">Ayixhunyiwe ku-inthanethi</translation> <translation id="988685240266037636">Ifayela elinegama "<ph name="FILE_NAME" />" selivele likhona. Ingabe ufuna ukuyimiselela?</translation> <translation id="996903396648773764"><ph name="NUMBER_OF_MB" /> MB</translation>
diff --git a/ui/file_manager/file_manager/foreground/js/file_manager_commands.js b/ui/file_manager/file_manager/foreground/js/file_manager_commands.js index 202f83fc..011c0e65 100644 --- a/ui/file_manager/file_manager/foreground/js/file_manager_commands.js +++ b/ui/file_manager/file_manager/foreground/js/file_manager_commands.js
@@ -1683,10 +1683,9 @@ const selectedUrls = util.entriesToURLs(entries); this.addsItems_ = selectedUrls.some(url => !itemsSet[url]); - // TODO(https://crbug.com/1122076): Update the labels when the wording - // gets finalized. - command.label = this.addsItems_ ? '[Needs l10n] Pin to shelf' : - '[Needs l10n] Unpin from shelf'; + command.label = this.addsItems_ ? + str('HOLDING_SPACE_PIN_TO_SHELF_COMMAND_LABEL') : + str('HOLDING_SPACE_UNPIN_FROM_SHELF_COMMAND_LABEL'); }); } };
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/DownloadImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/DownloadImpl.java index cdb14cc..ec0c05e 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/DownloadImpl.java +++ b/weblayer/browser/java/org/chromium/weblayer_private/DownloadImpl.java
@@ -296,13 +296,7 @@ private Intent createIntent() { // Because the intent is using classes from the implementation's class loader, // we need to use the constructor which doesn't take the app's context. - if (WebLayerFactoryImpl.getClientMajorVersion() >= 83) return WebLayerImpl.createIntent(); - - try { - return mClient.createIntent(); - } catch (RemoteException e) { - throw new APICallException(e); - } + return WebLayerImpl.createIntent(); } public void downloadStarted() {
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IDownloadCallbackClient.aidl b/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IDownloadCallbackClient.aidl index 004189d..682512c2 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IDownloadCallbackClient.aidl +++ b/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IDownloadCallbackClient.aidl
@@ -20,6 +20,6 @@ void downloadProgressChanged(IClientDownload download) = 4; void downloadCompleted(IClientDownload download) = 5; void downloadFailed(IClientDownload download) = 6; - // Deprecated, use WebLayerClient.createIntent. - Intent createIntent() = 7; + // Removed in 87. + // Intent createIntent() = 7; }
diff --git a/weblayer/public/java/org/chromium/weblayer/Profile.java b/weblayer/public/java/org/chromium/weblayer/Profile.java index 0a1d2a856..b4369d8 100644 --- a/weblayer/public/java/org/chromium/weblayer/Profile.java +++ b/weblayer/public/java/org/chromium/weblayer/Profile.java
@@ -4,7 +4,6 @@ package org.chromium.weblayer; -import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.RemoteException; @@ -423,15 +422,5 @@ StrictModeWorkaround.apply(); mCallback.onDownloadFailed((Download) download); } - - @Override - // Deprecated, implementations past 83 call IWebLayerClient.createIntent instead. - public Intent createIntent() { - StrictModeWorkaround.apply(); - // Intent objects need to be created in the client library so they can refer to the - // broadcast receiver that will handle them. The broadcast receiver needs to be in the - // client library because it's referenced in the manifest. - return new Intent(WebLayer.getAppContext(), BroadcastReceiver.class); - } } }