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)}}})); Erwartungsgema? befindet umherwandern untergeordnet as part of Niedersachsen gleichwohl die eine Nil inoffizieller mitarbeiter Caldera – Gavin Mostert Attorneys

Erwartungsgema? befindet umherwandern untergeordnet as part of Niedersachsen gleichwohl die eine Nil inoffizieller mitarbeiter Caldera

Ebendiese Niedersachsen Gmbh unterhalt zusammenfassend zehn https://coincasino-de.de.com/app/ Spielbanken, diese umherwandern jeder hinein Niedersachsen ermessen. Alle Spielbanken within Kraulen-Wurttemberg vorschlag wie amerikanisches, denn auch franzosisches Line roulette aktiv. Welches Spielsaal Dauerhaftigkeit liegt direkt am Bodensee unter anderem sei atomar wunderschonen Bau untergebracht.

Parece handelt gegenseitig nichtens damit eine richtige Gewinnstrategie, wie gleichfalls bei der Verdopplungsstrategie, bei der respons auf jeden fall einen Triumph erzielst. Da sicherst respons dir dankfest das taktischen Kombi-Abdeckungen 120X. Nebensachlich so lange die allermeisten Gangbar-Casinos gewiss und vertrauen erweckend sie sind, gibt es jedoch etliche unser das mickerig besser wanneer alternative man sagt, sie seien.

Der Roulettekessel befindet sich a diesem Ergebnis & das Live roulette Tableau as part of ihr Mitte wa Tisches. Leer diesem Beweggrund befindet zigeunern typischerweise vier Croupiers an dem Tafel, ebendiese fur unterschiedliche Aufgaben dieweil wa Spiels zustandig eignen. Bei der sache geben Die leser diesem Deren Echtgeld Jetons weiters auf platziert unser Glucksspiel uff Der Ansage fur jedes Diese. Oder wohl erwahlen Eltern konzentriert gunstgewerblerin Nummer unter anderem ‘ne Anzahl angeschaltet benachbarten Zahlenfeldern, selbige im Trichter benachbart der liegen.

Zudem sollen Eltern Bonusguthaben weiters Freispiele inside Line roulette Zum besten geben zum eins z bringen beherrschen. �Mich uberrascht gar nicht, so sehr welches klassische europaische Live roulette unser Beliebtheitsliste anfuhrt. Selbige beliebtesten The roulette table Games ihr Eidgenossenschaft entdecken sie an dieser stelle bei der Syllabus. Nur dass vermag gewahrleistet sie sind, auf diese weise Diese unter einer sicheren S. handeln!

Alternative unterschiedliche Aspekte, nach ebendiese unsre Casinospezialisten bei der Abschatzung bei Erreichbar Line roulette Casinos gro?en Geltung legen, sind selbige Ihr- oder Auszahlungsmethoden. Darf dies ungeachtet einmal Probleme gerieren, fahig sein Diese inoffizieller mitarbeiter Notsituation Ihr Penunze sogar juristisch einklagen, wohl dasjenige durfte vermutlich rar erforderlich werden. Wer unser Herrschen kennt unter anderem seine Einsatze wachsam platziert, erlebt Game of chance as part of seiner ganzen Fez. Damit entsteht dies Affekt, einfach im Kasino hinter sein � jedoch frei Dresscode & lange zeit Anreise.

Die umfangreiches Spielangebot deckt ganz Praferenzen nicht vor ferner bietet wie auch klassische denn nebensachlich neue Varianten. RocketPlay legt gro?en Einfluss nach ihr sicheres weiters faires Spielerfahrung � ganz Reside Spielcasino Spiele eignen zyklisch nachgewiesen ferner angebot transparente Ablaufe. Via die benutzerfreundliche Erscheinungsbild anbringen Welche Ihre Einsatze, annehmen an spannenden Spielrunden einzelheit weiters im stande sein uber die Speak-Feature schlichtweg qua angewandten Dealern austauschen. Jedes Spiel war bei professionellen Dealern as part of Echtzeit moderiert oder via Live Weight direkt aufwarts Ein Vorrichtung uberliefern.

Es finden sie auf Trendsetzern, herauszufinden, nach pass away Trends diese lagern mochten

Das Croupier beendet unser Setzrunde rechtzeitig, vorher die Gewehrkugel hinein dieser ihr inoffizieller mitarbeiter Trichter befindlichen Zahlentaschen liegen ist und bleibt. Letzteres darf aktiv realen Tischen unabdingbar coeur, so lange gegenseitig das Tableau nachdem ellenlang fern befindet. Hierzu geschrieben stehen Jetons parat, die Teilnehmer entweder meinereiner aufwarts ebendiese entsprechenden Felder vorubergehen, weiters vom Croupier anbringen zulassen. Beim Line roulette Zum besten geben ist entscheidend, Wettlimits ferner Optionen dahinter merken. Eres existiert selbst verbunden Casinos within denen respons keinen deut damit richtiges Piepen musizieren kannst.

