From 11d9c830b8335aeb1f97173a1c967ce86bc427dc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 07:06:52 +0200 Subject: [PATCH 01/82] [data] update searx.data - update_engine_descriptions.py (#4742) Co-authored-by: inetol --- searx/data/engine_descriptions.json | 292 ++++++++++++++++------------ 1 file changed, 173 insertions(+), 119 deletions(-) diff --git a/searx/data/engine_descriptions.json b/searx/data/engine_descriptions.json index 643849534..fbccee24b 100644 --- a/searx/data/engine_descriptions.json +++ b/searx/data/engine_descriptions.json @@ -113,7 +113,7 @@ "baidu:ar", "ref" ], - "bilibili":"بيليبيلي هو موقع ويب من نوع خدمة استضافة فيديو وتطبيق محمول أنشئ في 26 يونيو 2009، يقع مقره الرئيسي في الصين، وهو متوفر باللغة الصينية.", + "bilibili":"بيليبيلي (بالأنجليزية:bilibili) هو موقع ويب من نوع خدمة استضافة فيديو وتطبيق محمول أنشئ في 26 يونيو 2009، يقع مقره الرئيسي في الصين، وهو متوفر باللغة الصينية. يعد Bilibili واحداً من أهم منصات الفيديو الناشئة في الصين. يحظى الموقع بشعبية ضخمة بين الجيل Z في الصين. يميل محتوى Bilibili إلى أن يكون حول الألعاب والرسوم المتحركة والقصص المصورة. ومع ذلك، فإن عدد أنواع الفيديو الشائعة يتغير مع تزايد شعبية المنصة، ويرتبط معظمها بأسلوب الحياة والجمال. وهو يتشابه إلى حد كبير مع موقع اليوتيوب.", "bing":"مايكروسوفت بينغ ‏ واختصارًا وهو الاسم السابق: بينغ ‏ ؛ هو محرك بحث أعلن عنه تحت اسم ، طور تحت اسم بالعربية: كومو وإنجليزية: kumo, هو محرك بحث في ويب لشركة مايكروسوفت، صمم لمنافسة رواد هذا المجال جوجل وياهو!، تم الإفصاح عنه من قبل ستيف بالمر الرئيس التنفيذي السابق في مايكروسوفت في 28 مايو 2009 في مؤتمر All Things D في سان دييغو، بينغ هو بديل لايف سيرش Live Search، بدأ عمله بالكامل في 3 يونيو 2009.", "bing images":[ "bing:ar", @@ -325,7 +325,7 @@ "wiktionary":"ويكاموس هو مشروع مُتعدد اللغات، أحد مشاريع مؤسسة ويكيميديا على شبكة الإنترنت يهدف إلى إيجاد قاموس حر بلغة الويكي لكل اللغات. يتم تحريرها بشكل تعاوني عن طريق ويكي، وهو متاح في 172 لغة من بينها العربية. مُعظم مفردات اللغة في ويكاموس توفر تعريفات وترجمات للكلمات إلى لغات عديدة، وبعض المفردات متصلة بمعلومات إضافية موجودة عادة في المكنز أو المعجم اللغوي، كما تضم مرادفات الكلمة.", "wolframalpha":"ولفرام ألفا ‏، هو محرك بحث أطلق عند الساعة الثالثة من صباح 16 مايو 2009. على خلاف محركات البحث التقليدية، فإن ولفرام يقوم بالإجابة عن الأسئلة التي تطرح عليه في حين تقوم البواحيث التقليدية بمجرد عرض قائمة من مواقع الإنترنت ذات العلاقة بالكلمات المفتاحية التي يتم البحث عبرها.", "wttr.in":[ - "not found تقرير حالة ألطقس", + "Des Moines, Iowa, United States تقرير حالة ألطقس", "https://wttr.in" ], "yacy":"ياسي ‏ – هو محرك بحثي موزع يستخدم بالمجان، مبني علي مبادئ شبكة النظير للنظير. محتوى المحرك عبار عن برنامج مكتوب بلغة الجافا موزع على العديد من الحواسب الالية في شهر سبتمبر 2006 وكان يسمى ب «نظراء الياسي» كل نظير بمفرده يبحث في شبكة الإنترنت، يحلل ويسجل الصفحات التي وجدت ويخزن التسجيلات في قاعدة بيانات مشتركة بين الاخرون طبقا لمبادئ شبكة النظير للنظير. هو محرك بحث لأي شخص ويمكنه بناء مدخل بحثي لشبكته الداخلية ومساعدته في البحث على الإنترنت العام.", @@ -531,7 +531,7 @@ "wiktionary":"Уикиречник е многоезичен, уеб-базиран проект, стремящ се да създаде свободен по своето съдържание речник на над 150 езика. За разлика от традиционните речници, Уикиречникът се изгражда съвместно на доброволни начала посредством МедияУики, който позволява речниковите записи да се променят практически от всеки човек с достъп до Интернет.", "wolframalpha":"WolframAlpha е отговаряща машина, разработена от компанията Wolfram Research, чийто основател и главен изпълнителен директор е Стивън Волфрам.", "wttr.in":[ - "Прогноза за времето в: not found", + "Прогноза за времето в: Des Moines, Iowa, United States", "https://wttr.in" ], "youtube":"Ютюб е видео хостинг услуга, притежавана от Google Inc. Тя предоставя уебсайт за видеосподеляне, на който потребителите могат да качват, споделят и гледат видеоклипове. След нова актуализация е предоставена възможността за споделяне на снимки, както и „истории“, видими за 12-часов период.", @@ -702,7 +702,7 @@ "wikivoyage":"উইকিভ্রমণ হলো স্বেচ্ছাসেবক লেখকদের দ্বারা লিখিত ভ্রমণের গন্তব্য ও বিষয়গুলোর জন্য একটি বিনামূল্যের ওয়েবভিত্তিক ভ্রমণ নির্দেশিকা। এটি উইকিপিডিয়ার একটি সহপ্রকল্প এবং অলাভজনক উইকিমিডিয়া ফাউন্ডেশন দ্বারা সমর্থিত ও হোস্ট করা হয়। উইকিভ্রমণকে \"ভ্রমণ নির্দেশনার উইকিপিডিয়া\" বলা হয়েছে।", "wiktionary":"উইকিঅভিধান বা উইকশনারি উন্মুক্ত অভিধান তৈরির একটি বহুভাষিক, ওয়েব-ভিত্তিক প্রকল্প, যা ১৫১ টি ভাষায় রয়েছে। অন্যান্য আদর্শ অভিধানের মত করে এটি করা হয়নি, এটি করা হয়েছে স্বেচ্ছাসেবকদের সহযোগীতায় উইকি সফটওয়্যার ব্যবহার করে, যেখানে ইন্টারনেটে এ ওয়েব সাইট ব্যবহার করে এমন প্রায় সবাইকে তা পরিবর্তন করার সুযোগ করে দেয়। এর সহপ্রকল্প উইকিপিডিয়ার মত উইকিঅভিধানও উইকিমিডিয়া ফাউন্ডেশন দ্বারা পরিচালিত হয়।", "wttr.in":[ - "আবহাওয়া সঙ্ক্রান্ত তথ্য not found", + "আবহাওয়া সঙ্ক্রান্ত তথ্য Des Moines, Iowa, United States", "https://wttr.in" ], "yahoo news":"ইয়াহু! নিউজ হল একটি সংবাদ ওয়েবসাইট যা ইয়াহু! দ্বারা একটি ইন্টারনেট-ভিত্তিক সংবাদ সমষ্টিকারী হিসাবে উদ্ভূত হয়েছে। সাইটটি ইয়াহু! সফ্টওয়্যার প্রকৌশলী ব্র্যাড ক্লোসি আগস্ট ১৯৯৬ সালে তৈরি করেছিল। নিবন্ধগুলি মূলত অ্যাসোসিয়েটেড প্রেস, রয়টার্স, ফক্স নিউজ, আল জাজিরা, এবিসি নিউজ, ইউএসএ টুডে, সিএনএন এবং বিবিসি নিউজের মতো সংবাদ পরিষেবাগুলি থেকে এসেছে।", @@ -952,10 +952,6 @@ "wikivoyage":"Viquiviatges és un projecte per crear una guia turística lliure, basada en la tecnologia wiki. Es desenvolupa de manera col·laborativa per viquiviatgers de tot el món. Viquiviatges es construeix amb l'esperit de compartir el coneixement que fa que viatjar sigui tan agradable.", "wiktionary":"El Viccionari és un projecte col·laboratiu per produir un diccionari multilingüe lliure, amb significats, etimologies i pronunciacions, en totes aquelles llengües en què sigui possible. El Viccionari és l'acompanyant lèxic al contingut obert de l'enciclopèdia Viquipèdia.", "wolframalpha":"WolframAlpha ( WUULf-rəm-) és un motor de respostes desenvolupat per Wolfram Research. Respon a les consultes de fets calculant respostes a partir de dades d'origen extern.", - "wttr.in":[ - "Informe del temps per a: not found", - "https://wttr.in" - ], "yacy":"Yacy és un cercador lliure que fa servir una xarxa peer-to-peer com a infraestructura.", "yacy images":[ "yacy:ca", @@ -1083,10 +1079,7 @@ "mastodon users":"Mastodon je sociální síť podobná známější síti X. Na rozdíl od většiny sociálních sítí je Mastodon open source a každý si může založit svoji vlastní instanci. Každá instance má vlastní podmínky užívání, ochrany soukromí a pravidel pro příspěvky; zároveň je propojená s ostatními instancemi, a je tedy možné se na ně připojit pomocí jednoho účtu.", "mdn":"MDN Web Docs jsou webové stránky provozované Mozilla Foundation, které obsahují dokumentaci k projektům založených na Mozille jako Firefox či Thunderbird a webových standardům a technologiím. Veškerý editovatelný obsah je ukládán v Git repozitáři na GitHub.com, který umožňuje každému uživateli navrhovat úpravy a diskutovat změny. Server byl založen v roce 2005 pod názvem Mozilla Developer Center a část jeho obsahu pocházela z dnes již zrušeného serveru Netscape DevEdge.", "metacpan":"CPAN je softwarový repozitář obsahující jednak moduly pro programovací jazyk Perl a jednak aplikace napsané v tomto jazyce. První myšlenky k jeho zřízení se objevily už v roce 1993 inspirované repozitářem CTAN typografického systému TeX, ale do provozu byl oficiálně uveden až v roce 1995. Jméno CPAN nese kromě samotného repozitáře i perlový program, který slouží k stažení a instalaci modulů. Kromě toho je možné do repozitáře přistupovat i přes webové rozhraní, kde je například možné i bez instalace číst dokumentaci patřičného modulu generovanou ze standardního formátu POD.", - "microsoft learn":[ - "Učte se pomocí interaktivních lekcí a technické dokumentace, získejte hodiny profesního rozvoje a certifikace a zapojte se do komunity.", - "https://learn.microsoft.com" - ], + "microsoft learn":"Microsoft Learn je webový portál a elektronická knihovna technické dokumentace a školení pro koncové uživatele, vývojáře a IT profesionály, kteří pracují s produkty společnosti Microsoft. Microsoft Learn byl veřejnosti představen v září 2018. V roce 2022 byla původní knihovna technické dokumentace, která se jmenovala Microsoft Docs, a která v roce 2016 nahradila MSDN a Microsoft TechNet, přesunuta do elektronické knihovny Microsoft Learn.", "naver":"Naver je jihokorejská online platforma provozovaná společností Naver Corporation. Debutoval v roce 1999 jako první webový portál v Jižní Koreji. Byl také prvním operátorem na světě, který zavedl funkci komplexního vyhledávání, která sestavuje výsledky vyhledávání z různých kategorií a prezentuje je na jediné stránce. Naver od té doby přidal množství nových služeb, od základních funkcí, jako je e-mail a zprávy, až po světově první online platformu otázek a odpovědí Knowledge iN.", "npm":"npm je správce balíčků pro JavaScript, výchozí správce balíčků pro prostředí Node.js.", "odysee":"Odysee je americká decentralizovaná platforma pro sdílení videa postavená na blockchainu LBRY. Staví se jako alternativa k hlavním webům pro sdílení videí, ale s důrazem na svobodu slova a decentralizaci.", @@ -1157,7 +1150,7 @@ "wiktionary":"Wikislovník je sesterský internetový projekt Wikipedie, který má za cíl vytvořit svobodný wiki mnohojazyčný slovník ve všech a o všech jazycích s definicemi, výslovností, překlady, etymologií a dalšími slovníkovými sekcemi. Vychází z myšlenky Daniela Alstona a byl spuštěn 12. prosince 2002.", "wolframalpha":"Wolfram Alpha je odpovídací stroj, vytvořený firmou Wolfram Research. Jde o službu, která se snaží přímo odpovídat na dotazy uživatele, na rozdíl od vyhledávacích služeb, které poskytnou pouze seznam stránek, pravděpodobně obsahujících odpověď. Wolfram Alpha je vytvořen na základě výpočetního softwaru Mathematica, který je využíván pro řešení algebraických úloh, numerických a statistických výpočtů, ale i vizualizaci výsledků. Odpověď na dotaz se zobrazí v člověku čitelné a přehledné formě. Často je přiložen i postup vedoucí k výsledku.", "wttr.in":[ - "Předpověď počasí pro: not found", + "Předpověď počasí pro: Des Moines, Iowa, United States", "https://wttr.in" ], "yacy":"YaCy je svobodný P2P vyhledávač. Na rozdíl od jiných známých vyhledávačů, YaCy nefunguje prostřednictvím několika málo datacenter. Místo toho využívá Peer-to-peer komunikaci a sdílení dat, kde jsou disková úložiště jeho uživatelů používána k uchování dat o zaindexovaných webových stránkách a jiných dokumentech. V důsledku toho je velmi těžké cenzurovat nebo arbitrárně seřazovat výsledky vyhledávání jiných uživatelů a stejně tak nebude vyhledávač poškozen v případě poruchy několika jeho serverů.", @@ -1182,7 +1175,7 @@ "https://www.bing.com" ], "bing images":[ - "Delwedd Bing yw'r peiriant chwilio delweddau gorau, sy'n rhoi'r gallu i ddefnyddwyr chwilio ac archwilio'r delweddau mwyaf perthnasol, o ansawdd uchel wedi'u teilwra ar gyfer eich anghenion", + "Chwilio ac archwilio lluniau a phapurau wal o ansawdd uchel sydd ar gael am ddim ar Bing Images. Ysbrydolwch a dyrchafwch eich delweddau!", "https://www.bing.com/images" ], "bing news":[ @@ -1260,7 +1253,7 @@ "wikispecies":"Prosiect gan Sefydliad Wicimedia yw Wicirywogaeth (Wikispecies) a lansiwyd ar 5 Medi 2004. Mae'n brosiect amlieithog, ac yn debycach i Comin Wicimedia nag i Wicipedia o ran ffurf.", "wiktionary":"Un o brosiectau Sefydliad Wicifryngau gyda'r nod o greu geiriadur wici rhydd ym mhob iaith yw Wiciadur sy'n eiriadur Cymraeg - Saesneg. Erbyn Medi 2012 roedd gan y Wiciadur dros 17,000 o gofnodion mewn 65 o ieithoedd gwahanol. Gyda'r Wiciadur Cymraeg, darperir diffiniadau o ystyron geiriau ac ymadroddion Cymraeg eu hiaith tra bod cyfieithiadau o eiriau mewn ieithoedd eraill yn cael eu darparu.", "wttr.in":[ - "Adroddiad tywydd ar gyfer: not found", + "Adroddiad tywydd ar gyfer: Des Moines, Iowa, United States", "https://wttr.in" ], "youtube":"Cwmni cynnal a rhannu fideos ar-lein ydy YouTube a grëwyd gan dri cynweithwyr cwmni bancio digidol PayPal yn Chwefror 2005. Gall defnyddwyr uwchlwytho a lawrlwytho fideos. Yn San Bruno, California, y lleolwyd pencadlys y cwmni a defnyddia Adobe Flash Video a thechnoleg HTML5 i arddangos ystod eang iawn o fideos a gynhyrchwyd gan y defnyddwyr neu wylwyr gan gynnwys clipiau byr, tameidiau o raglenni teledu a cherddoriaeth yn ogystal â ffilmiau a chlipiau amtaur a blogiau fideo." @@ -1428,10 +1421,6 @@ "wikivoyage":"Wikivoyage er en fri webbaseret rejseguide for både rejsedestinationer og emner relateret til rejser, der er skrevet af frivillige forfattere.", "wiktionary":"Wiktionary er en ordbog med åbent indhold fra Wikimedia Foundation. Den engelsksprogede version blev etableret i december 2002 og rummer mere end 3.500.000 artikler.", "wolframalpha":"Wolfram Alpha er en beregningsmæssig vidensmotor eller svarmaskine, som er udviklet af Wolfram Research. Wolfram Alpha er en online søgemaskine som kan svare på faktuelle forespørgsler direkte ved at behandle disse vha. eksterne kilder. Dermed undlader Wolfram Alpha at oplyse en liste med links, som en normal søgemaskine måske ville.", - "wttr.in":[ - "Vejret i: not found", - "https://wttr.in" - ], "youtube":"YouTube er en online video platform og socialt medie med hovedsæde i San Bruno i Californien, USA. Tjenesten blev udviklet af de tidligere PayPal-medarbejdere Steve Chen, Chad Hurley og Jawed Karim og åbnede den 14. februar 2005. Tjenesten blev i november 2006 købt af Google for 1,65 mia. $." }, "de":{ @@ -1554,7 +1543,7 @@ "gentoo:en", "ref" ], - "github":"GitHub ist eine öffentliche und proprietäre Softwareentwicklungsplattform. Grundlage ist die Versionsverwaltungs-Software Git. Das Unternehmen GitHub, Inc. hat seinen Sitz in San Francisco in den USA. Seit dem 26. Dezember 2018 gehört das Unternehmen zu Microsoft.", + "github":"GitHub ist eine proprietäre und öffentliche Softwareentwicklungsplattform auf Grundlage der Versionsverwaltungs-Software Git. GitHub war im Jahr 2011 bei Open-Source-Software der populärste Dienst seiner Art, gemessen an der Anzahl der Codebeiträge („Commits“). Der Dienst hat über 83 Millionen registrierte Nutzer und verwaltet über 200 Millionen Repositories . Neben vielen sehr kleinen oder oft nur vom Besitzer genutzten Projekten gibt es mehrere bekannte größere Open-Source-Projekte, die bei der Versionsverwaltung ihres Quelltextes GitHub verwenden. Das Unternehmen GitHub, Inc. hat seinen Sitz in San Francisco in den USA und gehört zu Microsoft.", "gitlab":"GitLab ist eine Softwareentwicklungsplattform auf Git-Basis. GitLab bietet ein Issue-Tracking-System mit Kanban-Board, ein System für Continuous Integration und Continuous Delivery (CI/CD), ein Wiki, eine Container-Registry, einen Sicherheitsscanner für Container und Sourcecode sowie Multi-Cluster-Verwaltung und -Überwachung. GitLab ist in Produkte für Entwickler, wie zum Beispiel AWS oder Google Cloud, integrierbar und über eine API fernsteuerbar. GitLab ist in den Programmiersprachen Ruby und Go geschrieben.", "goodreads":"Goodreads ist die größte englischsprachige Social-Reading-Plattform.", "google":"Google ist eine Internet-Suchmaschine des US-amerikanischen Unternehmens Google LLC. Google steht in direkter Konkurrenz zu anderen Suchmaschinen wie zum Beispiel Microsoft Bing, Yandex in Russland, Baidu in China und Qwant in Europa, hat aber einen dominanten Anteil am globalen Suchmaschinenmarkt.", @@ -1661,7 +1650,7 @@ "qwant:de", "ref" ], - "reddit":"Reddit ist ein Social-News-Aggregator, eine Website, auf der registrierte Benutzer Inhalte einstellen bzw. anbieten können. Ein Inhalt kann entweder aus einem Link, einem Video, einem Bild, einer Umfrage oder einem Textbeitrag bestehen. Andere Benutzer können die Beiträge als positiv oder negativ beurteilen. Die Bewertungen beeinflussen, welche Position der Beitrag auf der jeweiligen Reddit-Seite sowie der Startseite einnimmt.", + "reddit":"Reddit ist ein Internetforum und Social-News-Aggregator. Auf der Social Media Website (Online-Community) können registrierte Benutzer Inhalte einstellen und mit anderen Nutzern kommunizieren. Ein Inhalt kann entweder aus einem Link, einem Video, einem Bild, einer Umfrage oder einem Textbeitrag bestehen. Andere Benutzer können die Beiträge als positiv oder negativ beurteilen. Die Bewertungen beeinflussen, welche Position der Beitrag auf der jeweiligen Reddit-Seite sowie der Startseite einnimmt.", "reuters":"Reuters ist eine internationale Nachrichtenagentur mit Sitz in London und eine der weltweit größten ihrer Art. Seit 2008 ist sie Bestandteil von Thomson Reuters.", "rottentomatoes":"Rotten Tomatoes ist ein englischsprachiger Bewertungs-Aggregator, der insbesondere Rezensionen zu Filmen und Fernsehserien sammelt und veröffentlicht. Der Domain-Name bezieht sich auf die Vorstellung eines verstimmten Publikums, das aus Protest bei einer Theateraufführung verfaultes Gemüse auf die Bühne wirft.", "rubygems":"RubyGems ist das offizielle Paketsystem für die Programmiersprache Ruby. Es stellt ein Paketformat, ein Werkzeug zur Verwaltung von Paketen und ein Repositorium für deren Verteilung zur Verfügung. Mit ihm hat der Anwender die Möglichkeit, mehrere Versionen eines Programmes, Programmteiles oder einer Bibliothek gesteuert nach Bedarf einzurichten, zu verwalten oder auch wieder zu entfernen. Es funktioniert analog zum Paketmanager Pip bei Python, hat aber auch Ähnlichkeiten zu apt-get oder yum.", @@ -1721,7 +1710,7 @@ "https://www.woxikon.de/" ], "wttr.in":[ - "Wetterbericht für: not found", + "Wetterbericht für: Des Moines, Iowa, United States", "https://wttr.in" ], "yacy":"YaCy ist eine Suchmaschine, die nach dem Peer-to-Peer-Prinzip – kurz P2P – arbeitet. Dabei gibt es keinen zentralen Server, sondern alle Teilnehmer sind gleichwertig.", @@ -1846,6 +1835,14 @@ ], "library genesis":"Η Library Genesis ή LibGen είναι μια μηχανή αναζήτησης άρθρων και βιβλίων για διάφορα θέματα, η οποία επιτρέπει την ελεύθερη πρόσβαση σε περιεχόμενο, το οποίο κατά τα άλλα απαιτεί πληρωμή ή δεν είναι ψηφιοποιημένο αλλού. Μεταξύ άλλων, παρέχει αρχεία PDF από τη διαδικτυακή πύλη ScienceDirect του Elsevier.", "library of congress":"Η Βιβλιοθήκη του Κογκρέσου των Ηνωμένων Πολιτειών θεωρείται η μεγαλύτερη και πλουσιότερη βιβλιοθήκη παγκοσμίως και είναι Εθνική βιβλιοθήκη των ΗΠΑ. Ιδρύθηκε το 1800 και αρχικά έδρευε στο Καπιτώλιο. Το 1814 η βιβλιοθήκη κάηκε από τους Βρετανούς. Το 1897 μεταφέρθηκε στο χώρο όπου στεγάζεται μέχρι και σήμερα, στην Ουάσινγκτον.", + "mastodon hashtags":[ + "mastodon users:el-GR", + "ref" + ], + "mastodon users":[ + "Μάθε περισσότερα για το Mastodon, τη ριζικά διαφορετική, ελεύθερη και ανοικτού κώδικα αποκεντρωμένη πλατφόρμα κοινωνικής δικτύωσης.", + "https://joinmastodon.org/" + ], "microsoft learn":[ "Μάθετε με διαδραστικά μαθήματα και τεχνική τεκμηρίωση, κερδίστε ώρες επαγγελματικής ανάπτυξης και πιστοποιήσεις και συνδεθείτε με την κοινότητα.", "https://learn.microsoft.com" @@ -1902,7 +1899,7 @@ "wikivoyage":"Τα Βικιταξίδια είναι ένας ελεύθερος διαδικτυακός ταξιδιωτικός οδηγός, για ταξιδιωτικούς προορισμούς και θέματα ευρύτερου ταξιδιωτικού ενδιαφέροντος, ο οποίος συντάσσεται από εθελοντές. Το όνομα αποτελεί συνδυασμό της λέξης \"Wiki\" και \"Ταξίδια\".", "wiktionary":"Το Βικιλεξικό είναι πολύγλωσσο λεξικογραφικό διαδικτυακό εγχείρημα του ιδρύματος Wikimedia. Βασίζεται σε σύστημα wiki και το περιεχόμενό του μπορεί να χρησιμοποιηθεί ελεύθερα.", "wttr.in":[ - "Πρόγνωση καιρού για: not found", + "Πρόγνωση καιρού για: Des Moines, Iowa, United States", "https://wttr.in" ], "youtube":"To YouTube είναι ιστότοπος κοινοποίησης, αποθήκευσης, αναζήτησης και αναπαραγωγής ψηφιακών βίντεο και ψηφιακών ταινιών. Δημιουργήθηκε στις 14 Φεβρουαρίου 2005. Τον Νοέμβριο του 2005 ονομάστηκε από το περιοδικό Time «Η Εφεύρεση του 2005». Τον Οκτώβριο του 2006, η εταιρεία αγοράστηκε από την Google με ανταλλαγή μετοχών αξίας 1,65 δισεκατομμυρίων δολαρίων ΗΠΑ και σήμερα λειτουργεί ως θυγατρική της Google. Η εταιρία εδρεύει στο Σαν Μπρούνο της Καλιφόρνια, και χρησιμοποιεί την τεχνολογία Adobe Flash Video για να εμφανιστεί μια μεγάλη ποικιλία από το περιεχόμενο φτιαγμένο από χρήστες, συμπεριλαμβανομένων των κλιπ ταινιών, κλιπ τηλεόρασης, βίντεο και μουσικής, καθώς και ερασιτεχνικό περιεχόμενο, όπως το βιντεοϊστολόγιο και σύντομα πρωτότυπα βίντεο. Το μεγαλύτερο μέρος του περιεχομένου στο YouTube επιφορτώνεται από ιδιώτες, ωστόσο μέσα μαζικής ενημέρωσης και επιχειρήσεις παρέχουν ορισμένο από το υλικό τους μέσω της ιστοσελίδας συμπεριλαμβανομένων των CBS, BBC, Vevo και άλλων οργανώσεων, ως μέρος του προγράμματος εταιρικής σχέσης YouTube." @@ -2002,7 +1999,7 @@ "Discussion search engine", "https://crowdview.ai/" ], - "currency":"DuckDuckGo is an online privacy focused search engine and private browser. They also offer browser extensions and private email forwarding. DuckDuckGo is a privately held company with about 200 employees. The company's name is a reference to the children's game duck, duck, goose.", + "currency":"DuckDuckGo is an American software company focused on online privacy, whose flagship product is a search engine named DuckDuckGo. Founded by Gabriel Weinberg in 2008, its later products include browser extensions and a custom DuckDuckGo web browser. Headquartered in Paoli, Pennsylvania, DuckDuckGo is a privately held company with about 200 employees. The company's name is a reference to the children's game duck, duck, goose.", "dailymotion":"Dailymotion is a French online video sharing platform owned by Canal+. Prior to 2024, the company was owned by Vivendi. North American launch partners included Vice Media, Bloomberg, and Hearst Digital Media. It is among the earliest known platforms to support HD (720p) resolution video. Dailymotion is available worldwide in 183 languages and 43 localised versions featuring local home pages and local content. It has more than 300 million monthly users.", "ddg definitions":[ "currency:en", @@ -2040,10 +2037,6 @@ "wikidata" ], "emojipedia":"Emojipedia is an emoji reference website which documents the meaning and common usage of emoji characters in the Unicode Standard. Most commonly described as an emoji encyclopedia or emoji dictionary, Emojipedia also publishes articles and provides tools for tracking new emoji characters, design changes and usage trends. It has been owned by Zedge since 2021.", - "encyclosearch":[ - "Search over two dozen encyclopedias at once with EncycloSearch! EncycloSearch is an ad-free, open-source encyclopedia search engine and reader. Supported by the Knowledge Standards Foundation.", - "https://encyclosearch.org" - ], "erowid":"Erowid, also called Erowid Center, is a non-profit educational organization that provides information about psychoactive plants and chemicals.", "etymonline":"Etymonline, or Online Etymology Dictionary, sometimes abbreviated as OED, is a free online dictionary that describes the origins of English words, written and compiled by Douglas R. Harper.", "fdroid":"F-Droid is a free and open source app store and software repository for Android, serving a similar function to the Google Play store. The main repository, hosted by the project, contains only free and open source apps. Applications can be browsed, downloaded and installed from the F-Droid website or client app without the need to register an account. \"Anti-features\" such as advertising, user tracking, or dependence on non-free software are flagged in app descriptions.", @@ -2051,7 +2044,7 @@ "FindThatMeme - The Meme Search Engine", "https://findthatmeme.com" ], - "flickr":"Flickr is an image hosting and video hosting service, as well as an online community, founded in Canada and headquartered in the United States. It was created by Ludicorp in 2004 and was previously a common way for amateur and professional photographers to host high-resolution photos. It has changed ownership several times and has been owned by SmugMug since April 20, 2018.", + "flickr":"Flickr is an image and video hosting service, as well as an online community, founded in Canada and headquartered in the United States. It was created by Ludicorp in 2004 and was previously a common way for amateur and professional photographers to host high-resolution photos. It has changed ownership several times and has been owned by SmugMug since April 20, 2018.", "free software directory":"The Free Software Directory (FSD) is a project of the Free Software Foundation (FSF). It catalogs free software that runs under free operating systems—particularly GNU and Linux. The cataloged projects are often able to run in several other operating systems. The project was formerly co-run by UNESCO.", "frinkiac":"Frinkiac is a website for users to search for words or phrases from episodes of the American animated sitcom The Simpsons. It returns screenshots related to the search terms, from which it generates memes and animated GIFs. Created by Paul Kehrer, Sean Schulte and Allie Young, the site is named after a computer built by one of the show's recurring characters, Professor Frink. The site was critically acclaimed upon its launch, and Newsweek wrote: \"It may be the greatest feat of Internet engineering we've ever seen\". As of May 2016, screenshots from the first seventeen seasons of The Simpsons are in Frinkiac's database.", "fyyd":[ @@ -2239,7 +2232,7 @@ "discuss.python:en", "ref" ], - "pinterest":"Pinterest is an American social media service for publishing and discovery of information in the form of pinboards. This includes recipes, home, style, motivation, and inspiration on the Internet using image sharing. Pinterest, Inc. was founded by Ben Silbermann, Paul Sciarra, and Evan Sharp, and is headquartered in San Francisco.", + "pinterest":"Pinterest is an American social media service for publishing and discovery of information in the form of digital pinboards. This includes recipes, home, style, motivation, and inspiration on the Internet using image sharing. Pinterest, Inc. was founded by Ben Silbermann, Paul Sciarra, and Evan Sharp, and is headquartered in San Francisco.", "piped":[ "alternative front end for YouTube", "wikidata" @@ -2272,7 +2265,7 @@ "quark:en", "ref" ], - "qwant":"Qwant is a French search engine launched in February 2013. Qwant says that it is focused on privacy, does not track users, reselling personal data, or bias the display of search results. Its results are largely based on Microsoft's Bing search engine. Qwant is currently only available in around 30 countries.", + "qwant":"Qwant is a French search engine launched in February 2013. Qwant says that it is focused on privacy, does not track users, reselling personal data, or bias the display of search results. Its results are similar to Microsoft's Bing search engine however it is used only in case Qwant lacks information of certain website and for image searches. Qwant is currently only available in around 30 countries.", "qwant images":[ "qwant:en", "ref" @@ -2307,7 +2300,7 @@ "ref" ], "seekr news":[ - "Seekr builds trust into every stage of the AI lifecycle. Streamline operations with accurate & customizable enterprise AI solutions.", + "Seekr builds simplicity and security into each step of the AI lifestyle to create trusted applications & a custom enterprise AI platform.", "https://seekr.com/" ], "seekr videos":[ @@ -2392,7 +2385,7 @@ "wikicommons.images:en", "ref" ], - "wikidata":"Wikidata is a collaboratively edited multilingual knowledge graph hosted by the Wikimedia Foundation. It is a common source of open data that Wikimedia projects such as Wikipedia, and anyone else, is able to use under the CC0 public domain license. Wikidata is a wiki powered by the software MediaWiki, including its extension for semi-structured data, the Wikibase. As of early-2025, Wikidata had 1.65 billion item statements.", + "wikidata":"Wikidata is a collaboratively edited multilingual knowledge graph hosted by the Wikimedia Foundation. It is a common source of open data that Wikimedia projects such as Wikipedia, and anyone else, are able to use under the CC0 public domain license. Wikidata is a wiki powered by the software MediaWiki, including its extension for semi-structured data, the Wikibase. As of early-2025, Wikidata had 1.65 billion item statements.", "wikimini":[ "family of online encyclopedias for children", "wikidata" @@ -2873,7 +2866,7 @@ "wiktionary":"El Wikcionario es un proyecto de diccionario libre de la Fundación Wikimedia, que contiene definiciones, traducciones, etimologías, sinónimos y pronunciaciones de palabras en múltiples idiomas. Está basado en la tecnología wiki, en particular mediante la utilización del software MediaWiki, y su contenido está protegido por las licencias libres GFDL y CC BY-SA.", "wolframalpha":"Wolfram|Alpha es un buscador de respuestas desarrollado por la compañía Wolfram Research. Es un servicio en línea que responde a las preguntas directamente, mediante el procesamiento de la respuesta extraída de una base de datos estructurados, en lugar de proporcionar una lista de los documentos o páginas web que podrían contener la respuesta, tal y como lo hace Google. Fue anunciado en marzo de 2009 por el físico británico Stephen Wolfram y está en funcionamiento desde el 15 de mayo de 2009. Fue lanzado en español en 2022.", "wttr.in":[ - "El tiempo en: not found", + "El tiempo en: Des Moines, Iowa, United States", "https://wttr.in" ], "yacy":"YaCy es un motor de búsqueda distribuido y libre que utiliza una red peer-to-peer (P2P) como infraestructura. En 2011 el motor tenía 1400 millones de documentos en su índice, y gestionaba unas 130.000 peticiones de búsquedas al día.", @@ -3390,7 +3383,7 @@ "wikicommons.images:fa-IR", "ref" ], - "wikicommons.images":"ویکی‌انبار یک مخزن دیجیتال از فایل‌های رایگان تصویری، صوتی، و دیگر فایل‌های رسانه‌ای است. بنیاد ویکی‌مدیا پروژهٔ ویکی‌انبار را ایجاد کرده‌است.", + "wikicommons.images":"ویکی‌انبار یک مخزن دیجیتال از فایل‌های رایگان تصویری، صوتی، و دیگر فایل‌های رسانه‌ای است. بنیاد ویکی‌مدیا پروژهٔ ویکی‌انبار را ایجاد کرده است.", "wikicommons.videos":[ "wikicommons.images:fa-IR", "ref" @@ -3398,15 +3391,15 @@ "wikidata":"ویکی‌داده پروژه‌ای است برای ایجاد یک پایگاه دادهٔ مشارکتی قابل ویرایش با هدف کمک به پروژه‌های ویکی‌مدیا، ازجمله ویکی‌پدیا. وبگاه ویکی‌داده در ۳۰ اکتبر ۲۰۱۲ رسماً افتتاح شد. پروژه توسط ویکی‌مدیا دویچلند آغاز شد و قرار شد منبعی اشتراکی از انواع به‌خصوصی از داده‌ها باشد، مثل تاریخ‌های تولد، که می‌تواند در سایر پروژه‌ها مثل ویکی‌پدیا به کار برود. همه افراد می‌توانند از ویکی‌داده استفاده کنند البته تنها با پیروی از پروانه مالکیت عمومی. ویکی‌داده شبیه ویکی‌انبار است زیرا ویکی‌انبار جایی برای ذخیره پرونده‌های رسانه‌ای فراهم می‌کند و دسترسی این پرونده‌های رسانه‌ای برای تمام پروژه‌های ویکی‌مدیا آزاد است. ویکی‌داده از یک نرم‌افزار به نام ویکی‌بیس قدرت گرفته‌است.", "wikinews":"ویکی‌خبر یک مرجع خبری با محتوای آزاد است.", "wikipedia":"ویکی‌پدیا یک دانشنامه برخط چندزبانه مبتنی بر وب با محتوای آزاد و همکاری باز است که با همکاری افراد داوطلب نوشته می‌شود و هر کسی که به اینترنت و وب دسترسی داشته باشد می‌تواند مقالات آن را ببیند و ویرایش کند. نام ویکی‌پدیا از پیوند واژه «ویکی» با «پدیا» ایجاد شده است. هدف ویکی‌پدیا آفرینش و انتشار جهانی یک دانشنامه با محتوای آزاد به همه زبان‌های زندهٔ جهان است.", - "wikiquote":"ویکی‌گفتاورد ، یکی از پروژه‌های خواهر ویکی‌پدیا است که از نرم‌افزار مدیاویکی استفاده نموده و جزو پروژه‌های مبتنی بر ویکی است که توسط بنیاد ویکی‌مدیا اداره می‌گردد. هدف پروژه ویکی‌گفتاورد فراهم آوردن امکان مشارکت افراد برای ایجاد مجموعه‌ای عظیم از نقل قول‌ها از افراد برجسته، کتاب‌ها، فیلم‌ها، ضرب‌المثل‌ها و غیره یا مواردی درباره آنها، در عین تلاش برای دقت در اعتبار منشا و منابع موارد تا حد امکان است.", + "wikiquote":"ویکی‌گفتاورد ، یکی از پروژه‌های خواهر ویکی‌پدیا است که از نرم‌افزار مدیاویکی استفاده نموده و جزو پروژه‌های مبتنی بر ویکی است که توسط بنیاد ویکی‌مدیا اداره می‌گردد. هدف پروژه ویکی‌گفتاورد فراهم آوردن امکان مشارکت افراد برای ایجاد مجموعه‌ای عظیم از نقل قول‌ها از افراد برجسته، کتاب‌ها، فیلم‌ها، ضرب‌المثل‌ها و غیره یا مواردی دربارهٔ آنها، در عین تلاش برای دقت در اعتبار منشأ و منابع موارد تا حد امکان است.", "wikisource":"ویکی‌نِبشته یک کتابخانهٔ دیجیتال آنلاین از محتوای آزاد متون اصلی در یک ویکی است که توسط بنیاد ویکی‌مدیا اداره می‌شود. ویکی‌نبشته نام کل پروژه و همچنین نام هر نمونه از آن پروژه به زبان‌های مختلف است. چندین ویکی‌نبشته در کنار هم پروژهٔ کلی ویکی‌نبشته را تشکیل می‌دهند. هدف این پروژه میزبانی تمامی اشکال متون آزاد در زبان‌های مختلف و ترجمه‌ها است. این پروژه در ابتدا به عنوان یک آرشیو برای ذخیرهٔ متون تاریخی مفید یا مهم طراحی شده بود، اما با گذر زمان به یک کتابخانه با محتوای عمومی تبدیل شد. این پروژه رسماً در ۲۴ نوامبر ۲۰۰۳ با نام پروژهٔ سورسبرگ آغاز به کار کرد که یک اقتباس و بازی با کلمات با پروژهٔ گوتنبرگ بود. نام ویکی‌نبشته بعدها در همان سال اتخاذ شد و یک دامنهٔ اینترنتی جداگانه دریافت کرد.", "wikispecies":"ویکی‌گونه یکی از پروژه‌های بنیاد ویکی‌مدیا است که برای راهنمایی در مورد گونه‌های زیستی به کار می‌رود و در یک گونه بالارده‌ها و زیررده‌ها را مشخص می‌کند.", "wikiversity":"ویکی‌دانشگاه یکی از پروژه‌های بنیاد ویکی‌مدیا است.", - "wikivoyage":"ویکی‌سفر یکی از پروژه‌های تازه‌تأسیس بنیاد ویکی‌مدیا است که اطلاعات اولیهٔ آن بر پایهٔ اطلاعات موجود در ویکی‌تراول درون‌ریزی شده‌است و در شروع کار با ۱۰ زبانِ فارسی، انگلیسی، هلندی، فرانسوی، آلمانی، ایتالیایی، پرتغالی، روسی، اسپانیایی و سوئدی پایه‌گذاری شده‌است.", + "wikivoyage":"ویکی‌سفر یکی از پروژه‌های تازه‌تأسیس بنیاد ویکی‌مدیا است که اطلاعات اولیهٔ آن بر پایهٔ اطلاعات موجود در ویکی‌تراول درون‌ریزی شده است و در شروع کار با ۱۰ زبانِ فارسی، انگلیسی، هلندی، فرانسوی، آلمانی، ایتالیایی، پرتغالی، روسی، اسپانیایی و سوئدی پایه‌گذاری شده است.", "wiktionary":"ویکی‌واژه ، یک فرهنگ لغت اینترنتی با محتوای آزاد برپایهٔ همکاری باز است که واژگان بسیاری از زبانهای جهان را دربردارد و معنا، ریشه‌شناسی و تلفظ (آوایِش) واژه‌ها گنجانده می‌شود. ویکی‌واژه بُن‌مایهٔ واژگانیِ دانشنامهٔ آزاد ویکی‌پدیا است.", "wolframalpha":"ولفرم آلفا یک موتور محاسباتی دانش است که توسط ولفرم ریسرچ ایجاد شده‌است. این موتور جستجو حاصل تلاش فیزیکدانی بنام استفان ولفرام و تیم تحقیقاتی او است. هستهٔ اصلی ولفرام‌آلفا نرم‌افزار محاسباتی متمتیکا است. برخلاف دیگر موتورهای جستجو که معمولاً گزیده‌ای از وب را در اختیار شما می‌گذارند، ولفرام‌آلفا، این اطلاعات را پردازش کرده و سپس در اختیار کاربر می‌گذارد. ولفرام آلفا قادر است به بسیاری از سؤالاتی که دیگر موتورهای جستجو قادر به جوابگویی به آن‌ها نیستند پاسخ دهد؛ برای نمونه سؤالی مثل: «ملکه الیزابت دوم در سال ۱۹۴۷ چند ساله بوده است؟» یا «پنجاه و چهارمین کشور کوچک از لحاظ سرانه تولید ناخالص ملی کدام کشور است؟» با این وجود نمی‌توان انتظار هر نوع محاسبه‌ای را از این وب‌گاه داشت.", "wttr.in":[ - "not found اوه و بآ تیعضو شرازگ", + "Des Moines, Iowa, United States اوه و بآ تیعضو شرازگ", "https://wttr.in" ], "yacy":"YaCy یک موتور جستجو توزیع شده رایگان می‌باشد که از شبکه peer-to-peer (P2P).استفاده می‌کند هستهٔ اصلی توسط زبان برنامه‌نویسی جاوا نوشته شده است که یک برنامه کامپیوتری در چند صد کامپیوتر توزیع شده است. ‍‍‍‍‍ تا تاریخ سپتامبر ۲۰۰۶به اصطلاح YaCy-peers نامیده شد، هر YaCy به طور مستقل در اینترنت می‌خزد، و صفحات وب را جستجو، تجزیه و تحلیل می‌کند نتایج جستجو در یک پایگاه داده مشترک ذخیره می‌شود؛ که این صفحات با سایر YaCy-peers با استفاده از اصول شبکه‌های P2P در اشتراک قرار می‌گیرند. این یک موتور جستجورایگان است که هر کس می‌تواند از آن برای ساخت یک پورتال جستجو استفاده کند؛ و کمک کند تا جستجو در اینترنت به صورت واضح صورت گیرد.", @@ -3615,7 +3608,7 @@ ], "wikidata":"Wikidata on Wikimedia Foundationin omistama yhteisesti muokattava Wikipediaa tukeva tietokanta. Saksan Wikimedia-yhdistyksen aloittaman hankkeen tarkoitus on toimia keskitettynä paikkana erilaisille tiedoille, esimerkiksi henkilöiden syntymäajoille. Palvelu avattiin virallisesti 30. lokakuuta 2012. Se on ensimmäinen Wikimedian uusi hanke vuoden 2006 jälkeen.", "wikinews":"Wikiuutiset on Wikimedia Foundationin hallinnoima vapaan sisällön uutislähde. Wikiuutiset soveltaa wikiperiaatetta uutistuotantoon.", - "wikipedia":"Wikipedia on voittoa tavoittelematon, yleishyödyllinen projekti, jonka tarkoituksena on luoda ilmainen avoin tietosanakirja. Wikipedian englanninkielinen versio perustettiin vuonna 2001 ja tietosanakirjaa julkaistiin vuonna 2024 yli 330 kielellä. Wikipedian sisällön luovat ja ylläpitävät pääasiassa vapaaehtoiset, jotka eivät saa siitä taloudellista korvausta. Vapaaehtoistyö on avoin kaikille.", + "wikipedia":"Wikipedia on voittoa tavoittelematon, yleishyödyllinen projekti, jonka tarkoituksena on luoda ilmainen avoin tietosanakirja Internetiin. Wikipedian englanninkielinen versio perustettiin vuonna 2001, ja tietosanakirjaa julkaistiin vuonna 2024 yli 330 kielellä. Wikipedian sisällön luovat ja ylläpitävät pääasiassa vapaaehtoiset, jotka eivät saa siitä taloudellista korvausta. Vapaaehtoistyö on avoin kaikille.", "wikiquote":"Wikisitaatit on Wikimedia Foundationin hallinnoima Wikipedian sisarhanke. Se käyttää samaa MediaWiki-alustaa kuin muutkin Wikimedia Foundationin hankkeet. Wikisitaattien tarkoituksena on yhteistoiminnallisesti koota kattava valikoima eri henkilöiden sitaatteja, puheita ja kirjoituksia sekä sananlaskuja ja anekdootteja. Ajatuksen Wikisitaateista esitti Daniel Alston ja Brion Vibber toteutti asian käytännössä.", "wikisource":"Wikiaineisto on Wikimedia Foundationin hallinnoima hanke, joka on tarkoitettu kaikenlaisille aiemmin julkaistuille teksteille, kuten romaaneille, kirjeille, puheille, historiallisille dokumenteille tai lakiteksteille. Edellytys on, että aineisto on tekijänoikeusvapaata joko siksi että sen tekijänoikeudet ovat rauenneet iän vuoksi tai koska se on julkaistu GNU Free Documentation Licensen alla.", "wikispecies":"Wikispecies on Wikimedia Foundationin ylläpitämä projekti, josta on tarkoitus kehittyä avoin ja vapaa eliölajien tietokanta. Se tulee kattamaan eläimet, kasvit, sienet, bakteerit, arkeonit, alkueliöt ja kaikki muut tunnetut elämänmuodot niin perusteellisesti kuin käyttäjät haluavat. Wikispeciesin motto on: \"Wikispecies on vapaa, koska elämä on yhteistä omaisuutta!\"", @@ -3624,7 +3617,7 @@ "wiktionary":"Wikisanakirja on Wikipedian sisarhanke, jonka tavoitteena on luoda wikipohjainen kaikkien kielten välinen vapaa sanakirja.", "wolframalpha":"Wolfram Alpha on Wolfram Researchin kehittelemä haku- ja vastauskone, joka julkaistiin 15.5.2009. Wolfram Alphan toiminta pohjautuu Wolfram Researchin kehittelemään Mathematica-laskentaohjelmaan tiedon etsimisessä ja käsittelyssä.", "wttr.in":[ - "Säätiedotus: not found", + "Säätiedotus: Des Moines, Iowa, United States", "https://wttr.in" ], "youtube":"Youtube on Googlen omistama Internetissä toimiva videopalvelu, jonka perustivat helmikuussa 2005 kolme PayPalin työntekijää: Chad Hurley, Steve Chen ja Jawed Karim. Käyttäjät voivat lisätä sivustolle omia videoitaan ja katsoa sekä kommentoida muiden käyttäjien videoita." @@ -3645,7 +3638,7 @@ "https://www.bing.com" ], "bing images":[ - "Pinakamahusay ang Larawan ng Bing na search engine ng larawan, na nagbibigay sa mga user ng kakayahang maghanap at i-explore ang pinaka may kaugnayan, mataas na kalidad na mga larawang iniayon sa iyong mga pangangailangan", + "Maghanap at mag-explore ng mga de-kalidad, libreng larawan at wallpaper sa Bing Images. Magbigay ng inspirasyon at pagbutihin", "https://www.bing.com/images" ], "bing news":[ @@ -3671,11 +3664,15 @@ "google play apps:fil", "ref" ], - "google scholar":[ - "Nagbibigay ang Google Scholar ng simpleng paraan ng malawakang paghahanap ng mga babasahing iskolar. Maghanap sa iba't ibang disiplina at source: mga artikulo, thesis, aklat, abstract, at opinyon ng hukuman.", - "https://scholar.google.com" - ], "imdb":"Ang Internet Movie Database (IMDb) at IMDB, ay isang online database ng impormasyon tungkol sa mga artista, pelikula, palatuntunan sa telebisyon at video games. Ang websayt ng IMDb ay nagsimula noong Setyembre 1993. Naging pagmamay-ari ito ng \"Amazon.com\" mula 1998.", + "mastodon hashtags":[ + "mastodon users:fil", + "ref" + ], + "mastodon users":[ + "Alamin pa tungkol sa Mastodon, ang lubhang kakaiba, libre at open-source na desentralisadong social media platform.", + "https://joinmastodon.org/" + ], "microsoft learn":[ "Matuto gamit ang mga interactive na aralin at teknikal na dokumentasyon, kumuha ng mga oras ng propesyonal na pag-unlad at mga certification, at kumonekta sa komunidad.", "https://learn.microsoft.com" @@ -3966,7 +3963,7 @@ "unsplash":"Unsplash est un site web dédié au partage de photos sous licence Unsplash. Il est basé à Montréal, la capitale économique du Québec.", "vimeo":"Vimeo est un site web communautaire destiné au partage et au visionnage de vidéos réalisées par les utilisateurs. Ce site a été lancé en novembre 2004 en tant que division de Connected Ventures, qui appartenait également à CollegeHumor, pour ensuite devenir une filiale du groupe américain IAC (InterActiveCorp) en août 2006. Depuis mai 2021, Vimeo est une compagnie indépendante.", "voidlinux":"Void Linux est une distribution GNU/Linux indépendante. Le système est construit entièrement à partir de zéro. Les BLOBs binaires de Linux sont exclus bien qu'il existe un dépôt non-free pour installer du code propriétaire.", - "wikibooks":"Wikibooks ou Wikilivres est un guide pratique multilingue et multidisciplinaire en ligne, géré en wiki grâce au moteur MediaWiki.", + "wikibooks":"Wikibooks ou Wikilivres est un portail web multilingue, collaboratif et gratuit de guides pédagogiques, pratiques et techniques. Il est géré en wiki grâce au moteur MediaWiki.", "wikicommons.audio":[ "wikicommons.images:fr", "ref" @@ -3975,7 +3972,7 @@ "wikicommons.images:fr", "ref" ], - "wikicommons.images":"Wikimedia Commons est une médiathèque en ligne d'images, de sons, d'autres médias audiovisuels et de données JSON sous licence libre. Elle centralise des médias libres, tels que photographies, dessins, schémas, partitions, cartes géographiques, textes écrits et parlés, animations et vidéos, objets 3D qui ont une utilité pour au moins un des projets de Wikimedia. En novembre 2023, elle passe la barre des 100 millions de fichiers hébergés.", + "wikicommons.images":"Wikimedia Commons est une base de données multimédia. Elle héberge des images, des sons, d'autres médias audiovisuels et des données JSON sous licence libre. Elle centralise des médias libres, tels que photographies, dessins, schémas, partitions, cartes géographiques, textes écrits et parlés, animations et vidéos, objets 3D qui ont une utilité pour les projets du mouvement Wikimédia. En novembre 2023, elle passe la barre des 100 millions de fichiers hébergés.", "wikicommons.videos":[ "wikicommons.images:fr", "ref" @@ -3987,18 +3984,15 @@ ], "wikinews":"Wikinews est un site d'actualité multilingue et participatif, géré en wiki grâce au moteur MediaWiki.", "wikipedia":"Wikipédia est une encyclopédie en ligne collaborative et multilingue créée par Jimmy Wales et Larry Sanger le 15 janvier 2001. Il s'agit d'une œuvre libre, c'est-à-dire que chacun est libre de l'amender et de la rediffuser. Gérée en wiki dans le site web wikipedia.org grâce au logiciel MediaWiki, elle permet à tous les internautes d'écrire et de modifier des articles, ce qui lui vaut d'être qualifiée d'« encyclopédie participative ». En quelques années, elle est devenue la plus importante encyclopédie disponible dans le monde et la plus consultée.", - "wikiquote":"Wikiquote est un site web multilingue dont l'objectif est de créer et d'améliorer des recueils de citations. Il est géré en wiki grâce au moteur MediaWiki.", + "wikiquote":"Wikiquote est un site web multilingue, collaboratif, libre et gratuit de recueils de citations. Il est géré en wiki grâce au moteur MediaWiki.", "wikisource":"Wikisource est une bibliothèque numérique de textes du domaine public, gérée en wiki grâce au moteur MediaWiki. Comme Wikipédia, elle est hébergée par la fondation Wikimédia et son contenu est librement améliorable.", "wikispecies":"Wikispecies est un répertoire nomenclatural en ligne destiné à recenser les espèces du vivant : eucaryotes, archéennes, bactériennes, voire virales. Il est géré en wiki grâce au moteur MediaWiki.", - "wikiversity":"Wikiversité ou Wikiversity est un site web multilingue, collaboratif et gratuit de ressources éducatives libres. Il est géré en wiki grâce au moteur MediaWiki.", - "wikivoyage":[ - "site web de guides touristiques", - "wikidata" - ], + "wikiversity":"Wikiversité ou Wikiversity est un portail web multilingue, collaboratif et gratuit de ressources éducatives libres. Il est géré en wiki grâce au moteur MediaWiki.", + "wikivoyage":"Wikivoyage est un portail web multilingue, collaboratif et gratuit de guides touristiques. Il est géré en wiki grâce au moteur MediaWiki.", "wiktionary":"Le Wiktionnaire est un projet lexicographique de la Wikimedia Foundation dont l’objectif est de définir tous les mots de toutes les langues, dans toutes les langues. En 2024, il existe plus de 170 langues de rédaction. Au sens strict, le terme « Wiktionnaire » désigne souvent la version en français de ce projet, Wiktionary étant le nom officiel en anglais. Il est géré en wiki dans le site web wiktionary.org et son contenu est librement réutilisable.", "wolframalpha":"WolframAlpha est un moteur de réponse développé par Wolfram Research. Il répond aux questions factuelles en calculant les réponses à partir de données externes.", "wttr.in":[ - "Prévisions météo pour: not found", + "Prévisions météo pour: Des Moines, Iowa, United States", "https://wttr.in" ], "yacy":"YaCy est un moteur de recherche libre fonctionnant selon le principe d'un réseau pair à pair. Ce logiciel est développé en Java et était installé, fin 2006, sur des centaines d'ordinateurs appelés YaCy-peers ou postes-YaCy. YaCy est par exemple utilisé par l'Université Johannes Gutenberg de Mayence.", @@ -4024,7 +4018,7 @@ "https://www.bing.com" ], "bing images":[ - "Is é Íomhá Bing an t-inneall cuardaigh íomhá is fearr, a chuireann ar cumas d'úsáideoirí na híomhánna is ábhartha agus den chaighdeán is airde atá saincheaptha le do riachtanais féin a chuardach agus a thaiscéaladh", + "Cuardaigh agus taiscéal grianghraif agus cúlbhrait atá ardchaighdeán agus saor in aisce ar íomhánna Bing. Spreag agus ardaigh d’fhísigh!", "https://www.bing.com/images" ], "bing news":[ @@ -4131,6 +4125,22 @@ "A busca intelixente de Bing fai que sexa máis rápido e sinxelo atopar o que estás a buscar e concédeche premios.", "https://www.bing.com/videos" ], + "brave":[ + "Busca na Web. Privadamente. Resultados verdadeiramente útiles, respostas impulsadas por IA, e máis. Todo dende un índice independente. Sen perfis, sen sesgo, sen Big Tech.", + "https://search.brave.com/" + ], + "brave.images":[ + "brave:gl", + "ref" + ], + "brave.news":[ + "brave:gl", + "ref" + ], + "brave.videos":[ + "brave:gl", + "ref" + ], "currency":"DuckDuckGo é un buscador centrado na protección da privacidade dos usuarios. Foi fundada por Gabriel Weinberg e lanzado o 29 de febreiro de 2008 en Valley, Pensilvania. A empresa ten a súa sede en Paoli, Pensilvania, Estados Unidos e contaba con 180 empregados en 2022. O nome vén dun xogo infantil chamado Duck, duck, goose.", "dailymotion":"Dailymotion é un servidor de vídeos en Internet, con sede en París, Francia. O seu dominio foi rexistrado un mes despois que o de YouTube.", "ddg definitions":[ @@ -4300,7 +4310,7 @@ "wikidata" ], "currency":"דקדקגו הוא מנוע חיפוש שמדגיש את הגנת פרטיות המשתמש ונמנע מיצירת \"בועת פילטר\" שמנחשת את אופי החיפושים הרלוונטיים למשתמש. דקדקגו נבדל ממנועי חיפוש אחרים בכך שהוא לא מתחקה אחר תוצאות המשתמשים, כמו גם, מאחזר את אותן תוצאות לכל המשתמשים שחיפשו מושג זהה ואינו נותן תוקף לשיקולים זרים בתוצאות החיפוש. יתרה מכך, דקדקגו מעדיף לאחזר מידע ממעט מקורות מידע איכותיים מאשר מהרבה מקורות מידע שאינם איכותיים. תוצאות החיפוש של דקדקגו הן קומפילציה של \"בערך 50\" מקורות מידע (duck.co). בין היתר, הוא מאחזר מידע מאתרי \"מיקור המונים\" כמו ויקיפדיה, ממנועי חיפוש אחרים כמו: Yandex, Yahoo!, Bing ו-Yummly ומזחלן הרשת שלו עצמו, דקדקבוט.", - "dailymotion":"Dailymotion הוא פלטפורמה אינטרנטית לשיתוף וידאו בבעלות חברת Vivendi. האתר נוסד ב-2005 ובדומה לפלטפורמות דומות כיוטיוב ו-vimeo, מאפשר לגולשיו להעלות, לשתף ולצפות בסרטוני וידאו.", + "dailymotion":"Dailymotion הוא פלטפורמה אינטרנטית לשיתוף וידאו בבעלות חברת \"קאנאל פלוס\". עד שנת 2024, החברה הייתה בבעלות תאגיד \"ויוונדי\". האתר נוסד ב-2005 ובדומה לפלטפורמות דומות כ\"יוטיוב\" ו-\"vimeo\", מאפשר לגולשיו להעלות, לשתף ולצפות בסרטוני וידאו.", "ddg definitions":[ "currency:he", "ref" @@ -4349,7 +4359,7 @@ "ref" ], "google scholar":"גוגל סְקוֹלַר הוא מנוע חיפוש מקוון מבית היוצר של גוגל, הממפתח את הטקסט המלא של מאמרים, דוחות טכניים, דו\"חות לפני הדפסה, תזות, ספרים, ומסמכים אחרים ממגוון רחב של הוצאות ובמקצועות שונים.", - "google videos":"גוגל וידאו הוא מנוע חיפוש מבית גוגל, לחיפוש סרטון וידאו באינטרנט. המנוע משולב עם מנוע החיפוש העיקרי של החברה. השירות הושק ב-25 בינואר 2005 ובתחילתו היה ניתן להעלות אליו קטעי וידאו.", + "google videos":"גוגל וידאו הוא מנוע חיפוש מבית גוגל, לחיפוש סרטוני וידאו באינטרנט. המנוע משולב עם מנוע החיפוש העיקרי של החברה. השירות הושק ב-25 בינואר 2005, במקור כשיתוף וידאו באינטרנט. לאחר שגוגל רכשה ב-9 באוקטובר 2006 את המתחרה YouTube, היא הפסיקה לאפשר העלאת וידאו לאתר ובאפריל 2011 הכריזה על ביטול השירות עד שהורד סופית ב-20 באוגוסט 2012. אחר כך הוסב הדומיין שלו למנוע חיפוש.", "hoogle":"Haskell (הסקל) היא שפת תכנות פונקציונלית טהורה, ובעלת טיפוסיות חזקה. היא אחת משפות התכנות הפונקציונליות הפופולריות ביותר, והשפה הפונקציונלית העצלה בה מרבית המחקר בתחום מדעי המחשב מתבצע[דרוש מקור]. השפה קרויה על שם הלוגיקן הסקל קורי.", "huggingface":"Hugging Face היא חברה אמריקאית המפתחת כלים לבניית יישומים באמצעות למידת מכונה. בין מוצרי הדגל של החברה בולטת ספריית הטרנספורמרים שלה שנבנתה עבור יישומי עיבוד שפה טבעית. בנוסף, לחברה פלטפורמה בשם Hugging Face Hub, המאפשרת למשתמשים לשתף מודלים ומערכי נתונים של למידת מכונה בקוד פתוח. על אף שמדובר בחברה פרטית, נכון ל-2023 אופי החברה דוגל בשיתופיות והנגשת מודלי שפה גדולים, הנחשבת לנחלתם של תאגידים טכנולוגיים, לכלל קהילת המפתחים.", "huggingface datasets":[ @@ -4390,7 +4400,7 @@ ], "soundcloud":"סאונדקלאוד היא פלטפורמה מקוונת להפצת אודיו. לאתר ישנו גם בלוג, ערוצי שידור וקבוצות. החברה הוקמה בשנת 2007 ואתר האינטרנט שלה הוקם ב-7 באוקטובר 2008. מנהלי החברה הם אלכסנדר ליונג ואריק וואלפורס. באתר מועלים שירים, הרצאות, פודקאסטים, ושידורים חיים.", "steam":"סטִים היא חנות דיגיטלית ורשת חברתית מקוונת אשר פותחה על ידי Valve Corporation. התכנה הושקה ב-12 בספטמבר 2003, ומטרתה המרכזית היא לאפשר לשחקנים לרכוש ולהוריד משחקים באופן דיגיטלי. זאת ועוד, התכנה מציעה לרוכשים, בין היתר, עדכונים אוטומטיים ואפשרות לשמירת התקדמות בענן.", - "vimeo":"Vimeo הוא אתר אינטרנט לשיתוף וידאו, ומשתמשיו יכולים להעלות, לשתף ולצפות בתכנים בו. שרתי האתר נמצאים בארצות הברית.", + "vimeo":"Vimeo, Inc.‎ היא חברה אמריקאית המספקת שירותי שיתוף וידאו באינטרנט, אירוח ועריכה של וידאו באיכות הפרדה גבוהה (HD) על פני מגוון מכשירים. המודל העסקי של Vimeo מבוסס על תוכנה כשירות (SaaS) שהכנסות מגיעות מתוכניות מנויים לעסקים וליוצרי תוכן. להם היא מספקת כלים ליצירת וידאו, עריכה והפצה, פתרונות תוכנה ארגוניים, כמו גם את האמצעים לאנשי מקצוע בווידאו ליצור קשר עם לקוחות ואנשי מקצוע אחרים.", "wikibooks":"ויקיספר הוא מיזם רב-לשוני של קרן ויקימדיה ליצירת ספרי לימוד ומדריכים חופשיים, שיתופיים ומהימנים שכל אחד יכול לתרום ליצירתם ופיתוחם. ויקיספר העברי החל דרכו ב-30 ביולי 2004 ומאז מתווספים אליו ערכים שונים על ידי הגולשים.", "wikicommons.audio":[ "wikicommons.images:he", @@ -4416,7 +4426,7 @@ "wiktionary":"ויקימילון הוא מיזם מקוון רב־לשוני ובין־לאומי המנוהל על ידי קרן ויקימדיה. מטרתו היא יצירת מילון חופשי, שיתופי, מהימן ופתוח אשר יכיל את כל המילים מכל שפות העולם. כיום, הוא זמין בכ־183 שפות ומכיל מילים מכ־3,800 שפות שונות. המהדורה הראשונה של המילון החלה את דרכה ב-12 בדצמבר 2002, ואילו המהדורה העברית הושקה ב-29 ביוני 2004.", "wolframalpha":"וולפרַם אַלפַא הוא מנוע חיפוש חישובי, שפותח על ידי מעבדות וולפרם והושק במאי 2009. ייחודו הוא בביצוע שאילתות בשפה טבעית, בשילוב עם חישובים והחזיית מידע (ויזואליזציה) נרחבת.", "wttr.in":[ - "not found :ריוואה גזמ תיזחת", + "Des Moines, Iowa, United States :ריוואה גזמ תיזחת", "https://wttr.in" ], "youtube":"יוּטְיוּבּ הוא אתר אינטרנט לאחסון ושיתוף סרטוני וידאו שהוקם על ידי חברה אמריקאית באותו שם. יוטיוב הוקמה בפברואר 2005, על ידי צ'אד הארלי, סטיב צ'ן וג'אווד כרים, שלושתם עובדים לשעבר של חברת PayPal. בנובמבר 2006, רכשה גוגל את החברה תמורת 1.65 מיליארד דולר, ויוטיוב הפכה לחברת בת של גוגל.", @@ -4660,6 +4670,14 @@ "Ingyenes és nyílt forráskódú gépi fordító API. Ingyenesen letölthető, offline működő és könnyen telepíthető. Futtassa a saját API-kiszolgálóját néhány perc alatt.Ingyenes és nyílt forráskódú gépi fordító API. Ingyenesen letölthető, offline működő és könnyen telepíthető. Futtassa a saját API-kiszolgálóját néhány perc alatt.", "https://libretranslate.com" ], + "mastodon hashtags":[ + "mastodon users:hu", + "ref" + ], + "mastodon users":[ + "Tudj meg többet a Mastodonról, a radikálisan eltérő, szabad és nyílt forráskódú, decentralizált közösségimédia-platformról.", + "https://joinmastodon.org/" + ], "metacpan":"A CPAN a Comprehensive Perl Archive Network rövidítése. Több mint 100 000 Perl-ben írt programmodult és ezek dokumentációját tartalmazza. Ezek megtalálhatók a CPAN hivatalos weboldalán, továbbá világszerte több mint 200 helyen vannak tükrözések. A CPAN kifejezés vagy magára az archívum hálózatra utal, vagy arra a Perl programra, amely interfészként viselkedik a hálózathoz, valamint automatikus szoftver telepítő is egyben. A CPAN-on található legtöbb program ingyenes és nyílt forrású.", "microsoft learn":[ "Interaktív leckékkel és műszaki dokumentációval tanulhat, szakmai fejlesztési órákat és minősítéseket szerezhet, és kapcsolatba léphet a közösséggel.", @@ -4712,7 +4730,7 @@ "wikivoyage":"A Wikivoyage a Wikimédia Alapítvány ingyenes internetes útikönyve. A neve a Wiki és a francia voyage szóból áll. Az új wikiprojekt 2013. január 15-én, a Wikipédia alapításának 12. évfordulója évében, napra a születésnapján startolt. 24 nyelven érhető el: angolul, németül, hollandul, oroszul, svédül, olaszul, portugálul, franciául, spanyolul, kínaiul, finnül, görögül, héberül, perzsául, lengyelül, románul, ukránul, vietnámiul, törökül, japánul, hindiül, pastuul, bengáliul és eszperantóul.", "wiktionary":"A Wikiszótár a Wikipédia testvéroldala, melynek célja szabad szótár készítése minden nyelvre. Ötletgazdája Daniel Alston. 2002. december 12-én indult. A Wikiszótár magyar változata, a magyar Wikiszótár 2004. május 2-án indult.", "wttr.in":[ - "Időjárás előrejelzés: not found", + "Időjárás előrejelzés: Des Moines, Iowa, United States", "https://wttr.in" ], "youtube":"A YouTube nyilvános videómegosztó webhely, ahol a felhasználók videókat tölthetnek fel és nézhetnek meg. Székhelye a kaliforniai San Brunóban található. A Time magazin a 2006-os év találmányának választotta a honlapot." @@ -4918,7 +4936,7 @@ "npm":"npm adalah sebuah manajer paket untuk bahasa pemrograman JavaScript yang menjadi manajer baku untuk lingkungan runtime Node.js. npm terdiri dari klien baris perintah yang disebut npm, dan sebuah pangkalan data daring yang berisi paket publik dan paket pribadi berbayar, yang disebut npm registry. Registry dapat diakses melalui klien, dan ketersediaan paket dapat dicari melalui situs web npm. Manajer paket dan registry dikelola oleh npm, Inc.", "openlibrary":"Open Library adalah sebuah proyek daring yang dimaksudkan untuk membuat \"satu halaman web untuk setiap buku yang pernah diterbitkan\". Digagas oleh Aaron Swartz, Brewster Kahle, Alexis Rossi, Anand Chitipothu, dan Rebecca Malamud, merupakan proyek dari sebuah organisasi nirlaba, Internet Archive yang sebagian didanai oleh hibah dari Perpustakaan Negara Bagian California dan Kahle/Austin Foundation. Open Library menyediakan salinan digital online dalam berbagai format, yang berasal dari citra atau gambar pada banyak domain publik, baik buku yang masih dicetak maupun buku yang sudah tidak dicetak lagi.", "openstreetmap":"OpenStreetMap (OSM) adalah proyek kolaborasi pembuatan peta dunia yang bebas disunting. Dua penggerak utama di balik perintisan dan pertumbuhan OSM adalah terbatasnya penggunaan atau ketersediaan informasi peta di sebagian besar wilayah dunia dan maraknya perangkat navigasi satelit portabel yang terjangkau.", - "pinterest":"Pst adalah virtual pinboard di mana Anda mengunggah foto atau gambar yang dimasukkan ke dalam kategori-kategori yang bisa di customize namanya. Semisal kategori 'food and drink' di mana berisi foto dan gambar makanan dan minuman. Anda juga bisa mengikuti akun lain dan re-pin pin milik akun lain tanpa harus mengikuti pemilik pinboard. Nah bila Anda belum memiliki akun Pinterest, Anda bisa mengikuti tutorial singkat seputar membuat akun Pinterest dan menggunakannya di bawah ini.", + "pinterest":"Pinterest adalah virtual pinboard di mana Anda mengunggah foto atau gambar yang dimasukkan ke dalam kategori-kategori yang bisa di customize namanya. Semisal kategori 'food and drink' di mana berisi foto dan gambar makanan dan minuman. Anda juga bisa mengikuti akun lain dan re-pin pin milik akun lain tanpa harus mengikuti pemilik pinboard. Nah bila Anda belum memiliki akun Pinterest, Anda bisa mengikuti tutorial singkat seputar membuat akun Pinterest dan menggunakannya di bawah ini.", "piratebay":"The Pirate Bay (TPB) adalah pengindeks konten digital media hiburan dan perangkat lunak berbasis BitTorrent. Didirikan pada tahun 2003 oleh wadah pemikir Swedia Piratbyrån, TPB ditujukan bagi setiap pengguna yang hendak mencari, mengunduh, dan menyumbangkan pranala ke berkas torrent, serta memfasilitasi berbagi berkas secara peer-to-peer di antara pengguna protokol BitTorrent.", "pypi":"Python Package Index, disingkat PyPI dan juga dikenal sebagai Cheese Shop, adalah repositori perangkat lunak pihak ketiga resmi untuk Python. PyPI dapat disamakan dengan CPAN, repositori untuk Perl. Beberapa manajer paket, termasuk pip, menggunakan PyPI sebagai sumber standar untuk paket dan dependensinya. Lebih dari 113.000 paket Python yang dapat diakses melalui PyPI.", "reddit":"Reddit adalah sebuah situs web agregasi berita sosial, pemeringkatan konten, dan diskusi asal Amerika Serikat. Pengguna terdaftar mengirimkan konten ke situs tersebut seperti tautan, posting teks, gambar, dan video, yang kemudian di \"upvote\" atau \"downvote\" oleh setiap anggota lainnya. Kiriman tersebut kemudian diatur berdasarkan subjek ke dalam sebuah papan grup yang dibuat oleh pengguna yang disebut \"communities\" atau \"subreddits\". Kiriman dengan lebih banyak upvote muncul di bagian atas subreddit mereka dan, jika mereka masih mendapatkan lebih banyak upvote lagi secara signifikan, maka pada akhirnya kiriman tersebut akan muncul di halaman utama depan situs. Administrator Reddit memoderasi subreddits. Moderasi juga dilakukan oleh moderator khusus dari setiap komunitas, dan bukan karyawan Reddit. Situs ini dioperasikan oleh Reddit Inc., yang berbasis di San Francisco.", @@ -5082,7 +5100,7 @@ "ref" ], "google scholar":"Google Scholar è un motore di ricerca accessibile liberamente che tramite parole chiave specifiche consente di individuare testi della letteratura accademica come articoli sottoposti a revisione paritaria, tesi di laurea e dottorato, libri, prestampe, sommari, recensioni e rapporti tecnici di tutti i settori della ricerca scientifica e tecnologica. Consente di reperire articoli da una vasta gamma di case editrici che si rivolgono al mondo dello studio e della ricerca da associazioni scientifiche e professionali, depositi di prestampe e università, oltre che nella galassia di articoli scientifici e culturali distribuiti sul Web.", - "google videos":"Google Video è stato un servizio gratuito di Google. che permetteva a chiunque di caricare filmati sui server web di Google e renderli disponibili a tutti, Dal 29 aprile 2011 Google Video non permette più di caricare video, Analoghi servizi concorrenti sono: iFilm, MetaCafe, Veoh, Outloud.tv, IFC Medialab, webmultimediale.it e FBC V-Files. Google Video è stato chiuso dopo l'acquisizione di YouTube da parte di Google, il quale ha reso inutile il servizio inizialmente offerto da Google.", + "google videos":"Google Video è stato un servizio gratuito di Google, che permetteva a chiunque di caricare filmati sui server web di Google e renderli disponibili a tutti, Dal 29 aprile 2011 Google Video non permette più di caricare video, Analoghi servizi concorrenti sono: iFilm, MetaCafe, Veoh, Outloud.tv, IFC Medialab, webmultimediale.it e FBC V-Files. Google Video è stato chiuso dopo l'acquisizione di YouTube da parte di Google, il quale ha reso inutile il servizio inizialmente offerto da Google.", "hackernews":[ "aggregatore di news", "wikidata" @@ -5339,7 +5357,7 @@ "goodreads":"Goodreadsは書籍情報や注釈、批評を閲覧できるウェブサイト及び同サイトを運営する企業である。アカウントを作成することで個人用ページに図書目録や読書リストを、公開ページとして推薦図書や議論のグループを作成することができる。 2007年12月に、65万人以上の利用者と1000万冊以上の書籍情報が登録され、2012年7月には1000万人の利用者と月間2000万件の訪問履歴、従業員30名が発表された。2013年7月23日には利用者登録が11ヶ月近くで2000万人に倍増したことがサイトにて発表された。本社はサンフランシスコにある。", "google":"Google 検索 またはGoogle ウェブ検索 はGoogleが提供する検索エンジンで、World Wide Web上で最も多く使われている検索エンジンである。Googleは様々なサービスを通して毎日数億件の検索クエリを受け付けている。Google 画像検索などとは異なり、Google検索はウェブページ内のテキストデータを探し出すことを主な目的としている。1997年、ラリー・ペイジとセルゲイ・ブリンが開発したのが始まりである。", "google images":"Google 画像検索 は、Webにある画像を検索するためにGoogleが提供している検索サービスである。2001年にサービスが開始された。切っ掛けはジェニファー・ロペスが着用した緑のヴェルサーチドレスの写真が見たいという需要に通常のGoogle検索では応え切れなかったことによる。2011年に逆画像検索が追加された。", - "google news":"Google ニュース は、Googleが提供するニュースアグリゲーター。Googleのページランクに関連して、Googleの主任研究者である Krishna Bharat が2001年に開発したストーリーランクをベースとして始まった。人間はアグリゲーションのアルゴリズムを調節するだけで、掲載する記事の選択は全て自動的に行われる。2006年1月、Google News ベータ版が登場した。", + "google news":"Google ニュース は、Google が提供するニュースアグリゲーター。Google のページランクに関連して、Googleの主任研究者である Krishna Bharat が2001年に開発したストーリーランクをベースとして始まった。人間はアグリゲーションのアルゴリズムを調節するだけで、掲載する記事は全て自動的に選択される。2006年1月に Google News ベータ版が登場した。", "google play apps":"Google Play は、Googleによって提供される、主にAndroid及びChromeOS(2016年4月以降)向けデジタルコンテンツ(アプリケーション・映画・音楽・書籍など)の配信サービス。2012年3月6日にGoogleは「Android Market」を「Google Play」に改名し、「Google Play ブックス」「Google Play Music」といったサービスも合わせて誕生した。", "google play movies":[ "google play apps:ja", @@ -5475,7 +5493,7 @@ "https://www.bing.com/videos" ], "bitbucket":"빗버킷(Bitbucket)은 아틀라시안 소유의 웹 기반 버전 관리 저장소 호스팅 서비스로서, 깃(2011년 10월 이후) 버전 관리 시스템을 사용하는 소스 코드 및 개발 프로젝트를 대상으로 한다. 빗버킷은 상용 플랜과 무료 계정을 동시에 제공한다. 2010년 9월 기준으로 무료 계정의 경우 무제한 수의 개인 저장소(무료 계정의 경우 최대 5명의 사용자 보유 가능)를 제공한다. 빗버킷은 지라, 힙챗, 컨플루언스, 밤부 등의 기타 아틀라시안 소프트웨어와 연동된다.", - "brave":"브레이브(Brave)는 Brave Software, Inc.에서 개발하는 크로미엄 웹 브라우저에 기반한 자유-오픈 소스 웹 브라우저이다. 이 브라우저는 웹사이트 트래커(website tracker)와 유튜브 광고를 포함한 광고를 차단한다. 이로인해 유튜브 프리미엄 없이도 광고 없이 유튜브를 볼 수 있다. 이 회사는 이 브라우저의 미래 버전에 웹 서핑에 돈을 지불(pay to surf)하는 비즈니스 모델을 적용하는 것을 제안하였다.", + "brave":"브레이브(Brave)는 Brave Software, Inc.에서 개발하는 크로미엄 웹 브라우저에 기반한 자유-오픈 소스 웹 브라우저이다. 이 브라우저는 웹사이트 트래커(website tracker)와 광고를 차단한다. 이 회사는 이 브라우저의 미래 버전에 웹 서핑에 돈을 지불(pay to surf)하는 비즈니스 모델을 적용하는 것을 제안하였다.", "brave.images":[ "brave:ko", "ref" @@ -5620,6 +5638,15 @@ "semantic scholar":"시맨틱 스칼라(Semantic Scholar, S2)는 과학 문헌을 위한 인공지능 기반의 연구 도구이다. 2015년 11월 2일 앨런 AI 연구소에서 개발, 처음 공개되었다. 시맨틱 스칼라는 발전된 자연어 처리을 이용해 학술 문헌의 요약문을 제공한다. 시맨틱 스칼라 팀은 자연어 처리, 기계 학습, 인간-컴퓨터 상호 작용, 정보 검색에서 AI의 활용 부문을 집중적으로 연구하고 있다.", "soundcloud":"사운드클라우드(영어: SoundCloud)는 스웨덴의 스톡홀름에서 구상되고 독일 베를린에 본사를 둔 글로벌 온라인 음악 유통 플랫폼이다. 플리커, 유튜브, 비메오가 이미지, 영상 온라인 플랫폼을 대표한다면, 음악에는 사운드클라우드가 이 역할을 하고 있다고 평가된다. 아마추어의 작업물이 대다수이지만, 프로 뮤지션들이 무료 공개곡이나 신곡의 프리뷰를 올리기도 한다. 드레이크, 찬스 더 래퍼 등 다수의 아티스트들이 작업물을 공유하고 있다.", "stackoverflow":"스택 익스체인지(Stack Exchange)는 다양한 분야의 주제에 대한 질문 및 답변(Q&A) 웹 사이트 네트워크로, 각 사이트는 특정 주제를 다루며, 질문, 답변 및 사용자는 평판 수상 프로세스의 대상이 된다. 평판 시스템을 사용하면 사이트가 자체 조정될 수 있다. 2023년 3월 현재 네트워크에서 가장 활발하게 조회되는 3개 사이트는 스택 오버플로 (웹사이트)(컴퓨터 프로그래밍에 중점을 두고 있음), 유닉스 앤드 리눅스(Unix & Linux), 매스매틱스이다.", + "startpage":"스타트페이지닷컴(Startpage.com) 또는 스타트페이지(Startpage)는 네덜란드의 검색 엔진 회사로, 개인정보 보호를 주요 특징으로 내세운다. 이 웹사이트는 사용자가 빙 검색 및 구글 검색 결과를 이용할 수 있도록 하며, 개인정보나 검색 데이터를 저장하지 않고 모든 추적기를 제거하여 사용자의 개인정보를 보호한다고 광고한다. 스타트페이지닷컴에는 또한 사용자가 프록시를 통해 검색 결과를 열어 익명성을 강화할 수 있는 '익명 보기' 브라우징 기능이 포함되어 있다.", + "startpage images":[ + "startpage:ko", + "ref" + ], + "startpage news":[ + "startpage:ko", + "ref" + ], "steam":"스팀(영어: Steam)은 밸브 코퍼레이션에서 개발한 디지털 관리 멀티플레이어 플랫폼이다. 처음의 스팀 서비스는 2003년 9월 12일 시작되어 현재에도 서비스 되고 있으며, 일인칭 슈팅 게임부터 롤플레잉 게임, 레이싱 게임 그리고 독립 게임까지 다양한 게임을 디지털로 관리하며 배급한다. 테이크투 인터랙티브, 락스타 게임즈, 에이도스 인터랙티브, 인트로버전 소프트웨어, 스트레티지 퍼스트, 팝캡 게임즈, 캡콤, 이드 소프트웨어, THQ, 일렉트로닉 아츠, 유비소프트, 2K 게임즈, 워너 브라더스, 액티비전, 에픽 게임즈 등이 스팀에서 게임을 판매하고 있다.", "superuser":[ "stackoverflow:ko", @@ -5654,7 +5681,7 @@ "wiktionary":"위키낱말사전(영어: Wiktionary)은 위키백과의 자매 프로젝트로, 공개된 위키 형식으로 다언어 사전을 만드는 것을 목표로 한다. 최종 목표는 \"모든 언어의 모든 낱말을 정의하는 것\"이다.", "wolframalpha":"울프럼 알파(Wolfram Alpha)는 계산용 프로그램인 매스매티카의 개발자인 물리학자 스티븐 울프럼이 만든 검색엔진으로서 슈퍼컴퓨터를 통한 인공지능을 통해 웹 상의 지식을 재구성하여 사용자에게 제공하며 간단한 연산을 직접 수행하고 그 그래픽 결과도 시뮬레이팅한다.", "wttr.in":[ - "일기 예보: not found", + "일기 예보: Des Moines, Iowa, United States", "https://wttr.in" ], "yacy":"YaCy(\"야시\"로 발음)는 마이클 크리스틴(Michael Christen)이 2003년에 만든 P2P 네트워크 원칙을 기반으로 구축된 자유 분산 검색 엔진이다. 엔진은 자바로 작성되었으며 다음과 같이 수백 대의 컴퓨터에 배포된다. 2006년 9월 소위 YaCy-peers. 각 YaCy-peer는 인터넷을 통해 독립적으로 크롤링하고, 발견된 웹 페이지를 분석 및 색인화하며, P2P 원칙을 사용하여 다른 YaCy-Peer와 공유되는 공통 데이터베이스(소위 색인)에 색인 결과를 저장한다. 이는 모든 사람이 인트라넷용 검색 포털을 구축하고 공용 인터넷 검색을 돕는 데 사용할 수 있는 검색 엔진이다.", @@ -5761,6 +5788,14 @@ "imdb":"The Internet Movie Database – nuolat atnaujinama interneto duomenų bazė apie aktorius, filmus, televizijos laidas, videožaidimus ir panašius dalykus. Svetainę valdo IMDb.com, Inc.", "library genesis":"„Library Genesis“ arba „LibGen“ – rinkmenų dalinimosi svetainė, kurioje talpinami moksliniai straipsniai, moksliniai veikalai ir kitos knygos.", "library of congress":"Kongreso biblioteka - (neoficiali) nacionalinė biblioteka JAV. Užima daug pastatų Washington D. C.. Viena reikšmingiausių pasaulio bibliotekų.", + "mastodon hashtags":[ + "mastodon users:lt", + "ref" + ], + "mastodon users":[ + "Sužinokite daugiau apie „Mastodon“ – visiškai kitokią, nemokamą ir atvirojo kodo decentralizuotą socialinės medijos platformą.", + "https://joinmastodon.org/" + ], "microsoft learn":[ "Mokykitės interaktyviomis pamokomis ir technine dokumentacija, gaukite profesinio tobulėjimo valandų ir sertifikatų bei bendraukite su bendruomene.", "https://learn.microsoft.com" @@ -5803,7 +5838,7 @@ "wikivoyage":"Vikikelionės – internetinis projektas, kuriamas vikitechnologija bei pagrįstas MediaWiki programine įranga. Vikikelionės nuo 2013 m. sausio 15 d. yra oficialus Vikimedijos projektas.", "wiktionary":"Vikižodynas – universalaus internetinio žodyno kūrimo projektas, Vikipedijai bei kitiems Vikimedijos projektams giminingas projektas, besiremiantis mediawiki programine įranga ir yra laisvai prieinamas internete.", "wttr.in":[ - "Orų prognozė: not found", + "Orų prognozė: Des Moines, Iowa, United States", "https://wttr.in" ], "youtube":"„YouTube“ – „Google“ bendrovės socialinis tinklas. Jame daugiausia peržiūrų sulaukia muzikiniai vaizdo klipai, pramoginiai ir mokomieji vaizdo įrašai, įvairūs vlogai, tinklalaidės, neilgi vaizdo įrašai, televizinis turinys ir kt." @@ -5887,10 +5922,6 @@ "google play apps:lv", "ref" ], - "google scholar":[ - "Google Scholar nodrošina vienkāršu un ērtu veidu, kā meklēt zinātnisko literatūru. Meklēšanai ir pieejams plašs kategoriju un avotu klāsts: raksti, disertācijas, grāmatas, kopsavilkumi un tiesas spriedumi.", - "https://scholar.google.com" - ], "hoogle":"Haskell ir standartizēta dažāda pielietojuma pilnīgi funkcionāla programmēšanas valoda ar ne-striktu semantiku un stipru, statisku tipu sistēmu. Tā nosaukta par godu loģiķim Haskelam Kurijam.", "imdb":"Interneta filmu datubāze ir tiešsaistes datubāze ar informāciju par filmām, aktieriem, televīzijas šoviem un datorspēlēm. IMDb izveidoja datorprogrammētājs Kols Nīdhems. Darbība tika uzsākta 1990. gada 17. oktobrī. 1998. gadā IMDb nonāca Amazon.com īpašumā.", "library of congress":"Kongresa bibliotēka ir bibliotēka ASV, de facto ASV nacionālā bibliotēka, vecākā federālā kultūras institūcija visā valstī. Tā atrodas trīs ēkās Vašingtonā. Kongresa bibliotēka ir lielākā bibliotēka pasaulē pēc grāmatu skaita un plauktu lieluma.", @@ -5939,10 +5970,6 @@ "wikiversity":"Wikiversity ir viens no Wikimedia Foundation projektiem, kas ir balstīts uz wiki programmatūru. Tas ir tiešsaistes brīva satura portāls ar mācību materiāliem un dažādām pamācībām. Projekts tika uzsākts 2006. gada augustā. Pašlaik šis projekts pieejams angliski un vēl vairāk nekā 10 citās valodās.", "wikivoyage":"Wikivoyage ir viens no Wikimedia Foundation projektiem, kas ir balstīts uz wiki programmatūru. Tas ir tiešsaistes brīva satura portāls ar tūrisma materiāliem. Dibināts 2006. gadā, Wikimedia Foundation to pārņēma 2012. gadā. Pašlaik šis projekts pieejams angliski un vēl vairāk nekā 10 citās valodās.", "wiktionary":"Vikivārdnīca ir brīva papildināma daudzvalodu vārdnīca, kura izveidota uz wiki bāzes. Tas ir viens no Wikimedia Foundation projektiem.", - "wttr.in":[ - "Laika ziņas: not found", - "https://wttr.in" - ], "youtube":"YouTube ir video koplietošanas tiešsaistes sociālā tīkla tīmekļa vietne, kurā tās apmeklētāji var ievietot, skatīties un izmantot dažādus video failus. Šos failus lietotāji var novērtēt, pie katra faila norādīts tā skatījumu skaits. Aktīvo lietotāju skaits 2023. gada beigās sasniedza vairāk nekā 2 miljardus." }, "ml":{ @@ -6085,7 +6112,7 @@ "wikivoyage":"ഒരു വിക്കിമീഡിയ സംരംഭമാണ് വിക്കിപര്യടനം(en:wikivoyage). സ്വതന്ത്ര യാത്രാപുസ്തകമാണിത്. ലോകത്തെമ്പാടുമുള്ള പ്രധാന ടൂറിസ്റ്റ് കേന്ദ്രങ്ങളിൽ എത്തിപ്പെടുന്ന ഒരാൾക്ക് ആവശ്യമായ എല്ലാ സംഗതികളും ഉൾക്കൊള്ളിച്ചുകൊണ്ട് വെബ് അടിസ്ഥാനത്തിൽ സേവനം ലഭ്യമാക്കുക എന്നതാണ് ഇതിന്റെ ലക്ഷ്യം.", "wiktionary":"സ്വതന്ത്ര ഉള്ളടക്കമുള്ള ഒരു നിഘണ്ടു നിർമ്മിക്കുന്നതിനുള്ള ഒരു വെബ് അധിഷ്ഠിത ബഹുഭാഷാ പദ്ധതിയാണ് വിക്ഷണറി. 150-ലധികം ഭാഷകളിൽ ഇത് ലഭ്യമാണ്. സാധാരണ നിഘണ്ടുക്കളിൽ നിന്ന് വ്യത്യസ്തമായി വോളണ്ടിയർമാരുടെ ഒരു സമൂഹമാണ് വിക്ഷണറിക്ക് പിന്നിൽ പ്രവർത്തിക്കുന്നത്. വിക്കി സോഫ്റ്റ്‌വെയർ ഉപയോഗിക്കുന്ന ഇതിലെ ലേഖനങ്ങൾ വെബ്സൈറ്റിലേക്ക് പ്രവേശിക്കുവാൻ സൗകര്യമുള്ള മിക്കവാറും എല്ലാവർക്കും തിരുത്താവുന്നതാണ്.", "wttr.in":[ - "കാലാവസ്ഥ റിപ്പോർട്ട്: not found", + "കാലാവസ്ഥ റിപ്പോർട്ട്: Des Moines, Iowa, United States", "https://wttr.in" ], "youtube":"ഗൂഗിൾ ഉടമസ്ഥതയിലുള്ള ഇന്റർനെറ്റ് വീഡിയോ ഷെയറിംഗ് വെബ്‌സൈറ്റാണ്‌ യൂട്യൂബ്. ഈ സംവിധാനത്തിലൂടെ ലോകത്തെവിടെനിന്നും ഉപഭോക്താക്കൾക്ക് വീഡിയോ ഖണ്ഡങ്ങൾ മറ്റുള്ളവരുമായി പങ്കുവയ്ക്കുവാൻ കഴിയുന്നു. 2005 ഫെബ്രുവരിയിൽ പേയ്പാൽ എന്ന ഇ-വ്യാപാര കമ്പനിയിൽ ജോലി ചെയ്തിരുന്ന സ്റ്റീവ് ചെൻ, ചാഡ് ഹർലി, ജാവേദ് കരീം എന്നിവരാണ് യൂട്യൂബ് സ്ഥാപിച്ചത്. കാലിഫോർണിയയിലെ സാൻ ബ്രൂണൊ അസ്ഥാനമാക്കി പ്രവർത്തനമാരംഭിച്ച ഈ വെബ് സേവന കമ്പനി അഡോബ് ഫ്ലാഷ് സാങ്കേതിക വിദ്യ അടിസ്ഥാനമാക്കിയാണു പ്രവർത്തിക്കുന്നത്. വീഡിയോ ഖണ്ഡങ്ങൾ, സംഗീതം, ടെലിവിഷൻ പരിപാടികൾ തുടങ്ങിയവയെല്ലാം ഈ വെബ് സൈറ്റ് വഴി പങ്കുവയ്ക്കപ്പെടുന്നുണ്ട്. യുട്യൂബിൽ അംഗമായാൽ ആർക്കും വീഡിയോകൾ അപ്‌ലോഡ് ചെയ്യാവുന്നതാണ്. ശ്ലീലമായ വീഡിയോകൾ മാത്രമാണ് അനുവദിക്കുക. പുതിയ ഉപഭോക്താക്കൾക്ക് 10 മിനുട്ടിൽ കൂടുതൽ വീഡിയോ കയറ്റാൻ അനുമതി നൽകുന്നില്ല. ഓർക്കുട്ട് പോലെ തന്നെ എല്ലാ രാജ്യങ്ങളിലും യുട്യൂബിനു അനുമതി നൽകിയിട്ടില്ല. ഉപഭോക്താക്കൾക്ക് യൂട്യൂബിൽ നിന്ന് വീഡിയോ ഖണ്ഡങ്ങൾ ഡൗൺലോഡ് ചെയ്യാനും സാധിക്കും.വെബ്‌സൈറ്റ്, മൊബൈൽ അപ്ലിക്കേഷനുകൾ എന്നിവ ഉൾപ്പെടെ വീഡിയോകൾ കാണാനും മറ്റ് വെബ്‌സൈറ്റുകൾ കൂട്ടിച്ചേർക്കാനായി യൂട്യൂബ് നിരവധി മാർഗങ്ങൾ നൽകുന്നു. ലഭ്യമായ ഉള്ളടക്കത്തിൽ സംഗീത വീഡിയോകൾ, വീഡിയോ ക്ലിപ്പുകൾ, ഹ്രസ്വ, ഡോക്യുമെന്ററി ഫിലിമുകൾ, ഓഡിയോ റെക്കോർഡിംഗുകൾ, മൂവി ട്രെയിലറുകൾ, തത്സമയ സ്ട്രീമുകൾ, വീഡിയോ ബ്ലോഗുകൾ എന്നിവ ഉൾപ്പെടുന്നു. മിക്ക ഉള്ളടക്കവും സൃഷ്ടിക്കുന്നത് വ്യക്തികളാണ്, പക്ഷേ മീഡിയ കോർപ്പറേഷനുകളും വീഡിയോകൾ പ്രസിദ്ധീകരിക്കുന്നു. കാണുന്നതിനും അപ്‌ലോഡുചെയ്യുന്നതിനും പുറമെ, രജിസ്റ്റർ ചെയ്ത ഉപയോക്താക്കൾക്ക് വീഡിയോകളിൽ അഭിപ്രായമിടാനും റേറ്റുചെയ്യാനും പ്ലേലിസ്റ്റുകൾ സൃഷ്ടിക്കാനും മറ്റ് ഉപയോക്താക്കൾക്ക് സബ്സ്ക്രൈബ് ചെയ്യാനും കഴിയും. 2005 ൽ സ്ഥാപിതമായ യുട്യൂബ് തൊട്ടടുത്ത വർഷം ഗൂഗിൾ 1.65 ബില്യൺ യുഎസ് ഡോളറിന് സ്വന്തമാക്കി. 2020 ൽ 19.8 ബില്യൺ ഡോളർ സമ്പാദിച്ച യൂട്യൂബ് ഗൂഗിളിന്റെ ഏറ്റവും ലാഭകരമായ അനുബന്ധ സ്ഥാപനങ്ങളിലൊന്നായി ഇത് മാറി. ഗൂഗിളിന്റെ ആഡ്സെൻസ്(AdSense) പ്രോഗ്രാമിൽ നിന്ന് യൂട്യൂബും തിരഞ്ഞെടുത്ത സ്രഷ്‌ടാക്കളും പരസ്യ വരുമാനം നേടുന്നു. ഭൂരിഭാഗം വീഡിയോകളും കാണാൻ സൗജന്യമാണ്, പക്ഷേ ചിലതിന് സംഗീതമോ പ്രീമിയം സബ്സ്ക്രിപ്ഷനോ ആവശ്യമാണ്." @@ -6244,7 +6271,7 @@ "https://www.bing.com" ], "bing images":[ - "Bing Image Search er den beste bildesøkemotoren, og gir brukerne muligheten til å søke etter og utforske de mest relevante bildene av høy kvalitet som er skreddersydd etter dine behov", + "Søk etter og utforsk gratis bilder og bakgrunner i høy kvalitet på Bing Images. Inspirer og hev visualobjektene dine!", "https://www.bing.com/images" ], "bing news":[ @@ -6319,9 +6346,13 @@ "google play apps:nb-NO", "ref" ], - "google scholar":[ - "Med Google Scholar kan du enkelt utføre omfattende søk etter akademisk litteratur. Søk blant en rekke fagområder og kilder: artikler, avhandlinger, bøker, utdrag og rettskjennelser.", - "https://scholar.google.com" + "mastodon hashtags":[ + "mastodon users:nb-NO", + "ref" + ], + "mastodon users":[ + "Lær mer om Mastodon, den radikale forskjellen, gratis og åpen kildekode desentralisert sosiale medier.", + "https://joinmastodon.org/" ], "microsoft learn":[ "Lær med interaktive leksjoner og teknisk dokumentasjon, få profesjonelle utviklingstimer og sertifiseringer, og kom i kontakt med fellesskapet.", @@ -6574,7 +6605,7 @@ "wiktionary":"Wiktionary is een project van de Wikimedia Foundation om een gratis meertalig woordenboek van alle woorden in alle talen te maken.", "wolframalpha":"Wolfram|Alpha is een antwoordmachine op het web, die niet zoekt naar pagina's zoals een zoekmachine doet, maar naar antwoorden op vragen, dat doet hij door te zoeken in een database van informatie. Om de antwoorden te berekenen maakt het gebruik van de software Mathematica. In maart 2009 is de antwoordmachine aangekondigd door de Britse natuurkundige Stephen Wolfram. De website is voor het publiek geopend op 15 mei 2009 en is officieel geopend op 18 mei 2009.", "wttr.in":[ - "Weerbericht voor: not found", + "Weerbericht voor: Des Moines, Iowa, United States", "https://wttr.in" ], "youtube":"YouTube is een website van YouTube LLC, een dochteronderneming van Google LLC. Het is een website waar gebruikers kosteloos en soms tegen betaling video's kunnen publiceren en kunnen bekijken. De video's om gratis te bekijken worden door advertenties onderbroken." @@ -7032,6 +7063,14 @@ "ref" ], "library of congress":"La Bibliotèca dau Congrès es la biliotèca de recèrca dau Congrès deis Estats Units. De facto, assegura tanben lo ròtle de bibliotèca nacionala deis Estats Units. Fondada en 1800, es devesida en plusors partidas que son situadas dins la capitala e en Virgínia. En 2023, èra la bibliotèca pus importanta dau mond en nombre de referéncias.", + "mastodon hashtags":[ + "mastodon users:oc", + "ref" + ], + "mastodon users":[ + "Obtenètz mai d’informacions tocant Mastodon, radicalament diferent, platafòrma de malhum social liura e open-souce.", + "https://joinmastodon.org/" + ], "nixos wiki":[ "nixos wiki:ru", "ref" @@ -7068,7 +7107,7 @@ "https://www.bing.com" ], "bing images":[ - "Bing ਚਿੱਤਰ ਸਭ ਤੋਂ ਵਧੀਆ ਚਿੱਤਰ ਖੋਜ ਇੰਜਣ ਹੈ, ਜੋ ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ ਤੁਹਾਡੀਆਂ ਲੋੜਾਂ ਅਨੁਸਾਰ ਤਿਆਰ ਕੀਤੇ ਗਏ ਸਭ ਤੋਂ ਢੁਕਵੇਂ, ਉੱਚ-ਗੁਣਵੱਤਾ ਵਾਲੇ ਚਿੱਤਰਾਂ ਨੂੰ ਖੋਜਣ ਅਤੇ ਖੋਜਣ ਦੀ ਯੋਗਤਾ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ", + "Bing ਚਿੱਤਰਾਂ 'ਤੇ ਉੱਚ-ਗੁਣਵੱਤਾ, ਮੁਫਤ ਫੋਟੋਆਂ ਅਤੇ ਵਾਲਪੇਪਰਾਂ ਦੀ ਖੋਜ ਕਰੋ ਅਤੇ ਪੜਚੋਲ ਕਰੋ। ਆਪਣੇ ਦ੍ਰਿਸ਼ਾਂ ਨੂੰ ਪ੍ਰੇਰਿਤ ਅਤੇ ਉੱਚਾ ਚੁੱਕੋ!", "https://www.bing.com/images" ], "bing videos":[ @@ -7411,10 +7450,6 @@ "wikivoyage":"Wikipodróże – portal internetowy Wikimedia Foundation poświęcony tematyce turystycznej, oparty na technologii wiki i tworzony na wolnej licencji przez zaangażowanych w ten projekt wolontariuszy.", "wiktionary":"Wiktionary – projekt Wikimedia Foundation, którego założeniem jest stworzenie wolnego słownika w każdym języku opartego na mechanizmie wiki. Wiktionary jest jednym z siostrzanych projektów Wikipedii. Polska wersja Wiktionary nosi nazwę Wikisłownik. Serwis był notowany w rankingu Alexa na miejscu 641.", "wolframalpha":"Wolfram|Alpha, Wolfram Alpha – strona internetowa, stworzona przez amerykańskie przedsiębiorstwo Wolfram Alpha LLC. Formułuje ona odpowiedź na pytanie zadane w języku naturalnym, wykonuje obliczenia, przedstawia dane statystyczne, rozwiązuje równania itp.", - "wttr.in":[ - "Pogoda w: not found", - "https://wttr.in" - ], "yacy":"YaCy – rozproszona wyszukiwarka zbudowana na zasadzie sieci peer-to-peer (P2P). Podstawą jest program napisany w Javie, funkcjonujący na kilku tysiącach komputerów, tak zwanych YaCy-peers. Każde YaCy-peer niezależnie przeszukuje internet, analizuje oraz indeksuje znalezione strony i gromadzi rezultaty indeksowania we wspólnej bazie danych, który jest współdzielony z innymi użytkownikami YaCy tak, jak w sieciach P2P.", "yacy images":[ "yacy:pl", @@ -7480,7 +7515,7 @@ "ref" ], "deezer":"Deezer é um serviço de streaming de áudio lançado em 2007. Disponível para usuários de mais de 180 países, a plataforma possui atualmente mais de 90 milhões de músicas, mais de 100 milhões de playlists e mais de 4 milhões de programas de áudio, como podcasts, em seu acervo. É uma empresa de capital fechado, com sede em Paris, e escritórios em Londres, Berlim, Miami, São Paulo e em outros lugares do mundo. Criada em Paris, França, a Deezer possui 16 milhões de usuários ativos mensais, permitindo que os usuários ouçam conteúdo de música de gravadoras incluindo EMI, Sony, Universal Music Group e Warner Music Group.", - "deviantart":"DeviantArt, Inc é uma empresa virtual estadunidense, formando uma rede social que permite aos artistas iniciantes ou mesmo consagrados exporem seus trabalhos artísticos, promovê-los, compartilhá-los, bem como interagir com seus pares ou interessados, através do envio das imagens digitalizadas. Fundada em 2000, tem sua sede na cidade de Hollywood, estado da Califórnia.", + "deviantart":"DeviantArt, Inc é uma empresa virtual estadunidense, formando um site que voltado para artistas. Ela permite que iniciantes ou profissionais compartilhem, promovam e interajam por meio de obras de arte digitalizadas, incorporando tanto a fotografia, videografia, literatura, fotomanipulação, arte tradicional, arte clássica e arte contemporânea.", "duckduckgo":[ "currency:pt", "ref" @@ -7652,7 +7687,7 @@ "wiktionary":"Wikcionário é um projeto web multílingue pertencente à Fundação Wikimedia com a finalidade de criar um dicionário eletrônico de conteúdo livre, disponível em mais de 172 línguas diferentes. Ao contrário do padrão normal de dicionários, este é escrito colaborativamente por voluntários que usam o software wiki, permitindo que os artigos possam ser alterados e modificados por quase todas as pessoas de acesso ao site.", "wolframalpha":"Wolfram|Alpha é um mecanismo de conhecimento computacional desenvolvido pela Wolfram Research. É um serviço on-line que responde às perguntas diretamente, mediante o processamento da resposta extraída de base de dados estruturados, em vez de proporcionar uma lista dos documentos ou páginas web que poderiam conter a resposta, tal como faziam os mecanismos de busca.", "wttr.in":[ - "Previsão do tempo para: not found", + "Previsão do tempo para: Des Moines, Iowa, United States", "https://wttr.in" ], "yahoo news":"O Yahoo! News é um site de notícias que se originou como um agregador de notícias baseado na internet pelo Yahoo!. O site foi criado pelo engenheiro de software do Yahoo! Brad Clawsie em agosto de 1996. Os artigos vieram originalmente de serviços de notícias como Associated Press, Reuters, Fox News, Al Jazeera, ABC News, USA Today, CNN e BBC News.", @@ -8436,7 +8471,7 @@ "huggingface:ru", "ref" ], - "imdb":"Internet Movie Database — веб-сайт со свободно редактируемой и крупнейшей в мире базой данных о кинематографе. По состоянию на январь 2021 года, в базе собрана информация о более чем 6,5 млн кинофильмов, телесериалов и отдельных их серий, а также о 10,4 млн персоналий, связанных с кино и телевидением, — актёрах, режиссёрах, сценаристах и других.", + "imdb":"Internet Movie Database — веб-сайт со свободно редактируемой и крупнейшей в мире базой данных о кинематографе. По состоянию на конец 2024 года, в базе собрана информация о более чем 22 млн кинофильмов, телесериалов и отдельных их серий, а также о 14 млн персоналий, связанных с кино и телевидением, — актёрах, режиссёрах, сценаристах и других.", "imgur":"Imgur — онлайн-сервис загрузки, хранения и обмена фото-изображений.", "ina":"Национальный институт аудиовизуала — общественное учреждение, имеющее промышленный и коммерческий характер.", "iqiyi":"iQIYI Inc — китайская компания, предоставляющая развлекательные онлайн-услуги; крупнейший в стране оператор потокового мультимедиа. Имеет более 100 млн платных подписчиков. Входит в число крупнейших публичных компаний страны.", @@ -8568,7 +8603,7 @@ "wolframalpha":"Wolfram|Alpha — база знаний и набор вычислительных алгоритмов, вопросно-ответная система. Запущена 15 мая 2009 года.", "wordnik":"Wordnik (wordnik.com) — интернет-сайт, разрабатываемый одноименной некоммерческой организацией, представляющий собой онлайн-словарь английского языка и языковой ресурс для словарей и тезауруса. Часть контента, представленного Wordnik, основывается на известных печатных словарях английского языка, таких как Century Dictionary, American Heritage Dictionary, WordNet и GCIDE. Wordnik собрал корпус из миллиардов слов, которые используются на сайте для отображения примеров предложений, что позволяет ему предоставлять информацию о гораздо большем наборе слов, чем в обычном словаре. Wordnik использует как можно больше реальных примеров при определении слова.", "wttr.in":[ - "Прогноз погоды: not found", + "Прогноз погоды: Des Moines, Iowa, United States", "https://wttr.in" ], "yacy":"YaCy — свободно распространяемая децентрализованная поисковая система, построенная по принципу одноранговой сети (P2P). Есть версии для Windows, Linux, MacOSX. Основной программный модуль, написанный на Java, функционирует на нескольких тысячах компьютеров участников сети YaCy. Каждый участник проекта независимо исследует Интернет, анализируя и индексируя найденные страницы, и складывает результаты индексирования в общую базу данных, который совместно используется всеми пользователями YaCy по принципу P2P.", @@ -8640,6 +8675,14 @@ ], "imdb":"අයිඑම්ඩීබී යනුවෙන් හැඳින්වෙන්නේ චිත්‍රපට, රූපවාහිනී වැඩසටහන්, වීඩියෝ ක්‍රීඩා ආදිය පිළිබඳ තොරතුරු ඇතුළත් මාර්ගගත දත්ත සමුදායකි. එහි දී චරිත නිරූපණය, නිෂ්පාදන කණ්ඩායම, පෞද්ගලික චරිතාපදාන, කථා සාරාංශ, ප්‍රමාණන, රසික සහ විචාරක විචාරයන් ද මෙහි ඇතුළත් ය. මුලින් රසිකයන් විසින් ක්‍රියාත්මක කළ වෙබ්අඩවියක් වූ මෙය වර්තමානයෙහි IMDb.com, Inc. නම් වූ ඇමසන් සමාගමේ අනුබද්ධිත අඩවියක් ලෙස පවතියි.", "library of congress":"කොන්ග්‍රස් පුස්තකාලය එසේත් නැත්නම් ලයිබ්රරි ඔෆ් කොන්ග්‍රස් යනු එක්සත් ජනපද කොංග‍්‍රස් මණ්ඩලයට නිල වශයෙන් සේවා සැපයීම සඳහා වන පර්යේෂණ පුස්තකාලය කි. එසේම මෙය ඇමරිකාවේ de facto ජාතික පුස්තකාලය වේ.", + "mastodon hashtags":[ + "mastodon users:si", + "ref" + ], + "mastodon users":[ + "මුළුමනින්ම වෙනස්, නොමිලේ සහ විවෘත මූලාශ්‍ර විමධ්‍යගත සමාජ මාධ්‍ය වේදිකාව වන මාස්ටඩන් ගැන තව දැන ගන්න.", + "https://joinmastodon.org/" + ], "nixos wiki":[ "nixos wiki:en", "ref" @@ -8844,7 +8887,7 @@ "https://www.bing.com" ], "bing images":[ - "Slike Bing je najboljši mehanizem za iskanje slik, ki uporabnikom omogoča iskanje in raziskovanje najustreznejših visokokakovostnih slik, prilagojenih vašim potrebam.", + "Iščite in raziščite visokokakovostne, brezplačne fotografije in ozadja v storitvi Bing Images. Navdihnite in povzdignite svoje vizualne vsebine!", "https://www.bing.com/images" ], "bing news":[ @@ -8959,6 +9002,14 @@ "wikidata" ], "library of congress":"Kongresna knjižnica je študijska knjižnica s sedežem v Washingtonu, ZDA, ki uradno deluje v podporo Kongresa Združenih držav Amerike, a je odprta tudi za javnost in velja za de facto nacionalno knjižnico ZDA. Poleg tega ima vloge centra bibliografskih informacij, ameriške agencije za avtorske pravice in nacionalne knjižnice za slepe in invalidne.", + "mastodon hashtags":[ + "mastodon users:sl", + "ref" + ], + "mastodon users":[ + "Izvejte več o Mastodonu, radikalno drugačni, prosti in odprtokodni decentralizirani platformi za družbene medije.", + "https://joinmastodon.org/" + ], "microsoft learn":[ "Učite se z interaktivnimi lekcijami in tehnično dokumentacijo, pridobite ure strokovnega izpopolnjevanja in certifikate ter se povežite s skupnostjo.", "https://learn.microsoft.com" @@ -9121,10 +9172,6 @@ "google play apps:sr", "ref" ], - "google scholar":[ - "Google академик пружа једноставан начин за опсежну претрагу стручне литературе. Претражујте најразличитије дисциплине и изворе: чланке, научне радове, књиге, сижеа и судске одлуке.", - "https://scholar.google.com" - ], "hoogle":"Haskel je standardizovan, funkcionalni, strogo tipiziran programski jezik opšte namjene, sa nestriktnom semantikom. Ime je dobio po logičaru koji se zove. Posljednji standard Haskela je 2010, međutim, postoji grupa koja radi na sljedećoj verziji 2020.", "imdb":"IMDb амерички је веб-сајт који поседује базу података о свим познатијим филмским и телевизијским личностима, филмовима, телевизијским емисијама, серијама, рекламама и видео-играма, премда је најпопуларнији због базе података о филмовима. Интернет гигант Амазон је априла 1998. године купио, а 2002. године му је проширена функционалност тако што је додат, чије се коришћење наплаћује.", "imgur":"Имгур је платформа за бесплатно складиштење фотографија и дељење садржаја на интернету.", @@ -9370,7 +9417,7 @@ "wiktionary":"Wiktionary är ett flerspråkigt webbaserat projekt vars syfte är att skapa en fri ordbok. Projektet finns på över 170 olika språk. Till skillnad från traditionella ordböcker är Wiktionary kollektivt skriven av volontärer. Ordboken använder sig av wikiprogramvara, som tillåter besökare och användare att redigera nästan alla artiklar. Projektets slogan är den fria ordboken. Wiktionary använder även samma wikimotor, MediaWiki, som alla andra Wikimediaprojekt.", "wolframalpha":"Wolfram Alpha är ett sökmotorliknande internetverktyg som utvecklats av Wolfram Research.", "wttr.in":[ - "Väderleksprognos för: not found", + "Väderleksprognos för: Des Moines, Iowa, United States", "https://wttr.in" ], "youtube":"Youtube är en videogemenskap, det vill säga en webbplats med videoklipp som laddas upp av dess användare, med tillhörande diskussioner och sociala medier-funktioner. Webbplatsen öppnades den 14 februari 2005." @@ -9441,6 +9488,10 @@ ], "github":"கிட்ஹப் இன்க் ஒரு இணைய வழி கிட் திருத்தக் கட்டுப்பாடு ஆகும். இது பெரும்பாலும் கணினி நிரல்களுக்காகப் பயன்படுகிறது. இது நிரல் திருத்தக்கட்டுப்பாடும், நிரல் மேலான்மையயும், இன்னும் பிற சேவைகளையும் அளிக்கிறது. இது பயனர் நுழைவுக் கட்டுப்பாடு, பிழை கண்காணிப்பு, திட்ட மேலான்மை, புதிய வேண்டுகோள், மற்றும் திட்டத்திற்கான விக்கி சேவையையும் வழங்குகின்றது.", "google":"கூகிள் தேடல் கூகிள் நிறுவனத்தின் உலகின் மிகப் பெரும் தேடற்பொறியாகும். கூகிள் தேடுபொறி இணையத்தில் உள்ள அனைத்து பக்கங்களில் பயனர்களின் தேடலுக்கு ஒத்த உள்ளடக்கத்தை உள்ளவையாக கருதப்படும் பக்கங்களை பட்டியலிடுகின்றது. கூகிள் தேடுபொறி பல்வேறு சேவைகள் மூலமாக பல நூறு மில்லியன் தேடல்களை மேற்கொள்கின்றது. சமீபத்தில் வெளியான கூகிள் தேடுபொறி பற்றிய வீடியோ விளம்பரம் ஒன்று பிரபலங்களை கண்கலங்க வைத்துள்ளது.", + "google images":[ + "Google Images. வலையில் கிடைக்கக்கூடிய மிக விரிவான படத் தேடல்.", + "https://images.google.com" + ], "google news":"கூகிள் செய்திகள், கூகிள் நிறுவனத்தால் வழங்கப்படும் இலவச செய்தி திரட்டி ஆகும். ஒரு தானியங்கி திரட்டல் வழிமுறை மூலம் ஆயிரக்கணக்கான பிரசுரங்களின் சமீபத்திய செய்திகளை இது தேர்ந்தெடுக்கிறது.", "google play apps":"கூகுள்பிளே என்பது இலக்கமுறை தகவல்களை வழங்கும் ஒரு சேவையாகும். இது கூகிள் நிறுவனத்தால் வழங்கப்படுகிறது. இது ஆன்டிராய்டு பயன்பாடுகள், இசைக்கோப்புகள், புத்தகங்கள், திரைப்படங்கள், விளையாட்டுகள் போன்றவற்றை கொண்ட ஓர் இணையக் கடை ஆகும். மார்ச் 2012ல் கூகுள்தனது ஆன்டிராய்டு அங்காடியையும், இசைச் சேவையையும் இணைத்து கூகுள்பிளேவை ஆரம்பித்தது. 2017 ஆம் ஆண்டு புள்ளிவிவரப்படி, 35 இலட்சம் பதிவிறக்கங்கள், இத்தளத்தில் நடந்துள்ளன.", "google play movies":[ @@ -9489,7 +9540,7 @@ "wiktionary":"விக்சனரி (Wiktionary) என்பது சொற்களுக்கான பொருள், அவற்றின் மூலம், உச்சரிப்பு முதலியவற்றை உள்ளடக்கிய, கட்டற்ற பன்மொழி அகரமுதலி ஒன்றைக் கூட்டு முயற்சியில் உருவாக்கும் ஒரு திட்டமாகும். இத்திட்டம் விக்கிமீடியா நிறுவனத்தினால் வழிநடத்தப்படுகிறது. வணிக நோக்கற்ற இந்த அகரமுதலியை இலவசமாக எவரும் பயன்படுத்திக் கொள்ள முடியும்; பங்கேற்கவும் முடியும்.", "wolframalpha":"வொல்பிராம் அல்பா (Wolfram|Alpha) என்பது ஒரு கேள்விகளுக்குப் பதிலளிக்கும் இயந்திரம். இது மதமட்டிக்கா மென்பொருளை உருவாக்கிய வொல்பிராம் ஆய்வு நிறுவனத்தால் உருவாக்கப்பட்டது. கேள்விகள் இலக்கணப் பகுப்பாய்வு செய்யப்பட்டு, கணிக்கூடியவாறு ஒழுங்கமைக்கப்பட்ட தரவுகளைக் கொண்டு விடைகள் தருவிக்கப்படுகின்றன. துறைசார் கேள்விகளுக்கு இது துல்லியமான பதில்களைத் தரக்கூடியது.", "wttr.in":[ - "வானிலை அறிக்கை not found", + "வானிலை அறிக்கை Des Moines, Iowa, United States", "https://wttr.in" ], "yahoo news":"யாஹூ! செய்திகள் யாஹூ! இன் செய்திச் சேவையாகும். இதன் ஆங்கிலச் செய்திகள் CNN, USA Today போன்றவற்றில் இருந்து வருவதாகும். தமிழ்ச் செய்திகள் பெரும்பாலும் வெப்தூனியாவில் இருந்து வருவதாகும்.", @@ -9502,7 +9553,7 @@ "https://www.bing.com" ], "bing images":[ - "Bing చిత్రం అనేది ఉత్తమ చిత్రం శోధన ఇంజన్‌గా ఉంటుంది. అవసరాలకు అనుగుణంగా అత్యంత సంబంధితమైన, అధిక నాణ్యత గల చిత్రాలు శోధించే మరియు అన్వేషించే సామర్థ్యాన్ని వినియోగదారులకు అందిస్తుంది.", + "Bing చిత్రాలపై అధిక-నాణ్యత, ఉచిత ఫోటోలు మరియు వాల్పేపర్‌లను శోధించండి మరియు అన్వేషించండి. మీ విజువల్స్‌ను ప్రేరేపించండి మరియు ఎలివేట్ చేయండి!", "https://www.bing.com/images" ], "bing videos":[ @@ -9590,7 +9641,7 @@ "wikisource":"వికీసోర్స్ స్వేచ్ఛా నకలు హక్కుల రచనలను ప్రచురించుటకు సముదాయసభ్యులు సేకరించి, నిర్వహించుచున్న ఒక స్వేచ్ఛాయుత గ్రంథాలయము. ఇది 2005 ఆగస్టు 19 న ప్రారంభమైంది. ప్రారంభంలో విశేషంగా కృషిచేసిన వాడుకరులు అన్వేషి, రాజ్, రాజశేఖర్ (Rajasekhar1961), మల్లిన నరసింహారావు, తాడేపల్లి (Tadepally), వైఙాసత్య, రాకేశ్వర, సురేష్ (Sureshkvolam), సుజాత. అన్వేషి 2007 ఏప్రిల్ నుండి డిసెంబరు మధ్య శతకాలు, భగవద్గీత, వాల్మీకి రామాయణం మొదలగునవి వికీసోర్స్ లో చేర్చాడు. తరువాత వికీసోర్స్ కి కావలసిన మూసలు తెలుగుసేత, డాక్యుమెంటేషన్ పేజీలు తయారుచేయడం, రచనలు చేర్చడం మొదలగు మెరుగులుచేశాడు. ఫ్రూఫ్ రీడ్ ఎక్స్టెన్షన్ వాడుటకు చేసిన ప్రయత్నం మధ్యలో ఆగిపోయింది. 2012 లో అది పూర్తి కావించబడింది. వైఙాసత్య దీనిలో తెలుగు నేరుగా టైపు చేసేసౌకర్యం కలిగించాడు, మొల్ల రామాయణం చేర్చటానికి కృషి చేసాడు.", "wiktionary":"విక్షనరీ, వికీపీడియా సోదర వెబ్ సైట్. ఈ పదం వికి, డిక్షనరి పదాలను కలుపగా తయారయింది. ఇది తెలుగు పదాలను వివిధమైన వ్యాకరణ, వాడుక, నానార్ధ, వ్యతిరేఖార్థ లాంటి వివరణలతో నిక్షిప్తం చేసే మాధ్యమం (నిఘంటువు). అయితే పుస్తక రూపంలో వుండే నిఘంటువులు మహా అయితే మూడు భాషలలో వుంటాయి. దీనిలో తెలుగు-తెలుగు, ఇంగ్లీషు-తెలుగుతో పాటు ఇతర విక్షనరీలోని సమాన అర్థం గల పదాలకు లింకులుండటంవలన, మీకు ప్రపంచంలోని వికీ భాషలన్నిటిలో సమాన అర్థంగల పదాలను తెలుసుకునే వీలుండటంతో, దీనిని బహుభాష నిఘంటువుగా పేర్కొనవచ్చు. తెలుగు వికీపీడియాలో లాగా, ఇందులో ఎవరైనా తెలుగు పదాలకు పేజీలను సృష్టించవచ్చు లేక మార్పులు చేయవచ్చు.", "wttr.in":[ - "వాతావరణ సమాచారము: not found", + "వాతావరణ సమాచారము: Des Moines, Iowa, United States", "https://wttr.in" ], "youtube":"యూట్యూబ్ అనేది అంతర్జాలంలో వీడియోలను ఇతరులతో పంచుకోవడాని వీలుకల్పించే ఒక అంతర్జాతీయ సేవ. దీని ప్రధాన కార్యాలయం అమెరికాలోని, కాలిఫోర్నియా రాష్ట్రం, శాన్ బ్రూనో అనే నగరంలో ఉంది." @@ -9670,6 +9721,10 @@ ], "github":"กิตฮับ เป็นเว็บบริการพื้นที่ทางอินเทอร์เน็ต สำหรับเก็บการควบคุมการปรับปรุงแก้ไข โดยใช้กิต (Git) โดยมากจะใช้จัดเก็บรหัสต้นฉบับ แต่ยังคงคุณสมบัติเดิมของกิตไว้ อย่างการให้สิทธิ์ควบคุมและปรับปรุงแก้ไข และระบบการจัดการรหัสต้นฉบับรวมถึงทางกิตฮับได้เพิ่มเติมคุณสมบัติอื่นๆผนวกไว้ด้วย เช่น การควบคุมการเข้าถึงรหัสต้นฉบับ และ คุณสมบัติด้านความร่วมมือเช่น ติดตามข้อบกพร่อง, การร้องขอให้เพิ่มคุณสมบัติอื่นๆ, ระบบจัดการงาน และวิกิสำหรับทุกโครงการ", "google":"กูเกิล เสิร์ช เป็นเสิร์ชเอนจินจากกูเกิล และเป็นเสิร์ชเอนจินที่มีคนใช้งานมากที่สุดในโลก โดยมีการค้นหามากกว่าหนึ่งร้อยล้านครั้งต่อวัน โดยมีผู้ใช้งานกว่า 1.643 พันล้านคนต่อปี จากผลการสำรวจในปี 2551", + "google images":[ + "Google Photos การค้นหารูปภาพที่ครอบคลุมที่สุดบนเว็บ", + "https://images.google.com" + ], "google news":[ "รายงานข่าวครอบคลุมทันเหตุการณ์ รวบรวมจากแหล่งข่าวทั่วโลกโดย Google News", "https://news.google.com" @@ -9679,10 +9734,6 @@ "google play apps:th", "ref" ], - "google scholar":[ - "Google Scholar ให้วิธีที่ง่ายต่อการค้นหาวรรณกรรมทางวิชาการอย่างครอบคลุม ค้นหาในสาขาและแหล่งข้อมูลที่หลากหลาย เช่น บทความ วิทยานิพนธ์ หนังสือ บทคัดย่อ และความเห็นของศาล", - "https://scholar.google.com" - ], "hoogle":"ภาษาแฮสเคิล เป็นภาษาโปรแกรมที่มีวัตถุประสงค์เพื่อใช้การใช้งานที่หลากหลาย ที่มีการไทป์แบบคงที่ ภาษาแฮสเคิลเป็นภาษาโปรแกรมเชิงฟังก์ชั่นแบบบริสุทธ์ ที่มีลักษณะพิเศษคือการคาดคะเนไทป์ และการประเมินผลแบบขี้เกียจ. ภาษาแฮสเคิลพัฒนาขึ้นเพื่อการเรียนการสอน การวิจัย รวมไปถึงการประยุกต์ใช้ในเชิงธุรกิจและอุตสาหกรรม ภาษาแฮสเคิลเป็นแรงบันดาลใจให้กับภาษาโปรแกรมอื่น ๆ ที่มีความซับซ้อนอีกหลายภาษาให้มีฟีเจอร์แบบไทป์คลาส ซึ่งทำให้ป้องกันการเออเรอร์ของไทป์ ทำให้การโอเปอเรเตอร์โอเวอร์โหลดดิ้ง มีความปลอดภัยในการใช้ไทป์ หรือ มีไทป์เซฟตี้ มากขึ้น คอมไพเลอร์หลักสำหรับภาษาแฮสเคิลคือ คอมไพเลอร์กลาสโกลว์แฮสเคิล ภาษาแฮสเคิลตั้งชื่อตามนักตรรกศาสตร์ชาวอเมริกัน แฮสเคิล เคอร์รี่", "imdb":"ดิอินเทอร์เน็ตมูวีเดตาเบส เป็นฐานข้อมูลออนไลน์รวบรวมเกี่ยวกับเรื่องราวของ นักแสดง ผู้กำกับ และบุคคลที่เกี่ยวข้องในวงการภาพยนตร์ IMDb เปิดให้บริการตั้งแต่ปี พ.ศ. 2533 และกลายเป็นส่วนหนึ่งของ Amazon.com ตั้งแต่ปี พ.ศ. 2541 นอกจากข้อมูลแล้ว IMDb ยังเป็นศูนย์รวมของคนดูภาพยนตร์ เพราะนอกจากข้อมูลของภาพยนตร์, ประวัตินักแสดง-ผู้กำกับภาพยนตร์-ทีมงานภาพยนตร์แล้ว ยังได้รวบรวมคลิปของตัวอย่างภาพยนตร์เรื่องต่าง ๆ ไว้ และยังเปิดโอกาสให้ผู้ชมได้แสดงความเห็นเกี่ยวกับภาพยนตร์เรื่องต่าง ๆ ด้วยการให้คะแนนอีกด้วย", "iqiyi":"อ้ายฉีอี้ ชื่อเดิม ฉีอี้ (奇艺) เป็นแพลตฟอร์มวิดีทัศน์ออนไลน์ของประเทศจีนซึ่งมีฐานในปักกิ่ง เปิดตัวเมื่อวันที่ 22 เมษายน พ.ศ. 2553", @@ -9736,7 +9787,7 @@ "wikivoyage":"วิกิท่องเที่ยว เป็นคู่มือท่องเที่ยวออนไลน์สำหรับแหล่งท่องเที่ยวและหัวข้อท่องเที่ยวที่เขียนโดยอาสาสมัคร ชื่อของโครงการนี้ในภาษาอังกฤษประกอบด้วย \"Wiki\" และ \"Voyage\" คำภาษาฝรังเศสที่หมายถึงการท่องเที่ยว การเดินทาง", "wiktionary":"วิกิพจนานุกรม เป็นโครงการหนึ่งของมูลนิธิวิกิมีเดียที่มีเป้าหมายรวบรวมคำศัพท์ วลี หรือประโยค พร้อมคำอ่าน ความหมาย คำที่เกี่ยวข้อง และคำแปลในภาษาอื่น เปรียบเสมือนพจนานุกรมทุกภาษาในที่เดียวกัน โดยมีให้ใช้งานถึง 182 ภาษา การทำงานของเว็บไซต์คล้ายกับวิกิพีเดียที่เปิดให้ใครก็ได้สามารถเพิ่มและแก้ไขเนื้อหา โดยรับรองตัวอักษรของทุกภาษาที่รหัสยูนิโคดรองรับ วิกิพจนานุกรมใช้ซอฟต์แวร์มีเดียวิกิเช่นเดียวกับวิกิพีเดีย", "wttr.in":[ - "รายงานสภาพอากาศ: not found", + "รายงานสภาพอากาศ: Des Moines, Iowa, United States", "https://wttr.in" ], "youtube":"ยูทูบ ตามสำเนียงอเมริกัน หรือ ยูทิวบ์ ตามสำเนียงบริเตน เป็นเว็บไซต์เผยแพร่วิดีโอโดยมีสำนักงานอยู่ที่แซนบรูโน แคลิฟอร์เนีย สหรัฐอเมริกา ผู้สร้างเว็บไซต์ดังกล่าว คือ อดีตพนักงาน 3 คนในบริษัทเพย์แพล อันประกอบด้วยแชด เฮอร์ลีย์ สตีฟ เชน และยาวีด คาริม โดยสร้างในเดือนกุมภาพันธ์ 2548 ในเดือนพฤศจิกายน 2549 กูเกิลซื้อยูทูบซื้อไปในราคา 1.65 พันล้านดอลลาร์สหรัฐ ยูทูบเป็นหนึ่งในบริษัทย่อยของกูเกิล เว็บไซต์ยังสามารถให้ผู้ใช้งานสามารถอัปโหลด ดู หรือแบ่งปันวิดีโอได้เลย" @@ -9888,7 +9939,6 @@ "ref" ], "npm":"npm javascript betik dili için geliştirilmiş olan ve Node.js'in standart olarak kabul ettiği bir paket yönetim sistemidir. npm komut satırından çalıştırılır ve uygulamalar için bağımlılık yönetimi sağlar. Ayrıca geliştiricilerin merkezi bir npm kaynağından var olan paketleri kurmasına imkân verir. npm tamamen javascript dili kullanılarak Isaac Z. Schuleter tarafından, PHP'nin PEAR ve Perl'in CPAN sistemlerinden esinlenilerek geliştirilmiştir.", - "odysee":"Odysee, LBRY blok zinciri üzerine kurulu, Amerikan merkezli bir video paylaşım platformudur. Kendisini büyük video paylaşım sitelerine bir alternatif olarak konumlandırıyor ancak ifade özgürlüğü ve ademi merkeziyetçiliğe vurgu yapıyor.", "openlibrary":"Open Library, \"yayınlanmış her kitap için bir web sayfası\" oluşturmayı amaçlayan çevrimiçi bir projedir. Aaron Swartz, Brewster Kahle, Alexis Rossi, Anand Chitipothu ve Rebecca Malamud tarafından kurulmuştur. Open Library, kâr amacı gütmeyen Internet Archive'in projesidir ve kısmen California State Library ve Kahle/Austin Vakfı tarafından finanse edilmiştir.", "openstreetmap":"OpenStreetMap, özgür yazılım şartları altında oluşturulan özgür ve açık kaynaklı bir dünya çapında harita oluşturma projesidir. GPS alıcılarıyla ve diğer kamu malı kaynaklardan toplanan bilgiler ile oluşturulur.", "peertube":"PeerTube, WebTorrent tarafından desteklenen, dağıtık, ActivityPub federasyonlu ve ücretsiz ve açık kaynak kodlu bir video platformudur. Peer-to-peer teknolojisini kullanarak video izlerken sunucuların yükünü azaltır.", @@ -9964,10 +10014,6 @@ "wikivoyage":"Wikivoyage, gezi yerleri ve seyahat konularının gönüllüler tarafından yazıldığı ücretsiz web tabanlı seyahat rehberidir.", "wiktionary":"Vikisözlük (Wiktionary), Wikimedia Vakfı'nın projelerinden olup her dilde özgür birer sözlük oluşturma amacıyla 12 Aralık 2002 tarihinde başlatılmıştır. Vikipedi'nin kardeş projelerindendir. Türkçe Vikisözlük ise 2 Mayıs 2004 tarihinde başlatılmıştır.", "wolframalpha":"Wolfram Alpha, Matematiksel hesaplar yapan bilim insanlarının tercihlerinden biri olan Mathematica yazılımının geliştiricisi Stephen Wolfram'ın sahibi olduğu Wolfram Research tarafından geliştirilen bir bilgi motorudur.", - "wttr.in":[ - "Hava beklentisi: not found", - "https://wttr.in" - ], "yahoo news":"Yahoo! News, Yahoo!'ya bağlı olarak İnternet tabanlı bir RSS okuyucu olarak faaliyet gösteren bir web sitesidir. Ağustos 1996'da kurulan sitedeki haberler Associated Press, Reuters, Fox News, Al Jazeera, ABC News, USA Today, CNN ve BBC News gibi haber kaynaklarından gelir. 19 Aralık 2006'ya kadar haberlerde yorum yapılmasına izin veren site, 2 Mart 2010'da bu özelliği geri getirmiştir.", "youtube":"YouTube, Google'a ait bir Amerikan çevrimiçi video paylaşım ve sosyal medya platformudur. Merkezi San Bruno, Kaliforniya'da olan platform; 15 Şubat 2005'te üç eski PayPal çalışanı tarafından kuruldu. Platform; kullanıcılarına video yükleme, izleme ve paylaşma imkânı sunmakta olup medya şirketleri ve kullanıcı üretimi videoların gösterimi için WebM, H.264 ve Adobe Flash Video teknolojilerini kullanır. Genel olarak video klipler, televizyon klipleri, müzik videoları, video bloglar, kısa özgün videolar ve eğitim videoları gibi içerikler yayınlanmaktadır." }, @@ -9981,7 +10027,7 @@ "https://www.bing.com" ], "bing images":[ - "Bing сурәтләре - кулланучыларга ихтыяҗларына туры килүче иң актуаль, югары сыйфатлы сурәтләрне эзләү һәм карау мөмкинлеге бирә торган иң яхшы сурәтләрне эзләү системасы", + "Bing Images’да югары сыйфатлы, бушлай фоторәсемнәр һәм обойлар эзләгез һәм аларны күзәтегез. Илһамланыгыз һәм рәсемнәрегезне яхшыртыгыз!", "https://www.bing.com/images" ], "bing news":[ @@ -10133,6 +10179,10 @@ "gitlab":"GitLab — сайт та система керування репозиторіями програмного коду для Git, з додаткових можливостей: власна вікі та система відстеження помилок.", "goodreads":"Goodreads — американський вебсайт соціальної каталогізації, який дозволяє людям шукати в його базі даних книг, анотацій, цитат та відгуків. Користувачі можуть додавати та реєструвати книги для створення бібліотечних каталогів та списків для читання. Вони також можуть створити власні групи пропозицій книг, оглядів, опитувань, блогів та дискусій. Офіси вебсайту розташовані в Сан-Франциско. Компанія належить інтернет-магазину Amazon.", "google":"Google Search, або Google — найбільша пошукова система, що належить корпорації Google Inc., яка в свою чергу, входить до міжнародного конгломерату компаній Alphabet Inc..", + "google images":[ + "Зображення Google. Найповніша система пошуку зображень у мережі.", + "https://images.google.com" + ], "google news":"Google Новини — це безкоштовний агрегатор новин, який підтримується та керується Google, що вибирає найактуальніші новини з тисяч публікацій.", "google play apps":"Google Play — крамниця застосунків від Google, що дозволяє власникам пристроїв з мобільною операційною системою Android та іншими завантажувати і купувати різні застосунки, книги, фільми і музику.", "google play movies":[ @@ -10269,10 +10319,6 @@ "wikivoyage":"Вікімандри — інтернет-портал, присвячений туризму. Використовує вікі-технології і вільні ліцензії. Створюється добровольцями, зацікавленими в цій темі.", "wiktionary":"Вікісловни́к — багатомовний онлайн-словник довільного наповнення — україномовний розділ проєкту Wiktionary. Тут зібрали й повсякчас поповнюють тлумачення й переклади українських слів, а ще переклади слів і висловів з інших мов.", "wolframalpha":"Wolfram|Alpha — база знань і набір обчислювальних алгоритмів. Не є пошуковою системою. Запущено 15 травня 2009.", - "wttr.in":[ - "Прогноз погоди для: not found", - "https://wttr.in" - ], "yacy":"YaCy вільна пошукова машина та пошукова система, побудована на принципах однорангової (P2P) мережі. Пошукова система складається з окремих вузлів — примірників програмного забезпечення, написаного на Java, яке користувачі встановлюють на свої комп'ютери з доступом до Інтернет. Кожен вузол самостійно збирає, аналізує та індексує сторінки Інтернет та обмінюється результатами індексації в мережі, формуючи загальну базу даних, яка зберігається розподілено та використовується разом з іншими вузлами. За допомогою YaCY також можна створити пошуковий портал для внутрішньої мережі або пошуковий портал для власних вебсторінок.", "yacy images":[ "yacy:uk", @@ -10366,6 +10412,10 @@ ], "github":"GitHub là một dịch vụ cung cấp kho lưu trữ mã nguồn Git dựa trên nền web cho các dự án phát triển phần mềm. GitHub cung cấp cả phiên bản trả tiền lẫn miễn phí cho các tài khoản. Các dự án mã nguồn mở sẽ được cung cấp kho lưu trữ miễn phí. Tính đến tháng 4 năm 2016, GitHub có hơn 14 triệu người sử dụng với hơn 35 triệu kho mã nguồn, làm cho nó trở thành máy chủ chứa mã nguồn lớn trên thế giới.", "google":"Google Tìm kiếm, cũng được gọi với tên tiếng Anh phổ biến là Google Search hay đơn giản là Google, là dịch vụ cung cấp chính và quan trọng nhất của công ty Google. Dịch vụ này cho phép người truy cập tìm kiếm thông tin về trên Internet bằng cách sử dụng công cụ tìm kiếm Google, bao gồm các trang Web, hình ảnh & nhiều thông tin khác.", + "google images":[ + "Google Hình ảnh. Dịch vụ tìm kiếm hình ảnh toàn diện nhất trên web.", + "https://images.google.com" + ], "google news":"Google News là một trang web tổng hợp tin tức tự động được cung cấp bởi Google. Ý tưởng ban đầu được hình thành từ việc xếp hạng trang web của Google, được phát triển bởi Krishna Bharat vào năm 2001, trưởng bộ phận Nghiên cứu của Google. Không ai được thay thế trang chủ hoặc nội dung của nó. Tất cả đều được thực hiện bằng các giải thuật tổng hợp tin. Google News trở thành bản chính thức vào tháng 1 năm 2006. Hiện trang đã có phiên bản tiếng Việt tại địa chỉ http://news.google.com.vn.", "google play apps":"Google Play trước đây là Android Market, là một nền tảng phân phối kỹ thuật số các ứng dụng cho hệ điều hành Android và cửa hàng truyền thông kỹ thuật số, điều hành bởi Google. Dịch vụ cho phép người dùng duyệt và tải về các ứng dụng phát triển bởi Android SDK và được đăng tải thông qua Google, như nhạc, tạp chí, sách, phim, chương trình truyền hình. Người dùng có thể mua phần cứng như Chromebook, Google Nexus, Chromecast, phụ kiện, thông qua Google Play.", "google play movies":[ @@ -10455,7 +10505,7 @@ "wiktionary":"Wiktionary là một trong những dự án trực thuộc Quỹ Hỗ trợ Wikimedia, cùng với Wikipedia, để biên soạn một bộ từ điển nội dung mở dùng hệ thống wiki, bao gồm nhiều ngôn ngữ. Dựa vào ý tưởng của ông Daniel Alston, nó được thành lập vào ngày 12 tháng 12 năm 2002. Vào ngày 29 tháng 3 năm 2004, hai phiên bản ngôn ngữ đầu tiên của Wiktionary được mở cửa, tiếng Pháp và tiếng Ba Lan. Sau đó, nhiều phiên bản ngôn ngữ khác được bắt đầu và đang được phát triển. Wiktionary đã ở một địa chỉ tạm đến ngày 1 tháng 5 năm 2004, khi nó được di chuyển đến địa chỉ chính của nó. Wiktionary tiếng Anh đã có hơn 896.000 mục từ và Wiktionary tiếng Việt là phiên bản ngôn ngữ lớn thứ năm có hơn 228.000 mục từ.", "wolframalpha":"WolframAlpha là một máy trả lời do Wolfram Research phát triển. Đây là một dịch vụ trực tuyến có nhiệm vụ trả lời các câu hỏi nhập vào trực tiếp bằng cách tính toán câu trả lời từ các dữ liệu có cấu trúc, chứ không chỉ cung cấp một danh sách các tài liệu hoặc trang có web có thể chứa câu trả lời như cách máy tìm kiếm thường làm. Website này được Stephen Wolfram công bố vào tháng 3 năm 2009, và được phát hành cho công chúng ngày 15 tháng 5 năm 2009.", "wttr.in":[ - "Báo cáo thời tiết: not found", + "Báo cáo thời tiết: Des Moines, Iowa, United States", "https://wttr.in" ], "youtube":"YouTube là một nền tảng chia sẻ video trực tuyến của Mỹ có trụ sở chính tại San Bruno, California. Nền tảng này được tạo ra vào tháng 2 năm 2005 bởi ba nhân viên cũ của PayPal — Chad Hurley, Steve Chen và Jawed Karim — đã được Google mua lại vào tháng 11 năm 2006 với giá 1,65 tỷ đô la Mỹ và hiện hoạt động như một trong những công ty con của Google. YouTube là trang web được truy cập nhiều thứ hai sau Google Tìm kiếm, theo xếp hạng của Alexa Internet." @@ -10703,10 +10753,6 @@ "google play apps:zh-HK", "ref" ], - "google scholar":[ - "借助 Google 学术搜索,您可以轻松地大范围搜索学术文献。搜索范围囊括众多知识领域和来源:文章、论文、图书、摘要和法院判决意见书。", - "https://scholar.google.com" - ], "google videos":[ "google videos:zh-HK", "ref" @@ -10747,6 +10793,14 @@ "library genesis:zh-HK", "ref" ], + "mastodon hashtags":[ + "mastodon users:zh-Hans-CN", + "ref" + ], + "mastodon users":[ + "详细了解 Mastodon,一个截然不同的,自由及开放源代码的去中心化社交媒体平台。", + "https://joinmastodon.org/" + ], "mdn":[ "mdn:zh-HK", "ref" @@ -10884,7 +10938,7 @@ "ref" ], "wttr.in":[ - "天気予報: not found", + "天気予報: Des Moines, Iowa, United States", "https://wttr.in" ], "youtube":[ From 198928de05da4805addfd3958ef63c6eb2faf612 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 07:07:33 +0200 Subject: [PATCH 02/82] [data] update searx.data - update_engine_traits.py (#4741) Co-authored-by: inetol --- searx/data/engine_traits.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/searx/data/engine_traits.json b/searx/data/engine_traits.json index 950cf257b..6f80992ec 100644 --- a/searx/data/engine_traits.json +++ b/searx/data/engine_traits.json @@ -1684,8 +1684,10 @@ "custom": { "ui_lang": { "bg": "bg", + "br": "br", "ca": "ca", "cs": "cs", + "cy": "cy", "da": "da", "de-DE": "de-de", "el": "el", @@ -1695,9 +1697,11 @@ "en-US": "en-us", "es": "es", "et": "et", + "eu": "eu", "fi-FI": "fi-fi", "fr-CA": "fr-ca", "fr-FR": "fr-fr", + "gl": "gl", "hr": "hr", "hu": "hu", "id": "id", @@ -1786,8 +1790,10 @@ "custom": { "ui_lang": { "bg": "bg", + "br": "br", "ca": "ca", "cs": "cs", + "cy": "cy", "da": "da", "de-DE": "de-de", "el": "el", @@ -1797,9 +1803,11 @@ "en-US": "en-us", "es": "es", "et": "et", + "eu": "eu", "fi-FI": "fi-fi", "fr-CA": "fr-ca", "fr-FR": "fr-fr", + "gl": "gl", "hr": "hr", "hu": "hu", "id": "id", @@ -1888,8 +1896,10 @@ "custom": { "ui_lang": { "bg": "bg", + "br": "br", "ca": "ca", "cs": "cs", + "cy": "cy", "da": "da", "de-DE": "de-de", "el": "el", @@ -1899,9 +1909,11 @@ "en-US": "en-us", "es": "es", "et": "et", + "eu": "eu", "fi-FI": "fi-fi", "fr-CA": "fr-ca", "fr-FR": "fr-fr", + "gl": "gl", "hr": "hr", "hu": "hu", "id": "id", @@ -1990,8 +2002,10 @@ "custom": { "ui_lang": { "bg": "bg", + "br": "br", "ca": "ca", "cs": "cs", + "cy": "cy", "da": "da", "de-DE": "de-de", "el": "el", @@ -2001,9 +2015,11 @@ "en-US": "en-us", "es": "es", "et": "et", + "eu": "eu", "fi-FI": "fi-fi", "fr-CA": "fr-ca", "fr-FR": "fr-fr", + "gl": "gl", "hr": "hr", "hu": "hu", "id": "id", @@ -7100,6 +7116,7 @@ "BY", "BZ", "CA", + "CC", "CD", "CF", "CG", From 1319b250af3e7049cb3e60495877630f99832ca4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 07:08:26 +0200 Subject: [PATCH 03/82] [data] update searx.data - update_currencies.py (#4740) Co-authored-by: inetol --- searx/data/currencies.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/searx/data/currencies.json b/searx/data/currencies.json index ad63a0981..09bee0ea0 100644 --- a/searx/data/currencies.json +++ b/searx/data/currencies.json @@ -5253,6 +5253,7 @@ "ja": "ソモニ", "ko": "타지키스탄 소모니", "lt": "Somonis", + "lv": "somoni", "ms": "Somoni", "nl": "Tadzjiekse somoni", "pa": "ਤਾਜਿਕਿਸਤਾਨੀ ਸੋਮੋਨੀ", @@ -11918,6 +11919,8 @@ "tadžikistani somoni": "TJS", "tadžikistanin somoni": "TJS", "tadžikistanski somoni": "TJS", + "tadžikistānas somoni": "TJS", + "tadžiku somoni": "TJS", "taĝika somonio": "TJS", "tai baat": "THB", "tailando batas": "THB", @@ -15675,6 +15678,7 @@ "チュニジア・ディナール": "TND", "チリの通貨": "CLP", "チリ・ペソ": "CLP", + "デジタルルピー": "INR", "デンマーククローネ": "DKK", "デンマーク・クローネ": "DKK", "テンゲ": "KZT", From b3b15ecc72e248f90b1a6a8fc936c05dcd456f9d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 07:09:00 +0200 Subject: [PATCH 04/82] [data] update searx.data - update_ahmia_blacklist.py (#4739) Co-authored-by: inetol --- searx/data/ahmia_blacklist.txt | 574 +++++++++++++++++++++++++++++++++ 1 file changed, 574 insertions(+) diff --git a/searx/data/ahmia_blacklist.txt b/searx/data/ahmia_blacklist.txt index 6c3b52081..065bd8208 100644 --- a/searx/data/ahmia_blacklist.txt +++ b/searx/data/ahmia_blacklist.txt @@ -281,6 +281,7 @@ 017e92cc00a00712dcef6697d0e5fac5 017ea75d8af1ce863c8748b4b761d8f3 017f5502f2a8bba70279c6a12ad90c4c +018090744baf5fc34085beefff4594a3 0181c90bb905e2f2d637f9af0f03357c 0186824daa5a342177d0e6e0e81f2df4 018d457c6524fdb9be16925a28dfc586 @@ -289,6 +290,7 @@ 019268dcdfe754f49a58b9f200d3ede3 01926ca3f7c976aa5a1684bd68a9b6d6 0193165bb6c1831dcb887ae66bf6613c +0193476b826728f4638281db18354a55 019664c068a61b955b1df9fc6a633da6 0196f878b3b635130c5bb06b037153a1 0197260635dfec18d1ca367413fc20ff @@ -410,6 +412,7 @@ 0237a2a6c89af12b8a625919d0bfda95 0237aea765f140473e9fe755335f70ee 0239a0318e9ddd9f807ea58293e78922 +0239eae60556b081b7d83a42fb64dd81 023b5266e6ea12658ef0ffa7f8d0673d 023d564a134e0b2e728f96a8a8f14a61 023e19ac0ed7b1e114c58e3231feab51 @@ -430,6 +433,7 @@ 02510ee040d9763651b8d7e85883c466 025149948494c8adfd4cb589510cb108 0251da7034024e7f4a38af608d6a2717 +0251df6c4de395e40201f49f460af671 0253d36abff6b07a63e76f6936eb225e 025511df343ea2bf7451edf96a1177fb 02551fd7b9390cd9d5221052b24d0c81 @@ -481,6 +485,7 @@ 0295234924c5e11f293d34e9d449cba0 0295ea4ab97988b8145ae756937435cc 029778e7a2c43224635d8315151870e5 +029aad6a569e9e5aaf05ef93c9197784 029b98a25eff95a2c409f317c52bc2a9 029bef519d3fc5e7e471dd61c9356e05 029ca164b97ce75db17ebd4386cb5db9 @@ -521,6 +526,7 @@ 02cd5224f0b11ca5c1e7dd14fe67b40d 02cdcc8e338403df6d0875f129011649 02cf7f4e4d0a4ee49897e51a29da0978 +02cf99c70c3bc4257d281b274c0d07bb 02d153b5d18b4c5fc5aba1fc1703c280 02d1fc9174dcb337d292c7b81869aaf9 02d365ab29e8b7276ed22350040f5905 @@ -705,6 +711,7 @@ 03d359f96d077523ca9b82bcc2f22f02 03d39ab7fda801edbf791c9a9661e7c2 03d3c450b23b8b90e015d89bd42f293c +03d49cc63a9f1da120c988ca6b5d3d7a 03d5bbcd0641e99748e70539e0dc40cd 03d64d9540a7b18eb855d8d5f6442bfb 03d6f6f5daa8c50c2fe50e46a5397353 @@ -741,6 +748,7 @@ 040b1594e483e0e5623df95d78ed0801 040b16cef6cb20f66c3bcb5398118014 040b63af1ee7cdb3ab57f2ee30638f59 +040ba74d47113a820659feb5abdd77d4 040cfe38ece05e5c7de6d43a41682037 040d7d4984953ea541d08362bae2dee4 040dd591685797776f2da7165a15972e @@ -810,6 +818,7 @@ 045e292803fa0592bfc2a2eac71ce779 045f2d5b46df7a53abfd46aa254c956f 0460e8c3bd1a58494564175d270bab19 +0460fec95c38549f0aad84f1c995a3bb 0461b57407074a3669678688b534e871 0461c0e21f34c4370d52e76958423d4b 04642d922653e7e213160da033ff9f97 @@ -985,6 +994,7 @@ 053551b1051c9865fb4d4739396a5eca 05371fab725f9e2e738108db37129231 0537ba79d7cd3f07721ead8880c95181 +05388659ef5f396e1fe5c8294dcc6171 0539087dfd4bc73a62c2f7ac702a8c32 053a2fe5ecee31406d100ad7a42ca662 053d32387574374a56bece32d832d7b3 @@ -1009,6 +1019,7 @@ 055520ec2d5211c0e78bb516117e840c 05566799cd63295806cf3667512cc9c4 0556db1a07773e58bde94cbd16c3daa9 +0558eef44ec9e409c82baa8c1e6868b5 055937b766b0e6f1d3b33f12516aa2f1 055d1dabfef42f7cd1404a9b216f36e4 055e0bb219256386856f1db814f7ce25 @@ -1070,6 +1081,7 @@ 059cdfbad168430463e0597bec379277 059d6a9aba919477190df0b2c9b0e25c 059f4a3e3bb8d2e372653931ce9f09bc +059fab3051b534cf60ab19e0e8ed021b 059fba868ca054ff23eebe0a35f28bfc 05a13f7cad45dc61bb6d415cfd75af6c 05a218b4ae7618224e393ed460e2bd38 @@ -1183,6 +1195,7 @@ 0631de42031db6c69feca430dea9a227 063361c9dca15402b70a50c604752977 0634712bcc72d2f52c490974c856d7a5 +0634fba67326d8bc895041f315bf375f 0638ca766968bcb67123e52dd6d1f8e6 063a4795e0931d03eb98e67d7f5e19c0 063aa7a16661c50135807d30e6143c80 @@ -1322,6 +1335,7 @@ 0706ffd0494fcb7794f5e864e02fcf9a 0707454c84e71cba27196ffebe49e019 070a9e168cbcd72f190a7ed003562f55 +070ee379dc66d4ac2b01a74ad5ce77c1 070fadb607382d5726b25820d8dcf50b 071167494bfb69a9bfcc2dfb7d96606a 07149eb3e28b5819894f3b22bd610539 @@ -1370,6 +1384,7 @@ 074bf8d9adeb26d7975556b5c0014d1d 074c181e3498a4bcdf30f033e7679958 074d258ca6750e452e242fd525300c42 +074e15293e8422a8396b5f149d41399f 0750bdc2f24155818f1a959b9d836bf7 07539928a2fdf1fdbfc77d4e2d832944 0754a6e532c14ae013aaf01bd20b91c4 @@ -2109,6 +2124,7 @@ 0b8cfd93fe4dd0f643370f6c9caa67dc 0b8e9ac77a674639c8f4593d81cd7c09 0b8edf9f2e9a4505df68b76f4336e3e4 +0b910a678d456b610b52d201a8e4290d 0b915ca360598cdbca8d3782e5f58915 0b927a66d561997e80ca09004dc10438 0b93995ee5285d94b89d9784e0ca189f @@ -2151,6 +2167,7 @@ 0bcd9fcdab4c8029dc8e3de596806f40 0bce5c42a39d2e960e7f9d262db42ef8 0bcedd354bef36a8b803819a7e6e7dfc +0bcfa86dc912fbaba882427695552c20 0bd081f954e2002edc25caa206ab72f1 0bd1758497d81aff3014bf35a5495a32 0bd1b05d877156c43d8aa7866c61963b @@ -2276,6 +2293,7 @@ 0c67143172522181e63f95d9a4edaa5f 0c6879486ef604dfd048402254753d09 0c6b6d6b341f6964f2d33c474bb23050 +0c6e1207875ab4a724fe5ee8dd259330 0c71f4ede4c51545fcb1be85afa88b7d 0c73883c07ffa1f942884552e7c442aa 0c73935bb9860e88f484ae69bee11628 @@ -2336,6 +2354,7 @@ 0cc873429b5a9e19da7dbc8721c409e1 0cc9e6c51cceefa0c99b68e8b1bd8ad1 0cca0ff030356b8184164364342b01ab +0ccadc31c971538858bc68fe8075eed4 0ccb4456c8ec829324588c512caaaef8 0ccb730d9f4d2ee3aff4bd828581caee 0cced2248764cec99bac10722a7d3502 @@ -2386,6 +2405,7 @@ 0d06dd373d6b3c9818a3465ecd206ed9 0d074a97792cf701e968fca2e3db3a70 0d08e33a2fa2b4a6e3064779664f45ee +0d0a1f09723c5b304cf70b766be6cdc4 0d0bc9d1717dcca0e8e815d6bb6b4faf 0d0cceb7e0660d4bd08600ffea73b9d9 0d0f4f4e0a493ac6aa9de96389a94bb1 @@ -2563,6 +2583,7 @@ 0e00c38ac0b59279f28304949374cb78 0e00d2cb68ff6017954ddf9f489cbdfa 0e00ded4f49f96716694286b3d5e4416 +0e01049ab1cbcb5f32bae1a721112c5d 0e0621cbcec26d5ac880f6c8d66a0a4d 0e06d8d041c4ecd8961a16f8fbfd2666 0e09a6fa5e3b3d450c978fc8866fcc1f @@ -2744,6 +2765,7 @@ 0f174477f8c05fd175cf605009f41b41 0f17a4d379d0581352759f09e7d34e1e 0f18d2c9bb0b5aef240b37cdb0c3cb54 +0f19ac9447eea9eee30642b8ae9005ba 0f1a246eafd308ce41edb34afb130405 0f1bb396428aa8eb2c1b04309353d37c 0f1c23b881c82eb675b7fa96dd3cf7f3 @@ -2781,6 +2803,7 @@ 0f45b70a442b922ef6634fc7cc413b4d 0f4698cdb717cb9e9b814ec527f6960f 0f481fc9433874ead0a8f2cdf8e6e5d5 +0f4ac90d734197a6f60891c888a3d88d 0f4b710001cd502f52d27c524be8c893 0f4ba4f19f100b9d34704b014699ef1b 0f4d8880448b3c7ac3b15cf29c78fbbf @@ -2870,6 +2893,7 @@ 0fb9977a3365f8d30eb716a9cb35f598 0fbb7af3be9fb10bd72ba29503c175db 0fbcc3fc962b1e1a6201ec2c8ba72ae5 +0fbd0023060764367fd88a192a81e6a1 0fbd3b0b31f6bcdb63e40b9f135f59bb 0fbfd6a58442e8420dbdf26e62bda4ce 0fc0aaa779399d445e252c799b90adc6 @@ -2969,6 +2993,7 @@ 103c1b3e50a1cda3e367d6020cc9256b 103c50fdbb304504f47b3736b45ac287 103e8d928e921fe4436a8f3d8e093fcf +103fc01bfacffda369a57cce35f8c2e7 10431ad021124585f041f5b426d65305 1043f7908d65e73b1d992a6875bb9f28 104540b30d0024beb93eeabc982e9fe3 @@ -2994,9 +3019,11 @@ 105ecc8793e890b323919be51708c28c 1060f6bc06f094a6023d9e0e41a2504c 10615e3321b8f3a455c98c396763b8fd +10615ef7626b4e66158e753238b6f88b 106181e32c5de4975d832a46f48dca42 1062bced1ea710c11244b13cf8d7b17e 1064695877400421a5233e9a33c83621 +10656716a20ad065c87d8d9b66c6f6fc 1069ffbae0ada1e5e8f98e390ad32668 106a2f7839c8bb01360fa078e5de1d2d 106ab8b23af532aac0f62509b1217b0c @@ -3021,6 +3048,7 @@ 108e25fb3110c5a60ad195702e249941 1091d6c37835cfaed0a3375cbc279a5a 10922725021cb8d15dcde1d703539dca +1094ba2efd40c218a9193392631bd0d0 10953298b4c50836fc6044d036c1bfa1 1095854de6bbc5460773c114ecbb4344 10972140f2c46fa30a81d3b64dbc8600 @@ -3135,6 +3163,7 @@ 1140d5d81d191ab79061e4df70f8e12b 1142356339b080ee6d1d1d0e698e9dee 1143b6ceb4ad9e9c96ea3d9464fccfae +1148b6aabcc47958c4d66d1fe2c425a1 1148c8da41ec54e7649f15dd2789d354 1148fab573ff764eca7971a0516474c7 114937fb38cfb38e2ed2e6e174de2ffe @@ -3227,6 +3256,7 @@ 11ae156a442fe6056b20f6601d84e6c9 11b1f8ca9057d08ab86bcc5621e104a7 11b2cd116187674d06a4af2a2dd3f3ab +11b38082bbce1cfffd1b826b4dcf59d0 11b571cc9b10ed332ce8a38b90336205 11b5ddb83e12a84d169779c5f3887285 11b5f1c0663fa6b9df6e4520110b6356 @@ -3322,11 +3352,13 @@ 122df0a3ca6f9db55c77f32198dc0a5e 122ef8f7a3818ba70974370444072115 122f6ee756cc0c7e1771b8b0d44244aa +12309a2dbea3a37235383de9ecd7cf7c 123178335d099f74bb0cbea788b4b596 12319f8b167b4518f46896572aabbad7 1235d41848a9ffe79b6d9cef78d193c5 1235df8cc25dffb92a9dbfb8c90ee4bd 12367b084cdd3c273c2f7b03813a174a +123689d9a7ea193b4052e926122d841f 1236ad99cb04273933925ae67abd9186 1236e3aeb055cddc8fbbc3ee3f6af163 123844f914ef670bf895bc0cb61363ad @@ -3481,6 +3513,7 @@ 12f0b1674d6539d8b148fdfb64d3f96f 12f56ce670c0ed8dfb2fd43614048843 12f79288ee2498546e1b12565ef724ef +12f7ef130585307cdc9cc2deab83ed64 12f819939b8e943c7ddb967659f5df21 12f8f084b3be4ef72978c51d4efecbb1 12fb9ffb8c9476875d9001ed31b4b761 @@ -3575,6 +3608,7 @@ 137b3cbe8de0517e10d3fa5722c79026 137cabaf7e7629f15f5bbd7ad0495c35 137ce9af72744585d439eaed4d15bc79 +137e4cd9f8494620ea524015fd73daf9 1380066b7e825e0cf7c62cdb7c543b44 1380bfd9c24b5f93c72937076b27a47b 13833267b90d16a7b73cfb69a6f9e25f @@ -3599,6 +3633,7 @@ 139b8eeb57d114d4354c4355b4915479 139d25d33ed8289658bcd0d67da22a25 139d48082b95b1528dca723934c6e4be +139f11aa95f2acd87398c0f9b24c7471 13a1cd670d87311c4f471954781074b5 13a2beefe4c2bb687baebdb1a64f47ed 13a5a929e76217372728a42a84b0957a @@ -3785,6 +3820,7 @@ 149d9f97ddb6f5deb2c3099914d1140b 149f2eab69b695807832632ee08732f4 149f71c4aae331cf892da478debf26f5 +149ff6de118dd9762efa3cb886a016c2 14a039ce827d7bf4e504aebd0bddb125 14a0f93d6bffc0182bc646f5e8ecf6a1 14a4ec7c339a977aebc344550779ca19 @@ -3857,6 +3893,7 @@ 14edafd5c6391e74788cf3ba9a0b2f27 14efcf35b9cbb7d4c5d5447a29f78950 14f174c320d7a824992b21ac2b388723 +14f2a0cb23c7e1a2043310051f452231 14fb8fb5d1f7e4dc50dcc0ce084b1708 14fc04ed60606cba6ca541e49e5e7499 14fe56e8e7d934ba9812164c7ec9369d @@ -3872,6 +3909,7 @@ 150b732f545072d1b27af3b1231b2a14 150e66984bdda26ba43b87a05274e45f 150ef1b319400eaacb3826cd3130d1fc +150f472d5ae487ba367b70cc4a565fd9 1511567dac80dc4b8f563fe88d8889f6 15126b7c1b952a1179cbac0b010da86f 15128eb995ae49cf95ca5da13ec42d6d @@ -3980,6 +4018,7 @@ 15a4e5320f7c3c3e8eb7694ed4ce9559 15a5d3f458f739b0051b1cb5a317b45f 15a625c09e0dce14bf5925e22c50521a +15a7be26ec59c5dace910ca000e96077 15a88324971ffc6f0af4461dfa1f3fd8 15a8bae01319ac1a4ea7bf89ac892bea 15acbe80a639f405d6eb8351a20112f1 @@ -4015,6 +4054,7 @@ 15d26b45ea91150981cf2d4451f800f6 15d37a8a316db7b92d795b81f25cfa12 15d3fa4455b8ca39ea665645e112e9aa +15d4f36c3ee4188612eff8ae4aadfd70 15d56e13ef3c975e3b0e80859490d761 15d6ae3006eef7cb1d85ad4ba6794fc0 15d7b5add3cd5c8e9012141207868393 @@ -4030,6 +4070,7 @@ 15eab61287d31deb8bb4c7a37c1a3c27 15eb5df70c6fe86ecd1ce7105d096508 15ef07ac1045929584cee057dbe4ba51 +15ef0ab84d984f0130d8c3ff42c45ca7 15f0604a4339533ff85eaef033236c47 15f3d66f5f99469a739f2df914d2b3f6 15f3ff26f9bc8e910959adf9c06741c9 @@ -4054,6 +4095,7 @@ 160b6f336f8ba280967322139c20f623 160c26220d574f28ea8dc114ea193de2 160c89ee1780ef5a80067534c581bb21 +160cd1c5b3465f3bcb03d1dd52702345 160efdc4011e235b7240fe4a7405a9b0 1610a90ad75f9364e26ff203167d1a49 161574ce4ee51e4a6adf802f3d0d6a04 @@ -4102,6 +4144,7 @@ 1648c873ebe775637389b1c61aabf30c 16491463927a635940548c4292cc8e09 164ac234e744c62dcb3b5994dab07009 +164e7f0642f1c8f9606add19ee3dc0f0 164eb5ec53f7929eb73a605a3fc35e22 1652309be7e2a093125b0858551ae7e4 16545275331852b182b785574b2bedfa @@ -4179,6 +4222,7 @@ 16c51e5074d2fe489be90920ee8fefb0 16c6aab1f0b6f3aa49a6e24dbfb94143 16c70db0bd155f19ecc023f7c49e80a9 +16c9a69549abf588c4a820d1f7c0bc85 16ca4632eef77a2de779dda4bbb9652b 16cce6b5eaa101e6c8dfe46ee2366a57 16cd08fdab4547ac2d1d44c3cd88ea4b @@ -4310,6 +4354,7 @@ 1782151c47e1c5b3bad69b5ca952ae33 1782d67b2f8faa980d48174df6e4a3b7 17830b5c59abb2264be9c4d842ffcdb7 +1783a90877b78e75159eb6595488dd50 1783f3ef85bd2fd2dc0df47acb3f08b9 17845a31c8588ae6612b581305fb7740 178465e6e5c84972fa7133cd08f45d42 @@ -4430,6 +4475,7 @@ 18279bee4da57ac2ae481eda3ab3579d 1827b7bf3646b4a9ef24d341d982c6d3 182943810271a8b31bc054e81842a958 +18298e3938ceca3d4fb6681416500c0e 182a4376a023898addca510a35681ed6 182bb69e4002aa8137c66e0a826e0345 182c1a1ee7d51988209fd100ea4e6c31 @@ -4591,6 +4637,7 @@ 19184f44edc9782eded913c58e7fcd68 191a9f43beb3c165b5f553b37c8fa150 191b4b4321637ecf8e5101270d1ba0cb +191b8511ab39074696af102018a95efd 191ba67816fe474d9140980689da96fd 191d5b4806849276a244124279dd157f 192059b32b84b2a7acde113edcca3f2e @@ -4639,6 +4686,7 @@ 19623f30642bb749b7ee9d871f84645a 19628138ffd3d577cc33685fdca61448 1962b75b49516bb0ef6f9be2cd86cb71 +1962f6efe35314ac76df240ef2abc6c0 1966cbcca4b700f0065f29e1eb8cee53 19685000056ec5a5cde4f27145babfc9 196888668f23efb945f71799c927f804 @@ -4672,6 +4720,7 @@ 1991bdef0eef23d9e8269dae57443a34 199228d6924d7cb42dbdc0d4c6acd8a2 1992cc9f1601259bffd1e9a667451163 +19931b4eb53a8c08b838c4c72905d50f 19933176503469ea2225b164ca57151d 19936431642e42e2fcf2b0115415af4c 19938917c6a7d4ced1de07cc572384da @@ -4720,6 +4769,7 @@ 19c5423f4c97ed28e2336fbc90d426ed 19c5a36397a7876c3fc289293cd63aaf 19c5b0ff31d7713b55c7ecc39411acd3 +19c96deb8abc5e3e591196a6dd24cd29 19cc97d219026a79f12151e568ffbb07 19ce15a12e3200b3f16401fb32a4871d 19d1005599ea3ad67b6209ef9f1cfe21 @@ -4796,6 +4846,7 @@ 1a32885d66f2e548310a42036e517365 1a32a1d7099b4f4376a88e7586c54411 1a34fefdee3987cbf2d7b5aad0f5751e +1a35c500e1b805a87c360492b806a52b 1a3954f5fbd36f4dfa3da561cf23d6a0 1a396679c328731354e417809359f2ec 1a39a0ec0794f2ed2bd4c9acb8d658e5 @@ -4814,6 +4865,7 @@ 1a4e0bde9db01bab99f9e2d60cc2b661 1a4ea41bf6924cb5ca686afe35b63eb7 1a4f388636baec36c982fe4100f059e9 +1a559a3e14defa1a1caaeaeaaf0c1a40 1a5631e9f8736a95dd896d4dd3e6e552 1a57bde9dfc97c119b7f727d4e9339ae 1a580c17bd0617cf2b34a4b9aa43d625 @@ -4824,6 +4876,7 @@ 1a675e70f8a0eba58d1ed880f90c89fd 1a68398ef3a78c9681556e85765cf62f 1a699dff1386b278b45773311533ee09 +1a6a6cb4d29b28e85bbd6810d6feebb7 1a6ab54b89d906815701f175fb89c010 1a6c04adba6f524daae4b8137b178dbd 1a6c774db819a8978427c51a8f352faf @@ -4964,6 +5017,7 @@ 1b28acf6343565ad52e7149b2f8ba4aa 1b2a5019671e376322ed75ba1e0e8eac 1b2e51fe21346278fb4d71bc99569623 +1b2e8655aab00aecca446a1141bc7c02 1b2f6a49fbb2bee6311cee18ba53bd8c 1b3137faafec24c449666619f6eb51d8 1b31780942396dfc6adc5decf1fac6b9 @@ -5125,6 +5179,7 @@ 1bfe3ab9a6252adddf1280631a6019a6 1c04b3869facd70bdf2a85262c23e69c 1c055c5c2d102c4f6d5903d503edd5e8 +1c07452402fe9fd9aece83ceb3d80e65 1c07fe5e140b11f02d4c2f3594c17933 1c0a0d324264c3d800e485ca61cd04e1 1c0ad0bb3809c575b9bc38e2a3d5bad2 @@ -5237,6 +5292,7 @@ 1c8fb92506ba913c0fe6a39e60657ee6 1c8fbbe22c8752befeceb140a81103cb 1c90b202827b0d76a7de09ac4f00198d +1c9211a4eb59d7c4ad8584c3e7a9b8a8 1c92e4d014906eb71988dec66a41a3ed 1c932c9da538d2be2ca5565784797f6b 1c94f52b720f609a5123aa89dc7e5c16 @@ -5290,6 +5346,7 @@ 1cdb1ada16755b0236170046c905b509 1cdd7a12a1449261647b39d6f5013998 1cde3de76a0d022ba57ec906edab962f +1cdf150e55d1e8346f75c48022b951bc 1ce062639cd38028b59ebaa1b01cb243 1ce083d4c64d5836cdf0aa30465cf21d 1ce0fc97c4ec8f0e1e70ea9c6c1256b8 @@ -5361,6 +5418,7 @@ 1d42e3201fd8aae04d7d1e80c49448b2 1d438bd396423723c1375d738fcfd278 1d438da705fc6782669e900efbc540d8 +1d460a5525b394b42b5e620f5c6eb09f 1d46a46a987be1c8c5542a910b513a94 1d47a4794fcd384564c377615eda39a2 1d486fd31e37ad8262371087d655f121 @@ -5426,6 +5484,7 @@ 1da0aaa3f33fe287b547ea5b5c4cc51b 1da201cfaa837d004c8cca53752b76d7 1da292e66cba40b335e70696b16754e3 +1da34b1068b5bf4c74d70a191c5d09a9 1da35f495377a8aed61726fbe1864709 1da3d71c665b0aadacf8dadae4d4b0dc 1da617efaa96724f260aa84794256adf @@ -5594,6 +5653,7 @@ 1e8e0c9a5730e0651eaa51487301acfb 1e8f0cc963b1a71fbfb0d4d1d7d898ca 1e9059a262fc537c8f19c7a9b278d771 +1e92f4fc3dfbfdacb666899d5ce11a8c 1e947743b71715d9beed9ab793c62e07 1e952e353e4f5059ab3dfade3f7e1f85 1e95be07269e650a3e9ae359d457d3d7 @@ -5663,6 +5723,7 @@ 1eda4cbbd48cf6d75256d0a3da0c4a0f 1edbbfb702d2ec62e77c6729ed99ee3d 1ee0396eab263ffef8890caed4dfbf73 +1ee0c375cf82dc0be2314be28113df4e 1ee1922995580b8c7b629f53a278d987 1ee1fef2a7bb2aec6555fa228776153f 1ee2485abb3aed5035cf02f87678725f @@ -5841,6 +5902,7 @@ 1fdd51882eeadde0da7c447fe73dd5aa 1fde82611438429d6126b29bc03c32dd 1fdede147c30d7e14728acb319ccf201 +1fdf6d639379441bb1151841b3f8dccc 1fe1e757e096f9370644e087bbf777af 1fe3040a878d88cebfba57361fb873c8 1fe46075f62bb3e9f49e33ddd1cce506 @@ -5864,6 +5926,7 @@ 1ff8d711e706baa0a474600c219f70ab 1ffa13a98eb0498ed42de9818edb79b4 1ffb6ea9374c1b33ed83eebc8aa66f81 +2001f5319b92302d7aab13385544cfc9 20023d70f06ac93faa81f667cf9ee343 2003ed2266406e1c0226dd5fda00eeef 20076b6dd002d850c43d15180aa643d5 @@ -5873,6 +5936,7 @@ 200b0e63e7a10609b618cbacd74f82e0 200be7cbdb78ab6f970339adbc2fd044 200c7c5f7c9bd6759853973beeeba97e +200c8e9ee738cd54bfcd0eaeefb14673 200cb46a2ac2d62c228279ca95bd82c3 200cd1bd89c4839e26dc503cb21f7bf4 200ddbe47af6fbdb5d84a6f2bd5f10aa @@ -5907,6 +5971,7 @@ 2031ea200b54a11819b4e0260f18ffbb 2032917cfefd559a475674a2e0c15cb6 20334f6268f738e6f580c1aeae390756 +20352c20f24b92f37fd3ec5395fac4ff 203667e1e231ab9df8c8f596ac0fac0c 2038239340f5e02b7979e318a88f0427 203b258d98e996cd59bde3bc2375fdbf @@ -5940,6 +6005,7 @@ 20696ccdd8bf09614cc864ed79e2edeb 206b2c1bda712ea86bc402e11d2bcdc9 206ce0d64a144c2678cb48c9cc0f8d27 +2070066f393972bca968988b9a0a0d14 2071e60366b6bda848ae10a9f9dbab76 20727b841faef8d1a730e44f5254ab0d 2073d36db06e2e9422dc5bdb41142ee0 @@ -5948,6 +6014,7 @@ 2079d44b78beec6e38206cec349d6857 2079e24da23414d76155da0072ec9b8a 2079f83d7b23dacebca26ab3848d22bc +208105ebff5d826a84b3c9818cd88031 208117fc123566fad78975d6f3415157 2082b3c4f16078c977954c00118fa346 2083d21503ba79866d8463f1960f9b17 @@ -5990,6 +6057,7 @@ 20c1d2c596420e8387f5a5ff51fcbca9 20c27ade1612e6044b4152a14711a5b5 20c316d0bf8650b38dc3e5c1debc24a2 +20c9a0becf8d428eeac3b532df990aed 20cad468bbcb7bb0181f65aac6ab9c14 20cbdef72db328da2ea90906f8aef33d 20cbfe99d235ed8aaa3aa5d5b6653a1c @@ -6052,6 +6120,7 @@ 21227b662da65688bc3c15c7e94cf00b 21229f2071cf7ae2739996e401d9a641 21272dd4c026acb0c9210b184b2756c8 +212a910a38f75020f7c9ba0be94dc687 212fd99d0b7a19cc22f8d6d32d2e1770 213306be668d6f53f76f6075776d22a3 21357e131db974b68ed284f1b4dc0636 @@ -6081,6 +6150,7 @@ 21559046f43daca26e163cac26040540 21563c427a1b62b7aae662c7cc9c2b08 2156acfa88e045d79692d407dcb8c34d +2156c0885a763fe58a75b14f93418dcf 2157cee948f95f8ab3a57168c68cd3c9 215a57621ba94304cd488a994e065e6c 215a9d041ff620c62e2b32c771b9f434 @@ -6107,6 +6177,7 @@ 217630ce668d5317dbc7a8248337a521 2176e4fb6722df48bef98b27650046e6 217722e245d3502b156db853c73b7b17 +2177e2b99d89bb2509e1d3babd1bf199 21784c5b00966e217057e37443898c5f 21789af6c870a60cbed83e64cf3e5463 2179e64ed18109a91bb3349c5e015880 @@ -6143,6 +6214,7 @@ 21a2a6dd9476c7ee6588db24ae386bfe 21a2d7f44cbce5ceffc9713a3c2c1f00 21a3760684d10a38b6ca18ec7ed1d68c +21a4198eb99331dc649f962cb6b5caf1 21a49dbd01826abf1c14a25c2d452922 21a6f227d005e149b9fb63bc4e373311 21a71c5116cfc9e9a7eebd2339f008fb @@ -6224,6 +6296,7 @@ 221c8aca6ec19c5a39e98ebf092b3ec9 221cb33d55aa7d52f07384f7836ff7bc 221e470297292f295f2220b08c6fd437 +221e6501ea117b5b084b1d3ef29da331 221f9aeabe5cb2dc4a6f3723e129d990 2222cba5a560d521cafca552a8987953 2223961f712004723d6f6bfd72ce54f7 @@ -6365,6 +6438,7 @@ 22d81c5bc4012d4b59a7c62d005f1890 22d8995c31055a1409fd937f92014177 22d9ec59c05cf3ead23cd3b096bc4d7b +22dadf58767aaa5d18d6f634d2aa266b 22dca800598a397d7832f54c190945d8 22dcd9935103b15a641cb763a31be58e 22de4b59a4589c4a9b0bc6251e1adbd7 @@ -6406,6 +6480,7 @@ 231cbe13256f9ad28d9b216e43c5b39b 231ef57d545ef1b468acaf87abd7f655 231fafcbffdf68c12dca6af38045ad6b +231fd22775d5a763628599b5801f4ef1 2321f4b46610c622e2f496f0ad8fa11f 2322d6d277fb3719d149ab59e1a421b4 2324d6d85d2136343bce2cfdc18b004c @@ -6417,6 +6492,7 @@ 23276172e1cbff855bdbe336a9f29c25 232783b28e157cf4eefbdb43c0066ef4 2329ce56e5f962dcaf9fa3515bce46b7 +232a2c2de9e72328b381ad6a4062a276 232ae709ad110cafdb6e42a381348c95 232be09b663b7e06433503145624acb2 232c67121a2b1c7044e331209b39ca7c @@ -6461,6 +6537,7 @@ 23629fa24f9e127ccf5c674c20f28167 2364e8462945adde9b041e506f24acbd 23655a0f04b06ee4e67d0d95c00148dc +23657ec88157711235f8a9b52351dafe 23698e1d9c4ced0c960ccc0c275043f6 236de1c21a89c567837752013eb5ee23 236ea4fcf59a70d632c6547a3d0451d1 @@ -6479,6 +6556,7 @@ 2382887d60d744c3c01cca3a4f928e07 2383a85b38ce265d11b25bc670b00a26 2384de811ef0938f852c2b71be68b6cd +238508925abe79506b5ccc2a8b66ad62 2385ec1cd0ba338fc634555728d28d12 2386a431340d54bbd20164630d7c28e7 23877a773a241fe01c81f5201375b5c8 @@ -6501,6 +6579,7 @@ 239cdeb5144d6a572e620ae05733e87a 239d2ca030689344e5c5ab508ef98968 23a06fccb656c523aeb3405164c2abaf +23a139053cc935e8eb3daf7f7128e316 23a27219efc3d9fddd27df3300b531fd 23a310ba21e1fbda110791d06b8e14af 23a3dacf3ab540e9f77796161cff10f8 @@ -6633,6 +6712,7 @@ 245f2f7c0806f33f26f7c6ae5cfea83a 246183fa50cf2f5c4ee6872b8cf0609f 2461e9b888da114dc582c95beb3e4931 +2464c4ca68d5c1756abe64a908cb247f 246555c044287dae4f67fcbacad9a265 2466d807b163b60d902e58ba45ded1d1 246771e03aff4b29940182b2d5220b85 @@ -6788,6 +6868,7 @@ 252a5bcda64373f5d29edf5e18217834 252a6a1332c21482e9e52fb282695528 252d6a343749a0a32c92fee7c4e6351a +252da291d4d9801388d9a2424fc018c7 252f2dffe15baf39621a87321a068069 2530507e587cea9af52bb1556ee72e3e 2533052990490c5ce875295fb60f19c8 @@ -6809,6 +6890,7 @@ 2543fe5089ca74a3dfa85e2d56933392 254558e7172b54103ba7762edced490f 2545e37212f99819b74f4099ca649b9f +254a19a1a0a22804592ec90fdd9964ae 254ac098e9bfb9e135684c369433c53d 254b807c449d56a0b642be9deebb5ea1 254c4a0247f03368861973055de0d970 @@ -6837,6 +6919,7 @@ 2565b7aaa994008b92a5359702b34ee8 25673305d158e02193d1fa44b55035af 2568c4c802c90a0a170fe0d322596791 +256952e64e8320d6d91e3ace0c72bff7 2569a2c0a3b22864504b28307d9fbff0 256a49008db6a4f96651120797304ba9 256e46d3b497acdd970000753460ae2c @@ -6916,6 +6999,7 @@ 25f006121df7dd02b538917bf5112bab 25f0ffce71a6041c1d54545fea816c5f 25f3435f726137ce44348e573312b93a +25f5e65d0928b5cec253cd328a8e0a56 25f896e073fcfeafb57894fcba9c3aa5 25f9217cc916e3b885967daee31b8ca7 25fac7f0b61e7179ddbf8abb585eefef @@ -6964,6 +7048,7 @@ 263ec16e6c7e3bdb29a5dd2c2d0a89b3 263f8711745e1e097f4aeb8884fd39cd 263fa26dbff4bd4c1b33686c7c3442b0 +2641441b2efeabbae1f43eee0839be38 26431da132c5a2db561aa19152dc8387 264718a00c5b70fe71ed0922f4d8be76 26483bf864198cdd5fa5153c15a1880e @@ -6980,6 +7065,7 @@ 264d782ecab020559e35d27d0ff3c075 265004513efc0a1b69205362bb3aada6 265023b4e45c82033b4845e488a248df +2650f586ffe9690a0a50a27966694e00 2651fd1dd1a2d315009f092456ced19c 26534a9b43c5faee37a57aab50f55054 26554828491030d9282576393f86265c @@ -7112,9 +7198,11 @@ 26fa5c1ced92b1ebba2a3f5c9b7970d7 26fc197dd46bf8c2203c72ad220476ce 26fd1c713c0117345bf26bbdc974515e +26fefc2b42b1cb5ac578e18b0f8a7c11 27005870d16cb3c7c863423170a0dd81 2702e446f2002e818ecdfc7b6aaf21f8 27044857760cf93606a9dfa31e166f15 +27046ef0a2a08e794d923173234ff640 2704cd3ae2df141e8f5b457980635ba3 270500792a5ec4bb5a8a1bae61302b9b 2705e77d253ac4c134d8d212999ed467 @@ -7218,9 +7306,11 @@ 27962fea88523b22b5f991c152ec324d 2796e227135aad6d74cc8a49e3b387a4 279a84856b1b90ee4dd899565335b37a +279defe74840c3e0b537c7242cca9915 279f53f4fdeeed5ba9a8c25fb6db8338 27a11be9ded748f1252f010397782bcf 27a247599ab82acadd1427bd3484bdf8 +27a2bf38adf8b7ecd1abe71042088464 27a3a79a34dc9118dde424209e20b7d0 27a46dc5bc010700685147a5ecc313e6 27a603b2f558e7b217a5afcdc19f310f @@ -7280,12 +7370,14 @@ 27ef6a97d758d7cd191183a68291bc24 27ef9aa1c743e8991af173f09cd02d4a 27f0a14c6bf57f6ec69f2fc0fc84ab12 +27f129ee83713d2204aa2cd5f120aad4 27f19df01a760e9bcfab9f87689af8f6 27f46cad01889599ec404e16663a652c 27f844e0da24dbf1c0b8a3e574ae0838 27fcb9dd3bb500521a275ae8573f2f83 27fd0e9a5b396202d62a07b56604eaec 2801f0e9bdffdd997bc0cb8218cd1f44 +28039a8b5e5d5b497e4a6dfa2199ded9 28056561630ed57586d86ff051d74405 2806edad909af910cde3ba7f65d3a36d 2809ff208cbad2d11f96e38b72ac5a69 @@ -7416,6 +7508,7 @@ 28b8b854f8ad2e2e943a1245b25876be 28bd03cecbfd849722dbb2650ac0f698 28bdbc15aabdf8b787ca395d6fff9a1a +28be09d9b446a34cea094cf7438ba99a 28bfe9a9ef852145c1ff7ad4f7efba3f 28c001e95acff719ca92d6b6684061d2 28c1fcd69bf3bd89a85ddf54ea99eb80 @@ -7474,6 +7567,7 @@ 290915787b4878a12b57adc81e186d15 290d29763c42a1a944685a8fdbadfea0 2910f5c4e9c983972364d46e77d3f814 +291130991eb82ccc95bdf46fb01afd6a 291280e9f2589499741d83c7d26da79d 2913409ed564bd779e72af1e63f77aa3 29153387177117cb263877b9c2aed6c5 @@ -7492,6 +7586,7 @@ 292491d53b28a155834788d6f552f88e 2925d45665d2b2cc02c4eb1b2c9a8e89 2928dfcda373fd32875740f2f8b0386c +292b507e3108e7c0a7df36c78e3529f4 292c2294bc8b633328383f09916b0d61 292d716df60a16f547ea8e971cd112af 292ef5949595a3e6a21d2db7b7861555 @@ -7562,6 +7657,7 @@ 297c9b96ea9ba9e9e75d2695241d5d67 297e613ec27f7ee01994dbd9186d50cb 297eac0618e4b29ae6081a286b33ee2b +2980055d7d5382cebe4fcd89c23f87a6 29807d2431a68c86f7ec5014afdd0103 29813f7b6e0b683a71b390706fae5da1 2981b24a8ed5ccad8e5b77aba148a65f @@ -7574,6 +7670,7 @@ 29884cb5ad43eaca62e3037f2c55be2d 298d0734e38fa57cb4c8ccf6dce008db 298d78483564034c39b631505a87682d +298d802a0e22ef6be24ee5b42747dba9 298ea4504b783283b8e3e53c50b6e7fc 298ffd88851e55cc0b475de1648d204e 2990a982f0cf642fefa482c42ef27e95 @@ -7837,6 +7934,7 @@ 2af0fab9414d0e064fa459e2ce26b3d2 2af151d41e29325b7efc0d0382cd979b 2af1702f43c2e00bb97bfe33d8f16bbd +2af1f1bc45cca03778f7460d1dc928fd 2af211b896f11e40fd40afbc52181c64 2af736a90187134b053a137b163df845 2af8600251ef43dde9689588e832550d @@ -8032,6 +8130,7 @@ 2bf91ec9421a077577a796de32b424a6 2bfa7a4f8203bff3f1cd040496aeae38 2bfac3334ffc28508e9f60bd74574db4 +2bfc467a6955aa464be3892c644c387c 2bfec8ecd5ab14c608424b791cfde57a 2c026abdd1b37ae1dee4b638f38df370 2c0335d219bdc9bccd89e17ca3670f4d @@ -8258,6 +8357,7 @@ 2d400e03bdd77cc332dad5670a44e4b2 2d40814f6ab7a6452734f523729f7994 2d41e0df8889288cf79dba3477502e0a +2d432f19a916c552f25cffe097b2d30e 2d45b35ee3236581afe4ea960713689c 2d45c420cf0d5428a2c9bac7fb461cf8 2d468281cc6f64488eb3c6f8226fa808 @@ -8498,6 +8598,7 @@ 2e73f62027dc491e5cf143d5fe076163 2e756e1e33f1c6dd1fd729c592296f83 2e770a4841d6b0cf6c5d3985adf9b443 +2e79681246366b0c8fd8474e9a382d75 2e7aa11afa37e48560d315f2502b2fd4 2e7c6589677adb8b411541033aa2aea1 2e7fa8cc7cb64f39b445eee80e8003fd @@ -8527,8 +8628,10 @@ 2ea71384f6027f80314ba0748bac7414 2ea7b4984d8108c3d80617aebf95a99c 2ea96bfe9650a46866a48dd7c09a534e +2eaab7428f2a2ac996d5537020fcd175 2eab88f98c2a551e9896a2eacc817ffc 2eac7571812b0cd40ab4f8a6a437f174 +2eb10370cf41a9f2495cc147735c4171 2eb17a171710e7e51a2e98b2e7b3df17 2eb3f9f115e8c157ce375be88dbff859 2eb44046da4d82bafe9839b8b10dd2bd @@ -8590,6 +8693,7 @@ 2f08ed92b86b34cbd05d595a816746cd 2f0a226b83a9e7fe78db518999729cc1 2f0afb3ec7d335a1e3f96f5ab51f3586 +2f0da4cc82c5664effb0e8bcd652f50e 2f0f75fbc0e8ae316c4abf7e0e7d22b6 2f100d23577d27a3d140c1852bbe7526 2f1094bb0f9b041f3ee3d395edefa342 @@ -8607,6 +8711,7 @@ 2f1f593b9e14717ef63af27660f8f8b6 2f23074ef91ac4a150a42fda64cb0ed1 2f239b7b3909776ca120d6060cdeb33f +2f24c31360a339b4419ca1b285d1105c 2f2599e81a547856041ae14c37cbca02 2f266b22a641c5e86f74961721e3598f 2f2685a732bdd6d246bd8829fbd01cda @@ -8649,6 +8754,7 @@ 2f57276ae564ae9a79d3388ec1c87d54 2f58935d5c95dad19010795f89546605 2f59a69e0b615e3bcb4c1a26395cf9db +2f5c529d8c7be4dfc7d86e6f3d40d50c 2f5c762693f5ed22350f891f5e9d48a1 2f5f09b1674873e568ea117a5d0f6004 2f5f13cfa9ac497672dc34cd5c86e5b3 @@ -8785,6 +8891,7 @@ 2ff69747d51087d4f526f413632d741b 2ff77653324cd001b57f7d3bc98e2b0c 2ff922260a3b6abe357173f49c2bcdc7 +2ff9bc467b2a708dfaa656127ea7526b 300101a707828b42faf98d7bcf14f8aa 3002fc3532d5de4de9e8fc6a96a7ef95 3003542679206f7fd6155227c1550fff @@ -8854,6 +8961,7 @@ 305c66adcc77033546ee708587395317 305cea4abe74341da0cfbec6caef7d24 305da136664256bd9e744e19ac29be47 +305e6f8376f0a3d6187fc1ab42ff9905 305eb38c989444c3cbe1caeb4d2d6ffe 305ef5c7de5f713dd3e638f84b0e05f3 305fc523e90ab538543a2267bc189e2e @@ -8967,6 +9075,7 @@ 30dd0a3512de8253541306a440a29433 30dd56f74753bd44a0276bdeea21e0a5 30ddfd68572a3589245f79618f3197a0 +30dec1e75cd23eb158eb0234126e55c1 30df3dc922fab708c527ae57a2d2ac3b 30e0eeb99e1cd00cfea9e9380357bb3b 30e10f886c1e371e41ad55d2c7e4707a @@ -9018,10 +9127,12 @@ 312fb5ef9b12d0f812820af7ac867b31 313114b6d4278d81f941611009126613 31318607afdac27da23be545c18bcfd9 +3131a7d07e0839c16f8feef635f90f5a 31320838db3cad3154bcdcdd07d6cd35 313430a746edf0f57e43f72e722267d9 31347a091eb07f1d6d669db0e1064c52 313542316f4cbb4e4fba45612911a639 +313575c4af2154e75cc514dd7da020a6 313876ac90ec712b65de65d253c06059 313888eb3715ddc4c37375772a8123ba 313b95ec598e9475657d85283a035f89 @@ -9079,6 +9190,7 @@ 317f97e609c949c904c8f8f6bb5077c1 31810d13df95679273d6b6d5a7c5f11f 318709e3702a0bcde51260a66f6d85c7 +31898e70e3efb35944dbc409e9e416f5 318a486c5b6e86615b60601ddd2c2310 318a6a6d2c9faf183322cd50ce8632ed 318ad269ce033df1ccdb52aadfa61de8 @@ -9297,6 +9409,7 @@ 32b189a8785be9165d997e854984da7c 32b1ae75507b83c77572800a62059810 32b3b4bf08e2cdd07cfbb3d1226d4845 +32b5fc286f9ebc07f827df822023bc43 32b979a35c05eece2a3ebbd513cdca0c 32ba2b171d39646a38c3cf83b52ec73a 32bb321ac046e027125f8d514172b494 @@ -9370,6 +9483,7 @@ 330b3e8b23141aa10056c04063fcdab4 330c2f76ca46b47b06d68c688c19771f 330ca2acbea28d84d3be60ae05ee68f8 +330ec23a65ab161a236ee473983bcfa2 330fd4b3ac2d90c36191d311d1704eaa 331125371c19cb80313529791ab2901a 3315ee9c7ba8036c5e7df8692d906d32 @@ -9396,6 +9510,7 @@ 3330febbe70b7405e558fb67ef5bf946 33342af6d87f0915dc73b71b5fa8973a 33375328362e58383748fa2514bfdbaf +333a1ab551d1da95b84e8370ffae14e5 333dbad058641402833ce088190c8ab6 333fc5fbbdcb2e2eff55ce810a38a42d 334019d72e5a8b26f283f335527f9284 @@ -9523,6 +9638,7 @@ 34066f79958813119ef42c84c89cb1e9 34070ecb16a92a68f369864bbe33b76b 34075a601dfa7d3b0bfd19f75b9452fd +3407d397fab203417c832cda57dd4be0 3407ee12508f27275ffb6e771f720f49 3409f765a55d17942a03bff0ec27885d 340ab299584e77f49ebbe3d3fa2ffc87 @@ -9584,6 +9700,7 @@ 34424a69d1f6bf80f5a9ac6916575307 344344ab7cdf9aac86223360459eb1fc 34448de57d984f1c6795241089c503dc +3445e0e47e80ef371c652f4d83b53980 3447bb672936ea0d20332e9cdff4306f 3448793d38bb1f00bbb4fa58784f0d2b 3448bbfd9f62b296ab12d1578c98a2a3 @@ -9682,6 +9799,7 @@ 34c0fe8d3d1b1c6850d519951ad971b1 34c2af1244f7ba549f6ad52ab15fbfe7 34c2bf58dde33d8392733df2857c14ce +34c3376679a8ae1da12a3c9e0b7f8971 34c35c64aa4ca251cf45d9d2a3af8b89 34c3ab40d7b1e9d44bb55e3af361bb9a 34c3af3cff4bcbf9c5367b7743b07663 @@ -9752,6 +9870,7 @@ 350beb9f7dadfbb406c6fc543c5a8c6c 350d02ba2655e8a273d290c81f58a2e5 350d91ea931298b6736c3f06b059dc7a +350fdea031c4b51f485798fa6d5b7b7a 3510a6f95d20f8406337459323349276 35148efcc4c79052d2ddaf4b17f8f3df 35160948f99e76a46434fd469be84030 @@ -9770,6 +9889,7 @@ 352ffd49e0912d26c02bbee354ca4186 3530358e768dbf8f347d4fa05a5628a0 3531e183e4f880842762edcc2b649f59 +3532b576adb84d86ad821d40a2030fb8 35334c45c4b96976160292fe48753b74 35339acaa70c7a0996cca772b5c8d78d 353420c46978cf6f1fa2783dbfe5707f @@ -9837,6 +9957,7 @@ 3588a509287c2ef6b78b5f2e2e785eb0 358b3f0e7e9bc24d9b7437148c95d454 358bdf9e4f7eb37dd495a013d93a313d +358ede3f427aa2bafa24f2e6ad399ffa 358fa894b0f6fd3dd935bfd9315d80c5 359068ac07188ce41a1644647f250d1c 3590734084466a4876f3ec443f0f79ff @@ -9932,6 +10053,7 @@ 3612776df8fa32f9189c9fbc3272f4f3 3612a52ea5f767828a8dec437421fef4 3613b345e935a156be45bfbda6a8aefe +36143d8323814490c3224c4c9251e483 3615a60fb3d00dbab340d082d4a3ad86 3619d286a65871b7a3b16ca758d4be1e 361a4cf3c2b2bc0281d179c6438fce83 @@ -9996,6 +10118,7 @@ 367a5e5775a525314a1adb0dfdeac5d1 367aa3e8446e4fb79d5f05db5b12d225 367c4f0a097738eca2dda0c871b385e8 +367cc75bef654dabfc5967e674d315e9 367d0689680a44ee6a1a9ea173e8a0e6 367e4f8d4fee514146658af70c28d5a6 367ffea946b0d5a4ac121bda8eceeb98 @@ -10011,6 +10134,7 @@ 3690a192c36a38dbed234856c85f76ee 3690e38c61eddedb8c640609ee88d78d 36923f18ea99b0d057716992f966ad2d +36934526aeb98941d0592eca246be4cc 369365571e32b5dee374a996ffefbeee 3693df5321be42b88d541116ed534085 3694f49a34e0192737e2dbab64ac858a @@ -10055,6 +10179,7 @@ 36c8c7e8ec23aa8ab737f386d4569f9a 36c9ac5c45d8127ab4cb8f041730a731 36cf14d72da46d182ceb165d1fa8a282 +36cfa964ef9d52820f56b821f569b092 36cffd2f87c07b259db4d06bc28786c2 36d49edfc125e70ab4e3ce2cd208c176 36d54d626bdfb1195171828fd011aec6 @@ -10141,6 +10266,7 @@ 3741a38b9f40136e413d44152d8bcd22 374252857c48a14b608f3e53e8aa302b 374797a77e6e41d6d18c9560c459779b +3749b47e9ccfc84afca7241098289100 3749e35a741222cefc2c0969b0925e50 374a1e7bd4b646a88c10ecfdd7e2d1de 374a2fbb23f2895f5a2d9f939e8e9fd7 @@ -10164,6 +10290,7 @@ 37624c9f4e6ad5c98689bf67de4b07f4 37653f20c966b81ed92771b96cfdd6ff 37655ad1ea2879baad3a2c0fd03a97ae +37676e8f280a575c06443e4f3c45ba70 37697d9701a89a8f41ec877795852ed0 3769b59f71adcb65b236b42d62a8dc79 376c4df54c685e1068468362635740e7 @@ -10184,6 +10311,7 @@ 3779952a8b6c007e2223cb40d30fac20 377a3e1be5e7751287ec22bb049ff44f 377bfce0c02e1aafd4dbad64d001297f +377ced958a144d2bdfaf86bb63a62e86 377d103ebdc83a382178b6e0d5093e68 377ef3000ce186b9134702d08831227a 378038e61a7b1b809cfac2111e25c42d @@ -10272,6 +10400,7 @@ 37e5e357e1bae6826bc969e25eff486f 37e6c80611154d1374975a00288a6c9e 37e72bbc78a67c5c7c81adb0af34601b +37e7718b0e323397f8d27084163ecbbd 37e870a68c157770e6509123f457a08f 37e8a545843f6f122440633939ba588f 37ea69fca1576ef66359f4c6041fad5e @@ -10425,6 +10554,7 @@ 38b50ddb06b770b568d29d37b554e798 38b54d503fba4bd0f2f4047500a7c76b 38b55ed25a921361b0b645aeb1680d94 +38b7962dd15b4b332c0ebf80662429d0 38b815bd31ea592fc61b2e95fad5e6ea 38bcfdbbae7ab5d6be99270c6ae382f7 38bdb0fc056ffe3a27650c4b2893acd8 @@ -10556,6 +10686,7 @@ 398a063f8483162d7bdb3cfe4ce79c98 398c2ae736a733b16c5cbd71652a5832 398d01cf88ab990650e2b4d9b22474f7 +398d752407d77324cd686688d5e13570 3992ef05849b70b7c7e05094d2e4ad6e 3993389bddca10ad1e59669fc0990aa7 3995a81a5adbde2a1252d66f63e3641c @@ -10575,6 +10706,7 @@ 39a8cb80d54ab3e522cf6294da4f2e63 39ab1fb179b8eddba5ff486d41cf0501 39ab5f961433c8c5d0e4d279967f6399 +39abae085f6c0147217db04e89018584 39abf9e212ca075059e558b7ab9418db 39ac4652ed330d6e82ebe4025cd68636 39ae157e53272d057af64d8b9e4b502b @@ -10593,6 +10725,7 @@ 39c68cb1bb6b3b4d4c34f2d97090532b 39c756f3ffb953aa0c8523133bbd527f 39cbee234e16da1712e970ce5f9f2657 +39cc218a99a4efc350542a52be84b12b 39ce113b1945fffd1ca7ac667a211e16 39ce73d9fd6ac2aa0589c996727955a4 39cee6822c911bb419dff9c49aff7227 @@ -10706,6 +10839,7 @@ 3a5f77417cafcb95cda260ef1c1bfe65 3a5f7cc58905a9d8d7d2448ca354b788 3a5fe76ddf59d0ac8b1549fabbe8caaa +3a602cfa88ef6babfecbf26e0bb1509b 3a60d4ff8bf480da9504abac555bb7f0 3a619fc3dc8a2d14a60050d764e9e8e1 3a659565647ae9469f391c867c8cc5d3 @@ -10713,6 +10847,7 @@ 3a667af9af9f79a4ef6a28b78515cd71 3a69ac61fac87cf02f6cea6e9de75ab9 3a6b3a686025cfcb02afb86a04dfc388 +3a6babf409d9c8f06b01167f774dd2fe 3a6d266dd72bb728c545f516f78f82fe 3a6e3d2494f025fbf5aefdeba2c5f856 3a7669e7b8b5dcd99c09e5437d3bfcc8 @@ -11135,6 +11270,7 @@ 3cc00a1d8d5e64623c6317fb7f04e76b 3cc08160f2aad5b18a20f21cadd0e293 3cc1e9de39f245d6d83eac5190fb0a2d +3cc42e8afa44e26f1be8f4ae26b15db8 3cc626fc6620e57185bfe478aa179238 3cc6d0d91de29312910eacbe2d59d9a8 3cc6e7772b9099cb2d947032afa010bd @@ -11217,6 +11353,7 @@ 3d2321dc7c0c6fff0cc0e67c53a5a03b 3d233354d5446e6e7a87a08212104836 3d2650f16455bce9f0f01ff8537a6cd0 +3d284567548551480559d9366521c583 3d2a2e4b88be37dbd9fb8364097fb37e 3d2e2548d3cd1c034424c30238a30140 3d31c5ea2b9389d1447d8fafe2047927 @@ -11238,6 +11375,7 @@ 3d4259cdc98826bf185cc3d8794f07ab 3d42715b819361615456ada5ce166797 3d428e906d49824eeb7a4aced000772f +3d42a1647ce35b10231dd333c09f4ffd 3d4557f659c5b9b816cf92860f737b01 3d473c7968d4685c9d046eb9ffb82557 3d4854fad624502173b81de6d3d71886 @@ -11270,6 +11408,7 @@ 3d82e81bd2b0d5b66fcc9227e7ec845c 3d846835e9e2fad0066158465f402c06 3d861893c0d2d757c8b0792cd8b1486c +3d86d4c12efbaf30ef026f51e7fe4ff3 3d881e254d60268d4f080dc7ce5489b0 3d889b3845d55e81d82db00615c65605 3d8b99ab158bd6e7ce8d03c1bb6a65f4 @@ -11347,6 +11486,7 @@ 3dfa2edc2ee83eb21bd180eb63ab5515 3dfc453521f48c09621dd8417ad52f75 3dfc722b002abb6dc00724c402d21fe2 +3dfe1607a17fec61cf24c6ceded7c022 3dff108a204d273f533f9b9ae415d15c 3dff2e3de3471ee9c801bc52fb3daf63 3dffcdc0797113a59427397a0c475920 @@ -11503,6 +11643,7 @@ 3edc49749a31c0785eb1b7bcb53f50b6 3edcfdb87b120e132cfe4e59a35e9419 3ee01e4802475ca4fdeb4741e43bb900 +3ee0742f3484a1f617814c65e9de630e 3ee43c17cf635fedf731b41e92fce727 3ee70a82d4149f58e56e719fac0d941d 3ee77f512e60ec80e62bc8c341e19a56 @@ -11539,6 +11680,7 @@ 3f0d8e9a064026b3d71f84393ac2bd35 3f0dc7a55e19b1740e69ce3873d5ca20 3f0f1ae6e3eb77b087e9535e7aba86dc +3f0f4da4192398d84e30d3da275cda43 3f122c529b8ee6eb9a7e409355ef1328 3f15a396bbb6778454757a165d3f2fa8 3f19ce8891ebda751a43ef50959f88f7 @@ -11725,6 +11867,7 @@ 402b16f92805581e2726fe86434a3a01 402bc0cac799b231a5b8f42c6a55a892 402d1b5bb4f440cd21c010645061da3a +402ec85bb2ad7f6ea0b3ed5c97a95526 402fdd78aa722756262388379fa3b216 40300bdda75103a7053c3cad84d0d094 4031456730eaa9572db84aa8673493ec @@ -11740,6 +11883,7 @@ 4044c1ea878d12f3d7fa41120b0143e1 4044cbabab7ef360d5da8a541a96bc98 4045421689f5edddaacc1c6e4c3bfa6c +4046e330567ff2cf130acd6d3f03616b 4049279f0476d26ed3db065cd0aed99b 40495121e64a8634956638618a939c81 404afd013461391d228264b5d7da441b @@ -11910,6 +12054,7 @@ 4136f1ee7baadeca682db3981d1e529f 41374c2902b7f188b4afea828b62a116 4137dc5b175a56148ce34969ea9c4149 +413851f8717e73165b5ac4c5fbdcee4f 413857cd2e8c580e57dc4c9b84687f59 4138ee5001321dd812f5dd43a6d48217 4139d76ab3a53ca3f46c01614cd0eda9 @@ -12171,6 +12316,7 @@ 428e85dcee01183c37b6920a4d696d9e 42912be3c0a86d82a0cb6dc7a8c57e94 4291935478a519187a8e0330cbb34a57 +4294423c554bd78c55ab3e9dd9ba0c37 4296ebde8225c5fbfa88a975386d29fa 429919e08486340ad479589ff3809ba0 429978b2f0a3e87296ca6c7ab3a03887 @@ -12183,6 +12329,7 @@ 42a748a1591185c909e3849df73fb160 42a9e6abeb0d64320cb17eca2113dadf 42aa452995f35492dbfdebbff92ce399 +42aa50285bfdf2ac831f859905f34cf4 42abb214819db3d317e8acf22d4e64e0 42ad2a1a267e035918af42b8297c404d 42aece39ca522866d4a81679beb5cdaa @@ -12301,6 +12448,7 @@ 4352537da482b9c8a5c75bd0d28f2d1c 4352fa77e994bc21876ef2ceb994e01c 43533a332486de03b017a076e9e97c01 +43537e826390c49b6f1020c3185733ca 435508d1f0673ab0aeb371d248e57560 4356b082f88708bf6069620af4a0d920 4357e43517e7a3f61ef4e9af2093c5fe @@ -12356,6 +12504,7 @@ 439a2dee5e455a0a36e1a0389c6f72d1 439aa12386f51cbcca9e6e8bece7f81d 439bff8205f6f8fb8acbd6d8724a59d0 +439d24a9237413f74aadd692cbd0d338 439e0ecbec7eae3354bd73f6f16e7d42 439e6983366813b65357e273f424a60a 439e7899e8e8ef0525c81f5bec56f826 @@ -12394,6 +12543,7 @@ 43ccc1a223a0081400a5da15eeb3758f 43d088744cfc347aad5bf2bd165020e2 43d1c48b7680d2d655e47e9306aee1bb +43d25307e44dbe012a25d1c798a171fb 43d3ab45c52861f4165ba48fc58be060 43d4ab57c4c182759826bac41ff3d554 43d4e08af00dafd7e8f6ebbe7ed49018 @@ -12459,10 +12609,12 @@ 44233df6620ecdbd414b99b05e03e3e1 4423bfee22cea6f3b0ff1f65a3111cdd 4426d3f7143afcf41e15a7e1f2c69dff +4426f72ef6c21701a462081fcc1557a2 4427d3e46617063fae2a9ad9fde66b45 4428e36d05eee60c8c3e2f934b475544 442984e1580ac87b88d3330b48e29974 442aa1b4f78ecad538b5b523b6a1ecb8 +442ae592642218c0a64f0af4fccc269f 442c1deca4fd8bfcaab81f51673390b9 442ce0348117f409dd636413254a5227 442d1390cebc918ec0cd4e6c0bebb726 @@ -12478,6 +12630,7 @@ 443946ea99ca12def045d4a5887340f6 443a6b1e66608e76ee4fe65d4c260704 443c045891e40602195eba32b05e93fe +444089c009efcbb81cfc2235cd3676f4 4442b67d3a8fb7ab1c95309ed381dd46 4443837fff02cbed95ed68e83d547035 4444ca4dbbd81749654291ec76bd5e13 @@ -12598,6 +12751,7 @@ 44efd5d3c31b0d2f8452bf1078320a64 44f0850da9b821b42393b0c7b666089f 44f129086d532b15719f079a0364c13d +44f1d719f3c9e7815157f43c66eb78e1 44f2acfb09ecdb6c44971398c0cee70c 44f2bba8bc6f5bbd4124855d8316576e 44f3d49cb46188360ede2c926831a9c6 @@ -12637,6 +12791,7 @@ 45248a706370d39435e141d9203f6c41 45256f44d10bcc9e7e9b2a695b9afaa7 4525cdd28b4fad8ac359b930c8fe5f49 +452ea6d1a757b045757886f6685728ca 452ed45592b0e8a3b6e1aa5c81c46b3b 452f749a46c7cd087bd6e0b098946e08 452fa12d068c1a965c6f9c8ccbeeb4bf @@ -12681,6 +12836,7 @@ 4559b3e547d0bf48f7343d454cc559c1 455ad0437d54620c0837e51876d6dcf5 455b908cf7b5ae0b7350fe598293b8c1 +455dc1eec681d6b890cca0dbd3c2db58 455f4c459c4b6955d16cb08565227d96 45611947c5b1105689a18dba956d8227 456346d6c48ae104ea8613f27cf0d386 @@ -12730,6 +12886,7 @@ 4598c67f1da424e4fbdd57f77b262bb9 4599a2f6c895721619a282e7c39ad89b 459a577a90c09131ad3832bfca60dc1a +459f79478be4423e507082fa5e7d5b3c 45a225f56e2e0038a0715deb24f99b94 45a3319fedf9b98fa06c27d83bbcd6af 45a49576aeb0e84f112f66797908f8fb @@ -12813,6 +12970,7 @@ 4616f84b4811c44f70d5511992dc7b74 461797d7a79f3589e08346bad8358971 461899a21c227664afccd10ece9f2abf +4619ed197674199fc3ee77ec9a061755 461aeebdb8f08a7e4a1ca94c99da3301 461e9c02e33b0f46b2b61383bd3a173d 461f6d54c01f85ed48f8a6a3e366d159 @@ -12872,6 +13030,7 @@ 467731f31f5e78c10b04675764cad70a 4677e2a9ed0576432c7b41257608e7c8 467830b1f0233d61208cacb2ebafa125 +467b021e50e945f406c7123b298c59d3 467b759ebd1d19b2f173bcbe0d2d5523 467be778d1aa9f07b04c37f987134ca3 467cd7403b9095873028e4e1f9cc3fcf @@ -12921,6 +13080,7 @@ 46b6c58ef7e0fc4efceafa1682ebb111 46b794bc324827f4036b904ad6188046 46b7eb0069c34b5f32a1c1d039f0888f +46b856876ea088c190a67bd855cacfa0 46ba003f3e30d2dc8e3f624120c9a35b 46baad06cba56bd1a0b441e56c6784a5 46bac520fe30278ad9782e595a0b272d @@ -13126,6 +13286,7 @@ 47d2e9a3e1b8f838dcb4aee6a6c5f626 47d3e772a6bf50f31ad974a0bc7b2c0f 47d4cecbedaf8aa0ecd42aafa85f619a +47d4dade037484aa8006efa209077aaa 47d7086a613f30ba6d5253577f876cad 47d801f503778a586c1d0d7efb875458 47d92d6a243471684241dd7282cf2e0f @@ -13429,6 +13590,7 @@ 4960421e5219297adcb18dea6a0937f9 49604d62d0156bb291560423c540b8aa 49624b92ac7ad788854c9cc1ca264eb6 +4965229096a86802344dd2a0ca1907d9 4965808ec83e35d04abcdfe1efdec88e 496b77a7c88d27832bca3cd11e048234 496c18ef264fcc059a2c53d7df4f26ee @@ -13463,6 +13625,7 @@ 499beb566b3bafa21288fd832e1a1243 499c9e9cf215ae72f3c725b69d4a62c9 499d30da45a6157133265ffdfe677f88 +499db404b0368e7211dbc78d7ddfd2cb 49a0da903d6a8b2f7442df01e0db3a60 49a111500b868f433bd51e8cec5f22ee 49a2ba05cd3157416328c759dd0afaf7 @@ -13571,6 +13734,7 @@ 4a29b8f5aab06607572dcb6b4d2c8631 4a2c83e33e3a44ebc59e62fbb8e39de6 4a2e4024952fee301783e472af4980d5 +4a2f29bb5f2382e46ab4274a26807eb4 4a32bfa818c4d4349952d415ac7558fa 4a33eb778d6bc0084e371dfd5c741f37 4a3885e6ea00cafed1db84e31e669e62 @@ -13816,6 +13980,7 @@ 4b9a9e404c896826777d59ef72244404 4b9b65775e0b8252aef646105ebf4b46 4b9f05f1cc3fe946e9ee46f3a8f66d17 +4b9f24d32178670e4a028b8eea6ce27f 4b9f3994d91ea8a344db2e29da64dfa7 4ba02937b9fee263bccdc824ecc0a724 4ba060020c73262e3c8e71cead4a80d6 @@ -13878,6 +14043,7 @@ 4bf4f007e5f9ab56cbdd35b828d2180a 4bf5946d9f76d7c71157ded9bdd46884 4bf5f6387e2cc978aee95d0dd73b690e +4bf6da985e1c8d686d7b4e333872f908 4bf9a434076aae0e5f13546d48ff4ee2 4bf9c41d07bcafa93eb6329181c002d3 4bfb5b7fa22b80c283e5bc12be3bac04 @@ -13915,6 +14081,7 @@ 4c2c5689cbc56ae327d5950dcb49cb8a 4c2eef4e27c845b1e5a1b586ef88937f 4c305c63230e393b8356a99e5cb18706 +4c30e0b096a4d8cb3849f8200dec7417 4c32d35216488ef9fcd5cf69f9bec805 4c33580de84274c7dc882e4594339f7f 4c3479fdd39a809537fbafd980c14273 @@ -13973,6 +14140,7 @@ 4c8f0e8ebe3f64c2594fb65b3a53897b 4c8f742da9e1ca68a164f0faf607fc5a 4c8fa67085091b33ba9d933fd7250165 +4c8fdd063e77a18952948227831843f8 4c8ff2285520d5fa98003ccc154dbc06 4c904cb277b039502539fd6909e33e25 4c9202e2bf4923a0decf27b19e884f1a @@ -14033,6 +14201,7 @@ 4cd2432d9e8e740cf7e7b0c0ba97a901 4cd85a0b9dfc0e0756e80dc54b21e5c6 4cdb6d2af510e068afb8d7978090eca7 +4cdc58311f8f95b5ee3d16113c5fb433 4cde011ea55e66af1108fa1228a76271 4cde33cc9f4c35aaec2babaa35a42734 4cde9595f2863be2ac40df4591a5ef0e @@ -14239,6 +14408,7 @@ 4df6f9d653efdc105756a1c11caed458 4df92f8651337d4d1034be1e08932447 4dfabcc24e661f3853c30e3048cda410 +4dfc171288210b627bba6969de806c2e 4dfed6fe004fd210ea6b6ca081045eb6 4dff7473ffca9d4e6ac22955e90bd4c3 4e074fe040111467eee72e254e64ed42 @@ -14363,6 +14533,7 @@ 4e9bde5ec8a199be9ee3b888f45509bf 4e9befc446812a156b2bb29a3fe59386 4e9cecca363fd6d4ff9a833ce428d180 +4e9d1f96c76b490e0d42ec583cdab92d 4e9e0309a22703c576a05ac1763a71a3 4e9e2b6ea9efec3714ac00443a5e1117 4e9e4a05ff5b99bf367c4bbefc152416 @@ -14388,6 +14559,7 @@ 4ebbcb8a6c99b3c4ac4da702dc02cd22 4ebe44bff1be6e3ed6b47c9ca1185928 4ebedef7e5f9a907b50052b1e5a2f30a +4ec333e5e1188c9305f18e5e96cf560e 4ec6780ec8f7cbfa8949fa374bd9d96d 4ec6be86b5e1637d1e80df583d60cbc4 4ec6f817cccd727bc48cfe902abf77f1 @@ -14448,6 +14620,7 @@ 4f14b9de37d95cbba67e05d2f1772b8c 4f188c8e16ca69bfba3540d45649d7f6 4f18bb784576c361f5a2bac07f8cba4f +4f19a653c470d41f12cebad8c6c52116 4f1b852134c8bae67560c4514779f7e4 4f1d1787510f04c185ce723886d8e4d0 4f1d3892478e2cdc61fc713298ceeaab @@ -14537,6 +14710,7 @@ 4f91d1ee42ddb0c671e24abcd3a2bb93 4f91dfe9b066c6f2437a6d7e3802a383 4f96fe29513b4f2d334954984b6376fa +4f978c43b6a3e958999bc956cd7aaf64 4f97a42d5e74e7ed1ac21867b2a2f7f2 4f9925a22d1c91c3d578f8c0edbbc892 4f9b2daf8183d69281eac35375d0a949 @@ -14555,8 +14729,10 @@ 4fab2102e4804549bc75b5501819b28a 4fab310689d71dae1efcd46386f5bd3d 4fae2d93a5b426ae2a6e4f2327abadb0 +4fb453ed6a989588712f1e5d12982d84 4fb45c8b90b4289f76435b2f63cfe842 4fb56a77d49abc28656d6258b4e7536a +4fb589f2c9f1f6f343b1330c205d627f 4fb594abdb8c3a5d52e3ec7fb0e159b8 4fb6937e608d962b68fe4fa37604bf17 4fb71fe89a554bc4eefa0f50770b89bb @@ -14650,12 +14826,14 @@ 50343269b3870192613824674518a4db 5035b7cb314f686181f0e5372a1c30cf 5037489bc33e8aefdb303c4bc92b6007 +50375cddfc8db1e3cd67cfe44dbb9857 5039be6e958ada05010295dca1645638 503acefe8718af00574041c414153c41 503d5a861da60568afd9b9eaabbd1b50 503fcbf1035a6663158d30d1a75457a4 50406f914d74c7d1d183633149b41a61 50424ab07d42a1542563eab9ed59a40e +504285889a3caa919add25513156b15f 5043de654779f92774d2bd2f155ed93b 5045405daebc4003895c31948659ba33 504688d4d66064754eb7b4957d0db158 @@ -14935,6 +15113,7 @@ 51b62d6bb01c3cf3ebed532bba5f9b6b 51b81d129d90a15fd25cd2f1afcb5a09 51b96a95f7d2ff70f6daa28ef2d41f01 +51bb2eb7f800ab35e9af1f9d13b25032 51bb72ac7aa8e7265a7febb72cbc933d 51bb9039ff6dae3c93781cd83bcdce68 51bc5ef8208f24c28649d60763853e55 @@ -15141,6 +15320,7 @@ 52e0802ba76137ca6fd99979df9c0a45 52e0b0c04eed69a34310965034e798fa 52e11aea9c80d4906cd334c025938fe3 +52e835d0135eff629b329be3b19f9814 52e910a851336ec2533f467280b75682 52e966979666451efdf5a94edc9d2b6c 52ea07234656a1099a5e7f4f7549648e @@ -15269,6 +15449,7 @@ 5385e26d6587312b05dffc74f4ba5ebb 538644c8d0012f8342eddb199f0124ee 53891f6752eaadc4532c89824464757d +5389fdfb38824fbe839c643edf7d683a 538a5e8fb610a36192e266f6e2c425e5 538a92a0a2a5b02de7c7e13298dcdd26 538de9b76e686a50ec3c597302139fe8 @@ -15564,6 +15745,7 @@ 54ef3ef3b3cf31e027e8cc2fbf597391 54f256141f4bf025f8935b0d12beadfe 54f262cbabaf4de39dbaa2ba60dcae3f +54f65227efa8a88477c3257a385d01ab 54f76c570b84421c277e8ced16936792 54f8bcaa7ce9ce616e2834608d10bea1 54f98d729ae86eb0dc48e17536ab018d @@ -15572,6 +15754,7 @@ 54fc71d6f67a95be39bf65ce7734110e 54fd953e6f112ee259c333cdc5d6e613 54fdd5acd34e188034d6e2ee57e6492e +54fef275a5b5e68953f94d37968b8d2c 54ffaad81fc4c3e29e1b14371fd8f456 54ffe9678ea663b26d9b5b0464ae1a1d 550042a597a0fcfb4a80253a0297888a @@ -15801,6 +15984,7 @@ 563ba52c7500db462c9598f18c90c165 563db755d889f177bfbf05fb80514710 563dbd7a848a333f34d759e65b8a9b6f +5640f816bea956ca784a55497579ba61 5641bebea1cb6bfef3029b204d1ded9b 5641e24655422c88abff70955a0a50b8 5643b9056491392e3fffc45db5555b86 @@ -15814,6 +15998,7 @@ 564e86b5ace2b060a7189f8a74f11be9 564ed1ca1536b70c8d0416f68488bde1 565017f68c4e3cc0fc89ff8eb1bc7b6e +565166f0645d96eeb468479bf51a1480 56524a236eb89f95e9f1c41f970006d7 5653939fefa7da16a393fba86b5fb673 5656f713067bd091e28b2f4e0eb12719 @@ -15888,6 +16073,7 @@ 56cf2d205cefd5d09fbb125a335472ff 56d0051b725e41366280ab49a5f7b772 56d01cebd1e39794740b6b0ad10574c5 +56d245e8c5f28829561d6ee66cba4551 56d32ce9733246f93d3c78303696b231 56d3ae2a298ff2a86ad21af52ddf770e 56d45998cd7cd9219a484eee00c166a2 @@ -16015,6 +16201,7 @@ 5771be44211ebccdfcfc6f7d475fca43 57723cf7e23bb48a689ebd3e2e946b35 5772e4f08df3811d24b19875bb3f7750 +5772f0d813d55781f03551e7db6718cc 57730feb5928278dcd5c26840e717846 5773ca9819af6cb92059f82804fd8876 57751d48194cac6135ab7aaecdff18ac @@ -16125,6 +16312,7 @@ 57fb273dc9e982a18fe31386a7590ff1 57fb621c4a3f1532ec0304b711460011 57fcff59384a5fac36e84915c8efd94b +57ffee038d77d27a16e9a5e8cd8378f3 5800201b26a014eac7b7d7d3e56170e7 58041d0333d784c31e25614f255b28b2 5807d46857bc695af85e6d6bca41a3db @@ -16192,6 +16380,7 @@ 584dee22bb0b2da3e1e3da970d82750d 584f00d5265a83d4328b71fee59222ed 584fc45661e18c082f676b6a680ab9b2 +58501d2e68741bf0f18dc570c29d6554 585569d2ed15758667c791301db479ec 58560114256f6a705cd5d6eb16e7c9ec 585648b388b4d563539a9b69fa6a8c86 @@ -16299,6 +16488,7 @@ 58f5fa68128d565997bfc53ad8e1ad50 58f71589bfc7fca8cbd1c54f356f2f44 58f94f099278de26b5da3e9aa8c037a4 +58f984e6ec7d85cc1f2655715b101dd1 58fa5527d72fa52ec013d8b2812ee8f0 58faa74cf18e9a0b5d6864c04f72392f 58fb87ce6d47402d1101703f439d02de @@ -16537,6 +16727,7 @@ 5a3d03d47de71a07f5c60fd309586b4a 5a3ecee16b6890934e07639c4977afae 5a4129f5018d7d4e8099d7e57577b04d +5a417dc7c7087c20007ed1e7d0db0c1d 5a425b929807387e00f34dbeb0e4ff65 5a443f5d2869e50e3be7249477fd91c9 5a452a08eb4cd826121ed4a0458c3bf1 @@ -16560,6 +16751,7 @@ 5a5aa35ecabe9834059851b6eea53356 5a5d396df3c92965bab0f040ada8ec33 5a5dd66c80fe9d008212c3ae96a48408 +5a5e42f56c41d1a52842a146926b88dd 5a5e6f9fc23ab5dc02dbcfe2cceac6eb 5a5e8b7e35ee9deceb300fb1f161d08f 5a601fac20d6ea58448be385235097a3 @@ -16580,6 +16772,7 @@ 5a76d2d88c2a039aa1d5cfc7f4b8eb16 5a7811da1b5561b59e40efa805bf99e5 5a7bee0486050d33c6129763dedf1fb7 +5a821451b8675a84922c1dd9a28de674 5a825898034522d8dd1a8980fa309957 5a82803ccf8f4cb4ee09c430bc647042 5a84f04bddca0ce22686c1dae3155294 @@ -16676,6 +16869,7 @@ 5b04c0e64b9378c89a3a0fa365a1fbaa 5b06aee09d563e028a384cb5b3091e2f 5b0a660f8aa733cd2e079cf3ec37bb1f +5b0a703382384f4bb8b7533f17d76bc8 5b0bdb862ff314d67db74207fbbda5f1 5b0e2423c636ae0026e1c78c76e1874d 5b125fd1f8e68ce2b8ef4ec5ab33cfb3 @@ -16752,6 +16946,7 @@ 5b6ead9351b3659861773ad79111ccb7 5b70485213c60570c88aad517e5ffb55 5b708f5f515d09324219a38aeeedc57a +5b72c01e1ca6520131c30a9d540a99f1 5b736a7e66f433d7406d113fa0ff3fca 5b74f0528eda6c3a09392636f500a9d1 5b7726251a663246f6292bf46a509ac5 @@ -17000,11 +17195,13 @@ 5cd19e41b4db2c36e92e55ce248b1afd 5cd1aaf0a1b80807ab17dde39503db4c 5cd25ed15d2f49ffe36a2ba52514674e +5cd3700033281501e3e08b7ef9c15a1f 5cd3c456d1a3b8e5e8de72dfbe68003f 5cd78583609df734a0cff3408715d1c8 5cd8ab8e1455f805a44d788a4994cd4a 5cd8b19766642dce6480328c0a5e9c11 5cda1c31c58018c4ec3aff1f80ad6639 +5cda7a99c26d3fb3de5fe2b2425e8a0b 5cdb51bb542d14302cebda4f080b550e 5cdb7f9e962846aa71e0d5f0b9651c6b 5cdbbbb09ad52879a64be555efe79e59 @@ -17168,6 +17365,7 @@ 5db0a2efc44fadcd91fe3992b0c7e085 5db0cda0317d37046ed85eff56e4f672 5db253ab4950b9d8417140c91e79a945 +5db2a8f11b511732628bd466625871b8 5db2be42d44b7f8cfc4b37195cc3003b 5db2ce469559c8519e4e2c01e0351a8d 5db419582550efd6ba3f34f3554b948f @@ -17195,6 +17393,7 @@ 5dd56ce7b18d18bde19e973e739f2d5f 5dd6098b1219b049303ead391af12742 5dd702c0e749fb78ca70dc07f274323b +5dd763ce08c81f6518df88fd152b4ec9 5dd79216928af677b61ab8e595c8900c 5dd87d9af91a85a60cb1eb355ab97846 5dda880e4a8b4f8dee895f4c6e918884 @@ -17378,6 +17577,7 @@ 5ecf89cb252e0e458c16c4d72932a6eb 5ed1c9e5affa2fc1d5c258b6c510d10a 5ed3dc7abe9643a832cb164ee0b4a5cf +5ed48f46bb747156a341abc1a6a5bdad 5ed642d47de7ca0952b5932ff638d385 5ed8b85057924bd2a6385e3ceb8d37b8 5ed8defa1f290b44b182109945d334bb @@ -17394,11 +17594,13 @@ 5eed55c24eff4b6e9381918843916eb4 5eed6715fc488983f71afbc4e9929705 5eeecb3b80db1d327660c4241f942b86 +5eef0d573fa87ca410abfb54b53e180f 5eeff19c1d2a537ae8f9fa69d1be1ca0 5ef3b89e55fd584f11d0363975418d2d 5ef3d4772c14219b131e95fb910a51b8 5ef65a4207de6cbe1be081c9b0ad6cae 5ef6a29a75e5026834778afc9047de02 +5ef760c76b1e11d953e6f28797623007 5efb1e516bbfdb665868fc53a3af0de7 5efb2e412e3a5c89a6fcc0d41ad84023 5eff9811cb70d931cc876a24803895db @@ -17420,6 +17622,7 @@ 5f19a7637d18aafa2e53e5a8527718d1 5f1a0041f46584b676c550e8b6dae67f 5f1a340424ad615682d43a955c34a41b +5f1c02ea0bd8dcbe7677655700c377f5 5f1cf1475f2286b8168be06f748ce074 5f1d2c00daabd0dfa1f19f34f20f27b2 5f1e104bae45cab395dd4e4555307d62 @@ -17458,6 +17661,7 @@ 5f4eb2292478cf8f4b3bcc0e826f4aa4 5f50376c388ef3c758cfc62f8ef6501e 5f533f8471a2af7c95d7021f2fdcba4c +5f58343b769c30c114e03a00dca4157f 5f5871d00928ac40d6f4ee8a67ee3720 5f597ba18452ec7d7058bb67f74ebd5a 5f5d4b8b6c5b55363d556e1edda76a5a @@ -17481,6 +17685,7 @@ 5f777edd50db6197a42e1f0472bd5c17 5f7794026f60548d3043ea8cbc392079 5f7a5a03dc520f750bb32618d9b8fe86 +5f7c3b8002eb8f2a1eb0c89835cd92da 5f7e58bb630d1c3ba8c73021cf8d0d1e 5f7eab6396560129dbd4cb4159ccfcdc 5f80a0f889041696896364dac10d78ba @@ -17656,6 +17861,7 @@ 605662eb84655b0201789925528ad8b3 6057df1ecb3cc05d7af06f0f62000eae 6058dd0a37ee76d982c80757998af5e6 +605aec38d3bded38df0da1b774c7272b 605bdd8ab9d9790c8cc4a72fdb809785 605bef2e21589d8a285663a478187c4e 605ef6104123e237efe68c9ceb783499 @@ -17731,6 +17937,7 @@ 60b9224cac796268d71ed9d4cd439802 60b927991536b306c4bc8792e8785a46 60b9456a816b23606f4f6ca161ad7997 +60bae11dcc271d76c8982396d2a91d75 60bb474096e54943cf8143222ee75496 60bd9ed93d8d8819221b6ef5327348b1 60bfdcb0e1e33b4f77ca5d6217068f55 @@ -17807,6 +18014,7 @@ 6127353cdb7929b354f18b8ce75ce245 61293762c357cd98ea6cbd5aa957d55b 612e23f90d82f8d3d287c63abb9baabb +612faa450ea077347f097e1ef76a4785 61300068cc0762f2ce70ae57e95ed670 61310b80d8400a7bf2d302da78fa7d55 6133ec2b8b20cb401bfedd0095f2f37f @@ -17832,6 +18040,7 @@ 614d05d8021bb69c4680a58caf675297 614d32ecdfe5e7ba0e76c67468d7c928 614d5667b0524cfe746b4c55c7287aa3 +614fb28fa06158e93a65fa1d97d64bae 6152d2443ab4e00b716345dbcbceaf84 6154212dcf0fc27000303e98c14a684f 615460c923e0fea86cc47d3ddd63c373 @@ -17849,6 +18058,8 @@ 61712a3dbf6e627387457d9cdb31a3e8 617141e7fdaada544eb84c7c8bd5047c 6171937e6112fc5480888dee2735edfc +61719a90fc4e3135811a73aaf7a0f70a +6171b7c5a1e6e977b9e6ab67177e80ee 617290917eaba02203400ef388233123 617327b850971f596bf592dbb6fe42e5 61736c9445d6b01f11ec3f84dfae96b0 @@ -17935,6 +18146,7 @@ 61ed912dc6c1847cab90b0dcb20c3227 61edae411a8f7abb5fd7fc5c4962410a 61ee450847152d8bf79fa8f514938af1 +61f005e0316e6a33ecd85a7a840d1a7f 61f0e4246df4e9e52047dc34fa31aad2 61f1dd2da50d350156b96b72c43e1f3d 61f21e72bf4d150c87bcf42db99185b6 @@ -17971,6 +18183,7 @@ 622b61d5d4a7ff668d54f0d1ee6c6819 622db9851238c5f9a366358edb35da3c 622e234be3fb75a5f1b70d479926c2f1 +622f993d24633059cd7d36cd4911f8a2 622fe11d06c2d855a29d5e7c74a28606 622ff1d78b93bef482622eaed87e08eb 6230f1eaf664545480b0983372e283dd @@ -18160,6 +18373,7 @@ 63300902db402be6a888732c097433b2 6330a4be2db3e2c61d7f86ae71b6ab71 6331066d690f0b371248d7cd3e10d40b +633305b03e5f493c6651fe8cb2cb8a4c 633559cf50e241f577993c692b09f994 63357191ae4d3fee6d6cb7ac62dcad48 633a5784dd59c693564e2bcd6f412e71 @@ -18242,6 +18456,7 @@ 63a8392e6de5831a4cc0fd9e1ee8b8fe 63a8610c1e3e636e27ae2ef350d151e2 63a8ca11d00a667234ab46e9e242b460 +63aa2bb991002995b1207391bf1ceeae 63ab195884d454c1f0c8ddeff3b98709 63abb1db96c4d6812b5ec4cb445bb798 63ac1aae9e03472628904eabcd7e57ee @@ -18249,6 +18464,7 @@ 63af69c4da2cb49132a1cfd0e6310a59 63b165165b47233d77eac6b96363a8b9 63b21d5cdfbb9a71addc025dcf5a2a6d +63b36a97341aad2b2e0e7c69a4b28f79 63b4390f5bc382562ad3fd79c34db012 63b46c36e9c331aad363d8157976333f 63b583c6761f39f3faa12c01ed3fe9ce @@ -18335,6 +18551,7 @@ 64302f9f180ab953a8a582d32e42c41e 64317f985ce9893e844f19d7a741ca16 64327a29eadcdc9abefc4254ecbb16bb +64332ce8f2544a89e875efcf1a46d605 64340815067ce38230b1762bf4154234 6438a8741c88b5f8041505723fa67d25 6438b933afe341138921acaddc67ed8b @@ -18428,6 +18645,7 @@ 64b6bc39324267518016803e1f1acbcc 64b6f4c36ecc26b5286ddc7101eadd7b 64b8a72d0b1e5fe446816b036f3f5d2a +64ba3046f9c497bd19712cc2bd9c2666 64bdf95b03398281d405bf5dee0d73e3 64be6839a8d898d9b8d5524d0aab6c8d 64be93c3dbe9d3d8ee613934075d1936 @@ -18440,6 +18658,7 @@ 64c863511c616680f941e88991bbe8e5 64c8cdd8e32c2559c2874c36f841530d 64c99a95711072ce551b1fa6ee15a998 +64cbcd4b5b2bfb631bdca65353319da9 64ce9a0e3edb0c17eceafbd5d6b5809e 64cebfbdbf5a087125492310ce8ad40e 64ced227fbdcaed2e756d10a364e6ba1 @@ -18591,12 +18810,14 @@ 659a02708f93747775eb8081712827ee 659d8b27d695d77feb21240c7873097f 65a185d60451714d291d94228d653cb8 +65a21ed3f106332a28ec3bb36ab9c299 65a22cfaa9671838ea834f4b7b87fa0e 65a3bc93ae7f76fbe9e467ccfb7b9967 65a7bf40d8ab296f8d14d34483b59692 65a81c190f37f9dce7a4c202c048135d 65ab68929020286c7e072bba747657d6 65ab86a9c5e574674b600a24bb4371db +65ae5b79e4f16b799deb97e2d0c39d51 65b0c97d86bddc122310d67dbed8e8e8 65b198aa542019acca06a1a90e408eba 65b31b180125926faf2e7135e3365604 @@ -18641,6 +18862,7 @@ 65ec8bd6725c4039d2f3f43292dcddf6 65ec996f7303a4ace169e0810b91e594 65ec9c2e9f79720f2fe3c14288ec1d33 +65efe7fb7bbbfb2b0e458efd7bb45d20 65f1aad090b402528558e2b3dda15151 65f1cac7ad88d6d1e590f029a53f142c 65f2aaa6d765d60a08a6f4be4070f852 @@ -18698,6 +18920,7 @@ 663702086387aa0a1854eb5cf8d62099 66388c10f98cf5cda09f5c417b90ee4a 6639073a2c132ef4a1a24a2bb62a392c +6639185bacb8eb853c4dce303e46bffd 663b1c5644b73814b035ebc9d273ae9f 6640b02c3d822d01b6f4e4952abe7cb3 6640b9641c8e09787d55cd695f0d5e77 @@ -18743,6 +18966,7 @@ 666c89b9ca4cb0c901a4d6f7f065cab4 666ec1b0208a15116d2e97dc7986b4b8 666f5ec55f27fcb37a65aeba112147a3 +667334ee1dc75e94ab27130088f2032e 6676b435fb0732c91fc97594033b114c 667821f71d9e176a0a79fe475200d8f2 6679008a03e7fbe3b7f21759b0e134dc @@ -18766,6 +18990,7 @@ 669719ba5fac42a2c46c1e893efe6451 66977d93ac207d44f2a761fd9dcdf134 669849e9a178e2e206aa37c975d9fd60 +6698f383089c21a23233b5b0a3c418bf 6699b48bfdf3d91c50b1e9b643d0cd9f 669b2e849aeb6acacbb6459e380e7403 669baa00d34e9b884515cb588138900b @@ -18799,6 +19024,7 @@ 66c217c4ae6a533c0427b3cd6886a87a 66c24bbf65365721ee459754648b49b1 66c29366b9da3819230ae7d963cd5c6f +66c59a2125620b167238f1d709e2e105 66c5f5df9d4f8af72263f05d14db7353 66c7dc675112c0e9cd83dd2b51562c2a 66c87ae5b0b5815f800995f133860f81 @@ -18831,6 +19057,7 @@ 66f030c9cc93e25a588d9234a120208c 66f03fe474ab2868335c77fb7609b83d 66f18f0d51eaf545b7d74c7bcec081df +66f1a3a59cef09015e9e76486a91cf68 66f35523aea3a440c7ce5bbea2800106 66f38d4f9afcdb6d0040023f10ab6dd7 66f533193de37d77d42e15f333803909 @@ -19095,6 +19322,7 @@ 685b6f14a806f876726460502ea216b2 685e09f763c9e20e74c8682ec5452092 685e4c600304f52df984ede2ef63100f +6863b7b1891ce90e59815456c8a56f7c 686403e6f618b0eeaa6f01e21f3b72df 68655a4a0384fc0ab5a1f9018324422e 6865d683ab54cc995fc3e60aef282fff @@ -19190,6 +19418,7 @@ 68de3a85afbb1c2fdf6ac1b9c3052ab1 68de669c64146d80532be9b7829c25ca 68de9d62b3e9453d90cce77e6983aa13 +68e001b44759c2d6cd701cc1172cadb0 68e06202550d454c18dde396fdb94a1d 68e1cb4695a93ecc7975eac9d4e0567f 68e422410b0244a73a5b4213a6929594 @@ -19215,6 +19444,7 @@ 68f6618fa39b27fba8ad9e13210c4e01 68fa4598a6d6d5c7396f8d4507bf290e 68fe427ea829f62f5a358cd92488daa5 +68ff20c3a325f927a56aefc39054ea0a 69019cc180f0813785256a331c295a06 69028f10f38f6d128d0f761cbbc649c1 6903211b5888c7c791da6a2395fd4285 @@ -19353,6 +19583,7 @@ 69b129518922f8108fe120ad207d0519 69b16900d625df740ddd1cc07206270c 69b2167ac817d4ad66df801461cd29d6 +69b296ec7fa3f08d42638368edd8ac15 69b308e06f01ec00f96848201ee47a49 69b34907afcdffa8c8f8846203fecc2d 69b5817c34c105350f11e5acb1988504 @@ -19443,6 +19674,7 @@ 6a2ad0e28f9267bdd988a28a50d2af99 6a2e04ad6111819df9a8a6483c53703e 6a308eef936d7bccf64681380dd8d6bd +6a30cec2eeb7dc0ed9ef59f119d96d46 6a30f252a92357e255a63296f8c02ea0 6a339dca100ac95afca66e4e10d6b656 6a34201e8d62446391bd1ef891099b3c @@ -19481,6 +19713,7 @@ 6a67ccc623f4b0b1d2fc640256a1fa36 6a6a5f90d954ebc84ab1d4adddceaca3 6a6bdd9a9588f07beb5eaeadc0d611b4 +6a6d5bf6119d59d0739350d30a2c7d75 6a6e6f6261f97205e971e79f9729d055 6a71918f3a5fd75f7fc8a82deb9a15c7 6a71abe94609e9417f07b80a7d0e9a50 @@ -19622,6 +19855,7 @@ 6b14315add69df67574a85e12400de74 6b14a036cb1b69f93e635be246910966 6b14a1cacdbd96be5529a13372ac760f +6b14e898fd235d5c00cf75a496008302 6b153865aae288d0fdaf12bb91c5634f 6b165a0cff9dce861087e314bfc97569 6b1681aab16dc7ace61b32aa514ee742 @@ -19633,6 +19867,7 @@ 6b1e632ffeb6720272b57d48554c90c1 6b1ef46756ae635d09f4cd81fcb713bb 6b201baaefe347048d9ca82c030331b5 +6b21b2078ea38e41c42fd02a23a5645f 6b24c5d093d455efc95e20cb9b157385 6b2563eb5e31b74bee4c29dde27cc46c 6b260a6a3d630267ea5aa4516af73ce1 @@ -19784,6 +20019,7 @@ 6bdd393a04814deadad8957efff15d51 6bdd3ed09246d72101c52d2e40108b4a 6bdd471fe7b5e264883a3301f159a369 +6bde4b4ad09f61bce1f9d84adc55c1df 6bdeb784233e7446302b20096f616aed 6bdfaa1bcaa88afbd7e9ae71c862a265 6be05e9dd6e07120f53c90b966a466c5 @@ -19815,6 +20051,7 @@ 6c0bf18262dcce03019dbb45a83ccc28 6c0d809fe6fb5b1dd6f747e687e44872 6c0f59d6bd2c42794ecee14f4d72879d +6c0fd5579811e8c439fce3d44d597373 6c10b0fbd4321319f292f415f98280d0 6c1225ab582f2f70e15de02edb59f92c 6c149413473edfd4e6b541012b8caec2 @@ -19833,6 +20070,7 @@ 6c2ea60095a7d48acc9f48c9e5ebbb76 6c2fd6de49045bc3f44590a2d165b3cb 6c301504f4dad0eaafddc2a7d6e9bc88 +6c306b59248ef08a4bcc7e0b99665a98 6c30b7fb38d14c60d9e8daac0c1a634e 6c30e9d4e0419c1a42ad6288b1cc85d2 6c329cd42cbaf846302d357f7e9ee3a6 @@ -19990,6 +20228,7 @@ 6d180df0680889e9e599b51e184879cc 6d18a1dc6de92a2d25e7776ab0c9d5d4 6d193203f7089b8d411fb3043cb3f412 +6d1acfacae2281de1af301f194cf6b6b 6d1b66ce9b5d96d8489e37aae418b14a 6d1b7069df30cdc3886f3d5712e91fd6 6d1bd4ef7293d195ec61735acb2e1df3 @@ -20033,6 +20272,7 @@ 6d434f160bd06a5adff0fb974bb91534 6d45c1523dbddc27f88963693c24c189 6d490cfed3c15c339781abbeb693de78 +6d49f7809ca7dc2f43398dec47434747 6d4dc53eaa9f1b3264db171c6520e08a 6d514322abe8f4f4636f88f277eeeef4 6d52c385817d848f9841ac4ddf463931 @@ -20078,6 +20318,7 @@ 6d85253df01ddfb9f1c692909db2ebcc 6d85c5ccc2a9de7ff3936928a0983c01 6d877499564de8898c0c889283269118 +6d87f2df83b2902351309459ab184c4d 6d88630925ba060c746d6c685cc165c7 6d8a35273b1360a97fdd319112462125 6d8ad7f239d3cc2f20267074dfbabf5b @@ -20329,6 +20570,7 @@ 6edd1430019f7d759ceb72db9720368a 6ede26a349c0e056032be87c0c3ebac1 6ee13e3769cce68f742772612c11736d +6ee500cbb3127d5526b71c7bb0e9cbeb 6ee60efa5a068553546ff85bbfe22d35 6ee9a95e30a3735d5f8828275f6d2f2a 6eeabf2a9ee8059f8d8e0a9e9c2f193e @@ -20486,6 +20728,7 @@ 6faf78de9648b90cf863abaf66a95a0d 6fb04b5897fcc55f41a406f72d347af0 6fb116ad475e740e1106e5edd3c51334 +6fb15aa34a414308d0a073f819e93f76 6fb22a4c0a694c56453796cdfb1ddaf6 6fb2b671e5a49af962cf17a63ff776c4 6fb3e069baa568ae69a22204d470bedc @@ -20552,6 +20795,7 @@ 6fff70d00ded4353883a3ac908ccf1f8 70010425f3591300bacb9cda8d258d6b 700230e08cd0d54563c828e1125ebd32 +70036f335d643d6fec8b5bab741b9605 7004fdf0f394ec70ab0b97383cb2f755 700665dd775157ae4b50c5a2eb379fc2 7009853e9447c54c81b2b3b4061b2761 @@ -20722,6 +20966,7 @@ 710f3372bf9079ce67a96082ac70ba94 7112044fe82ea3eb2d5f6d086002f4f4 7112adb8e2c6e470e54fe0bb1ff0e3cc +7112b7f7067ae4305585994cfee7ee79 71151f5ec40f58ba9bb19fa1f8b7fa82 7116004270ec21b0be46db855c1c7f3d 71162cabea7590f74cdb8b328541ed63 @@ -20792,6 +21037,7 @@ 71651a170290fd540e2fccdd8cb0007e 716d559b2394d22d25300a1319d5af90 716e0a25015259f7ee232a9b6fb779c5 +716e5b2363db40bac5d37a4ea3e1e798 717208c6606324651980cc360a385b72 71734aa4ad3cec0aaf9f26ad17188611 71735f5be33f18d492fdec4cfbd740fe @@ -20838,6 +21084,7 @@ 71af623b9e5b8280b7a95384d246fa5e 71b05778b7140017cd3de9e1e882f201 71b0f8e1a95494be145970cb9935e2f1 +71b2a335d73e55fe779d53c65324bd05 71b41eb4cc17f6872125bb7917ad711d 71b5512104961380d655f694770a98d0 71b6073b891a6cfaf973c7cdc72f52f2 @@ -21117,6 +21364,7 @@ 7314a6ee09e789eed7fcdcfa71a3e7b0 73166173b2a6eb77597e311e02ff7e2a 73166b02d79f882342c5fe8986d6ca57 +7317d3f1e066e3452fed2cad87f540c6 7317d6bdeb265d08827c6de789cb2a89 731821203e6087b9664591b8ab33a29d 731a96cc1e82d8196b8cef477e8d99d6 @@ -21124,6 +21372,7 @@ 731c1a0d0e0f9f403dc38f30206ea1fc 731d71656ccc03cf1ec8ecbc5d220c9b 731fb35d825e38f5b5c3f0cf0464f7b4 +7320188930ff81b2afba8fe30eda50d4 73210c7ff2d1b8d589ced866b98921be 73210cade78bccc828aac8e1a199b424 73217ee918125aa2f3e98ac4d8245dbc @@ -21166,6 +21415,7 @@ 7354d142d583fffc1710de003d0cc2dd 73576662ad1c5749893140636c176354 735828a815ada4ed36623e49d9e44275 +735927794e58fdf2a564f68e2345a058 7359694fe045d782f5b5a54ad066a92c 7359fc4db1a33abab75413abc1b7611e 73611382d12788a2280eab2e4b5cbf77 @@ -21173,6 +21423,7 @@ 73632ac9afa877eb1309d8f63b881e5f 736357d66940c2dd302c2ca992787ea1 73677e0f6a8ffb81b96277ceae9d33e5 +73678097b95fca7227653ccc747ea7c8 7368ae394ef7df40798650e2b41eefc6 736b0d9dea3d295f6b2aeeb725722eb9 736bbccf714d2310b68684b601b65f5e @@ -21277,6 +21528,7 @@ 74015d59b4e00808049e827e7f57b4aa 74047390fa03347b56ec7494f0445356 74053086568d6ac6de72ca0bc654b034 +7405f56e0b9974af8ca124baff75a70c 74069b2c22fbac543383686bdf7b6aef 7406b2bca26db7b86944ac70f68a2247 7407cd3c11a06e06a24e4d18cb4c8dd7 @@ -21316,6 +21568,7 @@ 74344a314fe38d6d44181e8ce6348a75 7434abb2bfb02fba9615135a4f5a7ca7 7436953f98a2b5d7951e095b9ae9376d +74372c8e192c6b9725a50796840b0744 7437bbd2c45a81ca0f7acb9c77954fc8 7438884927aaf1face75bec79cecc002 743a65908b6529a074de2e7f8c102b9b @@ -21420,6 +21673,7 @@ 74ae782776f02b63bafe875ee18cb000 74b1ee20f7a8a5b86a03af43029f1045 74b2b5f0f013ede6459483d5ddb323a0 +74b40a89c509f1b043ccb13cabc974d1 74b54ac5f0bc387571d7ab9d7cff6618 74b60daaa297b27bb4506b2fda6f5771 74b79ae555f8c73b93bbf03fbdbb12d1 @@ -21617,6 +21871,7 @@ 75cb8a2378fda15577cc41d2ccf03660 75cbbfb6081af3dd71b3325fc5d40aef 75cbfa258cafeb7738bd3a5a2e51ff0a +75ce054c17d7eb4693a2c5e7592e070b 75ce0eccadc6738212203bf26946ee53 75ce2eb8101c5c9b17c252db0478b4df 75ce3e7420b0a03838ae58527a92bcfc @@ -21653,6 +21908,7 @@ 75ef1937bce84a0480c5d3cb02f93493 75ef31d6d1e7e57f05969dd1a5dc07b3 75f0670a66aafdb6d75abf6dff85a32f +75f0ee8accb02d1954a22395d52c6033 75f34c99d3cc427ce5385a136a443543 75f35b34b6278415ff16797f5359969c 75f52ea2f5958d35b4fdafc862e9b4ce @@ -21672,6 +21928,7 @@ 76080fd492ab84d5d1d6ce0ee076411f 760af518db579597b0e88cdfce8a40e1 760bf130791092002df19da4de4c8513 +760bf641ad930dea049b28531721de66 760c857919d1b435880423fc9d36ce06 760da31c16b535e261a623d9498efb89 760e148b6dca612252ece3cd517a6a28 @@ -21781,6 +22038,7 @@ 7695790b05e4250102672cf12803c31f 7696719382e3945b63aa598bae0c1f45 7696da11dd801261d5d9c1118735a14c +7697d03aac0a812169c0b0310c3be1cd 769907303ba1e0fe4c635df229b7268a 769a582b05318157c12e459e61f78844 769ac680f2880f83d6c06c033b7f5856 @@ -21870,6 +22128,7 @@ 7709d26e19c7d0b28ac06a9cd083ed71 770a42ab6662ca7e7fca7d1e771106c2 770b7a9e7eb98ae9c543b142cfd8c689 +770c49b8d05e1047ed3b5d690b9bd37c 770cdabcb4f9e2726f914f7c909af0a3 770e71a0ae6084079801738f2a44ee9b 770f013488d52caea0e3a99f429def66 @@ -21953,6 +22212,7 @@ 7771c76d165214d7f9829583ebc8025d 77725ff56f4a2eb83db729bfaa04958c 7772c256dbb31f6e8f818dc09bcf1c8b +77738b9152320cfade4deb91724c5d59 777487621c140313d987fbd6daf0de20 7775e7bf51ec494223720aa76eaa82db 777699c6477339ef8d1edd0609d808cd @@ -21980,6 +22240,7 @@ 77976d9c09c0338b25daab727edd2ab3 77977ad36fcbc273e3063025e911d084 77982a1c3dd33f0d834b1ff10a3cac34 +77982e98a03c981ee2b609582b4fd4d6 779cb8f0ab0c0bfead50768f964726d1 779fc40403e245bbfcd74acd87188830 77a07d06ecf5e83d5ebc59743f05039f @@ -22114,6 +22375,8 @@ 7851fdad4f6cfc066013b9bc82f5e0c2 78541a660609639064cd142d9cffe7a6 78549d0049cc3e2f3306cad7225a668b +785541d3aa9d0f6fd7705fe5be8f7c65 +7855517902a3e0d3f7973109671149d8 7855ababe4ee7a53f8806835236a7b77 78576f0b57b00f7c9b156c6f36b093bc 7858a4b7bbd17ba7e048be0f0971e3ea @@ -22208,6 +22471,7 @@ 78dd71baec50bd2bdb6150c7b53a5ac9 78dee1311798c407fe985ca8ad4afe92 78dfd469f85e79ee6cd6b3cdb4660ccd +78e12516a01b052907b030563e3e0585 78e2a6946a6551139a899f159d027d24 78e33cea9b0db36c547b222eaf8a3166 78e537acba0f11fdec830debd60af15c @@ -22407,6 +22671,7 @@ 7a17bfda27edd8e02062ef17d85ddbfa 7a17cdc8c6a301adac497d282ca9a40d 7a19aed94d023a0a0633af3e60ee73af +7a1aed534e3491c3846d6a314effbc67 7a1b5d1422f23b733f55bf2ec9f20380 7a1ea1a711aeb4aa443bc0fb6fc8239e 7a204163e3b0660e4fede7453c7821d9 @@ -22432,6 +22697,7 @@ 7a417f4b4479b74224536ef2ad449c57 7a429e82ab7a4dc4f583ff04d7eff7bb 7a446a447cb3a32a4b75256894994d4f +7a4d8e58192a46dc067490c87e574376 7a5010212ab178f4712c6859746d4647 7a517170207cd79277721642da9713b8 7a55fc5a8f722d053d6783a14171e295 @@ -22480,6 +22746,7 @@ 7a85d7a5cabd2293063a6691a4efac2e 7a85d8eaaf0455b93dff85ea4e5ee98f 7a85db31a721579adc2d3615a4e07556 +7a8986320c2983db76826071ceef10af 7a8a77ca6c254eefae2508d517734206 7a8c5c00c977b493178bffb249c2cdeb 7a90528da0d2b3e1d22c81ac1081aff9 @@ -22531,6 +22798,7 @@ 7adf918bc5996dc0f861c505d5f473ac 7ae1548a20a10899bf8a65213bb19e20 7ae3d8f734c44331546ef68176fc3b47 +7ae4195794435cec9308c3f8eadc2bef 7ae6d98046774cb18b2ebd232a145a72 7ae771e1e789cba22a034b16daffa4bc 7ae7cd57564e22b6c6479c3bf564b5ee @@ -22726,6 +22994,7 @@ 7be01473e9155922d5f8563c82e2d211 7be261c44f3c0632172df39822b02fd9 7be55fcc5230bf80ff4656d2fb946db8 +7be5f8eaded5a69d684127b860684b69 7be6af9038bd7ffb585e77a22cfd82a6 7be6ed40f6f701ad38c9889b3076102b 7be82cd5d5a54d27c8de9b4f4b352bc9 @@ -22809,6 +23078,7 @@ 7c4caa1a8141958ed6e98d857f07d4db 7c4cf1982e212fcb8382464b17843b9e 7c4e91e2d9adc3813772367b3dd2fded +7c4f9961f11f217fb6ddf3591f352928 7c500be85309ad3d7bf7033d7409d003 7c514262dedffac01c1d5e8ab44eceb3 7c5271b74d8aba5ee5820a2d1a2cb2a4 @@ -22853,6 +23123,7 @@ 7c8601c87206caa1e5422143875deeb3 7c8623e12e54a39e7b4783728e6146bd 7c8735257fc745058fc5527cf32c3734 +7c8bef1d22c88dfb8b81cac586d06f33 7c8e3a8faa813dcf01aa8831d54cf664 7c900ea5aa2d9d336c65f88f0731e310 7c926c3808782d3c8d41b2e72a7c3ba7 @@ -22910,6 +23181,7 @@ 7ccf3c59f3d23ef2e19672b85204c4c0 7cd0fa6b239ab1bcdd048a78b9330f88 7cd1325eb1c808ce561ece15d23a1862 +7cd1f06a0b52939c63d68d60ea34fb3a 7cd21a309fc617dd218959b497829741 7cd3a70720e88b6925b50f8b8040fd65 7cd4ff0da531c9210415728038028b1c @@ -22923,6 +23195,7 @@ 7cd8d8b07f266171e66aeb2aa2170777 7cdb9e8cec2c3421e46462957fa64142 7cdc24bc4146db68b97c3a93aee57478 +7cdc6e72dc3465be6e6a8f17339a41ea 7cde742f8b709c9c12a5a67717dedf54 7ce011b5f3d631a8852a87a52580aeaf 7ce2916aca2b2ca3f7d8ddae7f196072 @@ -23057,6 +23330,7 @@ 7d70c1d000dd4953ccd1c07ead1b6fdc 7d72ceae5e47f32b906d21efdfd990f6 7d748bc7d83e72f3fb67cec9ba722ba5 +7d75919652d60d04492d317fe22e50c1 7d77d41ecbb64b1c925c28a01d62d5c1 7d78f46f5c984244e315cc0f28979162 7d78f945a061f8de4938c171076de403 @@ -23126,12 +23400,14 @@ 7ddab776498c33abf98dfa069499674c 7ddbb683f10792a57b3b7009d03bf6b0 7ddc901d265679741c7a70d77fa912dc +7ddcdf4d206c086081d9c3a91b4636db 7ddd00725d2934615a81a0c1db5932f6 7ddeb951789296cf118875c137961448 7ddf9c75de11b4758d70e12b2f9bdc1d 7de1f8f71cda51550798a4410e4a16f8 7de419fdb5788d46df45ff679979e1eb 7de5d63d2da9751ddca4678f41b42b90 +7de6df47365fd636976dba8f0c72e2a1 7de723575e4544786693cd2919736f33 7de84a8be1a8f313435d9094eeffbc08 7dea0c0d79955cca0196421045013923 @@ -23195,6 +23471,7 @@ 7e4c76b54145ca17eec7b345ac072140 7e4e04015c08eb41275467e1f081bedd 7e4f6a83cfd1a19a16c938f4fb070f0f +7e500fa0060b9b4a191ec960d8edd0d7 7e511345dd2cdd7737089f4bf7bcbcb0 7e51167ef85489c34300af1b9dc774d8 7e518b25cdea39f1a8d0df26e6d73647 @@ -23298,6 +23575,7 @@ 7ecd1364082050289574c325f073a1da 7ecd641c288c539ff5e585699db5cb94 7ecfaa1ab9c8dc31e77996db78c42bfb +7ed013e0b6f5e5158999f7b93f7885c1 7ed06acbfd5018d1b53159ac69244b42 7ed18d80a92c176f6dc987b9816a7176 7ed2c4059ac582804b0a1587ac6f2c06 @@ -23337,6 +23615,7 @@ 7f05e5602b4429c6074f73b42e4853df 7f08e5020c901def10735b5a02bd6a8f 7f0b1e83a2120c19a9a1d7d5c82c0ad3 +7f0cf5746566b8d317605e0e79686ca3 7f0e80ea65e9e7639929fec6e22c06ad 7f0f6e0fe03a061eb2cf41abc6f6b810 7f100d52ea2f391ae3d1bf3b09dbf28a @@ -23364,6 +23643,7 @@ 7f3d60eae259b2f443d490dbf7450970 7f3e2cd050ac0581723f2a5387caffce 7f3f00b418a5b934bfc67b185c12c6a4 +7f3fe8589a68e361d832e3fd81f70302 7f40967c01861048fc4af442cd1ef7c5 7f46fe858338beb84edb920829af5d2b 7f497134b0f11421f1c629b316858a60 @@ -23422,6 +23702,7 @@ 7f9beec149237f2e768caa62b206da5c 7f9bf2d696ec2bcd7d64f43539001ef7 7fa07919dd0b5150f0c9f41a5b7eaf49 +7fa0fe476f2d8f2e4fb68609d5b59c02 7fa1e206d230c79ac3b1e56cdaed19e9 7fa298985e6f53a70b984b938415eb16 7fa39bda04142780bfae232633c2bf3d @@ -23454,6 +23735,7 @@ 7fc260034ff7bddf7f08dc94a8d7f419 7fc29366de41d5ef24a03e67885f2ed9 7fc2e7a2ec30d8e58dc8340753a0d8b5 +7fc3e3862751905fe1754960e112939f 7fc85bcf93d13a1f00338342d04bb8bc 7fca16c35c5011400f9de0385eed69da 7fcc2a7c0d6514a96c67e89e21436452 @@ -23579,6 +23861,7 @@ 807e05b73baf6ad39941342d850c3ec9 807f57388d6d83715e42d5e92f3145a1 807fb29dbc83cab65ff6a87f38737000 +807fe027aa8b5aa5ed5f854c61f73ccf 8080b4e20fea202b04451ee182cd3027 80836201d1c9f0ffbfc6df8d72f0fe37 8083af61c3c03e4dbc649df83fd2b4b1 @@ -23630,12 +23913,14 @@ 80b7eb832169c0540979fecabef610a5 80b85d348c9f977bd5d7574584eef957 80b96cb489be97755efecdf2a7f4bc1d +80bc83f179ccb15b5fc105bb8720f910 80befb4e9bf34560b46d753ee6115acb 80c0661e3a1ce54e58ec1b2ee39f6cbc 80c524454f069d8fbdbe6d809a49e837 80c5d6f80eb81faa4eae1934803ddb72 80c6dce86a902bad249c0f1df3c8de92 80c751f7484ae209e9032d404c1b1e68 +80c99a4c185dcc808e7da4d33b275cbf 80ca08e79967a5e187670ed155d678b0 80cace680ae67e51ae08d5002f1102be 80cb8a0f5dd269744a199e6778125ecc @@ -23663,6 +23948,7 @@ 80e6515e8ff466adb395fc5b81e6d668 80e71301427cc236ca2ff1f809a3081a 80e793039bb281a5d60ee6a9f3ab6bd3 +80ea0cf646fffa618ef9aa589b9c2d5e 80ebeb440addfe5ecfcb69951e577abe 80ecea98c9f5b6863e4b0ca7c4e0f404 80eeabc840654119dff87c5ebeb1ca44 @@ -23881,6 +24167,7 @@ 82137a6c4eb4c424dd06478e2ff37a99 8213cb107716013405dc8449f6bd9700 821418987dccdd7aa80ab7a1b63b0166 +8216ef135438ee0e5e84120646bffbdb 82171e1280c520722ae4832ec013383f 8217751134e8a0fd623de86b2cdd1016 8217f4cb5e681570ac1e0cc6e260a90f @@ -23898,6 +24185,7 @@ 82242198b54b6e05c31b6bc28853ee4f 822513333e2a012e50aa133ae08e957d 8225ac2abe1f0870474dfdd95beb2b52 +82280e111f286980f44c836c9cc4d6a4 822853e3217cc90fb53adf4dcec43d48 82287f98dfc677e2490873a1d3749b93 8228a6fe3b4d00caf59806c36c7a0c99 @@ -24026,6 +24314,7 @@ 82c18ca6001b78d031d36ce836a14906 82c4825f07a87bc3af5302fdefc3345e 82c4c4eaf5d9b650d59652886940246c +82c5c423753f83dada9b7b3b66e16d9b 82c7db54af28eef39b926d5a0ad3f33f 82c822f940e95a6f1988e1e511ed706b 82c8c2fe805a7c58df15f045da208f3e @@ -24124,6 +24413,7 @@ 834cca4211ffd4c8c40abf11692b13d0 834d6ed4a1cb04d83d4aad8bf236aac9 834dff0a681e8643edd0807c4bc87122 +834ef387f6dee3abe078b3f22aab02bd 83520f967cf009ddb4c6f3da6057dda9 835387ef9b03e5cf05938dad361d7922 8357a579a6bf7d5e4f737c00e124d0d9 @@ -24135,6 +24425,7 @@ 835e25622dc133f0eb817fc43be17dbf 835e6e7e731654c9e25ed7615873f409 83609b47f041e014707e693c0c5b8d8b +8360b230e07ffa5693c542eae9338729 8361a8c46343fa1679ead68e3dabd47e 8363c700818c4c62444878bfba7398c3 8364282325357829132979022f36122d @@ -24214,6 +24505,7 @@ 83d751146d2e4d8567f3e6e36c1c6cf2 83d97517eecdcbe3a0e38210a7a85fe4 83d9872f813164583e8fe2ea7b6a3412 +83d9a357d8d5316afea8d9fee02394cd 83da8d70a1fae5502e7933784aea4ad5 83dae7253fa2a15e5281563777bdbf94 83db0bfc343c94a97e1534af62f1ad8d @@ -24357,6 +24649,7 @@ 847c6afaa376bc6e3aa90951a84e167a 847d3b7d07689cc4dbfd0ed95d1c8ef6 8481d4a649c8aa297b95abcd67e773f6 +8482594fddb68d605953d8638163a554 8483e42baff9a20d6a741eff831a7c2d 8484b8b462e6b90c95b00d72ce412201 84878812657e7654433f1ef5634e41c9 @@ -24402,6 +24695,7 @@ 84beb7ff4e448fa8e4dcc61b9f233535 84c028966be62a43bccbb71eb6ff6916 84c05f4b908d1dc9d6f17b94c13c8d88 +84c2046bbdd0a020ae779100687c5cc0 84c229260f2470ebdaebc1c11eb72b44 84c23393ab852a9f78b20a89375aed03 84c27bfcb2ae53434326c287ab16c2f7 @@ -24432,6 +24726,7 @@ 84e4a8be96ddb300d7c9381374a1180d 84e64ee7030b38dfc925f73b84ea795c 84e7f26f43d290c86071fa090b9a40ad +84ea81179cf000181631e08243fd204e 84eb38e07016b73fc1adf920ac064489 84ebc6d6246b24f595d0177b18199a8b 84ebd454e153d5cb997c972833409754 @@ -24570,6 +24865,7 @@ 85add775fdb1221b258508127213259f 85ae0eca034f4256acab3336e9f46d8f 85ae1a482a4e26464f0ed76ccabbc3db +85b106c72537b88a5e6018387a37877f 85b280a919137d0290631798d73e9863 85b3a6fc34762318dad203beaf6af756 85b51be6d867461088452c9dba9fa390 @@ -24694,6 +24990,7 @@ 8653c88ac7fafc4a98d53342b447b436 86548f1221fac6f8c33405bcc8a2c61a 8655a527f16f905a6819a593116f4e16 +8657b40c34a0df0e500f5190ef5e3dcb 8658036e4357ae183d71c053ac5905e5 865b0d7f48de8c73e1bfe163f5b2fea1 865c225c0c091a22311aa17c78254ca6 @@ -24746,6 +25043,7 @@ 86a207c43337104561ba31fb26905ced 86a45d7139cc02c38de44ecbaee935ac 86a4873daf69c1b5483468b47293835a +86a7efff51ca153b9ed25adec17986cc 86a8b0762fb2b48b0f29053b1ea9d522 86aa6296c72e0216aff358493e64b0a3 86abb4c3090f315470084bb1aa39e2e5 @@ -25048,6 +25346,7 @@ 88404fc54162654a91e5c0be97aba97b 8840877b33e36f67cd3a4e868158a356 88410258e0d9934177e663bc89f8a807 +8842c26c63a408999295aec1def1214a 8844911451d1383740575df568233046 8847e4a41ab85ed6c13aa82613884ccb 8849c3cab3302475cf5fb2c5a5c860a2 @@ -25111,6 +25410,7 @@ 888eb1ed101821da79ecaad04291347c 888ebf8ba7d236bb235cc42cff62e260 88914d15af1d36a808741921dd509333 +8891f683b48102b7f1eac752a94d4737 8892c34af0c46b50333a747715cef5e4 8893f6fbd92948f14d5abb48a9baef87 889440f5c8752ec1c6b45f27658f87d5 @@ -25242,6 +25542,7 @@ 894939e4f460a6183ae3d83820efbf96 894b1fa7531ea9ccef89f1e55e480206 894b6e9b8c53daab8e0097246253f586 +894c286d9794020539cdc980abfe293b 894de54992d34efb9c7e77ff44387196 894f2a4def292608ee7e0793fab0aa64 89517304ccb0e7085dd1a1647418b8d0 @@ -25337,6 +25638,7 @@ 89cf382621da0eb52454776be34d0932 89d0148b27b2a3839fbf5569a692ca80 89d1c46aba7b8d605ddfbf2349117e7d +89d2e53c8dd4a1315433b501871a3d29 89d7a7dde5212bddac574126db88726d 89d7dbcc341c0b38eda1977927869baa 89d7fd3d7bec3d6a655e27cabfac29bd @@ -25409,6 +25711,7 @@ 8a258ed58d9b33a02943a013b5086d06 8a25c4cce3b2f3f4fa241294fb87ac47 8a289fa00cfa390dfc2f7be2a93af629 +8a2bd013947b94c07c2c04248d25e58c 8a2e328c9e8f185d85970a1db0a85cb0 8a2f5b2a4877c1809538c67aa42b8cd2 8a2ff304aa6a8250cf6269043d53354a @@ -25574,6 +25877,7 @@ 8af695d58ce404a42e6091d6f0daf990 8af798135ecadd08bf50ea423365bb3a 8afbd1e794c6d1e70b4d62c5b7da491c +8afd1bcd4ec6f9161f774b11f7eaaa82 8afdeff88f6c53150ce4233e1108ac94 8aff5458f3963d60ac3627e1725b379d 8b018e86f77f0890b3a3eb621f012395 @@ -25593,6 +25897,7 @@ 8b15434b175b3708576deba4f4dd9a70 8b1589ad5d144987dbfe9e7da315db02 8b16661f413bade555f2631c07fce1c4 +8b173331e76bb9542fddc1fcfeab0d6b 8b1c2890ed1b6d50341dd7f4dc61550b 8b1e38c7c3feb994dde362d6c6fefeb7 8b1fa0d61dbc3fa48763ca12fc8e6d18 @@ -25635,6 +25940,7 @@ 8b4fdb36f4533cc7966e8c9472e4d188 8b525e05bc12f1aedf91649226928a72 8b52829a49f3d88c9b4706418f3b04eb +8b54e6b0dd8b0dabec33c4a23ca9cf45 8b5599e6567c85b13dd0d54d8ba02dac 8b5714caa539737d515b54a2e7f6813f 8b57349e64088670c12aa6d2ea0b3d4c @@ -25970,6 +26276,7 @@ 8cf7b6a8b62c5f19e540d54b1731f323 8cf7f63f192600c8609eaa94ce987a82 8cf818970f930cbdfa093d182017efc6 +8d01039542ff625197a462824879b43f 8d027d315926cc3d36984aa1c8677dc3 8d067acbba0269358c533eb23c249da6 8d0779c5d7f08572e84345e73b4c9dc9 @@ -26024,6 +26331,7 @@ 8d482c21857c39a10f235f20567374b5 8d4a4780aedcc4d1542a25bf57ce5c70 8d4a575d0bc8ed2744cfd458e0b2c61e +8d4af5f20759a1e1bb6bd0bb330a14cf 8d4bf9f8fec320d956b85ae821bfc79f 8d4c13eedc28774feeecc29800090142 8d4eb6c7410795044cbc15f6a18dcdb6 @@ -26125,6 +26433,7 @@ 8dc32c174e48a54d52dab9eabb551767 8dca6b1bd495df2a2003a94086718ea1 8dcb778d1e9aa63fd5edff6b0af50c1d +8dcbb50d61720dcbed773dab8f0a02f8 8dcd93dd2640b2bfb16036ccdf8091cf 8dcfceb39987f94411b24bbde51babb9 8dcfe1bd669ba22c228d6b24de83efec @@ -26203,6 +26512,7 @@ 8e2403f8a00afee755407b2dd9da94fd 8e2424d6e0c4c174b14deab413ceca41 8e2809b288b091a657a394343ebe216c +8e292b8d03b3eb576a80d54d105aedcc 8e2cb06a8e0c05177f3c4b9a90ba8cac 8e2cc7ff5a527dd8ffc66f74649b429f 8e2d05a4a7fafbbd104d8292b2d7daec @@ -26263,6 +26573,7 @@ 8e7ce7ed3cd71a26a628b5526b9bb90c 8e7e71c5d382c7c42d25e86d4f4a582a 8e8209c20a0dec35e41bf93562f4ae46 +8e832894c939e4549e792279145e48d5 8e85bb5053b5ee758bb90a80f40f06b4 8e87a83b177e040663169e2c874b594a 8e87efe515a0b7376c3cd6258a30abcd @@ -26301,6 +26612,7 @@ 8eae485e8dfa384efe6d1a72777bd6ba 8eae63cc727dca4a2c07f3e12e602f90 8eaefc832e82a06f6da939ef6ca75854 +8eb0e145e274435862678bf78fd8784b 8eb339d7332b621ac30b4f865548dab7 8eb3d6e880fc18a3ff64daa79b8cd630 8eb5461c87808f51cba76fb27137f592 @@ -26409,8 +26721,10 @@ 8f4b0ed0000f144fa10e38fc145cca56 8f4c52969f88ac0eceb88773df213aff 8f4cba4840ae12cc54cd7571f47fba5f +8f4ec6b32bcd06ce69752437ff870fe3 8f568e606a86ac3317e997f5cb2a656b 8f581722066e6de9a63e5897eab79a68 +8f59c232f60769b2769d28a53ac522ba 8f5a925b703a2c06a38dd674f37b0f7f 8f5eb5f0375c533bc210d931539d5df0 8f63f9b64b1b374fbb153132e573f034 @@ -26590,6 +26904,7 @@ 90675452306d2884bd6c7757a8ac7df0 9067eb3fdf9e7b1f39b13d662f33fa8f 906a2f2587bdef6cc1bbb348829540d9 +906a45a3ff028faea778a80439a9ea9f 906c7e62422e919402a661b96a5df07b 90718db6f1912cf152d4eac78aa3dfa4 90741b651e59e45a1a6aa455ab7b01d5 @@ -26760,6 +27075,7 @@ 916499086f6cfa62a557dae1288cf384 9164a6d3d761b321b2fc5138eee65a88 9165565acbf29fc95b859b605fe06001 +9165923131095236504fbb1fea67d085 916622c7b5bdf44798304613115c6882 9167a49f040f2a471ff86180abe2a5ab 916938539ba304a857b698a6c45a0109 @@ -26842,6 +27158,7 @@ 91cd7296d6532de83ae917a5f470c833 91cdb0f310407dbe2aeb9bb496bb5e74 91cfe5882f2a029cda771ed58c7b3a84 +91d0f2af90a3bb140aafddeaf469b0fe 91d3ca86eec6fab8f0031e8b579812a1 91d6f2fe6bd28c68ff4b49616103fc10 91d7f5e444e1a40a9119de4c2b4ee3b0 @@ -26891,6 +27208,7 @@ 9213fa9b42fc13b77abf276c2d3229dc 9214275a121eb9341989bb642428b44e 92144d2ab20a1a8bb36548116e260e15 +921753b7998d55d24e7bc0bfd43015bd 92177b7685a2a5391f0cba700f95e6f0 92184ee1fa5acab9a258910a13dc33de 921b65853294feaaf931084caea436db @@ -27034,6 +27352,7 @@ 92d85c8419e344a168760550bb84ffdf 92da17c05fd9d40ec40b26b7c5615a29 92db1859f63a87e9afe444e0aa77d9d6 +92dc39b797034bfade65d779684e3c07 92dec3b3a721b5e9590bc94d6c0e2321 92e0db778c9ba7d5f7355e62949b0859 92e15086fec3362b31efd50281658b87 @@ -27099,6 +27418,7 @@ 934e5f9702a847d7059c4aac35b2c7bb 934ff86b55e92a5e131e6913d8262a6d 93510376105dd925d32af0e7f7e58395 +93523413e531abc976d8cf447396ea32 9353d2a619bbb14c3c4cffe3c7370fda 93553af2dfd3dd8e169e2c702a190749 9356828abc6fa06e0755c446ed0fcde8 @@ -27127,6 +27447,7 @@ 93727b5271da8e236eb12e947faa8298 9375d715ebf449b5d92cc766f9db2d4d 9376e5ffe48280100648838389e28581 +937854dd824a63bfd6f6d7aeb89d95c7 937b72e87d368a2bcf16631c469ddf9d 937bec014319643ef5079f2f71c9736d 937bfb52705b7cc3fe753f96c95b41f3 @@ -27226,6 +27547,7 @@ 9403c1a18d39e41618932c666801bd37 940426cce64687d10717ebac97ec50d0 9405a04bce863d8b00d6a6bd2b12d936 +9405df91fd384649064659aa38d1cd95 94065804c55c29e51daca228bbcc408f 9406bf23bb5010030b67a06c8c619dd0 94072b4a299cc7649a2118851d16f0a6 @@ -27247,6 +27569,7 @@ 941fdd202cfeba445c1920bb8ff51203 9420a0d727ff9bc789973b819e683be8 942289a395f27b23f9aba7d37d6e5f0a +9422f98be51edae22328ffe56a82affc 9422fe83700184d381c3c709c24ff2b8 9423a90bf9f82bcc79cfe32d5f852d87 94263b268300b65e8f54e939903b716e @@ -27347,6 +27670,7 @@ 9490fc69f29f7c738bf05cf6938fa77c 9490fd4d763ba74d10fbd8a07f283c4e 94911a33fce6a0c208901f96c1714181 +9492a7bfdd7923049610cb5d08068190 94944533193b125aa4c41346e777759e 9496651642680451088d0ca10f90eb37 9496c4bbe2b5268480acdff0bb4dfecb @@ -27393,6 +27717,7 @@ 94d8c5a640f61bf427c756f70bf3dc3f 94d91b7e6e704e41d4cbdf0c673a43c0 94d95577381bf2d6890b28a946b3cf7c +94dad74f94cfb8fe56a740795c1fc312 94dcc1a627a5a8415adc2c4f770b8728 94e22cd21ee6e3d00de342b9fe3d3664 94e34579459b8bb6fdd5249a5c46410f @@ -27412,6 +27737,7 @@ 94fe53bf2313ad8130d05e1a727a7ee6 95011644a1c3bad133624e5f5ea9d15d 95022beb990ce3a783d94d6d9b1b2aca +95041687e72fb33c1d61ee1f11a24d69 95046ea16a6915cbe053a370cbc7f25c 95075c54a9b618a713962fa891445769 9507e1ee309b9b8437cae9400e20ccf6 @@ -27507,6 +27833,7 @@ 9585e97ea840002561ff3d6ee87745a2 9589bd9eba941a456a3a59cafcd3b352 958b65a0d3513ed7e08bc01a142cc40c +958ba498090a1feb29b2fa87d676b983 958d80ffd6dbcf767c9026cf7af23e60 958db69ac6e2b0d532f557bd6d7e57a5 958dbcca9a460700c62c0b8ca34f0045 @@ -27556,6 +27883,7 @@ 95c369bf2c4ff8b82034a9e4b891ea1c 95c4438b6b333239b27e3251c72e289c 95c6bb3fa41a28ee387d2cc4502c5162 +95c754684fd7fd7434e96fbeb18a0c30 95c9bb6e6603d6abd974b6d02142bb7d 95cb1f9c3c9b160d3c8031194c33e247 95cc5257da7fa625bdce84f16b2e19c3 @@ -27692,6 +28020,7 @@ 9686298e1751d9d30d98e73923d2cfa8 9687085574971fa7993aa763904f870a 9687614868435e50c728fb858a88f4ec +96877dc946908ce3ca3e3a372e42179f 9687c8cf81f800b5288936cc8602065d 9687d8567e6c5e90f2395f001f9378ba 96881bed895f79e433b6be15f8c12054 @@ -27711,11 +28040,13 @@ 969ff44228aca4326420b47ed1cd7b1b 96a08679279c51a0ff5697fd131389ef 96a370b4b0e3e6ff8375445945f8cf27 +96a45e8f4d911b18482f5a0f86767f7d 96a47ca681fe7f7748dfde0468496638 96a5bd4d55f675a3646561475132b89d 96a9663f9fc611803e78cfb4c22c41ad 96ab2944b4d1da76a4d7817acf167f5f 96ac117597dff44228e56ae08ed7cd56 +96ac645323866dba9bb256c9825e14b1 96b04d9d63f6b1b22ae31502e02ca42d 96b06332070528bd73d7896cd96aff04 96b08064f67b0a4e89dde60fd3f3a423 @@ -27756,6 +28087,7 @@ 96ea3192819f00e0bf26f936b34b105a 96ee4095e7a11bc3235d75eca79d6210 96f086738fbe1a0f51bb35a75a785c6d +96f22f0e224bedc018ba9d0d58047bcc 96f4b24d539b12db45da6590ea3fd005 96f6a99daf70767c29a07216dc696dad 96f6addabf3c592eeed39f95b7a5706d @@ -27875,6 +28207,7 @@ 979f031436a044eeaacafa22512df8ff 979fb768c4ca2877f3b46d7bf3d37d79 97a0d85da034793e25fc6e588c0c1d2c +97a169be263414caf01ab41408cb3c2d 97a460994a31ea68fa9a95f7ab8db2d5 97a468f9ca915184a66a71641ff99ded 97a5e968fdac482ed9d925602b4c51ec @@ -27892,6 +28225,7 @@ 97bc5f1a024dd9c014a36c5dc7277c41 97bc770cbf6fe4758d7ac53e0c7dcb3d 97be52382e7eaf329e680138e9a1525a +97bfaa9bd90f838812e43a1bff6e976c 97c00e8d22c938955164ab4513f05838 97c1f56f20c2df3a3229296284007899 97c21f59fe3fab8e51ef7ce5b8b3e687 @@ -27931,6 +28265,7 @@ 97ea4eddae0d1801cc1e0bc83162fab3 97eb5cff30c4e87b655dea61ae8436e1 97eb6d47c85c56c6b9186745f0219dc8 +97eba394c82a0712fcda5006f0677e5a 97f0afa684c351072d65474f39ac6979 97f14f65293a7cfb3b6870d5af84c1c2 97f2870bc46a8d069ad0051f8370ee00 @@ -28114,6 +28449,7 @@ 98db906ba246b1cc7110fb4f07530f3d 98dda5ac9ae6a0199ec9f8e486a115b8 98df1ce4fef803d926b9639f9d1a60e1 +98dff964ff70dc10712c52e4595ae794 98e08f5136d52d51ff1189e7576815a4 98e521ec95ee23c9b65e42de479b9111 98e69baaf6e67f6e0f59351384d5ee8c @@ -28169,6 +28505,7 @@ 992e797cb38c74a5f22a55f6538d68f8 992ecd09ed9489a707d97d63c2ebc5ab 992f8b2cf25f4b9c436bddb0389f71fe +993009fafcfc68ebe46901a944d47d1f 9931c730898a2800fb30c643c21e42c5 9933e8ada843fe5cb2660a60a9ed07b9 993438417815b02b92347f118905038d @@ -28402,6 +28739,7 @@ 9a5a5db8bca3f1a92c5920e8918d3290 9a5cd4f3261db1dcc84295dd75a38d13 9a5e62d810ddd71f131fef89daaaffb6 +9a5f4e25218737e8084dd06f7aba54b6 9a6040aa3912d971dba0c4f345f6cb9d 9a617256546e94b1fbf9ce2de483c36c 9a62894f638477f4b2a32197b461e6fa @@ -28485,6 +28823,7 @@ 9ac6daafe3e199f8328bb7f18e3ab30a 9ac78cac848528868b0bef6d5bec09b5 9ac856a06353f0661698308dd6a49a17 +9ac8653399d01229ad2374fcc3a80fe1 9ac86cbe3d00f521ecc29750dadb48d7 9acd309b60b0da589251716563806a57 9acdd0abebd3ae6715416ebddbf4d437 @@ -28540,6 +28879,7 @@ 9b0d908e4aa5cbb474e5d7c90fb8ffdd 9b0e7fdc0bd2050e47d1e99a688b43e9 9b0e9bac727ee37c6c0f6bd1a5a548cb +9b1089c49e693d4f6b600a8e5c67abd6 9b109829547e4352b3c882709640d896 9b1129f544f3afddea1d4fcb1cdf6627 9b13910097c0655d89b0c1273490151b @@ -28856,6 +29196,7 @@ 9cd6eb23577cbfb44cbb646a0314f172 9cd725669ad1417fb3c9e6f9397a5e4b 9cd84c77196ab973edf14a0c1cf8afc7 +9cd9c946ef0bb3102e5c0dd9066370a6 9cdaa71d475b8655e9304567c45fd2d8 9cde0e3dfdc4fd3d27534ddf4bb0b527 9ce335116ab492f0a144157d95a63f66 @@ -29111,6 +29452,7 @@ 9e555015439f0a0754116199919b6af7 9e56d410c89237b7ccd62a4e03261c6a 9e586ddfb787134ec8f013c3b06fd5a1 +9e5a0a9fe73d9e04023079206913efd6 9e5a10dbed4f75493226c16211bc4711 9e5aea68f5862b96966c340a36dad6c5 9e5b073b3ddc2dd7dced0a19e4f2d9cb @@ -29158,6 +29500,7 @@ 9e8b20430ca1d10fcc33c691e0d94830 9e8d703a268d2d5c1d0b442aef469f3c 9e8d7672dd72050d26741bb497dc4797 +9e8e7a15c54693fe540d6e94f24ee7c7 9e938d92fd659cae26f2e70de70034f9 9e93d9a92ab65c337777fb11bef91588 9e942f39f68d97819963031b5e9357c2 @@ -29223,11 +29566,13 @@ 9ee601e68673d69e6dfe3c77631447c8 9ee72616d2faf9a1dc181755443de702 9ee77cd0e87fc80e4c8244e496b74358 +9ee77edb07f59a03294a21e91d7f90e0 9ee7ab01d8328fdfd5ff207fae84d0ef 9ee9ce06e3d53f1cae52d655624cc353 9eeb10506db1c8607208ddc0884a2f9e 9eeb164e7bcca9b2a7cc3749c0fd0e92 9eeb174636b3be39c7b1d391b596861d +9eeccce33310c8ed6a82a06ee7239949 9eed922e909c694bbdac06c8ae121791 9eee8e22bc45821618e044d40df74e81 9eeeec90009c0f9a91127c927a98cdac @@ -29243,6 +29588,7 @@ 9f05f46c5517de24347bd776db6fbfc5 9f063e82f56cb568793d4b4965a60731 9f06a04923087aa3e4f2ad9c7d3aafc6 +9f0d188a275b970ecc0f824313f5868a 9f0f21e1481800c9b2c3570918ab83fc 9f11a90b94c077da0d46a8949b94630f 9f122e1dfff15c54c54fc7d522fcd5a3 @@ -29254,6 +29600,7 @@ 9f171aa55dd3a5b319fd4b996ef1c9d7 9f1741e24207ec85de99653036a9ce2e 9f191088b6c278c4428268dd3df88a2d +9f1db129ade229c7f17dfba0ff280ed8 9f200e257386f251c6a3bc58760c313b 9f22ff86cd3b140e52e3d9fdcc033e21 9f235f49d6d7b1f9df0ae0e0db09c514 @@ -29277,6 +29624,7 @@ 9f42212341ac615d096ac994f755d0ae 9f42d0f542c592a13ed8d12aafd40810 9f44a2488c7c38331ada71a781f71198 +9f47002bbe7c27fc9dbc7b9e03118501 9f47f4b265b5c8ed562adf9b9e29678c 9f488d2da29772f33246a3421c022a25 9f49578edfd588dc99271d321333cbf4 @@ -29299,6 +29647,7 @@ 9f5dffd471f185426b310e50554f43ae 9f5f802f7e383091edf4f2d0c21e50f5 9f61a79bf942114640ffc67a925632d2 +9f6206bf9a38f1c47e23527dcec1564a 9f6223459c7a03f268fa274f25e96ca2 9f62bc6f1eae1ae3830ef830c995632b 9f64c7edd00b5749bb56ff98e6bc3024 @@ -29368,6 +29717,7 @@ 9fbfc8d2bc04e8c97b57c7765667f57f 9fc0139415aa69b16414d5f19714ee9c 9fc391c3743aa99fbe634a314be6032c +9fc49b0d0a13c6be3bda49998424209a 9fc87a319379d29eea2af266ea027833 9fc8f7b64a64dab23f2a10bc9ae91221 9fc92c4a69677c9f99ad3d66c89ade1c @@ -29528,6 +29878,7 @@ a0a4c8a8472509c60c7b5fb6d0b75ef5 a0a6c8cb0acab4dc0868f76f559d5e4a a0a89536cdce5073003d3d3367d767bd a0ac038ad9e20664c02ae64ee2b15795 +a0ac1d41d8fbda278042a40e45924adf a0af6594eb34895029b017f1f973fdfc a0b18d90424efe59c3373447204bc642 a0b1e3cc8a18d6844adcbecc5e36c178 @@ -29758,6 +30109,7 @@ a1fbc0ec4ecd6835ae839552e36a988b a1fbec59defa9835c9fc0b493af9674a a1fc08d8cc2daf3a1d4afd47ec6dd7a1 a1fca0f17a36fd3034638b3cce945e64 +a1fdf9a8d09178be6b4cf8cf1cbadab3 a1fefb1b98da3cff0b91394e515f6e3f a200b91c845e0ff11c3a5d0964d56f8b a2015a224442cdad71ddd6c02b6fe7d3 @@ -29776,6 +30128,7 @@ a213c71a93217d31288d5c347ece5b4d a2148d977f4db8b5b472cbc5f2b65283 a215021aac06ad7108d8c938edb2b7d4 a215c4863921edfa3ea574d3e12d0666 +a2174ec6e7e77e76a5a5c3dbdec5509d a217b4727146acc7e96330a0ba549e87 a2180d3b053a659b181c6943ff773982 a21926efde6decf956747b61248bab21 @@ -29842,12 +30195,14 @@ a27619ecc4927733599c91148e98a369 a2769e58eacc4575f486766d689ff4bb a276fa31721b5e140fd3624a04a242d4 a27b6827cfa0810542908d0c31f26b6f +a27e0f98479708623df261352b643c5a a27f3bc78e1414b2b8ac13b04c62563b a27fd575627be6029f2dcc06d813fd67 a28060cc704eee524a3a6b9110e9c684 a281b451bdaac030773a255cad4b37f5 a28508746ef4a5d38b108722c8578541 a2888b4a920aff6113322178e5f2aea9 +a288dd4d4bb575ef2f49722c6bd67546 a28a0fce85f114a7243fd84c9f8f4d21 a28bfc435618f984e87a265e5e64881d a28edc7283cda80c1dec724da13ae32b @@ -29890,6 +30245,7 @@ a2b5e5e3b99e918e5ed3b105b7eec3b9 a2b9fab6b4918b55c9a27cc4b9f36a8e a2ba374396ce74d7da324a2f0dba0098 a2bc7f3631d3cd6df7ebaeb2efd4d355 +a2bcf3cdf568356c09fc34898d037d74 a2bd3c160e71d6a7691a896b825f3510 a2bfd2f3a479c086ba9e6a4edae26984 a2c0bbcf8411d1c9fc2ef290ac96f143 @@ -29979,6 +30335,7 @@ a327ace6eb3d55a5defc68e141d57ebc a32878ae4d95c9a84c7ffe5f67dbaf0e a3298294b105977206b48027579e64d4 a32a1bc533f5011355662564a3140fa6 +a32acd036e32ab8b0cd312dbfd23f410 a32d1d6fe7bd194394de3f675ed2e70a a32f299a35d90d789be69677b3e8966d a32fc654e29c465b3b42710a75b0e880 @@ -30023,6 +30380,7 @@ a3598f94036535a3b8f839e8f4afe48c a35a50c866e09e881d87b799f2312b0a a35a6e0aef6a2fbf8cd9ac0ef9187340 a35af8a43b0c77652ef8cfcda68faf38 +a35bebbd8077c6aff4cc3b2773ba3a61 a35bf654bbd4961f470124b6f233b04f a35c5a19e8ec8f3c5df26232a8c1579e a35cfedfd2337e97101d23c5b5dcc3cd @@ -30109,6 +30467,7 @@ a3cfb706a4fe5642e1a3f760d4f29e77 a3d119cbfa22b1ef7651b4e9ae480ad6 a3d4ce5a389e94ac527ffed347fee50b a3d4f8902c19027691041e6c4b60faca +a3d683d320cc080164822bc354166d1e a3d730614ec9fb9268cc613cd825a2ec a3d7474c1bcb2fe00758ee88e5908086 a3d87983ae25bc9b8e26172518a0652a @@ -30120,6 +30479,7 @@ a3df9c612d032c495f4263f447ea2f02 a3e0b623d80bd21981ed2bef695202cd a3e1b91e3b966f8f72c7736ad32080bf a3e23fbecb2a82eff1fe24f18f714d90 +a3e42015f3d9894a8d3a2e03855eea80 a3e52fd2ea76987510fc039a25c58e2a a3e55e0f02705bb453effe43389b0b06 a3e6ce8347037ccb4cfc1486afbb0f02 @@ -30226,6 +30586,7 @@ a474c37adbb42fb5ad18abb9d1b06853 a475d5b03715c6f6ea0ae4f45ff12d30 a475e11670b4f7ee069bd33c231e3dc3 a476e9275f789047a67df812fa0f0ba5 +a47b241348eb52866382fda40ea18775 a47d5f404939c5addbf8a0d8e8181cbb a47e906776354b0986dbae55759fd5d4 a4801e02da996fbfa865dbf8549d25ea @@ -30308,6 +30669,7 @@ a4dd1b936c5088519542c6db56d58af0 a4de5963e2874b2b8321de80d95dbd22 a4dee0de96a477bb88d02470dc426a92 a4e06740ba336b7252a674e83e50d854 +a4e2c5f46e52d22f2b480e2fc92e774c a4e4a21f4395db7c876ceccafa3d45f3 a4e8652f42673f66069ad19f813f82f6 a4ea8a19a629e1f6f7c3f95eb09953b3 @@ -30331,6 +30693,7 @@ a50de03e8890f1f1e336a9332a68a7c1 a511ae9ace9495c309adc18f9b35603b a512462dee847504de2a6e96ba6d732c a513f06df214aef80ef9f3f0ccbb85cf +a5141eea4d0e149d321c44d3d318c468 a514cab03e089200b416714361799447 a51534bcf0425380186a1e7d147ed719 a51777b44f61d4dfb53a04b6fef61797 @@ -30398,12 +30761,14 @@ a5709665818dba0f530a7a799aa689e6 a5752cb25ddf13b75aa5e897ecaa0073 a57f612bd6380a6d808dd2b4cb547c4b a58004e07f419d34a92a592c5b8611a1 +a580142987bedb0d5a008c7f71dd855b a585ceeb6b1baca307089d3caadaa51f a588060611e019f8d710d35044516210 a58848ab73dd53b0e9ecd161c56976a4 a588a7820dc1de6f7a54cc0237c23d24 a5899038fecc6cb31962afcddb547c84 a58aca1d7f0aca0853abac48e9ed1632 +a58b7ea5876f7e4aaaed437b540bcb91 a5904be098d5092b8bfd4b0e7f9d8659 a59092baac5c24b55aa1e46054a21335 a5937588184a01a31a107ef5fc17b12b @@ -30411,6 +30776,7 @@ a59532a0afc39c2c45b7636c936fc788 a5953bfa251199bfc5bf438f20cca5dc a597c60bb0eb306a22064209be720dab a598358ead9a47c80143c4d7aef9d59c +a5984f51ab2e9f6bfb1800ee946cfd23 a598c58b7a620c3d7e5d4461860edb1a a59a63c947a00cff489f9868d79e945b a59c5d4d6638d79076d7963fb6d311cc @@ -30434,6 +30800,7 @@ a5ae5c8037e647bd349fbdb09beb162a a5b13e1e89c1b757583a8166b32f3dad a5b141cc9453c513c8fcf494e60f046e a5b42ef2282bb4932c9289888c182f0c +a5b48f1e01b117194d7f77fbd59036da a5b4cdb245a6378658dfcbdd37bed055 a5b6312d4917ada267cbf270effe6e8f a5b7d16110814a29a64c4e0875a29c43 @@ -30535,6 +30902,7 @@ a63a60feea0f46cd483f6f9dccf4f81b a63ab806139beadb26100cbe2abdd175 a63b919411aa767cbb7300dd689c86e2 a6421cbaffa2ae3c8865adae238ee0a7 +a642be1308d4b6959afc1b44c5eef24c a645bb76c15c4307218e18d8e3eef8d4 a647332a5c139395c9b5c7f7b145c2bf a64904ec4775607613d229b3d618b0ae @@ -30567,6 +30935,7 @@ a67739cda0d2b062dc54cd353985a9b2 a677442bbd185712c60f40ad5a23f105 a6774df0ffd0aee5291ada10f8a3e7ba a677d649f2aa9cc88b523b0393b1b29a +a67832baf41483a21f726aaab3135289 a679f2fe87693db62d0385ac593fb533 a67af4a39f6f64aaa7ca5ffeeb23d62a a67c4437e9239d846e92840729f04376 @@ -30601,6 +30970,7 @@ a6a59b14c4a0c0fa5c1b6208fcf2fac7 a6a5a862fee58c592439da1a0d875998 a6a75ea03d46691ecb8dff2f72d2a358 a6a7f11a21fee5c42a9d408f90e124cc +a6a8b80ed212eb27b758e9332a85abcd a6abb2eb03ab3e617f102abc082dc121 a6adbb9785138f55460cfe5220cb49f2 a6ae33e2c3ce8b9639c36925d473ee8a @@ -30662,6 +31032,7 @@ a705847862d9c3f0902e078597ff928f a70738a7dbc7bd48126e56092caf7d2f a70782d48adb0bf888d2cb7f91728fbf a7078fa9a16f3c8191af36dce145d7ed +a709c8c009b3c2c469bbc6ce391b15ea a70b304d22484109a09f8267a40b81ae a70c87e16d2e321ecd1e04e33dd6845f a70d8b44d1e9176a8279bbfbbec6f114 @@ -30958,6 +31329,7 @@ a8921e2fd94559e001cf7c37d6cfab2d a895433557fc323da3b45394059a9add a895669a2948cc6da6f217332165432a a89579dec31af404ba7935d6b0d00e9f +a896e12b1ac9e9053112a80cf6011c87 a898772f5af5d6d6110bf9a0481c639c a898bbdf5fc1074b64013e02edac9c11 a8a05dcbc6203bde6407f1945f2f2281 @@ -30985,6 +31357,8 @@ a8c96be24390dc7884ae9f609efa496d a8c9c547176cb01c560ee5d5d35cc0ee a8cb22502380e52f5bf22f9cefd079d7 a8cbdce74463d485b2ceffc4a37aa21b +a8cc74a4f58eb478afcb1c9bb555b90f +a8cdf73a99e2fc58ec1f814012e88928 a8ce9b503c4acc2b8987420941cc6979 a8ceaa230ad60ed6894a3545ca3c5f3b a8cf8c65ad81eee70d4e637a9bb9642a @@ -31041,6 +31415,7 @@ a92312f94e8aa11fb05072fcd320c407 a92360a23d066c4300b92f7bfb701027 a9236dc56e9938602a4fd6e211c04e1a a92381b15cb03bdd4a44929b2cecc702 +a9241585558e41cf86e13ff6302c21eb a9287ce9bce8a66afe406c1ae8f44258 a92c86b2f88bf3e5bc78966ccca5124d a92da6c0c82d27ff60d52f865e6e64fe @@ -31153,6 +31528,7 @@ a9b9bed70687d82fcde185075bbf2a05 a9bb18c354108ec2876404c07697557b a9bb5fb6bfe48c23992ae091377fda23 a9bbdf06a3adc72377c277a7b816af5d +a9bd8891efa1f0b28a9179826488aa3c a9bd9b414a12424ccdf8372d17afd9b6 a9be1a5f5bd1897e65d513a39f1a0fff a9bf3b9ac11fc355efa9da970186f927 @@ -31282,6 +31658,7 @@ aa60c2a1e768d3d36d2d9afb9f427c8f aa60cc7faaf97d0e3e78a530ad3ab87a aa60f455cc084fbccee8116a7afc217d aa62cd9dba92cadc0812107a79b87ea0 +aa66538c3072710897679b3628f1167c aa68b8e309d6c604b10b6b15389e004d aa6975dfba3903b3b3647129fdc88a67 aa69b0ca239ccebc81d42b8a6a32e81b @@ -31361,6 +31738,7 @@ aad544b3a8f875d6a6afb793dd59000c aad6d2c42226b58f11d9c74a01d937e7 aad78e32c66fc13a475bef8b7520df30 aad930fe252cc85cbda32409fcb5dd14 +aada45e39b1d69b7b800bae05ec7dd10 aadb0566bd02aa321fa530f74bfb77d2 aadc2d38b80dd4d6538ccb247ed0bed2 aadc8a42f28346015200d9c2681aacd5 @@ -31395,6 +31773,7 @@ aafff89c75257792a12db4cd105e0fd1 ab0056d9b5ad52efb744f29cfbe34500 ab00bef9974e42f4aa09691126cfef53 ab00ee593703ef7efef877d573015aea +ab029dd27f992047d680d9e146c6c511 ab05cb8e843228352e224fb219bb6f92 ab0b1f1fa661851047d8651d016f8b04 ab0c01f4ec23a8d81544accf86829ea7 @@ -31478,10 +31857,13 @@ ab67303c1de0373729eb29f4fa02b86b ab67c7aa27f10365d4bc9aa132ae6e81 ab6acc88c085b8360ee4539e7649530c ab6b55e69af3888b40d51b2ce224b955 +ab6cbfd3d66849f4972c34b964918b98 ab6e0578dc15aac24a70cdb94c159a6b ab72429074f39bfe502faf7aa8c63283 +ab73ef28325647ffa301ee558c8a7b59 ab789f8e2174e7f78c9a629bcc647037 ab78ca4727e4561fa622a3826ef4166c +ab79bee8eccfa718bf86157f3ad47779 ab8019ebdf6d9b86a48a22e0c0694062 ab8083110ae110de368adc5cd118f27e ab849def6697fbd6edbc086c74fa0687 @@ -31541,6 +31923,7 @@ abbf84e029708f9d85d6fcaa123fd272 abc4f5f11452856de7e696607732b6a2 abc50aa3b0555db74b7c59fd52843ad3 abc517fa349c6980454587eaae8a0207 +abc5605067b194d2112dd2be435aaa10 abc5f42d0ae742b0c2ed2067635ee805 abc633b1fae5de5e73a043a20d5b0889 abc6c3640fe4f8a656a415a140cdb452 @@ -31560,6 +31943,7 @@ abd7dbc0362e88231523f3c99c99e7c0 abd89fff00570d8d3569b4484e0023e8 abdbeb1ab45fd6f72e1723e3944bc168 abde670d99d9eb32d00b39f296488a95 +abdf4e354e5d161648b9c58f34cf2545 abe0a9b61bfa10c7c7bedc91cc41abf7 abe11df1ac4e40cf077ac534bc542786 abe1ea4e32b71057a66678863233ed37 @@ -31648,12 +32032,14 @@ ac4c45ca7a2f78454e095275f6e4b782 ac4cb7f32d0365e5ea14046e439b5d1c ac4eaec81773e6b7840a15167c901705 ac4f98daf8e489a7a3e4c9a1079040c0 +ac51ac0bdaa1fe71c4311476e969726f ac51c208ff39d3da777702ecd060fe8b ac520a358fa96d4b22b7e8e4babcd87a ac534af617d03e2c82a7e85271c54927 ac546de0bc3677287ecae5806fcca00d ac5564d8790907e965293c90870657f1 ac5655366e8919a52e779b4c64088223 +ac56d5df9bc4187045137012b1572eb5 ac59446c5959d7fa004d7cd82247b0e6 ac5aecacaa762f28ce76b449d0497505 ac5ee64ebb80f1d30c9f03ec52d43d63 @@ -31692,6 +32078,7 @@ ac7ed5462b0e60b64eb03eb7014e2fde ac811a9dbd4aa5e0cdc40d2a199e3a30 ac818c038c6f68b783d2d0628d90cb2f ac8356246ba3f4de8a644101c8e40397 +ac840c149e835e2629c05e87071c908d ac868241c4b6d906ec6af820dd732e1d ac8690625a9311f6f34227e305e51412 ac869375ac1b181044d78993717df56b @@ -31773,6 +32160,7 @@ aceca748401f5c87a315ad0462b2b45d aced3a3a14520be2fe57e080609b8789 acf17b2a10e7249b982976a5b62275c1 acf1e740f3d218d8230e928f2aaab8cf +acf3520215de8059ee5bb27cd3294fc9 acf592daec04b78c202afd65ebbf0eab acf5b028952e126500f4a0f82efcc5e7 acf771373626e79112bd3997efef9580 @@ -31831,6 +32219,7 @@ ad4d4ea7056fa9f8e58e6990dd0da495 ad4ea360aa25849a612d20526c892608 ad50725e5b8f52afdbbf3433a735cc0c ad58215515bfae8ce0ec061568645b44 +ad583f28027572d842f32d9d0b63b6b3 ad58539f1d9bbfc2d3d78071e6572eeb ad58f6f9ee9fa071b1f0a31c9c1c03a3 ad5bb3cccd694610bfdb08cfe9286941 @@ -31849,6 +32238,7 @@ ad6c0e92319760fef6eb8cfed5368f54 ad6c8ee1006fc80b74200bd9879ab88c ad702b3e1dee77a3356c111e4f20f94b ad7131cf7cb83a1badc8e59dfcc41a21 +ad716dcb9b81cec97729646fd46c818b ad72414c6beff49aa919993959ab9480 ad74dbc5c1b23a1a4d79c184d0bdd0a3 ad783f54f99e7df5d2e2c8e6290e2595 @@ -31859,6 +32249,7 @@ ad7dd61acdcb458f8be554938ee57b1c ad7ee4553787062987f52f68ce064f5d ad7f12aaebff16ed7f9a2a7a50a6aa6e ad8123a934466afbae8787743235c44e +ad849c1357256667490d32eaa38c42df ad84f6298938d684a727887b727ea564 ad87f24c59499e2dd54326a020d52c2b ad888b88885848c0157b2e810a5807a3 @@ -31909,6 +32300,7 @@ adbdce1a4be9dd33a33fbfd5d61041ef adc05278dac3808bd506943e315d05dc adc05d0c8ed705b81fd8d555ded2e636 adc1ee935b401577533e37dce56cc527 +adc350f9ea8f6314480acd41f50fda34 adc3d50605bb14334062386419353700 adc460f797783f5377c8d54d19d76170 adc5640b393ab96dc096f4e3b63c22db @@ -31977,11 +32369,13 @@ ae19ad4b9f418d4fde1a8f97ebb51e1c ae19f43bc78d46843bd961b1bca0dabc ae1a23255d81982e54aec19d3ab830b5 ae1c479c787f7f88d891e1e55a8b88f9 +ae1efb3523c7bba9ec0fb9aa7ea09e3b ae200b65007af5b466da5512d2ffcff0 ae2041019b4019e91630b35ab03786ab ae21c38c5a71b05c0b6aa07c41908c2a ae26ab880454e5e52c59e4d3aa6200a7 ae27d3bc50a28d086840696f4be1e923 +ae293109c1b46d65162aa0e38bdbc226 ae29f5ef069fc3ef444581cbe44174a3 ae2a4128374cd0ddc860ba8d77d2c528 ae2ae82a8d85516543bab310cf84f9a6 @@ -32134,6 +32528,7 @@ aedac09402b6cddd4a61e9595e7d9989 aedbed29650630bbe5ab12071224eb8b aedd46c512d9c5289245b5d2cd3c32d1 aedd9c531f44cf0fd8667a0d5b0975e2 +aedf64c748d0cc801be378c03fc99a43 aee0d298184fdbe48ff5e4d5bdf77a0f aee224dbb3227a228d1e698db478bf38 aee2afa2b0ef84979907a0f9e57f156d @@ -32341,6 +32736,7 @@ aff5ea4577c2b7c72ec10a4f59a35bfe aff6b2c822fbb1c33b48fd60a2f96da3 aff87b0ecf9ce622b87094f42b1e00ce aff8c719cd55ced4cb502ff56ec63f83 +affafd30abab87f1ee024f5bbdf1954a affb235b188edd43f0af1a4303667949 affb7a576109abc7ac51ac6c7871eae0 affb9fcf5194717ebdf8aa83e2158503 @@ -32381,6 +32777,7 @@ b022a4e37a5002bcc96270a171460b17 b023e3fc51b576c8e0c3a6bb70945a57 b025d372ffe57e98eb895496e8c8213e b026e045937cc93b5db87da965e4ab6b +b027c1b2613854b6c4bd3cf76bce6643 b028330903b166a2ff384b6272a16d4f b0296d0f28abeedc6d957361ebe58d28 b029b3d19b5ac0533e88e37e0b4f1744 @@ -32479,8 +32876,10 @@ b09e2cf0a5e05d3e29eda557c1d51ebb b09e95507c6ae27a3e1999aa555298ed b09f9184cdac29fb91a009fe009c4242 b0a301443d5b422ae3e82f2db0b12ba0 +b0a70dc67ef8645c2ce961e96027e2d9 b0a7c582d87a1d1ea55618ca90c7bb52 b0ab7c0702eb486eb3347d177c3ffd44 +b0ad3034c7c8839c63c232605e13d336 b0af8a15da5d662d4900dce3379a5191 b0b0c709f8a52d22f780261939df1b0e b0b1096dfe76c31d920e4ed312e5e507 @@ -32503,6 +32902,7 @@ b0c88a6fd9ab776bf0dd1865d3dfbaa2 b0cadc6066db0e1e4fe640c4bc59a72d b0cc3d670fabeff5da13a3d604cb8442 b0cc886a159fabf1850b54744b0f989b +b0ceece23641463ee37878a2d117bc92 b0cfdeeba2faa6aa79ccccbd5956fb0a b0d01de9e9c28a8dbb2866552354b070 b0d09471173812c1397948fd3682a399 @@ -32531,7 +32931,9 @@ b0e77801ffc758af791e612e4ea6bb7b b0e7b4eb74bf027ab1c4bfe502a8d68e b0e9b60a36e7639f6a8d7418024f5482 b0ec1bd23cfb440bd345311feac2c931 +b0ec27df0c9864eabf46d96ac9afe2fb b0ed70bf96b459883d2562205e142db8 +b0ee8b6f4f8f1aaa4a5df5fcf932aa03 b0ef4be5b748e6427c5629d7f110a0fa b0f0154d058af437dd6f4ab1a0387d24 b0f2b3b6323b4941381f4607dc259563 @@ -32543,6 +32945,7 @@ b0fdc10daa6127e4cf6d8c2eb5e45e33 b0fe7f55af2471f6193278d0c6b4775a b0ffffb836e2c63d5d5a54378246881e b101e0fa1c94776e95b6bb370b927628 +b1048b90d2399e58ca296f822398cae7 b108f6bfd42b5444b54698f70e11e02a b10911ab64751005db4aba9f63d9df62 b1098be0f3bf1bdea9d9cfa827783530 @@ -32624,6 +33027,7 @@ b1681d71a9502093dc382c4bc7097fce b169abca54e89a9a10deae366421506a b16ab5f054c1465229a0bdb2b42cb0de b16c1dbf1578657ea2525e8578dd009f +b16c428253fa1f8767a6a605a84c7f7b b16c512ca209542f3e842a415050ced0 b16fe83a264f55b75222032f5e498177 b171888a2e924ef45be770688dfc7aa6 @@ -32640,6 +33044,7 @@ b17bd79341de11334ce0c14c6319ed40 b17c28e0acd2737da55385691ec79912 b1801adde94dc8c2c7be6107cf288030 b180a4b6d626e61b128c37cb1a09c521 +b180e092ff08cad74d47a6ef7fec4f58 b1812450489634130b9d08de4bb05aa1 b181cbe5813a2579a5be56e7579224f4 b1844047e652e2bcaac591314a64a52e @@ -32748,6 +33153,7 @@ b20e21fec520c6e06d6d2492f9150a9c b20eee09efe0bb0b73d5fc2b676507c7 b21105315f521bd53882e9a9e9dc9379 b2113493cd3f8e306c6ec0fbd3460c8d +b2135c2914f5c97852438e4779b00c21 b2135d2186973514fae5787d7247318f b21661fdb6098ab88703e6e047899cd6 b219105c4b534ac6b03a8eaee1aebeac @@ -32795,6 +33201,7 @@ b26108af69a69af2d73267e8534aa00f b2655c140c9be1e364ab3000aef2d698 b265e79c62bbfd8b28a593a91d3964ab b265f0dfa9ec6fe2a40a92e2298f7889 +b267041400f0281895d8c93632ebd87d b26770af54b44743aa8cdcfa62a75bb0 b2685a634526a915c2bef03b0d3ad18e b26966ecbd475cae250cf5e4bee3e2e2 @@ -32969,6 +33376,7 @@ b34930456adcdf2b293e9a0e851037a1 b34e7a09d00601cede220fcbc244822a b34e9cf0becfbd7ea25f91a6b6051849 b34f7fabbbe1fce362abf531542bfe3a +b34fa2e13c13ac8648b7f4a269691b0b b35047743d9f399ee49763be1fd5230e b351e55643d130a080023e4129ee3ce3 b352667f4e7dda2799bf42ddd598a96b @@ -33006,6 +33414,7 @@ b37a2671de8b8a144f15e9bcb3f88a53 b37a4f82e9da8d2bad0b18eea9da02bb b37b611018b37a889ec3c7088a8c3cc7 b37c05da1f9f944c66389fd07cdd6555 +b37eaf6e947ca79ad366f20502bc6888 b380a03bd791054659ad95d6b7c47762 b3812d1c98b8ece229ce5b70cda7f1a3 b3872da1e1a159aafbf618142f25b209 @@ -33044,6 +33453,7 @@ b3adcfe35028258c88f8c46f72c3e4a2 b3b15c2498786f8334637af59f19d1a9 b3b26f31bfba18e80ba69277d228eabc b3b2808a3d65caab82ed7b2a2f840aeb +b3b31a0cde10ba035bd94448be529e4e b3b5e9fe3c22bb455480f699c504f1ec b3b62c1891ab5e5ec83492189cd81815 b3b89af2a12db4e084dbc3c48b9bae23 @@ -33480,6 +33890,7 @@ b623ae28b47ae1b8a38814493cef69e3 b623d5485c51ec21fd54d604956112ee b624d603ace876f86e12b139996fe9b5 b6253d65d7e3db9bd016dc501184c540 +b6255371fdc47c8920d41ba90ef4e55a b62668220966febd31aaaf71a58679f1 b629278be2d1f2a1de23a4a0dc9e4df3 b62afe39a777e1c2710c56fd4e41fa8e @@ -33531,6 +33942,7 @@ b66a312145da35a63e26e430402855b0 b66a576e7a16778a5ba4511fdef1941d b66c0b2483dd116575ccaf1d957b4e9e b66d3c08838dd67a63bb83904362fc14 +b67289ca0bd8ec2f27d8db1759032973 b673734b1cc8d4821e4618870a769c1a b673e2f12a382fe619bcee88365ce8b2 b675298682376e8ff69f83551e24c9f3 @@ -33716,6 +34128,7 @@ b7586655a11e105e0996dcd23cb57999 b75a8beab194a2a2df0a5a4f86435fe5 b75cf22f065e2ad6baa359956d55220c b75cfcb9c7fc19e64c109b012d04e2f4 +b75e07cc2a6d53fdeebcdd1ef9dd5427 b75efcc3c7a363dfa31aa31f1c127fcf b75fdf79b3d803b687c3babfeeac0291 b763187d3c3b9fa51d34197606634e27 @@ -33772,6 +34185,7 @@ b7a46e1754f80a4df623eca147d0a88d b7a6614063c540601a8e31b8240bc739 b7a6806e051f5fc50c02d11456794748 b7a9e92fd7edb31afd2c1e974a777e10 +b7ada34dfe2e45134e1d396dd1080961 b7ae0da5d96abec3bcdc4601826300f0 b7b38db47e39e0e3362cb9102e318f01 b7b48f4a31cee59783deb95106403dd6 @@ -33799,9 +34213,11 @@ b7d6cc8fac21cad3127a5f762428a14f b7d733bc18804a7157f79ed13e1ba496 b7d8e52ac598986c86c617c92491c566 b7d93add6d5d52745d16a18b4339c0e9 +b7da6216319e8bef4192ed9879361df2 b7dc9e9525125121db81a1ad0516cebf b7dcc846fd9f14cb32511dbec5f94b97 b7dd968ccf0ebcc6506359c237d91789 +b7de428b9715e77302cc94b017be9ef0 b7de463d5cd85055a56923b49be81f41 b7e2fbce9ada41b84c348c63527f38cc b7e3c90cb1178d30ae12c473c0ae1303 @@ -34054,6 +34470,7 @@ b954c277ef2fd64c3dd38945eb6e0413 b954c8a9bd49df6a4125e4f1db52ede3 b9552f45fb4d62e4a2b2e1fde58abafb b95687d03f2f3f24f860a0423e9e6a25 +b956c3b994625393b0f9edcbce4cf215 b956dfe05ef94cfe23d59120baad7c93 b956f44791c80d2ab33c4bbc06eb806f b9575c1ea7c6b33928725ce5202f0ab0 @@ -34093,6 +34510,7 @@ b991acc72a217a92dec931e52a32551e b992886cd17c90d496813888ea327032 b9928d982222ca8d5c9a33a4a9271e49 b9936e997da5324cd75a2d1dabe5e645 +b99567780b078988254710ef38ea7d91 b996237ffdc613f6e81056259c5148f5 b9978d7b7b5f6603fa23bffd862eec24 b99b98770b54d99b776b95bc8590efc7 @@ -34114,6 +34532,8 @@ b9ac970cca94f1038bcad3629b3ec807 b9ae5964db1a3c22b5b569ebf518e69e b9aeb6a8fafb197daf63019a29e50aab b9b0cdf2e6b6073db43c8670c874ba68 +b9b23f0ae2fba37cee40069e9beb09f7 +b9b40c6e72ba16e0583106ce2ed4dfc3 b9b52827e9b4b33d99335cc43ddb1609 b9b5b2f41b355b7fe75fb5497046b170 b9b9bba74835890e6be2b8d10edf03af @@ -34197,6 +34617,7 @@ ba2bd4e73b50febec060b01200c410dc ba2c14a0148765defb18f576898717ce ba2cd9efb34a17e872e7be5823d01cb7 ba2d884987f73ca6fc856d8482e5d453 +ba2ed1f8b906919eaf6113eb6fd64799 ba2f73aa5aacfb91f134fbd2a166f483 ba30215eef4a3a33f8ba804ab65bdb64 ba313d211bc01b2794b08b43463da987 @@ -34227,6 +34648,7 @@ ba52dbcf982d1de137f234aefda10958 ba535f5a42dd323b8c6b7678c272bddf ba591c9ef431b74705e04f58a2d3e91b ba59b4b30a2bf3f18eeafe936d2c5a3f +ba5c64683718cb0b19d38697954ebba0 ba5deda920d853a4324c6ac53215f19b ba5e842e5d19ca31b0cbe1ed478d1742 ba5f1ec0f65cbda64dcf78f3886be874 @@ -34285,6 +34707,7 @@ ba9c0e02c15aeb9ef941b869ff7bf742 ba9c563e36a0bc95e8a3d3b0cc82fa0f ba9df9e21545f62985b2de7983e8a17c ba9f4794ea40bdb570aa2c2cd5fea8a8 +ba9fdcfd884676930daace16b29d994b baa004b3f1572b62c5b1b5dfc37fbde3 baa02adad20b9301346a6b9bd1574b58 baa194289dd074f971cf9497df5a438b @@ -34518,6 +34941,7 @@ bbf158b25e5e7675dc1efa0cdcae3ae1 bbf2132cb3b3a1fe7c6e495d506c5cef bbf35b2cf6effe8c0a61f796971c6e68 bbf36a23c1b0b951e75944d653cc7ff2 +bbf4669693676993adf7a04cb12891dd bbf87ed60c18d288810ca5f30facc2d0 bbfb12b41683dd762557d2e8262ab346 bbfc9540d353a3575bec8de2c7dc29f8 @@ -34555,6 +34979,7 @@ bc1c68648225a261daee0955044a7334 bc1cd67c4133c3267fc13925f13e20af bc22a54ac80220c55e554b88f2163e96 bc2585b93fd9389859212b81c4386dc5 +bc26653df33af58e35cd43ab47c1db9c bc29e36f112f152852842f48f54b5f93 bc2c49671e64f2244a4ce0f273b87040 bc2dbf844bfe0bba19532f7905fd1ea6 @@ -34566,6 +34991,7 @@ bc30b264d65d43ce9a762abb2e2ddc07 bc3108a84b3aac2eeeee4e6a25c24e56 bc35909a2cce5c3efadc9e9a0ff4e169 bc3709d7b270eefee2ae3935253ebd18 +bc37ab1927253f8308083b457858ab0a bc381f30b337d4977b0f177ddaf27553 bc3871eb03c08be5c1f86d2a05a2f796 bc38ad7396bc25e7f7a99b6a019cda2a @@ -34576,6 +35002,7 @@ bc3e73395fcca5710f68ea0f422e5557 bc3f875de839c9ad9cc2e497eb2a3808 bc400d98e930abf30e05a79733e90c54 bc415caf03c8648836bb3543c599efe8 +bc41be795fb904b8cf0daefdadd69994 bc4257849a52abfce2a2b1cb94214533 bc4957f23cd498609c23297c7108add9 bc4a13a047bb428db2dd2494973cc657 @@ -34624,6 +35051,7 @@ bc815f9d92103bfd549a3fd8451966b1 bc848d99e791e48208c0430075cbffeb bc84b645b9c5f780952a143d8b3f2cab bc88288051decd2129d61e75a05718ab +bc8a32ef9b90357b9e94e641448bb8f9 bc8b9ca2a97277b2a11327cb20fade1a bc8be96a95ea9a0507ed04271a1c1a00 bc8c12a9a5c2350e186d5d4ffe4b5604 @@ -34804,6 +35232,7 @@ bd7dd69ff50d63a8e61371bc9da859a0 bd7dfa27b377143ac24a38bc398ffc6d bd7e5de2c6f7806d3c6e9c37c3bf4f22 bd7e5eb7babd048aeff454a0abec82ac +bd848cf3be36df5c4255d38a7e23c07a bd8aa34fa903871c1dfb3fc2156b90ed bd8ad03b12f9f8ca79fe929666f947be bd8ad897954f62583a55d9671c2dd259 @@ -34946,6 +35375,7 @@ be65c696a4ad20ffdb51f49f4633b18e be6779bc5203a31b6b9897ff08037400 be6b06871d3e41587374b36def7243a7 be6c4c13e984386d8ca3ba60182e3005 +be6d39e3ef33f3c79b96f82eb3dbafcb be6e9afa7e5731c9a6333b0800b117f4 be6f06656e5021a29b511e985dac79bc be6fb725d9f411db9c315ba6b2390281 @@ -35096,6 +35526,7 @@ bf26b8d8177f1c6e71a1287742307721 bf27e77b52301acb2371dc7aad3f1ca9 bf2c48809c80ca195fad5fec2191ab26 bf2c64e03c31bbffa29aed80752ef228 +bf2d26bd40964b6839c86e39570324c2 bf2eafbf7e82cc1d28ab5434c6217159 bf2fa73becaf999b0742e4c0f6da620d bf3110a66c298e8f502a57b6f454640c @@ -35140,6 +35571,7 @@ bf734c2683ec81f21708539900156c22 bf74cf3b9578881b583620f85c0d56f1 bf75f81c98e46e020203355a4b628d32 bf7712265e5cdd530f43fa99264b2e4e +bf77889f680b7baa57ccd1da7ba0562c bf77b952b9348c04c9e0140069028c34 bf7c0e289811c0570ec240fcb55b5e50 bf7e2c671a2d5f1d08581f36130fcdce @@ -35224,6 +35656,7 @@ bff4fafaa5af48437305babbf43f5961 bff753d3e64a4d087b8151a6fb7a439c bff884727221afcebe8825a13f63eef8 bff884bb9b8e034964fc678921d7e47c +bff9c77dd6a4b332fcd4eaa8f4e5ca3e bffa2d0e0e33830058aaefa76a9d815a bffbe441d4001323e0ae5e0a3a690f48 bffd2c2309a25b6952ebc43a845da1ac @@ -35266,6 +35699,7 @@ c0321294dcbb1d37444da8d2249fde6d c033263057e4b94fb829255001d70719 c0341e99956465b124be0a0f89aaf955 c0345118705d160ebfbb2e7928d4476f +c037fd47bb91d46d94ba02538f2642d9 c0384e4d1110df59ed0fbb0476bd6c2d c03875fa94b2f4158bd255348ef45d60 c03a091cfcb42f005870d162cfb8d84f @@ -35305,6 +35739,7 @@ c05fb65ee09d8e40efce547e41291f25 c062adf31809ad93d23b3fbbe708e3a0 c063ef124b4885fcbc75305023f72dda c064bc4a4cb2ce6d1e2675e417f27a96 +c068ae8fe2608a2355752f3d09039af6 c0692f3c21f0023f8496aca30c7befd1 c0694b49e477bb653b1a46384d7dc40b c069b42079df35224b8fed546be334e7 @@ -35450,6 +35885,7 @@ c110f8407f60cced0ea131e56290a59e c1114cc7818a2f6294e979f824372680 c11400ebdd9a42ac78bd82773167602f c114149e4e676b9e93c7f39c90219d95 +c117a6e88750be40d89d1b83279224c5 c11924e3893cfe1b6c62e06642cd9614 c119820d27a20d27ca8b9435416685a8 c11aded8b6f784f801e4d784a8345cb2 @@ -35457,6 +35893,7 @@ c11beef2daece4fb84d5177e3092e309 c1222019068dc7131113302cf35c990b c1229e9197d1ecd57b3c1f4d295fa92b c123658a4fc1cd3727ab99865f0d87f6 +c1259053161f0ad1d8df2ad2b3f97287 c126029bf6b8592f175e6b63ac9f902a c126a9006caaa2b4724e1739300780d2 c1276308cbf68c761ef717e50b5b3620 @@ -35650,6 +36087,7 @@ c205c856aa61eac1195b09d7f118bee3 c20608e4d8d40a33e60061381fed91e7 c207465f7436477f030826802fa8d5fb c208199fef03e5d6d9127296094252dc +c2096946a2ec9d344b3d74610cb1867b c20b90b283a9917d0a192d00f47c32d9 c20bb6986c00324532f15344ac9b350d c20be8853de7d462dbef5596cccf5d06 @@ -35662,12 +36100,14 @@ c216d3a4c9197a389a20d22bc58cf1e4 c2182a218cf61d107b7e95c244541afd c21a0a75c654cd6b2d2002d5e4d2538c c21baccc66009bee4ca1d5fecc24c061 +c21cb7cf01a69a7c65ac053397731541 c21e354148f3383fb1027a759c4a44f1 c21f2bac6d8369fefac10b1014c4e7a2 c22206987d081762c1504f328d6c5eef c2225f42127cb0a682b27a6a72741eee c222b9bdd7e928babfc041e1a9fd54dd c225a71bac76b8ee8b19449d3b19e539 +c2265062100e4929cadb9c230d2d8175 c226c59827bfcd1cabe2d0b9cb441ace c229c6b53361556d135922f0c457a26b c22bb1cc000013415d814025cf655f09 @@ -35755,6 +36195,7 @@ c2a46f464a5363b438d1953f54d7af54 c2a5b92de53ab918ebfc76b30d49ac70 c2a61840956e7878e6d119aed49019de c2a61d33576dbb36311513bb2997273c +c2a7ce873b3bc79fca8fdef17a3089c2 c2a7e410698fd2044e6ffe2d6f02a682 c2a8893c31816c3e9fb5607327e79c23 c2ab9d127d77928ca2722e8b8af849ff @@ -35768,6 +36209,7 @@ c2b056358fc06f8f08c986b18fcaf6ba c2b1a153eb794bb8837f309cf0d2797a c2b24e91fde17fe5636ce98b39c8c587 c2b39a2c6efaec1623467028eec64d53 +c2b633d9a81d765adcc783de7ec6033d c2b770cef224089cce63f7007a4cf96b c2b7934fa7e526b68bfb1cd9be9e5c4f c2b861c320a6b193abae81ceee2a9404 @@ -35878,6 +36320,7 @@ c333c9c9a9a710e50a1ddf1f42cf39fc c336595f46514d379f8c345dcd568973 c336ba920975699b0c39be76305fb565 c337dd1d91aa0cc3fe630d0f55371439 +c337f00aa0ee570aef2490acb26ec656 c33875e07eeec08c263111245b00022e c339623ec49215ebf13548b5cb4c2e60 c3398521f836d7c792ccbfbde2461e55 @@ -35936,6 +36379,7 @@ c3743e590dabfc575151f5d0a2e7a878 c37a9e5e06472d3446897bcf7702e834 c37ae490ab9eccb565fdfad642899810 c37af4943cdad4ec9c18e307e22c5158 +c37c9abea3de9fa7b9a380c2e7626c6d c37d1d27cb0a043ace66d964a1f96032 c37db60e43bc9bcf1b627fa3763cba32 c37e7490f84a23264afdc63df31efeb3 @@ -35983,6 +36427,7 @@ c3ad65a27cbc7d3bdc8c1439e36f9b8a c3ada8a2879ce6d37458fe6c68ebbf42 c3adc8ce47adfeeb3728e8e06f612a50 c3af30a03081f79179750330e28ce35e +c3af6d90ed9ee2535078adf93118cafc c3b018bf85e7a771bb8f1abcb7f88571 c3b0b81d13a4b89ac9433f676562f722 c3b2257ea2948d40344d9d3eeffb8db2 @@ -36112,6 +36557,7 @@ c463d4b18cd383aa197717894ed2d016 c465822f25a47772721d9367244d3a74 c466ad3275ea712a0fc7ed672df88e59 c46771eee379356ba0bc5b85faf2eaad +c469ab9a309184d97e88120111d43acf c46af2b5247e3807432cc6458954a3db c46b08499561fdbebdaaa7ed41fbe08c c46ff90a0c56355ed15a30c9dde3ab9b @@ -36161,8 +36607,10 @@ c4b89c546779410350a6fd0d8a94d03f c4bb9659e5c3dacdb35ca29e4e88a45a c4bd56fd8df20c8d9eb2cdf5f0d69776 c4bdba7c92f8b7c7b3c50f654a3b7d26 +c4c08df223e18019f9a88a9bc363c279 c4c0c7a36a8762209745a3a610824fb4 c4c425cb629164bb3eb7dea729b4fcaa +c4c570e32d634d17ec73e1a90fb9239a c4c5c8c1075bf8de010e68cb24a84b6c c4c680402f5c6b6db03bcdd8524746a3 c4c6d2a36037a5c574d0a77471d31ebd @@ -36208,6 +36656,7 @@ c4fde644c1db70dda3a8a35d9d2e87d2 c4ff9737d688fda840e69f2dd61cdf2e c500366f35acd21fab79c5c7cae5c026 c5005483d5f49e5c41dc2805b5ddfa4d +c50249ddf125fb32fd3a9464bc2f13eb c50382b8647783be2de76cb3ec0dcb44 c503bd86fa9b07016343b111505c56e3 c505d1e4c272ace29191ca43c8aeaf1b @@ -36228,6 +36677,7 @@ c519881bd25e731a9d314ab1bbbd9f7a c519999b0909b07da95553f14d5814a0 c519ed1c4214a315f7060b6154c0b6ef c51d0c27ccb0edd9faf25b7c2d5afa93 +c51d28d472d5804e7e418dd85eabe27b c521984cd3b3601db6b26f9c4f5daff5 c52452fc8b5959cabe80143eea83d037 c524e7b9c63c1ce37d4887cc84cb33b0 @@ -36338,6 +36788,7 @@ c5d938eadc54a5c3d72e25d3a66674c8 c5d944b2fd4ebb657868f8e16aed6ab3 c5daed7ee246bd766317aa9f0bc943b0 c5dc83e211614d813479471b23b9c891 +c5e064ae2c0f6149cb60af2f230e7a06 c5e28d3619a0b0b50b92f4d33db3804c c5e7858cc97bcf2e00a99b638244ad2b c5e89d9922c0c171b93ea67c8d86e3b2 @@ -36655,6 +37106,7 @@ c7825b5563b09f4259461050308f5dd3 c782bcc6759bb5ffc6a73b8c88ba8ac8 c784c6223df892b737e02c9519a60079 c785a2042b83757f917d7cdc3a4f472d +c7870354ef83f5317efc17276173280a c787a70feb2036760e2186c8cf8910d1 c789356ccba9042595933796eb7c63e5 c78c42fe9b1fec363afb9d44a5f68285 @@ -36669,9 +37121,11 @@ c7998683c439ac9b89f8a3697331d689 c799bc6e40ab4497e798b7d65c5e19db c79a66905a7fa1f085ceac00fa4e2c9e c79de4584af9dceeeac3d53169b8362f +c7a027285c1be04cb67b9da83c3c495f c7a09aeb9be6c51edad2c02099137201 c7a189cae4d6ca644a4c6bdfa2d45a1a c7a18deedc4a4df65a0db7102ac383e4 +c7a1f1979744b4e8aab481e2cebdba4b c7ab9c1ff10139687982ac46e14c8cc0 c7ac03cce0e1436dc6700c13fbaeb1e8 c7ad666561816260be18f721a33d75df @@ -36729,6 +37183,7 @@ c7ee3db4a097aaa45e885581f28beafd c7ef72bf5d359bc97e3450045ecf66a9 c7efc97d246c9e47d8a7fabf127baf7a c7f152fa93013ef1fdc8a125ae1f0fa1 +c7f27f959c83fcc2d30c7e1c562ec71b c7f3861dc4325c2786e2fb0be4a81174 c7f8146473eae7de0352469a350083e6 c7fa14da5ac3ac1fc0099e405c28c1dc @@ -36770,6 +37225,7 @@ c826e3ef46a84fe05839dd8e47d48923 c827774146205980e169a35844d5aba4 c82cd98de8cba7ef12f3e5977800cc59 c82dd07b5259a426e7296e7e9c63021a +c8315ee619ba9d400e8a2d848d048bbd c83335c1576ab28f94f05e79b16b49ce c835248adb6b18e34a45770d864713f8 c835fd0a00a5705a3ffddfbb183e7c67 @@ -36823,6 +37279,7 @@ c87342007192dcd1e64f50149db9bc3d c8741391620d130ac731a9f4efb8c293 c878cad2f7e1916cbbeeb9741954368b c87975c8d8d131fde14ed43ede8d7206 +c87c0b783a8b03a6120f1adb1b93aec9 c88580ba4d4b0dca2e49563ca5503f69 c885e7058ea2ad7f37fa99d29b692120 c88602f40823e28a32db9b3640d962cf @@ -36849,6 +37306,7 @@ c899b28c8446478164689a3cc259b923 c899e8a4b89950c00c70ebfee9d28b5f c89b00641b5b7aec0417f8f79c899bf5 c89e37484d1f62678d933b239a25e346 +c89fb38abc094e246f0c3552e3944f08 c8a0e0883ffc43fbae68f58558bc18f7 c8a145124c163b2d6469fca80ce2e06a c8a1efd86b988dacb7bf61cd8b6f4e2c @@ -36981,6 +37439,7 @@ c95a6b02adc906ce1351b2f37804be45 c95b6d1dce3fef06c8322ca27f3e841b c95c87607093ef4e1abe47dd99695393 c95e34af3190254754a8095ca4bca892 +c95ea25d49a45fa8e763bc4ea5a419ff c95fa164e1935a11b532dcbab52b1104 c962f8a2713ebc4bffacb33011f8e331 c963ffd833813b67230305a0a3188ea6 @@ -36996,9 +37455,11 @@ c96b0b48ecea602daf51c0d7e412314a c96d51d310d076e00ee13b5472cba825 c96d99d17df6f20c68a8f03d282d8754 c97118cf064e3fe71c491f7936f098c3 +c9722e5ff3e430d668181aaac8cada6a c9737caca905c64804f4fc55cc52d195 c9742968df9a0c10f1733cc742c9db1a c974fd0d97f40070e4c1445af6a50e28 +c9759a7608b76dbc78eae4b1098fcfa3 c9769fffe7e1fcaed0d692cda5f11cdc c9797bdf2c7da6318c7fec7b223c4e76 c97e6fcc52b28fe63ada5a4f5500a5a5 @@ -37007,6 +37468,7 @@ c9805cda0db0de47135c1f0e94474e43 c9808500010a8c68f25b489fd10ca7ca c9809cab8c547f627089293c6eef9a93 c981dbfcfcfc21e837cdab38a85df79b +c9822890bd36a916ef9fa8def4f89760 c98235e38006d8a08ed9d8645bfb6cdb c982d53f51cbf94b597e50723ad79370 c983426f05d9e0a2e9b50aa3d53f22cb @@ -37069,6 +37531,7 @@ c9bd680dc053999bb0f5e5d7063e1cd3 c9bef5a187da68cca09092b28a75ea8c c9bf5fec5c301e231d22e970522848be c9c19d484b2b0b92b1d3b6ccfedea94f +c9c26ba21617c7444ad54f72e829a22b c9c4575da1d1db0c8e5e38a3bde2a3e0 c9c52fe6e60fda36abc0b6a732d73b92 c9c59dba71f0dd161dedc299db2df40e @@ -37137,10 +37600,12 @@ ca156c46c2babdb3bb0dc5463f62e4ac ca15f4829a36b3fb76d4a966fda4c45f ca1679dca05cdcbb9aa1c23cf76ff3fa ca1b1ceb98046d27a27b922cd107cab2 +ca1bf0773b56678031b4681919c79b80 ca1c71d92dffaae0da278344196d1496 ca1e4be1c0117fe91d1e7b4cbd165ec5 ca210ae240da1d1adc2111e683b4420c ca2211b5e1a98fd6b697db99620ddbcf +ca232fd5cd14301ac37e546340748571 ca25d41de97bcfca748a0f0171bb54f6 ca267a447227a5e80a1e480430b47361 ca27c6425bb695f4403a603dea1acbf2 @@ -37163,6 +37628,7 @@ ca38808832c8fdef7567b47c68b761ca ca3955eb36acb13002b480541c7b3e8a ca3bb91063fcc0072d2380a8b6748f51 ca40c8ec7afef2afb0d5cdc7bb9b22b7 +ca424b9cb98cbf5201390bf6591c85a9 ca428b9ff500256386a1810490f82e94 ca430c0c15fb7a39435d3626f52a58e7 ca4349fb6ade3f6ed4b5204cfd89e730 @@ -37235,6 +37701,7 @@ ca9b13ec2fa0441fadba062cd136c2d2 ca9d1ac6f8d440fdee3f95af25ddf39b ca9fe9b2c39779229774b9491957a716 caa1019d0c4a9c03cd84656bf0172ce8 +caa136ebc5030b531ccd12f647819f45 caa2c391de4abeb481d8d30be32fe8ba caa5af285bc1e070108a4d0b83a0d659 caa605ad31c7422825495968bc5714af @@ -37255,6 +37722,7 @@ cab1bcdd0b2631a1817cd0c4c621681d cab2c79110ed6e07c901bb9e1b2a169b cab3d094a64a23c204dfd2d7b87f7807 cab3d41e504713487033c9c1b912bf0e +cab745839c5c984d9d029ebb6e0a78f1 cab83b90716feb764adfb380ab931e65 cab83fd8d2ee586013feeffb656d6a6f cab8988457b3f2eca82984a3fe2c9dd7 @@ -37271,6 +37739,7 @@ cac361e7f424baf4958fad7510f04819 cac5d3296319265aab107cc1908684b9 cac60f17416d2eea72b3cea8ce1f8aaf cac68388939355ee7f40d6f956e75650 +cac706870fdf2296520098910564fe27 cac8fada9643dcbb61a0a35676d59bbb cac93c950bb26c96f09416a94160c7b0 caca356983925c20a7f1182d8c5bbb56 @@ -37357,6 +37826,7 @@ cb293e48de642c4907024524578eacce cb2a592663d8323cad71dcaf6d95703f cb2b3fdf0faec668364d6b292a75c514 cb2bf0fee565a3cda2738df85fb24b21 +cb2d0eb485e2ef9bbe5a57009cfb1652 cb31ef360799ab5fb52114c11ba741a4 cb3356c9d4b1a24c864931736875bb5d cb36f4c3b352a0efd7265227b9c54127 @@ -37409,6 +37879,7 @@ cb7e490b9fcf18f3c58e080cd740cebb cb83e70d5011ba0b7592b6dcf1ba3a58 cb84f8064f77b117ba662cce95264f19 cb8847df0560dc0f03548ebb0cb46657 +cb89e25ed6e968bba8a40162b05b512b cb8b174fd84b0bba429d6ea876546a10 cb8bc58698355fb1c19ecd8df1de900a cb8c591f30e08393c81ee76626f24b59 @@ -37443,6 +37914,7 @@ cbb6968c720af4f2d80696b6fa9ad3d8 cbb6a1611005d06881ebbdae13957fc7 cbbb1b6ef1bb8042ab2e7d4276359b7b cbbbc423dbdb59490294669ff1c91a21 +cbbdf8228a8cf0bcd7bfebb187cc78f9 cbbf783a221bacc6692e0f5ba41398d5 cbc10cf0cd55360abae9bf666d336730 cbc4071a1461a6075638ad0aa8a16b47 @@ -37533,6 +38005,7 @@ cc3cb4f54b8644393b6e92bfbd7dac0a cc3cfcddd575f76a1726f2da1f4357c9 cc3e6080c226eec699355f4149241393 cc440895dc3762cd41792886632a246d +cc4554f6fea4b58e517f68a8c557904f cc45c5950342b1fb63e9bb1ae5782879 cc4a1092bf0dfe648f7085dca243c994 cc4cdbd542e9aa43fe23c4586615deac @@ -37548,6 +38021,7 @@ cc590db2201ad336aac84a7a94668651 cc5a54a6a71cc0b1a513805547da3380 cc5acd0dbbabab0b4f89b117b93c048f cc5b0297fc5a5a073152becb7f25cffc +cc61cbd5172b8dbd2a2d0a9d9d0e2c95 cc6353bf98ae238db9684ceb14ae360a cc641feeec934eeffa1c801e04d69909 cc6437884ba3b63c96cd13dc093eb487 @@ -37607,6 +38081,7 @@ ccaf1dd5be941a3071ff79e6241564d8 ccb0ac1e0f3882b88cde9e4f1d6292d4 ccb2454e1b7f835cc6e80726ff8d6e4a ccb27659c38ce7213bcaa3ed77215eb1 +ccb295181b5b18ae3e97120972a72bc5 ccb3daa2f808cabf5ecb968b5373a0fe ccb436df809958b9307ec9d9c6afe09b ccb54c307611b71696f1523e2397f937 @@ -37663,6 +38138,8 @@ ccf58534f8ea21c7e2c4380ba0194f55 ccf9677f2760ebe84ec12b28ebeb5f65 ccfa696394b928832f046e4984f5334f ccfe2bd277d1bd577b66232c905a88fc +ccfe92c7fb27eb17dabccad3ccfe22bd +cd024044eac8de631caedfdb91439f2f cd043a4bb1da2bc1a13db07fdbbc2636 cd0502e4ae97531f3edba6270677e601 cd05841ab2b47818b799518dc79fe640 @@ -37809,6 +38286,7 @@ cdc50a660c78f2412366a7351a3325f1 cdca3c4bafa7310ccb34b19566137673 cdca6203b7d114cb34f4c95de17155c1 cdcf996a26d62bc8a859b8169d78cbfe +cdd0ad40847eb3cd52d9c746efec9c68 cdd15952c7a518a806b6787a713a8951 cdd16590af806b123adc73b508dcfd95 cdd16e5e8d063d1d7ff49815e4c63611 @@ -37919,6 +38397,7 @@ ce5eb9772e2f84817dc86a2767827ced ce5f293d504026c32464a3c32e67c3fb ce600dd787f30c7d7a9e6239fcc9b5fd ce61c26c3b60f9bca280e7491bf3eabe +ce6255b1ef7da8c5ccf05cf395ef0f2b ce629b36d38a792cb8d6ed651afc8890 ce638da551d65582b35420f24fab5654 ce65f1dcb15385a40ac009ae44213fc3 @@ -37934,6 +38413,7 @@ ce75915a376063b79731bc69d6b387a4 ce78fe90ff54b6605c69f22d3a0e7f2c ce7979a84dc98a6a9f34c69a2f722168 ce7c5b1224d0e9a7c555c77b093f6ab1 +ce7e5fc309c77a73e0fd420aa8fcd4cc ce7ff5160ef01648e82988d78b2d815d ce80781c1734d612a9c8738c2522e2e1 ce813cf41c798a951c1227e439f73020 @@ -37947,6 +38427,7 @@ ce8d77d0c71debdab00ff1415f84696f ce8f51ed1a082d3428760f14379d179d ce91381740e566ca42bd4f6e11da5e9e ce953d2b2e4b538874cac52777279440 +ce95f66d3b8fba9e13868e91546ff9a2 ce96e53e72d4f5aa98517a57c042d9a9 ce99a8081c0b628bfbcd81fae9ac89b9 ce99b56354ebeb11d770a545f524dc75 @@ -37974,6 +38455,7 @@ ceb3028d9792ed1df0a2437214cd9fbb ceb309cb6ffe9f8e5ef79771c7078977 ceb393509a6e25ffabe52294ee3c7c24 ceb56d8ebc465d5ef0ecdedb9451f5ce +ceb696a9ccad3168b13aeaa2608ed05e ceb97b3b651567d2eaabcc9a28f45caf ceb9c202d598826b0b42be59cfefbad1 cebc52add4565b6b2661ea38285bbede @@ -38037,6 +38519,7 @@ cf185187b71ae62425d1813697911a76 cf198cf542b27c060f086565945bd13f cf1b14481d811e8d46938c15b858674f cf1c228e3a6fbd597761de345c2b350b +cf1cf98d9962128540317e10fa88010d cf1d3787a3e2ba722010ed524954cd8c cf1eaa1c608a4f47d64ab0c125cac72e cf1f1ec0b7dd1b66772520a2989dff5d @@ -38060,6 +38543,7 @@ cf2f081bf2d5afef79d10802cf68042c cf31ca4ddca103ad1569134f3daacfcd cf324eb7923f8cf54dde50d295e1fc0d cf38e65257053bd91051871194b9a20e +cf39172a28a7e80c3844995e2693e399 cf3ab4915b73c0f5c37c8e44abad1ceb cf3ad04172656312084e3d958796528c cf3be9a35deff4ccf3c76920adecdbd5 @@ -38088,6 +38572,7 @@ cf52a1e78429bc0a35f670a9b90936ab cf57f1481c01db13ce8d66ce76b63758 cf58148f54175490ef7d7c66dcf33361 cf5ab1096653dc27a685328ab1558631 +cf5c4d4bb531be453b3dc746819ec9fd cf607dda9f8ef33c99ac204a08cf47b1 cf6340d9a47d760680575e5d09f89e83 cf63cc21e68ee4f727a5bb02eec113e8 @@ -38139,12 +38624,14 @@ cfa84e9c1e12a4ec6f16b41ba05eee96 cfaa95c985adeb14e83d298d513d7068 cfad0f9696a94e3330987d5bc548b6d7 cfada9ae1d514ff6c40db2b5a12b8243 +cfae410362e24e9b6dc654a20d069335 cfb002fbe0626e54b469c0144ab884e7 cfb06efe5dc4645edfb048bb9a724b4c cfb10791ad2bc960d40d24c52faea550 cfb508d42949f56c1c2994e133977711 cfb58e49126ba1bbe9215959129442e7 cfb79b201852afb23105d2163312e21b +cfb84d4848821d42418770b2e25c00ce cfb8fa7ba7dfb243d8b82e795942c990 cfb9e440de16bda23eb4f56927da6f44 cfbf2533a70fc3c5107c2e7543988bfa @@ -38327,6 +38814,7 @@ d0995f89551ab3fff372e6eb65ac92bd d09a0d44f6e344ca23668ce6801cea0f d0a2435c44be04820ed020e36571e423 d0a3272b55aaff26f9985ef073510006 +d0a8ee1550c7a9e73d97c9c66e788f63 d0a9a3ef75e7ace1d6de53afbbe718cf d0ad539217222a45750aec0dbf5d47ef d0ad72bbc0d38b58aad91f342240b553 @@ -38591,9 +39079,11 @@ d230ad06341491fa4f50b4a9c04da050 d23403347ebe9a9ab22649b6411869f3 d236d650137f3b5f1733bafcc9304299 d237864eff8f1bea7ab6c9cb096500a9 +d237fb773b7e4b6a07eb10dda8d1ebd0 d2391fffb18efcc19322fef6f36e50e6 d239264c49b80b2930979ed00c2806c4 d23a67d7af0cdfa988f3c8cdc9c38df9 +d23cf20c22f3aed5c31942453cc623c5 d2413d430696facae8f6f01ed8f42aed d241a673b33bb89ac77a0ba586c459a4 d244dad11970e64d5c55e17189b1de4a @@ -38648,6 +39138,7 @@ d2801b306780e6f2cb4d7c14332165bb d2804c9bb530dfe74e17458428b561ea d28336874c36b8a4b9bc4cbff92cc59e d283eee56814e2a82d6ae3ae61782c72 +d284a73ecea83a81497ee6115642a1d5 d284a748343acbd660abc8d83d28dcd9 d2853fb858a7361970f5057644592726 d28582dce959ca64b2cf5f5e56947208 @@ -38680,6 +39171,7 @@ d2a855561d20fa351c00e55c8f74a263 d2ad243bd9bea5f02a45d4177e128b9e d2ae95066ebf79c4cb6aacaf4dd184a9 d2af29153e47ca603205f75d16245e37 +d2af8e426cb6be855b76627069321376 d2b0a4e2169ec7ef47598225262b585c d2b223c9913c02c64c28cb90b67b62e1 d2b31e0c03ca7263c2fc778eb1539c59 @@ -38713,6 +39205,7 @@ d2d9de6465345ef24c63496795c781bd d2da67bcb14e683811b96a632d26ac9e d2dd1d44fbb786c4a17f09a5d03ad57b d2df477804c4aa239993720f44d6695f +d2dfcaea8644e64cd31e626a9c75c9d1 d2e04a38e9943177c1517d07de4d2771 d2e0aa96f894ec0ddb9b2582b85be0ac d2e119597ff1b7bed2790156254554cf @@ -38763,6 +39256,7 @@ d30fa859dc182577a006b40ef3c336f0 d31004b1702091998a9369f192cfbad7 d3115a22a9884a93bcabba297e74f99b d313ccff40b8068c3320088ffacf4b1f +d3168b74fa1fcf59312711f6bd3f1e19 d317d5b7f380cade73be2a21773bd14c d318230514daf35bda74cc16ae0eb232 d319392971e3ee1e8198f3da49ce52bb @@ -38918,6 +39412,7 @@ d3bdf58795a28d832a461044932c3ad1 d3c11ac5a4749b75dfc3109ba4846b62 d3c124bb8be5f43c27a496312d53034e d3c249a97efc6a5b7a819de08e006f2a +d3c28d34e0bc5cacca531aee91f3b944 d3c4b273bede924eccf6535c480cbe2e d3c51bff37bd475da0411143b4bd82a8 d3c52ce6a639ba4dd1b27b287c37c0e2 @@ -39048,6 +39543,7 @@ d47e5110649094c9328291b2ea9e4226 d47ebb01b3560eba62ab339e3f86cdaf d480809e77c64c0ccd532ba59781c481 d4809d37b78c377b0ebae5fa9746139c +d4826e41620c4433c31d5242b6719fa1 d484195cd8e03e0b9dd087e45171a50a d485245bd324d4f0e952d2155d82cb19 d485926f5c8ed579db07bfa77a96d974 @@ -39490,6 +39986,7 @@ d6e0c235c1ed2e75f1924950c9f27829 d6e2021978dd3dc2098b17fa8cb19a44 d6e35b2414766dc8ef600fa94dafe59a d6e50fe873dedb53e59f89f02fb62548 +d6e621171db8ba9ce88a5db7e1b19ead d6e682fdafab6601a40e9b2cb346385f d6e8a005b10471c22564670f0e1adabe d6e9593d710769acceb258f8ee4963dd @@ -39910,6 +40407,7 @@ d8e75e466a6b837278a891d1a83dec21 d8e7be2cba2ed0d720794ae45d40498a d8e9841bd8e3616444448469d9bbcebd d8eb66efc61eed4fa874f3a5f1a0b0cb +d8ef261f06227377b045224b26b5efbc d8ef97c90f0e69ab338847c086860550 d8f260a3007fa51ae646457a24acd07e d8f2b05667e923292a5fd205895851ff @@ -40102,6 +40600,7 @@ d9ebbf05fef8daae9bd48fc23913a0ed d9ec0a94c83d0c575e82398f32c0d2d6 d9ed3f2b3d43803f2b7fa56b88f9c6f1 d9ed76c9c7c4e0790da52da24334044d +d9f023a83e2fb857424642a9010cb3c2 d9f0f8f544d395ac54d9986c3b7d2b54 d9f1880fff9d947fc1b5fcc5185cfcc0 d9f3c7dd7fbd19877f66141bae4dc825 @@ -40232,6 +40731,7 @@ daa93d28521254eea7fccc020bb2ae72 daab4e3f8a19845cf621a57f681bdf47 daabf8cf699c9c54920d5ea4895a7cfa daadf242f39651e02da6fb6715b30e6b +daae76f1de46a4927226f891d0d31b2d daaed6028973f1cdf2cb9c3afb393c59 daafe14411b1d538fef3e5ef7a3782dd dab32670615455347d203105931215b6 @@ -40252,6 +40752,7 @@ dac59baab608f114ae24d57314cd944f dac5d2c2cfe708d572111e22edaa22ba dac5ea11bde929589f911444923ae5a5 dac682074e151ca035d249b75510b7ca +dac77d9e1596d84eb08a77dcc84e884d dac7ec61f2449365903d41dc67fe6325 dac8396b64655593451f33c37e041442 dacaa820f7f3b674eddcbc8e662499a3 @@ -40293,6 +40794,7 @@ dafbd4cffb21e91dd0eee15e28572f4a daff722986c2feaad9ce79bf17f4d6c6 db013f97a6039f4d9bbbd6a49d52e933 db01f2a14f99060b03a0195f901fe2af +db02b735dbc74cd0f1c3b052e07b337d db02bcf8bde39bb21b85cf0c8aaa50ae db02d004e9a141bf7e63a035186ed128 db02ffe4cb4d960e6dc1d22e803f153e @@ -40349,6 +40851,7 @@ db40d84596d62d70e77a5daf25c88d10 db421acc3c09c8c94c36590ed3bcf267 db42417f9475b2c1c6e4e993d63204ed db42a535ac61a9a68f0caef2846109a9 +db44400018e5aedc637b1e86404f378a db44fa2de855910a174f20fbb63689a5 db4607e80c6bd6d00a3d97d5d3a1afaa db467cae376bb80f62d5679bcc89a670 @@ -40466,6 +40969,7 @@ dbd342872c3e9296744e6b7918327a98 dbd7216d2311348f0339221494403b42 dbd8f4f4429e175022683b0ef1faf0e1 dbdba0e8c5f31b81f2f58b1d381669e0 +dbdd5843bdf5ef2ec509abf47aaa349a dbe03497e2ecb3919f46ab6cb0308142 dbe19386adfc7bf3432adf756d27a397 dbe264a694535e15ab216f34bf8aaf5b @@ -40602,6 +41106,7 @@ dc8ef78aa1c427979d788a3047bf99c6 dc8fa94227ad1d480ed6a8efe1b3fb7c dc90f2c30eb9f048544abdf1d7edeb37 dc92d108c4186448708534b646365d33 +dc938bd32c09f5f1e396725b73736518 dc94bc37a9b15fb57aaca762133c9219 dc94e2aed50b894979e6c9f72b7da8f3 dc95cf3f022d312afd438f16f7e462ec @@ -40674,6 +41179,7 @@ dcfdc32a907f1505694e84f10295d0b3 dcfded0ee766480faa7174ee311966b2 dcff5cfdf2195a01d0cccf2f343c4f32 dd0288d3fe0ab648e55ac420ed251839 +dd030b3ca4c6aed90c457a21f1405321 dd031e560e801fbececd43890eb8cada dd059d6be04d0326f33d5b91ed1289a8 dd05ffa9ed3b154ad8cce300deac6b1e @@ -40718,6 +41224,7 @@ dd3d42adeab6b7c55150129ecd08aa41 dd3f9d3fe8b2a63dd8fabeef87998e7a dd3fb94ba2d890095c39c3ba5391b68b dd41e2ff2874620186a4067eee3eeba6 +dd424ae448f971e5349fd013e7d369f4 dd47897c40b3a80881bbf17c84f24ce3 dd47f09d4ccd08602af150658d73003e dd4933f4556f5feb328537f1dfb156c0 @@ -40779,6 +41286,7 @@ dd923ed85dc0d940778a489020ee0acf dd926e79d01012e0a83d7b539f5dce5e dd92c165c01b0a20a273fa3a995fdf14 dd93b4f911f45ec22cf1866245245b3a +dd95546da7ebcd0e7d275f87bfdbd216 dd98cacd018c81ab5691461f4f70ed24 dd996733cd3fd463af0393e08a796214 dd9b0fad3b11dd4c9c2d47713bf1e38a @@ -40807,6 +41315,7 @@ ddb4ff24ba9fa22daa90e74a3f5748f7 ddb75c6b0a6231f7a93fb5afd9e50eaf ddb7c6d06ea3ee2bea83755763a1cbf8 ddb9c9c45fb00c52ef608ad36db7371e +ddba55a24a1c9618d72e66875c666aa7 ddbf48516bd4abc24b3cdb057928e02b ddc0cbbb9ad7d6e30986971dda9ad30c ddc1ba315f29a1a999a36f6c4ae562d7 @@ -40836,6 +41345,7 @@ dde47dbf705ffbcc454d6b913018448e dde5b2133c7e0f32e6ced6704b7e21f1 dde73b846a0069e5f46981064cad2f68 dde95d8dd2d672a6bfb85d232f5272e0 +ddea0db3b1552995eaaacb21b5cce202 ddea4ca2eae92483cd9ff10cd1b789c5 ddebf1206c7a7de6019c6237ad079409 ddec46901ca4502466b9d465a83e3045 @@ -40908,6 +41418,7 @@ de486759bf9888c03aadf79de7cfa7a1 de4901a306bcaeaf5dd91fde73f07651 de4a0ddac49443e3e21d9c9d8c633e63 de4c6ee951a43b86b1d101fb40d471f7 +de4d39c08710019ebfde896fe6e19ce8 de4d409715efd3ba9fb652b8b42908c3 de4f23598768001464d65dfc43eb8577 de50cb4323850722206be9302df42b15 @@ -41328,6 +41839,7 @@ e0af65c24c06e31677f4c9df0c20a47e e0b0c5ce1f3f32771fe23ffb63be8d50 e0b103c5321a74da0e6d334589b59092 e0b14ad1a97594c0ab5406d51376ea00 +e0b164d9238f244ebe18954d4b2cfd82 e0b216c1e8bd170269a4a3d1ffe6e7ce e0b2b1cfde547e13dd223461437210f3 e0b3bce828e4b58f5792a13a117fcab2 @@ -41357,6 +41869,7 @@ e0dd439402f4deb0995e706dd88b3f8b e0ddd92b4b66597547bc31fa416f6080 e0deadb2b62aebd81db45aeb5a24adc7 e0deafa94c3d5a0ad7b975cfa36caba2 +e0dee42721bb0a3631a29d4a4aec0feb e0df5d05eeba615cb9544074ddcc636e e0dfb4ad268e0623ad8f0a9c66c2c643 e0e1ec6002145dd6845b1414244518dd @@ -41367,6 +41880,7 @@ e0e5357d1d66d4f4fb8f135b78a702c3 e0e9441f12b5d9caf4e4308fa81b24e5 e0ea8b4057a0b5dc963f1b70c45b13e2 e0eca16071451e05353987930f65df39 +e0ee34fffab0d5a138e44c398dd6ff3f e0eff17c1046ad95aaa5aa1a52caf87f e0f2e20a69de486a78e89e2c985abad0 e0f4da0bdff9800793c01a5ddbf299c2 @@ -41395,6 +41909,7 @@ e11694608e2118036d9a88bc928da444 e1169e42d1ca3dd6a5abf7f57ffc16ca e118f83356b80ec16d7e3a07b6127c10 e119387674ff5cbba1c5649d2a6ebbd1 +e119390af07f8edffd68911d9ce74da1 e119940e91ca6890aeed98005a7e1731 e11ba1e0f7d8b630bb5bfd6ca15ffa77 e11e28dd6d9fe4c0ee2bbfb19da912fb @@ -41514,6 +42029,7 @@ e1c173d5532bb73928387765279c741a e1c6b459e49a431f6c79f043230c71a6 e1c70fe46d7f85a16abf8796cdd71986 e1c74a7d63928b83b5a40921aab11e24 +e1ce7e04c337503ab44eca75af814e7f e1d104d003b68399465fa6ba3a905fbb e1d23397cd99b3e925677edc5af1d3a6 e1d31367488b56970b3a4f5a272af618 @@ -41592,6 +42108,7 @@ e23e8a1530c19f8297972bcae95c6808 e23ef942a7832d13a4049e8e86c0e945 e23fff21f4f11053809523d50dfe88d3 e24279d27dd449653792cb6ce937a937 +e242adb913c52b4b914584a21e71d3b0 e242bfe5d16e0d156bfb6806d7b6487e e2454328057c91b33c749ea40075c2e4 e2458fe514d1d3325a5f5b24b8c2fb0d @@ -41711,6 +42228,8 @@ e2d53f79bae5800fde7cac8bab87f5a7 e2d672e1476d1d3beb6536178e841bd3 e2ddc8b72e727b83bd8023d4110521b8 e2de4889dd8da48dfa72016b67e1c2d6 +e2e13b267555022724620b7808c1386c +e2e2a0f36be1ce27b16b7064777e6d74 e2e3b154581884e5382a74a9cbe4890b e2eb95ab0ec7f421e76dbd21b50ae0f9 e2ed8c65c8b84bd04a85ce4d5ae4b083 @@ -42139,6 +42658,7 @@ e5353045ee06c67c18ef717eae108ee6 e536578e521326314de9372de84840c4 e538991bcf42897ecdec38751c509fc8 e5391005e9875639d444eb082f2627e8 +e53930d86f94c85164b632626f60c706 e53ee2779ef40afadda42fce2274ff81 e540e2d0d3d75257616f34d997f05a9e e5438a533cde6cbc06ff053a62f60559 @@ -42222,6 +42742,7 @@ e5a4352431de876a7981c4f04ff1d477 e5a526708779178ab009e9efbd7b6586 e5a56607de28026ef38a96c8e77bf010 e5a595fd66578d8bab60de0fcaafe237 +e5a5b4633e1ecd223f6a630e8532ad48 e5a9ab74bbb74660771264dcab33152a e5aae759aecbc592936875ee3ef65380 e5afcfa23f8e58e7ea5371e9e4b60be6 @@ -42284,10 +42805,12 @@ e60d782e1197015b1d973b5bc8b23c7d e60d9960cefb1f2ad1b2c52061c8c593 e60f76accfc1b56278baeec9b9ff9ee0 e60f98a18adb7348b1cc73ea539e9e84 +e610a8d492be8dc7d6cf74dc4e40d6a0 e61115c6563e3632846c637249304e21 e611df46835c686b2e66d43902534882 e6122a697114893766d41e7b03d12614 e61243b4adc611f8a3df2e9c062f161f +e61315fd1fba62dd3900a25554be8c1a e61319a47b1d7fecdee4bd2953da0faa e6143425ef530a1509f470c5533001e0 e6168a91e9aadf1e2503ed088cb6f06e @@ -42496,6 +43019,7 @@ e72053a958a481ea1b3e6ed4c2527ce4 e721d6a1e47c30880271886cad665eab e723bfcff693b562cb6dda3b775ba327 e724d0e1c26e60bec3cab757c8b71545 +e726531d3ad2284e7c20d0f52ed1527b e726bb56e6ccc7535bb674f501e09b6c e72865c9a43d67df21fc13a0e97a969f e7288203768ffa14eb430271df5c2f37 @@ -42503,6 +43027,7 @@ e728f20a3e21b86bf7e2ebfbed842db0 e729aea1791842ccd5dff222de15b3bb e72b16ad6f11055a861d1cf5cec4a80c e72cebb6a45b56cfe0a2f65033269cc4 +e72e4765ebefeb6430e4d65b9dfaf0fa e72e7439140dfdd1cb7b9b97cd0404b7 e7301737e0ebe8d623a52184973eaead e731134955cb3defa362b343e4a11afa @@ -42513,6 +43038,7 @@ e73b86e1c4d7ae1402897a0211ec3f7f e73c53e4d02afe73f9aee93478ca576d e73d14c3a9260b61ca1ac6bb8fc50bfa e73e618663e0fe603db7be9b1ac500bd +e73ece09800d9954b27d3e49ad33a962 e73ee95fde32570e79272555a7fdd951 e74088ded9f4d66ea17b4a83aad29ea2 e7409f7463a1099a7e496bff1f43ecf2 @@ -42575,6 +43101,7 @@ e787aff2d8d4ab52702f99fd40b76f03 e7890738e082a50d56caa88b7cd26118 e78a87c78f9b70ba921b3a3c2423c3a6 e78c538fcf606dc9d15139ebec55ec13 +e78d34c11e63c1a7e538f540a3c9d72e e79060f7ae96d3f9cbded8eb71409b5a e7924dddc08bb8896004668aa33a9dd4 e793a6ee577cc1efde7b81dcdecfd036 @@ -42630,6 +43157,7 @@ e7e721052eb417750dd4ab58c8489574 e7e886367a0a7f0f8ae6fde22d0b8ad9 e7eb54fd0956d79401d5754998524cc8 e7ee1cedc3c3f19bc1a9c24c3e6b6715 +e7f1acdd456e90cd62a46f94928452b5 e7f456be0f21cc2ea06233a00ce69171 e7f6272671eb83a9efc8eebe7baf3aac e7f77d3f34580d42c3b877dccae5055f @@ -42707,6 +43235,7 @@ e85ce98555b4d8cec3cbab58559eff5c e85ec6e6b55d80585538b6d23e6a9825 e863010c02152a3f4ae95c98729ac188 e864384028ddaa311d52da61c900b360 +e864c3762937c789c8dfa1e7cdf1ba94 e866415bfdeb010b28f7e4905457bc6c e868ae7cfaf4d642855e25f7e9f3aadd e869b541871a217223b0551412b1909d @@ -42736,6 +43265,7 @@ e89752bb76e60fb49311d49fa4ee1a45 e89ab152e0b6a4d42b9698c6ae88ded0 e89b171ee094482050c07446589b9f43 e89c0189e1174999a1ee79a71594b5b1 +e89de80fa2c6dd6ffeb9d69a824a6335 e89ea48c0d3c32a299979215fafa52ba e8a1a16d39922e98a88735ac4c240a52 e8a33f458d6dc972d6811c4d81913aaf @@ -42885,6 +43415,7 @@ e96059c4609f03b2a8f3eadbadeb7eb0 e9635713cd89a85dec41c088864cfdf1 e964fd5a8b5cf602785ea218289ed396 e965d840c84f534e753bcfe8eb471284 +e9680f616ebe9b4d13de3904f4a28611 e96871f92079f7adbb816ab0b679a454 e969b504cbe54a2537843d36d8e46ec4 e96da2301b28827560727a1e07f768dd @@ -42992,6 +43523,7 @@ e9e66a2477c5ec2d7e128e64acbafa62 e9e7ea9f43bb4934a0b93e2df98c92ef e9e8b89b493e046120764a52d62baa98 e9e9b386e275999ba8d2f882a0fd5048 +e9e9b74a154c97f31503e692bb9c55f7 e9e9d203a7db6b4749dfc2ebdb43ed6f e9ec757a5ddec0928efa1715376ba523 e9f5ca864a42584acffe1cedc01fa415 @@ -43245,6 +43777,7 @@ eb365b91d58654fc7afbab91b277c809 eb380b8670885b91eb75cf16495ea1cf eb38376e05a95f43baa3467ede014bac eb38595ece9f56c4bb863b055fa9fce7 +eb399f05619c42c11915768449fdfaaa eb416bfc3029043ab4b46dcf3bae2c50 eb45bddf5eb8f9899ebbae4acbe83eea eb4ab91fafae388a2df011f69a93e08b @@ -43443,6 +43976,7 @@ ec4ca4a7bdec8f679690fc282864c337 ec4cd5d8cef760ed1f265793927517f0 ec4d03594d9811c026991957630c1297 ec4e53cee605c2a44c0e3efa39b5dcd7 +ec4e6c21a1fea98d62e5d0342b458fcb ec4f12f3f8f09e6081203e5b042472c8 ec4f21ce88addc4961ae31f9c1739061 ec51b471f8322306902156ea56ad1223 @@ -43576,6 +44110,7 @@ ed0cb33249568261f931ac3223f6516b ed0dcbd35f9ad283d4a957e1eaa5645b ed0eb1096e38d9ba90938a47c63bb3e5 ed0f82374b072573b86f8606bb93d9b2 +ed107cd058f36f59ebbe4600cdc3d743 ed10b9f9f5e2de93afaa86f941750d3f ed12817124744b92d80b788c1b11d7a8 ed13604dab416cf48ceca86a75e1b32c @@ -43716,6 +44251,7 @@ edb4761371ef373a45468a188a4cc430 edb4852e69eccb79c32bbde510254ee4 edb74fe6ac0c0efdcf1bcb1ca0a338bb edb85989ab9c231617f1a6c8cbf788aa +edb889a0f22d92f095a1308775cdfe9b edbb3259a1e732d1436e2ee8b6513a6c edbb8ff69b9794ecd2593f94eb81fa0c edbd030d5e2a43e0f6c3a7572e03ce61 @@ -43838,11 +44374,13 @@ ee72063127f60f456b024c99ef88a018 ee7277cf739af1962a1a6e34e054b915 ee75448142e288a0641070641f4e124b ee7653b18fa131eff3c9143dc23c8624 +ee7a65064b08e0edf12e5e7a4bb782d2 ee7c91c09703674c37ac56ed9feb727d ee7d4d30cc850801b4d68c5bdd5bb0d1 ee80e422413313b0ad0871b1fc89dade ee826fc62fbe0dfb5675c55b1bd52a61 ee83326ef3c14814ea5f3e9913f9f06a +ee84e745746ebc27b4d8d29682868a56 ee8523bee3e83ce5da195099d0046134 ee8573191163eb288891b71a61e5fe27 ee891f9a4e576363af75406a1a735720 @@ -43868,6 +44406,7 @@ ee99a9844be5272ee1941c0c1500f374 ee9bbf341e907c2db6ca0f611fd30589 ee9d622db86657fa71959b1d47d0d051 ee9e1dda974c53a0b505e4c5f5b47d6b +ee9e712e2b633d235f339defddcefeac ee9e89dafc18407825673b911aaf12c4 ee9f19910ea1d60703744f947246a48a ee9f76e4ccb5994c9b5698fb85b33a2e @@ -43964,6 +44503,7 @@ ef20d01a604ab6db7606dd152a39e856 ef21f1824f4a65a9f615a386ca732f33 ef230883320c3d4d094949ebac810eb7 ef241c9ed8bf9febdbf573efb9e16efd +ef26a3dd1399b787647376c9c039924d ef26c279af61dd3f0153710e0a18f0e3 ef27f84ac9a3179817c21c71be29c2c0 ef287997755e539741e208cda67a92b1 @@ -44039,6 +44579,7 @@ ef80698773c147fefb477fa0207da1fd ef825058443e15996ed6e6255134b2ee ef82722cf6102820daeb38bdd2987e57 ef8376585df641b4bd9aba2384fcfc12 +ef83e0ad22b7dedbebdff5e699d2d21d ef853ccd6d6b6f5b803d6ee3a9e4fab5 ef861abe69af7a093fc71b4f739a37ea ef87ce7e58049d08d655904fb49d4728 @@ -44289,6 +44830,7 @@ f0bca8bef8187e97a3aa9cb81b8461f8 f0bdeb74b9bf8d43cde0726fdca5aa5e f0be6cfd0f34bcc01adff3f005aeaa24 f0bf23a1cdb0f82afe22a2d9de268b55 +f0bfc0c58ac584834dd02c396d2b46da f0c0371529c839c4ba3823ccaed55afd f0c1a474347e1c7d1a5819d19346d6ee f0c83965f8c42f4a4094d4863d8c59a9 @@ -44409,6 +44951,7 @@ f18392fb97cdb87b2be3588097996060 f183e24a252ced5682770ba5d19c1317 f184b1f4f4ec337ea5cd569517bdb5ed f1884d4dae779d142ffe7a6e795e0917 +f18b8219fdddad85b3c2295afaa6f6b4 f18c24437fbf380eeeea52125345b4e3 f18f1f75b952dbd21db98f9820829212 f18fffe76a2f4d8d4e0e84f58d8a7a79 @@ -44614,6 +45157,7 @@ f29282a9c7bbe7bf617a210be8e71c44 f2938057e1ea81c4a0d44b09e9a4c16f f294a29d18f658d2ce8c64b67533a857 f294b160ee0d3a33146cb424fe454346 +f296c835ece7bcc4ea982d8765ed0dc0 f297b39e19a053897c68d4d28d4e02a9 f297e2d1ab8e4442b161679294dd2c1f f2995efe40bcb5dca4d8c4c9aa78852a @@ -44868,6 +45412,7 @@ f3fe3b68a04507a302d9255067a0785f f4006747fcd40d63209db616dc0a4f28 f400ac76977504fb895507f93eccd280 f400e871b9be3219b8d83efa5fa3b788 +f40287546c0acc770be2b7176f9aa59b f4039acec98de74cc9fc77b0e0bc03d9 f407e52bf0eb0da37455458a30f47f1c f407e881b26d4106c7d58d1174522424 @@ -44882,6 +45427,7 @@ f418538c955f8ae706409feb7475b1e8 f41897e4ba4c178f79f5fd9e6ea6801a f4194872ed5aa8c7834a32360678646f f41a07bf1a3b6c97d068ea911f79f70c +f41adfa298d1d4cfe07e31e7a4abd98a f41bc273ba3a47b6c2fdaf1c39489cd9 f41c5d0ac9fc3f16b62a1de8d7ecc558 f41d472e5f776b669843357dae540571 @@ -44933,6 +45479,7 @@ f45ad2c68c4bf6a2e21a19b7f0ead0b9 f45ad72ee02bf09beec4324fb7cf734f f45b28fcd1d3ba3df549ba33f11f0a15 f45bc9830648fd638ad0697d1f26ddd3 +f45e8432919cc4a8f1dd9c17ff9df1e0 f4613d004c5dabfe4fd4691e761b1f89 f462f3bac133b108f91fd781d0c653c4 f464345d0191f1fb018b0634a685a9b6 @@ -44964,6 +45511,7 @@ f4812d3b87f6407093e9ca77242881b2 f481312137481cbb0cf2e31a5f2ea517 f483bf67e15f324a45f0d298ce54ffdb f48698943c7931008391ecc2a4b541d8 +f486ae523950cacd7b0706da16c6cfa0 f4890d39f83bec4007384e64af2290e8 f48a00fc89b57f5caf4c5a9e09be5e57 f48e5da5c07840294f707e72c5907b6a @@ -45028,6 +45576,7 @@ f4d906b9d0a3f05f47fc65f191811ac2 f4d9499ef1f5968818bb2631fc2319e7 f4d9c6b05ce032204cd45a720b2749f8 f4dd10eb199b39b09d5766ddc174290a +f4e11bf5490c37ce33f0c9718913b20e f4e1270f665e89fad953ec10ec7b6636 f4e2c95e375bf8cd9bd18769805f3d96 f4e3f87bff112354747b71afb502ae97 @@ -45052,6 +45601,7 @@ f4fb91b29edc1dc373422b59d300e166 f4fd6b1086b82520f702e1db3f83527e f4fdd6e237bd06c72b37f42127db8838 f5002d6b06d8fc8c505589af0a1dc4a0 +f500400e32aa171e28d7554c559610a9 f5027bf02a01fabca23b82d59fbf679a f5029874173f3369188cd3098c05ea11 f5061409d769a81ff7e09d8e78f37dec @@ -45149,6 +45699,7 @@ f57a7ebc34d6c5a27d27add4b5e78e8c f57c87fffee9b50062335df4a88c2220 f57ce713577a72930bf67c7badc822ed f583a2b000e7aa19c2d33abd62d92d7d +f5847cc8f038e8c05a64da5b4d6bc3ef f5858c3f572b3935253ceeebc0b6b271 f58901d598d23f8daf999601b2ae1348 f5893538df03e650c72286e0baf3de87 @@ -45162,6 +45713,7 @@ f594e48cffbe48b8207ff81063348ab9 f595fd2832223a9af1c7b9fd2502e745 f5974b430025b560c3a61d42bdf3c60f f5982b85becbcb130efebfcdc1b8534e +f59a7872685a7d697331d52f70de2a39 f59bd144b6d2d26bb73f34019ea81aaa f59db22d1681f6b34c98f31a441523c5 f59dfbb991e3a30004ae2bc6ba8c0afc @@ -45244,6 +45796,7 @@ f5fff53a391d3d4d4bd0b86f85eef0d2 f600122549101a1284adbae2f805d606 f6025d346d9dbb8c4a8237ab01c019eb f602d45cf32f35bc9851ab5369ff8218 +f606c4128a08ede8efc6435475afe5ae f608eb7b05fc434379197cbe6e76a032 f6099610dc1ce4200719ebcc1f919abc f60c5fd5b7daf9822388d4f44e675602 @@ -45412,6 +45965,7 @@ f6f4593e9986180a839feed19ce23f8a f6f59a283bbf6ef85fa32641ec00830f f6f6fadb0aa277493c7a24b769d69126 f6faf825a8feb1c1e2548845170d1e95 +f6fbd6cc3bd7a3a141029c63b4fd9469 f6fd5df407ef6e00d265550a67a66471 f70020cfb14665396507c9bbc85dbd8e f701909947014cfa9408c04161296828 @@ -45456,6 +46010,7 @@ f72d06d7bdb80c3f4c1646a1dda0c82d f72df1689a945b14e04eaebae1f0beac f7316cd9367049892af058eff57144f0 f73221057e19d9f46b29c37212969ec5 +f7324d763370e5f80d7629278c84eb91 f732b590c0aa6c81c4095fb6a52e3f20 f735c03b5b27f2b144b127150a0babaa f7371f6a33045457939fdff2effecaa7 @@ -45623,6 +46178,7 @@ f81b9426ae3ced5184c06c83d8641180 f81f29c21949f6ec4874a52c1a8bcb14 f8203f487719248050a6d2242dd4c8c6 f820546f4d19b888a5c1fd9e9af3da0a +f8212c07cf2c06e62f136d0f2220bc9c f825f4f6913e4a2dfe3bbf1b7ed68c65 f8267072405d07590851124f661f636c f827756d8de0937fcde5329c7dd89007 @@ -45676,6 +46232,7 @@ f8561acc42422c74ee0687ed1ef14857 f856e766f68c6382b0b95fec06728744 f85879a800832b73d1a289f65e11709e f858a64e79faa80f35c63ff6b07a7234 +f858d29202bad8b3dae9b1cfae758be1 f8597ffd56372f2781a2db31a606fdf3 f85b2a1ee1123064b1758381924bacdc f85b45546a414c0eb4aa81b35912d324 @@ -45789,6 +46346,7 @@ f8fc4c5695cf34a945b4078e6ef3ed67 f8ff597d40dedca46f485e711222b178 f90011d718196ac53f9df3277f888df9 f9002b78b30ad297194d6697dc742878 +f900eebb9cbbcc9f5081dcac33633a2c f9014149d9eadb8d86868a02d0162d4f f9035dbfa1e1aad1d337a75d15d835b1 f9054971d44cd4ab6ba0efc0caf78d17 @@ -45851,6 +46409,7 @@ f956d7f758ada1e6c44d3d3ec659f6e3 f957a187c95bbbd040ce3e295acce558 f95a5c47b52bc99cab1af3ece3af1d15 f95a681e5534a46db52879257405ba70 +f95e0e4c5b14db5158b7169a24869b5a f95eeea4d46f6f6be9feca4c8ad866ab f95f56577e263aa95e205f2558033db1 f9605fb6d2b3e92526591d297d9c6a2b @@ -45881,6 +46440,7 @@ f97df9707de7048563e3ec1f67152e5e f97ea21419d636f3c9c0a7fd765e3574 f97ed5e2c8abeb2f35772cb0db11b0ca f97f0f48c1ac48892e6f6825dc5712e1 +f980ef5b5ad6f60a1a8cb7b75c69e7c7 f983ecdc1665f293f2a5acf23ad9fc24 f987facba28e66a22a88c7338e4f8c1c f98922b8835100d9038da681cb283dec @@ -45895,6 +46455,7 @@ f991b20f512ea1b9edb0b9fb6ea0d6e3 f99269a992b158314efa879730ab48ca f994d5e3579b8c8410ddc3f8f8e333cc f9961052a1545f2e676173bcfa9fe5be +f997e6824338c762da36d42763920d67 f999483e9a356984a872f4504250de5a f99a78610e38cf7d52570e3eaf79cdf5 f99e4085c2ca11ce108c2d5076d950a6 @@ -45933,6 +46494,7 @@ f9c466ebcefe119f47af7f017a851a2a f9c62664bb1c9c0e0fcaa6a4e36e5633 f9cab6b58f90f4f0b5cb9f2147878525 f9cc7dc1f3c873b758e5952e877f2d96 +f9cd0bea7587681dead05b274fd777d0 f9cf887ad7acdf6d64fd180289f0e00d f9d1064c5f1c2e1f9b3730ef1607f047 f9d22997431de70d143ed0163db250ae @@ -46009,6 +46571,7 @@ fa4249108f523852538a7e0d18fbdaee fa4385ee29ec1cb6bba5e307fec9c503 fa43bacf5d234452b38efde3d1d81f6f fa44378132f28f97c903cf4c6786c369 +fa44cc9df4c37c7ea37024fb8ff810d1 fa45c6f27aa10e0b60ffc937f15fbaa5 fa461fc35c43b07ec62bcf2f1850947c fa46a0efa6abb1b4512a2382ed5cb678 @@ -46016,6 +46579,7 @@ fa4730776e7d079a9dfa4450c36b845d fa47f6be4316a3045aa04d6de74cf0a3 fa49f4e886f43895b698f982928128ce fa4c3a687cca54c1da172bca8b7792ca +fa4c5cae0075a0dda950bca875367b75 fa53f82517bd6c3535cac9cf458ccd59 fa554af2f9c54083b576f2491a479e62 fa56a70d798181e1c87112de87d94e81 @@ -46047,6 +46611,7 @@ fa7c858e3da3a697de502c28a2fc486b fa7d1a8c749d62b235eedd3b4318080a fa7f929cf551de61993bbd10bad6a67f fa82449d0fa9c4be52464a47b3e80bda +fa84d27b7e5a946c72590513eb2150dc fa866296b521b84ccb569f8f0ff66c5b fa89704df325b84f525e9477a3ddc19d fa8aa8ddb7d1a4a7a9e60433b39cc6c8 @@ -46096,6 +46661,7 @@ fab9871f7a6683cbf2560359f23c77f2 fabb5c59a47c7a13db14960d9e13374c fabb62149add90cb646e791ab3e168d7 fabcbef76316f07ce0ea78429c55d842 +fac0cf5ea736022d9c3b8e007e6298bc fac2316211a4584fbf12b090771eb3d6 fac451bdf61b1c403586756b5e189ee8 fac6184d18bb11a485959d3b5d494dce @@ -46126,6 +46692,7 @@ faf45d638f7e5037390b083621df9291 faf4da441fea8fca924686da4b4d4c9f faf5cb6359f00993143c35481cf04057 faf722441ed6ff58b258698a83079a16 +faf9b0a0fab30f9b949551b1c3f4f14f fafe2eb7035ac3239901a7e38096afb5 fafe365b1ba1360edd8a727b339f45e6 fafe483897f194838e3d9ce9b293bfd7 @@ -46217,6 +46784,8 @@ fb9bb31ae11343ca58a9bde59c34cbfe fb9bb58f75a65bddbb743bced762e1e8 fb9e24870528d5db749d494644d2a1a4 fb9e411e6ea6d8f2d72fae2880cecb00 +fb9f7ab2035ec57d901a2754cc668e2c +fb9fc87cff26e01c16c5bd79cb9a0a6a fba145bf5e8e3e9ea79a97e309c65fd2 fba36108ebddf597f97e79fb14a9ab40 fba408cc4af706a59245b5518886adb4 @@ -46572,6 +47141,7 @@ fd77157c9933a8957d403905e55b679a fd773c92fb3b1cd57b8b1b4feac7259d fd785189e663abaa97465adfe302fbf7 fd7b949077f14a2b273ff55f94da22d5 +fd7c52260a051dbc7a02ca414ed8786d fd7e8c69413803d51ba18f4c13630e52 fd81815b6f64135c0adcf789ba7175b8 fd8432bc78524bb550a92507b889621d @@ -46696,6 +47266,7 @@ fe21e77727eb534a57050067a01ca36c fe22f5c6bed9294d3dcef8940dd392c1 fe298b0617e6baa83ffc28d2557839ee fe2afc30a2fb4fa74563bb3120e250ee +fe2b60fe4663b62584eee48b800aa8fa fe2cf01b807fd34a99e7ccd5ebd22ce0 fe2d01bfcecde85adad27b76548caf96 fe2f5ca63b286bdef90cfde25e8d4543 @@ -46750,6 +47321,7 @@ fe7c4dc4d7898e368e7650a2538ad7a6 fe7d21a88c431fcba66f282a860f5fa6 fe7e14d43bbfc0e0aa5aaffdd4077eb6 fe80f8a91ad3352035c2b2d5d9ad38fb +fe8208d834bec49f5b5c0334df875d5e fe826116269e6dc22fac3d927e9aee48 fe827e1fab5510bad28ce42b498db83b fe82d7846a349e5ceb595759db7cb7da @@ -46970,6 +47542,7 @@ ffa69780d558254045c441e668f8be0d ffa707f1252a9ef49255c0e28c287ee2 ffa7a44e00395b562213e73a9e126e21 ffa8a0b92a632f93b26d210aa8cb4094 +ffa98cce0d0e7695aac52b20b5df090d ffaa3de32a34545a25d20d8ca7f77f1e ffaa8ed36ba5fc79f28ee59931d8f503 ffaabf21767c53a55d78a8655bb5175a @@ -47019,6 +47592,7 @@ ffeb18cc6065cf32f3bf7eb373bb7737 ffeb658ad06bad396a9ac131f946d3f0 ffebbb851cca133f07da76fc31f4e331 ffebfb1225d89da97aeb0f086557d2a6 +ffeef0dcf1c079adf02579512bfcc4cc fff0153a5943da8f8ae14c1a9e816a35 fff321142e3f3b3a3a104f10384e6e5e fff34b62d2ee2647965a81f6e0d4f912 From d76f030cb3a67be54e3480844d70c066b388c496 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 07:09:58 +0200 Subject: [PATCH 05/82] [data] update searx.data - update_wikidata_units.py (#4738) --- searx/data/wikidata_units.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/searx/data/wikidata_units.json b/searx/data/wikidata_units.json index 2241bec83..545f289fa 100644 --- a/searx/data/wikidata_units.json +++ b/searx/data/wikidata_units.json @@ -6605,14 +6605,14 @@ "to_si_factor": null }, "Q68725821": { - "si_name": null, + "si_name": "Q11579", "symbol": "°Rø", - "to_si_factor": null + "to_si_factor": 1.90476190476 }, "Q68726230": { - "si_name": null, + "si_name": "Q11579", "symbol": "°De", - "to_si_factor": null + "to_si_factor": 0.66667 }, "Q68726625": { "si_name": null, From 76ebad0b21439e50c4847aa514c1159904489a53 Mon Sep 17 00:00:00 2001 From: SearXNG Bot <85128059+searxng-bot@users.noreply.github.com> Date: Fri, 9 May 2025 09:31:50 +0200 Subject: [PATCH 06/82] [l10n] update translations from Weblate (#4744) 6f8c520f2 - 2025-05-08 - polskiecus 05dd91d5b - 2025-05-08 - return42 686b8e5fb - 2025-05-08 - return42 f40b42bd8 - 2025-05-05 - ehsanrs2 b8013bc99 - 2025-05-03 - polskiecus 5affaa104 - 2025-05-02 - SomeTr Co-authored-by: searxng-bot --- searx/translations/eo/LC_MESSAGES/messages.mo | Bin 17085 -> 17100 bytes searx/translations/eo/LC_MESSAGES/messages.po | 18 +++++------ .../fa_IR/LC_MESSAGES/messages.mo | Bin 24720 -> 25453 bytes .../fa_IR/LC_MESSAGES/messages.po | 23 ++++++++------ searx/translations/pl/LC_MESSAGES/messages.mo | Bin 21205 -> 21812 bytes searx/translations/pl/LC_MESSAGES/messages.po | 29 ++++++++++-------- searx/translations/uk/LC_MESSAGES/messages.mo | Bin 27597 -> 27598 bytes searx/translations/uk/LC_MESSAGES/messages.po | 4 +-- 8 files changed, 41 insertions(+), 33 deletions(-) diff --git a/searx/translations/eo/LC_MESSAGES/messages.mo b/searx/translations/eo/LC_MESSAGES/messages.mo index f84ae75759885950c0ff81f6d30e7403c5c55c21..43e114e38cd4febfe17b8ca5cc5a769c4a86247b 100644 GIT binary patch delta 4626 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 CMc1DI delta 4592 zcmYM%32;}%9l-IIl7xgHge!!2kR}`fl5j-s5RL&1BD4YpMW}|Owc(HkEhK_}B1astxigO&^Gynh(B3LQFI5MOtbd?Kg-%gQ3}=Nn2js318xrOd+_Vj-wO2$*qr)D z!A~%i`W4K;8`u(?wT+@NQIv=>DcnZGRGflyFd6rwFB}dYM+ZKKnfL)3$iMI|OlcPf z(gpicAB*;18eD;+sn=mIJcR|!AALc=iSpXV6BlC(>Lr+tWq3Q5qc6@u`)@!e*o>}l z8yfgdG^KAKi;cz-<(>EdHp3sF{c5l+^G68^uIR_;z*{j3U&kSM6rCW6M*F3q^-jTD z^u6wAYD>_Jjz9yPh%R6%GE`I*+Uqc3hYb|m_LtBV{}kQpo#?>tpcy%XPVgtR|0lt# z*oyj1n?bjWhrw``hAS}fPJCc82*hqsZ*%jP_PP`9|__t^Pe?)dG`YSr% z=XmS95^Wjvbab5Z-~=2?eG)p}%h(#Xhv$2<$-gT)Km+F}I);t31T z3Ht;Gqk)Y=GdCeP4GpjY-Ky_}`XcoGrJ=nx5gycGE)O<@4!cA90dz%2Z~-1eC+eRQ zU(4a>fMd`=Ct^38fxfpgScg^A*P|KmKzKM4nG{%Ll!s(98j4+UGJ0C8gUf@p=w7cz z19=|Jz!rP}e~v@&YkW*>ABLvB91U;^nweS1IEko|f*q^FgH`AX>d~!eL??U)o$y^G z3DNuL3T~hiq;to5V+XYV7SYk zrI^9j=58!U2VRb*bR8PlE9m=sF%REH7xH0fzY@HG8Q%Y|C^$fi&hg4~&;drG6PBYZ zT#amB^c+OyN9*hp>|S z{uzWj@P536WI5{3=o@enI?yGYg{|`A41OP7=`wWU^=PUa(A)JI8t4J+hriAz|E}~J z4er?&=!TOkiWN{XW4==-^xSZ`0a z;7Dxd{hvW0p9ha%b6ka9uli8mh^}l4`oVb(`OzNj$1!+1)Z6#s`%k?Gn$acb7A!*- zv=$xzmC(Kw{rMB^reFZa(QEckQE&9N&A?kf|L0LKvc+hsp2VMEE&5@~D~^9g^h38`Ji5Yfpg*3cpew9I z19=k7&}wuco6xO1ie~T>+V8_+@^8dVG&sOD^b^{Q54n4IC)%+OlI3U!`azkC23#Gi zMf*L2j@N*Et)tE8xCgKmp1{_40nO0gdy{`3{5y0=?h^;l4xOMV*dLu>7`j#W;9#7G z9=`2pMh*p!U4f*Imj|LauSn5^iUhl_DJQtpS zj0W~8-iFt)4JPw_r5I(Q6PBY}I}_cC+1L^jl@!dt5;Qey!h?j5|b^(21L{9bz?Fwx1 zMd+7oC_2$pytS9;1oh~6FQD(gial`$`m5P{ND`w=e#R&4IGTb3OhgaaL+G9_#V+_1 zdYZSQ6TBXtzZL3-(Ul&m{(*tq@nMXqk-R#&NqKB`R_!bI&^3V9X8_=wC_U$ zDI#oFQi46O4EdcTdKAatT3mu>up5>S<$pi;7*4=9(1m=3n=rpL{`LNFDfypI!#`+n zucr@-?|&tFidSJau0vD54L!|!knjqT7quj)93{CXvSVb`)@(}?+X43-J*kN0Evqf z+?%H0HFUr)(QA@2A|5yk+fmO$Gcf=icr@C7Ji3r?p?f<$_+7O9akPIm8u$ui-bA#H zf)PKDcH9)|uc8xeM<-}Rx9AYs?-cspS#$yC(S8@vm0ia6_!&BJ8h6^jTBDh|1CzY} z1r+>b_6!|L(HF;|Dg1V5Ux48+FwNbZ9@ZTMEkvsPJBA}9vb+c(eW>0FR$Bm z3OSfJijM>iLp%Je@tHO`tr~ZBE=+IHuc+_9+`c74`t)tMSkSTS$oUluM^((8H@7Oc qw1V=iTjdc?ES_7nxOm}XRdW~3uP$!*W{<4K&OHWYHqIJcnf^b, 2025. # KinoCineaste , 2025. # AlanBacker , 2025. +# return42 , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2025-03-29 09:21+0000\n" -"PO-Revision-Date: 2025-02-17 13:01+0000\n" -"Last-Translator: AlanBacker " -"\n" +"PO-Revision-Date: 2025-05-09 07:09+0000\n" +"Last-Translator: return42 \n" +"Language-Team: Esperanto \n" "Language: eo\n" -"Language-Team: Esperanto " -"\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -260,7 +261,7 @@ msgstr "" #: searx/engines/duckduckgo_weather.py:81 searx/engines/wttr.py:36 #: searx/searxng.msg msgid "Sunrise" -msgstr "" +msgstr "Sunleviĝo" #. WEATHER_TERMS['SUNSET'] #: searx/engines/duckduckgo_weather.py:82 searx/engines/wttr.py:37 @@ -2067,4 +2068,3 @@ msgstr "kaŝi videojn" #~ "Specifante kutimajn agordojn en la URL" #~ " de preferoj povas esti uzata por " #~ "sinkronigi preferojn tra aparatoj." - diff --git a/searx/translations/fa_IR/LC_MESSAGES/messages.mo b/searx/translations/fa_IR/LC_MESSAGES/messages.mo index a8299076333e33fb8d949b5f5ffe2e13956175a3..362e896da811fdb5a23a8d6ed8a435bad9542d7b 100644 GIT binary patch delta 6296 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 YY7kAmmAz#rh+LaS8ta>?rYFY#7hgd8TL1t6 delta 5611 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 Kd&Z3n3HU#w`n1CU diff --git a/searx/translations/fa_IR/LC_MESSAGES/messages.po b/searx/translations/fa_IR/LC_MESSAGES/messages.po index 8e8346fb4..cd572588b 100644 --- a/searx/translations/fa_IR/LC_MESSAGES/messages.po +++ b/searx/translations/fa_IR/LC_MESSAGES/messages.po @@ -23,13 +23,14 @@ # Parsa Ranjbar , 2025. # arashe22 , 2025. # return42 , 2025. +# ehsanrs2 , 2025. msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2025-03-29 09:21+0000\n" -"PO-Revision-Date: 2025-03-31 18:08+0000\n" -"Last-Translator: return42 \n" +"PO-Revision-Date: 2025-05-06 12:53+0000\n" +"Last-Translator: ehsanrs2 \n" "Language-Team: Persian \n" "Language: fa_IR\n" @@ -533,15 +534,15 @@ msgstr "کیفیت فایل" #: searx/plugins/ahmia_filter.py:32 msgid "Ahmia blacklist" -msgstr "" +msgstr "لیست سیاه Ahmia" #: searx/plugins/ahmia_filter.py:33 msgid "Filter out onion results that appear in Ahmia's blacklist." -msgstr "" +msgstr "نتایج onion که در لیست سیاه Ahmia ظاهر می‌شوند را فیلتر کنید." #: searx/plugins/calculator.py:38 msgid "Basic Calculator" -msgstr "" +msgstr "ماشین حساب اولیه" #: searx/plugins/calculator.py:39 msgid "Calculate mathematical expressions via the search bar" @@ -614,7 +615,7 @@ msgstr "" #: searx/plugins/tor_check.py:65 msgid "Could not download the list of Tor exit-nodes from" -msgstr "دانلود لیست گره‌های خروجی تور از این مسیر ممکن نیست:" +msgstr "نتوانستم لیست گره‌های خروجی Tor را از اینجا دانلود کنم" #: searx/plugins/tor_check.py:72 msgid "You are using Tor and it looks like you have the external IP address" @@ -634,7 +635,7 @@ msgstr "آرگومان های ردیاب ها را از URL برگشتی حذف #: searx/plugins/unit_converter.py:49 msgid "Unit converter plugin" -msgstr "" +msgstr "افزونه تبدیل واحد" #: searx/plugins/unit_converter.py:50 msgid "Convert between units" @@ -681,7 +682,7 @@ msgstr "ردیاب مشکل" #: searx/templates/simple/base.html:70 searx/templates/simple/stats.html:18 msgid "Engine stats" -msgstr "آمار موتور" +msgstr "وضعیت موتور" #: searx/templates/simple/base.html:72 msgid "Public instances" @@ -693,7 +694,7 @@ msgstr "سیاست حفظ حریم خصوصی" #: searx/templates/simple/base.html:78 msgid "Contact instance maintainer" -msgstr "تماس با مسئول‌نگهداری نمونه" +msgstr "تماس با نگهدارنده نمونه" #: searx/templates/simple/categories.html:30 msgid "Click on the magnifier to perform search" @@ -1185,6 +1186,8 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" +"یک URL حاوی تنظیمات برگزیده شما. از این URL می‌توان برای بازیابی تنظیمات شما " +"در دستگاه دیگری استفاده کرد." #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -1244,7 +1247,7 @@ msgstr "زمان بیشینه" #: searx/templates/simple/preferences/favicon.html:2 msgid "Favicon Resolver" -msgstr "" +msgstr "حل کننده فاویکون" #: searx/templates/simple/preferences/favicon.html:15 msgid "Display favicons near search results" diff --git a/searx/translations/pl/LC_MESSAGES/messages.mo b/searx/translations/pl/LC_MESSAGES/messages.mo index 1f1361db30debf5bfbeb92a7fc8c7f8aa55fc930..68409d61ba2b3d50b11f87971f89ccccbdc90a7f 100644 GIT binary patch delta 6088 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 z, 2025. # matsob0123 , 2025. # return42 , 2025. +# polskiecus , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2025-03-29 09:21+0000\n" -"PO-Revision-Date: 2025-03-14 07:09+0000\n" -"Last-Translator: return42 \n" +"PO-Revision-Date: 2025-05-09 07:09+0000\n" +"Last-Translator: polskiecus \n" +"Language-Team: Polish \n" "Language: pl\n" -"Language-Team: Polish " -"\n" -"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && " -"(n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && " -"n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (" +"n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && " +"n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" +"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -539,15 +541,17 @@ msgstr "Jakość pliku" #: searx/plugins/ahmia_filter.py:32 msgid "Ahmia blacklist" -msgstr "" +msgstr "Czarna lista wyszukiwarki Ahmia" #: searx/plugins/ahmia_filter.py:33 msgid "Filter out onion results that appear in Ahmia's blacklist." msgstr "" +"Pomiń serwisy .onion, które znajdują się na czarnej liście wyszkukiwarki " +"Ahmia" #: searx/plugins/calculator.py:38 msgid "Basic Calculator" -msgstr "" +msgstr "Kalkulator Prosty" #: searx/plugins/calculator.py:39 msgid "Calculate mathematical expressions via the search bar" @@ -642,7 +646,7 @@ msgstr "Usuń argumenty elementów śledzących ze zwróconego adresu URL" #: searx/plugins/unit_converter.py:49 msgid "Unit converter plugin" -msgstr "" +msgstr "Plugin do konwersji jednostek" #: searx/plugins/unit_converter.py:50 msgid "Convert between units" @@ -1196,6 +1200,8 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" +"Adres URL zawierający twoje preferencje/ustawienia. Ten Adres URL pozwala na " +"odzyskanie/przeniesienie swoich ustawień na inne urządzenie" #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -2103,4 +2109,3 @@ msgstr "ukryj wideo" #~ "Określanie własnych ustawień w adresie " #~ "URL preferencji może służyć do " #~ "synchronizowania preferencji między urządzeniami." - diff --git a/searx/translations/uk/LC_MESSAGES/messages.mo b/searx/translations/uk/LC_MESSAGES/messages.mo index a3dad0d4f776d46b510b9249e6476217f6181175..67c11c07a12ab8984a0d84ff8bd909104d3d272f 100644 GIT binary patch delta 165 zcmX?mo$=gt#tlbA>iHQM7`U>47)VP2X?Y;63Z%t>v@4Ki0n)KRS`$bo0cjB+-2Ej%>$&@0BJTLy%R{A0qFxk+89WG2ht$(w6hr)Qh~HLkd^_`8-X-~Vp3vWI>TmX f(I6QvQ(XgN1w&ISQ=`rE4T~)pbvFxT?Pdf3`@J1) delta 163 zcmX?io$>5-#tlbA>iHNL7`U>47)VP3X?Y;60;I)(v$%Y18FuOy#q*_0qOlf+89WG1JWS#w6Yl(Qh~G=kd^_`8-O%}Vp3vWI>TmX d(I6QvV_hRl1w$h%6NAn34T~){3uo\n" "Language-Team: Ukrainian \n" @@ -383,7 +383,7 @@ msgstr "помилка пошуку" #: searx/webutils.py:36 msgid "timeout" -msgstr "таймаут" +msgstr "тайм-аут" #: searx/webutils.py:37 msgid "parsing error" From 5ce3aa3acf3ad02849d65082310384e00e0db3b7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 11:09:44 +0200 Subject: [PATCH 07/82] [upd] pypi: Bump yamllint from 1.37.0 to 1.37.1 (#4752) Bumps [yamllint](https://github.com/adrienverge/yamllint) from 1.37.0 to 1.37.1. - [Release notes](https://github.com/adrienverge/yamllint/releases) - [Changelog](https://github.com/adrienverge/yamllint/blob/master/CHANGELOG.rst) - [Commits](https://github.com/adrienverge/yamllint/compare/v1.37.0...v1.37.1) --- updated-dependencies: - dependency-name: yamllint dependency-version: 1.37.1 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index 384e22989..ad7b698bd 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -16,7 +16,7 @@ sphinx-notfound-page==1.1.0 myst-parser==3.0.1 linuxdoc==20240924 aiounittest==1.5.0 -yamllint==1.37.0 +yamllint==1.37.1 wlc==1.15 coloredlogs==15.0.1 docutils>=0.21.2 From 50406d4b46a4c39976805bb95bb60884d22b2066 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 11:10:37 +0200 Subject: [PATCH 08/82] [upd] pypi: Bump pylint from 3.3.6 to 3.3.7 (#4750) Bumps [pylint](https://github.com/pylint-dev/pylint) from 3.3.6 to 3.3.7. - [Release notes](https://github.com/pylint-dev/pylint/releases) - [Commits](https://github.com/pylint-dev/pylint/compare/v3.3.6...v3.3.7) --- updated-dependencies: - dependency-name: pylint dependency-version: 3.3.7 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index ad7b698bd..d0e29867a 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -2,7 +2,7 @@ mock==5.2.0 nose2[coverage_plugin]==0.15.1 cov-core==1.15.0 black==24.3.0 -pylint==3.3.6 +pylint==3.3.7 splinter==0.21.0 selenium==4.31.0 Pallets-Sphinx-Themes==2.3.0 From 1326ec7429526ad538a7c64f89d499dd09ddee27 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 07:52:52 +0000 Subject: [PATCH 09/82] [upd] web-client (simple): Bump ionicons in /client/simple Bumps [ionicons](https://github.com/ionic-team/ionicons) from 7.4.0 to 8.0.8. - [Release notes](https://github.com/ionic-team/ionicons/releases) - [Commits](https://github.com/ionic-team/ionicons/compare/v7.4.0...v8.0.8) --- updated-dependencies: - dependency-name: ionicons dependency-version: 8.0.8 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- client/simple/package-lock.json | 138 ++++++++++++++++++++++++++++++-- client/simple/package.json | 2 +- 2 files changed, 131 insertions(+), 9 deletions(-) diff --git a/client/simple/package-lock.json b/client/simple/package-lock.json index 98f326728..9ebd69257 100644 --- a/client/simple/package-lock.json +++ b/client/simple/package-lock.json @@ -18,7 +18,7 @@ "eslint": "^9.25.1", "filemanager-webpack-plugin": "^8.0.0", "globals": "^16.0.0", - "ionicons": "^7.4.0", + "ionicons": "^8.0.8", "leaflet": "^1.9.4", "less": "^4.3.0", "less-loader": "^12.3.0", @@ -1766,9 +1766,9 @@ ] }, "node_modules/@stencil/core": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.26.0.tgz", - "integrity": "sha512-+0Inu+dJ9/LgWSskcZwx7v17v4GILcwIYxNgD+OuK0U+D5z61WsxWw7yHkYG5OqGPBijsJMVssYRx/Tn+e7F9A==", + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.31.0.tgz", + "integrity": "sha512-Ei9MFJ6LPD9BMFs+klkHylbVOOYhG10Jv4bvoFf3GMH15kA41rSYkEdr4DiX84ZdErQE2qtFV/2SUyWoXh0AhA==", "dev": true, "license": "MIT", "bin": { @@ -1777,8 +1777,130 @@ "engines": { "node": ">=16.0.0", "npm": ">=7.10.0" + }, + "optionalDependencies": { + "@rollup/rollup-darwin-arm64": "4.34.9", + "@rollup/rollup-darwin-x64": "4.34.9", + "@rollup/rollup-linux-arm64-gnu": "4.34.9", + "@rollup/rollup-linux-arm64-musl": "4.34.9", + "@rollup/rollup-linux-x64-gnu": "4.34.9", + "@rollup/rollup-linux-x64-musl": "4.34.9", + "@rollup/rollup-win32-arm64-msvc": "4.34.9", + "@rollup/rollup-win32-x64-msvc": "4.34.9" } }, + "node_modules/@stencil/core/node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.9.tgz", + "integrity": "sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@stencil/core/node_modules/@rollup/rollup-darwin-x64": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.9.tgz", + "integrity": "sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@stencil/core/node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.9.tgz", + "integrity": "sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@stencil/core/node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.9.tgz", + "integrity": "sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@stencil/core/node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.9.tgz", + "integrity": "sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@stencil/core/node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.9.tgz", + "integrity": "sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@stencil/core/node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.9.tgz", + "integrity": "sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@stencil/core/node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.9.tgz", + "integrity": "sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -4217,13 +4339,13 @@ } }, "node_modules/ionicons": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.4.0.tgz", - "integrity": "sha512-ZK94MMqgzMCPPMhmk8Ouu6goyVHFIlw/ACP6oe3FrikcI0N7CX0xcwVaEbUc0G/v3W0shI93vo+9ve/KpvcNhQ==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-8.0.8.tgz", + "integrity": "sha512-CRHhDQA5vsNxC7raeEPqddgO90iR2F13VZS7hB0Vx7JrxJMM2060E3ddgYbpMQNJjzeBsgpkNwdBeK5qQ7RbLA==", "dev": true, "license": "MIT", "dependencies": { - "@stencil/core": "^4.0.3" + "@stencil/core": "^4.30.0" } }, "node_modules/is-arrayish": { diff --git a/client/simple/package.json b/client/simple/package.json index f7791e9ef..5eeffb688 100644 --- a/client/simple/package.json +++ b/client/simple/package.json @@ -16,7 +16,7 @@ "eslint": "^9.25.1", "filemanager-webpack-plugin": "^8.0.0", "globals": "^16.0.0", - "ionicons": "^7.4.0", + "ionicons": "^8.0.8", "leaflet": "^1.9.4", "less": "^4.3.0", "less-loader": "^12.3.0", From 409ede153097ff8e0d4cce028b611a790e44b166 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Fri, 9 May 2025 12:08:44 +0200 Subject: [PATCH 10/82] [fix] simple client: jinja_svg_catalog addClassesToSVGElement Starting with ionicons-8.0.8 the SVG already contains a class attribute and instaed of using SVGO plugin ``addAttributesToSVGElement`` we habve to use ``addClassesToSVGElement`` to add out ``__jinja_class_placeholder__``. Signed-off-by: Markus Heiser --- client/simple/tools/jinja_svg_catalog.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/simple/tools/jinja_svg_catalog.js b/client/simple/tools/jinja_svg_catalog.js index 0adffa5af..e3e8f1216 100644 --- a/client/simple/tools/jinja_svg_catalog.js +++ b/client/simple/tools/jinja_svg_catalog.js @@ -51,11 +51,13 @@ function jinja_svg_catalog(dest, macros, items) { (item) => { /** @type {import("svgo").Config} */ + // JSON.stringify & JSON.parse are used to create a deep copy of the + // item.svgo_opts object const svgo_opts = JSON.parse(JSON.stringify(item.svgo_opts)); svgo_opts.plugins.push({ - name: "addAttributesToSVGElement", + name: "addClassesToSVGElement", params: { - attributes: [{ "class": __jinja_class_placeholder__, }] + classNames: [__jinja_class_placeholder__] }} ); From cbf9ec7bf48adee105ee3b130dd4b00664c78e41 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Fri, 9 May 2025 12:14:39 +0200 Subject: [PATCH 11/82] [fix] static.build.commit: add missing searx/templates/simple/icons.html Signed-off-by: Markus Heiser --- utils/lib_sxng_static.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/utils/lib_sxng_static.sh b/utils/lib_sxng_static.sh index 4a1fffaab..b10af3b40 100755 --- a/utils/lib_sxng_static.sh +++ b/utils/lib_sxng_static.sh @@ -4,6 +4,7 @@ STATIC_BUILD_COMMIT="[build] /static" STATIC_BUILT_PATHS=( + 'searx/templates/simple/icons.html' 'searx/static/themes/simple' 'client/simple/package-lock.json' ) From ef158ce1f41647a5da0a2f22d82cbc03db030953 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Fri, 9 May 2025 12:15:36 +0200 Subject: [PATCH 12/82] [build] /static --- searx/templates/simple/icons.html | 58 +++++++++++++++---------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/searx/templates/simple/icons.html b/searx/templates/simple/icons.html index 2ef37dd26..151b1b49b 100644 --- a/searx/templates/simple/icons.html +++ b/searx/templates/simple/icons.html @@ -7,35 +7,35 @@ template. This file from: {%- set catalog = { - 'alert' : '', - 'appstore' : '', - 'book' : '', - 'close' : '', - 'download' : '', - 'ellipsis-vertical' : '', - 'file-tray-full' : '', - 'film' : '', - 'globe' : '', - 'heart' : '', - 'image' : '', - 'layers' : '', - 'leecher' : '', - 'location' : '', - 'magnet' : '', - 'musical-notes' : '', - 'navigate-down' : '', - 'navigate-left' : '', - 'navigate-right' : '', - 'navigate-up' : '', - 'people' : '', - 'play' : '', - 'radio' : '', - 'save' : '', - 'school' : '', - 'search' : '', - 'seeder' : '', - 'settings' : '', - 'tv' : '', + 'alert' : '', + 'appstore' : '', + 'book' : '', + 'close' : '', + 'download' : '', + 'ellipsis-vertical' : '', + 'file-tray-full' : '', + 'film' : '', + 'globe' : '', + 'heart' : '', + 'image' : '', + 'layers' : '', + 'leecher' : '', + 'location' : '', + 'magnet' : '', + 'musical-notes' : '', + 'navigate-down' : '', + 'navigate-left' : '', + 'navigate-right' : '', + 'navigate-up' : '', + 'people' : '', + 'play' : '', + 'radio' : '', + 'save' : '', + 'school' : '', + 'search' : '', + 'seeder' : '', + 'settings' : '', + 'tv' : '', 'information-circle' : '', 'newspaper' : '', } From 77b78fab043997bcde916f6901522e0cb39faa64 Mon Sep 17 00:00:00 2001 From: kevadesu Date: Fri, 9 May 2025 17:39:56 +0200 Subject: [PATCH 13/82] Branding --- README.rst | 2 + .../themes/simple/img/empty_favicon.svg | 2 +- searx/static/themes/simple/img/favicon.png | Bin 5036 -> 18883 bytes searx/static/themes/simple/img/favicon.svg | 27 ++++++++++- .../themes/simple/img/img_load_error.svg | 42 +++++++++++++++++- searx/static/themes/simple/img/searxng.png | Bin 8692 -> 10181 bytes searx/static/themes/simple/img/searxng.svg | 37 ++++++++++++++- 7 files changed, 106 insertions(+), 4 deletions(-) diff --git a/README.rst b/README.rst index 20c9175bb..e43437b55 100644 --- a/README.rst +++ b/README.rst @@ -10,6 +10,8 @@ ---- +Fork of SearXNG. The globe icon for empty_favicon.svg in searx/static/themes/simple/img/ belongs to the Noto Emojis font by Google + Privacy-respecting, hackable `metasearch engine`_ Searx.space_ lists ready-to-use running instances. diff --git a/searx/static/themes/simple/img/empty_favicon.svg b/searx/static/themes/simple/img/empty_favicon.svg index 580025e32..d390e6522 100644 --- a/searx/static/themes/simple/img/empty_favicon.svg +++ b/searx/static/themes/simple/img/empty_favicon.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/searx/static/themes/simple/img/favicon.png b/searx/static/themes/simple/img/favicon.png index 15fcd6fa1a35bc33a19a713f03c9c4f9ed44c32c..8e2200b942d9f5340a1c6e4cb2a40d18bff4408a 100644 GIT binary patch literal 18883 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 B#H0WK literal 5036 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 Cy^wVP diff --git a/searx/static/themes/simple/img/favicon.svg b/searx/static/themes/simple/img/favicon.svg index 262414509..03957d309 100644 --- a/searx/static/themes/simple/img/favicon.svg +++ b/searx/static/themes/simple/img/favicon.svg @@ -1 +1,26 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/searx/static/themes/simple/img/img_load_error.svg b/searx/static/themes/simple/img/img_load_error.svg index 3f276b2fe..038ba9b55 100644 --- a/searx/static/themes/simple/img/img_load_error.svg +++ b/searx/static/themes/simple/img/img_load_error.svg @@ -1 +1,41 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/searx/static/themes/simple/img/searxng.png b/searx/static/themes/simple/img/searxng.png index 35eeb60be10790510067a3a1672a14d6d6af7725..ab1c34a460dfc1f5b99826419cbd7861de7bfad0 100644 GIT binary patch literal 10181 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 T=^Oa}T7Z<8yl9oMLE!%ZlXnix diff --git a/searx/static/themes/simple/img/searxng.svg b/searx/static/themes/simple/img/searxng.svg index 8b13a027f..c695bfba2 100644 --- a/searx/static/themes/simple/img/searxng.svg +++ b/searx/static/themes/simple/img/searxng.svg @@ -1 +1,36 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From d456f13f2e763772d154279e788967f33a7f8b21 Mon Sep 17 00:00:00 2001 From: kevadesu Date: Fri, 9 May 2025 18:00:19 +0200 Subject: [PATCH 14/82] Editing branding again --- searx/static/themes/simple/img/searxng.png | Bin 10181 -> 9986 bytes searx/static/themes/simple/img/searxng.svg | 46 ++++++++------------- 2 files changed, 18 insertions(+), 28 deletions(-) diff --git a/searx/static/themes/simple/img/searxng.png b/searx/static/themes/simple/img/searxng.png index ab1c34a460dfc1f5b99826419cbd7861de7bfad0..93545f7948de61c9dde1dac7060efe27d54337a6 100644 GIT binary patch delta 9985 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 LNkvXXu0mjf^<%NX literal 10181 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 - + - - - + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + - - - - From df9d41822299e318fa600bd94f3ad4baadcc2061 Mon Sep 17 00:00:00 2001 From: kevadesu Date: Fri, 9 May 2025 18:05:13 +0200 Subject: [PATCH 15/82] Fixing branding --- searx/static/themes/simple/img/searxng.png | Bin 9986 -> 14785 bytes searx/static/themes/simple/img/searxng.svg | 31 +++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/searx/static/themes/simple/img/searxng.png b/searx/static/themes/simple/img/searxng.png index 93545f7948de61c9dde1dac7060efe27d54337a6..60931b6c9130f3e2bef8d102cc099aea440af9d6 100644 GIT binary patch literal 14785 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 bxO?#rmJXDI?X|(600000NkvXXu0mjfs*Q$P delta 9985 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 LNkvXXu0mjf)vB@J diff --git a/searx/static/themes/simple/img/searxng.svg b/searx/static/themes/simple/img/searxng.svg index b8c6fe9fc..eceee9c2a 100644 --- a/searx/static/themes/simple/img/searxng.svg +++ b/searx/static/themes/simple/img/searxng.svg @@ -3,6 +3,23 @@ + + + + + + + + + + + + + + + + + @@ -17,6 +34,20 @@ + + + + + + + + + + + + + + From 48456caeb3cc701cc0d0e15091a42c5b5cb540d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milien=20=28perso=29?= <4016501+unixfox@users.noreply.github.com> Date: Fri, 9 May 2025 18:46:20 +0000 Subject: [PATCH 16/82] chore: docker + github-actions dependabot (#4754) * chore: docker dependabot * Add github actions too --- .github/dependabot.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 4128911f3..a106397f3 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -20,3 +20,21 @@ updates: target-branch: "master" commit-message: prefix: "[upd] web-client (simple):" + + - package-ecosystem: "docker" + directory: "/" + schedule: + interval: "weekly" + day: "friday" + target-branch: "master" + commit-message: + prefix: "[upd] docker:" + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + day: "friday" + target-branch: "master" + commit-message: + prefix: "[upd] github-actions:" From e982b9f73205dec9da2c5c1fc757bb40c605c899 Mon Sep 17 00:00:00 2001 From: Ivan Gabaldon Date: Fri, 9 May 2025 23:05:20 +0200 Subject: [PATCH 17/82] [fix] documentation should run on push/pr Instead of executing the workflow after integration.yml completes correctly, let's run this workflow parallel to integration.yml restoring the original behaviour. --- .github/workflows/documentation.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 6d9f2cac5..629d9a272 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -4,11 +4,10 @@ name: Documentation # yamllint disable-line rule:truthy on: workflow_dispatch: - workflow_run: - workflows: - - Integration - types: - - completed + push: + branches: + - master + pull_request: branches: - master @@ -24,7 +23,6 @@ env: jobs: release: - if: github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' name: Release runs-on: ubuntu-24.04-arm permissions: @@ -56,7 +54,8 @@ jobs: - name: Build documentation run: make V=1 docs.clean docs.html - - name: Release + - if: github.ref_name == 'master' + name: Release uses: JamesIves/github-pages-deploy-action@v4 with: folder: "dist/docs" From 8e2e7774d7aeb13eac29c4dc16d65a2051ca250d Mon Sep 17 00:00:00 2001 From: Ivan Gabaldon Date: Sat, 10 May 2025 13:08:20 +0200 Subject: [PATCH 18/82] [mod] new l10n.yml workflow (#4734) l10n.yml will run after integration.yml finishes successfully (will defer anything depending on integration.yml until heavy loads like container building are moved to separate workflows) and in master branch. * After every integration.yml workflow completes successfully, only the `update` job runs. * Dispatch and Crontab triggers only the `pr` job. Style changes, cleanup and improved integration with CI by leveraging the use of shared cache between all workflows (not functional until all workflows have been refactored). --- .github/workflows/integration.yml | 42 ------- .github/workflows/l10n.yml | 136 ++++++++++++++++++++++ .github/workflows/translations-update.yml | 59 ---------- 3 files changed, 136 insertions(+), 101 deletions(-) create mode 100644 .github/workflows/l10n.yml delete mode 100644 .github/workflows/translations-update.yml diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 9ca96bf69..eb4f458d7 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -47,48 +47,6 @@ jobs: - name: Build themes run: make themes.all - babel: - name: Update translations branch - runs-on: ubuntu-24.04 - if: ${{ github.repository_owner == 'searxng' && github.ref == 'refs/heads/master' }} - needs: - - python - - themes - permissions: - contents: write # for make V=1 weblate.push.translations - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: '0' - token: ${{ secrets.WEBLATE_GITHUB_TOKEN }} - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: '3.12' - architecture: 'x64' - - name: Cache Python dependencies - id: cache-python - uses: actions/cache@v4 - with: - path: | - ./local - ./.nvm - ./node_modules - key: python-ubuntu-20.04-3.12-${{ hashFiles('requirements*.txt', 'setup.py','.nvmrc', 'package.json') }} - - name: weblate & git setup - env: - WEBLATE_CONFIG: ${{ secrets.WEBLATE_CONFIG }} - run: | - mkdir -p ~/.config - echo "${WEBLATE_CONFIG}" > ~/.config/weblate - git config --global user.email "searxng-bot@users.noreply.github.com" - git config --global user.name "searxng-bot" - - name: Update transations - id: update - run: | - make V=1 weblate.push.translations - dockers: name: Docker if: github.ref == 'refs/heads/master' diff --git a/.github/workflows/l10n.yml b/.github/workflows/l10n.yml new file mode 100644 index 000000000..4220c5c65 --- /dev/null +++ b/.github/workflows/l10n.yml @@ -0,0 +1,136 @@ +--- +name: Translation + +# yamllint disable-line rule:truthy +on: + workflow_dispatch: + workflow_run: + workflows: + - Integration + types: + - completed + branches: + - master + schedule: + - cron: "05 07 * * 5" + +concurrency: + group: ${{ github.workflow }}-${{ github.ref_name }} + cancel-in-progress: false + +permissions: + contents: read + +env: + PYTHON_VERSION: "3.13" + +jobs: + update: + if: github.repository_owner == 'searxng' && github.event.workflow_run.conclusion == 'success' + name: Update + runs-on: ubuntu-24.04-arm + permissions: + # For "make V=1 weblate.push.translations" + contents: write + + steps: + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: "${{ env.PYTHON_VERSION }}" + + - name: Checkout + uses: actions/checkout@v4 + with: + token: "${{ secrets.WEBLATE_GITHUB_TOKEN }}" + fetch-depth: "0" + + - name: Setup cache Python + uses: actions/cache@v4 + with: + key: "python-${{ env.PYTHON_VERSION }}-${{ runner.arch }}-${{ hashFiles('./requirements*.txt') }}" + restore-keys: "python-${{ env.PYTHON_VERSION }}-${{ runner.arch }}-" + path: "./local/" + + - name: Setup venv + run: make V=1 install + + - name: Setup Weblate + run: | + mkdir -p ~/.config + echo "${{ secrets.WEBLATE_CONFIG }}" > ~/.config/weblate + + - name: Setup Git + run: | + git config --global user.email "searxng-bot@users.noreply.github.com" + git config --global user.name "searxng-bot" + + - name: Update translations + run: make V=1 weblate.push.translations + + pr: + if: | + github.repository_owner == 'searxng' + && (github.event_name == 'workflow_dispatch' || github.event_name == 'schedule') + name: Pull Request + runs-on: ubuntu-24.04-arm + permissions: + # For "make V=1 weblate.translations.commit" + contents: write + # For action "peter-evans/create-pull-request" + pull-requests: write + + steps: + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: "${{ env.PYTHON_VERSION }}" + + - name: Checkout + uses: actions/checkout@v4 + with: + token: "${{ secrets.WEBLATE_GITHUB_TOKEN }}" + fetch-depth: "0" + + - name: Setup cache Python + uses: actions/cache@v4 + with: + key: "python-${{ env.PYTHON_VERSION }}-${{ runner.arch }}-${{ hashFiles('./requirements*.txt') }}" + restore-keys: "python-${{ env.PYTHON_VERSION }}-${{ runner.arch }}-" + path: "./local/" + + - name: Setup venv + run: make V=1 install + + - name: Setup Weblate + run: | + mkdir -p ~/.config + echo "${{ secrets.WEBLATE_CONFIG }}" > ~/.config/weblate + + - name: Setup Git + run: | + git config --global user.email "searxng-bot@users.noreply.github.com" + git config --global user.name "searxng-bot" + + - name: Merge and push translation updates + run: make V=1 weblate.translations.commit + + - name: Create PR + id: cpr + uses: peter-evans/create-pull-request@v7 + with: + author: "${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>" + committer: "searxng-bot " + title: "[l10n] update translations from Weblate" + commit-message: "[l10n] update translations from Weblate" + branch: "translations_update" + delete-branch: "true" + draft: "false" + signoff: "false" + labels: | + translation + + - name: Display information + run: | + echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}" + echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}" diff --git a/.github/workflows/translations-update.yml b/.github/workflows/translations-update.yml deleted file mode 100644 index 85e141e7f..000000000 --- a/.github/workflows/translations-update.yml +++ /dev/null @@ -1,59 +0,0 @@ -name: "Update translations" -on: # yamllint disable-line rule:truthy - schedule: - - cron: "05 07 * * 5" - workflow_dispatch: - -jobs: - babel: - name: "create PR for additions from weblate" - runs-on: ubuntu-24.04 - if: ${{ github.repository_owner == 'searxng' && github.ref == 'refs/heads/master' }} - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: '0' - token: ${{ secrets.WEBLATE_GITHUB_TOKEN }} - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: '3.12' - architecture: 'x64' - - name: Cache Python dependencies - id: cache-python - uses: actions/cache@v4 - with: - path: | - ./local - ./.nvm - ./node_modules - key: python-ubuntu-24.04-3.12-${{ hashFiles('requirements*.txt', 'setup.py','.nvmrc', 'package.json') }} - - name: weblate & git setup - env: - WEBLATE_CONFIG: ${{ secrets.WEBLATE_CONFIG }} - run: | - mkdir -p ~/.config - echo "${WEBLATE_CONFIG}" > ~/.config/weblate - git config --global user.email "searxng-bot@users.noreply.github.com" - git config --global user.name "searxng-bot" - - name: Merge and push transation updates - run: | - make V=1 weblate.translations.commit - - name: Create Pull Request - id: cpr - uses: peter-evans/create-pull-request@v3 - with: - token: ${{ secrets.WEBLATE_GITHUB_TOKEN }} - commit-message: '[l10n] update translations from Weblate' - committer: searxng-bot - author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com> - signoff: false - branch: translations_update - delete-branch: true - draft: false - title: '[l10n] update translations from Weblate' - body: | - update translations from Weblate - labels: | - translation From 1b787ed35e9c51e335c42faee1f76695780ba4cb Mon Sep 17 00:00:00 2001 From: Ivan Gabaldon Date: Sat, 10 May 2025 13:59:31 +0200 Subject: [PATCH 19/82] [mod] refactor integration.yml (#4763) Style changes, cleanup and improved integration with CI by leveraging the use of shared cache between all workflows. --- .github/workflows/integration.yml | 102 ++++++++++++++++++++++-------- 1 file changed, 75 insertions(+), 27 deletions(-) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index eb4f458d7..abdaf0c18 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -1,58 +1,106 @@ +--- name: Integration -on: # yamllint disable-line rule:truthy +# yamllint disable-line rule:truthy +on: push: - branches: ["master"] + branches: + - master pull_request: - branches: ["master"] + branches: + - master + +concurrency: + group: ${{ github.workflow }}-${{ github.ref_name }} + cancel-in-progress: false permissions: contents: read +env: + PYTHON_VERSION: "3.13" + jobs: - python: + test: name: Python ${{ matrix.python-version }} runs-on: ubuntu-24.04 strategy: matrix: - os: [ubuntu-24.04] - python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] + python-version: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Install Ubuntu packages - run: | - sudo ./utils/searxng.sh install packages - - name: Set up Python + - name: Setup Python uses: actions/setup-python@v5 with: - python-version: ${{ matrix.python-version }} - architecture: 'x64' + python-version: "${{ matrix.python-version }}" + + - name: Checkout + uses: actions/checkout@v4 + with: + persist-credentials: "false" + + - name: Setup cache Python + uses: actions/cache@v4 + with: + key: "python-${{ matrix.python-version }}-${{ runner.arch }}-${{ hashFiles('./requirements*.txt') }}" + restore-keys: "python-${{ matrix.python-version }}-${{ runner.arch }}-" + path: "./local/" + + - name: Setup venv + run: make V=1 install + - name: Run tests run: make V=1 ci.test - themes: - name: Themes - runs-on: ubuntu-24.04 + theme: + name: Theme + runs-on: ubuntu-24.04-arm steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Install Ubuntu packages - run: sudo ./utils/searxng.sh install buildhost - - name: Set up Python + - name: Setup Python uses: actions/setup-python@v5 with: - python-version: '3.12' - architecture: 'x64' - - name: Build themes + python-version: "${{ env.PYTHON_VERSION }}" + + - name: Checkout + uses: actions/checkout@v4 + with: + persist-credentials: "false" + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version-file: "./.nvmrc" + + - name: Setup cache Node.js + uses: actions/cache@v4 + with: + key: "nodejs-${{ runner.arch }}-${{ hashFiles('./.nvmrc', './package.json') }}" + path: "./client/simple/node_modules/" + + - name: Setup cache Python + uses: actions/cache@v4 + with: + key: "python-${{ env.PYTHON_VERSION }}-${{ runner.arch }}-${{ hashFiles('./requirements*.txt') }}" + restore-keys: "python-${{ env.PYTHON_VERSION }}-${{ runner.arch }}-" + path: "./local/" + + - name: Setup venv + run: make V=1 install + + - name: Build run: make themes.all dockers: name: Docker if: github.ref == 'refs/heads/master' needs: - - python - - themes + - test + - theme env: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} runs-on: ubuntu-24.04 From d16854e67a5bf2f640aabf119c9b50f5a1a3f24f Mon Sep 17 00:00:00 2001 From: Ivan Gabaldon Date: Sun, 11 May 2025 18:12:51 +0200 Subject: [PATCH 20/82] [mod] rework container deployment (#4764) container.yml will run after integration.yml COMPLETES successfully and in master branch. Style changes, cleanup and improved integration with CI by leveraging the use of shared cache between all workflows. * Podman is now supported to build the container images (Docker also received a refactor, merging both build and buildx) * Container images are being built by Buildah instead of Docker BuildKit. * Container images are tested before release. * Splitting "modern" (amd64 & arm64) and "legacy" (armv7) arches on different Dockerfiles allowing future optimizations. --- .github/workflows/container.yml | 183 ++++++++++ .github/workflows/integration.yml | 46 --- Makefile | 10 +- container/Dockerfile | 100 ++++++ .../docker-entrypoint.sh | 4 +- Dockerfile => container/legacy/Dockerfile | 13 +- {dockerfiles => container}/uwsgi.ini | 0 docs/admin/installation-docker.rst | 11 +- manage | 91 +---- searx/version.py | 6 + utils/lib_sxng_container.sh | 319 ++++++++++++++++++ 11 files changed, 628 insertions(+), 155 deletions(-) create mode 100644 .github/workflows/container.yml create mode 100644 container/Dockerfile rename {dockerfiles => container}/docker-entrypoint.sh (97%) rename Dockerfile => container/legacy/Dockerfile (90%) rename {dockerfiles => container}/uwsgi.ini (100%) create mode 100644 utils/lib_sxng_container.sh diff --git a/.github/workflows/container.yml b/.github/workflows/container.yml new file mode 100644 index 000000000..d232a0737 --- /dev/null +++ b/.github/workflows/container.yml @@ -0,0 +1,183 @@ +--- +name: Container + +# yamllint disable-line rule:truthy +on: + workflow_dispatch: + workflow_run: + workflows: + - Integration + types: + - completed + branches: + - master + +concurrency: + group: ${{ github.workflow }}-${{ github.ref_name }} + cancel-in-progress: false + +permissions: + contents: read + # Organization GHCR + packages: read + +env: + PYTHON_VERSION: "3.13" + +jobs: + build: + if: github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' + name: Build (${{ matrix.arch }}) + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - arch: amd64 + os: ubuntu-24.04 + emulation: false + - arch: arm64 + os: ubuntu-24.04-arm + emulation: false + - arch: armv7 + os: ubuntu-24.04-arm + emulation: true + + permissions: + # Organization GHCR + packages: write + + outputs: + version_string: ${{ steps.build.outputs.version_string }} + version_tag: ${{ steps.build.outputs.version_tag }} + docker_tag: ${{ steps.build.outputs.docker_tag }} + git_url: ${{ steps.build.outputs.git_url }} + git_branch: ${{ steps.build.outputs.git_branch }} + + steps: + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: "${{ env.PYTHON_VERSION }}" + + - name: Checkout + uses: actions/checkout@v4 + with: + persist-credentials: "false" + + - name: Setup cache Python + uses: actions/cache@v4 + with: + key: "python-${{ env.PYTHON_VERSION }}-${{ runner.arch }}-${{ hashFiles('./requirements*.txt') }}" + restore-keys: "python-${{ env.PYTHON_VERSION }}-${{ runner.arch }}-" + path: "./local/" + + - name: Setup cache container mounts + uses: actions/cache@v4 + with: + # yamllint disable-line rule:line-length + key: "container-mounts-${{ matrix.arch }}-${{ hashFiles('./container/Dockerfile ./container/legacy/Dockerfile') }}" + restore-keys: "container-mounts-${{ matrix.arch }}-" + path: | + /var/tmp/buildah-cache/ + /var/tmp/buildah-cache-*/ + + - if: ${{ matrix.emulation }} + name: Setup QEMU + uses: docker/setup-qemu-action@v3 + + - name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: "ghcr.io" + username: "${{ github.repository_owner }}" + password: "${{ secrets.GITHUB_TOKEN }}" + + - name: Build + id: build + env: + OVERRIDE_ARCH: "${{ matrix.arch }}" + run: make podman.build + + test: + name: Test (${{ matrix.arch }}) + runs-on: ${{ matrix.os }} + needs: build + strategy: + fail-fast: false + matrix: + include: + - arch: amd64 + os: ubuntu-24.04 + emulation: false + - arch: arm64 + os: ubuntu-24.04-arm + emulation: false + - arch: armv7 + os: ubuntu-24.04-arm + emulation: true + + permissions: + # Organization GHCR + packages: write + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + persist-credentials: "false" + + - if: ${{ matrix.emulation }} + name: Setup QEMU + uses: docker/setup-qemu-action@v3 + + - name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: "ghcr.io" + username: "${{ github.repository_owner }}" + password: "${{ secrets.GITHUB_TOKEN }}" + + - name: Test + env: + OVERRIDE_ARCH: "${{ matrix.arch }}" + GIT_URL: "${{ needs.build.outputs.git_url }}" + run: make container.test + + release: + if: github.repository_owner == 'searxng' && github.ref_name == 'master' + name: Release + runs-on: ubuntu-24.04-arm + needs: + - build + - test + + steps: + - if: env.DOCKERHUB_USERNAME != '' + name: Checkout + uses: actions/checkout@v4 + with: + persist-credentials: "false" + + - if: env.DOCKERHUB_USERNAME != '' + name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: "ghcr.io" + username: "${{ github.repository_owner }}" + password: "${{ secrets.GITHUB_TOKEN }}" + + - if: env.DOCKERHUB_USERNAME != '' + name: Login to Docker Hub + uses: docker/login-action@v3 + with: + registry: "docker.io" + username: "${{ env.DOCKERHUB_USERNAME }}" + password: "${{ secrets.DOCKERHUB_TOKEN }}" + + - if: env.DOCKERHUB_USERNAME != '' + name: Release + env: + GIT_URL: "${{ needs.build.outputs.git_url }}" + DOCKER_TAG: "${{ needs.build.outputs.docker_tag }}" + run: make container.push diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index abdaf0c18..b40ae26ab 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -94,49 +94,3 @@ jobs: - name: Build run: make themes.all - - dockers: - name: Docker - if: github.ref == 'refs/heads/master' - needs: - - test - - theme - env: - DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} - runs-on: ubuntu-24.04 - steps: - - name: Checkout - if: env.DOCKERHUB_USERNAME != null - uses: actions/checkout@v4 - with: - # make sure "make docker.push" can get the git history - fetch-depth: '0' - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: '3.12' - architecture: 'x64' - - name: Cache Python dependencies - id: cache-python - uses: actions/cache@v4 - with: - path: | - ./local - ./.nvm - ./node_modules - key: python-ubuntu-20.04-3.12-${{ hashFiles('requirements*.txt', 'setup.py','.nvmrc', 'package.json') }} - - name: Set up QEMU - if: env.DOCKERHUB_USERNAME != null - uses: docker/setup-qemu-action@v1 - - name: Set up Docker Buildx - if: env.DOCKERHUB_USERNAME != null - uses: docker/setup-buildx-action@v1 - - name: Login to DockerHub - if: env.DOCKERHUB_USERNAME != null - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build and push - if: env.DOCKERHUB_USERNAME != null - run: make -e GIT_URL=$(git remote get-url origin) docker.buildx diff --git a/Makefile b/Makefile index c1c067149..15e43be08 100644 --- a/Makefile +++ b/Makefile @@ -54,7 +54,7 @@ ci.test: test.yamllint test.black test.types.ci test.pylint test.unit test.robo test: test.yamllint test.black test.types.dev test.pylint test.unit test.robot test.rst test.shell test.shell: $(Q)shellcheck -x -s dash \ - dockerfiles/docker-entrypoint.sh + container/docker-entrypoint.sh $(Q)shellcheck -x -s bash \ utils/brand.sh \ $(MTOOLS) \ @@ -77,7 +77,9 @@ test.shell: MANAGE += weblate.translations.commit weblate.push.translations MANAGE += data.all data.traits data.useragents data.locales data.currencies MANAGE += docs.html docs.live docs.gh-pages docs.prebuild docs.clean -MANAGE += docker.build docker.push docker.buildx +MANAGE += podman.build +MANAGE += docker.build docker.buildx +MANAGE += container.build container.test container.push MANAGE += gecko.driver MANAGE += node.env node.env.dev node.clean MANAGE += py.build py.clean @@ -95,8 +97,8 @@ $(MANAGE): # short hands of selected targets -PHONY += docs docker themes +PHONY += docs container themes docs: docs.html -docker: docker.build +container: container.build themes: themes.all diff --git a/container/Dockerfile b/container/Dockerfile new file mode 100644 index 000000000..b0530dfec --- /dev/null +++ b/container/Dockerfile @@ -0,0 +1,100 @@ +FROM docker.io/library/python:3.13-slim AS builder + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + build-essential \ + brotli \ + # uwsgi + libpcre3-dev \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /usr/local/searxng/ + +COPY ./requirements.txt ./requirements.txt + +RUN --mount=type=cache,id=pip,target=/root/.cache/pip python -m venv ./venv \ + && . ./venv/bin/activate \ + && pip install -r requirements.txt \ + && pip install "uwsgi~=2.0" + +COPY ./searx/ ./searx/ + +ARG TIMESTAMP_SETTINGS=0 +ARG TIMESTAMP_UWSGI=0 + +RUN python -m compileall -q searx \ + && touch -c --date=@$TIMESTAMP_SETTINGS ./searx/settings.yml \ + && touch -c --date=@$TIMESTAMP_UWSGI ./container/uwsgi.ini \ + && find /usr/local/searxng/searx/static \ + \( -name '*.html' -o -name '*.css' -o -name '*.js' -o -name '*.svg' -o -name '*.ttf' -o -name '*.eot' \) \ + -type f -exec gzip -9 -k {} + -exec brotli --best {} + + +ARG SEARXNG_UID=977 +ARG SEARXNG_GID=977 + +RUN grep -m1 root /etc/group > /tmp/.searxng.group \ + && grep -m1 root /etc/passwd > /tmp/.searxng.passwd \ + && echo "searxng:x:$SEARXNG_GID:" >> /tmp/.searxng.group \ + && echo "searxng:x:$SEARXNG_UID:$SEARXNG_GID:searxng:/usr/local/searxng:/bin/bash" >> /tmp/.searxng.passwd + +FROM docker.io/library/python:3.13-slim + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + # healthcheck + wget \ + # uwsgi + libpcre3 \ + libxml2 \ + mailcap \ + && rm -rf /var/lib/apt/lists/* + +COPY --chown=root:root --from=builder /tmp/.searxng.passwd /etc/passwd +COPY --chown=root:root --from=builder /tmp/.searxng.group /etc/group + +ARG LABEL_DATE="0001-01-01T00:00:00Z" +ARG GIT_URL="unspecified" +ARG SEARXNG_GIT_VERSION="unspecified" +ARG LABEL_VCS_REF="unspecified" +ARG LABEL_VCS_URL="unspecified" + +WORKDIR /usr/local/searxng/ + +COPY --chown=searxng:searxng --from=builder /usr/local/searxng/venv/ ./venv/ +COPY --chown=searxng:searxng --from=builder /usr/local/searxng/searx/ ./searx/ +COPY --chown=searxng:searxng ./container/ ./container/ + +LABEL org.opencontainers.image.authors="searxng <$GIT_URL>" \ + org.opencontainers.image.created=$LABEL_DATE \ + org.opencontainers.image.description="A privacy-respecting, hackable metasearch engine" \ + org.opencontainers.image.documentation="https://github.com/searxng/searxng-docker" \ + org.opencontainers.image.licenses="AGPL-3.0-or-later" \ + org.opencontainers.image.revision=$LABEL_VCS_REF \ + org.opencontainers.image.source=$LABEL_VCS_URL \ + org.opencontainers.image.title="searxng" \ + org.opencontainers.image.url=$LABEL_VCS_URL \ + org.opencontainers.image.version=$SEARXNG_GIT_VERSION + +ENV CONFIG_PATH=/etc/searxng \ + DATA_PATH=/var/cache/searxng + +ENV SEARXNG_VERSION=$SEARXNG_GIT_VERSION \ + INSTANCE_NAME=searxng \ + AUTOCOMPLETE="" \ + BASE_URL="" \ + BIND_ADDRESS=[::]:8080 \ + MORTY_KEY="" \ + MORTY_URL="" \ + SEARXNG_SETTINGS_PATH=$CONFIG_PATH/settings.yml \ + UWSGI_SETTINGS_PATH=$CONFIG_PATH/uwsgi.ini \ + UWSGI_WORKERS=%k \ + UWSGI_THREADS=4 + +VOLUME $CONFIG_PATH +VOLUME $DATA_PATH + +EXPOSE 8080 + +HEALTHCHECK CMD wget --quiet --tries=1 --spider http://localhost:8080/healthz || exit 1 + +ENTRYPOINT ["/usr/local/searxng/container/docker-entrypoint.sh"] diff --git a/dockerfiles/docker-entrypoint.sh b/container/docker-entrypoint.sh similarity index 97% rename from dockerfiles/docker-entrypoint.sh rename to container/docker-entrypoint.sh index 3668fb589..72d020dcf 100755 --- a/dockerfiles/docker-entrypoint.sh +++ b/container/docker-entrypoint.sh @@ -140,14 +140,14 @@ if [ "$SEARX_CONF" -eq "1" ]; then cat << EOF > /etc/searx/deprecated_volume_read_me.txt This Docker image uses the volume /etc/searxng Update your configuration: -* remove uwsgi.ini (or very carefully update your existing uwsgi.ini using https://github.com/searxng/searxng/blob/master/dockerfiles/uwsgi.ini ) +* remove uwsgi.ini (or very carefully update your existing uwsgi.ini using https://github.com/searxng/searxng/blob/master/container/uwsgi.ini ) * mount /etc/searxng instead of /etc/searx EOF fi # end of searx compatibility # make sure there are uwsgi settings -update_conf "${FORCE_CONF_UPDATE}" "${UWSGI_SETTINGS_PATH}" "/usr/local/searxng/dockerfiles/uwsgi.ini" "patch_uwsgi_settings" +update_conf "${FORCE_CONF_UPDATE}" "${UWSGI_SETTINGS_PATH}" "/usr/local/searxng/container/uwsgi.ini" "patch_uwsgi_settings" # make sure there are searxng settings update_conf "${FORCE_CONF_UPDATE}" "${SEARXNG_SETTINGS_PATH}" "/usr/local/searxng/searx/settings.yml" "patch_searxng_settings" diff --git a/Dockerfile b/container/legacy/Dockerfile similarity index 90% rename from Dockerfile rename to container/legacy/Dockerfile index 9aeb28214..5436ea5da 100644 --- a/Dockerfile +++ b/container/legacy/Dockerfile @@ -1,3 +1,5 @@ +# For armv7 architecture + FROM docker.io/library/python:3.13-slim AS builder RUN apt-get update \ @@ -16,8 +18,7 @@ WORKDIR /usr/local/searxng/ COPY ./requirements.txt ./requirements.txt -# Readd on #4707 "--mount=type=cache,id=pip,target=/root/.cache/pip" -RUN python -m venv ./venv \ +RUN --mount=type=cache,id=pip,target=/root/.cache/pip python -m venv ./venv \ && . ./venv/bin/activate \ && pip install -r requirements.txt \ && pip install "uwsgi~=2.0" @@ -29,7 +30,7 @@ ARG TIMESTAMP_UWSGI=0 RUN python -m compileall -q searx \ && touch -c --date=@$TIMESTAMP_SETTINGS ./searx/settings.yml \ - && touch -c --date=@$TIMESTAMP_UWSGI ./dockerfiles/uwsgi.ini \ + && touch -c --date=@$TIMESTAMP_UWSGI ./container/uwsgi.ini \ && find /usr/local/searxng/searx/static \ \( -name '*.html' -o -name '*.css' -o -name '*.js' -o -name '*.svg' -o -name '*.ttf' -o -name '*.eot' \) \ -type f -exec gzip -9 -k {} + -exec brotli --best {} + @@ -69,7 +70,7 @@ WORKDIR /usr/local/searxng/ COPY --chown=searxng:searxng --from=builder /usr/local/searxng/venv/ ./venv/ COPY --chown=searxng:searxng --from=builder /usr/local/searxng/searx/ ./searx/ -COPY --chown=searxng:searxng ./dockerfiles/ ./dockerfiles/ +COPY --chown=searxng:searxng ./container/ ./container/ LABEL org.opencontainers.image.authors="searxng <$GIT_URL>" \ org.opencontainers.image.created=$LABEL_DATE \ @@ -90,8 +91,6 @@ ENV SEARXNG_VERSION=$SEARXNG_GIT_VERSION \ AUTOCOMPLETE="" \ BASE_URL="" \ BIND_ADDRESS=[::]:8080 \ - MORTY_KEY="" \ - MORTY_URL="" \ SEARXNG_SETTINGS_PATH=$CONFIG_PATH/settings.yml \ UWSGI_SETTINGS_PATH=$CONFIG_PATH/uwsgi.ini \ UWSGI_WORKERS=%k \ @@ -104,4 +103,4 @@ EXPOSE 8080 HEALTHCHECK CMD wget --quiet --tries=1 --spider http://localhost:8080/healthz || exit 1 -ENTRYPOINT ["/usr/local/searxng/dockerfiles/docker-entrypoint.sh"] +ENTRYPOINT ["/usr/local/searxng/container/docker-entrypoint.sh"] diff --git a/dockerfiles/uwsgi.ini b/container/uwsgi.ini similarity index 100% rename from dockerfiles/uwsgi.ini rename to container/uwsgi.ini diff --git a/docs/admin/installation-docker.rst b/docs/admin/installation-docker.rst index 09471891b..06b3fe465 100644 --- a/docs/admin/installation-docker.rst +++ b/docs/admin/installation-docker.rst @@ -145,13 +145,6 @@ shell inside container - `How to make bash scripts work in dash `_ - `Checking for Bashisms `_ -Like in many other distributions, Alpine's `/bin/sh -`__ is :man:`dash`. Dash is meant to be -`POSIX-compliant `__. -Compared to debian, in the Alpine image :man:`bash` is not installed. The -:origin:`dockerfiles/docker-entrypoint.sh` script is checked *against dash* -(``make tests.shell``). - To open a shell inside the container: .. code:: sh @@ -188,10 +181,10 @@ Command line `__. In the :origin:`Dockerfile` the ENTRYPOINT_ is defined as -:origin:`dockerfiles/docker-entrypoint.sh` +:origin:`container/docker-entrypoint.sh` .. code:: sh docker run --rm -it searxng/searxng -h -.. program-output:: ../dockerfiles/docker-entrypoint.sh -h +.. program-output:: ../container/docker-entrypoint.sh -h diff --git a/manage b/manage index 61bc68b74..ee2a29281 100755 --- a/manage +++ b/manage @@ -11,6 +11,9 @@ source "$(dirname "${BASH_SOURCE[0]}")/utils/lib.sh" # shellcheck source=utils/lib.sh source "$(dirname "${BASH_SOURCE[0]}")/utils/lib_nvm.sh" +# shellcheck source=utils/lib_sxng_container.sh +source "$(dirname "${BASH_SOURCE[0]}")/utils/lib_sxng_container.sh" + # shellcheck source=utils/lib_sxng_data.sh source "$(dirname "${BASH_SOURCE[0]}")/utils/lib_sxng_data.sh" @@ -77,9 +80,6 @@ docs.: gh-pages : deploy on gh-pages branch prebuild : build reST include files (./${DOCS_BUILD}/includes) clean : clean documentation build -docker.: - build : build docker image - push : build and push docker image gecko.driver: download & install geckodriver if not already installed (required for robot_tests) @@ -101,6 +101,7 @@ EOF go.help node.help weblate.help + container.help data.help test.help themes.help @@ -136,90 +137,6 @@ webapp.run() { SEARXNG_DEBUG=1 pyenv.cmd python -m searx.webapp } -docker.push() { - docker.build push -} - -docker.buildx() { - docker.build buildx -} - -# shellcheck disable=SC2119 -docker.build() { - pyenv.install - - local SEARXNG_GIT_VERSION - local VERSION_GITCOMMIT - local GITHUB_USER - local SEARXNG_IMAGE_NAME - local BUILD - - build_msg DOCKER build - # run installation in a subprocess and activate pyenv - - # See https://www.shellcheck.net/wiki/SC1001 and others .. - # shellcheck disable=SC2031,SC2230,SC2002,SC2236,SC2143,SC1001 - ( set -e - pyenv.activate - - # Check if it is a git repository - if [ ! -d .git ]; then - die 1 "This is not Git repository" - fi - if [ ! -x "$(which git)" ]; then - die 1 "git is not installed" - fi - - if ! git remote get-url origin 2> /dev/null; then - die 1 "there is no remote origin" - fi - - # This is a git repository - git update-index -q --refresh - python -m searx.version freeze - eval "$(python -m searx.version)" - - # Get the last git commit id - VERSION_GITCOMMIT=$(echo "$VERSION_TAG" | cut -d+ -f2) - build_msg DOCKER "Last commit : $VERSION_GITCOMMIT" - - # define the docker image name - GITHUB_USER=$(echo "${GIT_URL}" | sed 's/.*github\.com\/\([^\/]*\).*/\1/') - SEARXNG_IMAGE_NAME="${SEARXNG_IMAGE_NAME:-${GITHUB_USER:-searxng}/searxng}" - - BUILD="build" - if [ "$1" = "buildx" ]; then - # buildx includes the push option - CACHE_TAG="${SEARXNG_IMAGE_NAME}:latest-build-cache" - BUILD="buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 --push --cache-from=type=registry,ref=$CACHE_TAG --cache-to=type=registry,ref=$CACHE_TAG,mode=max" - shift - fi - build_msg DOCKER "Build command: ${BUILD}" - - # build Docker image - build_msg DOCKER "Building image ${SEARXNG_IMAGE_NAME}:${SEARXNG_GIT_VERSION}" - # shellcheck disable=SC2086 - docker $BUILD \ - --build-arg BASE_IMAGE="${DEPENDENCIES_IMAGE_NAME}" \ - --build-arg GIT_URL="${GIT_URL}" \ - --build-arg SEARXNG_DOCKER_TAG="${DOCKER_TAG}" \ - --build-arg SEARXNG_GIT_VERSION="${VERSION_STRING}" \ - --build-arg VERSION_GITCOMMIT="${VERSION_GITCOMMIT}" \ - --build-arg LABEL_DATE="$(date -u +"%Y-%m-%dT%H:%M:%SZ")" \ - --build-arg LABEL_VCS_REF="$(git rev-parse HEAD)" \ - --build-arg LABEL_VCS_URL="${GIT_URL}" \ - --build-arg TIMESTAMP_SETTINGS="$(git log -1 --format="%cd" --date=unix -- searx/settings.yml)" \ - --build-arg TIMESTAMP_UWSGI="$(git log -1 --format="%cd" --date=unix -- dockerfiles/uwsgi.ini)" \ - -t "${SEARXNG_IMAGE_NAME}:latest" -t "${SEARXNG_IMAGE_NAME}:${DOCKER_TAG}" . - - if [ "$1" = "push" ]; then - docker push "${SEARXNG_IMAGE_NAME}:latest" - docker push "${SEARXNG_IMAGE_NAME}:${DOCKER_TAG}" - fi - ) - dump_return $? -} - # shellcheck disable=SC2119 gecko.driver() { pyenv.install diff --git a/searx/version.py b/searx/version.py index d2013808b..565cc7e7a 100644 --- a/searx/version.py +++ b/searx/version.py @@ -41,6 +41,12 @@ def subprocess_run(args, **kwargs): def get_git_url_and_branch(): + # handle GHA directly + if "GITHUB_REPOSITORY" in os.environ and "GITHUB_REF_NAME" in os.environ: + git_url = f"https://github.com/{os.environ['GITHUB_REPOSITORY']}" + git_branch = os.environ["GITHUB_REF_NAME"] + return git_url, git_branch + try: ref = subprocess_run("git rev-parse --abbrev-ref @{upstream}") except subprocess.CalledProcessError: diff --git a/utils/lib_sxng_container.sh b/utils/lib_sxng_container.sh new file mode 100644 index 000000000..b3f84594f --- /dev/null +++ b/utils/lib_sxng_container.sh @@ -0,0 +1,319 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: AGPL-3.0-or-later + +container.help() { + cat </dev/null; then + die 1 "Git is not installed" + fi + + # Check if podman or docker is installed + if [ "$1" = "docker" ]; then + if command -v docker &>/dev/null; then + container_engine="docker" + else + die 1 "Docker is not installed" + fi + elif [ "$1" = "podman" ]; then + if command -v podman &>/dev/null; then + container_engine="podman" + else + die 1 "Podman is not installed" + fi + else + # If no explicit engine is passed, prioritize podman over docker + if command -v podman &>/dev/null; then + container_engine="podman" + elif command -v docker &>/dev/null; then + container_engine="docker" + else + die 1 "Podman/Docker is not installed" + fi + fi + info_msg "Selected engine: $container_engine" + + # Setup arch specific + case $parch in + "X64" | "x86_64" | "amd64") + dockerfile="Dockerfile" + arch="amd64" + variant="" + platform="linux/$arch" + ;; + "ARM64" | "aarch64" | "arm64") + dockerfile="Dockerfile" + arch="arm64" + variant="" + platform="linux/$arch" + ;; + "ARMV7" | "armhf" | "armv7l" | "armv7") + dockerfile="legacy/Dockerfile" + arch="arm" + variant="v7" + platform="linux/$arch/$variant" + ;; + *) + err_msg "Unsupported architecture; $parch" + exit 1 + ;; + esac + info_msg "Selected platform: $platform" + + pyenv.install + + ( + set -e + pyenv.activate + + # Check if it is a git repository + if [ ! -d .git ]; then + die 1 "This is not Git repository" + fi + + if ! git remote get-url origin &>/dev/null; then + die 1 "There is no remote origin" + fi + + # This is a git repository + git update-index -q --refresh + python -m searx.version freeze + eval "$(python -m searx.version)" + + info_msg "Set \$VERSION_STRING: $VERSION_STRING" + info_msg "Set \$VERSION_TAG: $VERSION_TAG" + info_msg "Set \$DOCKER_TAG: $DOCKER_TAG" + info_msg "Set \$GIT_URL: $GIT_URL" + info_msg "Set \$GIT_BRANCH: $GIT_BRANCH" + + if [ "$container_engine" = "podman" ]; then + params_build_builder="build --format=docker --platform=$platform --target=builder --layers --identity-label=false" + params_build="build --format=docker --platform=$platform --layers --squash-all --omit-history --identity-label=false" + else + params_build_builder="build --platform=$platform --target=builder" + params_build="build --platform=$platform --squash" + fi + + if [ "$GITHUB_ACTIONS" = "true" ]; then + params_build_builder+=" --cache-from=ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache --cache-to=ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache" + params_build+=" --cache-from=ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache --cache-to=ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache" + + # Tags + params_build+=" --tag=ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache:$CONTAINER_IMAGE_NAME-$arch$variant" + else + # Tags + params_build+=" --tag=localhost/$CONTAINER_IMAGE_ORGANIZATION/$CONTAINER_IMAGE_NAME:latest" + params_build+=" --tag=localhost/$CONTAINER_IMAGE_ORGANIZATION/$CONTAINER_IMAGE_NAME:$DOCKER_TAG" + fi + + # shellcheck disable=SC2086 + "$container_engine" $params_build_builder \ + --build-arg="TIMESTAMP_SETTINGS=$(git log -1 --format="%cd" --date=unix -- ./searx/settings.yml)" \ + --build-arg="TIMESTAMP_UWSGI=$(git log -1 --format="%cd" --date=unix -- ./container/uwsgi.ini)" \ + --tag="localhost/$CONTAINER_IMAGE_ORGANIZATION/$CONTAINER_IMAGE_NAME:builder" \ + --file="./container/$dockerfile" \ + . + build_msg CONTAINER "Image \"builder\" built" + + # shellcheck disable=SC2086 + "$container_engine" $params_build \ + --build-arg="GIT_URL=$GIT_URL" \ + --build-arg="SEARXNG_GIT_VERSION=$VERSION_STRING" \ + --build-arg="LABEL_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ + --build-arg="LABEL_VCS_REF=$(git rev-parse HEAD)" \ + --build-arg="LABEL_VCS_URL=$GIT_URL" \ + --file="./container/$dockerfile" \ + . + build_msg CONTAINER "Image built" + + if [ "$GITHUB_ACTIONS" = "true" ]; then + "$container_engine" push "ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache:$CONTAINER_IMAGE_NAME-$arch$variant" + + # Output to GHA + { + echo "version_string=$VERSION_STRING" + echo "version_tag=$VERSION_TAG" + echo "docker_tag=$DOCKER_TAG" + echo "git_url=$GIT_URL" + echo "git_branch=$GIT_BRANCH" + } >>"$GITHUB_OUTPUT" + fi + ) + dump_return $? +} + +container.test() { + local parch=${OVERRIDE_ARCH:-$(uname -m)} + local arch + local variant + local platform + + if [ "$GITHUB_ACTIONS" != "true" ]; then + die 1 "This command is intended to be run in GitHub Actions" + fi + + # Check if podman is installed + if ! command -v podman &>/dev/null; then + die 1 "podman is not installed" + fi + + # Setup arch specific + case $parch in + "X64" | "x86_64" | "amd64") + arch="amd64" + variant="" + platform="linux/$arch" + ;; + "ARM64" | "aarch64" | "arm64") + arch="arm64" + variant="" + platform="linux/$arch" + ;; + "ARMV7" | "armhf" | "armv7l" | "armv7") + arch="arm" + variant="v7" + platform="linux/$arch/$variant" + ;; + *) + err_msg "Unsupported architecture; $parch" + exit 1 + ;; + esac + build_msg CONTAINER "Selected platform: $platform" + + ( + set -e + + podman pull "ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache:$CONTAINER_IMAGE_NAME-$arch$variant" + + name="$CONTAINER_IMAGE_NAME-$(date +%N)" + + podman create --name="$name" --rm --timeout=60 --network="host" \ + "ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache:$CONTAINER_IMAGE_NAME-$arch$variant" >/dev/null + + podman start "$name" >/dev/null + podman logs -f "$name" & + pid_logs=$! + + # Wait until container is ready + sleep 5 + + curl -vf --max-time 5 "http://localhost:8080/healthz" + + kill $pid_logs &>/dev/null || true + podman stop "$name" >/dev/null + ) + dump_return $? +} + +container.push() { + # Architectures on manifest + local release_archs=("amd64" "arm64" "armv7") + + local archs=() + local variants=() + local platforms=() + + if [ "$GITHUB_ACTIONS" != "true" ]; then + die 1 "This command is intended to be run in GitHub Actions" + fi + + # Check if podman is installed + if ! command -v podman &>/dev/null; then + die 1 "podman is not installed" + fi + + for arch in "${release_archs[@]}"; do + case $arch in + "X64" | "x86_64" | "amd64") + archs+=("amd64") + variants+=("") + platforms+=("linux/${archs[-1]}") + ;; + "ARM64" | "aarch64" | "arm64") + archs+=("arm64") + variants+=("") + platforms+=("linux/${archs[-1]}") + ;; + "ARMV7" | "armv7" | "armhf" | "arm") + archs+=("arm") + variants+=("v7") + platforms+=("linux/${archs[-1]}/${variants[-1]}") + ;; + *) + err_msg "Unsupported architecture; $arch" + exit 1 + ;; + esac + done + + ( + set -e + + # Pull archs + for i in "${!archs[@]}"; do + podman pull "ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache:$CONTAINER_IMAGE_NAME-${archs[$i]}${variants[$i]}" + done + + # Manifest tags + release_tags=("latest") + release_tags+=("$DOCKER_TAG") + + # Create manifests + for tag in "${release_tags[@]}"; do + if ! podman manifest exists "localhost/$CONTAINER_IMAGE_ORGANIZATION/$CONTAINER_IMAGE_NAME:$tag"; then + podman manifest create "localhost/$CONTAINER_IMAGE_ORGANIZATION/$CONTAINER_IMAGE_NAME:$tag" + fi + + # Add archs to manifest + for i in "${!archs[@]}"; do + podman manifest add \ + "localhost/$CONTAINER_IMAGE_ORGANIZATION/$CONTAINER_IMAGE_NAME:$tag" \ + "containers-storage:ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache:$CONTAINER_IMAGE_NAME-${archs[$i]}${variants[$i]}" + done + done + + podman image list + + # Push manifests + for tag in "${release_tags[@]}"; do + build_msg CONTAINER "Pushing manifest with tag: $tag" + + podman manifest push \ + "localhost/$CONTAINER_IMAGE_ORGANIZATION/$CONTAINER_IMAGE_NAME:$tag" \ + "docker://docker.io/$CONTAINER_IMAGE_ORGANIZATION/$CONTAINER_IMAGE_NAME:$tag" + done + ) + dump_return $? +} + +# Alias +podman.build() { + container.build podman +} + +# Alias +docker.build() { + container.build docker +} + +# Alias +docker.buildx() { + container.build docker +} From da3c640cef71032bced6f4e8baf1665801cdc4b9 Mon Sep 17 00:00:00 2001 From: Ivan Gabaldon Date: Sun, 11 May 2025 18:39:25 +0200 Subject: [PATCH 21/82] revert using null keyword env.DOCKERHUB_USERNAME shouldn't be an empty string as it's defined and set (I think, I can't see this). Even if wasn't defined, GitHub Org/Repo wide envs/secrets should return an empty string (?) --- .github/workflows/container.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/container.yml b/.github/workflows/container.yml index d232a0737..ee1093acb 100644 --- a/.github/workflows/container.yml +++ b/.github/workflows/container.yml @@ -153,13 +153,13 @@ jobs: - test steps: - - if: env.DOCKERHUB_USERNAME != '' + - if: env.DOCKERHUB_USERNAME != null name: Checkout uses: actions/checkout@v4 with: persist-credentials: "false" - - if: env.DOCKERHUB_USERNAME != '' + - if: env.DOCKERHUB_USERNAME != null name: Login to GHCR uses: docker/login-action@v3 with: @@ -167,7 +167,7 @@ jobs: username: "${{ github.repository_owner }}" password: "${{ secrets.GITHUB_TOKEN }}" - - if: env.DOCKERHUB_USERNAME != '' + - if: env.DOCKERHUB_USERNAME != null name: Login to Docker Hub uses: docker/login-action@v3 with: @@ -175,7 +175,7 @@ jobs: username: "${{ env.DOCKERHUB_USERNAME }}" password: "${{ secrets.DOCKERHUB_TOKEN }}" - - if: env.DOCKERHUB_USERNAME != '' + - if: env.DOCKERHUB_USERNAME != null name: Release env: GIT_URL: "${{ needs.build.outputs.git_url }}" From 750a7b4d6fba37f5d0d6bf42b99a865dc7e035e8 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Mon, 12 May 2025 08:27:16 +0200 Subject: [PATCH 22/82] [doc] add chapter on the purpose of (git) commits (#4729) Chapter on the purpose of (git) commits The commits and their messages are elementary for the traceability of changes and are unfortunately still too often given too little attention. It therefore seems necessary to dedicate a chapter to this topic in the context of development. Signed-off-by: Markus Heiser --- docs/dev/commits.rst | 108 ++++++++++++++++++++++++++++++++ docs/dev/contribution_guide.rst | 30 +++------ docs/dev/index.rst | 1 + 3 files changed, 116 insertions(+), 23 deletions(-) create mode 100644 docs/dev/commits.rst diff --git a/docs/dev/commits.rst b/docs/dev/commits.rst new file mode 100644 index 000000000..e9b10fa2e --- /dev/null +++ b/docs/dev/commits.rst @@ -0,0 +1,108 @@ +.. _create commit: + +=============================== +Git Commits & Change Management +=============================== + +.. sidebar:: Create good commits! + + - `Conventional Commits`_ + - `Structural split of changes`_ + - `Git Commit Good Practice`_ + +A commit and its commit message are among the most important information +available to a developer for bug fixing and further development. A commit is a +change and changes have a context (a change request). + +In a SCM system (git), the change history is derived from the commit history. A +commit message is therefore part of the documentation for change management and +thus elementary for the traceability of changes. + +**What a commit is not**: *A commit to an SCM system is not used to save files!* + +A commit should always have a context and the commit message describes what is +to be changed in that context, just as a function description should describe +what the intention and the goal of the function is, a commit message should +describe what the intention and the goal of that commit is. + +The commit messages form the history and are the first and therefore most +important information a developer has when he has to research when and why a +change had to be made and how it was made (what the goal was). + +Like any text, a commit message should be written for the reader and not from +the perspective of the author. + +When scrolling through the history, the first thing one see is the title of the +commit message. Therefore the title should describe the change as briefly and +precisely as possible ... followed by a blank line and then a somewhat detailed +description of the change. + +---- + +The follwing rules should be in mind, when creating a commit: + +- **Commit history should be read like a history book.** +- **Commit messages are for the reader not for the author of the commit.** +- **A commit is the atomic code-modification of a change in change management.** +- **Think about which descriptions from your PR might belong in the commit message.** +- **The maximum line length in a commit message is 80 characters.** + +---- + +Choose meaningful commit messages: + + .. code:: + + [type] optional scope: description + + [body] + + [optional trailers] + +``[type]``: + Commits MUST be prefixed with a type .. ``feat``, ``fix``, ``refactor``, + ``mod``, ``upd``, ``doc``, ``l10n``, ``build`` .. + +``[body]`` + `Information in commit messages`_ + +``[optional trailers]``: + - `Signed-off-by`_: certify that the committer has the rights to submit the + work under the project’s license. That the developer has this right is a + prerequisite for a merge. If the `Signed-off-by`_ is not set in the + commit, the contributor enters his `Developer's Certificate of Origin` at + the latest when creating a PR! + - Closes: Link to the bug report or the bug number (e.g. ``Closes: #10``) + - `Co-authored-by`_: email address of the co-author + - Reported-by: email address (if there is no bug report) + - Suggested-by: email address (if there is no bug report) + +---- + +To give examples at hand, here are a few commits. Follow the links to see the +full commit messages: + +:patch:`44d941c93` + ``[fix] mojeek web engine: don't add empty fmt argument for web searches`` + +:patch:`feb15e387` + ``[fix] brave.news engine: response is HTML and no longer JSON`` + +:patch:`bdfe1c2a1` + ``[mod] engines: migration of the individual cache solutions to EngineCache`` + + +.. _Conventional Commits: + https://www.conventionalcommits.org/ +.. _Structural split of changes: + https://wiki.openstack.org/wiki/GitCommitMessages#Structural_split_of_changes +.. _Git Commit Good Practice: + https://wiki.openstack.org/wiki/GitCommitMessages +.. _Information in commit messages: + https://wiki.openstack.org/wiki/GitCommitMessages#Information_in_commit_messages +.. _`Developer's Certificate of Origin`: + https://developercertificate.org/ +.. _Signed-off-by: + https://git-scm.com/docs/git-commit#Documentation/git-commit.txt-code--signoffcode +.. _Co-authored-by: + https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors diff --git a/docs/dev/contribution_guide.rst b/docs/dev/contribution_guide.rst index 61dd28c05..026cfbe73 100644 --- a/docs/dev/contribution_guide.rst +++ b/docs/dev/contribution_guide.rst @@ -30,15 +30,15 @@ SearXNG was born out of the need for a **privacy-respecting** search tool which can be extended easily to maximize both its search and its privacy protecting capabilities. -Some widely used search engine features may work differently, -may be turned off by default, or may not be implemented at all in SearXNG +Some widely used search engine features may work differently, +may be turned off by default, or may not be implemented at all in SearXNG **as a consequence of a privacy-by-design approach**. Following this approach, features reducing the privacy preserving aspects of SearXNG should be switched off by default or should not be implemented at all. There are plenty of search engines already providing such features. If a feature reduces -SearXNG's efficacy in protecting a user's privacy, the user must be informed about -the effect of choosing to enable it. Features that protect privacy but differ from the +SearXNG's efficacy in protecting a user's privacy, the user must be informed about +the effect of choosing to enable it. Features that protect privacy but differ from the expectations of the user should also be carefully explained to them. Also, if you think that something works weird with SearXNG, it might be because @@ -56,20 +56,12 @@ Code ==== .. _PEP8: https://www.python.org/dev/peps/pep-0008/ -.. _Conventional Commits: https://www.conventionalcommits.org/ -.. _Git Commit Good Practice: https://wiki.openstack.org/wiki/GitCommitMessages .. _Structural split of changes: https://wiki.openstack.org/wiki/GitCommitMessages#Structural_split_of_changes -.. _gitmoji: https://gitmoji.carloscuesta.me/ -.. _Semantic PR: https://github.com/zeke/semantic-pull-requests .. sidebar:: Create good commits! - - `Structural split of changes`_ - - `Conventional Commits`_ - - `Git Commit Good Practice`_ - - some like to use: gitmoji_ - - not yet active: `Semantic PR`_ + - :ref:`create commit` In order to submit a patch, please follow the steps below: @@ -88,15 +80,7 @@ In order to submit a patch, please follow the steps below: - Add yourself to the :origin:`AUTHORS.rst` file. -- Choose meaningful commit messages, read `Conventional Commits`_ - - .. code:: - - [optional scope]: - - [optional body] - - [optional footer(s)] +- Choose meaningful commit messages, see :ref:`create commit` - Create a pull request. @@ -161,7 +145,7 @@ changed (:ref:`make docs.clean`). Live builds are implemented by sphinx-autobuild_. Use environment ``$(SPHINXOPTS)`` to pass arguments to the sphinx-autobuild_ command. You can -pass any argument except for the ``--host`` option (which is always set to ``0.0.0.0``). +pass any argument except for the ``--host`` option (which is always set to ``0.0.0.0``). E.g., to find and use a free port, use: .. code:: sh diff --git a/docs/dev/index.rst b/docs/dev/index.rst index 01a16ba80..6d601d166 100644 --- a/docs/dev/index.rst +++ b/docs/dev/index.rst @@ -6,6 +6,7 @@ Developer documentation :maxdepth: 2 quickstart + commits rtm_asdf contribution_guide extended_types From 346d7fe0192ea180552adbd2877dc13b3dd4050e Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Mon, 12 May 2025 16:42:43 +0200 Subject: [PATCH 23/82] [mod] CI: dependabot group updates by minor & patch and major updates (#4773) By default, Dependabot opens a new pull request to update each dependency and we have a very large number of Dependabot pull requests to review and merge, which can quickly become difficult to manage. The intention of this patch to dependabot is to have: - one PR for all minor & patch level updates - one PR for every dependency with a major update [1] https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/optimizing-pr-creation-version-updates [2] https://docs.github.com/en/code-security/dependabot/working-with-dependabot/dependabot-options-reference#groups Signed-off-by: Markus Heiser --- .github/dependabot.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index a106397f3..46e341362 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -10,6 +10,12 @@ updates: target-branch: "master" commit-message: prefix: "[upd] pypi:" + groups: + minor: + applies-to: version-updates + update-types: + - "minor" + - "patch" - package-ecosystem: "npm" directory: "/client/simple" @@ -20,6 +26,12 @@ updates: target-branch: "master" commit-message: prefix: "[upd] web-client (simple):" + groups: + minor: + applies-to: version-updates + update-types: + - "minor" + - "patch" - package-ecosystem: "docker" directory: "/" From 64a5b6920f1fd386d5ec8bce575b2ea0c82b2572 Mon Sep 17 00:00:00 2001 From: Ivan Gabaldon Date: Mon, 12 May 2025 10:36:04 +0200 Subject: [PATCH 24/82] [mod] lib_sxng_container.sh use required_commands() helper Suggested-by: @return42 https://github.com/searxng/searxng/pull/4764#discussion_r2083564489 --- utils/lib_sxng_container.sh | 32 ++++++++------------------------ 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/utils/lib_sxng_container.sh b/utils/lib_sxng_container.sh index b3f84594f..1df9ef358 100644 --- a/utils/lib_sxng_container.sh +++ b/utils/lib_sxng_container.sh @@ -19,24 +19,14 @@ container.build() { local variant local platform - # Check if git is installed - if ! command -v git &>/dev/null; then - die 1 "Git is not installed" - fi + required_commands git # Check if podman or docker is installed - if [ "$1" = "docker" ]; then - if command -v docker &>/dev/null; then - container_engine="docker" - else - die 1 "Docker is not installed" - fi - elif [ "$1" = "podman" ]; then - if command -v podman &>/dev/null; then - container_engine="podman" - else - die 1 "Podman is not installed" + if [ "$1" = "podman" ] || [ "$1" = "docker" ]; then + if ! command -v "$1" &>/dev/null; then + die 42 "$1 is not installed" fi + container_engine="$1" else # If no explicit engine is passed, prioritize podman over docker if command -v podman &>/dev/null; then @@ -44,7 +34,7 @@ container.build() { elif command -v docker &>/dev/null; then container_engine="docker" else - die 1 "Podman/Docker is not installed" + die 42 "no compatible container engine is installed (podman or docker)" fi fi info_msg "Selected engine: $container_engine" @@ -168,10 +158,7 @@ container.test() { die 1 "This command is intended to be run in GitHub Actions" fi - # Check if podman is installed - if ! command -v podman &>/dev/null; then - die 1 "podman is not installed" - fi + required_commands podman # Setup arch specific case $parch in @@ -234,10 +221,7 @@ container.push() { die 1 "This command is intended to be run in GitHub Actions" fi - # Check if podman is installed - if ! command -v podman &>/dev/null; then - die 1 "podman is not installed" - fi + required_commands podman for arch in "${release_archs[@]}"; do case $arch in From 945b30a1c459e6b437a3f379e638c2002a81fcab Mon Sep 17 00:00:00 2001 From: Ivan Gabaldon Date: Mon, 12 May 2025 10:41:49 +0200 Subject: [PATCH 25/82] [mod] lib_sxng_container.sh: replace echo commands with heredoc Suggested-by: @return42 https://github.com/searxng/searxng/pull/4764#discussion_r2083571202 --- utils/lib_sxng_container.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/utils/lib_sxng_container.sh b/utils/lib_sxng_container.sh index 1df9ef358..f87b64e2b 100644 --- a/utils/lib_sxng_container.sh +++ b/utils/lib_sxng_container.sh @@ -136,13 +136,13 @@ container.build() { "$container_engine" push "ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache:$CONTAINER_IMAGE_NAME-$arch$variant" # Output to GHA - { - echo "version_string=$VERSION_STRING" - echo "version_tag=$VERSION_TAG" - echo "docker_tag=$DOCKER_TAG" - echo "git_url=$GIT_URL" - echo "git_branch=$GIT_BRANCH" - } >>"$GITHUB_OUTPUT" + cat <>"$GITHUB_OUTPUT" +version_string=$VERSION_STRING +version_tag=$VERSION_TAG +docker_tag=$DOCKER_TAG +git_url=$GIT_URL +git_branch=$GIT_BRANCH +EOF fi ) dump_return $? From 5d99373bc65c7087ee743a1fe44897bad6065338 Mon Sep 17 00:00:00 2001 From: Ivan Gabaldon Date: Mon, 12 May 2025 23:43:47 +0200 Subject: [PATCH 26/82] [fix] DOCKERHUB_USERNAME env reference (#4778) When making the container rework, I unknowingly deleted the section where an env with the same name as the secret was defined on the job scope, making it look like it was originally defined as an organization env. Since we can't validate the secrets in a condition directly, it's better to let docker/login-action take care of failing the entire job if the credentials are invalid. Reported in: https://github.com/searxng/searxng/issues/4777 --- .github/workflows/container.yml | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/.github/workflows/container.yml b/.github/workflows/container.yml index ee1093acb..ef92a0662 100644 --- a/.github/workflows/container.yml +++ b/.github/workflows/container.yml @@ -153,30 +153,26 @@ jobs: - test steps: - - if: env.DOCKERHUB_USERNAME != null - name: Checkout + - name: Checkout uses: actions/checkout@v4 with: persist-credentials: "false" - - if: env.DOCKERHUB_USERNAME != null - name: Login to GHCR + - name: Login to GHCR uses: docker/login-action@v3 with: registry: "ghcr.io" username: "${{ github.repository_owner }}" password: "${{ secrets.GITHUB_TOKEN }}" - - if: env.DOCKERHUB_USERNAME != null - name: Login to Docker Hub + - name: Login to Docker Hub uses: docker/login-action@v3 with: registry: "docker.io" - username: "${{ env.DOCKERHUB_USERNAME }}" + username: "${{ secrets.DOCKERHUB_USERNAME }}" password: "${{ secrets.DOCKERHUB_TOKEN }}" - - if: env.DOCKERHUB_USERNAME != null - name: Release + - name: Release env: GIT_URL: "${{ needs.build.outputs.git_url }}" DOCKER_TAG: "${{ needs.build.outputs.docker_tag }}" From 90068660196d898896219d1df7a088348c5d3d14 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Tue, 13 May 2025 10:18:28 +0200 Subject: [PATCH 27/82] [fix] engine archlinux: avoid Anubis challenge by User-Agent "SearXNG" (#4779) Of the archlinux wikis only wiki.archlinux.org has a has Anubis challenge. About Anubis[1]: > Anubis decides to present a challenge using this logic: > > - User-Agent contains "Mozilla" > ... > This should ensure that git clients, RSS readers, and other low-harm clients > can get through without issue .. [1] https://github.com/TecharoHQ/anubis/blob/6c0ff3f4d5e7a66ea85e5873e6ee4c28692091d7/docs/docs/design/how-anubis-works.mdx#challenge-presentation Suggested-by: @unixfox https://github.com/searxng/searxng/issues/4646#issuecomment-2855322406 Closes: https://github.com/searxng/searxng/issues/4646 Signed-off-by: Markus Heiser --- searx/engines/archlinux.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/searx/engines/archlinux.py b/searx/engines/archlinux.py index 820b31799..63de157dc 100644 --- a/searx/engines/archlinux.py +++ b/searx/engines/archlinux.py @@ -51,6 +51,9 @@ def request(query, params): if netloc == main_wiki: eng_lang: str = traits.get_language(sxng_lang, 'English') # type: ignore query += ' (' + eng_lang + ')' + # wiki.archlinux.org is protected by anubis + # - https://github.com/searxng/searxng/issues/4646#issuecomment-2817848019 + params['headers']['User-Agent'] = "SearXNG" elif netloc == 'wiki.archlinuxcn.org': base_url = 'https://' + netloc + '/wzh/index.php?' From 2cfd3fc44b16e7f3c6010c0ac1004efb6dacf382 Mon Sep 17 00:00:00 2001 From: Ivan Gabaldon Date: Sat, 5 Apr 2025 10:59:07 +0200 Subject: [PATCH 28/82] [enh] tidy: clean old morty, filtron, searx references Everyone should have already switched from legacy methods --- Makefile | 5 +- container/docker-entrypoint.sh | 43 +----- docs/admin/arch_public.dot | 2 +- docs/admin/update-searxng.rst | 45 ------- docs/dev/lxcdev.rst | 5 +- docs/own-instance.rst | 3 +- docs/utils/searxng.sh.rst | 2 +- searx/settings.yml | 12 -- searx/settings_defaults.py | 5 - searx/templates/simple/macros.html | 4 +- .../simple/result_templates/code.html | 2 +- .../simple/result_templates/default.html | 2 +- .../simple/result_templates/map.html | 2 +- .../simple/result_templates/paper.html | 2 +- .../simple/result_templates/products.html | 2 +- .../simple/result_templates/torrent.html | 2 +- .../simple/result_templates/videos.html | 2 +- searx/webapp.py | 25 ---- tests/unit/settings/user_settings_simple.yml | 3 - utils/filtron.sh | 125 ------------------ utils/lib.sh | 4 +- utils/morty.sh | 124 ----------------- utils/searx.sh | 88 ------------ utils/searxng.sh | 9 -- .../lib/systemd/system/filtron.service | 29 ---- .../lib/systemd/system/morty.service | 29 ---- 26 files changed, 18 insertions(+), 558 deletions(-) delete mode 100755 utils/filtron.sh delete mode 100755 utils/morty.sh delete mode 100755 utils/searx.sh delete mode 100644 utils/templates/lib/systemd/system/filtron.service delete mode 100644 utils/templates/lib/systemd/system/morty.service diff --git a/Makefile b/Makefile index 15e43be08..917d3aeb4 100644 --- a/Makefile +++ b/Makefile @@ -65,10 +65,7 @@ test.shell: utils/lib_redis.sh \ utils/searxng.sh \ utils/lxc.sh \ - utils/lxc-searxng.env \ - utils/searx.sh \ - utils/filtron.sh \ - utils/morty.sh + utils/lxc-searxng.env $(Q)$(MTOOLS) build_msg TEST "$@ OK" diff --git a/container/docker-entrypoint.sh b/container/docker-entrypoint.sh index 72d020dcf..ee14b2f05 100755 --- a/container/docker-entrypoint.sh +++ b/container/docker-entrypoint.sh @@ -12,8 +12,7 @@ Environment variables: INSTANCE_NAME settings.yml : general.instance_name AUTOCOMPLETE settings.yml : search.autocomplete BASE_URL settings.yml : server.base_url - MORTY_URL settings.yml : result_proxy.url - MORTY_KEY settings.yml : result_proxy.key + Volume: /etc/searxng the docker entry point copies settings.yml and uwsgi.ini in this directory (see the -f command line option)" @@ -70,20 +69,6 @@ patch_searxng_settings() { -e "s/autocomplete: \"\"/autocomplete: \"${AUTOCOMPLETE}\"/g" \ -e "s/ultrasecretkey/$(head -c 24 /dev/urandom | base64 | tr -dc 'a-zA-Z0-9')/g" \ "${CONF}" - - # Morty configuration - - if [ -n "${MORTY_KEY}" ] && [ -n "${MORTY_URL}" ]; then - sed -i -e "s/image_proxy: false/image_proxy: true/g" \ - "${CONF}" - cat >> "${CONF}" <<-EOF - -# Morty configuration -result_proxy: - url: ${MORTY_URL} - key: !!binary "${MORTY_KEY}" -EOF - fi } update_conf() { @@ -122,30 +107,6 @@ update_conf() { fi } -# searx compatibility: copy /etc/searx/* to /etc/searxng/* -SEARX_CONF=0 -if [ -f "/etc/searx/settings.yml" ]; then - if [ ! -f "${SEARXNG_SETTINGS_PATH}" ]; then - printf '⚠️ /etc/searx/settings.yml is copied to /etc/searxng\n' - cp "/etc/searx/settings.yml" "${SEARXNG_SETTINGS_PATH}" - fi - SEARX_CONF=1 -fi -if [ -f "/etc/searx/uwsgi.ini" ]; then - printf '⚠️ /etc/searx/uwsgi.ini is ignored. Use the volume /etc/searxng\n' - SEARX_CONF=1 -fi -if [ "$SEARX_CONF" -eq "1" ]; then - printf '⚠️ The deprecated volume /etc/searx is mounted. Please update your configuration to use /etc/searxng ⚠️\n' - cat << EOF > /etc/searx/deprecated_volume_read_me.txt -This Docker image uses the volume /etc/searxng -Update your configuration: -* remove uwsgi.ini (or very carefully update your existing uwsgi.ini using https://github.com/searxng/searxng/blob/master/container/uwsgi.ini ) -* mount /etc/searxng instead of /etc/searx -EOF -fi -# end of searx compatibility - # make sure there are uwsgi settings update_conf "${FORCE_CONF_UPDATE}" "${UWSGI_SETTINGS_PATH}" "/usr/local/searxng/container/uwsgi.ini" "patch_uwsgi_settings" @@ -158,8 +119,6 @@ if [ $DRY_RUN -eq 1 ]; then exit fi -unset MORTY_KEY - printf 'Listen on %s\n' "${BIND_ADDRESS}" # Start uwsgi diff --git a/docs/admin/arch_public.dot b/docs/admin/arch_public.dot index 526fb53da..49b03d157 100644 --- a/docs/admin/arch_public.dot +++ b/docs/admin/arch_public.dot @@ -6,7 +6,7 @@ digraph G { browser [label="browser", shape=tab, fillcolor=aliceblue]; rp [label="reverse proxy"]; static [label="static files", shape=folder, href="url to configure static files", fillcolor=lightgray]; - uwsgi [label="uwsgi", shape=parallelogram href="https://docs.searxng.org/utils/searx.sh.html"] + uwsgi [label="uwsgi", shape=parallelogram href="https://docs.searxng.org/utils/searxng.sh.html"] redis [label="redis DB", shape=cylinder]; searxng1 [label="SearXNG #1", fontcolor=blue3]; searxng2 [label="SearXNG #2", fontcolor=blue3]; diff --git a/docs/admin/update-searxng.rst b/docs/admin/update-searxng.rst index b9d15c3f7..16715f00d 100644 --- a/docs/admin/update-searxng.rst +++ b/docs/admin/update-searxng.rst @@ -58,9 +58,6 @@ and then, to name just a few: - Bot protection has been switched from filtron to SearXNG's :ref:`limiter `, this requires a :ref:`Redis ` database. -- The image proxy morty is no longer needed, it has been replaced by the - :ref:`image proxy ` from SearXNG. - - To save bandwidth :ref:`cache busting ` has been implemented. To get in use, the ``static-expires`` needs to be set in the :ref:`uwsgi setup`. @@ -71,12 +68,6 @@ examples show, this is not always enough, sometimes services have to be set up or reconfigured and sometimes services that are no longer needed should be uninstalled. -.. hint:: - - First of all: SearXNG is installed by the script :ref:`searxng.sh`. If you - have old filtron, morty or searx setup you should consider complete - uninstall/reinstall. - Here you will find a list of changes that affect the infrastructure. Please check to what extent it is necessary to update your installations: @@ -85,39 +76,6 @@ check to what extent it is necessary to update your installations: file manually. -remove obsolete services ------------------------- - -If your searx instance was installed *"Step by step"* or by the *"Installation -scripts"*, you need to undo the installation procedure completely. If you have -morty & filtron installed, it is recommended to uninstall these services also. -In case of scripts, to uninstall use the scripts from the origin you installed -searx from or try:: - - $ sudo -H ./utils/filtron.sh remove all - $ sudo -H ./utils/morty.sh remove all - $ sudo -H ./utils/searx.sh remove all - -.. hint:: - - If you are migrate from searx take into account that the ``.config.sh`` is no - longer used. - -If you upgrade from searx or from before :pull:`1332` has been merged and you -have filtron and/or morty installed, don't forget to remove HTTP sites. - -Apache:: - - $ sudo -H ./utils/filtron.sh apache remove - $ sudo -H ./utils/morty.sh apache remove - -nginx:: - - $ sudo -H ./utils/filtron.sh nginx remove - $ sudo -H ./utils/morty.sh nginx remove - - - Check after Installation ------------------------ @@ -130,9 +88,6 @@ to see if there are some left overs. In this example there exists a *old* SearXNG checks -------------- ERROR: settings.yml in /etc/searx/ is deprecated, move file to folder /etc/searxng/ - INFO: [OK] (old) account 'searx' does not exists - INFO: [OK] (old) account 'filtron' does not exists - INFO: [OK] (old) account 'morty' does not exists ... INFO searx.redisdb : connecting to Redis db=0 path='/usr/local/searxng-redis/run/redis.sock' INFO searx.redisdb : connected to Redis diff --git a/docs/dev/lxcdev.rst b/docs/dev/lxcdev.rst index 79716ae57..9edd9f672 100644 --- a/docs/dev/lxcdev.rst +++ b/docs/dev/lxcdev.rst @@ -319,13 +319,13 @@ To *inspect* the SearXNG instance (already described above): .. code:: bash - $ ./utils/searx.sh inspect service + $ ./utils/searxng.sh inspect service .. group-tab:: desktop (HOST) .. code:: bash - $ sudo -H ./utils/lxc.sh cmd searxng-archlinux ./utils/searx.sh inspect service + $ sudo -H ./utils/lxc.sh cmd searxng-archlinux ./utils/searxng.sh inspect service Run :ref:`makefile`, e.g. to test inside the container: @@ -435,4 +435,3 @@ use: [searxng-archlinux] SEARXNG_URL : http:///n.n.n.140/searxng [searxng-archlinux] SEARXNG_PORT : 8888 [searxng-archlinux] SEARXNG_BIND_ADDRESS : 127.0.0.1 - diff --git a/docs/own-instance.rst b/docs/own-instance.rst index 7d79f26c2..8c0009aff 100644 --- a/docs/own-instance.rst +++ b/docs/own-instance.rst @@ -39,8 +39,7 @@ Removing private data means not sending cookies to external search engines and generating a random browser profile for every request. Thus, it does not matter if a public or private instance handles the request, because it is anonymized in both cases. The IP address used will be the IP of the instance, but SearXNG can also be -configured to use proxy or Tor. `Result proxy -`__ is supported, too. +configured to use proxy or Tor. SearXNG does not serve ads or tracking content, unlike most search services. Therefore, private data is not forwarded to third parties who might monetize it. Besides diff --git a/docs/utils/searxng.sh.rst b/docs/utils/searxng.sh.rst index bedc1ba4c..d45d7014f 100644 --- a/docs/utils/searxng.sh.rst +++ b/docs/utils/searxng.sh.rst @@ -28,7 +28,7 @@ In most cases you will install SearXNG simply by running the command: .. code:: bash - sudo -H ./utils/searx.sh install all + sudo -H ./utils/searxng.sh install all The installation is described in chapter :ref:`installation basic`. diff --git a/searx/settings.yml b/searx/settings.yml index d756e9b1c..7e0455701 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -169,18 +169,6 @@ ui: # - image_proxy # - query_in_title -# searx supports result proxification using an external service: -# https://github.com/asciimoo/morty uncomment below section if you have running -# morty proxy the key is base64 encoded (keep the !!binary notation) -# Note: since commit af77ec3, morty accepts a base64 encoded key. -# -# result_proxy: -# url: http://127.0.0.1:3000/ -# # the key is a base64 encoded string, the YAML !!binary prefix is optional -# key: !!binary "your_morty_proxy_key" -# # [true|false] enable the "proxy" button next to each result -# proxify_results: true - # communication with search engines # outgoing: diff --git a/searx/settings_defaults.py b/searx/settings_defaults.py index b91657ff6..4cee7e345 100644 --- a/searx/settings_defaults.py +++ b/searx/settings_defaults.py @@ -230,11 +230,6 @@ SCHEMA = { 'extra_proxy_timeout': SettingsValue(int, 0), 'networks': {}, }, - 'result_proxy': { - 'url': SettingsValue((None, str), None), - 'key': SettingsBytesValue((None, bytes), None), - 'proxify_results': SettingsValue(bool, False), - }, 'plugins': SettingsValue(dict, {}), 'checker': { 'off_when_debug': SettingsValue(bool, True, None), diff --git a/searx/templates/simple/macros.html b/searx/templates/simple/macros.html index 6010a5a3d..df8469d72 100644 --- a/searx/templates/simple/macros.html +++ b/searx/templates/simple/macros.html @@ -44,10 +44,10 @@ {%- endmacro -%} -{%- macro result_sub_footer(result, proxify) -%} +{%- macro result_sub_footer(result) -%}

{% for engine in result.engines %}{{ engine }}{% endfor %} - {{ icon_small('ellipsis-vertical') + result_link(cache_url + result.url, _('cached'), "cache_link") }}‎ {% if proxify and proxify_results %} {{ result_link(proxify(result.url), _('proxied'), "proxyfied_link") }} {% endif %} + {{ icon_small('ellipsis-vertical') + result_link(cache_url + result.url, _('cached'), "cache_link") }}
{{- '' -}}
{{- '' -}} {%- endmacro -%} diff --git a/searx/templates/simple/result_templates/code.html b/searx/templates/simple/result_templates/code.html index 7d2c8ff79..49326aed5 100644 --- a/searx/templates/simple/result_templates/code.html +++ b/searx/templates/simple/result_templates/code.html @@ -28,5 +28,5 @@ {{- result.codelines|code_highlighter(result.code_language)|safe -}} -{{- result_sub_footer(result, proxify) -}} +{{- result_sub_footer(result) -}} {{- result_footer(result) -}} diff --git a/searx/templates/simple/result_templates/default.html b/searx/templates/simple/result_templates/default.html index 263c19a36..8a6329248 100644 --- a/searx/templates/simple/result_templates/default.html +++ b/searx/templates/simple/result_templates/default.html @@ -14,7 +14,7 @@ {{ _('This site did not provide any description.')|safe }}

{% endif -%} -{{- result_sub_footer(result, proxify) -}} +{{- result_sub_footer(result) -}} {% if result.iframe_src -%} {% set display_tooltip = true %} diff --git a/searx/templates/simple/simple_search.html b/searx/templates/simple/simple_search.html index f69ba6142..af533e6e0 100644 --- a/searx/templates/simple/simple_search.html +++ b/searx/templates/simple/simple_search.html @@ -5,6 +5,7 @@ +
    From 861f9c4be52a4844631fb72c3c0dcf8fb6cc77fc Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Thu, 22 May 2025 11:51:30 +0200 Subject: [PATCH 56/82] [build] /static --- client/simple/package-lock.json | 9 --------- searx/static/themes/simple/css/searxng-rtl.min.css | 2 +- searx/static/themes/simple/css/searxng.min.css | 2 +- searx/static/themes/simple/js/searxng.min.js | 4 ++-- searx/static/themes/simple/js/searxng.min.js.map | 2 +- 5 files changed, 5 insertions(+), 14 deletions(-) diff --git a/client/simple/package-lock.json b/client/simple/package-lock.json index 032e38a15..e1f183493 100644 --- a/client/simple/package-lock.json +++ b/client/simple/package-lock.json @@ -7,9 +7,6 @@ "": { "name": "simple", "version": "1.0.0", - "dependencies": { - "autocomplete-js": "^2.7.1" - }, "devDependencies": { "@eslint/js": "^9.26.0", "copy-webpack-plugin": "^13.0.0", @@ -2526,12 +2523,6 @@ "dev": true, "license": "MIT" }, - "node_modules/autocomplete-js": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/autocomplete-js/-/autocomplete-js-2.7.1.tgz", - "integrity": "sha512-F+1Sj13zbfpbkprKjtyYiaHgBo6YODzNzWgJjgo/p312AeiZVEn3W+NaRRzVZYqMI0Bm7/W36uanp995eNDy+A==", - "license": "MIT" - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", diff --git a/searx/static/themes/simple/css/searxng-rtl.min.css b/searx/static/themes/simple/css/searxng-rtl.min.css index 5ddce2b5c..7e2f294f2 100644 --- a/searx/static/themes/simple/css/searxng-rtl.min.css +++ b/searx/static/themes/simple/css/searxng-rtl.min.css @@ -1 +1 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}:root{--color-base-font: #444;--color-base-font-rgb: 68, 68, 68;--color-base-background: #fff;--color-base-background-mobile: #f2f5f8;--color-url-font: #334999;--color-url-visited-font: #9822c3;--color-header-background: #fdfbff;--color-header-border: #ddd;--color-footer-background: #fdfbff;--color-footer-border: #ddd;--color-sidebar-border: #ddd;--color-sidebar-font: #000;--color-sidebar-background: #fff;--color-backtotop-font: #444;--color-backtotop-border: #ddd;--color-backtotop-background: #fff;--color-btn-background: #3050ff;--color-btn-font: #fff;--color-show-btn-background: #bbb;--color-show-btn-font: #000;--color-search-border: #bbb;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #fff;--color-search-font: #222;--color-search-background-hover: #3050ff;--color-error: #db3434;--color-error-background: #fae1e1;--color-warning: #dbba34;--color-warning-background: #faf5e1;--color-success: #42db34;--color-success-background: #e3fae1;--color-categories-item-selected-font: #3050ff;--color-categories-item-border-selected: #3050ff;--color-autocomplete-font: #000;--color-autocomplete-border: #bbb;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #fff;--color-autocomplete-background-hover: #e3e3e3;--color-answer-font: #444;--color-answer-background: #fff;--color-result-keyvalue-col-table: #fdfbff;--color-result-keyvalue-odd: #fdfbff;--color-result-keyvalue-even: #fff;--color-result-background: #fff;--color-result-border: #ddd;--color-result-url-font: #000;--color-result-vim-selected: #f7f7f7;--color-result-vim-arrow: #000bbb;--color-result-description-highlight-font: #000;--color-result-link-font: #000bbb;--color-result-link-font-highlight: #000bbb;--color-result-link-visited-font: #9822c3;--color-result-publishdate-font: #777;--color-result-engines-font: #545454;--color-result-search-url-border: #ddd;--color-result-search-url-font: #000;--color-result-image-span-font: #444;--color-result-image-span-font-selected: #fff;--color-result-image-background: #fff;--color-settings-tr-hover: #ebebeb;--color-settings-engine-description-font: #545454;--color-settings-table-group-background: #0001;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #242424;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #545454;--color-toolkit-kbd-font: #fff;--color-toolkit-kbd-background: #000;--color-toolkit-dialog-border: #ddd;--color-toolkit-dialog-background: #fff;--color-toolkit-tabs-label-border: #fff;--color-toolkit-tabs-section-border: #ddd;--color-toolkit-select-background: #e1e1e1;--color-toolkit-select-border: #ddd;--color-toolkit-select-background-hover: #bbb;--color-toolkit-input-text-font: #222;--color-toolkit-checkbox-onoff-off-background: #ddd;--color-toolkit-checkbox-onoff-on-background: #ddd;--color-toolkit-checkbox-onoff-on-mark-background: #3050ff;--color-toolkit-checkbox-onoff-on-mark-color: #fff;--color-toolkit-checkbox-onoff-off-mark-background: #aaa;--color-toolkit-checkbox-onoff-off-mark-color: #fff;--color-toolkit-checkbox-label-background: #ddd;--color-toolkit-checkbox-label-border: #ddd;--color-toolkit-checkbox-input-border: #3050ff;--color-toolkit-engine-tooltip-border: #ddd;--color-toolkit-engine-tooltip-background: #fff;--color-toolkit-loader-border: rgba(0, 0, 0, .2);--color-toolkit-loader-borderleft: rgba(255, 255, 255, 0);--color-doc-code: #003;--color-doc-code-background: #ddeaff;--color-bar-chart-primary: #5bc0de;--color-bar-chart-secondary: #deb15b;--color-image-resolution-background: rgba(0, 0, 0, .5);--color-image-resolution-font: #fff;--color-loading-indicator: rgba(255, 255, 255, .2);--color-loading-indicator-gap: #fff;--color-line-number: #64708d;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}@media (prefers-color-scheme: dark){:root.theme-auto{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}}:root.theme-dark{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}:root.theme-black{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc;--color-base-background: #000;--color-base-background-mobile: #000;--color-header-background: #000;--color-footer-background: #000;--color-sidebar-background: #000}.code-highlight pre{line-height:100%}.code-highlight td.linenos .normal,.code-highlight span.linenos{color:inherit;background-color:transparent;padding-left:5px;padding-right:5px}.code-highlight td.linenos .special,.code-highlight span.linenos.special{color:#000;background-color:#ffffc0;padding-left:5px;padding-right:5px}.code-highlight .hll{background-color:#ffc}.code-highlight .c{color:#3d7b7b;font-style:italic}.code-highlight .err{border:1px solid #F00}.code-highlight .k{color:green;font-weight:700}.code-highlight .o{color:#666}.code-highlight .ch,.code-highlight .cm{color:#3d7b7b;font-style:italic}.code-highlight .cp{color:#9c6500}.code-highlight .cpf,.code-highlight .c1,.code-highlight .cs{color:#3d7b7b;font-style:italic}.code-highlight .gd{color:#a00000}.code-highlight .ge{font-style:italic}.code-highlight .ges{font-weight:700;font-style:italic}.code-highlight .gr{color:#e40000}.code-highlight .gh{color:navy;font-weight:700}.code-highlight .gi{color:#008400}.code-highlight .go{color:#717171}.code-highlight .gp{color:navy;font-weight:700}.code-highlight .gs{font-weight:700}.code-highlight .gu{color:purple;font-weight:700}.code-highlight .gt{color:#04d}.code-highlight .kc,.code-highlight .kd,.code-highlight .kn{color:green;font-weight:700}.code-highlight .kp{color:green}.code-highlight .kr{color:green;font-weight:700}.code-highlight .kt{color:#b00040}.code-highlight .m{color:#666}.code-highlight .s{color:#ba2121}.code-highlight .na{color:#687822}.code-highlight .nb{color:green}.code-highlight .nc{color:#00f;font-weight:700}.code-highlight .no{color:#800}.code-highlight .nd{color:#a2f}.code-highlight .ni{color:#717171;font-weight:700}.code-highlight .ne{color:#cb3f38;font-weight:700}.code-highlight .nf{color:#00f}.code-highlight .nl{color:#767600}.code-highlight .nn{color:#00f;font-weight:700}.code-highlight .nt{color:green;font-weight:700}.code-highlight .nv{color:#19177c}.code-highlight .ow{color:#a2f;font-weight:700}.code-highlight .w{color:#bbb}.code-highlight .mb,.code-highlight .mf,.code-highlight .mh,.code-highlight .mi,.code-highlight .mo{color:#666}.code-highlight .sa,.code-highlight .sb,.code-highlight .sc,.code-highlight .dl{color:#ba2121}.code-highlight .sd{color:#ba2121;font-style:italic}.code-highlight .s2{color:#ba2121}.code-highlight .se{color:#aa5d1f;font-weight:700}.code-highlight .sh{color:#ba2121}.code-highlight .si{color:#a45a77;font-weight:700}.code-highlight .sx{color:green}.code-highlight .sr{color:#a45a77}.code-highlight .s1{color:#ba2121}.code-highlight .ss{color:#19177c}.code-highlight .bp{color:green}.code-highlight .fm{color:#00f}.code-highlight .vc,.code-highlight .vg,.code-highlight .vi,.code-highlight .vm{color:#19177c}.code-highlight .il{color:#666}.codelines{margin:.125rem 0 0;padding:1rem 0 0}.code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}.code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}.code-highlight .linenos::selection{background:transparent}.code-highlight .linenos::-moz-selection{background:transparent}.code-highlight span.linenos{color:var(--color-line-number)}@media (prefers-color-scheme: dark){:root.theme-auto .code-highlight pre{line-height:100%}:root.theme-auto .code-highlight td.linenos .normal{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight span.linenos{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight td.linenos .special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight span.linenos.special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight .hll{background-color:#6e7681}:root.theme-auto .code-highlight .c{color:#7e8aa1}:root.theme-auto .code-highlight .err{color:#f88f7f}:root.theme-auto .code-highlight .esc{color:#d4d2c8}:root.theme-auto .code-highlight .g{color:#d4d2c8}:root.theme-auto .code-highlight .k{color:#ffad66}:root.theme-auto .code-highlight .l{color:#d5ff80}:root.theme-auto .code-highlight .n{color:#d4d2c8}:root.theme-auto .code-highlight .o{color:#ffad66}:root.theme-auto .code-highlight .x{color:#d4d2c8}:root.theme-auto .code-highlight .p{color:#d4d2c8}:root.theme-auto .code-highlight .ch{color:#f88f7f;font-style:italic}:root.theme-auto .code-highlight .cm{color:#7e8aa1}:root.theme-auto .code-highlight .cp{color:#ffad66;font-weight:700}:root.theme-auto .code-highlight .cpf{color:#7e8aa1}:root.theme-auto .code-highlight .c1{color:#7e8aa1}:root.theme-auto .code-highlight .cs{color:#7e8aa1;font-style:italic}:root.theme-auto .code-highlight .gd{color:#f88f7f;background-color:#3d1e20}:root.theme-auto .code-highlight .ge{color:#d4d2c8;font-style:italic}:root.theme-auto .code-highlight .ges{color:#d4d2c8}:root.theme-auto .code-highlight .gr{color:#f88f7f}:root.theme-auto .code-highlight .gh{color:#d4d2c8}:root.theme-auto .code-highlight .gi{color:#6ad4af;background-color:#19362c}:root.theme-auto .code-highlight .go{color:#7e8aa1}:root.theme-auto .code-highlight .gp{color:#d4d2c8}:root.theme-auto .code-highlight .gs{color:#d4d2c8;font-weight:700}:root.theme-auto .code-highlight .gu{color:#d4d2c8}:root.theme-auto .code-highlight .gt{color:#f88f7f}:root.theme-auto .code-highlight .kc{color:#ffad66}:root.theme-auto .code-highlight .kd{color:#ffad66}:root.theme-auto .code-highlight .kn{color:#ffad66}:root.theme-auto .code-highlight .kp{color:#ffad66}:root.theme-auto .code-highlight .kr{color:#ffad66}:root.theme-auto .code-highlight .kt{color:#73d0ff}:root.theme-auto .code-highlight .ld{color:#d5ff80}:root.theme-auto .code-highlight .m{color:#dfbfff}:root.theme-auto .code-highlight .s{color:#d5ff80}:root.theme-auto .code-highlight .na{color:#ffd173}:root.theme-auto .code-highlight .nb{color:#ffd173}:root.theme-auto .code-highlight .nc{color:#73d0ff}:root.theme-auto .code-highlight .no{color:#ffd173}:root.theme-auto .code-highlight .nd{color:#7e8aa1;font-weight:700;font-style:italic}:root.theme-auto .code-highlight .ni{color:#95e6cb}:root.theme-auto .code-highlight .ne{color:#73d0ff}:root.theme-auto .code-highlight .nf{color:#ffd173}:root.theme-auto .code-highlight .nl{color:#d4d2c8}:root.theme-auto .code-highlight .nn{color:#d4d2c8}:root.theme-auto .code-highlight .nx{color:#d4d2c8}:root.theme-auto .code-highlight .py{color:#ffd173}:root.theme-auto .code-highlight .nt{color:#5ccfe6}:root.theme-auto .code-highlight .nv{color:#d4d2c8}:root.theme-auto .code-highlight .ow{color:#ffad66}:root.theme-auto .code-highlight .pm{color:#d4d2c8}:root.theme-auto .code-highlight .w{color:#d4d2c8}:root.theme-auto .code-highlight .mb{color:#dfbfff}:root.theme-auto .code-highlight .mf{color:#dfbfff}:root.theme-auto .code-highlight .mh{color:#dfbfff}:root.theme-auto .code-highlight .mi{color:#dfbfff}:root.theme-auto .code-highlight .mo{color:#dfbfff}:root.theme-auto .code-highlight .sa{color:#f29e74}:root.theme-auto .code-highlight .sb{color:#d5ff80}:root.theme-auto .code-highlight .sc{color:#d5ff80}:root.theme-auto .code-highlight .dl{color:#d5ff80}:root.theme-auto .code-highlight .sd{color:#7e8aa1}:root.theme-auto .code-highlight .s2{color:#d5ff80}:root.theme-auto .code-highlight .se{color:#95e6cb}:root.theme-auto .code-highlight .sh{color:#d5ff80}:root.theme-auto .code-highlight .si{color:#95e6cb}:root.theme-auto .code-highlight .sx{color:#95e6cb}:root.theme-auto .code-highlight .sr{color:#95e6cb}:root.theme-auto .code-highlight .s1{color:#d5ff80}:root.theme-auto .code-highlight .ss{color:#dfbfff}:root.theme-auto .code-highlight .bp{color:#5ccfe6}:root.theme-auto .code-highlight .fm{color:#ffd173}:root.theme-auto .code-highlight .vc{color:#d4d2c8}:root.theme-auto .code-highlight .vg{color:#d4d2c8}:root.theme-auto .code-highlight .vi{color:#d4d2c8}:root.theme-auto .code-highlight .vm{color:#d4d2c8}:root.theme-auto .code-highlight .il{color:#dfbfff}:root.theme-auto .code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}:root.theme-auto .code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}:root.theme-auto .code-highlight .linenos::selection{background:transparent}:root.theme-auto .code-highlight .linenos::-moz-selection{background:transparent}:root.theme-auto .code-highlight span.linenos{color:var(--color-line-number)}}:root.theme-dark .code-highlight pre{line-height:100%}:root.theme-dark .code-highlight td.linenos .normal{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight span.linenos{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight td.linenos .special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight span.linenos.special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight .hll{background-color:#6e7681}:root.theme-dark .code-highlight .c{color:#7e8aa1}:root.theme-dark .code-highlight .err{color:#f88f7f}:root.theme-dark .code-highlight .esc{color:#d4d2c8}:root.theme-dark .code-highlight .g{color:#d4d2c8}:root.theme-dark .code-highlight .k{color:#ffad66}:root.theme-dark .code-highlight .l{color:#d5ff80}:root.theme-dark .code-highlight .n{color:#d4d2c8}:root.theme-dark .code-highlight .o{color:#ffad66}:root.theme-dark .code-highlight .x{color:#d4d2c8}:root.theme-dark .code-highlight .p{color:#d4d2c8}:root.theme-dark .code-highlight .ch{color:#f88f7f;font-style:italic}:root.theme-dark .code-highlight .cm{color:#7e8aa1}:root.theme-dark .code-highlight .cp{color:#ffad66;font-weight:700}:root.theme-dark .code-highlight .cpf{color:#7e8aa1}:root.theme-dark .code-highlight .c1{color:#7e8aa1}:root.theme-dark .code-highlight .cs{color:#7e8aa1;font-style:italic}:root.theme-dark .code-highlight .gd{color:#f88f7f;background-color:#3d1e20}:root.theme-dark .code-highlight .ge{color:#d4d2c8;font-style:italic}:root.theme-dark .code-highlight .ges{color:#d4d2c8}:root.theme-dark .code-highlight .gr{color:#f88f7f}:root.theme-dark .code-highlight .gh{color:#d4d2c8}:root.theme-dark .code-highlight .gi{color:#6ad4af;background-color:#19362c}:root.theme-dark .code-highlight .go{color:#7e8aa1}:root.theme-dark .code-highlight .gp{color:#d4d2c8}:root.theme-dark .code-highlight .gs{color:#d4d2c8;font-weight:700}:root.theme-dark .code-highlight .gu{color:#d4d2c8}:root.theme-dark .code-highlight .gt{color:#f88f7f}:root.theme-dark .code-highlight .kc{color:#ffad66}:root.theme-dark .code-highlight .kd{color:#ffad66}:root.theme-dark .code-highlight .kn{color:#ffad66}:root.theme-dark .code-highlight .kp{color:#ffad66}:root.theme-dark .code-highlight .kr{color:#ffad66}:root.theme-dark .code-highlight .kt{color:#73d0ff}:root.theme-dark .code-highlight .ld{color:#d5ff80}:root.theme-dark .code-highlight .m{color:#dfbfff}:root.theme-dark .code-highlight .s{color:#d5ff80}:root.theme-dark .code-highlight .na{color:#ffd173}:root.theme-dark .code-highlight .nb{color:#ffd173}:root.theme-dark .code-highlight .nc{color:#73d0ff}:root.theme-dark .code-highlight .no{color:#ffd173}:root.theme-dark .code-highlight .nd{color:#7e8aa1;font-weight:700;font-style:italic}:root.theme-dark .code-highlight .ni{color:#95e6cb}:root.theme-dark .code-highlight .ne{color:#73d0ff}:root.theme-dark .code-highlight .nf{color:#ffd173}:root.theme-dark .code-highlight .nl{color:#d4d2c8}:root.theme-dark .code-highlight .nn{color:#d4d2c8}:root.theme-dark .code-highlight .nx{color:#d4d2c8}:root.theme-dark .code-highlight .py{color:#ffd173}:root.theme-dark .code-highlight .nt{color:#5ccfe6}:root.theme-dark .code-highlight .nv{color:#d4d2c8}:root.theme-dark .code-highlight .ow{color:#ffad66}:root.theme-dark .code-highlight .pm{color:#d4d2c8}:root.theme-dark .code-highlight .w{color:#d4d2c8}:root.theme-dark .code-highlight .mb{color:#dfbfff}:root.theme-dark .code-highlight .mf{color:#dfbfff}:root.theme-dark .code-highlight .mh{color:#dfbfff}:root.theme-dark .code-highlight .mi{color:#dfbfff}:root.theme-dark .code-highlight .mo{color:#dfbfff}:root.theme-dark .code-highlight .sa{color:#f29e74}:root.theme-dark .code-highlight .sb{color:#d5ff80}:root.theme-dark .code-highlight .sc{color:#d5ff80}:root.theme-dark .code-highlight .dl{color:#d5ff80}:root.theme-dark .code-highlight .sd{color:#7e8aa1}:root.theme-dark .code-highlight .s2{color:#d5ff80}:root.theme-dark .code-highlight .se{color:#95e6cb}:root.theme-dark .code-highlight .sh{color:#d5ff80}:root.theme-dark .code-highlight .si{color:#95e6cb}:root.theme-dark .code-highlight .sx{color:#95e6cb}:root.theme-dark .code-highlight .sr{color:#95e6cb}:root.theme-dark .code-highlight .s1{color:#d5ff80}:root.theme-dark .code-highlight .ss{color:#dfbfff}:root.theme-dark .code-highlight .bp{color:#5ccfe6}:root.theme-dark .code-highlight .fm{color:#ffd173}:root.theme-dark .code-highlight .vc{color:#d4d2c8}:root.theme-dark .code-highlight .vg{color:#d4d2c8}:root.theme-dark .code-highlight .vi{color:#d4d2c8}:root.theme-dark .code-highlight .vm{color:#d4d2c8}:root.theme-dark .code-highlight .il{color:#dfbfff}:root.theme-dark .code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}:root.theme-dark .code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}:root.theme-dark .code-highlight .linenos::selection{background:transparent}:root.theme-dark .code-highlight .linenos::-moz-selection{background:transparent}:root.theme-dark .code-highlight span.linenos{color:var(--color-line-number)}html.no-js .hide_if_nojs,html.js .show_if_nojs{display:none}.center{text-align:center}.right{float:right}.left{float:left}.invisible{display:none!important}.list-unstyled{list-style-type:none}.list-unstyled li{margin-top:4px;margin-bottom:4px}.danger{background-color:var(--color-error-background)}.warning{background:var(--color-warning-background)}.success{background:var(--color-success-background)}.badge{display:inline-block;color:var(--color-toolkit-badge-font);background-color:var(--color-toolkit-badge-background);text-align:center;white-space:nowrap;vertical-align:baseline;min-width:10px;padding:1px 5px;border-radius:5px}kbd{padding:2px 4px;margin:1px;font-size:90%;color:var(--color-toolkit-kbd-font);background:var(--color-toolkit-kbd-background)}table{width:100%}table.striped tr{border-bottom:1px solid var(--color-settings-tr-hover)}th{padding:.4em}td{padding:0 4px}tr:hover{background:var(--color-settings-tr-hover)!important}div.selectable_url{display:block;border:1px solid var(--color-result-search-url-border);padding:4px;color:var(--color-result-search-url-font);margin:.1em;overflow:hidden;height:1.2em;line-height:1.2em;border-radius:5px}div.selectable_url pre{display:block;font-size:.8em;word-break:break-all;margin:.1em;-webkit-user-select:all;user-select:all}.dialog-error{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:right;border-radius:10px;color:var(--color-error);background:var(--color-error-background);border-color:var(--color-error)}.dialog-error .close{float:left;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-error ul,.dialog-error ol,.dialog-error p{margin:1px 0 0}.dialog-error table{width:auto}.dialog-error tr{vertical-align:text-top}.dialog-error tr:hover{background:transparent!important}.dialog-error td{padding:0 1em 0 0;padding-left:1rem;padding-bottom:0;padding-right:0}.dialog-error h4{margin-top:.3em;margin-bottom:.3em}.dialog-error-block{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:right;border-radius:10px;display:block;color:var(--color-error);background:var(--color-error-background);border-color:var(--color-error)}.dialog-error-block .close{float:left;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-error-block ul,.dialog-error-block ol,.dialog-error-block p{margin:1px 0 0}.dialog-error-block table{width:auto}.dialog-error-block tr{vertical-align:text-top}.dialog-error-block tr:hover{background:transparent!important}.dialog-error-block td{padding:0 1em 0 0;padding-left:1rem;padding-bottom:0;padding-right:0}.dialog-error-block h4{margin-top:.3em;margin-bottom:.3em}.dialog-warning{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:right;border-radius:10px;color:var(--color-warning);background:var(--color-warning-background);border-color:var(--color-warning)}.dialog-warning .close{float:left;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-warning ul,.dialog-warning ol,.dialog-warning p{margin:1px 0 0}.dialog-warning table{width:auto}.dialog-warning tr{vertical-align:text-top}.dialog-warning tr:hover{background:transparent!important}.dialog-warning td{padding:0 1em 0 0;padding-left:1rem;padding-bottom:0;padding-right:0}.dialog-warning h4{margin-top:.3em;margin-bottom:.3em}.dialog-modal{position:relative;display:flex;padding:1rem;border:1px solid var(--color-toolkit-dialog-border);text-align:right;border-radius:10px;display:block;background:var(--color-toolkit-dialog-background);position:fixed;top:50%;left:50%;margin:0 auto;transform:translate(-50%,-50%);z-index:5000}.dialog-modal .close{float:left;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-modal ul,.dialog-modal ol,.dialog-modal p{margin:1px 0 0}.dialog-modal table{width:auto}.dialog-modal tr{vertical-align:text-top}.dialog-modal tr:hover{background:transparent!important}.dialog-modal td{padding:0 1em 0 0;padding-left:1rem;padding-bottom:0;padding-right:0}.dialog-modal h4{margin-top:.3em;margin-bottom:.3em}.dialog-modal h3{margin-top:0}.btn-collapse{cursor:pointer}.scrollx{overflow:auto hidden;display:block;padding:0;margin:0;border:none}.tabs .tabs>label{font-size:90%}ul.tabs{border-bottom:1px solid var(--color-toolkit-tabs-section-border);list-style:none;padding-left:0}ul.tabs li{display:flex}.tabs{display:flex;flex-wrap:wrap;width:100%;min-width:100%}.tabs>*{order:2}.tabs>input[type=radio]{display:none}.tabs>label,.tabs>li>a{order:1;padding:.7em;margin:0 .7em;letter-spacing:.5px;text-transform:uppercase;border:solid var(--color-toolkit-tabs-label-border);border-width:0 0 2px 0;color:unset;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:pointer}.tabs>label.active,.tabs>li>a.active{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font)}.tabs>label:hover,.tabs>li>a:hover{border-bottom:2px solid var(--color-categories-item-border-selected)}.tabs>section{min-width:100%;padding:.7rem 0;box-sizing:border-box;border-top:1px solid var(--color-toolkit-tabs-section-border);display:none}.tabs>label:last-of-type{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font);letter-spacing:-.1px}.tabs>section:last-of-type{display:block}html body .tabs>input:checked~section{display:none}html body .tabs>input:checked~label{position:inherited;background:inherit;border-bottom:2px solid transparent;font-weight:400;color:inherit}html body .tabs>input:checked~label:hover{border-bottom:2px solid var(--color-categories-item-border-selected)}html body .tabs>input:checked+label{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font)}html body .tabs>input:checked+label+section{display:block}select{height:2.4rem;margin-top:0;margin-left:1rem;margin-bottom:0;margin-right:0;padding:.2rem!important;color:var(--color-search-font);font-size:.9rem;z-index:100}select:hover,select:focus{cursor:pointer}@supports ((background-position-x: 100%) and ((appearance: none) or (-webkit-appearance: none) or (-moz-appearance: none))){select{appearance:none;-webkit-appearance:none;-moz-appearance:none;border-width:0 2rem 0 0;border-color:transparent;background:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E) no-repeat;background-position-x:calc(100% + 2rem);background-size:2rem;background-origin:content-box;background-color:var(--color-toolkit-select-background);outline:medium none;text-overflow:ellipsis;border-radius:5px}select:hover,select:focus{background-color:var(--color-toolkit-select-background-hover)}select option{background-color:var(--color-base-background)}@media (prefers-color-scheme: dark){html.theme-auto select,html.theme-dark select{background-image:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20fill%3D%22%23ddd%22%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E)}}html.theme-dark select{background-image:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20fill%3D%22%23ddd%22%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E)}}input.checkbox-onoff[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;display:inline-block;width:2.5em;height:.7em;box-shadow:none!important;margin:0 16px;border-radius:10px;position:relative}input.checkbox-onoff[type=checkbox]:focus,input.checkbox-onoff[type=checkbox]:hover{outline:none}input.checkbox-onoff[type=checkbox]:focus:after{content:"";position:absolute;width:3.5em;height:1.65em;border:1px solid var(--color-btn-background);border-radius:12px;box-shadow:var(--color-btn-background) 0 0 3px;z-index:1200;top:-.55em;left:-.6em}input.checkbox-onoff[type=checkbox]:before{position:absolute;top:-.5em;display:flex;justify-content:center;align-items:center;font-size:.75em;width:1.875em;height:1.875em;border-radius:50%}input.checkbox-onoff[type=checkbox],input.checkbox-onoff.reversed-checkbox[type=checkbox]:checked{background:var(--color-toolkit-checkbox-onoff-off-background)}input.checkbox-onoff[type=checkbox]:before,input.checkbox-onoff.reversed-checkbox[type=checkbox]:checked:before{left:-.5em;content:"✕";color:var(--color-toolkit-checkbox-onoff-off-mark-color);background:var(--color-toolkit-checkbox-onoff-off-mark-background)}input.checkbox-onoff[type=checkbox]:checked,input.checkbox-onoff.reversed-checkbox[type=checkbox]{background:var(--color-toolkit-checkbox-onoff-on-background)}input.checkbox-onoff[type=checkbox]:checked:before,input.checkbox-onoff.reversed-checkbox[type=checkbox]:before{left:calc(100% - 1.5em);content:"✓";color:var(--color-toolkit-checkbox-onoff-on-mark-color);background:var(--color-toolkit-checkbox-onoff-on-mark-background)}@supports (transform: rotate(-45deg)){input[type=checkbox]:not(.checkbox-onoff){-webkit-appearance:none;-moz-appearance:none;appearance:none;width:20px;height:20px;cursor:pointer;position:relative;top:0;left:0;border:2px solid var(--color-toolkit-checkbox-input-border);border-radius:.3em}input[type=checkbox]:not(.checkbox-onoff):after{content:"";width:9px;height:5px;position:absolute;top:3px;left:2px;border:3px solid var(--color-toolkit-checkbox-label-border);border-top:none;border-right:none;background:transparent;opacity:0;transform:rotate(-45deg)}input[type=checkbox]:not(.checkbox-onoff):checked:after{border-color:var(--color-toolkit-checkbox-input-border);opacity:1}input[type=checkbox][disabled]:not(.checkbox-onoff){border:inherit;background-color:transparent!important;cursor:inherit}input.checkbox[type=checkbox]:not(:checked,[disabled],.checkbox-onoff):hover:after{opacity:.5}}@media screen and (max-width: 50em){.tabs>label{width:100%}}.loader,.loader:after{border-radius:50%;width:2em;height:2em}.loader{margin:1em auto;font-size:10px;position:relative;text-indent:-9999em;border-top:.5em solid var(--color-toolkit-loader-border);border-right:.5em solid var(--color-toolkit-loader-border);border-bottom:.5em solid var(--color-toolkit-loader-border);border-left:.5em solid var(--color-toolkit-loader-borderleft);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:load8 1.2s infinite linear;animation:load8 1.2s infinite linear}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.engine-tooltip{display:none;position:absolute;padding:.5rem 1rem;margin:0 0 0 2rem;border:1px solid var(--color-toolkit-engine-tooltip-border);background:var(--color-toolkit-engine-tooltip-background);font-size:14px;font-weight:400;z-index:5000;text-align:left;border-radius:10px}th:hover .engine-tooltip,td:hover .engine-tooltip,.engine-tooltip:hover{display:inline-block}.stacked-bar-chart{margin:0;padding:0 .125rem 0 4rem;width:100%;width:-moz-available;width:-webkit-fill-available;width:fill;flex-flow:row nowrap;align-items:center;display:inline-flex}.stacked-bar-chart-value{width:3rem;display:inline-block;position:absolute;padding:0 .5rem;text-align:right}.stacked-bar-chart-base{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset}.stacked-bar-chart-median{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:var(--color-base-font);border:1px solid rgba(var(--color-base-font-rgb),.9);padding:.3rem 0}.stacked-bar-chart-rate80{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border:1px solid rgba(var(--color-base-font-rgb),.3);padding:.3rem 0}.stacked-bar-chart-rate95{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border-bottom:1px dotted rgba(var(--color-base-font-rgb),.5);padding:0}.stacked-bar-chart-rate100{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border-left:1px solid rgba(var(--color-base-font-rgb),.9);padding:.4rem 0;width:1px}/*! Autocomplete.js v2.6.3 | license MIT | (c) 2017, Baptiste Donaux | http://autocomplete-js.com */.autocomplete{position:absolute;width:44rem;max-height:0;overflow-y:hidden;text-align:right;border-radius:10px}.autocomplete:active,.autocomplete:focus,.autocomplete:hover{background-color:var(--color-autocomplete-background)}.autocomplete:empty{display:none}.autocomplete>ul{list-style-type:none;margin:0;padding:0}.autocomplete>ul>li{cursor:pointer;padding:.5rem 1rem}.autocomplete>ul>li.active,.autocomplete>ul>li:active,.autocomplete>ul>li:focus,.autocomplete>ul>li:hover{background-color:var(--color-autocomplete-background-hover)}.autocomplete>ul>li.active a:active,.autocomplete>ul>li:active a:active,.autocomplete>ul>li:focus a:active,.autocomplete>ul>li:hover a:active,.autocomplete>ul>li.active a:focus,.autocomplete>ul>li:active a:focus,.autocomplete>ul>li:focus a:focus,.autocomplete>ul>li:hover a:focus,.autocomplete>ul>li.active a:hover,.autocomplete>ul>li:active a:hover,.autocomplete>ul>li:focus a:hover,.autocomplete>ul>li:hover a:hover{text-decoration:none}.autocomplete>ul>li.locked{cursor:inherit}.autocomplete.open{display:block;background-color:var(--color-autocomplete-background);color:var(--color-autocomplete-font);max-height:32rem;overflow-y:auto;z-index:5000;margin-top:3.5rem;border-radius:.8rem}.autocomplete.open:empty{display:none}@media screen and (max-width: 50em){.autocomplete{width:100%}.autocomplete>ul>li{padding:1rem}}#main_results #results.image-detail-open.only_template_images{width:min(98%,59.25rem)!important}#main_results #results.only_template_images.image-detail-open #backToTop{right:56.75rem!important;left:inherit}article.result-images .detail{display:none}#results.image-detail-open article.result-images[data-vim-selected] .detail{display:flex;flex-direction:column;position:fixed;right:60rem;left:0;top:13rem;transition:top 64ms ease-in 0s;bottom:0;background:var(--color-result-detail-background);border:1px solid var(--color-result-detail-background);z-index:1000;padding:4rem 3rem 3rem;overflow-y:scroll}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source{display:block;flex:1;text-align:left;width:100%;border:none;text-decoration:none}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{padding:0;margin:0;border:none;object-fit:contain;width:inherit;height:inherit;max-width:100%;min-height:inherit;max-height:calc(100vh - 42rem);background:inherit}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels{color:var(--color-result-detail-font);height:19rem}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels hr{border-top:1px solid var(--color-result-detail-hr);border-bottom:none}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels h4{height:2rem;overflow:hidden;text-overflow:ellipsis;font-size:.9rem;margin-bottom:0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p{color:var(--color-result-detail-label-font);font-size:.9rem;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;margin:.8rem 0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p span{display:inline-block;width:12rem}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels h4,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a{text-align:right}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-content{height:2rem;line-height:unset;overflow:hidden;text-overflow:ellipsis}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url{white-space:nowrap;overflow:hidden hidden;text-overflow:ellipsis}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-content:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url:hover{position:relative;overflow:inherit!important;background:var(--color-result-detail-background);text-overflow:inherit!important}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:active{color:var(--color-result-detail-link)}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:hover{text-decoration:underline}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close{top:1rem;right:1rem;padding:.4rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous{top:1rem;left:6rem;padding:.4rem .3rem .4rem .5rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next{top:1rem;left:2rem;padding:.4rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous{border-radius:50%;display:block;width:1.5rem;height:1.5rem;position:absolute;filter:opacity(40%);z-index:1200}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close span,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next span,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous span{display:block;width:1.5rem;height:1.5rem;text-align:center}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next span:before,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous span:before{vertical-align:sub}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:active,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:active,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:active{color:var(--color-result-detail-font);background:var(--color-result-detail-background);border:1px solid var(--color-result-detail-font)}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:hover{filter:opacity(80%)}#results.image-detail-open article.result-images[data-vim-selected] .detail .loader{position:absolute;top:1rem;left:50%;border-top:.5em solid var(--color-result-detail-loader-border);border-right:.5em solid var(--color-result-detail-loader-border);border-bottom:.5em solid var(--color-result-detail-loader-border);border-left:.5em solid var(--color-result-detail-loader-borderleft)}#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail{top:0}#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail a.result-images-source img{max-height:calc(100vh - 25rem)}@media screen and (max-width: 79.75em){#results.image-detail-open article.result-images[data-vim-selected] .detail{top:0;right:0}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source{display:flex;flex-direction:column;justify-content:center}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{width:100%;max-height:calc(100vh - 24rem)}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next{left:1rem}}@media screen and (max-width: 50em){#results.image-detail-open article.result-images[data-vim-selected] .detail{top:0;right:0;padding:1rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{width:100%;max-height:calc(100vh - 20rem);margin:0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p span{width:inherit;margin-left:1rem}}.dialog-modal{animation-name:dialogmodal;animation-duration:.13s}@keyframes dialogmodal{0%{opacity:0}50%{opacity:.5;transform:translate(-50%,-50%) scale(1.05)}}input.checkbox-onoff[type=checkbox]:before{transition:left .25s}iframe[src^="https://w.soundcloud.com"]{height:120px}iframe[src^="https://www.deezer.com"]{height:94px}iframe[src^="https://www.mixcloud.com"]{height:250px}iframe[src^="https://bandcamp.com/EmbeddedPlayer"]{height:350px}iframe[src^="https://bandcamp.com/EmbeddedPlayer/track"]{height:120px}iframe[src^="https://genius.com/songs"]{height:65px}.info-page code{font-family:monospace;border-radius:5px;background-color:var(--color-doc-code-background);color:var(--color-doc-code);padding:.2rem;border:0 none}.stats_endpoint .github-issue-button{display:block;font-size:16px}.stats_endpoint .issue-hide{display:none}.stats_endpoint input[type=checked]{position:absolute}.stats_endpoint label{margin:1rem 1rem 1rem 0}.stats_endpoint .step_content{margin:1rem 1rem 1rem 2rem}.stats_endpoint .step1,.stats_endpoint .step2{visibility:hidden}.stats_endpoint .step1_delay{transition:visibility 0s linear 4s}.stats_endpoint #step1:checked~.step1,.stats_endpoint #step2:checked~.step2{visibility:visible}.engine-stats{border-spacing:0;border-collapse:collapse}.engine-stats tr td,.engine-stats tr th{border-bottom:1px solid var(--color-result-border);padding:.25rem}.engine-stats table.engine-tooltip{border-spacing:0;border-collapse:collapse}.engine-stats table.engine-tooltip td,.engine-stats table.engine-tooltip th{border:none}.engine-stats .engine-name{width:20rem}.engine-stats .engine-score{width:7rem;text-align:right}.engine-stats .engine-reliability{text-align:right}table.engine-error th.engine-error-type,table.engine-error td.engine-error-type,failed-test{width:10rem}.engine-errors{margin-top:3rem}.engine-errors table.engine-error{max-width:1280px;margin:1rem 0 3rem;border:1px solid var(--color-result-border);text-align:right}.engine-errors table.engine-error tr th,.engine-errors table.engine-error tr td{padding:.5rem}.engine-errors table.engine-error span.log_parameters{border-right:1px solid solid var(--color-result-border);padding:0 1rem 0 0;margin:0 0 0 .5rem}.bar-chart-value{width:3em;display:inline-block;text-align:right;padding-right:.5rem}.bar-chart-graph{width:calc(100% - 5rem);display:inline-block}.bar-chart-bar{border:3px solid var(--color-bar-chart-primary);margin:1px 0}.bar-chart-serie1{border:3px solid var(--color-bar-chart-primary);margin:1px 0;float:left}.bar-chart-serie2{border:3px solid var(--color-bar-chart-secondary);margin:1px 0;float:left}.bar0{width:0;border:0}.bar1{width:1%}.bar2{width:2%}.bar3{width:3%}.bar4{width:4%}.bar5{width:5%}.bar6{width:6%}.bar7{width:7%}.bar8{width:8%}.bar9{width:9%}.bar10{width:10%}.bar11{width:11%}.bar12{width:12%}.bar13{width:13%}.bar14{width:14%}.bar15{width:15%}.bar16{width:16%}.bar17{width:17%}.bar18{width:18%}.bar19{width:19%}.bar20{width:20%}.bar21{width:21%}.bar22{width:22%}.bar23{width:23%}.bar24{width:24%}.bar25{width:25%}.bar26{width:26%}.bar27{width:27%}.bar28{width:28%}.bar29{width:29%}.bar30{width:30%}.bar31{width:31%}.bar32{width:32%}.bar33{width:33%}.bar34{width:34%}.bar35{width:35%}.bar36{width:36%}.bar37{width:37%}.bar38{width:38%}.bar39{width:39%}.bar40{width:40%}.bar41{width:41%}.bar42{width:42%}.bar43{width:43%}.bar44{width:44%}.bar45{width:45%}.bar46{width:46%}.bar47{width:47%}.bar48{width:48%}.bar49{width:49%}.bar50{width:50%}.bar51{width:51%}.bar52{width:52%}.bar53{width:53%}.bar54{width:54%}.bar55{width:55%}.bar56{width:56%}.bar57{width:57%}.bar58{width:58%}.bar59{width:59%}.bar60{width:60%}.bar61{width:61%}.bar62{width:62%}.bar63{width:63%}.bar64{width:64%}.bar65{width:65%}.bar66{width:66%}.bar67{width:67%}.bar68{width:68%}.bar69{width:69%}.bar70{width:70%}.bar71{width:71%}.bar72{width:72%}.bar73{width:73%}.bar74{width:74%}.bar75{width:75%}.bar76{width:76%}.bar77{width:77%}.bar78{width:78%}.bar79{width:79%}.bar80{width:80%}.bar81{width:81%}.bar82{width:82%}.bar83{width:83%}.bar84{width:84%}.bar85{width:85%}.bar86{width:86%}.bar87{width:87%}.bar88{width:88%}.bar89{width:89%}.bar90{width:90%}.bar91{width:91%}.bar92{width:92%}.bar93{width:93%}.bar94{width:94%}.bar95{width:95%}.bar96{width:96%}.bar97{width:97%}.bar98{width:98%}.bar99{width:99%}.bar100{width:100%}.osm-map-box{height:300px;width:100%;margin:10px 0}#main_index{margin-top:26vh}.index{text-align:center}.index .title{background:url(../img/searxng.png) no-repeat;min-height:4rem;margin:4rem auto;background-position:center;background-size:contain}.index h1{font-size:4em;visibility:hidden}.index #search,.index #search_header{margin:0 auto;background:inherit;border:inherit;padding:0;display:block}.index .search_filters{display:block;margin:1em 0}.index .category label{padding:6px 10px;border-bottom:initial!important}@media screen and (max-width: 79.75em){div.title h1{font-size:1em}#main_index{margin-top:6em}}table{border-collapse:collapse}table th,table td{text-align:center;padding:1rem .5rem;text-align:right}table tr.pref-group th{font-weight:400;text-align:right;background:var(--color-settings-table-group-background)}#main_preferences form{width:100%}#main_preferences fieldset{margin:8px;border:none}#main_preferences legend{margin:0;padding:5px 0 0;display:block;float:right;width:300px}#main_preferences input[type=text]{width:13.25rem;color:var(--color-toolkit-input-text-font);border:none;background:none repeat scroll 0 0 var(--color-toolkit-select-background);padding:.2rem .4rem;height:2rem;border-radius:5px}#main_preferences input[type=text]:hover,#main_preferences input[type=text]:focus{background-color:var(--color-toolkit-select-background-hover)}#main_preferences div.pref-group{width:100%;font-weight:400;padding:1rem .5rem;text-align:right;background:var(--color-settings-table-group-background)}#main_preferences .value{margin:0;padding:0;float:right;width:15em}#main_preferences .value select,#main_preferences .value input[type=text]{font-size:inherit!important;margin-top:0;margin-left:1rem;margin-bottom:0;margin-right:0}#main_preferences .value select{width:14rem}#main_preferences .value select:focus,#main_preferences .value input:focus{outline:none;box-shadow:0 0 1px 1px var(--color-btn-background)}#main_preferences .description{margin:0;padding:5px 0 0;float:left;width:50%;color:var(--color-settings-engine-description-font);font-size:90%}#main_preferences .bang{text-align:right;border-radius:5px;background-color:var(--color-doc-code-background);color:var(--color-doc-code);padding:.2rem;border:0 none}#main_preferences .category{margin-left:.5rem}#main_preferences .category label{border:2px solid transparent;padding:.2rem .4rem;border-radius:5px}#main_preferences .category input[type=checkbox]:checked+label{border:2px solid var(--color-categories-item-border-selected)}#main_preferences table.table_engines th.name label{cursor:pointer}#main_preferences table.table_engines th.name .engine-tooltip{margin-top:1.8rem;right:calc((100% - 85em)/2 + 10em);max-width:40rem}#main_preferences table.table_engines th.name .engine-tooltip .engine-description{margin-top:.5rem}#main_preferences table.table_engines th.name .engine-tooltip .bang{margin:.3rem}#main_preferences table.table_engines .checkbox-col,#main_preferences table.table_engines .name,#main_preferences table.table_engines .shortcut{text-align:right}#main_preferences table.cookies{width:100%;direction:ltr}#main_preferences table.cookies th,#main_preferences table.cookies td{text-align:left;font-family:monospace;font-size:1rem;padding:.5em;vertical-align:top}#main_preferences table.cookies td:first-child{word-break:keep-all;width:14rem;padding-right:1rem}#main_preferences table.cookies td:last-child{word-break:break-all}#main_preferences table.cookies>tbody>tr:nth-child(2n)>th,#main_preferences table.cookies>tbody>tr:nth-child(2n)>td{background-color:var(--color-settings-tr-hover)}#main_preferences .preferences_back{background:none repeat scroll 0 0 var(--color-btn-background);color:var(--color-btn-font);border:0 none;border-radius:10px;cursor:pointer;display:inline-block;margin:2px 4px;padding:.7em}#main_preferences .preferences_back a{color:var(--color-settings-return-font)}#main_preferences .preferences_back a:first-letter{text-transform:uppercase}#main_preferences #toggle-all-engines-container{width:max-content;margin-left:auto}#main_preferences div.selectable_url pre{width:100%}#main_preferences #copy-hash-container{display:flex;align-items:center;gap:.5rem}#main_preferences #copy-hash-container div.selectable_url pre{width:auto;flex-grow:1}#main_preferences #pref-hash-input{width:100%}@media screen and (max-width: 79.75em){.preferences_back{clear:both}.engine-tooltip{right:10em!important}}#search{padding:0;margin:0}#search_header{padding-top:1.5em;padding-left:2em;padding-right:7rem;margin:0;background:var(--color-header-background);border-bottom:1px solid var(--color-header-border);display:grid;gap:1rem 1.2rem;grid-template-columns:3rem 1fr;grid-template-areas:"logo search" "spacer categories"}.category_checkbox,.category_button{display:inline-block;position:relative;margin-left:1rem;padding:0}.category_checkbox input{display:none}.category_checkbox label{cursor:pointer;padding:.2rem 0;display:inline-flex;text-transform:capitalize;font-size:.9em;border-bottom:2px solid transparent;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.category_checkbox label svg{padding-right:.2rem}.category_checkbox label div.category_name{margin:auto 0}.category_checkbox input[type=checkbox]:checked+label{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}button.category_button{background-color:inherit;color:var(--color-base-font);cursor:pointer;padding:.2rem 0;display:inline-flex;align-items:center;text-transform:capitalize;font-size:.9em;border:none;border-bottom:2px solid transparent}button.category_button svg{padding-right:.2rem}button.category_button.selected,button.category_button:active{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}.no-js #categories_container:has(button.category_button:focus-within) button.category_button.selected{color:var(--color-base-font);border-bottom:none}.no-js #categories_container:has(button.category_button:focus-within) button.category_button:focus-within{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}#search_logo{padding:.5rem 10px 0;grid-area:logo;display:flex;align-items:center;justify-content:center}#search_logo svg{flex:1;width:30px;height:30px;margin:.5rem 0 auto}.search_categories{grid-area:categories}.search_categories .help{display:none}.search_categories:hover .help{display:block;position:absolute;background:var(--color-base-background);padding:1rem .6rem .6rem 0;z-index:1000;width:100%;left:-.1rem}#search_view{padding:.5rem .3rem 0 .5rem;grid-area:search}body.results_endpoint #search_view{padding:.5rem 2.8rem 0 0}.search_box{border-radius:.8rem;width:44rem;display:inline-flex;flex-direction:row;white-space:nowrap;box-shadow:var(--color-search-shadow)}#clear_search{display:block;border-collapse:separate;box-sizing:border-box;width:1.8rem;margin:0;padding:.8rem .2rem;background:none repeat scroll 0 0 var(--color-search-background);border:none;outline:none;color:var(--color-search-font);font-size:1.1rem;z-index:1000}#clear_search:hover{color:var(--color-search-background-hover)}#clear_search.empty *,html.no-js #clear_search.hide_if_nojs{display:none}#q,#send_search{display:block;margin:0;padding:.8rem;background:none repeat scroll 0 0 var(--color-search-background);border:none;outline:none;color:var(--color-search-font);font-size:1.1rem;z-index:100}#q{width:100%;padding-right:1rem;padding-left:0!important;border-radius:0 .8rem .8rem 0}#q::-ms-clear,#q::-webkit-search-cancel-button{display:none}#send_search{border-radius:.8rem 0 0 .8rem}#send_search:hover{cursor:pointer;background-color:var(--color-search-background-hover);color:var(--color-search-background)}.no-js #clear_search,.no-js #send_search{width:auto!important;border-right:1px solid var(--color-search-border)}.search_filters{margin-top:.6rem;margin-left:0;margin-bottom:0;margin-right:10.6rem;display:flex;overflow-x:auto;overscroll-behavior-inline:contain}.search_filters select{background-color:inherit}.search_filters select:hover,.search_filters select:focus{color:var(--color-base-font)}@media screen and (max-width: 79.75em){#search_header{padding:1.5em .5rem 0;column-gap:.5rem}.search_filters{margin-top:.6rem;margin-left:0;margin-bottom:0;margin-right:3.5rem}#categories{font-size:90%;clear:both}}@media screen and (max-width: 79.75em) and (hover: none){#main_index #categories_container,#main_results #categories_container{width:max-content}#main_index #categories_container .category_checkbox,#main_results #categories_container .category_checkbox{display:inline-block;width:auto}#main_index #categories,#main_results #categories{width:100%;text-align:right;overflow:scroll hidden;-webkit-overflow-scrolling:touch}}@media screen and (max-width: 50em){#search_header{width:100%;margin:0;padding:.1rem 0 0;gap:0 0;grid-template-areas:"logo search" "categories categories"}.search_logo{padding:0}.search_box{width:98%;display:flex}#q{width:100%;flex:1}.search_filters{margin:0 10px;padding:.5rem 0}.category{display:inline-block;width:auto;margin:0}.category svg{display:none}.category_checkbox label,.category_button{padding:1rem!important;margin:0!important}#search_view:focus-within{display:block;background-color:var(--color-search-background);position:absolute;top:0;height:100%;width:100%;z-index:2000}#search_view:focus-within .search_box{border-bottom:1px solid var(--color-search-border);width:100%;border-radius:0;box-shadow:none}#search_view:focus-within .search_box #send_search{margin-left:0!important}#search_view:focus-within .search_box *{border:none;border-radius:0;box-shadow:none}#main_results #q:placeholder-shown~#send_search{margin-left:2.6rem;transition:margin .1s}}@media screen and (max-width: 20rem){#search_header{grid-template-areas:"search search" "categories categories"}#search_logo{display:none}}#categories{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}#categories::-webkit-scrollbar{width:0;height:0}#categories_container{position:relative}.favicon img{height:1.5rem;width:1.5rem;border-radius:10%;background-color:var(--color-favicon-background-color);border:1px solid var(--color-favicon-border-color);display:flex}@media screen and (min-width: 50em){.center-alignment-yes #main_results{--center-page-width: 48rem}}@media screen and (width >= 62rem){.center-alignment-yes #main_results{--center-page-width: 60rem}}@media screen and (min-width: 79.75em){.center-alignment-yes #main_results{--center-page-width: 73rem}}@media screen and (min-width: 50em) and (max-width: 79.75em){.center-alignment-yes #main_results #results{grid-template-columns:60% calc(40% - 5rem);margin-left:0;margin-right:0}.center-alignment-yes #main_results #urls{margin-right:3rem}.center-alignment-yes #main_results #sidebar{margin-left:1rem}.center-alignment-yes #main_results #backToTop{right:calc(60% + 1rem)}}@media screen and (min-width: 79.75em){.center-alignment-yes #main_results{display:flex;flex-direction:column;align-items:center}.center-alignment-yes #main_results #search{width:100%;display:flex;flex-direction:column;align-items:center}.center-alignment-yes #main_results #search_header{grid-template-columns:calc(50% - 4.5rem - var(--center-page-width) / 2) 3rem var(--center-page-width);grid-template-areas:"na logo search" "na spacer categories";column-gap:1.2rem;width:100%;padding-left:0;padding-right:0}.center-alignment-yes #main_results .search_filters{margin-right:.5rem;width:var(--center-page-width)}.center-alignment-yes #main_results #results{margin-left:2rem;margin-right:10rem}.center-alignment-yes #main_results #results.only_template_images,.center-alignment-yes #main_results #results.image-detail-open{align-self:flex-start}.center-alignment-yes #main_results #results:not(.only_template_images,.image-detail-open){margin-right:1.5rem;grid-template-columns:calc(var(--center-page-width) - 5rem - 25rem) 25rem}.center-alignment-yes #main_results #results:not(.only_template_images,.image-detail-open) #backToTop{right:calc(50% - 25rem - 5rem + 1rem + var(--center-page-width) / 2)}.center-alignment-yes #main_results #results .result .content{max-width:inherit}.center-alignment-yes #main_results #urls{margin-right:0}.center-alignment-yes #main_results #sidebar{margin-left:0}}.sxng-icon-set{display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scaleX(-1)}.sxng-icon-set-small{width:1rem;height:1rem;display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scaleX(-1)}.sxng-icon-set-big{width:1.5rem;height:1.5rem;display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scaleX(-1)}html{font-family:sans-serif;font-size:.9em;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;color:var(--color-base-font);background-color:var(--color-base-background);padding:0;margin:0;scroll-behavior:smooth}body,main{padding:0;margin:0}body{display:flex;flex-direction:column;height:100vh;margin:0}@supports (height: 100dvh){body{height:100dvh}}main{width:100%;margin-bottom:2rem;flex:1}.page_with_header{margin:2em auto;width:85em}footer{clear:both;min-height:4rem;padding:1rem 0;width:100%;text-align:center;background-color:var(--color-footer-background);border-top:1px solid var(--color-footer-border);overflow:hidden}footer p{font-size:.9em}.page_with_header .logo{height:40px}input[type=submit],#results button[type=submit],.button{padding:.7rem;display:inline-block;background:var(--color-btn-background);color:var(--color-btn-font);border-radius:10px;border:0;cursor:pointer}a{text-decoration:none;color:var(--color-url-font)}a:visited,a:visited .highlight{color:var(--color-url-visited-font)}article[data-vim-selected]{background:var(--color-result-vim-selected);border-right:.2rem solid var(--color-result-vim-arrow);border-radius:10px 0 0 10px}article.result-images[data-vim-selected]{background:var(--color-result-vim-arrow);border:none;border-radius:10px}article.result-images[data-vim-selected] .image_thumbnail{filter:opacity(60%)}article.result-images[data-vim-selected] span.title,article.result-images[data-vim-selected] span.source{color:var(--color-result-image-span-font-selected)}article[data-vim-selected].category-videos,article[data-vim-selected].category-news,article[data-vim-selected].category-map,article[data-vim-selected].category-music,article[data-vim-selected].category-files,article[data-vim-selected].category-social{border:1px solid var(--color-result-vim-arrow);border-radius:10px}.result{margin:.125rem 0;padding:1rem;box-sizing:border-box;width:100%;border-right:.2rem solid transparent}.result h3{font-size:1.2rem;word-wrap:break-word;margin:.4rem 0;padding:0}.result h3 a{color:var(--color-result-link-font);font-weight:400;font-size:1.1em}.result h3 a:visited{color:var(--color-result-link-visited-font)}.result h3 a:focus,.result h3 a:hover{text-decoration:underline;border:none;outline:none}.result .cache_link,.result .proxyfied_link{font-size:smaller!important;margin-left:.5rem}.result .content,.result .stat{font-size:.9em;margin:0;padding:0;max-width:54em;word-wrap:break-word;line-height:1.24}.result .content .highlight,.result .stat .highlight{color:var(--color-result-description-highlight-font);background:inherit;font-weight:700}.result .altlink a{font-size:.9em;margin:0 10px 0 0;padding:5px 10px;border-radius:5px;background:var(--color-show-btn-background);color:var(--color-show-btn-font);cursor:pointer}.result .altlink a:hover{background:var(--color-btn-background);color:var(--color-btn-font)}.result .codelines .highlight{color:inherit;background:inherit;font-weight:400}.result .url_header{display:flex;gap:.5rem}.result .url_wrapper{display:flex;align-items:center;font-size:1rem;color:var(--color-result-url-font);flex-flow:row nowrap;overflow:hidden;margin:0;padding:0}.result .url_wrapper .url_o1{white-space:nowrap;flex-shrink:1;padding-bottom:1px}.result .url_wrapper .url_o1 .url_i1{unicode-bidi:plaintext}.result .url_wrapper .url_o1:after{content:" ";width:1ch;display:inline-block}.result .url_wrapper .url_o2{overflow:hidden;white-space:nowrap;flex:0 1 content;text-align:right;padding-bottom:1px}.result .url_wrapper .url_o2 .url_i2{float:right}.result .published_date,.result .result_length,.result .result_views,.result .result_author,.result .result_shipping,.result .result_source_country{font-size:.8em;color:var(--color-result-publishdate-font)}.result .result_price{font-size:1.2em;color:var(--color-result-description-highlight-font)}.result img.thumbnail{float:right;padding-top:.6rem;padding-left:1rem;width:7rem;height:unset}.result .break{clear:both}.result-paper .attributes,.result-packages .attributes{display:table;border-spacing:.125rem}.result-paper .attributes div,.result-packages .attributes div{display:table-row}.result-paper .attributes div span,.result-packages .attributes div span{font-size:.9rem;margin-top:.25rem;display:table-cell}.result-paper .attributes div span time,.result-packages .attributes div span time{font-size:.9rem}.result-paper .attributes div span:first-child,.result-packages .attributes div span:first-child{color:var(--color-base-font);min-width:10rem}.result-paper .attributes div span:nth-child(2),.result-packages .attributes div span:nth-child(2){color:var(--color-result-publishdate-font)}.result-paper .content,.result-packages .content{margin-top:.25rem}.result-paper .comments,.result-packages .comments{font-size:.9rem;margin:.25rem 0 0;padding:0;word-wrap:break-word;line-height:1.24;font-style:italic}.result-packages .attributes{margin-top:.3rem}.template_group_images{display:flex;flex-wrap:wrap}.template_group_images:after{flex-grow:10;content:""}.category-videos,.category-news,.category-map,.category-music,.category-files,.category-social{border:1px solid var(--color-result-border);margin:0 .5rem 1rem!important;border-radius:10px}.category-social .image{width:auto!important;min-width:48px;min-height:48px;padding:0 5px 25px 0!important}.audio-control audio{width:100%;padding:10px 0 0}.embedded-content iframe{width:100%;padding:10px 0 0}.result-videos img.thumbnail{float:right;padding-top:.6rem;padding-left:1rem;width:20rem;height:unset}.result-videos .content{overflow:hidden}.result-videos .embedded-video iframe{width:100%;aspect-ratio:16 / 9;padding:10px 0 0}@supports not (aspect-ratio: 1 / 1){.result-videos .embedded-video iframe{height:25.3125rem}}.engines{float:left;display:flex;flex-wrap:wrap;justify-content:flex-end;color:var(--color-result-engines-font)}.engines span{font-size:smaller;margin-top:0;margin-bottom:0;margin-left:.5rem;margin-right:0}.small_font{font-size:.8em}.highlight{color:var(--color-result-link-font-highlight);background:inherit}.empty_element{font-style:italic}.result-images{flex-grow:1;padding:.5rem .5rem 3rem;margin:.25rem;border:none!important;height:12rem;width:unset}.result-images>a{position:relative;outline:none}.result-images img{margin:0;padding:0;border:none;height:100%;width:auto;object-fit:cover;vertical-align:bottom;background:var(--color-result-image-background)}.result-images .image_resolution{position:absolute;right:0;bottom:0;background:var(--color-image-resolution-background);padding:.3rem .5rem;font-size:.9rem;color:var(--color-image-resolution-font);border-top-left-radius:.3rem}.result-images span.title,.result-images span.source{display:block;position:absolute;width:100%;font-size:.9rem;color:var(--color-result-image-span-font);padding:.5rem 0 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.result-images span.source{padding:1.8rem 0 0;font-size:.7rem}.result-map img.image{float:left!important;height:100px!important;width:auto!important}.result-map table{font-size:.9em;width:auto;border-collapse:separate;border-spacing:0 .35rem}.result-map table th{font-weight:inherit;width:17rem;vertical-align:top;text-align:right}.result-map table td{vertical-align:top;text-align:right}.hidden{display:none!important}#results{margin-top:1rem;margin-left:2rem;margin-bottom:0;margin-right:10rem;display:grid;grid-template:"corrections sidebar" min-content "answers sidebar" min-content "urls sidebar" 1fr "pagination sidebar" min-content / 45rem 25rem;gap:0 5rem}#results #sidebar *:first-child{margin-top:0}#urls{padding:0;grid-area:urls}#apis .wrapper{display:flex}#suggestions .wrapper{display:flex;flex-flow:column;justify-content:flex-end}#suggestions .wrapper form{display:inline-block;flex:1 1 50%}#suggestions input,#infoboxes input{padding:0;margin:3px;font-size:.9em;display:inline-block;background:transparent;color:var(--color-result-search-url-font);cursor:pointer;width:100%;text-overflow:ellipsis;overflow:hidden;text-align:left}#suggestions input[type=submit],#infoboxes input[type=submit],#suggestions .infobox .url a,#infoboxes .infobox .url a{color:var(--color-result-link-font);text-decoration:none;font-size:.9rem}#suggestions input[type=submit]:hover,#infoboxes input[type=submit]:hover,#suggestions .infobox .url a:hover,#infoboxes .infobox .url a:hover{text-decoration:underline}#corrections{grid-area:corrections;display:flex;flex-flow:row wrap;margin:0 0 1em}#corrections h4,#corrections input[type=submit]{display:inline-block;padding:.5rem;margin:.5rem}#corrections input[type=submit]{font-size:.8rem;border-radius:5px}#infoboxes .title,#suggestions .title,#search_url .title,#engines_msg .title,#apis .title{margin:2em 0 .5em;color:var(--color-base-font)}summary.title{cursor:pointer;padding-top:1em}.sidebar-collapsible{border-top:1px solid var(--color-sidebar-border);padding-bottom:.5em}#sidebar-end-collapsible{border-bottom:1px solid var(--color-sidebar-border);width:100%}#answers{grid-area:answers;background:var(--color-answer-background);padding:1rem;margin:1rem 0;margin-top:0;color:var(--color-answer-font);border-radius:10px}#answers h4{display:none}#answers span{overflow-wrap:anywhere}#answers .answer{display:flex;flex-direction:column}#answers .answer-url{margin:5px 10px 10px auto}#infoboxes form{min-width:210px}#sidebar{grid-area:sidebar;word-wrap:break-word;color:var(--color-sidebar-font)}#sidebar .infobox{margin:10px 0;border:1px solid var(--color-sidebar-border);padding:1rem;font-size:.9em;border-radius:10px}#sidebar .infobox h2{margin:0 0 .5em}#sidebar .infobox img{max-width:100%;max-height:12em;display:block;margin:0 auto;padding:0}#sidebar .infobox dt{font-weight:700}#sidebar .infobox .attributes dl{margin:.5em 0}#sidebar .infobox .attributes dt{display:inline;margin:.5em 0 .5em .25em;padding:0}#sidebar .infobox .attributes dd{display:inline;margin:.5em 0;padding:0}#sidebar .infobox input{font-size:1em}#sidebar .infobox br,#sidebar .infobox .attributes,#sidebar .infobox .urls{clear:both}#apis input{font-size:.9em;margin:0 10px 0 0;padding:5px 10px;border-radius:5px;background:var(--color-show-btn-background);color:var(--color-show-btn-font);cursor:pointer}#apis input:hover{background:var(--color-btn-background);color:var(--color-btn-font)}#engines_msg .engine-name{width:10rem}#engines_msg .response-error{color:var(--color-error)}#engines_msg .bar-chart-value{width:auto}#search_url div.selectable_url pre{float:left;width:200em}#search_url button#copy_url{float:right;padding:.4rem;margin-left:.5rem;border-radius:.3rem;display:none}#links_on_top{position:absolute;left:1rem;text-align:left;top:2.7rem;padding:0;border:0;display:flex;align-items:center;font-size:1em;color:var(--color-search-font)}#links_on_top a{display:flex;align-items:center;margin-left:1em}#links_on_top a svg{font-size:1.2em;margin-left:.125em}#links_on_top a,#links_on_top a:link *,#links_on_top a:hover *,#links_on_top a:visited *,#links_on_top a:active *{color:var(--color-search-font)}#pagination{grid-area:pagination}#pagination br{clear:both}.numbered_pagination{display:flex;flex-direction:row;justify-content:center;align-items:center;overflow:hidden}.page_number{background:transparent!important;color:var(--color-result-link-font)!important;text-decoration:underline}.page_number_current{background:transparent;color:var(--color-result-link-visited-font);border:none}#backToTop{border:1px solid var(--color-backtotop-border);margin:0;padding:0;font-size:1em;background:var(--color-backtotop-background);position:fixed;bottom:8rem;right:56.3rem;transition:opacity .5s;opacity:0;pointer-events:none;border-radius:10px}#backToTop a{display:block;margin:0;padding:.7em}#backToTop a,#backToTop a:visited,#backToTop a:hover,#backToTop a:active{color:var(--color-backtotop-font)}#results.scrolling #backToTop{opacity:1;pointer-events:all}@media screen and (width <= calc(79.75em - .5px)){#links_on_top span{display:none}}@media screen and (width <= 52rem){body.results_endpoint #links_on_top .link_on_top_about,body.results_endpoint #links_on_top .link_on_top_donate{display:none}}@media screen and (min-width: 50em) and (max-width: 79.75em){.center-alignment-no #links_on_top span{display:none}.center-alignment-no .page_with_header{margin:2rem .5rem;width:auto}.center-alignment-no #infoboxes{position:inherit;max-width:inherit}.center-alignment-no #infoboxes .infobox{clear:both}.center-alignment-no #infoboxes .infobox img{float:right;max-width:10em;margin:.5em 0 .5em .5em}.center-alignment-no #sidebar{margin:0 .5rem .125rem;padding:0;float:none;border:none;width:auto}.center-alignment-no #sidebar input{border:0}.center-alignment-no .result .thumbnail{max-width:98%}.center-alignment-no .result .url span.url{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%}.center-alignment-no .result .engines{float:left;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:3px 0 0}.center-alignment-no .result-images{border-bottom:none!important}.center-alignment-no .image_result,.center-alignment-no .image_result img{max-width:98%}.center-alignment-no #backToTop{display:none}.center-alignment-no #pagination{margin:2rem 0 0!important}.center-alignment-no #main_results div#results{margin:0 auto;justify-content:center;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 45rem;gap:0}}#main_results div#results.only_template_images{margin:1rem .5rem 0;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 100%;gap:0}#main_results div#results.only_template_images #sidebar{display:none}#main_results div#results.only_template_images #urls{margin:0;display:flex;flex-wrap:wrap}#main_results div#results.only_template_images #urls:after{flex-grow:10;content:""}#main_results div#results.only_template_images #backToTop{right:auto;left:1rem}#main_results div#results.only_template_images #pagination{margin-left:4rem}@media screen and (max-width: 50em){#links_on_top span{display:none}.page_with_header{margin:2rem .5rem;width:auto}#infoboxes{position:inherit;max-width:inherit}#infoboxes .infobox{clear:both}#infoboxes .infobox img{float:right;max-width:10em;margin:.5em 0 .5em .5em}#sidebar{margin:0 .5rem .125rem;padding:0;float:none;border:none;width:auto}#sidebar input{border:0}.result .thumbnail{max-width:98%}.result .url span.url{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%}.result .engines{float:left;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:3px 0 0}.result-images{border-bottom:none!important}.image_result,.image_result img{max-width:98%}#backToTop{display:none}#pagination{margin:2rem 0 0!important}#main_results div#results{margin:0 auto;justify-content:center;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 45rem;gap:0}html{background-color:var(--color-base-background-mobile)}#main_results div#results{grid-template-columns:100%;margin:0 auto}#links_on_top{top:1.4rem;left:10px}#main_index #links_on_top{top:.5rem;left:.5rem}#results{margin:0;padding:0}#pagination{margin:2rem 1rem 0!important}article[data-vim-selected]{border:1px solid var(--color-result-vim-arrow);border-radius:10px}.result{background:var(--color-result-background);border:1px solid var(--color-result-background);margin:1rem 2%;width:96%;border-radius:10px}.result-images{margin:0;height:10rem;background:var(--color-base-background-mobile);width:unset}.infobox{border:none!important;background-color:var(--color-sidebar-background)}.numbered_pagination{display:none}.result-paper .attributes,.result-packages .attributes,.result-paper .attributes div,.result-packages .attributes div{display:block}.result-paper .attributes div span,.result-packages .attributes div span{display:inline}.result-paper .attributes div span:first-child,.result-packages .attributes div span:first-child{font-weight:700}.result-paper .attributes div span:nth-child(2),.result-packages .attributes div span:nth-child(2){margin-right:.5rem}}@media screen and (max-width: 35em){.result-videos img.thumbnail{float:none!important}.result-videos .content{overflow:inherit}}pre code{white-space:pre-wrap}#main_results .result-keyvalue caption{padding:.8rem .5rem;font-style:italic;caption-side:bottom;background-color:var(--color-result-keyvalue-table)}#main_results .result-keyvalue .col-key{width:25%}#main_results .result-keyvalue table{word-break:break-word;table-layout:fixed;width:100%;background-color:var(--color-result-keyvalue-table)}#main_results .result-keyvalue tr.odd{background-color:var(--color-result-keyvalue-odd)}#main_results .result-keyvalue tr.even{background-color:var(--color-result-keyvalue-even)}#main_results .result-keyvalue th,#main_results .result-keyvalue td{padding:.3rem .5rem}#q,#sidebar .infobox dt bdi{direction:rtl}#urls{direction:initial;text-align:right}#urls .result .url_header{direction:rtl}#urls .result .url_wrapper{justify-content:end}#main_results div#results.only_template_images #urls{direction:rtl}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p{direction:rtl}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url{direction:ltr}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url span{direction:rtl;float:right}@supports ((background-position-x: 100%) and ((appearance: none) or (-webkit-appearance: none) or (-moz-appearance: none))){select{border-width:0 0 0 2rem;background-position-x:-2rem}}#vim-hotkeys-help table{direction:ltr;text-align:left}#main_preferences h1,#main_stats h1{background-position-x:100%}.bar-chart-serie1,.bar-chart-serie2{float:right}.engine-stats .engine-name,.engine-stats .engine-score,.engine-stats .result-count,.engine-stats .response-time,.engine-stats .engine-reliability{text-align:right} +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}:root{--color-base-font: #444;--color-base-font-rgb: 68, 68, 68;--color-base-background: #fff;--color-base-background-mobile: #f2f5f8;--color-url-font: #334999;--color-url-visited-font: #9822c3;--color-header-background: #fdfbff;--color-header-border: #ddd;--color-footer-background: #fdfbff;--color-footer-border: #ddd;--color-sidebar-border: #ddd;--color-sidebar-font: #000;--color-sidebar-background: #fff;--color-backtotop-font: #444;--color-backtotop-border: #ddd;--color-backtotop-background: #fff;--color-btn-background: #3050ff;--color-btn-font: #fff;--color-show-btn-background: #bbb;--color-show-btn-font: #000;--color-search-border: #bbb;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #fff;--color-search-font: #222;--color-search-background-hover: #3050ff;--color-error: #db3434;--color-error-background: #fae1e1;--color-warning: #dbba34;--color-warning-background: #faf5e1;--color-success: #42db34;--color-success-background: #e3fae1;--color-categories-item-selected-font: #3050ff;--color-categories-item-border-selected: #3050ff;--color-autocomplete-font: #000;--color-autocomplete-border: #bbb;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #fff;--color-autocomplete-background-hover: #e3e3e3;--color-answer-font: #444;--color-answer-background: #fff;--color-result-keyvalue-col-table: #fdfbff;--color-result-keyvalue-odd: #fdfbff;--color-result-keyvalue-even: #fff;--color-result-background: #fff;--color-result-border: #ddd;--color-result-url-font: #000;--color-result-vim-selected: #f7f7f7;--color-result-vim-arrow: #000bbb;--color-result-description-highlight-font: #000;--color-result-link-font: #000bbb;--color-result-link-font-highlight: #000bbb;--color-result-link-visited-font: #9822c3;--color-result-publishdate-font: #777;--color-result-engines-font: #545454;--color-result-search-url-border: #ddd;--color-result-search-url-font: #000;--color-result-image-span-font: #444;--color-result-image-span-font-selected: #fff;--color-result-image-background: #fff;--color-settings-tr-hover: #ebebeb;--color-settings-engine-description-font: #545454;--color-settings-table-group-background: #0001;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #242424;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #545454;--color-toolkit-kbd-font: #fff;--color-toolkit-kbd-background: #000;--color-toolkit-dialog-border: #ddd;--color-toolkit-dialog-background: #fff;--color-toolkit-tabs-label-border: #fff;--color-toolkit-tabs-section-border: #ddd;--color-toolkit-select-background: #e1e1e1;--color-toolkit-select-border: #ddd;--color-toolkit-select-background-hover: #bbb;--color-toolkit-input-text-font: #222;--color-toolkit-checkbox-onoff-off-background: #ddd;--color-toolkit-checkbox-onoff-on-background: #ddd;--color-toolkit-checkbox-onoff-on-mark-background: #3050ff;--color-toolkit-checkbox-onoff-on-mark-color: #fff;--color-toolkit-checkbox-onoff-off-mark-background: #aaa;--color-toolkit-checkbox-onoff-off-mark-color: #fff;--color-toolkit-checkbox-label-background: #ddd;--color-toolkit-checkbox-label-border: #ddd;--color-toolkit-checkbox-input-border: #3050ff;--color-toolkit-engine-tooltip-border: #ddd;--color-toolkit-engine-tooltip-background: #fff;--color-toolkit-loader-border: rgba(0, 0, 0, .2);--color-toolkit-loader-borderleft: rgba(255, 255, 255, 0);--color-doc-code: #003;--color-doc-code-background: #ddeaff;--color-bar-chart-primary: #5bc0de;--color-bar-chart-secondary: #deb15b;--color-image-resolution-background: rgba(0, 0, 0, .5);--color-image-resolution-font: #fff;--color-loading-indicator: rgba(255, 255, 255, .2);--color-loading-indicator-gap: #fff;--color-line-number: #64708d;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}@media (prefers-color-scheme: dark){:root.theme-auto{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}}:root.theme-dark{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}:root.theme-black{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc;--color-base-background: #000;--color-base-background-mobile: #000;--color-header-background: #000;--color-footer-background: #000;--color-sidebar-background: #000}.code-highlight pre{line-height:100%}.code-highlight td.linenos .normal,.code-highlight span.linenos{color:inherit;background-color:transparent;padding-left:5px;padding-right:5px}.code-highlight td.linenos .special,.code-highlight span.linenos.special{color:#000;background-color:#ffffc0;padding-left:5px;padding-right:5px}.code-highlight .hll{background-color:#ffc}.code-highlight .c{color:#3d7b7b;font-style:italic}.code-highlight .err{border:1px solid #F00}.code-highlight .k{color:green;font-weight:700}.code-highlight .o{color:#666}.code-highlight .ch,.code-highlight .cm{color:#3d7b7b;font-style:italic}.code-highlight .cp{color:#9c6500}.code-highlight .cpf,.code-highlight .c1,.code-highlight .cs{color:#3d7b7b;font-style:italic}.code-highlight .gd{color:#a00000}.code-highlight .ge{font-style:italic}.code-highlight .ges{font-weight:700;font-style:italic}.code-highlight .gr{color:#e40000}.code-highlight .gh{color:navy;font-weight:700}.code-highlight .gi{color:#008400}.code-highlight .go{color:#717171}.code-highlight .gp{color:navy;font-weight:700}.code-highlight .gs{font-weight:700}.code-highlight .gu{color:purple;font-weight:700}.code-highlight .gt{color:#04d}.code-highlight .kc,.code-highlight .kd,.code-highlight .kn{color:green;font-weight:700}.code-highlight .kp{color:green}.code-highlight .kr{color:green;font-weight:700}.code-highlight .kt{color:#b00040}.code-highlight .m{color:#666}.code-highlight .s{color:#ba2121}.code-highlight .na{color:#687822}.code-highlight .nb{color:green}.code-highlight .nc{color:#00f;font-weight:700}.code-highlight .no{color:#800}.code-highlight .nd{color:#a2f}.code-highlight .ni{color:#717171;font-weight:700}.code-highlight .ne{color:#cb3f38;font-weight:700}.code-highlight .nf{color:#00f}.code-highlight .nl{color:#767600}.code-highlight .nn{color:#00f;font-weight:700}.code-highlight .nt{color:green;font-weight:700}.code-highlight .nv{color:#19177c}.code-highlight .ow{color:#a2f;font-weight:700}.code-highlight .w{color:#bbb}.code-highlight .mb,.code-highlight .mf,.code-highlight .mh,.code-highlight .mi,.code-highlight .mo{color:#666}.code-highlight .sa,.code-highlight .sb,.code-highlight .sc,.code-highlight .dl{color:#ba2121}.code-highlight .sd{color:#ba2121;font-style:italic}.code-highlight .s2{color:#ba2121}.code-highlight .se{color:#aa5d1f;font-weight:700}.code-highlight .sh{color:#ba2121}.code-highlight .si{color:#a45a77;font-weight:700}.code-highlight .sx{color:green}.code-highlight .sr{color:#a45a77}.code-highlight .s1{color:#ba2121}.code-highlight .ss{color:#19177c}.code-highlight .bp{color:green}.code-highlight .fm{color:#00f}.code-highlight .vc,.code-highlight .vg,.code-highlight .vi,.code-highlight .vm{color:#19177c}.code-highlight .il{color:#666}.codelines{margin:.125rem 0 0;padding:1rem 0 0}.code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}.code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}.code-highlight .linenos::selection{background:transparent}.code-highlight .linenos::-moz-selection{background:transparent}.code-highlight span.linenos{color:var(--color-line-number)}@media (prefers-color-scheme: dark){:root.theme-auto .code-highlight pre{line-height:100%}:root.theme-auto .code-highlight td.linenos .normal{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight span.linenos{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight td.linenos .special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight span.linenos.special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight .hll{background-color:#6e7681}:root.theme-auto .code-highlight .c{color:#7e8aa1}:root.theme-auto .code-highlight .err{color:#f88f7f}:root.theme-auto .code-highlight .esc{color:#d4d2c8}:root.theme-auto .code-highlight .g{color:#d4d2c8}:root.theme-auto .code-highlight .k{color:#ffad66}:root.theme-auto .code-highlight .l{color:#d5ff80}:root.theme-auto .code-highlight .n{color:#d4d2c8}:root.theme-auto .code-highlight .o{color:#ffad66}:root.theme-auto .code-highlight .x{color:#d4d2c8}:root.theme-auto .code-highlight .p{color:#d4d2c8}:root.theme-auto .code-highlight .ch{color:#f88f7f;font-style:italic}:root.theme-auto .code-highlight .cm{color:#7e8aa1}:root.theme-auto .code-highlight .cp{color:#ffad66;font-weight:700}:root.theme-auto .code-highlight .cpf{color:#7e8aa1}:root.theme-auto .code-highlight .c1{color:#7e8aa1}:root.theme-auto .code-highlight .cs{color:#7e8aa1;font-style:italic}:root.theme-auto .code-highlight .gd{color:#f88f7f;background-color:#3d1e20}:root.theme-auto .code-highlight .ge{color:#d4d2c8;font-style:italic}:root.theme-auto .code-highlight .ges{color:#d4d2c8}:root.theme-auto .code-highlight .gr{color:#f88f7f}:root.theme-auto .code-highlight .gh{color:#d4d2c8}:root.theme-auto .code-highlight .gi{color:#6ad4af;background-color:#19362c}:root.theme-auto .code-highlight .go{color:#7e8aa1}:root.theme-auto .code-highlight .gp{color:#d4d2c8}:root.theme-auto .code-highlight .gs{color:#d4d2c8;font-weight:700}:root.theme-auto .code-highlight .gu{color:#d4d2c8}:root.theme-auto .code-highlight .gt{color:#f88f7f}:root.theme-auto .code-highlight .kc{color:#ffad66}:root.theme-auto .code-highlight .kd{color:#ffad66}:root.theme-auto .code-highlight .kn{color:#ffad66}:root.theme-auto .code-highlight .kp{color:#ffad66}:root.theme-auto .code-highlight .kr{color:#ffad66}:root.theme-auto .code-highlight .kt{color:#73d0ff}:root.theme-auto .code-highlight .ld{color:#d5ff80}:root.theme-auto .code-highlight .m{color:#dfbfff}:root.theme-auto .code-highlight .s{color:#d5ff80}:root.theme-auto .code-highlight .na{color:#ffd173}:root.theme-auto .code-highlight .nb{color:#ffd173}:root.theme-auto .code-highlight .nc{color:#73d0ff}:root.theme-auto .code-highlight .no{color:#ffd173}:root.theme-auto .code-highlight .nd{color:#7e8aa1;font-weight:700;font-style:italic}:root.theme-auto .code-highlight .ni{color:#95e6cb}:root.theme-auto .code-highlight .ne{color:#73d0ff}:root.theme-auto .code-highlight .nf{color:#ffd173}:root.theme-auto .code-highlight .nl{color:#d4d2c8}:root.theme-auto .code-highlight .nn{color:#d4d2c8}:root.theme-auto .code-highlight .nx{color:#d4d2c8}:root.theme-auto .code-highlight .py{color:#ffd173}:root.theme-auto .code-highlight .nt{color:#5ccfe6}:root.theme-auto .code-highlight .nv{color:#d4d2c8}:root.theme-auto .code-highlight .ow{color:#ffad66}:root.theme-auto .code-highlight .pm{color:#d4d2c8}:root.theme-auto .code-highlight .w{color:#d4d2c8}:root.theme-auto .code-highlight .mb{color:#dfbfff}:root.theme-auto .code-highlight .mf{color:#dfbfff}:root.theme-auto .code-highlight .mh{color:#dfbfff}:root.theme-auto .code-highlight .mi{color:#dfbfff}:root.theme-auto .code-highlight .mo{color:#dfbfff}:root.theme-auto .code-highlight .sa{color:#f29e74}:root.theme-auto .code-highlight .sb{color:#d5ff80}:root.theme-auto .code-highlight .sc{color:#d5ff80}:root.theme-auto .code-highlight .dl{color:#d5ff80}:root.theme-auto .code-highlight .sd{color:#7e8aa1}:root.theme-auto .code-highlight .s2{color:#d5ff80}:root.theme-auto .code-highlight .se{color:#95e6cb}:root.theme-auto .code-highlight .sh{color:#d5ff80}:root.theme-auto .code-highlight .si{color:#95e6cb}:root.theme-auto .code-highlight .sx{color:#95e6cb}:root.theme-auto .code-highlight .sr{color:#95e6cb}:root.theme-auto .code-highlight .s1{color:#d5ff80}:root.theme-auto .code-highlight .ss{color:#dfbfff}:root.theme-auto .code-highlight .bp{color:#5ccfe6}:root.theme-auto .code-highlight .fm{color:#ffd173}:root.theme-auto .code-highlight .vc{color:#d4d2c8}:root.theme-auto .code-highlight .vg{color:#d4d2c8}:root.theme-auto .code-highlight .vi{color:#d4d2c8}:root.theme-auto .code-highlight .vm{color:#d4d2c8}:root.theme-auto .code-highlight .il{color:#dfbfff}:root.theme-auto .code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}:root.theme-auto .code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}:root.theme-auto .code-highlight .linenos::selection{background:transparent}:root.theme-auto .code-highlight .linenos::-moz-selection{background:transparent}:root.theme-auto .code-highlight span.linenos{color:var(--color-line-number)}}:root.theme-dark .code-highlight pre{line-height:100%}:root.theme-dark .code-highlight td.linenos .normal{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight span.linenos{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight td.linenos .special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight span.linenos.special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight .hll{background-color:#6e7681}:root.theme-dark .code-highlight .c{color:#7e8aa1}:root.theme-dark .code-highlight .err{color:#f88f7f}:root.theme-dark .code-highlight .esc{color:#d4d2c8}:root.theme-dark .code-highlight .g{color:#d4d2c8}:root.theme-dark .code-highlight .k{color:#ffad66}:root.theme-dark .code-highlight .l{color:#d5ff80}:root.theme-dark .code-highlight .n{color:#d4d2c8}:root.theme-dark .code-highlight .o{color:#ffad66}:root.theme-dark .code-highlight .x{color:#d4d2c8}:root.theme-dark .code-highlight .p{color:#d4d2c8}:root.theme-dark .code-highlight .ch{color:#f88f7f;font-style:italic}:root.theme-dark .code-highlight .cm{color:#7e8aa1}:root.theme-dark .code-highlight .cp{color:#ffad66;font-weight:700}:root.theme-dark .code-highlight .cpf{color:#7e8aa1}:root.theme-dark .code-highlight .c1{color:#7e8aa1}:root.theme-dark .code-highlight .cs{color:#7e8aa1;font-style:italic}:root.theme-dark .code-highlight .gd{color:#f88f7f;background-color:#3d1e20}:root.theme-dark .code-highlight .ge{color:#d4d2c8;font-style:italic}:root.theme-dark .code-highlight .ges{color:#d4d2c8}:root.theme-dark .code-highlight .gr{color:#f88f7f}:root.theme-dark .code-highlight .gh{color:#d4d2c8}:root.theme-dark .code-highlight .gi{color:#6ad4af;background-color:#19362c}:root.theme-dark .code-highlight .go{color:#7e8aa1}:root.theme-dark .code-highlight .gp{color:#d4d2c8}:root.theme-dark .code-highlight .gs{color:#d4d2c8;font-weight:700}:root.theme-dark .code-highlight .gu{color:#d4d2c8}:root.theme-dark .code-highlight .gt{color:#f88f7f}:root.theme-dark .code-highlight .kc{color:#ffad66}:root.theme-dark .code-highlight .kd{color:#ffad66}:root.theme-dark .code-highlight .kn{color:#ffad66}:root.theme-dark .code-highlight .kp{color:#ffad66}:root.theme-dark .code-highlight .kr{color:#ffad66}:root.theme-dark .code-highlight .kt{color:#73d0ff}:root.theme-dark .code-highlight .ld{color:#d5ff80}:root.theme-dark .code-highlight .m{color:#dfbfff}:root.theme-dark .code-highlight .s{color:#d5ff80}:root.theme-dark .code-highlight .na{color:#ffd173}:root.theme-dark .code-highlight .nb{color:#ffd173}:root.theme-dark .code-highlight .nc{color:#73d0ff}:root.theme-dark .code-highlight .no{color:#ffd173}:root.theme-dark .code-highlight .nd{color:#7e8aa1;font-weight:700;font-style:italic}:root.theme-dark .code-highlight .ni{color:#95e6cb}:root.theme-dark .code-highlight .ne{color:#73d0ff}:root.theme-dark .code-highlight .nf{color:#ffd173}:root.theme-dark .code-highlight .nl{color:#d4d2c8}:root.theme-dark .code-highlight .nn{color:#d4d2c8}:root.theme-dark .code-highlight .nx{color:#d4d2c8}:root.theme-dark .code-highlight .py{color:#ffd173}:root.theme-dark .code-highlight .nt{color:#5ccfe6}:root.theme-dark .code-highlight .nv{color:#d4d2c8}:root.theme-dark .code-highlight .ow{color:#ffad66}:root.theme-dark .code-highlight .pm{color:#d4d2c8}:root.theme-dark .code-highlight .w{color:#d4d2c8}:root.theme-dark .code-highlight .mb{color:#dfbfff}:root.theme-dark .code-highlight .mf{color:#dfbfff}:root.theme-dark .code-highlight .mh{color:#dfbfff}:root.theme-dark .code-highlight .mi{color:#dfbfff}:root.theme-dark .code-highlight .mo{color:#dfbfff}:root.theme-dark .code-highlight .sa{color:#f29e74}:root.theme-dark .code-highlight .sb{color:#d5ff80}:root.theme-dark .code-highlight .sc{color:#d5ff80}:root.theme-dark .code-highlight .dl{color:#d5ff80}:root.theme-dark .code-highlight .sd{color:#7e8aa1}:root.theme-dark .code-highlight .s2{color:#d5ff80}:root.theme-dark .code-highlight .se{color:#95e6cb}:root.theme-dark .code-highlight .sh{color:#d5ff80}:root.theme-dark .code-highlight .si{color:#95e6cb}:root.theme-dark .code-highlight .sx{color:#95e6cb}:root.theme-dark .code-highlight .sr{color:#95e6cb}:root.theme-dark .code-highlight .s1{color:#d5ff80}:root.theme-dark .code-highlight .ss{color:#dfbfff}:root.theme-dark .code-highlight .bp{color:#5ccfe6}:root.theme-dark .code-highlight .fm{color:#ffd173}:root.theme-dark .code-highlight .vc{color:#d4d2c8}:root.theme-dark .code-highlight .vg{color:#d4d2c8}:root.theme-dark .code-highlight .vi{color:#d4d2c8}:root.theme-dark .code-highlight .vm{color:#d4d2c8}:root.theme-dark .code-highlight .il{color:#dfbfff}:root.theme-dark .code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}:root.theme-dark .code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}:root.theme-dark .code-highlight .linenos::selection{background:transparent}:root.theme-dark .code-highlight .linenos::-moz-selection{background:transparent}:root.theme-dark .code-highlight span.linenos{color:var(--color-line-number)}html.no-js .hide_if_nojs,html.js .show_if_nojs{display:none}.center{text-align:center}.right{float:right}.left{float:left}.invisible{display:none!important}.list-unstyled{list-style-type:none}.list-unstyled li{margin-top:4px;margin-bottom:4px}.danger{background-color:var(--color-error-background)}.warning{background:var(--color-warning-background)}.success{background:var(--color-success-background)}.badge{display:inline-block;color:var(--color-toolkit-badge-font);background-color:var(--color-toolkit-badge-background);text-align:center;white-space:nowrap;vertical-align:baseline;min-width:10px;padding:1px 5px;border-radius:5px}kbd{padding:2px 4px;margin:1px;font-size:90%;color:var(--color-toolkit-kbd-font);background:var(--color-toolkit-kbd-background)}table{width:100%}table.striped tr{border-bottom:1px solid var(--color-settings-tr-hover)}th{padding:.4em}td{padding:0 4px}tr:hover{background:var(--color-settings-tr-hover)!important}div.selectable_url{display:block;border:1px solid var(--color-result-search-url-border);padding:4px;color:var(--color-result-search-url-font);margin:.1em;overflow:hidden;height:1.2em;line-height:1.2em;border-radius:5px}div.selectable_url pre{display:block;font-size:.8em;word-break:break-all;margin:.1em;-webkit-user-select:all;user-select:all}.dialog-error{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:right;border-radius:10px;color:var(--color-error);background:var(--color-error-background);border-color:var(--color-error)}.dialog-error .close{float:left;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-error ul,.dialog-error ol,.dialog-error p{margin:1px 0 0}.dialog-error table{width:auto}.dialog-error tr{vertical-align:text-top}.dialog-error tr:hover{background:transparent!important}.dialog-error td{padding:0 1em 0 0;padding-left:1rem;padding-bottom:0;padding-right:0}.dialog-error h4{margin-top:.3em;margin-bottom:.3em}.dialog-error-block{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:right;border-radius:10px;display:block;color:var(--color-error);background:var(--color-error-background);border-color:var(--color-error)}.dialog-error-block .close{float:left;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-error-block ul,.dialog-error-block ol,.dialog-error-block p{margin:1px 0 0}.dialog-error-block table{width:auto}.dialog-error-block tr{vertical-align:text-top}.dialog-error-block tr:hover{background:transparent!important}.dialog-error-block td{padding:0 1em 0 0;padding-left:1rem;padding-bottom:0;padding-right:0}.dialog-error-block h4{margin-top:.3em;margin-bottom:.3em}.dialog-warning{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:right;border-radius:10px;color:var(--color-warning);background:var(--color-warning-background);border-color:var(--color-warning)}.dialog-warning .close{float:left;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-warning ul,.dialog-warning ol,.dialog-warning p{margin:1px 0 0}.dialog-warning table{width:auto}.dialog-warning tr{vertical-align:text-top}.dialog-warning tr:hover{background:transparent!important}.dialog-warning td{padding:0 1em 0 0;padding-left:1rem;padding-bottom:0;padding-right:0}.dialog-warning h4{margin-top:.3em;margin-bottom:.3em}.dialog-modal{position:relative;display:flex;padding:1rem;border:1px solid var(--color-toolkit-dialog-border);text-align:right;border-radius:10px;display:block;background:var(--color-toolkit-dialog-background);position:fixed;top:50%;left:50%;margin:0 auto;transform:translate(-50%,-50%);z-index:5000}.dialog-modal .close{float:left;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-modal ul,.dialog-modal ol,.dialog-modal p{margin:1px 0 0}.dialog-modal table{width:auto}.dialog-modal tr{vertical-align:text-top}.dialog-modal tr:hover{background:transparent!important}.dialog-modal td{padding:0 1em 0 0;padding-left:1rem;padding-bottom:0;padding-right:0}.dialog-modal h4{margin-top:.3em;margin-bottom:.3em}.dialog-modal h3{margin-top:0}.btn-collapse{cursor:pointer}.scrollx{overflow:auto hidden;display:block;padding:0;margin:0;border:none}.tabs .tabs>label{font-size:90%}ul.tabs{border-bottom:1px solid var(--color-toolkit-tabs-section-border);list-style:none;padding-left:0}ul.tabs li{display:flex}.tabs{display:flex;flex-wrap:wrap;width:100%;min-width:100%}.tabs>*{order:2}.tabs>input[type=radio]{display:none}.tabs>label,.tabs>li>a{order:1;padding:.7em;margin:0 .7em;letter-spacing:.5px;text-transform:uppercase;border:solid var(--color-toolkit-tabs-label-border);border-width:0 0 2px 0;color:unset;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:pointer}.tabs>label.active,.tabs>li>a.active{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font)}.tabs>label:hover,.tabs>li>a:hover{border-bottom:2px solid var(--color-categories-item-border-selected)}.tabs>section{min-width:100%;padding:.7rem 0;box-sizing:border-box;border-top:1px solid var(--color-toolkit-tabs-section-border);display:none}.tabs>label:last-of-type{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font);letter-spacing:-.1px}.tabs>section:last-of-type{display:block}html body .tabs>input:checked~section{display:none}html body .tabs>input:checked~label{position:inherited;background:inherit;border-bottom:2px solid transparent;font-weight:400;color:inherit}html body .tabs>input:checked~label:hover{border-bottom:2px solid var(--color-categories-item-border-selected)}html body .tabs>input:checked+label{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font)}html body .tabs>input:checked+label+section{display:block}select{height:2.4rem;margin-top:0;margin-left:1rem;margin-bottom:0;margin-right:0;padding:.2rem!important;color:var(--color-search-font);font-size:.9rem;z-index:100}select:hover,select:focus{cursor:pointer}@supports ((background-position-x: 100%) and ((appearance: none) or (-webkit-appearance: none) or (-moz-appearance: none))){select{appearance:none;-webkit-appearance:none;-moz-appearance:none;border-width:0 2rem 0 0;border-color:transparent;background:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E) no-repeat;background-position-x:calc(100% + 2rem);background-size:2rem;background-origin:content-box;background-color:var(--color-toolkit-select-background);outline:medium none;text-overflow:ellipsis;border-radius:5px}select:hover,select:focus{background-color:var(--color-toolkit-select-background-hover)}select option{background-color:var(--color-base-background)}@media (prefers-color-scheme: dark){html.theme-auto select,html.theme-dark select{background-image:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20fill%3D%22%23ddd%22%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E)}}html.theme-dark select{background-image:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20fill%3D%22%23ddd%22%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E)}}input.checkbox-onoff[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;display:inline-block;width:2.5em;height:.7em;box-shadow:none!important;margin:0 16px;border-radius:10px;position:relative}input.checkbox-onoff[type=checkbox]:focus,input.checkbox-onoff[type=checkbox]:hover{outline:none}input.checkbox-onoff[type=checkbox]:focus:after{content:"";position:absolute;width:3.5em;height:1.65em;border:1px solid var(--color-btn-background);border-radius:12px;box-shadow:var(--color-btn-background) 0 0 3px;z-index:1200;top:-.55em;left:-.6em}input.checkbox-onoff[type=checkbox]:before{position:absolute;top:-.5em;display:flex;justify-content:center;align-items:center;font-size:.75em;width:1.875em;height:1.875em;border-radius:50%}input.checkbox-onoff[type=checkbox],input.checkbox-onoff.reversed-checkbox[type=checkbox]:checked{background:var(--color-toolkit-checkbox-onoff-off-background)}input.checkbox-onoff[type=checkbox]:before,input.checkbox-onoff.reversed-checkbox[type=checkbox]:checked:before{left:-.5em;content:"✕";color:var(--color-toolkit-checkbox-onoff-off-mark-color);background:var(--color-toolkit-checkbox-onoff-off-mark-background)}input.checkbox-onoff[type=checkbox]:checked,input.checkbox-onoff.reversed-checkbox[type=checkbox]{background:var(--color-toolkit-checkbox-onoff-on-background)}input.checkbox-onoff[type=checkbox]:checked:before,input.checkbox-onoff.reversed-checkbox[type=checkbox]:before{left:calc(100% - 1.5em);content:"✓";color:var(--color-toolkit-checkbox-onoff-on-mark-color);background:var(--color-toolkit-checkbox-onoff-on-mark-background)}@supports (transform: rotate(-45deg)){input[type=checkbox]:not(.checkbox-onoff){-webkit-appearance:none;-moz-appearance:none;appearance:none;width:20px;height:20px;cursor:pointer;position:relative;top:0;left:0;border:2px solid var(--color-toolkit-checkbox-input-border);border-radius:.3em}input[type=checkbox]:not(.checkbox-onoff):after{content:"";width:9px;height:5px;position:absolute;top:3px;left:2px;border:3px solid var(--color-toolkit-checkbox-label-border);border-top:none;border-right:none;background:transparent;opacity:0;transform:rotate(-45deg)}input[type=checkbox]:not(.checkbox-onoff):checked:after{border-color:var(--color-toolkit-checkbox-input-border);opacity:1}input[type=checkbox][disabled]:not(.checkbox-onoff){border:inherit;background-color:transparent!important;cursor:inherit}input.checkbox[type=checkbox]:not(:checked,[disabled],.checkbox-onoff):hover:after{opacity:.5}}@media screen and (max-width: 50em){.tabs>label{width:100%}}.loader,.loader:after{border-radius:50%;width:2em;height:2em}.loader{margin:1em auto;font-size:10px;position:relative;text-indent:-9999em;border-top:.5em solid var(--color-toolkit-loader-border);border-right:.5em solid var(--color-toolkit-loader-border);border-bottom:.5em solid var(--color-toolkit-loader-border);border-left:.5em solid var(--color-toolkit-loader-borderleft);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:load8 1.2s infinite linear;animation:load8 1.2s infinite linear}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.engine-tooltip{display:none;position:absolute;padding:.5rem 1rem;margin:0 0 0 2rem;border:1px solid var(--color-toolkit-engine-tooltip-border);background:var(--color-toolkit-engine-tooltip-background);font-size:14px;font-weight:400;z-index:5000;text-align:left;border-radius:10px}th:hover .engine-tooltip,td:hover .engine-tooltip,.engine-tooltip:hover{display:inline-block}.stacked-bar-chart{margin:0;padding:0 .125rem 0 4rem;width:100%;width:-moz-available;width:-webkit-fill-available;width:fill;flex-flow:row nowrap;align-items:center;display:inline-flex}.stacked-bar-chart-value{width:3rem;display:inline-block;position:absolute;padding:0 .5rem;text-align:right}.stacked-bar-chart-base{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset}.stacked-bar-chart-median{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:var(--color-base-font);border:1px solid rgba(var(--color-base-font-rgb),.9);padding:.3rem 0}.stacked-bar-chart-rate80{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border:1px solid rgba(var(--color-base-font-rgb),.3);padding:.3rem 0}.stacked-bar-chart-rate95{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border-bottom:1px dotted rgba(var(--color-base-font-rgb),.5);padding:0}.stacked-bar-chart-rate100{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border-left:1px solid rgba(var(--color-base-font-rgb),.9);padding:.4rem 0;width:1px}/*! Autocomplete.js v2.6.3 | license MIT | (c) 2017, Baptiste Donaux | http://autocomplete-js.com */.autocomplete{position:absolute;width:44rem;max-width:calc(100% - 1rem);max-height:0;overflow-y:hidden;text-align:right;border-radius:10px}.autocomplete:active,.autocomplete:focus,.autocomplete:hover{background-color:var(--color-autocomplete-background)}.autocomplete:empty{display:none}.autocomplete>ul{list-style-type:none;margin:0;padding:0}.autocomplete>ul>li{cursor:pointer;padding:.5rem 1rem}.autocomplete>ul>li.active,.autocomplete>ul>li:active,.autocomplete>ul>li:focus,.autocomplete>ul>li:hover{background-color:var(--color-autocomplete-background-hover)}.autocomplete>ul>li.active a:active,.autocomplete>ul>li:active a:active,.autocomplete>ul>li:focus a:active,.autocomplete>ul>li:hover a:active,.autocomplete>ul>li.active a:focus,.autocomplete>ul>li:active a:focus,.autocomplete>ul>li:focus a:focus,.autocomplete>ul>li:hover a:focus,.autocomplete>ul>li.active a:hover,.autocomplete>ul>li:active a:hover,.autocomplete>ul>li:focus a:hover,.autocomplete>ul>li:hover a:hover{text-decoration:none}.autocomplete>ul>li.locked{cursor:inherit}.autocomplete.open{display:block;background-color:var(--color-autocomplete-background);color:var(--color-autocomplete-font);max-height:32rem;overflow-y:auto;z-index:5000;margin-top:3.5rem;border-radius:.8rem}.autocomplete.open:empty{display:none}@media screen and (max-width: 50em){.autocomplete>ul>li{padding:1rem}}#main_results #results.image-detail-open.only_template_images{width:min(98%,59.25rem)!important}#main_results #results.only_template_images.image-detail-open #backToTop{right:56.75rem!important;left:inherit}article.result-images .detail{display:none}#results.image-detail-open article.result-images[data-vim-selected] .detail{display:flex;flex-direction:column;position:fixed;right:60rem;left:0;top:13rem;transition:top 64ms ease-in 0s;bottom:0;background:var(--color-result-detail-background);border:1px solid var(--color-result-detail-background);z-index:1000;padding:4rem 3rem 3rem;overflow-y:scroll}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source{display:block;flex:1;text-align:left;width:100%;border:none;text-decoration:none}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{padding:0;margin:0;border:none;object-fit:contain;width:inherit;height:inherit;max-width:100%;min-height:inherit;max-height:calc(100vh - 42rem);background:inherit}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels{color:var(--color-result-detail-font);height:19rem}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels hr{border-top:1px solid var(--color-result-detail-hr);border-bottom:none}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels h4{height:2rem;overflow:hidden;text-overflow:ellipsis;font-size:.9rem;margin-bottom:0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p{color:var(--color-result-detail-label-font);font-size:.9rem;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;margin:.8rem 0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p span{display:inline-block;width:12rem}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels h4,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a{text-align:right}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-content{height:2rem;line-height:unset;overflow:hidden;text-overflow:ellipsis}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url{white-space:nowrap;overflow:hidden hidden;text-overflow:ellipsis}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-content:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url:hover{position:relative;overflow:inherit!important;background:var(--color-result-detail-background);text-overflow:inherit!important}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:active{color:var(--color-result-detail-link)}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:hover{text-decoration:underline}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close{top:1rem;right:1rem;padding:.4rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous{top:1rem;left:6rem;padding:.4rem .3rem .4rem .5rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next{top:1rem;left:2rem;padding:.4rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous{border-radius:50%;display:block;width:1.5rem;height:1.5rem;position:absolute;filter:opacity(40%);z-index:1200}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close span,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next span,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous span{display:block;width:1.5rem;height:1.5rem;text-align:center}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next span:before,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous span:before{vertical-align:sub}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:active,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:active,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:active{color:var(--color-result-detail-font);background:var(--color-result-detail-background);border:1px solid var(--color-result-detail-font)}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:hover{filter:opacity(80%)}#results.image-detail-open article.result-images[data-vim-selected] .detail .loader{position:absolute;top:1rem;left:50%;border-top:.5em solid var(--color-result-detail-loader-border);border-right:.5em solid var(--color-result-detail-loader-border);border-bottom:.5em solid var(--color-result-detail-loader-border);border-left:.5em solid var(--color-result-detail-loader-borderleft)}#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail{top:0}#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail a.result-images-source img{max-height:calc(100vh - 25rem)}@media screen and (max-width: 79.75em){#results.image-detail-open article.result-images[data-vim-selected] .detail{top:0;right:0}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source{display:flex;flex-direction:column;justify-content:center}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{width:100%;max-height:calc(100vh - 24rem)}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next{left:1rem}}@media screen and (max-width: 50em){#results.image-detail-open article.result-images[data-vim-selected] .detail{top:0;right:0;padding:1rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{width:100%;max-height:calc(100vh - 20rem);margin:0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p span{width:inherit;margin-left:1rem}}.dialog-modal{animation-name:dialogmodal;animation-duration:.13s}@keyframes dialogmodal{0%{opacity:0}50%{opacity:.5;transform:translate(-50%,-50%) scale(1.05)}}input.checkbox-onoff[type=checkbox]:before{transition:left .25s}iframe[src^="https://w.soundcloud.com"]{height:120px}iframe[src^="https://www.deezer.com"]{height:94px}iframe[src^="https://www.mixcloud.com"]{height:250px}iframe[src^="https://bandcamp.com/EmbeddedPlayer"]{height:350px}iframe[src^="https://bandcamp.com/EmbeddedPlayer/track"]{height:120px}iframe[src^="https://genius.com/songs"]{height:65px}.info-page code{font-family:monospace;border-radius:5px;background-color:var(--color-doc-code-background);color:var(--color-doc-code);padding:.2rem;border:0 none}.stats_endpoint .github-issue-button{display:block;font-size:16px}.stats_endpoint .issue-hide{display:none}.stats_endpoint input[type=checked]{position:absolute}.stats_endpoint label{margin:1rem 1rem 1rem 0}.stats_endpoint .step_content{margin:1rem 1rem 1rem 2rem}.stats_endpoint .step1,.stats_endpoint .step2{visibility:hidden}.stats_endpoint .step1_delay{transition:visibility 0s linear 4s}.stats_endpoint #step1:checked~.step1,.stats_endpoint #step2:checked~.step2{visibility:visible}.engine-stats{border-spacing:0;border-collapse:collapse}.engine-stats tr td,.engine-stats tr th{border-bottom:1px solid var(--color-result-border);padding:.25rem}.engine-stats table.engine-tooltip{border-spacing:0;border-collapse:collapse}.engine-stats table.engine-tooltip td,.engine-stats table.engine-tooltip th{border:none}.engine-stats .engine-name{width:20rem}.engine-stats .engine-score{width:7rem;text-align:right}.engine-stats .engine-reliability{text-align:right}table.engine-error th.engine-error-type,table.engine-error td.engine-error-type,failed-test{width:10rem}.engine-errors{margin-top:3rem}.engine-errors table.engine-error{max-width:1280px;margin:1rem 0 3rem;border:1px solid var(--color-result-border);text-align:right}.engine-errors table.engine-error tr th,.engine-errors table.engine-error tr td{padding:.5rem}.engine-errors table.engine-error span.log_parameters{border-right:1px solid solid var(--color-result-border);padding:0 1rem 0 0;margin:0 0 0 .5rem}.bar-chart-value{width:3em;display:inline-block;text-align:right;padding-right:.5rem}.bar-chart-graph{width:calc(100% - 5rem);display:inline-block}.bar-chart-bar{border:3px solid var(--color-bar-chart-primary);margin:1px 0}.bar-chart-serie1{border:3px solid var(--color-bar-chart-primary);margin:1px 0;float:left}.bar-chart-serie2{border:3px solid var(--color-bar-chart-secondary);margin:1px 0;float:left}.bar0{width:0;border:0}.bar1{width:1%}.bar2{width:2%}.bar3{width:3%}.bar4{width:4%}.bar5{width:5%}.bar6{width:6%}.bar7{width:7%}.bar8{width:8%}.bar9{width:9%}.bar10{width:10%}.bar11{width:11%}.bar12{width:12%}.bar13{width:13%}.bar14{width:14%}.bar15{width:15%}.bar16{width:16%}.bar17{width:17%}.bar18{width:18%}.bar19{width:19%}.bar20{width:20%}.bar21{width:21%}.bar22{width:22%}.bar23{width:23%}.bar24{width:24%}.bar25{width:25%}.bar26{width:26%}.bar27{width:27%}.bar28{width:28%}.bar29{width:29%}.bar30{width:30%}.bar31{width:31%}.bar32{width:32%}.bar33{width:33%}.bar34{width:34%}.bar35{width:35%}.bar36{width:36%}.bar37{width:37%}.bar38{width:38%}.bar39{width:39%}.bar40{width:40%}.bar41{width:41%}.bar42{width:42%}.bar43{width:43%}.bar44{width:44%}.bar45{width:45%}.bar46{width:46%}.bar47{width:47%}.bar48{width:48%}.bar49{width:49%}.bar50{width:50%}.bar51{width:51%}.bar52{width:52%}.bar53{width:53%}.bar54{width:54%}.bar55{width:55%}.bar56{width:56%}.bar57{width:57%}.bar58{width:58%}.bar59{width:59%}.bar60{width:60%}.bar61{width:61%}.bar62{width:62%}.bar63{width:63%}.bar64{width:64%}.bar65{width:65%}.bar66{width:66%}.bar67{width:67%}.bar68{width:68%}.bar69{width:69%}.bar70{width:70%}.bar71{width:71%}.bar72{width:72%}.bar73{width:73%}.bar74{width:74%}.bar75{width:75%}.bar76{width:76%}.bar77{width:77%}.bar78{width:78%}.bar79{width:79%}.bar80{width:80%}.bar81{width:81%}.bar82{width:82%}.bar83{width:83%}.bar84{width:84%}.bar85{width:85%}.bar86{width:86%}.bar87{width:87%}.bar88{width:88%}.bar89{width:89%}.bar90{width:90%}.bar91{width:91%}.bar92{width:92%}.bar93{width:93%}.bar94{width:94%}.bar95{width:95%}.bar96{width:96%}.bar97{width:97%}.bar98{width:98%}.bar99{width:99%}.bar100{width:100%}.osm-map-box{height:300px;width:100%;margin:10px 0}#main_index{margin-top:26vh}.index{text-align:center}.index .title{background:url(../img/searxng.png) no-repeat;min-height:4rem;margin:4rem auto;background-position:center;background-size:contain}.index h1{font-size:4em;visibility:hidden}.index #search,.index #search_header{margin:0 auto;background:inherit;border:inherit;padding:0;display:block}.index .search_filters{display:block;margin:1em 0}.index .category label{padding:6px 10px;border-bottom:initial!important}@media screen and (max-width: 79.75em){div.title h1{font-size:1em}#main_index{margin-top:6em}}table{border-collapse:collapse}table th,table td{text-align:center;padding:1rem .5rem;text-align:right}table tr.pref-group th{font-weight:400;text-align:right;background:var(--color-settings-table-group-background)}#main_preferences form{width:100%}#main_preferences fieldset{margin:8px;border:none}#main_preferences legend{margin:0;padding:5px 0 0;display:block;float:right;width:300px}#main_preferences input[type=text]{width:13.25rem;color:var(--color-toolkit-input-text-font);border:none;background:none repeat scroll 0 0 var(--color-toolkit-select-background);padding:.2rem .4rem;height:2rem;border-radius:5px}#main_preferences input[type=text]:hover,#main_preferences input[type=text]:focus{background-color:var(--color-toolkit-select-background-hover)}#main_preferences div.pref-group{width:100%;font-weight:400;padding:1rem .5rem;text-align:right;background:var(--color-settings-table-group-background)}#main_preferences .value{margin:0;padding:0;float:right;width:15em}#main_preferences .value select,#main_preferences .value input[type=text]{font-size:inherit!important;margin-top:0;margin-left:1rem;margin-bottom:0;margin-right:0}#main_preferences .value select{width:14rem}#main_preferences .value select:focus,#main_preferences .value input:focus{outline:none;box-shadow:0 0 1px 1px var(--color-btn-background)}#main_preferences .description{margin:0;padding:5px 0 0;float:left;width:50%;color:var(--color-settings-engine-description-font);font-size:90%}#main_preferences .bang{text-align:right;border-radius:5px;background-color:var(--color-doc-code-background);color:var(--color-doc-code);padding:.2rem;border:0 none}#main_preferences .category{margin-left:.5rem}#main_preferences .category label{border:2px solid transparent;padding:.2rem .4rem;border-radius:5px}#main_preferences .category input[type=checkbox]:checked+label{border:2px solid var(--color-categories-item-border-selected)}#main_preferences table.table_engines th.name label{cursor:pointer}#main_preferences table.table_engines th.name .engine-tooltip{margin-top:1.8rem;right:calc((100% - 85em)/2 + 10em);max-width:40rem}#main_preferences table.table_engines th.name .engine-tooltip .engine-description{margin-top:.5rem}#main_preferences table.table_engines th.name .engine-tooltip .bang{margin:.3rem}#main_preferences table.table_engines .checkbox-col,#main_preferences table.table_engines .name,#main_preferences table.table_engines .shortcut{text-align:right}#main_preferences table.cookies{width:100%;direction:ltr}#main_preferences table.cookies th,#main_preferences table.cookies td{text-align:left;font-family:monospace;font-size:1rem;padding:.5em;vertical-align:top}#main_preferences table.cookies td:first-child{word-break:keep-all;width:14rem;padding-right:1rem}#main_preferences table.cookies td:last-child{word-break:break-all}#main_preferences table.cookies>tbody>tr:nth-child(2n)>th,#main_preferences table.cookies>tbody>tr:nth-child(2n)>td{background-color:var(--color-settings-tr-hover)}#main_preferences .preferences_back{background:none repeat scroll 0 0 var(--color-btn-background);color:var(--color-btn-font);border:0 none;border-radius:10px;cursor:pointer;display:inline-block;margin:2px 4px;padding:.7em}#main_preferences .preferences_back a{color:var(--color-settings-return-font)}#main_preferences .preferences_back a:first-letter{text-transform:uppercase}#main_preferences #toggle-all-engines-container{width:max-content;margin-left:auto}#main_preferences div.selectable_url pre{width:100%}#main_preferences #copy-hash-container{display:flex;align-items:center;gap:.5rem}#main_preferences #copy-hash-container div.selectable_url pre{width:auto;flex-grow:1}#main_preferences #pref-hash-input{width:100%}@media screen and (max-width: 79.75em){.preferences_back{clear:both}.engine-tooltip{right:10em!important}}#search{padding:0;margin:0}#search_header{padding-top:1.5em;padding-left:2em;padding-right:7rem;margin:0;background:var(--color-header-background);border-bottom:1px solid var(--color-header-border);display:grid;gap:1rem 1.2rem;grid-template-columns:3rem 1fr;grid-template-areas:"logo search" "spacer categories"}.category_checkbox,.category_button{display:inline-block;position:relative;margin-left:1rem;padding:0}.category_checkbox input{display:none}.category_checkbox label{cursor:pointer;padding:.2rem 0;display:inline-flex;text-transform:capitalize;font-size:.9em;border-bottom:2px solid transparent;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.category_checkbox label svg{padding-right:.2rem}.category_checkbox label div.category_name{margin:auto 0}.category_checkbox input[type=checkbox]:checked+label{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}button.category_button{background-color:inherit;color:var(--color-base-font);cursor:pointer;padding:.2rem 0;display:inline-flex;align-items:center;text-transform:capitalize;font-size:.9em;border:none;border-bottom:2px solid transparent}button.category_button svg{padding-right:.2rem}button.category_button.selected,button.category_button:active{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}.no-js #categories_container:has(button.category_button:focus-within) button.category_button.selected{color:var(--color-base-font);border-bottom:none}.no-js #categories_container:has(button.category_button:focus-within) button.category_button:focus-within{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}#search_logo{padding:.5rem 10px 0;grid-area:logo;display:flex;align-items:center;justify-content:center}#search_logo svg{flex:1;width:30px;height:30px;margin:.5rem 0 auto}.search_categories{grid-area:categories}.search_categories .help{display:none}.search_categories:hover .help{display:block;position:absolute;background:var(--color-base-background);padding:1rem .6rem .6rem 0;z-index:1000;width:100%;left:-.1rem}#search_view{padding:.5rem .5rem 0;grid-area:search}body.results_endpoint #search_view{padding:.5rem 2.8rem 0 0}.search_box{border-radius:.8rem;width:100%;max-width:44rem;display:inline-flex;flex-direction:row;white-space:nowrap;box-shadow:var(--color-search-shadow)}#clear_search{display:block;border-collapse:separate;box-sizing:border-box;width:1.8rem;margin:0;padding:.8rem .2rem;background:none repeat scroll 0 0 var(--color-search-background);border:none;outline:none;color:var(--color-search-font);font-size:1.1rem;z-index:1000}#clear_search:hover{color:var(--color-search-background-hover)}#clear_search.empty *,html.no-js #clear_search.hide_if_nojs{display:none}#q,#send_search{display:block;margin:0;padding:.8rem;background:none repeat scroll 0 0 var(--color-search-background);border:none;outline:none;color:var(--color-search-font);font-size:1.1rem;z-index:100}#q{width:100%;padding-right:1rem;padding-left:0!important;border-radius:0 .8rem .8rem 0}#q::-ms-clear,#q::-webkit-search-cancel-button{display:none}#send_search{border-radius:.8rem 0 0 .8rem}#send_search:hover{cursor:pointer;background-color:var(--color-search-background-hover);color:var(--color-search-background)}.no-js #clear_search,.no-js #send_search{width:auto!important;border-right:1px solid var(--color-search-border)}.search_filters{margin-top:.6rem;margin-left:0;margin-bottom:0;margin-right:10.6rem;display:flex;overflow-x:auto;overscroll-behavior-inline:contain}.search_filters select{background-color:inherit}.search_filters select:hover,.search_filters select:focus{color:var(--color-base-font)}@media screen and (max-width: 79.75em){#search_header{padding:1.5em .5rem 0;column-gap:.5rem}.search_filters{margin-top:.6rem;margin-left:0;margin-bottom:0;margin-right:3.5rem}#categories{font-size:90%;clear:both}}@media screen and (max-width: 79.75em) and (hover: none){#main_index #categories_container,#main_results #categories_container{width:max-content}#main_index #categories_container .category_checkbox,#main_results #categories_container .category_checkbox{display:inline-block;width:auto}#main_index #categories,#main_results #categories{width:100%;text-align:right;overflow:scroll hidden;-webkit-overflow-scrolling:touch}}@media screen and (max-width: 50em){#search_header{width:100%;margin:0;padding:.1rem 0 0;gap:0 0;grid-template-areas:"logo search" "categories categories"}.search_logo{padding:0}.search_box{width:100%}#q{width:100%;flex:1}.search_filters{margin:0 10px;padding:.5rem 0}.category{display:inline-block;width:auto;margin:0}.category svg{display:none}.category_checkbox label,.category_button{padding:1rem!important;margin:0!important}#search_view:focus-within{display:block;background-color:var(--color-search-background);position:absolute;top:0;height:100%;width:100%;z-index:2000}#search_view:focus-within .search_box{border-bottom:1px solid var(--color-search-border);width:100%;border-radius:0;box-shadow:none}#search_view:focus-within .search_box #send_search{margin-left:0!important}#search_view:focus-within .search_box *{border:none;border-radius:0;box-shadow:none}#main_results #q:placeholder-shown~#send_search{margin-left:2.6rem;transition:margin .1s}}@media screen and (max-width: 20rem){#search_header{grid-template-areas:"search search" "categories categories"}#search_logo{display:none}}#categories{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}#categories::-webkit-scrollbar{width:0;height:0}#categories_container{position:relative}.favicon img{height:1.5rem;width:1.5rem;border-radius:10%;background-color:var(--color-favicon-background-color);border:1px solid var(--color-favicon-border-color);display:flex}@media screen and (min-width: 50em){.center-alignment-yes #main_results{--center-page-width: 48rem}}@media screen and (width >= 62rem){.center-alignment-yes #main_results{--center-page-width: 60rem}}@media screen and (min-width: 79.75em){.center-alignment-yes #main_results{--center-page-width: 73rem}}@media screen and (min-width: 50em) and (max-width: 79.75em){.center-alignment-yes #main_results #results{grid-template-columns:60% calc(40% - 5rem);margin-left:0;margin-right:0}.center-alignment-yes #main_results #urls{margin-right:3rem}.center-alignment-yes #main_results #sidebar{margin-left:1rem}.center-alignment-yes #main_results #backToTop{right:calc(60% + 1rem)}}@media screen and (min-width: 79.75em){.center-alignment-yes #main_results{display:flex;flex-direction:column;align-items:center}.center-alignment-yes #main_results #search{width:100%;display:flex;flex-direction:column;align-items:center}.center-alignment-yes #main_results #search_header{grid-template-columns:calc(50% - 4.5rem - var(--center-page-width) / 2) 3rem var(--center-page-width);grid-template-areas:"na logo search" "na spacer categories";column-gap:1.2rem;width:100%;padding-left:0;padding-right:0}.center-alignment-yes #main_results .search_filters{margin-right:.5rem;width:var(--center-page-width)}.center-alignment-yes #main_results #results{margin-left:2rem;margin-right:10rem}.center-alignment-yes #main_results #results.only_template_images,.center-alignment-yes #main_results #results.image-detail-open{align-self:flex-start}.center-alignment-yes #main_results #results:not(.only_template_images,.image-detail-open){margin-right:1.5rem;grid-template-columns:calc(var(--center-page-width) - 5rem - 25rem) 25rem}.center-alignment-yes #main_results #results:not(.only_template_images,.image-detail-open) #backToTop{right:calc(50% - 25rem - 5rem + 1rem + var(--center-page-width) / 2)}.center-alignment-yes #main_results #results .result .content{max-width:inherit}.center-alignment-yes #main_results #urls{margin-right:0}.center-alignment-yes #main_results #sidebar{margin-left:0}}.sxng-icon-set{display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scaleX(-1)}.sxng-icon-set-small{width:1rem;height:1rem;display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scaleX(-1)}.sxng-icon-set-big{width:1.5rem;height:1.5rem;display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scaleX(-1)}html{font-family:sans-serif;font-size:.9em;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;color:var(--color-base-font);background-color:var(--color-base-background);padding:0;margin:0;scroll-behavior:smooth}body,main{padding:0;margin:0}body{display:flex;flex-direction:column;height:100vh;margin:0}@supports (height: 100dvh){body{height:100dvh}}main{width:100%;margin-bottom:2rem;flex:1}.page_with_header{margin:2em auto;width:85em}footer{clear:both;min-height:4rem;padding:1rem 0;width:100%;text-align:center;background-color:var(--color-footer-background);border-top:1px solid var(--color-footer-border);overflow:hidden}footer p{font-size:.9em}.page_with_header .logo{height:40px}input[type=submit],#results button[type=submit],.button{padding:.7rem;display:inline-block;background:var(--color-btn-background);color:var(--color-btn-font);border-radius:10px;border:0;cursor:pointer}a{text-decoration:none;color:var(--color-url-font)}a:visited,a:visited .highlight{color:var(--color-url-visited-font)}article[data-vim-selected]{background:var(--color-result-vim-selected);border-right:.2rem solid var(--color-result-vim-arrow);border-radius:10px 0 0 10px}article.result-images[data-vim-selected]{background:var(--color-result-vim-arrow);border:none;border-radius:10px}article.result-images[data-vim-selected] .image_thumbnail{filter:opacity(60%)}article.result-images[data-vim-selected] span.title,article.result-images[data-vim-selected] span.source{color:var(--color-result-image-span-font-selected)}article[data-vim-selected].category-videos,article[data-vim-selected].category-news,article[data-vim-selected].category-map,article[data-vim-selected].category-music,article[data-vim-selected].category-files,article[data-vim-selected].category-social{border:1px solid var(--color-result-vim-arrow);border-radius:10px}.result{margin:.125rem 0;padding:1rem;box-sizing:border-box;width:100%;border-right:.2rem solid transparent}.result h3{font-size:1.2rem;word-wrap:break-word;margin:.4rem 0;padding:0}.result h3 a{color:var(--color-result-link-font);font-weight:400;font-size:1.1em}.result h3 a:visited{color:var(--color-result-link-visited-font)}.result h3 a:focus,.result h3 a:hover{text-decoration:underline;border:none;outline:none}.result .cache_link,.result .proxyfied_link{font-size:smaller!important;margin-left:.5rem}.result .content,.result .stat{font-size:.9em;margin:0;padding:0;max-width:54em;word-wrap:break-word;line-height:1.24}.result .content .highlight,.result .stat .highlight{color:var(--color-result-description-highlight-font);background:inherit;font-weight:700}.result .altlink a{font-size:.9em;margin:0 10px 0 0;padding:5px 10px;border-radius:5px;background:var(--color-show-btn-background);color:var(--color-show-btn-font);cursor:pointer}.result .altlink a:hover{background:var(--color-btn-background);color:var(--color-btn-font)}.result .codelines .highlight{color:inherit;background:inherit;font-weight:400}.result .url_header{display:flex;gap:.5rem}.result .url_wrapper{display:flex;align-items:center;font-size:1rem;color:var(--color-result-url-font);flex-flow:row nowrap;overflow:hidden;margin:0;padding:0}.result .url_wrapper .url_o1{white-space:nowrap;flex-shrink:1;padding-bottom:1px}.result .url_wrapper .url_o1 .url_i1{unicode-bidi:plaintext}.result .url_wrapper .url_o1:after{content:" ";width:1ch;display:inline-block}.result .url_wrapper .url_o2{overflow:hidden;white-space:nowrap;flex:0 1 content;text-align:right;padding-bottom:1px}.result .url_wrapper .url_o2 .url_i2{float:right}.result .published_date,.result .result_length,.result .result_views,.result .result_author,.result .result_shipping,.result .result_source_country{font-size:.8em;color:var(--color-result-publishdate-font)}.result .result_price{font-size:1.2em;color:var(--color-result-description-highlight-font)}.result img.thumbnail{float:right;padding-top:.6rem;padding-left:1rem;width:7rem;height:unset}.result .break{clear:both}.result-paper .attributes,.result-packages .attributes{display:table;border-spacing:.125rem}.result-paper .attributes div,.result-packages .attributes div{display:table-row}.result-paper .attributes div span,.result-packages .attributes div span{font-size:.9rem;margin-top:.25rem;display:table-cell}.result-paper .attributes div span time,.result-packages .attributes div span time{font-size:.9rem}.result-paper .attributes div span:first-child,.result-packages .attributes div span:first-child{color:var(--color-base-font);min-width:10rem}.result-paper .attributes div span:nth-child(2),.result-packages .attributes div span:nth-child(2){color:var(--color-result-publishdate-font)}.result-paper .content,.result-packages .content{margin-top:.25rem}.result-paper .comments,.result-packages .comments{font-size:.9rem;margin:.25rem 0 0;padding:0;word-wrap:break-word;line-height:1.24;font-style:italic}.result-packages .attributes{margin-top:.3rem}.template_group_images{display:flex;flex-wrap:wrap}.template_group_images:after{flex-grow:10;content:""}.category-videos,.category-news,.category-map,.category-music,.category-files,.category-social{border:1px solid var(--color-result-border);margin:0 .5rem 1rem!important;border-radius:10px}.category-social .image{width:auto!important;min-width:48px;min-height:48px;padding:0 5px 25px 0!important}.audio-control audio{width:100%;padding:10px 0 0}.embedded-content iframe{width:100%;padding:10px 0 0}.result-videos img.thumbnail{float:right;padding-top:.6rem;padding-left:1rem;width:20rem;height:unset}.result-videos .content{overflow:hidden}.result-videos .embedded-video iframe{width:100%;aspect-ratio:16 / 9;padding:10px 0 0}@supports not (aspect-ratio: 1 / 1){.result-videos .embedded-video iframe{height:25.3125rem}}.engines{float:left;display:flex;flex-wrap:wrap;justify-content:flex-end;color:var(--color-result-engines-font)}.engines span{font-size:smaller;margin-top:0;margin-bottom:0;margin-left:.5rem;margin-right:0}.small_font{font-size:.8em}.highlight{color:var(--color-result-link-font-highlight);background:inherit}.empty_element{font-style:italic}.result-images{flex-grow:1;padding:.5rem .5rem 3rem;margin:.25rem;border:none!important;height:12rem;width:unset}.result-images>a{position:relative;outline:none}.result-images img{margin:0;padding:0;border:none;height:100%;width:auto;object-fit:cover;vertical-align:bottom;background:var(--color-result-image-background)}.result-images .image_resolution{position:absolute;right:0;bottom:0;background:var(--color-image-resolution-background);padding:.3rem .5rem;font-size:.9rem;color:var(--color-image-resolution-font);border-top-left-radius:.3rem}.result-images span.title,.result-images span.source{display:block;position:absolute;width:100%;font-size:.9rem;color:var(--color-result-image-span-font);padding:.5rem 0 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.result-images span.source{padding:1.8rem 0 0;font-size:.7rem}.result-map img.image{float:left!important;height:100px!important;width:auto!important}.result-map table{font-size:.9em;width:auto;border-collapse:separate;border-spacing:0 .35rem}.result-map table th{font-weight:inherit;width:17rem;vertical-align:top;text-align:right}.result-map table td{vertical-align:top;text-align:right}.hidden{display:none!important}#results{margin-top:1rem;margin-left:2rem;margin-bottom:0;margin-right:10rem;display:grid;grid-template:"corrections sidebar" min-content "answers sidebar" min-content "urls sidebar" 1fr "pagination sidebar" min-content / 45rem 25rem;gap:0 5rem}#results #sidebar *:first-child{margin-top:0}#urls{padding:0;grid-area:urls}#apis .wrapper{display:flex}#suggestions .wrapper{display:flex;flex-flow:column;justify-content:flex-end}#suggestions .wrapper form{display:inline-block;flex:1 1 50%}#suggestions input,#infoboxes input{padding:0;margin:3px;font-size:.9em;display:inline-block;background:transparent;color:var(--color-result-search-url-font);cursor:pointer;width:100%;text-overflow:ellipsis;overflow:hidden;text-align:left}#suggestions input[type=submit],#infoboxes input[type=submit],#suggestions .infobox .url a,#infoboxes .infobox .url a{color:var(--color-result-link-font);text-decoration:none;font-size:.9rem}#suggestions input[type=submit]:hover,#infoboxes input[type=submit]:hover,#suggestions .infobox .url a:hover,#infoboxes .infobox .url a:hover{text-decoration:underline}#corrections{grid-area:corrections;display:flex;flex-flow:row wrap;margin:0 0 1em}#corrections h4,#corrections input[type=submit]{display:inline-block;padding:.5rem;margin:.5rem}#corrections input[type=submit]{font-size:.8rem;border-radius:5px}#infoboxes .title,#suggestions .title,#search_url .title,#engines_msg .title,#apis .title{margin:2em 0 .5em;color:var(--color-base-font)}summary.title{cursor:pointer;padding-top:1em}.sidebar-collapsible{border-top:1px solid var(--color-sidebar-border);padding-bottom:.5em}#sidebar-end-collapsible{border-bottom:1px solid var(--color-sidebar-border);width:100%}#answers{grid-area:answers;background:var(--color-answer-background);padding:1rem;margin:1rem 0;margin-top:0;color:var(--color-answer-font);border-radius:10px}#answers h4{display:none}#answers span{overflow-wrap:anywhere}#answers .answer{display:flex;flex-direction:column}#answers .answer-url{margin:5px 10px 10px auto}#infoboxes form{min-width:210px}#sidebar{grid-area:sidebar;word-wrap:break-word;color:var(--color-sidebar-font)}#sidebar .infobox{margin:10px 0;border:1px solid var(--color-sidebar-border);padding:1rem;font-size:.9em;border-radius:10px}#sidebar .infobox h2{margin:0 0 .5em}#sidebar .infobox img{max-width:100%;max-height:12em;display:block;margin:0 auto;padding:0}#sidebar .infobox dt{font-weight:700}#sidebar .infobox .attributes dl{margin:.5em 0}#sidebar .infobox .attributes dt{display:inline;margin:.5em 0 .5em .25em;padding:0}#sidebar .infobox .attributes dd{display:inline;margin:.5em 0;padding:0}#sidebar .infobox input{font-size:1em}#sidebar .infobox br,#sidebar .infobox .attributes,#sidebar .infobox .urls{clear:both}#apis input{font-size:.9em;margin:0 10px 0 0;padding:5px 10px;border-radius:5px;background:var(--color-show-btn-background);color:var(--color-show-btn-font);cursor:pointer}#apis input:hover{background:var(--color-btn-background);color:var(--color-btn-font)}#engines_msg .engine-name{width:10rem}#engines_msg .response-error{color:var(--color-error)}#engines_msg .bar-chart-value{width:auto}#search_url div.selectable_url pre{float:left;width:200em}#search_url button#copy_url{float:right;padding:.4rem;margin-left:.5rem;border-radius:.3rem;display:none}#links_on_top{position:absolute;left:1rem;text-align:left;top:2.7rem;padding:0;border:0;display:flex;align-items:center;font-size:1em;color:var(--color-search-font)}#links_on_top a{display:flex;align-items:center;margin-left:1em}#links_on_top a svg{font-size:1.2em;margin-left:.125em}#links_on_top a,#links_on_top a:link *,#links_on_top a:hover *,#links_on_top a:visited *,#links_on_top a:active *{color:var(--color-search-font)}#pagination{grid-area:pagination}#pagination br{clear:both}.numbered_pagination{display:flex;flex-direction:row;justify-content:center;align-items:center;overflow:hidden}.page_number{background:transparent!important;color:var(--color-result-link-font)!important;text-decoration:underline}.page_number_current{background:transparent;color:var(--color-result-link-visited-font);border:none}#backToTop{border:1px solid var(--color-backtotop-border);margin:0;padding:0;font-size:1em;background:var(--color-backtotop-background);position:fixed;bottom:8rem;right:56.3rem;transition:opacity .5s;opacity:0;pointer-events:none;border-radius:10px}#backToTop a{display:block;margin:0;padding:.7em}#backToTop a,#backToTop a:visited,#backToTop a:hover,#backToTop a:active{color:var(--color-backtotop-font)}#results.scrolling #backToTop{opacity:1;pointer-events:all}@media screen and (width <= calc(79.75em - .5px)){#links_on_top span{display:none}}@media screen and (width <= 52rem){body.results_endpoint #links_on_top .link_on_top_about,body.results_endpoint #links_on_top .link_on_top_donate{display:none}}@media screen and (min-width: 50em) and (max-width: 79.75em){.center-alignment-no #links_on_top span{display:none}.center-alignment-no .page_with_header{margin:2rem .5rem;width:auto}.center-alignment-no #infoboxes{position:inherit;max-width:inherit}.center-alignment-no #infoboxes .infobox{clear:both}.center-alignment-no #infoboxes .infobox img{float:right;max-width:10em;margin:.5em 0 .5em .5em}.center-alignment-no #sidebar{margin:0 .5rem .125rem;padding:0;float:none;border:none;width:auto}.center-alignment-no #sidebar input{border:0}.center-alignment-no .result .thumbnail{max-width:98%}.center-alignment-no .result .url span.url{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%}.center-alignment-no .result .engines{float:left;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:3px 0 0}.center-alignment-no .result-images{border-bottom:none!important}.center-alignment-no .image_result,.center-alignment-no .image_result img{max-width:98%}.center-alignment-no #backToTop{display:none}.center-alignment-no #pagination{margin:2rem 0 0!important}.center-alignment-no #main_results div#results{margin:0 auto;justify-content:center;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 45rem;gap:0}}#main_results div#results.only_template_images{margin:1rem .5rem 0;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 100%;gap:0}#main_results div#results.only_template_images #sidebar{display:none}#main_results div#results.only_template_images #urls{margin:0;display:flex;flex-wrap:wrap}#main_results div#results.only_template_images #urls:after{flex-grow:10;content:""}#main_results div#results.only_template_images #backToTop{right:auto;left:1rem}#main_results div#results.only_template_images #pagination{margin-left:4rem}@media screen and (max-width: 50em){#links_on_top span{display:none}.page_with_header{margin:2rem .5rem;width:auto}#infoboxes{position:inherit;max-width:inherit}#infoboxes .infobox{clear:both}#infoboxes .infobox img{float:right;max-width:10em;margin:.5em 0 .5em .5em}#sidebar{margin:0 .5rem .125rem;padding:0;float:none;border:none;width:auto}#sidebar input{border:0}.result .thumbnail{max-width:98%}.result .url span.url{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%}.result .engines{float:left;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:3px 0 0}.result-images{border-bottom:none!important}.image_result,.image_result img{max-width:98%}#backToTop{display:none}#pagination{margin:2rem 0 0!important}#main_results div#results{margin:0 auto;justify-content:center;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 45rem;gap:0}html{background-color:var(--color-base-background-mobile)}#main_results div#results{grid-template-columns:100%;margin:0 auto}#links_on_top{top:1.4rem;left:10px}#main_index #links_on_top{top:.5rem;left:.5rem}#results{margin:0;padding:0}#pagination{margin:2rem 1rem 0!important}article[data-vim-selected]{border:1px solid var(--color-result-vim-arrow);border-radius:10px}.result{background:var(--color-result-background);border:1px solid var(--color-result-background);margin:1rem 2%;width:96%;border-radius:10px}.result-images{margin:0;height:10rem;background:var(--color-base-background-mobile);width:unset}.infobox{border:none!important;background-color:var(--color-sidebar-background)}.numbered_pagination{display:none}.result-paper .attributes,.result-packages .attributes,.result-paper .attributes div,.result-packages .attributes div{display:block}.result-paper .attributes div span,.result-packages .attributes div span{display:inline}.result-paper .attributes div span:first-child,.result-packages .attributes div span:first-child{font-weight:700}.result-paper .attributes div span:nth-child(2),.result-packages .attributes div span:nth-child(2){margin-right:.5rem}}@media screen and (max-width: 35em){.result-videos img.thumbnail{float:none!important}.result-videos .content{overflow:inherit}}pre code{white-space:pre-wrap}#main_results .result-keyvalue caption{padding:.8rem .5rem;font-style:italic;caption-side:bottom;background-color:var(--color-result-keyvalue-table)}#main_results .result-keyvalue .col-key{width:25%}#main_results .result-keyvalue table{word-break:break-word;table-layout:fixed;width:100%;background-color:var(--color-result-keyvalue-table)}#main_results .result-keyvalue tr.odd{background-color:var(--color-result-keyvalue-odd)}#main_results .result-keyvalue tr.even{background-color:var(--color-result-keyvalue-even)}#main_results .result-keyvalue th,#main_results .result-keyvalue td{padding:.3rem .5rem}#q,#sidebar .infobox dt bdi{direction:rtl}#urls{direction:initial;text-align:right}#urls .result .url_header{direction:rtl}#urls .result .url_wrapper{justify-content:end}#main_results div#results.only_template_images #urls{direction:rtl}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p{direction:rtl}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url{direction:ltr}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url span{direction:rtl;float:right}@supports ((background-position-x: 100%) and ((appearance: none) or (-webkit-appearance: none) or (-moz-appearance: none))){select{border-width:0 0 0 2rem;background-position-x:-2rem}}#vim-hotkeys-help table{direction:ltr;text-align:left}#main_preferences h1,#main_stats h1{background-position-x:100%}.bar-chart-serie1,.bar-chart-serie2{float:right}.engine-stats .engine-name,.engine-stats .engine-score,.engine-stats .result-count,.engine-stats .response-time,.engine-stats .engine-reliability{text-align:right} diff --git a/searx/static/themes/simple/css/searxng.min.css b/searx/static/themes/simple/css/searxng.min.css index 3721b0120..6ca440aad 100644 --- a/searx/static/themes/simple/css/searxng.min.css +++ b/searx/static/themes/simple/css/searxng.min.css @@ -1 +1 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}:root{--color-base-font: #444;--color-base-font-rgb: 68, 68, 68;--color-base-background: #fff;--color-base-background-mobile: #f2f5f8;--color-url-font: #334999;--color-url-visited-font: #9822c3;--color-header-background: #fdfbff;--color-header-border: #ddd;--color-footer-background: #fdfbff;--color-footer-border: #ddd;--color-sidebar-border: #ddd;--color-sidebar-font: #000;--color-sidebar-background: #fff;--color-backtotop-font: #444;--color-backtotop-border: #ddd;--color-backtotop-background: #fff;--color-btn-background: #3050ff;--color-btn-font: #fff;--color-show-btn-background: #bbb;--color-show-btn-font: #000;--color-search-border: #bbb;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #fff;--color-search-font: #222;--color-search-background-hover: #3050ff;--color-error: #db3434;--color-error-background: #fae1e1;--color-warning: #dbba34;--color-warning-background: #faf5e1;--color-success: #42db34;--color-success-background: #e3fae1;--color-categories-item-selected-font: #3050ff;--color-categories-item-border-selected: #3050ff;--color-autocomplete-font: #000;--color-autocomplete-border: #bbb;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #fff;--color-autocomplete-background-hover: #e3e3e3;--color-answer-font: #444;--color-answer-background: #fff;--color-result-keyvalue-col-table: #fdfbff;--color-result-keyvalue-odd: #fdfbff;--color-result-keyvalue-even: #fff;--color-result-background: #fff;--color-result-border: #ddd;--color-result-url-font: #000;--color-result-vim-selected: #f7f7f7;--color-result-vim-arrow: #000bbb;--color-result-description-highlight-font: #000;--color-result-link-font: #000bbb;--color-result-link-font-highlight: #000bbb;--color-result-link-visited-font: #9822c3;--color-result-publishdate-font: #777;--color-result-engines-font: #545454;--color-result-search-url-border: #ddd;--color-result-search-url-font: #000;--color-result-image-span-font: #444;--color-result-image-span-font-selected: #fff;--color-result-image-background: #fff;--color-settings-tr-hover: #ebebeb;--color-settings-engine-description-font: #545454;--color-settings-table-group-background: #0001;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #242424;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #545454;--color-toolkit-kbd-font: #fff;--color-toolkit-kbd-background: #000;--color-toolkit-dialog-border: #ddd;--color-toolkit-dialog-background: #fff;--color-toolkit-tabs-label-border: #fff;--color-toolkit-tabs-section-border: #ddd;--color-toolkit-select-background: #e1e1e1;--color-toolkit-select-border: #ddd;--color-toolkit-select-background-hover: #bbb;--color-toolkit-input-text-font: #222;--color-toolkit-checkbox-onoff-off-background: #ddd;--color-toolkit-checkbox-onoff-on-background: #ddd;--color-toolkit-checkbox-onoff-on-mark-background: #3050ff;--color-toolkit-checkbox-onoff-on-mark-color: #fff;--color-toolkit-checkbox-onoff-off-mark-background: #aaa;--color-toolkit-checkbox-onoff-off-mark-color: #fff;--color-toolkit-checkbox-label-background: #ddd;--color-toolkit-checkbox-label-border: #ddd;--color-toolkit-checkbox-input-border: #3050ff;--color-toolkit-engine-tooltip-border: #ddd;--color-toolkit-engine-tooltip-background: #fff;--color-toolkit-loader-border: rgba(0, 0, 0, .2);--color-toolkit-loader-borderleft: rgba(255, 255, 255, 0);--color-doc-code: #003;--color-doc-code-background: #ddeaff;--color-bar-chart-primary: #5bc0de;--color-bar-chart-secondary: #deb15b;--color-image-resolution-background: rgba(0, 0, 0, .5);--color-image-resolution-font: #fff;--color-loading-indicator: rgba(255, 255, 255, .2);--color-loading-indicator-gap: #fff;--color-line-number: #64708d;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}@media (prefers-color-scheme: dark){:root.theme-auto{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}}:root.theme-dark{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}:root.theme-black{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc;--color-base-background: #000;--color-base-background-mobile: #000;--color-header-background: #000;--color-footer-background: #000;--color-sidebar-background: #000}.code-highlight pre{line-height:100%}.code-highlight td.linenos .normal,.code-highlight span.linenos{color:inherit;background-color:transparent;padding-left:5px;padding-right:5px}.code-highlight td.linenos .special,.code-highlight span.linenos.special{color:#000;background-color:#ffffc0;padding-left:5px;padding-right:5px}.code-highlight .hll{background-color:#ffc}.code-highlight .c{color:#3d7b7b;font-style:italic}.code-highlight .err{border:1px solid #F00}.code-highlight .k{color:green;font-weight:700}.code-highlight .o{color:#666}.code-highlight .ch,.code-highlight .cm{color:#3d7b7b;font-style:italic}.code-highlight .cp{color:#9c6500}.code-highlight .cpf,.code-highlight .c1,.code-highlight .cs{color:#3d7b7b;font-style:italic}.code-highlight .gd{color:#a00000}.code-highlight .ge{font-style:italic}.code-highlight .ges{font-weight:700;font-style:italic}.code-highlight .gr{color:#e40000}.code-highlight .gh{color:navy;font-weight:700}.code-highlight .gi{color:#008400}.code-highlight .go{color:#717171}.code-highlight .gp{color:navy;font-weight:700}.code-highlight .gs{font-weight:700}.code-highlight .gu{color:purple;font-weight:700}.code-highlight .gt{color:#04d}.code-highlight .kc,.code-highlight .kd,.code-highlight .kn{color:green;font-weight:700}.code-highlight .kp{color:green}.code-highlight .kr{color:green;font-weight:700}.code-highlight .kt{color:#b00040}.code-highlight .m{color:#666}.code-highlight .s{color:#ba2121}.code-highlight .na{color:#687822}.code-highlight .nb{color:green}.code-highlight .nc{color:#00f;font-weight:700}.code-highlight .no{color:#800}.code-highlight .nd{color:#a2f}.code-highlight .ni{color:#717171;font-weight:700}.code-highlight .ne{color:#cb3f38;font-weight:700}.code-highlight .nf{color:#00f}.code-highlight .nl{color:#767600}.code-highlight .nn{color:#00f;font-weight:700}.code-highlight .nt{color:green;font-weight:700}.code-highlight .nv{color:#19177c}.code-highlight .ow{color:#a2f;font-weight:700}.code-highlight .w{color:#bbb}.code-highlight .mb,.code-highlight .mf,.code-highlight .mh,.code-highlight .mi,.code-highlight .mo{color:#666}.code-highlight .sa,.code-highlight .sb,.code-highlight .sc,.code-highlight .dl{color:#ba2121}.code-highlight .sd{color:#ba2121;font-style:italic}.code-highlight .s2{color:#ba2121}.code-highlight .se{color:#aa5d1f;font-weight:700}.code-highlight .sh{color:#ba2121}.code-highlight .si{color:#a45a77;font-weight:700}.code-highlight .sx{color:green}.code-highlight .sr{color:#a45a77}.code-highlight .s1{color:#ba2121}.code-highlight .ss{color:#19177c}.code-highlight .bp{color:green}.code-highlight .fm{color:#00f}.code-highlight .vc,.code-highlight .vg,.code-highlight .vi,.code-highlight .vm{color:#19177c}.code-highlight .il{color:#666}.codelines{margin:.125rem 0 0;padding:1rem 0 0}.code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}.code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}.code-highlight .linenos::selection{background:transparent}.code-highlight .linenos::-moz-selection{background:transparent}.code-highlight span.linenos{color:var(--color-line-number)}@media (prefers-color-scheme: dark){:root.theme-auto .code-highlight pre{line-height:100%}:root.theme-auto .code-highlight td.linenos .normal{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight span.linenos{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight td.linenos .special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight span.linenos.special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight .hll{background-color:#6e7681}:root.theme-auto .code-highlight .c{color:#7e8aa1}:root.theme-auto .code-highlight .err{color:#f88f7f}:root.theme-auto .code-highlight .esc{color:#d4d2c8}:root.theme-auto .code-highlight .g{color:#d4d2c8}:root.theme-auto .code-highlight .k{color:#ffad66}:root.theme-auto .code-highlight .l{color:#d5ff80}:root.theme-auto .code-highlight .n{color:#d4d2c8}:root.theme-auto .code-highlight .o{color:#ffad66}:root.theme-auto .code-highlight .x{color:#d4d2c8}:root.theme-auto .code-highlight .p{color:#d4d2c8}:root.theme-auto .code-highlight .ch{color:#f88f7f;font-style:italic}:root.theme-auto .code-highlight .cm{color:#7e8aa1}:root.theme-auto .code-highlight .cp{color:#ffad66;font-weight:700}:root.theme-auto .code-highlight .cpf{color:#7e8aa1}:root.theme-auto .code-highlight .c1{color:#7e8aa1}:root.theme-auto .code-highlight .cs{color:#7e8aa1;font-style:italic}:root.theme-auto .code-highlight .gd{color:#f88f7f;background-color:#3d1e20}:root.theme-auto .code-highlight .ge{color:#d4d2c8;font-style:italic}:root.theme-auto .code-highlight .ges{color:#d4d2c8}:root.theme-auto .code-highlight .gr{color:#f88f7f}:root.theme-auto .code-highlight .gh{color:#d4d2c8}:root.theme-auto .code-highlight .gi{color:#6ad4af;background-color:#19362c}:root.theme-auto .code-highlight .go{color:#7e8aa1}:root.theme-auto .code-highlight .gp{color:#d4d2c8}:root.theme-auto .code-highlight .gs{color:#d4d2c8;font-weight:700}:root.theme-auto .code-highlight .gu{color:#d4d2c8}:root.theme-auto .code-highlight .gt{color:#f88f7f}:root.theme-auto .code-highlight .kc{color:#ffad66}:root.theme-auto .code-highlight .kd{color:#ffad66}:root.theme-auto .code-highlight .kn{color:#ffad66}:root.theme-auto .code-highlight .kp{color:#ffad66}:root.theme-auto .code-highlight .kr{color:#ffad66}:root.theme-auto .code-highlight .kt{color:#73d0ff}:root.theme-auto .code-highlight .ld{color:#d5ff80}:root.theme-auto .code-highlight .m{color:#dfbfff}:root.theme-auto .code-highlight .s{color:#d5ff80}:root.theme-auto .code-highlight .na{color:#ffd173}:root.theme-auto .code-highlight .nb{color:#ffd173}:root.theme-auto .code-highlight .nc{color:#73d0ff}:root.theme-auto .code-highlight .no{color:#ffd173}:root.theme-auto .code-highlight .nd{color:#7e8aa1;font-weight:700;font-style:italic}:root.theme-auto .code-highlight .ni{color:#95e6cb}:root.theme-auto .code-highlight .ne{color:#73d0ff}:root.theme-auto .code-highlight .nf{color:#ffd173}:root.theme-auto .code-highlight .nl{color:#d4d2c8}:root.theme-auto .code-highlight .nn{color:#d4d2c8}:root.theme-auto .code-highlight .nx{color:#d4d2c8}:root.theme-auto .code-highlight .py{color:#ffd173}:root.theme-auto .code-highlight .nt{color:#5ccfe6}:root.theme-auto .code-highlight .nv{color:#d4d2c8}:root.theme-auto .code-highlight .ow{color:#ffad66}:root.theme-auto .code-highlight .pm{color:#d4d2c8}:root.theme-auto .code-highlight .w{color:#d4d2c8}:root.theme-auto .code-highlight .mb{color:#dfbfff}:root.theme-auto .code-highlight .mf{color:#dfbfff}:root.theme-auto .code-highlight .mh{color:#dfbfff}:root.theme-auto .code-highlight .mi{color:#dfbfff}:root.theme-auto .code-highlight .mo{color:#dfbfff}:root.theme-auto .code-highlight .sa{color:#f29e74}:root.theme-auto .code-highlight .sb{color:#d5ff80}:root.theme-auto .code-highlight .sc{color:#d5ff80}:root.theme-auto .code-highlight .dl{color:#d5ff80}:root.theme-auto .code-highlight .sd{color:#7e8aa1}:root.theme-auto .code-highlight .s2{color:#d5ff80}:root.theme-auto .code-highlight .se{color:#95e6cb}:root.theme-auto .code-highlight .sh{color:#d5ff80}:root.theme-auto .code-highlight .si{color:#95e6cb}:root.theme-auto .code-highlight .sx{color:#95e6cb}:root.theme-auto .code-highlight .sr{color:#95e6cb}:root.theme-auto .code-highlight .s1{color:#d5ff80}:root.theme-auto .code-highlight .ss{color:#dfbfff}:root.theme-auto .code-highlight .bp{color:#5ccfe6}:root.theme-auto .code-highlight .fm{color:#ffd173}:root.theme-auto .code-highlight .vc{color:#d4d2c8}:root.theme-auto .code-highlight .vg{color:#d4d2c8}:root.theme-auto .code-highlight .vi{color:#d4d2c8}:root.theme-auto .code-highlight .vm{color:#d4d2c8}:root.theme-auto .code-highlight .il{color:#dfbfff}:root.theme-auto .code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}:root.theme-auto .code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}:root.theme-auto .code-highlight .linenos::selection{background:transparent}:root.theme-auto .code-highlight .linenos::-moz-selection{background:transparent}:root.theme-auto .code-highlight span.linenos{color:var(--color-line-number)}}:root.theme-dark .code-highlight pre{line-height:100%}:root.theme-dark .code-highlight td.linenos .normal{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight span.linenos{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight td.linenos .special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight span.linenos.special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight .hll{background-color:#6e7681}:root.theme-dark .code-highlight .c{color:#7e8aa1}:root.theme-dark .code-highlight .err{color:#f88f7f}:root.theme-dark .code-highlight .esc{color:#d4d2c8}:root.theme-dark .code-highlight .g{color:#d4d2c8}:root.theme-dark .code-highlight .k{color:#ffad66}:root.theme-dark .code-highlight .l{color:#d5ff80}:root.theme-dark .code-highlight .n{color:#d4d2c8}:root.theme-dark .code-highlight .o{color:#ffad66}:root.theme-dark .code-highlight .x{color:#d4d2c8}:root.theme-dark .code-highlight .p{color:#d4d2c8}:root.theme-dark .code-highlight .ch{color:#f88f7f;font-style:italic}:root.theme-dark .code-highlight .cm{color:#7e8aa1}:root.theme-dark .code-highlight .cp{color:#ffad66;font-weight:700}:root.theme-dark .code-highlight .cpf{color:#7e8aa1}:root.theme-dark .code-highlight .c1{color:#7e8aa1}:root.theme-dark .code-highlight .cs{color:#7e8aa1;font-style:italic}:root.theme-dark .code-highlight .gd{color:#f88f7f;background-color:#3d1e20}:root.theme-dark .code-highlight .ge{color:#d4d2c8;font-style:italic}:root.theme-dark .code-highlight .ges{color:#d4d2c8}:root.theme-dark .code-highlight .gr{color:#f88f7f}:root.theme-dark .code-highlight .gh{color:#d4d2c8}:root.theme-dark .code-highlight .gi{color:#6ad4af;background-color:#19362c}:root.theme-dark .code-highlight .go{color:#7e8aa1}:root.theme-dark .code-highlight .gp{color:#d4d2c8}:root.theme-dark .code-highlight .gs{color:#d4d2c8;font-weight:700}:root.theme-dark .code-highlight .gu{color:#d4d2c8}:root.theme-dark .code-highlight .gt{color:#f88f7f}:root.theme-dark .code-highlight .kc{color:#ffad66}:root.theme-dark .code-highlight .kd{color:#ffad66}:root.theme-dark .code-highlight .kn{color:#ffad66}:root.theme-dark .code-highlight .kp{color:#ffad66}:root.theme-dark .code-highlight .kr{color:#ffad66}:root.theme-dark .code-highlight .kt{color:#73d0ff}:root.theme-dark .code-highlight .ld{color:#d5ff80}:root.theme-dark .code-highlight .m{color:#dfbfff}:root.theme-dark .code-highlight .s{color:#d5ff80}:root.theme-dark .code-highlight .na{color:#ffd173}:root.theme-dark .code-highlight .nb{color:#ffd173}:root.theme-dark .code-highlight .nc{color:#73d0ff}:root.theme-dark .code-highlight .no{color:#ffd173}:root.theme-dark .code-highlight .nd{color:#7e8aa1;font-weight:700;font-style:italic}:root.theme-dark .code-highlight .ni{color:#95e6cb}:root.theme-dark .code-highlight .ne{color:#73d0ff}:root.theme-dark .code-highlight .nf{color:#ffd173}:root.theme-dark .code-highlight .nl{color:#d4d2c8}:root.theme-dark .code-highlight .nn{color:#d4d2c8}:root.theme-dark .code-highlight .nx{color:#d4d2c8}:root.theme-dark .code-highlight .py{color:#ffd173}:root.theme-dark .code-highlight .nt{color:#5ccfe6}:root.theme-dark .code-highlight .nv{color:#d4d2c8}:root.theme-dark .code-highlight .ow{color:#ffad66}:root.theme-dark .code-highlight .pm{color:#d4d2c8}:root.theme-dark .code-highlight .w{color:#d4d2c8}:root.theme-dark .code-highlight .mb{color:#dfbfff}:root.theme-dark .code-highlight .mf{color:#dfbfff}:root.theme-dark .code-highlight .mh{color:#dfbfff}:root.theme-dark .code-highlight .mi{color:#dfbfff}:root.theme-dark .code-highlight .mo{color:#dfbfff}:root.theme-dark .code-highlight .sa{color:#f29e74}:root.theme-dark .code-highlight .sb{color:#d5ff80}:root.theme-dark .code-highlight .sc{color:#d5ff80}:root.theme-dark .code-highlight .dl{color:#d5ff80}:root.theme-dark .code-highlight .sd{color:#7e8aa1}:root.theme-dark .code-highlight .s2{color:#d5ff80}:root.theme-dark .code-highlight .se{color:#95e6cb}:root.theme-dark .code-highlight .sh{color:#d5ff80}:root.theme-dark .code-highlight .si{color:#95e6cb}:root.theme-dark .code-highlight .sx{color:#95e6cb}:root.theme-dark .code-highlight .sr{color:#95e6cb}:root.theme-dark .code-highlight .s1{color:#d5ff80}:root.theme-dark .code-highlight .ss{color:#dfbfff}:root.theme-dark .code-highlight .bp{color:#5ccfe6}:root.theme-dark .code-highlight .fm{color:#ffd173}:root.theme-dark .code-highlight .vc{color:#d4d2c8}:root.theme-dark .code-highlight .vg{color:#d4d2c8}:root.theme-dark .code-highlight .vi{color:#d4d2c8}:root.theme-dark .code-highlight .vm{color:#d4d2c8}:root.theme-dark .code-highlight .il{color:#dfbfff}:root.theme-dark .code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}:root.theme-dark .code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}:root.theme-dark .code-highlight .linenos::selection{background:transparent}:root.theme-dark .code-highlight .linenos::-moz-selection{background:transparent}:root.theme-dark .code-highlight span.linenos{color:var(--color-line-number)}html.no-js .hide_if_nojs,html.js .show_if_nojs{display:none}.center{text-align:center}.right{float:right}.left{float:left}.invisible{display:none!important}.list-unstyled{list-style-type:none}.list-unstyled li{margin-top:4px;margin-bottom:4px}.danger{background-color:var(--color-error-background)}.warning{background:var(--color-warning-background)}.success{background:var(--color-success-background)}.badge{display:inline-block;color:var(--color-toolkit-badge-font);background-color:var(--color-toolkit-badge-background);text-align:center;white-space:nowrap;vertical-align:baseline;min-width:10px;padding:1px 5px;border-radius:5px}kbd{padding:2px 4px;margin:1px;font-size:90%;color:var(--color-toolkit-kbd-font);background:var(--color-toolkit-kbd-background)}table{width:100%}table.striped tr{border-bottom:1px solid var(--color-settings-tr-hover)}th{padding:.4em}td{padding:0 4px}tr:hover{background:var(--color-settings-tr-hover)!important}div.selectable_url{display:block;border:1px solid var(--color-result-search-url-border);padding:4px;color:var(--color-result-search-url-font);margin:.1em;overflow:hidden;height:1.2em;line-height:1.2em;border-radius:5px}div.selectable_url pre{display:block;font-size:.8em;word-break:break-all;margin:.1em;-webkit-user-select:all;user-select:all}.dialog-error{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:left;border-radius:10px;color:var(--color-error);background:var(--color-error-background);border-color:var(--color-error)}.dialog-error .close{float:right;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-error ul,.dialog-error ol,.dialog-error p{margin:1px 0 0}.dialog-error table{width:auto}.dialog-error tr{vertical-align:text-top}.dialog-error tr:hover{background:transparent!important}.dialog-error td{padding:0 1em 0 0;padding-right:1rem;padding-bottom:0;padding-left:0}.dialog-error h4{margin-top:.3em;margin-bottom:.3em}.dialog-error-block{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:left;border-radius:10px;display:block;color:var(--color-error);background:var(--color-error-background);border-color:var(--color-error)}.dialog-error-block .close{float:right;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-error-block ul,.dialog-error-block ol,.dialog-error-block p{margin:1px 0 0}.dialog-error-block table{width:auto}.dialog-error-block tr{vertical-align:text-top}.dialog-error-block tr:hover{background:transparent!important}.dialog-error-block td{padding:0 1em 0 0;padding-right:1rem;padding-bottom:0;padding-left:0}.dialog-error-block h4{margin-top:.3em;margin-bottom:.3em}.dialog-warning{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:left;border-radius:10px;color:var(--color-warning);background:var(--color-warning-background);border-color:var(--color-warning)}.dialog-warning .close{float:right;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-warning ul,.dialog-warning ol,.dialog-warning p{margin:1px 0 0}.dialog-warning table{width:auto}.dialog-warning tr{vertical-align:text-top}.dialog-warning tr:hover{background:transparent!important}.dialog-warning td{padding:0 1em 0 0;padding-right:1rem;padding-bottom:0;padding-left:0}.dialog-warning h4{margin-top:.3em;margin-bottom:.3em}.dialog-modal{position:relative;display:flex;padding:1rem;border:1px solid var(--color-toolkit-dialog-border);text-align:left;border-radius:10px;display:block;background:var(--color-toolkit-dialog-background);position:fixed;top:50%;left:50%;margin:0 auto;transform:translate(-50%,-50%);z-index:5000}.dialog-modal .close{float:right;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-modal ul,.dialog-modal ol,.dialog-modal p{margin:1px 0 0}.dialog-modal table{width:auto}.dialog-modal tr{vertical-align:text-top}.dialog-modal tr:hover{background:transparent!important}.dialog-modal td{padding:0 1em 0 0;padding-right:1rem;padding-bottom:0;padding-left:0}.dialog-modal h4{margin-top:.3em;margin-bottom:.3em}.dialog-modal h3{margin-top:0}.btn-collapse{cursor:pointer}.scrollx{overflow:auto hidden;display:block;padding:0;margin:0;border:none}.tabs .tabs>label{font-size:90%}ul.tabs{border-bottom:1px solid var(--color-toolkit-tabs-section-border);list-style:none;padding-left:0}ul.tabs li{display:flex}.tabs{display:flex;flex-wrap:wrap;width:100%;min-width:100%}.tabs>*{order:2}.tabs>input[type=radio]{display:none}.tabs>label,.tabs>li>a{order:1;padding:.7em;margin:0 .7em;letter-spacing:.5px;text-transform:uppercase;border:solid var(--color-toolkit-tabs-label-border);border-width:0 0 2px 0;color:unset;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:pointer}.tabs>label.active,.tabs>li>a.active{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font)}.tabs>label:hover,.tabs>li>a:hover{border-bottom:2px solid var(--color-categories-item-border-selected)}.tabs>section{min-width:100%;padding:.7rem 0;box-sizing:border-box;border-top:1px solid var(--color-toolkit-tabs-section-border);display:none}.tabs>label:last-of-type{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font);letter-spacing:-.1px}.tabs>section:last-of-type{display:block}html body .tabs>input:checked~section{display:none}html body .tabs>input:checked~label{position:inherited;background:inherit;border-bottom:2px solid transparent;font-weight:400;color:inherit}html body .tabs>input:checked~label:hover{border-bottom:2px solid var(--color-categories-item-border-selected)}html body .tabs>input:checked+label{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font)}html body .tabs>input:checked+label+section{display:block}select{height:2.4rem;margin-top:0;margin-right:1rem;margin-bottom:0;margin-left:0;padding:.2rem!important;color:var(--color-search-font);font-size:.9rem;z-index:100}select:hover,select:focus{cursor:pointer}@supports ((background-position-x: 100%) and ((appearance: none) or (-webkit-appearance: none) or (-moz-appearance: none))){select{appearance:none;-webkit-appearance:none;-moz-appearance:none;border-width:0 2rem 0 0;border-color:transparent;background:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E) no-repeat;background-position-x:calc(100% + 2rem);background-size:2rem;background-origin:content-box;background-color:var(--color-toolkit-select-background);outline:medium none;text-overflow:ellipsis;border-radius:5px}select:hover,select:focus{background-color:var(--color-toolkit-select-background-hover)}select option{background-color:var(--color-base-background)}@media (prefers-color-scheme: dark){html.theme-auto select,html.theme-dark select{background-image:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20fill%3D%22%23ddd%22%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E)}}html.theme-dark select{background-image:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20fill%3D%22%23ddd%22%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E)}}input.checkbox-onoff[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;display:inline-block;width:2.5em;height:.7em;box-shadow:none!important;margin:0 16px;border-radius:10px;position:relative}input.checkbox-onoff[type=checkbox]:focus,input.checkbox-onoff[type=checkbox]:hover{outline:none}input.checkbox-onoff[type=checkbox]:focus:after{content:"";position:absolute;width:3.5em;height:1.65em;border:1px solid var(--color-btn-background);border-radius:12px;box-shadow:var(--color-btn-background) 0 0 3px;z-index:1200;top:-.55em;left:-.6em}input.checkbox-onoff[type=checkbox]:before{position:absolute;top:-.5em;display:flex;justify-content:center;align-items:center;font-size:.75em;width:1.875em;height:1.875em;border-radius:50%}input.checkbox-onoff[type=checkbox],input.checkbox-onoff.reversed-checkbox[type=checkbox]:checked{background:var(--color-toolkit-checkbox-onoff-off-background)}input.checkbox-onoff[type=checkbox]:before,input.checkbox-onoff.reversed-checkbox[type=checkbox]:checked:before{left:-.5em;content:"✕";color:var(--color-toolkit-checkbox-onoff-off-mark-color);background:var(--color-toolkit-checkbox-onoff-off-mark-background)}input.checkbox-onoff[type=checkbox]:checked,input.checkbox-onoff.reversed-checkbox[type=checkbox]{background:var(--color-toolkit-checkbox-onoff-on-background)}input.checkbox-onoff[type=checkbox]:checked:before,input.checkbox-onoff.reversed-checkbox[type=checkbox]:before{left:calc(100% - 1.5em);content:"✓";color:var(--color-toolkit-checkbox-onoff-on-mark-color);background:var(--color-toolkit-checkbox-onoff-on-mark-background)}@supports (transform: rotate(-45deg)){input[type=checkbox]:not(.checkbox-onoff){-webkit-appearance:none;-moz-appearance:none;appearance:none;width:20px;height:20px;cursor:pointer;position:relative;top:0;left:0;border:2px solid var(--color-toolkit-checkbox-input-border);border-radius:.3em}input[type=checkbox]:not(.checkbox-onoff):after{content:"";width:9px;height:5px;position:absolute;top:3px;left:2px;border:3px solid var(--color-toolkit-checkbox-label-border);border-top:none;border-right:none;background:transparent;opacity:0;transform:rotate(-45deg)}input[type=checkbox]:not(.checkbox-onoff):checked:after{border-color:var(--color-toolkit-checkbox-input-border);opacity:1}input[type=checkbox][disabled]:not(.checkbox-onoff){border:inherit;background-color:transparent!important;cursor:inherit}input.checkbox[type=checkbox]:not(:checked,[disabled],.checkbox-onoff):hover:after{opacity:.5}}@media screen and (max-width: 50em){.tabs>label{width:100%}}.loader,.loader:after{border-radius:50%;width:2em;height:2em}.loader{margin:1em auto;font-size:10px;position:relative;text-indent:-9999em;border-top:.5em solid var(--color-toolkit-loader-border);border-right:.5em solid var(--color-toolkit-loader-border);border-bottom:.5em solid var(--color-toolkit-loader-border);border-left:.5em solid var(--color-toolkit-loader-borderleft);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:load8 1.2s infinite linear;animation:load8 1.2s infinite linear}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.engine-tooltip{display:none;position:absolute;padding:.5rem 1rem;margin:0 0 0 2rem;border:1px solid var(--color-toolkit-engine-tooltip-border);background:var(--color-toolkit-engine-tooltip-background);font-size:14px;font-weight:400;z-index:5000;text-align:left;border-radius:10px}th:hover .engine-tooltip,td:hover .engine-tooltip,.engine-tooltip:hover{display:inline-block}.stacked-bar-chart{margin:0;padding:0 .125rem 0 4rem;width:100%;width:-moz-available;width:-webkit-fill-available;width:fill;flex-flow:row nowrap;align-items:center;display:inline-flex}.stacked-bar-chart-value{width:3rem;display:inline-block;position:absolute;padding:0 .5rem;text-align:right}.stacked-bar-chart-base{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset}.stacked-bar-chart-median{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:var(--color-base-font);border:1px solid rgba(var(--color-base-font-rgb),.9);padding:.3rem 0}.stacked-bar-chart-rate80{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border:1px solid rgba(var(--color-base-font-rgb),.3);padding:.3rem 0}.stacked-bar-chart-rate95{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border-bottom:1px dotted rgba(var(--color-base-font-rgb),.5);padding:0}.stacked-bar-chart-rate100{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border-left:1px solid rgba(var(--color-base-font-rgb),.9);padding:.4rem 0;width:1px}/*! Autocomplete.js v2.6.3 | license MIT | (c) 2017, Baptiste Donaux | http://autocomplete-js.com */.autocomplete{position:absolute;width:44rem;max-height:0;overflow-y:hidden;text-align:left;border-radius:10px}.autocomplete:active,.autocomplete:focus,.autocomplete:hover{background-color:var(--color-autocomplete-background)}.autocomplete:empty{display:none}.autocomplete>ul{list-style-type:none;margin:0;padding:0}.autocomplete>ul>li{cursor:pointer;padding:.5rem 1rem}.autocomplete>ul>li.active,.autocomplete>ul>li:active,.autocomplete>ul>li:focus,.autocomplete>ul>li:hover{background-color:var(--color-autocomplete-background-hover)}.autocomplete>ul>li.active a:active,.autocomplete>ul>li:active a:active,.autocomplete>ul>li:focus a:active,.autocomplete>ul>li:hover a:active,.autocomplete>ul>li.active a:focus,.autocomplete>ul>li:active a:focus,.autocomplete>ul>li:focus a:focus,.autocomplete>ul>li:hover a:focus,.autocomplete>ul>li.active a:hover,.autocomplete>ul>li:active a:hover,.autocomplete>ul>li:focus a:hover,.autocomplete>ul>li:hover a:hover{text-decoration:none}.autocomplete>ul>li.locked{cursor:inherit}.autocomplete.open{display:block;background-color:var(--color-autocomplete-background);color:var(--color-autocomplete-font);max-height:32rem;overflow-y:auto;z-index:5000;margin-top:3.5rem;border-radius:.8rem}.autocomplete.open:empty{display:none}@media screen and (max-width: 50em){.autocomplete{width:100%}.autocomplete>ul>li{padding:1rem}}#main_results #results.image-detail-open.only_template_images{width:min(98%,59.25rem)!important}#main_results #results.only_template_images.image-detail-open #backToTop{left:56.75rem!important;right:inherit}article.result-images .detail{display:none}#results.image-detail-open article.result-images[data-vim-selected] .detail{display:flex;flex-direction:column;position:fixed;left:60rem;right:0;top:13rem;transition:top 64ms ease-in 0s;bottom:0;background:var(--color-result-detail-background);border:1px solid var(--color-result-detail-background);z-index:1000;padding:4rem 3rem 3rem;overflow-y:scroll}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source{display:block;flex:1;text-align:left;width:100%;border:none;text-decoration:none}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{padding:0;margin:0;border:none;object-fit:contain;width:inherit;height:inherit;max-width:100%;min-height:inherit;max-height:calc(100vh - 42rem);background:inherit}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels{color:var(--color-result-detail-font);height:19rem}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels hr{border-top:1px solid var(--color-result-detail-hr);border-bottom:none}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels h4{height:2rem;overflow:hidden;text-overflow:ellipsis;font-size:.9rem;margin-bottom:0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p{color:var(--color-result-detail-label-font);font-size:.9rem;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;margin:.8rem 0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p span{display:inline-block;width:12rem}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels h4,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a{text-align:left}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-content{height:2rem;line-height:unset;overflow:hidden;text-overflow:ellipsis}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url{white-space:nowrap;overflow:hidden hidden;text-overflow:ellipsis}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-content:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url:hover{position:relative;overflow:inherit!important;background:var(--color-result-detail-background);text-overflow:inherit!important}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:active{color:var(--color-result-detail-link)}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:hover{text-decoration:underline}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close{top:1rem;left:1rem;padding:.4rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous{top:1rem;right:6rem;padding:.4rem .5rem .4rem .3rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next{top:1rem;right:2rem;padding:.4rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous{border-radius:50%;display:block;width:1.5rem;height:1.5rem;position:absolute;filter:opacity(40%);z-index:1200}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close span,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next span,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous span{display:block;width:1.5rem;height:1.5rem;text-align:center}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next span:before,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous span:before{vertical-align:sub}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:active,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:active,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:active{color:var(--color-result-detail-font);background:var(--color-result-detail-background);border:1px solid var(--color-result-detail-font)}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:hover{filter:opacity(80%)}#results.image-detail-open article.result-images[data-vim-selected] .detail .loader{position:absolute;top:1rem;right:50%;border-top:.5em solid var(--color-result-detail-loader-border);border-right:.5em solid var(--color-result-detail-loader-border);border-bottom:.5em solid var(--color-result-detail-loader-border);border-left:.5em solid var(--color-result-detail-loader-borderleft)}#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail{top:0}#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail a.result-images-source img{max-height:calc(100vh - 25rem)}@media screen and (max-width: 79.75em){#results.image-detail-open article.result-images[data-vim-selected] .detail{top:0;left:0}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source{display:flex;flex-direction:column;justify-content:center}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{width:100%;max-height:calc(100vh - 24rem)}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next{right:1rem}}@media screen and (max-width: 50em){#results.image-detail-open article.result-images[data-vim-selected] .detail{top:0;left:0;padding:1rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{width:100%;max-height:calc(100vh - 20rem);margin:0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p span{width:inherit;margin-right:1rem}}.dialog-modal{animation-name:dialogmodal;animation-duration:.13s}@keyframes dialogmodal{0%{opacity:0}50%{opacity:.5;transform:translate(-50%,-50%) scale(1.05)}}input.checkbox-onoff[type=checkbox]:before{transition:left .25s}iframe[src^="https://w.soundcloud.com"]{height:120px}iframe[src^="https://www.deezer.com"]{height:94px}iframe[src^="https://www.mixcloud.com"]{height:250px}iframe[src^="https://bandcamp.com/EmbeddedPlayer"]{height:350px}iframe[src^="https://bandcamp.com/EmbeddedPlayer/track"]{height:120px}iframe[src^="https://genius.com/songs"]{height:65px}.info-page code{font-family:monospace;border-radius:5px;background-color:var(--color-doc-code-background);color:var(--color-doc-code);padding:.2rem;border:0 none}.stats_endpoint .github-issue-button{display:block;font-size:16px}.stats_endpoint .issue-hide{display:none}.stats_endpoint input[type=checked]{position:absolute}.stats_endpoint label{margin:1rem 1rem 1rem 0}.stats_endpoint .step_content{margin:1rem 1rem 1rem 2rem}.stats_endpoint .step1,.stats_endpoint .step2{visibility:hidden}.stats_endpoint .step1_delay{transition:visibility 0s linear 4s}.stats_endpoint #step1:checked~.step1,.stats_endpoint #step2:checked~.step2{visibility:visible}.engine-stats{border-spacing:0;border-collapse:collapse}.engine-stats tr td,.engine-stats tr th{border-bottom:1px solid var(--color-result-border);padding:.25rem}.engine-stats table.engine-tooltip{border-spacing:0;border-collapse:collapse}.engine-stats table.engine-tooltip td,.engine-stats table.engine-tooltip th{border:none}.engine-stats .engine-name{width:20rem}.engine-stats .engine-score{width:7rem;text-align:right}.engine-stats .engine-reliability{text-align:right}table.engine-error th.engine-error-type,table.engine-error td.engine-error-type,failed-test{width:10rem}.engine-errors{margin-top:3rem}.engine-errors table.engine-error{max-width:1280px;margin:1rem 0 3rem;border:1px solid var(--color-result-border);text-align:left}.engine-errors table.engine-error tr th,.engine-errors table.engine-error tr td{padding:.5rem}.engine-errors table.engine-error span.log_parameters{border-right:1px solid solid var(--color-result-border);padding:0 1rem 0 0;margin:0 0 0 .5rem}.bar-chart-value{width:3em;display:inline-block;text-align:right;padding-right:.5rem}.bar-chart-graph{width:calc(100% - 5rem);display:inline-block}.bar-chart-bar{border:3px solid var(--color-bar-chart-primary);margin:1px 0}.bar-chart-serie1{border:3px solid var(--color-bar-chart-primary);margin:1px 0;float:left}.bar-chart-serie2{border:3px solid var(--color-bar-chart-secondary);margin:1px 0;float:left}.bar0{width:0;border:0}.bar1{width:1%}.bar2{width:2%}.bar3{width:3%}.bar4{width:4%}.bar5{width:5%}.bar6{width:6%}.bar7{width:7%}.bar8{width:8%}.bar9{width:9%}.bar10{width:10%}.bar11{width:11%}.bar12{width:12%}.bar13{width:13%}.bar14{width:14%}.bar15{width:15%}.bar16{width:16%}.bar17{width:17%}.bar18{width:18%}.bar19{width:19%}.bar20{width:20%}.bar21{width:21%}.bar22{width:22%}.bar23{width:23%}.bar24{width:24%}.bar25{width:25%}.bar26{width:26%}.bar27{width:27%}.bar28{width:28%}.bar29{width:29%}.bar30{width:30%}.bar31{width:31%}.bar32{width:32%}.bar33{width:33%}.bar34{width:34%}.bar35{width:35%}.bar36{width:36%}.bar37{width:37%}.bar38{width:38%}.bar39{width:39%}.bar40{width:40%}.bar41{width:41%}.bar42{width:42%}.bar43{width:43%}.bar44{width:44%}.bar45{width:45%}.bar46{width:46%}.bar47{width:47%}.bar48{width:48%}.bar49{width:49%}.bar50{width:50%}.bar51{width:51%}.bar52{width:52%}.bar53{width:53%}.bar54{width:54%}.bar55{width:55%}.bar56{width:56%}.bar57{width:57%}.bar58{width:58%}.bar59{width:59%}.bar60{width:60%}.bar61{width:61%}.bar62{width:62%}.bar63{width:63%}.bar64{width:64%}.bar65{width:65%}.bar66{width:66%}.bar67{width:67%}.bar68{width:68%}.bar69{width:69%}.bar70{width:70%}.bar71{width:71%}.bar72{width:72%}.bar73{width:73%}.bar74{width:74%}.bar75{width:75%}.bar76{width:76%}.bar77{width:77%}.bar78{width:78%}.bar79{width:79%}.bar80{width:80%}.bar81{width:81%}.bar82{width:82%}.bar83{width:83%}.bar84{width:84%}.bar85{width:85%}.bar86{width:86%}.bar87{width:87%}.bar88{width:88%}.bar89{width:89%}.bar90{width:90%}.bar91{width:91%}.bar92{width:92%}.bar93{width:93%}.bar94{width:94%}.bar95{width:95%}.bar96{width:96%}.bar97{width:97%}.bar98{width:98%}.bar99{width:99%}.bar100{width:100%}.osm-map-box{height:300px;width:100%;margin:10px 0}#main_index{margin-top:26vh}.index{text-align:center}.index .title{background:url(../img/searxng.png) no-repeat;min-height:4rem;margin:4rem auto;background-position:center;background-size:contain}.index h1{font-size:4em;visibility:hidden}.index #search,.index #search_header{margin:0 auto;background:inherit;border:inherit;padding:0;display:block}.index .search_filters{display:block;margin:1em 0}.index .category label{padding:6px 10px;border-bottom:initial!important}@media screen and (max-width: 79.75em){div.title h1{font-size:1em}#main_index{margin-top:6em}}table{border-collapse:collapse}table th,table td{text-align:center;padding:1rem .5rem;text-align:left}table tr.pref-group th{font-weight:400;text-align:left;background:var(--color-settings-table-group-background)}#main_preferences form{width:100%}#main_preferences fieldset{margin:8px;border:none}#main_preferences legend{margin:0;padding:5px 0 0;display:block;float:left;width:300px}#main_preferences input[type=text]{width:13.25rem;color:var(--color-toolkit-input-text-font);border:none;background:none repeat scroll 0 0 var(--color-toolkit-select-background);padding:.2rem .4rem;height:2rem;border-radius:5px}#main_preferences input[type=text]:hover,#main_preferences input[type=text]:focus{background-color:var(--color-toolkit-select-background-hover)}#main_preferences div.pref-group{width:100%;font-weight:400;padding:1rem .5rem;text-align:left;background:var(--color-settings-table-group-background)}#main_preferences .value{margin:0;padding:0;float:left;width:15em}#main_preferences .value select,#main_preferences .value input[type=text]{font-size:inherit!important;margin-top:0;margin-right:1rem;margin-bottom:0;margin-left:0}#main_preferences .value select{width:14rem}#main_preferences .value select:focus,#main_preferences .value input:focus{outline:none;box-shadow:0 0 1px 1px var(--color-btn-background)}#main_preferences .description{margin:0;padding:5px 0 0;float:right;width:50%;color:var(--color-settings-engine-description-font);font-size:90%}#main_preferences .bang{text-align:left;border-radius:5px;background-color:var(--color-doc-code-background);color:var(--color-doc-code);padding:.2rem;border:0 none}#main_preferences .category{margin-right:.5rem}#main_preferences .category label{border:2px solid transparent;padding:.2rem .4rem;border-radius:5px}#main_preferences .category input[type=checkbox]:checked+label{border:2px solid var(--color-categories-item-border-selected)}#main_preferences table.table_engines th.name label{cursor:pointer}#main_preferences table.table_engines th.name .engine-tooltip{margin-top:1.8rem;left:calc((100% - 85em)/2 + 10em);max-width:40rem}#main_preferences table.table_engines th.name .engine-tooltip .engine-description{margin-top:.5rem}#main_preferences table.table_engines th.name .engine-tooltip .bang{margin:.3rem}#main_preferences table.table_engines .checkbox-col,#main_preferences table.table_engines .name,#main_preferences table.table_engines .shortcut{text-align:left}#main_preferences table.cookies{width:100%;direction:ltr}#main_preferences table.cookies th,#main_preferences table.cookies td{text-align:left;font-family:monospace;font-size:1rem;padding:.5em;vertical-align:top}#main_preferences table.cookies td:first-child{word-break:keep-all;width:14rem;padding-right:1rem}#main_preferences table.cookies td:last-child{word-break:break-all}#main_preferences table.cookies>tbody>tr:nth-child(2n)>th,#main_preferences table.cookies>tbody>tr:nth-child(2n)>td{background-color:var(--color-settings-tr-hover)}#main_preferences .preferences_back{background:none repeat scroll 0 0 var(--color-btn-background);color:var(--color-btn-font);border:0 none;border-radius:10px;cursor:pointer;display:inline-block;margin:2px 4px;padding:.7em}#main_preferences .preferences_back a{color:var(--color-settings-return-font)}#main_preferences .preferences_back a:first-letter{text-transform:uppercase}#main_preferences #toggle-all-engines-container{width:max-content;margin-left:auto}#main_preferences div.selectable_url pre{width:100%}#main_preferences #copy-hash-container{display:flex;align-items:center;gap:.5rem}#main_preferences #copy-hash-container div.selectable_url pre{width:auto;flex-grow:1}#main_preferences #pref-hash-input{width:100%}@media screen and (max-width: 79.75em){.preferences_back{clear:both}.engine-tooltip{left:10em!important}}#search{padding:0;margin:0}#search_header{padding-top:1.5em;padding-right:2em;padding-left:7rem;margin:0;background:var(--color-header-background);border-bottom:1px solid var(--color-header-border);display:grid;gap:1rem 1.2rem;grid-template-columns:3rem 1fr;grid-template-areas:"logo search" "spacer categories"}.category_checkbox,.category_button{display:inline-block;position:relative;margin-right:1rem;padding:0}.category_checkbox input{display:none}.category_checkbox label{cursor:pointer;padding:.2rem 0;display:inline-flex;text-transform:capitalize;font-size:.9em;border-bottom:2px solid transparent;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.category_checkbox label svg{padding-right:.2rem}.category_checkbox label div.category_name{margin:auto 0}.category_checkbox input[type=checkbox]:checked+label{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}button.category_button{background-color:inherit;color:var(--color-base-font);cursor:pointer;padding:.2rem 0;display:inline-flex;align-items:center;text-transform:capitalize;font-size:.9em;border:none;border-bottom:2px solid transparent}button.category_button svg{padding-right:.2rem}button.category_button.selected,button.category_button:active{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}.no-js #categories_container:has(button.category_button:focus-within) button.category_button.selected{color:var(--color-base-font);border-bottom:none}.no-js #categories_container:has(button.category_button:focus-within) button.category_button:focus-within{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}#search_logo{padding:.5rem 10px 0;grid-area:logo;display:flex;align-items:center;justify-content:center}#search_logo svg{flex:1;width:30px;height:30px;margin:.5rem 0 auto}.search_categories{grid-area:categories}.search_categories .help{display:none}.search_categories:hover .help{display:block;position:absolute;background:var(--color-base-background);padding:1rem .6rem .6rem 0;z-index:1000;width:100%;left:-.1rem}#search_view{padding:.5rem .3rem 0 .5rem;grid-area:search}body.results_endpoint #search_view{padding:.5rem 2.8rem 0 0}.search_box{border-radius:.8rem;width:44rem;display:inline-flex;flex-direction:row;white-space:nowrap;box-shadow:var(--color-search-shadow)}#clear_search{display:block;border-collapse:separate;box-sizing:border-box;width:1.8rem;margin:0;padding:.8rem .2rem;background:none repeat scroll 0 0 var(--color-search-background);border:none;outline:none;color:var(--color-search-font);font-size:1.1rem;z-index:1000}#clear_search:hover{color:var(--color-search-background-hover)}#clear_search.empty *,html.no-js #clear_search.hide_if_nojs{display:none}#q,#send_search{display:block;margin:0;padding:.8rem;background:none repeat scroll 0 0 var(--color-search-background);border:none;outline:none;color:var(--color-search-font);font-size:1.1rem;z-index:100}#q{width:100%;padding-left:1rem;padding-right:0!important;border-radius:.8rem 0 0 .8rem}#q::-ms-clear,#q::-webkit-search-cancel-button{display:none}#send_search{border-radius:0 .8rem .8rem 0}#send_search:hover{cursor:pointer;background-color:var(--color-search-background-hover);color:var(--color-search-background)}.no-js #clear_search,.no-js #send_search{width:auto!important;border-left:1px solid var(--color-search-border)}.search_filters{margin-top:.6rem;margin-right:0;margin-bottom:0;margin-left:10.6rem;display:flex;overflow-x:auto;overscroll-behavior-inline:contain}.search_filters select{background-color:inherit}.search_filters select:hover,.search_filters select:focus{color:var(--color-base-font)}@media screen and (max-width: 79.75em){#search_header{padding:1.5em .5rem 0;column-gap:.5rem}.search_filters{margin-top:.6rem;margin-right:0;margin-bottom:0;margin-left:3.5rem}#categories{font-size:90%;clear:both}}@media screen and (max-width: 79.75em) and (hover: none){#main_index #categories_container,#main_results #categories_container{width:max-content}#main_index #categories_container .category_checkbox,#main_results #categories_container .category_checkbox{display:inline-block;width:auto}#main_index #categories,#main_results #categories{width:100%;text-align:left;overflow:scroll hidden;-webkit-overflow-scrolling:touch}}@media screen and (max-width: 50em){#search_header{width:100%;margin:0;padding:.1rem 0 0;gap:0 0;grid-template-areas:"logo search" "categories categories"}.search_logo{padding:0}.search_box{width:98%;display:flex}#q{width:100%;flex:1}.search_filters{margin:0 10px;padding:.5rem 0}.category{display:inline-block;width:auto;margin:0}.category svg{display:none}.category_checkbox label,.category_button{padding:1rem!important;margin:0!important}#search_view:focus-within{display:block;background-color:var(--color-search-background);position:absolute;top:0;height:100%;width:100%;z-index:2000}#search_view:focus-within .search_box{border-bottom:1px solid var(--color-search-border);width:100%;border-radius:0;box-shadow:none}#search_view:focus-within .search_box #send_search{margin-right:0!important}#search_view:focus-within .search_box *{border:none;border-radius:0;box-shadow:none}#main_results #q:placeholder-shown~#send_search{margin-right:2.6rem;transition:margin .1s}}@media screen and (max-width: 20rem){#search_header{grid-template-areas:"search search" "categories categories"}#search_logo{display:none}}#categories{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}#categories::-webkit-scrollbar{width:0;height:0}#categories_container{position:relative}.favicon img{height:1.5rem;width:1.5rem;border-radius:10%;background-color:var(--color-favicon-background-color);border:1px solid var(--color-favicon-border-color);display:flex}@media screen and (min-width: 50em){.center-alignment-yes #main_results{--center-page-width: 48rem}}@media screen and (width >= 62rem){.center-alignment-yes #main_results{--center-page-width: 60rem}}@media screen and (min-width: 79.75em){.center-alignment-yes #main_results{--center-page-width: 73rem}}@media screen and (min-width: 50em) and (max-width: 79.75em){.center-alignment-yes #main_results #results{grid-template-columns:60% calc(40% - 5rem);margin-left:0;margin-right:0}.center-alignment-yes #main_results #urls{margin-left:3rem}.center-alignment-yes #main_results #sidebar{margin-right:1rem}.center-alignment-yes #main_results #backToTop{left:calc(60% + 1rem)}}@media screen and (min-width: 79.75em){.center-alignment-yes #main_results{display:flex;flex-direction:column;align-items:center}.center-alignment-yes #main_results #search{width:100%;display:flex;flex-direction:column;align-items:center}.center-alignment-yes #main_results #search_header{grid-template-columns:calc(50% - 4.5rem - var(--center-page-width) / 2) 3rem var(--center-page-width);grid-template-areas:"na logo search" "na spacer categories";column-gap:1.2rem;width:100%;padding-left:0;padding-right:0}.center-alignment-yes #main_results .search_filters{margin-left:.5rem;width:var(--center-page-width)}.center-alignment-yes #main_results #results{margin-right:2rem;margin-left:10rem}.center-alignment-yes #main_results #results.only_template_images,.center-alignment-yes #main_results #results.image-detail-open{align-self:flex-start}.center-alignment-yes #main_results #results:not(.only_template_images,.image-detail-open){margin-left:1.5rem;grid-template-columns:calc(var(--center-page-width) - 5rem - 25rem) 25rem}.center-alignment-yes #main_results #results:not(.only_template_images,.image-detail-open) #backToTop{left:calc(50% - 25rem - 5rem + 1rem + var(--center-page-width) / 2)}.center-alignment-yes #main_results #results .result .content{max-width:inherit}.center-alignment-yes #main_results #urls{margin-left:0}.center-alignment-yes #main_results #sidebar{margin-right:0}}.sxng-icon-set{display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scale(1)}.sxng-icon-set-small{width:1rem;height:1rem;display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scale(1)}.sxng-icon-set-big{width:1.5rem;height:1.5rem;display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scale(1)}html{font-family:sans-serif;font-size:.9em;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;color:var(--color-base-font);background-color:var(--color-base-background);padding:0;margin:0;scroll-behavior:smooth}body,main{padding:0;margin:0}body{display:flex;flex-direction:column;height:100vh;margin:0}@supports (height: 100dvh){body{height:100dvh}}main{width:100%;margin-bottom:2rem;flex:1}.page_with_header{margin:2em auto;width:85em}footer{clear:both;min-height:4rem;padding:1rem 0;width:100%;text-align:center;background-color:var(--color-footer-background);border-top:1px solid var(--color-footer-border);overflow:hidden}footer p{font-size:.9em}.page_with_header .logo{height:40px}input[type=submit],#results button[type=submit],.button{padding:.7rem;display:inline-block;background:var(--color-btn-background);color:var(--color-btn-font);border-radius:10px;border:0;cursor:pointer}a{text-decoration:none;color:var(--color-url-font)}a:visited,a:visited .highlight{color:var(--color-url-visited-font)}article[data-vim-selected]{background:var(--color-result-vim-selected);border-left:.2rem solid var(--color-result-vim-arrow);border-radius:0 10px 10px 0}article.result-images[data-vim-selected]{background:var(--color-result-vim-arrow);border:none;border-radius:10px}article.result-images[data-vim-selected] .image_thumbnail{filter:opacity(60%)}article.result-images[data-vim-selected] span.title,article.result-images[data-vim-selected] span.source{color:var(--color-result-image-span-font-selected)}article[data-vim-selected].category-videos,article[data-vim-selected].category-news,article[data-vim-selected].category-map,article[data-vim-selected].category-music,article[data-vim-selected].category-files,article[data-vim-selected].category-social{border:1px solid var(--color-result-vim-arrow);border-radius:10px}.result{margin:.125rem 0;padding:1rem;box-sizing:border-box;width:100%;border-left:.2rem solid transparent}.result h3{font-size:1.2rem;word-wrap:break-word;margin:.4rem 0;padding:0}.result h3 a{color:var(--color-result-link-font);font-weight:400;font-size:1.1em}.result h3 a:visited{color:var(--color-result-link-visited-font)}.result h3 a:focus,.result h3 a:hover{text-decoration:underline;border:none;outline:none}.result .cache_link,.result .proxyfied_link{font-size:smaller!important;margin-left:.5rem}.result .content,.result .stat{font-size:.9em;margin:0;padding:0;max-width:54em;word-wrap:break-word;line-height:1.24}.result .content .highlight,.result .stat .highlight{color:var(--color-result-description-highlight-font);background:inherit;font-weight:700}.result .altlink a{font-size:.9em;margin:0 10px 0 0;padding:5px 10px;border-radius:5px;background:var(--color-show-btn-background);color:var(--color-show-btn-font);cursor:pointer}.result .altlink a:hover{background:var(--color-btn-background);color:var(--color-btn-font)}.result .codelines .highlight{color:inherit;background:inherit;font-weight:400}.result .url_header{display:flex;gap:.5rem}.result .url_wrapper{display:flex;align-items:center;font-size:1rem;color:var(--color-result-url-font);flex-flow:row nowrap;overflow:hidden;margin:0;padding:0}.result .url_wrapper .url_o1{white-space:nowrap;flex-shrink:1;padding-bottom:1px}.result .url_wrapper .url_o1 .url_i1{unicode-bidi:plaintext}.result .url_wrapper .url_o1:after{content:" ";width:1ch;display:inline-block}.result .url_wrapper .url_o2{overflow:hidden;white-space:nowrap;flex:0 1 content;text-align:right;padding-bottom:1px}.result .url_wrapper .url_o2 .url_i2{float:right}.result .published_date,.result .result_length,.result .result_views,.result .result_author,.result .result_shipping,.result .result_source_country{font-size:.8em;color:var(--color-result-publishdate-font)}.result .result_price{font-size:1.2em;color:var(--color-result-description-highlight-font)}.result img.thumbnail{float:left;padding-top:.6rem;padding-right:1rem;width:7rem;height:unset}.result .break{clear:both}.result-paper .attributes,.result-packages .attributes{display:table;border-spacing:.125rem}.result-paper .attributes div,.result-packages .attributes div{display:table-row}.result-paper .attributes div span,.result-packages .attributes div span{font-size:.9rem;margin-top:.25rem;display:table-cell}.result-paper .attributes div span time,.result-packages .attributes div span time{font-size:.9rem}.result-paper .attributes div span:first-child,.result-packages .attributes div span:first-child{color:var(--color-base-font);min-width:10rem}.result-paper .attributes div span:nth-child(2),.result-packages .attributes div span:nth-child(2){color:var(--color-result-publishdate-font)}.result-paper .content,.result-packages .content{margin-top:.25rem}.result-paper .comments,.result-packages .comments{font-size:.9rem;margin:.25rem 0 0;padding:0;word-wrap:break-word;line-height:1.24;font-style:italic}.result-packages .attributes{margin-top:.3rem}.template_group_images{display:flex;flex-wrap:wrap}.template_group_images:after{flex-grow:10;content:""}.category-videos,.category-news,.category-map,.category-music,.category-files,.category-social{border:1px solid var(--color-result-border);margin:0 .5rem 1rem!important;border-radius:10px}.category-social .image{width:auto!important;min-width:48px;min-height:48px;padding:0 5px 25px 0!important}.audio-control audio{width:100%;padding:10px 0 0}.embedded-content iframe{width:100%;padding:10px 0 0}.result-videos img.thumbnail{float:left;padding-top:.6rem;padding-right:1rem;width:20rem;height:unset}.result-videos .content{overflow:hidden}.result-videos .embedded-video iframe{width:100%;aspect-ratio:16 / 9;padding:10px 0 0}@supports not (aspect-ratio: 1 / 1){.result-videos .embedded-video iframe{height:25.3125rem}}.engines{float:right;display:flex;flex-wrap:wrap;justify-content:flex-end;color:var(--color-result-engines-font)}.engines span{font-size:smaller;margin-top:0;margin-bottom:0;margin-right:.5rem;margin-left:0}.small_font{font-size:.8em}.highlight{color:var(--color-result-link-font-highlight);background:inherit}.empty_element{font-style:italic}.result-images{flex-grow:1;padding:.5rem .5rem 3rem;margin:.25rem;border:none!important;height:12rem;width:unset}.result-images>a{position:relative;outline:none}.result-images img{margin:0;padding:0;border:none;height:100%;width:auto;object-fit:cover;vertical-align:bottom;background:var(--color-result-image-background)}.result-images .image_resolution{position:absolute;right:0;bottom:0;background:var(--color-image-resolution-background);padding:.3rem .5rem;font-size:.9rem;color:var(--color-image-resolution-font);border-top-left-radius:.3rem}.result-images span.title,.result-images span.source{display:block;position:absolute;width:100%;font-size:.9rem;color:var(--color-result-image-span-font);padding:.5rem 0 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.result-images span.source{padding:1.8rem 0 0;font-size:.7rem}.result-map img.image{float:right!important;height:100px!important;width:auto!important}.result-map table{font-size:.9em;width:auto;border-collapse:separate;border-spacing:0 .35rem}.result-map table th{font-weight:inherit;width:17rem;vertical-align:top;text-align:left}.result-map table td{vertical-align:top;text-align:left}.hidden{display:none!important}#results{margin-top:1rem;margin-right:2rem;margin-bottom:0;margin-left:10rem;display:grid;grid-template:"corrections sidebar" min-content "answers sidebar" min-content "urls sidebar" 1fr "pagination sidebar" min-content / 45rem 25rem;gap:0 5rem}#results #sidebar *:first-child{margin-top:0}#urls{padding:0;grid-area:urls}#apis .wrapper{display:flex}#suggestions .wrapper{display:flex;flex-flow:column;justify-content:flex-end}#suggestions .wrapper form{display:inline-block;flex:1 1 50%}#suggestions input,#infoboxes input{padding:0;margin:3px;font-size:.9em;display:inline-block;background:transparent;color:var(--color-result-search-url-font);cursor:pointer;width:100%;text-overflow:ellipsis;overflow:hidden;text-align:left}#suggestions input[type=submit],#infoboxes input[type=submit],#suggestions .infobox .url a,#infoboxes .infobox .url a{color:var(--color-result-link-font);text-decoration:none;font-size:.9rem}#suggestions input[type=submit]:hover,#infoboxes input[type=submit]:hover,#suggestions .infobox .url a:hover,#infoboxes .infobox .url a:hover{text-decoration:underline}#corrections{grid-area:corrections;display:flex;flex-flow:row wrap;margin:0 0 1em}#corrections h4,#corrections input[type=submit]{display:inline-block;padding:.5rem;margin:.5rem}#corrections input[type=submit]{font-size:.8rem;border-radius:5px}#infoboxes .title,#suggestions .title,#search_url .title,#engines_msg .title,#apis .title{margin:2em 0 .5em;color:var(--color-base-font)}summary.title{cursor:pointer;padding-top:1em}.sidebar-collapsible{border-top:1px solid var(--color-sidebar-border);padding-bottom:.5em}#sidebar-end-collapsible{border-bottom:1px solid var(--color-sidebar-border);width:100%}#answers{grid-area:answers;background:var(--color-answer-background);padding:1rem;margin:1rem 0;margin-top:0;color:var(--color-answer-font);border-radius:10px}#answers h4{display:none}#answers span{overflow-wrap:anywhere}#answers .answer{display:flex;flex-direction:column}#answers .answer-url{margin:5px 10px 10px auto}#infoboxes form{min-width:210px}#sidebar{grid-area:sidebar;word-wrap:break-word;color:var(--color-sidebar-font)}#sidebar .infobox{margin:10px 0;border:1px solid var(--color-sidebar-border);padding:1rem;font-size:.9em;border-radius:10px}#sidebar .infobox h2{margin:0 0 .5em}#sidebar .infobox img{max-width:100%;max-height:12em;display:block;margin:0 auto;padding:0}#sidebar .infobox dt{font-weight:700}#sidebar .infobox .attributes dl{margin:.5em 0}#sidebar .infobox .attributes dt{display:inline;margin:.5em .25em .5em 0;padding:0}#sidebar .infobox .attributes dd{display:inline;margin:.5em 0;padding:0}#sidebar .infobox input{font-size:1em}#sidebar .infobox br,#sidebar .infobox .attributes,#sidebar .infobox .urls{clear:both}#apis input{font-size:.9em;margin:0 10px 0 0;padding:5px 10px;border-radius:5px;background:var(--color-show-btn-background);color:var(--color-show-btn-font);cursor:pointer}#apis input:hover{background:var(--color-btn-background);color:var(--color-btn-font)}#engines_msg .engine-name{width:10rem}#engines_msg .response-error{color:var(--color-error)}#engines_msg .bar-chart-value{width:auto}#search_url div.selectable_url pre{float:left;width:200em}#search_url button#copy_url{float:right;padding:.4rem;margin-left:.5rem;border-radius:.3rem;display:none}#links_on_top{position:absolute;right:1rem;text-align:right;top:2.7rem;padding:0;border:0;display:flex;align-items:center;font-size:1em;color:var(--color-search-font)}#links_on_top a{display:flex;align-items:center;margin-left:1em}#links_on_top a svg{font-size:1.2em;margin-right:.125em}#links_on_top a,#links_on_top a:link *,#links_on_top a:hover *,#links_on_top a:visited *,#links_on_top a:active *{color:var(--color-search-font)}#pagination{grid-area:pagination}#pagination br{clear:both}.numbered_pagination{display:flex;flex-direction:row;justify-content:center;align-items:center;overflow:hidden}.page_number{background:transparent!important;color:var(--color-result-link-font)!important;text-decoration:underline}.page_number_current{background:transparent;color:var(--color-result-link-visited-font);border:none}#backToTop{border:1px solid var(--color-backtotop-border);margin:0;padding:0;font-size:1em;background:var(--color-backtotop-background);position:fixed;bottom:8rem;left:56.3rem;transition:opacity .5s;opacity:0;pointer-events:none;border-radius:10px}#backToTop a{display:block;margin:0;padding:.7em}#backToTop a,#backToTop a:visited,#backToTop a:hover,#backToTop a:active{color:var(--color-backtotop-font)}#results.scrolling #backToTop{opacity:1;pointer-events:all}@media screen and (width <= calc(79.75em - .5px)){#links_on_top span{display:none}}@media screen and (width <= 52rem){body.results_endpoint #links_on_top .link_on_top_about,body.results_endpoint #links_on_top .link_on_top_donate{display:none}}@media screen and (min-width: 50em) and (max-width: 79.75em){.center-alignment-no #links_on_top span{display:none}.center-alignment-no .page_with_header{margin:2rem .5rem;width:auto}.center-alignment-no #infoboxes{position:inherit;max-width:inherit}.center-alignment-no #infoboxes .infobox{clear:both}.center-alignment-no #infoboxes .infobox img{float:left;max-width:10em;margin:.5em .5em .5em 0}.center-alignment-no #sidebar{margin:0 .5rem .125rem;padding:0;float:none;border:none;width:auto}.center-alignment-no #sidebar input{border:0}.center-alignment-no .result .thumbnail{max-width:98%}.center-alignment-no .result .url span.url{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%}.center-alignment-no .result .engines{float:right;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:3px 0 0}.center-alignment-no .result-images{border-bottom:none!important}.center-alignment-no .image_result,.center-alignment-no .image_result img{max-width:98%}.center-alignment-no #backToTop{display:none}.center-alignment-no #pagination{margin:2rem 0 0!important}.center-alignment-no #main_results div#results{margin:0 auto;justify-content:center;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 45rem;gap:0}}#main_results div#results.only_template_images{margin:1rem .5rem 0;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 100%;gap:0}#main_results div#results.only_template_images #sidebar{display:none}#main_results div#results.only_template_images #urls{margin:0;display:flex;flex-wrap:wrap}#main_results div#results.only_template_images #urls:after{flex-grow:10;content:""}#main_results div#results.only_template_images #backToTop{left:auto;right:1rem}#main_results div#results.only_template_images #pagination{margin-right:4rem}@media screen and (max-width: 50em){#links_on_top span{display:none}.page_with_header{margin:2rem .5rem;width:auto}#infoboxes{position:inherit;max-width:inherit}#infoboxes .infobox{clear:both}#infoboxes .infobox img{float:left;max-width:10em;margin:.5em .5em .5em 0}#sidebar{margin:0 .5rem .125rem;padding:0;float:none;border:none;width:auto}#sidebar input{border:0}.result .thumbnail{max-width:98%}.result .url span.url{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%}.result .engines{float:right;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:3px 0 0}.result-images{border-bottom:none!important}.image_result,.image_result img{max-width:98%}#backToTop{display:none}#pagination{margin:2rem 0 0!important}#main_results div#results{margin:0 auto;justify-content:center;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 45rem;gap:0}html{background-color:var(--color-base-background-mobile)}#main_results div#results{grid-template-columns:100%;margin:0 auto}#links_on_top{top:1.4rem;right:10px}#main_index #links_on_top{top:.5rem;right:.5rem}#results{margin:0;padding:0}#pagination{margin:2rem 1rem 0!important}article[data-vim-selected]{border:1px solid var(--color-result-vim-arrow);border-radius:10px}.result{background:var(--color-result-background);border:1px solid var(--color-result-background);margin:1rem 2%;width:96%;border-radius:10px}.result-images{margin:0;height:10rem;background:var(--color-base-background-mobile);width:unset}.infobox{border:none!important;background-color:var(--color-sidebar-background)}.numbered_pagination{display:none}.result-paper .attributes,.result-packages .attributes,.result-paper .attributes div,.result-packages .attributes div{display:block}.result-paper .attributes div span,.result-packages .attributes div span{display:inline}.result-paper .attributes div span:first-child,.result-packages .attributes div span:first-child{font-weight:700}.result-paper .attributes div span:nth-child(2),.result-packages .attributes div span:nth-child(2){margin-left:.5rem}}@media screen and (max-width: 35em){.result-videos img.thumbnail{float:none!important}.result-videos .content{overflow:inherit}}pre code{white-space:pre-wrap}#main_results .result-keyvalue caption{padding:.8rem .5rem;font-style:italic;caption-side:bottom;background-color:var(--color-result-keyvalue-table)}#main_results .result-keyvalue .col-key{width:25%}#main_results .result-keyvalue table{word-break:break-word;table-layout:fixed;width:100%;background-color:var(--color-result-keyvalue-table)}#main_results .result-keyvalue tr.odd{background-color:var(--color-result-keyvalue-odd)}#main_results .result-keyvalue tr.even{background-color:var(--color-result-keyvalue-even)}#main_results .result-keyvalue th,#main_results .result-keyvalue td{padding:.3rem .5rem} +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}:root{--color-base-font: #444;--color-base-font-rgb: 68, 68, 68;--color-base-background: #fff;--color-base-background-mobile: #f2f5f8;--color-url-font: #334999;--color-url-visited-font: #9822c3;--color-header-background: #fdfbff;--color-header-border: #ddd;--color-footer-background: #fdfbff;--color-footer-border: #ddd;--color-sidebar-border: #ddd;--color-sidebar-font: #000;--color-sidebar-background: #fff;--color-backtotop-font: #444;--color-backtotop-border: #ddd;--color-backtotop-background: #fff;--color-btn-background: #3050ff;--color-btn-font: #fff;--color-show-btn-background: #bbb;--color-show-btn-font: #000;--color-search-border: #bbb;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #fff;--color-search-font: #222;--color-search-background-hover: #3050ff;--color-error: #db3434;--color-error-background: #fae1e1;--color-warning: #dbba34;--color-warning-background: #faf5e1;--color-success: #42db34;--color-success-background: #e3fae1;--color-categories-item-selected-font: #3050ff;--color-categories-item-border-selected: #3050ff;--color-autocomplete-font: #000;--color-autocomplete-border: #bbb;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #fff;--color-autocomplete-background-hover: #e3e3e3;--color-answer-font: #444;--color-answer-background: #fff;--color-result-keyvalue-col-table: #fdfbff;--color-result-keyvalue-odd: #fdfbff;--color-result-keyvalue-even: #fff;--color-result-background: #fff;--color-result-border: #ddd;--color-result-url-font: #000;--color-result-vim-selected: #f7f7f7;--color-result-vim-arrow: #000bbb;--color-result-description-highlight-font: #000;--color-result-link-font: #000bbb;--color-result-link-font-highlight: #000bbb;--color-result-link-visited-font: #9822c3;--color-result-publishdate-font: #777;--color-result-engines-font: #545454;--color-result-search-url-border: #ddd;--color-result-search-url-font: #000;--color-result-image-span-font: #444;--color-result-image-span-font-selected: #fff;--color-result-image-background: #fff;--color-settings-tr-hover: #ebebeb;--color-settings-engine-description-font: #545454;--color-settings-table-group-background: #0001;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #242424;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #545454;--color-toolkit-kbd-font: #fff;--color-toolkit-kbd-background: #000;--color-toolkit-dialog-border: #ddd;--color-toolkit-dialog-background: #fff;--color-toolkit-tabs-label-border: #fff;--color-toolkit-tabs-section-border: #ddd;--color-toolkit-select-background: #e1e1e1;--color-toolkit-select-border: #ddd;--color-toolkit-select-background-hover: #bbb;--color-toolkit-input-text-font: #222;--color-toolkit-checkbox-onoff-off-background: #ddd;--color-toolkit-checkbox-onoff-on-background: #ddd;--color-toolkit-checkbox-onoff-on-mark-background: #3050ff;--color-toolkit-checkbox-onoff-on-mark-color: #fff;--color-toolkit-checkbox-onoff-off-mark-background: #aaa;--color-toolkit-checkbox-onoff-off-mark-color: #fff;--color-toolkit-checkbox-label-background: #ddd;--color-toolkit-checkbox-label-border: #ddd;--color-toolkit-checkbox-input-border: #3050ff;--color-toolkit-engine-tooltip-border: #ddd;--color-toolkit-engine-tooltip-background: #fff;--color-toolkit-loader-border: rgba(0, 0, 0, .2);--color-toolkit-loader-borderleft: rgba(255, 255, 255, 0);--color-doc-code: #003;--color-doc-code-background: #ddeaff;--color-bar-chart-primary: #5bc0de;--color-bar-chart-secondary: #deb15b;--color-image-resolution-background: rgba(0, 0, 0, .5);--color-image-resolution-font: #fff;--color-loading-indicator: rgba(255, 255, 255, .2);--color-loading-indicator-gap: #fff;--color-line-number: #64708d;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}@media (prefers-color-scheme: dark){:root.theme-auto{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}}:root.theme-dark{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}:root.theme-black{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc;--color-base-background: #000;--color-base-background-mobile: #000;--color-header-background: #000;--color-footer-background: #000;--color-sidebar-background: #000}.code-highlight pre{line-height:100%}.code-highlight td.linenos .normal,.code-highlight span.linenos{color:inherit;background-color:transparent;padding-left:5px;padding-right:5px}.code-highlight td.linenos .special,.code-highlight span.linenos.special{color:#000;background-color:#ffffc0;padding-left:5px;padding-right:5px}.code-highlight .hll{background-color:#ffc}.code-highlight .c{color:#3d7b7b;font-style:italic}.code-highlight .err{border:1px solid #F00}.code-highlight .k{color:green;font-weight:700}.code-highlight .o{color:#666}.code-highlight .ch,.code-highlight .cm{color:#3d7b7b;font-style:italic}.code-highlight .cp{color:#9c6500}.code-highlight .cpf,.code-highlight .c1,.code-highlight .cs{color:#3d7b7b;font-style:italic}.code-highlight .gd{color:#a00000}.code-highlight .ge{font-style:italic}.code-highlight .ges{font-weight:700;font-style:italic}.code-highlight .gr{color:#e40000}.code-highlight .gh{color:navy;font-weight:700}.code-highlight .gi{color:#008400}.code-highlight .go{color:#717171}.code-highlight .gp{color:navy;font-weight:700}.code-highlight .gs{font-weight:700}.code-highlight .gu{color:purple;font-weight:700}.code-highlight .gt{color:#04d}.code-highlight .kc,.code-highlight .kd,.code-highlight .kn{color:green;font-weight:700}.code-highlight .kp{color:green}.code-highlight .kr{color:green;font-weight:700}.code-highlight .kt{color:#b00040}.code-highlight .m{color:#666}.code-highlight .s{color:#ba2121}.code-highlight .na{color:#687822}.code-highlight .nb{color:green}.code-highlight .nc{color:#00f;font-weight:700}.code-highlight .no{color:#800}.code-highlight .nd{color:#a2f}.code-highlight .ni{color:#717171;font-weight:700}.code-highlight .ne{color:#cb3f38;font-weight:700}.code-highlight .nf{color:#00f}.code-highlight .nl{color:#767600}.code-highlight .nn{color:#00f;font-weight:700}.code-highlight .nt{color:green;font-weight:700}.code-highlight .nv{color:#19177c}.code-highlight .ow{color:#a2f;font-weight:700}.code-highlight .w{color:#bbb}.code-highlight .mb,.code-highlight .mf,.code-highlight .mh,.code-highlight .mi,.code-highlight .mo{color:#666}.code-highlight .sa,.code-highlight .sb,.code-highlight .sc,.code-highlight .dl{color:#ba2121}.code-highlight .sd{color:#ba2121;font-style:italic}.code-highlight .s2{color:#ba2121}.code-highlight .se{color:#aa5d1f;font-weight:700}.code-highlight .sh{color:#ba2121}.code-highlight .si{color:#a45a77;font-weight:700}.code-highlight .sx{color:green}.code-highlight .sr{color:#a45a77}.code-highlight .s1{color:#ba2121}.code-highlight .ss{color:#19177c}.code-highlight .bp{color:green}.code-highlight .fm{color:#00f}.code-highlight .vc,.code-highlight .vg,.code-highlight .vi,.code-highlight .vm{color:#19177c}.code-highlight .il{color:#666}.codelines{margin:.125rem 0 0;padding:1rem 0 0}.code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}.code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}.code-highlight .linenos::selection{background:transparent}.code-highlight .linenos::-moz-selection{background:transparent}.code-highlight span.linenos{color:var(--color-line-number)}@media (prefers-color-scheme: dark){:root.theme-auto .code-highlight pre{line-height:100%}:root.theme-auto .code-highlight td.linenos .normal{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight span.linenos{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight td.linenos .special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight span.linenos.special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight .hll{background-color:#6e7681}:root.theme-auto .code-highlight .c{color:#7e8aa1}:root.theme-auto .code-highlight .err{color:#f88f7f}:root.theme-auto .code-highlight .esc{color:#d4d2c8}:root.theme-auto .code-highlight .g{color:#d4d2c8}:root.theme-auto .code-highlight .k{color:#ffad66}:root.theme-auto .code-highlight .l{color:#d5ff80}:root.theme-auto .code-highlight .n{color:#d4d2c8}:root.theme-auto .code-highlight .o{color:#ffad66}:root.theme-auto .code-highlight .x{color:#d4d2c8}:root.theme-auto .code-highlight .p{color:#d4d2c8}:root.theme-auto .code-highlight .ch{color:#f88f7f;font-style:italic}:root.theme-auto .code-highlight .cm{color:#7e8aa1}:root.theme-auto .code-highlight .cp{color:#ffad66;font-weight:700}:root.theme-auto .code-highlight .cpf{color:#7e8aa1}:root.theme-auto .code-highlight .c1{color:#7e8aa1}:root.theme-auto .code-highlight .cs{color:#7e8aa1;font-style:italic}:root.theme-auto .code-highlight .gd{color:#f88f7f;background-color:#3d1e20}:root.theme-auto .code-highlight .ge{color:#d4d2c8;font-style:italic}:root.theme-auto .code-highlight .ges{color:#d4d2c8}:root.theme-auto .code-highlight .gr{color:#f88f7f}:root.theme-auto .code-highlight .gh{color:#d4d2c8}:root.theme-auto .code-highlight .gi{color:#6ad4af;background-color:#19362c}:root.theme-auto .code-highlight .go{color:#7e8aa1}:root.theme-auto .code-highlight .gp{color:#d4d2c8}:root.theme-auto .code-highlight .gs{color:#d4d2c8;font-weight:700}:root.theme-auto .code-highlight .gu{color:#d4d2c8}:root.theme-auto .code-highlight .gt{color:#f88f7f}:root.theme-auto .code-highlight .kc{color:#ffad66}:root.theme-auto .code-highlight .kd{color:#ffad66}:root.theme-auto .code-highlight .kn{color:#ffad66}:root.theme-auto .code-highlight .kp{color:#ffad66}:root.theme-auto .code-highlight .kr{color:#ffad66}:root.theme-auto .code-highlight .kt{color:#73d0ff}:root.theme-auto .code-highlight .ld{color:#d5ff80}:root.theme-auto .code-highlight .m{color:#dfbfff}:root.theme-auto .code-highlight .s{color:#d5ff80}:root.theme-auto .code-highlight .na{color:#ffd173}:root.theme-auto .code-highlight .nb{color:#ffd173}:root.theme-auto .code-highlight .nc{color:#73d0ff}:root.theme-auto .code-highlight .no{color:#ffd173}:root.theme-auto .code-highlight .nd{color:#7e8aa1;font-weight:700;font-style:italic}:root.theme-auto .code-highlight .ni{color:#95e6cb}:root.theme-auto .code-highlight .ne{color:#73d0ff}:root.theme-auto .code-highlight .nf{color:#ffd173}:root.theme-auto .code-highlight .nl{color:#d4d2c8}:root.theme-auto .code-highlight .nn{color:#d4d2c8}:root.theme-auto .code-highlight .nx{color:#d4d2c8}:root.theme-auto .code-highlight .py{color:#ffd173}:root.theme-auto .code-highlight .nt{color:#5ccfe6}:root.theme-auto .code-highlight .nv{color:#d4d2c8}:root.theme-auto .code-highlight .ow{color:#ffad66}:root.theme-auto .code-highlight .pm{color:#d4d2c8}:root.theme-auto .code-highlight .w{color:#d4d2c8}:root.theme-auto .code-highlight .mb{color:#dfbfff}:root.theme-auto .code-highlight .mf{color:#dfbfff}:root.theme-auto .code-highlight .mh{color:#dfbfff}:root.theme-auto .code-highlight .mi{color:#dfbfff}:root.theme-auto .code-highlight .mo{color:#dfbfff}:root.theme-auto .code-highlight .sa{color:#f29e74}:root.theme-auto .code-highlight .sb{color:#d5ff80}:root.theme-auto .code-highlight .sc{color:#d5ff80}:root.theme-auto .code-highlight .dl{color:#d5ff80}:root.theme-auto .code-highlight .sd{color:#7e8aa1}:root.theme-auto .code-highlight .s2{color:#d5ff80}:root.theme-auto .code-highlight .se{color:#95e6cb}:root.theme-auto .code-highlight .sh{color:#d5ff80}:root.theme-auto .code-highlight .si{color:#95e6cb}:root.theme-auto .code-highlight .sx{color:#95e6cb}:root.theme-auto .code-highlight .sr{color:#95e6cb}:root.theme-auto .code-highlight .s1{color:#d5ff80}:root.theme-auto .code-highlight .ss{color:#dfbfff}:root.theme-auto .code-highlight .bp{color:#5ccfe6}:root.theme-auto .code-highlight .fm{color:#ffd173}:root.theme-auto .code-highlight .vc{color:#d4d2c8}:root.theme-auto .code-highlight .vg{color:#d4d2c8}:root.theme-auto .code-highlight .vi{color:#d4d2c8}:root.theme-auto .code-highlight .vm{color:#d4d2c8}:root.theme-auto .code-highlight .il{color:#dfbfff}:root.theme-auto .code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}:root.theme-auto .code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}:root.theme-auto .code-highlight .linenos::selection{background:transparent}:root.theme-auto .code-highlight .linenos::-moz-selection{background:transparent}:root.theme-auto .code-highlight span.linenos{color:var(--color-line-number)}}:root.theme-dark .code-highlight pre{line-height:100%}:root.theme-dark .code-highlight td.linenos .normal{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight span.linenos{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight td.linenos .special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight span.linenos.special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight .hll{background-color:#6e7681}:root.theme-dark .code-highlight .c{color:#7e8aa1}:root.theme-dark .code-highlight .err{color:#f88f7f}:root.theme-dark .code-highlight .esc{color:#d4d2c8}:root.theme-dark .code-highlight .g{color:#d4d2c8}:root.theme-dark .code-highlight .k{color:#ffad66}:root.theme-dark .code-highlight .l{color:#d5ff80}:root.theme-dark .code-highlight .n{color:#d4d2c8}:root.theme-dark .code-highlight .o{color:#ffad66}:root.theme-dark .code-highlight .x{color:#d4d2c8}:root.theme-dark .code-highlight .p{color:#d4d2c8}:root.theme-dark .code-highlight .ch{color:#f88f7f;font-style:italic}:root.theme-dark .code-highlight .cm{color:#7e8aa1}:root.theme-dark .code-highlight .cp{color:#ffad66;font-weight:700}:root.theme-dark .code-highlight .cpf{color:#7e8aa1}:root.theme-dark .code-highlight .c1{color:#7e8aa1}:root.theme-dark .code-highlight .cs{color:#7e8aa1;font-style:italic}:root.theme-dark .code-highlight .gd{color:#f88f7f;background-color:#3d1e20}:root.theme-dark .code-highlight .ge{color:#d4d2c8;font-style:italic}:root.theme-dark .code-highlight .ges{color:#d4d2c8}:root.theme-dark .code-highlight .gr{color:#f88f7f}:root.theme-dark .code-highlight .gh{color:#d4d2c8}:root.theme-dark .code-highlight .gi{color:#6ad4af;background-color:#19362c}:root.theme-dark .code-highlight .go{color:#7e8aa1}:root.theme-dark .code-highlight .gp{color:#d4d2c8}:root.theme-dark .code-highlight .gs{color:#d4d2c8;font-weight:700}:root.theme-dark .code-highlight .gu{color:#d4d2c8}:root.theme-dark .code-highlight .gt{color:#f88f7f}:root.theme-dark .code-highlight .kc{color:#ffad66}:root.theme-dark .code-highlight .kd{color:#ffad66}:root.theme-dark .code-highlight .kn{color:#ffad66}:root.theme-dark .code-highlight .kp{color:#ffad66}:root.theme-dark .code-highlight .kr{color:#ffad66}:root.theme-dark .code-highlight .kt{color:#73d0ff}:root.theme-dark .code-highlight .ld{color:#d5ff80}:root.theme-dark .code-highlight .m{color:#dfbfff}:root.theme-dark .code-highlight .s{color:#d5ff80}:root.theme-dark .code-highlight .na{color:#ffd173}:root.theme-dark .code-highlight .nb{color:#ffd173}:root.theme-dark .code-highlight .nc{color:#73d0ff}:root.theme-dark .code-highlight .no{color:#ffd173}:root.theme-dark .code-highlight .nd{color:#7e8aa1;font-weight:700;font-style:italic}:root.theme-dark .code-highlight .ni{color:#95e6cb}:root.theme-dark .code-highlight .ne{color:#73d0ff}:root.theme-dark .code-highlight .nf{color:#ffd173}:root.theme-dark .code-highlight .nl{color:#d4d2c8}:root.theme-dark .code-highlight .nn{color:#d4d2c8}:root.theme-dark .code-highlight .nx{color:#d4d2c8}:root.theme-dark .code-highlight .py{color:#ffd173}:root.theme-dark .code-highlight .nt{color:#5ccfe6}:root.theme-dark .code-highlight .nv{color:#d4d2c8}:root.theme-dark .code-highlight .ow{color:#ffad66}:root.theme-dark .code-highlight .pm{color:#d4d2c8}:root.theme-dark .code-highlight .w{color:#d4d2c8}:root.theme-dark .code-highlight .mb{color:#dfbfff}:root.theme-dark .code-highlight .mf{color:#dfbfff}:root.theme-dark .code-highlight .mh{color:#dfbfff}:root.theme-dark .code-highlight .mi{color:#dfbfff}:root.theme-dark .code-highlight .mo{color:#dfbfff}:root.theme-dark .code-highlight .sa{color:#f29e74}:root.theme-dark .code-highlight .sb{color:#d5ff80}:root.theme-dark .code-highlight .sc{color:#d5ff80}:root.theme-dark .code-highlight .dl{color:#d5ff80}:root.theme-dark .code-highlight .sd{color:#7e8aa1}:root.theme-dark .code-highlight .s2{color:#d5ff80}:root.theme-dark .code-highlight .se{color:#95e6cb}:root.theme-dark .code-highlight .sh{color:#d5ff80}:root.theme-dark .code-highlight .si{color:#95e6cb}:root.theme-dark .code-highlight .sx{color:#95e6cb}:root.theme-dark .code-highlight .sr{color:#95e6cb}:root.theme-dark .code-highlight .s1{color:#d5ff80}:root.theme-dark .code-highlight .ss{color:#dfbfff}:root.theme-dark .code-highlight .bp{color:#5ccfe6}:root.theme-dark .code-highlight .fm{color:#ffd173}:root.theme-dark .code-highlight .vc{color:#d4d2c8}:root.theme-dark .code-highlight .vg{color:#d4d2c8}:root.theme-dark .code-highlight .vi{color:#d4d2c8}:root.theme-dark .code-highlight .vm{color:#d4d2c8}:root.theme-dark .code-highlight .il{color:#dfbfff}:root.theme-dark .code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}:root.theme-dark .code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}:root.theme-dark .code-highlight .linenos::selection{background:transparent}:root.theme-dark .code-highlight .linenos::-moz-selection{background:transparent}:root.theme-dark .code-highlight span.linenos{color:var(--color-line-number)}html.no-js .hide_if_nojs,html.js .show_if_nojs{display:none}.center{text-align:center}.right{float:right}.left{float:left}.invisible{display:none!important}.list-unstyled{list-style-type:none}.list-unstyled li{margin-top:4px;margin-bottom:4px}.danger{background-color:var(--color-error-background)}.warning{background:var(--color-warning-background)}.success{background:var(--color-success-background)}.badge{display:inline-block;color:var(--color-toolkit-badge-font);background-color:var(--color-toolkit-badge-background);text-align:center;white-space:nowrap;vertical-align:baseline;min-width:10px;padding:1px 5px;border-radius:5px}kbd{padding:2px 4px;margin:1px;font-size:90%;color:var(--color-toolkit-kbd-font);background:var(--color-toolkit-kbd-background)}table{width:100%}table.striped tr{border-bottom:1px solid var(--color-settings-tr-hover)}th{padding:.4em}td{padding:0 4px}tr:hover{background:var(--color-settings-tr-hover)!important}div.selectable_url{display:block;border:1px solid var(--color-result-search-url-border);padding:4px;color:var(--color-result-search-url-font);margin:.1em;overflow:hidden;height:1.2em;line-height:1.2em;border-radius:5px}div.selectable_url pre{display:block;font-size:.8em;word-break:break-all;margin:.1em;-webkit-user-select:all;user-select:all}.dialog-error{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:left;border-radius:10px;color:var(--color-error);background:var(--color-error-background);border-color:var(--color-error)}.dialog-error .close{float:right;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-error ul,.dialog-error ol,.dialog-error p{margin:1px 0 0}.dialog-error table{width:auto}.dialog-error tr{vertical-align:text-top}.dialog-error tr:hover{background:transparent!important}.dialog-error td{padding:0 1em 0 0;padding-right:1rem;padding-bottom:0;padding-left:0}.dialog-error h4{margin-top:.3em;margin-bottom:.3em}.dialog-error-block{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:left;border-radius:10px;display:block;color:var(--color-error);background:var(--color-error-background);border-color:var(--color-error)}.dialog-error-block .close{float:right;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-error-block ul,.dialog-error-block ol,.dialog-error-block p{margin:1px 0 0}.dialog-error-block table{width:auto}.dialog-error-block tr{vertical-align:text-top}.dialog-error-block tr:hover{background:transparent!important}.dialog-error-block td{padding:0 1em 0 0;padding-right:1rem;padding-bottom:0;padding-left:0}.dialog-error-block h4{margin-top:.3em;margin-bottom:.3em}.dialog-warning{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:left;border-radius:10px;color:var(--color-warning);background:var(--color-warning-background);border-color:var(--color-warning)}.dialog-warning .close{float:right;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-warning ul,.dialog-warning ol,.dialog-warning p{margin:1px 0 0}.dialog-warning table{width:auto}.dialog-warning tr{vertical-align:text-top}.dialog-warning tr:hover{background:transparent!important}.dialog-warning td{padding:0 1em 0 0;padding-right:1rem;padding-bottom:0;padding-left:0}.dialog-warning h4{margin-top:.3em;margin-bottom:.3em}.dialog-modal{position:relative;display:flex;padding:1rem;border:1px solid var(--color-toolkit-dialog-border);text-align:left;border-radius:10px;display:block;background:var(--color-toolkit-dialog-background);position:fixed;top:50%;left:50%;margin:0 auto;transform:translate(-50%,-50%);z-index:5000}.dialog-modal .close{float:right;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-modal ul,.dialog-modal ol,.dialog-modal p{margin:1px 0 0}.dialog-modal table{width:auto}.dialog-modal tr{vertical-align:text-top}.dialog-modal tr:hover{background:transparent!important}.dialog-modal td{padding:0 1em 0 0;padding-right:1rem;padding-bottom:0;padding-left:0}.dialog-modal h4{margin-top:.3em;margin-bottom:.3em}.dialog-modal h3{margin-top:0}.btn-collapse{cursor:pointer}.scrollx{overflow:auto hidden;display:block;padding:0;margin:0;border:none}.tabs .tabs>label{font-size:90%}ul.tabs{border-bottom:1px solid var(--color-toolkit-tabs-section-border);list-style:none;padding-left:0}ul.tabs li{display:flex}.tabs{display:flex;flex-wrap:wrap;width:100%;min-width:100%}.tabs>*{order:2}.tabs>input[type=radio]{display:none}.tabs>label,.tabs>li>a{order:1;padding:.7em;margin:0 .7em;letter-spacing:.5px;text-transform:uppercase;border:solid var(--color-toolkit-tabs-label-border);border-width:0 0 2px 0;color:unset;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:pointer}.tabs>label.active,.tabs>li>a.active{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font)}.tabs>label:hover,.tabs>li>a:hover{border-bottom:2px solid var(--color-categories-item-border-selected)}.tabs>section{min-width:100%;padding:.7rem 0;box-sizing:border-box;border-top:1px solid var(--color-toolkit-tabs-section-border);display:none}.tabs>label:last-of-type{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font);letter-spacing:-.1px}.tabs>section:last-of-type{display:block}html body .tabs>input:checked~section{display:none}html body .tabs>input:checked~label{position:inherited;background:inherit;border-bottom:2px solid transparent;font-weight:400;color:inherit}html body .tabs>input:checked~label:hover{border-bottom:2px solid var(--color-categories-item-border-selected)}html body .tabs>input:checked+label{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font)}html body .tabs>input:checked+label+section{display:block}select{height:2.4rem;margin-top:0;margin-right:1rem;margin-bottom:0;margin-left:0;padding:.2rem!important;color:var(--color-search-font);font-size:.9rem;z-index:100}select:hover,select:focus{cursor:pointer}@supports ((background-position-x: 100%) and ((appearance: none) or (-webkit-appearance: none) or (-moz-appearance: none))){select{appearance:none;-webkit-appearance:none;-moz-appearance:none;border-width:0 2rem 0 0;border-color:transparent;background:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E) no-repeat;background-position-x:calc(100% + 2rem);background-size:2rem;background-origin:content-box;background-color:var(--color-toolkit-select-background);outline:medium none;text-overflow:ellipsis;border-radius:5px}select:hover,select:focus{background-color:var(--color-toolkit-select-background-hover)}select option{background-color:var(--color-base-background)}@media (prefers-color-scheme: dark){html.theme-auto select,html.theme-dark select{background-image:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20fill%3D%22%23ddd%22%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E)}}html.theme-dark select{background-image:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20fill%3D%22%23ddd%22%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E)}}input.checkbox-onoff[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;display:inline-block;width:2.5em;height:.7em;box-shadow:none!important;margin:0 16px;border-radius:10px;position:relative}input.checkbox-onoff[type=checkbox]:focus,input.checkbox-onoff[type=checkbox]:hover{outline:none}input.checkbox-onoff[type=checkbox]:focus:after{content:"";position:absolute;width:3.5em;height:1.65em;border:1px solid var(--color-btn-background);border-radius:12px;box-shadow:var(--color-btn-background) 0 0 3px;z-index:1200;top:-.55em;left:-.6em}input.checkbox-onoff[type=checkbox]:before{position:absolute;top:-.5em;display:flex;justify-content:center;align-items:center;font-size:.75em;width:1.875em;height:1.875em;border-radius:50%}input.checkbox-onoff[type=checkbox],input.checkbox-onoff.reversed-checkbox[type=checkbox]:checked{background:var(--color-toolkit-checkbox-onoff-off-background)}input.checkbox-onoff[type=checkbox]:before,input.checkbox-onoff.reversed-checkbox[type=checkbox]:checked:before{left:-.5em;content:"✕";color:var(--color-toolkit-checkbox-onoff-off-mark-color);background:var(--color-toolkit-checkbox-onoff-off-mark-background)}input.checkbox-onoff[type=checkbox]:checked,input.checkbox-onoff.reversed-checkbox[type=checkbox]{background:var(--color-toolkit-checkbox-onoff-on-background)}input.checkbox-onoff[type=checkbox]:checked:before,input.checkbox-onoff.reversed-checkbox[type=checkbox]:before{left:calc(100% - 1.5em);content:"✓";color:var(--color-toolkit-checkbox-onoff-on-mark-color);background:var(--color-toolkit-checkbox-onoff-on-mark-background)}@supports (transform: rotate(-45deg)){input[type=checkbox]:not(.checkbox-onoff){-webkit-appearance:none;-moz-appearance:none;appearance:none;width:20px;height:20px;cursor:pointer;position:relative;top:0;left:0;border:2px solid var(--color-toolkit-checkbox-input-border);border-radius:.3em}input[type=checkbox]:not(.checkbox-onoff):after{content:"";width:9px;height:5px;position:absolute;top:3px;left:2px;border:3px solid var(--color-toolkit-checkbox-label-border);border-top:none;border-right:none;background:transparent;opacity:0;transform:rotate(-45deg)}input[type=checkbox]:not(.checkbox-onoff):checked:after{border-color:var(--color-toolkit-checkbox-input-border);opacity:1}input[type=checkbox][disabled]:not(.checkbox-onoff){border:inherit;background-color:transparent!important;cursor:inherit}input.checkbox[type=checkbox]:not(:checked,[disabled],.checkbox-onoff):hover:after{opacity:.5}}@media screen and (max-width: 50em){.tabs>label{width:100%}}.loader,.loader:after{border-radius:50%;width:2em;height:2em}.loader{margin:1em auto;font-size:10px;position:relative;text-indent:-9999em;border-top:.5em solid var(--color-toolkit-loader-border);border-right:.5em solid var(--color-toolkit-loader-border);border-bottom:.5em solid var(--color-toolkit-loader-border);border-left:.5em solid var(--color-toolkit-loader-borderleft);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:load8 1.2s infinite linear;animation:load8 1.2s infinite linear}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.engine-tooltip{display:none;position:absolute;padding:.5rem 1rem;margin:0 0 0 2rem;border:1px solid var(--color-toolkit-engine-tooltip-border);background:var(--color-toolkit-engine-tooltip-background);font-size:14px;font-weight:400;z-index:5000;text-align:left;border-radius:10px}th:hover .engine-tooltip,td:hover .engine-tooltip,.engine-tooltip:hover{display:inline-block}.stacked-bar-chart{margin:0;padding:0 .125rem 0 4rem;width:100%;width:-moz-available;width:-webkit-fill-available;width:fill;flex-flow:row nowrap;align-items:center;display:inline-flex}.stacked-bar-chart-value{width:3rem;display:inline-block;position:absolute;padding:0 .5rem;text-align:right}.stacked-bar-chart-base{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset}.stacked-bar-chart-median{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:var(--color-base-font);border:1px solid rgba(var(--color-base-font-rgb),.9);padding:.3rem 0}.stacked-bar-chart-rate80{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border:1px solid rgba(var(--color-base-font-rgb),.3);padding:.3rem 0}.stacked-bar-chart-rate95{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border-bottom:1px dotted rgba(var(--color-base-font-rgb),.5);padding:0}.stacked-bar-chart-rate100{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border-left:1px solid rgba(var(--color-base-font-rgb),.9);padding:.4rem 0;width:1px}/*! Autocomplete.js v2.6.3 | license MIT | (c) 2017, Baptiste Donaux | http://autocomplete-js.com */.autocomplete{position:absolute;width:44rem;max-width:calc(100% - 1rem);max-height:0;overflow-y:hidden;text-align:left;border-radius:10px}.autocomplete:active,.autocomplete:focus,.autocomplete:hover{background-color:var(--color-autocomplete-background)}.autocomplete:empty{display:none}.autocomplete>ul{list-style-type:none;margin:0;padding:0}.autocomplete>ul>li{cursor:pointer;padding:.5rem 1rem}.autocomplete>ul>li.active,.autocomplete>ul>li:active,.autocomplete>ul>li:focus,.autocomplete>ul>li:hover{background-color:var(--color-autocomplete-background-hover)}.autocomplete>ul>li.active a:active,.autocomplete>ul>li:active a:active,.autocomplete>ul>li:focus a:active,.autocomplete>ul>li:hover a:active,.autocomplete>ul>li.active a:focus,.autocomplete>ul>li:active a:focus,.autocomplete>ul>li:focus a:focus,.autocomplete>ul>li:hover a:focus,.autocomplete>ul>li.active a:hover,.autocomplete>ul>li:active a:hover,.autocomplete>ul>li:focus a:hover,.autocomplete>ul>li:hover a:hover{text-decoration:none}.autocomplete>ul>li.locked{cursor:inherit}.autocomplete.open{display:block;background-color:var(--color-autocomplete-background);color:var(--color-autocomplete-font);max-height:32rem;overflow-y:auto;z-index:5000;margin-top:3.5rem;border-radius:.8rem}.autocomplete.open:empty{display:none}@media screen and (max-width: 50em){.autocomplete>ul>li{padding:1rem}}#main_results #results.image-detail-open.only_template_images{width:min(98%,59.25rem)!important}#main_results #results.only_template_images.image-detail-open #backToTop{left:56.75rem!important;right:inherit}article.result-images .detail{display:none}#results.image-detail-open article.result-images[data-vim-selected] .detail{display:flex;flex-direction:column;position:fixed;left:60rem;right:0;top:13rem;transition:top 64ms ease-in 0s;bottom:0;background:var(--color-result-detail-background);border:1px solid var(--color-result-detail-background);z-index:1000;padding:4rem 3rem 3rem;overflow-y:scroll}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source{display:block;flex:1;text-align:left;width:100%;border:none;text-decoration:none}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{padding:0;margin:0;border:none;object-fit:contain;width:inherit;height:inherit;max-width:100%;min-height:inherit;max-height:calc(100vh - 42rem);background:inherit}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels{color:var(--color-result-detail-font);height:19rem}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels hr{border-top:1px solid var(--color-result-detail-hr);border-bottom:none}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels h4{height:2rem;overflow:hidden;text-overflow:ellipsis;font-size:.9rem;margin-bottom:0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p{color:var(--color-result-detail-label-font);font-size:.9rem;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;margin:.8rem 0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p span{display:inline-block;width:12rem}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels h4,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a{text-align:left}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-content{height:2rem;line-height:unset;overflow:hidden;text-overflow:ellipsis}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url{white-space:nowrap;overflow:hidden hidden;text-overflow:ellipsis}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-content:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url:hover{position:relative;overflow:inherit!important;background:var(--color-result-detail-background);text-overflow:inherit!important}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:active{color:var(--color-result-detail-link)}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:hover{text-decoration:underline}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close{top:1rem;left:1rem;padding:.4rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous{top:1rem;right:6rem;padding:.4rem .5rem .4rem .3rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next{top:1rem;right:2rem;padding:.4rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous{border-radius:50%;display:block;width:1.5rem;height:1.5rem;position:absolute;filter:opacity(40%);z-index:1200}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close span,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next span,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous span{display:block;width:1.5rem;height:1.5rem;text-align:center}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next span:before,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous span:before{vertical-align:sub}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:active,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:active,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:active{color:var(--color-result-detail-font);background:var(--color-result-detail-background);border:1px solid var(--color-result-detail-font)}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:hover{filter:opacity(80%)}#results.image-detail-open article.result-images[data-vim-selected] .detail .loader{position:absolute;top:1rem;right:50%;border-top:.5em solid var(--color-result-detail-loader-border);border-right:.5em solid var(--color-result-detail-loader-border);border-bottom:.5em solid var(--color-result-detail-loader-border);border-left:.5em solid var(--color-result-detail-loader-borderleft)}#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail{top:0}#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail a.result-images-source img{max-height:calc(100vh - 25rem)}@media screen and (max-width: 79.75em){#results.image-detail-open article.result-images[data-vim-selected] .detail{top:0;left:0}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source{display:flex;flex-direction:column;justify-content:center}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{width:100%;max-height:calc(100vh - 24rem)}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next{right:1rem}}@media screen and (max-width: 50em){#results.image-detail-open article.result-images[data-vim-selected] .detail{top:0;left:0;padding:1rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{width:100%;max-height:calc(100vh - 20rem);margin:0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p span{width:inherit;margin-right:1rem}}.dialog-modal{animation-name:dialogmodal;animation-duration:.13s}@keyframes dialogmodal{0%{opacity:0}50%{opacity:.5;transform:translate(-50%,-50%) scale(1.05)}}input.checkbox-onoff[type=checkbox]:before{transition:left .25s}iframe[src^="https://w.soundcloud.com"]{height:120px}iframe[src^="https://www.deezer.com"]{height:94px}iframe[src^="https://www.mixcloud.com"]{height:250px}iframe[src^="https://bandcamp.com/EmbeddedPlayer"]{height:350px}iframe[src^="https://bandcamp.com/EmbeddedPlayer/track"]{height:120px}iframe[src^="https://genius.com/songs"]{height:65px}.info-page code{font-family:monospace;border-radius:5px;background-color:var(--color-doc-code-background);color:var(--color-doc-code);padding:.2rem;border:0 none}.stats_endpoint .github-issue-button{display:block;font-size:16px}.stats_endpoint .issue-hide{display:none}.stats_endpoint input[type=checked]{position:absolute}.stats_endpoint label{margin:1rem 1rem 1rem 0}.stats_endpoint .step_content{margin:1rem 1rem 1rem 2rem}.stats_endpoint .step1,.stats_endpoint .step2{visibility:hidden}.stats_endpoint .step1_delay{transition:visibility 0s linear 4s}.stats_endpoint #step1:checked~.step1,.stats_endpoint #step2:checked~.step2{visibility:visible}.engine-stats{border-spacing:0;border-collapse:collapse}.engine-stats tr td,.engine-stats tr th{border-bottom:1px solid var(--color-result-border);padding:.25rem}.engine-stats table.engine-tooltip{border-spacing:0;border-collapse:collapse}.engine-stats table.engine-tooltip td,.engine-stats table.engine-tooltip th{border:none}.engine-stats .engine-name{width:20rem}.engine-stats .engine-score{width:7rem;text-align:right}.engine-stats .engine-reliability{text-align:right}table.engine-error th.engine-error-type,table.engine-error td.engine-error-type,failed-test{width:10rem}.engine-errors{margin-top:3rem}.engine-errors table.engine-error{max-width:1280px;margin:1rem 0 3rem;border:1px solid var(--color-result-border);text-align:left}.engine-errors table.engine-error tr th,.engine-errors table.engine-error tr td{padding:.5rem}.engine-errors table.engine-error span.log_parameters{border-right:1px solid solid var(--color-result-border);padding:0 1rem 0 0;margin:0 0 0 .5rem}.bar-chart-value{width:3em;display:inline-block;text-align:right;padding-right:.5rem}.bar-chart-graph{width:calc(100% - 5rem);display:inline-block}.bar-chart-bar{border:3px solid var(--color-bar-chart-primary);margin:1px 0}.bar-chart-serie1{border:3px solid var(--color-bar-chart-primary);margin:1px 0;float:left}.bar-chart-serie2{border:3px solid var(--color-bar-chart-secondary);margin:1px 0;float:left}.bar0{width:0;border:0}.bar1{width:1%}.bar2{width:2%}.bar3{width:3%}.bar4{width:4%}.bar5{width:5%}.bar6{width:6%}.bar7{width:7%}.bar8{width:8%}.bar9{width:9%}.bar10{width:10%}.bar11{width:11%}.bar12{width:12%}.bar13{width:13%}.bar14{width:14%}.bar15{width:15%}.bar16{width:16%}.bar17{width:17%}.bar18{width:18%}.bar19{width:19%}.bar20{width:20%}.bar21{width:21%}.bar22{width:22%}.bar23{width:23%}.bar24{width:24%}.bar25{width:25%}.bar26{width:26%}.bar27{width:27%}.bar28{width:28%}.bar29{width:29%}.bar30{width:30%}.bar31{width:31%}.bar32{width:32%}.bar33{width:33%}.bar34{width:34%}.bar35{width:35%}.bar36{width:36%}.bar37{width:37%}.bar38{width:38%}.bar39{width:39%}.bar40{width:40%}.bar41{width:41%}.bar42{width:42%}.bar43{width:43%}.bar44{width:44%}.bar45{width:45%}.bar46{width:46%}.bar47{width:47%}.bar48{width:48%}.bar49{width:49%}.bar50{width:50%}.bar51{width:51%}.bar52{width:52%}.bar53{width:53%}.bar54{width:54%}.bar55{width:55%}.bar56{width:56%}.bar57{width:57%}.bar58{width:58%}.bar59{width:59%}.bar60{width:60%}.bar61{width:61%}.bar62{width:62%}.bar63{width:63%}.bar64{width:64%}.bar65{width:65%}.bar66{width:66%}.bar67{width:67%}.bar68{width:68%}.bar69{width:69%}.bar70{width:70%}.bar71{width:71%}.bar72{width:72%}.bar73{width:73%}.bar74{width:74%}.bar75{width:75%}.bar76{width:76%}.bar77{width:77%}.bar78{width:78%}.bar79{width:79%}.bar80{width:80%}.bar81{width:81%}.bar82{width:82%}.bar83{width:83%}.bar84{width:84%}.bar85{width:85%}.bar86{width:86%}.bar87{width:87%}.bar88{width:88%}.bar89{width:89%}.bar90{width:90%}.bar91{width:91%}.bar92{width:92%}.bar93{width:93%}.bar94{width:94%}.bar95{width:95%}.bar96{width:96%}.bar97{width:97%}.bar98{width:98%}.bar99{width:99%}.bar100{width:100%}.osm-map-box{height:300px;width:100%;margin:10px 0}#main_index{margin-top:26vh}.index{text-align:center}.index .title{background:url(../img/searxng.png) no-repeat;min-height:4rem;margin:4rem auto;background-position:center;background-size:contain}.index h1{font-size:4em;visibility:hidden}.index #search,.index #search_header{margin:0 auto;background:inherit;border:inherit;padding:0;display:block}.index .search_filters{display:block;margin:1em 0}.index .category label{padding:6px 10px;border-bottom:initial!important}@media screen and (max-width: 79.75em){div.title h1{font-size:1em}#main_index{margin-top:6em}}table{border-collapse:collapse}table th,table td{text-align:center;padding:1rem .5rem;text-align:left}table tr.pref-group th{font-weight:400;text-align:left;background:var(--color-settings-table-group-background)}#main_preferences form{width:100%}#main_preferences fieldset{margin:8px;border:none}#main_preferences legend{margin:0;padding:5px 0 0;display:block;float:left;width:300px}#main_preferences input[type=text]{width:13.25rem;color:var(--color-toolkit-input-text-font);border:none;background:none repeat scroll 0 0 var(--color-toolkit-select-background);padding:.2rem .4rem;height:2rem;border-radius:5px}#main_preferences input[type=text]:hover,#main_preferences input[type=text]:focus{background-color:var(--color-toolkit-select-background-hover)}#main_preferences div.pref-group{width:100%;font-weight:400;padding:1rem .5rem;text-align:left;background:var(--color-settings-table-group-background)}#main_preferences .value{margin:0;padding:0;float:left;width:15em}#main_preferences .value select,#main_preferences .value input[type=text]{font-size:inherit!important;margin-top:0;margin-right:1rem;margin-bottom:0;margin-left:0}#main_preferences .value select{width:14rem}#main_preferences .value select:focus,#main_preferences .value input:focus{outline:none;box-shadow:0 0 1px 1px var(--color-btn-background)}#main_preferences .description{margin:0;padding:5px 0 0;float:right;width:50%;color:var(--color-settings-engine-description-font);font-size:90%}#main_preferences .bang{text-align:left;border-radius:5px;background-color:var(--color-doc-code-background);color:var(--color-doc-code);padding:.2rem;border:0 none}#main_preferences .category{margin-right:.5rem}#main_preferences .category label{border:2px solid transparent;padding:.2rem .4rem;border-radius:5px}#main_preferences .category input[type=checkbox]:checked+label{border:2px solid var(--color-categories-item-border-selected)}#main_preferences table.table_engines th.name label{cursor:pointer}#main_preferences table.table_engines th.name .engine-tooltip{margin-top:1.8rem;left:calc((100% - 85em)/2 + 10em);max-width:40rem}#main_preferences table.table_engines th.name .engine-tooltip .engine-description{margin-top:.5rem}#main_preferences table.table_engines th.name .engine-tooltip .bang{margin:.3rem}#main_preferences table.table_engines .checkbox-col,#main_preferences table.table_engines .name,#main_preferences table.table_engines .shortcut{text-align:left}#main_preferences table.cookies{width:100%;direction:ltr}#main_preferences table.cookies th,#main_preferences table.cookies td{text-align:left;font-family:monospace;font-size:1rem;padding:.5em;vertical-align:top}#main_preferences table.cookies td:first-child{word-break:keep-all;width:14rem;padding-right:1rem}#main_preferences table.cookies td:last-child{word-break:break-all}#main_preferences table.cookies>tbody>tr:nth-child(2n)>th,#main_preferences table.cookies>tbody>tr:nth-child(2n)>td{background-color:var(--color-settings-tr-hover)}#main_preferences .preferences_back{background:none repeat scroll 0 0 var(--color-btn-background);color:var(--color-btn-font);border:0 none;border-radius:10px;cursor:pointer;display:inline-block;margin:2px 4px;padding:.7em}#main_preferences .preferences_back a{color:var(--color-settings-return-font)}#main_preferences .preferences_back a:first-letter{text-transform:uppercase}#main_preferences #toggle-all-engines-container{width:max-content;margin-left:auto}#main_preferences div.selectable_url pre{width:100%}#main_preferences #copy-hash-container{display:flex;align-items:center;gap:.5rem}#main_preferences #copy-hash-container div.selectable_url pre{width:auto;flex-grow:1}#main_preferences #pref-hash-input{width:100%}@media screen and (max-width: 79.75em){.preferences_back{clear:both}.engine-tooltip{left:10em!important}}#search{padding:0;margin:0}#search_header{padding-top:1.5em;padding-right:2em;padding-left:7rem;margin:0;background:var(--color-header-background);border-bottom:1px solid var(--color-header-border);display:grid;gap:1rem 1.2rem;grid-template-columns:3rem 1fr;grid-template-areas:"logo search" "spacer categories"}.category_checkbox,.category_button{display:inline-block;position:relative;margin-right:1rem;padding:0}.category_checkbox input{display:none}.category_checkbox label{cursor:pointer;padding:.2rem 0;display:inline-flex;text-transform:capitalize;font-size:.9em;border-bottom:2px solid transparent;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.category_checkbox label svg{padding-right:.2rem}.category_checkbox label div.category_name{margin:auto 0}.category_checkbox input[type=checkbox]:checked+label{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}button.category_button{background-color:inherit;color:var(--color-base-font);cursor:pointer;padding:.2rem 0;display:inline-flex;align-items:center;text-transform:capitalize;font-size:.9em;border:none;border-bottom:2px solid transparent}button.category_button svg{padding-right:.2rem}button.category_button.selected,button.category_button:active{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}.no-js #categories_container:has(button.category_button:focus-within) button.category_button.selected{color:var(--color-base-font);border-bottom:none}.no-js #categories_container:has(button.category_button:focus-within) button.category_button:focus-within{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}#search_logo{padding:.5rem 10px 0;grid-area:logo;display:flex;align-items:center;justify-content:center}#search_logo svg{flex:1;width:30px;height:30px;margin:.5rem 0 auto}.search_categories{grid-area:categories}.search_categories .help{display:none}.search_categories:hover .help{display:block;position:absolute;background:var(--color-base-background);padding:1rem .6rem .6rem 0;z-index:1000;width:100%;left:-.1rem}#search_view{padding:.5rem .5rem 0;grid-area:search}body.results_endpoint #search_view{padding:.5rem 2.8rem 0 0}.search_box{border-radius:.8rem;width:100%;max-width:44rem;display:inline-flex;flex-direction:row;white-space:nowrap;box-shadow:var(--color-search-shadow)}#clear_search{display:block;border-collapse:separate;box-sizing:border-box;width:1.8rem;margin:0;padding:.8rem .2rem;background:none repeat scroll 0 0 var(--color-search-background);border:none;outline:none;color:var(--color-search-font);font-size:1.1rem;z-index:1000}#clear_search:hover{color:var(--color-search-background-hover)}#clear_search.empty *,html.no-js #clear_search.hide_if_nojs{display:none}#q,#send_search{display:block;margin:0;padding:.8rem;background:none repeat scroll 0 0 var(--color-search-background);border:none;outline:none;color:var(--color-search-font);font-size:1.1rem;z-index:100}#q{width:100%;padding-left:1rem;padding-right:0!important;border-radius:.8rem 0 0 .8rem}#q::-ms-clear,#q::-webkit-search-cancel-button{display:none}#send_search{border-radius:0 .8rem .8rem 0}#send_search:hover{cursor:pointer;background-color:var(--color-search-background-hover);color:var(--color-search-background)}.no-js #clear_search,.no-js #send_search{width:auto!important;border-left:1px solid var(--color-search-border)}.search_filters{margin-top:.6rem;margin-right:0;margin-bottom:0;margin-left:10.6rem;display:flex;overflow-x:auto;overscroll-behavior-inline:contain}.search_filters select{background-color:inherit}.search_filters select:hover,.search_filters select:focus{color:var(--color-base-font)}@media screen and (max-width: 79.75em){#search_header{padding:1.5em .5rem 0;column-gap:.5rem}.search_filters{margin-top:.6rem;margin-right:0;margin-bottom:0;margin-left:3.5rem}#categories{font-size:90%;clear:both}}@media screen and (max-width: 79.75em) and (hover: none){#main_index #categories_container,#main_results #categories_container{width:max-content}#main_index #categories_container .category_checkbox,#main_results #categories_container .category_checkbox{display:inline-block;width:auto}#main_index #categories,#main_results #categories{width:100%;text-align:left;overflow:scroll hidden;-webkit-overflow-scrolling:touch}}@media screen and (max-width: 50em){#search_header{width:100%;margin:0;padding:.1rem 0 0;gap:0 0;grid-template-areas:"logo search" "categories categories"}.search_logo{padding:0}.search_box{width:100%}#q{width:100%;flex:1}.search_filters{margin:0 10px;padding:.5rem 0}.category{display:inline-block;width:auto;margin:0}.category svg{display:none}.category_checkbox label,.category_button{padding:1rem!important;margin:0!important}#search_view:focus-within{display:block;background-color:var(--color-search-background);position:absolute;top:0;height:100%;width:100%;z-index:2000}#search_view:focus-within .search_box{border-bottom:1px solid var(--color-search-border);width:100%;border-radius:0;box-shadow:none}#search_view:focus-within .search_box #send_search{margin-right:0!important}#search_view:focus-within .search_box *{border:none;border-radius:0;box-shadow:none}#main_results #q:placeholder-shown~#send_search{margin-right:2.6rem;transition:margin .1s}}@media screen and (max-width: 20rem){#search_header{grid-template-areas:"search search" "categories categories"}#search_logo{display:none}}#categories{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}#categories::-webkit-scrollbar{width:0;height:0}#categories_container{position:relative}.favicon img{height:1.5rem;width:1.5rem;border-radius:10%;background-color:var(--color-favicon-background-color);border:1px solid var(--color-favicon-border-color);display:flex}@media screen and (min-width: 50em){.center-alignment-yes #main_results{--center-page-width: 48rem}}@media screen and (width >= 62rem){.center-alignment-yes #main_results{--center-page-width: 60rem}}@media screen and (min-width: 79.75em){.center-alignment-yes #main_results{--center-page-width: 73rem}}@media screen and (min-width: 50em) and (max-width: 79.75em){.center-alignment-yes #main_results #results{grid-template-columns:60% calc(40% - 5rem);margin-left:0;margin-right:0}.center-alignment-yes #main_results #urls{margin-left:3rem}.center-alignment-yes #main_results #sidebar{margin-right:1rem}.center-alignment-yes #main_results #backToTop{left:calc(60% + 1rem)}}@media screen and (min-width: 79.75em){.center-alignment-yes #main_results{display:flex;flex-direction:column;align-items:center}.center-alignment-yes #main_results #search{width:100%;display:flex;flex-direction:column;align-items:center}.center-alignment-yes #main_results #search_header{grid-template-columns:calc(50% - 4.5rem - var(--center-page-width) / 2) 3rem var(--center-page-width);grid-template-areas:"na logo search" "na spacer categories";column-gap:1.2rem;width:100%;padding-left:0;padding-right:0}.center-alignment-yes #main_results .search_filters{margin-left:.5rem;width:var(--center-page-width)}.center-alignment-yes #main_results #results{margin-right:2rem;margin-left:10rem}.center-alignment-yes #main_results #results.only_template_images,.center-alignment-yes #main_results #results.image-detail-open{align-self:flex-start}.center-alignment-yes #main_results #results:not(.only_template_images,.image-detail-open){margin-left:1.5rem;grid-template-columns:calc(var(--center-page-width) - 5rem - 25rem) 25rem}.center-alignment-yes #main_results #results:not(.only_template_images,.image-detail-open) #backToTop{left:calc(50% - 25rem - 5rem + 1rem + var(--center-page-width) / 2)}.center-alignment-yes #main_results #results .result .content{max-width:inherit}.center-alignment-yes #main_results #urls{margin-left:0}.center-alignment-yes #main_results #sidebar{margin-right:0}}.sxng-icon-set{display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scale(1)}.sxng-icon-set-small{width:1rem;height:1rem;display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scale(1)}.sxng-icon-set-big{width:1.5rem;height:1.5rem;display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scale(1)}html{font-family:sans-serif;font-size:.9em;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;color:var(--color-base-font);background-color:var(--color-base-background);padding:0;margin:0;scroll-behavior:smooth}body,main{padding:0;margin:0}body{display:flex;flex-direction:column;height:100vh;margin:0}@supports (height: 100dvh){body{height:100dvh}}main{width:100%;margin-bottom:2rem;flex:1}.page_with_header{margin:2em auto;width:85em}footer{clear:both;min-height:4rem;padding:1rem 0;width:100%;text-align:center;background-color:var(--color-footer-background);border-top:1px solid var(--color-footer-border);overflow:hidden}footer p{font-size:.9em}.page_with_header .logo{height:40px}input[type=submit],#results button[type=submit],.button{padding:.7rem;display:inline-block;background:var(--color-btn-background);color:var(--color-btn-font);border-radius:10px;border:0;cursor:pointer}a{text-decoration:none;color:var(--color-url-font)}a:visited,a:visited .highlight{color:var(--color-url-visited-font)}article[data-vim-selected]{background:var(--color-result-vim-selected);border-left:.2rem solid var(--color-result-vim-arrow);border-radius:0 10px 10px 0}article.result-images[data-vim-selected]{background:var(--color-result-vim-arrow);border:none;border-radius:10px}article.result-images[data-vim-selected] .image_thumbnail{filter:opacity(60%)}article.result-images[data-vim-selected] span.title,article.result-images[data-vim-selected] span.source{color:var(--color-result-image-span-font-selected)}article[data-vim-selected].category-videos,article[data-vim-selected].category-news,article[data-vim-selected].category-map,article[data-vim-selected].category-music,article[data-vim-selected].category-files,article[data-vim-selected].category-social{border:1px solid var(--color-result-vim-arrow);border-radius:10px}.result{margin:.125rem 0;padding:1rem;box-sizing:border-box;width:100%;border-left:.2rem solid transparent}.result h3{font-size:1.2rem;word-wrap:break-word;margin:.4rem 0;padding:0}.result h3 a{color:var(--color-result-link-font);font-weight:400;font-size:1.1em}.result h3 a:visited{color:var(--color-result-link-visited-font)}.result h3 a:focus,.result h3 a:hover{text-decoration:underline;border:none;outline:none}.result .cache_link,.result .proxyfied_link{font-size:smaller!important;margin-left:.5rem}.result .content,.result .stat{font-size:.9em;margin:0;padding:0;max-width:54em;word-wrap:break-word;line-height:1.24}.result .content .highlight,.result .stat .highlight{color:var(--color-result-description-highlight-font);background:inherit;font-weight:700}.result .altlink a{font-size:.9em;margin:0 10px 0 0;padding:5px 10px;border-radius:5px;background:var(--color-show-btn-background);color:var(--color-show-btn-font);cursor:pointer}.result .altlink a:hover{background:var(--color-btn-background);color:var(--color-btn-font)}.result .codelines .highlight{color:inherit;background:inherit;font-weight:400}.result .url_header{display:flex;gap:.5rem}.result .url_wrapper{display:flex;align-items:center;font-size:1rem;color:var(--color-result-url-font);flex-flow:row nowrap;overflow:hidden;margin:0;padding:0}.result .url_wrapper .url_o1{white-space:nowrap;flex-shrink:1;padding-bottom:1px}.result .url_wrapper .url_o1 .url_i1{unicode-bidi:plaintext}.result .url_wrapper .url_o1:after{content:" ";width:1ch;display:inline-block}.result .url_wrapper .url_o2{overflow:hidden;white-space:nowrap;flex:0 1 content;text-align:right;padding-bottom:1px}.result .url_wrapper .url_o2 .url_i2{float:right}.result .published_date,.result .result_length,.result .result_views,.result .result_author,.result .result_shipping,.result .result_source_country{font-size:.8em;color:var(--color-result-publishdate-font)}.result .result_price{font-size:1.2em;color:var(--color-result-description-highlight-font)}.result img.thumbnail{float:left;padding-top:.6rem;padding-right:1rem;width:7rem;height:unset}.result .break{clear:both}.result-paper .attributes,.result-packages .attributes{display:table;border-spacing:.125rem}.result-paper .attributes div,.result-packages .attributes div{display:table-row}.result-paper .attributes div span,.result-packages .attributes div span{font-size:.9rem;margin-top:.25rem;display:table-cell}.result-paper .attributes div span time,.result-packages .attributes div span time{font-size:.9rem}.result-paper .attributes div span:first-child,.result-packages .attributes div span:first-child{color:var(--color-base-font);min-width:10rem}.result-paper .attributes div span:nth-child(2),.result-packages .attributes div span:nth-child(2){color:var(--color-result-publishdate-font)}.result-paper .content,.result-packages .content{margin-top:.25rem}.result-paper .comments,.result-packages .comments{font-size:.9rem;margin:.25rem 0 0;padding:0;word-wrap:break-word;line-height:1.24;font-style:italic}.result-packages .attributes{margin-top:.3rem}.template_group_images{display:flex;flex-wrap:wrap}.template_group_images:after{flex-grow:10;content:""}.category-videos,.category-news,.category-map,.category-music,.category-files,.category-social{border:1px solid var(--color-result-border);margin:0 .5rem 1rem!important;border-radius:10px}.category-social .image{width:auto!important;min-width:48px;min-height:48px;padding:0 5px 25px 0!important}.audio-control audio{width:100%;padding:10px 0 0}.embedded-content iframe{width:100%;padding:10px 0 0}.result-videos img.thumbnail{float:left;padding-top:.6rem;padding-right:1rem;width:20rem;height:unset}.result-videos .content{overflow:hidden}.result-videos .embedded-video iframe{width:100%;aspect-ratio:16 / 9;padding:10px 0 0}@supports not (aspect-ratio: 1 / 1){.result-videos .embedded-video iframe{height:25.3125rem}}.engines{float:right;display:flex;flex-wrap:wrap;justify-content:flex-end;color:var(--color-result-engines-font)}.engines span{font-size:smaller;margin-top:0;margin-bottom:0;margin-right:.5rem;margin-left:0}.small_font{font-size:.8em}.highlight{color:var(--color-result-link-font-highlight);background:inherit}.empty_element{font-style:italic}.result-images{flex-grow:1;padding:.5rem .5rem 3rem;margin:.25rem;border:none!important;height:12rem;width:unset}.result-images>a{position:relative;outline:none}.result-images img{margin:0;padding:0;border:none;height:100%;width:auto;object-fit:cover;vertical-align:bottom;background:var(--color-result-image-background)}.result-images .image_resolution{position:absolute;right:0;bottom:0;background:var(--color-image-resolution-background);padding:.3rem .5rem;font-size:.9rem;color:var(--color-image-resolution-font);border-top-left-radius:.3rem}.result-images span.title,.result-images span.source{display:block;position:absolute;width:100%;font-size:.9rem;color:var(--color-result-image-span-font);padding:.5rem 0 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.result-images span.source{padding:1.8rem 0 0;font-size:.7rem}.result-map img.image{float:right!important;height:100px!important;width:auto!important}.result-map table{font-size:.9em;width:auto;border-collapse:separate;border-spacing:0 .35rem}.result-map table th{font-weight:inherit;width:17rem;vertical-align:top;text-align:left}.result-map table td{vertical-align:top;text-align:left}.hidden{display:none!important}#results{margin-top:1rem;margin-right:2rem;margin-bottom:0;margin-left:10rem;display:grid;grid-template:"corrections sidebar" min-content "answers sidebar" min-content "urls sidebar" 1fr "pagination sidebar" min-content / 45rem 25rem;gap:0 5rem}#results #sidebar *:first-child{margin-top:0}#urls{padding:0;grid-area:urls}#apis .wrapper{display:flex}#suggestions .wrapper{display:flex;flex-flow:column;justify-content:flex-end}#suggestions .wrapper form{display:inline-block;flex:1 1 50%}#suggestions input,#infoboxes input{padding:0;margin:3px;font-size:.9em;display:inline-block;background:transparent;color:var(--color-result-search-url-font);cursor:pointer;width:100%;text-overflow:ellipsis;overflow:hidden;text-align:left}#suggestions input[type=submit],#infoboxes input[type=submit],#suggestions .infobox .url a,#infoboxes .infobox .url a{color:var(--color-result-link-font);text-decoration:none;font-size:.9rem}#suggestions input[type=submit]:hover,#infoboxes input[type=submit]:hover,#suggestions .infobox .url a:hover,#infoboxes .infobox .url a:hover{text-decoration:underline}#corrections{grid-area:corrections;display:flex;flex-flow:row wrap;margin:0 0 1em}#corrections h4,#corrections input[type=submit]{display:inline-block;padding:.5rem;margin:.5rem}#corrections input[type=submit]{font-size:.8rem;border-radius:5px}#infoboxes .title,#suggestions .title,#search_url .title,#engines_msg .title,#apis .title{margin:2em 0 .5em;color:var(--color-base-font)}summary.title{cursor:pointer;padding-top:1em}.sidebar-collapsible{border-top:1px solid var(--color-sidebar-border);padding-bottom:.5em}#sidebar-end-collapsible{border-bottom:1px solid var(--color-sidebar-border);width:100%}#answers{grid-area:answers;background:var(--color-answer-background);padding:1rem;margin:1rem 0;margin-top:0;color:var(--color-answer-font);border-radius:10px}#answers h4{display:none}#answers span{overflow-wrap:anywhere}#answers .answer{display:flex;flex-direction:column}#answers .answer-url{margin:5px 10px 10px auto}#infoboxes form{min-width:210px}#sidebar{grid-area:sidebar;word-wrap:break-word;color:var(--color-sidebar-font)}#sidebar .infobox{margin:10px 0;border:1px solid var(--color-sidebar-border);padding:1rem;font-size:.9em;border-radius:10px}#sidebar .infobox h2{margin:0 0 .5em}#sidebar .infobox img{max-width:100%;max-height:12em;display:block;margin:0 auto;padding:0}#sidebar .infobox dt{font-weight:700}#sidebar .infobox .attributes dl{margin:.5em 0}#sidebar .infobox .attributes dt{display:inline;margin:.5em .25em .5em 0;padding:0}#sidebar .infobox .attributes dd{display:inline;margin:.5em 0;padding:0}#sidebar .infobox input{font-size:1em}#sidebar .infobox br,#sidebar .infobox .attributes,#sidebar .infobox .urls{clear:both}#apis input{font-size:.9em;margin:0 10px 0 0;padding:5px 10px;border-radius:5px;background:var(--color-show-btn-background);color:var(--color-show-btn-font);cursor:pointer}#apis input:hover{background:var(--color-btn-background);color:var(--color-btn-font)}#engines_msg .engine-name{width:10rem}#engines_msg .response-error{color:var(--color-error)}#engines_msg .bar-chart-value{width:auto}#search_url div.selectable_url pre{float:left;width:200em}#search_url button#copy_url{float:right;padding:.4rem;margin-left:.5rem;border-radius:.3rem;display:none}#links_on_top{position:absolute;right:1rem;text-align:right;top:2.7rem;padding:0;border:0;display:flex;align-items:center;font-size:1em;color:var(--color-search-font)}#links_on_top a{display:flex;align-items:center;margin-left:1em}#links_on_top a svg{font-size:1.2em;margin-right:.125em}#links_on_top a,#links_on_top a:link *,#links_on_top a:hover *,#links_on_top a:visited *,#links_on_top a:active *{color:var(--color-search-font)}#pagination{grid-area:pagination}#pagination br{clear:both}.numbered_pagination{display:flex;flex-direction:row;justify-content:center;align-items:center;overflow:hidden}.page_number{background:transparent!important;color:var(--color-result-link-font)!important;text-decoration:underline}.page_number_current{background:transparent;color:var(--color-result-link-visited-font);border:none}#backToTop{border:1px solid var(--color-backtotop-border);margin:0;padding:0;font-size:1em;background:var(--color-backtotop-background);position:fixed;bottom:8rem;left:56.3rem;transition:opacity .5s;opacity:0;pointer-events:none;border-radius:10px}#backToTop a{display:block;margin:0;padding:.7em}#backToTop a,#backToTop a:visited,#backToTop a:hover,#backToTop a:active{color:var(--color-backtotop-font)}#results.scrolling #backToTop{opacity:1;pointer-events:all}@media screen and (width <= calc(79.75em - .5px)){#links_on_top span{display:none}}@media screen and (width <= 52rem){body.results_endpoint #links_on_top .link_on_top_about,body.results_endpoint #links_on_top .link_on_top_donate{display:none}}@media screen and (min-width: 50em) and (max-width: 79.75em){.center-alignment-no #links_on_top span{display:none}.center-alignment-no .page_with_header{margin:2rem .5rem;width:auto}.center-alignment-no #infoboxes{position:inherit;max-width:inherit}.center-alignment-no #infoboxes .infobox{clear:both}.center-alignment-no #infoboxes .infobox img{float:left;max-width:10em;margin:.5em .5em .5em 0}.center-alignment-no #sidebar{margin:0 .5rem .125rem;padding:0;float:none;border:none;width:auto}.center-alignment-no #sidebar input{border:0}.center-alignment-no .result .thumbnail{max-width:98%}.center-alignment-no .result .url span.url{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%}.center-alignment-no .result .engines{float:right;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:3px 0 0}.center-alignment-no .result-images{border-bottom:none!important}.center-alignment-no .image_result,.center-alignment-no .image_result img{max-width:98%}.center-alignment-no #backToTop{display:none}.center-alignment-no #pagination{margin:2rem 0 0!important}.center-alignment-no #main_results div#results{margin:0 auto;justify-content:center;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 45rem;gap:0}}#main_results div#results.only_template_images{margin:1rem .5rem 0;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 100%;gap:0}#main_results div#results.only_template_images #sidebar{display:none}#main_results div#results.only_template_images #urls{margin:0;display:flex;flex-wrap:wrap}#main_results div#results.only_template_images #urls:after{flex-grow:10;content:""}#main_results div#results.only_template_images #backToTop{left:auto;right:1rem}#main_results div#results.only_template_images #pagination{margin-right:4rem}@media screen and (max-width: 50em){#links_on_top span{display:none}.page_with_header{margin:2rem .5rem;width:auto}#infoboxes{position:inherit;max-width:inherit}#infoboxes .infobox{clear:both}#infoboxes .infobox img{float:left;max-width:10em;margin:.5em .5em .5em 0}#sidebar{margin:0 .5rem .125rem;padding:0;float:none;border:none;width:auto}#sidebar input{border:0}.result .thumbnail{max-width:98%}.result .url span.url{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%}.result .engines{float:right;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:3px 0 0}.result-images{border-bottom:none!important}.image_result,.image_result img{max-width:98%}#backToTop{display:none}#pagination{margin:2rem 0 0!important}#main_results div#results{margin:0 auto;justify-content:center;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 45rem;gap:0}html{background-color:var(--color-base-background-mobile)}#main_results div#results{grid-template-columns:100%;margin:0 auto}#links_on_top{top:1.4rem;right:10px}#main_index #links_on_top{top:.5rem;right:.5rem}#results{margin:0;padding:0}#pagination{margin:2rem 1rem 0!important}article[data-vim-selected]{border:1px solid var(--color-result-vim-arrow);border-radius:10px}.result{background:var(--color-result-background);border:1px solid var(--color-result-background);margin:1rem 2%;width:96%;border-radius:10px}.result-images{margin:0;height:10rem;background:var(--color-base-background-mobile);width:unset}.infobox{border:none!important;background-color:var(--color-sidebar-background)}.numbered_pagination{display:none}.result-paper .attributes,.result-packages .attributes,.result-paper .attributes div,.result-packages .attributes div{display:block}.result-paper .attributes div span,.result-packages .attributes div span{display:inline}.result-paper .attributes div span:first-child,.result-packages .attributes div span:first-child{font-weight:700}.result-paper .attributes div span:nth-child(2),.result-packages .attributes div span:nth-child(2){margin-left:.5rem}}@media screen and (max-width: 35em){.result-videos img.thumbnail{float:none!important}.result-videos .content{overflow:inherit}}pre code{white-space:pre-wrap}#main_results .result-keyvalue caption{padding:.8rem .5rem;font-style:italic;caption-side:bottom;background-color:var(--color-result-keyvalue-table)}#main_results .result-keyvalue .col-key{width:25%}#main_results .result-keyvalue table{word-break:break-word;table-layout:fixed;width:100%;background-color:var(--color-result-keyvalue-table)}#main_results .result-keyvalue tr.odd{background-color:var(--color-result-keyvalue-odd)}#main_results .result-keyvalue tr.even{background-color:var(--color-result-keyvalue-even)}#main_results .result-keyvalue th,#main_results .result-keyvalue td{padding:.3rem .5rem} diff --git a/searx/static/themes/simple/js/searxng.min.js b/searx/static/themes/simple/js/searxng.min.js index f2c49fb32..ce8fd6aa7 100644 --- a/searx/static/themes/simple/js/searxng.min.js +++ b/searx/static/themes/simple/js/searxng.min.js @@ -3,12 +3,12 @@ * (C) Copyright Contributors to the SearXNG project. * (C) Copyright Contributors to the searx project (2014 - 2021). * SPDX-License-Identifier: AGPL-3.0-or-later - */window.searxng=function(h,d){h.Element&&function(r){r.matches=r.matches||r.matchesSelector||r.webkitMatchesSelector||r.msMatchesSelector||function(a){for(var l=this,n=(l.parentNode||l.document).querySelectorAll(a),e=-1;n[++e]&&n[e]!=l;);return!!n[e]}}(Element.prototype);function u(r,a,l){try{r.call(a,l)}catch(n){console.log(n)}}var p=window.searxng||{};p.on=function(r,a,l,n){n=n||!1,typeof r!="string"?r.addEventListener(a,l,n):d.addEventListener(a,function(e){for(var t=e.target||e.srcElement,o=!1;t&&t.matches&&t!==d&&!(o=t.matches(r));)t=t.parentElement;o&&u(l,t,e)},n)},p.ready=function(r){document.readyState!="loading"?r.call(h):h.addEventListener("DOMContentLoaded",r.bind(h))},p.http=function(r,a,l=null){return new Promise(function(n,e){try{var t=new XMLHttpRequest;t.open(r,a,!0),t.timeout=2e4,t.onload=function(){t.status==200?n(t.response,t.responseType):e(Error(t.statusText))},t.onerror=function(){e(Error("Network Error"))},t.onabort=function(){e(Error("Transaction is aborted"))},t.ontimeout=function(){e(Error("Timeout"))},l?t.send(l):t.send()}catch(o){e(o)}})},p.loadStyle=function(r){var a=p.settings.theme_static_path+"/"+r,l="style_"+r.replace(".","_"),n=d.getElementById(l);n===null&&(n=d.createElement("link"),n.setAttribute("id",l),n.setAttribute("rel","stylesheet"),n.setAttribute("type","text/css"),n.setAttribute("href",a),d.body.appendChild(n))},p.loadScript=function(r,a){var l=p.settings.theme_static_path+"/"+r,n="script_"+r.replace(".","_"),e=d.getElementById(n);if(e===null)e=d.createElement("script"),e.setAttribute("id",n),e.setAttribute("src",l),e.onload=a,e.onerror=function(){e.setAttribute("error","1")},d.body.appendChild(e);else if(e.hasAttribute("error"))console.log("callback not executed : script '"+l+"' not loaded.");else try{a.apply(e,[])}catch(t){console.log(t)}},p.insertBefore=function(r,a){a.parentNode.insertBefore(r,a)},p.insertAfter=function(r,a){a.parentNode.insertAfter(r,a.nextSibling)},p.on(".close","click",function(){this.parentNode.classList.add("invisible")});function m(){for(var r of d.getElementsByTagName("body")[0].classList.values())if(r.endsWith("_endpoint"))return r.split("_")[0];return""}return p.endpoint=m(),p}(window,document);searxng.ready(function(){if(searxng.infinite_scroll_supported="IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype,searxng.endpoint!=="results")return;if(!searxng.infinite_scroll_supported){console.log("IntersectionObserver not supported");return}let h=document;var d=h.getElementById("results").classList.contains("only_template_images");function u(){var r=h.createElement("div");return r.classList.add("loader"),r}function p(r,a){r.textContent="",a.forEach(l=>r.appendChild(l))}function m(r){var a=h.querySelector("#pagination form.next_page");if(a){p(h.querySelector("#pagination"),[u()]);var l=new FormData(a);searxng.http("POST",h.querySelector("#search").getAttribute("action"),l).then(function(n){var e=new DOMParser().parseFromString(n,"text/html"),t=e.querySelectorAll("#urls article"),o=e.querySelector("#pagination");h.querySelector("#pagination").remove(),t.length>0&&!d&&h.querySelector("#urls").appendChild(h.createElement("hr")),t.forEach(c=>{h.querySelector("#urls").appendChild(c)}),o&&(h.querySelector("#results").appendChild(o),r())}).catch(function(n){console.log(n);var e=h.createElement("div");e.textContent=searxng.settings.translations.error_loading_next_page,e.classList.add("dialog-error"),e.setAttribute("role","alert"),p(h.querySelector("#pagination"),[e])})}}if(searxng.settings.infinite_scroll&&searxng.infinite_scroll_supported){const r={rootMargin:"20rem"},a="article.result:last-child",l=new IntersectionObserver(n=>{const e=n[0];e.isIntersecting&&(l.unobserve(e.target),m(()=>l.observe(h.querySelector(a),r)))});l.observe(h.querySelector(a),r)}});searxng.ready(function(){function h(i){for(;i!==void 0;){if(i.classList.contains("detail"))return!0;if(i.classList.contains("result"))return!1;i=i.parentNode}return!1}function d(i){for(;i!==void 0;){if(i.classList.contains("result"))return i;i=i.parentNode}}function u(i){return i&&i.classList.contains("result-images")}searxng.on(".result","click",function(i){if(!h(i.target)){a(this)(!0,!0);let f=d(i.target);u(f)&&(i.preventDefault(),searxng.selectImage(f))}}),searxng.on(".result a","focus",function(i){if(!h(i.target)){let f=d(i.target);f&&f.getAttribute("data-vim-selected")===null&&a(f)(!0),u(f)&&searxng.selectImage(f)}},!0);var p={Escape:{key:"ESC",fun:n,des:"remove focus from the focused input",cat:"Control"},c:{key:"c",fun:O,des:"copy url of the selected result to the clipboard",cat:"Results"},h:{key:"h",fun:_,des:"toggle help window",cat:"Other"},i:{key:"i",fun:v,des:"focus on the search input",cat:"Control"},n:{key:"n",fun:t(),des:"go to next page",cat:"Results"},o:{key:"o",fun:b(!1),des:"open search result",cat:"Results"},p:{key:"p",fun:o(),des:"go to previous page",cat:"Results"},r:{key:"r",fun:l,des:"reload page from the server",cat:"Control"},t:{key:"t",fun:b(!0),des:"open the result in a new tab",cat:"Results"}},m={default:Object.assign({ArrowLeft:{key:"←",fun:a("up"),des:"select previous search result",cat:"Results"},ArrowRight:{key:"→",fun:a("down"),des:"select next search result",cat:"Results"}},p),vim:Object.assign({b:{key:"b",fun:s(-window.innerHeight),des:"scroll one page up",cat:"Navigation"},f:{key:"f",fun:s(window.innerHeight),des:"scroll one page down",cat:"Navigation"},u:{key:"u",fun:s(-window.innerHeight/2),des:"scroll half a page up",cat:"Navigation"},d:{key:"d",fun:s(window.innerHeight/2),des:"scroll half a page down",cat:"Navigation"},g:{key:"g",fun:g(-document.body.scrollHeight,"top"),des:"scroll to the top of the page",cat:"Navigation"},v:{key:"v",fun:g(document.body.scrollHeight,"bottom"),des:"scroll to the bottom of the page",cat:"Navigation"},k:{key:"k",fun:a("up"),des:"select previous search result",cat:"Results"},j:{key:"j",fun:a("down"),des:"select next search result",cat:"Results"},y:{key:"y",fun:O,des:"copy url of the selected result to the clipboard",cat:"Results"}},p)},r=m[searxng.settings.hotkeys]||m.default;searxng.on(document,"keydown",function(i){if(Object.prototype.hasOwnProperty.call(r,i.key)&&!i.ctrlKey&&!i.altKey&&!i.shiftKey&&!i.metaKey){var f=i.target.tagName.toLowerCase();i.key==="Escape"?r[i.key].fun(i):(i.target===document.body||f==="a"||f==="button")&&(i.preventDefault(),r[i.key].fun())}});function a(i){return function(f,M){var E=document.querySelector(".result[data-vim-selected]"),A=i;if(E===null){if(E=document.querySelector(".result"),E===null)return;(i==="down"||i==="up")&&(A=E)}var y,w=document.querySelectorAll(".result");if(w=Array.from(w),typeof A!="string")y=A;else switch(A){case"visible":for(var T=document.documentElement.scrollTop||document.body.scrollTop,x=T+document.documentElement.clientHeight,I=0;IT)break}break;case"down":y=w[w.indexOf(E)+1]||E;break;case"up":y=w[w.indexOf(E)-1]||E;break;case"bottom":y=w[w.length-1];break;case"top":default:y=w[0]}if(y){if(E.removeAttribute("data-vim-selected"),y.setAttribute("data-vim-selected","true"),!M){var D=y.querySelector("h3 a")||y.querySelector("a");D!==null&&D.focus()}f||c()}}}function l(){document.location.reload(!0)}function n(i){const f=i.target.tagName.toLowerCase();document.activeElement&&(f==="input"||f==="select"||f==="textarea")?document.activeElement.blur():searxng.closeDetail()}function e(i){return function(){var f=document.querySelector(i);f&&f.click()}}function t(){return e('nav#pagination .next_page button[type="submit"]')}function o(){return e('nav#pagination .previous_page button[type="submit"]')}function c(){var i=document.querySelector(".result[data-vim-selected]");if(i!==null){var f=document.documentElement.scrollTop||document.body.scrollTop,M=document.documentElement.clientHeight,E=i.offsetTop,A=E+i.clientHeight,y=120;if(i.previousElementSibling===null&&AE-y)window.scroll(window.scrollX,E-y);else{var w=f+M;w a")),f!==null){var M=f.getAttribute("href");i?window.open(M):window.location.href=M}}}function k(i){var f={};for(var M in r){var E=r[M];f[E.cat]=f[E.cat]||[],f[E.cat].push(E)}var A=Object.keys(f).sort(function(N,D){return f[D].length-f[N].length});if(A.length!==0){var y='
    ×';y+="

    How to navigate SearXNG with hotkeys

    ",y+="";for(var w=0;w"),y+="",(!I||x)&&(y+="")}y+="
    ",y+="

    "+T[0].cat+"

    ",y+='
      ';for(var R in T)y+="
    • "+T[R].key+" "+T[R].des+"
    • ";y+="
    ",y+="
    ",i.innerHTML=y}}function _(){var i=document.querySelector("#vim-hotkeys-help");if(i==null){i=document.createElement("div"),i.id="vim-hotkeys-help",i.className="dialog-modal",k(i);var f=document.getElementsByTagName("body")[0];f.appendChild(i)}else{i.classList.toggle("invisible");return}}function O(){var i=document.querySelector(".result[data-vim-selected] h3 a");if(i===null)return;const f=i.getAttribute("href");navigator.clipboard.writeText(f)}searxng.scrollPageToSelected=c,searxng.selectNext=a("down"),searxng.selectPrevious=a("up")});(function(h,d,u){u.ready(function(){u.on(".searxng_init_map","click",function(p){this.classList.remove("searxng_init_map");var m=this.dataset.leafletTarget,r=parseFloat(this.dataset.mapLon),a=parseFloat(this.dataset.mapLat),l=parseFloat(this.dataset.mapZoom),n=JSON.parse(this.dataset.mapBoundingbox),e=JSON.parse(this.dataset.mapGeojson);u.loadStyle("css/leaflet.css"),u.loadScript("js/leaflet.js",function(){var t=null;if(n){var o=L.latLng(n[0],n[2]),c=L.latLng(n[1],n[3]);t=L.latLngBounds(o,c)}var s=L.map(m),g="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",v='Map data © OpenStreetMap contributors',b=new L.TileLayer(g,{minZoom:1,maxZoom:19,attribution:v}),k="https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png",_='Wikimedia maps | Maps data © OpenStreetMap contributors',O=new L.TileLayer(k,{minZoom:1,maxZoom:19,attribution:_});t?setTimeout(function(){s.fitBounds(t,{maxZoom:17})},0):r&&a&&(l?s.setView(new L.latLng(a,r),l):s.setView(new L.latLng(a,r),8)),s.addLayer(b);var i={"OSM Mapnik":b,"OSM Wikimedia":O};L.control.layers(i).addTo(s),e&&L.geoJson(e).addTo(s)}),p.preventDefault()})})})(window,document,window.searxng);(function(h,d,u){u.endpoint==="preferences"&&u.ready(function(){let p=null;function m(){p==null&&u.http("GET","engine_descriptions.json").then(function(t){p=JSON.parse(t);for(const[o,c]of Object.entries(p)){let s=d.querySelectorAll('[data-engine-name="'+o+'"] .engine-description');for(const g of s){let v=" ("+u.settings.translations.Source+": "+c[1]+")";g.innerHTML=c[0]+v}}})}for(const t of d.querySelectorAll("[data-engine-name]"))u.on(t,"mouseenter",m);const r=d.querySelectorAll(".enable-all-engines"),a=d.querySelectorAll(".disable-all-engines"),l=d.querySelectorAll("tbody input[type=checkbox][class~=checkbox-onoff]"),n=t=>{for(const o of l)o.offsetParent!==null&&(o.checked=!t)};for(const t of r)u.on(t,"click",()=>n(!0));for(const t of a)u.on(t,"click",()=>n(!1));const e=d.querySelector("#copy-hash");u.on(e,"click",t=>{t.preventDefault(),navigator.clipboard.writeText(e.dataset.hash),e.innerText=e.dataset.copiedText})})})(window,document,window.searxng);/*! + */window.searxng=function(h,s){h.Element&&function(o){o.matches=o.matches||o.matchesSelector||o.webkitMatchesSelector||o.msMatchesSelector||function(l){for(var n=this,r=(n.parentNode||n.document).querySelectorAll(l),t=-1;r[++t]&&r[t]!=n;);return!!r[t]}}(Element.prototype);function i(o,l,n){try{o.call(l,n)}catch(r){console.log(r)}}var p=window.searxng||{};p.on=function(o,l,n,r){r=r||!1,typeof o!="string"?o.addEventListener(l,n,r):s.addEventListener(l,function(t){for(var a=t.target||t.srcElement,f=!1;a&&a.matches&&a!==s&&!(f=a.matches(o));)a=a.parentElement;f&&i(n,a,t)},r)},p.ready=function(o){document.readyState!="loading"?o.call(h):h.addEventListener("DOMContentLoaded",o.bind(h))},p.http=function(o,l,n=null){return new Promise(function(r,t){try{var a=new XMLHttpRequest;a.open(o,l,!0),a.timeout=2e4,a.onload=function(){a.status==200?r(a.response,a.responseType):t(Error(a.statusText))},a.onerror=function(){t(Error("Network Error"))},a.onabort=function(){t(Error("Transaction is aborted"))},a.ontimeout=function(){t(Error("Timeout"))},n?a.send(n):a.send()}catch(f){t(f)}})},p.loadStyle=function(o){var l=p.settings.theme_static_path+"/"+o,n="style_"+o.replace(".","_"),r=s.getElementById(n);r===null&&(r=s.createElement("link"),r.setAttribute("id",n),r.setAttribute("rel","stylesheet"),r.setAttribute("type","text/css"),r.setAttribute("href",l),s.body.appendChild(r))},p.loadScript=function(o,l){var n=p.settings.theme_static_path+"/"+o,r="script_"+o.replace(".","_"),t=s.getElementById(r);if(t===null)t=s.createElement("script"),t.setAttribute("id",r),t.setAttribute("src",n),t.onload=l,t.onerror=function(){t.setAttribute("error","1")},s.body.appendChild(t);else if(t.hasAttribute("error"))console.log("callback not executed : script '"+n+"' not loaded.");else try{l.apply(t,[])}catch(a){console.log(a)}},p.insertBefore=function(o,l){l.parentNode.insertBefore(o,l)},p.insertAfter=function(o,l){l.parentNode.insertAfter(o,l.nextSibling)},p.on(".close","click",function(){this.parentNode.classList.add("invisible")});function g(){for(var o of s.getElementsByTagName("body")[0].classList.values())if(o.endsWith("_endpoint"))return o.split("_")[0];return""}return p.endpoint=g(),p}(window,document);searxng.ready(function(){if(searxng.infinite_scroll_supported="IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype,searxng.endpoint!=="results")return;if(!searxng.infinite_scroll_supported){console.log("IntersectionObserver not supported");return}let h=document;var s=h.getElementById("results").classList.contains("only_template_images");function i(){var o=h.createElement("div");return o.classList.add("loader"),o}function p(o,l){o.textContent="",l.forEach(n=>o.appendChild(n))}function g(o){var l=h.querySelector("#pagination form.next_page");if(l){p(h.querySelector("#pagination"),[i()]);var n=new FormData(l);searxng.http("POST",h.querySelector("#search").getAttribute("action"),n).then(function(r){var t=new DOMParser().parseFromString(r,"text/html"),a=t.querySelectorAll("#urls article"),f=t.querySelector("#pagination");h.querySelector("#pagination").remove(),a.length>0&&!s&&h.querySelector("#urls").appendChild(h.createElement("hr")),a.forEach(b=>{h.querySelector("#urls").appendChild(b)}),f&&(h.querySelector("#results").appendChild(f),o())}).catch(function(r){console.log(r);var t=h.createElement("div");t.textContent=searxng.settings.translations.error_loading_next_page,t.classList.add("dialog-error"),t.setAttribute("role","alert"),p(h.querySelector("#pagination"),[t])})}}if(searxng.settings.infinite_scroll&&searxng.infinite_scroll_supported){const o={rootMargin:"20rem"},l="article.result:last-child",n=new IntersectionObserver(r=>{const t=r[0];t.isIntersecting&&(n.unobserve(t.target),g(()=>n.observe(h.querySelector(l),o)))});n.observe(h.querySelector(l),o)}});searxng.ready(function(){function h(e){for(;e!==void 0;){if(e.classList.contains("detail"))return!0;if(e.classList.contains("result"))return!1;e=e.parentNode}return!1}function s(e){for(;e!==void 0;){if(e.classList.contains("result"))return e;e=e.parentNode}}function i(e){return e&&e.classList.contains("result-images")}searxng.on(".result","click",function(e){if(!h(e.target)){l(this)(!0,!0);let u=s(e.target);i(u)&&(e.preventDefault(),searxng.selectImage(u))}}),searxng.on(".result a","focus",function(e){if(!h(e.target)){let u=s(e.target);u&&u.getAttribute("data-vim-selected")===null&&l(u)(!0),i(u)&&searxng.selectImage(u)}},!0);var p={Escape:{key:"ESC",fun:r,des:"remove focus from the focused input",cat:"Control"},c:{key:"c",fun:A,des:"copy url of the selected result to the clipboard",cat:"Results"},h:{key:"h",fun:T,des:"toggle help window",cat:"Other"},i:{key:"i",fun:m,des:"focus on the search input",cat:"Control"},n:{key:"n",fun:a(),des:"go to next page",cat:"Results"},o:{key:"o",fun:y(!1),des:"open search result",cat:"Results"},p:{key:"p",fun:f(),des:"go to previous page",cat:"Results"},r:{key:"r",fun:n,des:"reload page from the server",cat:"Control"},t:{key:"t",fun:y(!0),des:"open the result in a new tab",cat:"Results"}},g={default:Object.assign({ArrowLeft:{key:"←",fun:l("up"),des:"select previous search result",cat:"Results"},ArrowRight:{key:"→",fun:l("down"),des:"select next search result",cat:"Results"}},p),vim:Object.assign({b:{key:"b",fun:c(-window.innerHeight),des:"scroll one page up",cat:"Navigation"},f:{key:"f",fun:c(window.innerHeight),des:"scroll one page down",cat:"Navigation"},u:{key:"u",fun:c(-window.innerHeight/2),des:"scroll half a page up",cat:"Navigation"},d:{key:"d",fun:c(window.innerHeight/2),des:"scroll half a page down",cat:"Navigation"},g:{key:"g",fun:d(-document.body.scrollHeight,"top"),des:"scroll to the top of the page",cat:"Navigation"},v:{key:"v",fun:d(document.body.scrollHeight,"bottom"),des:"scroll to the bottom of the page",cat:"Navigation"},k:{key:"k",fun:l("up"),des:"select previous search result",cat:"Results"},j:{key:"j",fun:l("down"),des:"select next search result",cat:"Results"},y:{key:"y",fun:A,des:"copy url of the selected result to the clipboard",cat:"Results"}},p)},o=g[searxng.settings.hotkeys]||g.default;searxng.on(document,"keydown",function(e){if(Object.prototype.hasOwnProperty.call(o,e.key)&&!e.ctrlKey&&!e.altKey&&!e.shiftKey&&!e.metaKey){var u=e.target.tagName.toLowerCase();e.key==="Escape"?o[e.key].fun(e):(e.target===document.body||u==="a"||u==="button")&&(e.preventDefault(),o[e.key].fun())}});function l(e){return function(u,_){var E=document.querySelector(".result[data-vim-selected]"),k=e;if(E===null){if(E=document.querySelector(".result"),E===null)return;(e==="down"||e==="up")&&(k=E)}var v,w=document.querySelectorAll(".result");if(w=Array.from(w),typeof k!="string")v=k;else switch(k){case"visible":for(var q=document.documentElement.scrollTop||document.body.scrollTop,B=q+document.documentElement.clientHeight,x=0;xq)break}break;case"down":v=w[w.indexOf(E)+1]||E;break;case"up":v=w[w.indexOf(E)-1]||E;break;case"bottom":v=w[w.length-1];break;case"top":default:v=w[0]}if(v){if(E.removeAttribute("data-vim-selected"),v.setAttribute("data-vim-selected","true"),!_){var C=v.querySelector("h3 a")||v.querySelector("a");C!==null&&C.focus()}u||b()}}}function n(){document.location.reload(!0)}function r(e){const u=e.target.tagName.toLowerCase();document.activeElement&&(u==="input"||u==="select"||u==="textarea")?document.activeElement.blur():searxng.closeDetail()}function t(e){return function(){var u=document.querySelector(e);u&&u.click()}}function a(){return t('nav#pagination .next_page button[type="submit"]')}function f(){return t('nav#pagination .previous_page button[type="submit"]')}function b(){var e=document.querySelector(".result[data-vim-selected]");if(e!==null){var u=document.documentElement.scrollTop||document.body.scrollTop,_=document.documentElement.clientHeight,E=e.offsetTop,k=E+e.clientHeight,v=120;if(e.previousElementSibling===null&&k<_){window.scroll(window.scrollX,0);return}if(u>E-v)window.scroll(window.scrollX,E-v);else{var w=u+_;w a")),u!==null){var _=u.getAttribute("href");e?window.open(_):window.location.href=_}}}function S(e){var u={};for(var _ in o){var E=o[_];u[E.cat]=u[E.cat]||[],u[E.cat].push(E)}var k=Object.keys(u).sort(function(M,C){return u[C].length-u[M].length});if(k.length!==0){var v='×';v+="

    How to navigate SearXNG with hotkeys

    ",v+="";for(var w=0;w"),v+="",(!x||B)&&(v+="")}v+="
    ",v+="

    "+q[0].cat+"

    ",v+='
      ';for(var I in q)v+="
    • "+q[I].key+" "+q[I].des+"
    • ";v+="
    ",v+="
    ",e.innerHTML=v}}function T(){var e=document.querySelector("#vim-hotkeys-help");if(e==null){e=document.createElement("div"),e.id="vim-hotkeys-help",e.className="dialog-modal",S(e);var u=document.getElementsByTagName("body")[0];u.appendChild(e)}else{e.classList.toggle("invisible");return}}function A(){var e=document.querySelector(".result[data-vim-selected] h3 a");if(e===null)return;const u=e.getAttribute("href");navigator.clipboard.writeText(u)}searxng.scrollPageToSelected=b,searxng.selectNext=l("down"),searxng.selectPrevious=l("up")});(function(h,s,i){i.ready(function(){i.on(".searxng_init_map","click",function(p){this.classList.remove("searxng_init_map");var g=this.dataset.leafletTarget,o=parseFloat(this.dataset.mapLon),l=parseFloat(this.dataset.mapLat),n=parseFloat(this.dataset.mapZoom),r=JSON.parse(this.dataset.mapBoundingbox),t=JSON.parse(this.dataset.mapGeojson);i.loadStyle("css/leaflet.css"),i.loadScript("js/leaflet.js",function(){var a=null;if(r){var f=L.latLng(r[0],r[2]),b=L.latLng(r[1],r[3]);a=L.latLngBounds(f,b)}var c=L.map(g),d="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",m='Map data © OpenStreetMap contributors',y=new L.TileLayer(d,{minZoom:1,maxZoom:19,attribution:m}),S="https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png",T='Wikimedia maps | Maps data © OpenStreetMap contributors',A=new L.TileLayer(S,{minZoom:1,maxZoom:19,attribution:T});a?setTimeout(function(){c.fitBounds(a,{maxZoom:17})},0):o&&l&&(n?c.setView(new L.latLng(l,o),n):c.setView(new L.latLng(l,o),8)),c.addLayer(y);var e={"OSM Mapnik":y,"OSM Wikimedia":A};L.control.layers(e).addTo(c),t&&L.geoJson(t).addTo(c)}),p.preventDefault()})})})(window,document,window.searxng);(function(h,s,i){i.endpoint==="preferences"&&i.ready(function(){let p=null;function g(){p==null&&i.http("GET","engine_descriptions.json").then(function(a){p=JSON.parse(a);for(const[f,b]of Object.entries(p)){let c=s.querySelectorAll('[data-engine-name="'+f+'"] .engine-description');for(const d of c){let m=" ("+i.settings.translations.Source+": "+b[1]+")";d.innerHTML=b[0]+m}}})}for(const a of s.querySelectorAll("[data-engine-name]"))i.on(a,"mouseenter",g);const o=s.querySelectorAll(".enable-all-engines"),l=s.querySelectorAll(".disable-all-engines"),n=s.querySelectorAll("tbody input[type=checkbox][class~=checkbox-onoff]"),r=a=>{for(const f of n)f.offsetParent!==null&&(f.checked=!a)};for(const a of o)i.on(a,"click",()=>r(!0));for(const a of l)i.on(a,"click",()=>r(!1));const t=s.querySelector("#copy-hash");i.on(t,"click",a=>{a.preventDefault(),navigator.clipboard.writeText(t.dataset.hash),t.innerText=t.dataset.copiedText})})})(window,document,window.searxng);/*! * swiped-events.js - v@version@ * Pure JavaScript swipe events * https://github.com/john-doherty/swiped-events * @inspiration https://stackoverflow.com/questions/16348031/disable-scrolling-when-touch-moving-certain-element * @author John Doherty * @license MIT - */(function(h,d){typeof h.CustomEvent!="function"&&(h.CustomEvent=function(s,g){g=g||{bubbles:!1,cancelable:!1,detail:void 0};var v=d.createEvent("CustomEvent");return v.initCustomEvent(s,g.bubbles,g.cancelable,g.detail),v},h.CustomEvent.prototype=h.Event.prototype),d.addEventListener("touchstart",t,!1),d.addEventListener("touchmove",o,!1),d.addEventListener("touchend",e,!1);var u=null,p=null,m=null,r=null,a=null,l=null,n=0;function e(s){if(l===s.target){var g=parseInt(c(l,"data-swipe-threshold","20"),10),v=c(l,"data-swipe-unit","px"),b=parseInt(c(l,"data-swipe-timeout","500"),10),k=Date.now()-a,_="",O=s.changedTouches||s.touches||[];if(v==="vh"&&(g=Math.round(g/100*d.documentElement.clientHeight)),v==="vw"&&(g=Math.round(g/100*d.documentElement.clientWidth)),Math.abs(m)>Math.abs(r)?Math.abs(m)>g&&k0?_="swiped-left":_="swiped-right"):Math.abs(r)>g&&k0?_="swiped-up":_="swiped-down"),_!==""){var i={dir:_.replace(/swiped-/,""),touchType:(O[0]||{}).touchType||"direct",fingers:n,xStart:parseInt(u,10),xEnd:parseInt((O[0]||{}).clientX||-1,10),yStart:parseInt(p,10),yEnd:parseInt((O[0]||{}).clientY||-1,10)};l.dispatchEvent(new CustomEvent("swiped",{bubbles:!0,cancelable:!0,detail:i})),l.dispatchEvent(new CustomEvent(_,{bubbles:!0,cancelable:!0,detail:i}))}u=null,p=null,a=null}}function t(s){s.target.getAttribute("data-swipe-ignore")!=="true"&&(l=s.target,a=Date.now(),u=s.touches[0].clientX,p=s.touches[0].clientY,m=0,r=0,n=s.touches.length)}function o(s){if(!(!u||!p)){var g=s.touches[0].clientX,v=s.touches[0].clientY;m=u-g,r=p-v}}function c(s,g,v){for(;s&&s!==d.documentElement;){var b=s.getAttribute(g);if(b)return b;s=s.parentNode}return v}})(window,document);(function(h,d,u){u.endpoint==="results"&&u.ready(function(){d.querySelectorAll("#urls img").forEach(l=>l.addEventListener("error",()=>{l.src=window.searxng.settings.theme_static_path+"/img/img_load_error.svg"},{once:!0})),d.querySelector("#search_url button#copy_url")&&(d.querySelector("#search_url button#copy_url").style.display="block"),u.on(".btn-collapse","click",function(){var l=this.getAttribute("data-btn-text-collapsed"),n=this.getAttribute("data-btn-text-not-collapsed"),e=this.getAttribute("data-target"),t=d.querySelector(e),o=this.innerHTML;this.classList.contains("collapsed")?o=o.replace(l,n):o=o.replace(n,l),this.innerHTML=o,this.classList.toggle("collapsed"),t.classList.toggle("invisible")}),u.on(".media-loader","click",function(){var l=this.getAttribute("data-target"),n=d.querySelector(l+" > iframe"),e=n.getAttribute("src");(e==null||e===!1)&&n.setAttribute("src",n.getAttribute("data-src"))}),u.on("#copy_url","click",function(){var l=this.parentElement.querySelector("pre");navigator.clipboard.writeText(l.innerText),this.innerText=this.dataset.copiedText});let p;const m=d.createElement("div");m.classList.add("loader");const r=new Image,a=(l,n)=>{p&&clearTimeout(p),p=setTimeout(()=>{r.src=l},1e3),r.onload=()=>{n(),m.remove()},r.onerror=()=>{m.remove()}};u.selectImage=l=>{if(d.getElementById("results").classList.add("image-detail-open"),window.location.hash="#image-viewer",u.scrollPageToSelected(),!l)return;const n=l.querySelector(".result-images-source img");if(!n)return;const e=n.getAttribute("data-src");if(!e)return;const t=l.querySelector(".image_thumbnail");n.src=t.src,l.querySelector(".detail").appendChild(m),a(e,()=>{n.src=e,n.removeAttribute("data-src")})},u.closeDetail=function(){d.getElementById("results").classList.remove("image-detail-open"),window.location.hash=="#image-viewer"&&window.history.back(),u.scrollPageToSelected()},u.on(".result-detail-close","click",l=>{l.preventDefault(),u.closeDetail()}),u.on(".result-detail-previous","click",l=>{l.preventDefault(),u.selectPrevious(!1)}),u.on(".result-detail-next","click",l=>{l.preventDefault(),u.selectNext(!1)}),window.addEventListener("hashchange",()=>{window.location.hash!="#image-viewer"&&u.closeDetail()}),d.querySelectorAll(".swipe-horizontal").forEach(l=>{l.addEventListener("swiped-left",function(){u.selectNext(!1)}),l.addEventListener("swiped-right",function(){u.selectPrevious(!1)})}),h.addEventListener("scroll",function(){var l=d.getElementById("backToTop"),n=document.documentElement.scrollTop||document.body.scrollTop,e=d.getElementById("results");l!==null&&(n>=100?e.classList.add("scrolling"):e.classList.remove("scrolling"))},!0)})})(window,document,window.searxng);function P(h){return h&&h.__esModule&&Object.prototype.hasOwnProperty.call(h,"default")?h.default:h}function C(h){throw new Error('Could not dynamically require "'+h+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var q={exports:{}},H;function B(){return H||(H=1,function(h,d){(function(u){h.exports=u()})(function(){return function(){function u(p,m,r){function a(e,t){if(!m[e]){if(!p[e]){var o=typeof C=="function"&&C;if(!t&&o)return o(e,!0);if(l)return l(e,!0);var c=new Error("Cannot find module '"+e+"'");throw c.code="MODULE_NOT_FOUND",c}var s=m[e]={exports:{}};p[e][0].call(s.exports,function(g){var v=p[e][1][g];return a(v||g)},s,s.exports,u,p,m,r)}return m[e].exports}for(var l=typeof C=="function"&&C,n=0;n=b.From&&o.keyCode<=b.To?v=!b.Not:v=b.Not))};for(var s in n.prototype.getEventsByType(e,t)){var g=n.merge({Operator:r.AND},e.KeyboardMappings[s]),v=r.AND==g.Operator;g.Conditions.forEach(c),v===!0&&g.Callback.call(e,o)}},n.prototype.makeRequest=function(e,t,o){var c=Object.getOwnPropertyNames(e.HttpHeaders),s=new XMLHttpRequest,g=e._HttpMethod(),v=e._Url(),b=e._Pre(),k=encodeURIComponent(e._QueryArg())+"="+encodeURIComponent(b);g.match(/^GET$/i)&&(v.indexOf("?")!==-1?v+="&"+k:v+="?"+k),s.open(g,v,!0);for(var _=c.length-1;_>=0;_--)s.setRequestHeader(c[_],e.HttpHeaders[c[_]]);return s.onreadystatechange=function(){s.readyState==4&&s.status==200?(e.$Cache[b]=s.response,t(s.response)):s.status>=400&&o()},s},n.prototype.ajax=function(e,t,o){o===void 0&&(o=!0),e.$AjaxTimer&&window.clearTimeout(e.$AjaxTimer),o===!0?e.$AjaxTimer=window.setTimeout(n.prototype.ajax.bind(null,e,t,!1),e.Delay):(e.Request&&e.Request.abort(),e.Request=t,e.Request.send(e._QueryArg()+"="+e._Pre()))},n.prototype.cache=function(e,t,o){var c=e._Cache(e._Pre());if(c===void 0){var s=n.prototype.makeRequest(e,t,o);n.prototype.ajax(e,s)}else t(c)},n.prototype.destroy=function(e){for(var t in e.$Listeners)e.Input.removeEventListener(t,e.$Listeners[t]);e.DOMResults.parentNode.removeChild(e.DOMResults)},n.merge=function(){for(var e={},t,o=0;o"+e+""}},HttpHeaders:{"Content-type":"application/x-www-form-urlencoded"},Limit:0,MinChars:0,HttpMethod:"GET",QueryArg:"q",Url:null,KeyboardMappings:{Enter:{Conditions:[{Is:13,Not:!1}],Callback:function(e){if(this.DOMResults.getAttribute("class").indexOf("open")!=-1){var t=this.DOMResults.querySelector("li.active");t!==null&&(e.preventDefault(),this._Select(t),this.DOMResults.setAttribute("class","autocomplete"))}},Operator:r.AND,Event:a.KEYDOWN},KeyUpAndDown_down:{Conditions:[{Is:38,Not:!1},{Is:40,Not:!1}],Callback:function(e){e.preventDefault()},Operator:r.OR,Event:a.KEYDOWN},KeyUpAndDown_up:{Conditions:[{Is:38,Not:!1},{Is:40,Not:!1}],Callback:function(e){e.preventDefault();var t=this.DOMResults.querySelector("li:first-child:not(.locked)"),o=this.DOMResults.querySelector("li:last-child:not(.locked)"),c=this.DOMResults.querySelector("li.active");if(c){var s=Array.prototype.indexOf.call(c.parentNode.children,c),g=s+(e.keyCode-39),v=this.DOMResults.getElementsByTagName("li").length;g<0?g=v-1:g>=v&&(g=0),c.classList.remove("active"),c.parentElement.children.item(g).classList.add("active")}else o&&e.keyCode==38?o.classList.add("active"):t&&t.classList.add("active")},Operator:r.OR,Event:a.KEYUP},AlphaNum:{Conditions:[{Is:13,Not:!0},{From:35,To:40,Not:!0}],Callback:function(){var e=this.Input.getAttribute("data-autocomplete-old-value"),t=this._Pre();t!==""&&t.length>=this._MinChars()?((!e||t!=e)&&this.DOMResults.setAttribute("class","autocomplete open"),n.prototype.cache(this,(function(o){this._Render(this._Post(o)),this._Open()}).bind(this),this._Error)):this._Close()},Operator:r.AND,Event:a.KEYUP}},DOMResults:null,Request:null,Input:null,_EmptyMessage:function(){var e="";return this.Input.hasAttribute("data-autocomplete-empty-message")?e=this.Input.getAttribute("data-autocomplete-empty-message"):this.EmptyMessage!==!1?e=this.EmptyMessage:e="",e},_Limit:function(){var e=this.Input.getAttribute("data-autocomplete-limit");return isNaN(e)||e===null?this.Limit:parseInt(e,10)},_MinChars:function(){var e=this.Input.getAttribute("data-autocomplete-minchars");return isNaN(e)||e===null?this.MinChars:parseInt(e,10)},_Highlight:function(e){return e.replace(this.Highlight.getRegex(this._Pre()),this.Highlight.transform)},_HttpMethod:function(){return this.Input.hasAttribute("data-autocomplete-method")?this.Input.getAttribute("data-autocomplete-method"):this.HttpMethod},_QueryArg:function(){return this.Input.hasAttribute("data-autocomplete-param-name")?this.Input.getAttribute("data-autocomplete-param-name"):this.QueryArg},_Url:function(){return this.Input.hasAttribute("data-autocomplete")?this.Input.getAttribute("data-autocomplete"):this.Url},_Blur:function(e){if(e===void 0&&(e=!1),e)this._Close();else{var t=this;setTimeout(function(){t._Blur(!0)},150)}},_Cache:function(e){return this.$Cache[e]},_Focus:function(){var e=this.Input.getAttribute("data-autocomplete-old-value");(!e||this.Input.value!=e)&&this._MinChars()<=this.Input.value.length&&this.DOMResults.setAttribute("class","autocomplete open")},_Open:function(){var e=this;Array.prototype.forEach.call(this.DOMResults.getElementsByTagName("li"),function(t){t.getAttribute("class")!="locked"&&(t.onclick=function(){e._Select(t)})})},_Close:function(){this.DOMResults.setAttribute("class","autocomplete")},_Position:function(){this.DOMResults.setAttribute("class","autocomplete"),this.DOMResults.setAttribute("style","top:"+(this.Input.offsetTop+this.Input.offsetHeight)+"px;left:"+this.Input.offsetLeft+"px;width:"+this.Input.clientWidth+"px;")},_Render:function(e){var t;typeof e=="string"?t=this._RenderRaw(e):t=this._RenderResponseItems(e),this.DOMResults.hasChildNodes()&&this.DOMResults.removeChild(this.DOMResults.childNodes[0]),this.DOMResults.appendChild(t)},_RenderResponseItems:function(e){var t=document.createElement("ul"),o=document.createElement("li"),c=this._Limit();c<0?e=e.reverse():c===0&&(c=e.length);for(var s=0;s0)this.DOMResults.innerHTML=e;else{var c=this._EmptyMessage();c!==""&&(o.innerHTML=c,o.setAttribute("class","locked"),t.appendChild(o))}return t},_Post:function(e){try{var t=[],o=JSON.parse(e);if(Object.keys(o).length===0)return"";if(Array.isArray(o))for(var c=0;c0){var n=document.getElementById("search");setTimeout(n.submit.bind(n),0)}}function l(n){var e=document.getElementById("clear_search"),t=function(){n.value.length===0?e.classList.add("empty"):e.classList.remove("empty")};t(),e.addEventListener("click",function(o){n.value="",n.focus(),t(),o.preventDefault()}),n.addEventListener("input",t,!1)}u.ready(function(){m=d.getElementById(p),m!==null&&(l(m),u.settings.autocomplete&&(u.autocomplete=S.call(h,{Url:"./autocompleter",EmptyMessage:u.settings.translations.no_item_found,HttpMethod:u.settings.method,HttpHeaders:{"Content-type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"},MinChars:u.settings.autocomplete_min,Delay:300,_Position:function(){},_Open:function(){var t=this;Array.prototype.forEach.call(this.DOMResults.getElementsByTagName("li"),function(o){o.getAttribute("class")!="locked"&&(o.onmousedown=function(){t._Select(o)})})},_Select:function(t){S.defaults._Select.call(this,t);var o=t.closest("form");o&&o.submit()},_MinChars:function(){return this.Input.value.indexOf("!")>-1?0:S.defaults._MinChars.call(this)},KeyboardMappings:Object.assign({},S.defaults.KeyboardMappings,{KeyUpAndDown_up:Object.assign({},S.defaults.KeyboardMappings.KeyUpAndDown_up,{Callback:function(t){S.defaults.KeyboardMappings.KeyUpAndDown_up.Callback.call(this,t);var o=this.DOMResults.querySelector("li.active");o&&S.defaults._Select.call(this,o)}}),Tab:Object.assign({},S.defaults.KeyboardMappings.Enter,{Conditions:[{Is:9,Not:!1}],Callback:function(t){if(this.DOMResults.getAttribute("class").indexOf("open")!=-1){var o=this.DOMResults.querySelector("li.active");o!==null&&(S.defaults._Select.call(this,o),t.preventDefault())}}})})},"#"+p)),S.prototype.ajax=function(t,o,c){c===void 0&&(c=!0),t.$AjaxTimer&&window.clearTimeout(t.$AjaxTimer),c===!0?t.$AjaxTimer=window.setTimeout(S.prototype.ajax.bind(null,t,o,!1),t.Delay):(t.Request&&t.Request.abort(),t.Request=o,t.Request.send(encodeURIComponent(t._QueryArg())+"="+encodeURIComponent(t._Pre())))},!r&&document.querySelector(".index_endpoint")&&m.focus()),m!==null&&u.settings.search_on_category_select&&d.querySelector(".search_filters")!=null&&(u.on(d.getElementById("safesearch"),"change",a),u.on(d.getElementById("time_range"),"change",a),u.on(d.getElementById("language"),"change",a));const n=d.querySelectorAll("button.category_button");for(let t of n)u.on(t,"click",o=>{if(o.shiftKey){o.preventDefault(),t.classList.toggle("selected");return}const c=d.querySelectorAll("button.category_button.selected");for(let s of c)s.classList.remove("selected");t.classList.add("selected")});const e=d.querySelector("#search");e!=null&&u.on(e,"submit",t=>{t.preventDefault();const o=d.querySelector("#selected-categories");if(o){let c=[];for(let s of n)s.classList.contains("selected")&&c.push(s.name.replace("category_",""));o.value=c.join(",")}e.submit()})})})(window,document,window.searxng); + */(function(h,s){typeof h.CustomEvent!="function"&&(h.CustomEvent=function(c,d){d=d||{bubbles:!1,cancelable:!1,detail:void 0};var m=s.createEvent("CustomEvent");return m.initCustomEvent(c,d.bubbles,d.cancelable,d.detail),m},h.CustomEvent.prototype=h.Event.prototype),s.addEventListener("touchstart",a,!1),s.addEventListener("touchmove",f,!1),s.addEventListener("touchend",t,!1);var i=null,p=null,g=null,o=null,l=null,n=null,r=0;function t(c){if(n===c.target){var d=parseInt(b(n,"data-swipe-threshold","20"),10),m=b(n,"data-swipe-unit","px"),y=parseInt(b(n,"data-swipe-timeout","500"),10),S=Date.now()-l,T="",A=c.changedTouches||c.touches||[];if(m==="vh"&&(d=Math.round(d/100*s.documentElement.clientHeight)),m==="vw"&&(d=Math.round(d/100*s.documentElement.clientWidth)),Math.abs(g)>Math.abs(o)?Math.abs(g)>d&&S0?T="swiped-left":T="swiped-right"):Math.abs(o)>d&&S0?T="swiped-up":T="swiped-down"),T!==""){var e={dir:T.replace(/swiped-/,""),touchType:(A[0]||{}).touchType||"direct",fingers:r,xStart:parseInt(i,10),xEnd:parseInt((A[0]||{}).clientX||-1,10),yStart:parseInt(p,10),yEnd:parseInt((A[0]||{}).clientY||-1,10)};n.dispatchEvent(new CustomEvent("swiped",{bubbles:!0,cancelable:!0,detail:e})),n.dispatchEvent(new CustomEvent(T,{bubbles:!0,cancelable:!0,detail:e}))}i=null,p=null,l=null}}function a(c){c.target.getAttribute("data-swipe-ignore")!=="true"&&(n=c.target,l=Date.now(),i=c.touches[0].clientX,p=c.touches[0].clientY,g=0,o=0,r=c.touches.length)}function f(c){if(!(!i||!p)){var d=c.touches[0].clientX,m=c.touches[0].clientY;g=i-d,o=p-m}}function b(c,d,m){for(;c&&c!==s.documentElement;){var y=c.getAttribute(d);if(y)return y;c=c.parentNode}return m}})(window,document);(function(h,s,i){i.endpoint==="results"&&i.ready(function(){s.querySelectorAll("#urls img").forEach(n=>n.addEventListener("error",()=>{n.src=window.searxng.settings.theme_static_path+"/img/img_load_error.svg"},{once:!0})),s.querySelector("#search_url button#copy_url")&&(s.querySelector("#search_url button#copy_url").style.display="block"),i.on(".btn-collapse","click",function(){var n=this.getAttribute("data-btn-text-collapsed"),r=this.getAttribute("data-btn-text-not-collapsed"),t=this.getAttribute("data-target"),a=s.querySelector(t),f=this.innerHTML;this.classList.contains("collapsed")?f=f.replace(n,r):f=f.replace(r,n),this.innerHTML=f,this.classList.toggle("collapsed"),a.classList.toggle("invisible")}),i.on(".media-loader","click",function(){var n=this.getAttribute("data-target"),r=s.querySelector(n+" > iframe"),t=r.getAttribute("src");(t==null||t===!1)&&r.setAttribute("src",r.getAttribute("data-src"))}),i.on("#copy_url","click",function(){var n=this.parentElement.querySelector("pre");navigator.clipboard.writeText(n.innerText),this.innerText=this.dataset.copiedText});let p;const g=s.createElement("div");g.classList.add("loader");const o=new Image,l=(n,r)=>{p&&clearTimeout(p),p=setTimeout(()=>{o.src=n},1e3),o.onload=()=>{r(),g.remove()},o.onerror=()=>{g.remove()}};i.selectImage=n=>{if(s.getElementById("results").classList.add("image-detail-open"),window.location.hash="#image-viewer",i.scrollPageToSelected(),!n)return;const r=n.querySelector(".result-images-source img");if(!r)return;const t=r.getAttribute("data-src");if(!t)return;const a=n.querySelector(".image_thumbnail");r.src=a.src,n.querySelector(".detail").appendChild(g),l(t,()=>{r.src=t,r.removeAttribute("data-src")})},i.closeDetail=function(){s.getElementById("results").classList.remove("image-detail-open"),window.location.hash=="#image-viewer"&&window.history.back(),i.scrollPageToSelected()},i.on(".result-detail-close","click",n=>{n.preventDefault(),i.closeDetail()}),i.on(".result-detail-previous","click",n=>{n.preventDefault(),i.selectPrevious(!1)}),i.on(".result-detail-next","click",n=>{n.preventDefault(),i.selectNext(!1)}),window.addEventListener("hashchange",()=>{window.location.hash!="#image-viewer"&&i.closeDetail()}),s.querySelectorAll(".swipe-horizontal").forEach(n=>{n.addEventListener("swiped-left",function(){i.selectNext(!1)}),n.addEventListener("swiped-right",function(){i.selectPrevious(!1)})}),h.addEventListener("scroll",function(){var n=s.getElementById("backToTop"),r=document.documentElement.scrollTop||document.body.scrollTop,t=s.getElementById("results");n!==null&&(r>=100?t.classList.add("scrolling"):t.classList.remove("scrolling"))},!0)})})(window,document,window.searxng);(function(h,s,i){var p="q",g;const o=window.matchMedia("only screen and (max-width: 50em)").matches;function l(){if(g.value.length>0){var t=document.getElementById("search");setTimeout(t.submit.bind(t),0)}}function n(t){var a=document.getElementById("clear_search"),f=function(){t.value.length===0?a.classList.add("empty"):a.classList.remove("empty")};f(),a.addEventListener("click",function(b){t.value="",t.focus(),f(),b.preventDefault()}),t.addEventListener("input",f,!1)}const r=async t=>{let a;if(i.settings.method==="GET"){const f=new URLSearchParams;f.append("q",t),a=fetch("./autocompleter?"+f.toString())}else{const f=new FormData;f.append("q",t),a=fetch("./autocompleter",{method:"POST",body:f})}a.then(async function(f){const b=await f.json();if(!b)return;const c=s.querySelector(".autocomplete"),d=s.querySelector(".autocomplete ul");if(c.classList.add("open"),d.innerHTML="",!b[1]||b[1].length==0){const m=document.createElement("li");m.classList.add("no-item-found"),m.innerHTML=i.settings.translations.no_item_found,d.appendChild(m);return}for(let m of b[1]){const y=document.createElement("li");y.innerText=m,i.on(y,"mousedown",()=>{g.value=m,s.querySelector("#search").submit(),c.classList.remove("open")}),d.appendChild(y)}})};i.ready(function(){o||document.getElementById("q").focus(),g=s.getElementById(p);const t=s.querySelector(".autocomplete"),a=s.querySelector(".autocomplete ul");g!==null&&(n(g),i.settings.autocomplete&&(i.on(g,"input",()=>{const c=g.value;c.length{c==g.value&&r(c)},300)}),i.on(g,"keyup",c=>{let d=-1;const m=a.children;for(let S=0;S=0&&m[d].classList.remove("active"),y=(d-1+m.length)%m.length):c.key==="ArrowDown"?(d>=0&&m[d].classList.remove("active"),y=(d+1)%m.length):(c.key==="Tab"||c.key==="Enter")&&t.classList.remove("open"),y!=-1){const S=m[y];S.classList.add("active"),S.classList.contains("no-item-found")||(g.value=S.innerText)}}))),g!==null&&i.settings.search_on_category_select&&s.querySelector(".search_filters")!=null&&(i.on(s.getElementById("safesearch"),"change",l),i.on(s.getElementById("time_range"),"change",l),i.on(s.getElementById("language"),"change",l));const f=s.querySelectorAll("button.category_button");for(let c of f)i.on(c,"click",d=>{if(d.shiftKey){d.preventDefault(),c.classList.toggle("selected");return}const m=s.querySelectorAll("button.category_button.selected");for(let y of m)y.classList.remove("selected");c.classList.add("selected")});const b=s.querySelector("#search");b!=null&&i.on(b,"submit",c=>{c.preventDefault();const d=s.querySelector("#selected-categories");if(d){let m=[];for(let y of f)y.classList.contains("selected")&&m.push(y.name.replace("category_",""));d.value=m.join(",")}b.submit()})})})(window,document,window.searxng); //# sourceMappingURL=searxng.min.js.map diff --git a/searx/static/themes/simple/js/searxng.min.js.map b/searx/static/themes/simple/js/searxng.min.js.map index ded00532a..f454d84c0 100644 --- a/searx/static/themes/simple/js/searxng.min.js.map +++ b/searx/static/themes/simple/js/searxng.min.js.map @@ -1 +1 @@ -{"version":3,"file":"searxng.min.js","sources":["../../../../../client/simple/src/js/main/00_toolkit.js","../../../../../client/simple/src/js/main/infinite_scroll.js","../../../../../client/simple/src/js/main/keyboard.js","../../../../../client/simple/src/js/main/mapresult.js","../../../../../client/simple/src/js/main/preferences.js","../../../../../client/simple/node_modules/swiped-events/src/swiped-events.js","../../../../../client/simple/src/js/main/results.js","../../../../../client/simple/node_modules/autocomplete-js/dist/autocomplete.js","../../../../../client/simple/src/js/main/search.js"],"sourcesContent":["/**\n * @license\n * (C) Copyright Contributors to the SearXNG project.\n * (C) Copyright Contributors to the searx project (2014 - 2021).\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nwindow.searxng = (function (w, d) {\n\n 'use strict';\n\n // not invented here toolkit with bugs fixed elsewhere\n // purposes : be just good enough and as small as possible\n\n // from https://plainjs.com/javascript/events/live-binding-event-handlers-14/\n if (w.Element) {\n (function (ElementPrototype) {\n ElementPrototype.matches = ElementPrototype.matches ||\n ElementPrototype.matchesSelector ||\n ElementPrototype.webkitMatchesSelector ||\n ElementPrototype.msMatchesSelector ||\n function (selector) {\n var node = this, nodes = (node.parentNode || node.document).querySelectorAll(selector), i = -1;\n while (nodes[++i] && nodes[i] != node);\n return !!nodes[i];\n };\n })(Element.prototype);\n }\n\n function callbackSafe (callback, el, e) {\n try {\n callback.call(el, e);\n } catch (exception) {\n console.log(exception);\n }\n }\n\n var searxng = window.searxng || {};\n\n searxng.on = function (obj, eventType, callback, useCapture) {\n useCapture = useCapture || false;\n if (typeof obj !== 'string') {\n // obj HTMLElement, HTMLDocument\n obj.addEventListener(eventType, callback, useCapture);\n } else {\n // obj is a selector\n d.addEventListener(eventType, function (e) {\n var el = e.target || e.srcElement, found = false;\n while (el && el.matches && el !== d && !(found = el.matches(obj))) el = el.parentElement;\n if (found) callbackSafe(callback, el, e);\n }, useCapture);\n }\n };\n\n searxng.ready = function (callback) {\n if (document.readyState != 'loading') {\n callback.call(w);\n } else {\n w.addEventListener('DOMContentLoaded', callback.bind(w));\n }\n };\n\n searxng.http = function (method, url, data = null) {\n return new Promise(function (resolve, reject) {\n try {\n var req = new XMLHttpRequest();\n req.open(method, url, true);\n req.timeout = 20000;\n\n // On load\n req.onload = function () {\n if (req.status == 200) {\n resolve(req.response, req.responseType);\n } else {\n reject(Error(req.statusText));\n }\n };\n\n // Handle network errors\n req.onerror = function () {\n reject(Error(\"Network Error\"));\n };\n\n req.onabort = function () {\n reject(Error(\"Transaction is aborted\"));\n };\n\n req.ontimeout = function () {\n reject(Error(\"Timeout\"));\n }\n\n // Make the request\n if (data) {\n req.send(data)\n } else {\n req.send();\n }\n } catch (ex) {\n reject(ex);\n }\n });\n };\n\n searxng.loadStyle = function (src) {\n var path = searxng.settings.theme_static_path + \"/\" + src,\n id = \"style_\" + src.replace('.', '_'),\n s = d.getElementById(id);\n if (s === null) {\n s = d.createElement('link');\n s.setAttribute('id', id);\n s.setAttribute('rel', 'stylesheet');\n s.setAttribute('type', 'text/css');\n s.setAttribute('href', path);\n d.body.appendChild(s);\n }\n };\n\n searxng.loadScript = function (src, callback) {\n var path = searxng.settings.theme_static_path + \"/\" + src,\n id = \"script_\" + src.replace('.', '_'),\n s = d.getElementById(id);\n if (s === null) {\n s = d.createElement('script');\n s.setAttribute('id', id);\n s.setAttribute('src', path);\n s.onload = callback;\n s.onerror = function () {\n s.setAttribute('error', '1');\n };\n d.body.appendChild(s);\n } else if (!s.hasAttribute('error')) {\n try {\n callback.apply(s, []);\n } catch (exception) {\n console.log(exception);\n }\n } else {\n console.log(\"callback not executed : script '\" + path + \"' not loaded.\");\n }\n };\n\n searxng.insertBefore = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode);\n };\n\n searxng.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertAfter(newNode, referenceNode.nextSibling);\n };\n\n searxng.on('.close', 'click', function () {\n this.parentNode.classList.add('invisible');\n });\n\n function getEndpoint () {\n for (var className of d.getElementsByTagName('body')[0].classList.values()) {\n if (className.endsWith('_endpoint')) {\n return className.split('_')[0];\n }\n }\n return '';\n }\n\n searxng.endpoint = getEndpoint();\n\n return searxng;\n})(window, document);\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n\n/* global searxng */\n\nsearxng.ready(function () {\n 'use strict';\n\n searxng.infinite_scroll_supported = (\n 'IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype);\n\n if (searxng.endpoint !== 'results') {\n return;\n }\n\n if (!searxng.infinite_scroll_supported) {\n console.log('IntersectionObserver not supported');\n return;\n }\n\n let d = document;\n var onlyImages = d.getElementById('results').classList.contains('only_template_images');\n\n function newLoadSpinner () {\n var loader = d.createElement('div');\n loader.classList.add('loader');\n return loader;\n }\n\n function replaceChildrenWith (element, children) {\n element.textContent = '';\n children.forEach(child => element.appendChild(child));\n }\n\n function loadNextPage (callback) {\n var form = d.querySelector('#pagination form.next_page');\n if (!form) {\n return\n }\n replaceChildrenWith(d.querySelector('#pagination'), [ newLoadSpinner() ]);\n var formData = new FormData(form);\n searxng.http('POST', d.querySelector('#search').getAttribute('action'), formData).then(\n function (response) {\n var nextPageDoc = new DOMParser().parseFromString(response, 'text/html');\n var articleList = nextPageDoc.querySelectorAll('#urls article');\n var paginationElement = nextPageDoc.querySelector('#pagination');\n d.querySelector('#pagination').remove();\n if (articleList.length > 0 && !onlyImages) {\n // do not add
    element when there are only images\n d.querySelector('#urls').appendChild(d.createElement('hr'));\n }\n articleList.forEach(articleElement => {\n d.querySelector('#urls').appendChild(articleElement);\n });\n if (paginationElement) {\n d.querySelector('#results').appendChild(paginationElement);\n callback();\n }\n }\n ).catch(\n function (err) {\n console.log(err);\n var e = d.createElement('div');\n e.textContent = searxng.settings.translations.error_loading_next_page;\n e.classList.add('dialog-error');\n e.setAttribute('role', 'alert');\n replaceChildrenWith(d.querySelector('#pagination'), [ e ]);\n }\n )\n }\n\n if (searxng.settings.infinite_scroll && searxng.infinite_scroll_supported) {\n const intersectionObserveOptions = {\n rootMargin: \"20rem\",\n };\n const observedSelector = 'article.result:last-child';\n const observer = new IntersectionObserver(entries => {\n const paginationEntry = entries[0];\n if (paginationEntry.isIntersecting) {\n observer.unobserve(paginationEntry.target);\n loadNextPage(() => observer.observe(d.querySelector(observedSelector), intersectionObserveOptions));\n }\n });\n observer.observe(d.querySelector(observedSelector), intersectionObserveOptions);\n }\n\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global searxng */\n\nsearxng.ready(function () {\n\n function isElementInDetail (el) {\n while (el !== undefined) {\n if (el.classList.contains('detail')) {\n return true;\n }\n if (el.classList.contains('result')) {\n // we found a result, no need to go to the root of the document:\n // el is not inside a
    element\n return false;\n }\n el = el.parentNode;\n }\n return false;\n }\n\n function getResultElement (el) {\n while (el !== undefined) {\n if (el.classList.contains('result')) {\n return el;\n }\n el = el.parentNode;\n }\n return undefined;\n }\n\n function isImageResult (resultElement) {\n return resultElement && resultElement.classList.contains('result-images');\n }\n\n searxng.on('.result', 'click', function (e) {\n if (!isElementInDetail(e.target)) {\n highlightResult(this)(true, true);\n let resultElement = getResultElement(e.target);\n if (isImageResult(resultElement)) {\n e.preventDefault();\n searxng.selectImage(resultElement);\n }\n }\n });\n\n searxng.on('.result a', 'focus', function (e) {\n if (!isElementInDetail(e.target)) {\n let resultElement = getResultElement(e.target);\n if (resultElement && resultElement.getAttribute(\"data-vim-selected\") === null) {\n highlightResult(resultElement)(true);\n }\n if (isImageResult(resultElement)) {\n searxng.selectImage(resultElement);\n }\n }\n }, true);\n\n /* common base for layouts */\n var baseKeyBinding = {\n 'Escape': {\n key: 'ESC',\n fun: removeFocus,\n des: 'remove focus from the focused input',\n cat: 'Control'\n },\n 'c': {\n key: 'c',\n fun: copyURLToClipboard,\n des: 'copy url of the selected result to the clipboard',\n cat: 'Results'\n },\n 'h': {\n key: 'h',\n fun: toggleHelp,\n des: 'toggle help window',\n cat: 'Other'\n },\n 'i': {\n key: 'i',\n fun: searchInputFocus,\n des: 'focus on the search input',\n cat: 'Control'\n },\n 'n': {\n key: 'n',\n fun: GoToNextPage(),\n des: 'go to next page',\n cat: 'Results'\n },\n 'o': {\n key: 'o',\n fun: openResult(false),\n des: 'open search result',\n cat: 'Results'\n },\n 'p': {\n key: 'p',\n fun: GoToPreviousPage(),\n des: 'go to previous page',\n cat: 'Results'\n },\n 'r': {\n key: 'r',\n fun: reloadPage,\n des: 'reload page from the server',\n cat: 'Control'\n },\n 't': {\n key: 't',\n fun: openResult(true),\n des: 'open the result in a new tab',\n cat: 'Results'\n },\n };\n var keyBindingLayouts = {\n\n \"default\": Object.assign(\n { /* SearXNG layout */\n 'ArrowLeft': {\n key: '←',\n fun: highlightResult('up'),\n des: 'select previous search result',\n cat: 'Results'\n },\n 'ArrowRight': {\n key: '→',\n fun: highlightResult('down'),\n des: 'select next search result',\n cat: 'Results'\n },\n }, baseKeyBinding),\n\n 'vim': Object.assign(\n { /* Vim-like Key Layout. */\n 'b': {\n key: 'b',\n fun: scrollPage(-window.innerHeight),\n des: 'scroll one page up',\n cat: 'Navigation'\n },\n 'f': {\n key: 'f',\n fun: scrollPage(window.innerHeight),\n des: 'scroll one page down',\n cat: 'Navigation'\n },\n 'u': {\n key: 'u',\n fun: scrollPage(-window.innerHeight / 2),\n des: 'scroll half a page up',\n cat: 'Navigation'\n },\n 'd': {\n key: 'd',\n fun: scrollPage(window.innerHeight / 2),\n des: 'scroll half a page down',\n cat: 'Navigation'\n },\n 'g': {\n key: 'g',\n fun: scrollPageTo(-document.body.scrollHeight, 'top'),\n des: 'scroll to the top of the page',\n cat: 'Navigation'\n },\n 'v': {\n key: 'v',\n fun: scrollPageTo(document.body.scrollHeight, 'bottom'),\n des: 'scroll to the bottom of the page',\n cat: 'Navigation'\n },\n 'k': {\n key: 'k',\n fun: highlightResult('up'),\n des: 'select previous search result',\n cat: 'Results'\n },\n 'j': {\n key: 'j',\n fun: highlightResult('down'),\n des: 'select next search result',\n cat: 'Results'\n },\n 'y': {\n key: 'y',\n fun: copyURLToClipboard,\n des: 'copy url of the selected result to the clipboard',\n cat: 'Results'\n },\n }, baseKeyBinding)\n }\n\n var keyBindings = keyBindingLayouts[searxng.settings.hotkeys] || keyBindingLayouts.default;\n\n searxng.on(document, \"keydown\", function (e) {\n // check for modifiers so we don't break browser's hotkeys\n if (\n Object.prototype.hasOwnProperty.call(keyBindings, e.key)\n && !e.ctrlKey && !e.altKey\n && !e.shiftKey && !e.metaKey\n ) {\n var tagName = e.target.tagName.toLowerCase();\n if (e.key === 'Escape') {\n keyBindings[e.key].fun(e);\n } else {\n if (e.target === document.body || tagName === 'a' || tagName === 'button') {\n e.preventDefault();\n keyBindings[e.key].fun();\n }\n }\n }\n });\n\n function highlightResult (which) {\n return function (noScroll, keepFocus) {\n var current = document.querySelector('.result[data-vim-selected]'),\n effectiveWhich = which;\n if (current === null) {\n // no selection : choose the first one\n current = document.querySelector('.result');\n if (current === null) {\n // no first one : there are no results\n return;\n }\n // replace up/down actions by selecting first one\n if (which === \"down\" || which === \"up\") {\n effectiveWhich = current;\n }\n }\n\n var next, results = document.querySelectorAll('.result');\n results = Array.from(results); // convert NodeList to Array for further use\n\n if (typeof effectiveWhich !== 'string') {\n next = effectiveWhich;\n } else {\n switch (effectiveWhich) {\n case 'visible':\n var top = document.documentElement.scrollTop || document.body.scrollTop;\n var bot = top + document.documentElement.clientHeight;\n\n for (var i = 0; i < results.length; i++) {\n next = results[i];\n var etop = next.offsetTop;\n var ebot = etop + next.clientHeight;\n\n if ((ebot <= bot) && (etop > top)) {\n break;\n }\n }\n break;\n case 'down':\n next = results[results.indexOf(current) + 1] || current;\n break;\n case 'up':\n next = results[results.indexOf(current) - 1] || current;\n break;\n case 'bottom':\n next = results[results.length - 1];\n break;\n case 'top':\n /* falls through */\n default:\n next = results[0];\n }\n }\n\n if (next) {\n current.removeAttribute('data-vim-selected');\n next.setAttribute('data-vim-selected', 'true');\n if (!keepFocus) {\n var link = next.querySelector('h3 a') || next.querySelector('a');\n if (link !== null) {\n link.focus();\n }\n }\n if (!noScroll) {\n scrollPageToSelected();\n }\n }\n };\n }\n\n function reloadPage () {\n document.location.reload(true);\n }\n\n function removeFocus (e) {\n const tagName = e.target.tagName.toLowerCase();\n if (document.activeElement && (tagName === 'input' || tagName === 'select' || tagName === 'textarea')) {\n document.activeElement.blur();\n } else {\n searxng.closeDetail();\n }\n }\n\n function pageButtonClick (css_selector) {\n return function () {\n var button = document.querySelector(css_selector);\n if (button) {\n button.click();\n }\n };\n }\n\n function GoToNextPage () {\n return pageButtonClick('nav#pagination .next_page button[type=\"submit\"]');\n }\n\n function GoToPreviousPage () {\n return pageButtonClick('nav#pagination .previous_page button[type=\"submit\"]');\n }\n\n function scrollPageToSelected () {\n var sel = document.querySelector('.result[data-vim-selected]');\n if (sel === null) {\n return;\n }\n var wtop = document.documentElement.scrollTop || document.body.scrollTop,\n wheight = document.documentElement.clientHeight,\n etop = sel.offsetTop,\n ebot = etop + sel.clientHeight,\n offset = 120;\n // first element ?\n if ((sel.previousElementSibling === null) && (ebot < wheight)) {\n // set to the top of page if the first element\n // is fully included in the viewport\n window.scroll(window.scrollX, 0);\n return;\n }\n if (wtop > (etop - offset)) {\n window.scroll(window.scrollX, etop - offset);\n } else {\n var wbot = wtop + wheight;\n if (wbot < (ebot + offset)) {\n window.scroll(window.scrollX, ebot - wheight + offset);\n }\n }\n }\n\n function scrollPage (amount) {\n return function () {\n window.scrollBy(0, amount);\n highlightResult('visible')();\n };\n }\n\n function scrollPageTo (position, nav) {\n return function () {\n window.scrollTo(0, position);\n highlightResult(nav)();\n };\n }\n\n function searchInputFocus () {\n window.scrollTo(0, 0);\n var q = document.querySelector('#q');\n q.focus();\n if (q.setSelectionRange) {\n var len = q.value.length;\n q.setSelectionRange(len, len);\n }\n }\n\n function openResult (newTab) {\n return function () {\n var link = document.querySelector('.result[data-vim-selected] h3 a');\n if (link === null) {\n link = document.querySelector('.result[data-vim-selected] > a');\n }\n if (link !== null) {\n var url = link.getAttribute('href');\n if (newTab) {\n window.open(url);\n } else {\n window.location.href = url;\n }\n }\n };\n }\n\n function initHelpContent (divElement) {\n var categories = {};\n\n for (var k in keyBindings) {\n var key = keyBindings[k];\n categories[key.cat] = categories[key.cat] || [];\n categories[key.cat].push(key);\n }\n\n var sorted = Object.keys(categories).sort(function (a, b) {\n return categories[b].length - categories[a].length;\n });\n\n if (sorted.length === 0) {\n return;\n }\n\n var html = '×';\n html += '

    How to navigate SearXNG with hotkeys

    ';\n html += '';\n\n for (var i = 0; i < sorted.length; i++) {\n var cat = categories[sorted[i]];\n\n var lastCategory = i === (sorted.length - 1);\n var first = i % 2 === 0;\n\n if (first) {\n html += '';\n }\n html += ''; // col-sm-*\n\n if (!first || lastCategory) {\n html += ''; // row\n }\n }\n\n html += '
    ';\n\n html += '

    ' + cat[0].cat + '

    ';\n html += '
      ';\n\n for (var cj in cat) {\n html += '
    • ' + cat[cj].key + ' ' + cat[cj].des + '
    • ';\n }\n\n html += '
    ';\n html += '
    ';\n\n divElement.innerHTML = html;\n }\n\n function toggleHelp () {\n var helpPanel = document.querySelector('#vim-hotkeys-help');\n if (helpPanel === undefined || helpPanel === null) {\n // first call\n helpPanel = document.createElement('div');\n helpPanel.id = 'vim-hotkeys-help';\n helpPanel.className = 'dialog-modal';\n initHelpContent(helpPanel);\n var body = document.getElementsByTagName('body')[0];\n body.appendChild(helpPanel);\n } else {\n // toggle hidden\n helpPanel.classList.toggle('invisible');\n return;\n }\n }\n\n function copyURLToClipboard () {\n var currentUrlElement = document.querySelector('.result[data-vim-selected] h3 a');\n if (currentUrlElement === null) return;\n\n const url = currentUrlElement.getAttribute('href');\n navigator.clipboard.writeText(url);\n }\n\n searxng.scrollPageToSelected = scrollPageToSelected;\n searxng.selectNext = highlightResult('down');\n searxng.selectPrevious = highlightResult('up');\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global L */\n(function (w, d, searxng) {\n 'use strict';\n\n searxng.ready(function () {\n searxng.on('.searxng_init_map', 'click', function (event) {\n // no more request\n this.classList.remove(\"searxng_init_map\");\n\n //\n var leaflet_target = this.dataset.leafletTarget;\n var map_lon = parseFloat(this.dataset.mapLon);\n var map_lat = parseFloat(this.dataset.mapLat);\n var map_zoom = parseFloat(this.dataset.mapZoom);\n var map_boundingbox = JSON.parse(this.dataset.mapBoundingbox);\n var map_geojson = JSON.parse(this.dataset.mapGeojson);\n\n searxng.loadStyle('css/leaflet.css');\n searxng.loadScript('js/leaflet.js', function () {\n var map_bounds = null;\n if (map_boundingbox) {\n var southWest = L.latLng(map_boundingbox[0], map_boundingbox[2]);\n var northEast = L.latLng(map_boundingbox[1], map_boundingbox[3]);\n map_bounds = L.latLngBounds(southWest, northEast);\n }\n\n // init map\n var map = L.map(leaflet_target);\n // create the tile layer with correct attribution\n var osmMapnikUrl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';\n var osmMapnikAttrib = 'Map data © OpenStreetMap contributors';\n var osmMapnik = new L.TileLayer(osmMapnikUrl, {minZoom: 1, maxZoom: 19, attribution: osmMapnikAttrib});\n var osmWikimediaUrl = 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png';\n var osmWikimediaAttrib = 'Wikimedia maps | Maps data © OpenStreetMap contributors';\n var osmWikimedia = new L.TileLayer(osmWikimediaUrl, {minZoom: 1, maxZoom: 19, attribution: osmWikimediaAttrib});\n // init map view\n if (map_bounds) {\n // TODO hack: https://github.com/Leaflet/Leaflet/issues/2021\n // Still useful ?\n setTimeout(function () {\n map.fitBounds(map_bounds, {\n maxZoom: 17\n });\n }, 0);\n } else if (map_lon && map_lat) {\n if (map_zoom) {\n map.setView(new L.latLng(map_lat, map_lon), map_zoom);\n } else {\n map.setView(new L.latLng(map_lat, map_lon), 8);\n }\n }\n\n map.addLayer(osmMapnik);\n\n var baseLayers = {\n \"OSM Mapnik\": osmMapnik,\n \"OSM Wikimedia\": osmWikimedia,\n };\n\n L.control.layers(baseLayers).addTo(map);\n\n if (map_geojson) {\n L.geoJson(map_geojson).addTo(map);\n } /* else if(map_bounds) {\n L.rectangle(map_bounds, {color: \"#ff7800\", weight: 3, fill:false}).addTo(map);\n } */\n });\n\n // this event occur only once per element\n event.preventDefault();\n });\n });\n})(window, document, window.searxng);\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n(function (w, d, searxng) {\n 'use strict';\n\n if (searxng.endpoint !== 'preferences') {\n return;\n }\n\n searxng.ready(function () {\n let engine_descriptions = null;\n function load_engine_descriptions () {\n if (engine_descriptions == null) {\n searxng.http(\"GET\", \"engine_descriptions.json\").then(function (content) {\n engine_descriptions = JSON.parse(content);\n for (const [engine_name, description] of Object.entries(engine_descriptions)) {\n let elements = d.querySelectorAll('[data-engine-name=\"' + engine_name + '\"] .engine-description');\n for (const element of elements) {\n let source = ' (' + searxng.settings.translations.Source + ': ' + description[1] + ')';\n element.innerHTML = description[0] + source;\n }\n }\n });\n }\n }\n\n for (const el of d.querySelectorAll('[data-engine-name]')) {\n searxng.on(el, 'mouseenter', load_engine_descriptions);\n }\n\n const enableAllEngines = d.querySelectorAll(\".enable-all-engines\");\n const disableAllEngines = d.querySelectorAll(\".disable-all-engines\");\n const engineToggles = d.querySelectorAll('tbody input[type=checkbox][class~=checkbox-onoff]');\n const toggleEngines = (enable) => {\n for (const el of engineToggles) {\n // check if element visible, so that only engines of the current category are modified\n if (el.offsetParent !== null) el.checked = !enable;\n }\n };\n for (const el of enableAllEngines) {\n searxng.on(el, 'click', () => toggleEngines(true));\n }\n for (const el of disableAllEngines) {\n searxng.on(el, 'click', () => toggleEngines(false));\n }\n\n const copyHashButton = d.querySelector(\"#copy-hash\");\n searxng.on(copyHashButton, 'click', (e) => {\n e.preventDefault();\n navigator.clipboard.writeText(copyHashButton.dataset.hash);\n copyHashButton.innerText = copyHashButton.dataset.copiedText;\n });\n });\n})(window, document, window.searxng);\n","/*!\n * swiped-events.js - v@version@\n * Pure JavaScript swipe events\n * https://github.com/john-doherty/swiped-events\n * @inspiration https://stackoverflow.com/questions/16348031/disable-scrolling-when-touch-moving-certain-element\n * @author John Doherty \n * @license MIT\n */\n(function (window, document) {\n\n 'use strict';\n\n // patch CustomEvent to allow constructor creation (IE/Chrome)\n if (typeof window.CustomEvent !== 'function') {\n\n window.CustomEvent = function (event, params) {\n\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n window.CustomEvent.prototype = window.Event.prototype;\n }\n\n document.addEventListener('touchstart', handleTouchStart, false);\n document.addEventListener('touchmove', handleTouchMove, false);\n document.addEventListener('touchend', handleTouchEnd, false);\n\n var xDown = null;\n var yDown = null;\n var xDiff = null;\n var yDiff = null;\n var timeDown = null;\n var startEl = null;\n var touchCount = 0;\n\n /**\n * Fires swiped event if swipe detected on touchend\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchEnd(e) {\n\n // if the user released on a different target, cancel!\n if (startEl !== e.target) return;\n\n var swipeThreshold = parseInt(getNearestAttribute(startEl, 'data-swipe-threshold', '20'), 10); // default 20 units\n var swipeUnit = getNearestAttribute(startEl, 'data-swipe-unit', 'px'); // default px\n var swipeTimeout = parseInt(getNearestAttribute(startEl, 'data-swipe-timeout', '500'), 10); // default 500ms\n var timeDiff = Date.now() - timeDown;\n var eventType = '';\n var changedTouches = e.changedTouches || e.touches || [];\n\n if (swipeUnit === 'vh') {\n swipeThreshold = Math.round((swipeThreshold / 100) * document.documentElement.clientHeight); // get percentage of viewport height in pixels\n }\n if (swipeUnit === 'vw') {\n swipeThreshold = Math.round((swipeThreshold / 100) * document.documentElement.clientWidth); // get percentage of viewport height in pixels\n }\n\n if (Math.abs(xDiff) > Math.abs(yDiff)) { // most significant\n if (Math.abs(xDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (xDiff > 0) {\n eventType = 'swiped-left';\n }\n else {\n eventType = 'swiped-right';\n }\n }\n }\n else if (Math.abs(yDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (yDiff > 0) {\n eventType = 'swiped-up';\n }\n else {\n eventType = 'swiped-down';\n }\n }\n\n if (eventType !== '') {\n\n var eventData = {\n dir: eventType.replace(/swiped-/, ''),\n touchType: (changedTouches[0] || {}).touchType || 'direct',\n fingers: touchCount, // Number of fingers used\n xStart: parseInt(xDown, 10),\n xEnd: parseInt((changedTouches[0] || {}).clientX || -1, 10),\n yStart: parseInt(yDown, 10),\n yEnd: parseInt((changedTouches[0] || {}).clientY || -1, 10)\n };\n\n // fire `swiped` event event on the element that started the swipe\n startEl.dispatchEvent(new CustomEvent('swiped', { bubbles: true, cancelable: true, detail: eventData }));\n\n // fire `swiped-dir` event on the element that started the swipe\n startEl.dispatchEvent(new CustomEvent(eventType, { bubbles: true, cancelable: true, detail: eventData }));\n }\n\n // reset values\n xDown = null;\n yDown = null;\n timeDown = null;\n }\n /**\n * Records current location on touchstart event\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchStart(e) {\n\n // if the element has data-swipe-ignore=\"true\" we stop listening for swipe events\n if (e.target.getAttribute('data-swipe-ignore') === 'true') return;\n\n startEl = e.target;\n\n timeDown = Date.now();\n xDown = e.touches[0].clientX;\n yDown = e.touches[0].clientY;\n xDiff = 0;\n yDiff = 0;\n touchCount = e.touches.length;\n }\n\n /**\n * Records location diff in px on touchmove event\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchMove(e) {\n\n if (!xDown || !yDown) return;\n\n var xUp = e.touches[0].clientX;\n var yUp = e.touches[0].clientY;\n\n xDiff = xDown - xUp;\n yDiff = yDown - yUp;\n }\n\n /**\n * Gets attribute off HTML element or nearest parent\n * @param {object} el - HTML element to retrieve attribute from\n * @param {string} attributeName - name of the attribute\n * @param {any} defaultValue - default value to return if no match found\n * @returns {any} attribute value or defaultValue\n */\n function getNearestAttribute(el, attributeName, defaultValue) {\n\n // walk up the dom tree looking for attributeName\n while (el && el !== document.documentElement) {\n\n var attributeValue = el.getAttribute(attributeName);\n\n if (attributeValue) {\n return attributeValue;\n }\n\n el = el.parentNode;\n }\n\n return defaultValue;\n }\n\n}(window, document));\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n\nimport \"../../../node_modules/swiped-events/src/swiped-events.js\";\n\n(function (w, d, searxng) {\n 'use strict';\n\n if (searxng.endpoint !== 'results') {\n return;\n }\n\n searxng.ready(function () {\n d.querySelectorAll('#urls img').forEach(\n img =>\n img.addEventListener(\n 'error', () => {\n // console.log(\"ERROR can't load: \" + img.src);\n img.src = window.searxng.settings.theme_static_path + \"/img/img_load_error.svg\";\n },\n {once: true}\n ));\n\n if (d.querySelector('#search_url button#copy_url')) {\n d.querySelector('#search_url button#copy_url').style.display = \"block\";\n }\n\n searxng.on('.btn-collapse', 'click', function () {\n var btnLabelCollapsed = this.getAttribute('data-btn-text-collapsed');\n var btnLabelNotCollapsed = this.getAttribute('data-btn-text-not-collapsed');\n var target = this.getAttribute('data-target');\n var targetElement = d.querySelector(target);\n var html = this.innerHTML;\n if (this.classList.contains('collapsed')) {\n html = html.replace(btnLabelCollapsed, btnLabelNotCollapsed);\n } else {\n html = html.replace(btnLabelNotCollapsed, btnLabelCollapsed);\n }\n this.innerHTML = html;\n this.classList.toggle('collapsed');\n targetElement.classList.toggle('invisible');\n });\n\n searxng.on('.media-loader', 'click', function () {\n var target = this.getAttribute('data-target');\n var iframe_load = d.querySelector(target + ' > iframe');\n var srctest = iframe_load.getAttribute('src');\n if (srctest === null || srctest === undefined || srctest === false) {\n iframe_load.setAttribute('src', iframe_load.getAttribute('data-src'));\n }\n });\n\n searxng.on('#copy_url', 'click', function () {\n var target = this.parentElement.querySelector('pre');\n navigator.clipboard.writeText(target.innerText);\n this.innerText = this.dataset.copiedText;\n });\n\n // searxng.selectImage (gallery)\n // -----------------------------\n\n // setTimeout() ID, needed to cancel *last* loadImage\n let imgTimeoutID;\n\n // progress spinner, while an image is loading\n const imgLoaderSpinner = d.createElement('div');\n imgLoaderSpinner.classList.add('loader');\n\n // singleton image object, which is used for all loading processes of a\n // detailed image\n const imgLoader = new Image();\n\n const loadImage = (imgSrc, onSuccess) => {\n // if defered image load exists, stop defered task.\n if (imgTimeoutID) clearTimeout(imgTimeoutID);\n\n // defer load of the detail image for 1 sec\n imgTimeoutID = setTimeout(() => {\n imgLoader.src = imgSrc;\n }, 1000);\n\n // set handlers in the on-properties\n imgLoader.onload = () => {\n onSuccess();\n imgLoaderSpinner.remove();\n };\n imgLoader.onerror = () => {\n imgLoaderSpinner.remove();\n };\n };\n\n searxng.selectImage = (resultElement) => {\n\n // add a class that can be evaluated in the CSS and indicates that the\n // detail view is open\n d.getElementById('results').classList.add('image-detail-open');\n\n // add a hash to the browser history so that pressing back doesn't return\n // to the previous page this allows us to dismiss the image details on\n // pressing the back button on mobile devices\n window.location.hash = '#image-viewer';\n\n searxng.scrollPageToSelected();\n\n // if there is none element given by the caller, stop here\n if (!resultElement) return;\n\n // find object in the element, if there is none, stop here.\n const img = resultElement.querySelector('.result-images-source img');\n if (!img) return;\n\n // \n const src = img.getAttribute('data-src');\n\n // already loaded high-res image or no high-res image available\n if (!src) return;\n\n // use the image thumbnail until the image is fully loaded\n const thumbnail = resultElement.querySelector('.image_thumbnail');\n img.src = thumbnail.src;\n\n // show a progress spinner\n const detailElement = resultElement.querySelector('.detail');\n detailElement.appendChild(imgLoaderSpinner);\n\n // load full size image in background\n loadImage(src, () => {\n // after the singelton loadImage has loaded the detail image into the\n // cache, it can be used in the origin as src property.\n img.src = src;\n img.removeAttribute('data-src');\n });\n };\n\n searxng.closeDetail = function () {\n d.getElementById('results').classList.remove('image-detail-open');\n // remove #image-viewer hash from url by navigating back\n if (window.location.hash == '#image-viewer') window.history.back();\n searxng.scrollPageToSelected();\n };\n searxng.on('.result-detail-close', 'click', e => {\n e.preventDefault();\n searxng.closeDetail();\n });\n searxng.on('.result-detail-previous', 'click', e => {\n e.preventDefault();\n searxng.selectPrevious(false);\n });\n searxng.on('.result-detail-next', 'click', e => {\n e.preventDefault();\n searxng.selectNext(false);\n });\n\n // listen for the back button to be pressed and dismiss the image details when called\n window.addEventListener('hashchange', () => {\n if (window.location.hash != '#image-viewer') searxng.closeDetail();\n });\n\n d.querySelectorAll('.swipe-horizontal').forEach(\n obj => {\n obj.addEventListener('swiped-left', function () {\n searxng.selectNext(false);\n });\n obj.addEventListener('swiped-right', function () {\n searxng.selectPrevious(false);\n });\n }\n );\n\n w.addEventListener('scroll', function () {\n var e = d.getElementById('backToTop'),\n scrollTop = document.documentElement.scrollTop || document.body.scrollTop,\n results = d.getElementById('results');\n if (e !== null) {\n if (scrollTop >= 100) {\n results.classList.add('scrolling');\n } else {\n results.classList.remove('scrolling');\n }\n }\n }, true);\n\n });\n\n})(window, document, window.searxng);\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.AutoComplete = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i @baptistedonaux\n */\nvar AutoComplete = /** @class */ (function () {\n // Constructor\n function AutoComplete(params, selector) {\n if (params === void 0) { params = {}; }\n if (selector === void 0) { selector = \"[data-autocomplete]\"; }\n if (Array.isArray(selector)) {\n selector.forEach(function (s) {\n new AutoComplete(params, s);\n });\n }\n else if (typeof selector == \"string\") {\n var elements = document.querySelectorAll(selector);\n Array.prototype.forEach.call(elements, function (input) {\n new AutoComplete(params, input);\n });\n }\n else {\n var specificParams = AutoComplete.merge(AutoComplete.defaults, params, {\n DOMResults: document.createElement(\"div\")\n });\n AutoComplete.prototype.create(specificParams, selector);\n return specificParams;\n }\n }\n AutoComplete.prototype.create = function (params, element) {\n params.Input = element;\n if (params.Input.nodeName.match(/^INPUT$/i) && (params.Input.hasAttribute(\"type\") === false || params.Input.getAttribute(\"type\").match(/^TEXT|SEARCH$/i))) {\n params.Input.setAttribute(\"autocomplete\", \"off\");\n params._Position(params);\n params.Input.parentNode.appendChild(params.DOMResults);\n params.$Listeners = {\n blur: params._Blur.bind(params),\n destroy: AutoComplete.prototype.destroy.bind(null, params),\n focus: params._Focus.bind(params),\n keyup: AutoComplete.prototype.event.bind(null, params, EventType.KEYUP),\n keydown: AutoComplete.prototype.event.bind(null, params, EventType.KEYDOWN),\n position: params._Position.bind(params)\n };\n for (var event in params.$Listeners) {\n params.Input.addEventListener(event, params.$Listeners[event]);\n }\n }\n };\n AutoComplete.prototype.getEventsByType = function (params, type) {\n var mappings = {};\n for (var key in params.KeyboardMappings) {\n var event = EventType.KEYUP;\n if (params.KeyboardMappings[key].Event !== undefined) {\n event = params.KeyboardMappings[key].Event;\n }\n if (event == type) {\n mappings[key] = params.KeyboardMappings[key];\n }\n }\n return mappings;\n };\n AutoComplete.prototype.event = function (params, type, event) {\n var eventIdentifier = function (condition) {\n if ((match === true && mapping.Operator == ConditionOperator.AND) || (match === false && mapping.Operator == ConditionOperator.OR)) {\n condition = AutoComplete.merge({\n Not: false\n }, condition);\n if (condition.hasOwnProperty(\"Is\")) {\n if (condition.Is == event.keyCode) {\n match = !condition.Not;\n }\n else {\n match = condition.Not;\n }\n }\n else if (condition.hasOwnProperty(\"From\") && condition.hasOwnProperty(\"To\")) {\n if (event.keyCode >= condition.From && event.keyCode <= condition.To) {\n match = !condition.Not;\n }\n else {\n match = condition.Not;\n }\n }\n }\n };\n for (var name in AutoComplete.prototype.getEventsByType(params, type)) {\n var mapping = AutoComplete.merge({\n Operator: ConditionOperator.AND\n }, params.KeyboardMappings[name]), match = ConditionOperator.AND == mapping.Operator;\n mapping.Conditions.forEach(eventIdentifier);\n if (match === true) {\n mapping.Callback.call(params, event);\n }\n }\n };\n AutoComplete.prototype.makeRequest = function (params, callback, callbackErr) {\n var propertyHttpHeaders = Object.getOwnPropertyNames(params.HttpHeaders), request = new XMLHttpRequest(), method = params._HttpMethod(), url = params._Url(), queryParams = params._Pre(), queryParamsStringify = encodeURIComponent(params._QueryArg()) + \"=\" + encodeURIComponent(queryParams);\n if (method.match(/^GET$/i)) {\n if (url.indexOf(\"?\") !== -1) {\n url += \"&\" + queryParamsStringify;\n }\n else {\n url += \"?\" + queryParamsStringify;\n }\n }\n request.open(method, url, true);\n for (var i = propertyHttpHeaders.length - 1; i >= 0; i--) {\n request.setRequestHeader(propertyHttpHeaders[i], params.HttpHeaders[propertyHttpHeaders[i]]);\n }\n request.onreadystatechange = function () {\n if (request.readyState == 4 && request.status == 200) {\n params.$Cache[queryParams] = request.response;\n callback(request.response);\n }\n else if (request.status >= 400) {\n callbackErr();\n }\n };\n return request;\n };\n AutoComplete.prototype.ajax = function (params, request, timeout) {\n if (timeout === void 0) { timeout = true; }\n if (params.$AjaxTimer) {\n window.clearTimeout(params.$AjaxTimer);\n }\n if (timeout === true) {\n params.$AjaxTimer = window.setTimeout(AutoComplete.prototype.ajax.bind(null, params, request, false), params.Delay);\n }\n else {\n if (params.Request) {\n params.Request.abort();\n }\n params.Request = request;\n params.Request.send(params._QueryArg() + \"=\" + params._Pre());\n }\n };\n AutoComplete.prototype.cache = function (params, callback, callbackErr) {\n var response = params._Cache(params._Pre());\n if (response === undefined) {\n var request = AutoComplete.prototype.makeRequest(params, callback, callbackErr);\n AutoComplete.prototype.ajax(params, request);\n }\n else {\n callback(response);\n }\n };\n AutoComplete.prototype.destroy = function (params) {\n for (var event in params.$Listeners) {\n params.Input.removeEventListener(event, params.$Listeners[event]);\n }\n params.DOMResults.parentNode.removeChild(params.DOMResults);\n };\n AutoComplete.merge = function () {\n var merge = {}, tmp;\n for (var i = 0; i < arguments.length; i++) {\n for (tmp in arguments[i]) {\n merge[tmp] = arguments[i][tmp];\n }\n }\n return merge;\n };\n AutoComplete.defaults = {\n Delay: 150,\n EmptyMessage: \"No result here\",\n Highlight: {\n getRegex: function (value) {\n return new RegExp(value, \"ig\");\n },\n transform: function (value) {\n return \"\" + value + \"\";\n }\n },\n HttpHeaders: {\n \"Content-type\": \"application/x-www-form-urlencoded\"\n },\n Limit: 0,\n MinChars: 0,\n HttpMethod: \"GET\",\n QueryArg: \"q\",\n Url: null,\n KeyboardMappings: {\n \"Enter\": {\n Conditions: [{\n Is: 13,\n Not: false\n }],\n Callback: function (event) {\n if (this.DOMResults.getAttribute(\"class\").indexOf(\"open\") != -1) {\n var liActive = this.DOMResults.querySelector(\"li.active\");\n if (liActive !== null) {\n event.preventDefault();\n this._Select(liActive);\n this.DOMResults.setAttribute(\"class\", \"autocomplete\");\n }\n }\n },\n Operator: ConditionOperator.AND,\n Event: EventType.KEYDOWN\n },\n \"KeyUpAndDown_down\": {\n Conditions: [{\n Is: 38,\n Not: false\n },\n {\n Is: 40,\n Not: false\n }],\n Callback: function (event) {\n event.preventDefault();\n },\n Operator: ConditionOperator.OR,\n Event: EventType.KEYDOWN\n },\n \"KeyUpAndDown_up\": {\n Conditions: [{\n Is: 38,\n Not: false\n },\n {\n Is: 40,\n Not: false\n }],\n Callback: function (event) {\n event.preventDefault();\n var first = this.DOMResults.querySelector(\"li:first-child:not(.locked)\"), last = this.DOMResults.querySelector(\"li:last-child:not(.locked)\"), active = this.DOMResults.querySelector(\"li.active\");\n if (active) {\n var currentIndex = Array.prototype.indexOf.call(active.parentNode.children, active), position = currentIndex + (event.keyCode - 39), lisCount = this.DOMResults.getElementsByTagName(\"li\").length;\n if (position < 0) {\n position = lisCount - 1;\n }\n else if (position >= lisCount) {\n position = 0;\n }\n active.classList.remove(\"active\");\n active.parentElement.children.item(position).classList.add(\"active\");\n }\n else if (last && event.keyCode == 38) {\n last.classList.add(\"active\");\n }\n else if (first) {\n first.classList.add(\"active\");\n }\n },\n Operator: ConditionOperator.OR,\n Event: EventType.KEYUP\n },\n \"AlphaNum\": {\n Conditions: [{\n Is: 13,\n Not: true\n }, {\n From: 35,\n To: 40,\n Not: true\n }],\n Callback: function () {\n var oldValue = this.Input.getAttribute(\"data-autocomplete-old-value\"), currentValue = this._Pre();\n if (currentValue !== \"\" && currentValue.length >= this._MinChars()) {\n if (!oldValue || currentValue != oldValue) {\n this.DOMResults.setAttribute(\"class\", \"autocomplete open\");\n }\n AutoComplete.prototype.cache(this, function (response) {\n this._Render(this._Post(response));\n this._Open();\n }.bind(this), this._Error);\n }\n else {\n this._Close();\n }\n },\n Operator: ConditionOperator.AND,\n Event: EventType.KEYUP\n }\n },\n DOMResults: null,\n Request: null,\n Input: null,\n /**\n * Return the message when no result returns\n */\n _EmptyMessage: function () {\n var emptyMessage = \"\";\n if (this.Input.hasAttribute(\"data-autocomplete-empty-message\")) {\n emptyMessage = this.Input.getAttribute(\"data-autocomplete-empty-message\");\n }\n else if (this.EmptyMessage !== false) {\n emptyMessage = this.EmptyMessage;\n }\n else {\n emptyMessage = \"\";\n }\n return emptyMessage;\n },\n /**\n * Returns the maximum number of results\n */\n _Limit: function () {\n var limit = this.Input.getAttribute(\"data-autocomplete-limit\");\n if (isNaN(limit) || limit === null) {\n return this.Limit;\n }\n return parseInt(limit, 10);\n },\n /**\n * Returns the minimum number of characters entered before firing ajax\n */\n _MinChars: function () {\n var minchars = this.Input.getAttribute(\"data-autocomplete-minchars\");\n if (isNaN(minchars) || minchars === null) {\n return this.MinChars;\n }\n return parseInt(minchars, 10);\n },\n /**\n * Apply transformation on labels response\n */\n _Highlight: function (label) {\n return label.replace(this.Highlight.getRegex(this._Pre()), this.Highlight.transform);\n },\n /**\n * Returns the HHTP method to use\n */\n _HttpMethod: function () {\n if (this.Input.hasAttribute(\"data-autocomplete-method\")) {\n return this.Input.getAttribute(\"data-autocomplete-method\");\n }\n return this.HttpMethod;\n },\n /**\n * Returns the query param to use\n */\n _QueryArg: function () {\n if (this.Input.hasAttribute(\"data-autocomplete-param-name\")) {\n return this.Input.getAttribute(\"data-autocomplete-param-name\");\n }\n return this.QueryArg;\n },\n /**\n * Returns the URL to use for AJAX request\n */\n _Url: function () {\n if (this.Input.hasAttribute(\"data-autocomplete\")) {\n return this.Input.getAttribute(\"data-autocomplete\");\n }\n return this.Url;\n },\n /**\n * Manage the close\n */\n _Blur: function (now) {\n if (now === void 0) { now = false; }\n if (now) {\n this._Close();\n }\n else {\n var params = this;\n setTimeout(function () {\n params._Blur(true);\n }, 150);\n }\n },\n /**\n * Manage the cache\n */\n _Cache: function (value) {\n return this.$Cache[value];\n },\n /**\n * Manage the open\n */\n _Focus: function () {\n var oldValue = this.Input.getAttribute(\"data-autocomplete-old-value\");\n if ((!oldValue || this.Input.value != oldValue) && this._MinChars() <= this.Input.value.length) {\n this.DOMResults.setAttribute(\"class\", \"autocomplete open\");\n }\n },\n /**\n * Bind all results item if one result is opened\n */\n _Open: function () {\n var params = this;\n Array.prototype.forEach.call(this.DOMResults.getElementsByTagName(\"li\"), function (li) {\n if (li.getAttribute(\"class\") != \"locked\") {\n li.onclick = function () {\n params._Select(li);\n };\n }\n });\n },\n _Close: function () {\n this.DOMResults.setAttribute(\"class\", \"autocomplete\");\n },\n /**\n * Position the results HTML element\n */\n _Position: function () {\n this.DOMResults.setAttribute(\"class\", \"autocomplete\");\n this.DOMResults.setAttribute(\"style\", \"top:\" + (this.Input.offsetTop + this.Input.offsetHeight) + \"px;left:\" + this.Input.offsetLeft + \"px;width:\" + this.Input.clientWidth + \"px;\");\n },\n /**\n * Execute the render of results DOM element\n */\n _Render: function (response) {\n var ul;\n if (typeof response == \"string\") {\n ul = this._RenderRaw(response);\n }\n else {\n ul = this._RenderResponseItems(response);\n }\n if (this.DOMResults.hasChildNodes()) {\n this.DOMResults.removeChild(this.DOMResults.childNodes[0]);\n }\n this.DOMResults.appendChild(ul);\n },\n /**\n * ResponseItems[] rendering\n */\n _RenderResponseItems: function (response) {\n var ul = document.createElement(\"ul\"), li = document.createElement(\"li\"), limit = this._Limit();\n // Order\n if (limit < 0) {\n response = response.reverse();\n }\n else if (limit === 0) {\n limit = response.length;\n }\n for (var item = 0; item < Math.min(Math.abs(limit), response.length); item++) {\n li.innerHTML = response[item].Label;\n li.setAttribute(\"data-autocomplete-value\", response[item].Value);\n ul.appendChild(li);\n li = document.createElement(\"li\");\n }\n return ul;\n },\n /**\n * string response rendering (RAW HTML)\n */\n _RenderRaw: function (response) {\n var ul = document.createElement(\"ul\"), li = document.createElement(\"li\");\n if (response.length > 0) {\n this.DOMResults.innerHTML = response;\n }\n else {\n var emptyMessage = this._EmptyMessage();\n if (emptyMessage !== \"\") {\n li.innerHTML = emptyMessage;\n li.setAttribute(\"class\", \"locked\");\n ul.appendChild(li);\n }\n }\n return ul;\n },\n /**\n * Deal with request response\n */\n _Post: function (response) {\n try {\n var returnResponse = [];\n //JSON return\n var json = JSON.parse(response);\n if (Object.keys(json).length === 0) {\n return \"\";\n }\n if (Array.isArray(json)) {\n for (var i = 0; i < Object.keys(json).length; i++) {\n returnResponse[returnResponse.length] = { \"Value\": json[i], \"Label\": this._Highlight(json[i]) };\n }\n }\n else {\n for (var value in json) {\n returnResponse.push({\n \"Value\": value,\n \"Label\": this._Highlight(json[value])\n });\n }\n }\n return returnResponse;\n }\n catch (event) {\n //HTML return\n return response;\n }\n },\n /**\n * Return the autocomplete value to send (before request)\n */\n _Pre: function () {\n return this.Input.value;\n },\n /**\n * Choice one result item\n */\n _Select: function (item) {\n if (item.hasAttribute(\"data-autocomplete-value\")) {\n this.Input.value = item.getAttribute(\"data-autocomplete-value\");\n }\n else {\n this.Input.value = item.innerHTML;\n }\n this.Input.setAttribute(\"data-autocomplete-old-value\", this.Input.value);\n },\n /**\n * Handle HTTP error on the request\n */\n _Error: function () {\n },\n $AjaxTimer: null,\n $Cache: {},\n $Listeners: {}\n };\n return AutoComplete;\n}());\nmodule.exports = AutoComplete;\n\n},{}]},{},[1])(1)\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* exported AutoComplete */\n\nimport AutoComplete from \"../../../node_modules/autocomplete-js/dist/autocomplete.js\";\n\n(function (w, d, searxng) {\n 'use strict';\n\n var qinput_id = \"q\", qinput;\n\n const isMobile = window.matchMedia(\"only screen and (max-width: 50em)\").matches;\n\n function submitIfQuery () {\n if (qinput.value.length > 0) {\n var search = document.getElementById('search');\n setTimeout(search.submit.bind(search), 0);\n }\n }\n\n function createClearButton (qinput) {\n var cs = document.getElementById('clear_search');\n var updateClearButton = function () {\n if (qinput.value.length === 0) {\n cs.classList.add(\"empty\");\n } else {\n cs.classList.remove(\"empty\");\n }\n };\n\n // update status, event listener\n updateClearButton();\n cs.addEventListener('click', function (ev) {\n qinput.value = '';\n qinput.focus();\n updateClearButton();\n ev.preventDefault();\n });\n qinput.addEventListener('input', updateClearButton, false);\n }\n\n searxng.ready(function () {\n qinput = d.getElementById(qinput_id);\n\n if (qinput !== null) {\n // clear button\n createClearButton(qinput);\n\n // autocompleter\n if (searxng.settings.autocomplete) {\n searxng.autocomplete = AutoComplete.call(w, {\n Url: \"./autocompleter\",\n EmptyMessage: searxng.settings.translations.no_item_found,\n HttpMethod: searxng.settings.method,\n HttpHeaders: {\n \"Content-type\": \"application/x-www-form-urlencoded\",\n \"X-Requested-With\": \"XMLHttpRequest\"\n },\n MinChars: searxng.settings.autocomplete_min,\n Delay: 300,\n _Position: function () {},\n _Open: function () {\n var params = this;\n Array.prototype.forEach.call(this.DOMResults.getElementsByTagName(\"li\"), function (li) {\n if (li.getAttribute(\"class\") != \"locked\") {\n li.onmousedown = function () {\n params._Select(li);\n };\n }\n });\n },\n _Select: function (item) {\n AutoComplete.defaults._Select.call(this, item);\n var form = item.closest('form');\n if (form) {\n form.submit();\n }\n },\n _MinChars: function () {\n if (this.Input.value.indexOf('!') > -1) {\n return 0;\n } else {\n return AutoComplete.defaults._MinChars.call(this);\n }\n },\n KeyboardMappings: Object.assign({}, AutoComplete.defaults.KeyboardMappings, {\n \"KeyUpAndDown_up\": Object.assign({}, AutoComplete.defaults.KeyboardMappings.KeyUpAndDown_up, {\n Callback: function (event) {\n AutoComplete.defaults.KeyboardMappings.KeyUpAndDown_up.Callback.call(this, event);\n var liActive = this.DOMResults.querySelector(\"li.active\");\n if (liActive) {\n AutoComplete.defaults._Select.call(this, liActive);\n }\n },\n }),\n \"Tab\": Object.assign({}, AutoComplete.defaults.KeyboardMappings.Enter, {\n Conditions: [{\n Is: 9,\n Not: false\n }],\n Callback: function (event) {\n if (this.DOMResults.getAttribute(\"class\").indexOf(\"open\") != -1) {\n var liActive = this.DOMResults.querySelector(\"li.active\");\n if (liActive !== null) {\n AutoComplete.defaults._Select.call(this, liActive);\n event.preventDefault();\n }\n }\n },\n })\n }),\n }, \"#\" + qinput_id);\n }\n\n /*\n Monkey patch autocomplete.js to fix a bug\n With the POST method, the values are not URL encoded: query like \"1 + 1\" are sent as \"1 1\" since space are URL encoded as plus.\n See HTML specifications:\n * HTML5: https://url.spec.whatwg.org/#concept-urlencoded-serializer\n * HTML4: https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1\n\n autocomplete.js does not URL encode the name and values:\n https://github.com/autocompletejs/autocomplete.js/blob/87069524f3b95e68f1b54d8976868e0eac1b2c83/src/autocomplete.ts#L665\n\n The monkey patch overrides the compiled version of the ajax function.\n See https://github.com/autocompletejs/autocomplete.js/blob/87069524f3b95e68f1b54d8976868e0eac1b2c83/dist/autocomplete.js#L143-L158\n The patch changes only the line 156 from\n params.Request.send(params._QueryArg() + \"=\" + params._Pre());\n to\n params.Request.send(encodeURIComponent(params._QueryArg()) + \"=\" + encodeURIComponent(params._Pre()));\n\n Related to:\n * https://github.com/autocompletejs/autocomplete.js/issues/78\n * https://github.com/searxng/searxng/issues/1695\n */\n AutoComplete.prototype.ajax = function (params, request, timeout) {\n if (timeout === void 0) { timeout = true; }\n if (params.$AjaxTimer) {\n window.clearTimeout(params.$AjaxTimer);\n }\n if (timeout === true) {\n params.$AjaxTimer = window.setTimeout(AutoComplete.prototype.ajax.bind(null, params, request, false), params.Delay);\n } else {\n if (params.Request) {\n params.Request.abort();\n }\n params.Request = request;\n params.Request.send(encodeURIComponent(params._QueryArg()) + \"=\" + encodeURIComponent(params._Pre()));\n }\n };\n\n if (!isMobile && document.querySelector('.index_endpoint')) {\n qinput.focus();\n }\n }\n\n // Additionally to searching when selecting a new category, we also\n // automatically start a new search request when the user changes a search\n // filter (safesearch, time range or language) (this requires JavaScript\n // though)\n if (\n qinput !== null\n && searxng.settings.search_on_category_select\n // If .search_filters is undefined (invisible) we are on the homepage and\n // hence don't have to set any listeners\n && d.querySelector(\".search_filters\") != null\n ) {\n searxng.on(d.getElementById('safesearch'), 'change', submitIfQuery);\n searxng.on(d.getElementById('time_range'), 'change', submitIfQuery);\n searxng.on(d.getElementById('language'), 'change', submitIfQuery);\n }\n\n const categoryButtons = d.querySelectorAll(\"button.category_button\");\n for (let button of categoryButtons) {\n searxng.on(button, 'click', (event) => {\n if (event.shiftKey) {\n event.preventDefault();\n button.classList.toggle(\"selected\");\n return;\n }\n\n // manually deselect the old selection when a new category is selected\n const selectedCategories = d.querySelectorAll(\"button.category_button.selected\");\n for (let categoryButton of selectedCategories) {\n categoryButton.classList.remove(\"selected\");\n }\n button.classList.add(\"selected\");\n })\n }\n\n // override form submit action to update the actually selected categories\n const form = d.querySelector(\"#search\");\n if (form != null) {\n searxng.on(form, 'submit', (event) => {\n event.preventDefault();\n const categoryValuesInput = d.querySelector(\"#selected-categories\");\n if (categoryValuesInput) {\n let categoryValues = [];\n for (let categoryButton of categoryButtons) {\n if (categoryButton.classList.contains(\"selected\")) {\n categoryValues.push(categoryButton.name.replace(\"category_\", \"\"));\n }\n }\n categoryValuesInput.value = categoryValues.join(\",\");\n }\n form.submit();\n });\n }\n });\n\n})(window, document, window.searxng);\n"],"names":["w","ElementPrototype","selector","node","nodes","i","callbackSafe","callback","el","e","exception","searxng","obj","eventType","useCapture","found","method","url","data","resolve","reject","req","ex","src","path","id","s","newNode","referenceNode","getEndpoint","className","d","onlyImages","newLoadSpinner","loader","replaceChildrenWith","element","children","child","loadNextPage","form","formData","response","nextPageDoc","articleList","paginationElement","articleElement","err","intersectionObserveOptions","observedSelector","observer","entries","paginationEntry","isElementInDetail","getResultElement","isImageResult","resultElement","highlightResult","baseKeyBinding","removeFocus","copyURLToClipboard","toggleHelp","searchInputFocus","GoToNextPage","openResult","GoToPreviousPage","reloadPage","keyBindingLayouts","scrollPage","scrollPageTo","keyBindings","tagName","which","noScroll","keepFocus","current","effectiveWhich","next","results","top","bot","etop","ebot","link","scrollPageToSelected","pageButtonClick","css_selector","button","sel","wtop","wheight","offset","wbot","amount","position","nav","q","len","newTab","initHelpContent","divElement","categories","k","key","sorted","a","b","html","cat","lastCategory","first","cj","helpPanel","body","currentUrlElement","event","leaflet_target","map_lon","map_lat","map_zoom","map_boundingbox","map_geojson","map_bounds","southWest","northEast","map","osmMapnikUrl","osmMapnikAttrib","osmMapnik","osmWikimediaUrl","osmWikimediaAttrib","osmWikimedia","baseLayers","engine_descriptions","load_engine_descriptions","content","engine_name","description","elements","source","enableAllEngines","disableAllEngines","engineToggles","toggleEngines","enable","copyHashButton","window","document","params","evt","handleTouchStart","handleTouchMove","handleTouchEnd","xDown","yDown","xDiff","yDiff","timeDown","startEl","touchCount","swipeThreshold","getNearestAttribute","swipeUnit","swipeTimeout","timeDiff","changedTouches","eventData","xUp","yUp","attributeName","defaultValue","attributeValue","img","btnLabelCollapsed","btnLabelNotCollapsed","target","targetElement","iframe_load","srctest","imgTimeoutID","imgLoaderSpinner","imgLoader","loadImage","imgSrc","onSuccess","thumbnail","scrollTop","f","module","r","n","t","o","c","require","u","p","exports","ConditionOperator","EventType","AutoComplete","input","specificParams","type","mappings","eventIdentifier","condition","match","mapping","name","callbackErr","propertyHttpHeaders","request","queryParams","queryParamsStringify","timeout","merge","tmp","value","liActive","last","active","currentIndex","lisCount","oldValue","currentValue","emptyMessage","limit","minchars","label","now","li","ul","item","returnResponse","json","qinput_id","qinput","isMobile","submitIfQuery","search","createClearButton","cs","updateClearButton","ev","categoryButtons","selectedCategories","categoryButton","categoryValuesInput","categoryValues"],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAMA,OAAO,QAAW,SAAUA,EAAG,EAAG,CAQ5BA,EAAE,SACH,SAAUC,EAAkB,CAC3BA,EAAiB,QAAUA,EAAiB,SAC5CA,EAAiB,iBACjBA,EAAiB,uBACjBA,EAAiB,mBACjB,SAAUC,EAAU,CAElB,QADIC,EAAO,KAAMC,GAASD,EAAK,YAAcA,EAAK,UAAU,iBAAiBD,CAAQ,EAAGG,EAAI,GACrFD,EAAM,EAAEC,CAAC,GAAKD,EAAMC,CAAC,GAAKF,GAAK,CACtC,MAAO,CAAC,CAACC,EAAMC,CAAC,CACjB,CACP,EAAO,QAAQ,SAAS,EAGtB,SAASC,EAAcC,EAAUC,EAAIC,EAAG,CACtC,GAAI,CACFF,EAAS,KAAKC,EAAIC,CAAC,CACpB,OAAQC,EAAW,CAClB,QAAQ,IAAIA,CAAS,CAC3B,CACA,CAEE,IAAIC,EAAU,OAAO,SAAW,CAAE,EAElCA,EAAQ,GAAK,SAAUC,EAAKC,EAAWN,EAAUO,EAAY,CAC3DA,EAAaA,GAAc,GACvB,OAAOF,GAAQ,SAEjBA,EAAI,iBAAiBC,EAAWN,EAAUO,CAAU,EAGpD,EAAE,iBAAiBD,EAAW,SAAU,EAAG,CAEzC,QADIL,EAAK,EAAE,QAAU,EAAE,WAAYO,EAAQ,GACpCP,GAAMA,EAAG,SAAWA,IAAO,GAAK,EAAEO,EAAQP,EAAG,QAAQI,CAAG,IAAIJ,EAAKA,EAAG,cACvEO,GAAOT,EAAaC,EAAUC,EAAI,CAAC,CACxC,EAAEM,CAAU,CAEhB,EAEDH,EAAQ,MAAQ,SAAUJ,EAAU,CAC9B,SAAS,YAAc,UACzBA,EAAS,KAAKP,CAAC,EAEfA,EAAE,iBAAiB,mBAAoBO,EAAS,KAAKP,CAAC,CAAC,CAE1D,EAEDW,EAAQ,KAAO,SAAUK,EAAQC,EAAKC,EAAO,KAAM,CACjD,OAAO,IAAI,QAAQ,SAAUC,EAASC,EAAQ,CAC5C,GAAI,CACF,IAAIC,EAAM,IAAI,eACdA,EAAI,KAAKL,EAAQC,EAAK,EAAI,EAC1BI,EAAI,QAAU,IAGdA,EAAI,OAAS,UAAY,CACnBA,EAAI,QAAU,IAChBF,EAAQE,EAAI,SAAUA,EAAI,YAAY,EAEtCD,EAAO,MAAMC,EAAI,UAAU,CAAC,CAE/B,EAGDA,EAAI,QAAU,UAAY,CACxBD,EAAO,MAAM,eAAe,CAAC,CAC9B,EAEDC,EAAI,QAAU,UAAY,CACxBD,EAAO,MAAM,wBAAwB,CAAC,CACvC,EAEDC,EAAI,UAAY,UAAY,CAC1BD,EAAO,MAAM,SAAS,CAAC,CACjC,EAGYF,EACFG,EAAI,KAAKH,CAAI,EAEbG,EAAI,KAAM,CAEb,OAAQC,EAAI,CACXF,EAAOE,CAAE,CACjB,CACA,CAAK,CACF,EAEDX,EAAQ,UAAY,SAAUY,EAAK,CACjC,IAAIC,EAAOb,EAAQ,SAAS,kBAAoB,IAAMY,EACpDE,EAAK,SAAWF,EAAI,QAAQ,IAAK,GAAG,EACpCG,EAAI,EAAE,eAAeD,CAAE,EACrBC,IAAM,OACRA,EAAI,EAAE,cAAc,MAAM,EAC1BA,EAAE,aAAa,KAAMD,CAAE,EACvBC,EAAE,aAAa,MAAO,YAAY,EAClCA,EAAE,aAAa,OAAQ,UAAU,EACjCA,EAAE,aAAa,OAAQF,CAAI,EAC3B,EAAE,KAAK,YAAYE,CAAC,EAEvB,EAEDf,EAAQ,WAAa,SAAUY,EAAKhB,EAAU,CAC5C,IAAIiB,EAAOb,EAAQ,SAAS,kBAAoB,IAAMY,EACpDE,EAAK,UAAYF,EAAI,QAAQ,IAAK,GAAG,EACrCG,EAAI,EAAE,eAAeD,CAAE,EACzB,GAAIC,IAAM,KACRA,EAAI,EAAE,cAAc,QAAQ,EAC5BA,EAAE,aAAa,KAAMD,CAAE,EACvBC,EAAE,aAAa,MAAOF,CAAI,EAC1BE,EAAE,OAASnB,EACXmB,EAAE,QAAU,UAAY,CACtBA,EAAE,aAAa,QAAS,GAAG,CAC5B,EACD,EAAE,KAAK,YAAYA,CAAC,UACVA,EAAE,aAAa,OAAO,EAOhC,QAAQ,IAAI,mCAAqCF,EAAO,eAAe,MANvE,IAAI,CACFjB,EAAS,MAAMmB,EAAG,EAAE,CACrB,OAAQhB,EAAW,CAClB,QAAQ,IAAIA,CAAS,CAC7B,CAIG,EAEDC,EAAQ,aAAe,SAAUgB,EAASC,EAAe,CACvDA,EAAc,WAAW,aAAaD,EAASC,CAAa,CAC7D,EAEDjB,EAAQ,YAAc,SAAUgB,EAASC,EAAe,CACtDA,EAAc,WAAW,YAAYD,EAASC,EAAc,WAAW,CACxE,EAEDjB,EAAQ,GAAG,SAAU,QAAS,UAAY,CACxC,KAAK,WAAW,UAAU,IAAI,WAAW,CAC7C,CAAG,EAED,SAASkB,GAAe,CACtB,QAASC,KAAa,EAAE,qBAAqB,MAAM,EAAE,CAAC,EAAE,UAAU,SAChE,GAAIA,EAAU,SAAS,WAAW,EAChC,OAAOA,EAAU,MAAM,GAAG,EAAE,CAAC,EAGjC,MAAO,EACX,CAEE,OAAAnB,EAAQ,SAAWkB,EAAa,EAEzBlB,CACT,EAAG,OAAQ,QAAQ,EChKnB,QAAQ,MAAM,UAAY,CAQxB,GALA,QAAQ,0BACN,yBAA0B,QAC1B,8BAA+B,QAC/B,sBAAuB,OAAO,0BAA0B,UAEtD,QAAQ,WAAa,UACvB,OAGF,GAAI,CAAC,QAAQ,0BAA2B,CACtC,QAAQ,IAAI,oCAAoC,EAChD,MACJ,CAEE,IAAIoB,EAAI,SACR,IAAIC,EAAaD,EAAE,eAAe,SAAS,EAAE,UAAU,SAAS,sBAAsB,EAEtF,SAASE,GAAkB,CACzB,IAAIC,EAASH,EAAE,cAAc,KAAK,EAClC,OAAAG,EAAO,UAAU,IAAI,QAAQ,EACtBA,CACX,CAEE,SAASC,EAAqBC,EAASC,EAAU,CAC/CD,EAAQ,YAAc,GACtBC,EAAS,QAAQC,GAASF,EAAQ,YAAYE,CAAK,CAAC,CACxD,CAEE,SAASC,EAAchC,EAAU,CAC/B,IAAIiC,EAAOT,EAAE,cAAc,4BAA4B,EACvD,GAAKS,EAGL,CAAAL,EAAoBJ,EAAE,cAAc,aAAa,EAAG,CAAEE,EAAc,EAAI,EACxE,IAAIQ,EAAW,IAAI,SAASD,CAAI,EAChC,QAAQ,KAAK,OAAQT,EAAE,cAAc,SAAS,EAAE,aAAa,QAAQ,EAAGU,CAAQ,EAAE,KAChF,SAAUC,EAAU,CAClB,IAAIC,EAAc,IAAI,UAAS,EAAG,gBAAgBD,EAAU,WAAW,EACnEE,EAAcD,EAAY,iBAAiB,eAAe,EAC1DE,EAAoBF,EAAY,cAAc,aAAa,EAC/DZ,EAAE,cAAc,aAAa,EAAE,OAAQ,EACnCa,EAAY,OAAS,GAAK,CAACZ,GAE7BD,EAAE,cAAc,OAAO,EAAE,YAAYA,EAAE,cAAc,IAAI,CAAC,EAE5Da,EAAY,QAAQE,GAAkB,CACpCf,EAAE,cAAc,OAAO,EAAE,YAAYe,CAAc,CAC7D,CAAS,EACGD,IACFd,EAAE,cAAc,UAAU,EAAE,YAAYc,CAAiB,EACzDtC,EAAU,EAEpB,CACA,EAAM,MACA,SAAUwC,EAAK,CACb,QAAQ,IAAIA,CAAG,EACf,IAAI,EAAIhB,EAAE,cAAc,KAAK,EAC7B,EAAE,YAAc,QAAQ,SAAS,aAAa,wBAC9C,EAAE,UAAU,IAAI,cAAc,EAC9B,EAAE,aAAa,OAAQ,OAAO,EAC9BI,EAAoBJ,EAAE,cAAc,aAAa,EAAG,CAAE,CAAC,CAAE,CACjE,CACA,EACA,CAEE,GAAI,QAAQ,SAAS,iBAAmB,QAAQ,0BAA2B,CACzE,MAAMiB,EAA6B,CACjC,WAAY,OACb,EACKC,EAAmB,4BACnBC,EAAW,IAAI,qBAAqBC,GAAW,CACnD,MAAMC,EAAkBD,EAAQ,CAAC,EAC7BC,EAAgB,iBAClBF,EAAS,UAAUE,EAAgB,MAAM,EACzCb,EAAa,IAAMW,EAAS,QAAQnB,EAAE,cAAckB,CAAgB,EAAGD,CAA0B,CAAC,EAE1G,CAAK,EACDE,EAAS,QAAQnB,EAAE,cAAckB,CAAgB,EAAGD,CAA0B,CAClF,CAEA,CAAC,ECpFD,QAAQ,MAAM,UAAY,CAExB,SAASK,EAAmB7C,EAAI,CAC9B,KAAOA,IAAO,QAAW,CACvB,GAAIA,EAAG,UAAU,SAAS,QAAQ,EAChC,MAAO,GAET,GAAIA,EAAG,UAAU,SAAS,QAAQ,EAGhC,MAAO,GAETA,EAAKA,EAAG,UACd,CACI,MAAO,EACX,CAEE,SAAS8C,EAAkB9C,EAAI,CAC7B,KAAOA,IAAO,QAAW,CACvB,GAAIA,EAAG,UAAU,SAAS,QAAQ,EAChC,OAAOA,EAETA,EAAKA,EAAG,UACd,CAEA,CAEE,SAAS+C,EAAeC,EAAe,CACrC,OAAOA,GAAiBA,EAAc,UAAU,SAAS,eAAe,CAC5E,CAEE,QAAQ,GAAG,UAAW,QAAS,SAAU/C,EAAG,CAC1C,GAAI,CAAC4C,EAAkB5C,EAAE,MAAM,EAAG,CAChCgD,EAAgB,IAAI,EAAE,GAAM,EAAI,EAChC,IAAID,EAAgBF,EAAiB7C,EAAE,MAAM,EACzC8C,EAAcC,CAAa,IAC7B/C,EAAE,eAAgB,EAClB,QAAQ,YAAY+C,CAAa,EAEzC,CACA,CAAG,EAED,QAAQ,GAAG,YAAa,QAAS,SAAU/C,EAAG,CAC5C,GAAI,CAAC4C,EAAkB5C,EAAE,MAAM,EAAG,CAChC,IAAI+C,EAAgBF,EAAiB7C,EAAE,MAAM,EACzC+C,GAAiBA,EAAc,aAAa,mBAAmB,IAAM,MACvEC,EAAgBD,CAAa,EAAE,EAAI,EAEjCD,EAAcC,CAAa,GAC7B,QAAQ,YAAYA,CAAa,CAEzC,CACG,EAAE,EAAI,EAGP,IAAIE,EAAiB,CACnB,OAAU,CACR,IAAK,MACL,IAAKC,EACL,IAAK,sCACL,IAAK,SACN,EACD,EAAK,CACH,IAAK,IACL,IAAKC,EACL,IAAK,mDACL,IAAK,SACN,EACD,EAAK,CACH,IAAK,IACL,IAAKC,EACL,IAAK,qBACL,IAAK,OACN,EACD,EAAK,CACH,IAAK,IACL,IAAKC,EACL,IAAK,4BACL,IAAK,SACN,EACD,EAAK,CACH,IAAK,IACL,IAAKC,EAAc,EACnB,IAAK,kBACL,IAAK,SACN,EACD,EAAK,CACH,IAAK,IACL,IAAKC,EAAW,EAAK,EACrB,IAAK,qBACL,IAAK,SACN,EACD,EAAK,CACH,IAAK,IACL,IAAKC,EAAkB,EACvB,IAAK,sBACL,IAAK,SACN,EACD,EAAK,CACH,IAAK,IACL,IAAKC,EACL,IAAK,8BACL,IAAK,SACN,EACD,EAAK,CACH,IAAK,IACL,IAAKF,EAAW,EAAI,EACpB,IAAK,+BACL,IAAK,SACN,CACF,EACGG,EAAoB,CAEtB,QAAW,OAAO,OAChB,CACE,UAAa,CACX,IAAK,IACL,IAAKV,EAAgB,IAAI,EACzB,IAAK,gCACL,IAAK,SACN,EACD,WAAc,CACZ,IAAK,IACL,IAAKA,EAAgB,MAAM,EAC3B,IAAK,4BACL,IAAK,SACN,CACF,EAAEC,CAAc,EAEnB,IAAO,OAAO,OACZ,CACE,EAAK,CACH,IAAK,IACL,IAAKU,EAAW,CAAC,OAAO,WAAW,EACnC,IAAK,qBACL,IAAK,YACN,EACD,EAAK,CACH,IAAK,IACL,IAAKA,EAAW,OAAO,WAAW,EAClC,IAAK,uBACL,IAAK,YACN,EACD,EAAK,CACH,IAAK,IACL,IAAKA,EAAW,CAAC,OAAO,YAAc,CAAC,EACvC,IAAK,wBACL,IAAK,YACN,EACD,EAAK,CACH,IAAK,IACL,IAAKA,EAAW,OAAO,YAAc,CAAC,EACtC,IAAK,0BACL,IAAK,YACN,EACD,EAAK,CACH,IAAK,IACL,IAAKC,EAAa,CAAC,SAAS,KAAK,aAAc,KAAK,EACpD,IAAK,gCACL,IAAK,YACN,EACD,EAAK,CACH,IAAK,IACL,IAAKA,EAAa,SAAS,KAAK,aAAc,QAAQ,EACtD,IAAK,mCACL,IAAK,YACN,EACD,EAAK,CACH,IAAK,IACL,IAAKZ,EAAgB,IAAI,EACzB,IAAK,gCACL,IAAK,SACN,EACD,EAAK,CACH,IAAK,IACL,IAAKA,EAAgB,MAAM,EAC3B,IAAK,4BACL,IAAK,SACN,EACD,EAAK,CACH,IAAK,IACL,IAAKG,EACL,IAAK,mDACL,IAAK,SACN,CACT,EAASF,CAAc,CACvB,EAEMY,EAAcH,EAAkB,QAAQ,SAAS,OAAO,GAAKA,EAAkB,QAEnF,QAAQ,GAAG,SAAU,UAAW,SAAU1D,EAAG,CAE3C,GACE,OAAO,UAAU,eAAe,KAAK6D,EAAa7D,EAAE,GAAG,GAClD,CAACA,EAAE,SAAW,CAACA,EAAE,QACjB,CAACA,EAAE,UAAY,CAACA,EAAE,QACvB,CACA,IAAI8D,EAAU9D,EAAE,OAAO,QAAQ,YAAa,EACxCA,EAAE,MAAQ,SACZ6D,EAAY7D,EAAE,GAAG,EAAE,IAAIA,CAAC,GAEpBA,EAAE,SAAW,SAAS,MAAQ8D,IAAY,KAAOA,IAAY,YAC/D9D,EAAE,eAAgB,EAClB6D,EAAY7D,EAAE,GAAG,EAAE,IAAK,EAGlC,CACA,CAAG,EAED,SAASgD,EAAiBe,EAAO,CAC/B,OAAO,SAAUC,EAAUC,EAAW,CACpC,IAAIC,EAAU,SAAS,cAAc,4BAA4B,EAC/DC,EAAiBJ,EACnB,GAAIG,IAAY,KAAM,CAGpB,GADAA,EAAU,SAAS,cAAc,SAAS,EACtCA,IAAY,KAEd,QAGEH,IAAU,QAAUA,IAAU,QAChCI,EAAiBD,EAE3B,CAEM,IAAIE,EAAMC,EAAU,SAAS,iBAAiB,SAAS,EAGvD,GAFAA,EAAU,MAAM,KAAKA,CAAO,EAExB,OAAOF,GAAmB,SAC5BC,EAAOD,MAEP,QAAQA,EAAc,CACtB,IAAK,UAIH,QAHIG,EAAM,SAAS,gBAAgB,WAAa,SAAS,KAAK,UAC1DC,EAAMD,EAAM,SAAS,gBAAgB,aAEhC1E,EAAI,EAAGA,EAAIyE,EAAQ,OAAQzE,IAAK,CACvCwE,EAAOC,EAAQzE,CAAC,EAChB,IAAI4E,EAAOJ,EAAK,UACZK,EAAOD,EAAOJ,EAAK,aAEvB,GAAKK,GAAQF,GAASC,EAAOF,EAC3B,KAEd,CACU,MACF,IAAK,OACHF,EAAOC,EAAQA,EAAQ,QAAQH,CAAO,EAAI,CAAC,GAAKA,EAChD,MACF,IAAK,KACHE,EAAOC,EAAQA,EAAQ,QAAQH,CAAO,EAAI,CAAC,GAAKA,EAChD,MACF,IAAK,SACHE,EAAOC,EAAQA,EAAQ,OAAS,CAAC,EACjC,MACF,IAAK,MAEL,QACED,EAAOC,EAAQ,CAAC,CAC1B,CAGM,GAAID,EAAM,CAGR,GAFAF,EAAQ,gBAAgB,mBAAmB,EAC3CE,EAAK,aAAa,oBAAqB,MAAM,EACzC,CAACH,EAAW,CACd,IAAIS,EAAON,EAAK,cAAc,MAAM,GAAKA,EAAK,cAAc,GAAG,EAC3DM,IAAS,MACXA,EAAK,MAAO,CAExB,CACaV,GACHW,EAAsB,CAEhC,CACK,CACL,CAEE,SAASlB,GAAc,CACrB,SAAS,SAAS,OAAO,EAAI,CACjC,CAEE,SAASP,EAAalD,EAAG,CACvB,MAAM8D,EAAU9D,EAAE,OAAO,QAAQ,YAAa,EAC1C,SAAS,gBAAkB8D,IAAY,SAAWA,IAAY,UAAYA,IAAY,YACxF,SAAS,cAAc,KAAM,EAE7B,QAAQ,YAAa,CAE3B,CAEE,SAASc,EAAiBC,EAAc,CACtC,OAAO,UAAY,CACjB,IAAIC,EAAS,SAAS,cAAcD,CAAY,EAC5CC,GACFA,EAAO,MAAO,CAEjB,CACL,CAEE,SAASxB,GAAgB,CACvB,OAAOsB,EAAgB,iDAAiD,CAC5E,CAEE,SAASpB,GAAoB,CAC3B,OAAOoB,EAAgB,qDAAqD,CAChF,CAEE,SAASD,GAAwB,CAC/B,IAAII,EAAM,SAAS,cAAc,4BAA4B,EAC7D,GAAIA,IAAQ,KAGZ,KAAIC,EAAO,SAAS,gBAAgB,WAAa,SAAS,KAAK,UAC7DC,EAAU,SAAS,gBAAgB,aACnCT,EAAOO,EAAI,UACXN,EAAOD,EAAOO,EAAI,aAClBG,EAAS,IAEX,GAAKH,EAAI,yBAA2B,MAAUN,EAAOQ,EAAU,CAG7D,OAAO,OAAO,OAAO,QAAS,CAAC,EAC/B,MACN,CACI,GAAID,EAAQR,EAAOU,EACjB,OAAO,OAAO,OAAO,QAASV,EAAOU,CAAM,MACtC,CACL,IAAIC,EAAOH,EAAOC,EACdE,EAAQV,EAAOS,GACjB,OAAO,OAAO,OAAO,QAAST,EAAOQ,EAAUC,CAAM,CAE7D,EACA,CAEE,SAASvB,EAAYyB,EAAQ,CAC3B,OAAO,UAAY,CACjB,OAAO,SAAS,EAAGA,CAAM,EACzBpC,EAAgB,SAAS,EAAG,CAC7B,CACL,CAEE,SAASY,EAAcyB,EAAUC,EAAK,CACpC,OAAO,UAAY,CACjB,OAAO,SAAS,EAAGD,CAAQ,EAC3BrC,EAAgBsC,CAAG,EAAG,CACvB,CACL,CAEE,SAASjC,GAAoB,CAC3B,OAAO,SAAS,EAAG,CAAC,EACpB,IAAIkC,EAAI,SAAS,cAAc,IAAI,EAEnC,GADAA,EAAE,MAAO,EACLA,EAAE,kBAAmB,CACvB,IAAIC,EAAMD,EAAE,MAAM,OAClBA,EAAE,kBAAkBC,EAAKA,CAAG,CAClC,CACA,CAEE,SAASjC,EAAYkC,EAAQ,CAC3B,OAAO,UAAY,CACjB,IAAIf,EAAO,SAAS,cAAc,iCAAiC,EAInE,GAHIA,IAAS,OACXA,EAAO,SAAS,cAAc,gCAAgC,GAE5DA,IAAS,KAAM,CACjB,IAAIlE,EAAMkE,EAAK,aAAa,MAAM,EAC9Be,EACF,OAAO,KAAKjF,CAAG,EAEf,OAAO,SAAS,KAAOA,CAEjC,CACK,CACL,CAEE,SAASkF,EAAiBC,EAAY,CACpC,IAAIC,EAAa,CAAE,EAEnB,QAASC,KAAKhC,EAAa,CACzB,IAAIiC,EAAMjC,EAAYgC,CAAC,EACvBD,EAAWE,EAAI,GAAG,EAAIF,EAAWE,EAAI,GAAG,GAAK,CAAE,EAC/CF,EAAWE,EAAI,GAAG,EAAE,KAAKA,CAAG,CAClC,CAEI,IAAIC,EAAS,OAAO,KAAKH,CAAU,EAAE,KAAK,SAAUI,EAAGC,EAAG,CACxD,OAAOL,EAAWK,CAAC,EAAE,OAASL,EAAWI,CAAC,EAAE,MAClD,CAAK,EAED,GAAID,EAAO,SAAW,EAItB,KAAIG,EAAO,mEACXA,GAAQ,gDACRA,GAAQ,UAER,QAAStG,EAAI,EAAGA,EAAImG,EAAO,OAAQnG,IAAK,CACtC,IAAIuG,EAAMP,EAAWG,EAAOnG,CAAC,CAAC,EAE1BwG,EAAexG,IAAOmG,EAAO,OAAS,EACtCM,EAAQzG,EAAI,IAAM,EAElByG,IACFH,GAAQ,QAEVA,GAAQ,OAERA,GAAQ,OAASC,EAAI,CAAC,EAAE,IAAM,QAC9BD,GAAQ,6BAER,QAASI,KAAMH,EACbD,GAAQ,YAAcC,EAAIG,CAAE,EAAE,IAAM,UAAYH,EAAIG,CAAE,EAAE,IAAM,QAGhEJ,GAAQ,QACRA,GAAQ,SAEJ,CAACG,GAASD,KACZF,GAAQ,QAEhB,CAEIA,GAAQ,WAERP,EAAW,UAAYO,EAC3B,CAEE,SAAS9C,GAAc,CACrB,IAAImD,EAAY,SAAS,cAAc,mBAAmB,EAC1D,GAA+BA,GAAc,KAAM,CAEjDA,EAAY,SAAS,cAAc,KAAK,EACxCA,EAAU,GAAK,mBACfA,EAAU,UAAY,eACtBb,EAAgBa,CAAS,EACzB,IAAIC,EAAO,SAAS,qBAAqB,MAAM,EAAE,CAAC,EAClDA,EAAK,YAAYD,CAAS,CAChC,KAAW,CAELA,EAAU,UAAU,OAAO,WAAW,EACtC,MACN,CACA,CAEE,SAASpD,GAAsB,CAC7B,IAAIsD,EAAoB,SAAS,cAAc,iCAAiC,EAChF,GAAIA,IAAsB,KAAM,OAEhC,MAAMjG,EAAMiG,EAAkB,aAAa,MAAM,EACjD,UAAU,UAAU,UAAUjG,CAAG,CACrC,CAEE,QAAQ,qBAAuBmE,EAC/B,QAAQ,WAAa3B,EAAgB,MAAM,EAC3C,QAAQ,eAAiBA,EAAgB,IAAI,CAC/C,CAAC,GC1cA,SAAUzD,EAAG,EAAGW,EAAS,CAGxBA,EAAQ,MAAM,UAAY,CACxBA,EAAQ,GAAG,oBAAqB,QAAS,SAAUwG,EAAO,CAExD,KAAK,UAAU,OAAO,kBAAkB,EAGxC,IAAIC,EAAiB,KAAK,QAAQ,cAC9BC,EAAU,WAAW,KAAK,QAAQ,MAAM,EACxCC,EAAU,WAAW,KAAK,QAAQ,MAAM,EACxCC,EAAW,WAAW,KAAK,QAAQ,OAAO,EAC1CC,EAAkB,KAAK,MAAM,KAAK,QAAQ,cAAc,EACxDC,EAAc,KAAK,MAAM,KAAK,QAAQ,UAAU,EAEpD9G,EAAQ,UAAU,iBAAiB,EACnCA,EAAQ,WAAW,gBAAiB,UAAY,CAC9C,IAAI+G,EAAa,KACjB,GAAIF,EAAiB,CACnB,IAAIG,EAAY,EAAE,OAAOH,EAAgB,CAAC,EAAGA,EAAgB,CAAC,CAAC,EAC3DI,EAAY,EAAE,OAAOJ,EAAgB,CAAC,EAAGA,EAAgB,CAAC,CAAC,EAC/DE,EAAa,EAAE,aAAaC,EAAWC,CAAS,CAC1D,CAGQ,IAAIC,EAAM,EAAE,IAAIT,CAAc,EAE1BU,EAAe,qDACfC,EAAkB,gFAClBC,EAAY,IAAI,EAAE,UAAUF,EAAc,CAAC,QAAS,EAAG,QAAS,GAAI,YAAaC,CAAe,CAAC,EACjGE,EAAkB,sDAClBC,EAAqB,kGACrBC,EAAe,IAAI,EAAE,UAAUF,EAAiB,CAAC,QAAS,EAAG,QAAS,GAAI,YAAaC,CAAkB,CAAC,EAE1GR,EAGF,WAAW,UAAY,CACrBG,EAAI,UAAUH,EAAY,CACxB,QAAS,EACvB,CAAa,CACF,EAAE,CAAC,EACKL,GAAWC,IAChBC,EACFM,EAAI,QAAQ,IAAI,EAAE,OAAOP,EAASD,CAAO,EAAGE,CAAQ,EAEpDM,EAAI,QAAQ,IAAI,EAAE,OAAOP,EAASD,CAAO,EAAG,CAAC,GAIjDQ,EAAI,SAASG,CAAS,EAEtB,IAAII,EAAa,CACf,aAAcJ,EACd,gBAAiBG,CAClB,EAED,EAAE,QAAQ,OAAOC,CAAU,EAAE,MAAMP,CAAG,EAElCJ,GACF,EAAE,QAAQA,CAAW,EAAE,MAAMI,CAAG,CAI1C,CAAO,EAGDV,EAAM,eAAgB,CAC5B,CAAK,CACL,CAAG,CACH,GAAG,OAAQ,SAAU,OAAO,OAAO,GCxElC,SAAUnH,EAAG,EAAGW,EAAS,CAGpBA,EAAQ,WAAa,eAIzBA,EAAQ,MAAM,UAAY,CACxB,IAAI0H,EAAsB,KAC1B,SAASC,GAA4B,CAC/BD,GAAuB,MACzB1H,EAAQ,KAAK,MAAO,0BAA0B,EAAE,KAAK,SAAU4H,EAAS,CACtEF,EAAsB,KAAK,MAAME,CAAO,EACxC,SAAW,CAACC,EAAaC,CAAW,IAAK,OAAO,QAAQJ,CAAmB,EAAG,CAC5E,IAAIK,EAAW,EAAE,iBAAiB,sBAAwBF,EAAc,wBAAwB,EAChG,UAAWpG,KAAWsG,EAAU,CAC9B,IAAIC,EAAS,QAAUhI,EAAQ,SAAS,aAAa,OAAS,UAAY8H,EAAY,CAAC,EAAI,QAC3FrG,EAAQ,UAAYqG,EAAY,CAAC,EAAIE,CACnD,CACA,CACA,CAAS,CAET,CAEI,UAAWnI,KAAM,EAAE,iBAAiB,oBAAoB,EACtDG,EAAQ,GAAGH,EAAI,aAAc8H,CAAwB,EAGvD,MAAMM,EAAmB,EAAE,iBAAiB,qBAAqB,EAC3DC,EAAoB,EAAE,iBAAiB,sBAAsB,EAC7DC,EAAgB,EAAE,iBAAiB,mDAAmD,EACtFC,EAAiBC,GAAW,CAChC,UAAWxI,KAAMsI,EAEXtI,EAAG,eAAiB,OAAMA,EAAG,QAAU,CAACwI,EAE/C,EACD,UAAWxI,KAAMoI,EACfjI,EAAQ,GAAGH,EAAI,QAAS,IAAMuI,EAAc,EAAI,CAAC,EAEnD,UAAWvI,KAAMqI,EACflI,EAAQ,GAAGH,EAAI,QAAS,IAAMuI,EAAc,EAAK,CAAC,EAGpD,MAAME,EAAiB,EAAE,cAAc,YAAY,EACnDtI,EAAQ,GAAGsI,EAAgB,QAAUxI,GAAM,CACzCA,EAAE,eAAgB,EAClB,UAAU,UAAU,UAAUwI,EAAe,QAAQ,IAAI,EACzDA,EAAe,UAAYA,EAAe,QAAQ,UACxD,CAAK,CACL,CAAG,CACH,GAAG,OAAQ,SAAU,OAAO,OAAO,ECpDnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQC,SAAUC,EAAQC,EAAU,CAKrB,OAAOD,EAAO,aAAgB,aAE9BA,EAAO,YAAc,SAAU/B,EAAOiC,EAAQ,CAE1CA,EAASA,GAAU,CAAE,QAAS,GAAO,WAAY,GAAO,OAAQ,MAAW,EAE3E,IAAIC,EAAMF,EAAS,YAAY,aAAa,EAC5C,OAAAE,EAAI,gBAAgBlC,EAAOiC,EAAO,QAASA,EAAO,WAAYA,EAAO,MAAM,EACpEC,CACV,EAEDH,EAAO,YAAY,UAAYA,EAAO,MAAM,WAGhDC,EAAS,iBAAiB,aAAcG,EAAkB,EAAK,EAC/DH,EAAS,iBAAiB,YAAaI,EAAiB,EAAK,EAC7DJ,EAAS,iBAAiB,WAAYK,EAAgB,EAAK,EAE3D,IAAIC,EAAQ,KACRC,EAAQ,KACRC,EAAQ,KACRC,EAAQ,KACRC,EAAW,KACXC,EAAU,KACVC,EAAa,EAOjB,SAASP,EAAe/I,EAAG,CAGvB,GAAIqJ,IAAYrJ,EAAE,OAElB,KAAIuJ,EAAiB,SAASC,EAAoBH,EAAS,uBAAwB,IAAI,EAAG,EAAE,EACxFI,EAAYD,EAAoBH,EAAS,kBAAmB,IAAI,EAChEK,EAAe,SAASF,EAAoBH,EAAS,qBAAsB,KAAK,EAAG,EAAE,EACrFM,EAAW,KAAK,IAAG,EAAKP,EACxBhJ,EAAY,GACZwJ,EAAiB5J,EAAE,gBAAkBA,EAAE,SAAW,CAAE,EA4BxD,GA1BIyJ,IAAc,OACdF,EAAiB,KAAK,MAAOA,EAAiB,IAAOb,EAAS,gBAAgB,YAAY,GAE1Fe,IAAc,OACdF,EAAiB,KAAK,MAAOA,EAAiB,IAAOb,EAAS,gBAAgB,WAAW,GAGzF,KAAK,IAAIQ,CAAK,EAAI,KAAK,IAAIC,CAAK,EAC5B,KAAK,IAAID,CAAK,EAAIK,GAAkBI,EAAWD,IAC3CR,EAAQ,EACR9I,EAAY,cAGZA,EAAY,gBAIf,KAAK,IAAI+I,CAAK,EAAII,GAAkBI,EAAWD,IAChDP,EAAQ,EACR/I,EAAY,YAGZA,EAAY,eAIhBA,IAAc,GAAI,CAElB,IAAIyJ,EAAY,CACZ,IAAKzJ,EAAU,QAAQ,UAAW,EAAE,EACpC,WAAYwJ,EAAe,CAAC,GAAK,CAAE,GAAE,WAAa,SAClD,QAASN,EACT,OAAQ,SAASN,EAAO,EAAE,EAC1B,KAAM,UAAUY,EAAe,CAAC,GAAK,IAAI,SAAW,GAAI,EAAE,EAC1D,OAAQ,SAASX,EAAO,EAAE,EAC1B,KAAM,UAAUW,EAAe,CAAC,GAAK,IAAI,SAAW,GAAI,EAAE,CAC7D,EAGDP,EAAQ,cAAc,IAAI,YAAY,SAAU,CAAE,QAAS,GAAM,WAAY,GAAM,OAAQQ,CAAW,CAAA,CAAC,EAGvGR,EAAQ,cAAc,IAAI,YAAYjJ,EAAW,CAAE,QAAS,GAAM,WAAY,GAAM,OAAQyJ,CAAW,CAAA,CAAC,CACpH,CAGQb,EAAQ,KACRC,EAAQ,KACRG,EAAW,KACnB,CAMI,SAASP,EAAiB7I,EAAG,CAGrBA,EAAE,OAAO,aAAa,mBAAmB,IAAM,SAEnDqJ,EAAUrJ,EAAE,OAEZoJ,EAAW,KAAK,IAAK,EACrBJ,EAAQhJ,EAAE,QAAQ,CAAC,EAAE,QACrBiJ,EAAQjJ,EAAE,QAAQ,CAAC,EAAE,QACrBkJ,EAAQ,EACRC,EAAQ,EACRG,EAAatJ,EAAE,QAAQ,OAC/B,CAOI,SAAS8I,EAAgB9I,EAAG,CAExB,GAAI,GAACgJ,GAAS,CAACC,GAEf,KAAIa,EAAM9J,EAAE,QAAQ,CAAC,EAAE,QACnB+J,EAAM/J,EAAE,QAAQ,CAAC,EAAE,QAEvBkJ,EAAQF,EAAQc,EAChBX,EAAQF,EAAQc,EACxB,CASI,SAASP,EAAoBzJ,EAAIiK,EAAeC,EAAc,CAG1D,KAAOlK,GAAMA,IAAO2I,EAAS,iBAAiB,CAE1C,IAAIwB,EAAiBnK,EAAG,aAAaiK,CAAa,EAElD,GAAIE,EACA,OAAOA,EAGXnK,EAAKA,EAAG,UACpB,CAEQ,OAAOkK,CACf,CAEA,GAAE,OAAQ,QAAQ,GClKjB,SAAU1K,EAAG,EAAGW,EAAS,CAGpBA,EAAQ,WAAa,WAIzBA,EAAQ,MAAM,UAAY,CACxB,EAAE,iBAAiB,WAAW,EAAE,QAC9BiK,GACEA,EAAI,iBACF,QAAS,IAAM,CAEbA,EAAI,IAAM,OAAO,QAAQ,SAAS,kBAAoB,yBACvD,EACD,CAAC,KAAM,EAAI,CACrB,CAAS,EAED,EAAE,cAAc,6BAA6B,IAC/C,EAAE,cAAc,6BAA6B,EAAE,MAAM,QAAU,SAGjEjK,EAAQ,GAAG,gBAAiB,QAAS,UAAY,CAC/C,IAAIkK,EAAoB,KAAK,aAAa,yBAAyB,EAC/DC,EAAuB,KAAK,aAAa,6BAA6B,EACtEC,EAAS,KAAK,aAAa,aAAa,EACxCC,EAAgB,EAAE,cAAcD,CAAM,EACtCpE,EAAO,KAAK,UACZ,KAAK,UAAU,SAAS,WAAW,EACrCA,EAAOA,EAAK,QAAQkE,EAAmBC,CAAoB,EAE3DnE,EAAOA,EAAK,QAAQmE,EAAsBD,CAAiB,EAE7D,KAAK,UAAYlE,EACjB,KAAK,UAAU,OAAO,WAAW,EACjCqE,EAAc,UAAU,OAAO,WAAW,CAChD,CAAK,EAEDrK,EAAQ,GAAG,gBAAiB,QAAS,UAAY,CAC/C,IAAIoK,EAAS,KAAK,aAAa,aAAa,EACxCE,EAAc,EAAE,cAAcF,EAAS,WAAW,EAClDG,EAAUD,EAAY,aAAa,KAAK,GACxCC,GAAY,MAAiCA,IAAY,KAC3DD,EAAY,aAAa,MAAOA,EAAY,aAAa,UAAU,CAAC,CAE5E,CAAK,EAEDtK,EAAQ,GAAG,YAAa,QAAS,UAAY,CAC3C,IAAIoK,EAAS,KAAK,cAAc,cAAc,KAAK,EACnD,UAAU,UAAU,UAAUA,EAAO,SAAS,EAC9C,KAAK,UAAY,KAAK,QAAQ,UACpC,CAAK,EAMD,IAAII,EAGJ,MAAMC,EAAmB,EAAE,cAAc,KAAK,EAC9CA,EAAiB,UAAU,IAAI,QAAQ,EAIvC,MAAMC,EAAY,IAAI,MAEhBC,EAAY,CAACC,EAAQC,IAAc,CAEnCL,GAAc,aAAaA,CAAY,EAG3CA,EAAe,WAAW,IAAM,CAC9BE,EAAU,IAAME,CACjB,EAAE,GAAI,EAGPF,EAAU,OAAS,IAAM,CACvBG,EAAW,EACXJ,EAAiB,OAAQ,CAC1B,EACDC,EAAU,QAAU,IAAM,CACxBD,EAAiB,OAAQ,CAC1B,CACF,EAEDzK,EAAQ,YAAe6C,GAAkB,CAcvC,GAVA,EAAE,eAAe,SAAS,EAAE,UAAU,IAAI,mBAAmB,EAK7D,OAAO,SAAS,KAAO,gBAEvB7C,EAAQ,qBAAsB,EAG1B,CAAC6C,EAAe,OAGpB,MAAMoH,EAAMpH,EAAc,cAAc,2BAA2B,EACnE,GAAI,CAACoH,EAAK,OAGV,MAAMrJ,EAAMqJ,EAAI,aAAa,UAAU,EAGvC,GAAI,CAACrJ,EAAK,OAGV,MAAMkK,EAAYjI,EAAc,cAAc,kBAAkB,EAChEoH,EAAI,IAAMa,EAAU,IAGEjI,EAAc,cAAc,SAAS,EAC7C,YAAY4H,CAAgB,EAG1CE,EAAU/J,EAAK,IAAM,CAGnBqJ,EAAI,IAAMrJ,EACVqJ,EAAI,gBAAgB,UAAU,CACtC,CAAO,CACF,EAEDjK,EAAQ,YAAc,UAAY,CAChC,EAAE,eAAe,SAAS,EAAE,UAAU,OAAO,mBAAmB,EAE5D,OAAO,SAAS,MAAQ,iBAAiB,OAAO,QAAQ,KAAM,EAClEA,EAAQ,qBAAsB,CAC/B,EACDA,EAAQ,GAAG,uBAAwB,QAASF,GAAK,CAC/CA,EAAE,eAAgB,EAClBE,EAAQ,YAAa,CAC3B,CAAK,EACDA,EAAQ,GAAG,0BAA2B,QAASF,GAAK,CAClDA,EAAE,eAAgB,EAClBE,EAAQ,eAAe,EAAK,CAClC,CAAK,EACDA,EAAQ,GAAG,sBAAuB,QAASF,GAAK,CAC9CA,EAAE,eAAgB,EAClBE,EAAQ,WAAW,EAAK,CAC9B,CAAK,EAGD,OAAO,iBAAiB,aAAc,IAAM,CACtC,OAAO,SAAS,MAAQ,iBAAiBA,EAAQ,YAAa,CACxE,CAAK,EAED,EAAE,iBAAiB,mBAAmB,EAAE,QACtCC,GAAO,CACLA,EAAI,iBAAiB,cAAe,UAAY,CAC9CD,EAAQ,WAAW,EAAK,CAClC,CAAS,EACDC,EAAI,iBAAiB,eAAgB,UAAY,CAC/CD,EAAQ,eAAe,EAAK,CACtC,CAAS,CACT,CACK,EAEDX,EAAE,iBAAiB,SAAU,UAAY,CACvC,IAAIS,EAAI,EAAE,eAAe,WAAW,EAClCiL,EAAY,SAAS,gBAAgB,WAAa,SAAS,KAAK,UAChE5G,EAAU,EAAE,eAAe,SAAS,EAClCrE,IAAM,OACJiL,GAAa,IACf5G,EAAQ,UAAU,IAAI,WAAW,EAEjCA,EAAQ,UAAU,OAAO,WAAW,EAGzC,EAAE,EAAI,CAEX,CAAG,CAEH,GAAG,OAAQ,SAAU,OAAO,OAAO,qYCvLlC,SAAS6G,EAAE,CAA4DC,EAAA,QAAeD,EAAG,CAA2O,GAAG,UAAU,CAA2B,OAAQ,UAAU,CAAC,SAASE,EAAEpL,EAAEqL,EAAEC,EAAE,CAAC,SAASC,EAAE3L,EAAEsL,EAAE,CAAC,GAAG,CAACG,EAAEzL,CAAC,EAAE,CAAC,GAAG,CAACI,EAAEJ,CAAC,EAAE,CAAC,IAAI4L,EAAc,OAAOC,GAAnB,YAA4BA,EAAQ,GAAG,CAACP,GAAGM,EAAE,OAAOA,EAAE5L,EAAE,EAAE,EAAE,GAAG8L,EAAE,OAAOA,EAAE9L,EAAE,EAAE,EAAE,IAAIoG,EAAE,IAAI,MAAM,uBAAuBpG,EAAE,GAAG,EAAE,MAAMoG,EAAE,KAAK,mBAAmBA,CAAC,CAAC,IAAI2F,EAAEN,EAAEzL,CAAC,EAAE,CAAC,QAAQ,CAAE,CAAA,EAAEI,EAAEJ,CAAC,EAAE,CAAC,EAAE,KAAK+L,EAAE,QAAQ,SAASP,EAAE,CAAC,IAAIC,EAAErL,EAAEJ,CAAC,EAAE,CAAC,EAAEwL,CAAC,EAAE,OAAOG,EAAEF,GAAGD,CAAC,CAAC,EAAEO,EAAEA,EAAE,QAAQP,EAAEpL,EAAEqL,EAAEC,CAAC,CAAC,CAAC,OAAOD,EAAEzL,CAAC,EAAE,OAAO,CAAC,QAAQ8L,EAAc,OAAOD,GAAnB,YAA4BA,EAAQ7L,EAAE,EAAEA,EAAE0L,EAAE,OAAO1L,IAAI2L,EAAED,EAAE1L,CAAC,CAAC,EAAE,OAAO2L,CAAC,CAAC,OAAOH,CAAC,EAAI,EAAC,CAAC,EAAE,CAAC,SAASK,EAAQN,EAAOS,EAAQ,CAWp2B,IAAIC,GACH,SAAUA,EAAmB,CAC1BA,EAAkBA,EAAkB,IAAS,CAAC,EAAI,MAClDA,EAAkBA,EAAkB,GAAQ,CAAC,EAAI,IACrD,GAAGA,IAAsBA,EAAoB,CAAA,EAAG,EAChD,IAAIC,GACH,SAAUA,EAAW,CAClBA,EAAUA,EAAU,QAAa,CAAC,EAAI,UACtCA,EAAUA,EAAU,MAAW,CAAC,EAAI,OACxC,GAAGA,IAAcA,EAAY,CAAA,EAAG,EAOhC,IAAIC,EAA8B,UAAY,CAE1C,SAASA,EAAapD,EAAQlJ,EAAU,CAGpC,GAFIkJ,IAAW,SAAUA,EAAS,CAAA,GAC9BlJ,IAAa,SAAUA,EAAW,uBAClC,MAAM,QAAQA,CAAQ,EACtBA,EAAS,QAAQ,SAAU,EAAG,CAC1B,IAAIsM,EAAapD,EAAQ,CAAC,CAC1C,CAAa,UAEI,OAAOlJ,GAAY,SAAU,CAClC,IAAIwI,EAAW,SAAS,iBAAiBxI,CAAQ,EACjD,MAAM,UAAU,QAAQ,KAAKwI,EAAU,SAAU+D,EAAO,CACpD,IAAID,EAAapD,EAAQqD,CAAK,CAC9C,CAAa,CACb,KACa,CACD,IAAIC,EAAiBF,EAAa,MAAMA,EAAa,SAAUpD,EAAQ,CACnE,WAAY,SAAS,cAAc,KAAK,CACxD,CAAa,EACD,OAAAoD,EAAa,UAAU,OAAOE,EAAgBxM,CAAQ,EAC/CwM,CACnB,CACA,CACI,OAAAF,EAAa,UAAU,OAAS,SAAUpD,EAAQhH,EAAS,CAEvD,GADAgH,EAAO,MAAQhH,EACXgH,EAAO,MAAM,SAAS,MAAM,UAAU,IAAMA,EAAO,MAAM,aAAa,MAAM,IAAM,IAASA,EAAO,MAAM,aAAa,MAAM,EAAE,MAAM,gBAAgB,GAAI,CACvJA,EAAO,MAAM,aAAa,eAAgB,KAAK,EAC/CA,EAAO,UAAUA,CAAM,EACvBA,EAAO,MAAM,WAAW,YAAYA,EAAO,UAAU,EACrDA,EAAO,WAAa,CAChB,KAAMA,EAAO,MAAM,KAAKA,CAAM,EAC9B,QAASoD,EAAa,UAAU,QAAQ,KAAK,KAAMpD,CAAM,EACzD,MAAOA,EAAO,OAAO,KAAKA,CAAM,EAChC,MAAOoD,EAAa,UAAU,MAAM,KAAK,KAAMpD,EAAQmD,EAAU,KAAK,EACtE,QAASC,EAAa,UAAU,MAAM,KAAK,KAAMpD,EAAQmD,EAAU,OAAO,EAC1E,SAAUnD,EAAO,UAAU,KAAKA,CAAM,CACzC,EACD,QAASjC,KAASiC,EAAO,WACrBA,EAAO,MAAM,iBAAiBjC,EAAOiC,EAAO,WAAWjC,CAAK,CAAC,CAE7E,CACK,EACDqF,EAAa,UAAU,gBAAkB,SAAUpD,EAAQuD,EAAM,CAC7D,IAAIC,EAAW,CAAE,EACjB,QAASrG,KAAO6C,EAAO,iBAAkB,CACrC,IAAIjC,EAAQoF,EAAU,MAClBnD,EAAO,iBAAiB7C,CAAG,EAAE,QAAU,SACvCY,EAAQiC,EAAO,iBAAiB7C,CAAG,EAAE,OAErCY,GAASwF,IACTC,EAASrG,CAAG,EAAI6C,EAAO,iBAAiB7C,CAAG,EAE3D,CACQ,OAAOqG,CACV,EACDJ,EAAa,UAAU,MAAQ,SAAUpD,EAAQuD,EAAMxF,EAAO,CAC1D,IAAI0F,EAAkB,SAAUC,EAAW,EAClCC,IAAU,IAAQC,EAAQ,UAAYV,EAAkB,KAASS,IAAU,IAASC,EAAQ,UAAYV,EAAkB,MAC3HQ,EAAYN,EAAa,MAAM,CAC3B,IAAK,EACR,EAAEM,CAAS,EACRA,EAAU,eAAe,IAAI,EACzBA,EAAU,IAAM3F,EAAM,QACtB4F,EAAQ,CAACD,EAAU,IAGnBC,EAAQD,EAAU,IAGjBA,EAAU,eAAe,MAAM,GAAKA,EAAU,eAAe,IAAI,IAClE3F,EAAM,SAAW2F,EAAU,MAAQ3F,EAAM,SAAW2F,EAAU,GAC9DC,EAAQ,CAACD,EAAU,IAGnBC,EAAQD,EAAU,KAIjC,EACD,QAASG,KAAQT,EAAa,UAAU,gBAAgBpD,EAAQuD,CAAI,EAAG,CACnE,IAAIK,EAAUR,EAAa,MAAM,CAC7B,SAAUF,EAAkB,GAC5C,EAAelD,EAAO,iBAAiB6D,CAAI,CAAC,EAAGF,EAAQT,EAAkB,KAAOU,EAAQ,SAC5EA,EAAQ,WAAW,QAAQH,CAAe,EACtCE,IAAU,IACVC,EAAQ,SAAS,KAAK5D,EAAQjC,CAAK,CAEnD,CACK,EACDqF,EAAa,UAAU,YAAc,SAAUpD,EAAQ7I,EAAU2M,EAAa,CAC1E,IAAIC,EAAsB,OAAO,oBAAoB/D,EAAO,WAAW,EAAGgE,EAAU,IAAI,eAAkBpM,EAASoI,EAAO,YAAa,EAAEnI,EAAMmI,EAAO,KAAM,EAAEiE,EAAcjE,EAAO,KAAM,EAAEkE,EAAuB,mBAAmBlE,EAAO,UAAW,CAAA,EAAI,IAAM,mBAAmBiE,CAAW,EAC3RrM,EAAO,MAAM,QAAQ,IACjBC,EAAI,QAAQ,GAAG,IAAM,GACrBA,GAAO,IAAMqM,EAGbrM,GAAO,IAAMqM,GAGrBF,EAAQ,KAAKpM,EAAQC,EAAK,EAAI,EAC9B,QAASZ,EAAI8M,EAAoB,OAAS,EAAG9M,GAAK,EAAGA,IACjD+M,EAAQ,iBAAiBD,EAAoB9M,CAAC,EAAG+I,EAAO,YAAY+D,EAAoB9M,CAAC,CAAC,CAAC,EAE/F,OAAA+M,EAAQ,mBAAqB,UAAY,CACjCA,EAAQ,YAAc,GAAKA,EAAQ,QAAU,KAC7ChE,EAAO,OAAOiE,CAAW,EAAID,EAAQ,SACrC7M,EAAS6M,EAAQ,QAAQ,GAEpBA,EAAQ,QAAU,KACvBF,EAAa,CAEpB,EACME,CACV,EACDZ,EAAa,UAAU,KAAO,SAAUpD,EAAQgE,EAASG,EAAS,CAC1DA,IAAY,SAAUA,EAAU,IAChCnE,EAAO,YACP,OAAO,aAAaA,EAAO,UAAU,EAErCmE,IAAY,GACZnE,EAAO,WAAa,OAAO,WAAWoD,EAAa,UAAU,KAAK,KAAK,KAAMpD,EAAQgE,EAAS,EAAK,EAAGhE,EAAO,KAAK,GAG9GA,EAAO,SACPA,EAAO,QAAQ,MAAO,EAE1BA,EAAO,QAAUgE,EACjBhE,EAAO,QAAQ,KAAKA,EAAO,UAAS,EAAK,IAAMA,EAAO,MAAM,EAEnE,EACDoD,EAAa,UAAU,MAAQ,SAAUpD,EAAQ7I,EAAU2M,EAAa,CACpE,IAAIxK,EAAW0G,EAAO,OAAOA,EAAO,KAAI,CAAE,EAC1C,GAAI1G,IAAa,OAAW,CACxB,IAAI0K,EAAUZ,EAAa,UAAU,YAAYpD,EAAQ7I,EAAU2M,CAAW,EAC9EV,EAAa,UAAU,KAAKpD,EAAQgE,CAAO,CACvD,MAEY7M,EAASmC,CAAQ,CAExB,EACD8J,EAAa,UAAU,QAAU,SAAUpD,EAAQ,CAC/C,QAASjC,KAASiC,EAAO,WACrBA,EAAO,MAAM,oBAAoBjC,EAAOiC,EAAO,WAAWjC,CAAK,CAAC,EAEpEiC,EAAO,WAAW,WAAW,YAAYA,EAAO,UAAU,CAC7D,EACDoD,EAAa,MAAQ,UAAY,CAE7B,QADIgB,EAAQ,CAAA,EAAIC,EACPpN,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAClC,IAAKoN,KAAO,UAAUpN,CAAC,EACnBmN,EAAMC,CAAG,EAAI,UAAUpN,CAAC,EAAEoN,CAAG,EAGrC,OAAOD,CACV,EACDhB,EAAa,SAAW,CACpB,MAAO,IACP,aAAc,iBACd,UAAW,CACP,SAAU,SAAUkB,EAAO,CACvB,OAAO,IAAI,OAAOA,EAAO,IAAI,CAChC,EACD,UAAW,SAAUA,EAAO,CACxB,MAAO,WAAaA,EAAQ,WAC5C,CACS,EACD,YAAa,CACT,eAAgB,mCACnB,EACD,MAAO,EACP,SAAU,EACV,WAAY,MACZ,SAAU,IACV,IAAK,KACL,iBAAkB,CACd,MAAS,CACL,WAAY,CAAC,CACL,GAAI,GACJ,IAAK,EAC7B,CAAqB,EACL,SAAU,SAAUvG,EAAO,CACvB,GAAI,KAAK,WAAW,aAAa,OAAO,EAAE,QAAQ,MAAM,GAAK,GAAI,CAC7D,IAAIwG,EAAW,KAAK,WAAW,cAAc,WAAW,EACpDA,IAAa,OACbxG,EAAM,eAAgB,EACtB,KAAK,QAAQwG,CAAQ,EACrB,KAAK,WAAW,aAAa,QAAS,cAAc,EAEhF,CACiB,EACD,SAAUrB,EAAkB,IAC5B,MAAOC,EAAU,OACpB,EACD,kBAAqB,CACjB,WAAY,CAAC,CACL,GAAI,GACJ,IAAK,EACR,EACD,CACI,GAAI,GACJ,IAAK,EAC7B,CAAqB,EACL,SAAU,SAAUpF,EAAO,CACvBA,EAAM,eAAgB,CACzB,EACD,SAAUmF,EAAkB,GAC5B,MAAOC,EAAU,OACpB,EACD,gBAAmB,CACf,WAAY,CAAC,CACL,GAAI,GACJ,IAAK,EACR,EACD,CACI,GAAI,GACJ,IAAK,EAC7B,CAAqB,EACL,SAAU,SAAUpF,EAAO,CACvBA,EAAM,eAAgB,EACtB,IAAIL,EAAQ,KAAK,WAAW,cAAc,6BAA6B,EAAG8G,EAAO,KAAK,WAAW,cAAc,4BAA4B,EAAGC,EAAS,KAAK,WAAW,cAAc,WAAW,EAChM,GAAIA,EAAQ,CACR,IAAIC,EAAe,MAAM,UAAU,QAAQ,KAAKD,EAAO,WAAW,SAAUA,CAAM,EAAG/H,EAAWgI,GAAgB3G,EAAM,QAAU,IAAK4G,EAAW,KAAK,WAAW,qBAAqB,IAAI,EAAE,OACvLjI,EAAW,EACXA,EAAWiI,EAAW,EAEjBjI,GAAYiI,IACjBjI,EAAW,GAEf+H,EAAO,UAAU,OAAO,QAAQ,EAChCA,EAAO,cAAc,SAAS,KAAK/H,CAAQ,EAAE,UAAU,IAAI,QAAQ,CAC3F,MAC6B8H,GAAQzG,EAAM,SAAW,GAC9ByG,EAAK,UAAU,IAAI,QAAQ,EAEtB9G,GACLA,EAAM,UAAU,IAAI,QAAQ,CAEnC,EACD,SAAUwF,EAAkB,GAC5B,MAAOC,EAAU,KACpB,EACD,SAAY,CACR,WAAY,CAAC,CACL,GAAI,GACJ,IAAK,EAC7B,EAAuB,CACC,KAAM,GACN,GAAI,GACJ,IAAK,EAC7B,CAAqB,EACL,SAAU,UAAY,CAClB,IAAIyB,EAAW,KAAK,MAAM,aAAa,6BAA6B,EAAGC,EAAe,KAAK,KAAM,EAC7FA,IAAiB,IAAMA,EAAa,QAAU,KAAK,cAC/C,CAACD,GAAYC,GAAgBD,IAC7B,KAAK,WAAW,aAAa,QAAS,mBAAmB,EAE7DxB,EAAa,UAAU,MAAM,MAAM,SAAU9J,EAAU,CACnD,KAAK,QAAQ,KAAK,MAAMA,CAAQ,CAAC,EACjC,KAAK,MAAO,CACf,GAAC,KAAK,IAAI,EAAG,KAAK,MAAM,GAGzB,KAAK,OAAQ,CAEpB,EACD,SAAU4J,EAAkB,IAC5B,MAAOC,EAAU,KACjC,CACS,EACD,WAAY,KACZ,QAAS,KACT,MAAO,KAIP,cAAe,UAAY,CACvB,IAAI2B,EAAe,GACnB,OAAI,KAAK,MAAM,aAAa,iCAAiC,EACzDA,EAAe,KAAK,MAAM,aAAa,iCAAiC,EAEnE,KAAK,eAAiB,GAC3BA,EAAe,KAAK,aAGpBA,EAAe,GAEZA,CACV,EAID,OAAQ,UAAY,CAChB,IAAIC,EAAQ,KAAK,MAAM,aAAa,yBAAyB,EAC7D,OAAI,MAAMA,CAAK,GAAKA,IAAU,KACnB,KAAK,MAET,SAASA,EAAO,EAAE,CAC5B,EAID,UAAW,UAAY,CACnB,IAAIC,EAAW,KAAK,MAAM,aAAa,4BAA4B,EACnE,OAAI,MAAMA,CAAQ,GAAKA,IAAa,KACzB,KAAK,SAET,SAASA,EAAU,EAAE,CAC/B,EAID,WAAY,SAAUC,EAAO,CACzB,OAAOA,EAAM,QAAQ,KAAK,UAAU,SAAS,KAAK,MAAM,EAAG,KAAK,UAAU,SAAS,CACtF,EAID,YAAa,UAAY,CACrB,OAAI,KAAK,MAAM,aAAa,0BAA0B,EAC3C,KAAK,MAAM,aAAa,0BAA0B,EAEtD,KAAK,UACf,EAID,UAAW,UAAY,CACnB,OAAI,KAAK,MAAM,aAAa,8BAA8B,EAC/C,KAAK,MAAM,aAAa,8BAA8B,EAE1D,KAAK,QACf,EAID,KAAM,UAAY,CACd,OAAI,KAAK,MAAM,aAAa,mBAAmB,EACpC,KAAK,MAAM,aAAa,mBAAmB,EAE/C,KAAK,GACf,EAID,MAAO,SAAUC,EAAK,CAElB,GADIA,IAAQ,SAAUA,EAAM,IACxBA,EACA,KAAK,OAAQ,MAEZ,CACD,IAAIlF,EAAS,KACb,WAAW,UAAY,CACnBA,EAAO,MAAM,EAAI,CACpB,EAAE,GAAG,CACtB,CACS,EAID,OAAQ,SAAUsE,EAAO,CACrB,OAAO,KAAK,OAAOA,CAAK,CAC3B,EAID,OAAQ,UAAY,CAChB,IAAIM,EAAW,KAAK,MAAM,aAAa,6BAA6B,GAC/D,CAACA,GAAY,KAAK,MAAM,OAASA,IAAa,KAAK,UAAS,GAAM,KAAK,MAAM,MAAM,QACpF,KAAK,WAAW,aAAa,QAAS,mBAAmB,CAEhE,EAID,MAAO,UAAY,CACf,IAAI5E,EAAS,KACb,MAAM,UAAU,QAAQ,KAAK,KAAK,WAAW,qBAAqB,IAAI,EAAG,SAAUmF,EAAI,CAC/EA,EAAG,aAAa,OAAO,GAAK,WAC5BA,EAAG,QAAU,UAAY,CACrBnF,EAAO,QAAQmF,CAAE,CACpB,EAErB,CAAa,CACJ,EACD,OAAQ,UAAY,CAChB,KAAK,WAAW,aAAa,QAAS,cAAc,CACvD,EAID,UAAW,UAAY,CACnB,KAAK,WAAW,aAAa,QAAS,cAAc,EACpD,KAAK,WAAW,aAAa,QAAS,QAAU,KAAK,MAAM,UAAY,KAAK,MAAM,cAAgB,WAAa,KAAK,MAAM,WAAa,YAAc,KAAK,MAAM,YAAc,KAAK,CACtL,EAID,QAAS,SAAU7L,EAAU,CACzB,IAAI8L,EACA,OAAO9L,GAAY,SACnB8L,EAAK,KAAK,WAAW9L,CAAQ,EAG7B8L,EAAK,KAAK,qBAAqB9L,CAAQ,EAEvC,KAAK,WAAW,iBAChB,KAAK,WAAW,YAAY,KAAK,WAAW,WAAW,CAAC,CAAC,EAE7D,KAAK,WAAW,YAAY8L,CAAE,CACjC,EAID,qBAAsB,SAAU9L,EAAU,CACtC,IAAI8L,EAAK,SAAS,cAAc,IAAI,EAAGD,EAAK,SAAS,cAAc,IAAI,EAAGJ,EAAQ,KAAK,OAAQ,EAE3FA,EAAQ,EACRzL,EAAWA,EAAS,QAAS,EAExByL,IAAU,IACfA,EAAQzL,EAAS,QAErB,QAAS+L,EAAO,EAAGA,EAAO,KAAK,IAAI,KAAK,IAAIN,CAAK,EAAGzL,EAAS,MAAM,EAAG+L,IAClEF,EAAG,UAAY7L,EAAS+L,CAAI,EAAE,MAC9BF,EAAG,aAAa,0BAA2B7L,EAAS+L,CAAI,EAAE,KAAK,EAC/DD,EAAG,YAAYD,CAAE,EACjBA,EAAK,SAAS,cAAc,IAAI,EAEpC,OAAOC,CACV,EAID,WAAY,SAAU9L,EAAU,CAC5B,IAAI8L,EAAK,SAAS,cAAc,IAAI,EAAGD,EAAK,SAAS,cAAc,IAAI,EACvE,GAAI7L,EAAS,OAAS,EAClB,KAAK,WAAW,UAAYA,MAE3B,CACD,IAAIwL,EAAe,KAAK,cAAe,EACnCA,IAAiB,KACjBK,EAAG,UAAYL,EACfK,EAAG,aAAa,QAAS,QAAQ,EACjCC,EAAG,YAAYD,CAAE,EAErC,CACY,OAAOC,CACV,EAID,MAAO,SAAU9L,EAAU,CACvB,GAAI,CACA,IAAIgM,EAAiB,CAAE,EAEnBC,EAAO,KAAK,MAAMjM,CAAQ,EAC9B,GAAI,OAAO,KAAKiM,CAAI,EAAE,SAAW,EAC7B,MAAO,GAEX,GAAI,MAAM,QAAQA,CAAI,EAClB,QAAStO,EAAI,EAAGA,EAAI,OAAO,KAAKsO,CAAI,EAAE,OAAQtO,IAC1CqO,EAAeA,EAAe,MAAM,EAAI,CAAE,MAASC,EAAKtO,CAAC,EAAG,MAAS,KAAK,WAAWsO,EAAKtO,CAAC,CAAC,CAAG,MAInG,SAASqN,KAASiB,EACdD,EAAe,KAAK,CAChB,MAAShB,EACT,MAAS,KAAK,WAAWiB,EAAKjB,CAAK,CAAC,CAChE,CAAyB,EAGT,OAAOgB,CACvB,MAC0B,CAEV,OAAOhM,CACvB,CACS,EAID,KAAM,UAAY,CACd,OAAO,KAAK,MAAM,KACrB,EAID,QAAS,SAAU+L,EAAM,CACjBA,EAAK,aAAa,yBAAyB,EAC3C,KAAK,MAAM,MAAQA,EAAK,aAAa,yBAAyB,EAG9D,KAAK,MAAM,MAAQA,EAAK,UAE5B,KAAK,MAAM,aAAa,8BAA+B,KAAK,MAAM,KAAK,CAC1E,EAID,OAAQ,UAAY,CACnB,EACD,WAAY,KACZ,OAAQ,CAAE,EACV,WAAY,CAAA,CACf,EACMjC,CACX,IACAZ,EAAO,QAAUY,CAEjB,EAAE,CAAA,CAAE,CAAC,EAAE,CAAA,EAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAChB,CAAC,yCCthBA,SAAUxM,EAAG,EAAGW,EAAS,CAGxB,IAAIiO,EAAY,IAAKC,EAErB,MAAMC,EAAW,OAAO,WAAW,mCAAmC,EAAE,QAExE,SAASC,GAAiB,CACxB,GAAIF,EAAO,MAAM,OAAU,EAAG,CAC5B,IAAIG,EAAS,SAAS,eAAe,QAAQ,EAC7C,WAAWA,EAAO,OAAO,KAAKA,CAAM,EAAG,CAAC,CAC9C,CACA,CAEE,SAASC,EAAmBJ,EAAQ,CAClC,IAAIK,EAAK,SAAS,eAAe,cAAc,EAC3CC,EAAoB,UAAY,CAC9BN,EAAO,MAAM,SAAW,EAC1BK,EAAG,UAAU,IAAI,OAAO,EAExBA,EAAG,UAAU,OAAO,OAAO,CAE9B,EAGDC,EAAmB,EACnBD,EAAG,iBAAiB,QAAS,SAAUE,EAAI,CACzCP,EAAO,MAAQ,GACfA,EAAO,MAAO,EACdM,EAAmB,EACnBC,EAAG,eAAgB,CACzB,CAAK,EACDP,EAAO,iBAAiB,QAASM,EAAmB,EAAK,CAC7D,CAEExO,EAAQ,MAAM,UAAY,CACxBkO,EAAS,EAAE,eAAeD,CAAS,EAE/BC,IAAW,OAEbI,EAAkBJ,CAAM,EAGpBlO,EAAQ,SAAS,eACnBA,EAAQ,aAAe6L,EAAa,KAAKxM,EAAG,CAC1C,IAAK,kBACL,aAAcW,EAAQ,SAAS,aAAa,cAC5C,WAAYA,EAAQ,SAAS,OAC7B,YAAa,CACX,eAAgB,oCAChB,mBAAoB,gBACrB,EACD,SAAUA,EAAQ,SAAS,iBAC3B,MAAO,IACP,UAAW,UAAY,CAAE,EACzB,MAAO,UAAY,CACjB,IAAIyI,EAAS,KACb,MAAM,UAAU,QAAQ,KAAK,KAAK,WAAW,qBAAqB,IAAI,EAAG,SAAUmF,EAAI,CACjFA,EAAG,aAAa,OAAO,GAAK,WAC9BA,EAAG,YAAc,UAAY,CAC3BnF,EAAO,QAAQmF,CAAE,CAClB,EAEjB,CAAa,CACF,EACD,QAAS,SAAUE,EAAM,CACvBjC,EAAa,SAAS,QAAQ,KAAK,KAAMiC,CAAI,EAC7C,IAAIjM,EAAOiM,EAAK,QAAQ,MAAM,EAC1BjM,GACFA,EAAK,OAAQ,CAEhB,EACD,UAAW,UAAY,CACrB,OAAI,KAAK,MAAM,MAAM,QAAQ,GAAG,EAAI,GAC3B,EAEAgK,EAAa,SAAS,UAAU,KAAK,IAAI,CAEnD,EACD,iBAAkB,OAAO,OAAO,CAAE,EAAEA,EAAa,SAAS,iBAAkB,CAC1E,gBAAmB,OAAO,OAAO,CAAA,EAAIA,EAAa,SAAS,iBAAiB,gBAAiB,CAC3F,SAAU,SAAUrF,EAAO,CACzBqF,EAAa,SAAS,iBAAiB,gBAAgB,SAAS,KAAK,KAAMrF,CAAK,EAChF,IAAIwG,EAAW,KAAK,WAAW,cAAc,WAAW,EACpDA,GACFnB,EAAa,SAAS,QAAQ,KAAK,KAAMmB,CAAQ,CAEpD,CACf,CAAa,EACD,IAAO,OAAO,OAAO,CAAA,EAAInB,EAAa,SAAS,iBAAiB,MAAO,CACrE,WAAY,CAAC,CACX,GAAI,EACJ,IAAK,EACrB,CAAe,EACD,SAAU,SAAUrF,EAAO,CACzB,GAAI,KAAK,WAAW,aAAa,OAAO,EAAE,QAAQ,MAAM,GAAK,GAAI,CAC/D,IAAIwG,EAAW,KAAK,WAAW,cAAc,WAAW,EACpDA,IAAa,OACfnB,EAAa,SAAS,QAAQ,KAAK,KAAMmB,CAAQ,EACjDxG,EAAM,eAAgB,EAE1C,CACe,CACF,CAAA,CACb,CAAW,CACX,EAAW,IAAMyH,CAAS,GAwBpBpC,EAAa,UAAU,KAAO,SAAUpD,EAAQgE,EAASG,EAAS,CAC5DA,IAAY,SAAUA,EAAU,IAChCnE,EAAO,YACT,OAAO,aAAaA,EAAO,UAAU,EAEnCmE,IAAY,GACdnE,EAAO,WAAa,OAAO,WAAWoD,EAAa,UAAU,KAAK,KAAK,KAAMpD,EAAQgE,EAAS,EAAK,EAAGhE,EAAO,KAAK,GAE9GA,EAAO,SACTA,EAAO,QAAQ,MAAO,EAExBA,EAAO,QAAUgE,EACjBhE,EAAO,QAAQ,KAAK,mBAAmBA,EAAO,WAAW,EAAI,IAAM,mBAAmBA,EAAO,KAAM,CAAA,CAAC,EAEvG,EAEG,CAAC0F,GAAY,SAAS,cAAc,iBAAiB,GACvDD,EAAO,MAAO,GAShBA,IAAW,MACNlO,EAAQ,SAAS,2BAGjB,EAAE,cAAc,iBAAiB,GAAK,OAE3CA,EAAQ,GAAG,EAAE,eAAe,YAAY,EAAG,SAAUoO,CAAa,EAClEpO,EAAQ,GAAG,EAAE,eAAe,YAAY,EAAG,SAAUoO,CAAa,EAClEpO,EAAQ,GAAG,EAAE,eAAe,UAAU,EAAG,SAAUoO,CAAa,GAGlE,MAAMM,EAAkB,EAAE,iBAAiB,wBAAwB,EACnE,QAAS9J,KAAU8J,EACjB1O,EAAQ,GAAG4E,EAAQ,QAAU4B,GAAU,CACrC,GAAIA,EAAM,SAAU,CAClBA,EAAM,eAAgB,EACtB5B,EAAO,UAAU,OAAO,UAAU,EAClC,MACV,CAGQ,MAAM+J,EAAqB,EAAE,iBAAiB,iCAAiC,EAC/E,QAASC,KAAkBD,EACzBC,EAAe,UAAU,OAAO,UAAU,EAE5ChK,EAAO,UAAU,IAAI,UAAU,CAChC,CAAA,EAIH,MAAM/C,EAAO,EAAE,cAAc,SAAS,EAClCA,GAAQ,MACV7B,EAAQ,GAAG6B,EAAM,SAAW2E,GAAU,CACpCA,EAAM,eAAgB,EACtB,MAAMqI,EAAsB,EAAE,cAAc,sBAAsB,EAClE,GAAIA,EAAqB,CACvB,IAAIC,EAAiB,CAAE,EACvB,QAASF,KAAkBF,EACrBE,EAAe,UAAU,SAAS,UAAU,GAC9CE,EAAe,KAAKF,EAAe,KAAK,QAAQ,YAAa,EAAE,CAAC,EAGpEC,EAAoB,MAAQC,EAAe,KAAK,GAAG,CAC7D,CACQjN,EAAK,OAAQ,CACrB,CAAO,CAEP,CAAG,CAEH,GAAG,OAAQ,SAAU,OAAO,OAAO","x_google_ignoreList":[5,7]} \ No newline at end of file +{"version":3,"file":"searxng.min.js","sources":["../../../../../client/simple/src/js/main/00_toolkit.js","../../../../../client/simple/src/js/main/infinite_scroll.js","../../../../../client/simple/src/js/main/keyboard.js","../../../../../client/simple/src/js/main/mapresult.js","../../../../../client/simple/src/js/main/preferences.js","../../../../../client/simple/node_modules/swiped-events/src/swiped-events.js","../../../../../client/simple/src/js/main/results.js","../../../../../client/simple/src/js/main/search.js"],"sourcesContent":["/**\n * @license\n * (C) Copyright Contributors to the SearXNG project.\n * (C) Copyright Contributors to the searx project (2014 - 2021).\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nwindow.searxng = (function (w, d) {\n\n 'use strict';\n\n // not invented here toolkit with bugs fixed elsewhere\n // purposes : be just good enough and as small as possible\n\n // from https://plainjs.com/javascript/events/live-binding-event-handlers-14/\n if (w.Element) {\n (function (ElementPrototype) {\n ElementPrototype.matches = ElementPrototype.matches ||\n ElementPrototype.matchesSelector ||\n ElementPrototype.webkitMatchesSelector ||\n ElementPrototype.msMatchesSelector ||\n function (selector) {\n var node = this, nodes = (node.parentNode || node.document).querySelectorAll(selector), i = -1;\n while (nodes[++i] && nodes[i] != node);\n return !!nodes[i];\n };\n })(Element.prototype);\n }\n\n function callbackSafe (callback, el, e) {\n try {\n callback.call(el, e);\n } catch (exception) {\n console.log(exception);\n }\n }\n\n var searxng = window.searxng || {};\n\n searxng.on = function (obj, eventType, callback, useCapture) {\n useCapture = useCapture || false;\n if (typeof obj !== 'string') {\n // obj HTMLElement, HTMLDocument\n obj.addEventListener(eventType, callback, useCapture);\n } else {\n // obj is a selector\n d.addEventListener(eventType, function (e) {\n var el = e.target || e.srcElement, found = false;\n while (el && el.matches && el !== d && !(found = el.matches(obj))) el = el.parentElement;\n if (found) callbackSafe(callback, el, e);\n }, useCapture);\n }\n };\n\n searxng.ready = function (callback) {\n if (document.readyState != 'loading') {\n callback.call(w);\n } else {\n w.addEventListener('DOMContentLoaded', callback.bind(w));\n }\n };\n\n searxng.http = function (method, url, data = null) {\n return new Promise(function (resolve, reject) {\n try {\n var req = new XMLHttpRequest();\n req.open(method, url, true);\n req.timeout = 20000;\n\n // On load\n req.onload = function () {\n if (req.status == 200) {\n resolve(req.response, req.responseType);\n } else {\n reject(Error(req.statusText));\n }\n };\n\n // Handle network errors\n req.onerror = function () {\n reject(Error(\"Network Error\"));\n };\n\n req.onabort = function () {\n reject(Error(\"Transaction is aborted\"));\n };\n\n req.ontimeout = function () {\n reject(Error(\"Timeout\"));\n }\n\n // Make the request\n if (data) {\n req.send(data)\n } else {\n req.send();\n }\n } catch (ex) {\n reject(ex);\n }\n });\n };\n\n searxng.loadStyle = function (src) {\n var path = searxng.settings.theme_static_path + \"/\" + src,\n id = \"style_\" + src.replace('.', '_'),\n s = d.getElementById(id);\n if (s === null) {\n s = d.createElement('link');\n s.setAttribute('id', id);\n s.setAttribute('rel', 'stylesheet');\n s.setAttribute('type', 'text/css');\n s.setAttribute('href', path);\n d.body.appendChild(s);\n }\n };\n\n searxng.loadScript = function (src, callback) {\n var path = searxng.settings.theme_static_path + \"/\" + src,\n id = \"script_\" + src.replace('.', '_'),\n s = d.getElementById(id);\n if (s === null) {\n s = d.createElement('script');\n s.setAttribute('id', id);\n s.setAttribute('src', path);\n s.onload = callback;\n s.onerror = function () {\n s.setAttribute('error', '1');\n };\n d.body.appendChild(s);\n } else if (!s.hasAttribute('error')) {\n try {\n callback.apply(s, []);\n } catch (exception) {\n console.log(exception);\n }\n } else {\n console.log(\"callback not executed : script '\" + path + \"' not loaded.\");\n }\n };\n\n searxng.insertBefore = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode);\n };\n\n searxng.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertAfter(newNode, referenceNode.nextSibling);\n };\n\n searxng.on('.close', 'click', function () {\n this.parentNode.classList.add('invisible');\n });\n\n function getEndpoint () {\n for (var className of d.getElementsByTagName('body')[0].classList.values()) {\n if (className.endsWith('_endpoint')) {\n return className.split('_')[0];\n }\n }\n return '';\n }\n\n searxng.endpoint = getEndpoint();\n\n return searxng;\n})(window, document);\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n\n/* global searxng */\n\nsearxng.ready(function () {\n 'use strict';\n\n searxng.infinite_scroll_supported = (\n 'IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype);\n\n if (searxng.endpoint !== 'results') {\n return;\n }\n\n if (!searxng.infinite_scroll_supported) {\n console.log('IntersectionObserver not supported');\n return;\n }\n\n let d = document;\n var onlyImages = d.getElementById('results').classList.contains('only_template_images');\n\n function newLoadSpinner () {\n var loader = d.createElement('div');\n loader.classList.add('loader');\n return loader;\n }\n\n function replaceChildrenWith (element, children) {\n element.textContent = '';\n children.forEach(child => element.appendChild(child));\n }\n\n function loadNextPage (callback) {\n var form = d.querySelector('#pagination form.next_page');\n if (!form) {\n return\n }\n replaceChildrenWith(d.querySelector('#pagination'), [ newLoadSpinner() ]);\n var formData = new FormData(form);\n searxng.http('POST', d.querySelector('#search').getAttribute('action'), formData).then(\n function (response) {\n var nextPageDoc = new DOMParser().parseFromString(response, 'text/html');\n var articleList = nextPageDoc.querySelectorAll('#urls article');\n var paginationElement = nextPageDoc.querySelector('#pagination');\n d.querySelector('#pagination').remove();\n if (articleList.length > 0 && !onlyImages) {\n // do not add
    element when there are only images\n d.querySelector('#urls').appendChild(d.createElement('hr'));\n }\n articleList.forEach(articleElement => {\n d.querySelector('#urls').appendChild(articleElement);\n });\n if (paginationElement) {\n d.querySelector('#results').appendChild(paginationElement);\n callback();\n }\n }\n ).catch(\n function (err) {\n console.log(err);\n var e = d.createElement('div');\n e.textContent = searxng.settings.translations.error_loading_next_page;\n e.classList.add('dialog-error');\n e.setAttribute('role', 'alert');\n replaceChildrenWith(d.querySelector('#pagination'), [ e ]);\n }\n )\n }\n\n if (searxng.settings.infinite_scroll && searxng.infinite_scroll_supported) {\n const intersectionObserveOptions = {\n rootMargin: \"20rem\",\n };\n const observedSelector = 'article.result:last-child';\n const observer = new IntersectionObserver(entries => {\n const paginationEntry = entries[0];\n if (paginationEntry.isIntersecting) {\n observer.unobserve(paginationEntry.target);\n loadNextPage(() => observer.observe(d.querySelector(observedSelector), intersectionObserveOptions));\n }\n });\n observer.observe(d.querySelector(observedSelector), intersectionObserveOptions);\n }\n\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global searxng */\n\nsearxng.ready(function () {\n\n function isElementInDetail (el) {\n while (el !== undefined) {\n if (el.classList.contains('detail')) {\n return true;\n }\n if (el.classList.contains('result')) {\n // we found a result, no need to go to the root of the document:\n // el is not inside a
    element\n return false;\n }\n el = el.parentNode;\n }\n return false;\n }\n\n function getResultElement (el) {\n while (el !== undefined) {\n if (el.classList.contains('result')) {\n return el;\n }\n el = el.parentNode;\n }\n return undefined;\n }\n\n function isImageResult (resultElement) {\n return resultElement && resultElement.classList.contains('result-images');\n }\n\n searxng.on('.result', 'click', function (e) {\n if (!isElementInDetail(e.target)) {\n highlightResult(this)(true, true);\n let resultElement = getResultElement(e.target);\n if (isImageResult(resultElement)) {\n e.preventDefault();\n searxng.selectImage(resultElement);\n }\n }\n });\n\n searxng.on('.result a', 'focus', function (e) {\n if (!isElementInDetail(e.target)) {\n let resultElement = getResultElement(e.target);\n if (resultElement && resultElement.getAttribute(\"data-vim-selected\") === null) {\n highlightResult(resultElement)(true);\n }\n if (isImageResult(resultElement)) {\n searxng.selectImage(resultElement);\n }\n }\n }, true);\n\n /* common base for layouts */\n var baseKeyBinding = {\n 'Escape': {\n key: 'ESC',\n fun: removeFocus,\n des: 'remove focus from the focused input',\n cat: 'Control'\n },\n 'c': {\n key: 'c',\n fun: copyURLToClipboard,\n des: 'copy url of the selected result to the clipboard',\n cat: 'Results'\n },\n 'h': {\n key: 'h',\n fun: toggleHelp,\n des: 'toggle help window',\n cat: 'Other'\n },\n 'i': {\n key: 'i',\n fun: searchInputFocus,\n des: 'focus on the search input',\n cat: 'Control'\n },\n 'n': {\n key: 'n',\n fun: GoToNextPage(),\n des: 'go to next page',\n cat: 'Results'\n },\n 'o': {\n key: 'o',\n fun: openResult(false),\n des: 'open search result',\n cat: 'Results'\n },\n 'p': {\n key: 'p',\n fun: GoToPreviousPage(),\n des: 'go to previous page',\n cat: 'Results'\n },\n 'r': {\n key: 'r',\n fun: reloadPage,\n des: 'reload page from the server',\n cat: 'Control'\n },\n 't': {\n key: 't',\n fun: openResult(true),\n des: 'open the result in a new tab',\n cat: 'Results'\n },\n };\n var keyBindingLayouts = {\n\n \"default\": Object.assign(\n { /* SearXNG layout */\n 'ArrowLeft': {\n key: '←',\n fun: highlightResult('up'),\n des: 'select previous search result',\n cat: 'Results'\n },\n 'ArrowRight': {\n key: '→',\n fun: highlightResult('down'),\n des: 'select next search result',\n cat: 'Results'\n },\n }, baseKeyBinding),\n\n 'vim': Object.assign(\n { /* Vim-like Key Layout. */\n 'b': {\n key: 'b',\n fun: scrollPage(-window.innerHeight),\n des: 'scroll one page up',\n cat: 'Navigation'\n },\n 'f': {\n key: 'f',\n fun: scrollPage(window.innerHeight),\n des: 'scroll one page down',\n cat: 'Navigation'\n },\n 'u': {\n key: 'u',\n fun: scrollPage(-window.innerHeight / 2),\n des: 'scroll half a page up',\n cat: 'Navigation'\n },\n 'd': {\n key: 'd',\n fun: scrollPage(window.innerHeight / 2),\n des: 'scroll half a page down',\n cat: 'Navigation'\n },\n 'g': {\n key: 'g',\n fun: scrollPageTo(-document.body.scrollHeight, 'top'),\n des: 'scroll to the top of the page',\n cat: 'Navigation'\n },\n 'v': {\n key: 'v',\n fun: scrollPageTo(document.body.scrollHeight, 'bottom'),\n des: 'scroll to the bottom of the page',\n cat: 'Navigation'\n },\n 'k': {\n key: 'k',\n fun: highlightResult('up'),\n des: 'select previous search result',\n cat: 'Results'\n },\n 'j': {\n key: 'j',\n fun: highlightResult('down'),\n des: 'select next search result',\n cat: 'Results'\n },\n 'y': {\n key: 'y',\n fun: copyURLToClipboard,\n des: 'copy url of the selected result to the clipboard',\n cat: 'Results'\n },\n }, baseKeyBinding)\n }\n\n var keyBindings = keyBindingLayouts[searxng.settings.hotkeys] || keyBindingLayouts.default;\n\n searxng.on(document, \"keydown\", function (e) {\n // check for modifiers so we don't break browser's hotkeys\n if (\n Object.prototype.hasOwnProperty.call(keyBindings, e.key)\n && !e.ctrlKey && !e.altKey\n && !e.shiftKey && !e.metaKey\n ) {\n var tagName = e.target.tagName.toLowerCase();\n if (e.key === 'Escape') {\n keyBindings[e.key].fun(e);\n } else {\n if (e.target === document.body || tagName === 'a' || tagName === 'button') {\n e.preventDefault();\n keyBindings[e.key].fun();\n }\n }\n }\n });\n\n function highlightResult (which) {\n return function (noScroll, keepFocus) {\n var current = document.querySelector('.result[data-vim-selected]'),\n effectiveWhich = which;\n if (current === null) {\n // no selection : choose the first one\n current = document.querySelector('.result');\n if (current === null) {\n // no first one : there are no results\n return;\n }\n // replace up/down actions by selecting first one\n if (which === \"down\" || which === \"up\") {\n effectiveWhich = current;\n }\n }\n\n var next, results = document.querySelectorAll('.result');\n results = Array.from(results); // convert NodeList to Array for further use\n\n if (typeof effectiveWhich !== 'string') {\n next = effectiveWhich;\n } else {\n switch (effectiveWhich) {\n case 'visible':\n var top = document.documentElement.scrollTop || document.body.scrollTop;\n var bot = top + document.documentElement.clientHeight;\n\n for (var i = 0; i < results.length; i++) {\n next = results[i];\n var etop = next.offsetTop;\n var ebot = etop + next.clientHeight;\n\n if ((ebot <= bot) && (etop > top)) {\n break;\n }\n }\n break;\n case 'down':\n next = results[results.indexOf(current) + 1] || current;\n break;\n case 'up':\n next = results[results.indexOf(current) - 1] || current;\n break;\n case 'bottom':\n next = results[results.length - 1];\n break;\n case 'top':\n /* falls through */\n default:\n next = results[0];\n }\n }\n\n if (next) {\n current.removeAttribute('data-vim-selected');\n next.setAttribute('data-vim-selected', 'true');\n if (!keepFocus) {\n var link = next.querySelector('h3 a') || next.querySelector('a');\n if (link !== null) {\n link.focus();\n }\n }\n if (!noScroll) {\n scrollPageToSelected();\n }\n }\n };\n }\n\n function reloadPage () {\n document.location.reload(true);\n }\n\n function removeFocus (e) {\n const tagName = e.target.tagName.toLowerCase();\n if (document.activeElement && (tagName === 'input' || tagName === 'select' || tagName === 'textarea')) {\n document.activeElement.blur();\n } else {\n searxng.closeDetail();\n }\n }\n\n function pageButtonClick (css_selector) {\n return function () {\n var button = document.querySelector(css_selector);\n if (button) {\n button.click();\n }\n };\n }\n\n function GoToNextPage () {\n return pageButtonClick('nav#pagination .next_page button[type=\"submit\"]');\n }\n\n function GoToPreviousPage () {\n return pageButtonClick('nav#pagination .previous_page button[type=\"submit\"]');\n }\n\n function scrollPageToSelected () {\n var sel = document.querySelector('.result[data-vim-selected]');\n if (sel === null) {\n return;\n }\n var wtop = document.documentElement.scrollTop || document.body.scrollTop,\n wheight = document.documentElement.clientHeight,\n etop = sel.offsetTop,\n ebot = etop + sel.clientHeight,\n offset = 120;\n // first element ?\n if ((sel.previousElementSibling === null) && (ebot < wheight)) {\n // set to the top of page if the first element\n // is fully included in the viewport\n window.scroll(window.scrollX, 0);\n return;\n }\n if (wtop > (etop - offset)) {\n window.scroll(window.scrollX, etop - offset);\n } else {\n var wbot = wtop + wheight;\n if (wbot < (ebot + offset)) {\n window.scroll(window.scrollX, ebot - wheight + offset);\n }\n }\n }\n\n function scrollPage (amount) {\n return function () {\n window.scrollBy(0, amount);\n highlightResult('visible')();\n };\n }\n\n function scrollPageTo (position, nav) {\n return function () {\n window.scrollTo(0, position);\n highlightResult(nav)();\n };\n }\n\n function searchInputFocus () {\n window.scrollTo(0, 0);\n var q = document.querySelector('#q');\n q.focus();\n if (q.setSelectionRange) {\n var len = q.value.length;\n q.setSelectionRange(len, len);\n }\n }\n\n function openResult (newTab) {\n return function () {\n var link = document.querySelector('.result[data-vim-selected] h3 a');\n if (link === null) {\n link = document.querySelector('.result[data-vim-selected] > a');\n }\n if (link !== null) {\n var url = link.getAttribute('href');\n if (newTab) {\n window.open(url);\n } else {\n window.location.href = url;\n }\n }\n };\n }\n\n function initHelpContent (divElement) {\n var categories = {};\n\n for (var k in keyBindings) {\n var key = keyBindings[k];\n categories[key.cat] = categories[key.cat] || [];\n categories[key.cat].push(key);\n }\n\n var sorted = Object.keys(categories).sort(function (a, b) {\n return categories[b].length - categories[a].length;\n });\n\n if (sorted.length === 0) {\n return;\n }\n\n var html = '×';\n html += '

    How to navigate SearXNG with hotkeys

    ';\n html += '';\n\n for (var i = 0; i < sorted.length; i++) {\n var cat = categories[sorted[i]];\n\n var lastCategory = i === (sorted.length - 1);\n var first = i % 2 === 0;\n\n if (first) {\n html += '';\n }\n html += ''; // col-sm-*\n\n if (!first || lastCategory) {\n html += ''; // row\n }\n }\n\n html += '
    ';\n\n html += '

    ' + cat[0].cat + '

    ';\n html += '
      ';\n\n for (var cj in cat) {\n html += '
    • ' + cat[cj].key + ' ' + cat[cj].des + '
    • ';\n }\n\n html += '
    ';\n html += '
    ';\n\n divElement.innerHTML = html;\n }\n\n function toggleHelp () {\n var helpPanel = document.querySelector('#vim-hotkeys-help');\n if (helpPanel === undefined || helpPanel === null) {\n // first call\n helpPanel = document.createElement('div');\n helpPanel.id = 'vim-hotkeys-help';\n helpPanel.className = 'dialog-modal';\n initHelpContent(helpPanel);\n var body = document.getElementsByTagName('body')[0];\n body.appendChild(helpPanel);\n } else {\n // toggle hidden\n helpPanel.classList.toggle('invisible');\n return;\n }\n }\n\n function copyURLToClipboard () {\n var currentUrlElement = document.querySelector('.result[data-vim-selected] h3 a');\n if (currentUrlElement === null) return;\n\n const url = currentUrlElement.getAttribute('href');\n navigator.clipboard.writeText(url);\n }\n\n searxng.scrollPageToSelected = scrollPageToSelected;\n searxng.selectNext = highlightResult('down');\n searxng.selectPrevious = highlightResult('up');\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global L */\n(function (w, d, searxng) {\n 'use strict';\n\n searxng.ready(function () {\n searxng.on('.searxng_init_map', 'click', function (event) {\n // no more request\n this.classList.remove(\"searxng_init_map\");\n\n //\n var leaflet_target = this.dataset.leafletTarget;\n var map_lon = parseFloat(this.dataset.mapLon);\n var map_lat = parseFloat(this.dataset.mapLat);\n var map_zoom = parseFloat(this.dataset.mapZoom);\n var map_boundingbox = JSON.parse(this.dataset.mapBoundingbox);\n var map_geojson = JSON.parse(this.dataset.mapGeojson);\n\n searxng.loadStyle('css/leaflet.css');\n searxng.loadScript('js/leaflet.js', function () {\n var map_bounds = null;\n if (map_boundingbox) {\n var southWest = L.latLng(map_boundingbox[0], map_boundingbox[2]);\n var northEast = L.latLng(map_boundingbox[1], map_boundingbox[3]);\n map_bounds = L.latLngBounds(southWest, northEast);\n }\n\n // init map\n var map = L.map(leaflet_target);\n // create the tile layer with correct attribution\n var osmMapnikUrl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';\n var osmMapnikAttrib = 'Map data © OpenStreetMap contributors';\n var osmMapnik = new L.TileLayer(osmMapnikUrl, {minZoom: 1, maxZoom: 19, attribution: osmMapnikAttrib});\n var osmWikimediaUrl = 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png';\n var osmWikimediaAttrib = 'Wikimedia maps | Maps data © OpenStreetMap contributors';\n var osmWikimedia = new L.TileLayer(osmWikimediaUrl, {minZoom: 1, maxZoom: 19, attribution: osmWikimediaAttrib});\n // init map view\n if (map_bounds) {\n // TODO hack: https://github.com/Leaflet/Leaflet/issues/2021\n // Still useful ?\n setTimeout(function () {\n map.fitBounds(map_bounds, {\n maxZoom: 17\n });\n }, 0);\n } else if (map_lon && map_lat) {\n if (map_zoom) {\n map.setView(new L.latLng(map_lat, map_lon), map_zoom);\n } else {\n map.setView(new L.latLng(map_lat, map_lon), 8);\n }\n }\n\n map.addLayer(osmMapnik);\n\n var baseLayers = {\n \"OSM Mapnik\": osmMapnik,\n \"OSM Wikimedia\": osmWikimedia,\n };\n\n L.control.layers(baseLayers).addTo(map);\n\n if (map_geojson) {\n L.geoJson(map_geojson).addTo(map);\n } /* else if(map_bounds) {\n L.rectangle(map_bounds, {color: \"#ff7800\", weight: 3, fill:false}).addTo(map);\n } */\n });\n\n // this event occur only once per element\n event.preventDefault();\n });\n });\n})(window, document, window.searxng);\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n(function (w, d, searxng) {\n 'use strict';\n\n if (searxng.endpoint !== 'preferences') {\n return;\n }\n\n searxng.ready(function () {\n let engine_descriptions = null;\n function load_engine_descriptions () {\n if (engine_descriptions == null) {\n searxng.http(\"GET\", \"engine_descriptions.json\").then(function (content) {\n engine_descriptions = JSON.parse(content);\n for (const [engine_name, description] of Object.entries(engine_descriptions)) {\n let elements = d.querySelectorAll('[data-engine-name=\"' + engine_name + '\"] .engine-description');\n for (const element of elements) {\n let source = ' (' + searxng.settings.translations.Source + ': ' + description[1] + ')';\n element.innerHTML = description[0] + source;\n }\n }\n });\n }\n }\n\n for (const el of d.querySelectorAll('[data-engine-name]')) {\n searxng.on(el, 'mouseenter', load_engine_descriptions);\n }\n\n const enableAllEngines = d.querySelectorAll(\".enable-all-engines\");\n const disableAllEngines = d.querySelectorAll(\".disable-all-engines\");\n const engineToggles = d.querySelectorAll('tbody input[type=checkbox][class~=checkbox-onoff]');\n const toggleEngines = (enable) => {\n for (const el of engineToggles) {\n // check if element visible, so that only engines of the current category are modified\n if (el.offsetParent !== null) el.checked = !enable;\n }\n };\n for (const el of enableAllEngines) {\n searxng.on(el, 'click', () => toggleEngines(true));\n }\n for (const el of disableAllEngines) {\n searxng.on(el, 'click', () => toggleEngines(false));\n }\n\n const copyHashButton = d.querySelector(\"#copy-hash\");\n searxng.on(copyHashButton, 'click', (e) => {\n e.preventDefault();\n navigator.clipboard.writeText(copyHashButton.dataset.hash);\n copyHashButton.innerText = copyHashButton.dataset.copiedText;\n });\n });\n})(window, document, window.searxng);\n","/*!\n * swiped-events.js - v@version@\n * Pure JavaScript swipe events\n * https://github.com/john-doherty/swiped-events\n * @inspiration https://stackoverflow.com/questions/16348031/disable-scrolling-when-touch-moving-certain-element\n * @author John Doherty \n * @license MIT\n */\n(function (window, document) {\n\n 'use strict';\n\n // patch CustomEvent to allow constructor creation (IE/Chrome)\n if (typeof window.CustomEvent !== 'function') {\n\n window.CustomEvent = function (event, params) {\n\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n window.CustomEvent.prototype = window.Event.prototype;\n }\n\n document.addEventListener('touchstart', handleTouchStart, false);\n document.addEventListener('touchmove', handleTouchMove, false);\n document.addEventListener('touchend', handleTouchEnd, false);\n\n var xDown = null;\n var yDown = null;\n var xDiff = null;\n var yDiff = null;\n var timeDown = null;\n var startEl = null;\n var touchCount = 0;\n\n /**\n * Fires swiped event if swipe detected on touchend\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchEnd(e) {\n\n // if the user released on a different target, cancel!\n if (startEl !== e.target) return;\n\n var swipeThreshold = parseInt(getNearestAttribute(startEl, 'data-swipe-threshold', '20'), 10); // default 20 units\n var swipeUnit = getNearestAttribute(startEl, 'data-swipe-unit', 'px'); // default px\n var swipeTimeout = parseInt(getNearestAttribute(startEl, 'data-swipe-timeout', '500'), 10); // default 500ms\n var timeDiff = Date.now() - timeDown;\n var eventType = '';\n var changedTouches = e.changedTouches || e.touches || [];\n\n if (swipeUnit === 'vh') {\n swipeThreshold = Math.round((swipeThreshold / 100) * document.documentElement.clientHeight); // get percentage of viewport height in pixels\n }\n if (swipeUnit === 'vw') {\n swipeThreshold = Math.round((swipeThreshold / 100) * document.documentElement.clientWidth); // get percentage of viewport height in pixels\n }\n\n if (Math.abs(xDiff) > Math.abs(yDiff)) { // most significant\n if (Math.abs(xDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (xDiff > 0) {\n eventType = 'swiped-left';\n }\n else {\n eventType = 'swiped-right';\n }\n }\n }\n else if (Math.abs(yDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (yDiff > 0) {\n eventType = 'swiped-up';\n }\n else {\n eventType = 'swiped-down';\n }\n }\n\n if (eventType !== '') {\n\n var eventData = {\n dir: eventType.replace(/swiped-/, ''),\n touchType: (changedTouches[0] || {}).touchType || 'direct',\n fingers: touchCount, // Number of fingers used\n xStart: parseInt(xDown, 10),\n xEnd: parseInt((changedTouches[0] || {}).clientX || -1, 10),\n yStart: parseInt(yDown, 10),\n yEnd: parseInt((changedTouches[0] || {}).clientY || -1, 10)\n };\n\n // fire `swiped` event event on the element that started the swipe\n startEl.dispatchEvent(new CustomEvent('swiped', { bubbles: true, cancelable: true, detail: eventData }));\n\n // fire `swiped-dir` event on the element that started the swipe\n startEl.dispatchEvent(new CustomEvent(eventType, { bubbles: true, cancelable: true, detail: eventData }));\n }\n\n // reset values\n xDown = null;\n yDown = null;\n timeDown = null;\n }\n /**\n * Records current location on touchstart event\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchStart(e) {\n\n // if the element has data-swipe-ignore=\"true\" we stop listening for swipe events\n if (e.target.getAttribute('data-swipe-ignore') === 'true') return;\n\n startEl = e.target;\n\n timeDown = Date.now();\n xDown = e.touches[0].clientX;\n yDown = e.touches[0].clientY;\n xDiff = 0;\n yDiff = 0;\n touchCount = e.touches.length;\n }\n\n /**\n * Records location diff in px on touchmove event\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchMove(e) {\n\n if (!xDown || !yDown) return;\n\n var xUp = e.touches[0].clientX;\n var yUp = e.touches[0].clientY;\n\n xDiff = xDown - xUp;\n yDiff = yDown - yUp;\n }\n\n /**\n * Gets attribute off HTML element or nearest parent\n * @param {object} el - HTML element to retrieve attribute from\n * @param {string} attributeName - name of the attribute\n * @param {any} defaultValue - default value to return if no match found\n * @returns {any} attribute value or defaultValue\n */\n function getNearestAttribute(el, attributeName, defaultValue) {\n\n // walk up the dom tree looking for attributeName\n while (el && el !== document.documentElement) {\n\n var attributeValue = el.getAttribute(attributeName);\n\n if (attributeValue) {\n return attributeValue;\n }\n\n el = el.parentNode;\n }\n\n return defaultValue;\n }\n\n}(window, document));\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n\nimport \"../../../node_modules/swiped-events/src/swiped-events.js\";\n\n(function (w, d, searxng) {\n 'use strict';\n\n if (searxng.endpoint !== 'results') {\n return;\n }\n\n searxng.ready(function () {\n d.querySelectorAll('#urls img').forEach(\n img =>\n img.addEventListener(\n 'error', () => {\n // console.log(\"ERROR can't load: \" + img.src);\n img.src = window.searxng.settings.theme_static_path + \"/img/img_load_error.svg\";\n },\n {once: true}\n ));\n\n if (d.querySelector('#search_url button#copy_url')) {\n d.querySelector('#search_url button#copy_url').style.display = \"block\";\n }\n\n searxng.on('.btn-collapse', 'click', function () {\n var btnLabelCollapsed = this.getAttribute('data-btn-text-collapsed');\n var btnLabelNotCollapsed = this.getAttribute('data-btn-text-not-collapsed');\n var target = this.getAttribute('data-target');\n var targetElement = d.querySelector(target);\n var html = this.innerHTML;\n if (this.classList.contains('collapsed')) {\n html = html.replace(btnLabelCollapsed, btnLabelNotCollapsed);\n } else {\n html = html.replace(btnLabelNotCollapsed, btnLabelCollapsed);\n }\n this.innerHTML = html;\n this.classList.toggle('collapsed');\n targetElement.classList.toggle('invisible');\n });\n\n searxng.on('.media-loader', 'click', function () {\n var target = this.getAttribute('data-target');\n var iframe_load = d.querySelector(target + ' > iframe');\n var srctest = iframe_load.getAttribute('src');\n if (srctest === null || srctest === undefined || srctest === false) {\n iframe_load.setAttribute('src', iframe_load.getAttribute('data-src'));\n }\n });\n\n searxng.on('#copy_url', 'click', function () {\n var target = this.parentElement.querySelector('pre');\n navigator.clipboard.writeText(target.innerText);\n this.innerText = this.dataset.copiedText;\n });\n\n // searxng.selectImage (gallery)\n // -----------------------------\n\n // setTimeout() ID, needed to cancel *last* loadImage\n let imgTimeoutID;\n\n // progress spinner, while an image is loading\n const imgLoaderSpinner = d.createElement('div');\n imgLoaderSpinner.classList.add('loader');\n\n // singleton image object, which is used for all loading processes of a\n // detailed image\n const imgLoader = new Image();\n\n const loadImage = (imgSrc, onSuccess) => {\n // if defered image load exists, stop defered task.\n if (imgTimeoutID) clearTimeout(imgTimeoutID);\n\n // defer load of the detail image for 1 sec\n imgTimeoutID = setTimeout(() => {\n imgLoader.src = imgSrc;\n }, 1000);\n\n // set handlers in the on-properties\n imgLoader.onload = () => {\n onSuccess();\n imgLoaderSpinner.remove();\n };\n imgLoader.onerror = () => {\n imgLoaderSpinner.remove();\n };\n };\n\n searxng.selectImage = (resultElement) => {\n\n // add a class that can be evaluated in the CSS and indicates that the\n // detail view is open\n d.getElementById('results').classList.add('image-detail-open');\n\n // add a hash to the browser history so that pressing back doesn't return\n // to the previous page this allows us to dismiss the image details on\n // pressing the back button on mobile devices\n window.location.hash = '#image-viewer';\n\n searxng.scrollPageToSelected();\n\n // if there is none element given by the caller, stop here\n if (!resultElement) return;\n\n // find object in the element, if there is none, stop here.\n const img = resultElement.querySelector('.result-images-source img');\n if (!img) return;\n\n // \n const src = img.getAttribute('data-src');\n\n // already loaded high-res image or no high-res image available\n if (!src) return;\n\n // use the image thumbnail until the image is fully loaded\n const thumbnail = resultElement.querySelector('.image_thumbnail');\n img.src = thumbnail.src;\n\n // show a progress spinner\n const detailElement = resultElement.querySelector('.detail');\n detailElement.appendChild(imgLoaderSpinner);\n\n // load full size image in background\n loadImage(src, () => {\n // after the singelton loadImage has loaded the detail image into the\n // cache, it can be used in the origin as src property.\n img.src = src;\n img.removeAttribute('data-src');\n });\n };\n\n searxng.closeDetail = function () {\n d.getElementById('results').classList.remove('image-detail-open');\n // remove #image-viewer hash from url by navigating back\n if (window.location.hash == '#image-viewer') window.history.back();\n searxng.scrollPageToSelected();\n };\n searxng.on('.result-detail-close', 'click', e => {\n e.preventDefault();\n searxng.closeDetail();\n });\n searxng.on('.result-detail-previous', 'click', e => {\n e.preventDefault();\n searxng.selectPrevious(false);\n });\n searxng.on('.result-detail-next', 'click', e => {\n e.preventDefault();\n searxng.selectNext(false);\n });\n\n // listen for the back button to be pressed and dismiss the image details when called\n window.addEventListener('hashchange', () => {\n if (window.location.hash != '#image-viewer') searxng.closeDetail();\n });\n\n d.querySelectorAll('.swipe-horizontal').forEach(\n obj => {\n obj.addEventListener('swiped-left', function () {\n searxng.selectNext(false);\n });\n obj.addEventListener('swiped-right', function () {\n searxng.selectPrevious(false);\n });\n }\n );\n\n w.addEventListener('scroll', function () {\n var e = d.getElementById('backToTop'),\n scrollTop = document.documentElement.scrollTop || document.body.scrollTop,\n results = d.getElementById('results');\n if (e !== null) {\n if (scrollTop >= 100) {\n results.classList.add('scrolling');\n } else {\n results.classList.remove('scrolling');\n }\n }\n }, true);\n\n });\n\n})(window, document, window.searxng);\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* exported AutoComplete */\n\n(function (w, d, searxng) {\n 'use strict';\n\n var qinput_id = \"q\", qinput;\n\n const isMobile = window.matchMedia(\"only screen and (max-width: 50em)\").matches;\n\n function submitIfQuery () {\n if (qinput.value.length > 0) {\n var search = document.getElementById('search');\n setTimeout(search.submit.bind(search), 0);\n }\n }\n\n function createClearButton (qinput) {\n var cs = document.getElementById('clear_search');\n var updateClearButton = function () {\n if (qinput.value.length === 0) {\n cs.classList.add(\"empty\");\n } else {\n cs.classList.remove(\"empty\");\n }\n };\n\n // update status, event listener\n updateClearButton();\n cs.addEventListener('click', function (ev) {\n qinput.value = '';\n qinput.focus();\n updateClearButton();\n ev.preventDefault();\n });\n qinput.addEventListener('input', updateClearButton, false);\n }\n\n const fetchResults = async (query) => {\n let request;\n if (searxng.settings.method === 'GET') {\n const reqParams = new URLSearchParams();\n reqParams.append(\"q\", query);\n request = fetch(\"./autocompleter?\" + reqParams.toString());\n } else {\n const formData = new FormData();\n formData.append(\"q\", query);\n request = fetch(\"./autocompleter\", {\n method: 'POST',\n body: formData,\n });\n }\n\n request.then(async function (response) {\n const results = await response.json();\n\n if (!results) return;\n\n const autocomplete = d.querySelector(\".autocomplete\");\n const autocompleteList = d.querySelector(\".autocomplete ul\");\n autocomplete.classList.add(\"open\");\n autocompleteList.innerHTML = \"\";\n\n // show an error message that no result was found\n if (!results[1] || results[1].length == 0) {\n const noItemFoundMessage = document.createElement(\"li\");\n noItemFoundMessage.classList.add('no-item-found');\n noItemFoundMessage.innerHTML = searxng.settings.translations.no_item_found;\n autocompleteList.appendChild(noItemFoundMessage);\n return;\n }\n\n for (let result of results[1]) {\n const li = document.createElement(\"li\");\n li.innerText = result;\n\n searxng.on(li, 'mousedown', () => {\n qinput.value = result;\n const form = d.querySelector(\"#search\");\n form.submit();\n autocomplete.classList.remove('open');\n });\n autocompleteList.appendChild(li);\n }\n });\n };\n\n searxng.ready(function () {\n // focus search input on large screens\n if (!isMobile) document.getElementById(\"q\").focus();\n\n qinput = d.getElementById(qinput_id);\n const autocomplete = d.querySelector(\".autocomplete\");\n const autocompleteList = d.querySelector(\".autocomplete ul\");\n\n if (qinput !== null) {\n // clear button\n createClearButton(qinput);\n\n // autocompleter\n if (searxng.settings.autocomplete) {\n searxng.on(qinput, 'input', () => {\n const query = qinput.value;\n if (query.length < searxng.settings.autocomplete_min) return;\n\n setTimeout(() => {\n if (query == qinput.value) fetchResults(query);\n }, 300);\n });\n\n searxng.on(qinput, 'keyup', (e) => {\n let currentIndex = -1;\n const listItems = autocompleteList.children;\n for (let i = 0; i < listItems.length; i++) {\n if (listItems[i].classList.contains('active')) {\n currentIndex = i;\n break;\n }\n }\n\n let newCurrentIndex = -1;\n if (e.key === \"ArrowUp\") {\n if (currentIndex >= 0) listItems[currentIndex].classList.remove('active');\n // we need to add listItems.length to the index calculation here because the JavaScript modulos\n // operator doesn't work with negative numbers\n newCurrentIndex = (currentIndex - 1 + listItems.length) % listItems.length;\n } else if (e.key === \"ArrowDown\") {\n if (currentIndex >= 0) listItems[currentIndex].classList.remove('active');\n newCurrentIndex = (currentIndex + 1) % listItems.length;\n } else if (e.key === \"Tab\" || e.key === \"Enter\") {\n autocomplete.classList.remove('open');\n }\n\n if (newCurrentIndex != -1) {\n const selectedItem = listItems[newCurrentIndex];\n selectedItem.classList.add('active');\n\n if (!selectedItem.classList.contains('no-item-found')) qinput.value = selectedItem.innerText;\n }\n });\n }\n }\n\n // Additionally to searching when selecting a new category, we also\n // automatically start a new search request when the user changes a search\n // filter (safesearch, time range or language) (this requires JavaScript\n // though)\n if (\n qinput !== null\n && searxng.settings.search_on_category_select\n // If .search_filters is undefined (invisible) we are on the homepage and\n // hence don't have to set any listeners\n && d.querySelector(\".search_filters\") != null\n ) {\n searxng.on(d.getElementById('safesearch'), 'change', submitIfQuery);\n searxng.on(d.getElementById('time_range'), 'change', submitIfQuery);\n searxng.on(d.getElementById('language'), 'change', submitIfQuery);\n }\n\n const categoryButtons = d.querySelectorAll(\"button.category_button\");\n for (let button of categoryButtons) {\n searxng.on(button, 'click', (event) => {\n if (event.shiftKey) {\n event.preventDefault();\n button.classList.toggle(\"selected\");\n return;\n }\n\n // manually deselect the old selection when a new category is selected\n const selectedCategories = d.querySelectorAll(\"button.category_button.selected\");\n for (let categoryButton of selectedCategories) {\n categoryButton.classList.remove(\"selected\");\n }\n button.classList.add(\"selected\");\n });\n }\n\n // override form submit action to update the actually selected categories\n const form = d.querySelector(\"#search\");\n if (form != null) {\n searxng.on(form, 'submit', (event) => {\n event.preventDefault();\n const categoryValuesInput = d.querySelector(\"#selected-categories\");\n if (categoryValuesInput) {\n let categoryValues = [];\n for (let categoryButton of categoryButtons) {\n if (categoryButton.classList.contains(\"selected\")) {\n categoryValues.push(categoryButton.name.replace(\"category_\", \"\"));\n }\n }\n categoryValuesInput.value = categoryValues.join(\",\");\n }\n form.submit();\n });\n }\n });\n\n})(window, document, window.searxng);\n"],"names":["w","d","ElementPrototype","selector","node","nodes","i","callbackSafe","callback","el","e","exception","searxng","obj","eventType","useCapture","found","method","url","data","resolve","reject","req","ex","src","path","id","s","newNode","referenceNode","getEndpoint","className","onlyImages","newLoadSpinner","loader","replaceChildrenWith","element","children","child","loadNextPage","form","formData","response","nextPageDoc","articleList","paginationElement","articleElement","err","intersectionObserveOptions","observedSelector","observer","entries","paginationEntry","isElementInDetail","getResultElement","isImageResult","resultElement","highlightResult","baseKeyBinding","removeFocus","copyURLToClipboard","toggleHelp","searchInputFocus","GoToNextPage","openResult","GoToPreviousPage","reloadPage","keyBindingLayouts","scrollPage","scrollPageTo","keyBindings","tagName","which","noScroll","keepFocus","current","effectiveWhich","next","results","top","bot","etop","ebot","link","scrollPageToSelected","pageButtonClick","css_selector","button","sel","wtop","wheight","offset","wbot","amount","position","nav","q","len","newTab","initHelpContent","divElement","categories","k","key","sorted","a","b","html","cat","lastCategory","first","cj","helpPanel","body","currentUrlElement","event","leaflet_target","map_lon","map_lat","map_zoom","map_boundingbox","map_geojson","map_bounds","southWest","northEast","map","osmMapnikUrl","osmMapnikAttrib","osmMapnik","osmWikimediaUrl","osmWikimediaAttrib","osmWikimedia","baseLayers","engine_descriptions","load_engine_descriptions","content","engine_name","description","elements","source","enableAllEngines","disableAllEngines","engineToggles","toggleEngines","enable","copyHashButton","window","document","params","evt","handleTouchStart","handleTouchMove","handleTouchEnd","xDown","yDown","xDiff","yDiff","timeDown","startEl","touchCount","swipeThreshold","getNearestAttribute","swipeUnit","swipeTimeout","timeDiff","changedTouches","eventData","xUp","yUp","attributeName","defaultValue","attributeValue","img","btnLabelCollapsed","btnLabelNotCollapsed","target","targetElement","iframe_load","srctest","imgTimeoutID","imgLoaderSpinner","imgLoader","loadImage","imgSrc","onSuccess","thumbnail","scrollTop","qinput_id","qinput","isMobile","submitIfQuery","search","createClearButton","cs","updateClearButton","ev","fetchResults","query","request","reqParams","autocomplete","autocompleteList","noItemFoundMessage","result","li","currentIndex","listItems","newCurrentIndex","selectedItem","categoryButtons","selectedCategories","categoryButton","categoryValuesInput","categoryValues"],"mappings":"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","x_google_ignoreList":[5]} \ No newline at end of file From d29cf64ce4932916affd68232aed19d01c6758b5 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Thu, 22 May 2025 16:23:30 +0200 Subject: [PATCH 57/82] [mod] searx.data: lazy load of the data objects (databases) (#4834) In the previous implementation, all databases were loaded into memory when importing the searx.data package, regardless of whether they were ever needed. Regardless of this, it is an antipattern to load entire databases into memory when importing a package or module; databases should be loaded when needed. Lazy loading is a first step toward improving memory usage and also improves performance when setting up the runtime environment. Building on this, subsequent PRs will be able to further optimize memory behavior, e.g., by using a real database application such as the one already available via searx.cache.ExpireCache Related: - https://github.com/searxng/searxng/discussions/1892 - https://github.com/searxng/searxng/pull/3458 - https://github.com/searxng/searxng/pull/4650 Signed-off-by: Markus Heiser --- searx/data/__init__.py | 81 ++++++++++++++++++++++++++++-------------- 1 file changed, 55 insertions(+), 26 deletions(-) diff --git a/searx/data/__init__.py b/searx/data/__init__.py index 28a3974fa..48455ebe3 100644 --- a/searx/data/__init__.py +++ b/searx/data/__init__.py @@ -5,28 +5,68 @@ """ -__all__ = [ - 'ENGINE_TRAITS', - 'CURRENCIES', - 'USER_AGENTS', - 'EXTERNAL_URLS', - 'WIKIDATA_UNITS', - 'EXTERNAL_BANGS', - 'OSM_KEYS_TAGS', - 'ENGINE_DESCRIPTIONS', - 'LOCALES', - 'ahmia_blacklist_loader', -] + +__all__ = ["ahmia_blacklist_loader"] import json from pathlib import Path +import typing + +from searx import logger + +log = logger.getChild("data") data_dir = Path(__file__).parent +CURRENCIES: dict[str, typing.Any] +USER_AGENTS: dict[str, typing.Any] +EXTERNAL_URLS: dict[str, typing.Any] +WIKIDATA_UNITS: dict[str, typing.Any] +EXTERNAL_BANGS: dict[str, typing.Any] +OSM_KEYS_TAGS: dict[str, typing.Any] +ENGINE_DESCRIPTIONS: dict[str, typing.Any] +ENGINE_TRAITS: dict[str, typing.Any] +LOCALES: dict[str, typing.Any] -def _load(filename): - with open(data_dir / filename, encoding='utf-8') as f: - return json.load(f) +lazy_globals = { + "CURRENCIES": None, + "USER_AGENTS": None, + "EXTERNAL_URLS": None, + "WIKIDATA_UNITS": None, + "EXTERNAL_BANGS": None, + "OSM_KEYS_TAGS": None, + "ENGINE_DESCRIPTIONS": None, + "ENGINE_TRAITS": None, + "LOCALES": None, +} + +data_json_files = { + "CURRENCIES": "currencies.json", + "USER_AGENTS": "useragents.json", + "EXTERNAL_URLS": "external_urls.json", + "WIKIDATA_UNITS": "wikidata_units.json", + "EXTERNAL_BANGS": "external_bangs.json", + "OSM_KEYS_TAGS": "osm_keys_tags.json", + "ENGINE_DESCRIPTIONS": "engine_descriptions.json", + "ENGINE_TRAITS": "engine_traits.json", + "LOCALES": "locales.json", +} + + +def __getattr__(name): + # lazy init of the global objects + if name not in lazy_globals: + raise AttributeError(f"module {__name__!r} has no attribute {name!r}") + + data = lazy_globals[name] + if data is not None: + return data + + log.debug("init searx.data.%s", name) + with open(data_dir / data_json_files[name], encoding='utf-8') as f: + lazy_globals[name] = json.load(f) + + return lazy_globals[name] def ahmia_blacklist_loader(): @@ -40,14 +80,3 @@ def ahmia_blacklist_loader(): """ with open(data_dir / 'ahmia_blacklist.txt', encoding='utf-8') as f: return f.read().split() - - -CURRENCIES = _load('currencies.json') -USER_AGENTS = _load('useragents.json') -EXTERNAL_URLS = _load('external_urls.json') -WIKIDATA_UNITS = _load('wikidata_units.json') -EXTERNAL_BANGS = _load('external_bangs.json') -OSM_KEYS_TAGS = _load('osm_keys_tags.json') -ENGINE_DESCRIPTIONS = _load('engine_descriptions.json') -ENGINE_TRAITS = _load('engine_traits.json') -LOCALES = _load('locales.json') From 98badc9cd0cfd00405014f843de7dd883d75ecca Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Thu, 22 May 2025 17:43:11 +0200 Subject: [PATCH 58/82] [fix] searx.data: fetch-traits - z-library (httpx.ConnectError) (#4835) There is currently no known z-library, and all known URLs are dead [1]. To avoid interrupting automated updates, a connection error to a z-library is treated as a *known error*, and the old properties of the z-library are retained. [1] https://github.com/searxng/searxng/issues/3610 Signed-off-by: Markus Heiser --- searx/engines/zlibrary.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/searx/engines/zlibrary.py b/searx/engines/zlibrary.py index c9acb28fe..6357232af 100644 --- a/searx/engines/zlibrary.py +++ b/searx/engines/zlibrary.py @@ -180,6 +180,8 @@ def fetch_traits(engine_traits: EngineTraits) -> None: # pylint: disable=import-outside-toplevel, too-many-branches import babel + import httpx + from searx.network import get # see https://github.com/searxng/searxng/issues/762 from searx.locales import language_tag @@ -191,7 +193,7 @@ def fetch_traits(engine_traits: EngineTraits) -> None: try: resp = get(base_url, verify=False) - except SearxException as exc: + except (SearxException, httpx.ConnectError) as exc: print(f"ERROR: zlibrary domain '{base_url}' is seized?") print(f" --> {exc}") _use_old_values() From 4fa7de80334deee51845550c4cfa11f94edb5e88 Mon Sep 17 00:00:00 2001 From: useralias <212567668+useralias@users.noreply.github.com> Date: Fri, 23 May 2025 07:01:10 -0400 Subject: [PATCH 59/82] [refactor] duckduckgo engine: improve request logic and code structure (#4837) Changes: - Add trailing slash to base URL to prevent potential redirects - Remove advanced search syntax filtering (no longer guarantees a CAPTCHA) - Correct pagination offset calculation: Page 2 now starts at offset 10, subsequent pages use 10 + (n-2)*15 formula instead of the previous broken 20 + (n-2)*50 calculation that caused CAPTCHAs - Restructure request parameter building to better match a real request - "kt" cookie is no longer an empty string if the language/region is "all" - Group related parameter assignments together - Add header logging to debugging output Related: - https://github.com/searxng/searxng/issues/4824 --- searx/engines/duckduckgo.py | 117 ++++++++++++++++-------------------- 1 file changed, 51 insertions(+), 66 deletions(-) diff --git a/searx/engines/duckduckgo.py b/searx/engines/duckduckgo.py index 2b6888af7..d877d596b 100644 --- a/searx/engines/duckduckgo.py +++ b/searx/engines/duckduckgo.py @@ -58,7 +58,7 @@ paging = True time_range_support = True safesearch = True # user can't select but the results are filtered -url = "https://html.duckduckgo.com/html" +url = "https://html.duckduckgo.com/html/" time_range_dict = {'day': 'd', 'week': 'w', 'month': 'm', 'year': 'y'} form_data = {'v': 'l', 'api': 'd.js', 'o': 'json'} @@ -248,7 +248,6 @@ def quote_ddg_bangs(query): def request(query, params): - query = quote_ddg_bangs(query) if len(query) >= 500: @@ -256,93 +255,79 @@ def request(query, params): params["url"] = None return - # Advanced search syntax ends in CAPTCHA - # https://duckduckgo.com/duckduckgo-help-pages/results/syntax/ - query = " ".join( - [ - x.removeprefix("site:").removeprefix("intitle:").removeprefix("inurl:").removeprefix("filetype:") - for x in query.split() - ] - ) eng_region: str = traits.get_region(params['searxng_locale'], traits.all_locale) # type: ignore - if eng_region == "wt-wt": - # https://html.duckduckgo.com/html sets an empty value for "all". - eng_region = "" - params['data']['kl'] = eng_region - params['cookies']['kl'] = eng_region + # Note: The API is reverse-engineered from DuckDuckGo's HTML webpage + # (https://html.duckduckgo.com/html/) and may be subject to additional bot detection mechanisms + # and breaking changes in the future. + # + # The params['data'] dictionary can have the following key parameters, in this order: + # - q (str): Search query string + # - b (str): Beginning parameter - empty string for first page requests + # - s (int): Search offset for pagination + # - nextParams (str): Continuation parameters from previous page response, typically empty + # - v (str): Typically 'l' for subsequent pages + # - o (str): Output format, typically 'json' + # - dc (int): Display count - value equal to offset (s) + 1 + # - api (str): API endpoint identifier, typically 'd.js' + # - vqd (str): Validation query digest + # - kl (str): Keyboard language/region code (e.g., 'en-us') + # - df (str): Time filter, maps to values like 'd' (day), 'w' (week), 'm' (month), 'y' (year) - # eng_lang = get_ddg_lang(traits, params['searxng_locale']) - - params['url'] = url - params['method'] = 'POST' params['data']['q'] = query - # The API is not documented, so we do some reverse engineering and emulate - # what https://html.duckduckgo.com/html does when you press "next Page" link - # again and again .. - - params['headers']['Content-Type'] = 'application/x-www-form-urlencoded' - - params['headers']['Sec-Fetch-Dest'] = "document" - params['headers']['Sec-Fetch-Mode'] = "navigate" # at least this one is used by ddg's bot detection - params['headers']['Sec-Fetch-Site'] = "same-origin" - params['headers']['Sec-Fetch-User'] = "?1" - - # Form of the initial search page does have empty values in the form if params['pageno'] == 1: - params['data']['b'] = "" - - params['data']['df'] = '' - if params['time_range'] in time_range_dict: - - params['data']['df'] = time_range_dict[params['time_range']] - params['cookies']['df'] = time_range_dict[params['time_range']] - - if params['pageno'] == 2: - - # second page does have an offset of 20 - offset = (params['pageno'] - 1) * 20 + elif params['pageno'] >= 2: + offset = 10 + (params['pageno'] - 2) * 15 # Page 2 = 10, Page 3+ = 10 + n*15 params['data']['s'] = offset - params['data']['dc'] = offset + 1 - - elif params['pageno'] > 2: - - # third and following pages do have an offset of 20 + n*50 - offset = 20 + (params['pageno'] - 2) * 50 - params['data']['s'] = offset - params['data']['dc'] = offset + 1 - - if params['pageno'] > 1: - - # initial page does not have these additional data in the input form - params['data']['o'] = form_data.get('o', 'json') - params['data']['api'] = form_data.get('api', 'd.js') params['data']['nextParams'] = form_data.get('nextParams', '') params['data']['v'] = form_data.get('v', 'l') - params['headers']['Referer'] = url + params['data']['o'] = form_data.get('o', 'json') + params['data']['dc'] = offset + 1 + params['data']['api'] = form_data.get('api', 'd.js') + # vqd is required to request other pages after the first one vqd = get_vqd(query, eng_region, force_request=False) - - # Certain conditions must be met in order to call up one of the - # following pages ... - if vqd: - params['data']['vqd'] = vqd # follow up pages / requests needs a vqd argument + params['data']['vqd'] = vqd else: - # Don't try to call follow up pages without a vqd value. DDG - # recognizes this as a request from a bot. This lowers the + # Don't try to call follow up pages without a vqd value. + # DDG recognizes this as a request from a bot. This lowers the # reputation of the SearXNG IP and DDG starts to activate CAPTCHAs. params["url"] = None return if params['searxng_locale'].startswith("zh"): - # Some locales (at least China) do not have a "next page" button and ddg + # Some locales (at least China) do not have a "next page" button and DDG # will return a HTTP/2 403 Forbidden for a request of such a page. params["url"] = None return + # Put empty kl in form data if language/region set to all + if eng_region == "wt-wt": + params['data']['kl'] = "" + else: + params['data']['kl'] = eng_region + + params['data']['df'] = '' + if params['time_range'] in time_range_dict: + params['data']['df'] = time_range_dict[params['time_range']] + params['cookies']['df'] = time_range_dict[params['time_range']] + + params['cookies']['kl'] = eng_region + + params['url'] = url + params['method'] = 'POST' + + params['headers']['Content-Type'] = 'application/x-www-form-urlencoded' + params['headers']['Referer'] = url + params['headers']['Sec-Fetch-Dest'] = "document" + params['headers']['Sec-Fetch-Mode'] = "navigate" # at least this one is used by ddg's bot detection + params['headers']['Sec-Fetch-Site'] = "same-origin" + params['headers']['Sec-Fetch-User'] = "?1" + + logger.debug("param headers: %s", params['headers']) logger.debug("param data: %s", params['data']) logger.debug("param cookies: %s", params['cookies']) From 1ef5c03962de29085b63d7df457764a180f36967 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Fri, 23 May 2025 14:55:22 +0200 Subject: [PATCH 60/82] [fix] ddg engine: IndexError exception is raised on empty contend (#4843) Sometimes (e.g. when ddg does not have a result item) there is no content and the engine will fail with an IndexError: * Error: IndexError * Percentage: 10 * Parameters: `()` * File name: `searx/engines/duckduckgo.py:375` * Function: `response` * Code: `item["content"] = extract_text(eval_xpath(div_result, './/a[contains(@class, "result__snippet")]')[0])` Signed-off-by: Markus Heiser --- searx/engines/duckduckgo.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/searx/engines/duckduckgo.py b/searx/engines/duckduckgo.py index d877d596b..06299e6aa 100644 --- a/searx/engines/duckduckgo.py +++ b/searx/engines/duckduckgo.py @@ -372,8 +372,9 @@ def response(resp) -> EngineResults: continue item["title"] = extract_text(title) item["url"] = eval_xpath(div_result, './/h2/a/@href')[0] - item["content"] = extract_text(eval_xpath(div_result, './/a[contains(@class, "result__snippet")]')[0]) - + item["content"] = extract_text( + eval_xpath_getindex(div_result, './/a[contains(@class, "result__snippet")]', 0, []) + ) results.append(item) zero_click_info_xpath = '//div[@id="zero_click_abstract"]' From 230215c250ac7937f7c0d6690f6ed64cd03350a9 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Fri, 23 May 2025 17:11:41 +0200 Subject: [PATCH 61/82] [fix] preferences: description not localized for all UI languages (#4844) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous implementation for determining the description of an engine did not take into account that the UI languages ​​can also have a region tag and/or a script tag: el-GR: Ελληνικά, Ελλάδα (Greek, Greece) fa-IR: فارسی, ایران (Persian, Iran) nb-NO: Norsk bokmål, Norge (Norwegian bokmål, Norway) nl-BE: Nederlands, België (Dutch, Belgium) pt-BR: Português, Brasil (Portuguese, Brazil) zh-HK: 中文, 中國香港特別行政區 (Chinese, Hong Kong SAR China) zh-Hans-CN: 中文, 中国 (Chinese, China) zh-Hant-TW: 中文, 台灣 (Chinese, Taiwan) Closes: https://github.com/searxng/searxng/issues/4842 Signed-off-by: Markus Heiser --- searx/webapp.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/searx/webapp.py b/searx/webapp.py index aaa2608c4..22e31fb5c 100755 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -106,6 +106,7 @@ from searx.metrics import get_engines_stats, get_engine_errors, get_reliabilitie from searx.flaskfix import patch_application from searx.locales import ( + LOCALE_BEST_MATCH, LOCALE_NAMES, RTL_LOCALES, localeselector, @@ -1059,10 +1060,12 @@ def image_proxy(): @app.route('/engine_descriptions.json', methods=['GET']) def engine_descriptions(): - locale = get_locale().split('_')[0] + sxng_ui_lang_tag = get_locale().replace("_", "-") + sxng_ui_lang_tag = LOCALE_BEST_MATCH.get(sxng_ui_lang_tag, sxng_ui_lang_tag) + result = ENGINE_DESCRIPTIONS['en'].copy() - if locale != 'en': - for engine, description in ENGINE_DESCRIPTIONS.get(locale, {}).items(): + if sxng_ui_lang_tag != 'en': + for engine, description in ENGINE_DESCRIPTIONS.get(sxng_ui_lang_tag, {}).items(): result[engine] = description for engine, description in result.items(): if len(description) == 2 and description[1] == 'ref': From 9ed9a9aa53a17df476437fb16c24c44e7c345f56 Mon Sep 17 00:00:00 2001 From: Alexandre Flament Date: Sat, 24 May 2025 12:40:05 +0200 Subject: [PATCH 62/82] [fix] searx.network: don't trigger DeprecationWarning (#4845) Avoid a confusing warning: DeprecationWarning: Setting per-request cookies=<...> is being deprecated Code based on httpx unit test [1] [1] https://github.com/encode/httpx/blob/6a99f6f2b3a638719f70200de9983f80d618ee1c/tests/client/test_cookies.py#L123-L137 Closes: https://github.com/searxng/searxng/issues/4833 --- searx/network/network.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/searx/network/network.py b/searx/network/network.py index 178ebcbf2..8e2a1f12d 100644 --- a/searx/network/network.py +++ b/searx/network/network.py @@ -180,7 +180,7 @@ class Network: Network._TOR_CHECK_RESULT[proxies] = result return result - async def get_client(self, verify=None, max_redirects=None): + async def get_client(self, verify=None, max_redirects=None) -> httpx.AsyncClient: verify = self.verify if verify is None else verify max_redirects = self.max_redirects if max_redirects is None else max_redirects local_address = next(self._local_addresses_cycle) @@ -269,6 +269,8 @@ class Network: kwargs_clients = Network.extract_kwargs_clients(kwargs) while retries >= 0: # pragma: no cover client = await self.get_client(**kwargs_clients) + cookies = kwargs.pop("cookies", None) + client.cookies = httpx.Cookies(cookies) try: if stream: response = client.stream(method, url, **kwargs) From 064eb504733c250d2e43b6db8ac37812ad18d2fa Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Sat, 24 May 2025 13:14:13 +0200 Subject: [PATCH 63/82] [mod] engines: Yahoo in different languages (#4826) BTW fix issue reported in [1] [1] https://github.com/searxng/searxng/pull/4814#issuecomment-2896948787 Signed-off-by: Markus Heiser Co-authored-by: Bnyro --- searx/engines/yahoo.py | 107 +++++++++++++++++++++++++++-------------- 1 file changed, 70 insertions(+), 37 deletions(-) diff --git a/searx/engines/yahoo.py b/searx/engines/yahoo.py index 92da30e23..63b007729 100644 --- a/searx/engines/yahoo.py +++ b/searx/engines/yahoo.py @@ -44,6 +44,29 @@ time_range_dict = { 'month': ('1m', 'm'), } +region2domain = { + "CO": "co.search.yahoo.com", # Colombia + "TH": "th.search.yahoo.com", # Thailand + "VE": "ve.search.yahoo.com", # Venezuela + "CL": "cl.search.yahoo.com", # Chile + "HK": "hk.search.yahoo.com", # Hong Kong + "PE": "pe.search.yahoo.com", # Peru + "CA": "ca.search.yahoo.com", # Canada + "DE": "de.search.yahoo.com", # Germany + "FR": "fr.search.yahoo.com", # France + "TW": "tw.search.yahoo.com", # Taiwan + "GB": "uk.search.yahoo.com", # United Kingdom + "UK": "uk.search.yahoo.com", + "BR": "br.search.yahoo.com", # Brazil + "IN": "in.search.yahoo.com", # India + "ES": "espanol.search.yahoo.com", # Espanol + "PH": "ph.search.yahoo.com", # Philippines + "AR": "ar.search.yahoo.com", # Argentina + "MX": "mx.search.yahoo.com", # Mexico + "SG": "sg.search.yahoo.com", # Singapore +} +"""Map regions to domain""" + lang2domain = { 'zh_chs': 'hk.search.yahoo.com', 'zh_cht': 'tw.search.yahoo.com', @@ -65,40 +88,40 @@ lang2domain = { yahoo_languages = { "all": "any", - "ar": "ar", - "bg": "bg", - "cs": "cs", - "da": "da", - "de": "de", - "el": "el", - "en": "en", - "es": "es", - "et": "et", - "fi": "fi", - "fr": "fr", - "he": "he", - "hr": "hr", - "hu": "hu", - "it": "it", - "ja": "ja", - "ko": "ko", - "lt": "lt", - "lv": "lv", - "nl": "nl", - "no": "no", - "pl": "pl", - "pt": "pt", - "ro": "ro", - "ru": "ru", - "sk": "sk", - "sl": "sl", - "sv": "sv", - "th": "th", - "tr": "tr", - "zh": "zh_chs", + "ar": "ar", # Arabic + "bg": "bg", # Bulgarian + "cs": "cs", # Czech + "da": "da", # Danish + "de": "de", # German + "el": "el", # Greek + "en": "en", # English + "es": "es", # Spanish + "et": "et", # Estonian + "fi": "fi", # Finnish + "fr": "fr", # French + "he": "he", # Hebrew + "hr": "hr", # Croatian + "hu": "hu", # Hungarian + "it": "it", # Italian + "ja": "ja", # Japanese + "ko": "ko", # Korean + "lt": "lt", # Lithuanian + "lv": "lv", # Latvian + "nl": "nl", # Dutch + "no": "no", # Norwegian + "pl": "pl", # Polish + "pt": "pt", # Portuguese + "ro": "ro", # Romanian + "ru": "ru", # Russian + "sk": "sk", # Slovak + "sl": "sl", # Slovenian + "sv": "sv", # Swedish + "th": "th", # Thai + "tr": "tr", # Turkish + "zh": "zh_chs", # Chinese (Simplified) "zh_Hans": "zh_chs", 'zh-CN': "zh_chs", - "zh_Hant": "zh_cht", + "zh_Hant": "zh_cht", # Chinese (Traditional) "zh-HK": "zh_cht", 'zh-TW': "zh_cht", } @@ -107,7 +130,7 @@ yahoo_languages = { def request(query, params): """build request""" - lang = params["language"].split("-")[0] + lang, region = (params["language"].split("-") + [None])[:2] lang = yahoo_languages.get(lang, "any") offset = (params['pageno'] - 1) * 7 + 1 @@ -127,9 +150,11 @@ def request(query, params): } ) - domain = lang2domain.get(lang, '%s.search.yahoo.com' % lang) + domain = region2domain.get(region) + if not domain: + domain = lang2domain.get(lang, '%s.search.yahoo.com' % lang) params['url'] = 'https://%s/search?%s' % (domain, args) - return params + params['domain'] = domain def parse_url(url_string): @@ -157,14 +182,22 @@ def response(resp): results = [] dom = html.fromstring(resp.text) + url_xpath = './/div[contains(@class,"compTitle")]/h3/a/@href' + title_xpath = './/h3//a/@aria-label' + + domain = resp.search_params['domain'] + if domain == "search.yahoo.com": + url_xpath = './/div[contains(@class,"compTitle")]/a/@href' + title_xpath = './/div[contains(@class,"compTitle")]/a/h3/span' + # parse results for result in eval_xpath_list(dom, '//div[contains(@class,"algo-sr")]'): - url = eval_xpath_getindex(result, './/div[contains(@class,"compTitle")]/a/@href', 0, default=None) + url = eval_xpath_getindex(result, url_xpath, 0, default=None) if url is None: continue url = parse_url(url) - title = eval_xpath_getindex(result, './/div[contains(@class,"compTitle")]/a/h3/span', 0, default='') + title = eval_xpath_getindex(result, title_xpath, 0, default='') title: str = extract_text(title) content = eval_xpath_getindex(result, './/div[contains(@class, "compText")]', 0, default='') content: str = extract_text(content, allow_none=True) From e46187e3ce1fd118951c0e40eb8432af75acad7c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 25 May 2025 10:36:27 +0200 Subject: [PATCH 64/82] [l10n] update translations from Weblate (#4840) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 51e0a154c - 2025-05-22 - Priit Jõerüüt 256b8cb8e - 2025-05-16 - wetinee ac12b76a8 - 2025-05-16 - wetinee Co-authored-by: searxng-bot --- searx/translations/et/LC_MESSAGES/messages.mo | Bin 21062 -> 21066 bytes searx/translations/et/LC_MESSAGES/messages.po | 14 ++--- searx/translations/th/LC_MESSAGES/messages.mo | Bin 29675 -> 32249 bytes searx/translations/th/LC_MESSAGES/messages.po | 52 ++++++++++-------- 4 files changed, 35 insertions(+), 31 deletions(-) diff --git a/searx/translations/et/LC_MESSAGES/messages.mo b/searx/translations/et/LC_MESSAGES/messages.mo index c6990d0e71519cd3b69b2c5e67b70eb52b2bddf5..4ca574548ed1bb397b22579194579a6a2f57cc1c 100644 GIT binary patch delta 1411 zcmXZbTS!z<6vpvwO=;dn9WQAaV`VvX8!xE{DdM%%av-!MvOrTyO~^1J8Wl;13JF8( zDN+IpA{s2H9zr3-2m*U3goJ#^hX^8we2M-aXTvbRv-WlEwaNY0M^^MA3el(F$y1HIzGo_{D^V*9sT$hlh9XgOf;5Y4Axqk%1zLu z($G%BDICOHTt-dsR2UP1UQ}W})W+GU#13H|c3~DiM2&lo8n=jAe;IYaHQbM`N+-^( z3>uS0L$Pf*iCUn=#+|5>^`R2GgBx%L`I&kCw6MF%IawOIiL)>f3sDEC!whUdRp1J4 z#2Y~#l<93$DaY|DzC>-5Q|ChnnjKU$*gc0j~bP-RY7pL$dF4*>>I%5imOOP{}J}ku3H>irt+4zI?Gb*7K8?U0q{YF)44Yi&*<{T&j zwQeG2VLH0l-&EQGHK>V=sEMahcYV(GU&mHRpji0dbV^l&fZ2a0fhgxsZx`aB| z3I^5jlLvj*e{elU);q?c`V%k~(@-1wP*>wey)#9qd3ClwU_F7F-)!SH)Kz!exWAtI z>qNse=*~w`C3=8yIE69z3e`Vv<4>rBzFB{v5;6g2d?ad}&8U|(1GP^fuEPq{{OUlJ zGq8~co$L&1VjHTIJ-7`o;~pGEeNJytpVtzqa`_=&(($d42lwUVdi@1O+5XUQ_O1Ao h((ab7)(dAldM~y1%ucs=bj?op_O`Z!c9nVE{{dF3sa600 delta 1407 zcmXZbOGs2v9LMovnVPRrM-59uOVJ+csFT%5kZC?j%U3PbMUzpE307kfqKz07g@h3W zL1cs$w8&_nT7(lbmA2(!$s5r*Fj@qFcXzn9_rviRAPJ4ivcXahp2h)Q1j+d`!Av{xPnD!YMi*Z zCS=S;VxR3ehT7nSjk{4d3!)OciR*A0`I%Y%v~gUmbF*}G5$9qmdQlgs#~f@yRiGcE za3n-SnchH^@-7Zw7b@gvN}N$kTp+h5*j%x>Ze+0=zqqPmSzQe{{s7KvnRY9q@rHdEYvw(T!WRU_0`R_ z&cs$abhA!W0$r$5_Tpwdk2`P-^*OyoeO?Qw%9Vz, 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2025-05-13 19:13+0000\n" -"PO-Revision-Date: 2025-03-30 01:58+0000\n" +"PO-Revision-Date: 2025-05-23 07:10+0000\n" "Last-Translator: Priit Jõerüüt \n" +"Language-Team: Estonian \n" "Language: et\n" -"Language-Team: Estonian " -"\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.11.4\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -685,7 +686,7 @@ msgstr "Avalikud serverid" #: searx/templates/simple/base.html:75 msgid "Privacy policy" -msgstr "Privaatsuspoliitika" +msgstr "Andmekaitsepõhimõtted" #: searx/templates/simple/base.html:78 msgid "Contact instance maintainer" @@ -2074,4 +2075,3 @@ msgstr "peida video" #~ msgid "proxied" #~ msgstr "proksiserveris" - diff --git a/searx/translations/th/LC_MESSAGES/messages.mo b/searx/translations/th/LC_MESSAGES/messages.mo index 42dea257fadea1ac27b07dde5075236c84b14112..88eddc80cb3ed94269e6cd641c3cbea86e4b3c71 100644 GIT binary patch delta 7460 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 Gmj4aVuX9BJ delta 5393 zcmYM&3v^9a9>?*0Z?0DoiH5w8#3LjUA_+m#c*HA&CX|vI)=)vcQca?xEWKo8VOF)c z-b2-Rtg5j(!!zlCCazj@T;fCn3m`ZRrK?(+f9wBNBAwq;lD5%!<*UbZLl?Qs*8)T0r4juqi{HChh?Y*W;+*RGVwAb7qbWR@FZ$s zU%VX`hKgIFHqzF`8L0Vk(647vKtqq97`213sGXLfGGE}XuW`PC4Y|GpRhf5?wavSz ziO-=Dzk*u$E^3{BqsBF8Zf(+>`bTgfo(tMZDk|gNuERi7LM7M=M`J$DLG|B@s@Q4g zSyTd_qY}T0O5h=KZcPZgQev^Fc~e_Ze`S=(gWAFJ|BfRE4Wi3ol2lyUy<#TTq$4jVkG0=V8=s^b@5+O{p(Qu zZ=oieG71#__p~a|Ez7};hb|MGge2DGv5_0INf08}@K4(MJnFvQE(gL;9c36s;n1@T< z^^csNpdQgBROxS^5`Tb7Tn9)yjzG;HgP~f#9Sz;cL=EhL+Tmaq&q57Yh)QTVa*)ji z)DCM=3m?PIcn;Oy%U4K=KY>c1CF-oCp$=nrEMk2#ghoePgBoxIRnkABp5=LW{StN} zzK;3Ww2d)caTscW8dT{6s06p7#vej{n~(TI8@%bRKSaMe{FjDyP`|C6APQB1HmLi9 zQ40=3^;?Fj*m`$=3-X4Uw@?*2g1iXk4C)d51GS-lqQ*Z!mNX&B)c<7~?UU_cdlS`R z2d3d3R3cyE2=sAseu1S(5lk)iz|V0wM$(ysZzkY!d<8X6WQsA*VIHc&n^2W_D~0;k zqwy{m^h^$;-rw`+!yA~5w@^DtOtllFV143j)U(b-%`*raU@>l!fYf*laE?p5-P!IsQG?{ntwj35;dst zD=<{={|4JI+ffVu0ll~nHNgRQ{e9E~$1w!YyZe7Z?fgqr0=H1}eCOf^sCgct7WSsw z{$W^O?|(cEb!dfQ*dDb&w!7X9HF3U+3s5^MM19dpPzz2$?Ytbra2~4PV$@-K9hJbF z7>YZk-v3$}8h99Wm`-CDUPeuD6P4gy)CcE2s(*uywo=Vd3&f%lO+_Wt2{o=OYD0Ob z*RmJtk&QvWcJON&rsGsxj2ibnMxrm% z{`hT%`u3+GzfC{>(08N?FW?_DsXvd!EY9Mj;vNjg6})rF_y%^tBdDL}4{$Oz=3+Oj z!ZO^2L$C>-LnS&E^o< ziKn3Yy^R`o4EaH3TJsf(!ak^Y1ga7hn2Xgoj*1>cZLB#z!Bn~4ej0ijmB?&V1y{NF1ghdUk*90?Q9W&jeNY4D z;uu_y+VMS1!tT9nWk#bCD#I2yAD_bYsDy7~EQa^CaWWZUq)4Mox5L)s@%t@ele6; z;|fp-jK;@*|1YD_)MLzxs0nHY+i&|8)PP;61V6wcyoNg683gLz3uiEXjEj%6YO?wv zxtoSV?T_ygoK3tHLoog+>aRuuCrGwN4Qz*6u*f+Bj}yO!YjISut;(HEdxgpFa{VGIfs+&M zTXhwq_5Qakv;QK=#&|lEqDo(ZdZyKwhGCOzNxPvcH4U}%m8cC|KrQe$T!;@b8Rt&6 zk7zUMQSL!)^cY67zPYLfKEys4F~$COObON}UiQ2(pW-S^#Yt0b0)mr*5ufSNFAroEqydIWtj z9BWYbSGxP#Q5D;ZO5h6Wt-0s!mz7h0EmT!*56>dhGx`8^{Q~MWx{gX9p3$wb00-ej zRKMS2Z#;-f_z^0RxLJIxFdengYShlRxcGpdh6Y?jEpXq(2`}1=b5R3JQ1{E7Yfw9W z4^@FvsCgnP?80fN`#qgSIG%Vk4#xeMj#1u9`x<3n5*JQY2GXK)1E-=>10gZr1$?n< zg8O2lJ%QVCI|4`JZ#Al%STS{0)zlZt1J|3^1V3!i&J$>pkQf+{@M*Ap;sQ_bXwvkM zVE48^c!Pc0|KJN0rsoFNq?dStlRCBbg?8(4VCl>i!Q%1^U$CmOCiH*qk%@%> diff --git a/searx/translations/th/LC_MESSAGES/messages.po b/searx/translations/th/LC_MESSAGES/messages.po index 25c143420..7ed43cea6 100644 --- a/searx/translations/th/LC_MESSAGES/messages.po +++ b/searx/translations/th/LC_MESSAGES/messages.po @@ -13,20 +13,22 @@ # Anonymous , 2025. # yuttct , 2025. # return42 , 2025. +# wetinee , 2025. msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2025-05-13 19:13+0000\n" -"PO-Revision-Date: 2025-04-15 10:37+0000\n" -"Last-Translator: return42 \n" +"PO-Revision-Date: 2025-05-17 15:04+0000\n" +"Last-Translator: wetinee \n" +"Language-Team: Thai \n" "Language: th\n" -"Language-Team: Thai " -"\n" -"Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.11.4\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -445,11 +447,11 @@ msgstr "ทำการสุ่มค่าที่แตกต่างกั #: searx/answerers/statistics.py:36 #, python-brace-format msgid "Compute {func} of the arguments" -msgstr "" +msgstr "คำนวณ {func} ของอาร์กิวเมนต์" #: searx/engines/openstreetmap.py:158 msgid "Show route in map .." -msgstr "" +msgstr "แสดงเส้นทางบนแผนที่ .." #: searx/engines/pdbe.py:96 #, python-brace-format @@ -522,15 +524,15 @@ msgstr "คุณภาพไฟล์" #: searx/plugins/ahmia_filter.py:32 msgid "Ahmia blacklist" -msgstr "" +msgstr "แบล็กลิสต์ Ahmia" #: searx/plugins/ahmia_filter.py:33 msgid "Filter out onion results that appear in Ahmia's blacklist." -msgstr "" +msgstr "กรองผลการค้นหา onion ที่อยู่ในแบล็กลิสต์ Ahmia" #: searx/plugins/calculator.py:38 msgid "Basic Calculator" -msgstr "" +msgstr "เครื่องคิดเลขพื้นฐาน" #: searx/plugins/calculator.py:39 msgid "Calculate mathematical expressions via the search bar" @@ -538,7 +540,7 @@ msgstr "คำนวณนิพจน์คณิตศาสตร์ผ่า #: searx/plugins/hash_plugin.py:34 msgid "Hash plugin" -msgstr "" +msgstr "ปลั๊กอินแฮช" #: searx/plugins/hash_plugin.py:35 msgid "Converts strings to different hash digests." @@ -575,6 +577,8 @@ msgid "" "Displays your IP if the query is \"ip\" and your user agent if the query " "is \"user-agent\"." msgstr "" +"จะแสดง IP ของคุณหากคำค้นคือ 'ip' และแสดงข้อมูล User Agent ของคุณหากคำค้นคือ 'user-" +"agent'" #: searx/plugins/self_info.py:52 msgid "Your IP is: " @@ -599,15 +603,15 @@ msgstr "" #: searx/plugins/tor_check.py:65 msgid "Could not download the list of Tor exit-nodes from" -msgstr "" +msgstr "ไม่สามารถดาวน์โหลดรายการของโหนดทางออกของ Tor จาก" #: searx/plugins/tor_check.py:72 msgid "You are using Tor and it looks like you have the external IP address" -msgstr "" +msgstr "คุณกำลังใช้ Tor และดูเหมือนว่าคุณมีที่อยู่ IP ภายนอก" #: searx/plugins/tor_check.py:76 msgid "You are not using Tor and you have the external IP address" -msgstr "" +msgstr "คุณไม่ได้ใช้ Tor และคุณมีที่อยู่ IP ภายนอก" #: searx/plugins/tracker_url_remover.py:37 msgid "Tracker URL remover" @@ -619,7 +623,7 @@ msgstr "ลบอาร์กิวเมนต์ตัวติดตามอ #: searx/plugins/unit_converter.py:49 msgid "Unit converter plugin" -msgstr "" +msgstr "ปลั๊กอินแปลงหน่วย" #: searx/plugins/unit_converter.py:50 msgid "Convert between units" @@ -931,7 +935,7 @@ msgstr "ตัวอย่าง" #: searx/templates/simple/answer/translations.html:21 msgid "Definitions" -msgstr "" +msgstr "คำนิยาม" #: searx/templates/simple/answer/translations.html:30 msgid "Synonyms" @@ -1090,7 +1094,7 @@ msgstr "อนุญาต" #: searx/templates/simple/preferences/answerers.html:5 msgid "Keywords (first word in query)" -msgstr "" +msgstr "คำหลัก (คำแรกของคำค้นหา)" #: searx/templates/simple/preferences/answerers.html:6 #: searx/templates/simple/result_templates/packages.html:7 @@ -1164,6 +1168,7 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" +"ลิงก์ URL ที่บรรจุค่าการตั้งค่าของคุณ ซึ่งสามารถนำไปใช้กู้คืนการตั้งค่าเหล่านั้นบนอุปกรณ์อื่นได้" #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -1179,7 +1184,7 @@ msgstr "การตั้งค่าแฮช" #: searx/templates/simple/preferences/doi_resolver.html:1 msgid "Digital Object Identifier (DOI)" -msgstr "" +msgstr "รหัส DOI" #: searx/templates/simple/preferences/doi_resolver.html:6 msgid "Open Access DOI resolver" @@ -1373,23 +1378,23 @@ msgstr "เปลี่ยนภาษาของเค้าโครง" #: searx/templates/simple/preferences/urlformatting.html:2 msgid "URL formatting" -msgstr "" +msgstr "การจัดรูปแบบ URL" #: searx/templates/simple/preferences/urlformatting.html:8 msgid "Pretty" -msgstr "" +msgstr "แบบสวยงาม" #: searx/templates/simple/preferences/urlformatting.html:13 msgid "Full" -msgstr "" +msgstr "แบบเต็ม" #: searx/templates/simple/preferences/urlformatting.html:18 msgid "Host" -msgstr "" +msgstr "โฮสต์" #: searx/templates/simple/preferences/urlformatting.html:23 msgid "Change result URL formatting" -msgstr "" +msgstr "เปลี่ยนรูปแบบ URL ผลการค้นหา" #: searx/templates/simple/result_templates/code.html:13 msgid "repo" @@ -1787,4 +1792,3 @@ msgstr "ซ่อนวิดีโอ" #~ msgid "proxied" #~ msgstr "พร็อกซี่" - From 848c8d0544eb0138da4414a750f79b22883f91b2 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Sun, 25 May 2025 10:40:57 +0200 Subject: [PATCH 65/82] [mod] data: implement a simple currencies (SQL) database (#4836) To reduce the memory footprint, this patch no longer loads the JSON data completely into memory. Instead, there is an SQL database based on `ExpireCacheSQLite`. The class CurrenciesDB is a simple DB application that encapsulates the DB (queries and initialization) and provides convenient methods like `name_to_iso4217` and `iso4217_to_name`. Related: - https://github.com/searxng/searxng/discussions/1892 - https://github.com/searxng/searxng/pull/3458#issuecomment-2900807671 - https://github.com/searxng/searxng/pull/4650 Signed-off-by: Markus Heiser --- searx/data/__init__.py | 16 +++---- searx/data/core.py | 29 ++++++++++++ searx/data/currencies.py | 55 ++++++++++++++++++++++ searx/engines/currency_convert.py | 11 +++-- searx/search/processors/online_currency.py | 24 +++------- searxng_extra/update/update_currencies.py | 6 +-- 6 files changed, 106 insertions(+), 35 deletions(-) create mode 100644 searx/data/core.py create mode 100644 searx/data/currencies.py diff --git a/searx/data/__init__.py b/searx/data/__init__.py index 48455ebe3..9be1cd67e 100644 --- a/searx/data/__init__.py +++ b/searx/data/__init__.py @@ -4,21 +4,17 @@ make data.all """ - +from __future__ import annotations __all__ = ["ahmia_blacklist_loader"] import json -from pathlib import Path import typing -from searx import logger +from .core import log, data_dir +from .currencies import CurrenciesDB -log = logger.getChild("data") - -data_dir = Path(__file__).parent - -CURRENCIES: dict[str, typing.Any] +CURRENCIES: CurrenciesDB USER_AGENTS: dict[str, typing.Any] EXTERNAL_URLS: dict[str, typing.Any] WIKIDATA_UNITS: dict[str, typing.Any] @@ -29,7 +25,7 @@ ENGINE_TRAITS: dict[str, typing.Any] LOCALES: dict[str, typing.Any] lazy_globals = { - "CURRENCIES": None, + "CURRENCIES": CurrenciesDB(), "USER_AGENTS": None, "EXTERNAL_URLS": None, "WIKIDATA_UNITS": None, @@ -41,7 +37,6 @@ lazy_globals = { } data_json_files = { - "CURRENCIES": "currencies.json", "USER_AGENTS": "useragents.json", "EXTERNAL_URLS": "external_urls.json", "WIKIDATA_UNITS": "wikidata_units.json", @@ -63,6 +58,7 @@ def __getattr__(name): return data log.debug("init searx.data.%s", name) + with open(data_dir / data_json_files[name], encoding='utf-8') as f: lazy_globals[name] = json.load(f) diff --git a/searx/data/core.py b/searx/data/core.py new file mode 100644 index 000000000..14cc77eb7 --- /dev/null +++ b/searx/data/core.py @@ -0,0 +1,29 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# pylint: disable=missing-module-docstring +from __future__ import annotations + +import pathlib + +from searx import logger +from searx.cache import ExpireCacheCfg, ExpireCacheSQLite + +log = logger.getChild("data") + +data_dir = pathlib.Path(__file__).parent + +_DATA_CACHE: ExpireCacheSQLite = None # type: ignore + + +def get_cache(): + + global _DATA_CACHE # pylint: disable=global-statement + + if _DATA_CACHE is None: + _DATA_CACHE = ExpireCacheSQLite.build_cache( + ExpireCacheCfg( + name="DATA_CACHE", + # MAX_VALUE_LEN=1024 * 200, # max. 200kB length for a *serialized* value. + # MAXHOLD_TIME=60 * 60 * 24 * 7 * 4, # 4 weeks + ) + ) + return _DATA_CACHE diff --git a/searx/data/currencies.py b/searx/data/currencies.py new file mode 100644 index 000000000..a4f2901f0 --- /dev/null +++ b/searx/data/currencies.py @@ -0,0 +1,55 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Simple implementation to store currencies data in a SQL database.""" + +from __future__ import annotations + +__all__ = ["CurrenciesDB"] + +import json +import pathlib + +from .core import get_cache, log + + +class CurrenciesDB: + # pylint: disable=missing-class-docstring + + ctx_names = "data_currencies_names" + ctx_iso4217 = "data_currencies_iso4217" + + json_file = pathlib.Path(__file__).parent / "currencies.json" + + def __init__(self): + self.cache = get_cache() + + def init(self): + if self.cache.properties("currencies loaded") != "OK": + self.load() + self.cache.properties.set("currencies loaded", "OK") + # F I X M E: + # do we need a maintenance .. rember: database is stored + # in /tmp and will be rebuild during the reboot anyway + + def load(self): + log.debug("init searx.data.CURRENCIES") + with open(self.json_file, encoding="utf-8") as f: + data_dict = json.load(f) + for key, value in data_dict["names"].items(): + self.cache.set(key=key, value=value, ctx=self.ctx_names, expire=None) + for key, value in data_dict["iso4217"].items(): + self.cache.set(key=key, value=value, ctx=self.ctx_iso4217, expire=None) + + def name_to_iso4217(self, name): + self.init() + + ret_val = self.cache.get(key=name, default=name, ctx=self.ctx_names) + if isinstance(ret_val, list): + # if more alternatives, use the last in the list + ret_val = ret_val[-1] + return ret_val + + def iso4217_to_name(self, iso4217, language): + self.init() + + iso4217_languages: dict = self.cache.get(key=iso4217, default={}, ctx=self.ctx_names) + return iso4217_languages.get(language, iso4217) diff --git a/searx/engines/currency_convert.py b/searx/engines/currency_convert.py index cbb1d6cc4..c4c757e3f 100644 --- a/searx/engines/currency_convert.py +++ b/searx/engines/currency_convert.py @@ -3,6 +3,7 @@ """ import json +from searx.result_types import EngineResults # about about = { @@ -28,13 +29,15 @@ def request(_query, params): return params -def response(resp): +def response(resp) -> EngineResults: + res = EngineResults() + # remove first and last lines to get only json json_resp = resp.text[resp.text.find('\n') + 1 : resp.text.rfind('\n') - 2] try: conversion_rate = float(json.loads(json_resp)["to"][0]["mid"]) except IndexError: - return [] + return res answer = '{0} {1} = {2} {3}, 1 {1} ({5}) = {4} {3} ({6})'.format( resp.search_params['amount'], resp.search_params['from'], @@ -46,5 +49,5 @@ def response(resp): ) url = f"https://duckduckgo.com/?q={resp.search_params['from']}+to+{resp.search_params['to']}" - - return [{"answer": answer, "url": url}] + res.add(res.types.Answer(answer=answer, url=url)) + return res diff --git a/searx/search/processors/online_currency.py b/searx/search/processors/online_currency.py index 197e0e061..0d7900616 100644 --- a/searx/search/processors/online_currency.py +++ b/searx/search/processors/online_currency.py @@ -12,24 +12,13 @@ from .online import OnlineProcessor parser_re = re.compile('.*?(\\d+(?:\\.\\d+)?) ([^.0-9]+) (?:in|to) ([^.0-9]+)', re.I) -def normalize_name(name): +def normalize_name(name: str): + name = name.strip() name = name.lower().replace('-', ' ').rstrip('s') name = re.sub(' +', ' ', name) return unicodedata.normalize('NFKD', name).lower() -def name_to_iso4217(name): - name = normalize_name(name) - currency = CURRENCIES['names'].get(name, [name]) - if isinstance(currency, str): - return currency - return currency[-1] - - -def iso4217_to_name(iso4217, language): - return CURRENCIES['iso4217'].get(iso4217, {}).get(language, iso4217) - - class OnlineCurrencyProcessor(OnlineProcessor): """Processor class used by ``online_currency`` engines.""" @@ -52,14 +41,15 @@ class OnlineCurrencyProcessor(OnlineProcessor): amount = float(amount_str) except ValueError: return None - from_currency = name_to_iso4217(from_currency.strip()) - to_currency = name_to_iso4217(to_currency.strip()) + + from_currency = CURRENCIES.name_to_iso4217(normalize_name(from_currency)) + to_currency = CURRENCIES.name_to_iso4217(normalize_name(to_currency)) params['amount'] = amount params['from'] = from_currency params['to'] = to_currency - params['from_name'] = iso4217_to_name(from_currency, 'en') - params['to_name'] = iso4217_to_name(to_currency, 'en') + params['from_name'] = CURRENCIES.iso4217_to_name(from_currency, "en") + params['to_name'] = CURRENCIES.iso4217_to_name(to_currency, "en") return params def get_default_tests(self): diff --git a/searxng_extra/update/update_currencies.py b/searxng_extra/update/update_currencies.py index 903bdcb44..288f0994e 100755 --- a/searxng_extra/update/update_currencies.py +++ b/searxng_extra/update/update_currencies.py @@ -15,9 +15,7 @@ import json from searx.locales import LOCALE_NAMES, locales_initialize from searx.engines import wikidata, set_loggers -from searx.data import data_dir - -DATA_FILE = data_dir / 'currencies.json' +from searx.data.currencies import CurrenciesDB set_loggers(wikidata, 'wikidata') locales_initialize() @@ -149,7 +147,7 @@ def main(): if len(db['names'][name]) == 1: db['names'][name] = db['names'][name][0] - with DATA_FILE.open('w', encoding='utf8') as f: + with CurrenciesDB.json_file.open('w', encoding='utf8') as f: json.dump(db, f, indent=4, sort_keys=True, ensure_ascii=False) From 14b8a999f3929975756ed6f9dc33c54977b5cedc Mon Sep 17 00:00:00 2001 From: Ivan Gabaldon Date: Sun, 25 May 2025 14:54:27 +0200 Subject: [PATCH 66/82] [mod] ci: exclude some workflows from forks (#4849) Excludes some workflows/jobs unneeded on forks. Closes https://github.com/searxng/searxng/issues/4847 --- .github/workflows/cleanup.yml | 2 ++ .github/workflows/container.yml | 17 ++++++++++------- .github/workflows/security.yml | 3 ++- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/.github/workflows/cleanup.yml b/.github/workflows/cleanup.yml index 85e22ce9d..d6af8feee 100644 --- a/.github/workflows/cleanup.yml +++ b/.github/workflows/cleanup.yml @@ -16,6 +16,8 @@ permissions: jobs: container-cache: + # FIXME: On forks it fails with "Failed to fetch packages: missing field `id` at line 1 column 141" + if: github.repository_owner == 'searxng' || github.event_name == 'workflow_dispatch' name: Container cache runs-on: ubuntu-24.04 permissions: diff --git a/.github/workflows/container.yml b/.github/workflows/container.yml index ccdba770e..0285bcd5c 100644 --- a/.github/workflows/container.yml +++ b/.github/workflows/container.yml @@ -36,16 +36,19 @@ jobs: packages: write steps: - - name: Checkout + - if: github.repository_owner == 'searxng' + name: Checkout uses: actions/checkout@v4 with: persist-credentials: "false" - - name: Get date + - if: github.repository_owner == 'searxng' + name: Get date id: date run: echo "date=$(date +'%Y%m%d')" >>$GITHUB_OUTPUT - - name: Check cache apko + - if: github.repository_owner == 'searxng' + name: Check cache apko id: cache-apko uses: actions/cache/restore@v4 with: @@ -54,7 +57,7 @@ jobs: path: "/tmp/.apko/" lookup-only: true - - if: steps.cache-apko.outputs.cache-hit != 'true' + - if: github.repository_owner == 'searxng' && steps.cache-apko.outputs.cache-hit != 'true' name: Setup cache apko uses: actions/cache@v4 with: @@ -63,13 +66,13 @@ jobs: restore-keys: "apko-${{ steps.date.outputs.date }}-" path: "/tmp/.apko/" - - if: steps.cache-apko.outputs.cache-hit != 'true' + - if: github.repository_owner == 'searxng' && steps.cache-apko.outputs.cache-hit != 'true' name: Setup apko run: | eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" brew install apko - - if: steps.cache-apko.outputs.cache-hit != 'true' + - if: github.repository_owner == 'searxng' && steps.cache-apko.outputs.cache-hit != 'true' name: Login to GHCR uses: docker/login-action@v3 with: @@ -77,7 +80,7 @@ jobs: username: "${{ github.repository_owner }}" password: "${{ secrets.GITHUB_TOKEN }}" - - if: steps.cache-apko.outputs.cache-hit != 'true' + - if: github.repository_owner == 'searxng' && steps.cache-apko.outputs.cache-hit != 'true' name: Build run: | eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml index e994306b8..73a5fd77f 100644 --- a/.github/workflows/security.yml +++ b/.github/workflows/security.yml @@ -16,6 +16,7 @@ permissions: jobs: container: + if: github.repository_owner == 'searxng' name: Container runs-on: ubuntu-24.04-arm permissions: @@ -30,7 +31,7 @@ jobs: - name: Run Trivy scanner uses: aquasecurity/trivy-action@0.30.0 with: - image-ref: "docker.io/searxng/searxng:latest" + image-ref: "ghcr.io/searxng/searxng:latest" vuln-type: "os,library" severity: "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL" ignore-unfixed: "false" From 9dfdd30da0c5d13398947fce0c35fc996552f8f6 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Sun, 25 May 2025 11:49:04 +0200 Subject: [PATCH 67/82] [fix] search: autocomplete focus on results page This has been a regression introduced with the removal of the unmaintained autocomplete.js library. We should only focus the search bar on the main search page at `/` and not at the results page located at `/search`. I'm not sure if there's a better way to figure out if we're on the results page than checking if the id of the main element is `#main_results`, checking the path obviously isn't a better solution because it can differ depending on the instance / reverse proxy / .... - related to https://github.com/searxng/searxng/commit/32823ecb69b115a6726475d6421f0a1c0327fafa - closes https://github.com/searxng/searxng/issues/4846 --- client/simple/src/js/main/search.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/simple/src/js/main/search.js b/client/simple/src/js/main/search.js index 99062fc40..c252dfdb5 100644 --- a/client/simple/src/js/main/search.js +++ b/client/simple/src/js/main/search.js @@ -7,6 +7,7 @@ var qinput_id = "q", qinput; const isMobile = window.matchMedia("only screen and (max-width: 50em)").matches; + const isResultsPage = document.querySelector("main").id == "main_results"; function submitIfQuery () { if (qinput.value.length > 0) { @@ -87,7 +88,7 @@ searxng.ready(function () { // focus search input on large screens - if (!isMobile) document.getElementById("q").focus(); + if (!isMobile && !isResultsPage) document.getElementById("q").focus(); qinput = d.getElementById(qinput_id); const autocomplete = d.querySelector(".autocomplete"); From 7a5a499795e7e34739038510737b8b6c5b607d5b Mon Sep 17 00:00:00 2001 From: Bnyro Date: Sun, 25 May 2025 11:49:28 +0200 Subject: [PATCH 68/82] [build] /static --- searx/static/themes/simple/js/searxng.min.js | 4 ++-- searx/static/themes/simple/js/searxng.min.js.map | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/searx/static/themes/simple/js/searxng.min.js b/searx/static/themes/simple/js/searxng.min.js index ce8fd6aa7..8d0362fab 100644 --- a/searx/static/themes/simple/js/searxng.min.js +++ b/searx/static/themes/simple/js/searxng.min.js @@ -3,12 +3,12 @@ * (C) Copyright Contributors to the SearXNG project. * (C) Copyright Contributors to the searx project (2014 - 2021). * SPDX-License-Identifier: AGPL-3.0-or-later - */window.searxng=function(h,s){h.Element&&function(o){o.matches=o.matches||o.matchesSelector||o.webkitMatchesSelector||o.msMatchesSelector||function(l){for(var n=this,r=(n.parentNode||n.document).querySelectorAll(l),t=-1;r[++t]&&r[t]!=n;);return!!r[t]}}(Element.prototype);function i(o,l,n){try{o.call(l,n)}catch(r){console.log(r)}}var p=window.searxng||{};p.on=function(o,l,n,r){r=r||!1,typeof o!="string"?o.addEventListener(l,n,r):s.addEventListener(l,function(t){for(var a=t.target||t.srcElement,f=!1;a&&a.matches&&a!==s&&!(f=a.matches(o));)a=a.parentElement;f&&i(n,a,t)},r)},p.ready=function(o){document.readyState!="loading"?o.call(h):h.addEventListener("DOMContentLoaded",o.bind(h))},p.http=function(o,l,n=null){return new Promise(function(r,t){try{var a=new XMLHttpRequest;a.open(o,l,!0),a.timeout=2e4,a.onload=function(){a.status==200?r(a.response,a.responseType):t(Error(a.statusText))},a.onerror=function(){t(Error("Network Error"))},a.onabort=function(){t(Error("Transaction is aborted"))},a.ontimeout=function(){t(Error("Timeout"))},n?a.send(n):a.send()}catch(f){t(f)}})},p.loadStyle=function(o){var l=p.settings.theme_static_path+"/"+o,n="style_"+o.replace(".","_"),r=s.getElementById(n);r===null&&(r=s.createElement("link"),r.setAttribute("id",n),r.setAttribute("rel","stylesheet"),r.setAttribute("type","text/css"),r.setAttribute("href",l),s.body.appendChild(r))},p.loadScript=function(o,l){var n=p.settings.theme_static_path+"/"+o,r="script_"+o.replace(".","_"),t=s.getElementById(r);if(t===null)t=s.createElement("script"),t.setAttribute("id",r),t.setAttribute("src",n),t.onload=l,t.onerror=function(){t.setAttribute("error","1")},s.body.appendChild(t);else if(t.hasAttribute("error"))console.log("callback not executed : script '"+n+"' not loaded.");else try{l.apply(t,[])}catch(a){console.log(a)}},p.insertBefore=function(o,l){l.parentNode.insertBefore(o,l)},p.insertAfter=function(o,l){l.parentNode.insertAfter(o,l.nextSibling)},p.on(".close","click",function(){this.parentNode.classList.add("invisible")});function g(){for(var o of s.getElementsByTagName("body")[0].classList.values())if(o.endsWith("_endpoint"))return o.split("_")[0];return""}return p.endpoint=g(),p}(window,document);searxng.ready(function(){if(searxng.infinite_scroll_supported="IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype,searxng.endpoint!=="results")return;if(!searxng.infinite_scroll_supported){console.log("IntersectionObserver not supported");return}let h=document;var s=h.getElementById("results").classList.contains("only_template_images");function i(){var o=h.createElement("div");return o.classList.add("loader"),o}function p(o,l){o.textContent="",l.forEach(n=>o.appendChild(n))}function g(o){var l=h.querySelector("#pagination form.next_page");if(l){p(h.querySelector("#pagination"),[i()]);var n=new FormData(l);searxng.http("POST",h.querySelector("#search").getAttribute("action"),n).then(function(r){var t=new DOMParser().parseFromString(r,"text/html"),a=t.querySelectorAll("#urls article"),f=t.querySelector("#pagination");h.querySelector("#pagination").remove(),a.length>0&&!s&&h.querySelector("#urls").appendChild(h.createElement("hr")),a.forEach(b=>{h.querySelector("#urls").appendChild(b)}),f&&(h.querySelector("#results").appendChild(f),o())}).catch(function(r){console.log(r);var t=h.createElement("div");t.textContent=searxng.settings.translations.error_loading_next_page,t.classList.add("dialog-error"),t.setAttribute("role","alert"),p(h.querySelector("#pagination"),[t])})}}if(searxng.settings.infinite_scroll&&searxng.infinite_scroll_supported){const o={rootMargin:"20rem"},l="article.result:last-child",n=new IntersectionObserver(r=>{const t=r[0];t.isIntersecting&&(n.unobserve(t.target),g(()=>n.observe(h.querySelector(l),o)))});n.observe(h.querySelector(l),o)}});searxng.ready(function(){function h(e){for(;e!==void 0;){if(e.classList.contains("detail"))return!0;if(e.classList.contains("result"))return!1;e=e.parentNode}return!1}function s(e){for(;e!==void 0;){if(e.classList.contains("result"))return e;e=e.parentNode}}function i(e){return e&&e.classList.contains("result-images")}searxng.on(".result","click",function(e){if(!h(e.target)){l(this)(!0,!0);let u=s(e.target);i(u)&&(e.preventDefault(),searxng.selectImage(u))}}),searxng.on(".result a","focus",function(e){if(!h(e.target)){let u=s(e.target);u&&u.getAttribute("data-vim-selected")===null&&l(u)(!0),i(u)&&searxng.selectImage(u)}},!0);var p={Escape:{key:"ESC",fun:r,des:"remove focus from the focused input",cat:"Control"},c:{key:"c",fun:A,des:"copy url of the selected result to the clipboard",cat:"Results"},h:{key:"h",fun:T,des:"toggle help window",cat:"Other"},i:{key:"i",fun:m,des:"focus on the search input",cat:"Control"},n:{key:"n",fun:a(),des:"go to next page",cat:"Results"},o:{key:"o",fun:y(!1),des:"open search result",cat:"Results"},p:{key:"p",fun:f(),des:"go to previous page",cat:"Results"},r:{key:"r",fun:n,des:"reload page from the server",cat:"Control"},t:{key:"t",fun:y(!0),des:"open the result in a new tab",cat:"Results"}},g={default:Object.assign({ArrowLeft:{key:"←",fun:l("up"),des:"select previous search result",cat:"Results"},ArrowRight:{key:"→",fun:l("down"),des:"select next search result",cat:"Results"}},p),vim:Object.assign({b:{key:"b",fun:c(-window.innerHeight),des:"scroll one page up",cat:"Navigation"},f:{key:"f",fun:c(window.innerHeight),des:"scroll one page down",cat:"Navigation"},u:{key:"u",fun:c(-window.innerHeight/2),des:"scroll half a page up",cat:"Navigation"},d:{key:"d",fun:c(window.innerHeight/2),des:"scroll half a page down",cat:"Navigation"},g:{key:"g",fun:d(-document.body.scrollHeight,"top"),des:"scroll to the top of the page",cat:"Navigation"},v:{key:"v",fun:d(document.body.scrollHeight,"bottom"),des:"scroll to the bottom of the page",cat:"Navigation"},k:{key:"k",fun:l("up"),des:"select previous search result",cat:"Results"},j:{key:"j",fun:l("down"),des:"select next search result",cat:"Results"},y:{key:"y",fun:A,des:"copy url of the selected result to the clipboard",cat:"Results"}},p)},o=g[searxng.settings.hotkeys]||g.default;searxng.on(document,"keydown",function(e){if(Object.prototype.hasOwnProperty.call(o,e.key)&&!e.ctrlKey&&!e.altKey&&!e.shiftKey&&!e.metaKey){var u=e.target.tagName.toLowerCase();e.key==="Escape"?o[e.key].fun(e):(e.target===document.body||u==="a"||u==="button")&&(e.preventDefault(),o[e.key].fun())}});function l(e){return function(u,_){var E=document.querySelector(".result[data-vim-selected]"),k=e;if(E===null){if(E=document.querySelector(".result"),E===null)return;(e==="down"||e==="up")&&(k=E)}var v,w=document.querySelectorAll(".result");if(w=Array.from(w),typeof k!="string")v=k;else switch(k){case"visible":for(var q=document.documentElement.scrollTop||document.body.scrollTop,B=q+document.documentElement.clientHeight,x=0;xq)break}break;case"down":v=w[w.indexOf(E)+1]||E;break;case"up":v=w[w.indexOf(E)-1]||E;break;case"bottom":v=w[w.length-1];break;case"top":default:v=w[0]}if(v){if(E.removeAttribute("data-vim-selected"),v.setAttribute("data-vim-selected","true"),!_){var C=v.querySelector("h3 a")||v.querySelector("a");C!==null&&C.focus()}u||b()}}}function n(){document.location.reload(!0)}function r(e){const u=e.target.tagName.toLowerCase();document.activeElement&&(u==="input"||u==="select"||u==="textarea")?document.activeElement.blur():searxng.closeDetail()}function t(e){return function(){var u=document.querySelector(e);u&&u.click()}}function a(){return t('nav#pagination .next_page button[type="submit"]')}function f(){return t('nav#pagination .previous_page button[type="submit"]')}function b(){var e=document.querySelector(".result[data-vim-selected]");if(e!==null){var u=document.documentElement.scrollTop||document.body.scrollTop,_=document.documentElement.clientHeight,E=e.offsetTop,k=E+e.clientHeight,v=120;if(e.previousElementSibling===null&&k<_){window.scroll(window.scrollX,0);return}if(u>E-v)window.scroll(window.scrollX,E-v);else{var w=u+_;w a")),u!==null){var _=u.getAttribute("href");e?window.open(_):window.location.href=_}}}function S(e){var u={};for(var _ in o){var E=o[_];u[E.cat]=u[E.cat]||[],u[E.cat].push(E)}var k=Object.keys(u).sort(function(M,C){return u[C].length-u[M].length});if(k.length!==0){var v='×';v+="

    How to navigate SearXNG with hotkeys

    ",v+="";for(var w=0;w"),v+="",(!x||B)&&(v+="")}v+="
    ",v+="

    "+q[0].cat+"

    ",v+='
      ';for(var I in q)v+="
    • "+q[I].key+" "+q[I].des+"
    • ";v+="
    ",v+="
    ",e.innerHTML=v}}function T(){var e=document.querySelector("#vim-hotkeys-help");if(e==null){e=document.createElement("div"),e.id="vim-hotkeys-help",e.className="dialog-modal",S(e);var u=document.getElementsByTagName("body")[0];u.appendChild(e)}else{e.classList.toggle("invisible");return}}function A(){var e=document.querySelector(".result[data-vim-selected] h3 a");if(e===null)return;const u=e.getAttribute("href");navigator.clipboard.writeText(u)}searxng.scrollPageToSelected=b,searxng.selectNext=l("down"),searxng.selectPrevious=l("up")});(function(h,s,i){i.ready(function(){i.on(".searxng_init_map","click",function(p){this.classList.remove("searxng_init_map");var g=this.dataset.leafletTarget,o=parseFloat(this.dataset.mapLon),l=parseFloat(this.dataset.mapLat),n=parseFloat(this.dataset.mapZoom),r=JSON.parse(this.dataset.mapBoundingbox),t=JSON.parse(this.dataset.mapGeojson);i.loadStyle("css/leaflet.css"),i.loadScript("js/leaflet.js",function(){var a=null;if(r){var f=L.latLng(r[0],r[2]),b=L.latLng(r[1],r[3]);a=L.latLngBounds(f,b)}var c=L.map(g),d="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",m='Map data © OpenStreetMap contributors',y=new L.TileLayer(d,{minZoom:1,maxZoom:19,attribution:m}),S="https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png",T='Wikimedia maps | Maps data © OpenStreetMap contributors',A=new L.TileLayer(S,{minZoom:1,maxZoom:19,attribution:T});a?setTimeout(function(){c.fitBounds(a,{maxZoom:17})},0):o&&l&&(n?c.setView(new L.latLng(l,o),n):c.setView(new L.latLng(l,o),8)),c.addLayer(y);var e={"OSM Mapnik":y,"OSM Wikimedia":A};L.control.layers(e).addTo(c),t&&L.geoJson(t).addTo(c)}),p.preventDefault()})})})(window,document,window.searxng);(function(h,s,i){i.endpoint==="preferences"&&i.ready(function(){let p=null;function g(){p==null&&i.http("GET","engine_descriptions.json").then(function(a){p=JSON.parse(a);for(const[f,b]of Object.entries(p)){let c=s.querySelectorAll('[data-engine-name="'+f+'"] .engine-description');for(const d of c){let m=" ("+i.settings.translations.Source+": "+b[1]+")";d.innerHTML=b[0]+m}}})}for(const a of s.querySelectorAll("[data-engine-name]"))i.on(a,"mouseenter",g);const o=s.querySelectorAll(".enable-all-engines"),l=s.querySelectorAll(".disable-all-engines"),n=s.querySelectorAll("tbody input[type=checkbox][class~=checkbox-onoff]"),r=a=>{for(const f of n)f.offsetParent!==null&&(f.checked=!a)};for(const a of o)i.on(a,"click",()=>r(!0));for(const a of l)i.on(a,"click",()=>r(!1));const t=s.querySelector("#copy-hash");i.on(t,"click",a=>{a.preventDefault(),navigator.clipboard.writeText(t.dataset.hash),t.innerText=t.dataset.copiedText})})})(window,document,window.searxng);/*! + */window.searxng=function(h,s){h.Element&&function(n){n.matches=n.matches||n.matchesSelector||n.webkitMatchesSelector||n.msMatchesSelector||function(l){for(var t=this,r=(t.parentNode||t.document).querySelectorAll(l),o=-1;r[++o]&&r[o]!=t;);return!!r[o]}}(Element.prototype);function a(n,l,t){try{n.call(l,t)}catch(r){console.log(r)}}var f=window.searxng||{};f.on=function(n,l,t,r){r=r||!1,typeof n!="string"?n.addEventListener(l,t,r):s.addEventListener(l,function(o){for(var i=o.target||o.srcElement,p=!1;i&&i.matches&&i!==s&&!(p=i.matches(n));)i=i.parentElement;p&&a(t,i,o)},r)},f.ready=function(n){document.readyState!="loading"?n.call(h):h.addEventListener("DOMContentLoaded",n.bind(h))},f.http=function(n,l,t=null){return new Promise(function(r,o){try{var i=new XMLHttpRequest;i.open(n,l,!0),i.timeout=2e4,i.onload=function(){i.status==200?r(i.response,i.responseType):o(Error(i.statusText))},i.onerror=function(){o(Error("Network Error"))},i.onabort=function(){o(Error("Transaction is aborted"))},i.ontimeout=function(){o(Error("Timeout"))},t?i.send(t):i.send()}catch(p){o(p)}})},f.loadStyle=function(n){var l=f.settings.theme_static_path+"/"+n,t="style_"+n.replace(".","_"),r=s.getElementById(t);r===null&&(r=s.createElement("link"),r.setAttribute("id",t),r.setAttribute("rel","stylesheet"),r.setAttribute("type","text/css"),r.setAttribute("href",l),s.body.appendChild(r))},f.loadScript=function(n,l){var t=f.settings.theme_static_path+"/"+n,r="script_"+n.replace(".","_"),o=s.getElementById(r);if(o===null)o=s.createElement("script"),o.setAttribute("id",r),o.setAttribute("src",t),o.onload=l,o.onerror=function(){o.setAttribute("error","1")},s.body.appendChild(o);else if(o.hasAttribute("error"))console.log("callback not executed : script '"+t+"' not loaded.");else try{l.apply(o,[])}catch(i){console.log(i)}},f.insertBefore=function(n,l){l.parentNode.insertBefore(n,l)},f.insertAfter=function(n,l){l.parentNode.insertAfter(n,l.nextSibling)},f.on(".close","click",function(){this.parentNode.classList.add("invisible")});function m(){for(var n of s.getElementsByTagName("body")[0].classList.values())if(n.endsWith("_endpoint"))return n.split("_")[0];return""}return f.endpoint=m(),f}(window,document);searxng.ready(function(){if(searxng.infinite_scroll_supported="IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype,searxng.endpoint!=="results")return;if(!searxng.infinite_scroll_supported){console.log("IntersectionObserver not supported");return}let h=document;var s=h.getElementById("results").classList.contains("only_template_images");function a(){var n=h.createElement("div");return n.classList.add("loader"),n}function f(n,l){n.textContent="",l.forEach(t=>n.appendChild(t))}function m(n){var l=h.querySelector("#pagination form.next_page");if(l){f(h.querySelector("#pagination"),[a()]);var t=new FormData(l);searxng.http("POST",h.querySelector("#search").getAttribute("action"),t).then(function(r){var o=new DOMParser().parseFromString(r,"text/html"),i=o.querySelectorAll("#urls article"),p=o.querySelector("#pagination");h.querySelector("#pagination").remove(),i.length>0&&!s&&h.querySelector("#urls").appendChild(h.createElement("hr")),i.forEach(b=>{h.querySelector("#urls").appendChild(b)}),p&&(h.querySelector("#results").appendChild(p),n())}).catch(function(r){console.log(r);var o=h.createElement("div");o.textContent=searxng.settings.translations.error_loading_next_page,o.classList.add("dialog-error"),o.setAttribute("role","alert"),f(h.querySelector("#pagination"),[o])})}}if(searxng.settings.infinite_scroll&&searxng.infinite_scroll_supported){const n={rootMargin:"20rem"},l="article.result:last-child",t=new IntersectionObserver(r=>{const o=r[0];o.isIntersecting&&(t.unobserve(o.target),m(()=>t.observe(h.querySelector(l),n)))});t.observe(h.querySelector(l),n)}});searxng.ready(function(){function h(e){for(;e!==void 0;){if(e.classList.contains("detail"))return!0;if(e.classList.contains("result"))return!1;e=e.parentNode}return!1}function s(e){for(;e!==void 0;){if(e.classList.contains("result"))return e;e=e.parentNode}}function a(e){return e&&e.classList.contains("result-images")}searxng.on(".result","click",function(e){if(!h(e.target)){l(this)(!0,!0);let u=s(e.target);a(u)&&(e.preventDefault(),searxng.selectImage(u))}}),searxng.on(".result a","focus",function(e){if(!h(e.target)){let u=s(e.target);u&&u.getAttribute("data-vim-selected")===null&&l(u)(!0),a(u)&&searxng.selectImage(u)}},!0);var f={Escape:{key:"ESC",fun:r,des:"remove focus from the focused input",cat:"Control"},c:{key:"c",fun:A,des:"copy url of the selected result to the clipboard",cat:"Results"},h:{key:"h",fun:w,des:"toggle help window",cat:"Other"},i:{key:"i",fun:g,des:"focus on the search input",cat:"Control"},n:{key:"n",fun:i(),des:"go to next page",cat:"Results"},o:{key:"o",fun:v(!1),des:"open search result",cat:"Results"},p:{key:"p",fun:p(),des:"go to previous page",cat:"Results"},r:{key:"r",fun:t,des:"reload page from the server",cat:"Control"},t:{key:"t",fun:v(!0),des:"open the result in a new tab",cat:"Results"}},m={default:Object.assign({ArrowLeft:{key:"←",fun:l("up"),des:"select previous search result",cat:"Results"},ArrowRight:{key:"→",fun:l("down"),des:"select next search result",cat:"Results"}},f),vim:Object.assign({b:{key:"b",fun:c(-window.innerHeight),des:"scroll one page up",cat:"Navigation"},f:{key:"f",fun:c(window.innerHeight),des:"scroll one page down",cat:"Navigation"},u:{key:"u",fun:c(-window.innerHeight/2),des:"scroll half a page up",cat:"Navigation"},d:{key:"d",fun:c(window.innerHeight/2),des:"scroll half a page down",cat:"Navigation"},g:{key:"g",fun:d(-document.body.scrollHeight,"top"),des:"scroll to the top of the page",cat:"Navigation"},v:{key:"v",fun:d(document.body.scrollHeight,"bottom"),des:"scroll to the bottom of the page",cat:"Navigation"},k:{key:"k",fun:l("up"),des:"select previous search result",cat:"Results"},j:{key:"j",fun:l("down"),des:"select next search result",cat:"Results"},y:{key:"y",fun:A,des:"copy url of the selected result to the clipboard",cat:"Results"}},f)},n=m[searxng.settings.hotkeys]||m.default;searxng.on(document,"keydown",function(e){if(Object.prototype.hasOwnProperty.call(n,e.key)&&!e.ctrlKey&&!e.altKey&&!e.shiftKey&&!e.metaKey){var u=e.target.tagName.toLowerCase();e.key==="Escape"?n[e.key].fun(e):(e.target===document.body||u==="a"||u==="button")&&(e.preventDefault(),n[e.key].fun())}});function l(e){return function(u,_){var k=document.querySelector(".result[data-vim-selected]"),T=e;if(k===null){if(k=document.querySelector(".result"),k===null)return;(e==="down"||e==="up")&&(T=k)}var y,S=document.querySelectorAll(".result");if(S=Array.from(S),typeof T!="string")y=T;else switch(T){case"visible":for(var q=document.documentElement.scrollTop||document.body.scrollTop,B=q+document.documentElement.clientHeight,x=0;xq)break}break;case"down":y=S[S.indexOf(k)+1]||k;break;case"up":y=S[S.indexOf(k)-1]||k;break;case"bottom":y=S[S.length-1];break;case"top":default:y=S[0]}if(y){if(k.removeAttribute("data-vim-selected"),y.setAttribute("data-vim-selected","true"),!_){var C=y.querySelector("h3 a")||y.querySelector("a");C!==null&&C.focus()}u||b()}}}function t(){document.location.reload(!0)}function r(e){const u=e.target.tagName.toLowerCase();document.activeElement&&(u==="input"||u==="select"||u==="textarea")?document.activeElement.blur():searxng.closeDetail()}function o(e){return function(){var u=document.querySelector(e);u&&u.click()}}function i(){return o('nav#pagination .next_page button[type="submit"]')}function p(){return o('nav#pagination .previous_page button[type="submit"]')}function b(){var e=document.querySelector(".result[data-vim-selected]");if(e!==null){var u=document.documentElement.scrollTop||document.body.scrollTop,_=document.documentElement.clientHeight,k=e.offsetTop,T=k+e.clientHeight,y=120;if(e.previousElementSibling===null&&T<_){window.scroll(window.scrollX,0);return}if(u>k-y)window.scroll(window.scrollX,k-y);else{var S=u+_;S a")),u!==null){var _=u.getAttribute("href");e?window.open(_):window.location.href=_}}}function E(e){var u={};for(var _ in n){var k=n[_];u[k.cat]=u[k.cat]||[],u[k.cat].push(k)}var T=Object.keys(u).sort(function(M,C){return u[C].length-u[M].length});if(T.length!==0){var y='×';y+="

    How to navigate SearXNG with hotkeys

    ",y+="";for(var S=0;S"),y+="",(!x||B)&&(y+="")}y+="
    ",y+="

    "+q[0].cat+"

    ",y+='
      ';for(var I in q)y+="
    • "+q[I].key+" "+q[I].des+"
    • ";y+="
    ",y+="
    ",e.innerHTML=y}}function w(){var e=document.querySelector("#vim-hotkeys-help");if(e==null){e=document.createElement("div"),e.id="vim-hotkeys-help",e.className="dialog-modal",E(e);var u=document.getElementsByTagName("body")[0];u.appendChild(e)}else{e.classList.toggle("invisible");return}}function A(){var e=document.querySelector(".result[data-vim-selected] h3 a");if(e===null)return;const u=e.getAttribute("href");navigator.clipboard.writeText(u)}searxng.scrollPageToSelected=b,searxng.selectNext=l("down"),searxng.selectPrevious=l("up")});(function(h,s,a){a.ready(function(){a.on(".searxng_init_map","click",function(f){this.classList.remove("searxng_init_map");var m=this.dataset.leafletTarget,n=parseFloat(this.dataset.mapLon),l=parseFloat(this.dataset.mapLat),t=parseFloat(this.dataset.mapZoom),r=JSON.parse(this.dataset.mapBoundingbox),o=JSON.parse(this.dataset.mapGeojson);a.loadStyle("css/leaflet.css"),a.loadScript("js/leaflet.js",function(){var i=null;if(r){var p=L.latLng(r[0],r[2]),b=L.latLng(r[1],r[3]);i=L.latLngBounds(p,b)}var c=L.map(m),d="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",g='Map data © OpenStreetMap contributors',v=new L.TileLayer(d,{minZoom:1,maxZoom:19,attribution:g}),E="https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png",w='Wikimedia maps | Maps data © OpenStreetMap contributors',A=new L.TileLayer(E,{minZoom:1,maxZoom:19,attribution:w});i?setTimeout(function(){c.fitBounds(i,{maxZoom:17})},0):n&&l&&(t?c.setView(new L.latLng(l,n),t):c.setView(new L.latLng(l,n),8)),c.addLayer(v);var e={"OSM Mapnik":v,"OSM Wikimedia":A};L.control.layers(e).addTo(c),o&&L.geoJson(o).addTo(c)}),f.preventDefault()})})})(window,document,window.searxng);(function(h,s,a){a.endpoint==="preferences"&&a.ready(function(){let f=null;function m(){f==null&&a.http("GET","engine_descriptions.json").then(function(i){f=JSON.parse(i);for(const[p,b]of Object.entries(f)){let c=s.querySelectorAll('[data-engine-name="'+p+'"] .engine-description');for(const d of c){let g=" ("+a.settings.translations.Source+": "+b[1]+")";d.innerHTML=b[0]+g}}})}for(const i of s.querySelectorAll("[data-engine-name]"))a.on(i,"mouseenter",m);const n=s.querySelectorAll(".enable-all-engines"),l=s.querySelectorAll(".disable-all-engines"),t=s.querySelectorAll("tbody input[type=checkbox][class~=checkbox-onoff]"),r=i=>{for(const p of t)p.offsetParent!==null&&(p.checked=!i)};for(const i of n)a.on(i,"click",()=>r(!0));for(const i of l)a.on(i,"click",()=>r(!1));const o=s.querySelector("#copy-hash");a.on(o,"click",i=>{i.preventDefault(),navigator.clipboard.writeText(o.dataset.hash),o.innerText=o.dataset.copiedText})})})(window,document,window.searxng);/*! * swiped-events.js - v@version@ * Pure JavaScript swipe events * https://github.com/john-doherty/swiped-events * @inspiration https://stackoverflow.com/questions/16348031/disable-scrolling-when-touch-moving-certain-element * @author John Doherty * @license MIT - */(function(h,s){typeof h.CustomEvent!="function"&&(h.CustomEvent=function(c,d){d=d||{bubbles:!1,cancelable:!1,detail:void 0};var m=s.createEvent("CustomEvent");return m.initCustomEvent(c,d.bubbles,d.cancelable,d.detail),m},h.CustomEvent.prototype=h.Event.prototype),s.addEventListener("touchstart",a,!1),s.addEventListener("touchmove",f,!1),s.addEventListener("touchend",t,!1);var i=null,p=null,g=null,o=null,l=null,n=null,r=0;function t(c){if(n===c.target){var d=parseInt(b(n,"data-swipe-threshold","20"),10),m=b(n,"data-swipe-unit","px"),y=parseInt(b(n,"data-swipe-timeout","500"),10),S=Date.now()-l,T="",A=c.changedTouches||c.touches||[];if(m==="vh"&&(d=Math.round(d/100*s.documentElement.clientHeight)),m==="vw"&&(d=Math.round(d/100*s.documentElement.clientWidth)),Math.abs(g)>Math.abs(o)?Math.abs(g)>d&&S0?T="swiped-left":T="swiped-right"):Math.abs(o)>d&&S0?T="swiped-up":T="swiped-down"),T!==""){var e={dir:T.replace(/swiped-/,""),touchType:(A[0]||{}).touchType||"direct",fingers:r,xStart:parseInt(i,10),xEnd:parseInt((A[0]||{}).clientX||-1,10),yStart:parseInt(p,10),yEnd:parseInt((A[0]||{}).clientY||-1,10)};n.dispatchEvent(new CustomEvent("swiped",{bubbles:!0,cancelable:!0,detail:e})),n.dispatchEvent(new CustomEvent(T,{bubbles:!0,cancelable:!0,detail:e}))}i=null,p=null,l=null}}function a(c){c.target.getAttribute("data-swipe-ignore")!=="true"&&(n=c.target,l=Date.now(),i=c.touches[0].clientX,p=c.touches[0].clientY,g=0,o=0,r=c.touches.length)}function f(c){if(!(!i||!p)){var d=c.touches[0].clientX,m=c.touches[0].clientY;g=i-d,o=p-m}}function b(c,d,m){for(;c&&c!==s.documentElement;){var y=c.getAttribute(d);if(y)return y;c=c.parentNode}return m}})(window,document);(function(h,s,i){i.endpoint==="results"&&i.ready(function(){s.querySelectorAll("#urls img").forEach(n=>n.addEventListener("error",()=>{n.src=window.searxng.settings.theme_static_path+"/img/img_load_error.svg"},{once:!0})),s.querySelector("#search_url button#copy_url")&&(s.querySelector("#search_url button#copy_url").style.display="block"),i.on(".btn-collapse","click",function(){var n=this.getAttribute("data-btn-text-collapsed"),r=this.getAttribute("data-btn-text-not-collapsed"),t=this.getAttribute("data-target"),a=s.querySelector(t),f=this.innerHTML;this.classList.contains("collapsed")?f=f.replace(n,r):f=f.replace(r,n),this.innerHTML=f,this.classList.toggle("collapsed"),a.classList.toggle("invisible")}),i.on(".media-loader","click",function(){var n=this.getAttribute("data-target"),r=s.querySelector(n+" > iframe"),t=r.getAttribute("src");(t==null||t===!1)&&r.setAttribute("src",r.getAttribute("data-src"))}),i.on("#copy_url","click",function(){var n=this.parentElement.querySelector("pre");navigator.clipboard.writeText(n.innerText),this.innerText=this.dataset.copiedText});let p;const g=s.createElement("div");g.classList.add("loader");const o=new Image,l=(n,r)=>{p&&clearTimeout(p),p=setTimeout(()=>{o.src=n},1e3),o.onload=()=>{r(),g.remove()},o.onerror=()=>{g.remove()}};i.selectImage=n=>{if(s.getElementById("results").classList.add("image-detail-open"),window.location.hash="#image-viewer",i.scrollPageToSelected(),!n)return;const r=n.querySelector(".result-images-source img");if(!r)return;const t=r.getAttribute("data-src");if(!t)return;const a=n.querySelector(".image_thumbnail");r.src=a.src,n.querySelector(".detail").appendChild(g),l(t,()=>{r.src=t,r.removeAttribute("data-src")})},i.closeDetail=function(){s.getElementById("results").classList.remove("image-detail-open"),window.location.hash=="#image-viewer"&&window.history.back(),i.scrollPageToSelected()},i.on(".result-detail-close","click",n=>{n.preventDefault(),i.closeDetail()}),i.on(".result-detail-previous","click",n=>{n.preventDefault(),i.selectPrevious(!1)}),i.on(".result-detail-next","click",n=>{n.preventDefault(),i.selectNext(!1)}),window.addEventListener("hashchange",()=>{window.location.hash!="#image-viewer"&&i.closeDetail()}),s.querySelectorAll(".swipe-horizontal").forEach(n=>{n.addEventListener("swiped-left",function(){i.selectNext(!1)}),n.addEventListener("swiped-right",function(){i.selectPrevious(!1)})}),h.addEventListener("scroll",function(){var n=s.getElementById("backToTop"),r=document.documentElement.scrollTop||document.body.scrollTop,t=s.getElementById("results");n!==null&&(r>=100?t.classList.add("scrolling"):t.classList.remove("scrolling"))},!0)})})(window,document,window.searxng);(function(h,s,i){var p="q",g;const o=window.matchMedia("only screen and (max-width: 50em)").matches;function l(){if(g.value.length>0){var t=document.getElementById("search");setTimeout(t.submit.bind(t),0)}}function n(t){var a=document.getElementById("clear_search"),f=function(){t.value.length===0?a.classList.add("empty"):a.classList.remove("empty")};f(),a.addEventListener("click",function(b){t.value="",t.focus(),f(),b.preventDefault()}),t.addEventListener("input",f,!1)}const r=async t=>{let a;if(i.settings.method==="GET"){const f=new URLSearchParams;f.append("q",t),a=fetch("./autocompleter?"+f.toString())}else{const f=new FormData;f.append("q",t),a=fetch("./autocompleter",{method:"POST",body:f})}a.then(async function(f){const b=await f.json();if(!b)return;const c=s.querySelector(".autocomplete"),d=s.querySelector(".autocomplete ul");if(c.classList.add("open"),d.innerHTML="",!b[1]||b[1].length==0){const m=document.createElement("li");m.classList.add("no-item-found"),m.innerHTML=i.settings.translations.no_item_found,d.appendChild(m);return}for(let m of b[1]){const y=document.createElement("li");y.innerText=m,i.on(y,"mousedown",()=>{g.value=m,s.querySelector("#search").submit(),c.classList.remove("open")}),d.appendChild(y)}})};i.ready(function(){o||document.getElementById("q").focus(),g=s.getElementById(p);const t=s.querySelector(".autocomplete"),a=s.querySelector(".autocomplete ul");g!==null&&(n(g),i.settings.autocomplete&&(i.on(g,"input",()=>{const c=g.value;c.length{c==g.value&&r(c)},300)}),i.on(g,"keyup",c=>{let d=-1;const m=a.children;for(let S=0;S=0&&m[d].classList.remove("active"),y=(d-1+m.length)%m.length):c.key==="ArrowDown"?(d>=0&&m[d].classList.remove("active"),y=(d+1)%m.length):(c.key==="Tab"||c.key==="Enter")&&t.classList.remove("open"),y!=-1){const S=m[y];S.classList.add("active"),S.classList.contains("no-item-found")||(g.value=S.innerText)}}))),g!==null&&i.settings.search_on_category_select&&s.querySelector(".search_filters")!=null&&(i.on(s.getElementById("safesearch"),"change",l),i.on(s.getElementById("time_range"),"change",l),i.on(s.getElementById("language"),"change",l));const f=s.querySelectorAll("button.category_button");for(let c of f)i.on(c,"click",d=>{if(d.shiftKey){d.preventDefault(),c.classList.toggle("selected");return}const m=s.querySelectorAll("button.category_button.selected");for(let y of m)y.classList.remove("selected");c.classList.add("selected")});const b=s.querySelector("#search");b!=null&&i.on(b,"submit",c=>{c.preventDefault();const d=s.querySelector("#selected-categories");if(d){let m=[];for(let y of f)y.classList.contains("selected")&&m.push(y.name.replace("category_",""));d.value=m.join(",")}b.submit()})})})(window,document,window.searxng); + */(function(h,s){typeof h.CustomEvent!="function"&&(h.CustomEvent=function(c,d){d=d||{bubbles:!1,cancelable:!1,detail:void 0};var g=s.createEvent("CustomEvent");return g.initCustomEvent(c,d.bubbles,d.cancelable,d.detail),g},h.CustomEvent.prototype=h.Event.prototype),s.addEventListener("touchstart",i,!1),s.addEventListener("touchmove",p,!1),s.addEventListener("touchend",o,!1);var a=null,f=null,m=null,n=null,l=null,t=null,r=0;function o(c){if(t===c.target){var d=parseInt(b(t,"data-swipe-threshold","20"),10),g=b(t,"data-swipe-unit","px"),v=parseInt(b(t,"data-swipe-timeout","500"),10),E=Date.now()-l,w="",A=c.changedTouches||c.touches||[];if(g==="vh"&&(d=Math.round(d/100*s.documentElement.clientHeight)),g==="vw"&&(d=Math.round(d/100*s.documentElement.clientWidth)),Math.abs(m)>Math.abs(n)?Math.abs(m)>d&&E0?w="swiped-left":w="swiped-right"):Math.abs(n)>d&&E0?w="swiped-up":w="swiped-down"),w!==""){var e={dir:w.replace(/swiped-/,""),touchType:(A[0]||{}).touchType||"direct",fingers:r,xStart:parseInt(a,10),xEnd:parseInt((A[0]||{}).clientX||-1,10),yStart:parseInt(f,10),yEnd:parseInt((A[0]||{}).clientY||-1,10)};t.dispatchEvent(new CustomEvent("swiped",{bubbles:!0,cancelable:!0,detail:e})),t.dispatchEvent(new CustomEvent(w,{bubbles:!0,cancelable:!0,detail:e}))}a=null,f=null,l=null}}function i(c){c.target.getAttribute("data-swipe-ignore")!=="true"&&(t=c.target,l=Date.now(),a=c.touches[0].clientX,f=c.touches[0].clientY,m=0,n=0,r=c.touches.length)}function p(c){if(!(!a||!f)){var d=c.touches[0].clientX,g=c.touches[0].clientY;m=a-d,n=f-g}}function b(c,d,g){for(;c&&c!==s.documentElement;){var v=c.getAttribute(d);if(v)return v;c=c.parentNode}return g}})(window,document);(function(h,s,a){a.endpoint==="results"&&a.ready(function(){s.querySelectorAll("#urls img").forEach(t=>t.addEventListener("error",()=>{t.src=window.searxng.settings.theme_static_path+"/img/img_load_error.svg"},{once:!0})),s.querySelector("#search_url button#copy_url")&&(s.querySelector("#search_url button#copy_url").style.display="block"),a.on(".btn-collapse","click",function(){var t=this.getAttribute("data-btn-text-collapsed"),r=this.getAttribute("data-btn-text-not-collapsed"),o=this.getAttribute("data-target"),i=s.querySelector(o),p=this.innerHTML;this.classList.contains("collapsed")?p=p.replace(t,r):p=p.replace(r,t),this.innerHTML=p,this.classList.toggle("collapsed"),i.classList.toggle("invisible")}),a.on(".media-loader","click",function(){var t=this.getAttribute("data-target"),r=s.querySelector(t+" > iframe"),o=r.getAttribute("src");(o==null||o===!1)&&r.setAttribute("src",r.getAttribute("data-src"))}),a.on("#copy_url","click",function(){var t=this.parentElement.querySelector("pre");navigator.clipboard.writeText(t.innerText),this.innerText=this.dataset.copiedText});let f;const m=s.createElement("div");m.classList.add("loader");const n=new Image,l=(t,r)=>{f&&clearTimeout(f),f=setTimeout(()=>{n.src=t},1e3),n.onload=()=>{r(),m.remove()},n.onerror=()=>{m.remove()}};a.selectImage=t=>{if(s.getElementById("results").classList.add("image-detail-open"),window.location.hash="#image-viewer",a.scrollPageToSelected(),!t)return;const r=t.querySelector(".result-images-source img");if(!r)return;const o=r.getAttribute("data-src");if(!o)return;const i=t.querySelector(".image_thumbnail");r.src=i.src,t.querySelector(".detail").appendChild(m),l(o,()=>{r.src=o,r.removeAttribute("data-src")})},a.closeDetail=function(){s.getElementById("results").classList.remove("image-detail-open"),window.location.hash=="#image-viewer"&&window.history.back(),a.scrollPageToSelected()},a.on(".result-detail-close","click",t=>{t.preventDefault(),a.closeDetail()}),a.on(".result-detail-previous","click",t=>{t.preventDefault(),a.selectPrevious(!1)}),a.on(".result-detail-next","click",t=>{t.preventDefault(),a.selectNext(!1)}),window.addEventListener("hashchange",()=>{window.location.hash!="#image-viewer"&&a.closeDetail()}),s.querySelectorAll(".swipe-horizontal").forEach(t=>{t.addEventListener("swiped-left",function(){a.selectNext(!1)}),t.addEventListener("swiped-right",function(){a.selectPrevious(!1)})}),h.addEventListener("scroll",function(){var t=s.getElementById("backToTop"),r=document.documentElement.scrollTop||document.body.scrollTop,o=s.getElementById("results");t!==null&&(r>=100?o.classList.add("scrolling"):o.classList.remove("scrolling"))},!0)})})(window,document,window.searxng);(function(h,s,a){var f="q",m;const n=window.matchMedia("only screen and (max-width: 50em)").matches,l=document.querySelector("main").id=="main_results";function t(){if(m.value.length>0){var i=document.getElementById("search");setTimeout(i.submit.bind(i),0)}}function r(i){var p=document.getElementById("clear_search"),b=function(){i.value.length===0?p.classList.add("empty"):p.classList.remove("empty")};b(),p.addEventListener("click",function(c){i.value="",i.focus(),b(),c.preventDefault()}),i.addEventListener("input",b,!1)}const o=async i=>{let p;if(a.settings.method==="GET"){const b=new URLSearchParams;b.append("q",i),p=fetch("./autocompleter?"+b.toString())}else{const b=new FormData;b.append("q",i),p=fetch("./autocompleter",{method:"POST",body:b})}p.then(async function(b){const c=await b.json();if(!c)return;const d=s.querySelector(".autocomplete"),g=s.querySelector(".autocomplete ul");if(d.classList.add("open"),g.innerHTML="",!c[1]||c[1].length==0){const v=document.createElement("li");v.classList.add("no-item-found"),v.innerHTML=a.settings.translations.no_item_found,g.appendChild(v);return}for(let v of c[1]){const E=document.createElement("li");E.innerText=v,a.on(E,"mousedown",()=>{m.value=v,s.querySelector("#search").submit(),d.classList.remove("open")}),g.appendChild(E)}})};a.ready(function(){!n&&!l&&document.getElementById("q").focus(),m=s.getElementById(f);const i=s.querySelector(".autocomplete"),p=s.querySelector(".autocomplete ul");m!==null&&(r(m),a.settings.autocomplete&&(a.on(m,"input",()=>{const d=m.value;d.length{d==m.value&&o(d)},300)}),a.on(m,"keyup",d=>{let g=-1;const v=p.children;for(let w=0;w=0&&v[g].classList.remove("active"),E=(g-1+v.length)%v.length):d.key==="ArrowDown"?(g>=0&&v[g].classList.remove("active"),E=(g+1)%v.length):(d.key==="Tab"||d.key==="Enter")&&i.classList.remove("open"),E!=-1){const w=v[E];w.classList.add("active"),w.classList.contains("no-item-found")||(m.value=w.innerText)}}))),m!==null&&a.settings.search_on_category_select&&s.querySelector(".search_filters")!=null&&(a.on(s.getElementById("safesearch"),"change",t),a.on(s.getElementById("time_range"),"change",t),a.on(s.getElementById("language"),"change",t));const b=s.querySelectorAll("button.category_button");for(let d of b)a.on(d,"click",g=>{if(g.shiftKey){g.preventDefault(),d.classList.toggle("selected");return}const v=s.querySelectorAll("button.category_button.selected");for(let E of v)E.classList.remove("selected");d.classList.add("selected")});const c=s.querySelector("#search");c!=null&&a.on(c,"submit",d=>{d.preventDefault();const g=s.querySelector("#selected-categories");if(g){let v=[];for(let E of b)E.classList.contains("selected")&&v.push(E.name.replace("category_",""));g.value=v.join(",")}c.submit()})})})(window,document,window.searxng); //# sourceMappingURL=searxng.min.js.map diff --git a/searx/static/themes/simple/js/searxng.min.js.map b/searx/static/themes/simple/js/searxng.min.js.map index f454d84c0..551c8741c 100644 --- a/searx/static/themes/simple/js/searxng.min.js.map +++ b/searx/static/themes/simple/js/searxng.min.js.map @@ -1 +1 @@ -{"version":3,"file":"searxng.min.js","sources":["../../../../../client/simple/src/js/main/00_toolkit.js","../../../../../client/simple/src/js/main/infinite_scroll.js","../../../../../client/simple/src/js/main/keyboard.js","../../../../../client/simple/src/js/main/mapresult.js","../../../../../client/simple/src/js/main/preferences.js","../../../../../client/simple/node_modules/swiped-events/src/swiped-events.js","../../../../../client/simple/src/js/main/results.js","../../../../../client/simple/src/js/main/search.js"],"sourcesContent":["/**\n * @license\n * (C) Copyright Contributors to the SearXNG project.\n * (C) Copyright Contributors to the searx project (2014 - 2021).\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nwindow.searxng = (function (w, d) {\n\n 'use strict';\n\n // not invented here toolkit with bugs fixed elsewhere\n // purposes : be just good enough and as small as possible\n\n // from https://plainjs.com/javascript/events/live-binding-event-handlers-14/\n if (w.Element) {\n (function (ElementPrototype) {\n ElementPrototype.matches = ElementPrototype.matches ||\n ElementPrototype.matchesSelector ||\n ElementPrototype.webkitMatchesSelector ||\n ElementPrototype.msMatchesSelector ||\n function (selector) {\n var node = this, nodes = (node.parentNode || node.document).querySelectorAll(selector), i = -1;\n while (nodes[++i] && nodes[i] != node);\n return !!nodes[i];\n };\n })(Element.prototype);\n }\n\n function callbackSafe (callback, el, e) {\n try {\n callback.call(el, e);\n } catch (exception) {\n console.log(exception);\n }\n }\n\n var searxng = window.searxng || {};\n\n searxng.on = function (obj, eventType, callback, useCapture) {\n useCapture = useCapture || false;\n if (typeof obj !== 'string') {\n // obj HTMLElement, HTMLDocument\n obj.addEventListener(eventType, callback, useCapture);\n } else {\n // obj is a selector\n d.addEventListener(eventType, function (e) {\n var el = e.target || e.srcElement, found = false;\n while (el && el.matches && el !== d && !(found = el.matches(obj))) el = el.parentElement;\n if (found) callbackSafe(callback, el, e);\n }, useCapture);\n }\n };\n\n searxng.ready = function (callback) {\n if (document.readyState != 'loading') {\n callback.call(w);\n } else {\n w.addEventListener('DOMContentLoaded', callback.bind(w));\n }\n };\n\n searxng.http = function (method, url, data = null) {\n return new Promise(function (resolve, reject) {\n try {\n var req = new XMLHttpRequest();\n req.open(method, url, true);\n req.timeout = 20000;\n\n // On load\n req.onload = function () {\n if (req.status == 200) {\n resolve(req.response, req.responseType);\n } else {\n reject(Error(req.statusText));\n }\n };\n\n // Handle network errors\n req.onerror = function () {\n reject(Error(\"Network Error\"));\n };\n\n req.onabort = function () {\n reject(Error(\"Transaction is aborted\"));\n };\n\n req.ontimeout = function () {\n reject(Error(\"Timeout\"));\n }\n\n // Make the request\n if (data) {\n req.send(data)\n } else {\n req.send();\n }\n } catch (ex) {\n reject(ex);\n }\n });\n };\n\n searxng.loadStyle = function (src) {\n var path = searxng.settings.theme_static_path + \"/\" + src,\n id = \"style_\" + src.replace('.', '_'),\n s = d.getElementById(id);\n if (s === null) {\n s = d.createElement('link');\n s.setAttribute('id', id);\n s.setAttribute('rel', 'stylesheet');\n s.setAttribute('type', 'text/css');\n s.setAttribute('href', path);\n d.body.appendChild(s);\n }\n };\n\n searxng.loadScript = function (src, callback) {\n var path = searxng.settings.theme_static_path + \"/\" + src,\n id = \"script_\" + src.replace('.', '_'),\n s = d.getElementById(id);\n if (s === null) {\n s = d.createElement('script');\n s.setAttribute('id', id);\n s.setAttribute('src', path);\n s.onload = callback;\n s.onerror = function () {\n s.setAttribute('error', '1');\n };\n d.body.appendChild(s);\n } else if (!s.hasAttribute('error')) {\n try {\n callback.apply(s, []);\n } catch (exception) {\n console.log(exception);\n }\n } else {\n console.log(\"callback not executed : script '\" + path + \"' not loaded.\");\n }\n };\n\n searxng.insertBefore = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode);\n };\n\n searxng.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertAfter(newNode, referenceNode.nextSibling);\n };\n\n searxng.on('.close', 'click', function () {\n this.parentNode.classList.add('invisible');\n });\n\n function getEndpoint () {\n for (var className of d.getElementsByTagName('body')[0].classList.values()) {\n if (className.endsWith('_endpoint')) {\n return className.split('_')[0];\n }\n }\n return '';\n }\n\n searxng.endpoint = getEndpoint();\n\n return searxng;\n})(window, document);\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n\n/* global searxng */\n\nsearxng.ready(function () {\n 'use strict';\n\n searxng.infinite_scroll_supported = (\n 'IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype);\n\n if (searxng.endpoint !== 'results') {\n return;\n }\n\n if (!searxng.infinite_scroll_supported) {\n console.log('IntersectionObserver not supported');\n return;\n }\n\n let d = document;\n var onlyImages = d.getElementById('results').classList.contains('only_template_images');\n\n function newLoadSpinner () {\n var loader = d.createElement('div');\n loader.classList.add('loader');\n return loader;\n }\n\n function replaceChildrenWith (element, children) {\n element.textContent = '';\n children.forEach(child => element.appendChild(child));\n }\n\n function loadNextPage (callback) {\n var form = d.querySelector('#pagination form.next_page');\n if (!form) {\n return\n }\n replaceChildrenWith(d.querySelector('#pagination'), [ newLoadSpinner() ]);\n var formData = new FormData(form);\n searxng.http('POST', d.querySelector('#search').getAttribute('action'), formData).then(\n function (response) {\n var nextPageDoc = new DOMParser().parseFromString(response, 'text/html');\n var articleList = nextPageDoc.querySelectorAll('#urls article');\n var paginationElement = nextPageDoc.querySelector('#pagination');\n d.querySelector('#pagination').remove();\n if (articleList.length > 0 && !onlyImages) {\n // do not add
    element when there are only images\n d.querySelector('#urls').appendChild(d.createElement('hr'));\n }\n articleList.forEach(articleElement => {\n d.querySelector('#urls').appendChild(articleElement);\n });\n if (paginationElement) {\n d.querySelector('#results').appendChild(paginationElement);\n callback();\n }\n }\n ).catch(\n function (err) {\n console.log(err);\n var e = d.createElement('div');\n e.textContent = searxng.settings.translations.error_loading_next_page;\n e.classList.add('dialog-error');\n e.setAttribute('role', 'alert');\n replaceChildrenWith(d.querySelector('#pagination'), [ e ]);\n }\n )\n }\n\n if (searxng.settings.infinite_scroll && searxng.infinite_scroll_supported) {\n const intersectionObserveOptions = {\n rootMargin: \"20rem\",\n };\n const observedSelector = 'article.result:last-child';\n const observer = new IntersectionObserver(entries => {\n const paginationEntry = entries[0];\n if (paginationEntry.isIntersecting) {\n observer.unobserve(paginationEntry.target);\n loadNextPage(() => observer.observe(d.querySelector(observedSelector), intersectionObserveOptions));\n }\n });\n observer.observe(d.querySelector(observedSelector), intersectionObserveOptions);\n }\n\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global searxng */\n\nsearxng.ready(function () {\n\n function isElementInDetail (el) {\n while (el !== undefined) {\n if (el.classList.contains('detail')) {\n return true;\n }\n if (el.classList.contains('result')) {\n // we found a result, no need to go to the root of the document:\n // el is not inside a
    element\n return false;\n }\n el = el.parentNode;\n }\n return false;\n }\n\n function getResultElement (el) {\n while (el !== undefined) {\n if (el.classList.contains('result')) {\n return el;\n }\n el = el.parentNode;\n }\n return undefined;\n }\n\n function isImageResult (resultElement) {\n return resultElement && resultElement.classList.contains('result-images');\n }\n\n searxng.on('.result', 'click', function (e) {\n if (!isElementInDetail(e.target)) {\n highlightResult(this)(true, true);\n let resultElement = getResultElement(e.target);\n if (isImageResult(resultElement)) {\n e.preventDefault();\n searxng.selectImage(resultElement);\n }\n }\n });\n\n searxng.on('.result a', 'focus', function (e) {\n if (!isElementInDetail(e.target)) {\n let resultElement = getResultElement(e.target);\n if (resultElement && resultElement.getAttribute(\"data-vim-selected\") === null) {\n highlightResult(resultElement)(true);\n }\n if (isImageResult(resultElement)) {\n searxng.selectImage(resultElement);\n }\n }\n }, true);\n\n /* common base for layouts */\n var baseKeyBinding = {\n 'Escape': {\n key: 'ESC',\n fun: removeFocus,\n des: 'remove focus from the focused input',\n cat: 'Control'\n },\n 'c': {\n key: 'c',\n fun: copyURLToClipboard,\n des: 'copy url of the selected result to the clipboard',\n cat: 'Results'\n },\n 'h': {\n key: 'h',\n fun: toggleHelp,\n des: 'toggle help window',\n cat: 'Other'\n },\n 'i': {\n key: 'i',\n fun: searchInputFocus,\n des: 'focus on the search input',\n cat: 'Control'\n },\n 'n': {\n key: 'n',\n fun: GoToNextPage(),\n des: 'go to next page',\n cat: 'Results'\n },\n 'o': {\n key: 'o',\n fun: openResult(false),\n des: 'open search result',\n cat: 'Results'\n },\n 'p': {\n key: 'p',\n fun: GoToPreviousPage(),\n des: 'go to previous page',\n cat: 'Results'\n },\n 'r': {\n key: 'r',\n fun: reloadPage,\n des: 'reload page from the server',\n cat: 'Control'\n },\n 't': {\n key: 't',\n fun: openResult(true),\n des: 'open the result in a new tab',\n cat: 'Results'\n },\n };\n var keyBindingLayouts = {\n\n \"default\": Object.assign(\n { /* SearXNG layout */\n 'ArrowLeft': {\n key: '←',\n fun: highlightResult('up'),\n des: 'select previous search result',\n cat: 'Results'\n },\n 'ArrowRight': {\n key: '→',\n fun: highlightResult('down'),\n des: 'select next search result',\n cat: 'Results'\n },\n }, baseKeyBinding),\n\n 'vim': Object.assign(\n { /* Vim-like Key Layout. */\n 'b': {\n key: 'b',\n fun: scrollPage(-window.innerHeight),\n des: 'scroll one page up',\n cat: 'Navigation'\n },\n 'f': {\n key: 'f',\n fun: scrollPage(window.innerHeight),\n des: 'scroll one page down',\n cat: 'Navigation'\n },\n 'u': {\n key: 'u',\n fun: scrollPage(-window.innerHeight / 2),\n des: 'scroll half a page up',\n cat: 'Navigation'\n },\n 'd': {\n key: 'd',\n fun: scrollPage(window.innerHeight / 2),\n des: 'scroll half a page down',\n cat: 'Navigation'\n },\n 'g': {\n key: 'g',\n fun: scrollPageTo(-document.body.scrollHeight, 'top'),\n des: 'scroll to the top of the page',\n cat: 'Navigation'\n },\n 'v': {\n key: 'v',\n fun: scrollPageTo(document.body.scrollHeight, 'bottom'),\n des: 'scroll to the bottom of the page',\n cat: 'Navigation'\n },\n 'k': {\n key: 'k',\n fun: highlightResult('up'),\n des: 'select previous search result',\n cat: 'Results'\n },\n 'j': {\n key: 'j',\n fun: highlightResult('down'),\n des: 'select next search result',\n cat: 'Results'\n },\n 'y': {\n key: 'y',\n fun: copyURLToClipboard,\n des: 'copy url of the selected result to the clipboard',\n cat: 'Results'\n },\n }, baseKeyBinding)\n }\n\n var keyBindings = keyBindingLayouts[searxng.settings.hotkeys] || keyBindingLayouts.default;\n\n searxng.on(document, \"keydown\", function (e) {\n // check for modifiers so we don't break browser's hotkeys\n if (\n Object.prototype.hasOwnProperty.call(keyBindings, e.key)\n && !e.ctrlKey && !e.altKey\n && !e.shiftKey && !e.metaKey\n ) {\n var tagName = e.target.tagName.toLowerCase();\n if (e.key === 'Escape') {\n keyBindings[e.key].fun(e);\n } else {\n if (e.target === document.body || tagName === 'a' || tagName === 'button') {\n e.preventDefault();\n keyBindings[e.key].fun();\n }\n }\n }\n });\n\n function highlightResult (which) {\n return function (noScroll, keepFocus) {\n var current = document.querySelector('.result[data-vim-selected]'),\n effectiveWhich = which;\n if (current === null) {\n // no selection : choose the first one\n current = document.querySelector('.result');\n if (current === null) {\n // no first one : there are no results\n return;\n }\n // replace up/down actions by selecting first one\n if (which === \"down\" || which === \"up\") {\n effectiveWhich = current;\n }\n }\n\n var next, results = document.querySelectorAll('.result');\n results = Array.from(results); // convert NodeList to Array for further use\n\n if (typeof effectiveWhich !== 'string') {\n next = effectiveWhich;\n } else {\n switch (effectiveWhich) {\n case 'visible':\n var top = document.documentElement.scrollTop || document.body.scrollTop;\n var bot = top + document.documentElement.clientHeight;\n\n for (var i = 0; i < results.length; i++) {\n next = results[i];\n var etop = next.offsetTop;\n var ebot = etop + next.clientHeight;\n\n if ((ebot <= bot) && (etop > top)) {\n break;\n }\n }\n break;\n case 'down':\n next = results[results.indexOf(current) + 1] || current;\n break;\n case 'up':\n next = results[results.indexOf(current) - 1] || current;\n break;\n case 'bottom':\n next = results[results.length - 1];\n break;\n case 'top':\n /* falls through */\n default:\n next = results[0];\n }\n }\n\n if (next) {\n current.removeAttribute('data-vim-selected');\n next.setAttribute('data-vim-selected', 'true');\n if (!keepFocus) {\n var link = next.querySelector('h3 a') || next.querySelector('a');\n if (link !== null) {\n link.focus();\n }\n }\n if (!noScroll) {\n scrollPageToSelected();\n }\n }\n };\n }\n\n function reloadPage () {\n document.location.reload(true);\n }\n\n function removeFocus (e) {\n const tagName = e.target.tagName.toLowerCase();\n if (document.activeElement && (tagName === 'input' || tagName === 'select' || tagName === 'textarea')) {\n document.activeElement.blur();\n } else {\n searxng.closeDetail();\n }\n }\n\n function pageButtonClick (css_selector) {\n return function () {\n var button = document.querySelector(css_selector);\n if (button) {\n button.click();\n }\n };\n }\n\n function GoToNextPage () {\n return pageButtonClick('nav#pagination .next_page button[type=\"submit\"]');\n }\n\n function GoToPreviousPage () {\n return pageButtonClick('nav#pagination .previous_page button[type=\"submit\"]');\n }\n\n function scrollPageToSelected () {\n var sel = document.querySelector('.result[data-vim-selected]');\n if (sel === null) {\n return;\n }\n var wtop = document.documentElement.scrollTop || document.body.scrollTop,\n wheight = document.documentElement.clientHeight,\n etop = sel.offsetTop,\n ebot = etop + sel.clientHeight,\n offset = 120;\n // first element ?\n if ((sel.previousElementSibling === null) && (ebot < wheight)) {\n // set to the top of page if the first element\n // is fully included in the viewport\n window.scroll(window.scrollX, 0);\n return;\n }\n if (wtop > (etop - offset)) {\n window.scroll(window.scrollX, etop - offset);\n } else {\n var wbot = wtop + wheight;\n if (wbot < (ebot + offset)) {\n window.scroll(window.scrollX, ebot - wheight + offset);\n }\n }\n }\n\n function scrollPage (amount) {\n return function () {\n window.scrollBy(0, amount);\n highlightResult('visible')();\n };\n }\n\n function scrollPageTo (position, nav) {\n return function () {\n window.scrollTo(0, position);\n highlightResult(nav)();\n };\n }\n\n function searchInputFocus () {\n window.scrollTo(0, 0);\n var q = document.querySelector('#q');\n q.focus();\n if (q.setSelectionRange) {\n var len = q.value.length;\n q.setSelectionRange(len, len);\n }\n }\n\n function openResult (newTab) {\n return function () {\n var link = document.querySelector('.result[data-vim-selected] h3 a');\n if (link === null) {\n link = document.querySelector('.result[data-vim-selected] > a');\n }\n if (link !== null) {\n var url = link.getAttribute('href');\n if (newTab) {\n window.open(url);\n } else {\n window.location.href = url;\n }\n }\n };\n }\n\n function initHelpContent (divElement) {\n var categories = {};\n\n for (var k in keyBindings) {\n var key = keyBindings[k];\n categories[key.cat] = categories[key.cat] || [];\n categories[key.cat].push(key);\n }\n\n var sorted = Object.keys(categories).sort(function (a, b) {\n return categories[b].length - categories[a].length;\n });\n\n if (sorted.length === 0) {\n return;\n }\n\n var html = '×';\n html += '

    How to navigate SearXNG with hotkeys

    ';\n html += '';\n\n for (var i = 0; i < sorted.length; i++) {\n var cat = categories[sorted[i]];\n\n var lastCategory = i === (sorted.length - 1);\n var first = i % 2 === 0;\n\n if (first) {\n html += '';\n }\n html += ''; // col-sm-*\n\n if (!first || lastCategory) {\n html += ''; // row\n }\n }\n\n html += '
    ';\n\n html += '

    ' + cat[0].cat + '

    ';\n html += '
      ';\n\n for (var cj in cat) {\n html += '
    • ' + cat[cj].key + ' ' + cat[cj].des + '
    • ';\n }\n\n html += '
    ';\n html += '
    ';\n\n divElement.innerHTML = html;\n }\n\n function toggleHelp () {\n var helpPanel = document.querySelector('#vim-hotkeys-help');\n if (helpPanel === undefined || helpPanel === null) {\n // first call\n helpPanel = document.createElement('div');\n helpPanel.id = 'vim-hotkeys-help';\n helpPanel.className = 'dialog-modal';\n initHelpContent(helpPanel);\n var body = document.getElementsByTagName('body')[0];\n body.appendChild(helpPanel);\n } else {\n // toggle hidden\n helpPanel.classList.toggle('invisible');\n return;\n }\n }\n\n function copyURLToClipboard () {\n var currentUrlElement = document.querySelector('.result[data-vim-selected] h3 a');\n if (currentUrlElement === null) return;\n\n const url = currentUrlElement.getAttribute('href');\n navigator.clipboard.writeText(url);\n }\n\n searxng.scrollPageToSelected = scrollPageToSelected;\n searxng.selectNext = highlightResult('down');\n searxng.selectPrevious = highlightResult('up');\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global L */\n(function (w, d, searxng) {\n 'use strict';\n\n searxng.ready(function () {\n searxng.on('.searxng_init_map', 'click', function (event) {\n // no more request\n this.classList.remove(\"searxng_init_map\");\n\n //\n var leaflet_target = this.dataset.leafletTarget;\n var map_lon = parseFloat(this.dataset.mapLon);\n var map_lat = parseFloat(this.dataset.mapLat);\n var map_zoom = parseFloat(this.dataset.mapZoom);\n var map_boundingbox = JSON.parse(this.dataset.mapBoundingbox);\n var map_geojson = JSON.parse(this.dataset.mapGeojson);\n\n searxng.loadStyle('css/leaflet.css');\n searxng.loadScript('js/leaflet.js', function () {\n var map_bounds = null;\n if (map_boundingbox) {\n var southWest = L.latLng(map_boundingbox[0], map_boundingbox[2]);\n var northEast = L.latLng(map_boundingbox[1], map_boundingbox[3]);\n map_bounds = L.latLngBounds(southWest, northEast);\n }\n\n // init map\n var map = L.map(leaflet_target);\n // create the tile layer with correct attribution\n var osmMapnikUrl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';\n var osmMapnikAttrib = 'Map data © OpenStreetMap contributors';\n var osmMapnik = new L.TileLayer(osmMapnikUrl, {minZoom: 1, maxZoom: 19, attribution: osmMapnikAttrib});\n var osmWikimediaUrl = 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png';\n var osmWikimediaAttrib = 'Wikimedia maps | Maps data © OpenStreetMap contributors';\n var osmWikimedia = new L.TileLayer(osmWikimediaUrl, {minZoom: 1, maxZoom: 19, attribution: osmWikimediaAttrib});\n // init map view\n if (map_bounds) {\n // TODO hack: https://github.com/Leaflet/Leaflet/issues/2021\n // Still useful ?\n setTimeout(function () {\n map.fitBounds(map_bounds, {\n maxZoom: 17\n });\n }, 0);\n } else if (map_lon && map_lat) {\n if (map_zoom) {\n map.setView(new L.latLng(map_lat, map_lon), map_zoom);\n } else {\n map.setView(new L.latLng(map_lat, map_lon), 8);\n }\n }\n\n map.addLayer(osmMapnik);\n\n var baseLayers = {\n \"OSM Mapnik\": osmMapnik,\n \"OSM Wikimedia\": osmWikimedia,\n };\n\n L.control.layers(baseLayers).addTo(map);\n\n if (map_geojson) {\n L.geoJson(map_geojson).addTo(map);\n } /* else if(map_bounds) {\n L.rectangle(map_bounds, {color: \"#ff7800\", weight: 3, fill:false}).addTo(map);\n } */\n });\n\n // this event occur only once per element\n event.preventDefault();\n });\n });\n})(window, document, window.searxng);\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n(function (w, d, searxng) {\n 'use strict';\n\n if (searxng.endpoint !== 'preferences') {\n return;\n }\n\n searxng.ready(function () {\n let engine_descriptions = null;\n function load_engine_descriptions () {\n if (engine_descriptions == null) {\n searxng.http(\"GET\", \"engine_descriptions.json\").then(function (content) {\n engine_descriptions = JSON.parse(content);\n for (const [engine_name, description] of Object.entries(engine_descriptions)) {\n let elements = d.querySelectorAll('[data-engine-name=\"' + engine_name + '\"] .engine-description');\n for (const element of elements) {\n let source = ' (' + searxng.settings.translations.Source + ': ' + description[1] + ')';\n element.innerHTML = description[0] + source;\n }\n }\n });\n }\n }\n\n for (const el of d.querySelectorAll('[data-engine-name]')) {\n searxng.on(el, 'mouseenter', load_engine_descriptions);\n }\n\n const enableAllEngines = d.querySelectorAll(\".enable-all-engines\");\n const disableAllEngines = d.querySelectorAll(\".disable-all-engines\");\n const engineToggles = d.querySelectorAll('tbody input[type=checkbox][class~=checkbox-onoff]');\n const toggleEngines = (enable) => {\n for (const el of engineToggles) {\n // check if element visible, so that only engines of the current category are modified\n if (el.offsetParent !== null) el.checked = !enable;\n }\n };\n for (const el of enableAllEngines) {\n searxng.on(el, 'click', () => toggleEngines(true));\n }\n for (const el of disableAllEngines) {\n searxng.on(el, 'click', () => toggleEngines(false));\n }\n\n const copyHashButton = d.querySelector(\"#copy-hash\");\n searxng.on(copyHashButton, 'click', (e) => {\n e.preventDefault();\n navigator.clipboard.writeText(copyHashButton.dataset.hash);\n copyHashButton.innerText = copyHashButton.dataset.copiedText;\n });\n });\n})(window, document, window.searxng);\n","/*!\n * swiped-events.js - v@version@\n * Pure JavaScript swipe events\n * https://github.com/john-doherty/swiped-events\n * @inspiration https://stackoverflow.com/questions/16348031/disable-scrolling-when-touch-moving-certain-element\n * @author John Doherty \n * @license MIT\n */\n(function (window, document) {\n\n 'use strict';\n\n // patch CustomEvent to allow constructor creation (IE/Chrome)\n if (typeof window.CustomEvent !== 'function') {\n\n window.CustomEvent = function (event, params) {\n\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n window.CustomEvent.prototype = window.Event.prototype;\n }\n\n document.addEventListener('touchstart', handleTouchStart, false);\n document.addEventListener('touchmove', handleTouchMove, false);\n document.addEventListener('touchend', handleTouchEnd, false);\n\n var xDown = null;\n var yDown = null;\n var xDiff = null;\n var yDiff = null;\n var timeDown = null;\n var startEl = null;\n var touchCount = 0;\n\n /**\n * Fires swiped event if swipe detected on touchend\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchEnd(e) {\n\n // if the user released on a different target, cancel!\n if (startEl !== e.target) return;\n\n var swipeThreshold = parseInt(getNearestAttribute(startEl, 'data-swipe-threshold', '20'), 10); // default 20 units\n var swipeUnit = getNearestAttribute(startEl, 'data-swipe-unit', 'px'); // default px\n var swipeTimeout = parseInt(getNearestAttribute(startEl, 'data-swipe-timeout', '500'), 10); // default 500ms\n var timeDiff = Date.now() - timeDown;\n var eventType = '';\n var changedTouches = e.changedTouches || e.touches || [];\n\n if (swipeUnit === 'vh') {\n swipeThreshold = Math.round((swipeThreshold / 100) * document.documentElement.clientHeight); // get percentage of viewport height in pixels\n }\n if (swipeUnit === 'vw') {\n swipeThreshold = Math.round((swipeThreshold / 100) * document.documentElement.clientWidth); // get percentage of viewport height in pixels\n }\n\n if (Math.abs(xDiff) > Math.abs(yDiff)) { // most significant\n if (Math.abs(xDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (xDiff > 0) {\n eventType = 'swiped-left';\n }\n else {\n eventType = 'swiped-right';\n }\n }\n }\n else if (Math.abs(yDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (yDiff > 0) {\n eventType = 'swiped-up';\n }\n else {\n eventType = 'swiped-down';\n }\n }\n\n if (eventType !== '') {\n\n var eventData = {\n dir: eventType.replace(/swiped-/, ''),\n touchType: (changedTouches[0] || {}).touchType || 'direct',\n fingers: touchCount, // Number of fingers used\n xStart: parseInt(xDown, 10),\n xEnd: parseInt((changedTouches[0] || {}).clientX || -1, 10),\n yStart: parseInt(yDown, 10),\n yEnd: parseInt((changedTouches[0] || {}).clientY || -1, 10)\n };\n\n // fire `swiped` event event on the element that started the swipe\n startEl.dispatchEvent(new CustomEvent('swiped', { bubbles: true, cancelable: true, detail: eventData }));\n\n // fire `swiped-dir` event on the element that started the swipe\n startEl.dispatchEvent(new CustomEvent(eventType, { bubbles: true, cancelable: true, detail: eventData }));\n }\n\n // reset values\n xDown = null;\n yDown = null;\n timeDown = null;\n }\n /**\n * Records current location on touchstart event\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchStart(e) {\n\n // if the element has data-swipe-ignore=\"true\" we stop listening for swipe events\n if (e.target.getAttribute('data-swipe-ignore') === 'true') return;\n\n startEl = e.target;\n\n timeDown = Date.now();\n xDown = e.touches[0].clientX;\n yDown = e.touches[0].clientY;\n xDiff = 0;\n yDiff = 0;\n touchCount = e.touches.length;\n }\n\n /**\n * Records location diff in px on touchmove event\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchMove(e) {\n\n if (!xDown || !yDown) return;\n\n var xUp = e.touches[0].clientX;\n var yUp = e.touches[0].clientY;\n\n xDiff = xDown - xUp;\n yDiff = yDown - yUp;\n }\n\n /**\n * Gets attribute off HTML element or nearest parent\n * @param {object} el - HTML element to retrieve attribute from\n * @param {string} attributeName - name of the attribute\n * @param {any} defaultValue - default value to return if no match found\n * @returns {any} attribute value or defaultValue\n */\n function getNearestAttribute(el, attributeName, defaultValue) {\n\n // walk up the dom tree looking for attributeName\n while (el && el !== document.documentElement) {\n\n var attributeValue = el.getAttribute(attributeName);\n\n if (attributeValue) {\n return attributeValue;\n }\n\n el = el.parentNode;\n }\n\n return defaultValue;\n }\n\n}(window, document));\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n\nimport \"../../../node_modules/swiped-events/src/swiped-events.js\";\n\n(function (w, d, searxng) {\n 'use strict';\n\n if (searxng.endpoint !== 'results') {\n return;\n }\n\n searxng.ready(function () {\n d.querySelectorAll('#urls img').forEach(\n img =>\n img.addEventListener(\n 'error', () => {\n // console.log(\"ERROR can't load: \" + img.src);\n img.src = window.searxng.settings.theme_static_path + \"/img/img_load_error.svg\";\n },\n {once: true}\n ));\n\n if (d.querySelector('#search_url button#copy_url')) {\n d.querySelector('#search_url button#copy_url').style.display = \"block\";\n }\n\n searxng.on('.btn-collapse', 'click', function () {\n var btnLabelCollapsed = this.getAttribute('data-btn-text-collapsed');\n var btnLabelNotCollapsed = this.getAttribute('data-btn-text-not-collapsed');\n var target = this.getAttribute('data-target');\n var targetElement = d.querySelector(target);\n var html = this.innerHTML;\n if (this.classList.contains('collapsed')) {\n html = html.replace(btnLabelCollapsed, btnLabelNotCollapsed);\n } else {\n html = html.replace(btnLabelNotCollapsed, btnLabelCollapsed);\n }\n this.innerHTML = html;\n this.classList.toggle('collapsed');\n targetElement.classList.toggle('invisible');\n });\n\n searxng.on('.media-loader', 'click', function () {\n var target = this.getAttribute('data-target');\n var iframe_load = d.querySelector(target + ' > iframe');\n var srctest = iframe_load.getAttribute('src');\n if (srctest === null || srctest === undefined || srctest === false) {\n iframe_load.setAttribute('src', iframe_load.getAttribute('data-src'));\n }\n });\n\n searxng.on('#copy_url', 'click', function () {\n var target = this.parentElement.querySelector('pre');\n navigator.clipboard.writeText(target.innerText);\n this.innerText = this.dataset.copiedText;\n });\n\n // searxng.selectImage (gallery)\n // -----------------------------\n\n // setTimeout() ID, needed to cancel *last* loadImage\n let imgTimeoutID;\n\n // progress spinner, while an image is loading\n const imgLoaderSpinner = d.createElement('div');\n imgLoaderSpinner.classList.add('loader');\n\n // singleton image object, which is used for all loading processes of a\n // detailed image\n const imgLoader = new Image();\n\n const loadImage = (imgSrc, onSuccess) => {\n // if defered image load exists, stop defered task.\n if (imgTimeoutID) clearTimeout(imgTimeoutID);\n\n // defer load of the detail image for 1 sec\n imgTimeoutID = setTimeout(() => {\n imgLoader.src = imgSrc;\n }, 1000);\n\n // set handlers in the on-properties\n imgLoader.onload = () => {\n onSuccess();\n imgLoaderSpinner.remove();\n };\n imgLoader.onerror = () => {\n imgLoaderSpinner.remove();\n };\n };\n\n searxng.selectImage = (resultElement) => {\n\n // add a class that can be evaluated in the CSS and indicates that the\n // detail view is open\n d.getElementById('results').classList.add('image-detail-open');\n\n // add a hash to the browser history so that pressing back doesn't return\n // to the previous page this allows us to dismiss the image details on\n // pressing the back button on mobile devices\n window.location.hash = '#image-viewer';\n\n searxng.scrollPageToSelected();\n\n // if there is none element given by the caller, stop here\n if (!resultElement) return;\n\n // find object in the element, if there is none, stop here.\n const img = resultElement.querySelector('.result-images-source img');\n if (!img) return;\n\n // \n const src = img.getAttribute('data-src');\n\n // already loaded high-res image or no high-res image available\n if (!src) return;\n\n // use the image thumbnail until the image is fully loaded\n const thumbnail = resultElement.querySelector('.image_thumbnail');\n img.src = thumbnail.src;\n\n // show a progress spinner\n const detailElement = resultElement.querySelector('.detail');\n detailElement.appendChild(imgLoaderSpinner);\n\n // load full size image in background\n loadImage(src, () => {\n // after the singelton loadImage has loaded the detail image into the\n // cache, it can be used in the origin as src property.\n img.src = src;\n img.removeAttribute('data-src');\n });\n };\n\n searxng.closeDetail = function () {\n d.getElementById('results').classList.remove('image-detail-open');\n // remove #image-viewer hash from url by navigating back\n if (window.location.hash == '#image-viewer') window.history.back();\n searxng.scrollPageToSelected();\n };\n searxng.on('.result-detail-close', 'click', e => {\n e.preventDefault();\n searxng.closeDetail();\n });\n searxng.on('.result-detail-previous', 'click', e => {\n e.preventDefault();\n searxng.selectPrevious(false);\n });\n searxng.on('.result-detail-next', 'click', e => {\n e.preventDefault();\n searxng.selectNext(false);\n });\n\n // listen for the back button to be pressed and dismiss the image details when called\n window.addEventListener('hashchange', () => {\n if (window.location.hash != '#image-viewer') searxng.closeDetail();\n });\n\n d.querySelectorAll('.swipe-horizontal').forEach(\n obj => {\n obj.addEventListener('swiped-left', function () {\n searxng.selectNext(false);\n });\n obj.addEventListener('swiped-right', function () {\n searxng.selectPrevious(false);\n });\n }\n );\n\n w.addEventListener('scroll', function () {\n var e = d.getElementById('backToTop'),\n scrollTop = document.documentElement.scrollTop || document.body.scrollTop,\n results = d.getElementById('results');\n if (e !== null) {\n if (scrollTop >= 100) {\n results.classList.add('scrolling');\n } else {\n results.classList.remove('scrolling');\n }\n }\n }, true);\n\n });\n\n})(window, document, window.searxng);\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* exported AutoComplete */\n\n(function (w, d, searxng) {\n 'use strict';\n\n var qinput_id = \"q\", qinput;\n\n const isMobile = window.matchMedia(\"only screen and (max-width: 50em)\").matches;\n\n function submitIfQuery () {\n if (qinput.value.length > 0) {\n var search = document.getElementById('search');\n setTimeout(search.submit.bind(search), 0);\n }\n }\n\n function createClearButton (qinput) {\n var cs = document.getElementById('clear_search');\n var updateClearButton = function () {\n if (qinput.value.length === 0) {\n cs.classList.add(\"empty\");\n } else {\n cs.classList.remove(\"empty\");\n }\n };\n\n // update status, event listener\n updateClearButton();\n cs.addEventListener('click', function (ev) {\n qinput.value = '';\n qinput.focus();\n updateClearButton();\n ev.preventDefault();\n });\n qinput.addEventListener('input', updateClearButton, false);\n }\n\n const fetchResults = async (query) => {\n let request;\n if (searxng.settings.method === 'GET') {\n const reqParams = new URLSearchParams();\n reqParams.append(\"q\", query);\n request = fetch(\"./autocompleter?\" + reqParams.toString());\n } else {\n const formData = new FormData();\n formData.append(\"q\", query);\n request = fetch(\"./autocompleter\", {\n method: 'POST',\n body: formData,\n });\n }\n\n request.then(async function (response) {\n const results = await response.json();\n\n if (!results) return;\n\n const autocomplete = d.querySelector(\".autocomplete\");\n const autocompleteList = d.querySelector(\".autocomplete ul\");\n autocomplete.classList.add(\"open\");\n autocompleteList.innerHTML = \"\";\n\n // show an error message that no result was found\n if (!results[1] || results[1].length == 0) {\n const noItemFoundMessage = document.createElement(\"li\");\n noItemFoundMessage.classList.add('no-item-found');\n noItemFoundMessage.innerHTML = searxng.settings.translations.no_item_found;\n autocompleteList.appendChild(noItemFoundMessage);\n return;\n }\n\n for (let result of results[1]) {\n const li = document.createElement(\"li\");\n li.innerText = result;\n\n searxng.on(li, 'mousedown', () => {\n qinput.value = result;\n const form = d.querySelector(\"#search\");\n form.submit();\n autocomplete.classList.remove('open');\n });\n autocompleteList.appendChild(li);\n }\n });\n };\n\n searxng.ready(function () {\n // focus search input on large screens\n if (!isMobile) document.getElementById(\"q\").focus();\n\n qinput = d.getElementById(qinput_id);\n const autocomplete = d.querySelector(\".autocomplete\");\n const autocompleteList = d.querySelector(\".autocomplete ul\");\n\n if (qinput !== null) {\n // clear button\n createClearButton(qinput);\n\n // autocompleter\n if (searxng.settings.autocomplete) {\n searxng.on(qinput, 'input', () => {\n const query = qinput.value;\n if (query.length < searxng.settings.autocomplete_min) return;\n\n setTimeout(() => {\n if (query == qinput.value) fetchResults(query);\n }, 300);\n });\n\n searxng.on(qinput, 'keyup', (e) => {\n let currentIndex = -1;\n const listItems = autocompleteList.children;\n for (let i = 0; i < listItems.length; i++) {\n if (listItems[i].classList.contains('active')) {\n currentIndex = i;\n break;\n }\n }\n\n let newCurrentIndex = -1;\n if (e.key === \"ArrowUp\") {\n if (currentIndex >= 0) listItems[currentIndex].classList.remove('active');\n // we need to add listItems.length to the index calculation here because the JavaScript modulos\n // operator doesn't work with negative numbers\n newCurrentIndex = (currentIndex - 1 + listItems.length) % listItems.length;\n } else if (e.key === \"ArrowDown\") {\n if (currentIndex >= 0) listItems[currentIndex].classList.remove('active');\n newCurrentIndex = (currentIndex + 1) % listItems.length;\n } else if (e.key === \"Tab\" || e.key === \"Enter\") {\n autocomplete.classList.remove('open');\n }\n\n if (newCurrentIndex != -1) {\n const selectedItem = listItems[newCurrentIndex];\n selectedItem.classList.add('active');\n\n if (!selectedItem.classList.contains('no-item-found')) qinput.value = selectedItem.innerText;\n }\n });\n }\n }\n\n // Additionally to searching when selecting a new category, we also\n // automatically start a new search request when the user changes a search\n // filter (safesearch, time range or language) (this requires JavaScript\n // though)\n if (\n qinput !== null\n && searxng.settings.search_on_category_select\n // If .search_filters is undefined (invisible) we are on the homepage and\n // hence don't have to set any listeners\n && d.querySelector(\".search_filters\") != null\n ) {\n searxng.on(d.getElementById('safesearch'), 'change', submitIfQuery);\n searxng.on(d.getElementById('time_range'), 'change', submitIfQuery);\n searxng.on(d.getElementById('language'), 'change', submitIfQuery);\n }\n\n const categoryButtons = d.querySelectorAll(\"button.category_button\");\n for (let button of categoryButtons) {\n searxng.on(button, 'click', (event) => {\n if (event.shiftKey) {\n event.preventDefault();\n button.classList.toggle(\"selected\");\n return;\n }\n\n // manually deselect the old selection when a new category is selected\n const selectedCategories = d.querySelectorAll(\"button.category_button.selected\");\n for (let categoryButton of selectedCategories) {\n categoryButton.classList.remove(\"selected\");\n }\n button.classList.add(\"selected\");\n });\n }\n\n // override form submit action to update the actually selected categories\n const form = d.querySelector(\"#search\");\n if (form != null) {\n searxng.on(form, 'submit', (event) => {\n event.preventDefault();\n const categoryValuesInput = d.querySelector(\"#selected-categories\");\n if (categoryValuesInput) {\n let categoryValues = [];\n for (let categoryButton of categoryButtons) {\n if (categoryButton.classList.contains(\"selected\")) {\n categoryValues.push(categoryButton.name.replace(\"category_\", \"\"));\n }\n }\n categoryValuesInput.value = categoryValues.join(\",\");\n }\n form.submit();\n });\n }\n });\n\n})(window, document, window.searxng);\n"],"names":["w","d","ElementPrototype","selector","node","nodes","i","callbackSafe","callback","el","e","exception","searxng","obj","eventType","useCapture","found","method","url","data","resolve","reject","req","ex","src","path","id","s","newNode","referenceNode","getEndpoint","className","onlyImages","newLoadSpinner","loader","replaceChildrenWith","element","children","child","loadNextPage","form","formData","response","nextPageDoc","articleList","paginationElement","articleElement","err","intersectionObserveOptions","observedSelector","observer","entries","paginationEntry","isElementInDetail","getResultElement","isImageResult","resultElement","highlightResult","baseKeyBinding","removeFocus","copyURLToClipboard","toggleHelp","searchInputFocus","GoToNextPage","openResult","GoToPreviousPage","reloadPage","keyBindingLayouts","scrollPage","scrollPageTo","keyBindings","tagName","which","noScroll","keepFocus","current","effectiveWhich","next","results","top","bot","etop","ebot","link","scrollPageToSelected","pageButtonClick","css_selector","button","sel","wtop","wheight","offset","wbot","amount","position","nav","q","len","newTab","initHelpContent","divElement","categories","k","key","sorted","a","b","html","cat","lastCategory","first","cj","helpPanel","body","currentUrlElement","event","leaflet_target","map_lon","map_lat","map_zoom","map_boundingbox","map_geojson","map_bounds","southWest","northEast","map","osmMapnikUrl","osmMapnikAttrib","osmMapnik","osmWikimediaUrl","osmWikimediaAttrib","osmWikimedia","baseLayers","engine_descriptions","load_engine_descriptions","content","engine_name","description","elements","source","enableAllEngines","disableAllEngines","engineToggles","toggleEngines","enable","copyHashButton","window","document","params","evt","handleTouchStart","handleTouchMove","handleTouchEnd","xDown","yDown","xDiff","yDiff","timeDown","startEl","touchCount","swipeThreshold","getNearestAttribute","swipeUnit","swipeTimeout","timeDiff","changedTouches","eventData","xUp","yUp","attributeName","defaultValue","attributeValue","img","btnLabelCollapsed","btnLabelNotCollapsed","target","targetElement","iframe_load","srctest","imgTimeoutID","imgLoaderSpinner","imgLoader","loadImage","imgSrc","onSuccess","thumbnail","scrollTop","qinput_id","qinput","isMobile","submitIfQuery","search","createClearButton","cs","updateClearButton","ev","fetchResults","query","request","reqParams","autocomplete","autocompleteList","noItemFoundMessage","result","li","currentIndex","listItems","newCurrentIndex","selectedItem","categoryButtons","selectedCategories","categoryButton","categoryValuesInput","categoryValues"],"mappings":"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","x_google_ignoreList":[5]} \ No newline at end of file +{"version":3,"file":"searxng.min.js","sources":["../../../../../client/simple/src/js/main/00_toolkit.js","../../../../../client/simple/src/js/main/infinite_scroll.js","../../../../../client/simple/src/js/main/keyboard.js","../../../../../client/simple/src/js/main/mapresult.js","../../../../../client/simple/src/js/main/preferences.js","../../../../../client/simple/node_modules/swiped-events/src/swiped-events.js","../../../../../client/simple/src/js/main/results.js","../../../../../client/simple/src/js/main/search.js"],"sourcesContent":["/**\n * @license\n * (C) Copyright Contributors to the SearXNG project.\n * (C) Copyright Contributors to the searx project (2014 - 2021).\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nwindow.searxng = (function (w, d) {\n\n 'use strict';\n\n // not invented here toolkit with bugs fixed elsewhere\n // purposes : be just good enough and as small as possible\n\n // from https://plainjs.com/javascript/events/live-binding-event-handlers-14/\n if (w.Element) {\n (function (ElementPrototype) {\n ElementPrototype.matches = ElementPrototype.matches ||\n ElementPrototype.matchesSelector ||\n ElementPrototype.webkitMatchesSelector ||\n ElementPrototype.msMatchesSelector ||\n function (selector) {\n var node = this, nodes = (node.parentNode || node.document).querySelectorAll(selector), i = -1;\n while (nodes[++i] && nodes[i] != node);\n return !!nodes[i];\n };\n })(Element.prototype);\n }\n\n function callbackSafe (callback, el, e) {\n try {\n callback.call(el, e);\n } catch (exception) {\n console.log(exception);\n }\n }\n\n var searxng = window.searxng || {};\n\n searxng.on = function (obj, eventType, callback, useCapture) {\n useCapture = useCapture || false;\n if (typeof obj !== 'string') {\n // obj HTMLElement, HTMLDocument\n obj.addEventListener(eventType, callback, useCapture);\n } else {\n // obj is a selector\n d.addEventListener(eventType, function (e) {\n var el = e.target || e.srcElement, found = false;\n while (el && el.matches && el !== d && !(found = el.matches(obj))) el = el.parentElement;\n if (found) callbackSafe(callback, el, e);\n }, useCapture);\n }\n };\n\n searxng.ready = function (callback) {\n if (document.readyState != 'loading') {\n callback.call(w);\n } else {\n w.addEventListener('DOMContentLoaded', callback.bind(w));\n }\n };\n\n searxng.http = function (method, url, data = null) {\n return new Promise(function (resolve, reject) {\n try {\n var req = new XMLHttpRequest();\n req.open(method, url, true);\n req.timeout = 20000;\n\n // On load\n req.onload = function () {\n if (req.status == 200) {\n resolve(req.response, req.responseType);\n } else {\n reject(Error(req.statusText));\n }\n };\n\n // Handle network errors\n req.onerror = function () {\n reject(Error(\"Network Error\"));\n };\n\n req.onabort = function () {\n reject(Error(\"Transaction is aborted\"));\n };\n\n req.ontimeout = function () {\n reject(Error(\"Timeout\"));\n }\n\n // Make the request\n if (data) {\n req.send(data)\n } else {\n req.send();\n }\n } catch (ex) {\n reject(ex);\n }\n });\n };\n\n searxng.loadStyle = function (src) {\n var path = searxng.settings.theme_static_path + \"/\" + src,\n id = \"style_\" + src.replace('.', '_'),\n s = d.getElementById(id);\n if (s === null) {\n s = d.createElement('link');\n s.setAttribute('id', id);\n s.setAttribute('rel', 'stylesheet');\n s.setAttribute('type', 'text/css');\n s.setAttribute('href', path);\n d.body.appendChild(s);\n }\n };\n\n searxng.loadScript = function (src, callback) {\n var path = searxng.settings.theme_static_path + \"/\" + src,\n id = \"script_\" + src.replace('.', '_'),\n s = d.getElementById(id);\n if (s === null) {\n s = d.createElement('script');\n s.setAttribute('id', id);\n s.setAttribute('src', path);\n s.onload = callback;\n s.onerror = function () {\n s.setAttribute('error', '1');\n };\n d.body.appendChild(s);\n } else if (!s.hasAttribute('error')) {\n try {\n callback.apply(s, []);\n } catch (exception) {\n console.log(exception);\n }\n } else {\n console.log(\"callback not executed : script '\" + path + \"' not loaded.\");\n }\n };\n\n searxng.insertBefore = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode);\n };\n\n searxng.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertAfter(newNode, referenceNode.nextSibling);\n };\n\n searxng.on('.close', 'click', function () {\n this.parentNode.classList.add('invisible');\n });\n\n function getEndpoint () {\n for (var className of d.getElementsByTagName('body')[0].classList.values()) {\n if (className.endsWith('_endpoint')) {\n return className.split('_')[0];\n }\n }\n return '';\n }\n\n searxng.endpoint = getEndpoint();\n\n return searxng;\n})(window, document);\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n\n/* global searxng */\n\nsearxng.ready(function () {\n 'use strict';\n\n searxng.infinite_scroll_supported = (\n 'IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype);\n\n if (searxng.endpoint !== 'results') {\n return;\n }\n\n if (!searxng.infinite_scroll_supported) {\n console.log('IntersectionObserver not supported');\n return;\n }\n\n let d = document;\n var onlyImages = d.getElementById('results').classList.contains('only_template_images');\n\n function newLoadSpinner () {\n var loader = d.createElement('div');\n loader.classList.add('loader');\n return loader;\n }\n\n function replaceChildrenWith (element, children) {\n element.textContent = '';\n children.forEach(child => element.appendChild(child));\n }\n\n function loadNextPage (callback) {\n var form = d.querySelector('#pagination form.next_page');\n if (!form) {\n return\n }\n replaceChildrenWith(d.querySelector('#pagination'), [ newLoadSpinner() ]);\n var formData = new FormData(form);\n searxng.http('POST', d.querySelector('#search').getAttribute('action'), formData).then(\n function (response) {\n var nextPageDoc = new DOMParser().parseFromString(response, 'text/html');\n var articleList = nextPageDoc.querySelectorAll('#urls article');\n var paginationElement = nextPageDoc.querySelector('#pagination');\n d.querySelector('#pagination').remove();\n if (articleList.length > 0 && !onlyImages) {\n // do not add
    element when there are only images\n d.querySelector('#urls').appendChild(d.createElement('hr'));\n }\n articleList.forEach(articleElement => {\n d.querySelector('#urls').appendChild(articleElement);\n });\n if (paginationElement) {\n d.querySelector('#results').appendChild(paginationElement);\n callback();\n }\n }\n ).catch(\n function (err) {\n console.log(err);\n var e = d.createElement('div');\n e.textContent = searxng.settings.translations.error_loading_next_page;\n e.classList.add('dialog-error');\n e.setAttribute('role', 'alert');\n replaceChildrenWith(d.querySelector('#pagination'), [ e ]);\n }\n )\n }\n\n if (searxng.settings.infinite_scroll && searxng.infinite_scroll_supported) {\n const intersectionObserveOptions = {\n rootMargin: \"20rem\",\n };\n const observedSelector = 'article.result:last-child';\n const observer = new IntersectionObserver(entries => {\n const paginationEntry = entries[0];\n if (paginationEntry.isIntersecting) {\n observer.unobserve(paginationEntry.target);\n loadNextPage(() => observer.observe(d.querySelector(observedSelector), intersectionObserveOptions));\n }\n });\n observer.observe(d.querySelector(observedSelector), intersectionObserveOptions);\n }\n\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global searxng */\n\nsearxng.ready(function () {\n\n function isElementInDetail (el) {\n while (el !== undefined) {\n if (el.classList.contains('detail')) {\n return true;\n }\n if (el.classList.contains('result')) {\n // we found a result, no need to go to the root of the document:\n // el is not inside a
    element\n return false;\n }\n el = el.parentNode;\n }\n return false;\n }\n\n function getResultElement (el) {\n while (el !== undefined) {\n if (el.classList.contains('result')) {\n return el;\n }\n el = el.parentNode;\n }\n return undefined;\n }\n\n function isImageResult (resultElement) {\n return resultElement && resultElement.classList.contains('result-images');\n }\n\n searxng.on('.result', 'click', function (e) {\n if (!isElementInDetail(e.target)) {\n highlightResult(this)(true, true);\n let resultElement = getResultElement(e.target);\n if (isImageResult(resultElement)) {\n e.preventDefault();\n searxng.selectImage(resultElement);\n }\n }\n });\n\n searxng.on('.result a', 'focus', function (e) {\n if (!isElementInDetail(e.target)) {\n let resultElement = getResultElement(e.target);\n if (resultElement && resultElement.getAttribute(\"data-vim-selected\") === null) {\n highlightResult(resultElement)(true);\n }\n if (isImageResult(resultElement)) {\n searxng.selectImage(resultElement);\n }\n }\n }, true);\n\n /* common base for layouts */\n var baseKeyBinding = {\n 'Escape': {\n key: 'ESC',\n fun: removeFocus,\n des: 'remove focus from the focused input',\n cat: 'Control'\n },\n 'c': {\n key: 'c',\n fun: copyURLToClipboard,\n des: 'copy url of the selected result to the clipboard',\n cat: 'Results'\n },\n 'h': {\n key: 'h',\n fun: toggleHelp,\n des: 'toggle help window',\n cat: 'Other'\n },\n 'i': {\n key: 'i',\n fun: searchInputFocus,\n des: 'focus on the search input',\n cat: 'Control'\n },\n 'n': {\n key: 'n',\n fun: GoToNextPage(),\n des: 'go to next page',\n cat: 'Results'\n },\n 'o': {\n key: 'o',\n fun: openResult(false),\n des: 'open search result',\n cat: 'Results'\n },\n 'p': {\n key: 'p',\n fun: GoToPreviousPage(),\n des: 'go to previous page',\n cat: 'Results'\n },\n 'r': {\n key: 'r',\n fun: reloadPage,\n des: 'reload page from the server',\n cat: 'Control'\n },\n 't': {\n key: 't',\n fun: openResult(true),\n des: 'open the result in a new tab',\n cat: 'Results'\n },\n };\n var keyBindingLayouts = {\n\n \"default\": Object.assign(\n { /* SearXNG layout */\n 'ArrowLeft': {\n key: '←',\n fun: highlightResult('up'),\n des: 'select previous search result',\n cat: 'Results'\n },\n 'ArrowRight': {\n key: '→',\n fun: highlightResult('down'),\n des: 'select next search result',\n cat: 'Results'\n },\n }, baseKeyBinding),\n\n 'vim': Object.assign(\n { /* Vim-like Key Layout. */\n 'b': {\n key: 'b',\n fun: scrollPage(-window.innerHeight),\n des: 'scroll one page up',\n cat: 'Navigation'\n },\n 'f': {\n key: 'f',\n fun: scrollPage(window.innerHeight),\n des: 'scroll one page down',\n cat: 'Navigation'\n },\n 'u': {\n key: 'u',\n fun: scrollPage(-window.innerHeight / 2),\n des: 'scroll half a page up',\n cat: 'Navigation'\n },\n 'd': {\n key: 'd',\n fun: scrollPage(window.innerHeight / 2),\n des: 'scroll half a page down',\n cat: 'Navigation'\n },\n 'g': {\n key: 'g',\n fun: scrollPageTo(-document.body.scrollHeight, 'top'),\n des: 'scroll to the top of the page',\n cat: 'Navigation'\n },\n 'v': {\n key: 'v',\n fun: scrollPageTo(document.body.scrollHeight, 'bottom'),\n des: 'scroll to the bottom of the page',\n cat: 'Navigation'\n },\n 'k': {\n key: 'k',\n fun: highlightResult('up'),\n des: 'select previous search result',\n cat: 'Results'\n },\n 'j': {\n key: 'j',\n fun: highlightResult('down'),\n des: 'select next search result',\n cat: 'Results'\n },\n 'y': {\n key: 'y',\n fun: copyURLToClipboard,\n des: 'copy url of the selected result to the clipboard',\n cat: 'Results'\n },\n }, baseKeyBinding)\n }\n\n var keyBindings = keyBindingLayouts[searxng.settings.hotkeys] || keyBindingLayouts.default;\n\n searxng.on(document, \"keydown\", function (e) {\n // check for modifiers so we don't break browser's hotkeys\n if (\n Object.prototype.hasOwnProperty.call(keyBindings, e.key)\n && !e.ctrlKey && !e.altKey\n && !e.shiftKey && !e.metaKey\n ) {\n var tagName = e.target.tagName.toLowerCase();\n if (e.key === 'Escape') {\n keyBindings[e.key].fun(e);\n } else {\n if (e.target === document.body || tagName === 'a' || tagName === 'button') {\n e.preventDefault();\n keyBindings[e.key].fun();\n }\n }\n }\n });\n\n function highlightResult (which) {\n return function (noScroll, keepFocus) {\n var current = document.querySelector('.result[data-vim-selected]'),\n effectiveWhich = which;\n if (current === null) {\n // no selection : choose the first one\n current = document.querySelector('.result');\n if (current === null) {\n // no first one : there are no results\n return;\n }\n // replace up/down actions by selecting first one\n if (which === \"down\" || which === \"up\") {\n effectiveWhich = current;\n }\n }\n\n var next, results = document.querySelectorAll('.result');\n results = Array.from(results); // convert NodeList to Array for further use\n\n if (typeof effectiveWhich !== 'string') {\n next = effectiveWhich;\n } else {\n switch (effectiveWhich) {\n case 'visible':\n var top = document.documentElement.scrollTop || document.body.scrollTop;\n var bot = top + document.documentElement.clientHeight;\n\n for (var i = 0; i < results.length; i++) {\n next = results[i];\n var etop = next.offsetTop;\n var ebot = etop + next.clientHeight;\n\n if ((ebot <= bot) && (etop > top)) {\n break;\n }\n }\n break;\n case 'down':\n next = results[results.indexOf(current) + 1] || current;\n break;\n case 'up':\n next = results[results.indexOf(current) - 1] || current;\n break;\n case 'bottom':\n next = results[results.length - 1];\n break;\n case 'top':\n /* falls through */\n default:\n next = results[0];\n }\n }\n\n if (next) {\n current.removeAttribute('data-vim-selected');\n next.setAttribute('data-vim-selected', 'true');\n if (!keepFocus) {\n var link = next.querySelector('h3 a') || next.querySelector('a');\n if (link !== null) {\n link.focus();\n }\n }\n if (!noScroll) {\n scrollPageToSelected();\n }\n }\n };\n }\n\n function reloadPage () {\n document.location.reload(true);\n }\n\n function removeFocus (e) {\n const tagName = e.target.tagName.toLowerCase();\n if (document.activeElement && (tagName === 'input' || tagName === 'select' || tagName === 'textarea')) {\n document.activeElement.blur();\n } else {\n searxng.closeDetail();\n }\n }\n\n function pageButtonClick (css_selector) {\n return function () {\n var button = document.querySelector(css_selector);\n if (button) {\n button.click();\n }\n };\n }\n\n function GoToNextPage () {\n return pageButtonClick('nav#pagination .next_page button[type=\"submit\"]');\n }\n\n function GoToPreviousPage () {\n return pageButtonClick('nav#pagination .previous_page button[type=\"submit\"]');\n }\n\n function scrollPageToSelected () {\n var sel = document.querySelector('.result[data-vim-selected]');\n if (sel === null) {\n return;\n }\n var wtop = document.documentElement.scrollTop || document.body.scrollTop,\n wheight = document.documentElement.clientHeight,\n etop = sel.offsetTop,\n ebot = etop + sel.clientHeight,\n offset = 120;\n // first element ?\n if ((sel.previousElementSibling === null) && (ebot < wheight)) {\n // set to the top of page if the first element\n // is fully included in the viewport\n window.scroll(window.scrollX, 0);\n return;\n }\n if (wtop > (etop - offset)) {\n window.scroll(window.scrollX, etop - offset);\n } else {\n var wbot = wtop + wheight;\n if (wbot < (ebot + offset)) {\n window.scroll(window.scrollX, ebot - wheight + offset);\n }\n }\n }\n\n function scrollPage (amount) {\n return function () {\n window.scrollBy(0, amount);\n highlightResult('visible')();\n };\n }\n\n function scrollPageTo (position, nav) {\n return function () {\n window.scrollTo(0, position);\n highlightResult(nav)();\n };\n }\n\n function searchInputFocus () {\n window.scrollTo(0, 0);\n var q = document.querySelector('#q');\n q.focus();\n if (q.setSelectionRange) {\n var len = q.value.length;\n q.setSelectionRange(len, len);\n }\n }\n\n function openResult (newTab) {\n return function () {\n var link = document.querySelector('.result[data-vim-selected] h3 a');\n if (link === null) {\n link = document.querySelector('.result[data-vim-selected] > a');\n }\n if (link !== null) {\n var url = link.getAttribute('href');\n if (newTab) {\n window.open(url);\n } else {\n window.location.href = url;\n }\n }\n };\n }\n\n function initHelpContent (divElement) {\n var categories = {};\n\n for (var k in keyBindings) {\n var key = keyBindings[k];\n categories[key.cat] = categories[key.cat] || [];\n categories[key.cat].push(key);\n }\n\n var sorted = Object.keys(categories).sort(function (a, b) {\n return categories[b].length - categories[a].length;\n });\n\n if (sorted.length === 0) {\n return;\n }\n\n var html = '×';\n html += '

    How to navigate SearXNG with hotkeys

    ';\n html += '';\n\n for (var i = 0; i < sorted.length; i++) {\n var cat = categories[sorted[i]];\n\n var lastCategory = i === (sorted.length - 1);\n var first = i % 2 === 0;\n\n if (first) {\n html += '';\n }\n html += ''; // col-sm-*\n\n if (!first || lastCategory) {\n html += ''; // row\n }\n }\n\n html += '
    ';\n\n html += '

    ' + cat[0].cat + '

    ';\n html += '
      ';\n\n for (var cj in cat) {\n html += '
    • ' + cat[cj].key + ' ' + cat[cj].des + '
    • ';\n }\n\n html += '
    ';\n html += '
    ';\n\n divElement.innerHTML = html;\n }\n\n function toggleHelp () {\n var helpPanel = document.querySelector('#vim-hotkeys-help');\n if (helpPanel === undefined || helpPanel === null) {\n // first call\n helpPanel = document.createElement('div');\n helpPanel.id = 'vim-hotkeys-help';\n helpPanel.className = 'dialog-modal';\n initHelpContent(helpPanel);\n var body = document.getElementsByTagName('body')[0];\n body.appendChild(helpPanel);\n } else {\n // toggle hidden\n helpPanel.classList.toggle('invisible');\n return;\n }\n }\n\n function copyURLToClipboard () {\n var currentUrlElement = document.querySelector('.result[data-vim-selected] h3 a');\n if (currentUrlElement === null) return;\n\n const url = currentUrlElement.getAttribute('href');\n navigator.clipboard.writeText(url);\n }\n\n searxng.scrollPageToSelected = scrollPageToSelected;\n searxng.selectNext = highlightResult('down');\n searxng.selectPrevious = highlightResult('up');\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global L */\n(function (w, d, searxng) {\n 'use strict';\n\n searxng.ready(function () {\n searxng.on('.searxng_init_map', 'click', function (event) {\n // no more request\n this.classList.remove(\"searxng_init_map\");\n\n //\n var leaflet_target = this.dataset.leafletTarget;\n var map_lon = parseFloat(this.dataset.mapLon);\n var map_lat = parseFloat(this.dataset.mapLat);\n var map_zoom = parseFloat(this.dataset.mapZoom);\n var map_boundingbox = JSON.parse(this.dataset.mapBoundingbox);\n var map_geojson = JSON.parse(this.dataset.mapGeojson);\n\n searxng.loadStyle('css/leaflet.css');\n searxng.loadScript('js/leaflet.js', function () {\n var map_bounds = null;\n if (map_boundingbox) {\n var southWest = L.latLng(map_boundingbox[0], map_boundingbox[2]);\n var northEast = L.latLng(map_boundingbox[1], map_boundingbox[3]);\n map_bounds = L.latLngBounds(southWest, northEast);\n }\n\n // init map\n var map = L.map(leaflet_target);\n // create the tile layer with correct attribution\n var osmMapnikUrl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';\n var osmMapnikAttrib = 'Map data © OpenStreetMap contributors';\n var osmMapnik = new L.TileLayer(osmMapnikUrl, {minZoom: 1, maxZoom: 19, attribution: osmMapnikAttrib});\n var osmWikimediaUrl = 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png';\n var osmWikimediaAttrib = 'Wikimedia maps | Maps data © OpenStreetMap contributors';\n var osmWikimedia = new L.TileLayer(osmWikimediaUrl, {minZoom: 1, maxZoom: 19, attribution: osmWikimediaAttrib});\n // init map view\n if (map_bounds) {\n // TODO hack: https://github.com/Leaflet/Leaflet/issues/2021\n // Still useful ?\n setTimeout(function () {\n map.fitBounds(map_bounds, {\n maxZoom: 17\n });\n }, 0);\n } else if (map_lon && map_lat) {\n if (map_zoom) {\n map.setView(new L.latLng(map_lat, map_lon), map_zoom);\n } else {\n map.setView(new L.latLng(map_lat, map_lon), 8);\n }\n }\n\n map.addLayer(osmMapnik);\n\n var baseLayers = {\n \"OSM Mapnik\": osmMapnik,\n \"OSM Wikimedia\": osmWikimedia,\n };\n\n L.control.layers(baseLayers).addTo(map);\n\n if (map_geojson) {\n L.geoJson(map_geojson).addTo(map);\n } /* else if(map_bounds) {\n L.rectangle(map_bounds, {color: \"#ff7800\", weight: 3, fill:false}).addTo(map);\n } */\n });\n\n // this event occur only once per element\n event.preventDefault();\n });\n });\n})(window, document, window.searxng);\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n(function (w, d, searxng) {\n 'use strict';\n\n if (searxng.endpoint !== 'preferences') {\n return;\n }\n\n searxng.ready(function () {\n let engine_descriptions = null;\n function load_engine_descriptions () {\n if (engine_descriptions == null) {\n searxng.http(\"GET\", \"engine_descriptions.json\").then(function (content) {\n engine_descriptions = JSON.parse(content);\n for (const [engine_name, description] of Object.entries(engine_descriptions)) {\n let elements = d.querySelectorAll('[data-engine-name=\"' + engine_name + '\"] .engine-description');\n for (const element of elements) {\n let source = ' (' + searxng.settings.translations.Source + ': ' + description[1] + ')';\n element.innerHTML = description[0] + source;\n }\n }\n });\n }\n }\n\n for (const el of d.querySelectorAll('[data-engine-name]')) {\n searxng.on(el, 'mouseenter', load_engine_descriptions);\n }\n\n const enableAllEngines = d.querySelectorAll(\".enable-all-engines\");\n const disableAllEngines = d.querySelectorAll(\".disable-all-engines\");\n const engineToggles = d.querySelectorAll('tbody input[type=checkbox][class~=checkbox-onoff]');\n const toggleEngines = (enable) => {\n for (const el of engineToggles) {\n // check if element visible, so that only engines of the current category are modified\n if (el.offsetParent !== null) el.checked = !enable;\n }\n };\n for (const el of enableAllEngines) {\n searxng.on(el, 'click', () => toggleEngines(true));\n }\n for (const el of disableAllEngines) {\n searxng.on(el, 'click', () => toggleEngines(false));\n }\n\n const copyHashButton = d.querySelector(\"#copy-hash\");\n searxng.on(copyHashButton, 'click', (e) => {\n e.preventDefault();\n navigator.clipboard.writeText(copyHashButton.dataset.hash);\n copyHashButton.innerText = copyHashButton.dataset.copiedText;\n });\n });\n})(window, document, window.searxng);\n","/*!\n * swiped-events.js - v@version@\n * Pure JavaScript swipe events\n * https://github.com/john-doherty/swiped-events\n * @inspiration https://stackoverflow.com/questions/16348031/disable-scrolling-when-touch-moving-certain-element\n * @author John Doherty \n * @license MIT\n */\n(function (window, document) {\n\n 'use strict';\n\n // patch CustomEvent to allow constructor creation (IE/Chrome)\n if (typeof window.CustomEvent !== 'function') {\n\n window.CustomEvent = function (event, params) {\n\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n window.CustomEvent.prototype = window.Event.prototype;\n }\n\n document.addEventListener('touchstart', handleTouchStart, false);\n document.addEventListener('touchmove', handleTouchMove, false);\n document.addEventListener('touchend', handleTouchEnd, false);\n\n var xDown = null;\n var yDown = null;\n var xDiff = null;\n var yDiff = null;\n var timeDown = null;\n var startEl = null;\n var touchCount = 0;\n\n /**\n * Fires swiped event if swipe detected on touchend\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchEnd(e) {\n\n // if the user released on a different target, cancel!\n if (startEl !== e.target) return;\n\n var swipeThreshold = parseInt(getNearestAttribute(startEl, 'data-swipe-threshold', '20'), 10); // default 20 units\n var swipeUnit = getNearestAttribute(startEl, 'data-swipe-unit', 'px'); // default px\n var swipeTimeout = parseInt(getNearestAttribute(startEl, 'data-swipe-timeout', '500'), 10); // default 500ms\n var timeDiff = Date.now() - timeDown;\n var eventType = '';\n var changedTouches = e.changedTouches || e.touches || [];\n\n if (swipeUnit === 'vh') {\n swipeThreshold = Math.round((swipeThreshold / 100) * document.documentElement.clientHeight); // get percentage of viewport height in pixels\n }\n if (swipeUnit === 'vw') {\n swipeThreshold = Math.round((swipeThreshold / 100) * document.documentElement.clientWidth); // get percentage of viewport height in pixels\n }\n\n if (Math.abs(xDiff) > Math.abs(yDiff)) { // most significant\n if (Math.abs(xDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (xDiff > 0) {\n eventType = 'swiped-left';\n }\n else {\n eventType = 'swiped-right';\n }\n }\n }\n else if (Math.abs(yDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (yDiff > 0) {\n eventType = 'swiped-up';\n }\n else {\n eventType = 'swiped-down';\n }\n }\n\n if (eventType !== '') {\n\n var eventData = {\n dir: eventType.replace(/swiped-/, ''),\n touchType: (changedTouches[0] || {}).touchType || 'direct',\n fingers: touchCount, // Number of fingers used\n xStart: parseInt(xDown, 10),\n xEnd: parseInt((changedTouches[0] || {}).clientX || -1, 10),\n yStart: parseInt(yDown, 10),\n yEnd: parseInt((changedTouches[0] || {}).clientY || -1, 10)\n };\n\n // fire `swiped` event event on the element that started the swipe\n startEl.dispatchEvent(new CustomEvent('swiped', { bubbles: true, cancelable: true, detail: eventData }));\n\n // fire `swiped-dir` event on the element that started the swipe\n startEl.dispatchEvent(new CustomEvent(eventType, { bubbles: true, cancelable: true, detail: eventData }));\n }\n\n // reset values\n xDown = null;\n yDown = null;\n timeDown = null;\n }\n /**\n * Records current location on touchstart event\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchStart(e) {\n\n // if the element has data-swipe-ignore=\"true\" we stop listening for swipe events\n if (e.target.getAttribute('data-swipe-ignore') === 'true') return;\n\n startEl = e.target;\n\n timeDown = Date.now();\n xDown = e.touches[0].clientX;\n yDown = e.touches[0].clientY;\n xDiff = 0;\n yDiff = 0;\n touchCount = e.touches.length;\n }\n\n /**\n * Records location diff in px on touchmove event\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchMove(e) {\n\n if (!xDown || !yDown) return;\n\n var xUp = e.touches[0].clientX;\n var yUp = e.touches[0].clientY;\n\n xDiff = xDown - xUp;\n yDiff = yDown - yUp;\n }\n\n /**\n * Gets attribute off HTML element or nearest parent\n * @param {object} el - HTML element to retrieve attribute from\n * @param {string} attributeName - name of the attribute\n * @param {any} defaultValue - default value to return if no match found\n * @returns {any} attribute value or defaultValue\n */\n function getNearestAttribute(el, attributeName, defaultValue) {\n\n // walk up the dom tree looking for attributeName\n while (el && el !== document.documentElement) {\n\n var attributeValue = el.getAttribute(attributeName);\n\n if (attributeValue) {\n return attributeValue;\n }\n\n el = el.parentNode;\n }\n\n return defaultValue;\n }\n\n}(window, document));\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n\nimport \"../../../node_modules/swiped-events/src/swiped-events.js\";\n\n(function (w, d, searxng) {\n 'use strict';\n\n if (searxng.endpoint !== 'results') {\n return;\n }\n\n searxng.ready(function () {\n d.querySelectorAll('#urls img').forEach(\n img =>\n img.addEventListener(\n 'error', () => {\n // console.log(\"ERROR can't load: \" + img.src);\n img.src = window.searxng.settings.theme_static_path + \"/img/img_load_error.svg\";\n },\n {once: true}\n ));\n\n if (d.querySelector('#search_url button#copy_url')) {\n d.querySelector('#search_url button#copy_url').style.display = \"block\";\n }\n\n searxng.on('.btn-collapse', 'click', function () {\n var btnLabelCollapsed = this.getAttribute('data-btn-text-collapsed');\n var btnLabelNotCollapsed = this.getAttribute('data-btn-text-not-collapsed');\n var target = this.getAttribute('data-target');\n var targetElement = d.querySelector(target);\n var html = this.innerHTML;\n if (this.classList.contains('collapsed')) {\n html = html.replace(btnLabelCollapsed, btnLabelNotCollapsed);\n } else {\n html = html.replace(btnLabelNotCollapsed, btnLabelCollapsed);\n }\n this.innerHTML = html;\n this.classList.toggle('collapsed');\n targetElement.classList.toggle('invisible');\n });\n\n searxng.on('.media-loader', 'click', function () {\n var target = this.getAttribute('data-target');\n var iframe_load = d.querySelector(target + ' > iframe');\n var srctest = iframe_load.getAttribute('src');\n if (srctest === null || srctest === undefined || srctest === false) {\n iframe_load.setAttribute('src', iframe_load.getAttribute('data-src'));\n }\n });\n\n searxng.on('#copy_url', 'click', function () {\n var target = this.parentElement.querySelector('pre');\n navigator.clipboard.writeText(target.innerText);\n this.innerText = this.dataset.copiedText;\n });\n\n // searxng.selectImage (gallery)\n // -----------------------------\n\n // setTimeout() ID, needed to cancel *last* loadImage\n let imgTimeoutID;\n\n // progress spinner, while an image is loading\n const imgLoaderSpinner = d.createElement('div');\n imgLoaderSpinner.classList.add('loader');\n\n // singleton image object, which is used for all loading processes of a\n // detailed image\n const imgLoader = new Image();\n\n const loadImage = (imgSrc, onSuccess) => {\n // if defered image load exists, stop defered task.\n if (imgTimeoutID) clearTimeout(imgTimeoutID);\n\n // defer load of the detail image for 1 sec\n imgTimeoutID = setTimeout(() => {\n imgLoader.src = imgSrc;\n }, 1000);\n\n // set handlers in the on-properties\n imgLoader.onload = () => {\n onSuccess();\n imgLoaderSpinner.remove();\n };\n imgLoader.onerror = () => {\n imgLoaderSpinner.remove();\n };\n };\n\n searxng.selectImage = (resultElement) => {\n\n // add a class that can be evaluated in the CSS and indicates that the\n // detail view is open\n d.getElementById('results').classList.add('image-detail-open');\n\n // add a hash to the browser history so that pressing back doesn't return\n // to the previous page this allows us to dismiss the image details on\n // pressing the back button on mobile devices\n window.location.hash = '#image-viewer';\n\n searxng.scrollPageToSelected();\n\n // if there is none element given by the caller, stop here\n if (!resultElement) return;\n\n // find object in the element, if there is none, stop here.\n const img = resultElement.querySelector('.result-images-source img');\n if (!img) return;\n\n // \n const src = img.getAttribute('data-src');\n\n // already loaded high-res image or no high-res image available\n if (!src) return;\n\n // use the image thumbnail until the image is fully loaded\n const thumbnail = resultElement.querySelector('.image_thumbnail');\n img.src = thumbnail.src;\n\n // show a progress spinner\n const detailElement = resultElement.querySelector('.detail');\n detailElement.appendChild(imgLoaderSpinner);\n\n // load full size image in background\n loadImage(src, () => {\n // after the singelton loadImage has loaded the detail image into the\n // cache, it can be used in the origin as src property.\n img.src = src;\n img.removeAttribute('data-src');\n });\n };\n\n searxng.closeDetail = function () {\n d.getElementById('results').classList.remove('image-detail-open');\n // remove #image-viewer hash from url by navigating back\n if (window.location.hash == '#image-viewer') window.history.back();\n searxng.scrollPageToSelected();\n };\n searxng.on('.result-detail-close', 'click', e => {\n e.preventDefault();\n searxng.closeDetail();\n });\n searxng.on('.result-detail-previous', 'click', e => {\n e.preventDefault();\n searxng.selectPrevious(false);\n });\n searxng.on('.result-detail-next', 'click', e => {\n e.preventDefault();\n searxng.selectNext(false);\n });\n\n // listen for the back button to be pressed and dismiss the image details when called\n window.addEventListener('hashchange', () => {\n if (window.location.hash != '#image-viewer') searxng.closeDetail();\n });\n\n d.querySelectorAll('.swipe-horizontal').forEach(\n obj => {\n obj.addEventListener('swiped-left', function () {\n searxng.selectNext(false);\n });\n obj.addEventListener('swiped-right', function () {\n searxng.selectPrevious(false);\n });\n }\n );\n\n w.addEventListener('scroll', function () {\n var e = d.getElementById('backToTop'),\n scrollTop = document.documentElement.scrollTop || document.body.scrollTop,\n results = d.getElementById('results');\n if (e !== null) {\n if (scrollTop >= 100) {\n results.classList.add('scrolling');\n } else {\n results.classList.remove('scrolling');\n }\n }\n }, true);\n\n });\n\n})(window, document, window.searxng);\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* exported AutoComplete */\n\n(function (w, d, searxng) {\n 'use strict';\n\n var qinput_id = \"q\", qinput;\n\n const isMobile = window.matchMedia(\"only screen and (max-width: 50em)\").matches;\n const isResultsPage = document.querySelector(\"main\").id == \"main_results\";\n\n function submitIfQuery () {\n if (qinput.value.length > 0) {\n var search = document.getElementById('search');\n setTimeout(search.submit.bind(search), 0);\n }\n }\n\n function createClearButton (qinput) {\n var cs = document.getElementById('clear_search');\n var updateClearButton = function () {\n if (qinput.value.length === 0) {\n cs.classList.add(\"empty\");\n } else {\n cs.classList.remove(\"empty\");\n }\n };\n\n // update status, event listener\n updateClearButton();\n cs.addEventListener('click', function (ev) {\n qinput.value = '';\n qinput.focus();\n updateClearButton();\n ev.preventDefault();\n });\n qinput.addEventListener('input', updateClearButton, false);\n }\n\n const fetchResults = async (query) => {\n let request;\n if (searxng.settings.method === 'GET') {\n const reqParams = new URLSearchParams();\n reqParams.append(\"q\", query);\n request = fetch(\"./autocompleter?\" + reqParams.toString());\n } else {\n const formData = new FormData();\n formData.append(\"q\", query);\n request = fetch(\"./autocompleter\", {\n method: 'POST',\n body: formData,\n });\n }\n\n request.then(async function (response) {\n const results = await response.json();\n\n if (!results) return;\n\n const autocomplete = d.querySelector(\".autocomplete\");\n const autocompleteList = d.querySelector(\".autocomplete ul\");\n autocomplete.classList.add(\"open\");\n autocompleteList.innerHTML = \"\";\n\n // show an error message that no result was found\n if (!results[1] || results[1].length == 0) {\n const noItemFoundMessage = document.createElement(\"li\");\n noItemFoundMessage.classList.add('no-item-found');\n noItemFoundMessage.innerHTML = searxng.settings.translations.no_item_found;\n autocompleteList.appendChild(noItemFoundMessage);\n return;\n }\n\n for (let result of results[1]) {\n const li = document.createElement(\"li\");\n li.innerText = result;\n\n searxng.on(li, 'mousedown', () => {\n qinput.value = result;\n const form = d.querySelector(\"#search\");\n form.submit();\n autocomplete.classList.remove('open');\n });\n autocompleteList.appendChild(li);\n }\n });\n };\n\n searxng.ready(function () {\n // focus search input on large screens\n if (!isMobile && !isResultsPage) document.getElementById(\"q\").focus();\n\n qinput = d.getElementById(qinput_id);\n const autocomplete = d.querySelector(\".autocomplete\");\n const autocompleteList = d.querySelector(\".autocomplete ul\");\n\n if (qinput !== null) {\n // clear button\n createClearButton(qinput);\n\n // autocompleter\n if (searxng.settings.autocomplete) {\n searxng.on(qinput, 'input', () => {\n const query = qinput.value;\n if (query.length < searxng.settings.autocomplete_min) return;\n\n setTimeout(() => {\n if (query == qinput.value) fetchResults(query);\n }, 300);\n });\n\n searxng.on(qinput, 'keyup', (e) => {\n let currentIndex = -1;\n const listItems = autocompleteList.children;\n for (let i = 0; i < listItems.length; i++) {\n if (listItems[i].classList.contains('active')) {\n currentIndex = i;\n break;\n }\n }\n\n let newCurrentIndex = -1;\n if (e.key === \"ArrowUp\") {\n if (currentIndex >= 0) listItems[currentIndex].classList.remove('active');\n // we need to add listItems.length to the index calculation here because the JavaScript modulos\n // operator doesn't work with negative numbers\n newCurrentIndex = (currentIndex - 1 + listItems.length) % listItems.length;\n } else if (e.key === \"ArrowDown\") {\n if (currentIndex >= 0) listItems[currentIndex].classList.remove('active');\n newCurrentIndex = (currentIndex + 1) % listItems.length;\n } else if (e.key === \"Tab\" || e.key === \"Enter\") {\n autocomplete.classList.remove('open');\n }\n\n if (newCurrentIndex != -1) {\n const selectedItem = listItems[newCurrentIndex];\n selectedItem.classList.add('active');\n\n if (!selectedItem.classList.contains('no-item-found')) qinput.value = selectedItem.innerText;\n }\n });\n }\n }\n\n // Additionally to searching when selecting a new category, we also\n // automatically start a new search request when the user changes a search\n // filter (safesearch, time range or language) (this requires JavaScript\n // though)\n if (\n qinput !== null\n && searxng.settings.search_on_category_select\n // If .search_filters is undefined (invisible) we are on the homepage and\n // hence don't have to set any listeners\n && d.querySelector(\".search_filters\") != null\n ) {\n searxng.on(d.getElementById('safesearch'), 'change', submitIfQuery);\n searxng.on(d.getElementById('time_range'), 'change', submitIfQuery);\n searxng.on(d.getElementById('language'), 'change', submitIfQuery);\n }\n\n const categoryButtons = d.querySelectorAll(\"button.category_button\");\n for (let button of categoryButtons) {\n searxng.on(button, 'click', (event) => {\n if (event.shiftKey) {\n event.preventDefault();\n button.classList.toggle(\"selected\");\n return;\n }\n\n // manually deselect the old selection when a new category is selected\n const selectedCategories = d.querySelectorAll(\"button.category_button.selected\");\n for (let categoryButton of selectedCategories) {\n categoryButton.classList.remove(\"selected\");\n }\n button.classList.add(\"selected\");\n });\n }\n\n // override form submit action to update the actually selected categories\n const form = d.querySelector(\"#search\");\n if (form != null) {\n searxng.on(form, 'submit', (event) => {\n event.preventDefault();\n const categoryValuesInput = d.querySelector(\"#selected-categories\");\n if (categoryValuesInput) {\n let categoryValues = [];\n for (let categoryButton of categoryButtons) {\n if (categoryButton.classList.contains(\"selected\")) {\n categoryValues.push(categoryButton.name.replace(\"category_\", \"\"));\n }\n }\n categoryValuesInput.value = categoryValues.join(\",\");\n }\n form.submit();\n });\n }\n });\n\n})(window, document, window.searxng);\n"],"names":["w","d","ElementPrototype","selector","node","nodes","i","callbackSafe","callback","el","e","exception","searxng","obj","eventType","useCapture","found","method","url","data","resolve","reject","req","ex","src","path","id","s","newNode","referenceNode","getEndpoint","className","onlyImages","newLoadSpinner","loader","replaceChildrenWith","element","children","child","loadNextPage","form","formData","response","nextPageDoc","articleList","paginationElement","articleElement","err","intersectionObserveOptions","observedSelector","observer","entries","paginationEntry","isElementInDetail","getResultElement","isImageResult","resultElement","highlightResult","baseKeyBinding","removeFocus","copyURLToClipboard","toggleHelp","searchInputFocus","GoToNextPage","openResult","GoToPreviousPage","reloadPage","keyBindingLayouts","scrollPage","scrollPageTo","keyBindings","tagName","which","noScroll","keepFocus","current","effectiveWhich","next","results","top","bot","etop","ebot","link","scrollPageToSelected","pageButtonClick","css_selector","button","sel","wtop","wheight","offset","wbot","amount","position","nav","q","len","newTab","initHelpContent","divElement","categories","k","key","sorted","a","b","html","cat","lastCategory","first","cj","helpPanel","body","currentUrlElement","event","leaflet_target","map_lon","map_lat","map_zoom","map_boundingbox","map_geojson","map_bounds","southWest","northEast","map","osmMapnikUrl","osmMapnikAttrib","osmMapnik","osmWikimediaUrl","osmWikimediaAttrib","osmWikimedia","baseLayers","engine_descriptions","load_engine_descriptions","content","engine_name","description","elements","source","enableAllEngines","disableAllEngines","engineToggles","toggleEngines","enable","copyHashButton","window","document","params","evt","handleTouchStart","handleTouchMove","handleTouchEnd","xDown","yDown","xDiff","yDiff","timeDown","startEl","touchCount","swipeThreshold","getNearestAttribute","swipeUnit","swipeTimeout","timeDiff","changedTouches","eventData","xUp","yUp","attributeName","defaultValue","attributeValue","img","btnLabelCollapsed","btnLabelNotCollapsed","target","targetElement","iframe_load","srctest","imgTimeoutID","imgLoaderSpinner","imgLoader","loadImage","imgSrc","onSuccess","thumbnail","scrollTop","qinput_id","qinput","isMobile","isResultsPage","submitIfQuery","search","createClearButton","cs","updateClearButton","ev","fetchResults","query","request","reqParams","autocomplete","autocompleteList","noItemFoundMessage","result","li","currentIndex","listItems","newCurrentIndex","selectedItem","categoryButtons","selectedCategories","categoryButton","categoryValuesInput","categoryValues"],"mappings":"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","x_google_ignoreList":[5]} \ No newline at end of file From 20b40351b9e36dffc06b44dfaf3c4846b569d63e Mon Sep 17 00:00:00 2001 From: Bnyro Date: Mon, 26 May 2025 12:34:04 +0200 Subject: [PATCH 69/82] [chore] il post: disable by default --- searx/settings.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/searx/settings.yml b/searx/settings.yml index 64affcadc..1fdf221b0 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -1116,6 +1116,7 @@ engines: - name: il post engine: il_post shortcut: pst + disabled: true - name: huggingface engine: huggingface From 2288f07d621d67d6b39f0d0073cdcc951ec22726 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Wed, 28 May 2025 11:36:37 +0200 Subject: [PATCH 70/82] [fix] presearch: reuse response cookies from token extraction Why? - presearch requires the response cookies of the first request to be sent within the second request - otherwise we miss auth information and the engine doesn't work Related: - https://github.com/searxng/searxng/pull/4858 - closes https://github.com/searxng/searxng/issues/4854 Co-authored-by: Aadniz <8147434+Aadniz@users.noreply.github.com> --- searx/engines/presearch.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/searx/engines/presearch.py b/searx/engines/presearch.py index 1093b5cff..36b754f87 100644 --- a/searx/engines/presearch.py +++ b/searx/engines/presearch.py @@ -137,19 +137,20 @@ def _get_request_id(query, params): if l.territory: headers['Accept-Language'] = f"{l.language}-{l.territory},{l.language};" "q=0.9,*;" "q=0.5" - resp_text = get(url, headers=headers).text # type: ignore + resp = get(url, headers=headers) - for line in resp_text.split("\n"): + for line in resp.text.split("\n"): if "window.searchId = " in line: - return line.split("= ")[1][:-1].replace('"', "") + return line.split("= ")[1][:-1].replace('"', ""), resp.cookies - return None + raise RuntimeError("Couldn't find any request id for presearch") def request(query, params): - request_id = _get_request_id(query, params) + request_id, cookies = _get_request_id(query, params) params["headers"]["Accept"] = "application/json" params["url"] = f"{base_url}/results?id={request_id}" + params["cookies"] = cookies return params From 70a387a48fc08bd1984ed162ebc3cc181e6ac162 Mon Sep 17 00:00:00 2001 From: searxng-bot Date: Thu, 29 May 2025 00:38:04 +0000 Subject: [PATCH 71/82] [data] update searx.data - update_engine_descriptions.py --- searx/data/engine_descriptions.json | 539 ++++++++++++++++++++++------ 1 file changed, 439 insertions(+), 100 deletions(-) diff --git a/searx/data/engine_descriptions.json b/searx/data/engine_descriptions.json index fbccee24b..47ab4fcf7 100644 --- a/searx/data/engine_descriptions.json +++ b/searx/data/engine_descriptions.json @@ -88,23 +88,23 @@ }, "ar":{ "1337x":"1337x هو موقع ويب يوفر دليلًا لملفات التورنت وروابط التورنت المستخدمة لمشاركة الملفات من نظير إلى نظير من خلال بروتوكول بت تورنت. وفقًا لمدونة أخبار تورنت فريك، فإن 1337x هو ثالث أشهر مواقع التورنت اعتبارًا من عام 2021.", - "9gag":"9جاج ‏ هو موقع صور قائم على مواقع الإعلام الاجتماعي ويتمحور حول الصور التي يرفعها المستخدمون والصور الهزلية، يزور الموقع شهريا مليارا زائر كما في شهر ديسمبر 2011 حسب موسس الموقع راي تشان. ويعرف الموقع بشكل رئيسي باستخدام ميم إنترنت.", - "alpine linux packages":"ألباين لينكس ‏ هي توزيعة لينكس مستقلة صممت لتكون صغيرة وبسيطة وآمنة. تستخدم التوزيعة مسل، وبيزي بوكس، وأوبن آر سي بدلًا من مكتبة جنو لسي، وأدوات جنو الأساسية، وسيستم دي الاعتياديين الموجودين في أغلب التوزيعات، مما يجعلها أحد التوزيعات القليلة التي لا تعتمد على جنو.", - "ansa":"وكالة الأنباء الإيطالية أو الوكالة القومية المشتركة للأنباء (بالإيطالية: Agenzia Nazionale Stampa Associata)‏ «أنسا». هي أكبر وكالة للمعلومات في إيطاليا وإحدى كبريات وكالات الأنباء العالمية. تعتبر أنسا وكالة أنباء تعاونية غير ربحية. كما أن أعضائها والمالكون لها هم 36 من كبريات شبكات ووكالات الأنباء في إيطاليا. ومهمتها تكمن في بث تقارير موضوعية ومحايدة للأخبار.", - "apple app store":"متجر التطبيقات ‏ هي خدمة أنتجت لجهازي آي فون وآي بود تاتش وآي باد. صممته وتملكه شركة أبل والتي تمكن المستخدمين من تحميل التطبيقات المختلفة من خلال البرنامج نفسه على الجهاز دون الحاجة لبرنامج آي تيونز ستور بعد تحديث نظام التشغيل iOS 10. بلغ متوسط القيمة التقديرية لحجم المتجر 6 مليارات و200 مليون في عام 2010.", - "apple maps":"خرائط أبل ‏ هي خدمة خرائط ويب طورتها شركة أبل وهو نظام الخرائط الافتراضي الخاص بالأجهزة المستخدمة لأنظمة آي أو إس وماك أوس وووتش أو إس. توفر الخدمة معلومات الاتجاهات والزمن التقديري لوصول السيارات والمشاة وملاحة النقل العام. كما تُقدم خرائط أبل ميزة خاصة تُمكن المستخدم من استكشاف بعض المراكز الحضرية المكتظة بالسكان وغيرها من الأماكن الهامة بمشاهد ثلاثية الأبعاد تُظهر الأبنية.", + "9gag":"9جاج هو موقع صور قائم على مواقع الإعلام الاجتماعي ويتمحور حول الصور التي يرفعها المستخدمون والصور الهزلية، يزور الموقع شهريا مليارا زائر كما في شهر ديسمبر 2011 حسب موسس الموقع راي تشان. ويعرف الموقع بشكل رئيسي باستخدام ميم إنترنت.", + "alpine linux packages":"ألباين لينكس هي توزيعة لينكس مستقلة صممت لتكون صغيرة وبسيطة وآمنة. تستخدم التوزيعة مسل، وبيزي بوكس، وأوبن آر سي بدلًا من مكتبة جنو لسي، وأدوات جنو الأساسية، وسيستم دي الاعتياديين الموجودين في أغلب التوزيعات، مما يجعلها أحد التوزيعات القليلة التي لا تعتمد على جنو.", + "ansa":"وكالة الأنباء الإيطالية أو الوكالة القومية المشتركة للأنباء (بالإيطالية: Agenzia Nazionale Stampa Associata) «أنسا». هي أكبر وكالة للمعلومات في إيطاليا وإحدى كبريات وكالات الأنباء العالمية. تعتبر أنسا وكالة أنباء تعاونية غير ربحية. كما أن أعضائها والمالكون لها هم 36 من كبريات شبكات ووكالات الأنباء في إيطاليا. ومهمتها تكمن في بث تقارير موضوعية ومحايدة للأخبار.", + "apple app store":"متجر التطبيقات هي خدمة أنتجت لجهازي آي فون وآي بود تاتش وآي باد. صممته وتملكه شركة أبل والتي تمكن المستخدمين من تحميل التطبيقات المختلفة من خلال البرنامج نفسه على الجهاز دون الحاجة لبرنامج آي تيونز ستور بعد تحديث نظام التشغيل iOS 10. بلغ متوسط القيمة التقديرية لحجم المتجر 6 مليارات و200 مليون في عام 2010.", + "apple maps":"خرائط أبل هي خدمة خرائط ويب طورتها شركة أبل وهو نظام الخرائط الافتراضي الخاص بالأجهزة المستخدمة لأنظمة آي أو إس وماك أوس وووتش أو إس. توفر الخدمة معلومات الاتجاهات والزمن التقديري لوصول السيارات والمشاة وملاحة النقل العام. كما تُقدم خرائط أبل ميزة خاصة تُمكن المستخدم من استكشاف بعض المراكز الحضرية المكتظة بالسكان وغيرها من الأماكن الهامة بمشاهد ثلاثية الأبعاد تُظهر الأبنية.", "arch linux wiki":[ "توثيق آرتش لينكس على الوِب", "wikidata" ], "artic":"معهد الفن في شيكاغو متحف عام للفن، ومركز ثقافي وتعليمي في الولايات المتحدة. تأسس معهد الفن عام 1866 باسم أكاديمية شيكاغو للتصميم، تضم المجموعات المعروضة في المعهد اللوحات والمنحوتات، والمطبوعات والرسومات والفنون الزخرفية الأوروبية والأمريكية والفن الشرقي والكلاسيكي وفن التصوير الضوئي والمنسوجات وفنون وحرف أفريقيا وأمريكا اللاتينية وجزر المحيط الهادئ وأمريكا ما قبل كولمبوس.", - "arxiv":"أرخايف ‏ بحيث تُنطق في النهاية «أركايف» أو «أرخايف». أرخايف هو أرشيف لمسودات أوراق علمية إلكترونية مكتوبة في مجالات الفيزياء، الرياضيات، الفلك، علم الحاسوب، والإحصاء التي يمكن الوصول إليها عبر الإنترنت. هذه الأرشيفات موجودة على موقع arXiv.org.", - "ask":"أسك دوت كوم ‏ هو باحوث ‏ يركز على الرد على الأسئلة. تأسس الموقع في العام 1996 من قبل غاريت جرونر وديفيد وارثن في بيركلي، كاليفورنيا.", + "arxiv":"أرخايف بحيث تُنطق في النهاية «أركايف» أو «أرخايف». أرخايف هو أرشيف لمسودات أوراق علمية إلكترونية مكتوبة في مجالات الفيزياء، الرياضيات، الفلك، علم الحاسوب، والإحصاء التي يمكن الوصول إليها عبر الإنترنت. هذه الأرشيفات موجودة على موقع arXiv.org.", + "ask":"أسك دوت كوم هو باحوث يركز على الرد على الأسئلة. تأسس الموقع في العام 1996 من قبل غاريت جرونر وديفيد وارثن في بيركلي، كاليفورنيا.", "askubuntu":[ "stackoverflow:ar", "ref" ], - "baidu":"بايدو ‏ هو محرك بحث صيني انطلق يوم 18 يناير 2000. وهو المصنف رقم واحد في الصين والثالث عالمياً حسب عدد الزيارات حسب تصنيف أليكسا، حيث يمكن هذا الموقع من البحث في أكثر من 57 تصنيف مختلف، منها الصور، الفيديو، الأخبار والوثائق وغيرها الكثير. قام بإنشاء موقع بايدو الصينيان روبن لي وإريك تشو، وكلاهما درسا خارج الصين قبل العودة إليها بشهادات عليا حيث أسسا شركة بايدو. وفي سنة 2007، صارت شركة بايدو أول شركة صينية تُسَجل في بورصة نازداك الأمريكية.واتخذ بايدو كشعار له، بايدو يعرف الصينيين أفضل، أو أفضل من غيره، مشيراً بذلك إلى منافسيه الذين يعملون أساساً من قارات بعيدة عن الصين كجوجل.", + "baidu":"بايدو هو محرك بحث صيني انطلق يوم 18 يناير 2000. وهو المصنف رقم واحد في الصين والثالث عالمياً حسب عدد الزيارات حسب تصنيف أليكسا، حيث يمكن هذا الموقع من البحث في أكثر من 57 تصنيف مختلف، منها الصور، الفيديو، الأخبار والوثائق وغيرها الكثير. قام بإنشاء موقع بايدو الصينيان روبن لي وإريك تشو، وكلاهما درسا خارج الصين قبل العودة إليها بشهادات عليا حيث أسسا شركة بايدو. وفي سنة 2007، صارت شركة بايدو أول شركة صينية تُسَجل في بورصة نازداك الأمريكية.واتخذ بايدو كشعار له، بايدو يعرف الصينيين أفضل، أو أفضل من غيره، مشيراً بذلك إلى منافسيه الذين يعملون أساساً من قارات بعيدة عن الصين كجوجل.", "baidu images":[ "baidu:ar", "ref" @@ -114,7 +114,7 @@ "ref" ], "bilibili":"بيليبيلي (بالأنجليزية:bilibili) هو موقع ويب من نوع خدمة استضافة فيديو وتطبيق محمول أنشئ في 26 يونيو 2009، يقع مقره الرئيسي في الصين، وهو متوفر باللغة الصينية. يعد Bilibili واحداً من أهم منصات الفيديو الناشئة في الصين. يحظى الموقع بشعبية ضخمة بين الجيل Z في الصين. يميل محتوى Bilibili إلى أن يكون حول الألعاب والرسوم المتحركة والقصص المصورة. ومع ذلك، فإن عدد أنواع الفيديو الشائعة يتغير مع تزايد شعبية المنصة، ويرتبط معظمها بأسلوب الحياة والجمال. وهو يتشابه إلى حد كبير مع موقع اليوتيوب.", - "bing":"مايكروسوفت بينغ ‏ واختصارًا وهو الاسم السابق: بينغ ‏ ؛ هو محرك بحث أعلن عنه تحت اسم ، طور تحت اسم بالعربية: كومو وإنجليزية: kumo, هو محرك بحث في ويب لشركة مايكروسوفت، صمم لمنافسة رواد هذا المجال جوجل وياهو!، تم الإفصاح عنه من قبل ستيف بالمر الرئيس التنفيذي السابق في مايكروسوفت في 28 مايو 2009 في مؤتمر All Things D في سان دييغو، بينغ هو بديل لايف سيرش Live Search، بدأ عمله بالكامل في 3 يونيو 2009.", + "bing":"مايكروسوفت بينغ واختصارًا وهو الاسم السابق: بينغ ؛ هو محرك بحث أعلن عنه تحت اسم ، طور تحت اسم بالعربية: كومو وإنجليزية: kumo, هو محرك بحث في ويب لشركة مايكروسوفت، صمم لمنافسة رواد هذا المجال جوجل وياهو!، تم الإفصاح عنه من قبل ستيف بالمر الرئيس التنفيذي السابق في مايكروسوفت في 28 مايو 2009 في مؤتمر All Things D في سان دييغو، بينغ هو بديل لايف سيرش Live Search، بدأ عمله بالكامل في 3 يونيو 2009.", "bing images":[ "bing:ar", "ref" @@ -131,8 +131,8 @@ "خدمة استضافة على شبكة الإنترنت لمشاريع تطوير البرمجيات", "wikidata" ], - "bitchute":"بيتشيوت ‏ هو موقع وتطبيق خدمة فيديوهات تم إنشائه في إنجلترا في يناير 2017 من قبل راي فاهي لينافس يوتيوب، حاز هذا الموقع على شعبية عند مدوني اليمين الأقصى مثل أليكس جونس ومن ألذين تم منعهم بسبب سياسات يوتيوب، وقد أتهم الموقع بإثارة الكراهية.", - "brave":"بريف ‏ وتعني شجاع هو متصفح ويب مفتوح المصدر مبني على كروميوم، يعمل المتصفح على نظم تشغيل مايكروسوفت ويندوز وماك أو إس وجنو/لينكس، وكذلك يعمل على نظامي آي أو إس وأندرويد. ترأس بريندان أيخ، منشئ جافاسكربت وأحد مؤسسي مؤسسة موزيلا، مشروع تطوير هذا المتصفح.", + "bitchute":"بيتشيوت هو موقع وتطبيق خدمة فيديوهات تم إنشائه في إنجلترا في يناير 2017 من قبل راي فاهي لينافس يوتيوب، حاز هذا الموقع على شعبية عند مدوني اليمين الأقصى مثل أليكس جونس ومن ألذين تم منعهم بسبب سياسات يوتيوب، وقد أتهم الموقع بإثارة الكراهية.", + "brave":"بريف وتعني شجاع هو متصفح ويب مفتوح المصدر مبني على كروميوم، يعمل المتصفح على نظم تشغيل مايكروسوفت ويندوز وماك أو إس وجنو/لينكس، وكذلك يعمل على نظامي آي أو إس وأندرويد. ترأس بريندان أيخ، منشئ جافاسكربت وأحد مؤسسي مؤسسة موزيلا، مشروع تطوير هذا المتصفح.", "brave.images":[ "brave:ar", "ref" @@ -145,14 +145,14 @@ "brave:ar", "ref" ], - "currency":"دك دك غو أو داك داك غو ‏ هو محرك بحث على الإنترنت يركز على حماية خصوصية الباحثين وتجنب فقاعة التصفية لنتائج البحث المخصصة. يميز DuckDuckGo نفسه عن محركات البحث الأخرى من خلال عدم تحديد سمات مستخدميه وإظهار نفس نتائج البحث لجميع المستخدمين لمصطلح بحث معين.", + "currency":"دك دك غو أو داك داك غو هو محرك بحث على الإنترنت يركز على حماية خصوصية الباحثين وتجنب فقاعة التصفية لنتائج البحث المخصصة. يميز DuckDuckGo نفسه عن محركات البحث الأخرى من خلال عدم تحديد سمات مستخدميه وإظهار نفس نتائج البحث لجميع المستخدمين لمصطلح بحث معين.", "dailymotion":"ديلي موشن (Dailymotion) هو موقع ويب شهير متخصص بمشاركة الفيديو، يعتبر منافس ليوتويب، يسمح للمستخدمين برفع ومشاهدة ومشاركة مقاطع الفيديو بشكل مجاني. في نوفمبر 2012 احتل الموقع المرتبة 31 لأكثر المواقع زيارة في العالم بحجم زائرين يصل إلى 116 مليون زائر في الشهر.", "ddg definitions":[ "currency:ar", "ref" ], - "deezer":"ديزر ‏ وهي منصة إلكترونية تقدم خدمة بث الموسيقى. وتتيح للمستخدمين الاستماع إلى الموسيقى من شركات إنتاج موسيقية، مثل: سوني للترفيه الموسيقي، ومجموعة يونيفرسال ميوزيك، ووارنر ميوزيك على مختلف الأجهزة سواء باستخدام الإنترنت أو من دون اتصال. تم إنشاء المنصّة في باريس، فرنسا، لدى دييزر حاليا 56 مليون ملف صوتي في المكتبة، مع أكثر من 60,000 قناة راديو، و18 مليون مستخدم نشط شهريا، منهم 7 ملايين مشترك اشتراك مدفوع منذ 3 أبريل 2020. الخدمة متاحة على شبكة الإنترنت، ونظام اندرويد، ونظام آي أو اس، وويندوز موبايل، ونظام التشغيل بلاك بيري، وويندوز، وماك.", - "deviantart":"ديڤينت‌آرت ‏ هو هو مجتمع فن أمريكي يتناول الأعمال الفنية، والتصوير الفيديوي والفوتوغرافي. أطلق في 7 أغسطس، 2000، من قبل انجيلو سوتيرا، سكوت جاركوف، ماثيو ستيفنز، وآخرين. تنظم الأعمال الفنية بحسب تصنيفات، وتشمل التصنيفات، التصوير الفوتوغرافي، والفن الرقمي، والفن التقليدي، والأدب، وفلاش، وصناعة الإفلام أو تصوير الأفلام، والأغلفة للتطبيقات، وأدوات تخصيص نظام التشغيل وغيرها، بالإضافة إلى المواد القابلة للتنزيل مثل الدورات التعليمية، والصور الفوتوغرافية. بالإضافة إلى مزايا إضافية مثل المجلات، والاستفتاءات، والمجموعات، ووملفات الأعمال الفنية.", + "deezer":"ديزر وهي منصة إلكترونية تقدم خدمة بث الموسيقى. وتتيح للمستخدمين الاستماع إلى الموسيقى من شركات إنتاج موسيقية، مثل: سوني للترفيه الموسيقي، ومجموعة يونيفرسال ميوزيك، ووارنر ميوزيك على مختلف الأجهزة سواء باستخدام الإنترنت أو من دون اتصال. تم إنشاء المنصّة في باريس، فرنسا، لدى دييزر حاليا 56 مليون ملف صوتي في المكتبة، مع أكثر من 60,000 قناة راديو، و18 مليون مستخدم نشط شهريا، منهم 7 ملايين مشترك اشتراك مدفوع منذ 3 أبريل 2020. الخدمة متاحة على شبكة الإنترنت، ونظام اندرويد، ونظام آي أو اس، وويندوز موبايل، ونظام التشغيل بلاك بيري، وويندوز، وماك.", + "deviantart":"ديڤينت‌آرت هو هو مجتمع فن أمريكي يتناول الأعمال الفنية، والتصوير الفيديوي والفوتوغرافي. أطلق في 7 أغسطس، 2000، من قبل انجيلو سوتيرا، سكوت جاركوف، ماثيو ستيفنز، وآخرين. تنظم الأعمال الفنية بحسب تصنيفات، وتشمل التصنيفات، التصوير الفوتوغرافي، والفن الرقمي، والفن التقليدي، والأدب، وفلاش، وصناعة الإفلام أو تصوير الأفلام، والأغلفة للتطبيقات، وأدوات تخصيص نظام التشغيل وغيرها، بالإضافة إلى المواد القابلة للتنزيل مثل الدورات التعليمية، والصور الفوتوغرافية. بالإضافة إلى مزايا إضافية مثل المجلات، والاستفتاءات، والمجموعات، ووملفات الأعمال الفنية.", "duckduckgo":[ "currency:ar", "ref" @@ -173,32 +173,32 @@ "currency:ar", "ref" ], - "emojipedia":"إيموجي بيديا ‏ هو موقع على الإنترنت مختص بمراجع الإيموجي، قام بإنشائه متخصص الإيموجي جيرمي بورج في 2013.", + "emojipedia":"إيموجي بيديا هو موقع على الإنترنت مختص بمراجع الإيموجي، قام بإنشائه متخصص الإيموجي جيرمي بورج في 2013.", "etymonline":"قاموس علم اشتقاق الألفاظ هو قاموس حر على الانترنت يصف أصول الكلمات باللغة الإنجليزية.", - "fdroid":"إف-درويد ‏ هو مستودع برامج أو «متجر تطبيقات» لتطبيقات الأندرويد، مماثل ومشابه ل جوجل بلاي ستور . المستودع الرئيسي مستضاف من طرف مشروع يحتوي فقط على تطبيقات ذات برامج حرة أو مفتوحة المصدر. التطبيقات يمكن تصفحها وتحميلها من الموقع الرسمي ل إف-درويد بدون حاجة المستخدم إلى تسجيل أو فتح حساب. «مضاد الميزات» على غرار الإعلانات تستعمل التتبع أو أنها تعتمد على برامج غير حرة ويتم ذكر هذا في الوصف. يقدم الموقع أيضا مصدر الكود للتطبيقات ، حيث أن مضيفي البرامج يستعملون خادم ف-درويد، وبالتالي يسمحون لأي شخص من المجموعة في أن يصبح ملك تطبيق معين في المستودع.", - "flickr":"فليكر ‏ هي خدمة استضافة الصور والفيديو بالإضافة إلى كونها مجتمعًا عبر الإنترنت. تأسَّست فليكر من قِبل لوديكورب ‏ عام 2004 وأصبحت منصّة شائعة للمصورين الهواة والمحترفين لاستضافة صور عاليّة الدقة. تغيّرت ملكية فليكر عدة مرات إلى أن امتلكتها سموج موج ‏ منذ العشرين من نيسان/أبريل 2018.", + "fdroid":"إف-درويد هو مستودع برامج أو «متجر تطبيقات» لتطبيقات الأندرويد، مماثل ومشابه ل جوجل بلاي ستور . المستودع الرئيسي مستضاف من طرف مشروع يحتوي فقط على تطبيقات ذات برامج حرة أو مفتوحة المصدر. التطبيقات يمكن تصفحها وتحميلها من الموقع الرسمي ل إف-درويد بدون حاجة المستخدم إلى تسجيل أو فتح حساب. «مضاد الميزات» على غرار الإعلانات تستعمل التتبع أو أنها تعتمد على برامج غير حرة ويتم ذكر هذا في الوصف. يقدم الموقع أيضا مصدر الكود للتطبيقات ، حيث أن مضيفي البرامج يستعملون خادم ف-درويد، وبالتالي يسمحون لأي شخص من المجموعة في أن يصبح ملك تطبيق معين في المستودع.", + "flickr":"فليكر هي خدمة استضافة الصور والفيديو بالإضافة إلى كونها مجتمعًا عبر الإنترنت. تأسَّست فليكر من قِبل لوديكورب عام 2004 وأصبحت منصّة شائعة للمصورين الهواة والمحترفين لاستضافة صور عاليّة الدقة. تغيّرت ملكية فليكر عدة مرات إلى أن امتلكتها سموج موج منذ العشرين من نيسان/أبريل 2018.", "free software directory":"دليل البرمجيات الحرة (FSD) هو مشروع تابع لمؤسسة البرمجيات الحرة (FSF). يقوم بفهرسة البرامج المجانية التي تعمل في ظل أنظمة التشغيل الحرة - خاصة جنو و لينكس. غالبًا ما تكون المشاريع المفهرسة قادرة على العمل في العديد من أنظمة التشغيل الأخرى. كان المشروع في السابق بالاشتراك مع اليونسكو.", "genius":"جينيس (بالإنجليزية:Genius) كان اسمها سابقاً راب جينيس وهي شركة أمريكية للإعلام الرقمي, أسس الموقع في آب 2009 من قبل توم ليهمان، إيلان زيخوري، ومهبود موغادام، والموقع يتيح للمستخدمين تقديم شروح وتفسير كلمات الأغاني، وقصص إخبارية، ومصادر، ووثائق.", "gentoo":[ "gentoo:en", "ref" ], - "github":"غيت هاب ‏ هي شركة تابعة لمايكروسوفت توفر استضافة لتطوير البرامج والتحكم في الإصدار باستخدام غيت. توفر الشركة وظائف التحكم في الإصدار الموزع وإدارة كود المصدر (SCM) لـ «غيت»، بالإضافة إلى ميزاته الخاصة. يوفر النظام التحكم في الوصول والعديد من ميزات التعاون مثل تتبع الأخطاء وطلبات الميزات البرمجية وإدارة المهام والتركيب المتواصل ومواقع ويكي لكل مشروع غيت هاب. يقع مقرها الرئيسي في كاليفورنيا، وهي شركة تابعة لشركة مايكروسوفت منذ عام 2018.", - "gitlab":"غيت لاب ‏ هي شركة مفتوحة النواة تشتهر بتقديم مدير مستودعات غيت الذي يحمل نفس اسم الشركة.", - "goodreads":"جودريدز أو غودريدز ‏ تترجم للعربية بـ القراءات الجيدة هي شبكة اجتماعية تهتم بالكتب وبتوصيات وآراء المستخدمين حول الكتب والمؤلفين، أسس الموقع في عام 2006 من جهد المبرمج الأمريكي أوتيس تشاندلر. انطلق الموقع في ديسمبر 2006 ووصل عدد الأعضاء المسجلين في جود ريدز إلى أكثر من المليون عضو حتى اليوم، شاركوا بما يزيد على 10 ملايين كتاب، ورغم ذلك فإن الموقع لم يكن هادفاً للربح عند إطلاقه وبعد عام واحد فقط تلقى تمويلاً من إحدى الشركات لدفعه إلى الأمام والمحافظة على خدمته المتميزة. في آذار 2013 أعلنت شركة أمازون استحواذها عليه بدون الإفصاح عن مبلغ العقد.", - "google":"بحث جوجل ‏ أو جوجل ‏، هو محرك بحث صممته شركة جوجل. وهو محرك البحث الأكثر استخدامًا على شبكة الويب العالمية عبر جميع الأنظمة الأساسية، مع حصة سوقية تبلغ 92.16٪ اعتبارًا من ديسمبر 2020، ويتعامل مع أكثر من 5.4 مليار عملية بحث يوميًا.", - "google images":"صور جوجل ‏: هو محرك بحث مصمم خصيصاً للبحث عن الصور، بلغ عدد الصور التي تحتويه 10 مليارات صورة، بينما يبلغ عدد متصفحيه مليار مستخدم يومياً. أطلقت هذه الخدمة منذ يوليو 2001.", - "google news":"أخبار جوجل ‏ هو برنامج مبني على الويب، تقدمه شركة جوجل. البرنامج عبارة عن مجمع أخبار. يستخدم البرنامج خوارزمية Storyrank التي يمكن القول أنها الخوارزمية الشقيقة لخوارزمية Pagerank التي جعلت باحوث جوجل من أفضل محركات البحث على الإنترنت. تم تطوير الخوارزمية بواسطة كاريشنا باهارات في العام 2001. تم تقديم أخبار جوجل كنسخة بيتا في أبريل 2002. خرج البرنامج من مرحلة البيتا في 23 يناير 2006. هناك عدة نسخ من البرنامج مخصصة ل 20 إقليما في العالم تستخدم 12 لغة. اللغات المتاحة حالياً هي: العربية، العبرية، الصينية ، اليبانية، الكورية، الفرنسية، الألمانية، الإسبانية، الإنجليزية، الإيطالية، البرتغالية، الهولندية، النرويجية، والسويدية.", - "google play apps":"جوجل بلاي ‏ وسابقًا سوق أندرويد ‏ هي خدمة توزيع رقمية يتم تشغيلها وتطويرها بواسطة جوجل، وهو بمثابة متجر التطبيقات الرسميّ للأجهزة المُعتمدة التي تعمل على نظام التشغيل أندرويد، ممَّا يسمح للمستخدمين بتصفح وتنزيل التطبيقات التي تمَّ تطويرها بِاستخدام مجموعة تطوير برامج أندرويد (SDK) ونشرها عبر جوجل. يُعد جوجل بلاي أيضًا بمثابة متجر وسائط رقمية، حيثُ يعرضُ المُوسيقى، والكتب، والأفلام، والبرامج التلفزيونية. عرض المتجر سابقًا أجهزة جوجل للشراء حتّى طُرح متجر تجزئة منفصل للأجهزة عبر الإنترنت والمسمى متجر جوجل وذلك في 11 مارس 2015. عرض المتجر أيضًا منشورات إخباريَّة ومجلات قبل تجديد أخبار جوجل في 15 مايو 2018. عرض المتجر أيضاً المُوسيقى والبودكاست كجزء من موسيقى جوجل بلاي حتّى ديسمبر 2020 عندما تمَّ استبدال الخدمة بيوتيوب ميوزيك وجوجل بودكاست.", + "github":"غيت هاب هي شركة تابعة لمايكروسوفت توفر استضافة لتطوير البرامج والتحكم في الإصدار باستخدام غيت. توفر الشركة وظائف التحكم في الإصدار الموزع وإدارة كود المصدر (SCM) لـ «غيت»، بالإضافة إلى ميزاته الخاصة. يوفر النظام التحكم في الوصول والعديد من ميزات التعاون مثل تتبع الأخطاء وطلبات الميزات البرمجية وإدارة المهام والتركيب المتواصل ومواقع ويكي لكل مشروع غيت هاب. يقع مقرها الرئيسي في كاليفورنيا، وهي شركة تابعة لشركة مايكروسوفت منذ عام 2018.", + "gitlab":"غيت لاب هي شركة مفتوحة النواة تشتهر بتقديم مدير مستودعات غيت الذي يحمل نفس اسم الشركة.", + "goodreads":"جودريدز أو غودريدز تترجم للعربية بـ القراءات الجيدة هي شبكة اجتماعية تهتم بالكتب وبتوصيات وآراء المستخدمين حول الكتب والمؤلفين، أسس الموقع في عام 2006 من جهد المبرمج الأمريكي أوتيس تشاندلر. انطلق الموقع في ديسمبر 2006 ووصل عدد الأعضاء المسجلين في جود ريدز إلى أكثر من المليون عضو حتى اليوم، شاركوا بما يزيد على 10 ملايين كتاب، ورغم ذلك فإن الموقع لم يكن هادفاً للربح عند إطلاقه وبعد عام واحد فقط تلقى تمويلاً من إحدى الشركات لدفعه إلى الأمام والمحافظة على خدمته المتميزة. في آذار 2013 أعلنت شركة أمازون استحواذها عليه بدون الإفصاح عن مبلغ العقد.", + "google":"بحث جوجل أو جوجل ، هو محرك بحث صممته شركة جوجل. وهو محرك البحث الأكثر استخدامًا على شبكة الويب العالمية عبر جميع الأنظمة الأساسية، مع حصة سوقية تبلغ 92.16٪ اعتبارًا من ديسمبر 2020، ويتعامل مع أكثر من 5.4 مليار عملية بحث يوميًا.", + "google images":"صور جوجل : هو محرك بحث مصمم خصيصاً للبحث عن الصور، بلغ عدد الصور التي تحتويه 10 مليارات صورة، بينما يبلغ عدد متصفحيه مليار مستخدم يومياً. أطلقت هذه الخدمة منذ يوليو 2001.", + "google news":"أخبار جوجل هو برنامج مبني على الويب، تقدمه شركة جوجل. البرنامج عبارة عن مجمع أخبار. يستخدم البرنامج خوارزمية Storyrank التي يمكن القول أنها الخوارزمية الشقيقة لخوارزمية Pagerank التي جعلت باحوث جوجل من أفضل محركات البحث على الإنترنت. تم تطوير الخوارزمية بواسطة كاريشنا باهارات في العام 2001. تم تقديم أخبار جوجل كنسخة بيتا في أبريل 2002. خرج البرنامج من مرحلة البيتا في 23 يناير 2006. هناك عدة نسخ من البرنامج مخصصة ل 20 إقليما في العالم تستخدم 12 لغة. اللغات المتاحة حالياً هي: العربية، العبرية، الصينية ، اليبانية، الكورية، الفرنسية، الألمانية، الإسبانية، الإنجليزية، الإيطالية، البرتغالية، الهولندية، النرويجية، والسويدية.", + "google play apps":"جوجل بلاي وسابقًا سوق أندرويد هي خدمة توزيع رقمية يتم تشغيلها وتطويرها بواسطة جوجل، وهو بمثابة متجر التطبيقات الرسميّ للأجهزة المُعتمدة التي تعمل على نظام التشغيل أندرويد، ممَّا يسمح للمستخدمين بتصفح وتنزيل التطبيقات التي تمَّ تطويرها بِاستخدام مجموعة تطوير برامج أندرويد (SDK) ونشرها عبر جوجل. يُعد جوجل بلاي أيضًا بمثابة متجر وسائط رقمية، حيثُ يعرضُ المُوسيقى، والكتب، والأفلام، والبرامج التلفزيونية. عرض المتجر سابقًا أجهزة جوجل للشراء حتّى طُرح متجر تجزئة منفصل للأجهزة عبر الإنترنت والمسمى متجر جوجل وذلك في 11 مارس 2015. عرض المتجر أيضًا منشورات إخباريَّة ومجلات قبل تجديد أخبار جوجل في 15 مايو 2018. عرض المتجر أيضاً المُوسيقى والبودكاست كجزء من موسيقى جوجل بلاي حتّى ديسمبر 2020 عندما تمَّ استبدال الخدمة بيوتيوب ميوزيك وجوجل بودكاست.", "google play movies":[ "google play apps:ar", "ref" ], - "google scholar":"جوجل سكولار أو الباحث العلمي من جوجل ‏ هو محرك بحث خاص بالمؤلفات العلمية والأكاديمية التي يحتاج إليها الباحثون والدارسون. من مكان واحد، يمكنك البحث عبر العديد من المجالات العلمية ومصادر المعلومات: أبحاث معتمدة ورسائل علمية وكتب وملخصات ومقالات من ناشرين أكاديميين وجمعيات متخصصة ومراكز جمع المعلومات قبل طباعتها والجامعات وغير ذلك من مؤسسات البحث العلمي. يساعدك الباحث العلمي من جوجل على التعرف على أكثر الأبحاث العلمية صلة بمجال بحثك في عالم البحث العلمي.", + "google scholar":"جوجل سكولار أو الباحث العلمي من جوجل هو محرك بحث خاص بالمؤلفات العلمية والأكاديمية التي يحتاج إليها الباحثون والدارسون. من مكان واحد، يمكنك البحث عبر العديد من المجالات العلمية ومصادر المعلومات: أبحاث معتمدة ورسائل علمية وكتب وملخصات ومقالات من ناشرين أكاديميين وجمعيات متخصصة ومراكز جمع المعلومات قبل طباعتها والجامعات وغير ذلك من مؤسسات البحث العلمي. يساعدك الباحث العلمي من جوجل على التعرف على أكثر الأبحاث العلمية صلة بمجال بحثك في عالم البحث العلمي.", "google videos":"جوجل فيديو هو موقع فيديو مجاني، وكذلك محرك بحث للفيديو من غوغل. غوغل فيديو يسمح للفيديو أن يكون جزءًا لا يتجزأ من مواقع أخرى بعيدة ويوفر ما يلزم من كود HTML ويسمح كذلك للمواقع باستضافة كميات كبيرة من الفيديو عن بعد على جوجل فيديو دون الوقوع في عرض النطاق الترددي. بعض أشرطة الفيديو معروضة أيضاً للبيع من خلال متجر غوغل فيديو.", - "hackernews":"هاكر نيوز ‏ هو موقع إخباري اجتماعي يركز على علوم الكمبيوتر وريادة الأعمال. يدار من قبل صندوق الاستثمار وحاضنة الشركات الناشئة Y Combinator الخاصة بـ بول غراهام. بشكل عام يتم تعريف المحتوى الذي يمكن تقديمه على أنه «أي شيء يرضي فضول الفرد الفكري».", + "hackernews":"هاكر نيوز هو موقع إخباري اجتماعي يركز على علوم الكمبيوتر وريادة الأعمال. يدار من قبل صندوق الاستثمار وحاضنة الشركات الناشئة Y Combinator الخاصة بـ بول غراهام. بشكل عام يتم تعريف المحتوى الذي يمكن تقديمه على أنه «أي شيء يرضي فضول الفرد الفكري».", "hoogle":"هاسكل هي لغة برمجة مطابقة للمعايير، للأغراض العامة، وهي لغة وظيفية إلى حد كبير، دون دلالات ألفاظ ملزمة وبكتابة ثابتة وقوية. وقد سُميت بـ هاسكل علي اسم عالم المنطق «هاسكل كوري». وفي اللغة هاسكل، «تمثل الوظيفة مواطن من الدرجة الأولى» من لغة البرمجة. ولكونها لغة برمجة وظيفية فإن بنية التحكم الرئيسية هي الوظيفة. وترجع أصول اللغة إلى ملاحظات هاسكل كوري وأتباعه من المفكرين، بأن «الإثبات هو برنامج؛ والمعادلة التي يثبتها هي نوع للبرنامج».", - "huggingface":"شركة هجينج فيس ‏ هي شركة أمريكية مسجلة بموجب قانون الشركات العام لولاية ديلاوير ومقرها في مدينة نيويورك، وتعمل على تطوير أدوات حوسبة لبناء تطبيقات تستند إلى تعلم الآلة. تشتهر بشكل خاص بمكتبة المحولات (ترانسفورمرز) التي طورتها لتطبيقات معالجة اللغة الطبيعية، ومنصتها التي تتيح للمستخدمين مشاركة نماذج تعلم الآلة ومجاميع البيانات وعرض أعمالهم.", + "huggingface":"شركة هجينج فيس هي شركة أمريكية مسجلة بموجب قانون الشركات العام لولاية ديلاوير ومقرها في مدينة نيويورك، وتعمل على تطوير أدوات حوسبة لبناء تطبيقات تستند إلى تعلم الآلة. تشتهر بشكل خاص بمكتبة المحولات (ترانسفورمرز) التي طورتها لتطبيقات معالجة اللغة الطبيعية، ومنصتها التي تتيح للمستخدمين مشاركة نماذج تعلم الآلة ومجاميع البيانات وعرض أعمالهم.", "huggingface datasets":[ "huggingface:ar", "ref" @@ -207,10 +207,10 @@ "huggingface:ar", "ref" ], - "imdb":"قاعدة بيانات الأفلام على الإنترنت وتُعرف اختصارًا بـ آي إم دي بي ‏ هي قاعدة بيانات عبر الإنترنت للمعلومات المتعلقة بالأفلام والبرامج التلفزيونية ومقاطع الفيديو المنزلية وألعاب الفيديو والمحتوى المتدفق عبر الإنترنت - بما في ذلك الممثلون وطاقم الإنتاج والسير الذاتية الشخصية وملخصات الحبكة، التقييمات وآراء المعجبين وكذا المراجعات النقدية. كان موقع قاعدة بيانات الأفلام على الإنترنت في الأصل موقع ويب يُديره المعجبون إلى أن سيطرت عليهِ شركة آي إم دي بي دوت كوم إنكوايرر ‏ وهي شركةٌ تابعةٌ لشركة أمازون. بدأ الموقع كقاعدة بيانات أفلام على مجموعة يوزنت ‏ على المسار ريك دوت آرتس دوت موفيز ‏ في عام 1990 وانتقلَ إلى الويب في عام 1993.", + "imdb":"قاعدة بيانات الأفلام على الإنترنت وتُعرف اختصارًا بـ آي إم دي بي هي قاعدة بيانات عبر الإنترنت للمعلومات المتعلقة بالأفلام والبرامج التلفزيونية ومقاطع الفيديو المنزلية وألعاب الفيديو والمحتوى المتدفق عبر الإنترنت - بما في ذلك الممثلون وطاقم الإنتاج والسير الذاتية الشخصية وملخصات الحبكة، التقييمات وآراء المعجبين وكذا المراجعات النقدية. كان موقع قاعدة بيانات الأفلام على الإنترنت في الأصل موقع ويب يُديره المعجبون إلى أن سيطرت عليهِ شركة آي إم دي بي دوت كوم إنكوايرر وهي شركةٌ تابعةٌ لشركة أمازون. بدأ الموقع كقاعدة بيانات أفلام على مجموعة يوزنت على المسار ريك دوت آرتس دوت موفيز في عام 1990 وانتقلَ إلى الويب في عام 1993.", "imgur":"إمجور هو مجتمع إلكتروني عبر الإنترنت يقدم خدمات الاستضافة للصور والمشاركة والاستمتاع بأشهر الصور المنتشرة عبر الإنترنت من جميع دول العالم. أسسه آلان شاف ويستخدم البرنامج حاليًا ملايين المتصفحين بشكل يومي.", "iqiyi":"آي تشي يي ، هي منصة فيديو عبر الإنترنت مقرها في بكين، الصين، تم إطلاقها في 22 أبريل 2010.", - "kickass":"كيك اس تورنت ‏ هو موقع على شبكة الانترنت، تأسس في عام 2008، يوفر ملفات وروابط تورنت لتسهيل تبادل الملفات الند للند باستخدام بروتوكول بت تورنت. وتوقف الموقع عن الخدمة في 20 يوليوز عام 2016، بعد أن تم الحجز على اسم نطاقه من قبل حكومة الولايات المتحدة. وأغلقت خوادم بروكسي الموقع من طرف موظفيه في نفس الوقت.", + "kickass":"كيك اس تورنت هو موقع على شبكة الانترنت، تأسس في عام 2008، يوفر ملفات وروابط تورنت لتسهيل تبادل الملفات الند للند باستخدام بروتوكول بت تورنت. وتوقف الموقع عن الخدمة في 20 يوليوز عام 2016، بعد أن تم الحجز على اسم نطاقه من قبل حكومة الولايات المتحدة. وأغلقت خوادم بروكسي الموقع من طرف موظفيه في نفس الوقت.", "lemmy comments":[ "lemmy communities:ar", "ref" @@ -224,16 +224,16 @@ "lemmy communities:ar", "ref" ], - "library genesis":"مكتبة التكوين ‏ وتُدعى اختصارًا LibGen هي محرك بحث للمقالات والكتب حول مواضيع مختلفة، يتيح الموقع الوصول المجاني إلى المحتوى الذي يكون مدفوعًا أو غير رقمي في مكان آخر. من بين أمور أخرى، تتضمن ملفات بي دي اف محتوى من بوابة إلزيفير المعروفة باسم سيانس دايركت", - "library of congress":"مكتبة الكونغرس ‏ تعرف اختصاراً LOC هي مكتبة الأبحاث والتي تخص رسمياً كونغرس الولايات المتحدة وهي المكتبة الوطنية للولايات المتحدة بحكم الأمر الواقع. وهي أقدم مؤسسة ثقافية اتحادية في الولايات المتحدة. تقع المكتبة في ثلاثة مبان في كابيتول هيل في واشنطن دي سي. كما أنها تحتفظ بالمركز الوطني للمحافظة على السمعيات والبصريات في كولبيبر بولاية فيرجينيا. يشرف أمين مكتبة الكونغرس على وظائف المكتبة، ويحافظ مهندس مبنى الكابيتول على مبانيها. تعد مكتبة الكونجرس من أكبر المكتبات في العالم. «مجموعاتها عالمية ولا تقتصر على الموضوع أو التنسيق أو الحدود الوطنية، وتتضمن مواد بحثية من جميع أنحاء العالم وبأكثر من 450 لغة.»", + "library genesis":"مكتبة التكوين وتُدعى اختصارًا LibGen هي محرك بحث للمقالات والكتب حول مواضيع مختلفة، يتيح الموقع الوصول المجاني إلى المحتوى الذي يكون مدفوعًا أو غير رقمي في مكان آخر. من بين أمور أخرى، تتضمن ملفات بي دي اف محتوى من بوابة إلزيفير المعروفة باسم سيانس دايركت", + "library of congress":"مكتبة الكونغرس تعرف اختصاراً LOC هي مكتبة الأبحاث والتي تخص رسمياً كونغرس الولايات المتحدة وهي المكتبة الوطنية للولايات المتحدة بحكم الأمر الواقع. وهي أقدم مؤسسة ثقافية اتحادية في الولايات المتحدة. تقع المكتبة في ثلاثة مبان في كابيتول هيل في واشنطن دي سي. كما أنها تحتفظ بالمركز الوطني للمحافظة على السمعيات والبصريات في كولبيبر بولاية فيرجينيا. يشرف أمين مكتبة الكونغرس على وظائف المكتبة، ويحافظ مهندس مبنى الكابيتول على مبانيها. تعد مكتبة الكونجرس من أكبر المكتبات في العالم. «مجموعاتها عالمية ولا تقتصر على الموضوع أو التنسيق أو الحدود الوطنية، وتتضمن مواد بحثية من جميع أنحاء العالم وبأكثر من 450 لغة.»", "mastodon hashtags":[ "mastodon users:ar", "ref" ], "mastodon users":"ماستدون هو برنامج حُر ومفتوح المصدر لتشغيل خدمات الشبكات الاجتماعية ذاتية الاستضافة. يوفر ميزات التدوينات المصغرة المشابهة لخدمة تويتر، يتم تقديم ماستدون من قبل عدد كبير من عقد ماستدون التي يتم تشغيلها بشكل مستقل ، لكل منها قواعد السلوك الخاصة بها، شروط الخدمة ، خيارات الخصوصية وسياسات الإشراف.", - "mdn":"شبكة مطوري موزيلا ‏ ويختصر إلى MDN هو موقع مؤسسة موزيلا الرسمي لوثائق تطوير وأخبار متصفح الويب فيرفكس، وعميل البريد الإلكتروني ثندربرد ومشاريع مؤسسة موزيلا الأخرى.", + "mdn":"شبكة مطوري موزيلا ويختصر إلى MDN هو موقع مؤسسة موزيلا الرسمي لوثائق تطوير وأخبار متصفح الويب فيرفكس، وعميل البريد الإلكتروني ثندربرد ومشاريع مؤسسة موزيلا الأخرى.", "metacpan":"شبكة أرشيف بريل الشاملة (CPAN) تعد مستودعاً لأكثر من 250000 وحدة برمجية وتحتوي على 39000 وثيقة مصاحبة والتوزيع مكتوبة فيها باللغة بيرل البرمجية بواسطة أكثر من12000 مساهم. كما أن سي بي اي إن تشير إلى شبكة الأرشيف أو برنامج بريل الذي يعمل كواجهة للشبكة وكمثبت برنامج ألي كما أن معظم البرامج الموجودة على سي بي اي إن هي برامج حرة ومفتوحة المصدر.", - "microsoft learn":"مايكروسوفت التعليمية ‏ هي مكتبة من الوثائق التقنية والتدريبية و مبادرة استراتيجية من شركة مايكروسوفت للمستخدمين النهائيين، والمطورين،من خلال تقديم مجموعة متنوعة من الموارد التعليمية والدورات التدريبية. قدمت مايكروسوفت التعليمية في سبتمبر 2018. ، نقلت مستندات مايكروسوفت في عام 2022، حلت مكتبة الوثائق التقنية التي كانت قد استبدلت MSDN وTechNet في عام 2016، إلى Microsoft Learn.", + "microsoft learn":"مايكروسوفت التعليمية هي مكتبة من الوثائق التقنية والتدريبية و مبادرة استراتيجية من شركة مايكروسوفت للمستخدمين النهائيين، والمطورين،من خلال تقديم مجموعة متنوعة من الموارد التعليمية والدورات التدريبية. قدمت مايكروسوفت التعليمية في سبتمبر 2018. ، نقلت مستندات مايكروسوفت في عام 2022، حلت مكتبة الوثائق التقنية التي كانت قد استبدلت MSDN وTechNet في عام 2016، إلى Microsoft Learn.", "mojeek":[ "محرك بحث ويب", "wikidata" @@ -246,19 +246,31 @@ "mojeek:ar", "ref" ], - "mullvadleta":"مولفاد ‏ هو مزود شبكة خاصة افتراضية ومقره السويد. إنه يلتزم بسياسة صارمة لعدم الاحتفاظ بالسجلات وسياسة خصوصية شاملة للغاية. لا تجمع مولفاد أي معلومات منك عند التسجيل. بدلاً من ذلك ، يتم إنشاء رقم عشوائي واستخدامه كمعرف خاص بك. تدعم اوبن في بي إن و وايرجارد. ويدعم أيضًا قفزات خادم متعددة مع ميزة التجسير. تقدم مولفاد خدمة جيدة للغاية مع تركيز قوي على الخصوصية.", + "mullvadleta":"مولفاد هو مزود شبكة خاصة افتراضية ومقره السويد. إنه يلتزم بسياسة صارمة لعدم الاحتفاظ بالسجلات وسياسة خصوصية شاملة للغاية. لا تجمع مولفاد أي معلومات منك عند التسجيل. بدلاً من ذلك ، يتم إنشاء رقم عشوائي واستخدامه كمعرف خاص بك. تدعم اوبن في بي إن و وايرجارد. ويدعم أيضًا قفزات خادم متعددة مع ميزة التجسير. تقدم مولفاد خدمة جيدة للغاية مع تركيز قوي على الخصوصية.", "mullvadleta brave":[ "mullvadleta:ar", "ref" ], "naver":"نافير هي منصة كورية جنوبية على الإنترنت تديرها شركة نافير. ظهرت لأول مرة في عام 1999 كأول بوابة ويب في كوريا الجنوبية لتطوير واستخدام محرك البحث الخاص بها. كما كانت أول مشغل في العالم يقدم ميزة البحث الشامل، والتي تجمع نتائج البحث من مختلف الفئات وتقدمها في صفحة واحدة. أضافت نافير منذ ذلك الحين العديد من الخدمات الجديدة التي تتراوح من الميزات الأساسية مثل البريد الإلكتروني والأخبار إلى أول منصة للأسئلة والأجوبة عبر الإنترنت في العالم يعرف ب«نولج ان».", + "naver images":[ + "naver:ar", + "ref" + ], + "naver news":[ + "naver:ar", + "ref" + ], + "naver videos":[ + "naver:ar", + "ref" + ], "niconico":"نيكونيكو (Niconico)‏ هو موقع ويب معروف متخصص بمشاركة الفيديو في اليابان. تديره شركة نيوانغو وهي شركة تابعة لشركة دوانغو. «نيكو نيكو» هو المحاكاة الصوتية اليابانية ليبتسم. هذا هو الثالث عشر الموقع الزار الأكثر في اليابان.", "nixos wiki":[ "nixos wiki:en", "ref" ], - "npm":"مدير نود جي إس للحزم ‏ أكبر نظام تسجيل حزم برمجية، يعد إن بي أم مدير الحزم الافتراضي لبيئة تشغيل جافا سكريبت Node.js. وهو يتكون من واجهة سطر الأوامر وقاعدة بيانات على الإنترنت، تُدعى سجل إن بي أم. كما يتيح موقع إن بي أم تصفح الحزم واستعراضها.", - "odysee":"أوديسي ‏ هي منصة استضافة فيديو غير مركزية أمريكية مبنية على سلسلة كتل ليبيراري ‏. يشير إلى نفسه كبديل للخدمات السائدة مثل يوتيوب ولكن مع التركيز على حرية التعبير واللامركزية.", + "npm":"مدير نود جي إس للحزم أكبر نظام تسجيل حزم برمجية، يعد إن بي أم مدير الحزم الافتراضي لبيئة تشغيل جافا سكريبت Node.js. وهو يتكون من واجهة سطر الأوامر وقاعدة بيانات على الإنترنت، تُدعى سجل إن بي أم. كما يتيح موقع إن بي أم تصفح الحزم واستعراضها.", + "odysee":"أوديسي هي منصة استضافة فيديو غير مركزية أمريكية مبنية على سلسلة كتل ليبيراري. يشير إلى نفسه كبديل للخدمات السائدة مثل يوتيوب ولكن مع التركيز على حرية التعبير واللامركزية.", "openairedatasets":[ "منظمة في اليونان", "wikidata" @@ -267,19 +279,19 @@ "openairedatasets:ar", "ref" ], - "openlibrary":"المكتبة المفتوحة ‏ مشروع على الإنترنت، يضم مكتبة عامة تحتوي على عدد من الكتب الإلكترونية، وهي مفتوحة المصدر، وهو مشروع قابل للتعديل، حيث يمكن لأي شخص المشاركة. ويتضمن الموقع فهارس مكتبية من مكتبات عديدة.", - "openstreetmap":"خريطة الشارع المفتوحة ‏ مشروع تعاوني يهدف إلى إنشاء خرائط منشورة برخصة حرة. تُرسم الخرائط بطريق جمع البيانات الجغرافية بالمسح الأرضي باستخدام مستقبلات نظام التموضع العالمي المحمولة، وكذلك بالاستعانة بمصادر حرة أخرى. يمكن للمستخدمين تحرير المسارات والطرق وتحديثها من خلال وسائل التحرير المتاحة.", + "openlibrary":"المكتبة المفتوحة مشروع على الإنترنت، يضم مكتبة عامة تحتوي على عدد من الكتب الإلكترونية، وهي مفتوحة المصدر، وهو مشروع قابل للتعديل، حيث يمكن لأي شخص المشاركة. ويتضمن الموقع فهارس مكتبية من مكتبات عديدة.", + "openstreetmap":"خريطة الشارع المفتوحة مشروع تعاوني يهدف إلى إنشاء خرائط منشورة برخصة حرة. تُرسم الخرائط بطريق جمع البيانات الجغرافية بالمسح الأرضي باستخدام مستقبلات نظام التموضع العالمي المحمولة، وكذلك بالاستعانة بمصادر حرة أخرى. يمكن للمستخدمين تحرير المسارات والطرق وتحديثها من خلال وسائل التحرير المتاحة.", "peertube":[ "برنامج مجاني لاستعادة السيطرة على مقاطعك الفيديو! مع أكثر من ٦٠٠٬٠٠٠ مقطع فيديو مُستضاف، وشوهد أكثر من ٧٠ مليون مرة و ١٥٠٬٠٠٠ مستخدم، فإن بييرتيوب هو البرنامج المجاني اللامركزي البديل لمنصات الفيديو التي طورتها Framasoft", "https://joinpeertube.org" ], - "pinterest":"بنترست ‏ هي شبكة اجتماعية أمريكية لنشر الصور و الفيديوهات، أُطلقت عام 2010. مبدأ عمل بنترست مختلف قليلاً عن وسائل التواصل الاجتماعي الأخرى. فكل مشترك في بنترست بإمكانه عمل لوحة حائط \"Board\" أو عدة لوحات حائط افتراضية. ثم يقوم المشترك بعد ذلك بتدبيس \"Pin\" أو تعليق صوراً أو مقاطع فيديو يجدها مثيرة لاهتمامه ويرغب بالاحتفاظ بها في أحد لوحات الحائط الخاصة به. وتكون الصور ومقاطع الفيديو مأخوذة من عدة مواقع في الإنترنت ولذلك يكون دوماً هناك رابط إلكتروني يشير إلى مصدر الصورة. في حال ضغط أحد المستخدمين على الصورة، يأخذه الرابط للموقع الذي أُخِذت منه الصورة. وإذا أُعجب مستخدم آخر بالصور أو الفيديوهات التي قمت بتعليقها بإمكانه تدبيس نفس الصورة أو الفيديو في لوحة الحائط الخاصة به وتسمى هذه العملية بإعادة التدبيس أو إعادة التعليق \"Repin\". وبإمكان أي شخص الاطلاع على هذا الموقع والبحث عن الصور فيه ولكن يشترط التسجيل فيه. إذا أراد المستخدم مشاركة الصور أو إبداء الإعجاب ببعضها أو التعليق عليها. تم تأسيس الموقع من قبل بن سيلبرمان، بول سيارا وإيفان شارب. وتتم إدارة الموقع من قبل مختبرات كولد برو أمّا تمويله فهو من قِبَل مجموعة صغيرة من رجال الأعمال والمخترعين.", - "piratebay":"ذا بايرت بي ‏ ، وهو موقع سويدي يُفَهْرِس ملفات التورنت torrent. وصل تصنيفه في يناير 2010 للمرتبة 99 ضمن تصنيف ألكسا ضمن أكثر المواقع زيارةً عالميًا. في 10 لشهر ديسمبر سنه 2014 حُظِّر الموقع، وذلك بعد مداهمة الشرطة السويدية لخوادم الموقع وفي الأول من فبراير 2015 عاد الموقع للعمل بستة نطاقات جديدة.", - "pubmed":"مدلاين ‏ هي قاعدة بيانات ببليوغرافية في علوم الحياة والعلوم الحيوية الطبية. تحتوي على معلومات ببليوغرافية حول المجلات الأكاديمية في علوم الطب والتمريض والصيدلة وطب الأسنان والطب البيطري والرعاية الصحية. كما يحتوي مدلاين على مواضيع في علم الأحياء والكيمياء الحيوية وكذلك مجالات التطور الجزيئي والطب الحيوي.", + "pinterest":"بنترست هي شبكة اجتماعية أمريكية لنشر الصور و الفيديوهات، أُطلقت عام 2010. مبدأ عمل بنترست مختلف قليلاً عن وسائل التواصل الاجتماعي الأخرى. فكل مشترك في بنترست بإمكانه عمل لوحة حائط \"Board\" أو عدة لوحات حائط افتراضية. ثم يقوم المشترك بعد ذلك بتدبيس \"Pin\" أو تعليق صوراً أو مقاطع فيديو يجدها مثيرة لاهتمامه ويرغب بالاحتفاظ بها في أحد لوحات الحائط الخاصة به. وتكون الصور ومقاطع الفيديو مأخوذة من عدة مواقع في الإنترنت ولذلك يكون دوماً هناك رابط إلكتروني يشير إلى مصدر الصورة. في حال ضغط أحد المستخدمين على الصورة، يأخذه الرابط للموقع الذي أُخِذت منه الصورة. وإذا أُعجب مستخدم آخر بالصور أو الفيديوهات التي قمت بتعليقها بإمكانه تدبيس نفس الصورة أو الفيديو في لوحة الحائط الخاصة به وتسمى هذه العملية بإعادة التدبيس أو إعادة التعليق \"Repin\". وبإمكان أي شخص الاطلاع على هذا الموقع والبحث عن الصور فيه ولكن يشترط التسجيل فيه. إذا أراد المستخدم مشاركة الصور أو إبداء الإعجاب ببعضها أو التعليق عليها. تم تأسيس الموقع من قبل بن سيلبرمان، بول سيارا وإيفان شارب. وتتم إدارة الموقع من قبل مختبرات كولد برو أمّا تمويله فهو من قِبَل مجموعة صغيرة من رجال الأعمال والمخترعين.", + "piratebay":"ذا بايرت بي ، وهو موقع سويدي يُفَهْرِس ملفات التورنت torrent. وصل تصنيفه في يناير 2010 للمرتبة 99 ضمن تصنيف ألكسا ضمن أكثر المواقع زيارةً عالميًا. في 10 لشهر ديسمبر سنه 2014 حُظِّر الموقع، وذلك بعد مداهمة الشرطة السويدية لخوادم الموقع وفي الأول من فبراير 2015 عاد الموقع للعمل بستة نطاقات جديدة.", + "pubmed":"مدلاين هي قاعدة بيانات ببليوغرافية في علوم الحياة والعلوم الحيوية الطبية. تحتوي على معلومات ببليوغرافية حول المجلات الأكاديمية في علوم الطب والتمريض والصيدلة وطب الأسنان والطب البيطري والرعاية الصحية. كما يحتوي مدلاين على مواضيع في علم الأحياء والكيمياء الحيوية وكذلك مجالات التطور الجزيئي والطب الحيوي.", "reddit":"ريديت هو مجتمع إخباري على الإنترنت، إلا أنه يعتبر من مواقع مشاركة الروابط ومناقشتها حتى بات يشبه المنتديات، يعرف ريديت بالصفحة الرئيسية للإنترنت.", "reuters":"رويترز هي مؤسسة إخبارية دولية مملوكة لشركة تومسون رويترز. تأسَّست الوكالة في لندن عام 1851 من قِبل الألماني المولد بول رويتر إلى أن استُحوذَ عليها من قِبل شركة تومسون عام 2008 حيث تُشكّل الآن قسم الإعلام في تومسون رويترز. تُوظّف المؤسّسة – التي تُعتبر واحدةً من أكبر وكالات الأنباء في العالم – حوالي 2500 صحفي و600 مصور صحفي في حوالي مائتي موقع حول العالم.", - "rottentomatoes":"روتن توميتوز ‏ وتعني حرفيًا الطماطم الفاسدة، هو موقع ويب مُتَخصّصٌ في تقييماتٍ وأخبارٍ ومعلوماتٍ حولَ الأفلام والمسلسلات، معروفٌ عالمياً بأنه مُجمّع للتقييمات حيث يجمع تقييمَ النُقّاد لأي فيلم أو مسلسل ويعطي متوسط تقييم له إضافة إلى نسبة مئوية بالمراجعات الإيجابية، كما صارَ يَشمَلُ أيضاً تقييماتٍ للمُسلسلات. وعلى الرغم من ارتباط الاسمُ بتقليد تاريخي حيثُ كان الجماهيرُ يرمونَ الطماطم الفاسدة والخضروات على الأداء السيئ في المسرح، إلا أن الاسم كان مستوحى في الأصل من مشهد يظهر الطماطم في فيلم كندي صدر في عام 1992 بعنوان ليولو (Léolo). بدأ الموقِع في عامِ 1998 على يَد ثلاثة طلاب جامعيين يدرسون في جامعة كاليفورنيا، بمدينة ييركيلي، وهم سين دوونج، وباتريك واي لي، وستيفن وانج. وفي 2010 استَحوذَت عليه شَركة Flixster التي مَلَكتْها وارنر برذرز في 2011. ورئيس تحرير الموقع منذ 2007 هو مات آتشي. الموقِعُ مُتَوفّرٌ بِنُسخةٍ بريطانيّة وأستراليّة وهنديّة. وبدءاً مِن يناير 2015 دَخَلَ الموقع ضِمنَ نِطاقِ أشهَر 500 موقع في تصنيفاتِ موقِع أليكسا.", - "rumble":"رامبل ‏ هو موقع صناعة محتويات فيديو كندي. تم تأسيسه في سنة 2013 من قبل كريس بافلوفسكي. بدأ كموقع لنشر فيديوهات عن الحيوانات الأليفة والأطفال الرضع وثم زادت شهرته ليكون منصة بديلة للمحافظين واليمينيين عن يوتيوب. في يوم 11 يناير 2021 رفع الموقع دعوى ضد غوغل بتهمة التلاعب بنتائج البحث عن الموقع واخفائه وطالب بتعويض ملياري دولار على ذلك. يدير الموقع حالياً دان بونجينو.", + "rottentomatoes":"روتن توميتوز وتعني حرفيًا الطماطم الفاسدة، هو موقع ويب مُتَخصّصٌ في تقييماتٍ وأخبارٍ ومعلوماتٍ حولَ الأفلام والمسلسلات، معروفٌ عالمياً بأنه مُجمّع للتقييمات حيث يجمع تقييمَ النُقّاد لأي فيلم أو مسلسل ويعطي متوسط تقييم له إضافة إلى نسبة مئوية بالمراجعات الإيجابية، كما صارَ يَشمَلُ أيضاً تقييماتٍ للمُسلسلات. وعلى الرغم من ارتباط الاسمُ بتقليد تاريخي حيثُ كان الجماهيرُ يرمونَ الطماطم الفاسدة والخضروات على الأداء السيئ في المسرح، إلا أن الاسم كان مستوحى في الأصل من مشهد يظهر الطماطم في فيلم كندي صدر في عام 1992 بعنوان ليولو (Léolo). بدأ الموقِع في عامِ 1998 على يَد ثلاثة طلاب جامعيين يدرسون في جامعة كاليفورنيا، بمدينة ييركيلي، وهم سين دوونج، وباتريك واي لي، وستيفن وانج. وفي 2010 استَحوذَت عليه شَركة Flixster التي مَلَكتْها وارنر برذرز في 2011. ورئيس تحرير الموقع منذ 2007 هو مات آتشي. الموقِعُ مُتَوفّرٌ بِنُسخةٍ بريطانيّة وأستراليّة وهنديّة. وبدءاً مِن يناير 2015 دَخَلَ الموقع ضِمنَ نِطاقِ أشهَر 500 موقع في تصنيفاتِ موقِع أليكسا.", + "rumble":"رامبل هو موقع صناعة محتويات فيديو كندي. تم تأسيسه في سنة 2013 من قبل كريس بافلوفسكي. بدأ كموقع لنشر فيديوهات عن الحيوانات الأليفة والأطفال الرضع وثم زادت شهرته ليكون منصة بديلة للمحافظين واليمينيين عن يوتيوب. في يوم 11 يناير 2021 رفع الموقع دعوى ضد غوغل بتهمة التلاعب بنتائج البحث عن الموقع واخفائه وطالب بتعويض ملياري دولار على ذلك. يدير الموقع حالياً دان بونجينو.", "semantic scholar":"سيمانتك سكولر هو مشروعٌ طُور في معهد ألن للذكاء الاصطناعي، وصدر للجمهور في نوفمبر 2015، وهو مصممٌ ليكون محرك بحث مدعومًا بالذكاء الاصطناعي للمنشورات الأكاديمية. يستخدم المشروع مزيجًا من التعلم الآلي ومعالجة اللغة الطبيعية والرؤية الآلية لإضافة طبقة من التحليل الدلالي إلى الأساليب التقليدية لتحليل الاقتباس واستخراج الأشكال والكيانات والأماكن ذات الصلة من الأوراق. مقارنةً مع جوجل سكولار وببمد، فإنَّ سيمانتك سكولر مصممٌ لإبراز أهم الأوراق والأكثر تأثيرًا، وتحديد الروابط بينهما.", "seznam":[ "شركة تشيكية", @@ -290,17 +302,17 @@ "مستودع تطوير برمجيات", "wikidata" ], - "stackoverflow":"ستاك إكستشينج ‏ هي شبكة من مواقع الأسئلة والأجوبة التي يهتم كل منها باختصاص معين، ويقوم المستخدمون فيها بطرح الأسئلة، الإجابة عليها، وتقييم الأسئلة والأجوبة بشكل تعاوني غير مركزي.", - "steam":"ستيم ‏ هي منصة توزيع رقمي وإدارة حقوق رقمية ولعب جماعي عبر الإنترنت واتصال طورتها شركة فالف. يتم استخدامها لتوزيع الألعاب والوسائط ذات الصلة عبر الإنترنت، من مطورين مستقلين إلى شركات الألعاب الكبرى. في أكتوبر 2012 وسعت فالف الخدمة لتشمل برمجيات غير الألعاب. توفر ستيم المستخدمين إمكانية التثبيت والإدارة التلقائية للبرمجيات عبر أجهزة كمبيوتر متعددة، بالإضافة للميزات الاجتماعية مثل قوائم الأصدقاء والمجموعات، وأيضا التخزين السحابي ووظيفة المحادثة الصوتية والكتابية في الألعاب. يتم توفير واجهة برمجة التطبيقات وتسمى «ستيم ووركز» (Steamworks) والتي تمكن المطورين من الاستفادة منها لدمج العديد من وظائف ستيم داخل منتجاتهم البرمجية، بما في ذلك الحماية من النسخ، والربط بالشبكة، والإنجازات في الألعاب، ودعم المحتوى الذي يتم إنشائه من قبل المستخدمين.", + "stackoverflow":"ستاك إكستشينج هي شبكة من مواقع الأسئلة والأجوبة التي يهتم كل منها باختصاص معين، ويقوم المستخدمون فيها بطرح الأسئلة، الإجابة عليها، وتقييم الأسئلة والأجوبة بشكل تعاوني غير مركزي.", + "steam":"ستيم هي منصة توزيع رقمي وإدارة حقوق رقمية ولعب جماعي عبر الإنترنت واتصال طورتها شركة فالف. يتم استخدامها لتوزيع الألعاب والوسائط ذات الصلة عبر الإنترنت، من مطورين مستقلين إلى شركات الألعاب الكبرى. في أكتوبر 2012 وسعت فالف الخدمة لتشمل برمجيات غير الألعاب. توفر ستيم المستخدمين إمكانية التثبيت والإدارة التلقائية للبرمجيات عبر أجهزة كمبيوتر متعددة، بالإضافة للميزات الاجتماعية مثل قوائم الأصدقاء والمجموعات، وأيضا التخزين السحابي ووظيفة المحادثة الصوتية والكتابية في الألعاب. يتم توفير واجهة برمجة التطبيقات وتسمى «ستيم ووركز» (Steamworks) والتي تمكن المطورين من الاستفادة منها لدمج العديد من وظائف ستيم داخل منتجاتهم البرمجية، بما في ذلك الحماية من النسخ، والربط بالشبكة، والإنجازات في الألعاب، ودعم المحتوى الذي يتم إنشائه من قبل المستخدمين.", "superuser":[ "stackoverflow:ar", "ref" ], "tagesschau":"تاغسشاو هي خدمة إخبارية تلفزيونية وطنية ودولية ألمانية تنتجها هيئة التحرير فيARD-aktuelll لصالح شبكة التلفزيون العامة الألمانية ARD.", - "tineye":"تِن آي ‏ هو محرك البحث للصور وهي خدمة أنشأتها شركة ‏ مقرها في تورونتو كندا. حيث يقوم المستخدم بإرسال الصورة الي الموقع لكي يقوم محرك بالبحث عن مصدرها.", - "vimeo":"فيميو ‏ هي شركة أمريكية مقرها في مدينة نيويورك تقدم منصة لاستضافة مقاطع الفيديو ومشاركتها وخدماتها. يركز فيميو على تقديم فيديو عالي الوضوح عبر مجموعة من الأجهزة. يعتمد نموذج أعمال فيميو على البرمجيات كخدمة (SaaS). تحصل الشركة على الإيرادات من خلال توفير خطط الاشتراك للشركات وصانعي المحتوى. توفر فيميو لمشتركيها أدوات لإنشاء الفيديو وتحريره وبثه، وحلول برامج المؤسسات، كما تعمل المنصة أيضًا على تسهيل الاتصالات بين محترفي الفيديو والعملاء وخبراء الصناعة الآخرين. اعتبارًا من ديسمبر 2021، بلغ عدد مستخدمي الموقع 260 مليون مستخدم، بما في ذلك 1.6 مليون مشترك في خدماته.", + "tineye":"تِن آي هو محرك البحث للصور وهي خدمة أنشأتها شركة مقرها في تورونتو كندا. حيث يقوم المستخدم بإرسال الصورة الي الموقع لكي يقوم محرك بالبحث عن مصدرها.", + "vimeo":"فيميو هي شركة أمريكية مقرها في مدينة نيويورك تقدم منصة لاستضافة مقاطع الفيديو ومشاركتها وخدماتها. يركز فيميو على تقديم فيديو عالي الوضوح عبر مجموعة من الأجهزة. يعتمد نموذج أعمال فيميو على البرمجيات كخدمة (SaaS). تحصل الشركة على الإيرادات من خلال توفير خطط الاشتراك للشركات وصانعي المحتوى. توفر فيميو لمشتركيها أدوات لإنشاء الفيديو وتحريره وبثه، وحلول برامج المؤسسات، كما تعمل المنصة أيضًا على تسهيل الاتصالات بين محترفي الفيديو والعملاء وخبراء الصناعة الآخرين. اعتبارًا من ديسمبر 2021، بلغ عدد مستخدمي الموقع 260 مليون مستخدم، بما في ذلك 1.6 مليون مشترك في خدماته.", "voidlinux":"فويد لينكس هو توزيعة لينكس مستقلة تعمل بنظام إدارة الحزم X Binary Package System (XBPS) ، والذي تم تصميمه وتنفيذه من البداية، نظام تمهيد. باستثناء عمليات النواة الثنائية، يتكون التثبيت الأساسي بالكامل من البرامج المجانية، ولكن يمكن للمستخدمين الوصول إلى مستودع رسمي غير مجاني لتثبيت البرامج الاحتكارية.", - "wikibooks":"ويكي الكتب ‏ هو مشروع شقيق لويكيبيديا وجزء من مشاريع مؤسسة ويكيميديا. وهو ويكي للكتب تستضيفه مؤسسة ويكيميديا لإيجاد كتب ومراجع للاستخدام المجاني الحر يمكن لأي شخص التعديل والإسهام فيها تحت بنود رخصة جنو للوثائق الحرة؛ بدأ المشروع في 10 يوليو 2003 وكان باللغة الإنجليزية فقط، ثم توسع ليشمل إصدارات بلغات أخرى في يوليو 2004، وبدأت النسخة العربية في 12 سبتمبر 2004. واعتبارًا من يناير 2021 أصبح هناك إصدارات من ويكي الكتب بـ76 لغة، تحتوي على 286482 مقالة، وتضم 1490 محررًا نشطًا.", + "wikibooks":"ويكي الكتب هو مشروع شقيق لويكيبيديا وجزء من مشاريع مؤسسة ويكيميديا. وهو ويكي للكتب تستضيفه مؤسسة ويكيميديا لإيجاد كتب ومراجع للاستخدام المجاني الحر يمكن لأي شخص التعديل والإسهام فيها تحت بنود رخصة جنو للوثائق الحرة؛ بدأ المشروع في 10 يوليو 2003 وكان باللغة الإنجليزية فقط، ثم توسع ليشمل إصدارات بلغات أخرى في يوليو 2004، وبدأت النسخة العربية في 12 سبتمبر 2004. واعتبارًا من يناير 2021 أصبح هناك إصدارات من ويكي الكتب بـ76 لغة، تحتوي على 286482 مقالة، وتضم 1490 محررًا نشطًا.", "wikicommons.audio":[ "wikicommons.images:ar", "ref" @@ -309,7 +321,7 @@ "wikicommons.images:ar", "ref" ], - "wikicommons.images":"ويكيميديا كومنز أو ويكي كومنز ‏ هو أحد مشاريع مؤسسة ويكيميديا هو مخزن الوسائط المتعددة مفتوحة المصدر مثل الصور وملفات الصوت وملفات الوسائط المتعددة الأخرى بحيث يمكن استخدامها في أي مشروع من مشاريع ويكيميديا. وفي أي لغة من لغات ويكيبيديا، أو تحميلها للاستخدام خارج ويكيميديا.", + "wikicommons.images":"ويكيميديا كومنز أو ويكي كومنز هو أحد مشاريع مؤسسة ويكيميديا هو مخزن الوسائط المتعددة مفتوحة المصدر مثل الصور وملفات الصوت وملفات الوسائط المتعددة الأخرى بحيث يمكن استخدامها في أي مشروع من مشاريع ويكيميديا. وفي أي لغة من لغات ويكيبيديا، أو تحميلها للاستخدام خارج ويكيميديا.", "wikicommons.videos":[ "wikicommons.images:ar", "ref" @@ -321,25 +333,25 @@ "wikisource":"ويكي مصدر هي مكتبة رقمية متصلة بالشبكة العنكبوتية مفتوحة للجميع، ويمكن تحميلها على شكل ملف pdf.في هذا المشروع العربي تضم 79٬518 صفحة حتى تاريخ 2020 من الرسائل الأدبية، والكتب والنصوص الدينية والتراثية والتاريخية، والشعر. بدأت ويكي مصدر في نوفمبر 2003 كمجموعة للنصوص الحرة الداعمة لمقالات ويكيبيديا المشروع الأساسي لمؤسسة ويكيميديا. سميت في أول الأمر مشروع سورس بيرغ كمحاولةٍ لنحت اسم ما يعرف بمشروع غوتنبرغ، ثمّ تغيّر اسم المشروع في 6 ديسمبر 2003 إلى ويكي المصدر. وهو مشروع مؤسسة ويكيميديا لجمع وتخزين نصوص الملكية العامة المنشورة سابقًا أو النصوص الحرة التي نفدت حقوق طبعها أو المترجمة ومتوفرة بعدة لغات. انتقل المشروع إلى عنوان موقعه الدائم في 23 يوليو 2004.", "wikispecies":"ويكي أنواع هو أحد مشاريع مؤسسة ويكيميديا، وهو يهدف إلى إنشاء دليل بكل أنواع الكائنات. بدأ المشروع في 13 سبتمبر 2004.", "wikiversity":"ويكي الجامعة هو أحد مشاريع مؤسسة ويكيميديا، يهدف إلى دعم التعليم الحر واستضافة مواد تعليمية مجانية. المشروع بدأ في 15 أغسطس 2006؛ وبدأت النسخة العربية منه في 12 يوليو 2011.", - "wikivoyage":"ويكي الرحلات ‏ هي دليل سياحي على شبكة الإنترنت، كتب بطريقة تشاركية من عدد من الكتاب المتطوعين، ومحتواه هو تحت رخصة حرة.", + "wikivoyage":"ويكي الرحلات هي دليل سياحي على شبكة الإنترنت، كتب بطريقة تشاركية من عدد من الكتاب المتطوعين، ومحتواه هو تحت رخصة حرة.", "wiktionary":"ويكاموس هو مشروع مُتعدد اللغات، أحد مشاريع مؤسسة ويكيميديا على شبكة الإنترنت يهدف إلى إيجاد قاموس حر بلغة الويكي لكل اللغات. يتم تحريرها بشكل تعاوني عن طريق ويكي، وهو متاح في 172 لغة من بينها العربية. مُعظم مفردات اللغة في ويكاموس توفر تعريفات وترجمات للكلمات إلى لغات عديدة، وبعض المفردات متصلة بمعلومات إضافية موجودة عادة في المكنز أو المعجم اللغوي، كما تضم مرادفات الكلمة.", - "wolframalpha":"ولفرام ألفا ‏، هو محرك بحث أطلق عند الساعة الثالثة من صباح 16 مايو 2009. على خلاف محركات البحث التقليدية، فإن ولفرام يقوم بالإجابة عن الأسئلة التي تطرح عليه في حين تقوم البواحيث التقليدية بمجرد عرض قائمة من مواقع الإنترنت ذات العلاقة بالكلمات المفتاحية التي يتم البحث عبرها.", + "wolframalpha":"ولفرام ألفا ، هو محرك بحث أطلق عند الساعة الثالثة من صباح 16 مايو 2009. على خلاف محركات البحث التقليدية، فإن ولفرام يقوم بالإجابة عن الأسئلة التي تطرح عليه في حين تقوم البواحيث التقليدية بمجرد عرض قائمة من مواقع الإنترنت ذات العلاقة بالكلمات المفتاحية التي يتم البحث عبرها.", "wttr.in":[ "Des Moines, Iowa, United States تقرير حالة ألطقس", "https://wttr.in" ], - "yacy":"ياسي ‏ – هو محرك بحثي موزع يستخدم بالمجان، مبني علي مبادئ شبكة النظير للنظير. محتوى المحرك عبار عن برنامج مكتوب بلغة الجافا موزع على العديد من الحواسب الالية في شهر سبتمبر 2006 وكان يسمى ب «نظراء الياسي» كل نظير بمفرده يبحث في شبكة الإنترنت، يحلل ويسجل الصفحات التي وجدت ويخزن التسجيلات في قاعدة بيانات مشتركة بين الاخرون طبقا لمبادئ شبكة النظير للنظير. هو محرك بحث لأي شخص ويمكنه بناء مدخل بحثي لشبكته الداخلية ومساعدته في البحث على الإنترنت العام.", + "yacy":"ياسي – هو محرك بحثي موزع يستخدم بالمجان، مبني علي مبادئ شبكة النظير للنظير. محتوى المحرك عبار عن برنامج مكتوب بلغة الجافا موزع على العديد من الحواسب الالية في شهر سبتمبر 2006 وكان يسمى ب «نظراء الياسي» كل نظير بمفرده يبحث في شبكة الإنترنت، يحلل ويسجل الصفحات التي وجدت ويخزن التسجيلات في قاعدة بيانات مشتركة بين الاخرون طبقا لمبادئ شبكة النظير للنظير. هو محرك بحث لأي شخص ويمكنه بناء مدخل بحثي لشبكته الداخلية ومساعدته في البحث على الإنترنت العام.", "yacy images":[ "yacy:ar", "ref" ], "yahoo news":"ياهو! نيوز بالإنجليزية موقع أخباري تابع لشركة ياهو الأمريكية تقوم بجمع الأخبار من جميع الوكلات والصحف ووضعها في الموقع.", - "youtube":"يوتيوب ‏ هو موقع ويب أمريكي يسمح لمستخدميه برفع، بث، ومشاركة التسجيلات المرئية مجانًا، بالإضافة إلى إمكانية التعليق والتفاعل مع المحتوى. تأسس الموقع في 14 فبراير 2005 على يد تشاد هيرلي وستيف تشين وجاود كريم، وهم ثلاثة موظفين سابقين في شركة باي بال، وكان مقره في مدينة سان برونو، كاليفورنيا. في البداية، اعتمد يوتيوب على تقنية أدوبي فلاش لعرض الفيديوهات، لكنه انتقل لاحقًا إلى تقنية إتش تي إم إل 5 الأكثر حداثة.", + "youtube":"يوتيوب هو موقع ويب أمريكي يسمح لمستخدميه برفع، بث، ومشاركة التسجيلات المرئية مجانًا، بالإضافة إلى إمكانية التعليق والتفاعل مع المحتوى. تأسس الموقع في 14 فبراير 2005 على يد تشاد هيرلي وستيف تشين وجاود كريم، وهم ثلاثة موظفين سابقين في شركة باي بال، وكان مقره في مدينة سان برونو، كاليفورنيا. في البداية، اعتمد يوتيوب على تقنية أدوبي فلاش لعرض الفيديوهات، لكنه انتقل لاحقًا إلى تقنية إتش تي إم إل 5 الأكثر حداثة.", "yummly":[ "تطبيق محمول", "wikidata" ], - "z-library":"مكتبة-زد ‏ هو مشروعshadow library لمشاركه الملفات للوصول إلى مقالات العلميه والنصوص الادبيه وكتب المصالح العامه. ونشآت كمرآه لLibrary Genesis،و اغلبيه كتبها من Library Genesis." + "z-library":"مكتبة-زد هو مشروعshadow library لمشاركه الملفات للوصول إلى مقالات العلميه والنصوص الادبيه وكتب المصالح العامه. ونشآت كمرآه لLibrary Genesis،و اغلبيه كتبها من Library Genesis." }, "bg":{ "1337x":"1337x е уебсайт за споделяне на файлове чрез метода peer-to-peer посредством протокола BitTorrent. Към 2022 г. това е третият най-популярен торент тракер. Създаден е през 2007 г. С нарастващата му популярност десетки търсачки го премахват от резултатите си. Поради естеството на услугата, която предоставя, не са рядкост и правните действия към уебсайта, както и временните прекъсвания на функционалността.", @@ -653,6 +665,18 @@ ], "mastodon users":"মাস্টোডন হল স্ব-হোস্ট করা সামাজিক নেটওয়ার্কিং পরিষেবাগুলি চালানোর জন্য একটি বিনামূল্যের এবং ওপেন-সোর্স সফ্টওয়্যার৷ নিজস্ব আচরণবিধি, পরিষেবার শর্তাবলী, গোপনীয়তা নীতি, গোপনীয়তার বিকল্প এবং বিষয়বস্তু সংযম নীতি।", "naver":"নেইভার একটি দক্ষিণ কোরীয় ইন্টারনেট ভিত্তিমঞ্চ। কোরিয়ার নেইভার কর্পোরেশন এটির পরিচালক। ১৯৯৯ সালে দক্ষিণ কোরিয়ার স্ব-উদ্ভাবিত অনুসন্ধান ইঞ্জিন ব্যবহারকারী প্রথম আন্তর্জাল প্রবেশদ্বার হিসেবে এটি যাত্রা শুরু করে। এটি ছিল বিশ্বের প্রথম পূর্ণাঙ্গ অনুসন্ধান সুবিধা প্রদানকারী ওয়েবসাইট, যেখানে বিভিন্ন শ্রেণীর অনুসন্ধান ফলাফল সংকলিত একটিমাত্র ফলাফল পাতায় সেগুলিকে প্রকাশ করা হত। এরপর নেইভার আরও বেশ কিছু নতুন সেবা যোগ করেছে, যাদের মধ্যে বৈদ্যুতিন ডাক (ই-মেইল) ও সংবাদের মতো প্রাথমিক সুবিধাগুলি থেকে শুরু করে বিশ্বের প্রথম ইন্টারনেটভিত্তিক প্রশ্নোত্তর ভিত্তিমঞ্চ \"নলেজ ইন\" অন্তর্ভুক্ত।", + "naver images":[ + "naver:bn", + "ref" + ], + "naver news":[ + "naver:bn", + "ref" + ], + "naver videos":[ + "naver:bn", + "ref" + ], "nixos wiki":[ "nixos wiki:en", "ref" @@ -878,6 +902,18 @@ "portal web sud-coreà", "wikidata" ], + "naver images":[ + "naver:ca", + "ref" + ], + "naver news":[ + "naver:ca", + "ref" + ], + "naver videos":[ + "naver:ca", + "ref" + ], "nixos wiki":[ "nixos wiki:en", "ref" @@ -1076,11 +1112,23 @@ "mastodon users:cs", "ref" ], - "mastodon users":"Mastodon je sociální síť podobná známější síti X. Na rozdíl od většiny sociálních sítí je Mastodon open source a každý si může založit svoji vlastní instanci. Každá instance má vlastní podmínky užívání, ochrany soukromí a pravidel pro příspěvky; zároveň je propojená s ostatními instancemi, a je tedy možné se na ně připojit pomocí jednoho účtu.", + "mastodon users":"Mastodon je sociální síť podobná síti X. Na rozdíl od většiny sociálních sítí je Mastodon open source a každý si může založit svoji vlastní instanci. Každá instance má vlastní podmínky užívání, ochrany soukromí a pravidel pro příspěvky; zároveň je propojená s ostatními instancemi, a je tedy možné se na ně připojit pomocí jednoho účtu.", "mdn":"MDN Web Docs jsou webové stránky provozované Mozilla Foundation, které obsahují dokumentaci k projektům založených na Mozille jako Firefox či Thunderbird a webových standardům a technologiím. Veškerý editovatelný obsah je ukládán v Git repozitáři na GitHub.com, který umožňuje každému uživateli navrhovat úpravy a diskutovat změny. Server byl založen v roce 2005 pod názvem Mozilla Developer Center a část jeho obsahu pocházela z dnes již zrušeného serveru Netscape DevEdge.", "metacpan":"CPAN je softwarový repozitář obsahující jednak moduly pro programovací jazyk Perl a jednak aplikace napsané v tomto jazyce. První myšlenky k jeho zřízení se objevily už v roce 1993 inspirované repozitářem CTAN typografického systému TeX, ale do provozu byl oficiálně uveden až v roce 1995. Jméno CPAN nese kromě samotného repozitáře i perlový program, který slouží k stažení a instalaci modulů. Kromě toho je možné do repozitáře přistupovat i přes webové rozhraní, kde je například možné i bez instalace číst dokumentaci patřičného modulu generovanou ze standardního formátu POD.", "microsoft learn":"Microsoft Learn je webový portál a elektronická knihovna technické dokumentace a školení pro koncové uživatele, vývojáře a IT profesionály, kteří pracují s produkty společnosti Microsoft. Microsoft Learn byl veřejnosti představen v září 2018. V roce 2022 byla původní knihovna technické dokumentace, která se jmenovala Microsoft Docs, a která v roce 2016 nahradila MSDN a Microsoft TechNet, přesunuta do elektronické knihovny Microsoft Learn.", "naver":"Naver je jihokorejská online platforma provozovaná společností Naver Corporation. Debutoval v roce 1999 jako první webový portál v Jižní Koreji. Byl také prvním operátorem na světě, který zavedl funkci komplexního vyhledávání, která sestavuje výsledky vyhledávání z různých kategorií a prezentuje je na jediné stránce. Naver od té doby přidal množství nových služeb, od základních funkcí, jako je e-mail a zprávy, až po světově první online platformu otázek a odpovědí Knowledge iN.", + "naver images":[ + "naver:cs", + "ref" + ], + "naver news":[ + "naver:cs", + "ref" + ], + "naver videos":[ + "naver:cs", + "ref" + ], "npm":"npm je správce balíčků pro JavaScript, výchozí správce balíčků pro prostředí Node.js.", "odysee":"Odysee je americká decentralizovaná platforma pro sdílení videa postavená na blockchainu LBRY. Staví se jako alternativa k hlavním webům pro sdílení videí, ale s důrazem na svobodu slova a decentralizaci.", "openlibrary":"Open Library je internetová databáze knih. Je provozována v rámci projektu Internet Archive a její ambicí je mít informace o úplně všech vydaných knihách. Podporuje různé klasifikace, například ISBN, Deweyův desetinný systém DDC nebo klasifikaci LCC podle Kongresové knihovny.", @@ -1430,10 +1478,10 @@ "alpine linux packages":"Alpine Linux ist eine auf musl und BusyBox basierende Linux-Distribution, die in erster Linie für „Power-User entwickelt wurde, die Sicherheit, Einfachheit und Ressourceneffizienz schätzen“. Sie verwendet einen gehärteten Kernel und kompiliert alle Programme des Benutzerraums standardmäßig als position-independent Code mit Schutz vor Pufferüberlauf. Seit 2016 wird bei Docker, einer Software für Containervirtualisierung, überwiegend Alpine Linux als virtuelles Betriebssystem der Container eingesetzt. Hierdurch stieg das allgemeine Interesse an der Distribution erheblich, außerdem entstanden personelle Verflechtungen. Ein Fork von Alpine Linux, postmarketOS, wurde entwickelt, um auf mobilen Geräten zu laufen.", "annas archive":"Anna’s Archive ist eine kostenfrei nutzbare Metasuchmaschine für Schattenbibliotheken. Als solche bietet sie freien Zugang zu Büchern, wissenschaftlichen Aufsätzen, Comics und Zeitschriften. Die Website wird von einem anonymen Team von Archivaren betrieben, die sich Anna und das „Pirate Library Mirror (PiLiMi) team“ nennen, und finanziert sich über Spenden. Nach eigenen Angaben stehen Metadaten zu über 120 Millionen Werken zur Verfügung.", "ansa":"Die Agenzia Nazionale Stampa Associata (ANSA) ist eine italienische Nachrichten- und Presseagentur, die am 15. Januar 1945 in Rom gegründet wurde. Sie ist eine Genossenschaft aus 30 assoziierten Verlagen und 43 Tageszeitungen Italiens und gilt als führende Nachrichtenagentur Italiens vor Adnkronos und AGI.", - "apple app store":"Der App Store ist eine digitale Vertriebsplattform für Anwendungssoftware vom US-amerikanischen Unternehmen Apple. Die Plattform wurde 2008 eingeführt und bietet Mobile Apps für iOS- und iPadOS-Geräte und Software für tvOS und watchOS.", + "apple app store":"Der App Store ist eine digitale Vertriebsplattform für Anwendungssoftware vom US-amerikanischen Unternehmen Apple. Die Plattform wurde 2008 eingeführt und bietet Mobile Apps für iOS- und iPadOS-Geräte, Software für tvOS, watchOS und visionOS, sowie Anwendungen für macOS.", "apple maps":"Apple Karten ist ein Kartendienst von Apple, der im September 2012 mit dem hauseigenen Betriebssystem iOS 6 gestartet wurde. Die iOS-eigene Anwendung Karten ist die lokalisierte Anwendung für den Kartendienst auf dem iPhone, iPad und iPod touch. Seit OS X Mavericks ist die Anwendung Karten auch auf dem Mac vorinstalliert.", "artic":"Das Art Institute of Chicago ist ein 1866 gegründetes Kunstmuseum, verbunden mit der seit 1866 tätigen Kunsthochschule, 1882 umbenannt in School of the Art Institute of Chicago (SAIC) in Chicago, Illinois, (USA).", - "arxiv":"arXiv.org ist ein Dokumentenserver für Preprints aus den Bereichen Physik, Mathematik, Informatik, Statistik, Finanzmathematik und Biologie. Ausgesprochen wird arXiv als „archive“ (englisch), wobei das X für das griechische χ steht.", + "arxiv":"arXiv.org ist eine kuratierte digitale Plattform zum Austausch von Forschungsergebnissen aus den Bereichen Physik, Mathematik, Informatik, Statistik, Finanzmathematik, Biologie, Elektroingenieurwesen und Systemwissenschaft sowie Wirtschaftswissenschaften. Ausgesprochen wird arXiv als „archive“ (englisch), wobei das X für das griechische χ steht.", "ask":"Ask.com ist ein Internetportal, das ursprünglich als Suchmaschine funktionierte, inzwischen aber nur noch Antworten aus einem festen Frage-Antwort-Reservoir generiert.", "askubuntu":[ "stackoverflow:de", @@ -1615,6 +1663,18 @@ "https://www.moviepilot.de" ], "naver":"Naver ist ein südkoreanisches Webportal, das 1999 entwickelt wurde. Es umfasst eine Suchmaschine und diverse weitere Dienste.", + "naver images":[ + "naver:de", + "ref" + ], + "naver news":[ + "naver:de", + "ref" + ], + "naver videos":[ + "naver:de", + "ref" + ], "niconico":"Nico Nico Douga ist ein japanischer Videoportal- und Livestream-Anbieter, der von Niwango geleitet wird. Seine Spitznamen sind Nico Nico und Nico-dō, wobei nikoniko das japanische Ideophon (Gitaigo) für „lächeln“ ist und dōga für „Video“ steht. Nico Nico Douga ist die am neuntmeisten besuchte Website in Japan. Die Seite hat 2007 den Japanese Good Design Award gewonnen und eine Anerkennung in der Kategorie Digital Communities beim Prix Ars Electronica 2008.", "npm":"npm ist ein Paketmanager für die JavaScript-Laufzeitumgebung Node.js. npm wurde 2010 von Isaac Schlueter als Mitarbeiter des kalifornischen Cloud-Plattform-Anbieters Joyent programmiert. 2014 gründete er die „npm, inc.“", "odysee":"Odysee ist eine amerikanische, dezentralisierte Videoplattform, die auf der LBRY Blockchain basiert. Sie positioniert sich als Alternative zu Diensten wie YouTube mit einem Fokus auf freie Meinungsäußerung und Dezentralisierung.", @@ -2006,7 +2066,7 @@ "ref" ], "deezer":"Deezer is a French music streaming service and media service provider founded in 2007 that provides users with access to a vast library of music tracks, podcasts, and radio stations. It offers streaming services in over 180 countries and features a catalog of more than 90 million licensed tracks, making it one of the largest streaming platforms available. Deezer is available on various devices, including Android, iOS, macOS and others. The company is 41.4% owned by the Access Industries investment fund since 2016, 8.1% by Orange Group and 4.5% by the Pinault family through Artémis Group.", - "deviantart":"DeviantArt is an American online community that features artwork, videography, photography, and literature, launched on August 7, 2000, by Angelo Sotira, Scott Jarkoff, and Matthew Stephens, among others.", + "deviantart":"DeviantArt is an American online community that features artwork, videography, photography, and literature, launched on August 7, 2000, by Mathew Stephens, Scott Jarkoff and Angelo Sotira, among others.", "discuss.python":"Discourse is an open source Internet forum system released on August 26, 2014. It was founded by Jeff Atwood, Robin Ward, and Sam Saffron.", "docker hub":[ "hosting service for Docker repository", @@ -2037,6 +2097,10 @@ "wikidata" ], "emojipedia":"Emojipedia is an emoji reference website which documents the meaning and common usage of emoji characters in the Unicode Standard. Most commonly described as an emoji encyclopedia or emoji dictionary, Emojipedia also publishes articles and provides tools for tracking new emoji characters, design changes and usage trends. It has been owned by Zedge since 2021.", + "encyclosearch":[ + "Search over two dozen encyclopedias at once with EncycloSearch! EncycloSearch is an ad-free, open-source encyclopedia search engine and reader. Supported by the Knowledge Standards Foundation.", + "https://encyclosearch.org" + ], "erowid":"Erowid, also called Erowid Center, is a non-profit educational organization that provides information about psychoactive plants and chemicals.", "etymonline":"Etymonline, or Online Etymology Dictionary, sometimes abbreviated as OED, is a free online dictionary that describes the origins of English words, written and compiled by Douglas R. Harper.", "fdroid":"F-Droid is a free and open source app store and software repository for Android, serving a similar function to the Google Play store. The main repository, hosted by the project, contains only free and open source apps. Applications can be browsed, downloaded and installed from the F-Droid website or client app without the need to register an account. \"Anti-features\" such as advertising, user tracking, or dependence on non-free software are flagged in app descriptions.", @@ -2068,7 +2132,7 @@ "google":"Google Search is a search engine operated by Google. It allows users to search for information on the Web by entering keywords or phrases. Google Search uses algorithms to analyze and rank websites based on their relevance to the search query. It is the most popular search engine worldwide.", "google images":"Google Images is a search engine owned by Gsuite that allows users to search the World Wide Web for images. It was introduced on July 12, 2001, due to a demand for pictures of the green Versace dress of Jennifer Lopez worn in February 2000. In 2011, Gsuite image search functionality was added.", "google news":"Google News is a news aggregator service developed by Google. It presents a continuous flow of links to articles organized from thousands of publishers and magazines.", - "google play apps":"Google Play, also known as the Google Play Store or the Play Store, is a digital distribution service operated and developed by Google. It serves as the official app store for certified devices running on the Android operating system and its derivatives, as well as ChromeOS, allowing users to browse and download applications developed with the Android software development kit and published through Google. Google Play has also served as a digital media store, with it offering various media for purchase such as books, movies, musical singles, television programs, and video games.", + "google play apps":"Google Play, also known as the Google Play Store, Play Store, or sometimes the Android Store, is a digital distribution service operated and developed by Google. It serves as the official app store for certified devices running on the Android operating system and its derivatives, as well as ChromeOS, allowing users to browse and download applications developed with the Android software development kit and published through Google. Google Play has also served as a digital media store, with it offering various media for purchase such as books, movies, musical singles, television programs, and video games.", "google play movies":[ "google play apps:en", "ref" @@ -2091,14 +2155,10 @@ "huggingface:en", "ref" ], - "il post":"Il Post is an Italian online daily newspaper, founded and directed in 2010 by Luca Sofri. The editorial staff includes assistant editors Francesco Costa and Elena Zacchetti and journalists Arianna Cavallo, Luca Misculin, Giulia Balducci and Emanuele Menietti, as well as contributions from Luca Sofri and a number of other collaborators.", - "imdb":"The Internet Movie Database (IMDb) is an online database of information related to films, television series, podcasts, home videos, video games, and streaming content online – including cast, production crew and personal biographies, plot summaries, trivia, ratings, and fan and critical reviews. IMDb began as a fan-operated movie database on the Usenet group \"rec.arts.movies\" in 1990, and moved to the Web in 1993. Since 1998, it has been owned and operated by IMDb.com, Inc., a subsidiary of Amazon.", + "il post":"Il Post is an Italian online daily newspaper, founded in 2010 by Luca Sofri and directed by Francesco Costa. The editorial staff includes assistant editors Francesco Costa and Elena Zacchetti and journalists Arianna Cavallo, Luca Misculin, Giulia Balducci and Emanuele Menietti, as well as contributions from Luca Sofri and a number of other collaborators.", + "imdb":"IMDb, historically known as the Internet Movie Database, is an online database of information related to films, television series, podcasts, home videos, video games, and streaming content online – including cast, production crew and personal biographies, plot summaries, trivia, ratings, and fan and critical reviews. IMDb began as a fan-operated movie database on the Usenet group \"rec.arts.movies\" in 1990, and moved to the Web in 1993. Since 1998, it has been owned and operated by IMDb.com, Inc., a subsidiary of Amazon.", "imgur":"Imgur is an American online image sharing and image hosting service with a focus on social gossip that was founded by Alan Schaaf in 2009. The service has hosted viral images and memes, particularly those posted on Reddit.", "ina":"The Institut national de l'audiovisuel is a repository of all French radio and television audiovisual archives. Additionally it provides free access to archives of countries such as Afghanistan and Cambodia. It has its headquarters in Bry-sur-Marne.", - "invidious":[ - "Invidious Instances", - "https://api.invidious.io/" - ], "ipernity":[ "The worlds largest non-commercial photo, video and blog sharing community - financed only by membership dues, without any intention of making a profit.", "https://www.ipernity.com" @@ -2127,7 +2187,7 @@ "https://lib.rs" ], "library genesis":"Library Genesis is a shadow library project for file-sharing access to scholarly journal articles, academic and general-interest books, images, comics, audiobooks, and magazines. The site enables free access to content that is otherwise paywalled or not digitized elsewhere. LibGen describes itself as a \"links aggregator\", providing a searchable database of items \"collected from publicly available public Internet resources\" as well as files uploaded \"from users\". The URL libgen.is was down in January to March of 2025.", - "library of congress":"The Library of Congress (LOC) is a research library in Washington, D.C., serving as the library and research service for the United States Congress and the de facto national library of the United States. It also administers copyright law through the United States Copyright Office.", + "library of congress":"The Library of Congress (LOC) is a research library in Washington, D.C., serving as the library and research service for the United States Congress and the de facto national library of the United States. It also administers copyright law through the United States Copyright Office, and it houses the Congressional Research Service.", "libretranslate":[ "Free and Open Source Machine Translation API. Free to download, offline capable and easy to setup. Run your own API server in just a few minutes.Free and Open Source Machine Translation API. Free to download, offline capable and easy to setup. Run your own API server in just a few minutes.", "https://libretranslate.com" @@ -2185,6 +2245,18 @@ "https://mymemory.translated.net/" ], "naver":"Naver is a South Korean online platform operated by the Naver Corporation. The company's products include a search engine, email hosting, blogs, maps, and mobile payment.", + "naver images":[ + "naver:en", + "ref" + ], + "naver news":[ + "naver:en", + "ref" + ], + "naver videos":[ + "naver:en", + "ref" + ], "niconico":"Niconico, Inc. , known before 2012 as Nico Nico Douga , is a Japanese video sharing service based in Tokyo, Japan. \"Niconico\" or \"nikoniko\" is the Japanese ideophone for smiling. As of 2021, Niconico is the 34th most-visited website in Japan, according to Alexa Internet.", "nixos wiki":[ "NixOS Wiki - NixOS Wiki", @@ -2260,7 +2332,7 @@ ], "pubmed":"MEDLINE is a bibliographic database of life sciences and biomedical information. It includes bibliographic information for articles from academic journals covering medicine, nursing, pharmacy, dentistry, veterinary medicine, and health care. MEDLINE also covers much of the literature in biology and biochemistry, as well as fields such as molecular evolution.", "pypi":"The Python Package Index, abbreviated as PyPI and also known as the Cheese Shop, is the official third-party software repository for Python. It is analogous to the CPAN repository for Perl and to the CRAN repository for R. PyPI is run by the Python Software Foundation, a charity. Some package managers, including pip, use PyPI as the default source for packages and their dependencies.", - "quark":"Shenma Inc. is a \"mobile-first\" search engine for China that was launched in April 2014. It is a joint venture between Alibaba Group and UCWeb. In April 2017, according to China Internet Watch, Shenma had an 8.8% of the China search engine market share, which made it the second most used search engine after Baidu. Shenma comes with UC Browser, a mobile browser with an estimated 20% share of China's browser market and over 30% of China's mobile browser marketshare. Shenma search was co-founded as a mobile search engine by UCWeb and Alibaba in 2013. In 2014, Alibaba acquired UCWeb.", + "quark":"Shenma Inc. is a \"mobile-first\" search engine for China that was launched in April 2014. It is a joint venture between Alibaba Group and UCWeb.", "quark images":[ "quark:en", "ref" @@ -2282,7 +2354,7 @@ "online database of internet radio stations", "wikidata" ], - "reddit":"Reddit is an American proprietary social news aggregation and forum social media platform. Registered users submit content to the site such as links, text posts, images, and videos, which are then voted up or down by other members. Posts are organized by subject into user-created boards called \"subreddits\". Submissions with more upvotes appear towards the top of their subreddit and, if they receive enough upvotes, ultimately on the site's front page. Reddit administrators moderate the communities. Moderation is also conducted by community-specific moderators, who are unpaid volunteers. It is operated by Reddit Inc., based in San Francisco.", + "reddit":"Reddit is an American proprietary social news aggregation and forum social media platform. Registered users submit content to the site such as links, text posts, images, and videos, which are then voted up or down by other members. Posts are organized by subject into user-created boards called \"subreddits\". Submissions with more upvotes appear towards the top of their subreddit and, if they receive enough upvotes, ultimately on the site's front page. Reddit administrators moderate the communities. Moderation is also conducted by community-specific moderators, who are unpaid volunteers. It is operated by Reddit, Inc., based in San Francisco.", "reuters":"Reuters is a news agency owned by Thomson Reuters. It employs around 2,500 journalists and 600 photojournalists in about 200 locations worldwide writing in 16 languages. Reuters is one of the largest news agencies in the world.", "rottentomatoes":"Rotten Tomatoes is an American review-aggregation website for film and television. The company was launched in August 1998 by three undergraduate students at the University of California, Berkeley: Senh Duong, Patrick Y. Lee, and Stephen Wang. Although the name \"Rotten Tomatoes\" connects to the practice of audiences throwing rotten tomatoes in disapproval of a poor stage performance, the direct inspiration for the name from Duong, Lee, and Wang came from an equivalent scene in the 1992 Canadian film Léolo.", "rubygems":"RubyGems is a package manager for the Ruby programming language that provides a standard format for distributing Ruby programs and libraries, a tool designed to easily manage the installation of gems, and a server for distributing them. It was created by Chad Fowler, Jim Weirich, David Alan Black, Paul Brannan and Richard Kilmer in 2004.", @@ -2332,7 +2404,7 @@ "wikidata" ], "stackoverflow":"Stack Exchange is a network of question-and-answer (Q&A) websites on topics in diverse fields, each site covering a specific topic, where questions, answers, and users are subject to a reputation award process. The reputation system allows the sites to be self-moderating. Currently, Stack Exchange is composed of 173 communities bringing in over 100 million unique visitors each month. As of February 2025 the three most active sites in the network are Stack Overflow, Mathematics, and Ask Ubuntu.", - "startpage":"Startpage is a Dutch search engine company that highlights privacy as its distinguishing feature. The website advertises that it allows users to obtain Bing Search and Google Search results while protecting users' privacy by not storing personal information or search data and removing all trackers. Startpage.com also includes an Anonymous View browsing feature that allows users the option to open search results via proxy for increased anonymity.", + "startpage":"Startpage.com is a Dutch search engine website that highlights privacy as its distinguishing feature. The website advertises that it allows users to obtain Bing Search and Google Search results while protecting users' privacy by not storing personal information or search data and removing all trackers. Startpage.com also includes an Anonymous View browsing feature that allows users the option to open search results via proxy for increased anonymity. Startpage is owned and operated by Surfboard Holding BV, The Hague, the Netherlands.", "startpage images":[ "startpage:en", "ref" @@ -2361,7 +2433,11 @@ "https://www.tokyotosho.info/" ], "unsplash":"Unsplash is a website dedicated to proprietary stock photography. Since 2021, it has been owned by Getty Images. The website claims over 330,000 contributing photographers and generates more than 13 billion photo impressions per month on their growing library of over 5 million photos. Unsplash has been cited as one of the world's leading photography websites by Forbes, Design Hub, CNET, Medium and The Next Web.", - "vimeo":"Vimeo, Inc. is an American video hosting, sharing, and services provider founded in 2004 and headquartered in New York City. Vimeo focuses on the delivery of high-definition video across a range of devices and operates on a software as a service (SaaS) business model. The platform provides tools for video creation, editing, and broadcasting along with enterprise software solutions and the means for video professionals to connect with clients and other professionals. As of December 2021, the site has 260 million users, with around 1.6 million subscribers to its services.", + "uxwing":[ + "Exclusive Free icons SVG images easily copy paste SVG code or download SVG vector & PNG for commercial use no attribution required. You can use this icons library for websites, PowerPoint, applications, Android, etc", + "https://uxwing.com" + ], + "vimeo":"Vimeo is an American video hosting, sharing, and services provider founded in 2004 and headquartered in New York City. Vimeo focuses on the delivery of high-definition video across a range of devices and operates on a software as a service (SaaS) business model. The platform provides tools for video creation, editing, and broadcasting along with enterprise software solutions and the means for video professionals to connect with clients and other professionals. As of December 2021, the site has 260 million users, with around 1.6 million subscribers to its services.", "voidlinux":"Void Linux is an independent Linux distribution that uses the X Binary Package System (XBPS) package manager, which was designed and implemented from scratch, and the runit init system. Excluding binary kernel blobs, a base install is composed entirely of free software.", "wallhaven":[ "Your source for the best high quality wallpapers on the Net!", @@ -2385,13 +2461,13 @@ "wikicommons.images:en", "ref" ], - "wikidata":"Wikidata is a collaboratively edited multilingual knowledge graph hosted by the Wikimedia Foundation. It is a common source of open data that Wikimedia projects such as Wikipedia, and anyone else, are able to use under the CC0 public domain license. Wikidata is a wiki powered by the software MediaWiki, including its extension for semi-structured data, the Wikibase. As of early-2025, Wikidata had 1.65 billion item statements.", + "wikidata":"Wikidata is a collaboratively edited multilingual knowledge graph hosted by the Wikimedia Foundation. It is a common source of open data that Wikimedia projects such as Wikipedia, and anyone else, are able to use under the CC0 public domain license. Wikidata is a wiki powered by the software MediaWiki, including its extension for semi-structured data, the Wikibase. As of early 2025, Wikidata had 1.65 billion item statements.", "wikimini":[ "family of online encyclopedias for children", "wikidata" ], "wikinews":"Wikinews is a free-content news wiki and a project of the Wikimedia Foundation that works through collaborative journalism through user-created content. Wikipedia co-founder Jimmy Wales has distinguished Wikinews from Wikipedia by saying, \"On Wikinews, each story is to be written as a news story as opposed to an encyclopedia article.\" Wikinews's neutral point of view policy aims to distinguish it from other citizen journalism efforts such as Indymedia and OhmyNews. In contrast to most Wikimedia Foundation projects, Wikinews allows original work in the form of original reporting and interviews. In contrast to newspapers, Wikinews does not permit op-ed.", - "wikipedia":"Wikipedia is a free online encyclopedia, written and maintained by a community of volunteers, known as Wikipedians, through open collaboration and the wiki software MediaWiki. Founded by Jimmy Wales and Larry Sanger on January 15, 2001, Wikipedia has been hosted since 2003 by the Wikimedia Foundation, an American nonprofit organization funded mainly by donations from readers. Wikipedia is the largest and most-read reference work in history.", + "wikipedia":"Wikipedia is a free online encyclopedia, written and maintained by a community of volunteers, known as Wikipedians, through open collaboration and the wiki software MediaWiki. Founded by Jimmy Wales and Larry Sanger in 2001, Wikipedia has been hosted since 2003 by the Wikimedia Foundation, an American nonprofit organization funded mainly by donations from readers. Wikipedia is the largest and most-read reference work in history.", "wikiquote":"Wikiquote is part of a family of wiki-based projects run by the Wikimedia Foundation using MediaWiki software. The project's objective is to collaboratively produce a vast reference of quotations from prominent people, books, films, proverbs, etc. and writings about them. The website aims to be as accurate as possible regarding the provenance and sourcing of the quotations.", "wikisource":"Wikisource is an online wiki-based digital library of free-content textual sources operated by the Wikimedia Foundation. Wikisource is the name of the project as a whole; it is also the name for each instance of that project, one for each language. The project's aim is to host all forms of free text, in many languages, and translations. Originally conceived as an archive to store useful or important historical texts, it has expanded to become a general-content library. The project officially began on November 24, 2003, under the name Project Sourceberg, a play on Project Gutenberg. The name Wikisource was adopted later that year and it received its own domain name.", "wikispecies":"Wikispecies is a wiki-based online project supported by the Wikimedia Foundation. Its aim is to create a comprehensive open content catalogue of all species; the project is directed at scientists, rather than at the general public. Jimmy Wales stated that editors are not required to fax in their degrees, but that submissions will have to pass muster with a technical audience. Wikispecies is available under the GNU Free Documentation License and CC BY-SA 4.0.", @@ -2711,7 +2787,7 @@ "google":"El buscador de Google o buscador web de Google es un motor de búsqueda en la web propiedad de Alphabet Inc. Es el motor de búsqueda más utilizado en la Web y recibe cientos de millones de consultas cada día a través de sus diferentes servicios. El objetivo principal del buscador de Google es buscar texto en las páginas web, en lugar de otro tipo de datos. Fue desarrollado originalmente por Larry Page y Sergey Brin en 1997.", "google images":"Google Imágenes es una especialización del buscador principal para imágenes, se introdujo el 12 de julio de 2001 debido a la demanda de imágenes del vestido verde de Versace que usó Jennifer López en febrero de 2000. En 2011, se agregó la función de búsqueda inversa de imágenes.", "google news":"Google Noticias, conocido en España como Google News, es un agregador y buscador de noticias automatizado que rastrea de forma constante la información de los principales medios de comunicación en línea.", - "google play apps":"Google Play o Google Play Store es una plataforma de distribución digital de aplicaciones móviles para los dispositivos con sistema operativo Android, así como una tienda en línea desarrollada y operada por Google. Esta plataforma permite a los usuarios navegar y descargar aplicaciones, juegos, música, libros, revistas y películas. También se pueden adquirir dispositivos móviles como ordenadores Chromebook, teléfonos inteligentes Nexus y Pixel, Google Chromecast, entre otros. También cuenta con versiones para Wear OS y Android TV.", + "google play apps":"Google Play o Google Play Store es una plataforma de distribución digital de aplicaciones móviles para los dispositivos con sistema operativo Android, así como una tienda en línea desarrollada y operada por play store Esta plataforma permite a los usuarios navegar y descargar aplicaciones, juegos, música, libros, revistas y películas. También se pueden adquirir dispositivos móviles como ordenadores Chromebook, teléfonos inteligentes Nexus y Pixel, Google Chromecast, entre otros. También cuenta con versiones para Wear OS y Android TV.", "google play movies":[ "google play apps:es", "ref" @@ -2735,6 +2811,10 @@ "imdb":"Internet Movie Database es una base de datos en línea que en un principio almacena información relacionada con películas, y con el tiempo se transforma en la base de datos más grande del mundo donde se encuentran programas de televisión, eventos en vivo y difundidos en televisión o en la web, entrega de premios, especiales y videojuegos. Se encuentra el personal de equipo de producción, actores, series y programas de televisión, videojuegos, actores de doblaje y personajes ficticios que aparecen en los medios de entretenimiento visual. Recibe más de 100 millones de usuarios únicos al mes y cuenta con una versión móvil. IMDb fue inaugurada el 17 de octubre de 1990, y en 1998 fue adquirida por Amazon.com.", "imgur":"Imgur es un sitio web para alojar imágenes en línea, fundado por Alan Schaaf en el 2009 en Ohio, Estados Unidos, como un regalo para la comunidad de Reddit. Imgur es, actualmente, una de las mayores webs de contenido de imágenes de Internet donde son juzgadas en tiempo real por una comunidad de usuarios a través de comentarios y votos.", "ina":"El Instituto nacional del audiovisual (INA) es un organismo público francés cuya misión principal es archivar las producciones audiovisuales y producir, editar, publicar, comercializar y distribuir contenidos audiovisuales y multimedia para todos los públicos, ya sean profesionales, empresas o particulares, para todas las pantallas o plataformas de difusión, incluido el audio. El INA también incluye un centro de formación e investigación destinado a desarrollar y transmitir conocimientos y experiencia en los campos audiovisual, mediático y digital.", + "ipernity":[ + "La comunidad de intercambio de fotos, vídeos y blogs no comerciales más grande del mundo, financiada únicamente por las cuotas de los miembros, sin ánimo de lucro.", + "https://www.ipernity.com" + ], "iqiyi":"iQIYI, anteriormente Qiyi, es una plataforma de vídeo en línea basada en Pekín, lanzada el 22 de abril de 2010. iQIYI es una de las plataformas de vídeo en línea de mayor tamaño del mundo, con casi 6 mil millones de horas de reproducciones en su servicio cada mes, y con más de 500 millones de usuarios activos al mes.", "kickass":"KickassTorrents es un sitio web que proporciona un directorio de archivos torrent y enlaces magnéticos para facilitar el intercambio de archivos peer-to-peer mediante el protocolo BitTorrent. Fue fundada en 2008 y fue puesto fuera de línea el 20 de julio de 2016, cuando el dominio fue capturado por el gobierno de Estados Unidos. Los servidores proxy del sitio fueron cerrados por su personal, al mismo tiempo.", "lemmy comments":[ @@ -2783,6 +2863,18 @@ "ref" ], "naver":"Naver es el principal portal de Internet de Corea del Sur. Naver fue lanzado en junio de 1999 y fue el primer portal coreano que disponía de un buscador propio e independiente integrado con la página. Desde entonces ha liderado la carrera del desarrollo de buscadores en Corea. Además Naver proporciona muchos servicios a los internautas: posee una agencia de noticias propia que cubre exhaustivamente más de 90 medios de comunicación, un servicio de correo electrónico y un buscador de tesis doctorales. Su contenido más popular son los de los manhwas Torre de Dios y Girls of the Wilds. También es dueña de la aplicación de llamadas gratis LINE.", + "naver images":[ + "naver:es", + "ref" + ], + "naver news":[ + "naver:es", + "ref" + ], + "naver videos":[ + "naver:es", + "ref" + ], "niconico":"Niconico , anteriormente conocido como Nico Nico Douga , es una web de alojamiento de vídeos de origen japonés creada por Niwango. Nico Nico Douga, según Alexa, es la duodécima web más visitada en Japón.", "nixos wiki":[ "nixos wiki:en", @@ -2816,7 +2908,7 @@ ], "reddit":"Reddit es un sitio web de marcadores sociales y agregador de noticias donde los usuarios pueden añadir textos, imágenes, videos o enlaces. Los usuarios pueden votar a favor o en contra del contenido, haciendo que aparezcan en las publicaciones destacadas. Su público es mayoritariamente anglosajón y la mayoría de la actividad se realiza en inglés. Reddit fue software libre desde el 19 de junio de 2009 hasta septiembre de 2017, cuando la compañía archivó y cerró el acceso a sus repositorios en Github, que incluían todo el código escrito para Reddit excepto las partes antispam.", "reuters":"Reuters es una agencia de noticias con sede en el Reino Unido, conocida por suministrar información a medios de comunicación y mercados financieros.", - "rottentomatoes":"Rotten Tomatoes es un sitio web estadounidense de revisión y reseñas para cine y televisión. La compañía fue fundada en agosto de 1998 por tres estudiantes universitarios de la Universidad de California, Berkeley: Senh Duong, Patrick Y. Lee y Stephen Wang. Aunque el nombre \"Rotten Tomatoes\" se conecta con la práctica de audiencias arrojando tomates podridos cuando desaprueba una pobre actuación en el escenario, la inspiración original proviene de una escena con tomates en la película canadiense de 1992 Léolo.", + "rottentomatoes":"Rotten Tomatoes es un sitio web estadounidense de revisión y reseñas para cine y televisión. La compañía fue fundada en agosto de 1998 por tres estudiantes universitarios de la Universidad de California, Berkeley: Senh Duong, Patrick Y. Lee y Stephen Wang. Aunque el nombre «Rotten Tomatoes» se conecta con la práctica de audiencias arrojando tomates podridos cuando desaprueba una pobre actuación en el escenario, la inspiración original proviene de una escena con tomates en la película canadiense de 1992 Léolo.", "rubygems":"RubyGems es un gestor de paquetes para el lenguaje de programación Ruby que proporciona un formato estándar y autocontenido para poder distribuir programas o bibliotecas en Ruby, una herramienta destinada a gestionar la instalación de estos, y un servidor para su distribución. Es, por tanto, equivalente al papel que juegan CPAN y PEAR en los lenguajes Perl y PHP, respectivamente. RubyGems es parte de la librería estándar a partir de la versión 1.9 de Ruby.", "rumble":"Rumble es una plataforma de video en línea canadiense con sede en Toronto. Fue fundada en 2013 por Chris Pavlovski, un emprendedor tecnológico de Canadá. El recuento mensual de usuarios de Rumble ha experimentado un rápido crecimiento desde julio de 2020, pasando de 1,6 millones de usuarios mensuales a 31,9 millones al final del primer trimestre de 2021.", "semantic scholar":"Semantic Scholar es un motor de búsqueda respaldado por un sistema de inteligencia artificial dedicado a trabajar con publicaciones académicas. Desarrollado en el Allen Institute for Artificial Intelligence, se lanzó al público en noviembre de 2015. Utiliza avances recientes en el procesamiento del lenguaje natural para proporcionar resúmenes de artículos académicos.", @@ -3190,7 +3282,7 @@ "ref" ], "wikidata":"Wikidata elkarlanean sortutako datu-base eleanitz bat da, Wikimedia Fundazioak kudeatua. Wikidataren xedea da iturri bateratu bat eskaintzea zenbait datutarako (adibidez, pertsonen jaiotegunak eta jarduerak, edo Wikipediako artikulu bat nola den beste hizkuntzen Wikipedietan. Informazio hori Wikimediaren proiektuetan erabiltzen da gero, adibidez Wikipedian. Wikipediako artikulu askotan goian eskuinaldean hainbat daturekin agertzen den infotaula, kasu askotan automatikoki sortu izan da artikulu horri buruz Wikidatan dagoen informazioarekin.", - "wikipedia":"Wikipedia eduki askeko entziklopedia bat da, lankidetzaz editatua, eleanitza, Interneten argitaratua, Wikimedia Fundazioa irabazi asmorik gabeko erakundeak sustengatua. Wikipedia mundu osoko boluntarioek idazten dute. Internetera konektatutako edonork parte har dezake Wikipediako artikuluetan, aldatu lotura sakatuz. 2015ko azaroaren bostean, 291 hizkuntzatako edizioak zituen, eta horietatik 275 zeuden aktibo. Proiektuaren xedea da ahalik eta hizkuntza gehienetan idatzitako entziklopedia sortu eta hedatzea. Guztira 37 milioi artikulu ditu, horietatik 461.286 euskaraz eta bost milioitik gora ingelesez.", + "wikipedia":"Wikipedia eduki askeko entziklopedia bat da, lankidetzaz editatua, eleanitza, Interneten argitaratua, Wikimedia Fundazioa irabazi asmorik gabeko erakundeak sustengatua. Wikipedia mundu osoko boluntarioek idazten dute. Internetera konektatutako edonork parte har dezake Wikipediako artikuluetan, aldatu lotura sakatuz. 2015ko azaroaren bostean, 291 hizkuntzatako edizioak zituen, eta horietatik 275 zeuden aktibo. Proiektuaren xedea da ahalik eta hizkuntza gehienetan idatzitako entziklopedia sortu eta hedatzea. Guztira 37 milioi artikulu ditu, horietatik 464.025 euskaraz eta bost milioitik gora ingelesez.", "wikiquote":"Wikiesanak Wikimedia Fundazioaren aipu ezagunen bilduma da. Bertan pertsona entzutetsuen esanak, liburu ospetsuetako aipamenak eta herrialde ezberdinetako esaera zaharrak edo atsotitzak aurki daitezke. Wikipedia bezala, internet bidezko elkarlanean eta wiki softwarean oinarritzen den webgunea da. GFDL lizentziapean argitaratzen da. Hastapenetan ingelesez soilik bazen ere, 2004 urteaz geroztik 79 hizkuntza ezberdinetan dago. Ingelesezko bertsioa artikulu gehien duena izan da ordutik, 2010 urteko hasieran ia ehun mila orri eta hamazazpi mila bat aipuak biltzeko artikulu duela. 2010. urtearen hasieran euskarazko bertsioak mila orrialde baino gehiago zituen, eta horietako ehun baino gehiago, aipu-orrialdeak.", "wikisource":"Wikiteka wikian dagoen testu eduki askeko Interneteko liburutegi digitala da, Wikimedia Fundazioak kudeatutakoa. Wikiteka da proiektu osoaren izena, baita proiektu horretako ale bakoitzaren izena ere, non ale bakoitza hizkuntza desberdin bati dagokion. Beraz, hizkuntza askotako iturriek osatzen dute Wikiteka.", "wikispecies":"Wikiespezieak Wikimedia Fundazioaren proiektu bat da. Bertan, naturako izaki espezie ezberdinen informazioa aurki dezakegu; animaliak, landareak, onddoak, bakteriak, eta gainontzeko bizi-formak.", @@ -3264,7 +3356,7 @@ "ref" ], "deezer":"دیزر رسانه جاری موسیقی و پادکست مبتنی بر اینترنت است. این سرویس در اوت ۲۰۰۷ در پاریس فرانسه پایه‌گذاری شد. تا تاریخ ۳ آوریل ۲۰۱۸، ۱۴ میلیون کاربر ماهانه فعال و ۶ میلیون مشترک پولی برای دیزر گزارش شده‌است.", - "deviantart":"دوینت‌آرت یک شبکه اجتماعی آنلاین با محوریت هنر است. پایگاه رسمی آن در ۷ آگوست سال ۲۰۰۰ توسط چند طراح وب با ایده‌های نو راه‌اندازی شد. آثار هنری در این ‍‍ پایگاه عبارتند از; عکاسی، هنر دیجیتال، نقاشی دیجیتال، هنر سنتی، ادبیات، پویانمایی، فیلم سازی، پوسته برای برنامه‌های کاربردی و غیره که با دیگران به اشتراک گذاشته می‌شوند.", + "deviantart":"دوینت‌آرت یک شبکه اجتماعی آنلاین با محوریت هنر است. پایگاه رسمی آن در ۷ اوت سال ۲۰۰۰ توسط چند طراح وب با ایده‌های نو راه‌اندازی شد. آثار هنری در این ‍‍ پایگاه عبارتند از; عکاسی، هنر دیجیتال، نقاشی دیجیتال، هنر سنتی، ادبیات، پویانمایی، فیلم سازی، پوسته برای برنامه‌های کاربردی و غیره که با دیگران به اشتراک گذاشته می‌شوند.", "duckduckgo":[ "currency:fa-IR", "ref" @@ -3340,6 +3432,18 @@ "ref" ], "naver":"موتور جستجوی ناور (به کره‌ای: 네이버) یک موتور جستجوی معروف در کره است که در حدود ۷۰ درصد بازار مشترک را در مقابل ۲ درصد گوگل داراست .Naver در سال ۱۹۹۹ توسط گروهی از مهندسان شرکت Sumsong ایجاد شد. و به عنوان اولین وب پورتال کره جنوبی شناخته می‌شود و یک پورتال بومی اختصاصی محسوب می گردد.", + "naver images":[ + "naver:fa-IR", + "ref" + ], + "naver news":[ + "naver:fa-IR", + "ref" + ], + "naver videos":[ + "naver:fa-IR", + "ref" + ], "niconico":"نیکونیکو ، یک سرویس اشتراک‌گذاری ویدیوی ژاپنی مستقر در توکیو، ژاپن است. «نیکونیکو» ایدئوفون ژاپنی برای لبخند زدن است. طبق گزارش الکسا اینترنت از سال ۲۰۲۱، نیکونیکو سی و چهارمین وب سایت پربازدید در ژاپن است.", "nixos wiki":[ "nixos wiki:en", @@ -3413,6 +3517,7 @@ }, "fi":{ "9gag":"9GAG on vuonna 2008 perustettu meemeihin ja muuhun internethuumoriin keskittyvä verkkosivusto. Se syntyi hongkonglaisen opiskelijaryhmän työnä, johon kuului Ray Chan, Chris Chan, Derek Chan, Marco Fung ja Brian Yu, koska Facebook ei ollut saatavilla Hongkongissa. 9GAG-sovellus on saatavilla Androidille, iOS:lle, Windows Phonelle ja BlackBerry 10:lle. 9GAG on saavuttanut sosiaalisen median kuten Facebookin, Twitterin ja Instagramin avulla suuren suosion. Marraskuussa 2017 9GAG:in sivuilla oli käynyt yli 223 miljoonaa vierailijaa.", + "alpine linux packages":"Alpine Linux on riippumaton Linux-jakelu, joka on suunniteltu käyttöön reittimissä, palomuureissa, säiliöissä ja palvelimissa. Alpine Linux on suunniteltu pieneksi, ja se voidaan ajaa suoraan RAM-muistista. Alpine Linux perustuu musl-kirjastolle ja Busyboxille. Alpine Linux on suosittu säiliöissä, joissa hyökkäyspinta-ala minimoidaan ja suoritus tehdään kustannustehokkaaksi. Alpine Linuxista on saatavilla 32- ja 64-bittisiä versioita useille alustoille: i386 (x86), AMD64, ARMv6, ARMv8, PowerPC ja IBM System z (s390x) arkkitehtuureille.", "ansa":[ "italialainen uutistoimisto", "wikidata" @@ -3726,12 +3831,12 @@ "apple maps":"Apple Plans est une application de cartographie en ligne développée par Apple. Il s'agit de l'application de cartographie par défaut sur iOS, iPadOS, macOS et watchOS. Elle permet de donner les directions et l'heure d'arrivée estimée que l'on soit en voiture, à pied, en bicyclette ou en transport en commun. Une fonctionnalité appelée « tour Flyover » permet d'explorer certaines zones urbaines et autres points d'intérêt modélisés en 3D.", "artic":"L'Art Institute of Chicago est un musée situé à Chicago aux États-Unis. Deuxième plus grand musée d'art du pays après le Metropolitan Museum of Art de New York, il abrite l'une des plus importantes collections d'art des États-Unis.", "arxiv":"arXiv est une archive ouverte de prépublications électroniques d'articles scientifiques dans les domaines de la physique, des mathématiques, de l'informatique, de la biologie quantitative, de la finance quantitative, de la statistique, de l'ingénierie électrique et des systèmes, et de l'économie, et qui est accessible gratuitement par Internet.", - "ask":"Ask.com anciennement Ask Jeeves, est un moteur de recherche sur Internet fondé en 1996 par Garrett Gruener et David Warthen à Berkeley en Californie. Le moteur initial fut conçu et implémenté par Gary Chevsky.", + "ask":"Ask.com anciennement Ask Jeves, est un moteur de recherche sur Internet fondé en 1996 par Garrett Gruener et David Warthen à Berkeley en Californie. Le moteur initial fut conçu et implémenté par Gary Chevsky.", "askubuntu":[ "stackoverflow:fr", "ref" ], - "baidu":"Baidu est une entreprise Internet chinoise. Son moteur de recherche en chinois peut chercher du texte et des images. En juin 2013, c'est le site le plus consulté de Chine et, en 2019, c'est le 3e site le plus consulté sur Internet. Baidu signifie « Cent degrés » en chinois. En 2023, l'entreprise propose un index de plus de 3 milliards de pages web. Elle participe activement à la communauté du logiciel libre, notamment dans le domaine de l'intelligence artificielle.", + "baidu":"Baidu est une entreprise Internet chinoise. Son moteur de recherche en chinois peut chercher du texte et des images. En juin 2013, c'est le site le plus consulté de Chine et, en 2019, c'est le troisième site le plus consulté au monde. En 2023, l'entreprise propose un index de plus de 3 milliards de pages web. Elle participe activement à la communauté du logiciel libre, notamment dans le domaine de l'intelligence artificielle.", "baidu images":[ "baidu:fr", "ref" @@ -3821,7 +3926,7 @@ "github":"GitHub est un service web d'hébergement et de gestion de développement de logiciels, utilisant le logiciel de gestion de versions Git. Ce site est développé en Ruby on Rails et Erlang par Chris Wanstrath, PJ Hyett et Tom Preston-Werner. GitHub propose des comptes professionnels payants, ainsi que des comptes gratuits pour les projets de logiciels libres.", "gitlab":"GitLab est un logiciel libre de forge basé sur git proposant les fonctionnalités de wiki, un système de suivi des bugs, l’intégration continue et la livraison continue. Développé par GitLab Inc et créé par Dmitriy Zaporozhets et par Valery Sizov, le logiciel est utilisé par plusieurs grandes entreprises informatiques, dont IBM, Sony, le centre de recherche de Jülich, la NASA, Alibaba, Oracle, Invincea, O’Reilly Media, Leibniz Rechenzentrum, le CERN, European XFEL, la GNOME Foundation, KDE, Boeing, Autodata, SpaceX, Symbio et Altares.", "goodreads":"Goodreads est un site web de critiques et de notation de livres. Fondé en décembre 2006, puis lancé en janvier 2007 par Otis Chandler II, un ingénieur informatique et entrepreneur, et Elizabeth Khuri, ce site se base sur des notions de catalogage social et permet aux individus de faire des recherches dans une vaste base de données comprenant des livres, des annotations et des critiques littéraires. Les usagers peuvent y créer un compte pour consigner leurs impressions de lecture, ce qui génère des listes de suggestions personnalisées. Ils ont également la possibilité de créer leurs propres clubs de lecture, des sondages, des blogs et de lancer des discussions.", - "google":"Google /ˈgu.gəl/ est un moteur de recherche sur Internet gratuit et libre d'accès sur le World Wide Web, ayant donné son nom à la société Google. C'est aujourd'hui le moteur de recherche et le site web le plus visité au monde : 90 % des internautes l'utilisaient en 2018.", + "google":"Google /ˈgu.gəl/ est un moteur de recherche sur Internet gratuit et libre d'accès sur le World Wide Web, ayant donné son nom à la société Google.", "google images":"Google Images est un service proposé depuis 2001 par le moteur de recherche Google pour permettre de trouver sur le web des images en rapport avec un sujet donné.", "google news":"Google Actualités ou Google News est un service en ligne gratuit de Google qui présente de façon automatisée des articles d'information en provenance de sources sur le Web. Il fonctionne de la même manière qu'un moteur de recherche, en n'indexant que les articles de presse. Ce service, disponible dans vingt-deux pays, a été créé en avril 2002. La partie française du service est sortie de son statut bêta le 14 mai 2009. En juin 2017, Google change le design de Google Actualités pour une version plus épurée et plus claire pour l'utilisateur. Elle propose également des articles dont les faits sont vérifiés dans la version américaine.", "google play apps":"Google Play est une suite d'applications et un magasin d'applications créée par Google le 22 octobre 2008 par fusion des services Android Market, Google Movies, Google ebookstor et Google Music. Elle regroupe Play Store, le magasin d'applications officiel pour les appareils fonctionnant sous Android et Chrome OS, Play Films et séries, une boutique de location de films et de séries télévisées, Play Livres, une boutique d'achat en ligne de livres et de magazines, et Play Jeux, un service de sauvegarde, de récompense et de défis autour des jeux mobiles disponibles sur le Play Store.", @@ -3846,6 +3951,10 @@ "imdb":"L’Internet Movie Database, abrégé en IMDb, est une base de données en ligne sur le cinéma mondial, sur la télévision, et plus secondairement les jeux vidéo. IMDb restitue un grand nombre d’informations concernant les films, les acteurs, les réalisateurs, les scénaristes et toutes personnes et entreprises intervenant dans l’élaboration d’un film, d’un téléfilm, d’une série télévisée ou d’un jeu vidéo. L’accès aux informations publiques est gratuit. Un service payant, IMDbPro, donne accès aux informations supplémentaires susceptibles d’intéresser les professionnels. Créé le 17 octobre 1990 par l'Anglais Col Needham, c’est un site visité, en 2010, par plus de 57 millions d’usagers uniques chaque mois, ce qui le plaçait au 39e rang des sites les plus visités au monde. Il appartient depuis 1998 à Amazon.", "imgur":"imgur est une société américaine fondée par Alan Schaaf en 2009 qui exploite un site d'hébergement d'images.", "ina":"L'Institut national de l'audiovisuel (INA) est un établissement public à caractère industriel et commercial français ayant pour mission principale d'archiver les productions audiovisuelles et de produire, d'éditer, de publier, de commercialiser et de distribuer des contenus audiovisuels et multimédias à destination de tous les publics, professionnels, entreprises ou particuliers, pour tous les écrans ou plateformes de diffusion, y compris audio. L'INA comprend également un centre de formation et de recherche visant à développer et transmettre les savoirs et expertises dans les domaines de l'audiovisuel, des médias et du numérique.", + "ipernity":[ + "La plus grande communauté non commerciale de partage de photos, vidéos et blogs au monde, financée uniquement par les cotisations des membres, à but non lucratif.", + "https://www.ipernity.com" + ], "iqiyi":"iQiyi est un site de publication de vidéos en ligne créé le 22 avril 2010 en République populaire de Chine. Il cumulait plus de 50 millions de vidéos visionnées quotidiennement en mai 2013. Le public chinois visualise en tout plus d'1,28 milliard d'émissions de télévision et de films par mois d'après des statistiques de septembre 2014.", "kickass":"KickassTorrents est un annuaire web de fichiers torrent et de liens magnet destiné à faciliter le partage de fichiers. Le site a été fondé en 2008 et a été mis hors ligne le 20 juillet 2016, lorsque le domaine a été saisi par le gouvernement des États-Unis. Les sites proxy ont été fermés par les membres de son équipe le même jour. Le 16 décembre 2016, KickassTorrents est de retour en ligne sur une nouvelle adresse, créée par l'équipe originale.", "lemmy comments":[ @@ -3871,7 +3980,7 @@ "mastodon users:fr", "ref" ], - "mastodon users":"Mastodon est un réseau social et logiciel de microblogage auto-hébergé, libre, distribué et décentralisé via ActivityPub au sein du Fediverse. Il permet de partager des messages, images, médias et autres contenus. C'est une alternative à Twitter. Des instances sont publiquement mises à disposition afin de faciliter son utilisation.", + "mastodon users":"Mastodon est un logiciel de microblogage libre et open source fonctionnant sur le protocole ActivityPub.", "mdn":"MDN Web Docs, précédemment Mozilla Developer Network et anciennement Mozilla Developer Center, est un dépôt de documentation et une ressource d'apprentissage pour les développeurs web utilisés par Mozilla, Microsoft, Google et Samsung.", "metacpan":"Le Comprehensive Perl Archive Network, ou CPAN, est un site Web consacré au langage de programmation Perl. CPAN désigne également un module Perl servant à accéder à ce site. Son nom vient du Comprehensive TeX Archive Network, ou CTAN, son homologue consacré à TeX.", "microsoft learn":[ @@ -3894,6 +4003,18 @@ "ref" ], "naver":"Naver est une plateforme en ligne sud-coréenne gérée par la société Naver Corporation. Le site a été créé en 1999 en tant que premier portail Web en Corée à développer et utiliser son propre moteur de recherche. Il a également été le premier opérateur au monde à introduire la fonction de recherche intégrée, qui compile les résultats de recherche de différentes catégories et les présente sur une seule page. Depuis, Naver a ajouté une multitude de nouveaux services telles que le courrier électronique et les nouvelles, puis aussi la première plateforme de questions-réponses en ligne Knowledge iN.", + "naver images":[ + "naver:fr", + "ref" + ], + "naver news":[ + "naver:fr", + "ref" + ], + "naver videos":[ + "naver:fr", + "ref" + ], "niconico":"Niconico (ニコニコ, Nikoniko, litt. « Sourire ») anciennement connu sous le nom Nico Nico Dōga (ニコニコ動画, litt. « Sourire vidéos ») ou Nico-dō est un site web de partage de vidéos, très populaire au Japon, géré par Niwango (en). Le site est surnommé « Niconico » ou « Nico-dō », sachant que « nico nico » est l'onomatopée pour le sourire. Niconico est classé 13e parmi les sites web les plus visités au Japon. Le site a gagné le Good Design Award japonais en 2007, et le Honoray Mentions Awards de la catégorie des communautés digitales au Prix Ars Electronica 2008. Sa particularité est que les commentaires de la vidéo s'affichent directement sur celle-ci au même moment qu'ils ont été écrits, ils sont appelés « danmaku » (弾幕). Cette fonctionnalité est aussi développée par le chinois bilibili.", "nixos wiki":[ "nixos wiki:ru", @@ -3972,7 +4093,7 @@ "wikicommons.images:fr", "ref" ], - "wikicommons.images":"Wikimedia Commons est une base de données multimédia. Elle héberge des images, des sons, d'autres médias audiovisuels et des données JSON sous licence libre. Elle centralise des médias libres, tels que photographies, dessins, schémas, partitions, cartes géographiques, textes écrits et parlés, animations et vidéos, objets 3D qui ont une utilité pour les projets du mouvement Wikimédia. En novembre 2023, elle passe la barre des 100 millions de fichiers hébergés.", + "wikicommons.images":"Wikimedia Commons est une bibliothèque numérique collaborative et gratuite lancée en 2004. Elle héberge des images, des sons, d'autres médias audiovisuels et des données JSON. Elle centralise des médias tels que photographies, dessins, schémas, fichiers son, partitions, cartes géographiques, textes écrits et parlés, animations et vidéos, objets 3D qui ont une utilité pour les projets du mouvement Wikimédia. En novembre 2023, elle passe la barre des 100 millions de fichiers hébergés.", "wikicommons.videos":[ "wikicommons.images:fr", "ref" @@ -4266,7 +4387,7 @@ "annas archive":"הארכיון של אנה היא ספריית צללים חינמית וללא מטרת רווח, המספקת גישה מקוונת לספרים וחומרים כתובים ולמידע עליהם ממגוון מקורות באמצעות רב מנוע. הספרייה הוקמה על ידי צוות ארכיונאים אנונימיים כתגובה למאמצי איגוד המוציאים לאור הבריטי וגילדת המחברים האמריקאית יחד עם רשויות החוק לסגור את האתר Z-library בנובמבר 2022.", "apple app store":"App Store היא חנות אפליקציות ייעודית למכשירי iOS, אשר מפותחת ומתוחזקת על ידי חברת אפל. השירות מאפשר למשתמשים להוריד יישומים (אפליקציות) מחנות ה-iTunes. היישומים בחנות פותחו על ידי ערכת פיתוח התוכנה של ה-iOS‏, ופורסמו על ידי אפל.", "apple maps":"אפל מפות הוא יישום מובנה במערכת ההפעלה iOS של המכשירים מבית חברת אפל, ומציע דרכי הגעה ליעדים, עדכוני תנועה, בתי עסק בסביבה ותכונות נוספות.", - "artic":"מכון האמנות של שיקגו הוא מוזיאון לאמנות יפה בפארק גרנט בשיקגו שבמדינת אילינוי בארצות הברית. מכון האמנות מכיל את אחד האוספים הגדולים ביותר בעולם של אמנות אימפרסיוניסטית ופוסט-אימפרסיוניסטית. כמו כן, קיימים במוזיאון מגוון אוספים הכוללים אמנות אסייתית, אמריקאית, אמנות מודרנית ואמנות עכשווית.", + "artic":"מכון האמנות של שיקגו הוא מוזיאון לאמנויות יפות בפארק גרנט בשיקגו שבמדינת אילינוי בארצות הברית. מכון האמנות מכיל את אחד האוספים הגדולים ביותר בעולם של אמנות אימפרסיוניסטית ופוסט-אימפרסיוניסטית. כמו כן, קיימים במוזיאון מגוון אוספים הכוללים אמנות אסייתית, אמריקאית, אמנות מודרנית ואמנות עכשווית.", "ask":"Ask.com הוא מנוע חיפוש אינטרנטי למענה שאלות שהוקם בשנת 1996 על ידי גרט גרונר ודייוויד וורט'ן בברקלי, קליפורניה. מטרתו של מנוע החיפוש היא לכוון את המחפש במהירות ובדיוק מיטבי אל העמוד העונה על שאלתו. במקרה בו הוא אינו מצליח למצוא מידע במאגר המידע שלו, הוא מפנה את המשתמש לאתרים אחרים על ידי מנועי החיפוש. התכונות המיוחדות של מנוע חיפוש Ask.com כוללות, בין היתר, מדריך מיוחד המוקדש רק לקניות יחד עם צפייה בשאלות שנשאלות ברגעים אלו ממש על ידי משתמשים אחרים. נכון ל-2008, מנוע חיפוש זה היה אחראי רק לכ-5% מכלל החיפושים בעולם.", "baidu":"Baidu הוא תאגיד טכנולוגיה בינלאומי שמרכזו ברפובליקה העממית של סין. מטה החברה נמצא ב\"Baidu Campus\" במחוז הֵידִיאַן, בייג'ינג.", "baidu images":[ @@ -4690,6 +4811,18 @@ "ref" ], "naver":"A Naver dél-koreai internetes portál és keresőmotor, melyet 1999-ben hozott létre egy korábbi Samsung-alkalmazott. A Naver saját keresőmotort fejlesztett, ami kifejezetten koreai nyelvű tartalomra specializálódik. 2009-ben a keresőmotorok között az ötödik helyen szerepelt a világon, a Google, a Yahoo!, a Baidu és a Microsoft után. A Naver a koreai piac domináns keresője, a keresések mintegy 70%-át itt bonyolítják és mintegy 25 millió felhasználónak ez a kezdőoldala a böngészőben. A Woori Investment and Securities elemzése szerint a Google-nek azért nem sikerült megvetnie a lábát a koreai piacon a Naverrel szemben, mert túl kevés koreai nyelvű tartalmat szolgáltat.", + "naver images":[ + "naver:hu", + "ref" + ], + "naver news":[ + "naver:hu", + "ref" + ], + "naver videos":[ + "naver:hu", + "ref" + ], "niconico":"Niconico, korábban Nico Nico Douga vagy röviden „Niko-dó”-ként ismert weboldal, egy japán videómegosztó portál, amit a Niwango, a Dwango egy leányvállalata üzemeltet. A „Niconico” vagy „nikoniko” egy japán hangulatfestő szó a mosolygásra. 2012. április 18. óta a 14. és 10. helyek között mozog a leglátogatottabb oldalak listáján Japánban. 2007-ben ez az oldal nyerte meg a Good Design Award-ot, és „Tiszteletbeli díjazott” volt „Digitális közösségek” kategóriában a 2008-as Ars Electronica-díj díjkiosztó rendezvényén.", "odysee":"Az Odysee egy amerikai decentralizált videómegosztó platform, amely az LBRY blokkláncra épül. A nagy videomegosztó oldalak alternatívájaként pozicionálja magát, de a szólásszabadságra és a decentralizációra helyezi a hangsúlyt.", "openstreetmap":"Az OpenStreetMap (OSM) csoportmunkán alapuló térképfejlesztés, melynek célja egy szabadon szerkeszthető és felhasználható térkép készítése az egész világról.", @@ -4892,7 +5025,7 @@ "google scholar":"Google Cendekia adalah layanan yang memungkinkan pengguna untuk melakukan pencarian materi-materi pelajaran berupa teks dalam berbagai format publikasi. Diluncurkan pada tahun 2004, indeks Google Cendekia mencakup jurnal-jurnal daring dari publikasi ilmiah. Google Cendekia menyediakan cara yang mudah untuk mencari literatur akademis secara luas. Seseorang dapat mencari di seluruh bidang ilmu dan referensi dari satu tempat: makalah peer-reviewed, tesis, buku, abstrak, dan artikel, dari penerbit akademis, komunitas profesional, pusat data pracetak, universitas, dan organisasi akademis lainnya. Google Cendekia akan membantu seseorang mengidentifikasi penelitian paling relevan dari seluruh penelitian akademis. Google Cendekia bertujuan menyusun artikel seperti yang dilakukan peneliti, dengan memperhatikan kelengkapan teks setiap artikel, penulis, publikasi yang menampilkan artikel, dan frekuensi penggunaan kutipan artikel dalam literatur akademis lainnya. Hasil paling relevan akan selalu muncul pada halaman pertama.", "google videos":"Google Videos merupakan layanan saling berbagi video dari situs Google. Lewat layanan ini bahkan pengguna Blogspot/Blogger tidak perlu login untuk dapat memajang video sebagai suntingan. Google Video menyediakan layanan video yang mudah digunakan.", "hackernews":"Hacker News adalah situs web berita sosial berfokus pada ilmu komputer dan kewirausahaan. Dijalankan oleh dana investasi Paul Graham dan inkubator startup, Y Combinator. Secara umum, konten yang dapat dikirimkan didefinisikan sebagai \"segala sesuatu yang memuaskan keingintahuan intelektual seseorang\".", - "hoogle":"Haskell adalah bahasa pemrograman fungsional murni. Nama bahasa pemrograman Haskell diambil dari nama seseorang matematikawan Haskell Curry, yang terkenal akan karyanya di bidang combinatory logic. Haskell hanya mengenal expression dan equation.", + "hoogle":"Haskell adalah merupakan bahasa pemrograman fungsional murni. Nama bahasa pemrograman Haskell diambil dari nama seseorang matematikawan Haskell Curry, yang terkenal akan karyanya di bidang combinatory logic. Haskell hanya mengenal expression dan equation.", "huggingface":"Hugging Face, Inc. adalah sebuah perusahaan Amerika Serikat yang mengembangkan perkakas untuk mengembangkan aplikasi menggunakan pembelajaran mesin. Perusahaan ini membangun sebuah perpustakaan transformer untuk aplikasi pengolahan bahasa alami dan sebuah platform yang digunakan oleh pengguna untuk berbagi model pembelajaran mesin dan kumpulan data.", "huggingface datasets":[ "huggingface:id", @@ -4928,6 +5061,18 @@ "https://learn.microsoft.com" ], "naver":"Naver adalah sebuah portal web populer di Korea Selatan, yang dimiliki oleh Naver Corporation. Naver diluncurkan pada bulan Juni 1999 oleh mantan karyawan Samsung, dan menjadi portal web pertama di Korea Selatan yang menggunakan sistem mesin pencari mereka sendiri. Salah satu di antara fitur Naver adalah \"Comprehensive Search\", yang diluncurkan pada 2000, yang menampilkan hasil dari berbagai kategori dalam satu laman.", + "naver images":[ + "naver:id", + "ref" + ], + "naver news":[ + "naver:id", + "ref" + ], + "naver videos":[ + "naver:id", + "ref" + ], "niconico":"Niconico , sebelum 2012 dikenal sebagai Nico Nico Douga , adalah sebuah layanan berbagi video Jepang di dunia maya. \"Niconico\" atau \"nikoniko\" adalah ideofon Jepang untuk tersenyum. Pada 2021, Niconico adalah situs web paling banyak dikunjungi ke-30 di Jepang, menurut Alexa Internet.", "nixos wiki":[ "nixos wiki:en", @@ -5159,6 +5304,18 @@ "ref" ], "naver":"Naver è una piattaforma online sudcoreana gestita da Naver Corporation. Ha debuttato nel 1999 come il primo portale web in Corea del Sud a sviluppare e utilizzare il proprio motore di ricerca. È stato anche il primo operatore al mondo a introdurre la funzione di ricerca completa, che raccoglie i risultati della ricerca da varie categorie e li presenta in un'unica pagina. Da allora Naver ha aggiunto una moltitudine di nuovi servizi che vanno dalle funzionalità di base come casella e-mail e sito di notizie alla prima piattaforma di domande e risposte online al mondo Knowledge iN.", + "naver images":[ + "naver:it", + "ref" + ], + "naver news":[ + "naver:it", + "ref" + ], + "naver videos":[ + "naver:it", + "ref" + ], "niconico":"Niconico , precedentemente conosciuto come Nico Nico Dōga , è un popolare sito web giapponese di video sharing gestito da Niwango, sussidiaria di Dwango.", "nixos wiki":[ "nixos wiki:en", @@ -5265,7 +5422,7 @@ "ref" ], "alpine linux packages":"Alpine Linux (アルパイン・リナックス) は、muslとBusyBoxをベースとしたLinuxディストリビューションである。セキュリティ・シンプルさ・リソース効率を重視するパワーユーザー向けに設計されている。Alpine Linuxではgrsecurity/PaXを適用したLinuxカーネルを使用しており、全てのユーザ空間バイナリがスタックスマッシング保護 付きの位置独立実行ファイル (PIE) としてコンパイルされている。", - "annas archive":"Anna's Archiveは、様々な書籍リソースへのアクセスを提供する無料の非営利オンラインシャドウライブラリメタサーチエンジンで、匿名のアーキビストのチーム によって、2022年11月にあったZ-Libraryに対する法的措置に対抗する目的で作られた。", + "annas archive":"Anna's Archiveは、2022年のZ-Libraryを閉鎖しようとする法執行機関の動きの直後、アンナという偽名の人物によって開設されたオープンソースの検索エンジンであり、シャドウライブラリを対象としている。Z-Library、Sci-Hub、Library Genesisを含む主要なシャドウライブラリなどの記録を集約している。自身を「人類史上最大の真にオープンな図書館」と称し、「存在するすべての書籍をカタログ化し、これらすべての書籍をデジタル形式で簡単に利用可能にするという人類の進展を追跡する」ことを目指すと述べている。このサイトは著作権のある資料のダウンロードについて責任を負わないと主張している。これは、このサイトがメタデータをインデックス化するのみで、ファイル自体は直接ホストせず、第三者によるダウンロードリンクを提供するのみであるためである。しかしながら、政府によるネット検閲や出版社および出版業界の業界団体による訴訟の対象となっており、大規模な著作権侵害に関与しているとされている。", "ansa":"ANSA通信 はイタリアの通信社。イタリアの主要新聞社36社が加盟する非営利の協同組合という形になっている。", "apple app store":"App Store(アップ・ストア)は、Appleが運営するiPhone、iPod touch、iPad向けアプリケーションのダウンロードサービスである。Mac OS X 10.6.6以降を搭載したMacにも同様のサービスがあるが、こちらは Mac App Store を参考のこと。", "apple maps":"マップ は、Appleが運営・開発する地図アプリケーション。iOS、iPadOS、macOS、watchOSのデフォルトの地図アプリケーションである。", @@ -5316,6 +5473,7 @@ "brave:ja", "ref" ], + "btdigg":"BTDiggは、初めてMainline DHTに対応した検索エンジンである。このサービスはBitTorrent DHTネットワークに参加し、ネットワークの維持や、マグネットリンクといくつかのトレント属性(名称、サイズ、ファイル一覧)の対応を支援していた。これらの属性はインデックス化されてデータベースに挿入されていた。エンドユーザーに対しては、BTDiggはWebインターフェースを通じて全文検索データベース検索を提供していた。検索システムのWeb部分は、ユーザーのテキストクエリにより適切な情報を取得していた。Web検索は欧州およびアジアの言語によるクエリに対応していた。プロジェクト名は「BitTorrent Digger」の略称であり、この文脈において「digger」はトレジャーハンターを意味する。2016年6月には検索エンジンスパムが原因とされる理由でサービスはオフラインとなった。しかし2025年現在、サービスは再びオンラインとなっていると報告されているが、IPフィルタリングの影響により通常のクリアネット接続からはアクセス困難な場合が多い。サービスはTorネットワークやTor Browser経由でアクセス可能である。", "currency":"DuckDuckGo(ダックダックゴー)は、インターネット検索エンジンである。利用者のプライバシーの保護と利用履歴等を記録保存しないことを運営方針としている。VivaldiやTor Browserの標準検索エンジンにも採用されている。また、DuckDuckGoは検索結果のパーソナライズを行わないため「フィルターバブル」に陥らない(DuckDuckGoはGoogleのフィルターバブル問題についてブログで指摘している)。", "dailymotion":"Dailymotion(デイリーモーション)は、Canal+傘下のDAILYMOTION SAが運営する、フランスの動画共有サービス。", "ddg definitions":[ @@ -5379,7 +5537,7 @@ "imgur":"Imgur は、アラン・シャーフが2009年にアメリカ合衆国オハイオ州アセンズで立ち上げたオンライン画像共有と画像管理サービスである。「家庭から、コメント、投票、共有によってコミュニティがリアルタイムでウェブにおける最も人気のある画像にアクセスする場所」と自称している。1日100万人以上のユーザーに無料の画像管理サービスとコメント型ソーシャルコミュニティを提供している。運営企業は広告販売や商用ホスティング、グッズ販売で収益を上げている。", "ina":"フランス国立視聴覚研究所 は、フランスの全ラジオ・テレビの視聴覚アーカイヴの宝庫である。ラジオフランスが主催し、放送局本部の建物内にある。内部にフランス音楽研究グループ を有する。", "iqiyi":"iQIYI は、中華人民共和国のビデオ・オン・デマンド及び動画配信サービスであり、百度傘下のオンラインエンターテイメント企業である。", - "library genesis":"Library Genesis(LibGen)は、様々な分野の論文・書籍の検索エンジンであり、有料で配布されていたり、どこにおいてもデジタル化されていなかったりするコンテンツを無料でアクセス可能にしている。特に、エルゼビアのScienceDirectウェブポータルで配布されているPDFファイルを収録している。", + "library genesis":"Library Genesis(LibGen)は、シャドウライブラリプロジェクトであり、ファイル共有によって学術雑誌の記事や学術書、一般向け書籍、画像、コミック、オーディオブック、雑誌などへのアクセスを提供している。他ではペイウォールで保護されていたり、デジタル化されていなかったりするコンテンツを無料でアクセス可能にしている。", "library of congress":"アメリカ議会図書館 は、アメリカ合衆国の事実上の国立図書館。蔵書数・予算額・職員数全ての点で世界最大規模の図書館である。", "mastodon hashtags":[ "mastodon users:ja", @@ -5389,6 +5547,18 @@ "mdn":"MDN Web Docsは、ウェブ標準及びMozillaプロジェクトの開発文書のためのMozillaの公式ウェブサイトである。以前の名称はMozilla Developer Network。", "metacpan":"CPAN とは、Perlのライブラリ・モジュールやその他のPerlで書かれたソフトウェアを集めた巨大なアーカイブで、世界中のサーバにその内容がミラーリングされている。再利用性・汎用性の高いモジュールが登録されており、Perlプログラマができるだけ車輪の再発明をせずに済むための支援環境となっている。登録モジュールの検索システムも提供されているため、Perlプログラマは望む機能を持ったモジュールを容易に入手することができる。", "naver":"ネイバー は、ネイバー (企業)が運営する、大韓民国(韓国)の最大手ポータルサイトである。", + "naver images":[ + "naver:ja", + "ref" + ], + "naver news":[ + "naver:ja", + "ref" + ], + "naver videos":[ + "naver:ja", + "ref" + ], "nixos wiki":[ "nixos wiki:en", "ref" @@ -5397,7 +5567,7 @@ "openlibrary":"Open Library(オープンライブラリ)とは「これまでに出版された本のウェブページ」を作るためのオンラインプロジェクトである。カリフォルニア州立図書館とケール・オースチン財団による非営利プロジェクト「インターネットアーカイブ」の一環として進められている。", "openstreetmap":"オープンストリートマップ は、自由に利用でき、なおかつ編集機能のある世界地図を作るオープンコラボレーションプロジェクトである。GPS機能を持った携帯機器、空中写真、衛星画像、他の地理情報システムからのデータをもとに作られていくのが基本だが、編集ツール上で道1本から手入力での追加も可能である。与えられた画像とベクトルデータセットはオープンデータベースライセンス (ODbL) 1.0のもと再利用可能である。", "pinterest":"Pinterest(ピンタレスト)とは、アメリカ合衆国カリフォルニア州サンフランシスコに本拠を置くPinterest, Inc.(ピンタレスト社)が運営・管理する写真共有サービス。アプリやウェブサイト方式によって提供され、ピンボード風の画面構成となっている。ユーザーはイベント・関心事・趣味などテーマ別の画像コレクションを作成・管理することができ、また他のユーザーが作成したピンボードを閲覧して自身のコレクションに加えたり、「好み」の写真として画像を「リピン」することもできるという特徴がある。", - "piratebay":"パイレート・ベイ は、デジタルコンテンツのトレントファイルを検索できるインデックスサイトである。2003年に、スウェーデンの反著作権団体Piratbyrånによって設立された。利用者はマグネットリンクおよびトレントファイルの検索、ダウンロード、掲載が可能である。マグネットリンクとトレントファイルは、BitTorrentプロトコルを用いたP2Pファイル共有に使用される。", + "piratebay":"パイレート・ベイ(The Pirate Bay、略称: TPB)は、無料の検索可能なオンラインインデックスで、「映画」「音楽」「ゲーム」「ポルノ」「ソフトウェア」を検索できる。2003年にスウェーデンのシンクタンクPiratbyrånによって設立された。パイレート・ベイではP2Pトレントプロトコルのユーザー間の接続を容易にし、ユーザーはマグネットリンクを追加することでサイトに貢献することができる。パイレート・ベイは一貫して世界で最も訪問されたトレントサイトの一つにランクしている。", "pubmed":"MEDLINE(メドライン)またはMEDLARS Online は、医学を中心とする生命科学の文献情報を収集したオンラインデータベースである。1964年に米国国立医学図書館 が作成したコンピューター化医学文献データベース「MEDLARS」は、1971年10月27日にオンライン検索サービスが開始され、1997年にはPubMedの名でインターネットに無料公開された後、改良が重ねられて成長を続け、2007年現在、月に7000万回程度のアクセスがある世界で最もよく使用される生物医学系データベースである。", "pypi":"Python Package Index は、プログラミング言語Pythonの、サードパーティーソフトウェアリポジトリである。すべてのオープンソースなPythonパッケージの包括的なカタログととらえることができる。 Pipなどのパッケージマネージャは、パッケージやその依存パッケージをPyPIからダウンロードしてインストールする機能を持つ。", "reddit":"Reddit(レディット)はアメリカ合衆国の掲示板型ソーシャルニュースサイト。主に英語圏のユーザーを対象とする。ニュース記事、画像のリンクやテキストを投稿し、コメントを付けることが可能。カリフォルニア州サンフランシスコに拠点を置くReddit, Inc.が運営する。2021年1月時点の月間利用者数は4億3000万人。欧米ではTwitterユーザー数並び利用時間を超える。", @@ -5440,7 +5610,7 @@ "wikidata":"ウィキデータ はウィキメディア財団が提供する共同編集型のデータベース(知識基盤)である。パブリックドメイン・ライセンスの下で、誰もが使用できるオープンデータを提供することを目的としている。ウィキメディア・コモンズがメディアファイルの格納場所を提供して他のウィキメディアプロジェクトがそれを利用する方法と同様に、データに対してこれを行う。ウィキデータはウィキベースソフトウェアを用いて稼働している。", "wikipedia":"ウィキペディア は、世界中のボランティアの共同作業によって執筆及び作成されるフリーの多言語インターネット百科事典。収録されている全ての内容がオープンコンテントで商業広告が存在しないということを特徴とし、主に寄付に依って活動している非営利団体「ウィキメディア財団」が所有・運営している。「ウィキペディア(Wikipedia)」という名前は、ウェブブラウザ上でウェブページを編集することができる「ウィキ(Wiki)」というシステムを使用した「百科事典」 であることに由来する造語である。設立者の1人であるラリー・サンガーにより命名された。", "wikisource":"ウィキソース (Wikisource) は、ウィキメディア財団が運営するウィキを利用した自由に利用できるテキストを集めた電子図書館である。ウィキソースはプロジェクトの名前でもあり、またプロジェクトのインスタンス(実体)である個々のサイト(主に各言語版)もウィキソースと呼ばれ、複数のウィキソースが集まって大きなウィキソースプロジェクトを形成している。ウィキソースの目的はあらゆる形態のフリーテキストを、多数の言語および翻訳においても提供することである。元々は有用または重要な歴史的文書を保存するアーカイブとして着想され、今では幅広いコンテンツを扱うライブラリとなっている。", - "wikispecies":"ウィキスピーシーズ (Wikispecies) は、ウィキメディア財団により運用されているウィキメディア・プロジェクトの一つ。言語別サイトには分かれておらず、コモンズと同じく各ページ内に多言語を併載する。 ウィキペディアやウィクショナリー等と同じく、ウィキベースのオンラインプロジェクトである。 動物界、植物界、菌界、真正細菌(細菌界)、古細菌、原生生物等々、ドメインや界から種や亜種に至るまであらゆる生物の分類の目録をフリーコンテントとして収集している。", + "wikispecies":"ウィキスピーシーズ は、ウィキメディア財団により運用されているウィキメディア・プロジェクトの一つ。言語別サイトには分かれておらず、コモンズと同じく各ページ内に多言語を併載する。ウィキペディアやウィクショナリー等と同じく、ウィキベースのオンラインプロジェクトである。動物界、植物界、菌界、真正細菌(細菌界)、古細菌、原生生物等々、ドメインや界から種や亜種に至るまであらゆる生物の分類の目録をフリーコンテントとして収集している。", "wiktionary":"ウィクショナリー (Wiktionary) は、コピーレフトなライセンス・オープンコンテントの辞書兼シソーラス(類語辞典)を作成し、配布することを目的としたウィキメディア財団によるプロジェクトである。GNU Free Documentation License (GFDL) およびクリエイティブ・コモンズ 表示 - 継承 3.0 非移植 のデュアルライセンスで公開される。2002年12月12日に活動を開始した。", "wolframalpha":"Wolfram Alpha(WolframAlphaともWolfram|Alphaとも表記される)は、ウルフラム・リサーチが開発した質問応答システム。事実についての質問に対して、構造化されたデータを使って計算し、直接答えを返すオンラインサービスである。他の検索エンジンのように、答えを含んでいる可能性のあるドキュメントやウェブページのリストを返すわけではない。このサービスは2009年3月に英国人科学者スティーブン・ウルフラムが発表し、同年5月15日に公開された。また、2018年6月18日には日本語版のWolfram Alphaも公開された。2022年時点では日本語に対応しているのは数学関連のクエリのみであるが、「5個のボールの並べ方は何通りあるか」「ニュートン法を使ってxcos x=0 を解く」などの質問に対して日本語で答えることができる。", "yacy":"YaCy(ヤシー、ヤスィー)とは、「人民による人民のためのウェブ検索」を標語する、オープンソースの分散型検索エンジンである。GPLv2でライセンスされている。YaCyのコアはJavaによって記述されており、ネットワークはピア・ツー・ピア (P2P)で構築されている。", @@ -5451,7 +5621,8 @@ "youtube":[ "YouTube でお気に入りの動画や音楽を楽しみ、オリジナルのコンテンツをアップロードして友だちや家族、世界中の人たちと共有しましょう。", "https://www.youtube.com/" - ] + ], + "z-library":"Z-Library は、シャドウライブラリプロジェクトであり、ファイル共有を通じて学術雑誌の記事、学術書、一般向け書籍へのアクセスを提供している。当初はLibrary Genesisのミラーサイトとして始まったが、その後劇的に広まった。" }, "ko":{ "9gag":"9GAG는 홍콩의 이미지 기반 소셜 미디어 사이트이다. 2011년 12월 기준 월 페이지뷰가 10억 건을 넘었다. 인터넷에 유행하는 이미지가 주로 올라오는 것으로 알려져 있다. 레딧과 같은 다른 비슷한 사이트와 마찬가지로 게시글에 덧글과 추천을 할 수 있다.", @@ -5600,7 +5771,19 @@ "mullvadleta:ko", "ref" ], - "naver":"네이버(영어: NAVER)는 1999년 6월에 출시된 대한민국의 포털사이트이다. 또한 네이버는 1997년 2월 26일 이해진, 권혁일, 김보경, 구창진, 오승환, 최재영, 강석호 등으로 구성된 삼성SDS의 사내 벤처에서 '웹글라이더'라는 이름으로 시작해서 1998년 1월에 분리된 네이버컴 주식회사에서 운영하다가 2000년 자회사인 한게임과 합병하여 NHN이 된 후 재분리하여 현재는 네이버(주)에서 운영하고 있다.(검색창;네이버)", + "naver":"네이버(영어: NAVER)는 1999년 6월에 출시된 대한민국의 포털사이트이다. 또한 네이버는 1997년 2월 26일 이해진, 권혁일, 김보경, 구창진, 오승환, 최재영, 강석호 등으로 구성된 삼성SDS의 사내 벤처에서 '웹글라이더'라는 이름으로 시작해서 1998년 1월에 분리된 네이버컴 주식회사에서 운영하다가 2000년 자회사인 한게임과 합병하여 NHN이 된 후 재분리하여 현재는 네이버(주)에서 운영하고 있다.(검색창;네이버) 네이버가 사실 삼성전자 이랑 합병하려고 했으나 실패했다", + "naver images":[ + "naver:ko", + "ref" + ], + "naver news":[ + "naver:ko", + "ref" + ], + "naver videos":[ + "naver:ko", + "ref" + ], "niconico":"니코니코 동화(일본어: ニコニコ動画 니코니코 도가[*], 영어: Niconico)는 일본의 동영상 사이트이다. 가도카와 디완고에서 운영하고 있다. 줄여서 니코동이나 니코니코로도 칭하며, 동영상 시청자가 직접 영상 화면에 코멘트를 삽입할 수 있다는 것이 큰 특징이다. 니코니코 동화 모바일 서비스를 운영하여, 일본에서는 모바일로도 사이트에 접속할 수 있다. 니코니코(にこにこ, ニコニコ)는 일본어로 \"싱글벙글\" 또는 \"생글생글\"을, 동화(動畵)는 이야기가 아닌 \"동영상\"을 뜻한다.", "nixos wiki":[ "nixos wiki:en", @@ -5631,7 +5814,7 @@ "ref" ], "reddit":"레딧(Reddit)은 미국의 소셜 뉴스 집계, 콘텐츠 등급 및 토론 웹사이트이다. 등록된 사용자(일반적으로 \"레디터\"라고 함)는 링크, 텍스트 게시물, 이미지, 동영상 등의 콘텐츠를 사이트에 제출한 후 다른 회원에 의해 투표된다. 게시물은 주제별로 \"커뮤니티\" 또는 \"서브레딧\"이라고 불리는 사용자가 만든 게시판으로 구성된다. 더 많은 업보트가 있는 제출물은 하위 레딧의 맨 위에 표시되며, 충분한 업보트를 받은 경우 최종적으로 사이트의 첫 페이지에 표시된다. 레딧 관리자는 커뮤니티를 관리하며 중재는 레딧 직원이 아닌 커뮤니티별 중재자에 의해 수행된다.", - "reuters":"로이터(Reuters)는 통신사의 하나다. 독일인 파울 율리우스 로이터(Paul Julius Baron von Reuter)가 설립한 영국의 뉴스 및 정보제공기업이다. 현재는 신문, 방송 등에 뉴스를 공급하는 전통적인 통신사의 기능보다 증시 시황 속보 등 금융정보 제공 등의 비중이 커져 있다.", + "reuters":"로이터(Reuters)는 통신사의 하나로, 독일인 파울 율리우스 로이터(Paul Julius Baron von Reuter)가 설립한 영국의 뉴스 및 정보제공기업이다. 현재는 신문, 방송 등에 뉴스를 공급하는 전통적인 통신사의 기능보다는, 오히려 경제 증시 시황 속보 등 금융 정보 제공 등의 비중이 커져 있다.", "rottentomatoes":"로튼 토마토(Rotten Tomatoes)는 영화 관련 웹사이트 가운데 하나이다. 영화에 대한 소식, 비평, 정보 등을 제공한다. 주로 비평가 위주의 평점을 매기는 곳이다. 사이트 이름은 옛날 공연을 보던 관객들이 연기력이 매우 나쁜 연기자들에게 토마토를 던졌던 것에서 비롯되었다.", "rubygems":"RubyGems는 루비 프로그래밍 언어를 위한 패키지 관리자이다. 루비 프로그램들과 라이브러리들을 배포하기 위한 표준 포맷을 제공한다. 그 외에 gems의 설치를 쉽게 관리하도록 설계된 도구와 이들을 배포하기 위한 서버도 제공한다. RubyConf 2004 기간 중 Chad Fowler, Jim Weirich, David Alan Black, Paul Brannan, Richard Kilmer에 의해 개발되었다.", "rumble":"럼블(Rumble)은 온타리오주 토론토에 본사를 두고 플로리다주 롱보트 키에 미국 본사를 두고 있는 온라인 비디오 플랫폼, 웹 호스팅, 클라우드 서비스 기업이다. 캐나다의 기술 기업가인 크리스 파블롭스키(Chris Pavlovski)가 2013년에 설립했다. 럼블의 클라우드 서비스 사업은 트루스 소셜을 호스팅하며, 비디오 플랫폼은 미국 우익 및 극우 사용자들 사이에서 인기가 있다. 럼블은 \"알트테크\"(alt-tech)로 설명되었다.", @@ -5674,7 +5857,7 @@ "wikinews":"위키뉴스(영어: Wikinews)는 위키미디어 재단의 뉴스 소스이다. 위키뉴스는 GNU 자유 문서 사용 허가서 1.2 이상에 따라 배포되는 위키미디어 재단의 다른 프로젝트와는 달리 크리에이티브 커먼즈의 저작자표시 사용 허가서 2.5 이상의 라이선스를 가진다. 위키뉴스에서 지지하는 중립적 시각 정책은 오마이뉴스와 같은 시민 언론의 노력과는 구별된다. 위키미디어 재단의 대부분의 프로젝트와 달리 위키뉴스는 독자적인 리포트와 인터뷰 형태의 독자적인 기사를 허용한다.", "wikipedia":"위키백과(위키百科, IPA: [ɥikçibɛ̝k̚k͈wa̠], [ykçibɛ̝k̚k͈wa̠] ) 또는 위키피디아(영어: Wikipedia, IPA: [ˌwɪkɪˈpiːdɪə] )는 누구나 자유롭게 쓰는 다언어판 온라인 백과사전이다. 협업을 개방한 위키 기반 편집 시스템을 사용하여 자발적인 위키백과 사용자 공동체가 작성하고 관리한다. 위키백과는 대표적인 집단 지성의 사례로 평가받으며 역사상 최대로 가장 많이 읽는 참고서이기도 하다. 시밀러웹과 (과거) 알렉사 인터넷에서 가장 인기있는 웹사이트 10곳 중 하나로 꾸준히 순위를 올린다. 2024년 1월 기준으로 위키백과는 세계에서 7번째로 인기있는 사이트로 순위를 올렸다. 위키백과는 자유 저작물을 보유하고 상업적인 광고가 없다. 주로 기부금으로 지원을 받는 비영리 단체인 위키미디어 재단이 소유하고 지원한다.", "wikiquote":"위키인용집(Wikiquote)은 위키백과의 자매 프로젝트로, 2004년 7월부터 영어판 위키인용집을 시작으로 여러 언어로 프로젝트가 번역되었다. 이 프로젝트의 목표는 유명한 인물이 한 말이나 책의 문장 등을 인용하고 해석하는 것이니 일종의 어록이라고 할 수 있다.", - "wikisource":"위키문헌(-文獻, 영어: Wikisource)은 위키미디어 재단에서 추진하고 있는 프로젝트이다. 위키문헌 프로젝트의 목표는 모든 사람들이 자유로이 쓸 수 있는 정보자료를 한 곳에 모으는 것이다. 자비 출판 문서나 서적을 올리는 것은 허용되지 않는다.", + "wikisource":"위키문헌(-文獻, 영어: Wikisource)은 위키미디어 재단이 운영하는 자유 콘텐츠 문헌의 온라인 위키 기반 디지털 도서관이다. 위키문헌 프로젝트의 목표는 모든 사람들이 자유로이 쓸 수 있는 정보자료를 한 곳에 모으는 것이다. 자비 출판 문서나 서적을 올리는 것은 허용되지 않는다.", "wikispecies":"위키생물종(Wikispecies 위키스피시즈[*])은 위키미디어 재단의 지원을 받는 생물 분류 도감용 프로젝트이다.", "wikiversity":"위키배움터(영어: Wikiversity 위키버시티[*])는 위키미디어 재단의 프로젝트이다. URL은 www.wikiversity.org이다. 위키버시티는 2006년 8월 15일 영어판이 제일 먼저 시작했으며 새로운 언어판들이 위키배움터 베타에서 시험판으로 생기고 있다. 위키배움터는 모두에게 열린 학습공간을 지향한다.", "wikivoyage":"위키여행(Wikivoyage, 프랑스어 발음: //, 비키부아야주; 영어 발음: //, 위키보이지)은 자발적 참여자가 함께 만들어가는 여행 가이드북 웹사이트이다. 이름은 위키(wiki)와 여행을 뜻하는 프랑스어 부아야주(voyage)를 합쳐 만들었다.", @@ -6118,7 +6301,7 @@ "youtube":"ഗൂഗിൾ ഉടമസ്ഥതയിലുള്ള ഇന്റർനെറ്റ് വീഡിയോ ഷെയറിംഗ് വെബ്‌സൈറ്റാണ്‌ യൂട്യൂബ്. ഈ സംവിധാനത്തിലൂടെ ലോകത്തെവിടെനിന്നും ഉപഭോക്താക്കൾക്ക് വീഡിയോ ഖണ്ഡങ്ങൾ മറ്റുള്ളവരുമായി പങ്കുവയ്ക്കുവാൻ കഴിയുന്നു. 2005 ഫെബ്രുവരിയിൽ പേയ്പാൽ എന്ന ഇ-വ്യാപാര കമ്പനിയിൽ ജോലി ചെയ്തിരുന്ന സ്റ്റീവ് ചെൻ, ചാഡ് ഹർലി, ജാവേദ് കരീം എന്നിവരാണ് യൂട്യൂബ് സ്ഥാപിച്ചത്. കാലിഫോർണിയയിലെ സാൻ ബ്രൂണൊ അസ്ഥാനമാക്കി പ്രവർത്തനമാരംഭിച്ച ഈ വെബ് സേവന കമ്പനി അഡോബ് ഫ്ലാഷ് സാങ്കേതിക വിദ്യ അടിസ്ഥാനമാക്കിയാണു പ്രവർത്തിക്കുന്നത്. വീഡിയോ ഖണ്ഡങ്ങൾ, സംഗീതം, ടെലിവിഷൻ പരിപാടികൾ തുടങ്ങിയവയെല്ലാം ഈ വെബ് സൈറ്റ് വഴി പങ്കുവയ്ക്കപ്പെടുന്നുണ്ട്. യുട്യൂബിൽ അംഗമായാൽ ആർക്കും വീഡിയോകൾ അപ്‌ലോഡ് ചെയ്യാവുന്നതാണ്. ശ്ലീലമായ വീഡിയോകൾ മാത്രമാണ് അനുവദിക്കുക. പുതിയ ഉപഭോക്താക്കൾക്ക് 10 മിനുട്ടിൽ കൂടുതൽ വീഡിയോ കയറ്റാൻ അനുമതി നൽകുന്നില്ല. ഓർക്കുട്ട് പോലെ തന്നെ എല്ലാ രാജ്യങ്ങളിലും യുട്യൂബിനു അനുമതി നൽകിയിട്ടില്ല. ഉപഭോക്താക്കൾക്ക് യൂട്യൂബിൽ നിന്ന് വീഡിയോ ഖണ്ഡങ്ങൾ ഡൗൺലോഡ് ചെയ്യാനും സാധിക്കും.വെബ്‌സൈറ്റ്, മൊബൈൽ അപ്ലിക്കേഷനുകൾ എന്നിവ ഉൾപ്പെടെ വീഡിയോകൾ കാണാനും മറ്റ് വെബ്‌സൈറ്റുകൾ കൂട്ടിച്ചേർക്കാനായി യൂട്യൂബ് നിരവധി മാർഗങ്ങൾ നൽകുന്നു. ലഭ്യമായ ഉള്ളടക്കത്തിൽ സംഗീത വീഡിയോകൾ, വീഡിയോ ക്ലിപ്പുകൾ, ഹ്രസ്വ, ഡോക്യുമെന്ററി ഫിലിമുകൾ, ഓഡിയോ റെക്കോർഡിംഗുകൾ, മൂവി ട്രെയിലറുകൾ, തത്സമയ സ്ട്രീമുകൾ, വീഡിയോ ബ്ലോഗുകൾ എന്നിവ ഉൾപ്പെടുന്നു. മിക്ക ഉള്ളടക്കവും സൃഷ്ടിക്കുന്നത് വ്യക്തികളാണ്, പക്ഷേ മീഡിയ കോർപ്പറേഷനുകളും വീഡിയോകൾ പ്രസിദ്ധീകരിക്കുന്നു. കാണുന്നതിനും അപ്‌ലോഡുചെയ്യുന്നതിനും പുറമെ, രജിസ്റ്റർ ചെയ്ത ഉപയോക്താക്കൾക്ക് വീഡിയോകളിൽ അഭിപ്രായമിടാനും റേറ്റുചെയ്യാനും പ്ലേലിസ്റ്റുകൾ സൃഷ്ടിക്കാനും മറ്റ് ഉപയോക്താക്കൾക്ക് സബ്സ്ക്രൈബ് ചെയ്യാനും കഴിയും. 2005 ൽ സ്ഥാപിതമായ യുട്യൂബ് തൊട്ടടുത്ത വർഷം ഗൂഗിൾ 1.65 ബില്യൺ യുഎസ് ഡോളറിന് സ്വന്തമാക്കി. 2020 ൽ 19.8 ബില്യൺ ഡോളർ സമ്പാദിച്ച യൂട്യൂബ് ഗൂഗിളിന്റെ ഏറ്റവും ലാഭകരമായ അനുബന്ധ സ്ഥാപനങ്ങളിലൊന്നായി ഇത് മാറി. ഗൂഗിളിന്റെ ആഡ്സെൻസ്(AdSense) പ്രോഗ്രാമിൽ നിന്ന് യൂട്യൂബും തിരഞ്ഞെടുത്ത സ്രഷ്‌ടാക്കളും പരസ്യ വരുമാനം നേടുന്നു. ഭൂരിഭാഗം വീഡിയോകളും കാണാൻ സൗജന്യമാണ്, പക്ഷേ ചിലതിന് സംഗീതമോ പ്രീമിയം സബ്സ്ക്രിപ്ഷനോ ആവശ്യമാണ്." }, "ms":{ - "annas archive":"Anna's Archive ialah enjin metasearch perpustakaan bayangan dalam talian percuma yang menyediakan akses kepada pelbagai sumber buku. Laman web ini ditubuhkan oleh pasukan arkivis tanpa nama dan dilancarkan sebagai tindak balas langsung kepada usaha penguatkuasaan undang-undang untuk menutup Z-Library pada November 2022 yang dibantu oleh Persatuan Penerbit dan Persatuan Pengarang.", + "annas archive":"Anna's Archive ialah enjin carian meta perpustakaan bayangan dalam talian percuma yang menyediakan akses kepada pelbagai sumber buku. Laman web ini ditubuhkan oleh pasukan arkivis tanpa nama dan dilancarkan sebagai tindak balas langsung kepada usaha penguatkuasaan undang-undang untuk menutup Z-Library pada November 2022 yang dibantu oleh Persatuan Penerbit dan Persatuan Pengarang.", "apple app store":"App Store adalah platform pengedaran digital, dibangunkan dan diselenggarakan oleh Apple Inc., untuk aplikasi mudah alih pada sistem operasi iOS. Kedai ini membolehkan pengguna melayari dan memuat turun aplikasi yang dibangunkan dengan kit pembangunan perisian iOS Apple. Apl boleh dimuat turun di telefon pintar iPhone, komputer pegang tangan iPod Touch, atau komputer tablet iPad, dan sesetengahnya boleh dipindahkan ke Apple Watchsmartwatch atau generasi ke-4 atau lebih baru Apple TV sebagai sambungan aplikasi iPhone.", "apple maps":"Peta ialah sebuah aplikasi dan perkhidmatan peta dalam talian oleh Apple.", "artic":"Institut Seni Chicago ialah sebuah muzium seni halus luas yang terletak di Grant Park, Chicago, Illinois. Institut seni ini menempatkan salah sebuah koleksi seni Impresionis dan Pasca-Impresionis yang terpenting di dunia. Antara pegangan-pegangannya yang beraneka termasuk karya Pelukis Agung, seni Amerika Syarikat, seni perhiasan Eropah dan Amerika, seni Asia dan seni moden dan kontemporari tersohor. Ia terletak di 111 South Michigan Avenue di Chicago Landmark Historic Michigan Boulevard District. Muzium ini bergabung dengan Sekolah Institut Seni Chicago. Pada keluasan sejuta kaki persegi, institut ini adalah muzium seni kedua terbesar di Amerika Syarikat, mengekori Muzium Seni Metropolitan di New York.", @@ -6223,6 +6406,18 @@ ], "mastodon users":"Mastodon adalah perisian khidmat rangkaian sosial bersumber terbuka dan bebas yang swarumah. Ia memiliki ciri mikroblog mirip infrastruktur Twitter yang ditawarkan oleh sejumlah besar pelayan Mastodon yang dijalankan secara mandiri melalui titik-titik sambung dikelola dengan aturan tatalaku, kawalan edaran kandungan dan ketentuan penggunaan yang tersendiri.", "naver":"Naver ialah platform dalam talian Korea Selatan yang dikendalikan oleh Naver Corporation. Ia dimulakan pada tahun 1999 sebagai portal web pertama di Korea yang membangun dan menggunakan enjin carian sendiri. Ia juga merupakan operator pertama di dunia untuk memperkenalkan ciri carian komprehensif yang mennyusun hasil carian dari pelbagai kategori dan membentangkannya dalam satu halaman. Sejak itu, Naver telah menambahkan banyak perkhidmatan baru dari ciri-ciri asas seperti e-mel dan berita sehingga ke platform Q&A dalam talian pertama yang dikenali sebagai Knowledge iN.", + "naver images":[ + "naver:ms", + "ref" + ], + "naver news":[ + "naver:ms", + "ref" + ], + "naver videos":[ + "naver:ms", + "ref" + ], "nixos wiki":[ "nixos wiki:en", "ref" @@ -7382,6 +7577,18 @@ "ref" ], "naver":"Naver – popularny południowokoreański serwis internetowy będący własnością Naver Corporation. Został uruchomiony w czerwcu 1999 roku przez byłych pracowników Samsunga. Zadebiutował jako pierwszy południowokoreański serwis wykorzystujący autorskie algorytmy przeszukiwania. Posiadał co najmniej 70% udziałów na koreańskim rynku w 2011 roku.", + "naver images":[ + "naver:pl", + "ref" + ], + "naver news":[ + "naver:pl", + "ref" + ], + "naver videos":[ + "naver:pl", + "ref" + ], "niconico":"Niconico , dawniej Nico Nico Douga lub w skrócie „Nico-dō” – japoński serwis internetowy umożliwiający udostępnianie filmów, zarządzany przez Niwango, filię Dwango. „Niconico” jest onomatopeją uśmiechu. Do 18 kwietnia 2012 roku platforma Niconico była czternastym najczęściej odwiedzanym serwisem internetowym. Strona zdobyła japońską nagrodę Good Design Award w 2007 roku i Honorary Mention w kategorii Digital Communities podczas Prix Ars Electronica w 2008 roku.", "npm":"npm – domyślny manager pakietów dla środowiska Node.js, może być także używany do zarządzania warstwą front-end aplikacji WWW. NPM to także repozytorium pakietów oraz nazwa firmy która nim zarządza. Istnieją także inne managery pakietów, które korzystają z repozytorium npm., np. Yarn.", "openlibrary":"Open Library – projekt online mający na celu stworzenie „one web page for every book ever published” [jedną stronę internetową dla każdej opublikowanej książki], z danymi o książkach na licencji CC0, oraz o kodzie źródłowym na licencji AGPLv3. Stworzony przez Aarona Swartza, Brewstera Kahle’a, Alexisa Rossiego, Ananda Chitipothu, oraz Rebeccę Hargrave Malamud, jest projektem Internet Archive, organizacji non-profit. Został częściowo sfinansowany z dotacji Biblioteki Stanowej Kalifornii i Fundacji Kahle/Austin. Open Library udostępnia cyfrowe kopie online w wielu formatach, utworzone z obrazów wielu książek należących do domeny publicznej, o wyczerpanym nakładzie, oraz te w druku.", @@ -7508,14 +7715,14 @@ ], "btdigg":"O BTDigg é o primeiro mecanismo de pesquisa BitTorrent DHT. Ele participou da rede BitTorrent DHT, suportando a rede e fazendo correspondência entre links magnéticos e alguns atributos de torrent que são indexados e inseridos em um banco de dados. Para usuários finais, o BTDigg fornece uma pesquisa de banco de dados em texto completo via interface da web. A web part de seu sistema de pesquisa recuperou informações adequadas por meio de uma consulta de texto do usuário. A pesquisa na Web suportava consultas nos idiomas europeu e asiático. O nome do projeto era um acrônimo de BitTorrent Digger. Ficou offline em junho de 2016, devido a um índice de spam. O site retornou no final de 2016 em um domínio pontocom, ficou offline novamente e agora está online. O site btdig.com tem a fonte de origem do rastreador de torrents listada no Github, dhtcrawler2.", "crossref":"A Crossref é uma organização sem fins lucrativos de infraestrutura digital aberta voltada à comunidade global de pesquisa acadêmica. É a maior agência de registro de Identificadores Digitais de Objetos da Fundação Internacional DOI. Tem mais de 19.000 membros de mais de 150 países que representam editoras, bibliotecas, instituições de pesquisa e agências de fomento, tendo sido lançado no início de 2000 como um esforço cooperativo entre editoras para permitir links de citação persistentes entre plataformas distintas. Até julho de 2023, a Crossref havia identificado e conectado 150 milhões de registros de metadados para objetos de pesquisa, disponibilizando-os abertamente para reuso sem restrições. Eles intermediam uma média de 1,1 bilhão de resoluções de DOIs todo mês e recebem por volta de 1 bilhão de consultas de metadados todo mês.", - "currency":"DuckDuckGo é um motor de pesquisa sediado em Paoli, Pensilvânia que tem a particularidade de utilizar informações de contribuições colaborativas para melhorar a relevância dos resultados. O motor de pesquisa se define como tendo foco na privacidade ao não registrar as informações dos usuários.", + "currency":"DuckDuckGo é um motor de pesquisa sediado em Paoli, Pensilvânia, do qual tem a particularidade de utilizar informações de contribuições colaborativas para melhorar a relevância dos resultados. Além disso, este motor se define como focado na privacidade dos usuários ao não registrar as suas informações.", "dailymotion":"Dailymotion é uma plataforma de compartilhamento de vídeos fundada em março de 2005 na França. Ela disponibiliza vídeos dos mais variados conteúdos aos seus usuários. É um dos mais acessados do mundo. De acordo com dados fornecidos em novembro de 2006, o serviço recebia cerca de dezesseis milhões de acessos e nove mil vídeos diariamente.", "ddg definitions":[ "currency:pt", "ref" ], "deezer":"Deezer é um serviço de streaming de áudio lançado em 2007. Disponível para usuários de mais de 180 países, a plataforma possui atualmente mais de 90 milhões de músicas, mais de 100 milhões de playlists e mais de 4 milhões de programas de áudio, como podcasts, em seu acervo. É uma empresa de capital fechado, com sede em Paris, e escritórios em Londres, Berlim, Miami, São Paulo e em outros lugares do mundo. Criada em Paris, França, a Deezer possui 16 milhões de usuários ativos mensais, permitindo que os usuários ouçam conteúdo de música de gravadoras incluindo EMI, Sony, Universal Music Group e Warner Music Group.", - "deviantart":"DeviantArt, Inc é uma empresa virtual estadunidense, formando um site que voltado para artistas. Ela permite que iniciantes ou profissionais compartilhem, promovam e interajam por meio de obras de arte digitalizadas, incorporando tanto a fotografia, videografia, literatura, fotomanipulação, arte tradicional, arte clássica e arte contemporânea.", + "deviantart":"DeviantArt, Inc é uma empresa virtual, criada nos Estados Unidos, na forma de um website direcionado para artistas. Ele permite que iniciantes ou profissionais compartilhem, promovam e interajam por meio de obras de arte digitalizadas, incorporando tanto a fotografia, videografia, literatura, foto-manipulação, arte tradicional, arte clássica e arte contemporânea.", "duckduckgo":[ "currency:pt", "ref" @@ -7574,6 +7781,10 @@ "imdb":"IMDb, por extenso Internet Movie Database, é uma base de dados online de informação sobre cinema, TV, música e games, hoje pertencente à Amazon.", "imgur":"Imgur é um servidor de hospedagem de imagem fundado em 2009 por Alan Schaaf. O lema da empresa é \"O lar da hospedagem de imagens mais popular da internet, com auxilio em tempo real por uma comunidade dedicada que comenta, vota e compartilha”.", "ina":"Institut national de l'audiovisuel (Ina) é uma instituição pública francesa, de caráter industrial e comercial, encarregada principalmente do arquivamento de produções audiovisuais. Também é responsável pela produção, edição, cessão de conteúdos audiovisuais e multimídia destinados a todos os públicos, profissionais ou particulares. O Ina é também um centro de formação e pesquisa que visa desenvolver e transmitir conhecimento nas áreas ligadas à produção audiovisual. É associado à Federação Internacional da Indústria Fonográfica - IFPI.", + "ipernity":[ + "A maior comunidade não-comercial de partilha de fotos, vídeos e blogues do mundo - apenas financiada pelas cotas dos membros, sem fins de lucro.", + "https://www.ipernity.com" + ], "iqiyi":"iQIYI, anteriormente Qiyi, é uma plataforma de streaming com sede em Pequim, China, lançada em 22 de abril de 2010.", "kickass":"O KickassTorrents é um site fundado em 2008 que fornece arquivos de torrent e links magnéticos para facilitar a partilha de ficheiros peer-to-peer usando o protocolo BitTorrent. Em novembro de 2014, o KAT tornou-se o site torrent mais visitado no mundo, ultrapassando o The Pirate Bay, segundo o ranking Alexa.", "lemmy comments":[ @@ -7607,6 +7818,18 @@ "https://learn.microsoft.com" ], "naver":"Naver é um popular portal de busca da Coreia do Sul, com um market share superior a 70%, comparado com 2% do Google. O Naver foi lançado em junho de 1999 por ex-funcionários da Samsung, e estreou como o primeiro portal da Coreia do Sul a usar seu próprio motor de busca. Entre os recursos do Naver está a \"Comprehensive Search\", lançada em 2000, que fornece resultados de várias categorias em uma única página. Desde então, tem agregado novos serviços, como a \"Knowledge Search\", lançada em 2002. Ele também oferece serviços de Internet, incluindo um serviço de notícias, um serviço de e-mail, um serviço de busca de teses acadêmicas e um portal para crianças. Em 2005, Naver lançou Happybean, o primeiro portal de doações online do mundo, que permite aos usuários encontrar informações e fazer doações para mais de 20.000 organizações da sociedade civil e de assistência social.", + "naver images":[ + "naver:pt", + "ref" + ], + "naver news":[ + "naver:pt", + "ref" + ], + "naver videos":[ + "naver:pt", + "ref" + ], "niconico":"Niconico é um serviço de armazenamento de vídeo japonês online. \"Niconico\" ou \"nikoniko\" é uma palavra japonesa para sorriso. Até setembro de 2015, Niconico era o 10.º sítio eletrônico mais visitado do Japão, de acordo com os rankings de tráfego do Alexa. O sítio venceu o Prêmio Good Design Japonês em 2007 e recebeu uma Menção Honrosa na categoria Comunidades Digitais na Prix Ars Electronica 2008.", "nixos wiki":[ "nixos wiki:en", @@ -7999,6 +8222,18 @@ "naver:pt", "ref" ], + "naver images":[ + "naver:pt", + "ref" + ], + "naver news":[ + "naver:pt", + "ref" + ], + "naver videos":[ + "naver:pt", + "ref" + ], "niconico":[ "niconico:pt", "ref" @@ -8512,6 +8747,18 @@ "ref" ], "naver":"Naver — крупнейший интернет-портал и самая популярная поисковая система в Южной Корее. На него приходится 70 % поисковых запросов в стране. Принадлежит компании Naver Corporation. Был открыт в 1999 году. Тогда Naver первым из корейских интернет-порталов разработал свою собственную поисковую систему.", + "naver images":[ + "naver:ru", + "ref" + ], + "naver news":[ + "naver:ru", + "ref" + ], + "naver videos":[ + "naver:ru", + "ref" + ], "niconico":"Nico Nico Douga (яп. ニコニコ動画 Нико Нико До:га) или niconico — японский видеохостинг. Основан в 2006 году. Одна из особенностей дизайна – всплывающие комментарии с таймкодом. Также зрители могут маркировать видеофайл тегами, классифицируя его содержимое. Регистрация не является обязательной для просмотра и поиска видео.", "nixos wiki":[ "NixOS Wiki — NixOS Wiki", @@ -8545,7 +8792,7 @@ ], "reddit":"Reddit — сайт, сочетающий черты социальной сети и форума, на котором зарегистрированные пользователи могут размещать ссылки на какую-либо понравившуюся информацию в интернете и обсуждать её. Как и многие другие подобные сайты, Reddit поддерживает систему голосования за понравившиеся сообщения — наиболее популярные из них оказываются на заглавной странице сайта. Один из наиболее популярных сайтов в мире — 20-е место по посещаемости по данным SimilarWeb.", "reuters":"«Рейтер» — одно из крупнейших в мире международных агентств новостей и финансовой информации, существует с 1851 года.", - "rottentomatoes":"Rotten Tomatoes — сайт-агрегатор рецензий, на котором собирают обзоры фильмов и сериалов из различных изданий, информацию о фильмах и новости кинематографа. На основе отзывов, оставленных критиками в СМИ, Rotten Tomatoes вычисляет рейтинг одобрения каждого фильма.", + "rottentomatoes":"Rotten Tomatoes — сайт-агрегатор рецензий, на котором собирают обзоры фильмов и сериалов из различных изданий, информацию о фильмах и новости кинематографа. На основе отзывов, оставленных критиками в СМИ, Rotten Tomatoes вычисляет рейтинг одобрения каждого фильма. Данные Rotten Tomatoes и его главного конкурента Metacritic часто используют как способ измерить качество фильма или его успех у профессиональных критиков.", "rubygems":"RubyGems (от англ. gem, gems— драгоценный камень) — система управления пакетами для языка программирования Руби, которая предоставляет стандартный формат для программ и библиотек Руби, инструменты, предназначенные для простого управления установкой «gems», и сервер для их распространения.", "rumble":"Rumble — канадский видеохостинг и облачная система хранения, имеющий штаб-квартиры в канадском Торонто и Лонгбот-Ки. Основан в октябре 2013 года канадским предпринимателем Крисом Павловски.", "semantic scholar":"Semantic Scholar (англ. Semantic Scholar — поисковая интернет-платформа, разработанная в Институте искусственного интеллекта Аллена. Проект был запущен в 2015 году. Поиск научных публикаций производится с поддержкой искусственного интеллекта для статей в научных журналах. Поисковый сервис комбинирует машинное обучение, обработку естественного языка и машинного зрения, чтобы добавить слой семантического анализа к традиционным методам анализа цитирования. Semantic Scholar выделяет наиболее важные статьи, а также связи между ними.", @@ -8853,7 +9100,7 @@ "wikivoyage":"Wikicesty je webový cestovateľský sprievodca pre turistické destinácie a cestovateľské témy písaný dobrovoľníkmi. Ide o sesterský projekt Wikipédie a spravuje ho Nadácia Wikimedia.", "wiktionary":"Wikislovník je mnohojazyčný a otvorený webový projekt určený na vytvorenie slobodného úplného slovníka vo všetkých prirodzených jazykoch a niekoľkých umelých. Jeho heslá môžu obsahovať definície, výslovnosť, skloňovanie, príklady použitia, podobné výrazy, obrázky na ilustráciu a ďalšie možnosti. Stránka je spoločne upravovaná cez wiki a jej názov vznikol spojením slov wiki a slovník. Rovnako ako jeho sesterské projekty, akou napríklad Wikipédia, je prevádzkovaný Wikimedia Foundation a písaný dobrovoľníkmi, ktorí sa volajú Wikislovníkári. Je dostupný v 171 jazykoch a jednej jazykovej verzii pre jednoduchú angličtinu. Jeho slovenská mutácia dosiahla dňa 18. januára 2019 25 000 hesiel. Vďaka softvéru MediaWiki môže skoro každý s prístupom na internet vytvárať a upravovať heslá.", "wolframalpha":"Wolfram Alpha je internetová služba slúžiaca k vyhľadávaniu a znázorneniu informácií prevažne súvisiacich s matematikou a súvisiacimi vedeckými oblasťami. Služba bola vyvinutá spoločnosťou Wolfram Research a je založená na softvéri Mathematica. Služba bola spustená v máji 2009 Stephenom Wolframom. V roku 2009 bola vyhlásená americkým magazínom Popular Science ako najväčšia počítačová inovácia roku.", - "youtube":"YouTube je internetová databáza videí, väčšinou krátkych. YouTube založil Chad Hurley v roku 2005 a v novembri 2006 ho kúpil Google. V súčasnosti ide o najväčší svetový systém na zdieľanie video súborov na internete." + "youtube":"YouTube je internetová databáza videí, väčšinou krátkych. YouTube založil Chad Hurley v roku 2005 a v novembri 2006 ho odkúpila spoločnosť Google. V súčasnosti ide o najväčší svetový systém na zdieľanie video súborov na internete." }, "sl":{ "acfun":[ @@ -8974,6 +9221,10 @@ "github":"GitHub je spletni gostiteljski servis za repozitorije v Git. Ponuja distribuirano upravljanje z izvorno kodo (SCM) z Git ter nekatere dodatne storitve. V nasprotju z Git-om, ki je ukazno orodje, ponuja GitHub spletni grafični vmesnik. Zagotavlja tudi kontrolo dostopa in številne storitve za kolaborativni razvoj, npr. sledenje napakam, zahteve za lastnosti, upravljanje z nalogami in wiki za vsak projekt.", "goodreads":"Goodreads je spletna stran, ki omogoča uporabnikom iskanje knjig za branje in izdelavo lastnih seznamov, baz, kritik ter citatov. Prijavljenim uporabnikom je omogočeno ustvarjanje interesnih skupin, blogov, anket, diskusijskih baz in podobno, v bazo pa lahko vpisujejo tudi nove knjige. Sedež podjetja je v San Franciscu, njegov trenutni lastnik pa je Amazon.", "google":"Iskanje Google ali pa preprosto Google je spletni iskalnik, ki ga je razvilo podjetje Google. Je najbolj uporabljen iskalnik na svetovnem spletu, ki poskrbi za več kot tri milijarde iskanj vsak dan. Od Februarja 2016 je najbolj uporabljen iskalnik v ZDA s 64.0% tržnim deležem.", + "google images":[ + "Google Slike. Najobsežnejše iskanje slik v spletu.", + "https://images.google.com" + ], "google news":[ "agregator novic in aplikacija, ki jo je razvilo podjetje Google", "wikidata" @@ -9018,6 +9269,18 @@ "južnokorejski iskalnik in spletni portal", "wikidata" ], + "naver images":[ + "naver:sl", + "ref" + ], + "naver news":[ + "naver:sl", + "ref" + ], + "naver videos":[ + "naver:sl", + "ref" + ], "niconico":[ "japonski ponudnik gostovanja videoposnetkov in živih prenosov", "wikidata" @@ -9163,6 +9426,10 @@ "gitlab":"GitLab је веб-алатка животног циклуса DevOps с отвореним изворним кодом. Алатка пружа менаџер спремишта за Git који нуди функције викија, функцију праћења проблема и канал за непрекидну интеграцију. Софтвер је развила компанија GitLab Inc., а првобитно су га направили Украјинци Дмитриј Запорожец и Валериј Сизов.", "goodreads":"Гудридс је компанија у власништву Амазона, чији веб-сајт омогућава корисницима да обележавају, оцењују и пишу рецензије за књиге које су прочитали, да би на основу тога од стране веб-сајта могли да добију предлоге за књиге које би такође могле да их интересују. Сајт је покренут 2007. године и данас има преко 900.000.000 наслова, и око 30.000.000 чланова. Такође веб-сајт функционише и као друштвена мрежа, и могуће је додавати пријатеље, као и видети књиге које они читају. Повремено се и организују такмичања, као и награде за најбољу књигу године. Један интернет портал из Хрватске је веб-сајт Goodreads описао као „друштвену мрежу за љубитеље књига”.", "google":"Гугл претрага, позната и као Гугл веб-претрага или једноставно Гугл, веб-претраживач је ког је развио Гугл ЛЛЦ. Он је најкоришћенији претраживач веба на светској комуникационој мрежи на свим платформама, са тржишним уделом од 92,74 % у октобру 2018, вршећи више од 3,5 милијарди претрага сваки дан.", + "google images":[ + "Google слике. Најопсежнија претрага слика на вебу.", + "https://images.google.com" + ], "google news":[ "Свеобухватно, ажурно извештавање о вестима које Google вести прикупља из извора широм света.", "https://news.google.com" @@ -9492,8 +9759,8 @@ "Google Images. வலையில் கிடைக்கக்கூடிய மிக விரிவான படத் தேடல்.", "https://images.google.com" ], - "google news":"கூகிள் செய்திகள், கூகிள் நிறுவனத்தால் வழங்கப்படும் இலவச செய்தி திரட்டி ஆகும். ஒரு தானியங்கி திரட்டல் வழிமுறை மூலம் ஆயிரக்கணக்கான பிரசுரங்களின் சமீபத்திய செய்திகளை இது தேர்ந்தெடுக்கிறது.", - "google play apps":"கூகுள்பிளே என்பது இலக்கமுறை தகவல்களை வழங்கும் ஒரு சேவையாகும். இது கூகிள் நிறுவனத்தால் வழங்கப்படுகிறது. இது ஆன்டிராய்டு பயன்பாடுகள், இசைக்கோப்புகள், புத்தகங்கள், திரைப்படங்கள், விளையாட்டுகள் போன்றவற்றை கொண்ட ஓர் இணையக் கடை ஆகும். மார்ச் 2012ல் கூகுள்தனது ஆன்டிராய்டு அங்காடியையும், இசைச் சேவையையும் இணைத்து கூகுள்பிளேவை ஆரம்பித்தது. 2017 ஆம் ஆண்டு புள்ளிவிவரப்படி, 35 இலட்சம் பதிவிறக்கங்கள், இத்தளத்தில் நடந்துள்ளன.", + "google news":"கூகிள் செய்திகள், கூகிள் நிறுவனத்தால் வழங்கப்படும் இலவச செய்தி திரட்டி ஆகும். ஒரு தானியங்கி திரட்டல் வழிமுறை மூலம் ஆயிரக்கணக்கான பிரசுரங்களின் அண்மைய செய்திகளை இது தேர்ந்தெடுக்கிறது.", + "google play apps":"கூகுள்பிளே என்பது இலக்கமுறை தகவல்களை வழங்கும் ஒரு சேவையாகும். இது கூகிள் நிறுவனத்தால் வழங்கப்படுகிறது. இது ஆன்டிராய்டு பயன்பாடுகள், இசைக்கோப்புகள், புத்தகங்கள், திரைப்படங்கள், விளையாட்டுகள் போன்றவற்றை கொண்ட ஓர் இணையக் கடை ஆகும். மார்ச் 2012ல் கூகுள் தனது ஆன்டிராய்டு அங்காடியையும், இசைச் சேவையையும் இணைத்து கூகுள்பிளேவை ஆரம்பித்தது. 2017 ஆம் ஆண்டு புள்ளிவிவரப்படி, இத்தளத்தில் 35 இலட்சம் பதிவிறக்கங்கள் நடந்துள்ளன.", "google play movies":[ "google play apps:ta", "ref" @@ -9531,7 +9798,7 @@ ], "wikidata":"விக்கித்தரவு (Wikidata) என்பது விக்கிமீடியா நிறுவனத்தால் இயக்கப்படும் பன்மொழி விக்கி அறிவுத் தளம் ஆகும். விக்கிப்பீடியா போன்ற விக்கிமீடியத் திட்டங்களில் பயன்படுத்துவதற்கான தரவுகளை வழங்கும் பொதுமூலமாக இது தொழிற்படுகின்றது. விக்கிபேசு என்ற மென்பொருளில் இது கட்டமைக்கப்பட்டுள்ளது.", "wikinews":"விக்கிசெய்தி, விக்கிமீடியா நிறுவனத்திரால் நடத்தப்படும் கட்டற்ற செய்திக் களமாகும். இது உலகளாவிய தன்னார்வலர்கள் தாமாகவே செய்திகளை உடனுக்குடன் மேலேற்றம் செய்யும் முறையாகும்.", - "wikipedia":"விக்கிப்பீடியா என்பது, வணிக நோக்கற்ற விக்கிமீடியா நிறுவனத்தின் உதவியுடன் நடத்தப்படும், கூட்டாகத் தொகுக்கப்படும், பன்மொழி, கட்டற்ற இணையக் கலைக்களஞ்சியமாகும். தமிழ் விக்கிப்பீடியாவின் 1,73,614 கட்டுரைகளுடன் சேர்த்து இதன் மொத்தக் கட்டுரைகளான 24 மில்லியன் கட்டுரைகளும் உலகெங்கிலுமுள்ள தன்னார்வலர்களால் கூட்டாக எழுதப்படுகின்றன. பெரும்பாலும் இதன் எல்லாக் கட்டுரைகளும், இதனைப் பயன்படுத்தும் எவராலும், தொகுக்கப்படக் கூடுவன. மேலும் இது கிட்டத்தட்ட 100,000 முனைப்பான பங்களிப்பாளர்களையும் கொண்டுள்ளது. ஏப்ரல் 2025 வரையில், விக்கிப்பீடியா 285 மொழிகளில் செயற்படுகிறது. இது இணையத்தளத்தில் இயங்கும் உசாத்துணைப் பகுதிகளிலேயே மிகவும் பெரியதும், அதிகப் புகழ்பெற்றதுமாகும். மேலும், இது அலெக்சா இணையத்தளத்தில் காணப்படும் இணையத்தளங்களின் தரவரிசையில் ஆறாவது இடத்தில் உள்ளதோடு, உலகளவில் அண்ணளவாக 365 மில்லியன் வாசகர்களையும் கொண்டுள்ளது.", + "wikipedia":"விக்கிப்பீடியா என்பது, வணிக நோக்கற்ற விக்கிமீடியா நிறுவனத்தின் உதவியுடன் நடத்தப்படும், கூட்டாகத் தொகுக்கப்படும், பன்மொழி, கட்டற்ற இணையக் கலைக்களஞ்சியமாகும். தமிழ் விக்கிப்பீடியாவின் 1,74,023 கட்டுரைகளுடன் சேர்த்து இதன் மொத்தக் கட்டுரைகளான 24 மில்லியன் கட்டுரைகளும் உலகெங்கிலுமுள்ள தன்னார்வலர்களால் கூட்டாக எழுதப்படுகின்றன. பெரும்பாலும் இதன் எல்லாக் கட்டுரைகளும், இதனைப் பயன்படுத்தும் எவராலும், தொகுக்கப்படக் கூடுவன. மேலும் இது கிட்டத்தட்ட 100,000 முனைப்பான பங்களிப்பாளர்களையும் கொண்டுள்ளது. மே 2025 வரையில், விக்கிப்பீடியா 285 மொழிகளில் செயற்படுகிறது. இது இணையத்தளத்தில் இயங்கும் உசாத்துணைப் பகுதிகளிலேயே மிகவும் பெரியதும், அதிகப் புகழ்பெற்றதுமாகும். மேலும், இது அலெக்சா இணையத்தளத்தில் காணப்படும் இணையத்தளங்களின் தரவரிசையில் ஆறாவது இடத்தில் உள்ளதோடு, உலகளவில் அண்ணளவாக 365 மில்லியன் வாசகர்களையும் கொண்டுள்ளது.", "wikiquote":"விக்கி மேற்கோள் (Wikiquote), விக்கிப்பீடியாவை நடத்தும் விக்கிமீடியா நிறுவனத்தின் இன்னொரு திட்டமாகும். இத்திட்டமும் விக்கி மென்பொருளை பயன்படுத்துகிறது. அனைத்து மொழிகளில் உள்ள மேற்கோள்களின் கட்டற்ற இணையத் தொகுப்பை உருவாக்குவது இத்திட்டத்தின் நோக்கமாகும். மேலும் இது புகழ்பெற்ற மக்கள், திரைப்படங்கள், புத்தகங்கள் மற்றும் பழமொழி ஆகியவற்றின் மேற்கோள்களை உள்ளடக்கிய ஒரு மேற்கோள் களஞ்சியமாகும்.", "wikisource":"விக்கிமூலம் (Wikisource) ஓர் இலவச இணைய நூலகம் ஆகும். விக்கிமீடியா அறக்கட்டளை நடத்தும் விக்கித் திட்டங்களுள் இதுவும் ஒன்று. இது கட்டற்ற உள்ளடக்கம் (பகிர்வுரிமம்) கொண்ட மூல நூல்களின் இணையத் தொகுப்பாகும்.", "wikispecies":"விக்கியினங்கள் விக்கி‎யை அடிப்படையாகக் கொண்ட விக்கிமீடியா நிறுவனத்தின் ஒரு இணையத் திட்டமாகும். இத்திட்டம் உலகிலுள்ள உயிரினங்களின் பெயர் அட்டவணையை தயாரிப்பதற்காக ஆகத்து 2004ம் வருடம் உருவாக்கப்பட்ட திட்டம் ஆகும்.", @@ -9754,7 +10021,7 @@ ], "openstreetmap":"โอเพินสตรีตแมป เป็นโครงการความร่วมมือเพื่อสร้างแผนที่เสรีที่แก้ไขได้ของโลก", "pinterest":"พินเทอเรสต์ เป็นบริการการแบ่งปันรูปภาพและบริการโซเชียลมีเดียที่ออกแบบมาเพื่อเปิดใช้งานการบันทึกและค้นหาข้อมูล บนเวิลด์ไวด์เว็บโดยใช้รูปภาพ และในขนาดเล็กกว่า กิฟและวิดีโอ ในรูปแบบของพินบอร์ด เว็บไซต์นี้สร้างโดยเบน ซิลเบอร์แมน, พอล สเกียร์รา และอีวาน ชาร์ป และมีผู้ใช้งานรายเดือน 300 ล้านคนในเดือนสิงหาคม ค.ศ. 2019 บริการนี้ดำเนินการโดยพินเทอเรสต์ อิงค์ ซึ่งตั้งอยู่ในซานฟรานซิสโก", - "piratebay":"เดอะไพเรตเบย์ เป็นเว็บไซต์สัญชาติสวีเดนที่ให้บริการบิตทอร์เรนต์ ซึ่งเปิดให้บริการมาตั้งแต่เดือนพฤศจิกายน พ.ศ. 2546 และกล่าวอ้างว่าเป็น \"เว็บไซต์บิตทอร์เรนต์แทร็กเกอร์ที่ใหญ่ที่สุดในโลก\" ได้รับการจัดอันดับจากอเล็กซา ให้เป็นเว็บไซต์ที่มีผู้เข้าชมมากเป็นอันดับที่ 106 เมื่อวันที่ 15 พฤศจิกายน พ.ศ. 2551 ทางเว็บไซต์ได้ประกาศว่ามีจำนวนผู้ใช้พร้อมกันถึง 25 ล้านเพียร์ และมีจำนวนผู้ใช้ที่ลงทะเบียนเข้าใช้งานทั้งสิ้น 3,500,000 ล้านชื่อ โดยในปัจจุบันเดอะไพเรตเบย์ได้ปิดระบบสมัครสมาชิกและอัปโหลดแบบไร้บัญชีไปแล้วเนึ่องจากมีไฟล์ทอร์เรนต์ที่ฝังไวรัสคอมพิวเตอร์มากเกินไป และในปี พ.ศ. 2565 เดอะไพเรตเบย์มีไฟล์ทอร์เรนต์รวมกันทั้งหมดถึง 6.7 เพตะไบต์ และไฟล์ทอร์เรนต์ที่มีการ Seed อยู่ถึง 2.5 เพตะไบต์", + "piratebay":"เดอะไพเรตเบย์ เป็นดัชนีออนไลน์ที่สามารถค้นหาภาพยนตร์, ดนตรี, วิดีโอเกม, สื่อลามก และซอฟต์แวร์ได้ฟรี ก่อตั้งใน ค.ศ. 2003 โดย think tank ชาวสวีเดน Piratbyrån เดอะไพเรตเบย์อำนวยความสะดวกในการเชื่อมต่อโพรโทคอลทอร์เรนต์เพียร์ทูเพียร์ระหว่างผู้ใช้ที่สามารถมีส่วนสนับสนุนเว็บไซต์ได้ โดยการเพิ่มลิงก์แม่เหล็ก เดอะไพเรตเบย์ได้รับการจัดอันดับให้เป็นหนึ่งในเว็บไซต์ทอร์เรนต์ที่มีผู้เยี่ยมชมมากที่สุดในโลกอย่างต่อเนื่อง", "reddit":"เรดดิต เป็นเว็บรวบรวมข่าวสาร จัดลำดับข้อมูลออนไลน์ และเว็บสนทนาสัญชาติอเมริกัน ผู้ใช้ที่ลงทะเบียนแล้วสามารถโพสต์เนื้อหา เช่น ลิงก์ ข้อความ และรูปภาพ ให้ผู้ใช้อื่น ๆ สามารถโหวตขึ้นหรือลงได้ โพสต์ถูกแบ่งตามหมวดหมู่จัดโดยผู้ใช้ เรียกว่า \"ซับเรดดิต” ซึ่งมีหมวดหมู่หลากหลาย เช่น ข่าวสาร กีฬา หนัง เกม ดนตรี หนังสือ การออกกำลังกาย อาหาร ภาพถ่าย เป็นต้น โพสต์ที่ได้รับโหวตขึ้นมาก ๆ จะมีโอกาสอยู่บนหน้าแรก ๆ ของซับเรดดิตนั้น ๆ และหากได้รับความนิยมมาก ๆ จะสามารถขึ้นไปยังหน้าแรกของเรดดิตในที่สุด แม้จะมีกฎป้องกันการดูหมิ่นออนไลน์อยู่มาก ผู้ดูแลของเรดดิตใช้เวลามากในการดูแลเรดดิต", "reuters":"สำนักข่าวรอยเตอร์ส คือผู้ให้บริการข้อมูลทางการเงินและรายงานข่าวต่าง ๆ ให้แก่สำนักข่าวต่าง ๆ ของโลก สำนักงานใหญ่ตั้งอยู่ที่กรุงลอนดอน ประเทศอังกฤษ โดยรอยเตอร์สได้รับรายได้ส่วนมาก จากการให้บริการข้อมูลทางการเงินต่าง ๆ เช่น ราคาหุ้นในตลาดต่างๆ อัตราแลกเปลี่ยน ราคาน้ำมัน รายงานการวิเคราะห์หลักทรัพย์ เป็นต้น และการให้บริการซื้อขายผ่านอินเทอร์เน็ตต่าง ๆ โดยปัจจุบันนี้รอยเตอร์สมีส่วนแบ่งการตลาดในด้านการบริการข้อมูลทางการเงินมากเป็นอันดับสอง ประมาณร้อยละ 23 รองจาก บลูมเบิร์ก (Bloomberg) ที่ควบคุมส่วนแบ่งการตลาดมากถึงร้อยละ 33", "rottentomatoes":"รอตเทนโทเมโทส์ เป็นเว็บไซต์ที่เปิดตัวในปี 2541 อุทิศให้กับการรบทปริทัศน์ภาพยนตร์และข่าว รู้จักกันอย่างกว้างขวางว่าเป็นผู้รวบรวมบทปริทัศน์ภาพยนตร์ ปัจจุบันครอบคลุมเนื้อหาโทรทัศน์ด้วย ชื่อของรอตเทนโทเมโทส์ นั้น เกิดจากการปฏิบัติที่ผู้ชมจะโยนมะเขือเทศเน่าเมื่อไม่เห็นชอบกับการแสดงเวทีที่เลว บริษัทก่อตั้งขึ้นโดย Senh Duong และตั้งแต่เดือนมกราคม 2553 ได้รับการเป็นเจ้าของโดยฟิลค์สเตอร์ แต่ต่อมาฟิลค์สเตอร์ถูกซื้อต่อกิจการในปี 2554 โดยวอร์เนอร์บราเธอร์ส", @@ -9933,6 +10200,18 @@ "ref" ], "naver":"Naver, Güney Kore merkezli bir arama motoru ve internet portalıdır. Site, Haziran 1999 tarihinde eski Samsung çalışanları tarafından kurulmuş olup Güney Kore'nin kendi arama motoruna sahip ilk internet portalıdır. Günümüzde Naver Corporation bünyesinde faaliyet göstermektedir.", + "naver images":[ + "naver:tr", + "ref" + ], + "naver news":[ + "naver:tr", + "ref" + ], + "naver videos":[ + "naver:tr", + "ref" + ], "niconico":"Niconico, Inc., eskiden Nico Nico Douga , Japonya merkezli bir video barındırma sitesidir. Site, 12 Aralık 2006 tarihinde kurulmuştur. Eylül 2015 tarihi itibarı ile Japonya'da en çok ziyaret edilen sekizinci web sitedir. 2007 yılında site İyi Tasarım Ödülü ve 2008'de Prix Ars Electronica Dijital Topluluklar kategorisinde Onursal Anma kazanmıştır.", "nixos wiki":[ "nixos wiki:en", @@ -10240,6 +10519,18 @@ ], "mixcloud":"Mixcloud онлайн сервіс зі стримінгу музики, який забезпечує прослуховування і розповсюдження радіо-шоу, DJ-міксів і подкастів, які надаються його ж зареєстрованими користувачами.", "naver":"Навіер або Найвер, ориг. Naver від англ. navigate – направляти — найбільший інтернет-портал і найпопулярніша пошукова система в Південній Кореї, що належить корпорації Naver Corporation. Був запущений у червні 1999 року групою колишніх співробітників Samsung. Дебютував в якості першого порталу який використовував свої власні алгоритми пошуку. Займав у 2011 році – 70%, 77% в 2015 р. а в 2017 вже 74,7% пошукового ринку країни.", + "naver images":[ + "naver:uk", + "ref" + ], + "naver news":[ + "naver:uk", + "ref" + ], + "naver videos":[ + "naver:uk", + "ref" + ], "niconico":"Nico Nico Douga або Niconico — японський відеохостинг. Перегляд відеофайлів на сайті потребує реєстрації; перегляд заголовків, описів та пошук — ні. Глядачі можуть залишати коментарі до будь-якого моменту відео і маркувати відеофайл тегами, класифікуючи його вміст. Сайт надає користувачам різні додаткові сервіси [Архівовано 8 серпня 2020 у Wayback Machine.]. Автоматично складаються рейтинги популярності [Архівовано 22 червня 2013 у Wayback Machine.] відео різних жанрів.", "nixos wiki":[ "nixos wiki:ru", @@ -10454,6 +10745,18 @@ "https://learn.microsoft.com" ], "naver":"Naver là một nền tảng trực tuyến của Hàn Quốc được điều hành bởi Naver Corporation. Được ra mắt lần đầu năm 1999, Naver vốn là cổng thông tin điện tử đầu tiên tại Hàn Quốc, sau đó được phát triển thành một công cụ tìm kiếm riêng. Đây cũng là nhà điều hành đầu tiên trên thế giới ra mắt tính năng tìm kiếm toàn diện, tính toán các kết quả tìm kiếm từ nhiều danh mục tìm kiếm khác nhau và trình bày chúng trong một trang duy nhất. Từ đó, Naver cũng đã xây dựng thêm vô số các dịch vụ từ cơ bản như e-mail, tin tức đến nền tảng trực tuyến Q&A đầu tiên trên thế giới Knowledge iN.", + "naver images":[ + "naver:vi", + "ref" + ], + "naver news":[ + "naver:vi", + "ref" + ], + "naver videos":[ + "naver:vi", + "ref" + ], "niconico":"Niconico , trước đây là Nico Nico Douga hay gọi tắt là \"Nico-dō\", là một website chia sẻ video của Nhật Bản được điều hành bởi Dwango, bắt đầu hoạt động từ ngày 12 tháng 12 năm 2006.", "npm":"npm là chương trình quản lý thư viện ngầm định trong môi trường Node.js. Nó bao gồm một trình gọi dòng lệnh (CLI) từ máy khách Client với tên gọi là npm, và cơ sở dữ liệu trực tuyến chứa các gói public và private còn được gọi là npm registry. npm registry được gọi từ npm client và trên web browser. Tất cả được quản lý trực tiếp từ npm, Inc.", "openstreetmap":"OpenStreetMap là một dịch vụ bản đồ thế giới trực tuyến có nội dung mở. OpenStreetMap nhằm mục đích cung cấp dữ liệu địa lý do nhiều người cùng cộng tác với nhau trên hệ thống wiki. Nó thường được gọi \"Wikipedia của bản đồ\". Dự án OpenStreetMap được sáng lập năm 2004, chủ yếu để cạnh tranh với các công ty và cơ quan chính phủ cung cấp dữ liệu địa lý theo các điều khoản sử dụng được coi là quá chặt chẽ.", @@ -10575,6 +10878,18 @@ "mdn":"MDN Web Docs 是一個汇集众多Mozilla基金會產品和網路技術開發文档的免费網站。", "metacpan":"CPAN 中譯為“Perl綜合典藏網”,“Perl综合档案网”或者“Perl程序库”。它包含了極多用Perl寫成的軟體和其文件。", "naver":"NAVER(韓語:)是韩国著名入口/搜索引擎网站,它使用獨有的搜尋引擎,並且在韓文搜尋服務中獨佔鰲頭。除了搜尋之外也提供入口網站的許多服務,例如新聞、電子信箱、電子地圖服務(含街景地圖)等。在Alexa排名上是韓國國內第一大的入口網站。 据ComScore统计,Naver在2007年8月收到二十亿次搜索,占70%以上的韩国搜索查询,它是世界上排名第十五的网民最常用的搜索引擎,超过25万韩国人选择Naver作为浏览器起始页。", + "naver images":[ + "naver:zh-HK", + "ref" + ], + "naver news":[ + "naver:zh-HK", + "ref" + ], + "naver videos":[ + "naver:zh-HK", + "ref" + ], "niconico":"Niconico動畫 是日本多玩國公司營運的在线弹幕视频分享网站。其中「Niconico」()意爲微笑,「動畫」()意爲視頻。Niconico動畫與YouTube等视频共享网站相似,但Niconico動畫提供观看者可在视频画面上留言并以弹幕的形式出現在视频上的功能。", "npm":"npm 是Node.js預設的、用JavaScript編寫的軟體套件管理系統。", "openlibrary":"开放图书馆(英文:)是互联网档案馆旗下的非营利网站暨在线图书馆项目,收录了许多公有领域图书的在线版本,旨在为每一本已出版的图书创建一个网页。本网站由亚伦·斯沃茨、布魯斯特·卡利、Alexis Rossi、Anand Chitipothu和 Rebecca Malamud在2006年创建,其部分资金来自加州州立图书馆與 Kahle/Austin 基金会。", @@ -10813,6 +11128,18 @@ "naver:zh-HK", "ref" ], + "naver images":[ + "naver:zh-HK", + "ref" + ], + "naver news":[ + "naver:zh-HK", + "ref" + ], + "naver videos":[ + "naver:zh-HK", + "ref" + ], "niconico":[ "niconico:zh-HK", "ref" @@ -11111,6 +11438,18 @@ "naver:zh-HK", "ref" ], + "naver images":[ + "naver:zh-HK", + "ref" + ], + "naver news":[ + "naver:zh-HK", + "ref" + ], + "naver videos":[ + "naver:zh-HK", + "ref" + ], "niconico":[ "niconico:zh-HK", "ref" From 9d8592afd71b4ab43be7202082e9679945e8c321 Mon Sep 17 00:00:00 2001 From: searxng-bot Date: Thu, 29 May 2025 00:15:12 +0000 Subject: [PATCH 72/82] [data] update searx.data - update_engine_traits.py --- searx/data/engine_traits.json | 1 - 1 file changed, 1 deletion(-) diff --git a/searx/data/engine_traits.json b/searx/data/engine_traits.json index 6f80992ec..d687d116e 100644 --- a/searx/data/engine_traits.json +++ b/searx/data/engine_traits.json @@ -7381,7 +7381,6 @@ "ko": "korean", "ks": "kashmiri", "ku": "kurdish", - "kw": "cornish", "la": "latin", "lb": "luxembourgish", "ln": "lingala", From b2727e1be934a20b9fd33c50ab87befff0a81c54 Mon Sep 17 00:00:00 2001 From: searxng-bot Date: Thu, 29 May 2025 00:15:00 +0000 Subject: [PATCH 73/82] [data] update searx.data - update_currencies.py --- searx/data/currencies.json | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/searx/data/currencies.json b/searx/data/currencies.json index 09bee0ea0..b0096673d 100644 --- a/searx/data/currencies.json +++ b/searx/data/currencies.json @@ -1428,7 +1428,7 @@ }, "CZK": { "ar": "كرونة تشيكية", - "bg": "крони", + "bg": "Чешка крона", "bn": "চেক কোরুনা", "ca": "corona txeca", "cs": "koruna česká", @@ -2687,7 +2687,7 @@ "uk": "Йорданський динар" }, "JPY": { - "af": "Jen", + "af": "jen", "ar": "ين ياباني", "bg": "японска йена", "bn": "জাপানি ইয়েন", @@ -4329,7 +4329,7 @@ "PLN": { "af": "Złoty", "ar": "زواتي بولندي", - "bg": "Полска злотаПолска злота", + "bg": "Полска злота", "ca": "złoty", "cs": "zlotý", "da": "zloty", @@ -4375,7 +4375,7 @@ "PLZ": { "af": "Złoty", "ar": "زواتي بولندي", - "bg": "Полска злотаПолска злота", + "bg": "Полска злота", "ca": "złoty", "cs": "zlotý", "da": "zloty", @@ -5881,6 +5881,10 @@ "tt": "самоа таласы", "uk": "Самоанська тала" }, + "XAD": { + "en": "Arab accounting dinar", + "fr": "dinar arabe" + }, "XAF": { "ar": "فرنك وسط إفريقي", "bg": "Централноафрикански CFA франк", @@ -6375,6 +6379,7 @@ "$usd": "USD", "1000 lira": "LBP", "100ドル紙幣": "NIO", + "1億ベネズエラ・ボリバル": "VES", "2019 zimbabwean dollar": "ZWL", "5th zimbabwean dollar": "ZWL", "A$": "AUD", @@ -6511,6 +6516,7 @@ "Z$": "ZWL", "ZK": "ZMW", "a$": "AUD", + "aad": "XAD", "abd doları": "USD", "adb unit of account": "XUA", "ae92 0530 0000 1514 1185 002": "AED", @@ -6610,6 +6616,7 @@ "aoa": "AOA", "apvienotās karalistes sterliņu mārciņa": "GBP", "ar": "MGA", + "arab accounting dinar": "XAD", "arabiemiraattien dirhami": "AED", "arany mint befektetés": "XAU", "arg$": "ARS", @@ -7438,6 +7445,7 @@ "dinar algierski": "DZD", "dinar aljazair": "DZD", "dinar alxeriano": "DZD", + "dinar arabe": "XAD", "dinar argelino": "DZD", "dinar bahrain": "BHD", "dinar bahraini": "BHD", @@ -7458,6 +7466,7 @@ "dinar bhairéin": "BHD", "dinar chuáit": "KWD", "dinar coaitiano": "KWD", + "dinar comptable arabe": "XAD", "dinar couaitiano": "KWD", "dinar covaitiano": "KWD", "dinar coveiteano": "KWD", @@ -9162,7 +9171,6 @@ "jordán dinár": "JOD", "jordánsky dinár": "JOD", "jordánský dinár": "JOD", - "jpy": "JPY", "juan": "CNY", "juanis": "CNY", "juaņa": "CNY", @@ -9813,7 +9821,6 @@ "livre de sainte hélène": "SHP", "livre des îles falkland": "FKP", "livre des îles malouines": "FKP", - "livre egyptienne": "EGP", "livre égyptienne": "EGP", "livre libanaise": "LBP", "livre soudanaise": "SDG", @@ -13367,7 +13374,6 @@ ], "крона чеська": "CZK", "крона швеции": "SEK", - "крони": "CZK", "куба писысы": "CUP", "кубански пезос": "CUP", "кубански песо": "CUP", @@ -13645,10 +13651,6 @@ "PLZ", "PLN" ], - "полска злотаполска злота": [ - "PLZ", - "PLN" - ], "польский злотый": [ "PLZ", "PLN" From dbe6a6f4fad096cc324000526ddb927c33046f66 Mon Sep 17 00:00:00 2001 From: searxng-bot Date: Thu, 29 May 2025 00:14:56 +0000 Subject: [PATCH 74/82] [data] update searx.data - update_wikidata_units.py --- searx/data/wikidata_units.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/searx/data/wikidata_units.json b/searx/data/wikidata_units.json index 545f289fa..c9bcad24c 100644 --- a/searx/data/wikidata_units.json +++ b/searx/data/wikidata_units.json @@ -4199,11 +4199,6 @@ "symbol": "St", "to_si_factor": 13450.0 }, - "Q235729": { - "si_name": "Q11574", - "symbol": "y (365 days)", - "to_si_factor": 31536000.0 - }, "Q23823681": { "si_name": "Q25236", "symbol": "TW", From 23396f5a1d2bafd13b86f54b31c2454321655227 Mon Sep 17 00:00:00 2001 From: searxng-bot Date: Thu, 29 May 2025 00:14:55 +0000 Subject: [PATCH 75/82] [data] update searx.data - update_firefox_version.py --- searx/data/useragents.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/searx/data/useragents.json b/searx/data/useragents.json index 6b806e372..95a245560 100644 --- a/searx/data/useragents.json +++ b/searx/data/useragents.json @@ -5,7 +5,7 @@ ], "ua": "Mozilla/5.0 ({os}; rv:{version}) Gecko/20100101 Firefox/{version}", "versions": [ - "138.0", - "137.0" + "139.0", + "138.0" ] } \ No newline at end of file From 7448a18efa1d47ee1424db935ba8463fdf2809b3 Mon Sep 17 00:00:00 2001 From: searxng-bot Date: Thu, 29 May 2025 00:14:56 +0000 Subject: [PATCH 76/82] [data] update searx.data - update_ahmia_blacklist.py --- searx/data/ahmia_blacklist.txt | 208 +++++++++++++++++++++++++++++++++ 1 file changed, 208 insertions(+) diff --git a/searx/data/ahmia_blacklist.txt b/searx/data/ahmia_blacklist.txt index 065bd8208..9a05bdb3f 100644 --- a/searx/data/ahmia_blacklist.txt +++ b/searx/data/ahmia_blacklist.txt @@ -5,6 +5,7 @@ 0005267c3295eeb612e9e7d2d7939970 00068777b8c3937133e788cd84229143 000914d0c175724e20a84518b1cb587a +000bb12a3fa367e1442fc9fada841457 000ca35ba2095b1443968d4b0ff584de 0013a67e08315e293c274799fa865e01 00145453e48c99747fd7bb981cca0798 @@ -435,12 +436,14 @@ 0251da7034024e7f4a38af608d6a2717 0251df6c4de395e40201f49f460af671 0253d36abff6b07a63e76f6936eb225e +02543885df081a208d9983fbc267d127 025511df343ea2bf7451edf96a1177fb 02551fd7b9390cd9d5221052b24d0c81 0256647357d27acb21ed2de48e784065 0259e254c258e7ffdb51c350ef5eaacc 025a6e40958e34e996e4b03698984827 025b8f1a86222f25aa7ea4709499352e +025c49b129b65ad81f2335a3ca9cacba 025cf1341b8dc023045bf0b8c4d2b43c 025e8ceea86b8b6a95ab56a2ef8d5e81 0261003d3d876d9c236ff7d3ddff9744 @@ -485,6 +488,7 @@ 0295234924c5e11f293d34e9d449cba0 0295ea4ab97988b8145ae756937435cc 029778e7a2c43224635d8315151870e5 +029981242bcbea18dc8746f289bf6397 029aad6a569e9e5aaf05ef93c9197784 029b98a25eff95a2c409f317c52bc2a9 029bef519d3fc5e7e471dd61c9356e05 @@ -609,6 +613,7 @@ 034dd3de1aeeb36cbdb9d6d56a62166b 0351e0d2c113dc8dba239f699ec02d4c 0351ee6dc13b41686001cab8ea2488d3 +0353152c49a1da7454dfffbb7e4a3558 0355dfcc33108181db526ac37ef673d8 0355f17a3d208dd1c908faa0f2f9e93f 0356b4e31a9d13be51790c68ba28547d @@ -780,6 +785,7 @@ 0425f1c3459237cd37ca97424493af25 04270668bda73f4609b7ad3ddbfd0d94 04286bf4dedb2dbd9723474c2a1f217b +0428fd6aaea85ee8a8216389517c36bf 0429f459757ae450c312b3f4fda43fe6 042ab4ed0bd703331efdcdbff54a1471 042acd38b594f6a5744edc478ae3c8ad @@ -1373,6 +1379,7 @@ 07424ccf8c8a24c6cbe752e5a9fc3812 07424d3e5933262a691315419a28462e 07451a915f5b043135ee4d013287e09d +074626a19cfc491ae97f85efb520685b 07473e90e994a61931d33cc18ea9dc39 07477bfbd67a71588324c3e9c11b5370 0747e2f11ae1a5dc077649ecfa250b40 @@ -1610,6 +1617,7 @@ 08a2bf6db54af53fd03b461ba95d7eed 08a3e379c63dddab3890e765e8585430 08a44f882721208bfc54745d3f55db31 +08a46a8ce28df914deebd6148fb0be53 08a6cb00a5d07b8524c0e0d512b4dba5 08a72c40624802259b58b551d2cdeacf 08a9d464024c1b94ee99c08a4e1d61d1 @@ -1917,6 +1925,7 @@ 0a6960746b5556b557cf543fa276ba9a 0a6b9ff75963121b22c9b7f42cb1d524 0a6c5fb79e7cf454d23445b391c08180 +0a6c6deec7369397efd80788607a293f 0a6d4b62e1dc10e0e502df8243d7f3ce 0a70a665f5f8a752d5550d7520aee426 0a71a55d452e5f059fc1d1f889b7ee4d @@ -2112,6 +2121,7 @@ 0b7c13df18404beaae998694a0d6d3a2 0b7c21a239b30e670d6d024c4f29bca2 0b7ccdf4688c4992d81fdee8d6e357e7 +0b7dbde24d5f6852987eb1d7bed68a5b 0b7feffaf8d4b91d8c618e5bbe602e92 0b803f83d985858b304f7081c8549562 0b814c2b2b04bfaec204b2df7a82aaa0 @@ -2734,6 +2744,7 @@ 0eddb1ebef0dedf7438c3953cb40c1c3 0ede9f742cc16451ac616b17c401790d 0ee3ca15dc2d3a43d4174beac14f81e7 +0ee451f7de2d185a89d47d785b1f594c 0eea546b46a48211c407062119b05169 0eeb10443f206a77fa8f555f4165a01b 0eedfdcb06271288eb40aa41d163fdff @@ -2772,6 +2783,7 @@ 0f1dddcae4a97d15da0a02eef4b6e8fe 0f1e17031e3fde4d2221c865aad9a3d5 0f1e25b58f84ac6d22b988d78e2cca17 +0f1eb9508491b97ebed0d4be19493fb9 0f2117237746ecd2fb3ca29be246be2e 0f22018b7ea2cb0d3e653a3640223deb 0f2293b7d4bec3f83b96b62ae6f98517 @@ -2887,6 +2899,7 @@ 0fb04b5ab393b4aa64bb512d1e06fc75 0fb085b2eb9474cee43950434f45a5fd 0fb2418a5718cccd73398d1b659385ed +0fb637ac874447d39c08b730bf161158 0fb82f76000499d915b83a1ddef63eb6 0fb8477a52fb18854441f57bc266a012 0fb90f728807750145a7d7b0c9c5a990 @@ -3193,6 +3206,7 @@ 1166dbbadfe2bc6c0ca60028b4ce5d5c 1166f356caf638c8f2dbb3ba21300028 1167501c494d049744db1ebeab2c4996 +11687d357c714ba02785ef68c6702898 11698d424ee245ff6d2d8199f39c00dd 116b97ed2fa6bded481f9b38eedb4505 116dd01f9b14bb5c621a98cb25045202 @@ -3661,6 +3675,7 @@ 13c68806d5bea1144414ff6adf614f8c 13c6dcc3911fd9e80b78cc118ad6a855 13c81d82802fb195d1375a168dba834f +13c8747ba6dbe6b515930a4ab4c5a9f0 13c878f5e10d4cb6a052d7cca21fed5a 13ca196cebca0f84445ca520ef716074 13ca32082fbd23791283ebc0eecc0966 @@ -4146,6 +4161,7 @@ 164ac234e744c62dcb3b5994dab07009 164e7f0642f1c8f9606add19ee3dc0f0 164eb5ec53f7929eb73a605a3fc35e22 +164ff12c6949772c32df9f68d8278a8a 1652309be7e2a093125b0858551ae7e4 16545275331852b182b785574b2bedfa 16545c5182accbd81059ce9e8053ee71 @@ -4167,6 +4183,7 @@ 167654a6325c7ef6c60bdccd896c2a4b 1676a13396a4f78080662dd0419a45c1 1677b760edcf80a0ff07f308ebe300e4 +1678444681936cb3038a17ca6c55a702 1678639220d10cf30df4a1ea5add8a34 1678e345417c9592d26eecac92546a13 1678ea4e5910d7d433d5eab5309a1864 @@ -4251,6 +4268,7 @@ 16eb61044968f29101651e5cc83b52c3 16ed77594af8d590360ceaab1aa9d049 16ed8827f10bedbbfda1d17699242c44 +16ee0d16b5107699b27ecd9251c5ec79 16eeb4f73d22550f42a67b120b754326 16f168ff9bff0b81d12741d2b94fce4a 16f2261b876c60908dfe30d8ca9d4edf @@ -4349,6 +4367,7 @@ 177e15ee9ab07b74af6000ceae0cb2f9 177e4059ed4cd7ae4266634ec00e9c10 177f24f33529cca0708befea74693dc9 +17801eca49afd689dfc40d45f1ca8e16 17803f1148ea883641b9c4e96f4cfcae 1780b44492ed31c5ebbc0994bfcee9ac 1782151c47e1c5b3bad69b5ca952ae33 @@ -5035,6 +5054,7 @@ 1b4697cc86ea66c62f761ee377cd818b 1b4887d9532e2e07bda5ed2a9b9b87f2 1b48cb2da599ad766c7bf0451a85df73 +1b48f4f9b3d10661b9ac610a2f480fc4 1b496d5a1006d4958b92d4976f28481e 1b4a2b8150239956a7961b37ee70d9d4 1b4a63b804f9e556aa7bb7187074e327 @@ -5308,6 +5328,7 @@ 1ca0770673e44d26e1d4ff2a16cc4cbe 1ca153b82f15856669a8277f228d7b84 1ca2f7ad9ac214f45e8ffe8e63fc2754 +1ca40db2e8e0a3dd8c66c0e673cc572e 1ca4f0e7494a7beb445cd6dfe4f3c461 1ca51ea82c5eee246c89677041b5c780 1ca5df78c3297f213655fecfedd3ac3b @@ -6177,6 +6198,7 @@ 217630ce668d5317dbc7a8248337a521 2176e4fb6722df48bef98b27650046e6 217722e245d3502b156db853c73b7b17 +2177d0759ee703908972a1b91b675214 2177e2b99d89bb2509e1d3babd1bf199 21784c5b00966e217057e37443898c5f 21789af6c870a60cbed83e64cf3e5463 @@ -6538,6 +6560,7 @@ 2364e8462945adde9b041e506f24acbd 23655a0f04b06ee4e67d0d95c00148dc 23657ec88157711235f8a9b52351dafe +23694f10047d2bd64a62c7f49eeb71a1 23698e1d9c4ced0c960ccc0c275043f6 236de1c21a89c567837752013eb5ee23 236ea4fcf59a70d632c6547a3d0451d1 @@ -7014,6 +7037,8 @@ 260b137532694cd8a9a87074ddf31ca5 260d4da49476b8edf04d8793f05febd6 260f6d2a0a82bbdfb7f7766454793658 +260fe149214dc8c66232131c41cc263e +261043514ca8fded2b27b490e62d3038 2612167ed24bea70b3c2e8c7a8f1d60a 261245ae37c5901ebb2cedb1fd88af13 2617e6af0f0e30955694a93bc1453f74 @@ -7527,6 +7552,7 @@ 28d25a82c04c5fcc231e980e4f1b8bcb 28d465fa943affe9e4a8d2bfe5e17548 28d610caef84bec33a19c864b4b14bf9 +28d6dc8965d3dc95f54c625eaf75910a 28d6e03376e226a55e4ad9974db0960f 28d79b60fb216c681e608d7a2966dba7 28d93c57421e2bd6d1e001884899bb9f @@ -7538,6 +7564,7 @@ 28e17088fde3dd1d00f0ba208e7b4797 28e2f81c81908c2fecf7d85a6b7ffd3e 28e329d8bda4acc6d4e1266aaf343155 +28e34145a1d57f1d6f48e7d115147cd8 28e3a32b505dff3420decc88103601ed 28e605db574af11481e1a00bbe645ad0 28e6d60cc9d47404fae7b5df9f62b49b @@ -7830,6 +7857,7 @@ 2a667936f25a943fdb96abeef23cd981 2a68802d6d188fa53d98bd03296b4b60 2a6934d1ff6187490781620b5e1f2df2 +2a6b97db8c050130da7ae2803e2fd273 2a6c8463ccc4fec7d6367aa264a6ea5d 2a6da9abe15822278af2d7e087c246fb 2a6f6ee7170dca45ea644e0ab87c28c9 @@ -8106,6 +8134,7 @@ 2bd017e38367f7c6d998af2ef38087fd 2bd38f4e598f978dbfd5b55546f1bb51 2bd4b7f8a68e5f830eb86e7f01d679e3 +2bd5a49af5f420e751b87028ecddff03 2bd5c83d815f543e24e5041c02ae0799 2bdaac06653f5e57848b69416ee4a6e9 2bdd0bb805f7a24f7528077b1319b8fb @@ -8780,6 +8809,7 @@ 2f6f00b04ad16c1a6d80be858101e223 2f7073c4225b9aa7b1c570a6a92328ca 2f70cfaa4f5d55ff4693e94936acc845 +2f718c5f111a9adc639edf4c2ee465a8 2f71f2706524be1bd387bb7d0b6eae86 2f753ede59bb097edfde6f23e69bc373 2f754f53a50c3ce017f407508358798f @@ -8820,6 +8850,7 @@ 2faa7393187509976167b601abf59986 2faa8f74216aa7c7a3bbab7585ad06e6 2faaa4cb4fd6bd622e037f0fd08fd288 +2fab984ea26758fdda39759469e98bbc 2fac5bad535410943b367dc515bc8dab 2facea7bc3a70adcde954f3a92b46b39 2faddb1bbfecefba6f0262bce5043e07 @@ -8886,6 +8917,7 @@ 2ff1d0043715903d5bf500a346580f96 2ff1e62a192ff56015af810b29064a07 2ff3d45207511f4933f5edf61a8634e0 +2ff4811e65aa1e897a170ea822754042 2ff557c7eb3e55eb40baf48486d912e7 2ff690a74b955b7025afbc6ee7276e99 2ff69747d51087d4f526f413632d741b @@ -9098,6 +9130,7 @@ 3100b8257162244abb54229c31a0d286 3100fdeb8d0e1780cf2777d54ee33cf1 31012dedb15099d66316b7f9d5244270 +3101a714bf4d8412ceba46045b9c8fca 3102ee4948b07ebea379accf358f4523 3106fed0993b88c4b1ce2a30aa85056a 3107ec64b531336e5a23cb7c0cb3b58c @@ -9164,6 +9197,7 @@ 315ba540431d5a3eeda56c65e44d46b4 315c8c0b4f52bb81b4d828acc2452e7a 315e65cc1f34c1811a37f332e87afe00 +315eabdcd44620d32a81ed91caa69b88 315fa325085bc0f2032b48304014a07c 316019a760a7e6d275a10e07af16a9e9 31625ec9963c9f959ddd11f847ac911b @@ -9272,6 +9306,7 @@ 31f2257d432e18e93a55a45ba8ed8c5c 31f26b99be9daffd665d7acf85a35e08 31f2c254f68524c9c0aef4ca32977c60 +31f36083e351d658036e752f4f1a5fbf 31f3ed765c203ed0c548bda622da8299 31f45e7b6b07273ac71eb44f46fba8d3 31f62cad5ae8b19813a4cae58f349b07 @@ -9467,6 +9502,7 @@ 32f1a7f57b512db5b681d9d5da68263a 32f45aa1b9b38292483ab8666d8ac9cc 32f4b8bad803a08f17adb0b3aa3cf4e3 +32f5d69850195952f4211e1f2d9e028e 32f79d43474946ec1c31ab71eb83163b 32f8f9b79832f90bdf4433fc6be69587 32f902e59aa7f0e29cf4512b142e3716 @@ -9608,6 +9644,7 @@ 33d1fd357388cc918d7cd6547a742457 33d30382ab9e0e2166549b25bf97f31b 33d4701ab79f8df24ba2ab0c1d8d149f +33d5fa01b8e70a4aadef9ed32f05ec7a 33d7c5866c32276d154120c672208a53 33d842cedeade74108a9f7efead305ed 33db469e01631389d3e6eaacc5d08454 @@ -9796,6 +9833,7 @@ 34bb80469543da184f6c4687a7dbbc08 34bb9abcdea4f0bcfe24c6efcad5e3ba 34bc9c5319ce936460cdcf6597b71c23 +34be4885055445fd2690d5581082a350 34c0fe8d3d1b1c6850d519951ad971b1 34c2af1244f7ba549f6ad52ab15fbfe7 34c2bf58dde33d8392733df2857c14ce @@ -9964,6 +10002,7 @@ 35954958024018046d1f1b286a582cd3 3595d0b74e1cd8f9c9ccb1e51a1f0554 3595e6d58e506f0cd754d3af1f4446a3 +359729f10a3dc23a33c840b08e4b15a0 359a62e408cc78676438468cf8900c74 359b76c2b9774f59a828cfa0d6ec9531 359e97b8ea9ec5fc427af5b0d2e28c75 @@ -10508,6 +10547,7 @@ 387a4e5fec020b8da0f317f4fe7721d2 387bd966560c303cedd79921e5b78b9f 387f7889a14750f96f60415eb7fd8c74 +387fb115e32520e9bc91fd9dddd845af 3884f3f21019fe7023adedf9b960d208 3885d6825c8c388bb6c617d1fbd27e77 38870a3f87cbd7f163d739ccefee1afb @@ -10597,6 +10637,7 @@ 38fd5093d7dc284070e9b34028ff788e 38fde3d022d5f870933e44bd82f555ed 39027c02cd003145bc74c563c2059c67 +3903e95fa1e05615940a0bc2153c8793 39047b72ea9f2a256d6fa4edd04b7d36 3904c189b0a64f80797627e3399b5911 39057283f2ba7290242b8c13ca720d6a @@ -10991,6 +11032,7 @@ 3b31e02cdd65585d8c21e8cadf3f0d97 3b33311b30793dd887c185a0febd5c8b 3b3446d5e0402dd6830f8202e65bbd4b +3b34a138152f71f7f437c146fafed625 3b358900d7e5e2130918b2803d61bb20 3b372957e901b62ffb0d85f4390e8d40 3b38b355d44989d3aa7c6a84301bd1a4 @@ -11050,6 +11092,7 @@ 3b79c08a1f5d1c836fa0afb1c70a16d6 3b7b99a2c8e1a883c69b0f4272d26369 3b7c84f7e97bf9659c312cd3b2eaa8db +3b7ebea3e5eff21445ecb659a90a334c 3b7f744494f37c19a126e79482758cba 3b7fe83b78e3d169d3f05eb7d6a45daf 3b81d0b8ea2b4b89062a394894f3cd6e @@ -11120,6 +11163,7 @@ 3bdf407eae98cb17524a7aa69322473f 3be028f4cdfae1d166bbcab6d83a7e1a 3be057ab6966061fa151ff412fc0a764 +3be801ff3f2ce8b80a439e4b2bd2760d 3be8544841171ad614e24591990f2732 3be985fc58de16b34117385ce9708f7e 3bea0568acb91a9dd3ed2773cc367e9c @@ -11322,6 +11366,7 @@ 3cee76540462999330b659db06da8a17 3cee9a5dd9a3e935a637fb07804ec246 3ceed022926d9d651dda04d93cfcc8bd +3cf181e33b379e1bfdcdd5c5abebc496 3cf387bff728dca0760fd4d35cf1d706 3cf58d0d4708cff944d725d5a335c956 3cf7f85fc7932876af46649d02e6041b @@ -11600,6 +11645,7 @@ 3ea6416134718040d4d3b8ee1f66d0a9 3ea6c0393882f680923f96587c1ebebc 3ea853604e6b088167c1f34fb0ff95e2 +3ea8fdfdb606ca56c0053fd42a960a69 3eaa3645b6e85aa0385afc516afc0987 3eaa3a2675ce184c28d63c2d1f5b6cc3 3eabbff96f962ebe883547aab1be0327 @@ -11665,6 +11711,7 @@ 3ef3e87585ca6b637d0c267bdb8c2d69 3ef3ebef19b659a56d98721441845850 3ef4131d520a2d9bf26dd6fe61345e91 +3ef4d00bffa4b7c6dcde270e542448c4 3ef5888d2a20889501094a1c1784a102 3ef870b65bb2072912bb958213bfff16 3ef90411081cf45fb0af9b89ea1f72c8 @@ -12192,6 +12239,7 @@ 41f371db4d3093e95c0d4c771f882c16 41f4a7fd341656fb670ff84822093262 41f5ed0e40f638046b5e5bd74bc86d15 +41f621dd173791bc2e020fc8b658790f 41f8afd05fe87f440135874acf65e8a7 41fa09550baa6720b89ad14a373171d4 41fa72e1dd47cdbcec0415f48fe5154b @@ -12497,6 +12545,7 @@ 4390b82422c7df4351b850b6662d05c5 4391806ca647f912b0f981d18cc07a01 4394e2c9bb6e195980dd173762d10f23 +4397bef5f8da23f9e049f084e2b0c5a1 4397c71ce2b06a0aaf1c7f2cfa36755d 43986c3729c70fb4a5bd2ff2c5b15b0a 4398ccca44b4473d3ae68824880ebf48 @@ -12518,9 +12567,11 @@ 43a715b755029901ab99639f1b7e7107 43ac5e18663e692f78afcad1c753212f 43ac8bcb1723e102321a5e2869485dfb +43ad92cdcc828dc6a8758209f251976d 43ae2c9f8a3c2d507d4e3f32e29291c1 43b14d3b24429b6c6e44192ee272f896 43b1a07f3b558a8dc2e19b65f8667f48 +43b1d41a4af0b16ffa6c7aece70df9fb 43b2e200d9d58469e477e21d7f2ee8be 43b3f657584b3929ab2e5268e75ecfa4 43b49419cc992476d9bb41a6b7fe68c2 @@ -13158,6 +13209,7 @@ 4728c1dd740425bc772076ad0f78abe6 47296ac974fb9c1c3836bd598eee5894 4729e6616dfe0db8113202337628daa6 +472a4a83e12c9338aa019ab71b1cd538 472cf2000130f8a77e3b4de2265facdc 472e7a1a0797d2fb3d00cf964874db4a 472fc7143444e3123879ec40a3f1db40 @@ -13209,6 +13261,7 @@ 476a3eb77739bde4ee459f94abb764da 476ab8f7e92c2a42443493060aae370b 476b2fa725198faa5121c3547d3e8347 +476d3d7cef20b6425bd69fa10f8b8a4b 476ea5205f1e6380a58a6df08c09fd16 4770eea1612bb30564975a9bbf358dee 47714b35c03c6f49a0a4975a16296895 @@ -13516,6 +13569,7 @@ 48fc6af29385c116d37c8de5696dca44 48fdd78848122b4bdead6edf02e073b5 48fee9aba233ba72649bc95759307de6 +48ff0180ae3a8a78997fb890ee109ffc 4905317ce4d52d076ca8bdd3e49ca44c 490540cdb17bd218f1843041937c2f2f 4905ee878e5bbae74d889030b5d5f7f7 @@ -13545,6 +13599,7 @@ 492333ab6a412229720e5ad738e19b3c 4923d6659affb6396d2b9d4ac13869a7 4925c4f814f259924a6e2f6ebf4ae0e7 +492743728e902d23d6d5d53eb2543a03 49277325dd0f0358390a2203f5a7896b 492a2e08c2e3526c7ae7931154b479d2 492a593678012737d98bd06c4ab5dfae @@ -13608,6 +13663,7 @@ 497dbbadf503c2754e3ca8f4ade772db 497dd4c9b950bfeebe8ca1475564261a 497ddd96968b68f3c933270094709b03 +497fe6b5b77e35e8391441306a44ae7a 498c8b74a55c40504df838841c50f530 498d363012544b9065486670301a0b00 498d9848907ea86c296e6908f2683faa @@ -13693,6 +13749,7 @@ 49f945bbac8b563ad109ee7df71c227c 49f9f09bedc8e8156d724e6226d91a29 49fa83f0b5b58d4ef8c452c4bf9d5282 +49fad9093e12519919a7304127e10f6a 49fb7045df30df154c196b145cc98ea5 49fbf597844788a1a8a1633b0b278062 49fc480ef62f2ad8f98793c570890fd5 @@ -13726,6 +13783,7 @@ 4a22f67aa46100b5ee925abb25b1fdb7 4a24051ed87826f394dd38a62695d3d3 4a248cdd983cd58ea7d798c160fc4f60 +4a26b6ed1c266d9bde5cf5e42b84a0f3 4a27220ff91f482eb411b9edd1b968e2 4a2780fed5c4e2aa36e4e1c0e48dc552 4a27fbcc4bd11abd494763c7a409927b @@ -13847,6 +13905,7 @@ 4ad8f41c8001987de29e6c1deff123d0 4ada6bdd950bf63b4c95603dd795b1a4 4ada8d639f42ce1ca43c6eb17802baa0 +4adc3be48978d137080ecacc4bc6bcb0 4adca296b6f9567a6c2fa53f27865d3e 4add259046057425791175040aa7f5f1 4adf9823a4e3540b59168f3926c5970f @@ -14412,6 +14471,7 @@ 4dfed6fe004fd210ea6b6ca081045eb6 4dff7473ffca9d4e6ac22955e90bd4c3 4e074fe040111467eee72e254e64ed42 +4e07eb61d55593353142e4c01d152346 4e08c12df4962152457e12596d308229 4e08d1287975a426b7124013ff7cf6f5 4e0a189a882c70d1d1fecf920213c41f @@ -14529,6 +14589,7 @@ 4e963337e8eb71b845849884a7b35b6d 4e97d024ccaa8ad5c97ccf32a818bb5c 4e989816aee4c90b559a65b783562253 +4e9966e92658343a7a1276f8290c9aaa 4e9a9bb355f473f19669705030826c20 4e9bde5ec8a199be9ee3b888f45509bf 4e9befc446812a156b2bb29a3fe59386 @@ -14650,6 +14711,7 @@ 4f3edb86c8542999a695415371904561 4f3f33f5efd98562c761b2fb4a9d6a9e 4f426816815b5e558d384c6250df4231 +4f427169a6bd2bdbe0009b9915c77aa0 4f430a804cb613c689552167e1a556b2 4f44618433c1c129f223717ed379fcd7 4f48e60858dc789551af56083b5839e3 @@ -14717,6 +14779,7 @@ 4f9bf2aba5e6dfba7f9da70a44be9a53 4f9c08d4e32f540d9bce336ebe1a2718 4f9ccb93ae9e8e68be640c0b94657723 +4f9d2c2dafb8ec79da73e6800165f136 4fa098e48d8415a952ea73e8bdc06b9b 4fa0e3691b89b29a7cb0ce3bfe2c3a6e 4fa16c78b1f133361f177ed27aae3337 @@ -14899,6 +14962,7 @@ 50968cd52286863dc7ebcb794fe1bfa8 5096ac701c78d0dc5829445d0452464b 509b21c7075b184e0a9442de18fcb9fe +509c53cf5aa1f8440e1917100cadbc04 509efb0fb72d699efcc2202b9e8df738 50a04e0edab9eb0f33638e44014bc899 50a27c0ff47ca278030ceaad66ae5b74 @@ -14920,6 +14984,7 @@ 50afd89108c8b230b3456fc4342b9115 50b40bf654d30d283765d41fa56f3c40 50b449bdf9e43272756a934a16ea14b5 +50b44ce4cdd1d844dc0f63213f790285 50b59e1f8b3623163ac5f173a54360f5 50b746380291b31c39dfd51a49bcfb79 50b7d0acb6575322679f80f47a663e07 @@ -14965,6 +15030,7 @@ 50f2bb053f50d4e1300c035d17a27248 50f3af9df22ca6d57883e440310afbdd 50f3afeb653f2070e231eca2fd927034 +50f546b2519eb0334f3c2f16b9387751 50f8fec774c38dd6e77c92cbddc217f7 50f9fa163abbb8aecdea13b024b6341f 50fba0b0b9d7cb1a2e655fa16ce1a78e @@ -15038,6 +15104,7 @@ 515078554d2552e33bd80ae77f945ace 5152327db053043f45e0844e1ed65878 5153ad54a1ef93f18a7dbb2d90599f6c +5153cea05218e4ef7fefe49a84a1aa2e 5154378095868719fd800987ae8c7067 5156b384f3f1c20f947c0f8be9874461 515803b028b1bd972a94509c7474c4b6 @@ -15359,10 +15426,12 @@ 5315d1d2bab05cf4863000863312a449 531684e91481de1f6ab71c683825e771 5316f3530f3bd3b850581804debd1afa +531744ce6be100b5716fd40d7c9de0fc 53174761da7fd6b454d8b88e8a919a9d 531773a4010d17332a7caf09f591c683 53177a67efcf6bfd373fddae10b215e0 53191fa60d0407df72cb2c5abfc40045 +531bed5576743bc965cf1a75f39672e9 531c16f0d2155e7a25bb05182886f6a1 531c251f3349d3a4fd19fba51f0c0bce 531ddc65722f737dc6e21db4719f601a @@ -15928,6 +15997,7 @@ 55dd33bc7bd3729f22af3fe72ef4074b 55ddca1ff9b5a6c07552c2a2032070a3 55de4872b2e2456b0678fc884b88dcd5 +55debbf864d74de3c9f374f3e289f2b8 55df5e14ad4f54d79349cdcdb3ed9788 55e63216197d3818a3a447ca32db25b9 55e63df04cec0b854e06249f1e059be6 @@ -16534,6 +16604,7 @@ 59302280671e8af89575b3df20fe3c08 59328d41e4e8edeefcbf2534e0988ec8 5932d7254df19252bcb9631eafafe6fb +5933b4f2aeeac44c631c46df7dd69df4 5934024048d6f1db3c7c65519a35ae15 593468c6fe28bf4db0519ed4d479ed77 593778650c3c289e594afbb4fdf3171f @@ -17079,6 +17150,7 @@ 5c3ed8b72b3eda7bc6acfb02f3f37902 5c42536cfcc8d0dad8352ca659da3e6b 5c42c1e7c70b17a7810b5b44c03c81b0 +5c42c231c2325f3f82354dfc759481b5 5c4320bf325cdd8e20114525e14f9a86 5c44e68b5db37eea1277a7f5ffa68d9d 5c4529e86446c3406ab013830ea81a2c @@ -17210,6 +17282,7 @@ 5cdeb4e6df97593260509be936465e2e 5cdebcc7034cd6277d9ea85cdbff9fa5 5ce0a5bb5304260fd4b992f996741499 +5ce2695cb47af61a5e0ce4f958fe8ea5 5ce2e4c461a65e39dcd26351248411e0 5ce43e85a4b420b2344548785387966b 5ce4c9bfe401ffe097895183ac7fdb1b @@ -17250,6 +17323,7 @@ 5d1314cfa63355410c5827083249357b 5d13dc34191e9d465c6818c91c376e13 5d14bc76ffc78dadafb5a3669dbfdff5 +5d161de209bf1bf98f219ec307eb065a 5d177927392666524df5705eb3ebb19f 5d1895183e042229ba8a4ee313b6fece 5d18b362d49eb721e31636c281ca4c51 @@ -17281,6 +17355,7 @@ 5d3abccc255b4de613480efccf789d40 5d3acd1731553ac1b12d99a272460c85 5d3ea10db3bf697703df3bb1e5999b2d +5d4207cb8311cea2ce9990bff32ae156 5d43521304247dc7e362a3a42488b3a9 5d43b7004cd2b85e204eb934c4d21f4e 5d441f2a53c15027fdb230f22cd5b1ce @@ -17291,6 +17366,7 @@ 5d4cf609ed33d0e5c962222a4f62bc2e 5d4ed47446d65b3fd7a43889f0ea2aa0 5d4f846d5105ac2a8b3438d6ec5a1064 +5d51181e2725deb04b7e69a73f80306c 5d5130aeef7c56307e39bc857b03cc54 5d5351b57229dfce62a9c1de79c0c5a3 5d53b511e820e0d5f5fea50b317adcf4 @@ -17694,6 +17770,7 @@ 5f86313b2e10abc3980545b82c68bff8 5f86a0d23b8b013c888e0a14f6822ff0 5f886a9589924f5cf4d77f02358d0dc7 +5f88a4a255bf4ee7e4055b40bc668ec9 5f8a2ec713417456b927e0bd4244ec22 5f8a58767579838814e849fb422884ec 5f8c6382f324328181b9da39c996c6b6 @@ -17951,6 +18028,7 @@ 60c5fb168f7e56a84e62e65830433f6f 60c704251c42b530a21d6df5d3a351b0 60c78326d31afd502a3ae2828ec3e7a3 +60c813048196b96ba6ebe545186036f4 60cde4151ef796abe8ab1d54d2efecff 60ce2a8dad2c0cb0a20b227725a2de9d 60ce30408d1eba6e195ebd038ce951a1 @@ -18030,6 +18108,7 @@ 613f1029835a7252580a6932e407c6b3 613f67592fe56f06b2c94df38a0f1c10 61408db2b29a06794fede644ab20f239 +614236ac149fa8f620e9e37778857498 614262e3acf34f0709b2d14c8236d11d 6143f72b0ef132ef553de94c75497e4f 61456bafe129d78150cdc6db87427dec @@ -18794,6 +18873,7 @@ 65831641173f0b18a97b2cff5077392d 65832f6060492902e3f4de8e678666d9 658461930db45db09a61d256a12acdff +658513dac258a043b0d9f279dc684422 65860d5114e4f498ddde3cfcb2fd26f0 658742ef1905d8750547aa5c10480ae8 658755c993f52f8e802899e68fb35e0d @@ -19358,6 +19438,7 @@ 688a2a79406c252ae1247412367f798e 688a8bf9b23ef593e19c55c484484669 688ab0d391a92dea10b000416519d113 +688c8293cf53e8ba22f98e97f08befe7 688e9990fb2da39a3053743ea2baf72b 688eaf480152d00454220652ce45fb44 688fdd6fa158e346c424fffdc75e1c9c @@ -19794,6 +19875,7 @@ 6ace6b2b9672f137929cfeec9a63fea6 6ad146f0525c2dbc966ad888dbf7efa6 6ad51785cb7c26b35786106f03b112ad +6ad5ee75d0764b8b99a8141c954f4f1f 6ad6c838a03bcf9f363c6dec42822ba8 6ad6e3cb7804031dfe989dc6dc1f31c1 6ad80d9071e7cecf739ff58e9a83c719 @@ -19895,6 +19977,7 @@ 6b3f1d9b44bbeed61a5ed2824b59d8ca 6b406dbcbc7fb6e924aef08ec7a22b16 6b419871cf74d990afad21f2b2922353 +6b429588c3893ebd080393b0ea89a535 6b42d6b28c7cd89ddae18b4b79e85310 6b439bf9b8fc5d63bdcbc2ae3c17a0fa 6b4407116af9c1557a1aa63a3da499be @@ -20239,6 +20322,7 @@ 6d1e30693f133b4b505b85bcbf3d3d56 6d1ef843ae5e1936db51836a8e097e70 6d1f81456fa158678f4c574c0bb26fd8 +6d201793e178571f66f27253870a0d48 6d20f535ec451dfff2373515573c33c7 6d24e2945e40baadc4c5d2bcd17304df 6d28603e872afd051c9bdd0a0b7ed7d2 @@ -20423,6 +20507,7 @@ 6e1fb233ddcae13c97e9f9cc1133ad91 6e20bded530e0d55d92ca2ec47961e7e 6e21e7ee5603b9663cf1e8c2bd097e4c +6e220734d4b351482b142b6df489ece4 6e22211fef150f27739ac8cfe0c83b96 6e2269cb145bd1355549f54ebca12f3d 6e245be4e0bf674abba28553fdeb4ec8 @@ -20462,6 +20547,7 @@ 6e5eb13d4564bf66e3325356f307e7de 6e5fa18df4f14b62479efa69e1eacf3d 6e613bab444df20d1f48af8772dba9ed +6e61b449c8534fbe92e40a38019ddee1 6e62d4b7094b92c37c13c8c3dba00a3b 6e634138dec899ffe6229e2afa7f0fdb 6e640be35d729977821d9210cccf5c11 @@ -21135,6 +21221,7 @@ 71f7840a6d3741a3b36d246f48f4b61f 71f7b2185478ee2e56c4717621ff8a0f 71f88215f6f467a9ab65fc26e13b77a8 +71f93bf783ec79580e9997c9895d4054 71fa38de6bdf0ded885df0899fe56601 71fa5c79c17002e70705d7ba5a6f33f4 71fdab28bbaa97d38271099788bd68e7 @@ -21479,6 +21566,7 @@ 73b460210393d8796110d9b426e8573d 73b4f5c1c6d38ed92a250129119797c0 73b6e099869af1a3199259a6e07794ca +73b8c0db1019b9de94e2719285931aec 73bb769999f1e51c14d7ce58c659ea88 73bf1b224ec0387ad08311f1fa5ea180 73c11fe13f798df0cdf4eee548afa8c8 @@ -21921,6 +22009,7 @@ 75f95f5e85bd1f3f46e419020ad63f15 75fff04ce1ebeed5d16530e670db268c 760085ba20b9149fe81aacf83eddc5cd +7600933763452f69ad5b0e343ee0f5a8 760298979e3be1bf18d6a7cf04f8af4c 76034039934bc9609cc7e823a04ab88c 760502d8033eda17002679269ae42cf1 @@ -22571,6 +22660,7 @@ 797124a61ffd65f6a8a3e479913f7ff9 7972f670ac1f6ee26d313be2db065f0f 7973da40cb1e96802e259c96eee30f9b +797401ae93fb906d6629e53e47c982b1 79740340811de064c00fb0b1041efe44 797570b9133e0c2c3eb6eee601ad79b5 79766ed3fe99f02d711e542f80dae4de @@ -23043,6 +23133,7 @@ 7c29cc8c004f6c134e34b5c49a9a7a72 7c2c187d5fcb80c6467f8bc453dab631 7c2cff8f68c99c4c7baca68c6423e26f +7c2e93aab1f292b0ba2c8383393ca2ec 7c2ea8a82633e97f32b77d3998fd4555 7c2ed7dd1602af288bc67ce15cf27687 7c2eef5b6132c9366df606a50297f6bd @@ -23437,6 +23528,7 @@ 7e11c261bcc4bc31d0ca5f9d79604890 7e128ce1c00273e73ba732a6e633ec26 7e153b7108fa221218ff9c2c0c1a0341 +7e1557a5fd1acabf3599bf50107cfb98 7e15728911bdea17f1321897224b4a3f 7e17d9bb1e6057ee99ebad2938f8b7ed 7e1bc22ce97c5b24ac2b703932798eea @@ -23916,6 +24008,7 @@ 80bc83f179ccb15b5fc105bb8720f910 80befb4e9bf34560b46d753ee6115acb 80c0661e3a1ce54e58ec1b2ee39f6cbc +80c1ca1a8dd1a3c523356859479a812c 80c524454f069d8fbdbe6d809a49e837 80c5d6f80eb81faa4eae1934803ddb72 80c6dce86a902bad249c0f1df3c8de92 @@ -23928,6 +24021,7 @@ 80cdc66d676df68f898012f0f9fcaceb 80cf01eaa832367c26d76a9d5b4f820b 80cf190f48263418271326dc3c0b8688 +80cfffcf2aaa447888ef9f5489c7a5e6 80d05144107b1b5ea6b36293525f7e31 80d4b67be7585200ed1319b1e4c9ceeb 80d51dbe2b2914bab95889a96e345373 @@ -24002,6 +24096,7 @@ 8131642c4043d6ce84713e6c61db2e84 8131eaea51d89e6f2530110458513cd4 8133f1a5c55b77ccef0810d32d1b779c +8134b5c117e131d9dd228b3c572bc35b 81358d13c16a9ebae7589ddc887b2911 813785a9a90fb319a631fca698c12384 8137fb7eba55746a5cd413df0c017c63 @@ -24167,6 +24262,7 @@ 82137a6c4eb4c424dd06478e2ff37a99 8213cb107716013405dc8449f6bd9700 821418987dccdd7aa80ab7a1b63b0166 +8216e226abafe6ab8627a022b4308200 8216ef135438ee0e5e84120646bffbdb 82171e1280c520722ae4832ec013383f 8217751134e8a0fd623de86b2cdd1016 @@ -24570,6 +24666,7 @@ 8424d98a44dbea364f7fbf259e3f8e07 8426452629e10ea857cea509bf10c500 84298c2ee702a08c10c18f5e523bbcfb +842a07d3e17c7906d353acd86e0d510a 842a6e586447d28dd15edad7d8c2c08f 842bd654c1a9de1ae231bf18427728a7 842c2d9955795953faa9de49ae14985c @@ -24830,6 +24927,7 @@ 8587613a0d81d113b9cec94f2b9c7ee9 8589c3aadac86ff890ec53fc3df7b390 858a4eb6106da7fe4f235697a06ee7e4 +858ab85605114c068e3e897e05f8a6df 858e4ddd566270e581cbafaa1bd1e3e1 858fd33959f4976224a6790126139d9f 859148c9266cab9411b229b07305d4e2 @@ -25032,6 +25130,7 @@ 86871b3951507a261150fa17d00ca189 8688507b3f5f11cd4a3dc5b413845e46 868b537ad38764182f754aba09915d1c +868bb4ad43aa3988aac08f8e034f7e43 86991eb1355ffc35d2a5039bb93cd2ff 86993c6c3f1e1833a7a3cc6743e87861 869bb234e2767065444f718d89d83724 @@ -25283,7 +25382,9 @@ 87e92dd0e40fc50ebc43796f04ea0225 87ef22ec3877a9d14ccd30aeccfde1fe 87f00f2a5da03ed6df4d05f7281caa24 +87f0e39cd48ba38a6d99faa835afbe8f 87f6e428c8a335e6e4b101ebffb227dc +87f6f41393168aafcb9c01db3641ab85 87f8b35ec1eeacac3b59cd458967efa5 87f9e0c79bc510e7b44e1533fb49b66e 87fb324067b1bd6e5ad768bc867d0582 @@ -25354,6 +25455,7 @@ 884a511263b737c37f361ddeefcc5e66 884b0a9330fc69d5d49a3a6b3f83ede0 884c35e791f1aabed328d72676026f21 +884d41f1b62c73f20c4491f7d849e526 884d808cb3270506628e151c49b051f9 884ffb1cab822a4c8492db48a13f19d9 8850f605aeda7de843dbe36a7083b8dd @@ -25442,6 +25544,7 @@ 88b3062f26b921408c0aba87764af6f6 88b3adaed51aab42fe628c9a693b5454 88b46cf24a7a3cd1cdbcb1029cb0c6e3 +88b63906443380508b381e8b2c8ad59c 88b65d2e6e5493b6da9be84b15715c9b 88b733125439eb1e2448cce121494123 88b82c4bc2ff55409800a729a9df51f3 @@ -25678,6 +25781,7 @@ 89f604f90a8b5466e679b3913ef98646 89f92de3d34aa227526d212921ef95fd 89f932f16ba02d8953763930ce4262f1 +89f9beba4bffa2912beaac73d548988f 89f9cd70ded4727e73a972e513fb10e6 89f9d666f06504da08b5ecd0322d16fb 89fac72430dbcd05e2c14c3f9eb6bc84 @@ -26461,6 +26565,7 @@ 8dedf964458d1b180fad2680309fac97 8deee6aeb279b0b6ec0e086c645b7b70 8def008d89e17619eb340d5085f25791 +8def721c85cec08de05f0e9aa54cb5a4 8defdd23b7fca88d69f6ece6ea63d885 8df011860bb85b91c240e2573dd34bef 8df1867b9879901284a14231f130feef @@ -26548,6 +26653,7 @@ 8e5096d7e10f3643140e2d8bde84c74f 8e55f6a1ac10042f4d63504d4b702573 8e57024d1545207a41c70ab82eee28c7 +8e589099833b8c658a4f64f97e7e523f 8e5933f2fb97ae024abe492df504ca29 8e59d3086c855e1f0938c57b1ff4ce34 8e5ae1879e9e1c2a2b8ad7158477565d @@ -26886,6 +26992,7 @@ 9053e589ede5cf799b9b9596d42d20b9 90547489c9f1c5d83f08c96403af54fe 9055b8af5f0f8fac915e3d2f95ba8be3 +9056852bb99c1f03efd328d4a9ddc83d 9058281d66bd641893c8fc0066e865aa 90582859b0fd0be760a55c71b3614313 905850c28cd05ffa7e6053b189fca4a4 @@ -27341,6 +27448,7 @@ 92c23754c63f287b9f9686abe39f7ab8 92c36f053220afd1ca3341fa9d8cd582 92c430bc558ed92b92cc30439d28a0a9 +92c48e69659528bc694af84967255fca 92c8086c84e0b37b640c9cb44aa16c2e 92c8dd1f4d020de42a8a15f8edfc8775 92cb23f58ce4b861aac0b77c7eded58c @@ -27371,6 +27479,7 @@ 92f2968ab3321be298fa70890e907e27 92f4821c240ca16402e68be3a53bee35 92f5a7d56441e7ca33cf202ebc55ecb0 +92f7e17375718587ad9d3be86653fd1b 92fc4eb821b9ab5457b2afa12d8b84a5 92ffc68c5f1c390604b5fb58aa260621 930059530f1083df6a4f11fdd6f0bc72 @@ -27689,6 +27798,7 @@ 94ac77b584a5b497f2b017846a7b76a8 94ac9531a877f3f6755c714e75fa32d3 94ada90323253873dd90b66ba40e8388 +94af7c940bfda085337e212035870f22 94b0f7cbea9534db2b8587cd9343a191 94b10a0afc1b944b2f7df2817c610635 94b442daad85ca878832332d6a604e52 @@ -27722,6 +27832,7 @@ 94e22cd21ee6e3d00de342b9fe3d3664 94e34579459b8bb6fdd5249a5c46410f 94e7c0c305dd7d2cfb3941ed77d13ff5 +94ec87f3be87da8076582349abc5e787 94ee53e735bf4e02d5d6d2e10dc0626c 94f149bb4c28e82d44b005639ea581b6 94f177f79b4bac3c1085cc80fba218f7 @@ -27765,6 +27876,7 @@ 9529b3962128a44d9cff968a61f89e9b 952a233ff29336d708b1636f01a154e0 952b22ba823b715e18d7f6a18a98c115 +952daae88592ed29e536b0a687bc7b01 952f907ed00aae1d502d96188458dc4b 952ff364f02381d5923fd4790d33f324 95312d1b24a488c1aaf1dc3fd9f618f2 @@ -28008,6 +28120,7 @@ 967758403d06ab582e3174920a9ca912 9678d73dfaf9bee5b3803dfa065d1265 9678f610950c282722077a70094a7d7d +967a63480f72678f750901913770d489 967b01a89ccaf0e7170c35d24980e158 967dd42b2f10cedf4e203bc19c5b8698 967ec6f2e4186e32ecb994733e912641 @@ -28154,6 +28267,7 @@ 9746df8fd5acb58872fb6359f02e9b90 974797d2123f4935a2a3222c82770711 9747e7ba026e9b2129ef83d217530460 +974844e0b11483f6fb0fb03cbc57eeea 974a1e1e59c1eb7e19d87ea50c90274f 97500a08462c7fdc83c31fb14e2ca2a7 9752b843d90eb06d9842418e97e9f244 @@ -28185,6 +28299,7 @@ 977d5de93f9e584aaf760f79d73f5015 977e1826b8e83dc15133d6957e51ac16 978340a7d73b2d9dfead72b642b86e9c +9783cc73906b9f01e19d5da5443bea81 9788ac48083b78b282a3360d34cba2d3 978903c8d30d0bd363eb242d8e6bf9da 9789acf3684f96c2f0caafc477252c7e @@ -28357,6 +28472,7 @@ 985e77fca1abd1a6b2cfdbf11f473649 985ec633ba21223fbbd31f1da350ec5e 9864b9ea121fac1cf437861b6aca3ea0 +9864cf5ec6dbd8f7566669ad122ee55a 986acf25406a033a30c69d57d5745259 986af39f8bed3841397297561d5adaa3 986babb4eaae342f28fae7d442ff09bc @@ -28548,6 +28664,7 @@ 995df8ada5c83cf740813d72201fdfb7 9960d5b1f2ca7fe0b823eab3c7a0a0b7 9961bc7cf483552063e320f7d7580574 +9964d4a4be9dae1b10febc2f55d28630 9964db07992625cf4fb2e8a438bfb430 99651e7fdadec147114f35076e4ceea0 996549f3ee3b174b3fcc6f9bdf1bd001 @@ -29008,6 +29125,7 @@ 9bc60241f70be80046243f842702c282 9bc60eb2112f11c439e1567c3b50cc61 9bc6cc99d092842b65f969acc5abbdab +9bc7e71d8c464e2de2e828990c67675d 9bc90d459fb5a016dfc01eda397d7602 9bc9907cdac51e993eb3f94c38ee9418 9bc9e31d551257ff596ca28bdeba92a6 @@ -29325,6 +29443,7 @@ 9d91e35788fdf67f2941091fdef8348e 9d935262430cfe429c7490963d09fcd7 9d95c47d8165e3c3da80edcebcb2cc5b +9d9777d5ee478878603f728e46cb6da2 9d98fc65878e4629933abde115892b82 9d99d1b2ccb5a8950ac93b23b7696e35 9d9aebf33219b85300611a8c91e7b1bb @@ -29492,6 +29611,7 @@ 9e83f860e740028292a2b5b7350cb8d6 9e8407949b8f4f4ade4ac9a420cdd494 9e848f6c2022e51cbac582aba9131006 +9e84f01f90df1dc8f405c5f70e74a3bb 9e85820fbdefc963d563d5025afde750 9e8769d40c03024bf4ca169489194daa 9e877f684a4e83c61e08de2747ce6850 @@ -29600,6 +29720,7 @@ 9f171aa55dd3a5b319fd4b996ef1c9d7 9f1741e24207ec85de99653036a9ce2e 9f191088b6c278c4428268dd3df88a2d +9f1d45bb689655e7141f7f89127a0c10 9f1db129ade229c7f17dfba0ff280ed8 9f200e257386f251c6a3bc58760c313b 9f22ff86cd3b140e52e3d9fdcc033e21 @@ -29630,6 +29751,7 @@ 9f49578edfd588dc99271d321333cbf4 9f4a5a9735e7a90627e7ce2da9683bc2 9f4b78dc8b5111de238d8eacea7f84ad +9f4ba9b6221d7c579417dcb1220da28f 9f4ddc6427476125544b6c9e7f153511 9f4f809b3ccfeced05f78e9516760e50 9f51a47adce0b9e3c943cfed80b56f88 @@ -29811,6 +29933,7 @@ a03c44a2db95349a2162a337a1c277ab a03cc6f3645a3f99ee05311591c94bf3 a03d656ac0e18d0b1e3da56403e18b24 a03f2b6a68b7b33715bd7afe74b9e77e +a042741fee86db3a41f1db1a04702bed a04441f99124b3c5a097d296103b94f9 a044cafe06a9dbab02af703ae4351cb7 a044f1d1e5bb03025365504da1da7363 @@ -30117,6 +30240,7 @@ a201a390e40cb5e2db7dec9c22be376a a202bedc98d42630836b7d9b13f9bd87 a2055a3a2b1a6d52982ebccf8d2235e7 a205e24bb3607a39fd9d06b4682a814a +a206f9e0bb9ff1aed51cbe684bbcd972 a207b29a98ccf8c33c592d7ab2157682 a209ad43c1313a5fa91e87ba97ad0d0f a20c8de60acf1cc52767edd6e05676b0 @@ -30672,6 +30796,7 @@ a4e06740ba336b7252a674e83e50d854 a4e2c5f46e52d22f2b480e2fc92e774c a4e4a21f4395db7c876ceccafa3d45f3 a4e8652f42673f66069ad19f813f82f6 +a4e8d8887e3a08a850015aaea902c443 a4ea8a19a629e1f6f7c3f95eb09953b3 a4ec1b54c9a2152558783e2e3d4a6b83 a4ecea027ecc6ec471da793bd6c82588 @@ -30691,6 +30816,7 @@ a50856934899d7b0ba22e0219d7c75ec a50a6475615f04fffdbb9012caae4516 a50de03e8890f1f1e336a9332a68a7c1 a511ae9ace9495c309adc18f9b35603b +a511bb1ff5f0f82fe40209b8cb212070 a512462dee847504de2a6e96ba6d732c a513f06df214aef80ef9f3f0ccbb85cf a5141eea4d0e149d321c44d3d318c468 @@ -30888,6 +31014,7 @@ a62f20995b167153a2c61978ea5908aa a630e033562b2502f1f098ee858d0e73 a6315a0db6c74f16591af958d86c9cf6 a63197b3c93ac9bb909cd308b3667a4a +a631c660039554e8aaa64cd3cd470f2c a6324e3efa542db5abee42fb72466ce0 a6328860f557c0ca5180fa123e3ca168 a63556a754fec63abfb4013052fc4b66 @@ -31181,6 +31308,7 @@ a7cda8410b153993b3f112f9c27876d3 a7cf42b2c72aa45d0143a57316ad84f9 a7d06bc8685e7414c8c75318d777615c a7d10c004ec1b02f1b893dcc71bdac46 +a7d25dc45d826dbc8b73b93346a99ffc a7d5d64e2fec691f42f38ebb662ae9fa a7d64290e1040499b1c3be7b3ea82daf a7d71de6b8c80b67e47a3c04f4986c8f @@ -31220,6 +31348,7 @@ a80daf101a5576bde27a0562fa39a4cc a813615d65351d2e5b2c5faf02aa30b4 a8142286dae679088a6e0c540356f6b6 a81454c0889f48a8b4dedb7510628950 +a814d6b139b6f1de703333dbe82bdcae a815255f8dd8ea8f56766d01b08b32ed a8156cf6b2822be4ed2aae7ec987e9b8 a815887fb16aa023e00403a78a3e8e6f @@ -31275,6 +31404,7 @@ a8500c20736f7ec6451b81e7922d9dbe a850e171f57ca7214dd6e270f0fb2254 a85376a28b83d79171bad65d5c0cd17e a853ecf10e295a5340ea1916400d528a +a854e1d2b03a069b3cf7ed10289a586b a856e94c43cf814c0f5ac187e34b6e97 a8575516ce45f950778e2c6822d3a900 a8589fbffb0de629aab10beb6a9fe66f @@ -31296,6 +31426,7 @@ a868a08020c2f51aca1f70b55f771000 a868ab292b4a03756972724718356185 a8696a6fc88b3ed32ed4899816223b99 a86a12ab1f377bc959e830d2faa6611c +a86a3083d1bfd8f49e34cb1d6cf746a9 a86a4f49bef16f0e7d7004d0be4b3be2 a86aeb171959e769847870e08169309d a86c7122f02d5e33779e0ee002a001e9 @@ -31341,6 +31472,7 @@ a8aa1e299c844e49e769fc4cec46e7ae a8ab47eae0999b40539c51bfa6b263ee a8ad92aa5e0abd074ae841ca7eb05631 a8b196597d26b9df153729f8901b11c5 +a8b475aba9ee8661b3b73eb3b0ef9583 a8b4b7dd11193180087f01efe9bd0880 a8b7e7acdb0d306ef5d09f93eb78b2d3 a8ba540d9bd8109f0364d28533121079 @@ -31355,6 +31487,7 @@ a8c899b7aecb9ac02006f2270e1dff9e a8c8ea60889237392b2f5570897bd886 a8c96be24390dc7884ae9f609efa496d a8c9c547176cb01c560ee5d5d35cc0ee +a8cae0e5c4d027e9449396fe4d0815f1 a8cb22502380e52f5bf22f9cefd079d7 a8cbdce74463d485b2ceffc4a37aa21b a8cc74a4f58eb478afcb1c9bb555b90f @@ -31432,6 +31565,7 @@ a93fc1bd88fbc2df95034ccd7bf4010d a940307cd0af50624f8151352fa658db a9403c152e6dc54393245bcda33c73b9 a94049ca1c543ae05108f1bdad6a7b57 +a9415a2f7c89327d6664be07b5104a83 a942628dcaeaf3c05a832b5fc184eff4 a94271fd6eeda401f2c591a95e2f06d9 a9428e6bbabd9f647e9f1dcdbf6e9e81 @@ -31746,6 +31880,7 @@ aadf6cbe3e7adc90b59c4da78a484ee6 aae08c272c8db732acd0979aa47d5864 aae0fd5dbf21ef01122e17c191f66ca1 aae22eef4260b0d141e70af505d64627 +aae273b9e3bb49c66f4d20a6b262b0e9 aae2f3185d477896ab2c3e1e946e94a7 aae337ad54410abe22085fd79dd42421 aae34367842a723d74b5c7663c84844f @@ -31897,6 +32032,7 @@ aba16813601bd452fee184a3815b9779 aba30058484749643439fb4f6a06b3f4 aba40c1226c50fcae9d5faf0b6a3c9bb aba636a9741ad125e78b07e9dcb057cc +aba79ecf897214d2e08ed1f560564042 aba913bf8fecb68046821b21d32a753f aba947b0945cf24cff8fa86a03dfe139 abaa5a127640864d9be9f87ef6db1752 @@ -31911,6 +32047,7 @@ abafd81efd1aecdb84105435c4fe22b4 abb0ffd13a6155c03bdd0b852640f81a abb217c5b42933679c59060f372a91bd abb2c76617a43c0872d45ec706ab199e +abb3175fa3c6474500c97d75ca546bd9 abb4c87957510f04117710d2c8805589 abb4d8aa46709f197491ef7d65106cf1 abb65d50261d54da7d7de3c53494af67 @@ -32555,6 +32692,7 @@ af067bcc545e067eee3f528d6e3c9851 af070590153217a2d8d31a2f3a68c542 af09a8675dd1b2d7cfdb51d204b36d42 af0bff6eeacd222285e5ef241c4e610b +af0efb3a79e1921962c63a4ab517d198 af1104a6c84787397db205a9984f0da5 af11fce599c55d9e8d677a2b550614fe af13405d51f98995fc0b2c121d73772c @@ -32619,6 +32757,7 @@ af5f8ea812f6fade2069847b33ef2681 af608ce4413626cabcc8d470d54a4144 af6544bdd3d79467f8946d9bcb5e0b5a af6545d1cd3327470756725b69335cdb +af66bd34c313bb7aa3f7cf9a7ff0d1a2 af67340f0d5ffe18181d9a356ead95df af67d598838637d4c2299843ee81236a af683e9bc3d22fcfb02bd187053d9cb8 @@ -32880,6 +33019,7 @@ b0a70dc67ef8645c2ce961e96027e2d9 b0a7c582d87a1d1ea55618ca90c7bb52 b0ab7c0702eb486eb3347d177c3ffd44 b0ad3034c7c8839c63c232605e13d336 +b0aef7571961edba6cacc8ff711c6da0 b0af8a15da5d662d4900dce3379a5191 b0b0c709f8a52d22f780261939df1b0e b0b1096dfe76c31d920e4ed312e5e507 @@ -33019,6 +33159,7 @@ b157b93be085c79207c9422cb7e9e33d b159a6d68606f60a60580a09cf7e78bc b15a58aafe4d517835c8714e9b4db95a b160692237247be24409094ee0ad95ba +b160e760b8348ba77366ce694a92d13e b1610be7216ac211e6e39bb65e566cf0 b1661ba861cda15cc1d95e2f8a7241ab b166d51fd6a36efcf180e30482c20793 @@ -33029,6 +33170,7 @@ b16ab5f054c1465229a0bdb2b42cb0de b16c1dbf1578657ea2525e8578dd009f b16c428253fa1f8767a6a605a84c7f7b b16c512ca209542f3e842a415050ced0 +b16dc1e3e70fbfc8f5eafb7781b9b902 b16fe83a264f55b75222032f5e498177 b171888a2e924ef45be770688dfc7aa6 b171bba5b2144b05de78b49586dd7d97 @@ -33072,6 +33214,7 @@ b1964c1efed01461b7091e279d2f06ab b1980824ab97d32da1e9a2f06d47012b b1991efde207664138a9323499f0583b b19996ab23c7493987fb14d8ac110be2 +b199c0054d2a9fb1f466b1912558abdf b199f67e96e0f2906a2c5cd364ed15d4 b19c6c8746bce23db93897c6312d3f5f b19ef5f16ab1f09a93a5edd42576cf08 @@ -33560,6 +33703,7 @@ b42c057630f7f4f1ad80977ca24c0121 b43016383f818427ecfc3eaa780824c2 b432216db666cf4c5e7d265d189b9c04 b432851882594e7dde9df8457ac1a47c +b432b56ac844c5181b0f6bdd45f70881 b4335405dd8e2172e413fd5bfc4e9812 b433cd7bf1314d3ab7e60b889f59ce4e b4350c822e414a85f403129d630e5274 @@ -33837,6 +33981,7 @@ b5dd414058bece579223452845680255 b5dd9625f2f49471d2b272869d97fb7f b5de16777cc623f8f38fa488c1f65eeb b5de4f8c96fb638eb8a3c0def2872f1f +b5de87bb320d2e80ed253a42134f228d b5df908d4737853dc289b64d79834f15 b5e0219ac7ea8c642579f40322c5a1c2 b5e2e3701e1f3e142fecb2587034cd5d @@ -34314,6 +34459,7 @@ b8608f844b96b2479a59197fb01ce72f b8612f05b7b3469670695a8be4a4ded7 b8632072679ea01fdad246db6191e6c1 b8638979ea8c5f41606350b3d9a0c9b0 +b869510c5e72e2bdef7e8b059b370423 b86ac394f404a5ff16da4ad61b7c2468 b86b81062bc60b5b3bfa578cc9f927ef b86b8ab06d3460afd3f600fd06384254 @@ -34552,6 +34698,7 @@ b9d1249478e3934e0451ea68b061a998 b9d1948db61cefe6b94a72d5b13c3210 b9d1ab89b7928a83c1c5ae0bdb8f0ca8 b9d5551c3540426c8a178ec81122971a +b9d589a5341a93bcbc9aaad3102af709 b9d5973e8d6f3c0fb6a0c1bc091d8ee7 b9d903a427b1c8f1c6580f189665e36d b9d938b0445f13b978d3b0c901f2bf24 @@ -34602,6 +34749,7 @@ ba1987ebfcf643da479cf344c9c2f624 ba1a07bbf50ce78eff970e3c7f506ce6 ba1a1b6172a1205ef6df5b10a80f8126 ba1b4396cd82b7d36808421798339113 +ba1c04316648ef3c986b451444cf4213 ba1c65ff320e2960b39e3a4b0a61f04f ba1c76a51ef7649a07b8dd88eb79ebe5 ba1cd4b62b9dc5ceddec44719c16c2eb @@ -34679,6 +34827,7 @@ ba7586b9b4f4338bd4a8fd7d2366243b ba777b1fbda380609d611db54fe9cbd0 ba77938b60b756ca36683bed9ad469a0 ba78b55a233407bf0c6e359028483cd0 +ba79498df405dc3b6ec95515fcba0492 ba795ec2e36ed4937bc1049b434694e4 ba798215fed31ec3da482a91de1b3445 ba79a6caffc5117e8f3196eb7ff48ef7 @@ -35090,6 +35239,7 @@ bcabd318018eb3b60c7a2f6bd81da7e3 bcadddbc7b1bb0a8beb8bf4af34ed08d bcadfa00a1c65b068f201ebd5155cc91 bcaf513b6d06d25055be70a130d0a575 +bcb0195549a6cf8acb6711a79bc02cb3 bcb076b10c0ec05737dc90f5d2978487 bcb0971bc7c2457e5971c0508af95265 bcb2844ca4b7708c2b2c14f56ab52334 @@ -35099,6 +35249,7 @@ bcb6e0b49fcb6b8b055e58c0d8ad285f bcba07074b5a3083456b52094d340ec4 bcbc6b3cf98638baa84e22efaa04f7a6 bcbe8348a4107ef688298f76ebcceb1b +bcbf6c0b4d7631cd92fc4167c628a600 bcc37ccc0025d23fcaa7403127751e46 bcc55a33f1c4c58670b00c72d9787f07 bcc56dea1d7f70b8506ad29b96f214fa @@ -35125,6 +35276,7 @@ bce3f4ccec0e8bedd5a97c3523a8e2c0 bce47f546f07dd52ec3cbcc6ae1d2a0d bce4a83b51846e724a69e2323bee2565 bce7a004287cece1a43ba5f4ed69ae95 +bce85622ce0dd3568970e9fba5f921f4 bce9aef8219ede97efbef91a3b2d9c47 bcea594f1bc067b29e22099817b40e57 bceb637ca41c7e17846f86f02871240c @@ -35444,6 +35596,7 @@ bebef1f0f1d919615911ee50eb4cc1eb bec06655838c61fc533a32ff1dc4afd8 bec7ca27ea5b58a2e59c69ec483527e0 bec938b30a9fcf92592b9f7d5991d34d +becae7cadc63c5a25160c75d78ca1373 becb39128633cf1a225e7594928d40a7 becba62c2de30cbff2c2e688f625641b beccb10c63ff39edfca6d75653118e8c @@ -35523,6 +35676,7 @@ bf233ce1a481581d687bb62331d0c643 bf2452793f3c6cd940f4b079e9da0cd2 bf2532fe6ce175b3d21a1c242e0e721f bf26b8d8177f1c6e71a1287742307721 +bf27e5ed19843984298a49acc078b212 bf27e77b52301acb2371dc7aad3f1ca9 bf2c48809c80ca195fad5fec2191ab26 bf2c64e03c31bbffa29aed80752ef228 @@ -35821,6 +35975,7 @@ c0e1c249434d9ef114efd4ad3543768a c0e23702e09766b7581ae7f9ba24c0d3 c0e2b7e3528e43ed5a8f130f6ff3939e c0e2be1e6d0fbd722988fed47babfc84 +c0e2db92479585a34541ed6bcc795201 c0e332a206dfce80abab3eecd73d6da7 c0e381d5b3bb56f23945cfb018182e20 c0e3fcc18db9d332c25c11f698565234 @@ -35949,6 +36104,7 @@ c1662b61ba2a432993aaa8adb3739bdc c1673faf93e54d0eb24fa234ff4ca448 c1687b5d908456ee2fc314ab832b9dc8 c16a2103e770626c099cf2700dc5df38 +c16b64300119ebb1367598822e1e3f59 c16c3b521a37ed3e08a70d55ee8d7baf c16c9f4eb346ca2671debfac466ef191 c16d75959c1b2a02d2ff791e07d72206 @@ -36088,6 +36244,7 @@ c20608e4d8d40a33e60061381fed91e7 c207465f7436477f030826802fa8d5fb c208199fef03e5d6d9127296094252dc c2096946a2ec9d344b3d74610cb1867b +c2096bc1a301472a6f2d723500ad13e0 c20b90b283a9917d0a192d00f47c32d9 c20bb6986c00324532f15344ac9b350d c20be8853de7d462dbef5596cccf5d06 @@ -36171,6 +36328,7 @@ c27f902332b821b43942e16ff7b8c861 c28728ffc5d176400f57423370902b3c c2873d4d00e7eb354028490a13c4e81a c2889806d60588b2a6c5390ba5416474 +c288d7cf37350be1fb837ef642330d6c c28a6e34dba002dac2d1f83496bb3034 c28b7f4eac528160c60d2c3753130d1d c28bb64316eae681ed19c65b1b2e5c85 @@ -36353,6 +36511,7 @@ c35897ffe17c91756ad6ed2f4c2df62a c359755e89002d8bb3f14da9a8d8639d c359a1d16ea94073f0b2d66e5964bbfa c35a4811bfff3d052bc72542545fa870 +c35b441f400343863df7764a84410222 c35c4e36dd18812818fff0cd81216267 c35c5529b6277d2637e258650f540de1 c35d4eca0f2bc31bd984dc15fcba06c7 @@ -36729,6 +36888,7 @@ c5732c9cc93b85f973a546d278adc2b3 c57387e1e3d8c5eccc7cdd4e98f4b205 c573d56825619ff2c67e341f64133af6 c574e021faa3b2f4d321b6e2ea0d8901 +c5757cdf6a5ca392312d7f1ae7644bfb c5759e87dd67aa5c513db85a2a6f15ec c5776d8d7c1821197bbef236424b90d5 c577889f4e7b13ad169e8898cc92d207 @@ -37042,7 +37202,9 @@ c70d865d7414d93a8614163282b6b421 c70dbe1f7c68539607ea9f81d3206ce7 c70fe8047dee6d355710a98111452cf8 c713d23be678056360d175b8a90a6599 +c7151dd6667d9a4b83d874c2fff06ccb c71676185918675711878b1bf201a765 +c717185e5e2a2fc5bed8f392d2a82e22 c7191f68f7df95fbdf341ce76fe8f952 c7195894a22c31cf14de2240a7f9b54d c71c18c57fdf1c8b6ed4b687edb3772d @@ -37182,6 +37344,7 @@ c7ed4ab01a672ac8a8470b5c60e5949f c7ee3db4a097aaa45e885581f28beafd c7ef72bf5d359bc97e3450045ecf66a9 c7efc97d246c9e47d8a7fabf127baf7a +c7efe97417d8550023d082e03b93cd57 c7f152fa93013ef1fdc8a125ae1f0fa1 c7f27f959c83fcc2d30c7e1c562ec71b c7f3861dc4325c2786e2fb0be4a81174 @@ -37198,6 +37361,7 @@ c8004d37f0385e670b0101a7391094ad c80190f89b911c4629e15ec667c36f04 c802f8231c39ecb66ff3199ca75179b3 c805f82d956c6e778b6bfcf438781101 +c8069c891db41ea68b6387ddee13a50c c806cd12f696205ef55ae1eb2751e4ba c8086993f26fee70ece394bdb7593e40 c80a7ae9a7efdd50fbc5b8bf3d342dd4 @@ -37228,6 +37392,7 @@ c82dd07b5259a426e7296e7e9c63021a c8315ee619ba9d400e8a2d848d048bbd c83335c1576ab28f94f05e79b16b49ce c835248adb6b18e34a45770d864713f8 +c83524aef20aba50fd13661f00402cf6 c835fd0a00a5705a3ffddfbb183e7c67 c836c29d4d71f5119ec19079f9bb6d94 c837b333d1b21d8b4cb31a26e8c2970b @@ -37604,6 +37769,7 @@ ca1bf0773b56678031b4681919c79b80 ca1c71d92dffaae0da278344196d1496 ca1e4be1c0117fe91d1e7b4cbd165ec5 ca210ae240da1d1adc2111e683b4420c +ca2201581ce15e472fda38cac221e01d ca2211b5e1a98fd6b697db99620ddbcf ca232fd5cd14301ac37e546340748571 ca25d41de97bcfca748a0f0171bb54f6 @@ -37797,6 +37963,7 @@ cb02fb6b1eb82a6749a34a33707be0a6 cb03f44e29bd64c4aaa6fe1107578ba8 cb0593a36375b7823c51483ed93aa8ca cb05ef898dfe11a4222868777df2d351 +cb060da0161852857ccee2e3e8f9e603 cb06fab0d6fdcb6d7933a0749b893e41 cb071fd1c728ff567043906072eba5ef cb0c3bf0d4eb67a382f509b65bdf985d @@ -37879,6 +38046,7 @@ cb7e490b9fcf18f3c58e080cd740cebb cb83e70d5011ba0b7592b6dcf1ba3a58 cb84f8064f77b117ba662cce95264f19 cb8847df0560dc0f03548ebb0cb46657 +cb88bf847190e2baec89ae004b6e8ae3 cb89e25ed6e968bba8a40162b05b512b cb8b174fd84b0bba429d6ea876546a10 cb8bc58698355fb1c19ecd8df1de900a @@ -38104,6 +38272,7 @@ ccc67030a5249bd95ff7976c8a16b845 ccc70d6b2ffa127819eb2c75ba085a63 ccc8bdeae955648928f0a092d70c2802 ccc94bf22246f2b59621b8867376509e +ccc9c282ece804ffb2d8566f5b1ee6df ccce5aff881c3ff9f3c7b8831a836efa cccffd87efad1c006a992fd6b51ea846 ccd1731ccf710229cb2152d68870e091 @@ -38330,6 +38499,7 @@ ce06ea6cfe067c1851b87f40a23549e1 ce0830eb28d609d24e520ed57f48c1fb ce091bf03b5eb8e5a0a554a1c2eb6526 ce09a4aa83f73b8ba6289af206a4f6ee +ce0d7f7d462b352e9c8ebdcccc2d77aa ce0ef093a5acd4fbd70035992b4fb98b ce0f9469d0d101c721ad1d3d8bc4bc64 ce104201c33f93c03357be91c75d5bf9 @@ -38351,6 +38521,7 @@ ce23848a8cf1f8c8508fd4306d1f5599 ce2559e7a31f4eb3e87833e6974f3a22 ce25c734868eb18baf8e4aff1ae3ca71 ce2852ee9df78fb230632e88b800ca40 +ce2a28b11f7e81e617090991bd8197da ce2a9dff1b56c4663e614a9c059fb30b ce2cf03e8f0aa07c395c29f97726e2cd ce3114f6c20302af0629e0e832d29d8e @@ -38424,6 +38595,7 @@ ce89107bcd3ec6f73bc65cd843416bee ce89b58e13f807979e5d16334d3d7ff2 ce8c6eb1286eac383024f9cd45e40aee ce8d77d0c71debdab00ff1415f84696f +ce8d835c8bc202accb2d44a772d85f15 ce8f51ed1a082d3428760f14379d179d ce91381740e566ca42bd4f6e11da5e9e ce953d2b2e4b538874cac52777279440 @@ -38471,6 +38643,7 @@ ceca246651679761c6a631fffca56a7a cecadcdb828d657c5072235c4f25ce5d cecbdd48a7b30a29f1a83ae4cbf6564d cecdbf4b860acf733f8d050f01440b79 +ced91b34e00592b8f2c74c061585f765 ced9613c7e8d848abdd4a8d0f0742244 ceda52ad07d1be2f359bbffc77b6b85b cedaeb0bd29fea2b4f2095b15c66ba57 @@ -38565,6 +38738,7 @@ cf47ac70448ffe55c1ebe9cd134386ec cf47cf93822ec8170f596853fc320fc4 cf47fc5539c47154cd7cf3f5a7426cf6 cf4b1ac9155becf5cc12a70bbb1b6dfe +cf4b65ca9526ba464c46d72b4a2f7f6d cf4db1516d6a8de520001d893caa03dd cf4f87da2071ca5957eeefc55b0a6342 cf5224b3e8c93444df7c1c10f48d6870 @@ -38574,6 +38748,7 @@ cf58148f54175490ef7d7c66dcf33361 cf5ab1096653dc27a685328ab1558631 cf5c4d4bb531be453b3dc746819ec9fd cf607dda9f8ef33c99ac204a08cf47b1 +cf611b586b6ec53c1516f535360246c4 cf6340d9a47d760680575e5d09f89e83 cf63cc21e68ee4f727a5bb02eec113e8 cf66a9d6815c68e2d18a5efa85aef5a6 @@ -38721,6 +38896,7 @@ d01c3378002d9d3e7f80c05c448671b1 d01cc450927cf0412c8e4a67afd84e46 d01edf77b7c5ad374b9fa5d14ec61632 d01ff9f9c09f3c3d7602b6ad699b0875 +d0216ded7c1d540db5e17ff51ead006e d0237d02c89c07dc906e9a50d4dcf261 d0242d282a35ddce370fc227469d4ff1 d024a6c5037aee9fc3581f665e41590f @@ -39020,6 +39196,7 @@ d1c94fe461b176c70485ba632bf8fee4 d1c9ff93baf7f0c0072128d9fe8ba453 d1cab63bf309819e9e1f1321c809f72d d1cce21a22e2449846999309891fee33 +d1ccfe4131a1a8fd573ca3717fd2b960 d1cf7ff96411f991e8b11a4964cd7819 d1d1b1dadcfd8844b4fe38126bf313cc d1d3db80fbb2f8e46d736e619860af99 @@ -39790,6 +39967,8 @@ d5e9050da29522a5c72ecca42ffd4251 d5e9d8e846f9ef388ce51744f19eb8be d5ea56e7df1b965b8805f8973a222517 d5eaaa3465574b330c6c27bd2ac23a32 +d5ecdad92f107eebf26c69c41708308b +d5ed33931fbba1fa5c1d431b175833a6 d5edcf161d7dd6cd71c2dfb31ee1c510 d5ee1bc14139d3af2afbff2392702a3c d5ef47d12ceb755348974ccd7dd4af38 @@ -41372,6 +41551,7 @@ de0547c068ccc028ba4cc1f28ed915a5 de06a737772e7c2fcf5cd9a93c5be6cc de087678f68db38ef8eef1e1f0b7b05c de0a0331c5e2266fcd2ab4ffb27f323e +de0a817a867d521766531c88c28a46bc de0d349c73f32438c8cfe529b839f49f de0f7693123fd000c1f2ccd5c48b895e de0ff48c7ac1f0c553a1039fe1799982 @@ -41465,6 +41645,7 @@ de95af2bc32fa7169b1e2c6a056d0fe4 de960d178f2d7465d2164b149b30aa64 de962d5c4da6269bd7a97f9d22159b26 de968c1d29ae9d3a568aed6627ebd56a +de97ebe125963225d471e7a662b4b98b de9a0e43a4fd52abae6862ac1a630d92 de9a25066f54a65fdb62a4cae47bd867 de9bc3035cafb7999344df70068204f1 @@ -41535,6 +41716,7 @@ defb126b13d295ea4ad9c60ff680e274 defb555d456d7a79c376e364631329b8 defd852c049e9fa5e839cd442f54276a deff411de717292a4449e17bfc04fd07 +deff5018e45579cc7f0f4ca52b9bd53d df0393f839b1b01518dd775ce2fca52b df07082bd9a99d6daa0b70a764e863c9 df074577784954d49b4d8018cf685678 @@ -41813,6 +41995,7 @@ e08fe87934d3481f1c0a0e7ef16932e1 e09094ff6ce7c88e70c91811fc4107cc e0913abdbb32ae0c29d135ebb03e7bb3 e0918b0a25ccdbc6bed7f4a741c6e298 +e091ecf5053793fecc2a56f9e1a7e3e9 e09227268450a76a703d8954590ad8e3 e0924829355e45efea09944426467943 e0943453cadeadf44136499c28af7929 @@ -42077,6 +42260,7 @@ e20ac72483f690835af33a32fb5811a1 e20b4023023c6a6cc1b53c7ad0b02c6e e20b5a2642acc6f580f1f8a07d4fad53 e20bae6839bd42bf0d421cafdab9ca29 +e2101d4e1831a45f3410076fcdd8e497 e215cad849e1045fb8d40dee1dde21ed e2180b4a195add9c677af858bf9c8c57 e219cdce32a330a21e46f5415a18d76a @@ -42123,6 +42307,7 @@ e25096716e8097a6c146cf4aed6c1d94 e25185c8dcc90fb8f9a54acf4194bf34 e253bedce4ae5b643c6cda8732e774c5 e254b87fdf5db942f03cb7f777b1272b +e255d6fa4ca0bd281ceb6563fecfbdd1 e25626d550ae59318e49c8c1e66f2d84 e256a43465cd0e9879a4949770c748b7 e2572bb759c6c887e40591d126ca2744 @@ -42165,6 +42350,7 @@ e28ceaaf23ad82f792226acd2a236a4a e28d05cc44c6d65e0a8fd8a6e23d3a69 e28d8efddf4c487340edbc63d037b1e8 e29045d56da1989bcaa63b85c9e79291 +e291f84f7ae263c3a586f7d6f3083f4b e2937cf5e89532ee32cb107d1cfb6f7c e2946ffa46639dcfb7a3b2490dc8451a e29635524cb702961a4bc1e1c6451a5a @@ -42244,6 +42430,7 @@ e2f9b78ab35ff32fe3cc1768f23f995e e2fa2ce826a7f4b3d8bb60b3dbf001ce e2fb2ff566cbe012570c854cb4616f5f e2fdb193213f6b209e12e99fc81fe96a +e300fb6218a28ac766a44dd9f96aadf5 e301a8cc8f8e06cdbcc7df996b93e94b e3028611571e9b87f48ffe12f619d1ac e3034572daf08b02ba908451489d3134 @@ -42414,6 +42601,7 @@ e3f056b4f5db9d56f6b9d3c724055a8f e3f11a553bf85c1bfdf97ba0e35851d2 e3f6e877df51f1df9e94cddd5cec1a8e e3fac11d6e21127d44281b3590374103 +e3fdce0b57119a256719f3f578564c91 e3ff5427c069674b619f0f35754da592 e3ff8893e2cd4934989081b0fe158249 e3ffc6475212b90741a4b443a1603cae @@ -42470,6 +42658,7 @@ e45340763a211b17b1311578539a3bf6 e45406e192feaad91ab832cb4e43cbff e455fe9ba335217ed0c94662d3359db4 e4560ec419d3fdddd74c91e57765c4ca +e4568f5232ae61b25b14d6cc4b0949c4 e456bb8231a0a408576e502c3448906f e458bcb8db4413c7a3c146e1c7a2b8f6 e458d1e74544951c9f909e28144b75dd @@ -42743,6 +42932,7 @@ e5a526708779178ab009e9efbd7b6586 e5a56607de28026ef38a96c8e77bf010 e5a595fd66578d8bab60de0fcaafe237 e5a5b4633e1ecd223f6a630e8532ad48 +e5a919ce8913b315e99ea813fd5e9697 e5a9ab74bbb74660771264dcab33152a e5aae759aecbc592936875ee3ef65380 e5afcfa23f8e58e7ea5371e9e4b60be6 @@ -42838,6 +43028,7 @@ e63077712c3878a0dd9086bc4d8a324d e630ba01cc5547a799cd58e4b223d476 e63215b7601518fbf2b6f38df18c5e60 e6321847b69fc36a32236a00d03cdbbf +e6327ba6e9d9e886e440c419cfd7331f e6331d488bbdfb4d92a1671110f32661 e633bf01bb94b37006a23d87572bd147 e63403867407a1b72e4b45ff127f3433 @@ -42902,6 +43093,7 @@ e680fa43b4c7aa7c8dc91debb910ec2a e68391e14be83ad5cb428c2cfec6bbfb e686d582b0292d6fbf390cf19d2676f1 e687eea879d77fd26b64c75015ad1a2f +e689059aa58fe68da552d8ced38f958f e68a34a16c13b9376e9b0fb6d25cc124 e68a653799edc964680f3dd5e9c79725 e68af299d861cca9c55b5dcde3825e50 @@ -42987,6 +43179,7 @@ e6f5a5c0d56bcee8b6b87e2dfd8b79a4 e6f78202abbcdc4dac2bb5868e7636e3 e6f9a1fc78888abc07c3e20791aea4a0 e6f9dbba94ad6804171f2bd740a60923 +e6facf93112fb88e70f707c69e14618e e6fbd802b65cefffe9b25ed27bd324a1 e6ff2ffdb517d5de5a85519cf199afeb e701c443b45866dc9f13660e45117f6b @@ -43475,6 +43668,7 @@ e9ab9f3dcdeebc709e264c39a65448a7 e9ac8769715d5c5a92a2fa5b6532d24d e9ad3bd3e05ef6016d774c6941f34b13 e9af1c6550085a8ba16c3ce96cd83158 +e9b33b7e844d616f44f5bd0d657aa550 e9b57af3ad907dafb1e08e300b765513 e9b66df100a9826f2090cbff204f69e7 e9b8c5f85c8711f633f61d555bace8e5 @@ -43951,6 +44145,7 @@ ec27878e2f71353214491d914ea6fd05 ec279ccddf12f0a3d18fc035c4ce537c ec29d87198be3d6dbd95e4e69fe94e5d ec2dc762200eb17a2191fbf72ab84a9c +ec2dc7c418a14e64c5a22c36ec3ecb3b ec3273babfe174a70640325c63e72c1c ec34dc6434f296c868a4d555d9ad9cb2 ec34ff7303ce3738e5324d0962cb02fc @@ -44080,6 +44275,7 @@ ece6bcafa34152f0befdc0b2a9d2ec5c ece9ceaa2fbef197c53066993a5f5ea5 ecec18d4fe0d2df913dadf22afdd14b8 ecec7bb7af409223d2b8fa3bcc5f41f9 +ecec9c787a6a76fd7f81c7f75706ed25 ecedc3df34cf0d9f97ab7fa01cf4b317 ecf30f633e5795d81ef632f5350b9162 ecf3f65c7e8d89c8a55e7c2605674862 @@ -44136,6 +44332,7 @@ ed24431c0c405ff288ac1375110e7a73 ed24784023861085d59efd85b6e400c8 ed2488672bfa641b2313f69e0708fa9a ed258eabf8c9d1809b6238b1a2d293fb +ed26c6de499b07009552116a8b481230 ed282b8104b62b9de984317bb1ee0b3f ed2aa2c23a4db744a6984190c21fe371 ed2afcafc1863c1efd1b62210e4e73d8 @@ -44287,6 +44484,7 @@ eddbcb14280502430c213441f257c3d7 eddd69004278a4ecd2a06482cf906f3a eddda44e26cc919e4ad69bd5c0927c6b ede0c86505f940b6bd639a0cf034a973 +ede139c05fb1da3b51bcf938a8becadf ede3f740335cdc85a1f8a865b275a307 ede4666eb8603ec8112601c040d49b45 ede56a182eeebf09b8fcd670fb5acbc0 @@ -44430,6 +44628,7 @@ eebd8e12c2539a84823217b59fdbee5c eebf56ab8e0733dd671cb84159d26dfc eebf99523aad6a142691ddcff3bf0d4f eec08ba43414334cf594bafcdfefcee8 +eec103174c5d7f98897d7ef1cf0e09db eec13a549c6ebfbd2b9a63969082a36d eec144ed5e73fb743b5fa0440dfc552e eec3aac8fd33f752419878a13e5dcbd2 @@ -44564,6 +44763,7 @@ ef6bd3465a28ee9cf6aa24207b979f6a ef6c83b9b535e5af29b362bb40a44dd7 ef6f1365b31c8321c0788bb9dd19a040 ef70325a61dbbed6721bb04534012167 +ef7111c4250ba0f2625eecb7bf65c242 ef71f4c46ae1d6aa3ff903a2385b220f ef72c2aabd5e34ae4ad402d53e020671 ef738a2039abb790e012fbe54bd9221a @@ -44849,6 +45049,7 @@ f0dbb7400d4771a2bfac48dc72ac5f21 f0dcf4ec180d7a8093e3d590f2224317 f0df3cf5f8e8d558a4e86ff6fc7fb7ae f0e1c5720ea75497b0ec7617d33a9dd6 +f0e31f2396324b201a640eaffa3885e9 f0e7859d1357b295aedeab2471c848c8 f0eca4761d3b9cfce2058abbe1883ce1 f0ed7ae2242b3f940d8f4abe6329c851 @@ -45552,6 +45753,7 @@ f4b9ec833fad6a119cd6f418e030896a f4bb276b31acc783b99bb89be6caf53c f4be69e55b2ede3b072139b0d56192d3 f4bfe11702f8cc47bb5fd8da527dcdfa +f4c02e07b052a26f8c8fa316b24239f5 f4c03c0836ab1df0a42c1e61f86a764c f4c33bc101b9e014ccd3c19292bccc68 f4c54000cb8b1372ca72b28a7eaab58d @@ -45894,6 +46096,7 @@ f6896094fedd9fa8995251bcdfdad4ae f68ae7e7be20b1fa2428dc4bbe49fd09 f68da1139a3ba57c1d66225da0c585ad f68e9bade32011ddace66e5fe8788711 +f690810fdc0352bcab870660941742c7 f6943608057c906311c8652716b0bfef f6945e6c3a8039599c7191de19d0118b f694a9f976383a7ede6f8fb270a9e7f0 @@ -46053,6 +46256,7 @@ f76d67994b24dd782890525ec57f8856 f76ec17c4c00bcf343402b3ba6f80002 f770d74061d61bb4a19e59e48ead279f f77133534e6e670c72354ec899b763ae +f7721c84c0215d75f874345dd3cf786c f7760dfb56e99042adc055f6efcc5437 f778cbab9c7ff1d9b9faa0fcef277150 f77a31feb2531ea362e95f1f445e18be @@ -46179,6 +46383,7 @@ f81f29c21949f6ec4874a52c1a8bcb14 f8203f487719248050a6d2242dd4c8c6 f820546f4d19b888a5c1fd9e9af3da0a f8212c07cf2c06e62f136d0f2220bc9c +f824f9a2fc66f013aa12a4883b962e24 f825f4f6913e4a2dfe3bbf1b7ed68c65 f8267072405d07590851124f661f636c f827756d8de0937fcde5329c7dd89007 @@ -47003,6 +47208,7 @@ fc9ce3ca53307a6843bd148bf5ae0fc0 fc9dd3a43f0ae139e9ae5aadd80ddec0 fca0e7ac7298000f82a820c017425f4c fca1776e9cf97ab5d32aef9dc189b818 +fca56a428b5c13372e3b912c3d05d519 fca8db86d376d4e845a379fd2f3ead06 fca981982b5301f980c50ac2e5a757e2 fcafddd71789f3660b4211c932ae0e3f @@ -47207,6 +47413,7 @@ fdcdb782389e3249531534951281a11f fdd18f0a1db219bea88a0ff9fdca4b63 fdd329cba0052c33269ab23ea9c63e02 fdd3325911a4fce988f6fc3d9c66f64b +fdd3c0e9f3af94072deaeb9fa11b9a15 fdd727deef6209b900007f7cba9898cb fddd7eb9aacbf44798a9d7d493873f80 fddef0c27f2c7ba703a006912a35bf9f @@ -47368,6 +47575,7 @@ fec024dfdde6e347262968adaf10367b fec541d7a8a95181fe9de32cef490420 fec5aa7042d154bf4fc4baf62a450045 fec629773270160ba4110b9871935213 +fec6ae44e7a9512e320cd7c8752f39ae fec6c4dc0fb8c6387ff66142a4390802 fec6f80d492c6e5d906a129e990366ce fec8460590d596f617dbe432f06922f4 From 913dfbde3cc02c6775cb8d2cb547a679ddce540f Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Thu, 29 May 2025 07:26:13 +0200 Subject: [PATCH 77/82] [fix] plugins: currency processor bug Fix C&P typo from https://github.com/searxng/searxng/pull/4836 Closes: https://github.com/searxng/searxng/issues/4861 --- searx/data/currencies.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/searx/data/currencies.py b/searx/data/currencies.py index a4f2901f0..0721037a1 100644 --- a/searx/data/currencies.py +++ b/searx/data/currencies.py @@ -51,5 +51,5 @@ class CurrenciesDB: def iso4217_to_name(self, iso4217, language): self.init() - iso4217_languages: dict = self.cache.get(key=iso4217, default={}, ctx=self.ctx_names) + iso4217_languages: dict = self.cache.get(key=iso4217, default={}, ctx=self.ctx_iso4217) return iso4217_languages.get(language, iso4217) From 0b4c47a123ba2192990178ff94da7d347d3da9c6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 May 2025 07:43:50 +0000 Subject: [PATCH 78/82] [upd] web-client (simple): Bump the minor group Bumps the minor group in /client/simple with 4 updates: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js), [eslint](https://github.com/eslint/eslint), [sharp](https://github.com/lovell/sharp) and [webpack](https://github.com/webpack/webpack). Updates `@eslint/js` from 9.26.0 to 9.27.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/commits/v9.27.0/packages/js) Updates `eslint` from 9.26.0 to 9.27.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v9.26.0...v9.27.0) Updates `sharp` from 0.34.1 to 0.34.2 - [Release notes](https://github.com/lovell/sharp/releases) - [Commits](https://github.com/lovell/sharp/compare/v0.34.1...v0.34.2) Updates `webpack` from 5.99.8 to 5.99.9 - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.99.8...v5.99.9) --- updated-dependencies: - dependency-name: "@eslint/js" dependency-version: 9.27.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: minor - dependency-name: eslint dependency-version: 9.27.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: minor - dependency-name: sharp dependency-version: 0.34.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: minor - dependency-name: webpack dependency-version: 5.99.9 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: minor ... Signed-off-by: dependabot[bot] --- client/simple/package-lock.json | 1123 +++---------------------------- client/simple/package.json | 8 +- 2 files changed, 114 insertions(+), 1017 deletions(-) diff --git a/client/simple/package-lock.json b/client/simple/package-lock.json index e1f183493..f05ee9e21 100644 --- a/client/simple/package-lock.json +++ b/client/simple/package-lock.json @@ -8,11 +8,11 @@ "name": "simple", "version": "1.0.0", "devDependencies": { - "@eslint/js": "^9.26.0", + "@eslint/js": "^9.27.0", "copy-webpack-plugin": "^13.0.0", "css-loader": "^7.1.2", "edge.js": "^6.2.1", - "eslint": "^9.26.0", + "eslint": "^9.27.0", "filemanager-webpack-plugin": "^8.0.0", "globals": "^16.1.0", "ionicons": "^8.0.8", @@ -20,7 +20,7 @@ "less": "^4.3.0", "less-loader": "^12.3.0", "normalize.css": "^8.0.1", - "sharp": "^0.34.1", + "sharp": "^0.34.2", "style-loader": "^4.0.0", "stylelint": "^16.19.1", "stylelint-config-standard": "^38.0.0", @@ -31,7 +31,7 @@ "vite": "^6.3.5", "vite-plugin-static-copy": "^3.0.0", "vite-plugin-stylelint": "^6.0.0", - "webpack": "^5.99.8", + "webpack": "^5.99.9", "webpack-cli": "^6.0.1" } }, @@ -172,9 +172,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.0.tgz", - "integrity": "sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", + "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", "dev": true, "license": "MIT", "optional": true, @@ -675,9 +675,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", - "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -725,13 +725,16 @@ } }, "node_modules/@eslint/js": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.26.0.tgz", - "integrity": "sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz", + "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==", "dev": true, "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, "node_modules/@eslint/object-schema": { @@ -745,13 +748,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", - "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", + "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.13.0", + "@eslint/core": "^0.14.0", "levn": "^0.4.1" }, "engines": { @@ -825,9 +828,9 @@ } }, "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.1.tgz", - "integrity": "sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz", + "integrity": "sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==", "cpu": [ "arm64" ], @@ -848,9 +851,9 @@ } }, "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.1.tgz", - "integrity": "sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz", + "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==", "cpu": [ "x64" ], @@ -1024,9 +1027,9 @@ } }, "node_modules/@img/sharp-linux-arm": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.1.tgz", - "integrity": "sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz", + "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==", "cpu": [ "arm" ], @@ -1047,9 +1050,9 @@ } }, "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.1.tgz", - "integrity": "sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz", + "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==", "cpu": [ "arm64" ], @@ -1070,9 +1073,9 @@ } }, "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.1.tgz", - "integrity": "sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz", + "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==", "cpu": [ "s390x" ], @@ -1093,9 +1096,9 @@ } }, "node_modules/@img/sharp-linux-x64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.1.tgz", - "integrity": "sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz", + "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==", "cpu": [ "x64" ], @@ -1116,9 +1119,9 @@ } }, "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.1.tgz", - "integrity": "sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz", + "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==", "cpu": [ "arm64" ], @@ -1139,9 +1142,9 @@ } }, "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.1.tgz", - "integrity": "sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz", + "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==", "cpu": [ "x64" ], @@ -1162,9 +1165,9 @@ } }, "node_modules/@img/sharp-wasm32": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.1.tgz", - "integrity": "sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz", + "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==", "cpu": [ "wasm32" ], @@ -1172,7 +1175,7 @@ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { - "@emnapi/runtime": "^1.4.0" + "@emnapi/runtime": "^1.4.3" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -1181,10 +1184,30 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz", + "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.1.tgz", - "integrity": "sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz", + "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==", "cpu": [ "ia32" ], @@ -1202,9 +1225,9 @@ } }, "node_modules/@img/sharp-win32-x64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.1.tgz", - "integrity": "sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz", + "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==", "cpu": [ "x64" ], @@ -1330,28 +1353,6 @@ "node": ">=8" } }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.2.tgz", - "integrity": "sha512-H9vwztj5OAqHg9GockCQC06k1natgcxWQSRpQcPJf6i5+MWBzfKkRtxGbjQf0X2ihii0ffLZCRGbYV2f2bjNCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.3", - "eventsource": "^3.0.2", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.24.1" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2232,43 +2233,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { "version": "8.14.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", @@ -2576,27 +2540,6 @@ "readable-stream": "^3.4.0" } }, - "node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.0", - "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", - "on-finished": "^2.4.1", - "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -2734,37 +2677,6 @@ "@keyv/serialize": "^1.0.3" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -3011,49 +2923,6 @@ "dev": true, "license": "MIT" }, - "node_modules/content-disposition": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, "node_modules/copy-anything": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", @@ -3098,20 +2967,6 @@ "dev": true, "license": "MIT" }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/cosmiconfig": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", @@ -3389,20 +3244,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3491,21 +3336,6 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/edge-error": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/edge-error/-/edge-error-4.0.2.tgz", @@ -3570,13 +3400,6 @@ "node": ">=18.16.0" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" - }, "node_modules/electron-to-chromium": { "version": "1.5.101", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.101.tgz", @@ -3591,16 +3414,6 @@ "dev": true, "license": "MIT" }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -3692,26 +3505,6 @@ "dev": true, "license": "MIT" }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/es-module-lexer": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", @@ -3719,19 +3512,6 @@ "dev": true, "license": "MIT" }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/esbuild": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", @@ -3796,13 +3576,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "license": "MIT" - }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -3817,9 +3590,9 @@ } }, "node_modules/eslint": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.26.0.tgz", - "integrity": "sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz", + "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3827,14 +3600,13 @@ "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.20.0", "@eslint/config-helpers": "^0.2.1", - "@eslint/core": "^0.13.0", + "@eslint/core": "^0.14.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.26.0", - "@eslint/plugin-kit": "^0.2.8", + "@eslint/js": "9.27.0", + "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", - "@modelcontextprotocol/sdk": "^1.8.0", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", @@ -3858,8 +3630,7 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "zod": "^3.24.2" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" @@ -3980,16 +3751,6 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -4000,111 +3761,6 @@ "node": ">=0.8.x" } }, - "node_modules/eventsource": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventsource-parser": "^3.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/eventsource-parser": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.1.tgz", - "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.0", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express-rate-limit": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", - "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/express-rate-limit" - }, - "peerDependencies": { - "express": "^4.11 || 5 || ^5.0.0-beta.1" - } - }, - "node_modules/express/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4249,24 +3905,6 @@ "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -4325,26 +3963,6 @@ "node": ">=8" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -4406,45 +4024,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -4548,19 +4127,6 @@ "dev": true, "license": "MIT" }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -4578,19 +4144,6 @@ "node": ">=8" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -4634,29 +4187,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -4825,16 +4362,6 @@ "@stencil/core": "^4.30.0" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", @@ -4944,13 +4471,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "dev": true, - "license": "MIT" - }, "node_modules/is-what": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", @@ -5337,16 +4857,6 @@ "semver": "bin/semver" } }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", @@ -5365,16 +4875,6 @@ "dev": true, "license": "CC0-1.0" }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/meow": { "version": "13.2.0", "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", @@ -5388,19 +4888,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -5533,16 +5020,6 @@ "node": ">= 4.4.x" } }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -5587,42 +5064,6 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -5751,16 +5192,6 @@ "node": ">= 0.10" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -5798,16 +5229,6 @@ "dev": true, "license": "MIT" }, - "node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -5839,16 +5260,6 @@ "node": ">=6" } }, - "node_modules/pkce-challenge": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", - "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.20.0" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -6146,20 +5557,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -6178,22 +5575,6 @@ "node": ">=6" } }, - "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -6225,32 +5606,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.6.3", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -6457,23 +5812,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6534,7 +5872,8 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true }, "node_modules/sax": { "version": "1.4.1", @@ -6619,9 +5958,9 @@ "license": "BSD-3-Clause" }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", "bin": { @@ -6631,52 +5970,6 @@ "node": ">=10" } }, - "node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.5", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/send/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -6687,29 +5980,6 @@ "randombytes": "^2.1.0" } }, - "node_modules/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "license": "ISC" - }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -6724,16 +5994,16 @@ } }, "node_modules/sharp": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.1.tgz", - "integrity": "sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz", + "integrity": "sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "color": "^4.2.3", - "detect-libc": "^2.0.3", - "semver": "^7.7.1" + "detect-libc": "^2.0.4", + "semver": "^7.7.2" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -6742,8 +6012,8 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.1", - "@img/sharp-darwin-x64": "0.34.1", + "@img/sharp-darwin-arm64": "0.34.2", + "@img/sharp-darwin-x64": "0.34.2", "@img/sharp-libvips-darwin-arm64": "1.1.0", "@img/sharp-libvips-darwin-x64": "1.1.0", "@img/sharp-libvips-linux-arm": "1.1.0", @@ -6753,15 +6023,16 @@ "@img/sharp-libvips-linux-x64": "1.1.0", "@img/sharp-libvips-linuxmusl-arm64": "1.1.0", "@img/sharp-libvips-linuxmusl-x64": "1.1.0", - "@img/sharp-linux-arm": "0.34.1", - "@img/sharp-linux-arm64": "0.34.1", - "@img/sharp-linux-s390x": "0.34.1", - "@img/sharp-linux-x64": "0.34.1", - "@img/sharp-linuxmusl-arm64": "0.34.1", - "@img/sharp-linuxmusl-x64": "0.34.1", - "@img/sharp-wasm32": "0.34.1", - "@img/sharp-win32-ia32": "0.34.1", - "@img/sharp-win32-x64": "0.34.1" + "@img/sharp-linux-arm": "0.34.2", + "@img/sharp-linux-arm64": "0.34.2", + "@img/sharp-linux-s390x": "0.34.2", + "@img/sharp-linux-x64": "0.34.2", + "@img/sharp-linuxmusl-arm64": "0.34.2", + "@img/sharp-linuxmusl-x64": "0.34.2", + "@img/sharp-wasm32": "0.34.2", + "@img/sharp-win32-arm64": "0.34.2", + "@img/sharp-win32-ia32": "0.34.2", + "@img/sharp-win32-x64": "0.34.2" } }, "node_modules/shebang-command": { @@ -6787,82 +6058,6 @@ "node": ">=8" } }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -6955,16 +6150,6 @@ "source-map": "^0.6.0" } }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -7666,16 +6851,6 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, "node_modules/truncatise": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/truncatise/-/truncatise-0.0.8.tgz", @@ -7703,44 +6878,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", - "dev": true, - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/undici-types": { "version": "6.20.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", @@ -7758,16 +6895,6 @@ "node": ">= 10.0.0" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/update-browserslist-db": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", @@ -7816,16 +6943,6 @@ "dev": true, "license": "MIT" }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/vite": { "version": "6.3.5", "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", @@ -8024,9 +7141,9 @@ } }, "node_modules/webpack": { - "version": "5.99.8", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz", - "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", + "version": "5.99.9", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", + "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", "dev": true, "license": "MIT", "dependencies": { @@ -8276,26 +7393,6 @@ "engines": { "node": ">= 10" } - }, - "node_modules/zod": { - "version": "3.24.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz", - "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-to-json-schema": { - "version": "3.24.5", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", - "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", - "dev": true, - "license": "ISC", - "peerDependencies": { - "zod": "^3.24.1" - } } } } diff --git a/client/simple/package.json b/client/simple/package.json index 94ca1e189..55f7f8e4a 100644 --- a/client/simple/package.json +++ b/client/simple/package.json @@ -9,11 +9,11 @@ "icons.html": "node theme_icons.js" }, "devDependencies": { - "@eslint/js": "^9.26.0", + "@eslint/js": "^9.27.0", "copy-webpack-plugin": "^13.0.0", "css-loader": "^7.1.2", "edge.js": "^6.2.1", - "eslint": "^9.26.0", + "eslint": "^9.27.0", "filemanager-webpack-plugin": "^8.0.0", "globals": "^16.1.0", "ionicons": "^8.0.8", @@ -21,7 +21,7 @@ "less": "^4.3.0", "less-loader": "^12.3.0", "normalize.css": "^8.0.1", - "sharp": "^0.34.1", + "sharp": "^0.34.2", "style-loader": "^4.0.0", "stylelint": "^16.19.1", "stylelint-config-standard": "^38.0.0", @@ -32,7 +32,7 @@ "vite": "^6.3.5", "vite-plugin-static-copy": "^3.0.0", "vite-plugin-stylelint": "^6.0.0", - "webpack": "^5.99.8", + "webpack": "^5.99.9", "webpack-cli": "^6.0.1" } } From 44471bef35074ee03d9ff44c396c8bbf4574948d Mon Sep 17 00:00:00 2001 From: searxng-bot Date: Fri, 30 May 2025 07:10:07 +0000 Subject: [PATCH 79/82] [l10n] update translations from Weblate 0f55f2438 - 2025-05-29 - sandijs 109f7dcb8 - 2025-05-26 - ngf d2ba9b3d0 - 2025-05-26 - artnay 33c6f23bf - 2025-05-26 - realkendrick_fr --- searx/translations/es/LC_MESSAGES/messages.mo | Bin 21639 -> 21792 bytes searx/translations/es/LC_MESSAGES/messages.po | 17 ++-- searx/translations/fi/LC_MESSAGES/messages.mo | Bin 20666 -> 21219 bytes searx/translations/fi/LC_MESSAGES/messages.po | 37 +++++---- searx/translations/he/LC_MESSAGES/messages.mo | Bin 22822 -> 23444 bytes searx/translations/he/LC_MESSAGES/messages.po | 30 +++---- searx/translations/lv/LC_MESSAGES/messages.mo | Bin 10901 -> 13480 bytes searx/translations/lv/LC_MESSAGES/messages.po | 74 ++++++++++-------- 8 files changed, 85 insertions(+), 73 deletions(-) diff --git a/searx/translations/es/LC_MESSAGES/messages.mo b/searx/translations/es/LC_MESSAGES/messages.mo index f27636668dcb0ecae5d23c22234feb5f65f295cb..bf052ca7a44846aca07bdcd5ff865da50c87cf2a 100644 GIT binary patch delta 5680 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 J-mq~o{{!rsc;Wy6 delta 5529 zcmYM%32;!w8Nl%kBqRh9AY7sm0|bdlK?qT92tq`WA{rDqEl_n-go^P1sm~UtqEL%e z2L};!)Tkg*8Zj0FtvZ$>)QJaBrAp0E8PQP-f)qvi|MPaH48w2ty*4QL&jtc`dMZo!uL z5uSwy&;UZ0bev9T|BKN1#$yZS4_8xg!0Bj*Sy+yD;iI@7+u_JF*#@k}=6EaG?{+M} zg=l7ei>CvPu0sQSCD!*~G4&=)$XduI+`-rtC*fptk2awLz8dR0&=ohv`aX1`CUgtG zLbvXFbcHR+H^tBnU084Q`Kah+h2%en2h}_cnh3nCQ6EuLO=)|khiJn9Iy&T<& z`PBc4E@(HpfG^Pu9YNb4M+3+pjYZhW=!!Ss0NjG^^c`Mb z-NUK{5$k;o8>75EcOFtNjn6f&_MT|oo-{7vkQ@1VEj z2duzB_{e zk4M`rMN_>i{ycBNl4WOudeNaCV|wau74|8?^sXG_Z_bWEG2hk^d|TYj|LTXRs9i zfV2(!uo|0{aFy_CVeL}&# z*^1ulchQIspnLi`mg8~E!LqXSLsWse)W>2Ayb5hU4ITJq%*I=hHG~D&3ZFvXZ$QUO z>L@r+Lwv9u9k3DYxEH76DKxO@oE*= zG28oJM4=TAO3(o+(2NX=UV;Wzjm>ZhI>7Y!d^XzuCTxy(#Ptx_7=^BUTyzrJaTey|JamA2&;cGq16+ZAm>xshuR}9ckB+|u4Rj|OP$SxJ z@A>546@APD@9n4Po}ENjaBklaeul%*+p!iKGq`@}0E@XA{74TEp!d2K@4y}C8K~@^ zUgNRop}ZAc=x@-4{;ogy_r)q6IN(O~_khjlR_wwV_z~J}P(?bycyuLiMR#F)>hGh! zCmcjGbP`8l)&=SNOVJ<8)6s=4N+^_4cozBHAT*+1ysyxJ$}UV(-VY~IABL5<0@>d1 zKAQSw1JVgQpn(^nAF5J3y`|WT`XnsC1pR;|D<~NGPBh~E(Szs;zeXcIhQqKUy=t)< zo%jSgaO*+o;jBOdABb-0aCE{c=-Id>x)6JM|L>>Jh8G)f2yR99^uKr!cH%4Jr*|?s z@Mi3Qui@##gbutnzCVCw@(>nd4ucwKZ*+kp(C1^YqxXLf1rNoq(FvBu`on1IR-vhU z7QF@A(Tweh?+?ZLQFNk~?4K(>3vJg2&%le&0H&hz%*Gt=|Bdm*d~~9P=*m}PN8FEI zpQF(e=!#EaXKc;BxaY-ay&Mg6EP4wjqk+uEwsj@oqHG2DJTq$hi#vMguAwksjg->=H}l*cC;1R zu?>3odPe)=ZPbS#eZxldQ+ycR(;v}{wHck>jzTo>erT!(qwPkb<6eoKFqs}7)Sw*_ z?21c}8yKELuiK|+V8_q_T37KqJ$6P{JOq7yIofXuo{Nv5fxd>e+m5!|hs=|N&nR5Q zgRG0wUo57gkuFD5{1m#f7tjG-LB6WtZRFb%PGNr>I40eSIcU2(uoxf2Y}|+*zIyci zLG0xH|DJ+}r{Iz_Ro&2f3A*wD*bT>F4$eioggeod{W(70iJpZI&^BsY3ftLnoLOorg}m2>n@bA3Dxz$>Hpe=2;(GMZy^a1H zKZ@63{>1cs&BVIWj$5vcQt)}*mj$S2T2{mFrGd>bCXUn_IVUXw@121FphXKmY&$ diff --git a/searx/translations/es/LC_MESSAGES/messages.po b/searx/translations/es/LC_MESSAGES/messages.po index f7e8954a4..1883ae4d4 100644 --- a/searx/translations/es/LC_MESSAGES/messages.po +++ b/searx/translations/es/LC_MESSAGES/messages.po @@ -44,20 +44,22 @@ # curtwheeler , 2025. # return42 , 2025. # Atul_Eterno , 2025. +# realkendrick_fr , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2025-05-13 19:13+0000\n" -"PO-Revision-Date: 2025-04-24 14:06+0000\n" -"Last-Translator: Atul_Eterno \n" +"PO-Revision-Date: 2025-05-27 03:58+0000\n" +"Last-Translator: realkendrick_fr \n" +"Language-Team: Spanish \n" "Language: es\n" -"Language-Team: Spanish " -"\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.11.4\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -557,7 +559,7 @@ msgstr "Lista negra de Ahmia" #: searx/plugins/ahmia_filter.py:33 msgid "Filter out onion results that appear in Ahmia's blacklist." -msgstr "" +msgstr "Filtrar resultados de onion que aparezcan en la lista negra de Ahmia." #: searx/plugins/calculator.py:38 msgid "Basic Calculator" @@ -2132,4 +2134,3 @@ msgstr "ocultar video" #~ msgid "proxied" #~ msgstr "por un proxy" - diff --git a/searx/translations/fi/LC_MESSAGES/messages.mo b/searx/translations/fi/LC_MESSAGES/messages.mo index 5ec82f6cf9f1e7d9f843add0c9a80284ec2beeb5..651bb25d13b1b60b69561a5d448be8c3d51672c7 100644 GIT binary patch delta 6123 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 delta 5607 zcmYM%dr;O@9>?(?a#6V|N{A>vf*=>UlcFF};sw#fRl==RdrWqRP;dcV+0@4|9gDJI zL`-v6vuJeG8Eu|&4Vl$M_K(=r*%GsHkwsh;Z$&gNHdg!o@H@NfG``L`zjOJ1&pE%} zW8EKmG#&DAT@UtZu=q3I!?MQUMqkzb|K}egEz6r~2advS48bR+J($XP>Z4Horr}`B zHO@sJ>V@cs#psVO<1EW^S!*c-&~OTu;05%;u&3++5yp7b#FO!9%)wz;jSR82V+8I; zCDMcn>?=&g$EfiMp|&o_GW`@HhtJN2ts%;6R|p zE>wUIOg&(tV-iBHj>0M4Tp{t~s&b=1In#_utZ`j4oL z{5fa^7=_xQcvSynRA8Ctz+B8mCu-aQRR2%Lu>UGF(V#%iqB3Yh1=58h@VjBKNA;^T{tjnT--ueL1%vRC%XH{OWqcE-U@z*dxV-0cz_v zq86@2{#|XwIi;D zMLsOj-jOiWQ8-XLlZ0AmGHQWYro9j~ekm%^Qd6(PK-RYoQBY(jkyqDhLS=dx6~HY_ z#_v!IL`K;Qq@n`IM%|rxsLNW6^RNsj;VD!=-KZUYh&s|fbm_ql6cW*Ug8iDLV+QrL zs0BVm9f2DaU<+!34kRY)CMv_hoC7}#)+p5TL}Lajku20ab5J``9L@f#<7OJNal7ew z9<`+xQO~a+-zKXAwNw4bC%_uSEIN`1^umd#g(jf_%fuRd5xue9JimtV)NjYI|CFuZ ziI%k(r{asa6FF|H2Q$$xmK%Zh=bf+N9>Xfx{UUqihWr!f!vP?s!|8>KUzg}PiX@R#n$4)n(cRABF;0yv7w z)QwvBw5gv(`njwN6qM0lO@}W`{cBV2G~Pl@_yC9EBaB7eTrCiX{+NWCFAEjOGw6r; zsPRSUi^~V({7We)vT7WJuc9W{Y}&V>CU_G)@g4JgKL$`ggbLsUYMzfx{S0cJbEt*? zf&q95)vp7+_5Rrw_ycNUefU-PMrGuO`tprHO_YGjJPkF^3{<}Y)FoVu z3Sbo~^EJi|=+eN~CpQ8G=p?2yjYJqF0K<}dh>P3y~M#dKs5s08LDbN(+;SV4nci*xw72fzQQ2@a&%9UD;}o@Uf*bOpJ$)?HM;5MCW+ z7LGv}gGyjB>bD{X`9ZacF(23Aa6GGje=Vf&cN(-sF7veP#I50UB=m{ohUHvMX3JEaU^cRVAi)9C@8Zdr~p1j zWq1LV`IqRxe;PgbEb7ulqIMt_l|Zs_3Widjfmv8=>h-9=ju}s4klz1KDCn}aqB6UJ zim(ec(IZr5fy_1vLs5aIpcc->88{cU!0X1HSV(;rj>B%$I-dO0D)5o$(gfiY3NQ+_ zKm}?`U&kaoh{1RfwWVDchxc&c^_yZ*3T#8C)?R54(fIyF#^>u0(Ci~QGsV*2|JNyKp~zYG5hNP3P?seiHPK6`Ojo1&zkyn4w|TxF$5KCxwb+W@SUB4b z?0HO~{xU}6ZY*MbtBJxU95%=PnS2{Fs2{~&VJB+g?78+g`(Q4yw&GYrBo!V^bb*O;%qULdZK*5v32~HS|sK^Z$y8NY(cYy;}cwgvTLvIn(Ohf#qX zMJ@apYUlojn&&bqp$=5PE=hC^OchF@^w}2anr{I%&cl@tf(rjs&*z> zOIjM&v@|+amkzW!9o5dtGCgrla#XKdT~bn3;aFQ!Q(oP2%CThOFB~NsN~;~^6{||> icg>6OsVZ?)luvS>n>Wg1=>Mjuzg4i;eQ, 2025. # Ricky-Tigg , 2025. # return42 , 2025. +# artnay , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2025-05-13 19:13+0000\n" -"PO-Revision-Date: 2025-03-31 18:08+0000\n" -"Last-Translator: return42 \n" +"PO-Revision-Date: 2025-05-27 03:58+0000\n" +"Last-Translator: artnay \n" +"Language-Team: Finnish \n" "Language: fi\n" -"Language-Team: Finnish " -"\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.11.4\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -526,15 +528,15 @@ msgstr "Tiedoston laatu" #: searx/plugins/ahmia_filter.py:32 msgid "Ahmia blacklist" -msgstr "" +msgstr "Ahmia-estolista" #: searx/plugins/ahmia_filter.py:33 msgid "Filter out onion results that appear in Ahmia's blacklist." -msgstr "" +msgstr "Suodata pois Ahmian estolistalla olevat onion-tulokset." #: searx/plugins/calculator.py:38 msgid "Basic Calculator" -msgstr "" +msgstr "Peruslaskin" #: searx/plugins/calculator.py:39 msgid "Calculate mathematical expressions via the search bar" @@ -554,7 +556,7 @@ msgstr "hash-digest" #: searx/plugins/hostnames.py:123 msgid "Hostnames plugin" -msgstr "Isäntänimien laajennus" +msgstr "Isäntänimien liitännäinen" #: searx/plugins/hostnames.py:124 msgid "Rewrite hostnames, remove results or prioritize them based on the hostname" @@ -596,16 +598,16 @@ msgstr "Selaimesi tunnistetiedot: " #: searx/plugins/tor_check.py:42 msgid "Tor check plugin" -msgstr "Tor-verkon tarkistus lisäosa" +msgstr "Tor-verkon tarkistusliitännäinen" #: searx/plugins/tor_check.py:44 msgid "" "This plugin checks if the address of the request is a Tor exit-node, and " "informs the user if it is; like check.torproject.org, but from SearXNG." msgstr "" -"Tämä lisäosa tarkistaa, tuleeko pyyntö TOR exit nodesta, ja ilmoittaa " -"käyttäjälle, jos se on, samalla tavalla kuin check.torproject.org, mutta " -"SearXNGista." +"Tämä liitännäinen tarkistaa, tuleeko pyyntö TOR-poistumissolmusta, ja " +"ilmoittaa käyttäjälle, jos niin on; samalla tavalla kuin " +"check.torproject.org, mutta SearXNGista." #: searx/plugins/tor_check.py:65 msgid "Could not download the list of Tor exit-nodes from" @@ -629,7 +631,7 @@ msgstr "Poista seurantapalvelinten argumentit palautetusta osoitteesta" #: searx/plugins/unit_converter.py:49 msgid "Unit converter plugin" -msgstr "" +msgstr "Yksikkömuuntajan liitännäinen" #: searx/plugins/unit_converter.py:50 msgid "Convert between units" @@ -1119,7 +1121,7 @@ msgstr "Tämä on luettelo SearXNG:n pikavastausmoduuleista." #: searx/templates/simple/preferences/answerers.html:29 msgid "This is the list of plugins." -msgstr "Tämä on lista lisäosista." +msgstr "Tämä on lista liitännäisistä." #: searx/templates/simple/preferences/autocomplete.html:2 msgid "Autocomplete" @@ -1179,6 +1181,8 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" +"Asetuksesi sisältävä URL-osoite. Tätä URL-osoitetta voi käyttää asetusten " +"palauttamiseen eri laitteella." #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -2086,4 +2090,3 @@ msgstr "piilota video" #~ msgid "proxied" #~ msgstr "välityspalvelimella" - diff --git a/searx/translations/he/LC_MESSAGES/messages.mo b/searx/translations/he/LC_MESSAGES/messages.mo index 83e05011fdf47b593aed542cbc48c6c0d4e8ff96..c5e8058d3a8cdc9e92eddfd849196a63f3b92356 100644 GIT binary patch delta 6121 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 delta 5538 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 cJ+BrQ`}jX!R`tAV)|}bpRn?wrr8~X<4, 2025. # shoko , 2025. # RoyBarina , 2025. +# ngf , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2025-05-13 19:13+0000\n" -"PO-Revision-Date: 2025-01-30 05:21+0000\n" -"Last-Translator: RoyBarina " -"\n" +"PO-Revision-Date: 2025-05-27 03:58+0000\n" +"Last-Translator: ngf \n" +"Language-Team: Hebrew \n" "Language: he\n" -"Language-Team: Hebrew " -"\n" -"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 " -"&& n % 10 == 0) ? 2 : 3));\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " +"n % 10 == 0) ? 2 : 3));\n" +"X-Generator: Weblate 5.11.4\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -532,15 +533,15 @@ msgstr "איכות קובץ" #: searx/plugins/ahmia_filter.py:32 msgid "Ahmia blacklist" -msgstr "" +msgstr "הרשימה השחורה של Ahmia" #: searx/plugins/ahmia_filter.py:33 msgid "Filter out onion results that appear in Ahmia's blacklist." -msgstr "" +msgstr "מסנן תוצאות onion שמופיעות ברשימת השחורה של Ahmia." #: searx/plugins/calculator.py:38 msgid "Basic Calculator" -msgstr "" +msgstr "מחשבון בסיסי" #: searx/plugins/calculator.py:39 msgid "Calculate mathematical expressions via the search bar" @@ -556,7 +557,7 @@ msgstr "ממיר מחרוזות לתוך hash digests (לקט גיבוב) שונ #: searx/plugins/hash_plugin.py:62 msgid "hash digest" -msgstr "hash digest" +msgstr "דגימת האש" #: searx/plugins/hostnames.py:123 msgid "Hostnames plugin" @@ -632,7 +633,7 @@ msgstr "הסר ארגומנטי איתור מתוך URL מוחזר" #: searx/plugins/unit_converter.py:49 msgid "Unit converter plugin" -msgstr "" +msgstr "תוסף המרה של יחידות" #: searx/plugins/unit_converter.py:50 msgid "Convert between units" @@ -1177,6 +1178,8 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" +"כתובת URL המכילה את ההעדפות שלך. ניתן להשתמש בכתובת URL זו כדי לשחזר את " +"ההגדרות שלך במכשיר אחר." #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -2058,4 +2061,3 @@ msgstr "הסתר וידאו" #~ msgid "proxied" #~ msgstr "פרוקסי" - diff --git a/searx/translations/lv/LC_MESSAGES/messages.mo b/searx/translations/lv/LC_MESSAGES/messages.mo index 71f90342ef5f67bb019166a5055b9c308b052c81..4cbb498fb11e5b52eaf92908e361403f9e1a7c59 100644 GIT binary patch delta 5860 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 delta 3267 zcmYM$c~I6x9LMo}6a^174iN?M@cBbQ4`K}?F&$MVlk3!v)nyj=iG?pw10$JP#ou> zBT3;`YwU^1I4X+#>ul!IK=#bbsGTfDt#l1)f{mz!>_+uF;OaG)LcPwl-$nKJaL~$F zOYDN3P#YM9%IH|^iUrZ+UjtUspp|YwWn?$9coTH>&ru7jbM*_@m--dgp1^EcU@B^S z7PiG6_$afe@%h*hr{a8E7NDS1hQ)?DG)3(w4)qrF!=5-9^?JUC+QC880#6_z%voeD z<|gLg15^exxJX)1cU0#3pynHaiW3+`A(cWtDn(V;9haaoa}0U&Or3jv5f$)zSHFSU z`Om1pcii*)s0BPkWgwhaK=Gqc@#2vF0n>?s0;Hi*=1s^98I&pH216g2U6RKOr=qQlN(s0G%bZf_kb@O9Kq zenB0@ebmAu=%n@-RLZ@m_*tkpeNgcSW0cgky^mJs7!3cNALf33THnbPj9ymrp zXH|n**;Q2FTX+P2MJ;3}pGKPC5T@fP?1uHIqe&$_nlJ+ur!OkSPoh4cMxu^-imSgE zdLA%~C_KS~<*1$4qK@D?Dz$ep8zVb~0zQG7Xc($}JSy-q)I@7gN3auh_6JcrtwU|> zENX$5a02(wT%(|s_TxYmXeg>a8g(QSU41Sp6AO_wnH9Je_n{^jmK=IM61l%79|>*d zp*FYymFdfl=?PE?>a@H(oW#XuN^^%Ruy4^e@uokvg$IEmr-C2HU|s1$#PjqoQ_oZG03 z)uSeg^o7Q?#Rk+nqQ)nq=Ii1k{|eB@bsXp(40j#Jx%SDZ38rEMmZ0AIIjDfkPh)-z7P@3@QO`3l0tcW54o77s4|S#! zQ9GQ6inG8ye+#vc^{9nz!X~&Kbw~F5C_GN#4D#7x8mDt{Fc}qS5t@Nh%I4VFkymYD zi&*<{i<7phWmfQJ%N&m_i%PRwqbAti(Hm@ibVaZ-CeLHPik)WXxANQHT5SpLj=STr znQa2Lrp*%DHX+gWPl#_`R8m}6Zi-5#7tO4&vl8C0eB~XgZy2ydwBi1 zy>q)|Wb@VZ>B5T2u4BpzODjqWE6d7zd&`R}=aiRr&++#CuQXszMR9pWW@%Y@@vM^h znf6LjTySqvfhU;aP4d`r9opGohbwkZ$7h26P9r_GNpfF1K6!?XOgU!%N!cF!EcKSh z?oC^1tI`MCt{KOJ;a$2kuxB&(+AUc}ZI0h(i~Xr~wLjMG^KZ42a?, 2024. # Anonymous , 2025. # Obligate , 2025. +# sandijs , 2025. msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2025-05-13 19:13+0000\n" -"PO-Revision-Date: 2025-01-06 15:53+0000\n" -"Last-Translator: return42 " -"\n" +"PO-Revision-Date: 2025-05-30 07:10+0000\n" +"Last-Translator: sandijs \n" +"Language-Team: Latvian \n" "Language: lv\n" -"Language-Team: Latvian " -"\n" -"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100" -" <= 19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= " +"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n" +"X-Generator: Weblate 5.11.4\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -166,7 +167,7 @@ msgstr "tumšs" #. STYLE_NAMES['BLACK'] #: searx/searxng.msg msgid "black" -msgstr "" +msgstr "melns" #. BRAND_CUSTOM_LINKS['UPTIME'] #: searx/searxng.msg @@ -293,7 +294,7 @@ msgstr "abonenti" #. SOCIAL_MEDIA_TERMS['POSTS'] #: searx/engines/lemmy.py:86 searx/searxng.msg msgid "posts" -msgstr "" +msgstr "ziņojumi" #. SOCIAL_MEDIA_TERMS['ACTIVE USERS'] #: searx/engines/lemmy.py:87 searx/searxng.msg @@ -334,17 +335,17 @@ msgstr "autors" #. SOCIAL_MEDIA_TERMS['THREAD OPEN'] #: searx/engines/discourse.py:149 searx/searxng.msg msgid "open" -msgstr "" +msgstr "atvērts" #. SOCIAL_MEDIA_TERMS['THREAD CLOSED'] #: searx/engines/discourse.py:149 searx/searxng.msg msgid "closed" -msgstr "" +msgstr "aizvērts" #. SOCIAL_MEDIA_TERMS['THREAD ANSWERED'] #: searx/engines/discourse.py:160 searx/searxng.msg msgid "answered" -msgstr "" +msgstr "atbildēja" #: searx/webapp.py:291 msgid "No item found" @@ -448,7 +449,7 @@ msgstr "" #: searx/engines/openstreetmap.py:158 msgid "Show route in map .." -msgstr "" +msgstr "Rādīt maršrutu kartē .." #: searx/engines/pdbe.py:96 #, python-brace-format @@ -521,23 +522,23 @@ msgstr "Failu kvalitāte" #: searx/plugins/ahmia_filter.py:32 msgid "Ahmia blacklist" -msgstr "" +msgstr "Ahmia melnais saraksts" #: searx/plugins/ahmia_filter.py:33 msgid "Filter out onion results that appear in Ahmia's blacklist." -msgstr "" +msgstr "Izfiltrēt \"sīpolu\" rezultātus, kas parādās Ahmia melnajā sarakstā." #: searx/plugins/calculator.py:38 msgid "Basic Calculator" -msgstr "" +msgstr "Parasts kalkulators" #: searx/plugins/calculator.py:39 msgid "Calculate mathematical expressions via the search bar" -msgstr "" +msgstr "Izrēķināt matemātiskas izteiksmes, izmantojot meklētāju" #: searx/plugins/hash_plugin.py:34 msgid "Hash plugin" -msgstr "" +msgstr "Jaucējvērtības spraudnis" #: searx/plugins/hash_plugin.py:35 msgid "Converts strings to different hash digests." @@ -549,11 +550,13 @@ msgstr "jaucējkoda sašķelšana" #: searx/plugins/hostnames.py:123 msgid "Hostnames plugin" -msgstr "" +msgstr "Saimniekvārdu spraudnis" #: searx/plugins/hostnames.py:124 msgid "Rewrite hostnames, remove results or prioritize them based on the hostname" msgstr "" +"Pārrakstīt saimniekvārdus, noņemt rezultātus vai prioritizēt tos, " +"pamatojoties uz saimniekvārdu" #: searx/plugins/oa_doi_rewrite.py:55 msgid "Open Access DOI rewrite" @@ -576,14 +579,16 @@ msgid "" "Displays your IP if the query is \"ip\" and your user agent if the query " "is \"user-agent\"." msgstr "" +"Tiek izvadīta Jūsu IP, ja pieprasījumā norādīts “ip”, un Jūsu " +"lietotājaģents, ja pieprasījumā norādīts “user-agent”." #: searx/plugins/self_info.py:52 msgid "Your IP is: " -msgstr "" +msgstr "Jūsu IP ir: " #: searx/plugins/self_info.py:55 msgid "Your user-agent is: " -msgstr "" +msgstr "Jūsu lietotājaģents ir: " #: searx/plugins/tor_check.py:42 msgid "Tor check plugin" @@ -594,18 +599,20 @@ msgid "" "This plugin checks if the address of the request is a Tor exit-node, and " "informs the user if it is; like check.torproject.org, but from SearXNG." msgstr "" +"Šis spraudnis pārbauda vai pieprasītā adrese ir Tor izejas mezgls un informē " +"lietotāju, ja tas tā ir; piemēram, check.torproject.org, bet no SearXNG." #: searx/plugins/tor_check.py:65 msgid "Could not download the list of Tor exit-nodes from" -msgstr "" +msgstr "Nevarēja lejupielādēt Tor izejas mezglu sarakstu no" #: searx/plugins/tor_check.py:72 msgid "You are using Tor and it looks like you have the external IP address" -msgstr "" +msgstr "Jūs lietojat Tor un izskatās, ka Jums ir ārējā IP adrese" #: searx/plugins/tor_check.py:76 msgid "You are not using Tor and you have the external IP address" -msgstr "" +msgstr "Jūs nelietojat Tor un Jums ir ārējā IP adrese" #: searx/plugins/tracker_url_remover.py:37 msgid "Tracker URL remover" @@ -613,15 +620,15 @@ msgstr "Izsekošanas URL noņemšanas līdzeklis" #: searx/plugins/tracker_url_remover.py:38 msgid "Remove trackers arguments from the returned URL" -msgstr "" +msgstr "Noņemt izsekotāju argumentus no atgrieztā URL" #: searx/plugins/unit_converter.py:49 msgid "Unit converter plugin" -msgstr "" +msgstr "Vienību pārveidotāja spraudnis" #: searx/plugins/unit_converter.py:50 msgid "Convert between units" -msgstr "" +msgstr "Konvertēt starp vienībām" #: searx/templates/simple/404.html:4 msgid "Page not found" @@ -634,7 +641,7 @@ msgstr "Doties uz %(search_page)s." #: searx/templates/simple/404.html:6 msgid "search page" -msgstr "" +msgstr "meklēšanas lapa" #: searx/templates/simple/base.html:53 msgid "Donate" @@ -647,11 +654,11 @@ msgstr "Opcijas" #: searx/templates/simple/base.html:67 msgid "Powered by" -msgstr "" +msgstr "Darbojas ar" #: searx/templates/simple/base.html:67 msgid "a privacy-respecting, open metasearch engine" -msgstr "" +msgstr "privātumu respektējoša, atvērta meta-meklētājprogramma" #: searx/templates/simple/base.html:68 #: searx/templates/simple/result_templates/packages.html:59 @@ -660,15 +667,15 @@ msgstr "Pirmkods" #: searx/templates/simple/base.html:69 msgid "Issue tracker" -msgstr "" +msgstr "Problēmu izsekotājs" #: searx/templates/simple/base.html:70 searx/templates/simple/stats.html:18 msgid "Engine stats" -msgstr "" +msgstr "Dzinēja statistika" #: searx/templates/simple/base.html:72 msgid "Public instances" -msgstr "" +msgstr "Publiskās instances" #: searx/templates/simple/base.html:75 msgid "Privacy policy" @@ -1784,4 +1791,3 @@ msgstr "slēpt video" #~ msgid "proxied" #~ msgstr "" - From b991688fcb2a3b04bf3a97518809884eb1db8e92 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 07:09:34 +0000 Subject: [PATCH 80/82] [upd] web-client (simple): Bump the minor group Bumps the minor group in /client/simple with 2 updates: [globals](https://github.com/sindresorhus/globals) and [stylelint](https://github.com/stylelint/stylelint). Updates `globals` from 16.1.0 to 16.2.0 - [Release notes](https://github.com/sindresorhus/globals/releases) - [Commits](https://github.com/sindresorhus/globals/compare/v16.1.0...v16.2.0) Updates `stylelint` from 16.19.1 to 16.20.0 - [Release notes](https://github.com/stylelint/stylelint/releases) - [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md) - [Commits](https://github.com/stylelint/stylelint/compare/16.19.1...16.20.0) --- updated-dependencies: - dependency-name: globals dependency-version: 16.2.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: minor - dependency-name: stylelint dependency-version: 16.20.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: minor ... Signed-off-by: dependabot[bot] --- client/simple/package-lock.json | 68 ++++++++++++++++----------------- client/simple/package.json | 4 +- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/client/simple/package-lock.json b/client/simple/package-lock.json index f05ee9e21..f0e8e8306 100644 --- a/client/simple/package-lock.json +++ b/client/simple/package-lock.json @@ -14,7 +14,7 @@ "edge.js": "^6.2.1", "eslint": "^9.27.0", "filemanager-webpack-plugin": "^8.0.0", - "globals": "^16.1.0", + "globals": "^16.2.0", "ionicons": "^8.0.8", "leaflet": "^1.9.4", "less": "^4.3.0", @@ -22,7 +22,7 @@ "normalize.css": "^8.0.1", "sharp": "^0.34.2", "style-loader": "^4.0.0", - "stylelint": "^16.19.1", + "stylelint": "^16.20.0", "stylelint-config-standard": "^38.0.0", "stylelint-config-standard-less": "^3.0.1", "stylelint-prettier": "^5.0.3", @@ -2657,14 +2657,14 @@ } }, "node_modules/cacheable": { - "version": "1.8.10", - "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.8.10.tgz", - "integrity": "sha512-0ZnbicB/N2R6uziva8l6O6BieBklArWyiGx4GkwAhLKhSHyQtRfM9T1nx7HHuHDKkYB/efJQhz3QJ6x/YqoZzA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.9.0.tgz", + "integrity": "sha512-8D5htMCxPDUULux9gFzv30f04Xo3wCnik0oOxKoRTPIBoqA7HtOcJ87uBhQTs3jCfZZTrUBGsYIZOgE0ZRgMAg==", "dev": true, "license": "MIT", "dependencies": { - "hookified": "^1.8.1", - "keyv": "^5.3.2" + "hookified": "^1.8.2", + "keyv": "^5.3.3" } }, "node_modules/cacheable/node_modules/keyv": { @@ -3176,9 +3176,9 @@ "license": "CC0-1.0" }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4108,9 +4108,9 @@ } }, "node_modules/globals": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.1.0.tgz", - "integrity": "sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz", + "integrity": "sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==", "dev": true, "license": "MIT", "engines": { @@ -4168,9 +4168,9 @@ } }, "node_modules/hookified": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.8.2.tgz", - "integrity": "sha512-5nZbBNP44sFCDjSoB//0N7m508APCgbQ4mGGo1KJGBYyCKNHfry1Pvd0JVHZIxjdnqn8nFRBAN/eFB6Rk/4w5w==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.9.0.tgz", + "integrity": "sha512-2yEEGqphImtKIe1NXWEhu6yD3hlFR4Mxk4Mtp3XEyScpSt4pQ4ymmXA1zzxZpj99QkFK+nN0nzjeb2+RUi/6CQ==", "dev": true, "license": "MIT" }, @@ -6235,9 +6235,9 @@ } }, "node_modules/stylelint": { - "version": "16.19.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.19.1.tgz", - "integrity": "sha512-C1SlPZNMKl+d/C867ZdCRthrS+6KuZ3AoGW113RZCOL0M8xOGpgx7G70wq7lFvqvm4dcfdGFVLB/mNaLFChRKw==", + "version": "16.20.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.20.0.tgz", + "integrity": "sha512-B5Myu9WRxrgKuLs3YyUXLP2H0mrbejwNxPmyADlACWwFsrL8Bmor/nTSh4OMae5sHjOz6gkSeccQH34gM4/nAw==", "dev": true, "funding": [ { @@ -6261,15 +6261,15 @@ "cosmiconfig": "^9.0.0", "css-functions-list": "^3.2.3", "css-tree": "^3.1.0", - "debug": "^4.3.7", + "debug": "^4.4.1", "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^10.0.8", + "file-entry-cache": "^10.1.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^7.0.3", + "ignore": "^7.0.4", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", "known-css-properties": "^0.36.0", @@ -6489,25 +6489,25 @@ "license": "MIT" }, "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.0.8.tgz", - "integrity": "sha512-FGXHpfmI4XyzbLd3HQ8cbUcsFGohJpZtmQRHr8z8FxxtCe2PcpgIlVLwIgunqjvRmXypBETvwhV4ptJizA+Y1Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.0.tgz", + "integrity": "sha512-Et/ex6smi3wOOB+n5mek+Grf7P2AxZR5ueqRUvAAn4qkyatXi3cUC1cuQXVkX0VlzBVsN4BkWJFmY/fYiRTdww==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^6.1.8" + "flat-cache": "^6.1.9" } }, "node_modules/stylelint/node_modules/flat-cache": { - "version": "6.1.8", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.8.tgz", - "integrity": "sha512-R6MaD3nrJAtO7C3QOuS79ficm2pEAy++TgEUD8ii1LVlbcgZ9DtASLkt9B+RZSFCzm7QHDMlXPsqqB6W2Pfr1Q==", + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.9.tgz", + "integrity": "sha512-DUqiKkTlAfhtl7g78IuwqYM+YqvT+as0mY+EVk6mfimy19U79pJCzDZQsnqk3Ou/T6hFXWLGbwbADzD/c8Tydg==", "dev": true, "license": "MIT", "dependencies": { - "cacheable": "^1.8.9", + "cacheable": "^1.9.0", "flatted": "^3.3.3", - "hookified": "^1.8.1" + "hookified": "^1.8.2" } }, "node_modules/stylelint/node_modules/globby": { @@ -6542,9 +6542,9 @@ } }, "node_modules/stylelint/node_modules/ignore": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", - "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", + "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", "dev": true, "license": "MIT", "engines": { diff --git a/client/simple/package.json b/client/simple/package.json index 55f7f8e4a..7fc4d3c79 100644 --- a/client/simple/package.json +++ b/client/simple/package.json @@ -15,7 +15,7 @@ "edge.js": "^6.2.1", "eslint": "^9.27.0", "filemanager-webpack-plugin": "^8.0.0", - "globals": "^16.1.0", + "globals": "^16.2.0", "ionicons": "^8.0.8", "leaflet": "^1.9.4", "less": "^4.3.0", @@ -23,7 +23,7 @@ "normalize.css": "^8.0.1", "sharp": "^0.34.2", "style-loader": "^4.0.0", - "stylelint": "^16.19.1", + "stylelint": "^16.20.0", "stylelint-config-standard": "^38.0.0", "stylelint-config-standard-less": "^3.0.1", "stylelint-prettier": "^5.0.3", From 1b424b8d541d3cde1d40aa52b59cbcc38259ce3e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 07:16:18 +0000 Subject: [PATCH 81/82] [upd] pypi: Bump the minor group with 2 updates Bumps the minor group with 2 updates: [selenium](https://github.com/SeleniumHQ/Selenium) and [typer-slim](https://github.com/fastapi/typer). Updates `selenium` from 4.32.0 to 4.33.0 - [Release notes](https://github.com/SeleniumHQ/Selenium/releases) - [Commits](https://github.com/SeleniumHQ/Selenium/compare/selenium-4.32.0...selenium-4.33.0) Updates `typer-slim` from 0.15.4 to 0.16.0 - [Release notes](https://github.com/fastapi/typer/releases) - [Changelog](https://github.com/fastapi/typer/blob/master/docs/release-notes.md) - [Commits](https://github.com/fastapi/typer/compare/0.15.4...0.16.0) --- updated-dependencies: - dependency-name: selenium dependency-version: 4.33.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: minor - dependency-name: typer-slim dependency-version: 0.16.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor ... Signed-off-by: dependabot[bot] --- requirements-dev.txt | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index 63c5fe842..418824b03 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -4,7 +4,7 @@ cov-core==1.15.0 black==24.3.0 pylint==3.3.7 splinter==0.21.0 -selenium==4.32.0 +selenium==4.33.0 Pallets-Sphinx-Themes==2.3.0 Sphinx==7.4.7 sphinx-issues==5.0.1 diff --git a/requirements.txt b/requirements.txt index b4006c48e..b27f44e52 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,5 +17,5 @@ markdown-it-py==3.0.0 fasttext-predict==0.9.2.4 tomli==2.2.1; python_version < '3.11' msgspec==0.19.0 -typer-slim==0.15.4 +typer-slim==0.16.0 isodate==0.7.2 From 37d851fb23935166ac7714a83c7273ce712bece0 Mon Sep 17 00:00:00 2001 From: benpiano800 <51756721+benpiano800@users.noreply.github.com> Date: Thu, 29 May 2025 14:59:06 -0500 Subject: [PATCH 82/82] [mod] UI footer: correct capitalization of "SearXNG" in base.html --- searx/templates/simple/base.html | 2 +- tests/robot/test_webapp.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/searx/templates/simple/base.html b/searx/templates/simple/base.html index 2eebde676..deac295b7 100644 --- a/searx/templates/simple/base.html +++ b/searx/templates/simple/base.html @@ -64,7 +64,7 @@