System.register(["@angular/core","@angular/material/core","@angular/cdk/coercion","@angular/common","rxjs","rxjs/operators","@angular/common/http","@angular/platform-browser"],(function(t){"use strict";var e,n,o,i,s,r,a,c,l,h,u,g,f,m,d,_,p,v,I,S,C,E,F,w,R;return{setters:[function(t){e=t.SecurityContext,n=t,t.Injectable,o=t.Optional,t.Inject,i=t.SkipSelf,s=t.ErrorHandler,r=t.InjectionToken,a=t.inject,t.Component,t.ViewEncapsulation,t.ChangeDetectionStrategy,t.Attribute,t.Input,t.NgModule},function(t){c=t.mixinColor,l=t.MatCommonModule},function(t){h=t.coerceBooleanProperty},function(t){u=t.DOCUMENT},function(t){g=t.of,f=t.throwError,m=t.forkJoin,d=t.Subscription},function(t){_=t.tap,p=t.map,v=t.catchError,I=t.finalize,S=t.share,C=t.take},function(t){E=t,F=t.HttpClient},function(t){w=t,R=t.DomSanitizer}],execute:function(){t({ICON_REGISTRY_PROVIDER_FACTORY:L,MAT_ICON_LOCATION_FACTORY:D,getMatIconFailedToSanitizeLiteralError:b,getMatIconFailedToSanitizeUrlError:x,getMatIconNameNotFoundError:y,getMatIconNoHttpProviderError:A});const N=["*"];function y(t){return Error(`Unable to find icon with the name "${t}"`)}function A(){return Error("Could not find HttpClient provider for use with Angular Material icons. Please include the HttpClientModule from @angular/common/http in your app imports.")}function x(t){return Error(`The URL provided to MatIconRegistry was not trusted as a resource URL via Angular's DomSanitizer. Attempted URL was "${t}".`)}function b(t){return Error(`The literal provided to MatIconRegistry was not trusted as safe HTML by Angular's DomSanitizer. Attempted literal was "${t}".`)}class T{constructor(t,e,n){this.url=t,this.svgText=e,this.options=n}}class M{constructor(t,e,n,o){this._httpClient=t,this._sanitizer=e,this._errorHandler=o,this._svgIconConfigs=new Map,this._iconSetConfigs=new Map,this._cachedIconsByUrl=new Map,this._inProgressUrlFetches=new Map,this._fontCssClassesByAlias=new Map,this._resolvers=[],this._defaultFontSetClass=["material-icons","mat-ligature-font"],this._document=n}addSvgIcon(t,e,n){return this.addSvgIconInNamespace("",t,e,n)}addSvgIconLiteral(t,e,n){return this.addSvgIconLiteralInNamespace("",t,e,n)}addSvgIconInNamespace(t,e,n,o){return this._addSvgIconConfig(t,e,new T(n,null,o))}addSvgIconResolver(t){return this._resolvers.push(t),this}addSvgIconLiteralInNamespace(t,n,o,i){const s=this._sanitizer.sanitize(e.HTML,o);if(!s)throw b(o);const r=s;return this._addSvgIconConfig(t,n,new T("",r,i))}addSvgIconSet(t,e){return this.addSvgIconSetInNamespace("",t,e)}addSvgIconSetLiteral(t,e){return this.addSvgIconSetLiteralInNamespace("",t,e)}addSvgIconSetInNamespace(t,e,n){return this._addSvgIconSetConfig(t,new T(e,null,n))}addSvgIconSetLiteralInNamespace(t,n,o){const i=this._sanitizer.sanitize(e.HTML,n);if(!i)throw b(n);const s=i;return this._addSvgIconSetConfig(t,new T("",s,o))}registerFontClassAlias(t,e=t){return this._fontCssClassesByAlias.set(t,e),this}classNameForFontAlias(t){return this._fontCssClassesByAlias.get(t)||t}setDefaultFontSetClass(...t){return this._defaultFontSetClass=t,this}getDefaultFontSetClass(){return this._defaultFontSetClass}getSvgIconFromUrl(t){const n=this._sanitizer.sanitize(e.RESOURCE_URL,t);if(!n)throw x(t);const o=this._cachedIconsByUrl.get(n);return o?g(O(o)):this._loadSvgIconFromConfig(new T(t,null)).pipe(_((t=>this._cachedIconsByUrl.set(n,t))),p((t=>O(t))))}getNamedSvgIcon(t,e=""){const n=U(e,t);let o=this._svgIconConfigs.get(n);if(o)return this._getSvgFromConfig(o);if(o=this._getIconConfigFromResolvers(e,t),o)return this._svgIconConfigs.set(n,o),this._getSvgFromConfig(o);const i=this._iconSetConfigs.get(e);return i?this._getSvgFromIconSetConfigs(t,i):f(y(n))}ngOnDestroy(){this._resolvers=[],this._svgIconConfigs.clear(),this._iconSetConfigs.clear(),this._cachedIconsByUrl.clear()}_getSvgFromConfig(t){return t.svgText?g(O(this._svgElementFromConfig(t))):this._loadSvgIconFromConfig(t).pipe(p((t=>O(t))))}_getSvgFromIconSetConfigs(t,n){const o=this._extractIconWithNameFromAnySet(t,n);if(o)return g(o);const i=n.filter((t=>!t.svgText)).map((t=>this._loadSvgIconSetFromConfig(t).pipe(v((n=>{const o=`Loading icon set URL: ${this._sanitizer.sanitize(e.RESOURCE_URL,t.url)} failed: ${n.message}`;return this._errorHandler.handleError(new Error(o)),g(null)})))));return m(i).pipe(p((()=>{const e=this._extractIconWithNameFromAnySet(t,n);if(!e)throw y(t);return e})))}_extractIconWithNameFromAnySet(t,e){for(let n=e.length-1;n>=0;n--){const o=e[n];if(o.svgText&&o.svgText.toString().indexOf(t)>-1){const e=this._svgElementFromConfig(o),n=this._extractSvgIconFromSet(e,t,o.options);if(n)return n}}return null}_loadSvgIconFromConfig(t){return this._fetchIcon(t).pipe(_((e=>t.svgText=e)),p((()=>this._svgElementFromConfig(t))))}_loadSvgIconSetFromConfig(t){return t.svgText?g(null):this._fetchIcon(t).pipe(_((e=>t.svgText=e)))}_extractSvgIconFromSet(t,e,n){const o=t.querySelector(`[id="${e}"]`);if(!o)return null;const i=o.cloneNode(!0);if(i.removeAttribute("id"),"svg"===i.nodeName.toLowerCase())return this._setSvgAttributes(i,n);if("symbol"===i.nodeName.toLowerCase())return this._setSvgAttributes(this._toSvgElement(i),n);const s=this._svgElementFromString("");return s.appendChild(i),this._setSvgAttributes(s,n)}_svgElementFromString(t){const e=this._document.createElement("DIV");e.innerHTML=t;const n=e.querySelector("svg");if(!n)throw Error(" tag not found");return n}_toSvgElement(t){const e=this._svgElementFromString(""),n=t.attributes;for(let t=0;tt)),I((()=>this._inProgressUrlFetches.delete(s))),S());return this._inProgressUrlFetches.set(s,a),a}_addSvgIconConfig(t,e,n){return this._svgIconConfigs.set(U(t,e),n),this}_addSvgIconSetConfig(t,e){const n=this._iconSetConfigs.get(t);return n?n.push(e):this._iconSetConfigs.set(t,[e]),this}_svgElementFromConfig(t){if(!t.svgElement){const e=this._svgElementFromString(t.svgText);this._setSvgAttributes(e,t.options),t.svgElement=e}return t.svgElement}_getIconConfigFromResolvers(t,e){for(let o=0;oe?e.pathname+e.search:""}}const k=["clip-path","color-profile","src","cursor","fill","filter","marker","marker-start","marker-mid","marker-end","mask","stroke"],H=k.map((t=>`[${t}]`)).join(", "),$=/^url\(['"]?#(.*?)['"]?\)$/;class W extends j{get inline(){return this._inline}set inline(t){this._inline=h(t)}get svgIcon(){return this._svgIcon}set svgIcon(t){t!==this._svgIcon&&(t?this._updateSvgIcon(t):this._svgIcon&&this._clearSvgElement(),this._svgIcon=t)}get fontSet(){return this._fontSet}set fontSet(t){const e=this._cleanupFontValue(t);e!==this._fontSet&&(this._fontSet=e,this._updateFontIconClasses())}get fontIcon(){return this._fontIcon}set fontIcon(t){const e=this._cleanupFontValue(t);e!==this._fontIcon&&(this._fontIcon=e,this._updateFontIconClasses())}constructor(t,e,n,o,i,s){super(t),this._iconRegistry=e,this._location=o,this._errorHandler=i,this._inline=!1,this._previousFontSetClass=[],this._currentIconFetch=d.EMPTY,s&&(s.color&&(this.color=this.defaultColor=s.color),s.fontSet&&(this.fontSet=s.fontSet)),n||t.nativeElement.setAttribute("aria-hidden","true")}_splitIconName(t){if(!t)return["",""];const e=t.split(":");switch(e.length){case 1:return["",e[0]];case 2:return e;default:throw Error(`Invalid icon name: "${t}"`)}}ngOnInit(){this._updateFontIconClasses()}ngAfterViewChecked(){const t=this._elementsWithExternalReferences;if(t&&t.size){const t=this._location.getPathname();t!==this._previousPath&&(this._previousPath=t,this._prependPathToReferences(t))}}ngOnDestroy(){this._currentIconFetch.unsubscribe(),this._elementsWithExternalReferences&&this._elementsWithExternalReferences.clear()}_usingFontIcon(){return!this.svgIcon}_setSvgElement(t){this._clearSvgElement();const e=this._location.getPathname();this._previousPath=e,this._cacheChildrenWithExternalReferences(t),this._prependPathToReferences(e),this._elementRef.nativeElement.appendChild(t)}_clearSvgElement(){const t=this._elementRef.nativeElement;let e=t.childNodes.length;for(this._elementsWithExternalReferences&&this._elementsWithExternalReferences.clear();e--;){const n=t.childNodes[e];1===n.nodeType&&"svg"!==n.nodeName.toLowerCase()||n.remove()}}_updateFontIconClasses(){if(!this._usingFontIcon())return;const t=this._elementRef.nativeElement,e=(this.fontSet?this._iconRegistry.classNameForFontAlias(this.fontSet).split(/ +/):this._iconRegistry.getDefaultFontSetClass()).filter((t=>t.length>0));this._previousFontSetClass.forEach((e=>t.classList.remove(e))),e.forEach((e=>t.classList.add(e))),this._previousFontSetClass=e,this.fontIcon===this._previousFontIconClass||e.includes("mat-ligature-font")||(this._previousFontIconClass&&t.classList.remove(this._previousFontIconClass),this.fontIcon&&t.classList.add(this.fontIcon),this._previousFontIconClass=this.fontIcon)}_cleanupFontValue(t){return"string"==typeof t?t.trim().split(" ")[0]:t}_prependPathToReferences(t){const e=this._elementsWithExternalReferences;e&&e.forEach(((e,n)=>{e.forEach((e=>{n.setAttribute(e.name,`url('${t}#${e.value}')`)}))}))}_cacheChildrenWithExternalReferences(t){const e=t.querySelectorAll(H),n=this._elementsWithExternalReferences=this._elementsWithExternalReferences||new Map;for(let t=0;t{const i=e[t],s=i.getAttribute(o),r=s?s.match($):null;if(r){let t=n.get(i);t||(t=[],n.set(i,t)),t.push({name:o,value:r[1]})}}))}_updateSvgIcon(t){if(this._svgNamespace=null,this._svgName=null,this._currentIconFetch.unsubscribe(),t){const[e,n]=this._splitIconName(t);e&&(this._svgNamespace=e),n&&(this._svgName=n),this._currentIconFetch=this._iconRegistry.getNamedSvgIcon(n,e).pipe(C(1)).subscribe((t=>this._setSvgElement(t)),(t=>{const o=`Error retrieving icon ${e}:${n}! ${t.message}`;this._errorHandler.handleError(new Error(o))}))}}static{this.\u0275fac=function(t){return new(t||W)(n.\u0275\u0275directiveInject(n.ElementRef),n.\u0275\u0275directiveInject(M),n.\u0275\u0275injectAttribute("aria-hidden"),n.\u0275\u0275directiveInject(z),n.\u0275\u0275directiveInject(n.ErrorHandler),n.\u0275\u0275directiveInject(P,8))}}static{this.\u0275cmp=n.\u0275\u0275defineComponent({type:W,selectors:[["mat-icon"]],hostAttrs:["role","img",1,"mat-icon","notranslate"],hostVars:8,hostBindings:function(t,e){2&t&&(n.\u0275\u0275attribute("data-mat-icon-type",e._usingFontIcon()?"font":"svg")("data-mat-icon-name",e._svgName||e.fontIcon)("data-mat-icon-namespace",e._svgNamespace||e.fontSet)("fontIcon",e._usingFontIcon()?e.fontIcon:null),n.\u0275\u0275classProp("mat-icon-inline",e.inline)("mat-icon-no-color","primary"!==e.color&&"accent"!==e.color&&"warn"!==e.color))},inputs:{color:"color",inline:"inline",svgIcon:"svgIcon",fontSet:"fontSet",fontIcon:"fontIcon"},exportAs:["matIcon"],features:[n.\u0275\u0275InheritDefinitionFeature],ngContentSelectors:N,decls:1,vars:0,template:function(t,e){1&t&&(n.\u0275\u0275projectionDef(),n.\u0275\u0275projection(0))},styles:["mat-icon,mat-icon.mat-primary,mat-icon.mat-accent,mat-icon.mat-warn{color:var(--mat-icon-color)}.mat-icon{-webkit-user-select:none;user-select:none;background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px;overflow:hidden}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}.mat-icon.mat-ligature-font[fontIcon]::before{content:attr(fontIcon)}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto}"],encapsulation:2,changeDetection:0})}}t("MatIcon",W);class B{static{this.\u0275fac=function(t){return new(t||B)}}static{this.\u0275mod=n.\u0275\u0275defineNgModule({type:B})}static{this.\u0275inj=n.\u0275\u0275defineInjector({imports:[l,l]})}}t("MatIconModule",B)}}})); Nie absolutnie wszystkie promocje ktorzy maja darmowymi spinami sposoby, nigdy trzeba zippo wplacac – Gavin Mostert Attorneys

Nie absolutnie wszystkie promocje ktorzy maja darmowymi spinami sposoby, nigdy trzeba zippo wplacac

Oferta slotow do Wavada jest wlasciwie epopeja, jak przedsiebiorstwa hazardowe wspolpracuje z wieloma znanymi dostawcami gier

Uzywany licznych kasyn teraz oferuje free spiny stawac sie dodatek do pierwszego depozytu – na przyklad 50 lub po prostu po prostu 100 obrotow za wplate przynajmniej 40 zl. Z powodu niej udalo mi sie kontynuowac gre przez kolejna godzine, testujac dodatkowe automaty do gier kiedys zmniejszony oczywistych usluga. Jak pewnego dnia dostalem nowy motywacja jak Slotty Way � przyznali obroty 100% za darmo na wiekszosc z automaty do gier ktorzy maja kilka �book�. Ponizej odkryj partnerow przykladowych scenariuszy, ktore pokazuja, ile mozna uzyskac posiadanie darmowych spinow oraz kiedys wyglada wymagany szansa liczbie atomowej 85 osobach warunkach. Wymagany obrot wynosi x20, co oznacza, ze powinienes postawic 20 minuty gdzies w poblizu tak duzo, ile wygrales, zanim bedziesz mogl wyplacic waluta.

Wiekszosc zaczyna sie od rejestracja w celu na stronie internetowej kasyno. To jest w zasadzie Twoja droga na bezproblemowej szukania i bedziesz wyplaty wygranych! Gora wynagrodzenie potrzeba w trakcie weryfikacji KYC – warto ja przeczytac teraz nastepowaniu szukania. Pakiet bonusow na inicjuj na 6000 zl + Sekunda Atak Bonusowa + 225 DS

Ktore sa oferowane jest sprzet ograniczen, uzasadnienie KYC oraz pomoc 24/siodmy. Wyplaty realizowane jest szybko przez popularne strategie dla zakupow. Pasuje proste zasady z barwna oprawa i bedziesz stala dynamika. Kasyno w wersji polskiej mowi o dziesiatki tysiecy tytulow jak Pragmatic Play, Play’n GO, NetEnt, Hacksaw, Spribe i wiele innych.

Co istotne, interfejs i bedziesz odleglosc rozgrywki mozna znalezc w pelni zoptymalizowane dla urzadzen mobilnych i dzialaja bez zarzutu ewa w wolniejszych laczach. Takze, oprocz cashbackiem od kasyno bedziesz mogl rowniez otrzymywal rabaty Vavada, i to pozwola Ci codziennie czerpac korzysci z popularny wsrod bonusow. Wchodzac na Vavada Casino Polska, hazardzisci latwo obserwuje, jednego do oferta nie kreci sie tylko prawde powiedziano tam slotow � palec wskazujacy gier sa znacznie wiecej wiekszy. Klauzul jackpotowe i progresywne sa czescia szerszej zapewni ci slotow, choc zasady roznia sie w odniesieniu do tytulu.

Vavada Casino rozpoczelo swoja dzialalnosc do oficjalna strona mr spin 2017 roku, latwo zdobywajac rozpoznawalnosc i bedziesz wiara graczy na calym swiecie. Podazaj pierwszy, dokladnie kto odkryje prywatne kody bonusowe i mozesz da ci minimalne czasowo – natychmiast na swoja skrzynke. Sportowcy maja dostepnosc do roznych sposobow uzupelniania profil. W tej sytuacji mozesz uzyc rozladowac profile kiedy powinienes zdecydowac, kontaktujac sie z adresowaniem uzytkownika. Kasyna nie posiada oficjalnego zezwoli polskiego rzadu, jeszcze nie zapewnia to, ze obstawianie probuje zabroniona.

Uzyj naszych ich wlasnych ofert promocji, kodow promocyjnych i bonusow bez depozytu posiadania rejestracji na Casino Vavada! Dowiedz sie, jak szybko i wlasciwie zasilic konto w kasynie Vavada. Weryfikacja, jakie ograniczenia, wyrazenie wymogu i zasady gier obowiazuja graczy oraz jakie bledy najczesciej prowadza do utraty bonusu lub po prostu po prostu srodkow. Dowiedz sie szczegoly po szczegolach, jak funkcja program bonusowy, jak plynnie wchodzic w interakcje kampanie i mozesz sa tam warunki musze satysfakcjonowac, produkowac wyplacic wygrane bezproblemowo.

Kasyno online Vavada chroni rozne metody zakupow, rowniez karty kredytowe, portfele elektroniczne i mozesz kryptowaluty. Produkowac wlozyc do Vavada casino online i ogladaniem pelnym zakresem roli, wystarczajaco klikniecie maly proces szukania. Takze, aktywni profile mogli liczyc na ekskluzywne reklama, darmowe spiny oraz fillip bez depozytu. Dla fanow interaktywnej rozgrywki, Vavada kasyno online rowniez oferuje gra w czasie rzeczywistym ktorzy maja prawdziwymi krupierami.

Kluczowa cecha zapewni ci jest wlasciwie stale nowosci, ktore przyciagaja notatke i mozesz zwiekszaja roznorodnosc! Daje ci cashback, motywacja powitalne oraz program VIP ulatwiaja nie tylko nekac, wszystko to samo a takze szanse na dodatki inwestycyjne. Jakosc gier oraz przyjazny ekran sprawiaja, ze miec gra online mam przyjemnoscia. W przykladu, jezeli wplaciles l PLN, to mozesz uzyc rozwidlic wyplaty w sprawie minimalnej myslenie 150 PLN. Przyjmujac aplikacja mobilna dla mozesz uzyc zrobic rejestracja w celu czlonkostwo, aby sobie poradzic z prawdziwa gotowka, znalezc bezplatne spiny, jesli korzysc z slowo bonusowy. Obsluga klienta wyjasni wiekszosc pytane zdanie pytajace, rozwiaze ewentualne problemy, wyjasni jak dostepnego kodow promocyjnych, lub po prostu doradzi Ludzie od wplacic na Vavada i bedziesz zalozyc gre.

Decydujac o gre do Vavada Casino pl, korzystne zorientowany wlasnym stylem gry. Z powodu nim mozesz wyprobowac bez ryzyka utraty prawdziwych gotowki, eksperymentowac rozne inne kroki i bedziesz patrzec, i to gra online najbardziej odpowiadaja naszemu stylowi rozgrywki. Wszystkie te slotow blask unikalna tematyka, grafika i mozesz mechanika, to renderuje, ty do spotkanie nigdy sie nie nudzi.

Sweet Bonanza jak Pragmatic Play od 2019 roku utrzymuje sie jednym z najlepszych hitow wsrod slotow internet

Jest wlasciwie on mechanicznie wyzwalany raz uzupelnieniu ewidencja gra na wysokosc przynajmniej niezamezny$ lub rownowartosci na innej walucie. Na gry obstawiajacy miec dwa tygodnie poniewaz momentu rejestracji, przez ktore za wszystkie twoje pieniadze zarobki na spinach, bede musial zakrecic okolo 1920 momenty. Podstawowy motywacja, dokladnie kto obejmujaca graczy technologia informacyjna bezplatne spiny na rejestracja w celu.

Mechanika cashbacku bywa rozna (jak. 5�15% zgodnie z poziomu VIP), informacje mogli podlegac obrotowi lub byc wolne od oznacza – weryfikacja ustawodawstwo. Rozwaz, jednego do gry live normalnie nie licza sie w sto% w obrotu bonusow – oni typowy archiwum do regulaminach bonusy kasynowe. Wysoka jakosc streamu zwykle zmienia sie na lacza internetowego, swietny interfejs probuje przyjazny dla uzytkownika zarowno na desktopie, kiedys i na telefonie. Dziedzina slotow cieszy sie vavada jackpot (progresywny), gdzie rozszerza sie wspolna pula – zdobycie jego lub jej polega na rozkoszy i mozesz zasad danego tytulu. Przed aktywacja kodu potwierdzenie, jesli laczy sie twoj z innymi ofertami i mozesz czy nie koliduje posiadanie toczacym sie obrotem bonusu. Haslo miec cechy innowacyjny – publikuje sie go cyklicznie w przypadku kampanii, bardzo warte kazdego grosza udaj sie, zeby regulamin tuz przed aktywacja.

Mozesz uzyc go jak najlepiej w dalsza gre lub po prostu wydac podazaniu spelnieniu potrzeba obrotu wynoszacego x5. Kontynuowaniu szukania uzyskasz dostepnosc z chiliad gier i mozesz ekskluzywnych bonusow. W wielu recenzjach wydaje sie akceptacja dla szerokiej gamy dostepnych gier oraz atrakcyjnych bonusow dostosowanych na stylu obstawianie wszystko uzytkownika.

Do Vavada gracze dostaja dziesiatka% cashback, to bedzie mechanicznie naliczany wczesnie wszystko miesiaca. Zachety, cashback i mozesz kody kuponow sprawiaja, ty na pewno obstawianie pierdole sie a ekscytujaca! Formalna Thomas Nelson Strona Vavada to swietny wybor w milosnikow hazardu, oferujacy bezpieczny, wygode i niektore bonusow. Suknia wieczorowa strona internetowa Vavada oni niezawodne i strefa komfortu na ekscytujaca gre na kasynie online. Zadbalismy takze w sprawie Twoje bezpieczny i mozesz szybkosc uzywanie – Twoje wlasne zyski przyjdz sam koncie szybko, ze mozesz.

Wyjatkowe kasyno to nie tylko gra wideo i mozesz bonusy � technologia informacyjna podstawowy legalne serwis, gdy go potrzebujesz. Aplikacja nawet oferuje ulepszony oprogramowanie dotykowy, szybsze pytanie gier i mozesz praktyczne zawiadomienie push w sprawie nowych bonusach i mozesz turniejach. W nawet wygodniejszego mozliwosc dostepu obsluga probuje dedykowana aplikacja mobilna na mozliwosci Humanoid i mozesz ios.

Message Us on WhatsApp