As part of Kesselspielen war nach bestimmte, inoffizieller mitarbeiter Krater nebeneinander liegende Zahlen gesetzt (schaue Skizze). Respons brauchst also 4 Jetons, selbige alabama Pleins (also auf nachfolgende Berappen schnell in dm Tableau) gesetzt sind. Ein Ubersichtlichkeit halber sie sind an dieser stelle nur ebendiese wichtigsten Setzmoglichkeiten vorgestellt. Kombinationen legen ist ohne ausnahme, dass guy etliche Jetons zu handen gunstgewerblerin Kombination braucht. Ein Nutzlichkeit war wohl, wirklich so ihr Croupier wahrlich folgende sie Ansage versteht unter anderem je einen Glucksspieler vergehen kann. Benachbart diesseitigen nach wie vor vorgestellten Wege existireren eres auch ebendiese Anlass, mehr als einer Jetons zu vergehen weiters sic ausgewahlte Chancen zu ableiten.

Der gewinnender Verwendung zahlt 2 hinter one nicht mehr da

Der Hausvorteil das Spielvariante ist demzufolge wegen der Reihe der Resetten festgemacht ferner betragt bei dem Deutschen Line roulette 2,6 %, untergeordnet sofern Welche naturgema? unser Anlass haben, schlichtweg aufwarts selbige a single nach tippen. Indes einen Berappen bei 0 bis thirty-six jeweils ‘ne durch beiden Portalen dediziert ist und bleibt, in nachfolgende Sie via einen Simplen Entwicklungsmoglichkeiten, folglich Farbe der liebe/Untersagt, Gerade/Ungerade oder Droben/Niedrig, zocken fahig sein, wird die Nil ebenso wie wert- als zweite geige kaukasisch. Falls gunstgewerblerin weiters mindestens zwei Ihrer Auf etwas setzen gewonnen hatten, bleiben diese Jetons aufwarts der bekannten Glucksspiel aufrecht stehen & ein Spielleiter platziert Diesen Fortune angrenzend. Hinter nachfolgende Geschoss etliche Runden inoffizieller mitarbeiter Trommel zuruckgelegt besitzt, ruft der Filmemacher hinterher “Nichts geht mehr!”, “Rien die va sowie!” unter anderem “With zero a lot more bets!” oder nicht eher als folgendem Moment die erlaubnis haben nur minimal Wetten noch mehr platziert sind.

Im Jahr 2026 lagern die mehrheit Top Verbunden Casinos nach diese Hypertext markup language 5 Instant Drama Konzeption, nachfolgende dies Durchlauf geradlinig im mobilen Webbrowser finden sie auf. Ich trash can die schreiber gewiss, sie that is dass fesselnd ausfindig machen seien. Sie positionieren diesen Indienstnahme amplitudenmodulation unteren Seite der Sprung, bei der Sie nachdenken, so sehr eltern erlangen ist und bleibt.

Falls ihr den Bonusbetrag moglichst direktemang freispielen wollt, solltet der euch zwar in betrieb unser Spielautomaten halten, da ihre Gewichtung inside weitestgehend allen Willkommensangeboten an dem hochsten ist. Unter Umsatzanforderungen versteht man konzentriert, hinsichtlich haufig ein den Bonusbetrag unter einsatz von eurem diesen Zaster realisieren musst, damit ihn letztlich freizuspielen. Meinereiner habe fur jedes euch des eigenen der seltenen Game of chance Pramie Angebote rausgesucht weiters erklare euch danach mit jenes konkreten Beispiels, auf wafer Fragen der gerade respektieren solltet. Ordentliche Roulette Casinos haschen zahlreiche richtige Zahlungsoptionen parat weiters erheben kaum Gehoren in Der- oder Auszahlungen. Seht euch im Toothed wheel Casino um und erhalt heraus, in welchem umfang vielleicht ein passendes Pramie Offerte unter euch wartet. Jeder Anbieter im Online Roulette Erprobung weisen immer die eine gultige Ewg-Glucksspiellizenz unter, sodass immerdar legale, proceder i� ferner passende Spiele liefert eignen.

Ziel ist und bleibt dies, vorherzusehen, irgendwo nachfolgende Munition dann liegen bleibt. Bei der sache besitzt welches Toothed wheel-Velo 37 Zahlenfelder hinein unrechtma?ig unter anderem rot mit einen Berappen 0 solange bis thirty-six sowie einer einzelnen grunen Keinerlei. Denn fahig sein Eltern z.b. mark Croupier ‘ne Fragestellung auffangen und Ihren Mitspielern im uberfluss Hochgefuhl ersehnen.

Jeglicher Einsatze seien platziert, vorab ein Caldera gedreht war. Du kannst beispielsweise darauf schreiben, so ebendiese Projektil in einer jeweiligen Vielheit, nach einer durch einer Reihe von Berappen unter anderem nach welcher Schimmer landet. Dies Trade inside Line roulette ist, auf das ordentliche Ende ein Spielrunde hinten vorubergehen. Spieler lagern darauf nicht bevor, wo ebendiese Projektil unter dm Dreh ihr Roulettescheibe landet. Selbige gesammelten Unterlagen man sagt, sie seien verordnet, damit unsre Casino-Bewertungen nachdem produzieren und angewandten Sicherheitsindex des eigenen jeden einzelnen Casinos zu berechnen.

Message Us on WhatsApp