rpm --import https://download.owncloud.org/download/repositories/stable/CentOS_7/repodata/repomd.xml.key curl -L https://download.owncloud.org/download/repositories/stable/CentOS_7/ce:stable.repo -o /etc/yum.repos.d/ownCloud.repo yum clean expire-cache yum install -y owncloud-files yum install -y mariadb-server systemctl start mariadb systemctl enable mariadb mysql -u root MariaDB [(none)]> CREATE DATABASE owncloud; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> GRANT ALL ON owncloud.* to 'owncloud'@'localhost' IDENTIFIED BY 'password'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> exit Bye yum install -y httpd systemctl start httpd systemctl enable httpd [root@owncloud ~]# firewall-cmd --permanent --add-service=http success [root@owncloud ~]# firewall- firewall-cmd firewall-offline-cmd [root@owncloud ~]# firewall firewall-cmd firewalld firewall-offline-cmd [root@owncloud ~]# firewall-cmd --reload success yum install -y epel-release yum update -y yum install -y owncloud This version of ownCloud requires at least PHP 5.6.0 You are currently running 5.4.16. Please update your PHP version. yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm yum install -y yum-utils yum-config-manager --enable remi-php56 yum update -y php --version yum install -y php-gd php-intk php-mbstring php-process.x86_64 php-xml yum install -y policycoreutils-python chcon -R -t httpd_sys_rw_content_t /var/www/html/owncloud/ yum install php-mysql
You can make your SSH
server to run on multiple ports by adding more of the Port
options in your SSHd
the configuration file.
For example, having these lines in /etc/ssh/sshd_config
will make the SSH
server to run on both port 22 and 2222.
Port 22 Port 2222
You’ll need to reboot your SSH
server after making the change.
CentOS
and Red Hat
comes with vim-minimal
installed by default which lacks support for syntax highlighting and many other features.
To see currently installed version, run vi --version
at the command line and note the list of enabled and disabled features.
[root@centos ~]# vi --version VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 2 2017 00:45:54) Included patches: 1-160 Modified by <[email protected]> Compiled by <[email protected]> Small version without GUI. Features included (+) or not (-): +acl -farsi -mouse_sgr -tag_old_static -arabic -file_in_path -mouse_sysmouse -tag_any_white -autocmd -find_in_path -mouse_urxvt -tcl -balloon_eval -float -mouse_xterm +terminfo -browse -folding +multi_byte -termresponse +builtin_terms -footer -multi_lang -textobjects -byte_offset +fork() -mzscheme -title -cindent -gettext -netbeans_intg -toolbar -clientserver -hangul_input -path_extra -user_commands -clipboard +iconv -perl -vertsplit -cmdline_compl -insert_expand -persistent_undo -virtualedit +cmdline_hist +jumplist -printer +visual -cmdline_info -keymap -profile -visualextra -comments -langmap -python -viminfo -conceal -libcall -python3 -vreplace -cryptv -linebreak -quickfix +wildignore -cscope -lispindent -reltime -wildmenu -cursorbind -listcmds -rightleft +windows -cursorshape -localmap -ruby +writebackup -dialog -lua -scrollbind -X11 -diff -menu -signs -xfontset -digraphs -mksession -smartindent -xim -dnd -modify_fname -sniff -xsmp -ebcdic -mouse -startuptime -xterm_clipboard -emacs_tags -mouse_dec -statusline -xterm_save -eval -mouse_gpm -sun_workshop -xpm -ex_extra -mouse_jsbterm -syntax -extra_search -mouse_netterm -tag_binary system vimrc file: "/etc/virc" user vimrc file: "$HOME/.vimrc" 2nd user vimrc file: "~/.vim/vimrc" user exrc file: "$HOME/.exrc" fall-back for $VIM: "/etc" f-b for $VIMRUNTIME: "/usr/share/vim/vim74" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -O2 -g -pipe -Wall -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 Linking: gcc -Wl,-z,relro -L/usr/local/lib -Wl,--as-needed -o vim -lm -lselinux -lncurses -lacl -lattr -ldl
To use the version of vim
with most of the features enabled in CentOS / Red Hat, you’ll have to install vim-enhanced
. This could be done by following these steps at the command line;
Use administrator account or sudo
to perform the installation.
vim-minimal
.
yum remove -y vim-minimal
yum -y update
vim-enhanced
and related dependencies.
yum install -y vim-enhanced
Running vim --version
should produce a more desirable output.
Note that the command is now vim
instead of vi
.
[root@centos ~]# vim --version VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 2 2017 00:45:39) Included patches: 1-160 Modified by <[email protected]> Compiled by <[email protected]> Huge version without GUI. Features included (+) or not (-): +acl +farsi +mouse_netterm +syntax +arabic +file_in_path +mouse_sgr +tag_binary +autocmd +find_in_path -mouse_sysmouse +tag_old_static -balloon_eval +float +mouse_urxvt -tag_any_white -browse +folding +mouse_xterm -tcl ++builtin_terms -footer +multi_byte +terminfo +byte_offset +fork() +multi_lang +termresponse +cindent +gettext -mzscheme +textobjects -clientserver -hangul_input +netbeans_intg +title -clipboard +iconv +path_extra -toolbar +cmdline_compl +insert_expand +perl +user_commands +cmdline_hist +jumplist +persistent_undo +vertsplit +cmdline_info +keymap +postscript +virtualedit +comments +langmap +printer +visual +conceal +libcall +profile +visualextra +cryptv +linebreak +python/dyn +viminfo +cscope +lispindent -python3 +vreplace +cursorbind +listcmds +quickfix +wildignore +cursorshape +localmap +reltime +wildmenu +dialog_con -lua +rightleft +windows +diff +menu +ruby/dyn +writebackup +digraphs +mksession +scrollbind -X11 -dnd +modify_fname +signs -xfontset -ebcdic +mouse +smartindent -xim +emacs_tags -mouseshape -sniff -xsmp +eval +mouse_dec +startuptime -xterm_clipboard +ex_extra +mouse_gpm +statusline -xterm_save +extra_search -mouse_jsbterm -sun_workshop -xpm system vimrc file: "/etc/vimrc" user vimrc file: "$HOME/.vimrc" 2nd user vimrc file: "~/.vim/vimrc" user exrc file: "$HOME/.exrc" fall-back for $VIM: "/etc" f-b for $VIMRUNTIME: "/usr/share/vim/vim74" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -O2 -g -pipe -Wall -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 Linking: gcc -L. -Wl,-z,relro -fstack-protector -rdynamic -Wl,-export-dynamic -Wl,--enable-new-dtags -Wl,-rpath,/usr/lib64/perl5/CORE -Wl,-z,relro -L/usr/local/lib -Wl,--as-needed -o vim -lm -lnsl -lselinux -lncurses -lacl -lattr -lgpm -ldl -Wl,--enable-new-dtags -Wl,-rpath,/usr/lib64/perl5/CORE -fstack-protector -L/usr/lib64/perl5/CORE -lperl -lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
yum install centos-release-gluster yum install glusterfs gluster-cli glusterfs-libs glusterfs-server vi /etc/hosts mkfs.xfs /dev/cl/export_glusterexport mount /dev/cl/export_glusterexport /export/glusterexport/ umount /export/glusterexport/ mkfs.xfs -f /dev/cl/export_glusterexport systemctl enable glusterd.service vi /etc/fstab mount -a lsblk systemctl enable glusterd.service systemctl start glusterd.service firewall-cmd --zone=public --add-port=24007-24008/tcp --permanent firewall-cmd --reload gluster peer probe glusterserver2 gluster peer status firewall-cmd --zone=public --add-port=24009/tcp --permanent firewall-cmd --reload cd /export/glusterexport/ lvrename cl export_glusterexport glusterfs vi /etc/fstab lvrename cl glusterfs export_glusterfs mkdir glusterfs/glusterexport gluster peer probe glusterserver2 gluster peer status gluster volume create glusterexport replica 2 transport tcp glusterserver1:/export/glusterfs/glusterexport glusterserver2:/export/glusterfs/glusterexport gluster volume start glusterexport gluster volume info all showmount -e 127.0.0.1 mount -t nfs 127.0.0.1:/export/glusterfs/glusterexport /export/glusterexport mount -t glusterfs 127.0.0.1:/export/glusterfs/glusterexport /export/glusterexport firewall-cmd --zone=public --add-service=nfs --add-service=samba --add-service=samba-client --permanent firewall-cmd --zone=public --add-port=111/tcp --add-port=139/tcp --add-port=445/tcp --add-port=965/tcp --add-port=2049/tcp --add-port=38465-38469/tcp --add-port=631/tcp --add-port=111/udp --add-port=963/udp --add-port=49152-49251/tcp --permanent firewall-cmd --reload mount -t glusterfs 127.0.0.1:/export/glusterfs/glusterexport /export/glusterexport/ mount -t glusterfs 127.0.0.1:/export/glusterfs/glusterexport /export/glusterexport/ tail /var/log/glusterfs/export-glusterexport.log mount -t nfs 127.0.0.1:/export/glusterfs/glusterexport /export/glusterexport/ mount -t nfs 127.0.0.1:/export/glusterfs/glusterexport /export/glusterexport/ gluster volume info all mount -t glusterfs 127.0.0.1:glusterexport /export/glusterexport/ ll glusterexport/ cd glusterexport/ gluster volume info all gluster volume info glusterexport showmount -e 127.0.01 systemctl restart nfs-server gluster volume info all gluster peer status gluster volume info all systemctl restart glusterfs
The command used to list directory content in Linux is ls. With the -R option, ls will traverse the directory recursively, showing the content of the particular directory and all its subdirectories. Relative directory path is displayed before the directory content is actually listed.
The following is an example of the command in use;
$ ls -R testdir/ testdir/: subdir1 subdir2 testdir/subdir1: subsubdir1 subsubdir2 testdir/subdir1/subsubdir1: file1 testdir/subdir1/subsubdir2: file2 testdir/subdir2: subsubdir1 subsubdir2 testdir/subdir2/subsubdir1: file3 testdir/subdir2/subsubdir2: file4
You can add new users in Kubuntu
via graphical user interface from within the System Settings
. This is basically the same for other KDE
-based Linux distributions such as openSUSE
as Kubuntu
itself is based on KDE
.
Follow these steps to add new users in Kubuntu
and KDE
in general;
Huawei E1552 is a HSDPA USB Stick capable of delivering HSDPA connectivity at up to 3.6Mbps. Being a USB stick cum modem cause some problem with Ubuntu (and Linux general), but is easily fixable by the following method.
You could get the following warning if timezone is not configured for PHP
when using date related function such as date()
or date_default_timezone_get()
.
Warning: date(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone ‘UTC’ for now, but please set date.timezone to select your timezone. in /path/to/your/script.php on line 3
You can configure timezone for PHP
by setting up date.timezone
in your configuration file to any of the supported timezones. You can view the list of supported timezones from PHP
‘s official documentation.
The following example sets the timezone to America/Los_Angeles
[Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = America/Los_Angeles
If you’re using PHP
5.1.0
or later, you can you can independently set the timezone for each of your PHP
script by calling the date_default_timezone_set
function with the timezone as the parameter.
bool date_default_timezone_set ( string $timezone_identifier )
The example below sets the timezone for the rest of the script to America/Los_Angeles
.
<?php date_default_timezone_set('America/Los_Angeles'); ?>
Don’t forget to restart your webserver after changing the PHO configuration file for the changes to take effect.
Vim
is a very powerful text editor and is available in almost all modern computing platforms. It is bundled in the default installation of almost Linux
distribution, though Ubuntu
ships with the minimal version of Vim
which lack features such as syntax highlighting making it less powerful or useful as it could be.
Details about the currently installed version could be gathered by running vi --version
from the command line;
Note the list of enabled and disabled features.
$ vi --version VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Jul 26 2017 20:13:43) Included patches: 1-197, 322, 377-378, 422, 550 Modified by [email protected] Compiled by [email protected] Small version without GUI. Features included (+) or not (-): +acl -farsi -mouse_netterm +tag_binary -arabic -file_in_path -mouse_sgr -tag_old_static -autocmd -find_in_path -mouse_sysmouse -tag_any_white -balloon_eval -float -mouse_urxvt -tcl -browse -folding -mouse_xterm -termguicolors +builtin_terms -footer +multi_byte +terminfo -byte_offset +fork() -multi_lang -termresponse -channel -gettext -mzscheme -textobjects -cindent -hangul_input -netbeans_intg -timers -clientserver +iconv -num64 -title -clipboard -insert_expand +packages -toolbar -cmdline_compl -job -path_extra -user_commands +cmdline_hist +jumplist -perl +vertsplit -cmdline_info -keymap -persistent_undo -virtualedit -comments -lambda -printer +visual -conceal -langmap -profile -visualextra -cryptv -libcall -python -viminfo -cscope -linebreak -python3 -vreplace -cursorbind -lispindent -quickfix +wildignore -cursorshape -listcmds -reltime -wildmenu -dialog -localmap -rightleft +windows -diff -lua -ruby +writebackup -digraphs -menu -scrollbind -X11 -dnd -mksession -signs +xfontset -ebcdic -modify_fname -smartindent -xim -emacs_tags -mouse -startuptime -xpm -eval -mouse_dec -statusline -xsmp +ex_extra -mouse_gpm -sun_workshop -xterm_clipboard -extra_search -mouse_jsbterm -syntax -xterm_save system vimrc file: "$VIM/vimrc" user vimrc file: "$HOME/.vimrc" 2nd user vimrc file: "~/.vim/vimrc" user exrc file: "$HOME/.exrc" defaults file: "$VIMRUNTIME/defaults.vim" fall-back for $VIM: "/usr/share/vim" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -Wdate-time -g -O2 -fdebug-prefix-map=/build/vim-w5iGhr/vim-8.0.0197=. -fstack-protector-strong -Wformat -Werror=format-security -DTINY_VIMRC -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 Linking: gcc -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -o vim -lSM -lICE -lXpm -lXt -lX11 -lXdmcp -lSM -lICE -lm -ltinfo -lselinux -lacl -lattr -ldl
The full version however is available in the default package repository and can easily be installed by following these steps at the terminal;
vim-tiny
which is the default installation package.
sudo apt -y remove vim-tiny
sudo apt -y update
Vim
.
sudo apt -y install vim
$ vi --version VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Jul 26 2017 20:13:43) Included patches: 1-197, 322, 377-378, 422, 550 Modified by [email protected] Compiled by [email protected] Huge version without GUI. Features included (+) or not (-): +acl +file_in_path +mouse_sgr +tag_old_static +arabic +find_in_path -mouse_sysmouse -tag_any_white +autocmd +float +mouse_urxvt -tcl -balloon_eval +folding +mouse_xterm +termguicolors -browse -footer +multi_byte +terminfo ++builtin_terms +fork() +multi_lang +termresponse +byte_offset +gettext -mzscheme +textobjects +channel -hangul_input +netbeans_intg +timers +cindent +iconv +num64 +title -clientserver +insert_expand +packages -toolbar -clipboard +job +path_extra +user_commands +cmdline_compl +jumplist -perl +vertsplit +cmdline_hist +keymap +persistent_undo +virtualedit +cmdline_info +lambda +postscript +visual +comments +langmap +printer +visualextra +conceal +libcall +profile +viminfo +cryptv +linebreak -python +vreplace +cscope +lispindent +python3 +wildignore +cursorbind +listcmds +quickfix +wildmenu +cursorshape +localmap +reltime +windows +dialog_con -lua +rightleft +writebackup +diff +menu -ruby -X11 +digraphs +mksession +scrollbind -xfontset -dnd +modify_fname +signs -xim -ebcdic +mouse +smartindent -xpm +emacs_tags -mouseshape +startuptime -xsmp +eval +mouse_dec +statusline -xterm_clipboard +ex_extra +mouse_gpm -sun_workshop -xterm_save +extra_search -mouse_jsbterm +syntax +farsi +mouse_netterm +tag_binary system vimrc file: "$VIM/vimrc" user vimrc file: "$HOME/.vimrc" 2nd user vimrc file: "~/.vim/vimrc" user exrc file: "$HOME/.exrc" defaults file: "$VIMRUNTIME/defaults.vim" fall-back for $VIM: "/usr/share/vim" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -Wdate-time -g -O2 -fdebug-prefix-map=/build/vim-w5iGhr/vim-8.0.0197=. -fstack-protector-strong -Wformat -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 Linking: gcc -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -o vim -lm -ltinfo -lnsl -lselinux -lacl -lattr -lgpm -ldl -L/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu -lpython3.6m -lpthread -ldl -lutil -lm
Social media traffic are the type of traffic that if goes viral, could bring a huge spike in your website traffic. This is true especially if your website is made it to the frontpage of Reddit or Digg.
Social media traffic are not targeted, which means they don’t convert well if you’re monetizing your website, but could be useful in self promoting your website. It could also bring some inbound links as people share what they found on your website elsewhere, which will then increase your search engine ranking.
These tips would help you improve your social media traffic.
Parking is currently unavailable. We'll be right back.
\n ")}errorParkingServicesDisabled(){this.message("\nServices for this domain name have been disabled.
\n ")}errorParkingNoSponsors(e){this.message(`\n \n \n ${window.location.hostname} currently does not have any sponsors for you.\n \n `,e)}imprint(e){if(!e)return;const t=document.querySelector("#imprint-text");t&&(t.innerHTML=e.replace(/(?:\r\n|\r|\n)/g,"${this.domain} currently does not have any sponsors for you.
`;case"disabled_mr":return`\nReferral traffic for ${this.domain} does not meet requirements.
`;case"js_error":return"\nParking is currently unavailable. We'll be right back.
\n ";default:return"\nServices for this domain name have been disabled.
\n "}}get trackingType(){switch(this.reason){case"disabled_rc":return"revenue_cap_reached";case"disabled_mr":return"invalid_referral";case"adblock":return"ad_blocked_message";case"no_sponsors":return"no_sponsors_message"}}get domain(){return window.location.hostname}toContext(){return{cannotPark:this.reason}}}function unpackPHPArrayObject(e,t){const n=e[t];if(n&&!Array.isArray(n))return n}class Parking extends State$2{constructor(){super(...arguments),this.type=Type.Parking}static build(e,t){const n=new Parking;n.domain=e.domainName,n.html=e.template,n.scripts=e.scripts||[],n.javascript=e.inlineJs,n.stylesheet=e.styles,n.imprint=e.imprintText;const i=unpackPHPArrayObject(e,"salesSettings"),s=(null==i?void 0:i.status)&&"NOT_FOR_SALE"!==(null==i?void 0:i.status);if(s){const{status:e,location:t,message:s,link:a,type:o}=i;n.salesBanner={message:s,href:a,position:t,theme:o,status:e}}return t.wantsToServeAds?n.trackingType="ctr":s&&window.location.pathname.startsWith("/listing")?n.trackingType="sales":n.trackingType="visit",n}toContext(){return{}}}class Sales extends State$2{constructor(){super(...arguments),this.type=Type.Sales}static build(e){const t=unpackPHPArrayObject(e,"salesSettings");if(!t)return;const{status:n}=t;return["NOT_FOR_SALE","EXTERNAL_MARKET","URL"].includes(n)?void 0:window.location.pathname.startsWith("/listing")?new Sales:void 0}toContext(){return{}}get trackingType(){return"sales"}init(e){window.context=e;const t=document.createElement("script");t.type="text/javascript",t.src=SALES_JS_URL,document.head.append(t)}}class Redirect extends State$2{constructor(){super(...arguments),this.type=Type.Redirect}static build(e,t,n){const i=unpackPHPArrayObject(e,"salesSettings"),{zeroClickDelay:s,skenzoRedirect:a,skenzoUrl:o,showInquiryForm:r,canZeroClick:d,cannotPark:c}=e;if(window.location.pathname.startsWith("/listing")&&["EXTERNAL_MARKET","URL"].includes(null==i?void 0:i.status)){if(null==i?void 0:i.external)return Redirect.toState(i.external,"sales");if(null==i?void 0:i.link)return Redirect.toState(i.link,"sales")}if(n.cannotLoadAds&&n.wantsToServeAds)return Redirect.toState(n.noAdsRedirectUrl,"no_ads_redirect");if(d&&(null==t?void 0:t.reason)){if(null==t?void 0:t.redirect)return Redirect.toState(t.redirect,"zc_redirect",s);if(a&&o)return Redirect.toState(o,"skenzo_redirect")}return(null==i?void 0:i.status)&&"NOT_FOR_SALE"!==(null==i?void 0:i.status)&&(n.cannotLoadAds||n.cannotLoadAds&&!d||r)?Redirect.toState(`${window.location.origin}/listing`):void 0}static toState(e,t,n=0){const i=new Redirect;return i.url=e,i.delay=n,i.trackingType=t,i}toContext(){return{}}}const browserState=()=>{var e,t,n,i,s;const{screen:{width:a,height:o},self:r,top:d,matchMedia:c,opener:l}=window,{documentElement:{clientWidth:h,clientHeight:u}}=document;let p;try{p=(new Date).getTimezoneOffset()/60*-1}catch(e){p=null}return{popup:!(!l||l===window),timezone_offset:p,user_preference:null===(e=null===Intl||void 0===Intl?void 0:Intl.DateTimeFormat())||void 0===e?void 0:e.resolvedOptions(),user_using_darkmode:Boolean(c&&c("(prefers-color-scheme: dark)").matches),user_supports_darkmode:Boolean(c),window_resolution:{width:null!=h?h:0,height:null!=u?u:0},screen_resolution:{width:null!=a?a:0,height:null!=o?o:0},frame:d===r?null:{innerWidth:null!==(t=null==r?void 0:r.innerWidth)&&void 0!==t?t:0,innerHeight:null!==(n=null==r?void 0:r.innerHeight)&&void 0!==n?n:0,outerWidth:null!==(i=null==r?void 0:r.outerWidth)&&void 0!==i?i:0,outerHeight:null!==(s=null==r?void 0:r.outerHeight)&&void 0!==s?s:0}}},TRACKING_URL="_tr",buildSignature=({callbacks:e,context:t},n)=>{var i,s,a,o;return Object.assign({ad_loaded_callback:null==e?void 0:e.adLoadedCallback,app_version:version,caf_client_id:null===(i=null==t?void 0:t.pageOptions)||void 0===i?void 0:i.pubId,caf_timed_out:null==e?void 0:e.cafTimedOut,caf_loaded_ms:null==e?void 0:e.cafLoadedMs,channel:null===(s=null==t?void 0:t.pageOptions)||void 0===s?void 0:s.channel,desktop:t.desktop,terms:null===(a=null==t?void 0:t.pageOptions)||void 0===a?void 0:a.terms,fd_server_datetime:t.fd_server_datetime,fd_server:t.fd_server,flex_rule:t.flex_rule,host:t.host,ip:t.ip,ivt:null===(o=null==t?void 0:t.pageOptions)||void 0===o?void 0:o.ivt,js_error:t.js_error,mobile:t.mobile,no_ads_redirect:t.noAdsRedirect,page_headers:t.page_headers,page_loaded_callback:null==e?void 0:e.pageLoadedCallback,page_method:t.page_method,page_request:t.page_request,page_time:t.page_time,page_url:t.page_url,reportable_channel:t.reportableChannel,reportable_style_id:t.reportableStyleId,tablet:t.tablet,template_id:t.templateId,type:n,user_has_ad_blocker:t.user_has_ad_blocker,user_id:t.userId,uuid:t.uuid,zeroclick:t.zeroClick},browserState())},trackVisit=({callbacks:e,context:t},n,i="")=>{const s=`${i}/${TRACKING_URL}`,a=i?"include":"same-origin",o=buildSignature({callbacks:e,context:t},n);let r={};"click"===n&&(r={click:"true",session:t.uuid,nc:Date.now().toString()}),fetch(s,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},credentials:a,body:JSON.stringify(Object.assign({signature:encode(o)},r))})};var State$1;!function(){if(!window.CustomEvent){function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};const n=document.createEvent("CustomEvent");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n}e.prototype=window.Event.prototype,window.CustomEvent=e}}(),function(e){e[e.Pending=0]="Pending",e[e.Loaded=1]="Loaded",e[e.Failed=2]="Failed"}(State$1||(State$1={}));class Provider{constructor(e){this.timeoutSeconds=5,this.handlePixelEvent=e=>{switch(this.state){case State$1.Failed:break;case State$1.Pending:setTimeout((()=>this.handlePixelEvent(e)),100);break;case State$1.Loaded:this.onPixelEvent(e)}},this.watch=()=>{switch(this.state){case State$1.Loaded:case State$1.Failed:break;case State$1.Pending:this.isLoaded()?this.state=State$1.Loaded:this.isTimedOut()?this.state=State$1.Failed:setTimeout(this.watch,50)}},this.config=e,this.identifier&&this.identifier.length>0?(this.state=State$1.Pending,this.timeoutAt=new Date,this.timeoutAt.setSeconds(this.timeoutAt.getSeconds()+this.timeoutAfter()),this.injectPixel()):this.state=State$1.Failed}get identifier(){var e;return null===(e=this.config)||void 0===e?void 0:e.key}get pixelEvents(){var e;return null===(e=this.config)||void 0===e?void 0:e.pixel_events}injectPixel(){this.injectedAt||(this.injectedAt=new Date,this.inject(),this.watch())}inject(){const e=document.createElement("script");e.text=this.script,document.head.appendChild(e)}isTimedOut(){return+new Date>=+this.timeoutAt}timeoutAfter(){return this.timeoutSeconds}selectPixelEvents(e){if(Array.isArray(this.pixelEvents))return this.pixelEvents.filter((t=>"term-view"===t.trigger&&"visit"===e||(!(!["term-click","ad-view"].includes(t.trigger)||"ctr"!==e)||"ad-click"===t.trigger&&"click"===e)))}}class Facebook extends Provider{get script(){return`!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js');fbq('init', '${this.identifier}');`}onPixelEvent(e){this.selectPixelEvents(e).forEach((e=>{e&&(e.custom?window.fbq("trackCustom",e.event):window.fbq("track",e.event))}))}isLoaded(){return!!window.fbq}}class Outbrain extends Provider{get script(){return`!function(_window, _document) {var OB_ADV_ID = '${this.identifier}';if (_window.obApi) {var toArray = function(object) {return Object.prototype.toString.call(object) === '[object Array]' ? object : [object];};_window.obApi.marketerId = toArray(_window.obApi.marketerId).concat(toArray(OB_ADV_ID));return;}var api = _window.obApi = function() {api.dispatch ? api.dispatch.apply(api, arguments) : api.queue.push(arguments);};api.version = '1.1';api.loaded = true;api.marketerId = OB_ADV_ID;api.queue = [];var tag = _document.createElement('script');tag.async = true;tag.src = '//amplify.outbrain.com/cp/obtp.js';tag.type = 'text/javascript';var script = _document.getElementsByTagName('script')[0];script.parentNode.insertBefore(tag, script);}(window, document);`}onPixelEvent(e){this.selectPixelEvents(e).forEach((e=>{e&&window.obApi("track",e.event)}))}isLoaded(){return!!window.obApi}}class Revcontent extends Provider{get script(){return""}inject(){const e=document.createElement("script");e.src="https://assets.revcontent.com/master/rev.js",document.head.appendChild(e)}onPixelEvent(e){this.selectPixelEvents(e).forEach((e=>{e&&window.rev("event",e.event)}))}isLoaded(){return!!window.rev}}class Taboola extends Provider{get script(){return"window._tfa = window._tfa || [];!function (t, f, a, x) {if (!document.getElementById(x)) {t.async = 1;t.src = a;t.id=x;f.parentNode.insertBefore(t, f);}}(document.createElement('script'),document.getElementsByTagName('script')[0],'//cdn.taboola.com/libtrc/unip/1451879/tfa.js','tb_tfa_script');"}onPixelEvent(e){this.selectPixelEvents(e).forEach((e=>{e&&window._tfa.push({notify:"event",name:e.event,id:e.pixel_id})}))}isLoaded(){return Array.isArray(window._tfa)}}class Tiktok extends Provider{constructor(e,t){super(e),this.useAltTikTokEventsForAdsPlatformUser=t}get script(){return`!function (w, d, t) {w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];ttq.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i