1(function () { 2 'use strict'; 3 4 function Noise(seed) { 5 function Grad(x, y, z) { 6 this.x = x; 7 this.y = y; 8 this.z = z; 9 } 10 Grad.prototype.dot2 = function (x, y) { 11 return this.x * x + this.y * y; 12 }; 13 Grad.prototype.dot3 = function (x, y, z) { 14 return this.x * x + this.y * y + this.z * z; 15 }; 16 this.grad3 = [new Grad(1, 1, 0), new Grad(-1, 1, 0), new Grad(1, -1, 0), new Grad(-1, -1, 0), new Grad(1, 0, 1), new Grad(-1, 0, 1), new Grad(1, 0, -1), new Grad(-1, 0, -1), new Grad(0, 1, 1), new Grad(0, -1, 1), new Grad(0, 1, -1), new Grad(0, -1, -1)]; 17 this.p = [151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5, 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180]; 18 19 // To remove the need for index wrapping, double the permutation table length 20 this.perm = new Array(512); 21 this.gradP = new Array(512); 22 this.seed(seed || 0); 23 } 24 25 // This isn't a very good seeding function, but it works ok. It supports 2^16 26 // different seed values. Write something better if you need more seeds. 27 Noise.prototype.seed = function (seed) { 28 if (seed > 0 && seed < 1) { 29 // Scale the seed out 30 seed *= 65536; 31 } 32 seed = Math.floor(seed); 33 if (seed < 256) { 34 seed |= seed << 8; 35 } 36 var p = this.p; 37 for (var i = 0; i < 256; i++) { 38 var v; 39 if (i & 1) { 40 v = p[i] ^ seed & 255; 41 } else { 42 v = p[i] ^ seed >> 8 & 255; 43 } 44 var perm = this.perm; 45 var gradP = this.gradP; 46 perm[i] = perm[i + 256] = v; 47 gradP[i] = gradP[i + 256] = this.grad3[v % 12]; 48 } 49 }; 50 51 /* 52 for(var i=0; i<256; i++) { 53 perm[i] = perm[i + 256] = p[i]; 54 gradP[i] = gradP[i + 256] = grad3[perm[i] % 12]; 55 }*/ 56 57 // Skewing and unskewing factors for 2, 3, and 4 dimensions 58 var F2 = 0.5 * (Math.sqrt(3) - 1); 59 var G2 = (3 - Math.sqrt(3)) / 6; 60 var F3 = 1 / 3; 61 var G3 = 1 / 6; 62 63 // 2D simplex noise 64 Noise.prototype.simplex2 = function (xin, yin) { 65 var n0, n1, n2; // Noise contributions from the three corners 66 // Skew the input space to determine which simplex cell we're in 67 var s = (xin + yin) * F2; // Hairy factor for 2D 68 var i = Math.floor(xin + s); 69 var j = Math.floor(yin + s); 70 var t = (i + j) * G2; 71 var x0 = xin - i + t; // The x,y distances from the cell origin, unskewed. 72 var y0 = yin - j + t; 73 // For the 2D case, the simplex shape is an equilateral triangle. 74 // Determine which simplex we are in. 75 var i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords 76 if (x0 > y0) { 77 // lower triangle, XY order: (0,0)->(1,0)->(1,1) 78 i1 = 1; 79 j1 = 0; 80 } else { 81 // upper triangle, YX order: (0,0)->(0,1)->(1,1) 82 i1 = 0; 83 j1 = 1; 84 } 85 // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and 86 // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where 87 // c = (3-sqrt(3))/6 88 var x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords 89 var y1 = y0 - j1 + G2; 90 var x2 = x0 - 1 + 2 * G2; // Offsets for last corner in (x,y) unskewed coords
91 var y2 = y0 - 1 + 2 * G2; 92 // Work out the hashed gradient indices of the three simplex corners 93 i &= 255; 94 j &= 255; 95 var perm = this.perm; 96 var gradP = this.gradP; 97 var gi0 = gradP[i + perm[j]]; 98 var gi1 = gradP[i + i1 + perm[j + j1]]; 99 var gi2 = gradP[i + 1 + perm[j + 1]]; 100 // Calculate the contribution from the three corners 101 var t0 = 0.5 - x0 * x0 - y0 * y0; 102 if (t0 < 0) { 103 n0 = 0; 104 } else { 105 t0 *= t0; 106 n0 = t0 * t0 * gi0.dot2(x0, y0); // (x,y) of grad3 used for 2D gradient 107 } 108 var t1 = 0.5 - x1 * x1 - y1 * y1; 109 if (t1 < 0) { 110 n1 = 0; 111 } else { 112 t1 *= t1; 113 n1 = t1 * t1 * gi1.dot2(x1, y1); 114 } 115 var t2 = 0.5 - x2 * x2 - y2 * y2; 116 if (t2 < 0) { 117 n2 = 0; 118 } else { 119 t2 *= t2; 120 n2 = t2 * t2 * gi2.dot2(x2, y2); 121 } 122 // Add contributions from each corner to get the final noise value. 123 // The result is scaled to return values in the interval [-1,1]. 124 return 70 * (n0 + n1 + n2); 125 }; 126 127 // 3D simplex noise 128 Noise.prototype.simplex3 = function (xin, yin, zin) { 129 var n0, n1, n2, n3; // Noise contributions from the four corners 130 131 // Skew the input space to determine which simplex cell we're in 132 var s = (xin + yin + zin) * F3; // Hairy factor for 2D 133 var i = Math.floor(xin + s); 134 var j = Math.floor(yin + s); 135 var k = Math.floor(zin + s); 136 var t = (i + j + k) * G3; 137 var x0 = xin - i + t; // The x,y distances from the cell origin, unskewed. 138 var y0 = yin - j + t; 139 var z0 = zin - k + t; 140 141 // For the 3D case, the simplex shape is a slightly irregular tetrahedron. 142 // Determine which simplex we are in. 143 var i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords 144 var i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords 145 if (x0 >= y0) { 146 if (y0 >= z0) { 147 i1 = 1; 148 j1 = 0; 149 k1 = 0; 150 i2 = 1; 151 j2 = 1; 152 k2 = 0; 153 } else if (x0 >= z0) { 154 i1 = 1; 155 j1 = 0; 156 k1 = 0; 157 i2 = 1; 158 j2 = 0; 159 k2 = 1; 160 } else { 161 i1 = 0; 162 j1 = 0; 163 k1 = 1; 164 i2 = 1; 165 j2 = 0; 166 k2 = 1; 167 } 168 } else { 169 if (y0 < z0) { 170 i1 = 0; 171 j1 = 0; 172 k1 = 1; 173 i2 = 0; 174 j2 = 1; 175 k2 = 1; 176 } else if (x0 < z0) { 177 i1 = 0; 178 j1 = 1; 179 k1 = 0; 180 i2 = 0; 181 j2 = 1; 182 k2 = 1; 183 } else { 184 i1 = 0; 185 j1 = 1; 186 k1 = 0; 187 i2 = 1; 188 j2 = 1; 189 k2 = 0; 190 } 191 } 192 // A step of (1,0,0) in (i,j,k) means a step of (1-c,-c,-c) in (x,y,z), 193 // a step of (0,1,0) in (i,j,k) means a step of (-c,1-c,-c) in (x,y,z), and 194 // a step of (0,0,1) in (i,j,k) means a step of (-c,-c,1-c) in (x,y,z), where 195 // c = 1/6. 196 var x1 = x0 - i1 + G3; // Offsets for second corner 197 var y1 = y0 - j1 + G3; 198 var z1 = z0 - k1 + G3; 199 var x2 = x0 - i2 + 2 * G3; // Offsets for third corner 200 var y2 = y0 - j2 + 2 * G3; 201 var z2 = z0 - k2 + 2 * G3; 202 var x3 = x0 - 1 + 3 * G3; // Offsets for fourth corner 203 var y3 = y0 - 1 + 3 * G3; 204 var z3 = z0 - 1 + 3 * G3; 205 206 // Work out the hashed gradient indices of the four simplex corners 207 i &= 255; 208 j &= 255; 209 k &= 255; 210 var perm = this.perm; 211 var gradP = this.gradP; 212 var gi0 = gradP[i + perm[j + perm[k]]]; 213 var gi1 = gradP[i + i1 + perm[j + j1 + perm[k + k1]]]; 214 var gi2 = gradP[i + i2 + perm[j + j2 + perm[k + k2]]]; 215 var gi3 = gradP[i + 1 + perm[j + 1 + perm[k + 1]]]; 216 217 // Calculate the contribution from the four corners 218 var t0 = 0.5 - x0 * x0 - y0 * y0 - z0 * z0; 219 if (t0 < 0) { 220 n0 = 0; 221 } else { 222 t0 *= t0; 223 n0 = t0 * t0 * gi0.dot3(x0, y0, z0); // (x,y) of grad3 used for 2D gradient 224 } 225 var t1 = 0.5 - x1 * x1 - y1 * y1 - z1 * z1; 226 if (t1 < 0) { 227 n1 = 0; 228 } else { 229 t1 *= t1; 230 n1 = t1 * t1 * gi1.dot3(x1, y1, z1); 231 } 232 var t2 = 0.5 - x2 * x2 - y2 * y2 - z2 * z2; 233 if (t2 < 0) { 234 n2 = 0; 235 } else { 236 t2 *= t2; 237 n2 = t2 * t2 * gi2.dot3(x2, y2, z2); 238 } 239 var t3 = 0.5 - x3 * x3 - y3 * y3 - z3 * z3; 240 if (t3 < 0) { 241 n3 = 0; 242 } else { 243 t3 *= t3; 244 n3 = t3 * t3 * gi3.dot3(x3, y3, z3); 245 } 246 // Add contributions from each corner to get the final noise value. 247 // The result is scaled to return values in the interval [-1,1]. 248 return 32 * (n0 + n1 + n2 + n3); 249 }; 250 251 // ##### Perlin noise stuff 252 253 function fade(t) { 254 return t * t * t * (t * (t * 6 - 15) + 10); 255 } 256 function lerp(a, b, t) { 257 return (1 - t) * a + t * b; 258 } 259 260 // 2D Perlin Noise 261 Noise.prototype.perlin2 = function (x, y) { 262 // Find unit grid cell containing point 263 var X = Math.floor(x), 264 Y = Math.floor(y); 265 // Get relative xy coordinates of point within that cell 266 x = x - X; 267 y = y - Y;
268 // Wrap the integer cells at 255 (smaller integer period can be introduced here) 269 X = X & 255; 270 Y = Y & 255; 271 272 // Calculate noise contributions from each of the four corners 273 var perm = this.perm; 274 var gradP = this.gradP; 275 var n00 = gradP[X + perm[Y]].dot2(x, y); 276 var n01 = gradP[X + perm[Y + 1]].dot2(x, y - 1); 277 var n10 = gradP[X + 1 + perm[Y]].dot2(x - 1, y); 278 var n11 = gradP[X + 1 + perm[Y + 1]].dot2(x - 1, y - 1); 279 280 // Compute the fade curve value for x 281 var u = fade(x); 282 283 // Interpolate the four results 284 return lerp(lerp(n00, n10, u), lerp(n01, n11, u), fade(y)); 285 }; 286 287 // 3D Perlin Noise 288 Noise.prototype.perlin3 = function (x, y, z) { 289 // Find unit grid cell containing point 290 var X = Math.floor(x), 291 Y = Math.floor(y), 292 Z = Math.floor(z); 293 // Get relative xyz coordinates of point within that cell 294 x = x - X; 295 y = y - Y; 296 z = z - Z; 297 // Wrap the integer cells at 255 (smaller integer period can be introduced here) 298 X = X & 255; 299 Y = Y & 255; 300 Z = Z & 255; 301 302 // Calculate noise contributions from each of the eight corners 303 var perm = this.perm; 304 var gradP = this.gradP; 305 var n000 = gradP[X + perm[Y + perm[Z]]].dot3(x, y, z); 306 var n001 = gradP[X + perm[Y + perm[Z + 1]]].dot3(x, y, z - 1); 307 var n010 = gradP[X + perm[Y + 1 + perm[Z]]].dot3(x, y - 1, z); 308 var n011 = gradP[X + perm[Y + 1 + perm[Z + 1]]].dot3(x, y - 1, z - 1); 309 var n100 = gradP[X + 1 + perm[Y + perm[Z]]].dot3(x - 1, y, z); 310 var n101 = gradP[X + 1 + perm[Y + perm[Z + 1]]].dot3(x - 1, y, z - 1); 311 var n110 = gradP[X + 1 + perm[Y + 1 + perm[Z]]].dot3(x - 1, y - 1, z); 312 var n111 = gradP[X + 1 + perm[Y + 1 + perm[Z + 1]]].dot3(x - 1, y - 1, z - 1); 313 314 // Compute the fade curve value for x, y, z 315 var u = fade(x); 316 var v = fade(y); 317 var w = fade(z); 318 319 // Interpolate 320 return lerp(lerp(lerp(n000, n100, u), lerp(n001, n101, u), w), lerp(lerp(n010, n110, u), lerp(n011, n111, u), w), v); 321 }; 322 323 var initBg = function initBg() { 324 var canvas = document.querySelector('canvas.bg'); 325 if (!canvas) return; 326 var ctx = canvas.getContext('2d'); 327 var noise = new Noise(); 328 var gradientColors = []; 329 var cells = []; // { x, y, w, h, centerX, centerY } 330 var gridCols = 0; 331 var cellSize = 0; 332 var dpr = window.devicePixelRatio || 1; 333 var lastMove = 0; 334 var lastMouseX = 0; 335 var lastMouseY = 0; 336 var animationFrameId; 337 var adjustColumns = function adjustColumns(value, isColumnsEven) { 338 return isColumnsEven ? value % 2 !== 0 ? value - 1 : value : value % 2 === 0 ? value - 1 : value; 339 }; 340 var calculateLayout33 = function calculateLayout33(wrapColumns) { 341 var columns33 = Math.trunc(wrapColumns * 0.33); 342 return (wrapColumns - columns33) % 2 === 0 ? columns33 : columns33 + 1; 343 }; 344 345 // Build the gradient palette by sampling a 1-D gradient via an offscreen 346 // canvas. Falls back gracefully if getImageData is rejected (tainted canvas 347 // on some iOS WebKit contexts) â `draw` will then paint cells using the 348 // global fill colour only. 349 var computeGradient = function computeGradient(size) { 350 var off = document.createElement('canvas'); 351 off.width = size; 352 off.height = 1; 353 var offCtx = off.getContext('2d'); 354 var grad = offCtx.createLinearGradient(0, 0, size, 1); 355 grad.addColorStop(0, 'rgb(179, 17, 195)'); 356 grad.addColorStop(0.25, 'rgba(111, 43, 150, 1)'); 357 grad.addColorStop(0.5, 'rgba(55, 58, 107, 1)'); 358 grad.addColorStop(0.75, 'rgba(17, 43, 48, 1)'); 359 grad.addColorStop(1, 'rgba(17, 17, 17, 1)'); 360 offCtx.fillStyle = grad; 361 offCtx.fillRect(0, 0, size, 1); 362 var out = [];
363 try { 364 var data = offCtx.getImageData(0, 0, size, 1).data; 365 for (var i = 0; i < size; i++) { 366 var o = i * 4; 367 out.push("rgb(".concat(data[o], ", ").concat(data[o + 1], ", ").concat(data[o + 2], ")")); 368 } 369 } catch (_) { 370 // getImageData blocked â return empty palette, draw will skip per-cell fill 371 } 372 return out; 373 }; 374 var buildGrid = function buildGrid() { 375 dpr = window.devicePixelRatio || 1; 376 var w = window.innerWidth; 377 var h = window.innerHeight; 378 379 // Size canvas in CSS pixels, scale the context for crisp HiDPI rendering 380 canvas.width = Math.round(w * dpr); 381 canvas.height = Math.round(h * dpr); 382 canvas.style.width = w + 'px'; 383 canvas.style.height = h + 'px'; 384 ctx.setTransform(1, 0, 0, 1, 0, 0); 385 ctx.scale(dpr, dpr); 386 var pixelSize = w >= 1024 ? 64 : w >= 576 ? 48 : 32; 387 388 // Cover the full viewport diagonal so the gradient never ends before the 389 // corner pixels; capped at 2400 to keep the palette extraction cheap. 390 var canvasSize = Math.max(600, Math.min(Math.ceil(Math.sqrt(w * w + h * h)), 2400)); 391 gridCols = Math.trunc(w / pixelSize); 392 var isColumnsEven = gridCols % 2 === 0; 393 cellSize = w / gridCols; 394 var rows = Math.trunc(h / pixelSize) + 2; 395 var wrapColumns = Math.min(22, Math.trunc(gridCols * 0.88)); 396 wrapColumns = adjustColumns(wrapColumns, isColumnsEven); 397 var modalColumns = Math.min(10, Math.trunc(gridCols * 0.88)); 398 modalColumns = adjustColumns(modalColumns, isColumnsEven); 399 document.body.style.cssText = "\n --wrap-size:".concat(cellSize * wrapColumns, "px;\n --modal-size:").concat(cellSize * modalColumns, "px;\n --wrap-30:").concat(cellSize * Math.trunc(wrapColumns * 0.3), "px;\n --wrap-35:").concat(cellSize * Math.trunc(wrapColumns * 0.35), "px;\n --wrap-40:").concat(cellSize * Math.trunc(wrapColumns * 0.4), "px;\n --wrap-45:").concat(cellSize * Math.trunc(wrapColumns * 0.45), "px;\n --wrap-50:").concat(cellSize * Math.trunc(wrapColumns * 0.5), "px;\n --wrap-60:").concat(cellSize * Math.trunc(wrapColumns * 0.6), "px;\n --wrap-65:").concat(cellSize * Math.trunc(wrapColumns * 0.65), "px;\n --wrap-70:").concat(cellSize * Math.trunc(wrapColumns * 0.7), "px;\n --wrap-80:").concat(cellSize * Math.trunc(wrapColumns * 0.8), "px;\n --layout-50:").concat(cellSize * Math.trunc(wrapColumns * 0.49), "px;\n --layout-33:").concat(cellSize * calculateLayout33(wrapColumns), "px;\n --column-width:").concat(cellSize, "px;\n --wrap-columns:").concat(wrapColumns, ";"); 400 gradientColors = computeGradient(canvasSize); 401 402 // Pre-compute cell rects + centers once per resize 403 cells = []; 404 for (var r = 0; r < rows; r++) { 405 var y = r * cellSize; 406 for (var c = 0; c < gridCols; c++) { 407 var x = c * cellSize; 408 cells.push({ 409 x: x, 410 y: y, 411 w: cellSize, 412 h: cellSize, 413 centerX: x + cellSize / 2, 414 centerY: y + cellSize / 2 415 }); 416 } 417 } 418 419 // Initial paint, anchored either to the last known mouse position or the 420 // viewport centre 421 draw(lastMouseX || w / 2, lastMouseY || h / 2); 422 }; 423 424 // Single full-canvas redraw. Cells outside the gradient range fall back to 425 // the canvas fill colour (matches the gradient's last stop) â no visible 426 // halo, no transparent gaps. 427 var draw = function draw(mouseX, mouseY) { 428 var w = canvas.width / dpr; 429 var h = canvas.height / dpr; 430 431 // Background fill (gradient last stop) â covers the area before drawing 432 // cells, so distance > palette length still reads as a smooth fade. 433 ctx.fillStyle = 'rgb(17, 17, 17)'; 434 ctx.fillRect(0, 0, w, h); 435 var paletteLen = gradientColors.length; 436 if (paletteLen > 0) { 437 for (var i = 0; i < cells.length; i++) { 438 var cell = cells[i]; 439 var dx = mouseX - cell.centerX; 440 var dy = mouseY - cell.centerY; 441 var distance = Math.floor(Math.sqrt(dx * dx + dy * dy)); 442 if (distance < paletteLen) { 443 ctx.fillStyle = gradientColors[distance]; 444 ctx.fillRect(cell.x, cell.y, cell.w, cell.h); 445 } 446 } 447 } 448 449 // Grid lines on top of the fill â subtle dark blue, 1 px in CSS pixels. 450 ctx.strokeStyle = 'rgba(26, 57, 76, 0.3)'; 451 ctx.lineWidth = 1; 452 ctx.beginPath(); 453 // Vertical lines at every cell boundary 454 for (var c = 1; c <= gridCols; c++) { 455 var x = Math.round(c * cellSize) + 0.5; 456 ctx.moveTo(x, 0); 457 ctx.lineTo(x, h); 458 } 459 // Horizontal lines 460 var lastRow = cells.length / gridCols; 461 for (var r = 1; r <= lastRow; r++) { 462 var y = Math.round(r * cellSize) + 0.5; 463 if (y > h) break; 464 ctx.moveTo(0, y); 465 ctx.lineTo(w, y); 466 } 467 ctx.stroke(); 468 }; 469 var onMouseMoveThrottled = function onMouseMoveThrottled(e) { 470 if (Date.now() - lastMove > 16) { 471 lastMouseX = e.pageX; 472 lastMouseY = e.pageY - window.pageYOffset; 473 draw(lastMouseX, lastMouseY); 474 lastMove = Date.now(); 475 } 476 }; 477 var _simulateMove = function simulateMove(t) { 478 if (Date.now() - lastMove > 2000) { 479 var noiseX = (noise.simplex3(2, 0, t * 0.0005) + 1) / 2; 480 var noiseY = (noise.simplex3(10, 0, t * 0.0005) + 1) / 2; 481 draw(noiseX * window.innerWidth, noiseY * window.innerHeight); 482 } 483 animationFrameId = requestAnimationFrame(_simulateMove); 484 }; 485 var isTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0; 486 if (isTouch) { 487 document.body.classList.add('automove'); 488 animationFrameId = requestAnimationFrame(_simulateMove); 489 } else { 490 document.addEventListener('mousemove', onMouseMoveThrottled); 491 document.addEventListener('mousedown', function () { 492 canvas.classList.add('clicked'); 493 }); 494 document.addEventListener('mouseup', function () { 495 canvas.classList.remove('clicked'); 496 }); 497 } 498 var resizeScheduled = false;
499 window.addEventListener('resize', function () { 500 if (!resizeScheduled) { 501 resizeScheduled = true; 502 requestAnimationFrame(function () { 503 buildGrid(); 504 resizeScheduled = false; 505 }); 506 } 507 }); 508 buildGrid(); 509 setTimeout(buildGrid, 200); 510 window.addEventListener('beforeunload', function () { 511 cancelAnimationFrame(animationFrameId); 512 }); 513 }; 514 515 function _arrayLikeToArray(r, a) { 516 (null == a || a > r.length) && (a = r.length); 517 for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; 518 return n; 519 } 520 function _arrayWithHoles(r) { 521 if (Array.isArray(r)) return r; 522 } 523 function _arrayWithoutHoles(r) { 524 if (Array.isArray(r)) return _arrayLikeToArray(r); 525 } 526 function _iterableToArray(r) { 527 if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); 528 } 529 function _iterableToArrayLimit(r, l) { 530 var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; 531 if (null != t) { 532 var e, 533 n, 534 i, 535 u, 536 a = [], 537 f = !0, 538 o = !1; 539 try { 540 if (i = (t = t.call(r)).next, 0 === l) { 541 if (Object(t) !== t) return; 542 f = !1; 543 } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); 544 } catch (r) { 545 o = !0, n = r; 546 } finally { 547 try { 548 if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; 549 } finally { 550 if (o) throw n; 551 } 552 } 553 return a; 554 } 555 } 556 function _nonIterableRest() { 557 throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); 558 } 559 function _nonIterableSpread() { 560 throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); 561 } 562 function _slicedToArray(r, e) { 563 return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); 564 } 565 function _toConsumableArray(r) { 566 return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); 567 } 568 function _unsupportedIterableToArray(r, a) { 569 if (r) { 570 if ("string" == typeof r) return _arrayLikeToArray(r, a); 571 var t = {}.toString.call(r).slice(8, -1); 572 return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; 573 } 574 } 575 576 var initIllustrationLog = function initIllustrationLog() { 577 var screen = document.querySelector('.illustration--log'); 578 if (!screen) { 579 return; 580 } 581 var lines = screen.querySelectorAll('.illustration--log li'); 582 lines.forEach(function (line) { 583 var observer = new IntersectionObserver(function (_ref) { 584 var _ref2 = _slicedToArray(_ref, 1), 585 e = _ref2[0]; 586 e.target.classList.toggle('active', !e.intersectionRatio < 1); 587 }, { 588 root: screen, 589 threshold: _toConsumableArray(Array(100).keys()).map(function (x) { 590 return x / 100; 591 }), 592 rootMargin: '0% 0% -50% 0%' 593 }); 594 observer.observe(line); 595 }); 596 }; 597 598 /** 599 * SSR Window 5.0.0 600 * Better handling for window object in SSR environment 601 * https://github.com/nolimits4web/ssr-window 602 * 603 * Copyright 2025, Vladimir Kharlampidi 604 * 605 * Licensed under MIT 606 * 607 * Released on: February 12, 2025 608 */ 609 /* eslint-disable no-param-reassign */ 610 function isObject$1(obj) { 611 return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object; 612 } 613 function extend$1(target, src) { 614 if (target === void 0) { 615 target = {}; 616 } 617 if (src === void 0) { 618 src = {}; 619 } 620 const noExtend = ['__proto__', 'constructor', 'prototype']; 621 Object.keys(src).filter(key =>
vendor: 5,163 bytes, lines 621-828
621 noExtend.indexOf(key) < 0).forEach(key => { 622 if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject$1(src[key]) && isObject$1(target[key]) && Object.keys(src[key]).length > 0) { 623 extend$1(target[key], src[key]); 624 } 625 }); 626 } 627 const ssrDocument = { 628 body: {}, 629 addEventListener() {}, 630 removeEventListener() {}, 631 activeElement: { 632 blur() {}, 633 nodeName: '' 634 }, 635 querySelector() { 636 return null; 637 }, 638 querySelectorAll() { 639 return []; 640 }, 641 getElementById() { 642 return null; 643 }, 644 createEvent() { 645 return { 646 initEvent() {} 647 }; 648 }, 649 createElement() { 650 return { 651 children: [], 652 childNodes: [], 653 style: {}, 654 setAttribute() {}, 655 getElementsByTagName() { 656 return []; 657 } 658 }; 659 }, 660 createElementNS() { 661 return {}; 662 }, 663 importNode() { 664 return null; 665 }, 666 location: { 667 hash: '', 668 host: '', 669 hostname: '', 670 href: '', 671 origin: '', 672 pathname: '', 673 protocol: '', 674 search: '' 675 } 676 }; 677 function getDocument() { 678 const doc = typeof document !== 'undefined' ? document : {}; 679 extend$1(doc, ssrDocument); 680 return doc; 681 } 682 const ssrWindow = { 683 document: ssrDocument, 684 navigator: { 685 userAgent: '' 686 }, 687 location: { 688 hash: '', 689 host: '', 690 hostname: '', 691 href: '', 692 origin: '', 693 pathname: '', 694 protocol: '', 695 search: '' 696 }, 697 history: { 698 replaceState() {}, 699 pushState() {}, 700 go() {}, 701 back() {} 702 }, 703 CustomEvent: function CustomEvent() { 704 return this; 705 }, 706 addEventListener() {}, 707 removeEventListener() {}, 708 getComputedStyle() { 709 return { 710 getPropertyValue() { 711 return ''; 712 } 713 }; 714 }, 715 Image() {}, 716 Date() {}, 717 screen: {}, 718 setTimeout() {}, 719 clearTimeout() {}, 720 matchMedia() { 721 return {}; 722 }, 723 requestAnimationFrame(callback) { 724 if (typeof setTimeout === 'undefined') { 725 callback(); 726 return null; 727 } 728 return setTimeout(callback, 0); 729 }, 730 cancelAnimationFrame(id) { 731 if (typeof setTimeout === 'undefined') { 732 return; 733 } 734 clearTimeout(id); 735 } 736 }; 737 function getWindow() { 738 const win = typeof window !== 'undefined' ? window : {}; 739 extend$1(win, ssrWindow); 740 return win; 741 } 742 743 function classesToTokens(classes) { 744 if (classes === void 0) { 745 classes = ''; 746 } 747 return classes.trim().split(' ').filter(c => !!c.trim()); 748 } 749 750 function deleteProps(obj) { 751 const object = obj; 752 Object.keys(object).forEach(key => { 753 try { 754 object[key] = null; 755 } catch (e) { 756 // no getter for object 757 } 758 try { 759 delete object[key]; 760 } catch (e) { 761 // something got wrong 762 } 763 }); 764 } 765 function nextTick(callback, delay) { 766 if (delay === void 0) { 767 delay = 0; 768 } 769 return setTimeout(callback, delay); 770 } 771 function now() { 772 return Date.now(); 773 } 774 function getComputedStyle$1(el) { 775 const window = getWindow(); 776 let style; 777 if (window.getComputedStyle) { 778 style = window.getComputedStyle(el, null); 779 } 780 if (!style && el.currentStyle) { 781 style = el.currentStyle; 782 } 783 if (!style) { 784 style = el.style; 785 } 786 return style; 787 } 788 function getTranslate(el, axis) { 789 if (axis === void 0) { 790 axis = 'x'; 791 } 792 const window = getWindow(); 793 let matrix; 794 let curTransform; 795 let transformMatrix; 796 const curStyle = getComputedStyle$1(el); 797 if (window.WebKitCSSMatrix) { 798 curTransform = curStyle.transform || curStyle.webkitTransform; 799 if (curTransform.split(',').length > 6) { 800 curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', '); 801 } 802 // Some old versions of Webkit choke when 'none' is passed; pass 803 // empty string instead in this case 804 transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform); 805 } else { 806 transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,'); 807 matrix = transformMatrix.toString().split(','); 808 } 809 if (axis === 'x') { 810 // Latest Chrome and webkits Fix 811 if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; 812 // Crazy IE10 Matrix 813 else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); 814 // Normal Browsers 815 else curTransform = parseFloat(matrix[4]); 816 } 817 if (axis === 'y') { 818 // Latest Chrome and webkits Fix 819 if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; 820 // Crazy IE10 Matrix 821 else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); 822 // Normal Browsers 823 else curTransform = parseFloat(matrix[5]); 824 } 825 return curTransform || 0; 826 } 827 function isObject(o) { 828 return typeof o === 'object' && o !== null && o.constructor && Ob
828ject.prototype.toString.call(o).slice(8, -1) === 'Object'; 829 } 830 function isNode(node) { 831 // eslint-disable-next-line 832 if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') { 833 return node instanceof HTMLElement; 834 } 835 return node && (node.nodeType === 1 || node.nodeType === 11); 836 } 837 function extend() { 838 const to = Object(arguments.length <= 0 ? undefined : arguments[0]); 839 const noExtend = ['__proto__', 'constructor', 'prototype']; 840 for (let i = 1; i < arguments.length; i += 1) { 841 const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i]; 842 if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) { 843 const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0); 844 for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) { 845 const nextKey = keysArray[nextIndex]; 846 const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey); 847 if (desc !== undefined && desc.enumerable) { 848 if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) { 849 if (nextSource[nextKey].__swiper__) { 850 to[nextKey] = nextSource[nextKey]; 851 } else { 852 extend(to[nextKey], nextSource[nextKey]); 853 } 854 } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) { 855 to[nextKey] = {}; 856 if (nextSource[nextKey].__swiper__) { 857 to[nextKey] = nextSource[nextKey]; 858 } else { 859 extend(to[nextKey], nextSource[nextKey]); 860 } 861 } else { 862 to[nextKey] = nextSource[nextKey]; 863 } 864 } 865 } 866 } 867 } 868 return to; 869 } 870 function setCSSProperty(el, varName, varValue) { 871 el.style.setProperty(varName, varValue); 872 } 873 function animateCSSModeScroll(_ref) { 874 let { 875 swiper, 876 targetPosition, 877 side 878 } = _ref; 879 const window = getWindow(); 880 const startPosition = -swiper.translate; 881 let startTime = null; 882 let time; 883 const duration = swiper.params.speed; 884 swiper.wrapperEl.style.scrollSnapType = 'none'; 885 window.cancelAnimationFrame(swiper.cssModeFrameID); 886 const dir = targetPosition > startPosition ? 'next' : 'prev'; 887 const isOutOfBound = (current, target) => { 888 return dir === 'next' && current >= target || dir === 'prev' && current <= target; 889 }; 890 const animate = () => { 891 time = new Date().getTime(); 892 if (startTime === null) { 893 startTime = time; 894 } 895 const progress = Math.max(Math.min((time - startTime) / duration, 1), 0); 896 const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2; 897 let currentPosition = startPosition + easeProgress * (targetPosition - startPosition); 898 if (isOutOfBound(currentPosition, targetPosition)) { 899 currentPosition = targetPosition; 900 } 901 swiper.wrapperEl.scrollTo({ 902 [side]: currentPosition 903 }); 904 if (isOutOfBound(currentPosition, targetPosition)) { 905 swiper.wrapperEl.style.overflow = 'hidden'; 906 swiper.wrapperEl.style.scrollSnapType = ''; 907 setTimeout(() => { 908 swiper.wrapperEl.style.overflow = ''; 909 swiper.wrapperEl.scrollTo({ 910 [side]: currentPosition 911 }); 912 }); 913 window.cancelAnimationFrame(swiper.cssModeFrameID); 914 return; 915 } 916 swiper.cssModeFrameID = window.requestAnimationFrame(animate); 917 }; 918 animate(); 919 } 920 function elementChildren(element, selector) { 921 if (selector === void 0) { 922 selector = ''; 923 } 924 const window = getWindow(); 925 const children = [...element.children]; 926 if (window.HTMLSlotElement && element instanceof HTMLSlotElement) { 927 children.push(...element.assignedElements()); 928 } 929 if (!selector) { 930 return children; 931 } 932 return children.filter(el => el.matches(selector)); 933 } 934 function elementIsChildOfSlot(el, slot) { 935 // Breadth-first search through all parent's children and assigned elements 936 const elementsQueue = [slot]; 937 while (elementsQueue.length > 0) { 938 const elementToCheck = elementsQueue.shift(); 939 if (el === elementToCheck) { 940 return true; 941 } 942 elementsQueue.push(...elementToCheck.children, ...(elementToCheck.shadowRoot ? elementToCheck.shadowRoot.children : []), ...(elementToCheck.assignedElements ? elementToCheck.assignedElements() : [])); 943 } 944 } 945 function elementIsChildOf(el, parent) { 946 const window = getWindow(); 947 let isChild = parent.contains(el); 948 if (!isChild && window.HTMLSlotElement && parent instanceof HTMLSlotElement) { 949 const children = [...parent.assignedElements()]; 950 isChild = children.includes(el); 951 if (!isChild) { 952 isChild = elementIsChildOfSlot(el, parent); 953 } 954 } 955 return isChild; 956 } 957 function showWarning(text) { 958 try { 959 console.warn(text); 960 return; 961 } catch (err) { 962 // err 963 } 964 } 965 function createElement(tag, classes) { 966 if (classes === void 0) { 967 classes = []; 968 } 969 const el = document.createElement(tag);
970 el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes))); 971 return el; 972 } 973 function elementPrevAll(el, selector) { 974 const prevEls = []; 975 while (el.previousElementSibling) { 976 const prev = el.previousElementSibling; // eslint-disable-line 977 if (selector) { 978 if (prev.matches(selector)) prevEls.push(prev); 979 } else prevEls.push(prev); 980 el = prev; 981 } 982 return prevEls; 983 } 984 function elementNextAll(el, selector) { 985 const nextEls = []; 986 while (el.nextElementSibling) { 987 const next = el.nextElementSibling; // eslint-disable-line 988 if (selector) { 989 if (next.matches(selector)) nextEls.push(next); 990 } else nextEls.push(next); 991 el = next; 992 } 993 return nextEls; 994 } 995 function elementStyle(el, prop) { 996 const window = getWindow(); 997 return window.getComputedStyle(el, null).getPropertyValue(prop); 998 } 999 function elementIndex(el) { 1000 let child = el; 1001 let i; 1002 if (child) { 1003 i = 0; 1004 // eslint-disable-next-line 1005 while ((child = child.previousSibling) !== null) { 1006 if (child.nodeType === 1) i += 1; 1007 } 1008 return i; 1009 } 1010 return undefined; 1011 } 1012 function elementParents(el, selector) { 1013 const parents = []; // eslint-disable-line 1014 let parent = el.parentElement; // eslint-disable-line 1015 while (parent) { 1016 if (selector) { 1017 if (parent.matches(selector)) parents.push(parent); 1018 } else { 1019 parents.push(parent); 1020 } 1021 parent = parent.parentElement; 1022 } 1023 return parents; 1024 } 1025 function elementOuterSize(el, size, includeMargins) { 1026 const window = getWindow(); 1027 if (includeMargins) { 1028 return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom')); 1029 } 1030 return el.offsetWidth; 1031 } 1032 1033 let support; 1034 function calcSupport() { 1035 const window = getWindow(); 1036 const document = getDocument(); 1037 return { 1038 smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style, 1039 touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch) 1040 }; 1041 } 1042 function getSupport() { 1043 if (!support) { 1044 support = calcSupport(); 1045 } 1046 return support; 1047 } 1048 1049 let deviceCached; 1050 function calcDevice(_temp) { 1051 let { 1052 userAgent 1053 } = _temp === void 0 ? {} : _temp;
vendor: 6,818 bytes, lines 1054-1261
1054 const support = getSupport(); 1055 const window = getWindow(); 1056 const platform = window.navigator.platform; 1057 const ua = userAgent || window.navigator.userAgent; 1058 const device = { 1059 ios: false, 1060 android: false 1061 }; 1062 const screenWidth = window.screen.width; 1063 const screenHeight = window.screen.height; 1064 const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line 1065 let ipad = ua.match(/(iPad).*OS\s([\d_]+)/); 1066 const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); 1067 const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/); 1068 const windows = platform === 'Win32'; 1069 let macos = platform === 'MacIntel'; 1070 1071 // iPadOs 13 fix 1072 const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810']; 1073 if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) { 1074 ipad = ua.match(/(Version)\/([\d.]+)/); 1075 if (!ipad) ipad = [0, 1, '13_0_0']; 1076 macos = false; 1077 } 1078 1079 // Android 1080 if (android && !windows) { 1081 device.os = 'android'; 1082 device.android = true; 1083 } 1084 if (ipad || iphone || ipod) { 1085 device.os = 'ios'; 1086 device.ios = true; 1087 } 1088 1089 // Export object 1090 return device; 1091 } 1092 function getDevice(overrides) { 1093 if (overrides === void 0) { 1094 overrides = {}; 1095 } 1096 if (!deviceCached) { 1097 deviceCached = calcDevice(overrides); 1098 } 1099 return deviceCached; 1100 } 1101 1102 let browser; 1103 function calcBrowser() { 1104 const window = getWindow(); 1105 const device = getDevice(); 1106 let needPerspectiveFix = false; 1107 function isSafari() { 1108 const ua = window.navigator.userAgent.toLowerCase(); 1109 return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0; 1110 } 1111 if (isSafari()) { 1112 const ua = String(window.navigator.userAgent); 1113 if (ua.includes('Version/')) { 1114 const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num)); 1115 needPerspectiveFix = major < 16 || major === 16 && minor < 2; 1116 } 1117 } 1118 const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent); 1119 const isSafariBrowser = isSafari(); 1120 const need3dFix = isSafariBrowser || isWebView && device.ios; 1121 return { 1122 isSafari: needPerspectiveFix || isSafariBrowser, 1123 needPerspectiveFix, 1124 need3dFix, 1125 isWebView 1126 }; 1127 } 1128 function getBrowser() { 1129 if (!browser) { 1130 browser = calcBrowser(); 1131 } 1132 return browser; 1133 } 1134 1135 function Resize(_ref) { 1136 let { 1137 swiper, 1138 on, 1139 emit 1140 } = _ref; 1141 const window = getWindow(); 1142 let observer = null; 1143 let animationFrame = null; 1144 const resizeHandler = () => { 1145 if (!swiper || swiper.destroyed || !swiper.initialized) return; 1146 emit('beforeResize'); 1147 emit('resize'); 1148 }; 1149 const createObserver = () => { 1150 if (!swiper || swiper.destroyed || !swiper.initialized) return; 1151 observer = new ResizeObserver(entries => { 1152 animationFrame = window.requestAnimationFrame(() => { 1153 const { 1154 width, 1155 height 1156 } = swiper; 1157 let newWidth = width; 1158 let newHeight = height; 1159 entries.forEach(_ref2 => { 1160 let { 1161 contentBoxSize, 1162 contentRect, 1163 target 1164 } = _ref2; 1165 if (target && target !== swiper.el) return; 1166 newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize; 1167 newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize; 1168 }); 1169 if (newWidth !== width || newHeight !== height) { 1170 resizeHandler(); 1171 } 1172 }); 1173 }); 1174 observer.observe(swiper.el); 1175 }; 1176 const removeObserver = () => { 1177 if (animationFrame) { 1178 window.cancelAnimationFrame(animationFrame); 1179 } 1180 if (observer && observer.unobserve && swiper.el) { 1181 observer.unobserve(swiper.el); 1182 observer = null; 1183 } 1184 }; 1185 const orientationChangeHandler = () => { 1186 if (!swiper || swiper.destroyed || !swiper.initialized) return; 1187 emit('orientationchange'); 1188 }; 1189 on('init', () => { 1190 if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') { 1191 createObserver(); 1192 return; 1193 } 1194 window.addEventListener('resize', resizeHandler); 1195 window.addEventListener('orientationchange', orientationChangeHandler); 1196 }); 1197 on('destroy', () => { 1198 removeObserver(); 1199 window.removeEventListener('resize', resizeHandler); 1200 window.removeEventListener('orientationchange', orientationChangeHandler); 1201 }); 1202 } 1203 1204 function Observer(_ref) { 1205 let { 1206 swiper, 1207 extendParams, 1208 on, 1209 emit 1210 } = _ref; 1211 const observers = []; 1212 const window = getWindow(); 1213 const attach = function (target, options) { 1214 if (options === void 0) { 1215 options = {}; 1216 } 1217 const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver; 1218 const observer = new ObserverFunc(mutations => { 1219 // The observerUpdate event should only be triggered 1220 // once despite the number of mutations. Additional 1221 // triggers are redundant and are very costly 1222 if (swiper.__preventObserver__) return; 1223 if (mutations.length === 1) { 1224 emit('observerUpdate', mutations[0]); 1225 return; 1226 } 1227 const observerUpdate = function observerUpdate() { 1228 emit('observerUpdate', mutations[0]); 1229 }; 1230 if (window.requestAnimationFrame) { 1231 window.requestAnimationFrame(observerUpdate); 1232 } else { 1233 window.setTimeout(observerUpdate, 0); 1234 } 1235 }); 1236 observer.observe(target, { 1237 attributes: typeof options.attributes === 'undefined' ? true : options.attributes, 1238 childList: swiper.isElement || (typeof options.childList === 'undefined' ? true : options).childList, 1239 characterData: typeof options.characterData === 'undefined' ? true : options.characterData 1240 }); 1241 observers.push(observer); 1242 }; 1243 const init = () => { 1244 if (!swiper.params.observer) return; 1245 if (swiper.params.observeParents) { 1246 const containerParents = elementParents(swiper.hostEl); 1247 for (let i = 0; i < containerParents.length; i += 1) { 1248 attach(containerParents[i]); 1249 } 1250 } 1251 // Observe container 1252 attach(swiper.hostEl, { 1253 childList: swiper.params.observeSlideChildren 1254 }); 1255 1256 // Observe wrapper 1257 attach(swiper.wrapperEl, { 1258 attributes: false 1259 }); 1260 }; 1261 const destroy = () => {
vendor: 4,990 bytes, lines 1262-1404
1262 observers.forEach(observer => { 1263 observer.disconnect(); 1264 }); 1265 observers.splice(0, observers.length); 1266 }; 1267 extendParams({ 1268 observer: false, 1269 observeParents: false, 1270 observeSlideChildren: false 1271 }); 1272 on('init', init); 1273 on('destroy', destroy); 1274 } 1275 1276 /* eslint-disable no-underscore-dangle */ 1277 1278 var eventsEmitter = { 1279 on(events, handler, priority) { 1280 const self = this; 1281 if (!self.eventsListeners || self.destroyed) return self; 1282 if (typeof handler !== 'function') return self; 1283 const method = priority ? 'unshift' : 'push'; 1284 events.split(' ').forEach(event => { 1285 if (!self.eventsListeners[event]) self.eventsListeners[event] = []; 1286 self.eventsListeners[event][method](handler); 1287 }); 1288 return self; 1289 }, 1290 once(events, handler, priority) { 1291 const self = this; 1292 if (!self.eventsListeners || self.destroyed) return self; 1293 if (typeof handler !== 'function') return self; 1294 function onceHandler() { 1295 self.off(events, onceHandler); 1296 if (onceHandler.__emitterProxy) { 1297 delete onceHandler.__emitterProxy; 1298 } 1299 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 1300 args[_key] = arguments[_key]; 1301 } 1302 handler.apply(self, args); 1303 } 1304 onceHandler.__emitterProxy = handler; 1305 return self.on(events, onceHandler, priority); 1306 }, 1307 onAny(handler, priority) { 1308 const self = this; 1309 if (!self.eventsListeners || self.destroyed) return self; 1310 if (typeof handler !== 'function') return self; 1311 const method = priority ? 'unshift' : 'push'; 1312 if (self.eventsAnyListeners.indexOf(handler) < 0) { 1313 self.eventsAnyListeners[method](handler); 1314 } 1315 return self; 1316 }, 1317 offAny(handler) { 1318 const self = this; 1319 if (!self.eventsListeners || self.destroyed) return self; 1320 if (!self.eventsAnyListeners) return self; 1321 const index = self.eventsAnyListeners.indexOf(handler); 1322 if (index >= 0) { 1323 self.eventsAnyListeners.splice(index, 1); 1324 } 1325 return self; 1326 }, 1327 off(events, handler) { 1328 const self = this; 1329 if (!self.eventsListeners || self.destroyed) return self; 1330 if (!self.eventsListeners) return self; 1331 events.split(' ').forEach(event => { 1332 if (typeof handler === 'undefined') { 1333 self.eventsListeners[event] = []; 1334 } else if (self.eventsListeners[event]) { 1335 self.eventsListeners[event].forEach((eventHandler, index) => { 1336 if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) { 1337 self.eventsListeners[event].splice(index, 1); 1338 } 1339 }); 1340 } 1341 }); 1342 return self; 1343 }, 1344 emit() { 1345 const self = this; 1346 if (!self.eventsListeners || self.destroyed) return self; 1347 if (!self.eventsListeners) return self; 1348 let events; 1349 let data; 1350 let context; 1351 for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { 1352 args[_key2] = arguments[_key2]; 1353 } 1354 if (typeof args[0] === 'string' || Array.isArray(args[0])) { 1355 events = args[0]; 1356 data = args.slice(1, args.length); 1357 context = self; 1358 } else { 1359 events = args[0].events; 1360 data = args[0].data; 1361 context = args[0].context || self; 1362 } 1363 data.unshift(context); 1364 const eventsArray = Array.isArray(events) ? events : events.split(' '); 1365 eventsArray.forEach(event => { 1366 if (self.eventsAnyListeners && self.eventsAnyListeners.length) { 1367 self.eventsAnyListeners.forEach(eventHandler => { 1368 eventHandler.apply(context, [event, ...data]); 1369 }); 1370 } 1371 if (self.eventsListeners && self.eventsListeners[event]) { 1372 self.eventsListeners[event].forEach(eventHandler => { 1373 eventHandler.apply(context, data); 1374 }); 1375 } 1376 }); 1377 return self; 1378 } 1379 }; 1380 1381 function updateSize() { 1382 const swiper = this; 1383 let width; 1384 let height; 1385 const el = swiper.el; 1386 if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) { 1387 width = swiper.params.width; 1388 } else { 1389 width = el.clientWidth; 1390 } 1391 if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) { 1392 height = swiper.params.height; 1393 } else { 1394 height = el.clientHeight; 1395 } 1396 if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) { 1397 return; 1398 } 1399 1400 // Subtract paddings 1401 width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10); 1402 height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10); 1403 if (Number.isNaN(width)) width = 0; 1404 if (Number.isNaN(height)) height = 0;
vendor: 8,689 bytes, lines 1405-1614
1405 Object.assign(swiper, { 1406 width, 1407 height, 1408 size: swiper.isHorizontal() ? width : height 1409 }); 1410 } 1411 1412 function updateSlides() { 1413 const swiper = this; 1414 function getDirectionPropertyValue(node, label) { 1415 return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0); 1416 } 1417 const params = swiper.params; 1418 const { 1419 wrapperEl, 1420 slidesEl, 1421 size: swiperSize, 1422 rtlTranslate: rtl, 1423 wrongRTL 1424 } = swiper; 1425 const isVirtual = swiper.virtual && params.virtual.enabled; 1426 const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length; 1427 const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`); 1428 const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length; 1429 let snapGrid = []; 1430 const slidesGrid = []; 1431 const slidesSizesGrid = []; 1432 let offsetBefore = params.slidesOffsetBefore; 1433 if (typeof offsetBefore === 'function') { 1434 offsetBefore = params.slidesOffsetBefore.call(swiper); 1435 } 1436 let offsetAfter = params.slidesOffsetAfter; 1437 if (typeof offsetAfter === 'function') { 1438 offsetAfter = params.slidesOffsetAfter.call(swiper); 1439 } 1440 const previousSnapGridLength = swiper.snapGrid.length; 1441 const previousSlidesGridLength = swiper.slidesGrid.length; 1442 let spaceBetween = params.spaceBetween; 1443 let slidePosition = -offsetBefore; 1444 let prevSlideSize = 0; 1445 let index = 0; 1446 if (typeof swiperSize === 'undefined') { 1447 return; 1448 } 1449 if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { 1450 spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize; 1451 } else if (typeof spaceBetween === 'string') { 1452 spaceBetween = parseFloat(spaceBetween); 1453 } 1454 swiper.virtualSize = -spaceBetween; 1455 1456 // reset margins 1457 slides.forEach(slideEl => { 1458 if (rtl) { 1459 slideEl.style.marginLeft = ''; 1460 } else { 1461 slideEl.style.marginRight = ''; 1462 } 1463 slideEl.style.marginBottom = ''; 1464 slideEl.style.marginTop = ''; 1465 }); 1466 1467 // reset cssMode offsets 1468 if (params.centeredSlides && params.cssMode) { 1469 setCSSProperty(wrapperEl, '--swiper-centered-offset-before', ''); 1470 setCSSProperty(wrapperEl, '--swiper-centered-offset-after', ''); 1471 } 1472 const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid; 1473 if (gridEnabled) { 1474 swiper.grid.initSlides(slides); 1475 } else if (swiper.grid) { 1476 swiper.grid.unsetSlides(); 1477 } 1478 1479 // Calc slides 1480 let slideSize; 1481 const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => { 1482 return typeof params.breakpoints[key].slidesPerView !== 'undefined'; 1483 }).length > 0; 1484 for (let i = 0; i < slidesLength; i += 1) { 1485 slideSize = 0; 1486 let slide; 1487 if (slides[i]) slide = slides[i]; 1488 if (gridEnabled) { 1489 swiper.grid.updateSlide(i, slide, slides); 1490 } 1491 if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line 1492 1493 if (params.slidesPerView === 'auto') { 1494 if (shouldResetSlideSize) { 1495 slides[i].style[swiper.getDirectionLabel('width')] = ``; 1496 } 1497 const slideStyles = getComputedStyle(slide); 1498 const currentTransform = slide.style.transform; 1499 const currentWebKitTransform = slide.style.webkitTransform; 1500 if (currentTransform) { 1501 slide.style.transform = 'none'; 1502 } 1503 if (currentWebKitTransform) { 1504 slide.style.webkitTransform = 'none'; 1505 } 1506 if (params.roundLengths) { 1507 slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true); 1508 } else { 1509 // eslint-disable-next-line 1510 const width = getDirectionPropertyValue(slideStyles, 'width'); 1511 const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left'); 1512 const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right'); 1513 const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left'); 1514 const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right'); 1515 const boxSizing = slideStyles.getPropertyValue('box-sizing'); 1516 if (boxSizing && boxSizing === 'border-box') { 1517 slideSize = width + marginLeft + marginRight; 1518 } else { 1519 const { 1520 clientWidth, 1521 offsetWidth 1522 } = slide; 1523 slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth); 1524 } 1525 } 1526 if (currentTransform) { 1527 slide.style.transform = currentTransform; 1528 } 1529 if (currentWebKitTransform) { 1530 slide.style.webkitTransform = currentWebKitTransform; 1531 } 1532 if (params.roundLengths) slideSize = Math.floor(slideSize); 1533 } else { 1534 slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView; 1535 if (params.roundLengths) slideSize = Math.floor(slideSize); 1536 if (slides[i]) { 1537 slides[i].style[swiper.getDirectionLabel('width')] = `${slideSize}px`; 1538 } 1539 } 1540 if (slides[i]) { 1541 slides[i].swiperSlideSize = slideSize; 1542 } 1543 slidesSizesGrid.push(slideSize); 1544 if (params.centeredSlides) { 1545 slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween; 1546 if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; 1547 if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; 1548 if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0; 1549 if (params.roundLengths) slidePosition = Math.floor(slidePosition); 1550 if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition); 1551 slidesGrid.push(slidePosition); 1552 } else { 1553 if (params.roundLengths) slidePosition = Math.floor(slidePosition); 1554 if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition); 1555 slidesGrid.push(slidePosition); 1556 slidePosition = slidePosition + slideSize + spaceBetween; 1557 } 1558 swiper.virtualSize += slideSize + spaceBetween; 1559 prevSlideSize = slideSize; 1560 index += 1; 1561 } 1562 swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter; 1563 if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) { 1564 wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`; 1565 } 1566 if (params.setWrapperSize) { 1567 wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`; 1568 } 1569 if (gridEnabled) { 1570 swiper.grid.updateWrapperSize(slideSize, snapGrid); 1571 } 1572 1573 // Remove last grid elements depending on width 1574 if (!params.centeredSlides) { 1575 const newSlidesGrid = []; 1576 for (let i = 0; i < snapGrid.length; i += 1) { 1577 let slidesGridItem = snapGrid[i]; 1578 if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem); 1579 if (snapGrid[i] <= swiper.virtualSize - swiperSize) { 1580 newSlidesGrid.push(slidesGridItem); 1581 } 1582 } 1583 snapGrid = newSlidesGrid; 1584 if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) { 1585 snapGrid.push(swiper.virtualSize - swiperSize); 1586 } 1587 } 1588 if (isVirtual && params.loop) { 1589 const size = slidesSizesGrid[0] + spaceBetween; 1590 if (params.slidesPerGroup > 1) { 1591 const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup); 1592 const groupSize = size * params.slidesPerGroup; 1593 for (let i = 0; i < groups; i += 1) { 1594 snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize); 1595 } 1596 } 1597 for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) { 1598 if (params.slidesPerGroup === 1) { 1599 snapGrid.push(snapGrid[snapGrid.length - 1] + size); 1600 } 1601 slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size); 1602 swiper.virtualSize += size; 1603 } 1604 } 1605 if (snapGrid.length === 0) snapGrid = [0]; 1606 if (spaceBetween !== 0) { 1607 const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight'); 1608 slides.filter((_, slideIndex) => { 1609 if (!params.cssMode || params.loop) return true; 1610 if (slideIndex === slides.length - 1) { 1611 return false; 1612 } 1613 return true; 1614 }
vendor: 3,711 bytes, lines 1614-1706
1614).forEach(slideEl => { 1615 slideEl.style[key] = `${spaceBetween}px`; 1616 }); 1617 } 1618 if (params.centeredSlides && params.centeredSlidesBounds) { 1619 let allSlidesSize = 0; 1620 slidesSizesGrid.forEach(slideSizeValue => { 1621 allSlidesSize += slideSizeValue + (spaceBetween || 0); 1622 }); 1623 allSlidesSize -= spaceBetween; 1624 const maxSnap = allSlidesSize > swiperSize ? allSlidesSize - swiperSize : 0; 1625 snapGrid = snapGrid.map(snap => { 1626 if (snap <= 0) return -offsetBefore; 1627 if (snap > maxSnap) return maxSnap + offsetAfter; 1628 return snap; 1629 }); 1630 } 1631 if (params.centerInsufficientSlides) { 1632 let allSlidesSize = 0; 1633 slidesSizesGrid.forEach(slideSizeValue => { 1634 allSlidesSize += slideSizeValue + (spaceBetween || 0); 1635 }); 1636 allSlidesSize -= spaceBetween; 1637 const offsetSize = (params.slidesOffsetBefore || 0) + (params.slidesOffsetAfter || 0); 1638 if (allSlidesSize + offsetSize < swiperSize) { 1639 const allSlidesOffset = (swiperSize - allSlidesSize - offsetSize) / 2; 1640 snapGrid.forEach((snap, snapIndex) => { 1641 snapGrid[snapIndex] = snap - allSlidesOffset; 1642 }); 1643 slidesGrid.forEach((snap, snapIndex) => { 1644 slidesGrid[snapIndex] = snap + allSlidesOffset; 1645 }); 1646 } 1647 } 1648 Object.assign(swiper, { 1649 slides, 1650 snapGrid, 1651 slidesGrid, 1652 slidesSizesGrid 1653 }); 1654 if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) { 1655 setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`); 1656 setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`); 1657 const addToSnapGrid = -swiper.snapGrid[0]; 1658 const addToSlidesGrid = -swiper.slidesGrid[0]; 1659 swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid); 1660 swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid); 1661 } 1662 if (slidesLength !== previousSlidesLength) { 1663 swiper.emit('slidesLengthChange'); 1664 } 1665 if (snapGrid.length !== previousSnapGridLength) { 1666 if (swiper.params.watchOverflow) swiper.checkOverflow(); 1667 swiper.emit('snapGridLengthChange'); 1668 } 1669 if (slidesGrid.length !== previousSlidesGridLength) { 1670 swiper.emit('slidesGridLengthChange'); 1671 } 1672 if (params.watchSlidesProgress) { 1673 swiper.updateSlidesOffset(); 1674 } 1675 swiper.emit('slidesUpdated'); 1676 if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) { 1677 const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`; 1678 const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass); 1679 if (slidesLength <= params.maxBackfaceHiddenSlides) { 1680 if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass); 1681 } else if (hasClassBackfaceClassAdded) { 1682 swiper.el.classList.remove(backFaceHiddenClass); 1683 } 1684 } 1685 } 1686 1687 function updateAutoHeight(speed) { 1688 const swiper = this; 1689 const activeSlides = []; 1690 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 1691 let newHeight = 0; 1692 let i; 1693 if (typeof speed === 'number') { 1694 swiper.setTransition(speed); 1695 } else if (speed === true) { 1696 swiper.setTransition(swiper.params.speed); 1697 } 1698 const getSlideByIndex = index => { 1699 if (isVirtual) { 1700 return swiper.slides[swiper.getSlideIndexByData(index)]; 1701 } 1702 return swiper.slides[index]; 1703 }; 1704 // Find slides currently in view 1705 if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) { 1706 if (swiper.params.centeredSlides) {
vendor: 3,554 bytes, lines 1707-1788
1707 (swiper.visibleSlides || []).forEach(slide => { 1708 activeSlides.push(slide); 1709 }); 1710 } else { 1711 for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) { 1712 const index = swiper.activeIndex + i; 1713 if (index > swiper.slides.length && !isVirtual) break; 1714 activeSlides.push(getSlideByIndex(index)); 1715 } 1716 } 1717 } else { 1718 activeSlides.push(getSlideByIndex(swiper.activeIndex)); 1719 } 1720 1721 // Find new height from highest slide in view 1722 for (i = 0; i < activeSlides.length; i += 1) { 1723 if (typeof activeSlides[i] !== 'undefined') { 1724 const height = activeSlides[i].offsetHeight; 1725 newHeight = height > newHeight ? height : newHeight; 1726 } 1727 } 1728 1729 // Update Height 1730 if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`; 1731 } 1732 1733 function updateSlidesOffset() { 1734 const swiper = this; 1735 const slides = swiper.slides; 1736 // eslint-disable-next-line 1737 const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0; 1738 for (let i = 0; i < slides.length; i += 1) { 1739 slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment(); 1740 } 1741 } 1742 1743 const toggleSlideClasses$1 = (slideEl, condition, className) => { 1744 if (condition && !slideEl.classList.contains(className)) { 1745 slideEl.classList.add(className); 1746 } else if (!condition && slideEl.classList.contains(className)) { 1747 slideEl.classList.remove(className); 1748 } 1749 }; 1750 function updateSlidesProgress(translate) { 1751 if (translate === void 0) { 1752 translate = this && this.translate || 0; 1753 } 1754 const swiper = this; 1755 const params = swiper.params; 1756 const { 1757 slides, 1758 rtlTranslate: rtl, 1759 snapGrid 1760 } = swiper; 1761 if (slides.length === 0) return; 1762 if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset(); 1763 let offsetCenter = -translate; 1764 if (rtl) offsetCenter = translate; 1765 swiper.visibleSlidesIndexes = []; 1766 swiper.visibleSlides = []; 1767 let spaceBetween = params.spaceBetween; 1768 if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { 1769 spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size; 1770 } else if (typeof spaceBetween === 'string') { 1771 spaceBetween = parseFloat(spaceBetween); 1772 } 1773 for (let i = 0; i < slides.length; i += 1) { 1774 const slide = slides[i]; 1775 let slideOffset = slide.swiperSlideOffset; 1776 if (params.cssMode && params.centeredSlides) { 1777 slideOffset -= slides[0].swiperSlideOffset; 1778 } 1779 const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween); 1780 const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween); 1781 const slideBefore = -(offsetCenter - slideOffset); 1782 const slideAfter = slideBefore + swiper.slidesSizesGrid[i]; 1783 const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i]; 1784 const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size; 1785 if (isVisible) { 1786 swiper.visibleSlides.push(slide); 1787 swiper.visibleSlidesIndexes.push(i); 1788 }
vendor: 11,873 bytes, lines 1789-2101
1789 toggleSlideClasses$1(slide, isVisible, params.slideVisibleClass); 1790 toggleSlideClasses$1(slide, isFullyVisible, params.slideFullyVisibleClass); 1791 slide.progress = rtl ? -slideProgress : slideProgress; 1792 slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress; 1793 } 1794 } 1795 1796 function updateProgress(translate) { 1797 const swiper = this; 1798 if (typeof translate === 'undefined') { 1799 const multiplier = swiper.rtlTranslate ? -1 : 1; 1800 // eslint-disable-next-line 1801 translate = swiper && swiper.translate && swiper.translate * multiplier || 0; 1802 } 1803 const params = swiper.params; 1804 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 1805 let { 1806 progress, 1807 isBeginning, 1808 isEnd, 1809 progressLoop 1810 } = swiper; 1811 const wasBeginning = isBeginning; 1812 const wasEnd = isEnd; 1813 if (translatesDiff === 0) { 1814 progress = 0; 1815 isBeginning = true; 1816 isEnd = true; 1817 } else { 1818 progress = (translate - swiper.minTranslate()) / translatesDiff; 1819 const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1; 1820 const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1; 1821 isBeginning = isBeginningRounded || progress <= 0; 1822 isEnd = isEndRounded || progress >= 1; 1823 if (isBeginningRounded) progress = 0; 1824 if (isEndRounded) progress = 1; 1825 } 1826 if (params.loop) { 1827 const firstSlideIndex = swiper.getSlideIndexByData(0); 1828 const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1); 1829 const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex]; 1830 const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex]; 1831 const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1]; 1832 const translateAbs = Math.abs(translate); 1833 if (translateAbs >= firstSlideTranslate) { 1834 progressLoop = (translateAbs - firstSlideTranslate) / translateMax; 1835 } else { 1836 progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax; 1837 } 1838 if (progressLoop > 1) progressLoop -= 1; 1839 } 1840 Object.assign(swiper, { 1841 progress, 1842 progressLoop, 1843 isBeginning, 1844 isEnd 1845 }); 1846 if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate); 1847 if (isBeginning && !wasBeginning) { 1848 swiper.emit('reachBeginning toEdge'); 1849 } 1850 if (isEnd && !wasEnd) { 1851 swiper.emit('reachEnd toEdge'); 1852 } 1853 if (wasBeginning && !isBeginning || wasEnd && !isEnd) { 1854 swiper.emit('fromEdge'); 1855 } 1856 swiper.emit('progress', progress); 1857 } 1858 1859 const toggleSlideClasses = (slideEl, condition, className) => { 1860 if (condition && !slideEl.classList.contains(className)) { 1861 slideEl.classList.add(className); 1862 } else if (!condition && slideEl.classList.contains(className)) { 1863 slideEl.classList.remove(className); 1864 } 1865 }; 1866 function updateSlidesClasses() { 1867 const swiper = this; 1868 const { 1869 slides, 1870 params, 1871 slidesEl, 1872 activeIndex 1873 } = swiper; 1874 const isVirtual = swiper.virtual && params.virtual.enabled; 1875 const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1; 1876 const getFilteredSlide = selector => { 1877 return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0]; 1878 }; 1879 let activeSlide; 1880 let prevSlide; 1881 let nextSlide; 1882 if (isVirtual) { 1883 if (params.loop) { 1884 let slideIndex = activeIndex - swiper.virtual.slidesBefore; 1885 if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex; 1886 if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length; 1887 activeSlide = getFilteredSlide(`[data-swiper-slide-index="${slideIndex}"]`); 1888 } else { 1889 activeSlide = getFilteredSlide(`[data-swiper-slide-index="${activeIndex}"]`); 1890 } 1891 } else { 1892 if (gridEnabled) { 1893 activeSlide = slides.find(slideEl => slideEl.column === activeIndex); 1894 nextSlide = slides.find(slideEl => slideEl.column === activeIndex + 1); 1895 prevSlide = slides.find(slideEl => slideEl.column === activeIndex - 1); 1896 } else { 1897 activeSlide = slides[activeIndex]; 1898 } 1899 } 1900 if (activeSlide) { 1901 if (!gridEnabled) { 1902 // Next Slide 1903 nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0]; 1904 if (params.loop && !nextSlide) { 1905 nextSlide = slides[0]; 1906 } 1907 1908 // Prev Slide 1909 prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0]; 1910 if (params.loop && !prevSlide === 0) { 1911 prevSlide = slides[slides.length - 1]; 1912 } 1913 } 1914 } 1915 slides.forEach(slideEl => { 1916 toggleSlideClasses(slideEl, slideEl === activeSlide, params.slideActiveClass); 1917 toggleSlideClasses(slideEl, slideEl === nextSlide, params.slideNextClass); 1918 toggleSlideClasses(slideEl, slideEl === prevSlide, params.slidePrevClass); 1919 }); 1920 swiper.emitSlidesClasses(); 1921 } 1922 1923 const processLazyPreloader = (swiper, imageEl) => { 1924 if (!swiper || swiper.destroyed || !swiper.params) return; 1925 const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`; 1926 const slideEl = imageEl.closest(slideSelector()); 1927 if (slideEl) { 1928 let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`); 1929 if (!lazyEl && swiper.isElement) { 1930 if (slideEl.shadowRoot) { 1931 lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`); 1932 } else { 1933 // init later 1934 requestAnimationFrame(() => { 1935 if (slideEl.shadowRoot) { 1936 lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`); 1937 if (lazyEl) lazyEl.remove(); 1938 } 1939 }); 1940 } 1941 } 1942 if (lazyEl) lazyEl.remove(); 1943 } 1944 }; 1945 const unlazy = (swiper, index) => { 1946 if (!swiper.slides[index]) return; 1947 const imageEl = swiper.slides[index].querySelector('[loading="lazy"]'); 1948 if (imageEl) imageEl.removeAttribute('loading'); 1949 }; 1950 const preload = swiper => { 1951 if (!swiper || swiper.destroyed || !swiper.params) return; 1952 let amount = swiper.params.lazyPreloadPrevNext; 1953 const len = swiper.slides.length; 1954 if (!len || !amount || amount < 0) return; 1955 amount = Math.min(amount, len); 1956 const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView); 1957 const activeIndex = swiper.activeIndex; 1958 if (swiper.params.grid && swiper.params.grid.rows > 1) { 1959 const activeColumn = activeIndex; 1960 const preloadColumns = [activeColumn - amount]; 1961 preloadColumns.push(...Array.from({ 1962 length: amount 1963 }).map((_, i) => { 1964 return activeColumn + slidesPerView + i; 1965 })); 1966 swiper.slides.forEach((slideEl, i) => { 1967 if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i); 1968 }); 1969 return; 1970 } 1971 const slideIndexLastInView = activeIndex + slidesPerView - 1; 1972 if (swiper.params.rewind || swiper.params.loop) { 1973 for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) { 1974 const realIndex = (i % len + len) % len; 1975 if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex); 1976 } 1977 } else { 1978 for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) { 1979 if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) { 1980 unlazy(swiper, i); 1981 } 1982 } 1983 } 1984 }; 1985 1986 function getActiveIndexByTranslate(swiper) { 1987 const { 1988 slidesGrid, 1989 params 1990 } = swiper; 1991 const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; 1992 let activeIndex; 1993 for (let i = 0; i < slidesGrid.length; i += 1) { 1994 if (typeof slidesGrid[i + 1] !== 'undefined') { 1995 if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) { 1996 activeIndex = i; 1997 } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) { 1998 activeIndex = i + 1; 1999 } 2000 } else if (translate >= slidesGrid[i]) { 2001 activeIndex = i; 2002 } 2003 } 2004 // Normalize slideIndex 2005 if (params.normalizeSlideIndex) { 2006 if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0; 2007 } 2008 return activeIndex; 2009 } 2010 function updateActiveIndex(newActiveIndex) { 2011 const swiper = this; 2012 const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; 2013 const { 2014 snapGrid, 2015 params, 2016 activeIndex: previousIndex, 2017 realIndex: previousRealIndex, 2018 snapIndex: previousSnapIndex 2019 } = swiper; 2020 let activeIndex = newActiveIndex; 2021 let snapIndex; 2022 const getVirtualRealIndex = aIndex => { 2023 let realIndex = aIndex - swiper.virtual.slidesBefore; 2024 if (realIndex < 0) { 2025 realIndex = swiper.virtual.slides.length + realIndex; 2026 } 2027 if (realIndex >= swiper.virtual.slides.length) { 2028 realIndex -= swiper.virtual.slides.length; 2029 } 2030 return realIndex; 2031 }; 2032 if (typeof activeIndex === 'undefined') { 2033 activeIndex = getActiveIndexByTranslate(swiper); 2034 } 2035 if (snapGrid.indexOf(translate) >= 0) { 2036 snapIndex = snapGrid.indexOf(translate); 2037 } else { 2038 const skip = Math.min(params.slidesPerGroupSkip, activeIndex); 2039 snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup); 2040 } 2041 if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; 2042 if (activeIndex === previousIndex && !swiper.params.loop) { 2043 if (snapIndex !== previousSnapIndex) { 2044 swiper.snapIndex = snapIndex; 2045 swiper.emit('snapIndexChange'); 2046 } 2047 return; 2048 } 2049 if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) { 2050 swiper.realIndex = getVirtualRealIndex(activeIndex); 2051 return; 2052 } 2053 const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1; 2054 2055 // Get real index 2056 let realIndex; 2057 if (swiper.virtual && params.virtual.enabled && params.loop) { 2058 realIndex = getVirtualRealIndex(activeIndex); 2059 } else if (gridEnabled) { 2060 const firstSlideInColumn = swiper.slides.find(slideEl => slideEl.column === activeIndex); 2061 let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10); 2062 if (Number.isNaN(activeSlideIndex)) { 2063 activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0); 2064 } 2065 realIndex = Math.floor(activeSlideIndex / params.grid.rows); 2066 } else if (swiper.slides[activeIndex]) { 2067 const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index'); 2068 if (slideIndex) { 2069 realIndex = parseInt(slideIndex, 10); 2070 } else { 2071 realIndex = activeIndex; 2072 } 2073 } else { 2074 realIndex = activeIndex; 2075 } 2076 Object.assign(swiper, { 2077 previousSnapIndex, 2078 snapIndex, 2079 previousRealIndex, 2080 realIndex, 2081 previousIndex, 2082 activeIndex 2083 }); 2084 if (swiper.initialized) { 2085 preload(swiper); 2086 } 2087 swiper.emit('activeIndexChange'); 2088 swiper.emit('snapIndexChange'); 2089 if (swiper.initialized || swiper.params.runCallbacksOnInit) { 2090 if (previousRealIndex !== realIndex) { 2091 swiper.emit('realIndexChange'); 2092 } 2093 swiper.emit('slideChange'); 2094 } 2095 } 2096 2097 function updateClickedSlide(el, path) { 2098 const swiper = this; 2099 const params = swiper.params; 2100 let slide = el.closest(`.${params.slideClass}, swiper-slide`); 2101 if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {
vendor: 15,182 bytes, lines 2102-2589
2102 [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => { 2103 if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) { 2104 slide = pathEl; 2105 } 2106 }); 2107 } 2108 let slideFound = false; 2109 let slideIndex; 2110 if (slide) { 2111 for (let i = 0; i < swiper.slides.length; i += 1) { 2112 if (swiper.slides[i] === slide) { 2113 slideFound = true; 2114 slideIndex = i; 2115 break; 2116 } 2117 } 2118 } 2119 if (slide && slideFound) { 2120 swiper.clickedSlide = slide; 2121 if (swiper.virtual && swiper.params.virtual.enabled) { 2122 swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10); 2123 } else { 2124 swiper.clickedIndex = slideIndex; 2125 } 2126 } else { 2127 swiper.clickedSlide = undefined; 2128 swiper.clickedIndex = undefined; 2129 return; 2130 } 2131 if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) { 2132 swiper.slideToClickedSlide(); 2133 } 2134 } 2135 2136 var update = { 2137 updateSize, 2138 updateSlides, 2139 updateAutoHeight, 2140 updateSlidesOffset, 2141 updateSlidesProgress, 2142 updateProgress, 2143 updateSlidesClasses, 2144 updateActiveIndex, 2145 updateClickedSlide 2146 }; 2147 2148 function getSwiperTranslate(axis) { 2149 if (axis === void 0) { 2150 axis = this.isHorizontal() ? 'x' : 'y'; 2151 } 2152 const swiper = this; 2153 const { 2154 params, 2155 rtlTranslate: rtl, 2156 translate, 2157 wrapperEl 2158 } = swiper; 2159 if (params.virtualTranslate) { 2160 return rtl ? -translate : translate; 2161 } 2162 if (params.cssMode) { 2163 return translate; 2164 } 2165 let currentTranslate = getTranslate(wrapperEl, axis); 2166 currentTranslate += swiper.cssOverflowAdjustment(); 2167 if (rtl) currentTranslate = -currentTranslate; 2168 return currentTranslate || 0; 2169 } 2170 2171 function setTranslate(translate, byController) { 2172 const swiper = this; 2173 const { 2174 rtlTranslate: rtl, 2175 params, 2176 wrapperEl, 2177 progress 2178 } = swiper; 2179 let x = 0; 2180 let y = 0; 2181 const z = 0; 2182 if (swiper.isHorizontal()) { 2183 x = rtl ? -translate : translate; 2184 } else { 2185 y = translate; 2186 } 2187 if (params.roundLengths) { 2188 x = Math.floor(x); 2189 y = Math.floor(y); 2190 } 2191 swiper.previousTranslate = swiper.translate; 2192 swiper.translate = swiper.isHorizontal() ? x : y; 2193 if (params.cssMode) { 2194 wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y; 2195 } else if (!params.virtualTranslate) { 2196 if (swiper.isHorizontal()) { 2197 x -= swiper.cssOverflowAdjustment(); 2198 } else { 2199 y -= swiper.cssOverflowAdjustment(); 2200 } 2201 wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`; 2202 } 2203 2204 // Check if we need to update progress 2205 let newProgress; 2206 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 2207 if (translatesDiff === 0) { 2208 newProgress = 0; 2209 } else { 2210 newProgress = (translate - swiper.minTranslate()) / translatesDiff; 2211 } 2212 if (newProgress !== progress) { 2213 swiper.updateProgress(translate); 2214 } 2215 swiper.emit('setTranslate', swiper.translate, byController); 2216 } 2217 2218 function minTranslate() { 2219 return -this.snapGrid[0]; 2220 } 2221 2222 function maxTranslate() { 2223 return -this.snapGrid[this.snapGrid.length - 1]; 2224 } 2225 2226 function translateTo(translate, speed, runCallbacks, translateBounds, internal) { 2227 if (translate === void 0) { 2228 translate = 0; 2229 } 2230 if (speed === void 0) { 2231 speed = this.params.speed; 2232 } 2233 if (runCallbacks === void 0) { 2234 runCallbacks = true; 2235 } 2236 if (translateBounds === void 0) { 2237 translateBounds = true; 2238 } 2239 const swiper = this; 2240 const { 2241 params, 2242 wrapperEl 2243 } = swiper; 2244 if (swiper.animating && params.preventInteractionOnTransition) { 2245 return false; 2246 } 2247 const minTranslate = swiper.minTranslate(); 2248 const maxTranslate = swiper.maxTranslate(); 2249 let newTranslate; 2250 if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; 2251 2252 // Update progress 2253 swiper.updateProgress(newTranslate); 2254 if (params.cssMode) { 2255 const isH = swiper.isHorizontal(); 2256 if (speed === 0) { 2257 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate; 2258 } else { 2259 if (!swiper.support.smoothScroll) { 2260 animateCSSModeScroll({ 2261 swiper, 2262 targetPosition: -newTranslate, 2263 side: isH ? 'left' : 'top' 2264 }); 2265 return true; 2266 } 2267 wrapperEl.scrollTo({ 2268 [isH ? 'left' : 'top']: -newTranslate, 2269 behavior: 'smooth' 2270 }); 2271 } 2272 return true; 2273 } 2274 if (speed === 0) { 2275 swiper.setTransition(0); 2276 swiper.setTranslate(newTranslate); 2277 if (runCallbacks) { 2278 swiper.emit('beforeTransitionStart', speed, internal); 2279 swiper.emit('transitionEnd'); 2280 } 2281 } else { 2282 swiper.setTransition(speed); 2283 swiper.setTranslate(newTranslate); 2284 if (runCallbacks) { 2285 swiper.emit('beforeTransitionStart', speed, internal); 2286 swiper.emit('transitionStart'); 2287 } 2288 if (!swiper.animating) { 2289 swiper.animating = true; 2290 if (!swiper.onTranslateToWrapperTransitionEnd) { 2291 swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) { 2292 if (!swiper || swiper.destroyed) return; 2293 if (e.target !== this) return; 2294 swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); 2295 swiper.onTranslateToWrapperTransitionEnd = null; 2296 delete swiper.onTranslateToWrapperTransitionEnd; 2297 swiper.animating = false; 2298 if (runCallbacks) { 2299 swiper.emit('transitionEnd'); 2300 } 2301 }; 2302 } 2303 swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); 2304 } 2305 } 2306 return true; 2307 } 2308 2309 var translate = { 2310 getTranslate: getSwiperTranslate, 2311 setTranslate, 2312 minTranslate, 2313 maxTranslate, 2314 translateTo 2315 }; 2316 2317 function setTransition(duration, byController) { 2318 const swiper = this; 2319 if (!swiper.params.cssMode) { 2320 swiper.wrapperEl.style.transitionDuration = `${duration}ms`; 2321 swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : ''; 2322 } 2323 swiper.emit('setTransition', duration, byController); 2324 } 2325 2326 function transitionEmit(_ref) { 2327 let { 2328 swiper, 2329 runCallbacks, 2330 direction, 2331 step 2332 } = _ref; 2333 const { 2334 activeIndex, 2335 previousIndex 2336 } = swiper; 2337 let dir = direction; 2338 if (!dir) { 2339 if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset'; 2340 } 2341 swiper.emit(`transition${step}`); 2342 if (runCallbacks && activeIndex !== previousIndex) { 2343 if (dir === 'reset') { 2344 swiper.emit(`slideResetTransition${step}`); 2345 return; 2346 } 2347 swiper.emit(`slideChangeTransition${step}`); 2348 if (dir === 'next') { 2349 swiper.emit(`slideNextTransition${step}`); 2350 } else { 2351 swiper.emit(`slidePrevTransition${step}`); 2352 } 2353 } 2354 } 2355 2356 function transitionStart(runCallbacks, direction) { 2357 if (runCallbacks === void 0) { 2358 runCallbacks = true; 2359 } 2360 const swiper = this; 2361 const { 2362 params 2363 } = swiper; 2364 if (params.cssMode) return; 2365 if (params.autoHeight) { 2366 swiper.updateAutoHeight(); 2367 } 2368 transitionEmit({ 2369 swiper, 2370 runCallbacks, 2371 direction, 2372 step: 'Start' 2373 }); 2374 } 2375 2376 function transitionEnd(runCallbacks, direction) { 2377 if (runCallbacks === void 0) { 2378 runCallbacks = true; 2379 } 2380 const swiper = this; 2381 const { 2382 params 2383 } = swiper; 2384 swiper.animating = false; 2385 if (params.cssMode) return; 2386 swiper.setTransition(0); 2387 transitionEmit({ 2388 swiper, 2389 runCallbacks, 2390 direction, 2391 step: 'End' 2392 }); 2393 } 2394 2395 var transition = { 2396 setTransition, 2397 transitionStart, 2398 transitionEnd 2399 }; 2400 2401 function slideTo(index, speed, runCallbacks, internal, initial) { 2402 if (index === void 0) { 2403 index = 0; 2404 } 2405 if (runCallbacks === void 0) { 2406 runCallbacks = true; 2407 } 2408 if (typeof index === 'string') { 2409 index = parseInt(index, 10); 2410 } 2411 const swiper = this; 2412 let slideIndex = index; 2413 if (slideIndex < 0) slideIndex = 0; 2414 const { 2415 params, 2416 snapGrid, 2417 slidesGrid, 2418 previousIndex, 2419 activeIndex, 2420 rtlTranslate: rtl, 2421 wrapperEl, 2422 enabled 2423 } = swiper; 2424 if (!enabled && !internal && !initial || swiper.destroyed || swiper.animating && params.preventInteractionOnTransition) { 2425 return false; 2426 } 2427 if (typeof speed === 'undefined') { 2428 speed = swiper.params.speed; 2429 } 2430 const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex); 2431 let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup); 2432 if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; 2433 const translate = -snapGrid[snapIndex]; 2434 // Normalize slideIndex 2435 if (params.normalizeSlideIndex) { 2436 for (let i = 0; i < slidesGrid.length; i += 1) { 2437 const normalizedTranslate = -Math.floor(translate * 100); 2438 const normalizedGrid = Math.floor(slidesGrid[i] * 100); 2439 const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100); 2440 if (typeof slidesGrid[i + 1] !== 'undefined') { 2441 if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) { 2442 slideIndex = i; 2443 } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) { 2444 slideIndex = i + 1; 2445 } 2446 } else if (normalizedTranslate >= normalizedGrid) { 2447 slideIndex = i; 2448 } 2449 } 2450 } 2451 // Directions locks 2452 if (swiper.initialized && slideIndex !== activeIndex) { 2453 if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) { 2454 return false; 2455 } 2456 if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) { 2457 if ((activeIndex || 0) !== slideIndex) { 2458 return false; 2459 } 2460 } 2461 } 2462 if (slideIndex !== (previousIndex || 0) && runCallbacks) { 2463 swiper.emit('beforeSlideChangeStart'); 2464 } 2465 2466 // Update progress 2467 swiper.updateProgress(translate); 2468 let direction; 2469 if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; 2470 2471 // initial virtual 2472 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 2473 const isInitialVirtual = isVirtual && initial; 2474 // Update Index 2475 if (!isInitialVirtual && (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate)) { 2476 swiper.updateActiveIndex(slideIndex); 2477 // Update Height 2478 if (params.autoHeight) { 2479 swiper.updateAutoHeight(); 2480 } 2481 swiper.updateSlidesClasses(); 2482 if (params.effect !== 'slide') { 2483 swiper.setTranslate(translate); 2484 } 2485 if (direction !== 'reset') { 2486 swiper.transitionStart(runCallbacks, direction); 2487 swiper.transitionEnd(runCallbacks, direction); 2488 } 2489 return false; 2490 } 2491 if (params.cssMode) { 2492 const isH = swiper.isHorizontal(); 2493 const t = rtl ? translate : -translate; 2494 if (speed === 0) { 2495 if (isVirtual) { 2496 swiper.wrapperEl.style.scrollSnapType = 'none'; 2497 swiper._immediateVirtual = true; 2498 } 2499 if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) { 2500 swiper._cssModeVirtualInitialSet = true; 2501 requestAnimationFrame(() => { 2502 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; 2503 }); 2504 } else { 2505 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; 2506 } 2507 if (isVirtual) { 2508 requestAnimationFrame(() => { 2509 swiper.wrapperEl.style.scrollSnapType = ''; 2510 swiper._immediateVirtual = false; 2511 }); 2512 } 2513 } else { 2514 if (!swiper.support.smoothScroll) { 2515 animateCSSModeScroll({ 2516 swiper, 2517 targetPosition: t, 2518 side: isH ? 'left' : 'top' 2519 }); 2520 return true; 2521 } 2522 wrapperEl.scrollTo({ 2523 [isH ? 'left' : 'top']: t, 2524 behavior: 'smooth' 2525 }); 2526 } 2527 return true; 2528 } 2529 const browser = getBrowser(); 2530 const isSafari = browser.isSafari; 2531 if (isVirtual && !initial && isSafari && swiper.isElement) { 2532 swiper.virtual.update(false, false, slideIndex); 2533 } 2534 swiper.setTransition(speed); 2535 swiper.setTranslate(translate); 2536 swiper.updateActiveIndex(slideIndex); 2537 swiper.updateSlidesClasses(); 2538 swiper.emit('beforeTransitionStart', speed, internal); 2539 swiper.transitionStart(runCallbacks, direction); 2540 if (speed === 0) { 2541 swiper.transitionEnd(runCallbacks, direction); 2542 } else if (!swiper.animating) { 2543 swiper.animating = true; 2544 if (!swiper.onSlideToWrapperTransitionEnd) { 2545 swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) { 2546 if (!swiper || swiper.destroyed) return; 2547 if (e.target !== this) return; 2548 swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); 2549 swiper.onSlideToWrapperTransitionEnd = null; 2550 delete swiper.onSlideToWrapperTransitionEnd; 2551 swiper.transitionEnd(runCallbacks, direction); 2552 }; 2553 } 2554 swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); 2555 } 2556 return true; 2557 } 2558 2559 function slideToLoop(index, speed, runCallbacks, internal) { 2560 if (index === void 0) { 2561 index = 0; 2562 } 2563 if (runCallbacks === void 0) { 2564 runCallbacks = true; 2565 } 2566 if (typeof index === 'string') { 2567 const indexAsNumber = parseInt(index, 10); 2568 index = indexAsNumber; 2569 } 2570 const swiper = this; 2571 if (swiper.destroyed) return; 2572 if (typeof speed === 'undefined') { 2573 speed = swiper.params.speed; 2574 } 2575 const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1; 2576 let newIndex = index; 2577 if (swiper.params.loop) { 2578 if (swiper.virtual && swiper.params.virtual.enabled) { 2579 // eslint-disable-next-line 2580 newIndex = newIndex + swiper.virtual.slidesBefore; 2581 } else { 2582 let targetSlideIndex; 2583 if (gridEnabled) { 2584 const slideIndex = newIndex * swiper.params.grid.rows; 2585 targetSlideIndex = swiper.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex).column; 2586 } else { 2587 targetSlideIndex = swiper.getSlideIndexByData(newIndex); 2588 } 2589 const cols = gridEnabled ? Math.ceil(swiper.slides.length /
vendor: 4,599 bytes, lines 2589-2710
2589swiper.params.grid.rows) : swiper.slides.length; 2590 const { 2591 centeredSlides 2592 } = swiper.params; 2593 let slidesPerView = swiper.params.slidesPerView; 2594 if (slidesPerView === 'auto') { 2595 slidesPerView = swiper.slidesPerViewDynamic(); 2596 } else { 2597 slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10)); 2598 if (centeredSlides && slidesPerView % 2 === 0) { 2599 slidesPerView = slidesPerView + 1; 2600 } 2601 } 2602 let needLoopFix = cols - targetSlideIndex < slidesPerView; 2603 if (centeredSlides) { 2604 needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2); 2605 } 2606 if (internal && centeredSlides && swiper.params.slidesPerView !== 'auto' && !gridEnabled) { 2607 needLoopFix = false; 2608 } 2609 if (needLoopFix) { 2610 const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev'; 2611 swiper.loopFix({ 2612 direction, 2613 slideTo: true, 2614 activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1, 2615 slideRealIndex: direction === 'next' ? swiper.realIndex : undefined 2616 }); 2617 } 2618 if (gridEnabled) { 2619 const slideIndex = newIndex * swiper.params.grid.rows; 2620 newIndex = swiper.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex).column; 2621 } else { 2622 newIndex = swiper.getSlideIndexByData(newIndex); 2623 } 2624 } 2625 } 2626 requestAnimationFrame(() => { 2627 swiper.slideTo(newIndex, speed, runCallbacks, internal); 2628 }); 2629 return swiper; 2630 } 2631 2632 /* eslint no-unused-vars: "off" */ 2633 function slideNext(speed, runCallbacks, internal) { 2634 if (runCallbacks === void 0) { 2635 runCallbacks = true; 2636 } 2637 const swiper = this; 2638 const { 2639 enabled, 2640 params, 2641 animating 2642 } = swiper; 2643 if (!enabled || swiper.destroyed) return swiper; 2644 if (typeof speed === 'undefined') { 2645 speed = swiper.params.speed; 2646 } 2647 let perGroup = params.slidesPerGroup; 2648 if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) { 2649 perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1); 2650 } 2651 const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup; 2652 const isVirtual = swiper.virtual && params.virtual.enabled; 2653 if (params.loop) { 2654 if (animating && !isVirtual && params.loopPreventsSliding) return false; 2655 swiper.loopFix({ 2656 direction: 'next' 2657 }); 2658 // eslint-disable-next-line 2659 swiper._clientLeft = swiper.wrapperEl.clientLeft; 2660 if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) { 2661 requestAnimationFrame(() => { 2662 swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal); 2663 }); 2664 return true; 2665 } 2666 } 2667 if (params.rewind && swiper.isEnd) { 2668 return swiper.slideTo(0, speed, runCallbacks, internal); 2669 } 2670 return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal); 2671 } 2672 2673 /* eslint no-unused-vars: "off" */ 2674 function slidePrev(speed, runCallbacks, internal) { 2675 if (runCallbacks === void 0) { 2676 runCallbacks = true; 2677 } 2678 const swiper = this; 2679 const { 2680 params, 2681 snapGrid, 2682 slidesGrid, 2683 rtlTranslate, 2684 enabled, 2685 animating 2686 } = swiper; 2687 if (!enabled || swiper.destroyed) return swiper; 2688 if (typeof speed === 'undefined') { 2689 speed = swiper.params.speed; 2690 } 2691 const isVirtual = swiper.virtual && params.virtual.enabled; 2692 if (params.loop) { 2693 if (animating && !isVirtual && params.loopPreventsSliding) return false; 2694 swiper.loopFix({ 2695 direction: 'prev' 2696 }); 2697 // eslint-disable-next-line 2698 swiper._clientLeft = swiper.wrapperEl.clientLeft; 2699 } 2700 const translate = rtlTranslate ? swiper.translate : -swiper.translate; 2701 function normalize(val) { 2702 if (val < 0) return -Math.floor(Math.abs(val)); 2703 return Math.floor(val); 2704 } 2705 const normalizedTranslate = normalize(translate); 2706 const normalizedSnapGrid = snapGrid.map(val => normalize(val)); 2707 const isFreeMode = params.freeMode && params.freeMode.enabled; 2708 let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1]; 2709 if (typeof prevSnap === 'undefined' && (params.cssMode || isFreeMode)) { 2710 let prevSnapIndex;
vendor: 10,792 bytes, lines 2711-2974
2711 snapGrid.forEach((snap, snapIndex) => { 2712 if (normalizedTranslate >= snap) { 2713 // prevSnap = snap; 2714 prevSnapIndex = snapIndex; 2715 } 2716 }); 2717 if (typeof prevSnapIndex !== 'undefined') { 2718 prevSnap = isFreeMode ? snapGrid[prevSnapIndex] : snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex]; 2719 } 2720 } 2721 let prevIndex = 0; 2722 if (typeof prevSnap !== 'undefined') { 2723 prevIndex = slidesGrid.indexOf(prevSnap); 2724 if (prevIndex < 0) prevIndex = swiper.activeIndex - 1; 2725 if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) { 2726 prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1; 2727 prevIndex = Math.max(prevIndex, 0); 2728 } 2729 } 2730 if (params.rewind && swiper.isBeginning) { 2731 const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1; 2732 return swiper.slideTo(lastIndex, speed, runCallbacks, internal); 2733 } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) { 2734 requestAnimationFrame(() => { 2735 swiper.slideTo(prevIndex, speed, runCallbacks, internal); 2736 }); 2737 return true; 2738 } 2739 return swiper.slideTo(prevIndex, speed, runCallbacks, internal); 2740 } 2741 2742 /* eslint no-unused-vars: "off" */ 2743 function slideReset(speed, runCallbacks, internal) { 2744 if (runCallbacks === void 0) { 2745 runCallbacks = true; 2746 } 2747 const swiper = this; 2748 if (swiper.destroyed) return; 2749 if (typeof speed === 'undefined') { 2750 speed = swiper.params.speed; 2751 } 2752 return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal); 2753 } 2754 2755 /* eslint no-unused-vars: "off" */ 2756 function slideToClosest(speed, runCallbacks, internal, threshold) { 2757 if (runCallbacks === void 0) { 2758 runCallbacks = true; 2759 } 2760 if (threshold === void 0) { 2761 threshold = 0.5; 2762 } 2763 const swiper = this; 2764 if (swiper.destroyed) return; 2765 if (typeof speed === 'undefined') { 2766 speed = swiper.params.speed; 2767 } 2768 let index = swiper.activeIndex; 2769 const skip = Math.min(swiper.params.slidesPerGroupSkip, index); 2770 const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup); 2771 const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; 2772 if (translate >= swiper.snapGrid[snapIndex]) { 2773 // The current translate is on or after the current snap index, so the choice 2774 // is between the current index and the one after it. 2775 const currentSnap = swiper.snapGrid[snapIndex]; 2776 const nextSnap = swiper.snapGrid[snapIndex + 1]; 2777 if (translate - currentSnap > (nextSnap - currentSnap) * threshold) { 2778 index += swiper.params.slidesPerGroup; 2779 } 2780 } else { 2781 // The current translate is before the current snap index, so the choice 2782 // is between the current index and the one before it. 2783 const prevSnap = swiper.snapGrid[snapIndex - 1]; 2784 const currentSnap = swiper.snapGrid[snapIndex]; 2785 if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) { 2786 index -= swiper.params.slidesPerGroup; 2787 } 2788 } 2789 index = Math.max(index, 0); 2790 index = Math.min(index, swiper.slidesGrid.length - 1); 2791 return swiper.slideTo(index, speed, runCallbacks, internal); 2792 } 2793 2794 function slideToClickedSlide() { 2795 const swiper = this; 2796 if (swiper.destroyed) return; 2797 const { 2798 params, 2799 slidesEl 2800 } = swiper; 2801 const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView; 2802 let slideToIndex = swiper.clickedIndex; 2803 let realIndex; 2804 const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`; 2805 if (params.loop) { 2806 if (swiper.animating) return; 2807 realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10); 2808 if (params.centeredSlides) { 2809 if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) { 2810 swiper.loopFix(); 2811 slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]); 2812 nextTick(() => { 2813 swiper.slideTo(slideToIndex); 2814 }); 2815 } else { 2816 swiper.slideTo(slideToIndex); 2817 } 2818 } else if (slideToIndex > swiper.slides.length - slidesPerView) { 2819 swiper.loopFix(); 2820 slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]); 2821 nextTick(() => { 2822 swiper.slideTo(slideToIndex); 2823 }); 2824 } else { 2825 swiper.slideTo(slideToIndex); 2826 } 2827 } else { 2828 swiper.slideTo(slideToIndex); 2829 } 2830 } 2831 2832 var slide = { 2833 slideTo, 2834 slideToLoop, 2835 slideNext, 2836 slidePrev, 2837 slideReset, 2838 slideToClosest, 2839 slideToClickedSlide 2840 }; 2841 2842 function loopCreate(slideRealIndex) { 2843 const swiper = this; 2844 const { 2845 params, 2846 slidesEl 2847 } = swiper; 2848 if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return; 2849 const initSlides = () => { 2850 const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`); 2851 slides.forEach((el, index) => { 2852 el.setAttribute('data-swiper-slide-index', index); 2853 }); 2854 }; 2855 const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1; 2856 const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1); 2857 const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0; 2858 const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0; 2859 const addBlankSlides = amountOfSlides => { 2860 for (let i = 0; i < amountOfSlides; i += 1) { 2861 const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]); 2862 swiper.slidesEl.append(slideEl); 2863 } 2864 }; 2865 if (shouldFillGroup) { 2866 if (params.loopAddBlankSlides) { 2867 const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup; 2868 addBlankSlides(slidesToAdd); 2869 swiper.recalcSlides(); 2870 swiper.updateSlides(); 2871 } else { 2872 showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)'); 2873 } 2874 initSlides(); 2875 } else if (shouldFillGrid) { 2876 if (params.loopAddBlankSlides) { 2877 const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows; 2878 addBlankSlides(slidesToAdd); 2879 swiper.recalcSlides(); 2880 swiper.updateSlides(); 2881 } else { 2882 showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)'); 2883 } 2884 initSlides(); 2885 } else { 2886 initSlides(); 2887 } 2888 swiper.loopFix({ 2889 slideRealIndex, 2890 direction: params.centeredSlides ? undefined : 'next' 2891 }); 2892 } 2893 2894 function loopFix(_temp) { 2895 let { 2896 slideRealIndex, 2897 slideTo = true, 2898 direction, 2899 setTranslate, 2900 activeSlideIndex, 2901 byController, 2902 byMousewheel 2903 } = _temp === void 0 ? {} : _temp; 2904 const swiper = this; 2905 if (!swiper.params.loop) return; 2906 swiper.emit('beforeLoopFix'); 2907 const { 2908 slides, 2909 allowSlidePrev, 2910 allowSlideNext, 2911 slidesEl, 2912 params 2913 } = swiper; 2914 const { 2915 centeredSlides 2916 } = params; 2917 swiper.allowSlidePrev = true; 2918 swiper.allowSlideNext = true; 2919 if (swiper.virtual && params.virtual.enabled) { 2920 if (slideTo) { 2921 if (!params.centeredSlides && swiper.snapIndex === 0) { 2922 swiper.slideTo(swiper.virtual.slides.length, 0, false, true); 2923 } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) { 2924 swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true); 2925 } else if (swiper.snapIndex === swiper.snapGrid.length - 1) { 2926 swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true); 2927 } 2928 } 2929 swiper.allowSlidePrev = allowSlidePrev; 2930 swiper.allowSlideNext = allowSlideNext; 2931 swiper.emit('loopFix'); 2932 return; 2933 } 2934 let slidesPerView = params.slidesPerView; 2935 if (slidesPerView === 'auto') { 2936 slidesPerView = swiper.slidesPerViewDynamic(); 2937 } else { 2938 slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10)); 2939 if (centeredSlides && slidesPerView % 2 === 0) { 2940 slidesPerView = slidesPerView + 1; 2941 } 2942 } 2943 const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup; 2944 let loopedSlides = slidesPerGroup; 2945 if (loopedSlides % slidesPerGroup !== 0) { 2946 loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup; 2947 } 2948 loopedSlides += params.loopAdditionalSlides; 2949 swiper.loopedSlides = loopedSlides; 2950 const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1; 2951 if (slides.length < slidesPerView + loopedSlides) { 2952 showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters'); 2953 } else if (gridEnabled && params.grid.fill === 'row') { 2954 showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`'); 2955 } 2956 const prependSlidesIndexes = []; 2957 const appendSlidesIndexes = []; 2958 let activeIndex = swiper.activeIndex; 2959 if (typeof activeSlideIndex === 'undefined') { 2960 activeSlideIndex = swiper.getSlideIndex(slides.find(el => el.classList.contains(params.slideActiveClass))); 2961 } else { 2962 activeIndex = activeSlideIndex; 2963 } 2964 const isNext = direction === 'next' || !direction; 2965 const isPrev = direction === 'prev' || !direction; 2966 let slidesPrepended = 0; 2967 let slidesAppended = 0; 2968 const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length; 2969 const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex; 2970 const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0); 2971 // prepend last slides before start 2972 if (activeColIndexWithShift < loopedSlides) { 2973 slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup); 2974 for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {
vendor: 15,282 bytes, lines 2975-3388
2975 const index = i - Math.floor(i / cols) * cols; 2976 if (gridEnabled) { 2977 const colIndexToPrepend = cols - index - 1; 2978 for (let i = slides.length - 1; i >= 0; i -= 1) { 2979 if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i); 2980 } 2981 // slides.forEach((slide, slideIndex) => { 2982 // if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex); 2983 // }); 2984 } else { 2985 prependSlidesIndexes.push(cols - index - 1); 2986 } 2987 } 2988 } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) { 2989 slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup); 2990 for (let i = 0; i < slidesAppended; i += 1) { 2991 const index = i - Math.floor(i / cols) * cols; 2992 if (gridEnabled) { 2993 slides.forEach((slide, slideIndex) => { 2994 if (slide.column === index) appendSlidesIndexes.push(slideIndex); 2995 }); 2996 } else { 2997 appendSlidesIndexes.push(index); 2998 } 2999 } 3000 } 3001 swiper.__preventObserver__ = true; 3002 requestAnimationFrame(() => { 3003 swiper.__preventObserver__ = false; 3004 }); 3005 if (isPrev) { 3006 prependSlidesIndexes.forEach(index => { 3007 slides[index].swiperLoopMoveDOM = true; 3008 slidesEl.prepend(slides[index]); 3009 slides[index].swiperLoopMoveDOM = false; 3010 }); 3011 } 3012 if (isNext) { 3013 appendSlidesIndexes.forEach(index => { 3014 slides[index].swiperLoopMoveDOM = true; 3015 slidesEl.append(slides[index]); 3016 slides[index].swiperLoopMoveDOM = false; 3017 }); 3018 } 3019 swiper.recalcSlides(); 3020 if (params.slidesPerView === 'auto') { 3021 swiper.updateSlides(); 3022 } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) { 3023 swiper.slides.forEach((slide, slideIndex) => { 3024 swiper.grid.updateSlide(slideIndex, slide, swiper.slides); 3025 }); 3026 } 3027 if (params.watchSlidesProgress) { 3028 swiper.updateSlidesOffset(); 3029 } 3030 if (slideTo) { 3031 if (prependSlidesIndexes.length > 0 && isPrev) { 3032 if (typeof slideRealIndex === 'undefined') { 3033 const currentSlideTranslate = swiper.slidesGrid[activeIndex]; 3034 const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended]; 3035 const diff = newSlideTranslate - currentSlideTranslate; 3036 if (byMousewheel) { 3037 swiper.setTranslate(swiper.translate - diff); 3038 } else { 3039 swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true); 3040 if (setTranslate) { 3041 swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff; 3042 swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff; 3043 } 3044 } 3045 } else { 3046 if (setTranslate) { 3047 const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length; 3048 swiper.slideTo(swiper.activeIndex + shift, 0, false, true); 3049 swiper.touchEventsData.currentTranslate = swiper.translate; 3050 } 3051 } 3052 } else if (appendSlidesIndexes.length > 0 && isNext) { 3053 if (typeof slideRealIndex === 'undefined') { 3054 const currentSlideTranslate = swiper.slidesGrid[activeIndex]; 3055 const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended]; 3056 const diff = newSlideTranslate - currentSlideTranslate; 3057 if (byMousewheel) { 3058 swiper.setTranslate(swiper.translate - diff); 3059 } else { 3060 swiper.slideTo(activeIndex - slidesAppended, 0, false, true); 3061 if (setTranslate) { 3062 swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff; 3063 swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff; 3064 } 3065 } 3066 } else { 3067 const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length; 3068 swiper.slideTo(swiper.activeIndex - shift, 0, false, true); 3069 } 3070 } 3071 } 3072 swiper.allowSlidePrev = allowSlidePrev; 3073 swiper.allowSlideNext = allowSlideNext; 3074 if (swiper.controller && swiper.controller.control && !byController) { 3075 const loopParams = { 3076 slideRealIndex, 3077 direction, 3078 setTranslate, 3079 activeSlideIndex, 3080 byController: true 3081 }; 3082 if (Array.isArray(swiper.controller.control)) { 3083 swiper.controller.control.forEach(c => { 3084 if (!c.destroyed && c.params.loop) c.loopFix({ 3085 ...loopParams, 3086 slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false 3087 }); 3088 }); 3089 } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) { 3090 swiper.controller.control.loopFix({ 3091 ...loopParams, 3092 slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false 3093 }); 3094 } 3095 } 3096 swiper.emit('loopFix'); 3097 } 3098 3099 function loopDestroy() { 3100 const swiper = this; 3101 const { 3102 params, 3103 slidesEl 3104 } = swiper; 3105 if (!params.loop || !slidesEl || swiper.virtual && swiper.params.virtual.enabled) return; 3106 swiper.recalcSlides(); 3107 const newSlidesOrder = []; 3108 swiper.slides.forEach(slideEl => { 3109 const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex; 3110 newSlidesOrder[index] = slideEl; 3111 }); 3112 swiper.slides.forEach(slideEl => { 3113 slideEl.removeAttribute('data-swiper-slide-index'); 3114 }); 3115 newSlidesOrder.forEach(slideEl => { 3116 slidesEl.append(slideEl); 3117 }); 3118 swiper.recalcSlides(); 3119 swiper.slideTo(swiper.realIndex, 0); 3120 } 3121 3122 var loop = { 3123 loopCreate, 3124 loopFix, 3125 loopDestroy 3126 }; 3127 3128 function setGrabCursor(moving) { 3129 const swiper = this; 3130 if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return; 3131 const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl; 3132 if (swiper.isElement) { 3133 swiper.__preventObserver__ = true; 3134 } 3135 el.style.cursor = 'move'; 3136 el.style.cursor = moving ? 'grabbing' : 'grab'; 3137 if (swiper.isElement) { 3138 requestAnimationFrame(() => { 3139 swiper.__preventObserver__ = false; 3140 }); 3141 } 3142 } 3143 3144 function unsetGrabCursor() { 3145 const swiper = this; 3146 if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) { 3147 return; 3148 } 3149 if (swiper.isElement) { 3150 swiper.__preventObserver__ = true; 3151 } 3152 swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = ''; 3153 if (swiper.isElement) { 3154 requestAnimationFrame(() => { 3155 swiper.__preventObserver__ = false; 3156 }); 3157 } 3158 } 3159 3160 var grabCursor = { 3161 setGrabCursor, 3162 unsetGrabCursor 3163 }; 3164 3165 // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd 3166 function closestElement(selector, base) { 3167 if (base === void 0) { 3168 base = this; 3169 } 3170 function __closestFrom(el) { 3171 if (!el || el === getDocument() || el === getWindow()) return null; 3172 if (el.assignedSlot) el = el.assignedSlot; 3173 const found = el.closest(selector); 3174 if (!found && !el.getRootNode) { 3175 return null; 3176 } 3177 return found || __closestFrom(el.getRootNode().host); 3178 } 3179 return __closestFrom(base); 3180 } 3181 function preventEdgeSwipe(swiper, event, startX) { 3182 const window = getWindow(); 3183 const { 3184 params 3185 } = swiper; 3186 const edgeSwipeDetection = params.edgeSwipeDetection; 3187 const edgeSwipeThreshold = params.edgeSwipeThreshold; 3188 if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) { 3189 if (edgeSwipeDetection === 'prevent') { 3190 event.preventDefault(); 3191 return true; 3192 } 3193 return false; 3194 } 3195 return true; 3196 } 3197 function onTouchStart(event) { 3198 const swiper = this; 3199 const document = getDocument(); 3200 let e = event; 3201 if (e.originalEvent) e = e.originalEvent; 3202 const data = swiper.touchEventsData; 3203 if (e.type === 'pointerdown') { 3204 if (data.pointerId !== null && data.pointerId !== e.pointerId) { 3205 return; 3206 } 3207 data.pointerId = e.pointerId; 3208 } else if (e.type === 'touchstart' && e.targetTouches.length === 1) { 3209 data.touchId = e.targetTouches[0].identifier; 3210 } 3211 if (e.type === 'touchstart') { 3212 // don't proceed touch event 3213 preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX); 3214 return; 3215 } 3216 const { 3217 params, 3218 touches, 3219 enabled 3220 } = swiper; 3221 if (!enabled) return; 3222 if (!params.simulateTouch && e.pointerType === 'mouse') return; 3223 if (swiper.animating && params.preventInteractionOnTransition) { 3224 return; 3225 } 3226 if (!swiper.animating && params.cssMode && params.loop) { 3227 swiper.loopFix(); 3228 } 3229 let targetEl = e.target; 3230 if (params.touchEventsTarget === 'wrapper') { 3231 if (!elementIsChildOf(targetEl, swiper.wrapperEl)) return; 3232 } 3233 if ('which' in e && e.which === 3) return; 3234 if ('button' in e && e.button > 0) return; 3235 if (data.isTouched && data.isMoved) return; 3236 3237 // change target el for shadow root component 3238 const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== ''; 3239 // eslint-disable-next-line 3240 const eventPath = e.composedPath ? e.composedPath() : e.path; 3241 if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) { 3242 targetEl = eventPath[0]; 3243 } 3244 const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`; 3245 const isTargetShadow = !!(e.target && e.target.shadowRoot); 3246 3247 // use closestElement for shadow root element to get the actual closest for nested shadow root element 3248 if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) { 3249 swiper.allowClick = true; 3250 return; 3251 } 3252 if (params.swipeHandler) { 3253 if (!targetEl.closest(params.swipeHandler)) return; 3254 } 3255 touches.currentX = e.pageX; 3256 touches.currentY = e.pageY; 3257 const startX = touches.currentX; 3258 const startY = touches.currentY; 3259 3260 // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore 3261 3262 if (!preventEdgeSwipe(swiper, e, startX)) { 3263 return; 3264 } 3265 Object.assign(data, { 3266 isTouched: true, 3267 isMoved: false, 3268 allowTouchCallbacks: true, 3269 isScrolling: undefined, 3270 startMoving: undefined 3271 }); 3272 touches.startX = startX; 3273 touches.startY = startY; 3274 data.touchStartTime = now(); 3275 swiper.allowClick = true; 3276 swiper.updateSize(); 3277 swiper.swipeDirection = undefined; 3278 if (params.threshold > 0) data.allowThresholdMove = false; 3279 let preventDefault = true; 3280 if (targetEl.matches(data.focusableElements)) { 3281 preventDefault = false; 3282 if (targetEl.nodeName === 'SELECT') { 3283 data.isTouched = false; 3284 } 3285 } 3286 if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl && (e.pointerType === 'mouse' || e.pointerType !== 'mouse' && !targetEl.matches(data.focusableElements))) { 3287 document.activeElement.blur(); 3288 } 3289 const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault; 3290 if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) { 3291 e.preventDefault(); 3292 } 3293 if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) { 3294 swiper.freeMode.onTouchStart(); 3295 } 3296 swiper.emit('touchStart', e); 3297 } 3298 3299 function onTouchMove(event) { 3300 const document = getDocument(); 3301 const swiper = this; 3302 const data = swiper.touchEventsData; 3303 const { 3304 params, 3305 touches, 3306 rtlTranslate: rtl, 3307 enabled 3308 } = swiper; 3309 if (!enabled) return; 3310 if (!params.simulateTouch && event.pointerType === 'mouse') return; 3311 let e = event; 3312 if (e.originalEvent) e = e.originalEvent; 3313 if (e.type === 'pointermove') { 3314 if (data.touchId !== null) return; // return from pointer if we use touch 3315 const id = e.pointerId; 3316 if (id !== data.pointerId) return; 3317 } 3318 let targetTouch; 3319 if (e.type === 'touchmove') { 3320 targetTouch = [...e.changedTouches].find(t => t.identifier === data.touchId); 3321 if (!targetTouch || targetTouch.identifier !== data.touchId) return; 3322 } else { 3323 targetTouch = e; 3324 } 3325 if (!data.isTouched) { 3326 if (data.startMoving && data.isScrolling) { 3327 swiper.emit('touchMoveOpposite', e); 3328 } 3329 return; 3330 } 3331 const pageX = targetTouch.pageX; 3332 const pageY = targetTouch.pageY; 3333 if (e.preventedByNestedSwiper) { 3334 touches.startX = pageX; 3335 touches.startY = pageY; 3336 return; 3337 } 3338 if (!swiper.allowTouchMove) { 3339 if (!e.target.matches(data.focusableElements)) { 3340 swiper.allowClick = false; 3341 } 3342 if (data.isTouched) { 3343 Object.assign(touches, { 3344 startX: pageX, 3345 startY: pageY, 3346 currentX: pageX, 3347 currentY: pageY 3348 }); 3349 data.touchStartTime = now(); 3350 } 3351 return; 3352 } 3353 if (params.touchReleaseOnEdges && !params.loop) { 3354 if (swiper.isVertical()) { 3355 // Vertical 3356 if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) { 3357 data.isTouched = false; 3358 data.isMoved = false; 3359 return; 3360 } 3361 } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) { 3362 return; 3363 } 3364 } 3365 if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== e.target && e.pointerType !== 'mouse') { 3366 document.activeElement.blur(); 3367 } 3368 if (document.activeElement) { 3369 if (e.target === document.activeElement && e.target.matches(data.focusableElements)) { 3370 data.isMoved = true; 3371 swiper.allowClick = false; 3372 return; 3373 } 3374 } 3375 if (data.allowTouchCallbacks) { 3376 swiper.emit('touchMove', e); 3377 } 3378 touches.previousX = touches.currentX; 3379 touches.previousY = touches.currentY; 3380 touches.currentX = pageX; 3381 touches.currentY = pageY; 3382 const diffX = touches.currentX - touches.startX; 3383 const diffY = touches.currentY - touches.startY; 3384 if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return; 3385 if (typeof data.isScrolling === 'undefined') { 3386 let touchAngle; 3387 if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) { 3388 data.isScrolling = false;
vendor: 8,243 bytes, lines 3389-3594
3389 } else { 3390 // eslint-disable-next-line 3391 if (diffX * diffX + diffY * diffY >= 25) { 3392 touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI; 3393 data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle; 3394 } 3395 } 3396 } 3397 if (data.isScrolling) { 3398 swiper.emit('touchMoveOpposite', e); 3399 } 3400 if (typeof data.startMoving === 'undefined') { 3401 if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) { 3402 data.startMoving = true; 3403 } 3404 } 3405 if (data.isScrolling || e.type === 'touchmove' && data.preventTouchMoveFromPointerMove) { 3406 data.isTouched = false; 3407 return; 3408 } 3409 if (!data.startMoving) { 3410 return; 3411 } 3412 swiper.allowClick = false; 3413 if (!params.cssMode && e.cancelable) { 3414 e.preventDefault(); 3415 } 3416 if (params.touchMoveStopPropagation && !params.nested) { 3417 e.stopPropagation(); 3418 } 3419 let diff = swiper.isHorizontal() ? diffX : diffY; 3420 let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY; 3421 if (params.oneWayMovement) { 3422 diff = Math.abs(diff) * (rtl ? 1 : -1); 3423 touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1); 3424 } 3425 touches.diff = diff; 3426 diff *= params.touchRatio; 3427 if (rtl) { 3428 diff = -diff; 3429 touchesDiff = -touchesDiff; 3430 } 3431 const prevTouchesDirection = swiper.touchesDirection; 3432 swiper.swipeDirection = diff > 0 ? 'prev' : 'next'; 3433 swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next'; 3434 const isLoop = swiper.params.loop && !params.cssMode; 3435 const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev; 3436 if (!data.isMoved) { 3437 if (isLoop && allowLoopFix) { 3438 swiper.loopFix({ 3439 direction: swiper.swipeDirection 3440 }); 3441 } 3442 data.startTranslate = swiper.getTranslate(); 3443 swiper.setTransition(0); 3444 if (swiper.animating) { 3445 const evt = new window.CustomEvent('transitionend', { 3446 bubbles: true, 3447 cancelable: true, 3448 detail: { 3449 bySwiperTouchMove: true 3450 } 3451 }); 3452 swiper.wrapperEl.dispatchEvent(evt); 3453 } 3454 data.allowMomentumBounce = false; 3455 // Grab Cursor 3456 if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { 3457 swiper.setGrabCursor(true); 3458 } 3459 swiper.emit('sliderFirstMove', e); 3460 } 3461 let loopFixed; 3462 new Date().getTime(); 3463 if (params._loopSwapReset !== false && data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) { 3464 Object.assign(touches, { 3465 startX: pageX, 3466 startY: pageY, 3467 currentX: pageX, 3468 currentY: pageY, 3469 startTranslate: data.currentTranslate 3470 }); 3471 data.loopSwapReset = true; 3472 data.startTranslate = data.currentTranslate; 3473 return; 3474 } 3475 swiper.emit('sliderMove', e); 3476 data.isMoved = true; 3477 data.currentTranslate = diff + data.startTranslate; 3478 let disableParentSwiper = true; 3479 let resistanceRatio = params.resistanceRatio; 3480 if (params.touchReleaseOnEdges) { 3481 resistanceRatio = 0; 3482 } 3483 if (diff > 0) { 3484 if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] - (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.activeIndex + 1] + swiper.params.spaceBetween : 0) - swiper.params.spaceBetween : swiper.minTranslate())) { 3485 swiper.loopFix({ 3486 direction: 'prev', 3487 setTranslate: true, 3488 activeSlideIndex: 0 3489 }); 3490 } 3491 if (data.currentTranslate > swiper.minTranslate()) { 3492 disableParentSwiper = false; 3493 if (params.resistance) { 3494 data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio; 3495 } 3496 } 3497 } else if (diff < 0) { 3498 if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween + (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween : 0) : swiper.maxTranslate())) { 3499 swiper.loopFix({ 3500 direction: 'next', 3501 setTranslate: true, 3502 activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10))) 3503 }); 3504 } 3505 if (data.currentTranslate < swiper.maxTranslate()) { 3506 disableParentSwiper = false; 3507 if (params.resistance) { 3508 data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio; 3509 } 3510 } 3511 } 3512 if (disableParentSwiper) { 3513 e.preventedByNestedSwiper = true; 3514 } 3515 3516 // Directions locks 3517 if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) { 3518 data.currentTranslate = data.startTranslate; 3519 } 3520 if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) { 3521 data.currentTranslate = data.startTranslate; 3522 } 3523 if (!swiper.allowSlidePrev && !swiper.allowSlideNext) { 3524 data.currentTranslate = data.startTranslate; 3525 } 3526 3527 // Threshold 3528 if (params.threshold > 0) { 3529 if (Math.abs(diff) > params.threshold || data.allowThresholdMove) { 3530 if (!data.allowThresholdMove) { 3531 data.allowThresholdMove = true; 3532 touches.startX = touches.currentX; 3533 touches.startY = touches.currentY; 3534 data.currentTranslate = data.startTranslate; 3535 touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY; 3536 return; 3537 } 3538 } else { 3539 data.currentTranslate = data.startTranslate; 3540 return; 3541 } 3542 } 3543 if (!params.followFinger || params.cssMode) return; 3544 3545 // Update active index in free mode 3546 if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) { 3547 swiper.updateActiveIndex(); 3548 swiper.updateSlidesClasses(); 3549 } 3550 if (params.freeMode && params.freeMode.enabled && swiper.freeMode) { 3551 swiper.freeMode.onTouchMove(); 3552 } 3553 // Update progress 3554 swiper.updateProgress(data.currentTranslate); 3555 // Update translate 3556 swiper.setTranslate(data.currentTranslate); 3557 } 3558 3559 function onTouchEnd(event) { 3560 const swiper = this; 3561 const data = swiper.touchEventsData; 3562 let e = event; 3563 if (e.originalEvent) e = e.originalEvent; 3564 let targetTouch; 3565 const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel'; 3566 if (!isTouchEvent) { 3567 if (data.touchId !== null) return; // return from pointer if we use touch 3568 if (e.pointerId !== data.pointerId) return; 3569 targetTouch = e; 3570 } else { 3571 targetTouch = [...e.changedTouches].find(t => t.identifier === data.touchId); 3572 if (!targetTouch || targetTouch.identifier !== data.touchId) return; 3573 } 3574 if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) { 3575 const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView); 3576 if (!proceed) { 3577 return; 3578 } 3579 } 3580 data.pointerId = null; 3581 data.touchId = null; 3582 const { 3583 params, 3584 touches, 3585 rtlTranslate: rtl, 3586 slidesGrid, 3587 enabled 3588 } = swiper; 3589 if (!enabled) return; 3590 if (!params.simulateTouch && e.pointerType === 'mouse') return; 3591 if (data.allowTouchCallbacks) { 3592 swiper.emit('touchEnd', e); 3593 } 3594 data.allowTouchCallbacks = false;
vendor: 4,775 bytes, lines 3595-3726
3595 if (!data.isTouched) { 3596 if (data.isMoved && params.grabCursor) { 3597 swiper.setGrabCursor(false); 3598 } 3599 data.isMoved = false; 3600 data.startMoving = false; 3601 return; 3602 } 3603 3604 // Return Grab Cursor 3605 if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { 3606 swiper.setGrabCursor(false); 3607 } 3608 3609 // Time diff 3610 const touchEndTime = now(); 3611 const timeDiff = touchEndTime - data.touchStartTime; 3612 3613 // Tap, doubleTap, Click 3614 if (swiper.allowClick) { 3615 const pathTree = e.path || e.composedPath && e.composedPath(); 3616 swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree); 3617 swiper.emit('tap click', e); 3618 if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) { 3619 swiper.emit('doubleTap doubleClick', e); 3620 } 3621 } 3622 data.lastClickTime = now(); 3623 nextTick(() => { 3624 if (!swiper.destroyed) swiper.allowClick = true; 3625 }); 3626 if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) { 3627 data.isTouched = false; 3628 data.isMoved = false; 3629 data.startMoving = false; 3630 return; 3631 } 3632 data.isTouched = false; 3633 data.isMoved = false; 3634 data.startMoving = false; 3635 let currentPos; 3636 if (params.followFinger) { 3637 currentPos = rtl ? swiper.translate : -swiper.translate; 3638 } else { 3639 currentPos = -data.currentTranslate; 3640 } 3641 if (params.cssMode) { 3642 return; 3643 } 3644 if (params.freeMode && params.freeMode.enabled) { 3645 swiper.freeMode.onTouchEnd({ 3646 currentPos 3647 }); 3648 return; 3649 } 3650 3651 // Find current slide 3652 const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop; 3653 let stopIndex = 0; 3654 let groupSize = swiper.slidesSizesGrid[0]; 3655 for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) { 3656 const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; 3657 if (typeof slidesGrid[i + increment] !== 'undefined') { 3658 if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) { 3659 stopIndex = i; 3660 groupSize = slidesGrid[i + increment] - slidesGrid[i]; 3661 } 3662 } else if (swipeToLast || currentPos >= slidesGrid[i]) { 3663 stopIndex = i; 3664 groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2]; 3665 } 3666 } 3667 let rewindFirstIndex = null; 3668 let rewindLastIndex = null; 3669 if (params.rewind) { 3670 if (swiper.isBeginning) { 3671 rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1; 3672 } else if (swiper.isEnd) { 3673 rewindFirstIndex = 0; 3674 } 3675 } 3676 // Find current slide size 3677 const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize; 3678 const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; 3679 if (timeDiff > params.longSwipesMs) { 3680 // Long touches 3681 if (!params.longSwipes) { 3682 swiper.slideTo(swiper.activeIndex); 3683 return; 3684 } 3685 if (swiper.swipeDirection === 'next') { 3686 if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex); 3687 } 3688 if (swiper.swipeDirection === 'prev') { 3689 if (ratio > 1 - params.longSwipesRatio) { 3690 swiper.slideTo(stopIndex + increment); 3691 } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) { 3692 swiper.slideTo(rewindLastIndex); 3693 } else { 3694 swiper.slideTo(stopIndex); 3695 } 3696 } 3697 } else { 3698 // Short swipes 3699 if (!params.shortSwipes) { 3700 swiper.slideTo(swiper.activeIndex); 3701 return; 3702 } 3703 const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl); 3704 if (!isNavButtonTarget) { 3705 if (swiper.swipeDirection === 'next') { 3706 swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment); 3707 } 3708 if (swiper.swipeDirection === 'prev') { 3709 swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex); 3710 } 3711 } else if (e.target === swiper.navigation.nextEl) { 3712 swiper.slideTo(stopIndex + increment); 3713 } else { 3714 swiper.slideTo(stopIndex); 3715 } 3716 } 3717 } 3718 3719 function onResize() { 3720 const swiper = this; 3721 const { 3722 params, 3723 el 3724 } = swiper; 3725 if (el && el.offsetWidth === 0) return; 3726
vendor: 6,853 bytes, lines 3727-3949
3727 // Breakpoints 3728 if (params.breakpoints) { 3729 swiper.setBreakpoint(); 3730 } 3731 3732 // Save locks 3733 const { 3734 allowSlideNext, 3735 allowSlidePrev, 3736 snapGrid 3737 } = swiper; 3738 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 3739 3740 // Disable locks on resize 3741 swiper.allowSlideNext = true; 3742 swiper.allowSlidePrev = true; 3743 swiper.updateSize(); 3744 swiper.updateSlides(); 3745 swiper.updateSlidesClasses(); 3746 const isVirtualLoop = isVirtual && params.loop; 3747 if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) { 3748 swiper.slideTo(swiper.slides.length - 1, 0, false, true); 3749 } else { 3750 if (swiper.params.loop && !isVirtual) { 3751 swiper.slideToLoop(swiper.realIndex, 0, false, true); 3752 } else { 3753 swiper.slideTo(swiper.activeIndex, 0, false, true); 3754 } 3755 } 3756 if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) { 3757 clearTimeout(swiper.autoplay.resizeTimeout); 3758 swiper.autoplay.resizeTimeout = setTimeout(() => { 3759 if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) { 3760 swiper.autoplay.resume(); 3761 } 3762 }, 500); 3763 } 3764 // Return locks after resize 3765 swiper.allowSlidePrev = allowSlidePrev; 3766 swiper.allowSlideNext = allowSlideNext; 3767 if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) { 3768 swiper.checkOverflow(); 3769 } 3770 } 3771 3772 function onClick(e) { 3773 const swiper = this; 3774 if (!swiper.enabled) return; 3775 if (!swiper.allowClick) { 3776 if (swiper.params.preventClicks) e.preventDefault(); 3777 if (swiper.params.preventClicksPropagation && swiper.animating) { 3778 e.stopPropagation(); 3779 e.stopImmediatePropagation(); 3780 } 3781 } 3782 } 3783 3784 function onScroll() { 3785 const swiper = this; 3786 const { 3787 wrapperEl, 3788 rtlTranslate, 3789 enabled 3790 } = swiper; 3791 if (!enabled) return; 3792 swiper.previousTranslate = swiper.translate; 3793 if (swiper.isHorizontal()) { 3794 swiper.translate = -wrapperEl.scrollLeft; 3795 } else { 3796 swiper.translate = -wrapperEl.scrollTop; 3797 } 3798 // eslint-disable-next-line 3799 if (swiper.translate === 0) swiper.translate = 0; 3800 swiper.updateActiveIndex(); 3801 swiper.updateSlidesClasses(); 3802 let newProgress; 3803 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 3804 if (translatesDiff === 0) { 3805 newProgress = 0; 3806 } else { 3807 newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff; 3808 } 3809 if (newProgress !== swiper.progress) { 3810 swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate); 3811 } 3812 swiper.emit('setTranslate', swiper.translate, false); 3813 } 3814 3815 function onLoad(e) { 3816 const swiper = this; 3817 processLazyPreloader(swiper, e.target); 3818 if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) { 3819 return; 3820 } 3821 swiper.update(); 3822 } 3823 3824 function onDocumentTouchStart() { 3825 const swiper = this; 3826 if (swiper.documentTouchHandlerProceeded) return; 3827 swiper.documentTouchHandlerProceeded = true; 3828 if (swiper.params.touchReleaseOnEdges) { 3829 swiper.el.style.touchAction = 'auto'; 3830 } 3831 } 3832 3833 const events = (swiper, method) => { 3834 const document = getDocument(); 3835 const { 3836 params, 3837 el, 3838 wrapperEl, 3839 device 3840 } = swiper; 3841 const capture = !!params.nested; 3842 const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener'; 3843 const swiperMethod = method; 3844 if (!el || typeof el === 'string') return; 3845 3846 // Touch Events 3847 document[domMethod]('touchstart', swiper.onDocumentTouchStart, { 3848 passive: false, 3849 capture 3850 }); 3851 el[domMethod]('touchstart', swiper.onTouchStart, { 3852 passive: false 3853 }); 3854 el[domMethod]('pointerdown', swiper.onTouchStart, { 3855 passive: false 3856 }); 3857 document[domMethod]('touchmove', swiper.onTouchMove, { 3858 passive: false, 3859 capture 3860 }); 3861 document[domMethod]('pointermove', swiper.onTouchMove, { 3862 passive: false, 3863 capture 3864 }); 3865 document[domMethod]('touchend', swiper.onTouchEnd, { 3866 passive: true 3867 }); 3868 document[domMethod]('pointerup', swiper.onTouchEnd, { 3869 passive: true 3870 }); 3871 document[domMethod]('pointercancel', swiper.onTouchEnd, { 3872 passive: true 3873 }); 3874 document[domMethod]('touchcancel', swiper.onTouchEnd, { 3875 passive: true 3876 }); 3877 document[domMethod]('pointerout', swiper.onTouchEnd, { 3878 passive: true 3879 }); 3880 document[domMethod]('pointerleave', swiper.onTouchEnd, { 3881 passive: true 3882 }); 3883 document[domMethod]('contextmenu', swiper.onTouchEnd, { 3884 passive: true 3885 }); 3886 3887 // Prevent Links Clicks 3888 if (params.preventClicks || params.preventClicksPropagation) { 3889 el[domMethod]('click', swiper.onClick, true); 3890 } 3891 if (params.cssMode) { 3892 wrapperEl[domMethod]('scroll', swiper.onScroll); 3893 } 3894 3895 // Resize handler 3896 if (params.updateOnWindowResize) { 3897 swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true); 3898 } else { 3899 swiper[swiperMethod]('observerUpdate', onResize, true); 3900 } 3901 3902 // Images loader 3903 el[domMethod]('load', swiper.onLoad, { 3904 capture: true 3905 }); 3906 }; 3907 function attachEvents() { 3908 const swiper = this; 3909 const { 3910 params 3911 } = swiper; 3912 swiper.onTouchStart = onTouchStart.bind(swiper); 3913 swiper.onTouchMove = onTouchMove.bind(swiper); 3914 swiper.onTouchEnd = onTouchEnd.bind(swiper); 3915 swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper); 3916 if (params.cssMode) { 3917 swiper.onScroll = onScroll.bind(swiper); 3918 } 3919 swiper.onClick = onClick.bind(swiper); 3920 swiper.onLoad = onLoad.bind(swiper); 3921 events(swiper, 'on'); 3922 } 3923 function detachEvents() { 3924 const swiper = this; 3925 events(swiper, 'off'); 3926 } 3927 var events$1 = { 3928 attachEvents, 3929 detachEvents 3930 }; 3931 3932 const isGridEnabled = (swiper, params) => { 3933 return swiper.grid && params.grid && params.grid.rows > 1; 3934 }; 3935 function setBreakpoint() { 3936 const swiper = this; 3937 const { 3938 realIndex, 3939 initialized, 3940 params, 3941 el 3942 } = swiper; 3943 const breakpoints = params.breakpoints; 3944 if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; 3945 const document = getDocument(); 3946 3947 // Get breakpoint for window/container width and update parameters 3948 const breakpointsBase = params.breakpointsBase === 'window' || !params.breakpointsBase ? params.breakpointsBase : 'container'; 3949 const breakpointContainer = ['window', 'container'].includes(params.breakpointsBase) || !params.breakpointsBase ? swiper.el : document.querySelector(params.breakpointsBase);
vendor: 7,993 bytes, lines 3950-4203
3950 const breakpoint = swiper.getBreakpoint(breakpoints, breakpointsBase, breakpointContainer); 3951 if (!breakpoint || swiper.currentBreakpoint === breakpoint) return; 3952 const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined; 3953 const breakpointParams = breakpointOnlyParams || swiper.originalParams; 3954 const wasMultiRow = isGridEnabled(swiper, params); 3955 const isMultiRow = isGridEnabled(swiper, breakpointParams); 3956 const wasGrabCursor = swiper.params.grabCursor; 3957 const isGrabCursor = breakpointParams.grabCursor; 3958 const wasEnabled = params.enabled; 3959 if (wasMultiRow && !isMultiRow) { 3960 el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`); 3961 swiper.emitContainerClasses(); 3962 } else if (!wasMultiRow && isMultiRow) { 3963 el.classList.add(`${params.containerModifierClass}grid`); 3964 if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') { 3965 el.classList.add(`${params.containerModifierClass}grid-column`); 3966 } 3967 swiper.emitContainerClasses(); 3968 } 3969 if (wasGrabCursor && !isGrabCursor) { 3970 swiper.unsetGrabCursor(); 3971 } else if (!wasGrabCursor && isGrabCursor) { 3972 swiper.setGrabCursor(); 3973 } 3974 3975 // Toggle navigation, pagination, scrollbar 3976 ['navigation', 'pagination', 'scrollbar'].forEach(prop => { 3977 if (typeof breakpointParams[prop] === 'undefined') return; 3978 const wasModuleEnabled = params[prop] && params[prop].enabled; 3979 const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled; 3980 if (wasModuleEnabled && !isModuleEnabled) { 3981 swiper[prop].disable(); 3982 } 3983 if (!wasModuleEnabled && isModuleEnabled) { 3984 swiper[prop].enable(); 3985 } 3986 }); 3987 const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction; 3988 const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged); 3989 const wasLoop = params.loop; 3990 if (directionChanged && initialized) { 3991 swiper.changeDirection(); 3992 } 3993 extend(swiper.params, breakpointParams); 3994 const isEnabled = swiper.params.enabled; 3995 const hasLoop = swiper.params.loop; 3996 Object.assign(swiper, { 3997 allowTouchMove: swiper.params.allowTouchMove, 3998 allowSlideNext: swiper.params.allowSlideNext, 3999 allowSlidePrev: swiper.params.allowSlidePrev 4000 }); 4001 if (wasEnabled && !isEnabled) { 4002 swiper.disable(); 4003 } else if (!wasEnabled && isEnabled) { 4004 swiper.enable(); 4005 } 4006 swiper.currentBreakpoint = breakpoint; 4007 swiper.emit('_beforeBreakpoint', breakpointParams); 4008 if (initialized) { 4009 if (needsReLoop) { 4010 swiper.loopDestroy(); 4011 swiper.loopCreate(realIndex); 4012 swiper.updateSlides(); 4013 } else if (!wasLoop && hasLoop) { 4014 swiper.loopCreate(realIndex); 4015 swiper.updateSlides(); 4016 } else if (wasLoop && !hasLoop) { 4017 swiper.loopDestroy(); 4018 } 4019 } 4020 swiper.emit('breakpoint', breakpointParams); 4021 } 4022 4023 function getBreakpoint(breakpoints, base, containerEl) { 4024 if (base === void 0) { 4025 base = 'window'; 4026 } 4027 if (!breakpoints || base === 'container' && !containerEl) return undefined; 4028 let breakpoint = false; 4029 const window = getWindow(); 4030 const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight; 4031 const points = Object.keys(breakpoints).map(point => { 4032 if (typeof point === 'string' && point.indexOf('@') === 0) { 4033 const minRatio = parseFloat(point.substr(1)); 4034 const value = currentHeight * minRatio; 4035 return { 4036 value, 4037 point 4038 }; 4039 } 4040 return { 4041 value: point, 4042 point 4043 }; 4044 }); 4045 points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10)); 4046 for (let i = 0; i < points.length; i += 1) { 4047 const { 4048 point, 4049 value 4050 } = points[i]; 4051 if (base === 'window') { 4052 if (window.matchMedia(`(min-width: ${value}px)`).matches) { 4053 breakpoint = point; 4054 } 4055 } else if (value <= containerEl.clientWidth) { 4056 breakpoint = point; 4057 } 4058 } 4059 return breakpoint || 'max'; 4060 } 4061 4062 var breakpoints = { 4063 setBreakpoint, 4064 getBreakpoint 4065 }; 4066 4067 function prepareClasses(entries, prefix) { 4068 const resultClasses = []; 4069 entries.forEach(item => { 4070 if (typeof item === 'object') { 4071 Object.keys(item).forEach(classNames => { 4072 if (item[classNames]) { 4073 resultClasses.push(prefix + classNames); 4074 } 4075 }); 4076 } else if (typeof item === 'string') { 4077 resultClasses.push(prefix + item); 4078 } 4079 }); 4080 return resultClasses; 4081 } 4082 function addClasses() { 4083 const swiper = this; 4084 const { 4085 classNames, 4086 params, 4087 rtl, 4088 el, 4089 device 4090 } = swiper; 4091 // prettier-ignore 4092 const suffixes = prepareClasses(['initialized', params.direction, { 4093 'free-mode': swiper.params.freeMode && params.freeMode.enabled 4094 }, { 4095 'autoheight': params.autoHeight 4096 }, { 4097 'rtl': rtl 4098 }, { 4099 'grid': params.grid && params.grid.rows > 1 4100 }, { 4101 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column' 4102 }, { 4103 'android': device.android 4104 }, { 4105 'ios': device.ios 4106 }, { 4107 'css-mode': params.cssMode 4108 }, { 4109 'centered': params.cssMode && params.centeredSlides 4110 }, { 4111 'watch-progress': params.watchSlidesProgress 4112 }], params.containerModifierClass); 4113 classNames.push(...suffixes); 4114 el.classList.add(...classNames); 4115 swiper.emitContainerClasses(); 4116 } 4117 4118 function removeClasses() { 4119 const swiper = this; 4120 const { 4121 el, 4122 classNames 4123 } = swiper; 4124 if (!el || typeof el === 'string') return; 4125 el.classList.remove(...classNames); 4126 swiper.emitContainerClasses(); 4127 } 4128 4129 var classes = { 4130 addClasses, 4131 removeClasses 4132 }; 4133 4134 function checkOverflow() { 4135 const swiper = this; 4136 const { 4137 isLocked: wasLocked, 4138 params 4139 } = swiper; 4140 const { 4141 slidesOffsetBefore 4142 } = params; 4143 if (slidesOffsetBefore) { 4144 const lastSlideIndex = swiper.slides.length - 1; 4145 const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2; 4146 swiper.isLocked = swiper.size > lastSlideRightEdge; 4147 } else { 4148 swiper.isLocked = swiper.snapGrid.length === 1; 4149 } 4150 if (params.allowSlideNext === true) { 4151 swiper.allowSlideNext = !swiper.isLocked; 4152 } 4153 if (params.allowSlidePrev === true) { 4154 swiper.allowSlidePrev = !swiper.isLocked; 4155 } 4156 if (wasLocked && wasLocked !== swiper.isLocked) { 4157 swiper.isEnd = false; 4158 } 4159 if (wasLocked !== swiper.isLocked) { 4160 swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); 4161 } 4162 } 4163 var checkOverflow$1 = { 4164 checkOverflow 4165 }; 4166 4167 var defaults = { 4168 init: true, 4169 direction: 'horizontal', 4170 oneWayMovement: false, 4171 swiperElementNodeName: 'SWIPER-CONTAINER', 4172 touchEventsTarget: 'wrapper', 4173 initialSlide: 0, 4174 speed: 300, 4175 cssMode: false, 4176 updateOnWindowResize: true, 4177 resizeObserver: true, 4178 nested: false, 4179 createElements: false, 4180 eventsPrefix: 'swiper', 4181 enabled: true, 4182 focusableElements: 'input, select, option, textarea, button, video, label', 4183 // Overrides 4184 width: null, 4185 height: null, 4186 // 4187 preventInteractionOnTransition: false, 4188 // ssr 4189 userAgent: null, 4190 url: null, 4191 // To support iOS's swipe-to-go-back gesture (when being used in-app). 4192 edgeSwipeDetection: false, 4193 edgeSwipeThreshold: 20, 4194 // Autoheight 4195 autoHeight: false, 4196 // Set wrapper width 4197 setWrapperSize: false, 4198 // Virtual Translate 4199 virtualTranslate: false, 4200 // Effects 4201 effect: 'slide', 4202 // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip' 4203
vendor: 4,199 bytes, lines 4204-4347
4204 // Breakpoints 4205 breakpoints: undefined, 4206 breakpointsBase: 'window', 4207 // Slides grid 4208 spaceBetween: 0, 4209 slidesPerView: 1, 4210 slidesPerGroup: 1, 4211 slidesPerGroupSkip: 0, 4212 slidesPerGroupAuto: false, 4213 centeredSlides: false, 4214 centeredSlidesBounds: false, 4215 slidesOffsetBefore: 0, 4216 // in px 4217 slidesOffsetAfter: 0, 4218 // in px 4219 normalizeSlideIndex: true, 4220 centerInsufficientSlides: false, 4221 // Disable swiper and hide navigation when container not overflow 4222 watchOverflow: true, 4223 // Round length 4224 roundLengths: false, 4225 // Touches 4226 touchRatio: 1, 4227 touchAngle: 45, 4228 simulateTouch: true, 4229 shortSwipes: true, 4230 longSwipes: true, 4231 longSwipesRatio: 0.5, 4232 longSwipesMs: 300, 4233 followFinger: true, 4234 allowTouchMove: true, 4235 threshold: 5, 4236 touchMoveStopPropagation: false, 4237 touchStartPreventDefault: true, 4238 touchStartForcePreventDefault: false, 4239 touchReleaseOnEdges: false, 4240 // Unique Navigation Elements 4241 uniqueNavElements: true, 4242 // Resistance 4243 resistance: true, 4244 resistanceRatio: 0.85, 4245 // Progress 4246 watchSlidesProgress: false, 4247 // Cursor 4248 grabCursor: false, 4249 // Clicks 4250 preventClicks: true, 4251 preventClicksPropagation: true, 4252 slideToClickedSlide: false, 4253 // loop 4254 loop: false, 4255 loopAddBlankSlides: true, 4256 loopAdditionalSlides: 0, 4257 loopPreventsSliding: true, 4258 // rewind 4259 rewind: false, 4260 // Swiping/no swiping 4261 allowSlidePrev: true, 4262 allowSlideNext: true, 4263 swipeHandler: null, 4264 // '.swipe-handler', 4265 noSwiping: true, 4266 noSwipingClass: 'swiper-no-swiping', 4267 noSwipingSelector: null, 4268 // Passive Listeners 4269 passiveListeners: true, 4270 maxBackfaceHiddenSlides: 10, 4271 // NS 4272 containerModifierClass: 'swiper-', 4273 // NEW 4274 slideClass: 'swiper-slide', 4275 slideBlankClass: 'swiper-slide-blank', 4276 slideActiveClass: 'swiper-slide-active', 4277 slideVisibleClass: 'swiper-slide-visible', 4278 slideFullyVisibleClass: 'swiper-slide-fully-visible', 4279 slideNextClass: 'swiper-slide-next', 4280 slidePrevClass: 'swiper-slide-prev', 4281 wrapperClass: 'swiper-wrapper', 4282 lazyPreloaderClass: 'swiper-lazy-preloader', 4283 lazyPreloadPrevNext: 0, 4284 // Callbacks 4285 runCallbacksOnInit: true, 4286 // Internals 4287 _emitClasses: false 4288 }; 4289 4290 function moduleExtendParams(params, allModulesParams) { 4291 return function extendParams(obj) { 4292 if (obj === void 0) { 4293 obj = {}; 4294 } 4295 const moduleParamName = Object.keys(obj)[0]; 4296 const moduleParams = obj[moduleParamName]; 4297 if (typeof moduleParams !== 'object' || moduleParams === null) { 4298 extend(allModulesParams, obj); 4299 return; 4300 } 4301 if (params[moduleParamName] === true) { 4302 params[moduleParamName] = { 4303 enabled: true 4304 }; 4305 } 4306 if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) { 4307 params[moduleParamName].auto = true; 4308 } 4309 if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) { 4310 params[moduleParamName].auto = true; 4311 } 4312 if (!(moduleParamName in params && 'enabled' in moduleParams)) { 4313 extend(allModulesParams, obj); 4314 return; 4315 } 4316 if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) { 4317 params[moduleParamName].enabled = true; 4318 } 4319 if (!params[moduleParamName]) params[moduleParamName] = { 4320 enabled: false 4321 }; 4322 extend(allModulesParams, obj); 4323 }; 4324 } 4325 4326 /* eslint no-param-reassign: "off" */ 4327 const prototypes = { 4328 eventsEmitter, 4329 update, 4330 translate, 4331 transition, 4332 slide, 4333 loop, 4334 grabCursor, 4335 events: events$1, 4336 breakpoints, 4337 checkOverflow: checkOverflow$1, 4338 classes 4339 }; 4340 const extendedDefaults = {}; 4341 class Swiper { 4342 constructor() { 4343 let el; 4344 let params; 4345 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 4346 args[_key] = arguments[_key]; 4347 }
vendor: 7,457 bytes, lines 4348-4582
4348 if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') { 4349 params = args[0]; 4350 } else { 4351 [el, params] = args; 4352 } 4353 if (!params) params = {}; 4354 params = extend({}, params); 4355 if (el && !params.el) params.el = el; 4356 const document = getDocument(); 4357 if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) { 4358 const swipers = []; 4359 document.querySelectorAll(params.el).forEach(containerEl => { 4360 const newParams = extend({}, params, { 4361 el: containerEl 4362 }); 4363 swipers.push(new Swiper(newParams)); 4364 }); 4365 // eslint-disable-next-line no-constructor-return 4366 return swipers; 4367 } 4368 4369 // Swiper Instance 4370 const swiper = this; 4371 swiper.__swiper__ = true; 4372 swiper.support = getSupport(); 4373 swiper.device = getDevice({ 4374 userAgent: params.userAgent 4375 }); 4376 swiper.browser = getBrowser(); 4377 swiper.eventsListeners = {}; 4378 swiper.eventsAnyListeners = []; 4379 swiper.modules = [...swiper.__modules__]; 4380 if (params.modules && Array.isArray(params.modules)) { 4381 swiper.modules.push(...params.modules); 4382 } 4383 const allModulesParams = {}; 4384 swiper.modules.forEach(mod => { 4385 mod({ 4386 params, 4387 swiper, 4388 extendParams: moduleExtendParams(params, allModulesParams), 4389 on: swiper.on.bind(swiper), 4390 once: swiper.once.bind(swiper), 4391 off: swiper.off.bind(swiper), 4392 emit: swiper.emit.bind(swiper) 4393 }); 4394 }); 4395 4396 // Extend defaults with modules params 4397 const swiperParams = extend({}, defaults, allModulesParams); 4398 4399 // Extend defaults with passed params 4400 swiper.params = extend({}, swiperParams, extendedDefaults, params); 4401 swiper.originalParams = extend({}, swiper.params); 4402 swiper.passedParams = extend({}, params); 4403 4404 // add event listeners 4405 if (swiper.params && swiper.params.on) { 4406 Object.keys(swiper.params.on).forEach(eventName => { 4407 swiper.on(eventName, swiper.params.on[eventName]); 4408 }); 4409 } 4410 if (swiper.params && swiper.params.onAny) { 4411 swiper.onAny(swiper.params.onAny); 4412 } 4413 4414 // Extend Swiper 4415 Object.assign(swiper, { 4416 enabled: swiper.params.enabled, 4417 el, 4418 // Classes 4419 classNames: [], 4420 // Slides 4421 slides: [], 4422 slidesGrid: [], 4423 snapGrid: [], 4424 slidesSizesGrid: [], 4425 // isDirection 4426 isHorizontal() { 4427 return swiper.params.direction === 'horizontal'; 4428 }, 4429 isVertical() { 4430 return swiper.params.direction === 'vertical'; 4431 }, 4432 // Indexes 4433 activeIndex: 0, 4434 realIndex: 0, 4435 // 4436 isBeginning: true, 4437 isEnd: false, 4438 // Props 4439 translate: 0, 4440 previousTranslate: 0, 4441 progress: 0, 4442 velocity: 0, 4443 animating: false, 4444 cssOverflowAdjustment() { 4445 // Returns 0 unless `translate` is > 2**23 4446 // Should be subtracted from css values to prevent overflow 4447 return Math.trunc(this.translate / 2 ** 23) * 2 ** 23; 4448 }, 4449 // Locks 4450 allowSlideNext: swiper.params.allowSlideNext, 4451 allowSlidePrev: swiper.params.allowSlidePrev, 4452 // Touch Events 4453 touchEventsData: { 4454 isTouched: undefined, 4455 isMoved: undefined, 4456 allowTouchCallbacks: undefined, 4457 touchStartTime: undefined, 4458 isScrolling: undefined, 4459 currentTranslate: undefined, 4460 startTranslate: undefined, 4461 allowThresholdMove: undefined, 4462 // Form elements to match 4463 focusableElements: swiper.params.focusableElements, 4464 // Last click time 4465 lastClickTime: 0, 4466 clickTimeout: undefined, 4467 // Velocities 4468 velocities: [], 4469 allowMomentumBounce: undefined, 4470 startMoving: undefined, 4471 pointerId: null, 4472 touchId: null 4473 }, 4474 // Clicks 4475 allowClick: true, 4476 // Touches 4477 allowTouchMove: swiper.params.allowTouchMove, 4478 touches: { 4479 startX: 0, 4480 startY: 0, 4481 currentX: 0, 4482 currentY: 0, 4483 diff: 0 4484 }, 4485 // Images 4486 imagesToLoad: [], 4487 imagesLoaded: 0 4488 }); 4489 swiper.emit('_swiper'); 4490 4491 // Init 4492 if (swiper.params.init) { 4493 swiper.init(); 4494 } 4495 4496 // Return app instance 4497 // eslint-disable-next-line no-constructor-return 4498 return swiper; 4499 } 4500 getDirectionLabel(property) { 4501 if (this.isHorizontal()) { 4502 return property; 4503 } 4504 // prettier-ignore 4505 return { 4506 'width': 'height', 4507 'margin-top': 'margin-left', 4508 'margin-bottom ': 'margin-right', 4509 'margin-left': 'margin-top', 4510 'margin-right': 'margin-bottom', 4511 'padding-left': 'padding-top', 4512 'padding-right': 'padding-bottom', 4513 'marginRight': 'marginBottom' 4514 }[property]; 4515 } 4516 getSlideIndex(slideEl) { 4517 const { 4518 slidesEl, 4519 params 4520 } = this; 4521 const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`); 4522 const firstSlideIndex = elementIndex(slides[0]); 4523 return elementIndex(slideEl) - firstSlideIndex; 4524 } 4525 getSlideIndexByData(index) { 4526 return this.getSlideIndex(this.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)); 4527 } 4528 recalcSlides() { 4529 const swiper = this; 4530 const { 4531 slidesEl, 4532 params 4533 } = swiper; 4534 swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`); 4535 } 4536 enable() { 4537 const swiper = this; 4538 if (swiper.enabled) return; 4539 swiper.enabled = true; 4540 if (swiper.params.grabCursor) { 4541 swiper.setGrabCursor(); 4542 } 4543 swiper.emit('enable'); 4544 } 4545 disable() { 4546 const swiper = this; 4547 if (!swiper.enabled) return; 4548 swiper.enabled = false; 4549 if (swiper.params.grabCursor) { 4550 swiper.unsetGrabCursor(); 4551 } 4552 swiper.emit('disable'); 4553 } 4554 setProgress(progress, speed) { 4555 const swiper = this; 4556 progress = Math.min(Math.max(progress, 0), 1); 4557 const min = swiper.minTranslate(); 4558 const max = swiper.maxTranslate(); 4559 const current = (max - min) * progress + min; 4560 swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed); 4561 swiper.updateActiveIndex(); 4562 swiper.updateSlidesClasses(); 4563 } 4564 emitContainerClasses() { 4565 const swiper = this; 4566 if (!swiper.params._emitClasses || !swiper.el) return; 4567 const cls = swiper.el.className.split(' ').filter(className => { 4568 return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0; 4569 }); 4570 swiper.emit('_containerClasses', cls.join(' ')); 4571 } 4572 getSlideClasses(slideEl) { 4573 const swiper = this; 4574 if (swiper.destroyed) return ''; 4575 return slideEl.className.split(' ').filter(className => { 4576 return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0; 4577 }).join(' '); 4578 } 4579 emitSlidesClasses() { 4580 const swiper = this; 4581 if (!swiper.params._emitClasses || !swiper.el) return; 4582 const updates = [];
vendor: 4,642 bytes, lines 4583-4714
4583 swiper.slides.forEach(slideEl => { 4584 const classNames = swiper.getSlideClasses(slideEl); 4585 updates.push({ 4586 slideEl, 4587 classNames 4588 }); 4589 swiper.emit('_slideClass', slideEl, classNames); 4590 }); 4591 swiper.emit('_slideClasses', updates); 4592 } 4593 slidesPerViewDynamic(view, exact) { 4594 if (view === void 0) { 4595 view = 'current'; 4596 } 4597 if (exact === void 0) { 4598 exact = false; 4599 } 4600 const swiper = this; 4601 const { 4602 params, 4603 slides, 4604 slidesGrid, 4605 slidesSizesGrid, 4606 size: swiperSize, 4607 activeIndex 4608 } = swiper; 4609 let spv = 1; 4610 if (typeof params.slidesPerView === 'number') return params.slidesPerView; 4611 if (params.centeredSlides) { 4612 let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0; 4613 let breakLoop; 4614 for (let i = activeIndex + 1; i < slides.length; i += 1) { 4615 if (slides[i] && !breakLoop) { 4616 slideSize += Math.ceil(slides[i].swiperSlideSize); 4617 spv += 1; 4618 if (slideSize > swiperSize) breakLoop = true; 4619 } 4620 } 4621 for (let i = activeIndex - 1; i >= 0; i -= 1) { 4622 if (slides[i] && !breakLoop) { 4623 slideSize += slides[i].swiperSlideSize; 4624 spv += 1; 4625 if (slideSize > swiperSize) breakLoop = true; 4626 } 4627 } 4628 } else { 4629 // eslint-disable-next-line 4630 if (view === 'current') { 4631 for (let i = activeIndex + 1; i < slides.length; i += 1) { 4632 const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize; 4633 if (slideInView) { 4634 spv += 1; 4635 } 4636 } 4637 } else { 4638 // previous 4639 for (let i = activeIndex - 1; i >= 0; i -= 1) { 4640 const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize; 4641 if (slideInView) { 4642 spv += 1; 4643 } 4644 } 4645 } 4646 } 4647 return spv; 4648 } 4649 update() { 4650 const swiper = this; 4651 if (!swiper || swiper.destroyed) return; 4652 const { 4653 snapGrid, 4654 params 4655 } = swiper; 4656 // Breakpoints 4657 if (params.breakpoints) { 4658 swiper.setBreakpoint(); 4659 } 4660 [...swiper.el.querySelectorAll('[loading="lazy"]')].forEach(imageEl => { 4661 if (imageEl.complete) { 4662 processLazyPreloader(swiper, imageEl); 4663 } 4664 }); 4665 swiper.updateSize(); 4666 swiper.updateSlides(); 4667 swiper.updateProgress(); 4668 swiper.updateSlidesClasses(); 4669 function setTranslate() { 4670 const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate; 4671 const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate()); 4672 swiper.setTranslate(newTranslate); 4673 swiper.updateActiveIndex(); 4674 swiper.updateSlidesClasses(); 4675 } 4676 let translated; 4677 if (params.freeMode && params.freeMode.enabled && !params.cssMode) { 4678 setTranslate(); 4679 if (params.autoHeight) { 4680 swiper.updateAutoHeight(); 4681 } 4682 } else { 4683 if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) { 4684 const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides; 4685 translated = swiper.slideTo(slides.length - 1, 0, false, true); 4686 } else { 4687 translated = swiper.slideTo(swiper.activeIndex, 0, false, true); 4688 } 4689 if (!translated) { 4690 setTranslate(); 4691 } 4692 } 4693 if (params.watchOverflow && snapGrid !== swiper.snapGrid) { 4694 swiper.checkOverflow(); 4695 } 4696 swiper.emit('update'); 4697 } 4698 changeDirection(newDirection, needUpdate) { 4699 if (needUpdate === void 0) { 4700 needUpdate = true; 4701 } 4702 const swiper = this; 4703 const currentDirection = swiper.params.direction; 4704 if (!newDirection) { 4705 // eslint-disable-next-line 4706 newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal'; 4707 } 4708 if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') { 4709 return swiper; 4710 } 4711 swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`); 4712 swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`); 4713 swiper.emitContainerClasses(); 4714 swiper.params.direction = newDirection;
vendor: 2,091 bytes, lines 4715-4772
4715 swiper.slides.forEach(slideEl => { 4716 if (newDirection === 'vertical') { 4717 slideEl.style.width = ''; 4718 } else { 4719 slideEl.style.height = ''; 4720 } 4721 }); 4722 swiper.emit('changeDirection'); 4723 if (needUpdate) swiper.update(); 4724 return swiper; 4725 } 4726 changeLanguageDirection(direction) { 4727 const swiper = this; 4728 if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return; 4729 swiper.rtl = direction === 'rtl'; 4730 swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl; 4731 if (swiper.rtl) { 4732 swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`); 4733 swiper.el.dir = 'rtl'; 4734 } else { 4735 swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`); 4736 swiper.el.dir = 'ltr'; 4737 } 4738 swiper.update(); 4739 } 4740 mount(element) { 4741 const swiper = this; 4742 if (swiper.mounted) return true; 4743 4744 // Find el 4745 let el = element || swiper.params.el; 4746 if (typeof el === 'string') { 4747 el = document.querySelector(el); 4748 } 4749 if (!el) { 4750 return false; 4751 } 4752 el.swiper = swiper; 4753 if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) { 4754 swiper.isElement = true; 4755 } 4756 const getWrapperSelector = () => { 4757 return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`; 4758 }; 4759 const getWrapper = () => { 4760 if (el && el.shadowRoot && el.shadowRoot.querySelector) { 4761 const res = el.shadowRoot.querySelector(getWrapperSelector()); 4762 // Children needs to return slot items 4763 return res; 4764 } 4765 return elementChildren(el, getWrapperSelector())[0]; 4766 }; 4767 // Find Wrapper 4768 let wrapperEl = getWrapper(); 4769 if (!wrapperEl && swiper.params.createElements) { 4770 wrapperEl = createElement('div', swiper.params.wrapperClass); 4771 el.append(wrapperEl); 4772 elementChildren(el, `.${swiper.params.slideClass}
4772`).forEach(slideEl => { 4773 wrapperEl.append(slideEl); 4774 }); 4775 } 4776 Object.assign(swiper, { 4777 el, 4778 wrapperEl, 4779 slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl, 4780 hostEl: swiper.isElement ? el.parentNode.host : el, 4781 mounted: true, 4782 // RTL 4783 rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl', 4784 rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'), 4785 wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box' 4786 }); 4787 return true; 4788 } 4789 init(el) { 4790 const swiper = this; 4791 if (swiper.initialized) return swiper; 4792 const mounted = swiper.mount(el); 4793 if (mounted === false) return swiper; 4794 swiper.emit('beforeInit'); 4795 4796 // Set breakpoint 4797 if (swiper.params.breakpoints) { 4798 swiper.setBreakpoint(); 4799 } 4800 4801 // Add Classes 4802 swiper.addClasses(); 4803 4804 // Update size 4805 swiper.updateSize(); 4806 4807 // Update slides 4808 swiper.updateSlides(); 4809 if (swiper.params.watchOverflow) { 4810 swiper.checkOverflow(); 4811 } 4812 4813 // Set Grab Cursor 4814 if (swiper.params.grabCursor && swiper.enabled) { 4815 swiper.setGrabCursor(); 4816 } 4817 4818 // Slide To Initial Slide 4819 if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) { 4820 swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true); 4821 } else { 4822 swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true); 4823 } 4824 4825 // Create loop 4826 if (swiper.params.loop) { 4827 swiper.loopCreate(); 4828 } 4829 4830 // Attach events 4831 swiper.attachEvents(); 4832 const lazyElements = [...swiper.el.querySelectorAll('[loading="lazy"]')]; 4833 if (swiper.isElement) { 4834 lazyElements.push(...swiper.hostEl.querySelectorAll('[loading="lazy"]')); 4835 } 4836 lazyElements.forEach(imageEl => { 4837 if (imageEl.complete) { 4838 processLazyPreloader(swiper, imageEl); 4839 } else { 4840 imageEl.addEventListener('load', e => { 4841 processLazyPreloader(swiper, e.target); 4842 }); 4843 } 4844 }); 4845 preload(swiper); 4846 4847 // Init Flag 4848 swiper.initialized = true; 4849 preload(swiper); 4850 4851 // Emit 4852 swiper.emit('init'); 4853 swiper.emit('afterInit'); 4854 return swiper; 4855 } 4856 destroy(deleteInstance, cleanStyles) { 4857 if (deleteInstance === void 0) { 4858 deleteInstance = true; 4859 } 4860 if (cleanStyles === void 0) { 4861 cleanStyles = true; 4862 } 4863 const swiper = this; 4864 const { 4865 params, 4866 el, 4867 wrapperEl, 4868 slides 4869 } = swiper; 4870 if (typeof swiper.params === 'undefined' || swiper.destroyed) { 4871 return null; 4872 } 4873 swiper.emit('beforeDestroy'); 4874 4875 // Init Flag 4876 swiper.initialized = false; 4877 4878 // Detach events 4879 swiper.detachEvents(); 4880 4881 // Destroy loop 4882 if (params.loop) { 4883 swiper.loopDestroy(); 4884 } 4885 4886 // Cleanup styles 4887 if (cleanStyles) { 4888 swiper.removeClasses(); 4889 if (el && typeof el !== 'string') { 4890 el.removeAttribute('style'); 4891 } 4892 if (wrapperEl) { 4893 wrapperEl.removeAttribute('style'); 4894 } 4895 if (slides && slides.length) {
vendor: 2,000 bytes, lines 4896-4963
4896 slides.forEach(slideEl => { 4897 slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass); 4898 slideEl.removeAttribute('style'); 4899 slideEl.removeAttribute('data-swiper-slide-index'); 4900 }); 4901 } 4902 } 4903 swiper.emit('destroy'); 4904 4905 // Detach emitter events 4906 Object.keys(swiper.eventsListeners).forEach(eventName => { 4907 swiper.off(eventName); 4908 }); 4909 if (deleteInstance !== false) { 4910 if (swiper.el && typeof swiper.el !== 'string') { 4911 swiper.el.swiper = null; 4912 } 4913 deleteProps(swiper); 4914 } 4915 swiper.destroyed = true; 4916 return null; 4917 } 4918 static extendDefaults(newDefaults) { 4919 extend(extendedDefaults, newDefaults); 4920 } 4921 static get extendedDefaults() { 4922 return extendedDefaults; 4923 } 4924 static get defaults() { 4925 return defaults; 4926 } 4927 static installModule(mod) { 4928 if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = []; 4929 const modules = Swiper.prototype.__modules__; 4930 if (typeof mod === 'function' && modules.indexOf(mod) < 0) { 4931 modules.push(mod); 4932 } 4933 } 4934 static use(module) { 4935 if (Array.isArray(module)) { 4936 module.forEach(m => Swiper.installModule(m)); 4937 return Swiper; 4938 } 4939 Swiper.installModule(module); 4940 return Swiper; 4941 } 4942 } 4943 Object.keys(prototypes).forEach(prototypeGroup => { 4944 Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => { 4945 Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod]; 4946 }); 4947 }); 4948 Swiper.use([Resize, Observer]); 4949 4950 /* eslint-disable consistent-return */ 4951 function Mousewheel(_ref) { 4952 let { 4953 swiper, 4954 extendParams, 4955 on, 4956 emit 4957 } = _ref; 4958 const window = getWindow(); 4959 extendParams({ 4960 mousewheel: { 4961 enabled: false, 4962 releaseOnEdges: false, 4963 invert: false,
vendor: 19,867 bytes, lines 4964-5477
4964 forceToAxis: false, 4965 sensitivity: 1, 4966 eventsTarget: 'container', 4967 thresholdDelta: null, 4968 thresholdTime: null, 4969 noMousewheelClass: 'swiper-no-mousewheel' 4970 } 4971 }); 4972 swiper.mousewheel = { 4973 enabled: false 4974 }; 4975 let timeout; 4976 let lastScrollTime = now(); 4977 let lastEventBeforeSnap; 4978 const recentWheelEvents = []; 4979 function normalize(e) { 4980 // Reasonable defaults 4981 const PIXEL_STEP = 10; 4982 const LINE_HEIGHT = 40; 4983 const PAGE_HEIGHT = 800; 4984 let sX = 0; 4985 let sY = 0; // spinX, spinY 4986 let pX = 0; 4987 let pY = 0; // pixelX, pixelY 4988 4989 // Legacy 4990 if ('detail' in e) { 4991 sY = e.detail; 4992 } 4993 if ('wheelDelta' in e) { 4994 sY = -e.wheelDelta / 120; 4995 } 4996 if ('wheelDeltaY' in e) { 4997 sY = -e.wheelDeltaY / 120; 4998 } 4999 if ('wheelDeltaX' in e) { 5000 sX = -e.wheelDeltaX / 120; 5001 } 5002 5003 // side scrolling on FF with DOMMouseScroll 5004 if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) { 5005 sX = sY; 5006 sY = 0; 5007 } 5008 pX = sX * PIXEL_STEP; 5009 pY = sY * PIXEL_STEP; 5010 if ('deltaY' in e) { 5011 pY = e.deltaY; 5012 } 5013 if ('deltaX' in e) { 5014 pX = e.deltaX; 5015 } 5016 if (e.shiftKey && !pX) { 5017 // if user scrolls with shift he wants horizontal scroll 5018 pX = pY; 5019 pY = 0; 5020 } 5021 if ((pX || pY) && e.deltaMode) { 5022 if (e.deltaMode === 1) { 5023 // delta in LINE units 5024 pX *= LINE_HEIGHT; 5025 pY *= LINE_HEIGHT; 5026 } else { 5027 // delta in PAGE units 5028 pX *= PAGE_HEIGHT; 5029 pY *= PAGE_HEIGHT; 5030 } 5031 } 5032 5033 // Fall-back if spin cannot be determined 5034 if (pX && !sX) { 5035 sX = pX < 1 ? -1 : 1; 5036 } 5037 if (pY && !sY) { 5038 sY = pY < 1 ? -1 : 1; 5039 } 5040 return { 5041 spinX: sX, 5042 spinY: sY, 5043 pixelX: pX, 5044 pixelY: pY 5045 }; 5046 } 5047 function handleMouseEnter() { 5048 if (!swiper.enabled) return; 5049 swiper.mouseEntered = true; 5050 } 5051 function handleMouseLeave() { 5052 if (!swiper.enabled) return; 5053 swiper.mouseEntered = false; 5054 } 5055 function animateSlider(newEvent) { 5056 if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) { 5057 // Prevent if delta of wheel scroll delta is below configured threshold 5058 return false; 5059 } 5060 if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) { 5061 // Prevent if time between scrolls is below configured threshold 5062 return false; 5063 } 5064 5065 // If the movement is NOT big enough and 5066 // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider): 5067 // Don't go any further (avoid insignificant scroll movement). 5068 if (newEvent.delta >= 6 && now() - lastScrollTime < 60) { 5069 // Return false as a default 5070 return true; 5071 } 5072 // If user is scrolling towards the end: 5073 // If the slider hasn't hit the latest slide or 5074 // if the slider is a loop and 5075 // if the slider isn't moving right now: 5076 // Go to next slide and 5077 // emit a scroll event. 5078 // Else (the user is scrolling towards the beginning) and 5079 // if the slider hasn't hit the first slide or 5080 // if the slider is a loop and 5081 // if the slider isn't moving right now: 5082 // Go to prev slide and 5083 // emit a scroll event. 5084 if (newEvent.direction < 0) { 5085 if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) { 5086 swiper.slideNext(); 5087 emit('scroll', newEvent.raw); 5088 } 5089 } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) { 5090 swiper.slidePrev(); 5091 emit('scroll', newEvent.raw); 5092 } 5093 // If you got here is because an animation has been triggered so store the current time 5094 lastScrollTime = new window.Date().getTime(); 5095 // Return false as a default 5096 return false; 5097 } 5098 function releaseScroll(newEvent) { 5099 const params = swiper.params.mousewheel; 5100 if (newEvent.direction < 0) { 5101 if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) { 5102 // Return true to animate scroll on edges 5103 return true; 5104 } 5105 } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) { 5106 // Return true to animate scroll on edges 5107 return true; 5108 } 5109 return false; 5110 } 5111 function handle(event) { 5112 let e = event; 5113 let disableParentSwiper = true; 5114 if (!swiper.enabled) return; 5115 5116 // Ignore event if the target or its parents have the swiper-no-mousewheel class 5117 if (event.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return; 5118 const params = swiper.params.mousewheel; 5119 if (swiper.params.cssMode) { 5120 e.preventDefault(); 5121 } 5122 let targetEl = swiper.el; 5123 if (swiper.params.mousewheel.eventsTarget !== 'container') { 5124 targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget); 5125 } 5126 const targetElContainsTarget = targetEl && targetEl.contains(e.target); 5127 if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true; 5128 if (e.originalEvent) e = e.originalEvent; // jquery fix 5129 let delta = 0; 5130 const rtlFactor = swiper.rtlTranslate ? -1 : 1; 5131 const data = normalize(e); 5132 if (params.forceToAxis) { 5133 if (swiper.isHorizontal()) { 5134 if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true; 5135 } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true; 5136 } else { 5137 delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY; 5138 } 5139 if (delta === 0) return true; 5140 if (params.invert) delta = -delta; 5141 5142 // Get the scroll positions 5143 let positions = swiper.getTranslate() + delta * params.sensitivity; 5144 if (positions >= swiper.minTranslate()) positions = swiper.minTranslate(); 5145 if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate(); 5146 5147 // When loop is true: 5148 // the disableParentSwiper will be true. 5149 // When loop is false: 5150 // if the scroll positions is not on edge, 5151 // then the disableParentSwiper will be true. 5152 // if the scroll on edge positions, 5153 // then the disableParentSwiper will be false. 5154 disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate()); 5155 if (disableParentSwiper && swiper.params.nested) e.stopPropagation(); 5156 if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) { 5157 // Register the new event in a variable which stores the relevant data 5158 const newEvent = { 5159 time: now(), 5160 delta: Math.abs(delta), 5161 direction: Math.sign(delta), 5162 raw: event 5163 }; 5164 5165 // Keep the most recent events 5166 if (recentWheelEvents.length >= 2) { 5167 recentWheelEvents.shift(); // only store the last N events 5168 } 5169 5170 const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined; 5171 recentWheelEvents.push(newEvent); 5172 5173 // If there is at least one previous recorded event: 5174 // If direction has changed or 5175 // if the scroll is quicker than the previous one: 5176 // Animate the slider. 5177 // Else (this is the first time the wheel is moved): 5178 // Animate the slider. 5179 if (prevEvent) { 5180 if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) { 5181 animateSlider(newEvent); 5182 } 5183 } else { 5184 animateSlider(newEvent); 5185 } 5186 5187 // If it's time to release the scroll: 5188 // Return now so you don't hit the preventDefault. 5189 if (releaseScroll(newEvent)) { 5190 return true; 5191 } 5192 } else { 5193 // Freemode or scrollContainer: 5194 5195 // If we recently snapped after a momentum scroll, then ignore wheel events 5196 // to give time for the deceleration to finish. Stop ignoring after 500 msecs 5197 // or if it's a new scroll (larger delta or inverse sign as last event before 5198 // an end-of-momentum snap). 5199 const newEvent = { 5200 time: now(), 5201 delta: Math.abs(delta), 5202 direction: Math.sign(delta) 5203 }; 5204 const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction; 5205 if (!ignoreWheelEvents) { 5206 lastEventBeforeSnap = undefined; 5207 let position = swiper.getTranslate() + delta * params.sensitivity; 5208 const wasBeginning = swiper.isBeginning; 5209 const wasEnd = swiper.isEnd; 5210 if (position >= swiper.minTranslate()) position = swiper.minTranslate(); 5211 if (position <= swiper.maxTranslate()) position = swiper.maxTranslate(); 5212 swiper.setTransition(0); 5213 swiper.setTranslate(position); 5214 swiper.updateProgress(); 5215 swiper.updateActiveIndex(); 5216 swiper.updateSlidesClasses(); 5217 if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) { 5218 swiper.updateSlidesClasses(); 5219 } 5220 if (swiper.params.loop) { 5221 swiper.loopFix({ 5222 direction: newEvent.direction < 0 ? 'next' : 'prev', 5223 byMousewheel: true 5224 }); 5225 } 5226 if (swiper.params.freeMode.sticky) { 5227 // When wheel scrolling starts with sticky (aka snap) enabled, then detect 5228 // the end of a momentum scroll by storing recent (N=15?) wheel events. 5229 // 1. do all N events have decreasing or same (absolute value) delta? 5230 // 2. did all N events arrive in the last M (M=500?) msecs? 5231 // 3. does the earliest event have an (absolute value) delta that's 5232 // at least P (P=1?) larger than the most recent event's delta? 5233 // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels? 5234 // If 1-4 are "yes" then we're near the end of a momentum scroll deceleration. 5235 // Snap immediately and ignore remaining wheel events in this scroll. 5236 // See comment above for "remaining wheel events in this scroll" determination. 5237 // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event. 5238 clearTimeout(timeout); 5239 timeout = undefined; 5240 if (recentWheelEvents.length >= 15) { 5241 recentWheelEvents.shift(); // only store the last N events 5242 } 5243 5244 const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined; 5245 const firstEvent = recentWheelEvents[0]; 5246 recentWheelEvents.push(newEvent); 5247 if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) { 5248 // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log. 5249 recentWheelEvents.splice(0); 5250 } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) { 5251 // We're at the end of the deceleration of a momentum scroll, so there's no need 5252 // to wait for more events. Snap ASAP on the next tick. 5253 // Also, because there's some remaining momentum we'll bias the snap in the 5254 // direction of the ongoing scroll because it's better UX for the scroll to snap 5255 // in the same direction as the scroll instead of reversing to snap. Therefore, 5256 // if it's already scrolled more than 20% in the current direction, keep going. 5257 const snapToThreshold = delta > 0 ? 0.8 : 0.2; 5258 lastEventBeforeSnap = newEvent; 5259 recentWheelEvents.splice(0); 5260 timeout = nextTick(() => { 5261 if (swiper.destroyed || !swiper.params) return; 5262 swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); 5263 }, 0); // no delay; move on next tick 5264 } 5265 5266 if (!timeout) { 5267 // if we get here, then we haven't detected the end of a momentum scroll, so 5268 // we'll consider a scroll "complete" when there haven't been any wheel events 5269 // for 500ms. 5270 timeout = nextTick(() => { 5271 if (swiper.destroyed || !swiper.params) return; 5272 const snapToThreshold = 0.5; 5273 lastEventBeforeSnap = newEvent; 5274 recentWheelEvents.splice(0); 5275 swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); 5276 }, 500); 5277 } 5278 } 5279 5280 // Emit event 5281 if (!ignoreWheelEvents) emit('scroll', e); 5282 5283 // Stop autoplay 5284 if (swiper.params.autoplay && swiper.params.autoplay.disableOnInteraction) swiper.autoplay.stop(); 5285 // Return page scroll on edge positions 5286 if (params.releaseOnEdges && (position === swiper.minTranslate() || position === swiper.maxTranslate())) { 5287 return true; 5288 } 5289 } 5290 } 5291 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 5292 return false; 5293 } 5294 function events(method) { 5295 let targetEl = swiper.el; 5296 if (swiper.params.mousewheel.eventsTarget !== 'container') { 5297 targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget); 5298 } 5299 targetEl[method]('mouseenter', handleMouseEnter); 5300 targetEl[method]('mouseleave', handleMouseLeave); 5301 targetEl[method]('wheel', handle); 5302 } 5303 function enable() { 5304 if (swiper.params.cssMode) { 5305 swiper.wrapperEl.removeEventListener('wheel', handle); 5306 return true; 5307 } 5308 if (swiper.mousewheel.enabled) return false; 5309 events('addEventListener'); 5310 swiper.mousewheel.enabled = true; 5311 return true; 5312 } 5313 function disable() { 5314 if (swiper.params.cssMode) { 5315 swiper.wrapperEl.addEventListener(event, handle); 5316 return true; 5317 } 5318 if (!swiper.mousewheel.enabled) return false; 5319 events('removeEventListener'); 5320 swiper.mousewheel.enabled = false; 5321 return true; 5322 } 5323 on('init', () => { 5324 if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) { 5325 disable(); 5326 } 5327 if (swiper.params.mousewheel.enabled) enable(); 5328 }); 5329 on('destroy', () => { 5330 if (swiper.params.cssMode) { 5331 enable(); 5332 } 5333 if (swiper.mousewheel.enabled) disable(); 5334 }); 5335 Object.assign(swiper.mousewheel, { 5336 enable, 5337 disable 5338 }); 5339 } 5340 5341 /* eslint no-underscore-dangle: "off" */ 5342 /* eslint no-use-before-define: "off" */ 5343 function Autoplay(_ref) { 5344 let { 5345 swiper, 5346 extendParams, 5347 on, 5348 emit, 5349 params 5350 } = _ref; 5351 swiper.autoplay = { 5352 running: false, 5353 paused: false, 5354 timeLeft: 0 5355 }; 5356 extendParams({ 5357 autoplay: { 5358 enabled: false, 5359 delay: 3000, 5360 waitForTransition: true, 5361 disableOnInteraction: false, 5362 stopOnLastSlide: false, 5363 reverseDirection: false, 5364 pauseOnMouseEnter: false 5365 } 5366 }); 5367 let timeout; 5368 let raf; 5369 let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000; 5370 let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000; 5371 let autoplayTimeLeft; 5372 let autoplayStartTime = new Date().getTime(); 5373 let wasPaused; 5374 let isTouched; 5375 let pausedByTouch; 5376 let touchStartTimeout; 5377 let slideChanged; 5378 let pausedByInteraction; 5379 let pausedByPointerEnter; 5380 function onTransitionEnd(e) { 5381 if (!swiper || swiper.destroyed || !swiper.wrapperEl) return; 5382 if (e.target !== swiper.wrapperEl) return; 5383 swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd); 5384 if (pausedByPointerEnter || e.detail && e.detail.bySwiperTouchMove) { 5385 return; 5386 } 5387 resume(); 5388 } 5389 const calcTimeLeft = () => { 5390 if (swiper.destroyed || !swiper.autoplay.running) return; 5391 if (swiper.autoplay.paused) { 5392 wasPaused = true; 5393 } else if (wasPaused) { 5394 autoplayDelayCurrent = autoplayTimeLeft; 5395 wasPaused = false; 5396 } 5397 const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime(); 5398 swiper.autoplay.timeLeft = timeLeft; 5399 emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal); 5400 raf = requestAnimationFrame(() => { 5401 calcTimeLeft(); 5402 }); 5403 }; 5404 const getSlideDelay = () => { 5405 let activeSlideEl; 5406 if (swiper.virtual && swiper.params.virtual.enabled) { 5407 activeSlideEl = swiper.slides.find(slideEl => slideEl.classList.contains('swiper-slide-active')); 5408 } else { 5409 activeSlideEl = swiper.slides[swiper.activeIndex]; 5410 } 5411 if (!activeSlideEl) return undefined; 5412 const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10); 5413 return currentSlideDelay; 5414 }; 5415 const run = delayForce => { 5416 if (swiper.destroyed || !swiper.autoplay.running) return; 5417 cancelAnimationFrame(raf); 5418 calcTimeLeft(); 5419 let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce; 5420 autoplayDelayTotal = swiper.params.autoplay.delay; 5421 autoplayDelayCurrent = swiper.params.autoplay.delay; 5422 const currentSlideDelay = getSlideDelay(); 5423 if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === 'undefined') { 5424 delay = currentSlideDelay; 5425 autoplayDelayTotal = currentSlideDelay; 5426 autoplayDelayCurrent = currentSlideDelay; 5427 } 5428 autoplayTimeLeft = delay; 5429 const speed = swiper.params.speed; 5430 const proceed = () => { 5431 if (!swiper || swiper.destroyed) return; 5432 if (swiper.params.autoplay.reverseDirection) { 5433 if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) { 5434 swiper.slidePrev(speed, true, true); 5435 emit('autoplay'); 5436 } else if (!swiper.params.autoplay.stopOnLastSlide) { 5437 swiper.slideTo(swiper.slides.length - 1, speed, true, true); 5438 emit('autoplay'); 5439 } 5440 } else { 5441 if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) { 5442 swiper.slideNext(speed, true, true); 5443 emit('autoplay'); 5444 } else if (!swiper.params.autoplay.stopOnLastSlide) { 5445 swiper.slideTo(0, speed, true, true); 5446 emit('autoplay'); 5447 } 5448 } 5449 if (swiper.params.cssMode) { 5450 autoplayStartTime = new Date().getTime(); 5451 requestAnimationFrame(() => { 5452 run(); 5453 }); 5454 } 5455 }; 5456 if (delay > 0) { 5457 clearTimeout(timeout); 5458 timeout = setTimeout(() => { 5459 proceed(); 5460 }, delay); 5461 } else { 5462 requestAnimationFrame(() => { 5463 proceed(); 5464 }); 5465 } 5466 5467 // eslint-disable-next-line 5468 return delay; 5469 }; 5470 const start = () => { 5471 autoplayStartTime = new Date().getTime(); 5472 swiper.autoplay.running = true; 5473 run(); 5474 emit('autoplayStart'); 5475 }; 5476 const stop = () => { 5477 swiper.autoplay.running = false;
vendor: 4,203 bytes, lines 5478-5609
5478 clearTimeout(timeout); 5479 cancelAnimationFrame(raf); 5480 emit('autoplayStop'); 5481 }; 5482 const pause = (internal, reset) => { 5483 if (swiper.destroyed || !swiper.autoplay.running) return; 5484 clearTimeout(timeout); 5485 if (!internal) { 5486 pausedByInteraction = true; 5487 } 5488 const proceed = () => { 5489 emit('autoplayPause'); 5490 if (swiper.params.autoplay.waitForTransition) { 5491 swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd); 5492 } else { 5493 resume(); 5494 } 5495 }; 5496 swiper.autoplay.paused = true; 5497 if (reset) { 5498 if (slideChanged) { 5499 autoplayTimeLeft = swiper.params.autoplay.delay; 5500 } 5501 slideChanged = false; 5502 proceed(); 5503 return; 5504 } 5505 const delay = autoplayTimeLeft || swiper.params.autoplay.delay; 5506 autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime); 5507 if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return; 5508 if (autoplayTimeLeft < 0) autoplayTimeLeft = 0; 5509 proceed(); 5510 }; 5511 const resume = () => { 5512 if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return; 5513 autoplayStartTime = new Date().getTime(); 5514 if (pausedByInteraction) { 5515 pausedByInteraction = false; 5516 run(autoplayTimeLeft); 5517 } else { 5518 run(); 5519 } 5520 swiper.autoplay.paused = false; 5521 emit('autoplayResume'); 5522 }; 5523 const onVisibilityChange = () => { 5524 if (swiper.destroyed || !swiper.autoplay.running) return; 5525 const document = getDocument(); 5526 if (document.visibilityState === 'hidden') { 5527 pausedByInteraction = true; 5528 pause(true); 5529 } 5530 if (document.visibilityState === 'visible') { 5531 resume(); 5532 } 5533 }; 5534 const onPointerEnter = e => { 5535 if (e.pointerType !== 'mouse') return; 5536 pausedByInteraction = true; 5537 pausedByPointerEnter = true; 5538 if (swiper.animating || swiper.autoplay.paused) return; 5539 pause(true); 5540 }; 5541 const onPointerLeave = e => { 5542 if (e.pointerType !== 'mouse') return; 5543 pausedByPointerEnter = false; 5544 if (swiper.autoplay.paused) { 5545 resume(); 5546 } 5547 }; 5548 const attachMouseEvents = () => { 5549 if (swiper.params.autoplay.pauseOnMouseEnter) { 5550 swiper.el.addEventListener('pointerenter', onPointerEnter); 5551 swiper.el.addEventListener('pointerleave', onPointerLeave); 5552 } 5553 }; 5554 const detachMouseEvents = () => { 5555 if (swiper.el && typeof swiper.el !== 'string') { 5556 swiper.el.removeEventListener('pointerenter', onPointerEnter); 5557 swiper.el.removeEventListener('pointerleave', onPointerLeave); 5558 } 5559 }; 5560 const attachDocumentEvents = () => { 5561 const document = getDocument(); 5562 document.addEventListener('visibilitychange', onVisibilityChange); 5563 }; 5564 const detachDocumentEvents = () => { 5565 const document = getDocument(); 5566 document.removeEventListener('visibilitychange', onVisibilityChange); 5567 }; 5568 on('init', () => { 5569 if (swiper.params.autoplay.enabled) { 5570 attachMouseEvents(); 5571 attachDocumentEvents(); 5572 start(); 5573 } 5574 }); 5575 on('destroy', () => { 5576 detachMouseEvents(); 5577 detachDocumentEvents(); 5578 if (swiper.autoplay.running) { 5579 stop(); 5580 } 5581 }); 5582 on('_freeModeStaticRelease', () => { 5583 if (pausedByTouch || pausedByInteraction) { 5584 resume(); 5585 } 5586 }); 5587 on('_freeModeNoMomentumRelease', () => { 5588 if (!swiper.params.autoplay.disableOnInteraction) { 5589 pause(true, true); 5590 } else { 5591 stop(); 5592 } 5593 }); 5594 on('beforeTransitionStart', (_s, speed, internal) => { 5595 if (swiper.destroyed || !swiper.autoplay.running) return; 5596 if (internal || !swiper.params.autoplay.disableOnInteraction) { 5597 pause(true, true); 5598 } else { 5599 stop(); 5600 } 5601 }); 5602 on('sliderFirstMove', () => { 5603 if (swiper.destroyed || !swiper.autoplay.running) return; 5604 if (swiper.params.autoplay.disableOnInteraction) { 5605 stop(); 5606 return; 5607 } 5608 isTouched = true; 5609 pausedByTouch = false;
5610 pausedByInteraction = false; 5611 touchStartTimeout = setTimeout(() => { 5612 pausedByInteraction = true; 5613 pausedByTouch = true; 5614 pause(true); 5615 }, 200); 5616 }); 5617 on('touchEnd', () => { 5618 if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return; 5619 clearTimeout(touchStartTimeout); 5620 clearTimeout(timeout); 5621 if (swiper.params.autoplay.disableOnInteraction) { 5622 pausedByTouch = false; 5623 isTouched = false; 5624 return; 5625 } 5626 if (pausedByTouch && swiper.params.cssMode) resume(); 5627 pausedByTouch = false; 5628 isTouched = false; 5629 }); 5630 on('slideChange', () => { 5631 if (swiper.destroyed || !swiper.autoplay.running) return; 5632 slideChanged = true; 5633 }); 5634 Object.assign(swiper.autoplay, { 5635 start, 5636 stop, 5637 pause, 5638 resume 5639 }); 5640 } 5641 5642 var initSliders = function initSliders() { 5643 var sliders = document.querySelectorAll('.swiper'); 5644 sliders.forEach(function (slider) { 5645 if ('ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0) { 5646 slider.closest('.slider, .team').classList.add('slider--free'); 5647 } else { 5648 new Swiper(slider, { 5649 modules: [Mousewheel], 5650 loop: false, 5651 grabCursor: true, 5652 slidesPerView: 'auto', 5653 mousewheel: { 5654 forceToAxis: true 5655 } 5656 }); 5657 } 5658 }); 5659 }; 5660 5661 var initHeader = function initHeader() { 5662 var el = document.querySelector('header'); 5663 var observer = new IntersectionObserver(function (_ref) { 5664 var _ref2 = _slicedToArray(_ref, 1), 5665 e = _ref2[0]; 5666 e.target.classList.toggle('header--stuck', e.intersectionRatio < 1); 5667 }, {
5668 threshold: [1], 5669 rootMargin: '0% 0% 0% 0%' 5670 }); 5671 observer.observe(el); 5672 var hamburger = document.querySelector('#hamburger'); 5673 hamburger.addEventListener('change', function (e) { 5674 document.body.classList.toggle('body-menu--open', e.currentTarget.checked); 5675 }); 5676 var navigationLinks = document.querySelectorAll('.nav-title'); 5677 navigationLinks.forEach(function (link) { 5678 link.addEventListener('click', function () { 5679 link.classList.toggle('dropdown--open'); 5680 }); 5681 }); 5682 }; 5683 5684 var initModals = function initModals() { 5685 var modals = document.querySelectorAll('.modal'); 5686 modals.forEach(function (modal) { 5687 var id = modal.id; 5688 var openLinks = document.querySelectorAll('a[href="#' + id + '"]'); 5689 openLinks.forEach(function (openLink) { 5690 openLink.addEventListener('click', function (e) { 5691 e.preventDefault(); 5692 var openModal = document.querySelector('.modal--open'); 5693 if (openModal) { 5694 _toggleModal(openModal, false); 5695 } else { 5696 setTimeout(function () { 5697 _toggleModal(modal); 5698 }, 10); 5699 } 5700 }); 5701 }); 5702 var closeButtons = modal.querySelectorAll('a[href="#close"]'); 5703 closeButtons.forEach(function (closeButton) { 5704 closeButton.addEventListener('click', function (e) { 5705 e.preventDefault(); 5706 _toggleModal(modal, false); 5707 }); 5708 }); 5709 }); 5710 }; 5711 var _toggleModal = function toggleModal(modal) { 5712 var show = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; 5713 var _handleClose = function handleClose(e) { 5714 e.preventDefault(); 5715 _toggleModal(modal, false); 5716 // Unregister the event listeners to prevent multiple bindings & restore the booking 5717 var allCloseButtons = _toConsumableArray(document.querySelectorAll('.cta_call')); 5718 allCloseButtons.forEach(function (btn) { 5719 return btn.removeEventListener('click', _handleClose); 5720 }); 5721 }; 5722 if (show === true) { 5723 // Register close event listener for call 5724 var closeButtons = _toConsumableArray(document.querySelectorAll('.cta_call')); 5725 closeButtons.forEach(function (closeButton) { 5726 closeButton.addEventListener('click', _handleClose); 5727 }); 5728 } 5729 var state1 = show ? 'ready' : 'open'; 5730 var state2 = !show ? 'ready' : 'open'; 5731 document.body.classList.toggle('body-modal--' + state1, show); 5732 modal.classList.toggle('modal--' + state1, show); 5733 setTimeout(function () { 5734 modal.classList.toggle('modal--' + state2, show); 5735 document.body.classList.toggle('body-modal--' + state2, show); 5736 if (show) { 5737 var input = modal.querySelector('input:not([type="hidden"]), textarea, select'); 5738 setTimeout(function () { 5739 input.focus(); 5740 }, 200); 5741 } 5742 }, show ? 100 : 350); 5743 }; 5744 5745 // Vendored list of free/personal email providers, sourced from 5746 // https://github.com/Kikobeats/free-email-domains (domains.json). 5747 // Kept in-repo so no extra rollup plugin/dependency is needed to import it. 5748 // Refresh from upstream as needed. 5749 var freeEmailDomains = ["0-mail.com", "0-mailer.dynv6.net", "000-webmail.myhome-server.de", "000000000000000.theworkpc.com", "000000000000000000.dynv6.net", "000webmail.ddnss.de", "000webmail.ddnss.org", "000webmail.dyn-ip24.de", "000webmail.dyn.ddnss.de", "000webmail.dyn.home-webserver.de", "000webmail.dyndns.ddnss.de", "000webmail.dyndns1.de", "000webmail.home-webserver.de", "007.hzeg.eu.org", "00jac.com", "01022.hk", "0107414.xyz", "01130.hk", "020307.ccwu.cc", "020307.xyz", "027168.com", "045692.xyz", "062e.com", "07210d00.dpdns.org", "0815.ru", "0815.su", "0845.ru", "092088.xyz", "0box.eu", "0cd.cn", "0clickemail.com", "0cpub2.tech", "0m0.abrdns.com", "0n0ff.net", "0nelce.com", "0rg.fr", "0sg.net", "0v.ro", "0w.ro", "0wnd.net", "0wnd.org", "0x207.info", "1-8.biz", "1-mintue-mail.ddnsgeek.com", "1-second-mail.site", "1-tm.com", "10-minute-mail.com", "1000acres.co.uk", "1000rebates.stream", "10011.hzeg.eu.org", "100811.xyz", "10086.hzeg.eu.org", "100likers.com", "10161993.xyz", "103.ink", "105kg.ru", "10dk.email", "10inbox.online", "10mail.com", "10mail.org", "10mail.tk", "10mail.xyz", "10minemail.com", "10minmail.de", "10minmail.org", "10minut.com.pl", "10minut.xyz", "10minute.email", "10minutemail.be", "10minutemail.cf", "10minutemail.co.uk", "10minutemail.co.za", "10minutemail.com", "10minutemail.de", "10minutemail.ga", "10minutemail.gq", "10minutemail.ml", "10minutemail.net", "10minutemail.nl", "10minutemail.pro", "10minutemail.us", "10minutemailbox.com", "10minutemails.in", "10minutenemail.de", "10minutenmail.xyz", "10minutes.email", "10minutesmail.com", "10minutesmail.fr", "10minutmail.pl", "10x9.com", "110666666.xyz", "1111111111111.dynv6.net", "11163.com", "11166666.xyz", "112886.xyz", "114514.us.ci", "114514279.xyz", "115yu.cc.cd", "11mail.com", "123-m.com", "123.com", "12312312312.cfd", "123312.cc.cd", "1234211.xyz", "123456789.life", "123box.net", "123clone.com", "123india.com", "123mail.cl", "123mail.org", "123mails.org", "123qwe.co.uk", "126.com", "12bclass.us", "12friday.space", "12hosting.net", "12houremail.com", "12minutemail.com", "12minutemail.net", "12storage.com", "130723.xyz", "13282298.xyz", "1337.care", "134352.xyz", "13512863687.store", "139.com", "140unichars.com", "142code.me", "147.cl", "14club.org.uk", "14n.co.uk", "150mail.com", "150ml.com", "15553.eu.cc", "15555.eu.cc", "15557.eu.cc", "15768.xyz", "15963.fr.nf", "15meg4free.com", "15qm.com", "163.com", "164109038.xyz", "16816889.xyz", "16mail.com", "179297.xyz", "1813063985.xyz", "1820mail.vip", "188.com", "189.cn", "189.email", "18t5b.shop", "191117636.cfd", "191mariobet.com", "199411.store", "1av1.lx1qzz.qzz.io", "1av2.lx1qzz.qzz.io", "1blackmoon.com", "1ce.us", "1chuan.com", "1clck2.com", "1coolplace.com", "1freeemail.com", "1fsdfdsfsdf.tk", "1funplace.com", "1internetdrive.com", "1mail.ml", "1mail.net", "1me.net", "1mum.com", "1musicrow.com", "1netdrive.com", "1nom.org", "1nsyncfan.com", "1pad.de", "1s.fr", "1sec.site", "1secmail.com", "1secmail.net", "1secmail.org", "1secmail.space", "1secmail.website", "1st-forms.com", "1sworld.com", "1t-mail.com", "1to1mail.org", "1trick.net", "1u.sdfe.app", "1under.com", "1usemail.com", "1webave.com", "1webhighway.com", "1webmail.info", "1win.life", "1xp.fr", "1zhuan.com", "2-b.icu", "2-mail.com", "200192.indevs.in", "20030310.com", "2003066.xyz", "20031227.de5.net", "2012-2016.ru", "20220108.xyz", "20260501.ccwu.cc", "20260503.ccwu.cc", "2048unblocked.com", "20email.eu", "20email.it", "20mail.eu", "20mail.in", "20mail.it", "20minutemail.com", "20minutemail.it", "20minutesmail.com", "20mm.eu", "212.com", "2120001.net", "215.singledog.net", "216222.xyz", "21cn.com", "21mail.top", "21sad.xyz", "21zys.dpdns.org", "2200freefonts.com", "22345377.xyz", "2333.live", "247web.net", "24faw.com", "24hinbox.com", "24horas.com", "24hourmail.com", "24hourmail.net", "24mail.top", "25kcreditveo3.io.vn", "25kg2gveo3.io.vn", "25kmans.io.vn", "25kmembers.io.vn", "25kseller.io.vn", "25kselll.io.vn", "25kveo.io.vn", "25kveo3.io.vn", "25kvideo.io.vn", "25u.com", "269966.xyz", "2911.net", "2932919455.dynv6.net", "2980.com", "2anom.com", "2bmail.co.uk", "2chmail.net", "2d2i.com", "2die4.com", "2ether.net", "2fdgdfgdfgdf.tk", "2iij.net", "2mail.eu.cc", "2odem.com", "2prong.com", "2trom.com", "2wc.info", "3000.it", "300book.info", "30mail.ir", "30minutemail.com", "30minutesmail.com", "30wave.com", "3126.com", "3202.com", "32132.ccwu.cc", "321345123.xyz", "321media.com", "326645.indevs.in", "326646.indevs.in", "326646302.indevs.in", "3333366.xyz", "33mail.com", "3435637.xyz", "354674.eu.cc", "36duongtau.live", "36ru.com", "37.com", "39393.eu.cc", "3a88.dev", "3ammagazine.com", "3bbb.cc.cd", "3d-painting.com", "3dkai.com", "3dmail.com", "3email.com", "3fdn.com", "3g.ua", "3jf.cn", "3jsfuye.tech", "3l6.com", "3littlemiracles.com", "3mail.ga", "3trtretgfrfe.tk", "3xl.net", "3xu.studio", "3yfe.cn", "4-n.us", "401010.xyz", "4057.com", "415dacjder.qzz.io", "418.dk", "42o.org", "42web.io", "444.net", "45kg2gveo3.io.vn", "45kselller.io.vn", "45kveo.io.vn", "45kveo3.io.vn", "48dz.com", "48hr.email", "499713376.xyz", "4bbb.cc.cd", "4email.com", "4email.net", "4gfdsgfdgfd.tk", "4heats.com", "4k5.net", "4mail.cf", "4mail.ga", "4mg.com", "4newyork.com", "4nextmail.com", "4nmv.ru", "4pu.com", "4save.net", "4tb.host", "4warding.com", "4warding.net", "4warding.org", "4x4man.com", "50mail.com", "50set.ru", "51baidu.tech", "521883.xyz", "522885.xyz", "529834.xyz", "52mails.com", "55hosting.net", "579199.xyz", "5ghgfhfghfgh.tk", "5gramos.com", "5ixmonth.xyz", "5july.org", "5mail.cf", "5mail.ga", "5minutemail.net", "5oz.ru", "5semail.com", "5tb.in", "5x25.com", "5xu.vn", "5y.loseyourip.c
5749om", "5yaochu.top", "5ymail.com", "60minutemail.com", "628868.xyz", "636364.xyz", "66-77.cc", "662602718.xyz", "668fmail.com", "672643.net", "675hosting.com", "675hosting.net", "675hosting.org", "67899vip.com", "681mail.com", "689345.xyz", "6974.click", "6gdfg.zone.id", "6hjgjhgkilkj.tk", "6ip.us", "6mail.cf", "6mail.ga", "6mail.ml", "6n9.net", "6paq.com", "6somok.ru", "6th.pp.ua", "6url.com", "6ys.tech", "709183.freeddns.org", "719182.accesscam.org", "729406.xyz", "7362354.xyz", "74.ru", "74gmail.com", "75hosting.com", "75hosting.net", "75hosting.org", "78.edu.kg", "78.school", "78511939.xyz", "794613.accesscam.org", "7days-printing.com", "7mail.ga", "7mail.ml", "7ni.foo", "7novels.com", "7tags.com", "7xusq8vbim5d47.icu", "80665.com", "80fight.cn", "8127ep.com", "816qs.com", "862808.xyz", "875888.xyz", "879623.xyz", "88.am", "8848.net", "8d7kh.com", "8mail.cf", "8mail.ga", "8mail.ml", "8w3q0zls.mailosaur.net", "8yes.cc", "908209381.shop", "91.txvlogvip.top", "912684.abrdns.com", "91tanhua.top", "920325.xyz", "931123.xyz", "97rock.com", "98104.cn", "99.com", "992551.xyz", "998852.xyz", "99cows.com", "99experts.com", "99mail.us", "9k3r.com", "9l.sdfe.app", "9mail.cf", "9me.site", "9mot.ru", "9ox.net", "9q.ro", "a--i.top", "a-bc.net", "a-germandu.de", "a.bdbdjx.top", "a.lacdn.cn", "a0.engineer", "a0.jesys.net", "a45.in", "a7996.com", "aa5zy64.com", "aaago.cyou", "aaamail.zzn.com", "aabkmail.com", "aachendate.de", "aaconservation.org", "aakk.link", "aakkmail.com", "aamail.net", "aaoo.me", "aapt.net.au", "aaqwe.ru", "aaqwe.store", "aard.org.uk", "aaronkwok.net", "aasdarq.eu.cc", "aasdasd.eu.cc", "abacuswe.us", "abakiss.com", "abatido.com", "abbeyroadlondon.co.uk", "abc179312.shop", "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com", "abcflash.net", "abcmail.email", "abcopenai.eu.cc", "abdulnour.com", "aberllefenni.co.uk", "aberystwyth.com", "abevw.com", "abilityaccesslegal.org", "abilitywe.us", "abo-free.fr.nf", "aboodbab.com", "abouse.space", "about.com", "abovewe.us", "absolutewe.us", "abundantwe.us", "abusemail.de", "abuser.eu", "abv.bg", "abwesend.de", "abyis.com", "abyssmail.com", "ac-malin.fr.nf", "ac20mail.in", "academiccommunity.com", "academycougars.com", "academywe.us", "acanok.com", "acc1s.com", "acc1s.net", "accclone.com", "acceleratewe.us", "accentwe.us", "acceptwe.us", "acceso.or.cr", "access4less.net", "accessgcc.com", "accis.net", "acclaimwe.us", "accordwe.us", "accountant.com", "accountscenter.support", "accreditedwe.us", "acdag.indevs.in", "acdcfan.com", "ace-of-base.com", "acedby.com", "acg-news.com", "acgdb.eu.org", "acgfun.eu.org", "acgn.click", "acgnnews.com", "achievementwe.us", "achievewe.us", "acidservices.xyz", "acmemail.net", "acninc.net", "acornwe.us", "acoxs.com", "acqq.dev", "acreadingroom.co.uk", "acrossgracealley.com", "acrylicwe.us", "actarus.infos.st", "activatewe.us", "activist.com", "activitywe.us", "acucre.com", "acuitywe.us", "acumenwe.us", "ad-managment.run.place", "adadad.uk", "adagame.store", "adam.com.au", "adamai.shop", "adaptivewe.us", "adaptwe.us", "adarsa.me", "add3000.pp.ua", "addcom.de", "addictingtrailers.com", "addmails.com", "address.com", "addrin.uk", "adelphia.net", "adeptwe.us", "adexec.com", "adfarrow.com", "adfskj.com", "adios.email", "adios.net", "adiq.eu", "aditus.info", "admiralwe.us", "adn3t.com", "ado888.biz", "adobeccepdm.com", "adoniswe.us", "adoption.com", "ados.cc.cd", "ados.fr", "adpugh.org", "adrenalinefreak.com", "adresse.infos.st", "adroh.com", "ads24h.top", "adsd.org", "adsensekorea.com", "adubiz.info", "adult-work.info", "adv-dep-eng.jo3.org", "advalvas.be", "advantagewe.us", "advantageyoungpeople.com", "advantimo.com", "adventurewe.us", "adventwe.us", "advisorwe.us", "advitise.com", "advocatewe.us", "adwaterandstir.com", "aecmedya.com", "aeerso.space", "aegde.com", "aegia.net", "aegiscorp.net", "aegiswe.us", "aeiou.pt", "aelo.es", "aemail4u.com", "aeneasmail.com", "aeonpsi.com", "aerionx25k.io.vn", "aeronyx.cfd", "aesel.me", "aetheron.cfd", "afarek.com", "afeeyah.store", "affecting.org", "affiliate-nebenjob.info", "affiliatedwe.us", "affilikingz.de", "affinitywe.us", "affluentwe.us", "affordablewe.us", "afgpuk.co.uk", "afia.pro", "afreeinternet.com", "africamail.com", "africamel.net", "afrobacon.com", "afse-gh.top", "aftely.dpdns.org", "aftely.eu.cc", "aftercorporation.com", "afterhourswe.us", "afternea.sbs", "afw.fr.nf", "ag.us.to", "agallagher.id", "agedmail.com", "agencysq.store", "agendawe.us", "agentloop.sbs", "agger.ro", "agilewe.us", "agiuse.com", "agmbowie.com", "agoodmail.com", "agorawe.us", "agri4life.io.vn", "agtx.net", "agylzuv.to
5749p", "ahaa.dk", "ahavaexperience.com", "aheadwe.us", "ahem.email", "ahk.jp", "ahmadfamily.net", "ahmedkhlef.com", "ahvin.com", "ai.2026157.xyz", "ai100999.com", "aiaccount.click", "aiapes.publicvm.com", "aibase.bond", "aichi.com", "aiclit.asia", "aidesign.work.gd", "aidesigner.2bd.net", "aifmusic.top", "aigts.top", "aikunkun.com", "ailicke.com", "aim.com", "aineapi.com", "aiphotoeditor.io", "aiphotoenhancer.me", "air2token.com", "aircourriel.com", "aircraftmail.com", "airforce.net", "airforceemail.com", "airmailbox.website", "airpost.net", "airsworld.net", "aisubpro.click", "aisubstore.click", "aisupply.click", "aiworldx.com", "aixnv.com", "ajacied.com", "ajaxapp.net", "ajinimoto.me", "ajksdljaskldasd.cc.cd", "ak1314.eu.cc", "ak47.hu", "akapost.com", "akbip.com", "akerd.com", "akfoin.us.ci", "akgq701.com", "akirapowered.com", "akmail.in", "aknet.kg", "akugu.com", "akunku.site", "akunlama.com", "akunlemah.biz.id", "akunqu.net", "al-qaeda.us", "al1ya.app", "alarafoundation.com", "albawaba.com", "albill.com", "albionwe.us", "alchemywe.us", "aleh.de", "alex4all.com", "alexandria.cc", "alfaceti.com", "algeria.com", "alhilal.net", "alhsalumni.org", "aliaswe.us", "alibaba.com", "aliban.org", "alice.it", "alienware13.com", "aligamel.com", "alightmotion.cloud", "alightmotion.id", "alightmotion.site", "alightmotion.top", "aligroup.uk", "alilot.com", "alin.cc.cd", "alin.eu.cc", "alina-schiesser.ch", "alisaol.com", "alisongamel.com", "alisree.com", "alivance.com", "alive.cz", "alivewe.us", "aliyun.com", "all-cats.ru", "allaccesswe.us", "allamericanwe.us", "allaroundwe.us", "alldirectbuy.com", "allegiancewe.us", "allegrowe.us", "allemojikeyboard.com", "allergist.com", "allfreemail.net", "allgoodwe.us", "alliancewe.us", "allinonewe.us", "allmail.net", "allofthem.net", "alloutwe.us", "allowed.org", "alloymail.com", "alloywe.us", "allprowe.us", "allracing.com", "allreview4u.com", "allsaintsfan.com", "allseasonswe.us", "allstarwe.us", "allthegoodnamesaretaken.org", "allumhall.co.uk", "allurewe.us", "allwebemails.com", "almatips.com", "almiswelfare.org", "almondwe.us", "alosp.com", "alpenjodel.de", "alph.wtf", "alpha-web.net", "alphafrau.de", "alphaomegawe.us", "alphatronic25k.io.vn", "alphax.fr.nf", "alpinewe.us", "alreval.com", "alskens.dk", "altairwe.us", "altavista.com", "altavista.net", "altavista.se", "alternativagratis.com", "altitudewe.us", "altmails.com", "altrans.fr.nf", "altuswe.us", "aluimport.com", "alumni.com", "alumnidirector.com", "alvaxio.com", "alves.fr.nf", "alvilag.hu", "alwayss.uno", "ama-trade.de", "ama-trans.de", "amadeuswe.us", "amail.club", "amail.com", "amail1.com", "amail4.me", "amazinggift.life", "amazingly.online", "amazon-aws.org", "amazonses.com", "amberwe.us", "ambiancewe.us", "ambitiouswe.us", "ameady.com", "ameeppoossaa.dedyn.io", "amelabs.com", "amele.com", "america.hm", "americanawe.us", "americancivichub.com", "americasbestwe.us", "americaswe.us", "ameritech.net", "amex409.monster", "amicuswe.us", "amilegit.com", "aminating.com", "amiri.net", "amiriindustries.com", "amiyiy.xyz", "amnetsal.com", "amorki.pl", "amplewe.us", "amplifiedwe.us", "amplifywe.us", "ampsylike.com", "amrer.net", "amuro.net", "amuromail.com", "amzclaw.eu.cc", "anajakstore.site", "analogwe.us", "analysiswe.us", "analyticalwe.us", "analyticswe.us", "analyticwe.us", "ananzi.co.za", "anappfor.com", "anappthat.com", "anarac.com", "anawebs.com", "andalanglobal.app", "andreasenpai.my.id", "andreasenpai.web.id", "andreihusanu.ro", "andrewclaude.eu", "andrewclaude.fr", "andrewclaude.org", "andrewclaude.store", "andrewcluh.top", "androl.cfd", "andthen.us", "andylau.net", "anfmail.com", "angelfire.com", "angelic.com", "angelina.syrf109475.top", "angiiidayyy.click", "anhiqojkaq1.abrdns.com", "anhvip9999.com", "animail.net", "animalhouse.com", "animalwoman.net", "animesos.com", "aniross.com", "anit.ro", "anjungcafe.com", "ankiclub.space", "ann.qzz.io", "annd.us", "annnekkk.com", "annsmail.com", "ano-mail.net", "anogz.com", "anon-mail.de", "anonbox.net", "anonmail.top", "anonmails.de", "anonymail.dk", "anonymbox.com", "anonymized.org", "anonymous.to", "anonymousness.com", "anote.com", "another.com", "anotherdomaincyka.tk", "anotherwin95.com", "anquandx.com", "ansibleemail.com", "anthony-junkmail.com", "anti-social.com", "antireg.com", "antireg.ru", "antisocial.com", "antispam.de", "antispam.fr.nf", "antispam24.de", "antispammail.de", "antongijsen.com", "antttool.us", "antwerpen.com", "anversa.com.co", "anvjobvnu.top", "any.pink", "anyalias.com", "anymoment.com", "anypng.com", "anytimenow.com", "anywebmail.com", "aoeuhtns.com", "aokkad.com", "aokkap.my.id", "aokkas.com", "aol.com", "aon.at", "aotemangggg.icu", "ape-tech.run.place", "apedesigns.jo3.org", "apedesigns.linkpc.net", "apes-ai.linkpc.net", "apexmail.com", "apexnovaser.com", "apexone.top", "apfelkorps.de", "aphlog.com", "api-v1.cc.cd", "api.qwen3-30b-a3b.xyz", "api891.cc.cd", "api89891.eu.cc", "apimi.icu", "apiroot.vps.cd", "apkmd.com", "apmail.com", "apmail.org", "apocaw.com", "apollo.lv", "aport.ru", "aport2000.ru", "app.longlivethepeople.d
5749pdns.org", "appc.se", "appinventor.nl", "appixie.com", "apple.edu.pl", "appmail.uk", "appraiser.net", "appremiums.pro", "approvers.net", "apps.dj", "appzily.com", "aprinastore.web.id", "aprte.com", "aquaguide.ru", "aquaqua.top", "ar26710.cc.cd", "arabia.com", "arabtop.net", "arapgege.app", "arapps.me", "arcadein.com", "arcadium.lat", "arcentra.cfd", "archaeologist.com", "arcor.de", "arcotronics.bg", "arcticmail.com", "ardsp.shop", "arduino.hk", "arenahiveai.com", "ares.edu.pl", "argentina.com", "ariaz.jetzt", "aristotle.org", "arkoo.site", "arksy12.eu.cc", "army.net", "armyspy.com", "arnet.com.ar", "aron.us", "arroisijewellery.com", "arronhc.cyou", "art-en-ligne.pro", "arthiq.life", "artlover.com", "artlover.com.au", "artman-conception.com", "artsdigi.store", "artsdigital.store", "arur01.tk", "arurgitu.gq", "arvato-community.de", "arxxwalls.com", "as-if.com", "asahi-net.or.jp", "asaption.com", "aschenbrandt.net", "asciibinder.net", "asd903102.online", "asdahjsdasd213124.eu.cc", "asdascas.dpdns.org", "asdasd.nl", "asdasd.ru", "asdcxijkj.eu.cc", "asdedcccc.eu.cc", "asean-mail.com", "asedeeqaweds.dedyn.io", "asgzs.top", "asheville.com", "ashleyandrew.com", "ashnkarsh.life", "asia-hq.jo3.org", "asia-links.com", "asia-mail.com", "asiafind.com", "asianavenue.com", "asiancityweb.com", "asiansonly.net", "asianwired.net", "asiapoint.net", "asimarif.com", "asistx.net", "ask-mail.com", "asleepity.com", "asorent.com", "aspireviastudios.org", "ass.pp.ua", "assala.com", "assamesemail.com", "assurmail.net", "astonut.tk", "astralis.cn", "astroboymail.com", "astroempires.info", "astrolover.com", "astrosfan.com", "astrosfan.net", "asu.mx", "asu.su", "asurad.com", "asurfer.com", "at.hm", "at0mik.org", "atelierdelune.shop", "atheist.com", "athenachu.net", "atina.cl", "atl.lv", "atlas4381.me", "atlasimple.com", "atlaswebmail.com", "atmc.net", "atmemail.top", "atnextmail.com", "atombomb.online", "atozasia.com", "atrus.ru", "att.net", "attglobal.net", "attnetwork.com", "attymail.com", "au-b1.top", "au.com", "au.ru", "au1688x.us", "aubady.com", "auctioneer.net", "augmentationtechnology.com", "aula.edu.pl", "aumails.us", "auone-net.jp", "auralith.cfd", "aureliandata.space", "ausgefallen.info", "ausi.com", "aussiemail.com.au", "austin.rr.com", "australia.edu", "australiamail.com", "austrosearch.net", "auth2fa.com", "auti.st", "autoescuelanerja.com", "autofixmax.com", "autograf.pl", "automisly.org", "automizelymail.info", "automizly.net", "autommo.net", "autorambler.ru", "autorobotica.com", "autosouvenir39.ru", "autotwollow.com", "autowb.com", "autoxugiare.com", "autre.fr.nf", "autu11n.lol", "available-home.com", "avalentra.cfd", "averdov.com", "avh.hu", "avia-tonic.fr", "avls.pt", "avtolev.com", "awa.pics", "awatum.de", "awdrt.org", "awesome47.com", "awesomesaucemail.org", "awgarstone.com", "awiki.org", "awoiiwowma11001.indevs.in", "aws-mail-2.dynv6.net", "aws-mail-free-1017.dynv6.net", "aws-mail-free-102.dynv6.net", "aws-mail-free-1056.dynv6.net", "aws-mail-free-1304.dynv6.net", "aws-mail-free-1705.dynv6.net", "aws-mail-free-1842.dynv6.net", "aws-mail-free-1884.dynv6.net", "aws-mail-free-2156.dynv6.net", "aws-mail-free-2236.dynv6.net", "aws-mail-free-2290.dynv6.net", "aws-mail-free-2383.dynv6.net", "aws-mail-free-2409.dynv6.net", "aws-mail-free-2454.dynv6.net", "aws-mail-free-2524.dynv6.net", "aws-mail-free-2704.dynv6.net", "aws-mail-free-2737.dynv6.net", "aws-mail-free-2775.dynv6.net", "aws-mail-free-2795.dynv6.net", "aws-mail-free-2845.dynv6.net", "aws-mail-free-2892.dynv6.net", "aws-mail-free-2906.dynv6.net", "aws-mail-free-2923.dynv6.net", "aws-mail-free-3038.dynv6.net", "aws-mail-free-3335.dynv6.net", "aws-mail-free-3381.dynv6.net", "aws-mail-free-3620.dynv6.net", "aws-mail-free-3711.dynv6.net", "aws-mail-free-3796.dynv6.net", "aws-mail-free-385.dynv6.net", "aws-mail-free-4014.dynv6.net", "aws-mail-free-4017.dynv6.net", "aws-mail-free-4131.dynv6.net", "aws-mail-free-4206.dynv6.net", "aws-mail-free-4257.dynv6.net", "aws-mail-free-4289.dynv6.net", "aws-mail-free-4531.dynv6.net", "aws-mail-free-4550.dynv6.net", "aws-mail-free-4573.dynv6.net", "aws-mail-free-4711.dynv6.net", "aws-mail-free-4726.dynv6.net", "aws-mail-free-4761.dynv6.net", "aws-mail-free-4816.dynv6.net", "aws-mail-free-4885.dynv6.net", "aws-mail-free-4920.dynv6.net", "aws-mail-free-493.dynv6.net", "aws-mail-free-4937.dynv6.net", "aws-mail-free-5119.dynv6.net", "aws-mail-free-518.dynv6.net", "aws-mail-free-5241.dynv6.net", "aws-mail-free-5380.dynv6.net", "aws-mail-free-5392.dynv6.net", "aws-mail-free-5537.dynv6.net", "aws-mail-free-5670.dynv6.net", "aws-mail-free-5781.dynv6.net", "aws-mail-free-5786.dynv6.net", "aws-mail-free-5969.dynv6.net", "aws-mail-free-6032.dynv6.net", "aws-mail-free-6033.dynv6.net", "aws-mail-free-6080.dynv6.net", "aws-mail-free-6120.dynv6.net", "aws-mail-free-6253.dynv6.net", "aws-mail-free-6255.dynv6.net", "aws-mail-free-6306.dynv6.net", "aws-mail-free-6398.dynv6.net", "aws-mail-free-6552.dynv6.net", "aws-mail-free-659.dynv6.net", "aws-mail-free-6604.dynv6.net", "aws-mail-free-6690.dynv6.net", "aws-mail-free-6691.dynv6.net", "aws-mail-free-6762.dynv6.net", "aws-mail-free-6826.dynv6.net", "aws-mail-free-7145.dynv6.net", "aws-mail-free-7149.dynv6.net", "aws-mail-free-7153.dynv6.net", "aws-mail-free-7194.dynv6.net", "aws-mail-free-7358.dynv6.net", "aws-mail-free-7477.dynv6.net", "aws-mail-free-764.dynv6.net", "aws-mail-free-7654.dynv6.net", "aws-mail-free-7838.dynv6.net", "aws-mail-free-7849.dynv6.net", "aws-mail-free-788.dynv6.net", "aws-mail-free-7897.dynv6.net", "aws-mail-free-8085.dynv6.net", "aws-mail-free-8091.dynv6.net", "aws-mail-free-8205.dynv6.net", "aws-mail-free-8225.dynv6.net", "aws-mail-free-8467.dynv6.net", "aws-mail-free-8475.dynv6.net", "aws-mail-free-8741.dynv6.net", "aws-mail-free-9015.dynv6.net", "aws-mail-free-916.dynv6.net", "aws-mail-free-9161.dynv6.net", "aws-mail-free-9283.dynv6.net", "aws-mail-free-9409.dynv6.net", "aws-mail-free-9533.dynv6.net", "aws-mail-free-9596.dynv6.net", "aws-mail-free-9697.dynv6.net", "aws-mail-free-9703.dynv6.net", "aws-mail-free-9789.dynv6.net", "aws-mail.accesscam.org", "aws-mailer.dynv6.net", "awsom.net", "awsoo.com", "ax05.cn", "axax.asia", "axin05.icu", "axiz.org", "axon7zte.com", "axoskate.com", "axsup.net", "ayakamail.cf", "ayload.bond", "ayna.com", "azame.pw", "azazazatashkent.tk", "azcomputerworks.com", "azeqsd.fr.nf", "azimiweb.com", "azmeil.tk", "azulejoslowcost.es", "azuretechtalk.net", "azurien.cfd", "azzancoffee.com", "b.1116992.xyz", "b.729406.xyz", "b1of96u.com", "b2bx.net", "b2cmail.de", "b7s.ru", "babyeat.food", "babyfun.fun", "bachelorboy.com", "bachelorgal.com", "back67283.eu.cc", "back7654.eu.cc", "back89635.eu.cc", "backilnge.com", "backpackers.com", "backstreet-boys.com", "backstreetboysclub.com", "bacteroidmail.com", "badgerhole.com", "badgerland.eu", "badoop.com", "badopsec.lol", "badpotato.tk", "baechecker.com", "bagherpour.com", "bahlil.codes", "bahlill.cfd", "baicai1145.online", "baicai1145.shop", "baidoxe.com", "baileybridge.org", "baipiaodashen.cloud-ip.cc", "baiyucraft.sbs", "baizoto.shop", "bakalos.dpdns.org", "balaket.com", "balawo.com", "baldmama.de", "baldpapa.de", "baldur.edu.kg", "ballyfinance.com", "banana.linkpc.net", "banancaocap.com", "bandtoo.com", "bangban.uk", "bangdieukhien.net", "bangkok.
5749com", "bangkok2000.com", "banhang14.com", "banit.club", "banit.me", "bank-opros1.ru", "bankinnepal.com", "bannertown.net", "banri.xyz", "baptistmail.com", "baptized.com", "bar-ton.store", "barcelona.com", "bareed.ws", "barnrestaurant.pro", "barooko.com", "barry.dpdns.org", "barryogorman.com", "bartdevos.be", "bartender.net", "baseballmail.com", "baselogicroute.com", "basepathgrid.com", "baserda.net", "basically.cc.cd", "basketballmail.com", "basketrise.com", "basscode.org", "batdongsanhatinh.org", "bathdf.co.uk", "batiinsaat.net", "batuta.net", "baudoinconsulting.com", "bauwerke-online.com", "baybabes.com", "baybumutan.shop", "bazaaboom.com", "bb28.dev", "bbbbyyzz.info", "bbhost.us", "bbiq.jp", "bbitf.com", "bbitj.com", "bbitq.com", "bbmail.store", "bbmailku.com", "bboy.zzn.com", "bboys.fr.nf", "bbroot.com", "bbtec.net", "bbwg.one", "bcaoo.com", "bcast.ws", "bcb.ro", "bcbc.cc.cd", "bccto.me", "bcm.edu.pl", "bcmail.pro", "bcooq.com", "bcvibes.com", "bdgstr.com", "bdm.ovh", "bdmcom.cn", "bdmuzic.pw", "bdshar.com", "beaconmessenger.com", "bearsarefuzzy.com", "beastmail.space", "beatbok.online", "beautifulblessingsbeyondborders.org", "beddly.com", "beeebank.com", "beefmilk.com", "beelsil.com", "beenhad.com", "beep.ru", "beer.com", "beethoven.com", "beganment.com", "begemail.com", "behatifoundation.org", "beibei.digital", "bekasi.me", "belamail.org", "belettersmail.com", "belgianairways.com", "belicapcut.app", "belice.com", "belizehome.com", "bell.net", "bellair.net", "belljonestax.com", "bellsouth.net", "beluckygame.com", "benipaula.org", "benphim.com", "benphim.net", "benshelf.com", "bepureme.com", "beribase.ru", "beribaza.ru", "berirabotay.ru", "berkahfb.com", "berkahjayashope.com", "berlin.com", "berlin.de", "berlinexpo.de", "berwie.com", "bespokehaircare.co.uk", "best-hosting.biz", "best-john-boats.com", "best-temp-mail.com", "best-vpn.xyz", "bestchoiceusedcar.com", "besteya.com", "bestlistbase.com", "bestmail.us", "bestoption25.club", "bestparadize.com", "bestrui.qzz.io", "bestsoundeffects.com", "besttempmail.com", "beta.edu.pl", "betacinder.com", "betatensor.com", "betr.co", "betriebsdirektor.de", "bettergolf.net", "betteryoutime.com", "bevriz.com", "beyondreasonabledoubt.co.uk", "bezill.com", "bfgdnhyj.laowang.de5.net", "bflcafe.com", "bgtmail.com", "bgx.ro", "bgyiacczy.top", "bhana.xyz", "bhap.me", "bharatmail.com", "bheps.com", "bhuxp.org", "bidourlnks.com", "big1.us", "bigassweb.com", "bigblue.net.au", "bigboab.com", "bigfoot.com", "bigfoot.de", "bigger.com", "biggerbadder.com", "biglobe.ne.jp", "bigmail.lol", "bigmailbox.com", "bigmir.net", "bigpond.au", "bigpond.com", "bigpond.com.au", "bigpond.net", "bigpond.net.au", "bigprofessor.so", "bigramp.com", "bigstring.com", "bigwhoop.co.za", "bij.pl", "bikemechanics.com", "bikeracer.com", "bikeracers.net", "bikerider.com", "billsfan.com", "billsfan.net", "bimla.net", "bin-ich.com", "bin-wieder-da.de", "binafex.com", "binancepools.cloud", "binbx.net", "binech.com", "bingema.xyz", "binich.com", "binka.me", "binkmail.com", "binnary.com", "binsh.kro.kr", "bio-muesli.info", "bio-muesli.net", "biojuris.com", "bione.co", "biopost.my.uy", "bipochub.com", "birdlover.com", "birdowner.net", "birminghamlife.org.uk", "bishwanathuk.cc", "bisons.com", "bitmah.com", "bitmail.com", "bitmens.com", "bitpage.net", "bittnex.com", "bitwhites.top", "bitymails.us", "biubiuwholeworld.cn", "biweia615.icu", "biyug.com", "biz.ezweb.ne.jp", "biz.st", "bizhosting.com", "bizisstance.com", "bjorwi.rest", "bk.ru", "blackburnmail.com", "blackgoldagency.ru", "blackmarket.to", "blackplanet.com", "blader.com", "bladesmail.net", "blazemail.com", "bleib-bei-mir.de", "blenched.com", "blendlog.com", "blenro.com", "bletilla.cc", "bletsoetownclosecharity.bio", "blip.ch", "blip.ovh", "blnkt.net", "block-this-for-gambling.cloud-ip.cc", "block521.com", "blockfilter.com", "blog3.cc.cd", "blogger.nyc.mn", "blogmyway.org", "blogos.net", "blogspam.ro", "blondemorkin.com", "blondmail.com", "blongmail.com", "bltiwd.com", "bluebottle.com", "bluedumpling.info", "bluehyppo.com", "bluemail.ch", "bluemail.dk", "bluesfan.com", "bluewerks.com", "bluewin.ch", "blueyonder.co.uk", "blushmail.com", "blutig.me", "bmlsports.net", "bmoar.com", "bncinema.com", "bnote.com", "bnrlner.shop", "bnyhr.us", "boardermail.com", "boatmail.us", "boatracers.com", "bobgf.ru", "bobgf.store", "bobmail.info", "bobmurchison.com", "bocas.tech", "bodhi.lawlita.com", "boerakemail.com", "bofthew.com", "bokgumail.kr", "bol.com.br", "bolando.com", "bollywoodz.com", "boltonfans.com", "bombdiggity.com", "bomnet.net", "bonbon.net", "bonobo.email", "boofx.com", "bookgame.org", "bookthemmore.com", "boom.com", "boom.publicvm.com", "boom114.ccwu.cc", "boommail.online", "boostme.es", "bootmail.com", "bootssl.com", "bootybay.de", "boranora.com", "bored.lol", "borged.com", "borged.net", "borged.org", "bornnaked.com", "bosakun.com", "boscharena.dev", "bostonoffice.com", "bot.cd", "bot.nu", "botasky.eu.cc", "botgetlink.com", "botgetlink.net", "botnet.my.id", "boukshilf.com", "boun.cr", "bounce.net", "bounces.amazon.com", "bouncr.com", "box-mail.ru", "box-mail.store", "box.az", "box.ua", "boxbg.com", "boxem.ru", "boxem.
5749store", "boxemail.com", "boxfi.uk", "boxformail.in", "boxfrog.com", "boximail.com", "boxlet.ru", "boxlet.store", "boxmach.com", "boxmail.lol", "boxmail1.com", "boxomail.live", "boxtemp.com.br", "boyaga.com", "boyzoneclub.com", "bpotogo.com", "bptfp.net", "bradfordfans.com", "bradingtowntrust.co.uk", "brand-app.biz", "brandallday.net", "brandme.my.uy", "brashbeat.online", "brasilia.net", "brasx.org", "brazilmail.com", "brazilmail.com.br", "breadtimes.press", "breaite.com", "breakthru.com", "breathe.com", "brefmail.com", "brennendesreich.de", "bresnan.net", "brevionix.cfd", "brevitron.cfd", "brew-master.com", "brew-meister.com", "brfree.com.br", "bridgetonmainstreet.org", "briefalpha.org", "briefemail.com", "briggsmarcus.com", "bright.net", "brightfuturescharity.org.uk", "bristolstatehousefoundation.org", "britneyclub.com", "brittonsign.com", "brivian.link", "broadbandninja.com", "broadcast.net", "broken.best", "brokenion.com", "brokenvalve.com", "brothershaircut.com", "brownjasen.ccwu.cc", "brtfsbht.xjcnsdevg.de5.net", "brusseler.com", "bsb.cc.cd", "bscse.okcx.edu.rs", "bsdmail.com", "bskyx.fun", "bsnow.net", "bspamfree.org", "bspooky.com", "bst-72.com", "btb-notes.com", "btc.email", "btcmail.pw", "btcmod.com", "btconnect.co.uk", "btconnect.com", "btinternet.com", "btizet.pl", "btopenworld.co.uk", "btsblock.com", "btzca8.nsmjj.cc.cd", "buccalmassage.ru", "budaya-tionghoa.com", "budayationghoa.com", "buddyfly.top", "buerotiger.de", "buffemail.com", "buffymail.com", "bugfoo.com", "bugmenever.com", "bugmenot.com", "bukanimers.com", "bukatv8.com", "bukhariansiddur.com", "bulapolo.site", "bullsfan.com", "bullsgame.com", "buloan.com", "bulrushpress.com", "bultoc.com", "bum.net", "bumail.site", "bumerang.ro", "bumpymail.com", "bunchofidiots.com", "bund.us", "bundes-li.ga", "bunmail.one", "bunnyhub.space", "bunsenhoneydew.com", "burangir.com", "burnermail.bond", "burnermail.cyou", "burnthespam.info", "burry.eu.org", "burstmail.info", "buryfans.com", "business-degree.live", "business-man.com", "businessbackend.com", "businessman.net", "businesssuccessislifesuccess.com", "buspad.org", "bussinesa.app", "bussitussi.com", "busta-rhymes.com", "busyaz.tech", "butteiumien.io.vn", "buxianliang.fun", "buy-blog.com", "buyapp.foo", "buyersusa.com", "buymoreplays.com", "buyordie.info", "buyreview.us", "buyusdomain.com", "buyusedlibrarybooks.org", "buzzcluby.com", "buzzcut.ws", "bvimailbox.com", "bwm.de5.net", "bwmyga.com", "bx52ff4a.shop", "by.longmusic.com", "byagu.com", "byebyemail.com", "byespm.com", "byiepsxqu.top", "byjkprh.top", "byom.de", "bytedigi.com", "bytonf.com", "c-eric.fr.nf", "c-newstv.ru", "c-pkk.icu", "c-tta.top", "c.lgp888.xyz", "c14.mobi", "c1ph3r.xyz", "c2.hu", "c28.mobi", "c2i.net", "c3.hu", "c4.com", "c4.fr", "c4pro.uk", "c51vsgq.com", "caainpt.com", "cabacabana.com", "cabiste.fr.nf", "cable.comcast.com", "cableone.net", "cachedot.net", "cade.org.uk", "cadinr.com", "caere.it", "cafesui.com", "caftee.com", "caigq.qzz.io", "cairomail.com", "cal001.cc.cd", "caldrexa.cfd", "calendar-server.bounces.google.com", "calendro.fr.nf", "calidifontain.be", "california.edu.pl", "californiafitnessdeals.com", "californiamail.com", "calima.asso.st", "callnetuk.com", "callsign.net", "calmriver.info", "caltanet.it", "calvarystreetisa.org", "cam4you.cc", "camellia.indevs.in", "cameltok.com", "camera47.net", "cameraity.com", "camidge.com", "camping-grill.info", "canada-11.com", "canada.com", "canadianmail.com", "cancer-treatment.xyz", "candassociates.com", "candymail.de", "cane.pw", "canfga.org", "cangcud.com", "cangcutku.pro", "canoemail.com", "cantozil.com", "canvas-map.com", "canvect.com", "canwetalk.com", "caowo.online", "capct.id", "capcud.shop", "capcut.digital", "capcut.sbs", "capcut.space", "capcut02.shop", "capcutku.io", "capcutmeflo.shop", "capcutpro.click", "capcutpro.dev", "capcvt.es", "capemain.games", "capitalistdilemma.com", "caprasolver.xyz", "captus.cyou", "caqcut.top", "car101.pro", "caramail.com", "carbtc.net", "care-breath.com", "care2.com", "careerbuildermail.com", "carioca.net", "carpin.org", "cars2.club", "carsencyclopedia.com", "cartelera.org", "cartestraina.ro", "casablancaresort.com", "caseedu.tk", "casema.nl", "cash4u.com", "cashette.com", "cashflow35.co", "cashflow35.com", "casino.com", "casualdx.com", "catbar.net", "catcat.uk", "catcha.com", "catchamail.com", "catchmail.io", "catfie.app", "catgroup.uk", "catholic.org", "catlover.com", "catsredeem.com", "catterickgarrisonfootballcentre.uk", "cauter
5749ize.top", "cavi.mx", "caye.org.uk", "cazlg.com", "cbair.com", "cbasosbr.top", "cbdol.mx", "cbes.net", "cbsbada.com", "cbty.ru", "cbty.store", "cbvl.co.uk", "cc17.name.ng", "cc18.name.ng", "cc3.name.ng", "cc6.name.ng", "cc8c1bd6.abrdns.com", "cckuy.com", "ccmail.uk", "ccqu.top", "ccsuncare.com", "cctoolz.com", "cd2.com", "cdfaq.com", "cdnmia.com", "cdnripple.com", "cdpa.cc", "cdxugmy.top", "ceed.se", "cek.pm", "celineclub.com", "cellurl.com", "celtic.com", "cengrop.com", "center-mail.de", "centermail.at", "centermail.com", "centermail.de", "centermail.info", "centermail.net", "centoper.it", "centralpets.com", "centrum.cz", "centrum.sk", "centurytel.net", "cerisun.com", "certexx.fr.nf", "certificenter.com", "certifiedmail.com", "certve.com", "cetpass.com", "cfl.rr.com", "cfo2go.ro", "cgac.es", "cggup.com", "cghost.s-a-d.de", "ch.ma", "chacuo.net", "chahcyrans.com", "chaichuang.com", "chaineor.com", "chaiyomail.com", "chalupaurybnicku.cz", "chamconnho.com", "chammy.info", "chance2mail.com", "chanceforfuture.org", "chandrasekar.net", "chansd.com", "chantellegribbon.com", "chaocosen.com", "chapsmail.com", "charityrcao.org.uk", "charl.us", "charlonger.store", "charmedmail.com", "charter.net", "chasefreedomactivate.com", "chat.ru", "chatgpt.qwen3-30b-a3b.xyz", "chatgptmail.shop", "chatgptuk.pp.ua", "chatgtporg.eu.cc", "chatich.com", "chattown.com", "chatworkstation.com", "chaublog.com", "chauhanweb.com", "chauhuy.click", "chauhuy.io.vn", "chauhuy.online", "chauhuy.site", "chautuyen.click", "chautuyen.io.vn", "chautuyen.online", "cheaphub.net", "cheapmori.store", "cheatmail.de", "chechnya.conf.work", "check.com", "check1check.com", "cheerful.com", "chef.net", "chefalicious.com", "chek.com", "chello.nl", "cheminsdevie.ink", "chemist.com", "chenbot.email", "chenbufan.top", "chequemail.com", "chessgameland.com", "chessgamingworld.com", "chet.ccwu.cc", "chetskr.work.gd", "chewydonut.com", "cheyenneweb.com", "chez.com", "chibakenma.ml", "chickenkiller.com", "chickmail.com", "chielo.com", "childrenth.com", "childsavetrust.org", "chilkat.com", "chillart.org", "chilloliandfii.space", "china.com", "china.net.vg", "chinamail.com", "chinamkm.com", "chingchongme.site", "chirk.com", "chithinh.com", "chitthi.in", "chocaholic.com.au", "choco.la", "chogmail.com", "choicemail1.com", "choichay.com", "choigi.com", "chol.com", "chollian.net", "choner.cn", "choner.shop", "chong-mail.com", "chong-mail.net", "chong-mail.org", "chongqilai.cc", "chophim.com", "chosenx.com", "chotgo.com", "chromentis.cfd", "chsi.christmas", "chuan.info", "chumpstakingdumps.com", "chundage.help", "chupanhcuoidep.com", "churchestate.org.uk", "churchhousemanaton.co.uk", "churchinsouthampton.org.uk", "churchusa.com", "cia-agent.com", "cia.hu", "ciaoweb.it", "cicciociccio.com", "cigar-auctions.com", "cihai.eu.cc", "cihaifhqo.eu.cc", "cihuy.net", "cimario.com", "cinci.rr.com", "cincinow.net", "cipcup.site", "citayam.com", "citiz.net", "citlink.net", "citmo.net", "citromail.hu", "city-of-bath.org", "city-of-birmingham.com", "city-of-brighton.org", "city-of-cambridge.com", "city-of-coventry.com", "city-of-edinburgh.com", "city-of-lichfield.com", "city-of-lincoln.com", "city-of-liverpool.com", "city-of-manchester.com", "city-of-nottingham.com", "city-of-oxford.com", "city-of-swansea.com", "city-of-westminster.com", "city-of-westminster.net", "city-of-york.net", "cityofcardiff.net", "cityoflondon.org", "civikli.com", "civx.org", "cjdeyuiw.eu.cc", "ckaazaza.tk", "cketrust.org", "ckiso.com", "ckvn.edu.vn", "cl-cl.org", "cl0ne.net", "claimab.com", "clandest.in", "claramail.com", "classesmail.com", "classicalfan.com", "classicmail.co.za", "classio.click", "claudd.com", "claverfield.org", "cleaninbox.dynv6.net", "clear.net.nz", "clearbeam.pro", "clearhabitpath.com", "clearwatermail.info", "clearwire.net", "clerk.com", "click-email.com", "clickcore99.click", "clickdeal.co", "cliffhanger.com", "clipmail.eu", "clixser.com", "clllsy.cc.cd", "clockemail.com", "clone21.io.vn", "cloneemail.com", "clonekhoe.com", "clonemailsieure.com", "clonemoi.tk", "clonenpa.com", "clonetrust.com", "close2you.net", "cloud-mail.top", "cloud-temp.com", "cloudflare.gay", "cloudgen.world", "cloudsign.in", "cloudtempmail.net", "cloudwhitespace.cc.cd", "cloudwhitezone.cc.cd", "cloudyourfast.net", "clousy.site", "clout.wiki", "clowmail.com", "clrmail.com", "club106.org.uk", "club4x4.net", "clubalfa.com", "clubbers.net", "clubducati.com", "clubhonda.net", "clubmember.org", "clubnetnoir.com", "clubvdo.net", "cluemail.com", "clyvantis.cfd", "cmail.blog", "cmail.club", "cmail.com", "cmail.net", "cmail.org", "cmbl.top", "cmcc.indevs.in", "cmdkl.com", "cmhvzylmfc.com", "cmpmail.com", "cmuk.edu.kg", "cnamed.com", "cndps.com", "cnebw.eu.cc", "cneemail.com", "cnew.ir", "cnieux.com", "cnmsg.net", "cnnsimail.com", "cnoilpress.com", "cnsds.de", "cntv.cn", "co.cc", "coasah.com", "cobal.infos.st", "cobarekyo1.ml", "cock.li", "cocoro.uk", "cocovpn.com", "code-gmail.com", "codeandscotch.com", "codec.ro", "codeguard.net", "codei.site", "coder.hu", "coderdir.com", "codestar.site", "codesuc.top", "coding.ccwu.cc", "codinggo.cn", "codivide.com", "codoteam.com", "codywon.top", "coffeeazzan.com", "coffeejadore.com", "coffeetimer24.com", "coftens.asia", "coftensbfq.asia", "coid.biz", "coieo.com", "coin-host.net", "coinlink.club", "cok.org.uk", "colabeta.com", "colaname.com", "coldemail.info", "coldmail.com", "collectiblesuperstore.com", "collector.org", "collegeclub.com", "collegemail.com", "colleges.com", "collegewh.edu.pl", "colorcastmail.com", "columbus.rr.com", "columbusrr.com", "columnist.com", "colurmish.com", "comcast.net", "cometclear.com", "comfythings.com", "comic.com", "commufa.jp", "communityconnect.com", "compareshippingrates.org", "completegolf
5749swing.com", "comporium.net", "comprendemail.com", "compressjpg.io", "compuserve.com", "computer-freak.com", "computer4u.com", "computermail.net", "comwest.de", "comyze.org", "concu.net", "conexcol.com", "conf.work", "confmin.com", "congacone312.shop", "congnguyen.io.vn", "conk.com", "connect4free.net", "connectbox.com", "connected.linkpc.net", "connectifyhub.sbs", "connho.com", "connho.net", "consultant.com", "consumerriot.com", "contaco.org", "contact.infos.st", "contactbox.work", "contactpage.online", "contbay.com", "contractor.net", "contrasto.cu.cc", "convergenceindia.co.in", "cood.food", "cooh-2.site", "cookie007.fr.nf", "cookiemonster.com", "cool.br", "coolandwacky.us", "coole-files.de", "coolgoose.ca", "coolgoose.com", "coolimpool.org", "cooljump.org", "coolkiwi.com", "coollist.com", "coolmail.com", "coolmail.net", "coolsend.com", "coolsite.net", "cooooool.com", "cooperation.net", "cooperationtogo.net", "copacabana.com", "copper.net", "copyhome.win", "coralhost.my", "corbyrise.com", "coreclip.com", "corhash.net", "cornells.com", "cornerpub.com", "cornwallaerospaceeducationtrust.org", "corporatedirtbag.com", "correo.terra.com.gt", "corripo.qzz.io", "cortinet.com", "cosdas.com", "cosmorph.com", "cosoinan.com", "cosycritters.co.uk", "cotas.net", "cotasen.com", "cotigz.com", "counsellor.com", "countrylover.com", "courriel.fr.nf", "courrieltemporaire.com", "cousinment.com", "cox.com", "cox.net", "coxinet.net", "coza.ro", "cozilla.pw", "cpc.cx", "cracker.hu", "crankhole.com", "crapmail.org", "crastination.de", "craventry.cfd", "crazedanddazed.com", "crazespaces.pw", "crazymailing.com", "crazysexycool.com", "crczrsxls.top", "cream.pink", "creative.publicvm.com", "credit-loans.xyz", "crepeau12.com", "cresvyn.cfd", "creteanu.com", "cringemonster.com", "cristianemail.com", "critterpost.com", "croeso.com", "cross-law.ga", "cross-law.gq", "cross.edu.pl", "crosshairs.com", "crossmailjet.com", "crossroadsmail.com", "crosswinds.net", "crunchcompass.com", "cruncoau.asia", "crusthost.com", "crwmail.com", "cry4helponline.com", "cryptoavalonsolhub.cloud", "cryptogmail.com", "cs.com", "cs.email", "csa31vca.sryze.cc", "csapi.dpdns.org", "csh.ro", "csinibaba.hu", "cslua.com", "cspaus.com", "cszbl.com", "ctmailing.us", "ctos.ch", "cttnoot.us", "cu.cc", "cuahangvppn.shop", "cuaks.fun", "cubene.com", "cubiclink.com", "cucadas.com", "cuemail.com", "cuendita.com", "cuentaspelis.top", "cuirushi.org", "cumnnm.us.ci", "cunan.store", "cuoly.com", "cuongaquarium.com", "cupbest.com", "curio-city.com", "curlhph.tk", "currentmail.com", "curryworld.de", "cursor13402.xyz", "cuscuscuspen.life", "cust.in", "cute-girl.com", "cuteandcuddly.com", "cutefrogs.xyz", "cutevi.us", "cutey.com", "cutout.club", "cutradition.com", "cutsup.com", "cuvox.de", "cuvrs.info", "cvcraft.ee.cd", "cvsend.ee.cd", "cwetg.co.uk", "cww.de", "cx.lsa1230.dpdns.org", "cxbl.top", "cxwet.com", "cyber-africa.net", "cyber-innovation.club", "cyber-matrix.com", "cyber-phone.eu", "cyber-wizard.com", "cyber4all.com", "cyberbabies.com", "cybercafemaui.com", "cyberdude.com", "cyberforeplay.net", "cybergal.com", "cybergrrl.com", "cyberinbox.com", "cyberionexus.shop", "cyberleports.com", "cybermail.net", "cybernet.it", "cyberservices.com", "cyberspace-asia.com", "cybertemp.cfd", "cybertemp.xyz", "cybertrains.org", "cycinst.com", "cyclefanz.com", "cyclelove.cc", "cyjd.top", "cylab.org", "cynetcity.com", "cypi.fr", "czx.one", "d-o-t.xxuz.com", "d.729406.xyz", "d1yun.com", "d3p.dk", "daabox.com", "dab.ro", "dabsol.net", "dacoolest.com", "dadacasa.com", "dadaolibai.eu.cc", "daemonixgames.com", "daemsteam.com", "daerdy.com", "daha.com", "dahewushi.eu.cc", "daibond.info", "daily-email.com", "dailynove.com", "dailynutria.com", "dailypioneer.com", "daimuedu.com", "daintly.com", "dakaka.org", "dallasmail.com", "damai.webcam", "dammexe.net", "damnthespam.com", "damowang.eu.cc", "dandikmail.com", "dangerous-minds.com", "dann.mywire.org", "dansegulvet.com", "dantriviet.shop", "dao.pp.ua", "daouse.com", "dapdigital.site", "dapurx.me", "dardr.com", "darkharvestfilms.com", "darkserver.ru", "daryxfox.net", "dasdasdascyka.tk", "dash-pads.com", "data54.com", "dataarca.com", "datadudi.com", "datapinacle.com", "datarca.com", "datazo.ca", "datenschutz.ru", "datgemini.io.vn", "datprovn.io.vn", "datprovnn.io.vn", "datum2.com", "daum.net", "dautubds.io.vn", "davegracey.com", "davidkoh.net", "davidlcreative.com", "davidtrix.biz", "dawin.com", "dawnsonmail.com", "dawnwick.org", "dawsoncountygunclub.org", "dawsonmail.com", "dawushihe.eu.cc", "dawushihehe.eu.cc", "dayizhan.top", "daymail.life", "daymailonline.com", "dayrep.com", "dazedandconfused.com", "dbmail.one", "dboso.com", "dbunker.com", "dbzmail.com", "dcctb.com", "dcemail.com", "dcpa.net", "ddat0511.click", "ddcrew.com", "ddker.com", "ddsdg34.abrdns.com", "de-a.org", "dea-21olympic.com", "deadaddress.com", "deadchildren.org", "deadfake.cf", "deadfake.ga", "deadfake.ml", "deadfake.tk", "deadlymob.org", "deadspam.com", "deagot.com", "deajeng.store", "deal-maker.com", "dealja.com", "deallabs.org", "dealrek.com", "deapad.com", "dearriba.com", "death-star.com", "debitur.cam", "debradev.web.id", "decep.com", "decodewp.com", "decornido.com", "dede.infos.st", "deekayen.us", "deenur.com", "deepconverts.com", "deepmails.org", "deepmaster.fun", "deepneko.xyz", "deepyinc.com", "defomail.com", "degap.fr.nf", "degar.xyz", "degradedfun.net", "dehaopay.com", "deinbox.com", "deisgn-ai.work.gd", "delaeb.com", "delayload.com", "delayload.net", "delikkt.de", "deliveryman.com", "delivrmail.com", "delorex.com", "deltajohnsons.com", "deluxmail.com", "delvionis.cfd", "demen.ml", "dendyadinirwana.my.id", "deneg.net", "dengekibunko.ga", "dengekibunko.gq", "dengekibunko.ml", "denipl.com", "denipl.net", "deno.qzz.io", "dentaguardmouthguard.com", "deornaumail.com", "depdocla.net", "depechemode.com", "der-kombi.de", "derkombi.de", "derluxuswagen.de", "deseretmail.com", "desertmail.com", "desertsundesigns.com", "desfrenes.fr.nf", "deshnetarchadacalculator.one", "designhta.work.gd", "desilota.com", "deskpilot.com", "desmond.eu.cc", "desoz.com", "despam.it", "despammed.com", "desslee.cc.cd", "destin.com", "det.indevs.in", "detik.com", "deutschland-net.com", "dev-null.cf", "dev-null.ga", "dev-null.gq", "dev-null.ml", "devbike.com", "developermail.com", "developtool.app", "devh24.online", "devnullmail.com", "devotedcouples.com", "devsonline.studio", "devthien.io.vn", "deyom.com", "dezigner.ru", "dfghjertyh.dynv6.net", "dfwatson.com", "dfyuih.eu.cc", "dgdf.cc", "dghdfjfd.eu.cc", "dh372.top", "dharmatel.net", "dheiwuy.eu.cc", "dhm.ro", "dhnow.com", "dhoahn.eu.cc", "dhy.cc", "di-ve.com", "dialogus.com", "diapaulpainting.com", "diarshop.com", "dichvuxe24h.com", "dicopto.com", "diddyricky.com", "diddyricky.fr", "diddyricky.info", "diddyricky.store", "die-besten-bilder.de", "die-genossen.de", "die-optimisten.de", "die-optimisten.net", "diemailbox.de", "diemhenvn.com", "digdig.org", "digi-value.fr", "digial.jo3.org", "digibeast.my", "digibeast.store", "digibel.be", "digimaster.eu.cc", "diginey.com", "digital-filestore.de", "digital-message.com", "digitaldesign.run.place", "digitalesbusiness.info", "digitalmail.info", "digitalmariachis.com", "digitalsanctuary.com", "digitecy.live", "dildoe.cfd", "dildosfromspace.com", "dim-coin.com", "dimalk.com", "dingbone.com", "dinlaan.site", "dino.icu", "diolang.com", "dion.ne.jp", "diplom-voronesh.ru", "diplomats.com", "directbox.com", "directmail24.net", "dirtracer.com", "dis.hopto.org", "disaq.com", "disbox.net", "disbox.org", "discard.cf", "discard.email", "discard.ga", "discard.gq", "discard.ml", "discard.tk", "discardmail.com", "discardmail.de", "disciples.com", "discofan.com", "discos4.com", "discoverymail.com", "dishcatfish.com", "disign-concept.eu", "disign-revelation.com", "disinfo.net", "disney.ne.jp", "dispo.in", "dis
5749pomail.eu", "disposable-e.ml", "disposable-email.ml", "disposable.cf", "disposable.com", "disposable.ga", "disposable.ml", "disposable.site", "disposableaddress.com", "disposableemailaddresses.com", "disposableinbox.com", "disposablemails.com", "dispose.it", "disposeamail.com", "disposely.xyz", "disposemail.com", "disposemymail.com", "disposly.com", "dispostable.com", "divad.ga", "divermail.com", "divismail.ru", "diwaq.com", "dixz.net", "dizigg.com", "djiv.xyz", "djwekih.eu.cc", "dkz.opik.net", "dldweb.info", "dlemail.ru", "dm.w3internet.co.uk", "dmail.one", "dmailman.com", "dmailp.cc.cd", "dmarc.ro", "dmcelements.org", "dmts.fr.nf", "dmxs8.com", "dnainternet.net", "dndent.com", "dnkah.eu.cc", "dns.army", "dns.navy", "dnsclick.com", "dnses.ro", "dnslog.tech", "dnsmadeeasy.com", "doanart.com", "dob.jp", "docash.app", "docbao7.com", "doclist.bounces.google.com", "docmail.cz", "docomo.ne.jp", "docs.google.com", "docse.site", "doctor.com", "dodgeit.com", "dodgemail.de", "dodgit.com", "dodgit.org", "dodo.com.au", "dodsi.com", "dog.com", "dogai.qzz.io", "dogclothing.org", "dogit.com", "dogking.dpdns.org", "doglover.com", "dogmail.co.uk", "dogmrp.com", "dogsnob.net", "dohoanganh.site", "doiea.com", "doityourself.com", "doj.one", "dolofan.com", "dolphinnet.net", "domforfb1.tk", "domforfb18.tk", "domforfb19.tk", "domforfb2.tk", "domforfb23.tk", "domforfb27.tk", "domforfb29.tk", "domforfb3.tk", "domforfb4.tk", "domforfb5.tk", "domforfb6.tk", "domforfb7.tk", "domforfb8.tk", "domforfb9.tk", "domozmail.com", "don.edu.pl", "dona.one", "dona.pw", "dona.rip", "doneasy.com", "donebyngle.com", "donemail.my.id", "donemail.ru", "dongqing365.com", "donjuan.com", "donkicode.top", "dontgotmail.com", "dontmesswithtexas.com", "dontreg.com", "dontsendmespam.de", "dontsleep404.com", "donusumekatil.com", "doobb.com", "doojazz.com", "doquier.tk", "doramail.com", "doreact.com", "dorothyfoundation.org", "dostmail.com", "doszo.qzz.io", "dotapodemail.com", "dotcom.fr", "dotman.de", "dotmsg.com", "dotool8.top", "dotos.dev", "dotslashrage.com", "dott.it", "dotvu.net", "dotzi.net", "doublemail.de", "douchelounge.com", "doudizhu.top", "doulas.org", "download-privat.de", "downloadigpost.com", "downloadvideoig.app", "dozvon-spb.ru", "dp76.com", "dpfrufiwo.top", "dplanet.ch", "dpmstore.id.vn", "dpmurt.my", "dpptd.com", "dprasu.sbs", "dr.com", "dr69.site", "dragoncon.net", "dramamixio.icu", "draughtier.com", "drdrb.com", "drdrb.net", "dreamadventure.org", "dreamclarify.org", "dreamgreen.fr.nf", "dreamwiz.com", "dred.ru", "drevo.si", "drewzen.com", "driftz.net", "drimex.cfd", "dripzgaming.com", "drivetagdev.com", "drivz.net", "drmail.in", "droolingfanboy.de", "dropcake.de", "dropinboxes.com", "dropinvo.com", "dropjar.com", "droplar.com", "dropmail.click", "dropmail.me", "dropoffs.org", "dropons.com", "dropsin.net", "dropzone.com", "drotposta.hu", "drovantis.cfd", "drovenix.cfd", "drowblock.com", "drugsellers.com", "druzik.pp.ua", "dschat.asia", "dsfsfdsfds.shop", "dsgvo.party", "dsgvo.ru", "dshfjdafd.cloud", "dshznonline.cc", "dsiay.com", "dsitip.com", "dslab.icu", "dspwebservices.com", "dsqcyy.com", "dti.ne.jp", "dtvpn.dpdns.org", "duam.net", "dubaimail.com", "dublin.com", "dublin.ie", "dubokutv.com", "duck.com", "duck2.club", "duckmail.sbs", "duckyoursick.com", "ducpham.id.vn", "dudmail.com", "dugmail.com", "duk33.com", "dukedish.com", "dukunmodern.id", "dulich84.com", "dulieu.io.vn", "dumalu.com", "dumbass.nl", "dump-email.info", "dumpandjunk.com", "dumpmail.com", "dumpmail.de", "dumpyemail.com", "dunamispfm.org", "dunkos.xyz", "dunlopdriver.com", "dunloprider.com", "duno.com", "duoley.com", "durandinterstellar.com", "duskmail.com", "dusrui.com", "dustinry.com", "dutchmail.com", "duvips.com", "duya25446.top", "dv2.host", "dvaren.online", "dvdpit.com", "dwarfmining.com", "dwiworka.pro", "dwp.net", "dwse.edu.pl", "dwseal.com", "dx.jesys.net", "dyceroprojects.com", "dyclsr.xyz", "dyebkj.eu.cc", "dyera.studio", "dyfgiavcrw.eu.cc", "dygo.com", "dygovil.com", "dymarent.cfd", "dynamitemail.com", "dynarix.cfd", "dyndns.org", "dysonc.com", "dysu.ccwu.cc", "dz17.net", "dzpw.uno", "dztyhd.cn", "e-apollo.lv", "e-mail.com", "e-mail.com.tr", "e-mail.dk", "e-mail.org", "e-mail.ru", "e-mail.ua", "e-mailanywhere.com", "e-mails.ru", "e-marketstore.ru", "e-pool.co.uk", "e-pool.uk", "e-postkasten.de", "e-record.com", "e-tapaal.com", "e-tomarigi.com", "e.729406.xyz", "e3z.de", "e4ward.com", "eacademia.uk", "ealea.fr.nf", "eanok.com", "earthalliance.com", "earthcam.net", "earthdome.com", "earthling.net", "earthlink.net", "earthonline.net", "eartin.net", "ease.es", "eastcoast.co.za", "eastcombe.org", "eastmail.com", "easy-trash-mail.com", "easy.to", "easygbd.com", "easyhomefit.com", "easymailer.live", "easymails.cc", "easynetwork.info", "easypost.com", "easytras
5749hmail.com", "eatmea2z.club", "eay.jp", "ebar.site", "ebbob.com", "ebeschlussbuch.de", "ec.rr.com", "ecallheandi.com", "ecardmail.com", "ecbsolutions.net", "echina.com", "ecolo-online.fr", "ecompare.com", "ecoverseworld.com", "ecstor.com", "edankeunwe.site", "edgepodlab.com", "edgetopgrid.com", "edgex.ru", "edinburgh-airporthotels.com", "edmail.com", "edmondventures.com", "ednatx.com", "edny.net", "edshol.net", "edtnmail.com", "edu-qin.ccwu.cc", "edu.095430.xyz", "edu.ilink91.me", "edu.jgh.ccwu.cc", "edu.jstyo.com", "edu.mutx163.com", "edu.ql2.de5.net", "edu.risai.store", "edu.sbtx1.shop", "edu.yongpeng.us.ci", "edu2.823518.xyz", "educacao.te.pt", "education.nyc.mn", "edudingy.cfd", "eduip.eu.org", "edumail.edu.pl", "edumail.edu.rs", "edumaili.com", "edumaili.edu.pl", "edumaill.edu.pl", "edupolska.edu.pl", "edv.to", "ee1.pl", "ee2.pl", "eeedv.de", "eelmail.com", "eelraodo.com", "eemail.eu.cc", "eeu.jp", "eewmaop.com", "efdsdsdw.cloud-ip.cc", "effobe.com", "efxs.ca", "eg.hamroemail.com", "egg5233.com", "egg5233.one", "eggbanjos.org", "eggso.click", "eggur.com", "egirl.help", "egvoo.com", "egzones.com", "ehmail.com", "einmalmail.de", "einrot.com", "einrot.de", "eintagsmail.de", "einzieg.site", "eircom.net", "eiveg.com", "ekot.xyz", "elafans.com", "eldobhato-level.hu", "elearningjournal.org", "electro.mn", "electrochillplanet.com", "electrolabx.com", "elerso.com", "eligou.store", "elisanet.fi", "elitemail.org", "elitevipatlantamodels.com", "elixora.cfd", "eljawir.com", "elki-mkzn.ru", "elobits.com", "elondonteam.work.gd", "elpisproject.org", "elsitio.com", "elumetra.cfd", "elvis.com", "elvisfan.com", "elygifts.com", "em.rc0101.site", "em.ucu.de5.net", "email-68.com", "email-fake.cf", "email-fake.com", "email-fake.ga", "email-fake.gq", "email-fake.ml", "email-fake.tk", "email-free.online", "email-jetable.fr", "email-lab.com", "email-london.co.uk", "email-temp.com", "email.biz", "email.cbes.net", "email.com", "email.cz", "email.edu.pl", "email.ee", "email.fibcbxa.shop", "email.it", "email.net", "email.nu", "email.org", "email.qing-meng.top", "email.ro", "email.ru", "email.si", "email.su", "email.tattoo", "email.timqotu.uk", "email.ua", "email1.pro", "email10p.org", "email2me.net", "email4u.info", "email60.com", "email84.com", "emailabox.pro", "emailacc.com", "emailaccount.com", "emailage.cf", "emailage.ga", "emailage.gq", "emailage.ml", "emailage.tk", "emailaoa.pro", "emailasia1.com", "emailasso.net", "emailate.com", "emailawb.pro", "emailax.pro", "emailbbox.pro", "emailbin.net", "emailboxer.one", "emailcbox.pro", "emailchoice.com", "emailcoffeehouse.com", "emailcorner.net", "emailcu.icu", "emaildark.fr.nf", "emaildbox.pro", "emaildienst.de", "emaildrop.io", "emailem.com", "emailengine.net", "emailengine.org", "emailer.hubspot.com", "emailfake.com", "emailfake.ml", "emailforyou.info", "emailforyou.net", "emailfoxi.pro", "emailfreedom.ml", "emailgen.uk", "emailgenerator.de", "emailgo.de", "emailgroups.net", "emailhook.site", "emailias.com", "emailigo.de", "emailinbo.live", "emailinfive.com", "emailisvalid.com", "emailit.com", "emailjps.com", "emailkp.com", "emaillime.com", "emailluu.asia", "emailmiser.com", "emailmuaqat.shop", "emailna.co", "emailnator.com", "emailnax.com", "emailnow.net", "emailnow.one", "emailo.pro", "emailondeck.com", "emailpinoy.com", "emailplanet.com", "emailplay.org", "emailplus.org", "emailportal.info", "emailproxsy.com", "emailqu.bond", "emailqu.com", "emailracc.com", "emailresort.com", "emailrod.com", "emails.ga", "emails.incisivemedia.com", "emails.ru", "emailsecurer.com", "emailsensei.com", "emailsingularity.net", "emailspam.cf", "emailspam.ga", "emailspam.gq", "emailspam.ml", "emailspam.tk", "emailsy.info", "emailtech.info", "emailtemporanea.com", "emailtemporanea.net", "emailtemporar.ro", "emailtemporario.com.br", "emailthe.net", "emailtik.com", "emailtmp.com", "emailto.de", "emailuae.com", "emailure.net", "emailuser.net", "emailvb.pro", "emailviet.com", "emailviettel.my", "emailwarden.com", "emailwww.pro", "emailx.net", "emailxfer.com", "emaily.pro", "emailz.cf", "emailz.ga", "emailz.gq", "emailz.ml", "ematic.com", "emaxasp.com", "embarqmail.com", "embassybase.com", "embege.xyz", "embekhoe.com", "emby.ad.sd", "emeil.in", "emeil.ir", "emeraldwebmail.com", "emergencymail.site", "emergentvillage.org", "emil.com", "emkei.cf", "emkei.ga", "emkei.gq", "emkei.ml", "emkei.tk", "eml.cc", "eml.pp.ua", "emlhot.com", "emlhub.com", "emlpro.com", "emltmp.com", "emnet.ne.jp", "emobile.ne.jp", "emocan.name.tr", "emoij.indevs.in", "empireanime.ga", "empva.io.vn", "empva1.com", "empva1.io.vn", "empva11.com", "empva11.io.vn", "emstjzh.com", "emz.net", "emziegz.com", "enajsndasd.eu.cc", "enayu.com", "end-war.com", "end.tw", "endingimpunity.com", "endob.com", "enel.net", "engineer.com", "england.com", "england.edu", "englandmail.com", "enotj.com", "enspinner.com", "enterto.com", "entry.edu.kg", "envy17.com", "eoffice.top", "eonet.ne.jp", "eoopy.com", "eosada.com", "eoslux.com", "eoutrbl.com", "ep77.com", "epage.ru", "epatra.com", "epaynine.com", "epb.ro", "epbox.ru", "epbox.store", "epetsoft.com", "ephemail.net", "ephemeral.email", "epix.net", "epost.de", "eposta.buzz", "eposta.hu", "eposta.work", "epostal.ru", "epostal.store", "epsteinisland.click", "epurcf.org", "eqiluxspam.ga", "eqqu.com", "equivara.cfd", "erahods.com", "eramail.co.za", "ereplyzy.com", "eresmas.com", "ericjohnson.ml", "eriga.lv", "eripo.net", "ero-tube.org", "erth.nl", "es3368266.dpdns.org", "esadverse.com", "esbano-ru.ru", "esc.la", "escapehatchapp.com", "esemay.com", "esgeneri.com", "eshimod.com", "esiix.com", "esprity.com", "estate-invest.fr", "esterace.com", "estranet.it", "estrowebservices.com", "etempmail.net", "etenx.com", "eth2btc.info", "ether123.net", "ethereum1.top", "ethersports.org", "ethersportz.info", "ethos.st", "etics.us", "etoast.com", "etotvibor.ru", "etquakemultimedia.com", "etrademail.com", "etramay.com", "etranquil.com", "etranquil.net", "etranquil.org", "etubemail.com", "etzg.de5.net", "euaqa.com", "eudoramail.com", "euleina.com", "eulercraft.com", "eurokool.com", "europamel.net", "europe.com", "europemail.com", "euroseek.com", "eurosport.com", "euucn.com", "evanfox.info", "eve.dpdns.org", "eveav.com", "every1.net", "everyday.com.kh", "everymail.net", "everyone.net", "everytg.ml", "evilcomputer.com", "evilgodshop.uk", "evnft.com", "evomiserver.com", "evontra.cfd", "evopo.com", "evusd.com", "evvgo.com", "evyush.com", "ewebrus.com", "exahut.com", "examcentral.co.uk", "examnotes.net", "examstudy.xyz", "exbts.com", "excite.co.jp", "excite.com", "excite.it", "exclussi.com", "exdonuts.com", "execs.com", "exelica.com", "exemail.com.au", "exespay.com", "exg6.exghost.com", "exhaycle.com", "exile.my.id", "existiert.net", "exitbit.com", "exitstageleft.net", "exkucn.ccwu.cc", "exmab.com", "expiredtoaster.org", "explodemail.com", "expltain.com", "express.net.ua", "expressasia.com", "extenda.net", "extended.com", "extracurricularsociety.com", "extraku.net", "extraku.shop", "extremail.ru", "extrset.com", "exwa.org", "exweme.com", "ey-hungry.top", "eycfhb.com", "eyepaste.com", "eynlong.com", "eyou.com", "ez.lv", "ezai.chat", "ezcybersearch.com", "ezehe.com", "ezfill.com", "ezimb.com", "ezmail.egine.com", "ezmail.ru", "ezonemail.com", "ezrs.com", "ezstest.com", "ezua.com", "ezweb.ne.jp", "ezztt.com", "f-m.fm", "f1fans.net", "f4k.es", "fabaos.com", "facebook-email.cf", "facebook-email.ga", "facebook-email.ml", "facebook.com", "facebookmail.com", "facebookmail.gq", "facebookmail.ml", "facemac.website", "fackme.gq", "fadingemail.com", "fadsfdsfaa.indevs.in", "faecesmail.me", "fafa.beer", "fag.wf", "fahr-zur-hoelle.org", "failbone.com", "faithkills.com", "faizasoft.com", "fake-box.com", "fake-email.pp.ua", "fake-mail.cf", "fake-mail.ga", "fake-mail.ml", "fake.legal", "fakedemail.com", "fakeinbox.cf", "fakeinbox.com", "fakeinbox.ga", "fakeinbox.info", "fakeinbox.ml", "fakeinbox.tk", "fakeinformation.com", "fakemail.fr", "fakemail.io", "fakemail.net", "fakemailgenerator.com", "fakemailz.com", "falconryadventurecentreofeducation.com", "fallinhay.com", "falseaddress.com", "famamail.com", "fammix.com", "fan.com", "fanclub.pm", "fandoe.com", "fangoh.com", "fangxiaobai.us.ci", "fangxiaobai1.us.ci", "fanicle.com", "fansonlymail.com", "fansworldwide.de", "fantasticmail.com", "fantastu.com", "fantasy139.icu", "fantasymail.de", "fanymail.com", "farah.rip", "farang.net", "farifluset.mailexpire.com", "faroweb.com", "farrse.co.uk", "fasl4kas3.site", "fasssd.ru", "fasssd.store", "fast-email.com", "fast-email.info", "fast-mail.fr", "fast-mail.org", "fastacura.com", "fastchevy.com", "fastchrysler.com", "fastem.com", "fastemail.us", "fastemailer.com", "fastermail.com", "fasternet.biz", "fastest.cc", "fastestflex.com", "fastimap.com", "fastinbox.one", "fastkawasaki.com", "fastmail.ca", "fastmail.cn", "fastmail.co.uk", "fastmail.com", "fastmail.com.au", "fastmail.edu.pl", "fastmail.es", "fastmail.fm", "fastmail.im", "fastmail.in", "fastmail.jp", "fastmail.mx", "fastmail.net", "fastmail.nl", "fastmail.se", "fastmail.to", "fastmail.tw", "fastmail.us", "fastmailbox.net", "fastmazda.com", "fastmessaging.com", "fastmitsubishi.com", "fastnissan.com", "fastsearcher.com", "fastservice.com", "fastsubaru.com", "fastsuzuki.com", "fasttoyota.com", "fastyamaha.com", "fatcock.net", "fatebd.com", "fatflap.com", "fathersrightsne.org", "fax.ru", "faxico.c
5749om", "faxzu.com", "faybetsy.com", "fazka.ovh", "fbhotro.com", "fbi-agent.com", "fbi.hu", "fbi.one", "fbins001mail.com", "fbins607.com", "fbkjlnry.top", "fblgsl.cam", "fbma.tk", "fboxmail.com", "fbviamail.com", "fcetpkqwm.top", "fddns.ml", "fdfdsfds.com", "fdfggh-df5.cc", "fdhsui.eu.cc", "fdmail.top", "fdsgsd.org", "fdvctte.info", "fea.st", "featcore.com", "federalcontractors.com", "feelmyheartwithsong.com", "feinripptraeger.de", "feitutu.com", "felicitymail.com", "femailtor.com", "femenino.com", "fengzheng.qzz.io", "fenzhuai.top", "fer-gabon.org", "feralrex.com", "ferd.live", "ferdomnermail.com", "feriwor.com", "fermaxxi.ru", "ferngrove.org", "feroxid.com", "fetchmail.co.uk", "fettabernett.de", "fettometern.com", "fexbox.org", "fexbox.ru", "fexpost.com", "fextemp.com", "feyenoorder.com", "ffanet.com", "fft.edu.do", "fgmail.cyou", "fhoau.eu.cc", "fhpfhp.fr.nf", "fhwui.eu.cc", "fhwyuoia.eu.cc", "fiallaspares.com", "fiberia.com", "fibmail.com", "ficken.de", "fictionsite.com", "fightallspam.com", "fighthunger.co.uk", "fightingzebras.org", "figjs.com", "figshot.com", "figurescoin.com", "fiifke.de", "filbert4u.com", "filberts4u.com", "file2drive.com", "filetodrive.com", "filipinolinks.com", "film-blog.biz", "filmla.org", "filzmail.com", "finacenter.com", "financemail.net", "financier.com", "findemail.info", "findids.net", "findmail.com", "findmeghana.org", "findu.pl", "finebody.com", "finews.biz", "fingso.com", "finsmine.info", "fir.hk", "fira.my", "fire-brigade.com", "firemail.com.br", "firemailbox.club", "fireman.net", "firerocket.site", "firstaidtrainingschool.co.uk", "firstlawyer.org", "fisdom.vip", "fishburne.org", "fishfuse.com", "fitbloomlab.com", "fitnesrezink.ru", "fitzola.com", "fivemail.de", "fivermail.com", "fixmail.tk", "fizmail.com", "fkainc.com", "fknm8.mobi", "flaimenet.ir", "flameoflovedegree.com", "flashbox.5july.org", "flashemail.site", "flashmail.com", "flashmail.net", "flatimostore.cloud", "flavourity.com", "flayeraaron.eu.cc", "flayerhu.eu.cc", "fleckens.hu", "flemail.ru", "flews.app", "flexvio.com", "fliegender.fish", "flipcode.com", "flobo.fr.nf", "flock84.uk", "florevia.cfd", "flosek.com", "flowconnect.beer", "flowmail.site", "flowu.com", "flu.cc", "fluidsoft.us", "fluix.qzz.io", "flurred.com", "fly-ts.de", "flyhubs.top", "flyinggeek.net", "flymail.tk", "flyovertrees.com", "flyspam.com", "flywaverun.com", "flyzy.net", "fmail.co.uk", "fmailbox.com", "fmgirl.com", "fmguy.com", "fmuss.com", "fnbmail.co.za", "fncp.ru", "fncp.store", "fnmail.com", "fog.one", "foic.top", "folkfan.com", "foobarbot.net", "foodmail.com", "footard.com", "footballmail.com", "foothills.net", "foothilltoy.site", "for-president.com", "for4u.net", "forapps.space", "force9.co.uk", "foreastate.com", "forecastertests.com", "foreskin.cf", "foreskin.ga", "foreskin.gq", "foreskin.ml", "foreskin.tk", "forexnews.bg", "forexru.com", "forexzig.com", "forfree.at", "forge45k.io.vn", "forgetmail.com", "forgetmenotstudio.org.uk", "forliion.com", "formodapk.com", "fornow.eu", "forpresident.com", "forregmail.asia", "forregmail.xyz", "forspam.net", "fortuncity.com", "fortunecity.com", "forum.dk", "forum.nyc.mn", "forward.cat", "fosil.pro", "foxja.com", "foxmail.com", "foxnew.info", "foxtrotter.info", "fpt-student-support.store", "fr.cr", "fr33mail.info", "fragolina2.tk", "francemel.fr", "frankhealeyfoundation.org", "frapmail.com", "frappina.tk", "frederictonlawyer.com", "free-email.cf", "free-email.ga", "free-online.net", "free-org.com", "free-temp-mail.eu.org", "free-temp.net", "free.com.pe", "free.fr", "freeaccess.nl", "freeaccount.com", "freeandsingle.com", "freebabysittercam.com", "freeblackbootytube.com", "freecat.net", "freechal.com", "freecustom.email", "freedom.usa.com", "freedom4you.info", "freedomcentremereside.org", "freedomlover.com", "freedompop.us", "freedrops.org", "freefattymovies.com", "freegates.be", "freeghana.com", "freegrok.cc.cd", "freehotmail.net", "freeimagehosts.org", "freeimghost.org", "freeinbox.email", "freelance-france.eu", "freeler.nl", "freeletter.me", "freemail.c3.hu", "freemail.com.au", "freemail.com.pk", "freemail.de", "freemail.et", "freemail.gr", "freemail.hu", "freemail.it", "freemail.lt", "freemail.ms", "freemail.ne.jp", "freemail.nl", "freemail.org.mk", "freemails.cf", "freemails.ga", "freemails.ml", "freemails.pp.ua", "freemeil.ga", "freemeil.gq", "freemeil.ml", "freeml.net", "freemyops.com", "freenet.de", "freenet.kg", "freeola.com", "freeola.net", "freeplumpervideos.com", "freerubli.ru", "freeschoolgirlvids.com", "freeserve.co.uk", "freesistercam.com", "freesourcecodes.com", "freestart.hu", "freesurf.fr", "freesurf.nl", "freeteenbums.com", "freetimer.online", "freeuk.com", "freeuk.net", "freeukisp.co.uk", "freeweb.org", "freewebemail.com", "freeyellow.com", "freezone.co.uk", "fresnomail.com", "freudenkinder.de", "freundin.ru", "friday12.store", "friendlymail.co.uk", "friends-cafe.com", "friendsfan.com", "friendsofbram.com", "frm.ovh", "from-africa.com", "from-america.com", "from-argentina.com", "from-asia.com", "from-australia.com", "from-belgium.com", "from-brazil.com", "from-canad
5749a.com", "from-china.net", "from-england.com", "from-europe.com", "from-france.net", "from-germany.net", "from-holland.com", "from-israel.com", "from-italy.net", "from-japan.net", "from-korea.com", "from-mexico.com", "from-outerspace.com", "from-russia.com", "from-spain.net", "fromalabama.com", "fromalaska.com", "fromarizona.com", "fromarkansas.com", "fromcalifornia.com", "fromcolorado.com", "fromconnecticut.com", "fromdelaware.com", "fromflorida.net", "fromgeorgia.com", "fromhawaii.net", "fromidaho.com", "fromillinois.com", "fromindiana.com", "fromiowa.com", "fromjupiter.com", "fromkansas.com", "fromkentucky.com", "fromlouisiana.com", "frommaine.net", "frommaryland.com", "frommassachusetts.com", "frommiami.com", "frommichigan.com", "fromminnesota.com", "frommississippi.com", "frommissouri.com", "frommontana.com", "fromnebraska.com", "fromnevada.com", "fromnewhampshire.com", "fromnewjersey.com", "fromnewmexico.com", "fromnewyork.net", "fromnorthcarolina.com", "fromnorthdakota.com", "fromohio.com", "fromoklahoma.com", "fromoregon.net", "frompennsylvania.com", "fromrhodeisland.com", "fromru.com", "fromsouthcarolina.com", "fromsouthdakota.com", "fromtennessee.com", "fromtexas.com", "fromthestates.com", "fromutah.com", "fromvermont.com", "fromvirginia.com", "fromwashington.com", "fromwashingtondc.com", "fromwestvirginia.com", "fromwisconsin.com", "fromwyoming.com", "front.ru", "front14.org", "frontier.com", "frontiernet.net", "frostbyte.uk.net", "frostmail.fr.nf", "frostypeak.info", "fruitservice.xyz", "frwdmail.com", "frza.me", "fsercure.online", "fsitip.com", "fsmail.net", "ftc-i.net", "fthcapital.com", "ftml.net", "ftp.sh", "ftpinc.ca", "fuckedupload.com", "fuckingduh.com", "fuckme69.club", "fuckneo.org", "fucknloveme.top", "fuckxxme.top", "fudgerub.com", "fudier.com", "fuirio.com", "fuk996.icu", "fukaru.com", "fukurou.ch", "fullangle.org", "fullmail.com", "fulvie.com", "fumemail.com", "fun4k.com", "fun64.com", "fundapk.com", "fundproceed.com", "funkfan.com", "funnycodesnippets.com", "funnyfail.app", "funnylolcap.com", "funnylolcap.fr", "funnylolcap.org", "funnylolcap.store", "funnymail.abrdns.com", "funnymail.de", "funteka.com", "fuorissimo.com", "furnitureprovider.com", "furzauflunge.de", "fuse.net", "fusioninbox.com", "fut.es", "futuramind.com", "fuvk.ru", "fuvk.store", "fuwa.be", "fuwa.li", "fuwamofu.com", "fuwari.be", "fux0ringduh.com", "fviadropinbox.com", "fviainboxes.com", "fviamail.com", "fviamail.work", "fwfw.app", "fwnb.com", "fxavaj.com", "fxnxs.com", "fxsmails.com", "fxtubes.com", "fxxf.beer", "fxzig.com", "fycloud.online", "fyeiwh.eu.cc", "fyii.de", "fynix.sbs", "fyronex.cfd", "fzylala123.cf", "g-mail.biz.id", "g-mail.kr", "g14l71lb.com", "g1xmail.top", "g2xmail.top", "g3xmail.top", "g4hdrop.us", "gacharevenue.cc", "gafy.net", "gagcalculator.me", "gage.ga", "gakhum.com", "galaxim.fr.nf", "galaxy.tv", "galaxy5.com", "galaxyhit.com", "galebird.cc.cd", "gally.jp", "gam1fy.com", "gamadaiz.shop", "gamail.top", "gamapa.asia", "gamebcs.com", "gamebox.net", "gamegeek.com", "gamegregious.com", "gamepec.com", "gamesense.eu.cc", "gamespotmail.com", "gamgling.com", "gamno.config.work", "ganlin.shop", "garasikita.pw", "garbage.com", "garbagecollector.org", "garbagemail.org", "gardener.com", "gardenscape.ca", "gardu.codes", "garizo.com", "garliclife.com", "garrymccooey.com", "gashoainam.io.vn", "gassmail.com", "gasuda.com", "gav0.com", "gavrom.com", "gawab.com", "gaxetovemail.com", "gaybrighton.co.uk", "gaza.net", "gazeta.pl", "gazibooks.com", "gbcmail.win", "gblw.help", "gblw.site", "gbmail.top", "gci.net", "gcmail.top", "gdcrm.store", "gddp2018.edu.vn", "gdfgergrer.online", "gdmail.top", "gdqoe.net", "gdxs.cc.cd", "gear3.pro", "gebrauchtwarencenter.com", "gedmail.win", "geecities.com", "geek.com", "geek.hu", "geekforex.com", "geeklife.com", "geeksun.us.ci", "geew.ru", "gehensiemirnichtaufdensack.de", "geldwaschmaschine.de", "gelitik.in", "gemapan.com", "gemipro1.store", "gemmarosefoundation.co.uk", "gemniultra.me", "gencmail.com", "gendeng.indevs.in", "genderfuck.net", "general-hospital.com", "generator.email", "generator1email.com", "gentleinfopath.com", "gentlemansclub.de", "genzmaile.com", "genzotp.com", "genztrang.com", "geocities.com", "geography.net", "geologist.com", "geometrics.icu", "geopia.com", "georgefletcher.org.uk", "georgeheddon.co.uk", "gepohwh.cn", "germanymail.com", "geronra.com", "gerv.app", "geschent.biz", "get-mail.cf", "get-mail.ga", "get-mail.ml", "get-mail.tk", "get.pp.ua", "get1mail.com", "get2mail.fr", "getai-hub.com", "getairmail.cf", "getairmail.com", "getairmail.ga", "getairmail.gq", "getairmail.ml", "getairmail.tk", "getasail.com", "getbloomdata.com", "getbox89.xyz", "geteit.com", "getemail.digital", "getemail.guru", "getemail.live", "getfun.men", "getgptcode.com", "getmail.my.id", "getmail1.com", "getmailfree.cc", "getmails.eu", "getmails.top", "getmule.com", "getnada.cc", "getnada.com", "getnowtoday.cf", "getol.pro", "getonemail.com", "getonemail.net", "getotp.fun", "getover.de", "getsimpleemail.com", "gett.icu", "gewalusitest1.cloud-ip.cc", "gexik.com", "gghjnvgfyjhk.top", "ggmal.ml", "ggrainn.com", "ggvendas.store", "ggvk.ru", "ggvk.store", "ggxhunter.com", "ghanamail.com", "gheo.top", "ghk55.us", "gholar.com", "ghostmail.com", "ghosttexter.de", "ghvv.click", "gi-mel.web.id", "giacmosuaviet.info", "giaiphapmuasam.com", "giantmail.de", "giare.fun", "gibq.top", "gicont.com", "gifto12.com", "giga4u.de", "gigileung.org", "gilberta.syrf109475.top", "gimbmail.com", "gimme-cooki.es", "gimpmail.com", "gimuemoa.fr.nf", "ginzi.be", "ginzi.co.uk", "ginzi.es", "ginzi.net", "ginzy.c
5749o.uk", "ginzy.eu", "giodaingan.com", "gioidev.news", "giratex.com", "girl4god.com", "girlfriend.ru", "girlmail.win", "girlsindetention.com", "girlsundertheinfluence.com", "gishpuppy.com", "gislinghamsilverband.com", "github-com-disposable-email-domains.loseyourip.com", "giveh2o.info", "givememail.club", "givemetoken.xin", "givepeaceachance.com", "givmail.com", "gixenmixen.com", "gixpos.com", "gkd2323c.in", "gladogmi.fr.nf", "glaventra.cfd", "glaviu.icu", "glay.org", "glcspp.top", "glendale.net", "gli.dpdns.org", "glitch.sx", "global-1.huggingface.qzz.io", "globalbizflow.com", "globalcampus.edu.pl", "globalfree.it", "globalpagan.com", "globalsite.com.br", "globaltouron.com", "glorylandconnections.com", "gls-info.help", "glubex.com", "glucosegrin.com", "gmaiil.top", "gmail-kuu.my.id", "gmail-xsniper.com", "gmail-xsniper.site", "gmail-xsniper.space", "gmail.2kkkk.cn", "gmail.cd558.dedyn.io", "gmail.com", "gmail.com.br", "gmail.h5ma.cn", "gmail.ru", "gmail.twitter.xwle.me", "gmail2.gq", "gmaill.click", "gmaillive.cloud", "gmaillk.com", "gmailot.com", "gmailxsn.com", "gmailxsn.site", "gmailxsn.space", "gmailxyz.bond", "gmatch.org", "gmeenramy.com", "gmel.biz.id", "gmel.my.id", "gmells.com", "gmial.com", "gmneel.eu.cc", "gmx.at", "gmx.ch", "gmx.com", "gmx.de", "gmx.li", "gmx.net", "gmx1mail.top", "gmxmail.top", "gmxmail.win", "gnctr-calgary.com", "gng.edu.pl", "gni8.com", "gnwzqaz.shop", "go.com", "go.ro", "go.ru", "go2farm.io.vn", "go2net.com", "go2usa.info", "go2vpn.net", "goatmail.uk", "gob.re", "gocollege.com", "gocubs.com", "godfare.com", "goemailgo.com", "goeschman.com", "gofree.co.uk", "gohivezone.com", "gokublue.me", "gol.com", "gold.edu.pl", "goldenmagpies.com", "goldenmail.ru", "goldinbox.net", "goldivis.work.gd", "goldmail.ru", "goldtoolbox.com", "golemico.com", "goleudy.org.uk", "golfemail.com", "golfilla.info", "golfmail.be", "goliszek.net", "gomail.in", "gomail.my.id", "gomomy.sbs", "gonavy.net", "gongjua.com", "gonida.co.uk", "gonida.com", "gonida.uk", "gonrr.net", "goodnewsmail.com", "goodstick.com", "googl.win", "google.twitter.5117888.xyz", "googlegroups.com", "googlemail.com", "goomail.club", "goonby.com", "gooner.cat", "goplay.com", "goplaygame.ru", "gorillaswithdirtyarmpits.com", "gorontalo.net", "goround.info", "gosarlar.com", "gospelfan.com", "gosuslugi-spravka.ru", "gothere.biz", "gothere.uk.com", "gotmail.com", "gotmail.net", "gotmail.org", "gotomy.com", "gotrak.org", "gotti.otherinbox.com", "gov.555016.xyz", "gowikibooks.com", "gowikicampus.com", "gowikicars.com", "gowikifilms.com", "gowikigames.com", "gowikimusic.com", "gowikinetwork.com", "gowikitravel.com", "gowikitv.com", "gportal.hu", "gpt-mail-free-1200.dynv6.net", "gpt-mail-free-140.dynv6.net", "gpt-mail-free-1427.dynv6.net", "gpt-mail-free-1550.dynv6.net", "gpt-mail-free-161.dynv6.net", "gpt-mail-free-1694.dynv6.net", "gpt-mail-free-1721.dynv6.net", "gpt-mail-free-1980.dynv6.net", "gpt-mail-free-1998.dynv6.net", "gpt-mail-free-2019.dynv6.net", "gpt-mail-free-2049.dynv6.net", "gpt-mail-free-2109.dynv6.net", "gpt-mail-free-2141.dynv6.net", "gpt-mail-free-2307.dynv6.net", "gpt-mail-free-2310.dynv6.net", "gpt-mail-free-2375.dynv6.net", "gpt-mail-free-248.dynv6.net", "gpt-mail-free-2491.dynv6.net", "gpt-mail-free-3.dynv6.net", "gpt-mail-free-3074.dynv6.net", "gpt-mail-free-3093.dynv6.net", "gpt-mail-free-3127.dynv6.net", "gpt-mail-free-3291.dynv6.net", "gpt-mail-free-3330.dynv6.net", "gpt-mail-free-3348.dynv6.net", "gpt-mail-free-3476.dynv6.net", "gpt-mail-free-3527.dynv6.net", "gpt-mail-free-366.dynv6.net", "gpt-mail-free-3792.dynv6.net", "gpt-mail-free-3927.dynv6.net", "gpt-mail-free-4111.dynv6.net", "gpt-mail-free-4547.dynv6.net", "gpt-mail-free-4771.dynv6.net", "gpt-mail-free-4775.dynv6.net", "gpt-mail-free-4788.dynv6.net", "gpt-mail-free-4821.dynv6.net", "gpt-mail-free-4900.dynv6.net", "gpt-mail-free-5018.dynv6.net", "gpt-mail-free-5182.dynv6.net", "gpt-mail-free-5211.dynv6.net", "gpt-mail-free-5226.dynv6.net", "gpt-mail-free-5241.dynv6.net", "gpt-mail-free-5261.dynv6.net", "gpt-mail-free-5386.dynv6.net", "gpt-mail-free-5406.dynv6.net", "gpt-mail-free-551.dynv6.net", "gpt-mail-free-5539.dynv6.net", "gpt-mail-free-561.dynv6.net", "gpt-mail-free-5659.dynv6.net", "gpt-mail-free-574.dynv6.net", "gpt-mail-free-5902.dynv6.net", "gpt-mail-free-6067.dynv6.net", "gpt-mail-free-610.dynv6.net", "gpt-mail-free-6221.dynv6.net", "gpt-mail-free-6289.dynv6.net", "gpt-mail-free-6320.dynv6.net", "gpt-mail-free-6342.dynv6.net", "gpt-mail-free-6397.dynv6.net", "gpt-mail-free-6419.dynv6.net", "gpt-mail-free-6603.dynv6.net", "gpt-mail-free-6664.dynv6.net", "gpt-mail-free-6691.dynv6.net", "gpt-mail-free-6779.dynv6.net", "gpt-mail-free-6812.dynv6.net", "gpt-mail-free-6925.dynv6.net", "gpt-mail-free-6962.dynv6.net", "gpt-mail-free-7208.dynv6.net", "gpt-mail-free-7298.dynv6.net", "gpt-mail-free-7493.dynv6.net", "gpt-mail-free-7548.dynv6.net", "gpt-mail-free-7572.dynv6.net", "gpt-mail-free-7582.dynv6.net", "gpt-mail-free-7689.dynv6.net", "gpt-mail-free-7939.dynv6.net", "gpt-mail-free-8015.dynv6.net", "gpt-mail-free-8049.dynv6.net", "gpt-mail-free-8591.dynv6.net", "gpt-mail-free-86.dynv6.net", "gpt-mail-free-861.dynv6.net", "gpt-mail-free-8611.dynv6.net", "gpt-mail-free-8671.dynv6.net", "gpt-mail-free-8773.dynv6.net", "gpt-mail-free-8786.dynv6.net", "gpt-mail-free-8791.dynv6.net", "gpt-mail-free-882.dynv6.net", "gpt-mail-free-8886.dynv6.net", "gpt-mail-free-8933.dynv6.net", "gpt-mail-free-8944.dynv6.net", "gpt-mail-free-902.dynv6.net", "gpt-mail-free-9243.dynv6.net", "gpt-mail-free-9307.dynv6.net", "gpt-mail-free-9446.dynv6.net", "gpt-mail-free-9502.dynv6.net", "gpt-mail-free-9515.dynv6.net", "gpt-mail-free-9584.dynv6.net", "gpt-mail-free-9609.dynv6.net", "gpt-mail-free-9620.dynv6.net", "gpt-mail-free-9695.dynv6.net", "gpt-mail-free-9825.dynv6.net", "gpt-mail-free-9935.dynv6.net", "gpt-mail.myftp.org", "gpt.521weiya.com", "gpt20260701.top", "gptmail.cc.cd", "gptmail.us.ci", "gptmail.webredirect.org", "gptworkone.dev", "gpxmail.win", "grabafilafoundation.org", "gracetvglobal.com", "graduate.org", "graffiti.net", "gramszu.net", "grandmamail.com", "grandmasmail.com", "graphic-designer.com", "graphicanal.site", "graphicbulk.site", "graphicdany.site", "graphicedge.click", "graphicedge.io.vn", "graphicedge.site", "graphicedge.tokyo", "graphicenda.site", "graphiclean.click", "graphiclean.io.vn", "graphiclean.site", "graphiclean.tokyo", "graphiclens.site", "graphiclever.site", "graphicmen.site", "grapplers.com", "grassdev.com", "gratisweb.com", "gravexia.cfd", "gravityengine.cc", "great-host.in", "greencafe24.com", "greendike.com", "greenhousemail.com", "greenmail.net", "greensloth.com", "greenvin.io.vn", "greggamel.com", "greggamel.net", "gregorsky.zone", "gregorygamel.com", "gregorygamel.net", "grendel.qzz.io", "grimstroke.me", "grish.de", "gristod.my", "griuc.schule", "grn.cc", "grok.songseed.cn", "grok.tempmail.us.ci", "grok6.ilink91.me", "grok711.ilink91.me", "groklan.com", "groupbuff.com", "groupmail.com", "grovane.com", "grqccqbwg.top", "grr.la", "gruene-no-thanks.xyz", "grugrug.ru", "grungecafe.com", "gruz-m.ru", "gs-arc.org", "gsoleyfoyle.org.uk", "gsredcross.org", "gsrv.co.uk", "gsxstring.ga", "gtfacintl.com", "gthyjuytr.dynv6.net", "gtmc.net", "gts.cc.cd", "gua.net", "guanshuyun.com", "gudanglowongan.com", "gudri.com", "guerillamail.biz", "guerillamail.com", "guerillamail.de", "guerillamail.info", "guerillamail.net", "guerillamail.org", "guerillamailblock.com", "guerrillamail.biz", "guerrillamail.com", "guerrillamail.de", "guerrillamail.info", "guerrillamail.net", "guerrillamail.org", "guerrillamailblock.com", "guessmail.com", "gufacoding.com", "gufum.com", "guima2.asia", "guju.net", "gukox.org", "guozivpn.cc.cd", "gustr.com", "guy.com", "guy2.com", "guyanafriends.com", "guysmail.com", "guyuan.ccwu.cc", "gxemail.men", "gxmail.top", "gyan-netra.com", "gyknife.com", "gynzi.co.uk", "gynzi.es", "gyorsposta.com", "gyorsposta.hu", "gzb.ro", "gzeos.com", "h-mail.us", "h0tmaii.com", "h2beta.com", "h8s.org", "ha92.store", "hab-verschlafen.de", "haben-wir.com", "habenwir.com", "habitnestguide.com", "habitue.net", "habmalnefrage.de", "hacccc.com", "hackermail.com", "hackermail.net", "hackersquad.tk", "hacknapp.com", "hackthatbit.ch", "hahaudhsuhuhvs.ygto.com", "hahawrong.com", "hai666.sbs", "haibabon.com", "haibaipei.ccwu.cc", "haida-edu.cn", "hailmail.net", "hailu.publicvm.com", "hairdresser.net", "hairs24.ru", "halamaridfcfs.site", "halashao1.dpdns.org", "halashao3.us.ci", "halcroft.org", "haleloya.site", "halionex.cfd", "haltospam.com", "hamham.uk", "hamptonroads.com", "hanafos.com", "hananet.net", "handbag.com", "handleit.com", "handrik.com", "handsofhelpinc.org", "hang-ten.com", "hanghai232.shop", "hangxomcuatoilatotoro.ml", "hanha.kozow.com", "hanmail.net", "hanmail2.net", "hanmir.com", "hanoinet.io.vn", "happemail.com", "happiseektest.com", "happy-new-year.top", "happy2023year.com", "happy9toy.com", "happycounsel.com", "happydomik.ru", "happyheadshed.org", "happyhome.eu.cc", "happypuppy.com", "haqimi.cc.cd", "harakirimail.com", "hardcorefreak.com", "hardwork.icu", "haren.uk", "haribu.com", "hartbot.de", "hasanmail.ml", "hat-geld.de", "hatespam.org", "hathitrannhien.edu.vn", "havefund
5749arling.xyz", "havertz.tk", "hawaii.rr.com", "hawaiiantel.net", "hawrong.com", "haydoo.com", "hayys.app", "hazelnut4u.com", "hazelnuts4u.com", "hazmatshipping.org", "hcap.ai", "hccmail.win", "hcypku.cloud", "hdcroom.us", "hdiscord.xyz", "headstrong.de", "healingheartmission.org", "healthforwomen.info", "healxo.org", "heartthrob.com", "heathenhammer.com", "heathenhero.com", "hecat.es", "heerschap.com", "heesun.net", "hehe.com", "heheee.com", "heirfoundation.com", "heisei.be", "hello.hu", "hello.net.au", "hello.to", "hellodream.mobi", "helloricky.com", "helpinghandtaxcenter.org", "helpjobs.ru", "helpthechildren.uk", "helter-skelter.com", "heocondeisng.cc", "herediano.com", "herilev.top", "herokata2001.eu.cc", "herono1.com", "heros3.com", "herp.in", "herpderp.nl", "herr-der-mails.de", "hertz.ltd", "hesoyam.shop", "hethongtudong.store", "hetnet.nl", "hetzez.com", "hey.to", "heycmm.cn", "hezll.com", "hfogzua.top", "hgu717.ninja", "hh7f.com", "hhan.top", "hhdevel.com", "hhe.org.uk", "hhyru.us", "hi-ho.ne.jp", "hi2.in", "hi5.si", "hiddentragedy.com", "hidebox.org", "hidebusiness.xyz", "hidemail.de", "hidemail.pro", "hidemail.us", "hidepost.net", "hidesmail.net", "hidevak.com", "hidingmail.net", "hidmail.org", "hidzz.com", "hiemail.net", "hieu.in", "hieuclone.net", "highapes.run.place", "highbros.org", "higher-tech.linkpc.net", "highmilton.com", "highquality.com", "highstar.shop", "hightech.jo3.org", "highveldmail.co.za", "higogoya.com", "higuruma.site", "hihi.lol", "hikuhu.com", "hilarious.com", "hillaxiant.xyz", "hilmipremindo.com", "hilostar.com", "hiltonvr.com", "him6.com", "himacreative.id", "himail.infos.st", "himail.online", "hiphopfan.com", "hispavista.com", "histartool.com", "hitbase.net", "hitbtcpool.cloud", "hitel.net", "hitmail.com", "hitthe.net", "hkg.net", "hkstarphoto.com", "hkvtop.us", "hldrive.com", "hlkes.com", "hlongmail.com", "hmail.us", "hmamail.com", "hmh.ro", "hoanggiaanh.com", "hoanglong.tech", "hochsitze.com", "hockeymail.com", "hohohim.com", "hola.org", "holio.day", "holl.ga", "hollywoodkids.com", "holmes.de5.net", "home-email.com", "home.de", "home.nl", "home.no.net", "home.ro", "home.se", "homecut.pro", "homehappy.eu.cc", "homelocator.com", "homemail.com", "homephit.com", "homestartbromley.org.uk", "homestead.com", "homewiseleaf.com", "homewrt.xx.kg", "homvela.com", "honduras.com", "honesthirianinda.net", "honeys.be", "hongkong.com", "hongsemeixi.us.ci", "honor-8.com", "hook2ad.com", "hookup.net", "hooooooo.store", "hoopsmail.com", "hopemail.biz", "hopesx.com", "horizonspost.com", "hormails.com", "hornhorizon.com", "hornyalwary.top", "horrormail.com", "host1s.com", "hostcalls.com", "hostguru.top", "hostingmail.me", "hostlaba.com", "hostpapa.dynv6.net", "hot-mail.cf", "hot-mail.ga", "hot-mail.gq", "hot-mail.ml", "hot-mail.tk", "hot-shot.com", "hot.ee", "hotbot.com", "hotboyckdh.shop", "hotboyckdh1122.shop", "hotboyckdhn55.shop", "hotbrev.com", "hotclaw.cc.cd", "hotelpiesi.pro", "hotelplazer.com", "hotelplazer.fr", "hotelplazer.org", "hotelplazer.store", "hotfire.net", "hotletter.com", "hotlinkimg.com", "hotmai.com", "hotmail-us.top", "hotmail.ca", "hotmail.ch", "hotmail.co", "hotmail.co.il", "hotmail.co.jp", "hotmail.co.nz", "hotmail.co.uk", "hotmail.co.za", "hotmail.com", "hotmail.com.au", "hotmail.com.br", "hotmail.com.tr", "hotmail.de", "hotmail.es", "hotmail.fi", "hotmail.fr", "hotmail.it", "hotmail.kg", "hotmail.kz", "hotmail.nl", "hotmail.ru", "hotmail.se", "hotmaile.bbroot.com", "hotmaile.ezgateway.net", "hotmaile.xubi.org", "hotmailproduct.com", "hotmeil.net", "hotmial.com", "hotpop.com", "hotpop3.com", "hotprice.co", "hotrokh.com", "hotsmial.click", "hotsoup.be", "hottchurch.org.uk", "hotvoice.com", "housat.com", "housemail.com", "housereformas.es", "howardgiving.org", "hoydrax.qzz.io", "hpari.com", "hpc.tw", "hqpdf.com", "hripleh.us.ci", "hrisland.com", "hs.vc", "hsmw.net", "hsuchi.net", "ht.cx", "hta.2bd.net", "hta.publicvm.com", "hthlm.com", "http.nyc.mn", "httpsgreenwichmeantime.in", "hu2.ru", "huage.me", "huangao.xyz", "huangjr.eu.cc", "huangniu8.com", "hubglee.com", "hubhost.store", "hudfcaf.nsmjj.cc.cd", "hudisk.com", "hudska.dpdns.org", "hughes.net", "huizk.com", "hukkmu.tk", "hulapla.de", "hulisang.edu.kg", "huluwaaaron.eu.cc", "humaility.com", "humanoid.net", "humn.ws.gy", "hungpackage.com", "hungtpt.site", "hunnur.com", "hunsa.com", "huolala.de5.net", "huongdanfb.com", "huongvemientrung.store", "huoyumars.cc.cd", "hurting.com", "hu
5749sh.com", "hushmail.cf", "hushmail.com", "huskion.net", "husng-kang.top", "hutathuww.org", "hutudns.com", "huychau.click", "huychau.online", "huynhlx.shop", "huynhtran.io.vn", "huytuyen.click", "huytuyen.online", "huytuyen.site", "huyvillafb.online", "hvastudiesucces.nl", "hwsye.net", "hxopi.ru", "hxopi.store", "hyh.mfkth.de5.net", "hyhotmail.ccwu.cc", "hymenjj.cfd", "hypenated-domain.com", "hypernautica.com", "i-connect.com", "i-dork.com", "i-france.com", "i-love-you-3000.net", "i-mail.com.au", "i-p.com", "i.am", "i.softbank.jp", "i.ua", "i12.com", "i2pmail.org", "i6.cloudns.cc", "iamawoman.com", "iamwaiting.com", "iamwasted.com", "iamyours.com", "iandsec.cc.cd", "iaoss.com", "ibande.xyz", "ibmdoors.com", "ibmdoors.com.cn", "ibnuh.bz", "ibolinva.com", "ibymail.com", "icantbelieveineedtoexplainthisshit.com", "icbr.us", "iceans.cc.cd", "icemail.club", "icestorm.com", "ich-bin-verrueckt-nach-dir.de", "ich-essen-fleisch.bio", "ich-will-net.de", "ichecker.tech", "ichigo.me", "icidroit.info", "ickletonrelief.co.uk", "icloud.com", "icloudmail.kr", "icloulb.com", "icmans.com", "icmsconsultants.com", "iconmal.com", "icousd.com", "icq.com", "icqmail.com", "icrazy.com", "icubik.com", "icx.in", "icx.ro", "icznn.com", "id-base.com", "ideuse.com", "idf.ovh", "idfd.live", "ididitmyway.com", "idigjesus.com", "idirect.com", "idont.date", "idu4aa4.info", "idx4.com", "idxue.com", "ieatspam.eu", "ieatspam.info", "ieh-mail.de", "iencm.com", "iespana.es", "iffymedia.com", "ifoward.com", "ifoxdd.com", "ig.com.br", "ige.es", "igg.biz", "ignazio.it", "ignmail.com", "ignoremail.com", "ihateclowns.com", "ihateyoualot.info", "ihazspam.ca", "iheartspam.org", "ihnpo.food", "iij4u.or.jp", "iinet.net.au", "iiuta.edu.kg", "iivyll.cc.cd", "iivylls.cc.cd", "ijustdontcare.com", "ikbenspamvrij.nl", "ikewe.com", "ikomail.com", "ikuncode.eu.cc", "ikuromi.com", "ilkposta.com", "illistnoise.com", "illnessth.com", "illubd.com", "ilovechocolate.com", "iloveion.com", "ilovejesus.com", "ilovespam.com", "ilovetocollect.net", "ilse.nl", "ilustrosonic.com", "im5z.com", "imaanpharmacy.com", "imac.sfanrj.cfd", "imagic.wiki", "imaginemail.com", "imail.edu.vn", "imail.ru", "imail1.net", "imailbox.com", "imails.asso.st", "imails.info", "imailt.com", "imap-mail.com", "imap.cc", "imap.fr.nf", "imapmail.org", "imashr.com", "imel.org", "imfaya.com", "img-free.com", "imgapi.eu.org", "imgof.com", "imgv.de", "immo-gerance.info", "imnart.com", "imneverwrong.com", "imperialcnk.com", "importemail.com", "imposter.co.uk", "imranbt.store", "imstations.com", "imstressed.com", "imtoosexy.com", "imul.info", "in-box.net", "in-ulm.de", "in2jesus.com", "in2reach.com", "inactivemachine.com", "iname.com", "inbax.tk", "inbound.plus", "inbox.com", "inbox.net", "inbox.ru", "inbox.si", "inbox2.info", "inboxalias.com", "inboxbear.com", "inboxclean.com", "inboxclean.org", "inboxdesign.me", "inboxed.im", "inboxed.pw", "inboxkitten.com", "inboxnow.ru", "inboxnow.store", "inboxorigin.com", "inboxproxy.com", "inboxstore.me", "incamail.com", "inclick.net", "inclusiveprogress.com", "incognitomail.com", "incognitomail.net", "incognitomail.org", "incq.com", "incredimail.com", "inctart.com", "ind.st", "indeedemail.com", "indevgo.com", "index-mail.com", "index.ua", "indexa.fr", "india.com", "indianahorsecouncil.org", "indiatimes.com", "indieclad.com", "indigobook.com", "indirect.ws", "indo-mail.com", "indocities.com", "indomaed.pw", "indomail.com", "indomina.cf", "indoserver.stream", "indosukses.press", "indoxs.bond", "indyracers.com", "ineec.net", "inerted.com", "inet.com", "inet.net.au", "inetopenwrt.dpdns.org", "infix1.io.vn", "info-media.de", "info-radio.ml", "info66.com", "infobuzzsite.com", "infocom.zp.ua", "infohq.com", "infoisp.me", "infolinewest.com", "infomail.es", "infomart.or.jp", "infoseek.co.jp", "infoseek.jp", "infospacemail.com", "infovia.com.ar", "infoweb.ne.jp", "ingam.online", "inggo.org", "inicia.es", "inilogic.com", "init.ink", "inkiny.com", "inkling.sryze.cc", "inkomail.com", "inlook.cloud", "inly.vn", "inmail.sk", "inmail24.com", "inmano.com", "inmune.ddns.net", "inmynetwork.tk", "innocent.com", "inorbit.com", "inoutbox.com", "inoutmail.de", "inoutmail.eu", "inoutmail.info", "inoutmail.net", "inpwa.com", "inreur.com", "insanony.art", "insanony.one", "insanony.store", "insanumingeniumhomebrew.com", "insgrmail.site", "inshuan.com", "insidebaltimore.net", "insight.rr.com", "insorg-mail.info", "instaddr.ch", "instaddr.uk", "instaddr.win", "instance-email.com", "instant-mail.de", "instantblingmail.info", "instantemailaddress.com", "instantletter.net", "instantmail.fr", "instmail.uk", "instrete.com", "instruction.com", "instructor.net", "insurer.com", "intady.com", "interburp.com", "interfree.it", "interia.pl", "interlap.com.ar", "intermail.co.il", "internet-e-mail.com", "internet-mail.org", "internet-police.com", "internet-v-stavropole.ru", "internetbiz.com", "internetdrive.com", "internetegypt.com", "internetemails.net", "internetkeno.com", "internetmailing.net", "internetoftags.com", "internode.on.net", "interstats.org", "intersteller.com", "intlgalleryheritageculture.org", "intobx.com", "intopwa.com", "intopwa.net", "intopwa.org", "introex.com", "invalid.com", "inversiq.cfd", "inves.app", "investore.co", "inwagit.com", "inwind.it", "inxout.dpdns.org", "i
5749obox.com", "iobox.fi", "ioioioio.sbs", "iol.it", "iol.pt", "ionolenonos.com", "ionolenonos.fr", "ionolenonos.info", "ionolenonos.store", "ionq.pl", "iotf.net", "iowaemail.com", "iozak.com", "ip3.com", "ip4.pp.ua", "ip6.pp.ua", "ipad.sfanrj.cfd", "ipaddressforme.com", "iphone.sfanrj.cfd", "ipinf.eu.org", "ipoo.org", "ippals.com", "ippandansei.tk", "iprimus.com.au", "ipsur.org", "ipxwan.com", "iqemail.com", "iqfucsod.top", "irabops.com", "iralborz.bid", "irangate.net", "iraniandsa.org", "iraqmail.com", "irc.so", "irealiy.cyou", "ireland.com", "irelandmail.com", "iremail.de", "iridales.com", "irish2me.com", "irishspringrealty.com", "irj.hu", "iroid.com", "ironiebehindert.de", "irpine.com", "irssi.tv", "is.af", "isdaq.com", "isellcars.com", "isep.fr.nf", "iservejesus.com", "isfew.com", "ishop2k.com", "islamonline.net", "isleuthmail.com", "ismart.net", "ismartsense.online", "isonfire.com", "isosq.com", "isp9.net", "ispeedtest.digital", "israelmail.com", "israeloil.abrdns.com", "issas.edu.kg", "ist-allein.info", "ist-einmalig.de", "ist-ganz-allein.de", "ist-hier.com", "ist-willig.de", "istii.ro", "isukrainestillacountry.com", "iswin.ccwu.cc", "it7.ovh", "italy-mail.com", "italymail.com", "itaolo.com", "itcompu.com", "itfast.net", "itloox.com", "itmo.edu.pl", "itmom.com", "itos.cloudns.org", "itquoted.com", "itsbds.com", "itsedit.click", "itsjiff.com", "itspid.com", "itunesgiftcodegenerator.com", "iuanhoi.store", "iubridge.com", "iuemail.men", "iuno.fun", "ivebeenframed.com", "ivillage.com", "iwan-fals.com", "iwatermail.com", "iwi.net", "iwmail.com", "iwon.com", "ixaks.com", "ixhale.com", "ixunbo.com", "ixx.io", "iya.fr.nf", "iysqv.com", "izadpanah.com", "izhowto.com", "izunasan.my.id", "izunasuite.biz.i
5749d", "j-p.us", "j3r8qd.space", "j5bie4.tech", "jabmag.com", "jackierobinsonparkoffame.org", "jafps.com", "jaga.email", "jagomail.com", "jahoopa.com", "jailbreakeverything.com", "jaipas.lu", "jajxz.com", "jakarta.io.vn", "jakemsr.com", "jakl.li", "jakuza.hu", "jamesjfattorini.rocks", "jamesthynnealmshouse.co.uk", "jamyjmkqdsc.com", "janproz.com", "japan.com", "japnc.com", "jaqis.com", "jarszone.com", "jasminesports.com", "jasonbella.online", "jasonswheels.org", "jav8.de", "javadmin.com", "javaemail.com", "javaka.live", "javindra.cfd", "jaydemail.com", "jazzandjava.com", "jazzfan.com", "jazzgame.com", "jazzvip.site", "jbapi891313.eu.cc", "jbsze.com", "jbsze.ne", "jbsze.net", "jcnorris.com", "jcom.home.ne.jp", "jcom.zaq.ne.jp", "jdmadventures.com", "jdz.ro", "je-recycle.info", "jejes.de", "jejesfb.biz.id", "jellow.ml", "jellycat.eu.cc", "jellyrolls.com", "jempalik.my.id", "jeoce.com", "jeremytunnell.net", "jerusalemmail.com", "jessitrust.com", "jet-renovation.fr", "jetable.com", "jetable.de", "jetable.fr.nf", "jetable.net", "jetable.org", "jetable.pp.ua", "jetemail.net", "jgkcr.com", "jhphoto.top", "ji-a.cc", "ji5.de", "ji6.de", "ji7.de", "jiangwy.one", "jiaoo.pp.ua", "jiaxi.work", "jiayun.icu", "jibbo01.com", "jieluv.com", "jika.gg", "jilingling.eu.cc", "jincer.com", "jingood.dpdns.org", "jinkeyun.com", "jinva.fr.nf", "jiongguo.top", "jiooq.com", "jioso.com", "jippii.fi", "jiuji.asia", "jjfcharitabletrust.co.uk", "jjice.com", "jjj.ee", "jjk.app", "jjuisyj.top", "jk8h.info", "jkotypc.com", "jlpevents.co.uk", "jmail.co.za", "jmail.fr.nf", "jmail.ovh", "jmail.ro", "jmods.me", "jmt2469.xyz", "jnxjn.com", "job4u.com", "jobbikszimpatizans.hu", "jobbrett.com", "jobposts.net", "jobs-to-be-done.net", "jobsma.pp.ua", "jobzyy.com", "joelonsoftware.com", "joelpet.com", "joetestalot.com", "jofuso.com", "joihonm.shop", "joinme.com", "jojomedia.store", "jokes.com", "jonira.sbs", "jonsjav.cc", "jopho.com", "jora.dpdns.org", "jordanmail.com", "joseihorumon.info", "josse.ltd", "journalist.com", "jourrapide.com", "jovem.te.pt", "joymail.com", "joywavepoint.com", "jp-ml.com", "jpco.org", "jphonet.com", "jpopmail.com", "jrhmail.com", "jsncos.com", "jsrsolutions.com", "jualakun.com", "jualakunfb.co", "jualfb.co", "jubiimail.dk", "jumonji.tk", "jump.com", "jumpy.it", "junfate.com", "jungkamushukum.com", "juniormail.com", "junk.to", "junk1e.com", "junkmail.com", "junkmail.ga", "junkmail.gq", "juno.com", "just-email.com", "justdefinition.com", "justemail.ml", "justemail.net", "justicemail.com", "juvanta.cfd", "juyouxi.com", "jwork.ru", "jxpomup.com", "jzlvoei.cn", "jzzm.top", "k-global.dev", "k0jbs5hm.ccwu.cc", "k4money.com", "kaazoo.com", "kabamail.com", "kabarr.com", "kabinbilla.com", "kademen.com", "kadokawa.cf", "kadokawa.ga", "kadokawa.gq", "kadokawa.ml", "kadokawa.tk", "kaengu.ru", "kaffeeschluerfer.com", "kaffeeschluerfer.de", "kagi.be", "kaixo.com", "kaiy.dpdns.org", "kajaib.social", "kaka0.kr", "kakadua.net", "kakao-mail.com", "kakao.com", "kakaomail.kr", "kakator.com", "kakaveo3.io.vn", "kakslsie.store", "kalapi.org", "kalpoint.com", "kalquoris.cfd", "kamen-market.ru", "kamete.org", "kamsg.com", "kankoplm.eu.cc", "kanlangld.shop", "kanonmail.com", "kansascity.com", "kantclass.com", "kaoing.com", "kaovo.com", "kapoorweb.com", "kappala.info", "kapten.site", "kaptencpl.com", "kara-turk.net", "karachian.com", "karachioye.com", "karatraman.ml", "karbasi.com", "karenkey.com", "kariplan.com", "karta-kykyruza.ru", "kartvelo.com", "kasmail.com", "kaspop.com", "katalyst.indevs.in", "katamail.com", "katputli.world", "katztube.com", "kavio.my.id", "kawneha.site", "kayafmmail.co.za", "kaybooks.top", "kayfilms.top", "kaygroup.top", "kayilo.com", "kaynlab.com", "kazava.tech", "kazelink.ml", "kbishwanathuk.cc", "kbjrmail.com", "kbox.li", "kcks.com", "kcn.ne.jp", "kcoporation.com", "kcrw.de", "kd2.org", "kdpsl.org", "ke1le.cyou", "keecs.com", "keepmail.dev", "keepmymail.com", "keg-party.com", "kegui.net", "kein.date", "keinhirn.de", "keinpardon.de", "keipino.de", "kejinxi.xyz", "kekita.com", "keko.com.ar", "kelenson.com", "kelimo.sbs", "kellychen.com", "kellychibale-researchgroup-uct.com", "kemail.uk", "kempstoncharities.band", "kempstoncharities.co.uk", "kemptvillebaseball.com", "kenari.online", "kendev.id.vn", "kenfern.com", "kenhbanme.com", "kenhphim.net", "kenvanharen.com", "kepkat.com", "keromail.com", "kerotu.com", "ket-qua.org", "ketua.id", "keyemail.com", "kgb.hu", "khaibn.com", "khamu.me", "khoke.nl", "khosropour.com", "khtextile.com", "kia-sdn.me", "kiani.com", "kickassmail.com", "kicsy.asia", "kidaroa.com", "kiecchn.com", "kiki287666.xyz", "killermail.com", "killlove.
5749site", "killmail.com", "killmail.net", "killyourtime.com", "kimagure.ccwu.cc", "kimagure1.cc.cd", "kimdyn.com", "kimo.com", "kimora.space", "kimsdisk.com", "kimzavin.shop", "kinda.email", "kindamail.com", "kinglibrary.net", "kingproplan.site", "kingsq.ga", "kingss.de5.net", "kinki-kids.com", "kino-100.ru", "kintil.buzz", "kiois.com", "kismail.ru", "kisoq.com", "kissfans.com", "kissgy.com", "kisstwink.com", "kissypie.com", "kitap.az", "kitnastar.com", "kittymail.com", "kitznet.at", "kiusi.edu.kg", "kiwibox.com", "kiwitown.com", "kiwkiw.shop", "kjkpc.net", "kjkszpjcompany.com", "kkdty.dynv6.net", "kkkfjnc.info", "kkkoouy.cyou", "kkmail.be", "kkoup.com", "kksm.be", "klassmaster.com", "klassmaster.net", "klick-tipp.us", "kliknesia.io", "klingai.asia", "klipschx12.com", "kloap.com", "klovenode.com", "kludgemush.com", "klyverra.cfd", "klzlk.com", "km.coinvip.top", "km.ru", "kmail.li", "kmail.live", "kmail.qzz.io", "kmail123.com", "kmhow.com", "knaresboroughtownmuseum.org", "knickerbockerban.de", "knilok.com", "knmcadibav.com", "knol-power.nl", "knowledgemd.com", "kobrandly.com", "kodeholik.site", "kodpan.com", "kokalo.store", "kokklsd.dpdns.org", "kokoa.eu.cc", "kokoroa.eu.cc", "koletter.com", "kolumbus.fi", "kommespaeter.de", "kommunity.biz", "kon42.com", "kongbao.xyz", "konican.com", "konigyuan.us.ci", "konterkulo.com", "kontoko.org", "konultant-jurist.ru", "konx.com", "kook.ml", "kooky.cc.cd", "kopagas.com", "kopaka.net", "korea.com", "koreamail.com", "kornet.net", "korona-nedvizhimosti.ru", "korvanta.cfd", "koshu.ru", "kosmetik-obatkuat.com", "kostenlosemailadresse.de", "koszmail.pl", "kpay.be", "kpmn-design.org", "kpnmail.nl", "kpooa.com", "kpost.be", "kravintis.cfd", "krd.ag", "kreabaka.site", "krim.ws", "krongthip.com", "krouter.net", "krsw.tk", "kruay.com", "krunis.com", "krypton.tk", "krysentra.cfd", "ksadj123.eu.cc", "ksanmail.com", "ksee24mail.com", "kskblzdjdwkzkbl.top", "ksmtrck.tk", "ktpingprox.id.vn", "kube93mail.com", "kuhaku.indevs.in", "kuhrap.com", "kukamail.com", "kuku.lu", "kulmeo.com", "kulturbetrieb.info", "kumarweb.com", "kumli.racing", "kurmandika.com", "kurumibnb.dog", "kurzepost.de", "kutakbisajauhjauh.gq", "kuwait-mail.com", "kv2vpn.eu.org", "kvhrr.com", "kvhrs.com", "kvhrw.com", "kwifa.com", "kwift.net", "kwilco.net", "kwtest.io", "kyal.pl", "kynninc.com", "kyntaris.cfd", "kyois.com", "kyriog.fr", "kyuusei.fr.nf", "kywa.uk", "kyx.zcyrus.qzz.io", "kzccv.com", "l-c-a.us", "l33r.eu", "l6factors.com", "l8.jesys.net", "la.com", "laafd.com", "labetteraverouge.at", "labforge.freeddns.org", "labworld.org", "lacedmail.com", "lackmail.net", "lackmail.ru", "lacraffe.fr.nf", "lacto.info", "ladymail.cz", "lagerlouts.com", "lags.us", "lahoreoye.com", "laicai8.sbs", "lain.ch", "lajiao.cc.cd", "lak.pp.ua", "lakelivingstonrealestate.com", "lakmail.com", "lakqs.com", "laksamantunggalakma.me", "lalayun.cyou", "lamasticots.com", "lambsauce.de", "lamer.hu", "land.ru", "landmail.co", "lankamail.com", "lanuiopl.bond", "laoeq.com", "laoia.com", "lapakqu.com", "laposte.net", "lappies.net", "laptoplonghai.com", "larisia.com", "larland.com", "lashyd.com", "lass-es-geschehen.de", "last-chance.pro", "laste.ml", "lastmail.co", "lastmail.com", "lasttea.com", "latemodels.com", "latinmail.com", "laulund.info", "launchpadx.shop", "launders.money", "lavache.com", "law.com", "lawlita.com", "lawyer.com", "laxex.ru", "laxex.store", "laxiw.org", "laymro.com", "lazerbade.com", "lazerbade.fr", "lazerbade.org", "lazerbade.store", "lazyinbox.com", "lazyinbox.us", "lbrmail666.site", "lcvfdvynb.top", "ldaho.biz", "ldkll.cn", "ldop.com", "ldtp.com", "le-tim.ru", "leadwizzer.com", "lebetrust.org", "lee.mx", "leechchannel.com", "leeching.net", "leehom.net", "leetmail.co", "lefruit-dev.work", "legalactions.com", "legalrc.loan", "legendaryseller.com", "legion.eu.cc", "legislator.com", "leie.me", "lellno.gq", "lellol.dev", "lengyuesky.ggff.net", "lenovog4.com", "lenta.ru", "leonlai.net", "leopik.com", "lerany.com", "lerbhe.com", "lerch.ovh", "lero3.com", "leruvo.icu", "lesobprovermail.com", "lessismore.eu.cc", "lethe.abrdns.com", "letsgomets.net", "letterboxes.org", "letterhaven.net", "letterprotect.net", "lettersboxmail.com", "letthemeatspam.com", "letv377.nsmjj.tech", "levele.com", "levele.hu", "levi.cc.cd", "leviacerman.store", "lex.bg", "lexis-nexis-mail.com", "lez.se", "lgxscreen.com", "lhhispig.sbs", "lhsdv.com", "li.lacdn.cn", "liadhene.com", "liamcyrus.com", "liang-tts.shop", "liangganxiaopu.bond", "libero.it", "liberomail.com", "libinit.com", "licccons.icu", "licenses.sbs", "lick101.com", "licocon.cc.cd", "liebt-dich.info", "lifebyfood.com", "lifetimefriends.info", "lifetotech.c
5749om", "lifetreechurch.co.uk", "liggegi.com", "lightv.online", "ligsb.com", "likeageek.fr.nf", "likemovie.net", "likevip.net", "lillemap.net", "lilo.me", "lilspam.com", "lilsuite.id", "lindenbaumjapan.com", "lingyukun.top", "link2mail.net", "linkaivo.top", "linkcoll.my.id", "linkedindiscount.com", "linkedintuts2016.pw", "linkmail.info", "linkmaster.com", "linkspo.my.id", "linktrader.com", "linlin.cloud", "linlshe.com", "linshiyou.com", "linshiyouxiang.net", "linux-do.me", "linuxfreemail.com", "linuxgo.us.ci", "linuxmail.org", "linuxmail.so", "linxi.online", "linyu.qzz.io", "linzefor.asia", "linzefor.shop", "liocbrco.com", "lionsfan.com.au", "liontrucks.com", "liopsacac.shop", "lios.edu.kg", "liquidinformation.net", "lirsa.ggff.net", "list.ru", "lista.cc", "listomail.com", "litedrop.com", "littleapple.com", "littleblueroom.com", "littlejohns.info", "littlemvh.org.uk", "littsocial.com", "liun.cc.cd", "liuyuyu.space", "live.at", "live.be", "live.ca", "live.cl", "live.cn", "live.co.uk", "live.co.za", "live.com", "live.com.ar", "live.com.au", "live.com.mx", "live.com.pt", "live.com.sg", "live.de", "live.dk", "live.fr", "live.ie", "live.in", "live.it", "live.jp", "live.nl", "live.no", "live.ru", "live.se", "livedoor.com", "liveforms.org", "liveradio.tk", "liverpoolfans.com", "livinitlarge.net", "liyao.edu.kg", "lizery.com", "lkgn.se", "llandudno.com", "llangollen.com", "llciuoau.top", "llogin.ru", "lmagent.eu.cc", "lmarch2.com", "lmxmail.sk", "lnovic.com", "lnwtt.com", "loadby.us", "loan101.pro", "loaoa.com", "loapq.com", "lobbyist.com", "localbar.com", "locanto1.club", "locantofuck.top", "locantowsite.club", "locawin.com", "locomodev.net", "locos.com", "lofs.edu.kg", "loganister.com", "logicfieldzen.com", "logicstreak.com", "login-email.cf", "login-email.ga", "login-email.ml", "login-email.tk", "logsmarter.net", "logular.com", "loh.pp.ua", "lohinja.com", "loin.in", "lokenathassociation.co.uk", "lolfreak.net", "lolito.tk", "lolmail.biz", "lonaxter.site", "london.com", "londonyouthsailing.org", "longsbkt.xyz", "lookmail.eu.org", "looksmart.co.uk", "looksmart.com", "looksmart.com.au", "lookugly.com", "lopezclub.com", "lordfortescue.news", "lordfortescue.org.uk", "lordofmysteries.org", "lordsofts.com", "lortemail.dk", "losemymail.com", "lostnow.org", "louiskoo.com", "love-your.mom", "love.cz", "loveable.com", "lovecalculatorname.org", "lovecat.com", "lovecv.cn", "lovefall.ml", "lovefootball.com", "lovegivingsadaqah.org", "lovelygirl.net", "lovemail.com", "lovemeet.faith", "lovemeleaveme.com", "lover-boy.com", "lovergirl.com", "lovertboy.online", "lovesea.gq", "lovethebroncos.com", "lovethecowboys.com", "loveyouforever.de", "lovingjesus.com", "lowandslow.com", "lowprizo.com", "lpfmgmtltd.com", "lr7.us", "lr78.com", "lroid.com", "lru.me", "ls-server.ru", "lsa1230.dpdns.org", "lsaar.com", "lsd10086.ccwu.cc", "lsd8866.ccwu.cc", "lsereborn.com", "lsirdomain.us.ci", "lsjd.ccwu.cc", "lsp.lsa1230.dpdns.org", "lsyx24.com", "luckfeed.com", "luckymail.org", "luffygadgets.com", "lujialu.edu.kg", "lujian.de5.net", "lukecarriere.com", "lukemail.info", "lukop.dk", "lulu729.shop", "lum25kcredit.io.vn", "lumeika.com", "lumg.uk", "luminexis.cfd", "luminix1.shop", "lumm25k.io.vn", "lumyrix.cfd", "lunarmoon.online", "lunetra.shop", "lunor.cfd", "lushiyi.eu.cc", "lushosa.com", "luso.pt", "lutech.uk", "luukku.com", "luv2.us", "lux996.eu.cc", "luxentra.cfd", "luxovira.cfd", "luxudata.com", "lvie.com.sg", "lwvutyk.info", "lx.sdfe.app", "lxbeta.com", "lxl.edu.kg", "lxydawang.top", "lyan97dll.cn", "lycos.co.uk", "lycos.com", "lycos.es", "lycos.it", "lycos.ne.jp", "lycosmail.com", "lydir.com", "lyf36mkl.cn", "lyfestylecreditsolutions.com", "lyfr65zne.cn", "lyft.live", "lygv76sax.cn", "lyh86mwx.cn", "lyi25swr.cn", "lyjw06gi.cn", "lyjy85kov.cn", "lykw81kl.cn", "lympstonevillagehall.co.uk", "lymv33yww.cn", "lyn96qku.cn", "lynex.sbs", "lynwise.shop", "lyou61ra.cn", "lyrd82asw.cn", "lyricspad.net", "lyrm99urz.cn", "lys48fgq.cn", "lyso86uvj.cn", "lysy73zki.cn", "lyt75luo.cn", "lyux39qw.cn", "lyxhzz.com.cn", "lyxj71mnr.cn", "lyxm65yyl.cn", "lyy21lzw.cn", "lyyt34ga.cn", "lzoaq.com", "m-a-i-l.com", "m-hmail.com", "m1.lx1qzz.qzz.io", "m21.cc", "m4.org", "m4ilweb.info", "ma1l.duckdns.org", "mabal.fr.nf", "maboard.com", "mabox.eu", "mac-24.com", "mac.com", "macbox.com", "macfreak.com", "machen-wir.com", "machinecandy.com", "macmail.com", "macmail.info", "macos.one", "macr2.com", "macromaid.com", "macromice.info", "madcreations.com", "madonnafan.
5749com", "madrid.com", "maennerversteherin.com", "maennerversteherin.de", "maffia.hu", "magamail.com", "magbit.food", "maggotymeat.ga", "maghbiz.store", "magicbox.ro", "magicmail.co.za", "magim.be", "magspam.net", "mahmoodweb.com", "maidlow.info", "maika.eu.cc", "mail-awu.de", "mail-box.cz", "mail-burn.com", "mail-card.net", "mail-center.com", "mail-central.com", "mail-easy.fr", "mail-filter.com", "mail-help.net", "mail-hosting.co", "mail-hub.info", "mail-mario.fr.nf", "mail-me.com", "mail-now.top", "mail-owl.com", "mail-page.com", "mail-share.com", "mail-temporaire.com", "mail-temporaire.fr", "mail-tester.com", "mail.1134511.xyz", "mail.175825.xyz", "mail.aaaab.bond", "mail.austria.com", "mail.az", "mail.b-3.huggingface.qzz.io", "mail.b-6.kpe.de5.net", "mail.be", "mail.bg", "mail.bulgaria.com", "mail.by", "mail.capperflag.top", "mail.cmiu.cmiu.edu.kg", "mail.co.za", "mail.com", "mail.com.tr", "mail.dcqrr.top", "mail.de", "mail.e024.eu.cc", "mail.ee", "mail.entrepeneurmag.com", "mail.fimall.dpdns.org", "mail.freetown.com", "mail.frink.huggingface.qzz.io", "mail.fxtx.top", "mail.g-1.vactor1.us.ci", "mail.g-10.vactor1.us.ci", "mail.g-2.vactor1.us.ci", "mail.g-3.vactor1.us.ci", "mail.g-4.vactor1.us.ci", "mail.g-5.vactor1.us.ci", "mail.g-6.vactor1.us.ci", "mail.g-7.vactor1.us.ci", "mail.g-8.vactor1.us.ci", "mail.g-9.vactor1.us.ci", "mail.global-1-la-finkles.xgai.qzz.io", "mail.global-1.kpe.de5.net", "mail.global-2.kpe.de5.net", "mail.global-3.kpe.de5.net", "mail.global-4.kpe.de5.net", "mail.global-5.kpe.de5.net", "mail.goo.ne.jp", "mail.gr", "mail.gw", "mail.happyhome.eu.cc", "mail.hipda.eu.cc", "mail.hitthebeach.com", "mail.homehappy.eu.cc", "mail.htl22.at", "mail.ilink91.me", "mail.jd-vip.eu.org", "mail.lacdn.cn", "mail.loveopenai.eu.cc", "mail.magicyue.top", "mail.md", "mail.misterpinball.de", "mail.nu", "mail.nxmi537.cmuk.edu.kg", "mail.oopenclaw.eu.cc", "mail.org.uk", "mail.pf", "mail.pkday.eu.cc", "mail.pt", "mail.r-o-o-t.com", "mail.ru", "mail.sisna.com", "mail.sony.jp", "mail.sunshine8.site", "mail.svenz.eu", "mail.timops.host", "mail.tm", "mail.urpugnm.cn", "mail.usa.com", "mail.vasarhely.hu", "mail.weichat.tech", "mail.wtf", "mail.wuwang1028.bond", "mail.xiaolajiao.de", "mail.xiaolajiaoyyds.com", "mail0.ga", "mail1.top", "mail1.zecous.top", "mail101.xyz", "mail10m.com", "mail11.xyz", "mail114.net", "mail123box.tech", "mail12h.com", "mail15.com", "mail1a.de", "mail1web.org", "mail1yyds.hbkj.eu.cc", "mail2007.com", "mail21.cc", "mail22.club", "mail2aaron.com", "mail2abby.com", "mail2abc.com", "mail2actor.com", "mail2admiral.com", "mail2adorable.com", "mail2adoration.com", "mail2adore.com", "mail2adventure.com", "mail2aeolus.com", "mail2aether.com", "mail2affection.com", "mail2afghanistan.com", "mail2africa.com", "mail2agent.com", "mail2aha.com", "mail2ahoy.com", "mail2aim.com", "mail2air.com", "mail2airbag.com", "mail2airforce.com", "mail2airport.com", "mail2alabama.com", "mail2alan.com", "mail2alaska.com", "mail2albania.com", "mail2alcoholic.com", "mail2alec.com", "mail2alexa.com", "mail2algeria.com", "mail2alicia.com", "mail2alien.com", "mail2allan.com", "mail2allen.com", "mail2allison.com", "mail2alpha.com", "mail2alyssa.com", "mail2amanda.com", "mail2amazing.com", "mail2amber.com", "mail2america.com", "mail2american.com", "mail2andorra.com", "mail2andrea.com", "mail2andy.com", "mail2anesthesiologist.com", "mail2angela.com", "mail2angola.com", "mail2ann.com", "mail2anna.com", "mail2anne.com", "mail2anthony.com", "mail2anything.com", "mail2aphrodite.com", "mail2apollo.com", "mail2april.com", "mail2aquarius.com", "mail2arabia.com", "mail2arabic.com", "mail2architect.com", "mail2ares.com", "mail2argentina.com", "mail2aries.com", "mail2arizona.com", "mail2arkansas.com", "mail2armenia.com", "mail2army.com", "mail2arnold.com", "mail2art.com", "mail2artemus.com", "mail2arthur.com", "mail2artist.com", "mail2ashley.com", "mail2ask.com", "mail2astronomer.com", "mail2athena.com", "mail2athlete.com", "mail2atlas.com", "mail2atom.com", "mail2attitude.com", "mail2auction.com", "mail2aunt.com", "mail2australia.com", "mail2austria.com", "mail2azerbaijan.com", "mail2baby.com", "mail2bahamas.com", "mail2bahrain.com", "mail2ballerina.com", "mail2ballplayer.com", "mail2band.com", "mail2bangladesh.com", "mail2bank.com", "mail2banker.com", "mail2bankrupt.com", "mail2baptist.com", "mail2bar.com", "mail2barbados.com", "mail2barbara.com", "mail2barter.com", "mail2basketball.com", "mail2batter.com", "mail2beach.com", "mail2beast.com", "mail2beatles.com", "mail2beauty.com", "mail2becky.com", "mail2beijing.com", "mail2belgium.com", "mail2belize.com", "mail2ben.com", "mail2bernard.com", "mail2beth.com", "mail2betty.com", "mail2beverly.com", "mail2beyond.com", "mail2biker.com", "mail2bill.com", "mail2billionaire.com", "mail2billy.com", "mail2bio.com", "mail2biologist.com", "mail2black.com", "mail2blackbelt.com", "mail2blake.com", "mail2blind.com", "mail2blonde.com", "mail2blues.com", "mail2bob.com", "mail2bobby.com", "mail2bolivia.com", "mail2bombay.com", "mail2bonn.com", "mail2bookmark.com", "mail2boreas.com", "mail2bosnia.com", "mail2boston.com", "mail2botswana.com", "mail2bradley.com", "mail2brazil.com", "mail2breakfast.com", "mail2brian.com", "mail2bride.com", "mail2brittany.com", "mail2broker.com", "mail2brook.com", "mail2bruce.com", "mail2brunei.com", "mail2brunette.com", "mail2brussels.com", "mail2bryan.com", "mail2bug.com", "mail2bulgaria.com", "mail2business.com", "mail2buy.com", "mail2ca.com", "mail2california.com", "mail2calvin.com", "mail2cambodia.com", "mail2cameroon.com", "mail2canada.com", "mail2cancer.com", "mail2capeverde.com", "mail2capricorn.com", "mail2cardinal.com", "mail2cardiologist.com", "mail2care.com", "mail2caroline.com", "mail2carolyn.com", "mail2casey.com", "mail2cat.com", "mail2caterer.com", "mail2cathy.com", "mail2catlover.com", "mail2catwalk.com", "mail2cell.com", "mail2chad.com", "mail2champaign.com", "mail2charles.com", "mail2chef.com", "mail2chemist.com", "mail2cherry.com", "mail2chicago.com", "mail2chile.com", "mail2china.com", "mail2chinese.com", "mail2chocolate.com", "mail2christian.com", "mail2christie.com", "mail2christmas.com", "mail2christy.com", "mail2chuck.com", "mail2cindy.com", "mail2clark.com", "mail2classifieds.com", "mail2claude.com", "mail2cliff.com", "mail2clinic.com", "mail2clint.com", "mail2close.com", "mail2club.com", "mail2coach.com", "mail2coastguard.com", "mail2colin.com", "mail2college.com", "mail2colombia.com", "mail2color.com", "mail2colorado.com", "mail2columbia.com", "mail2comedian.com", "mail2composer.com", "mail2computer.com", "mail2computers.com", "mail2concert.com", "mail2congo.com", "mail2connect.com", "mail2connecticut.com", "mail2consultant.com", "mail2convict.com", "mail2cook.com", "mail2cool.com", "mail2cory.com", "mail2costarica.com", "mail2country.com", "mail2courtney.com", "mail2cowboy.com", "mail2cowgirl.com", "mail2craig.com", "mail2crave.com", "mail2crazy.com", "mail2create.com", "mail2croatia.com", "mail2cry.com", "mail2crystal.com", "mail2cuba.com", "mail2culture.com", "mail2curt.com", "mail2customs.com", "mail2cute.com", "mail2cutey.com", "mail2cynthia.com", "mail2cyprus.com", "mail2czechrepublic.com", "mail2dad.com", "mail2dale.com", "mail2dallas.com", "mail2dan.com", "mail2dana.com", "mail2dance.com", "mail2dancer.com", "mail2danielle.com", "mail2danny.com", "mail2darlene.com", "mail2darling.com", "mail2darren.com", "mail2daughter.com", "mail2dave.com", "mail2dawn.com", "mail2dc.com", "mail2dealer.com", "mail2deanna.com", "mail2dearest.com", "mail2debbie.com", "mail2debby.com", "mail2deer.com", "mail2delaware.com", "mail2delicious.com", "mail2demeter.com", "mail2democrat.com", "mail2denise.com", "mail2denmark.com", "mail2dennis.com", "mail2dentist.com", "mail2derek.com", "mail2desert.com", "mail2devoted.com", "mail2devotion.com", "mail2diamond.com", "mail2diana.com", "mail2diane.com", "mail2diehard.com", "mail2dilemma.com", "mail2dillon.com", "mail2dinner.com", "mail2dinosaur.com", "mail2dionysos.com", "mail2diplomat.com", "mail2director.com", "mail2dirk.com", "mail2disco.com", "mail2dive.com", "mail2diver.com", "mail2divorced.com", "mail2djibouti.com", "mail2doctor.com", "mail2doglover.com", "mail2dominic.com", "mail2dominica.com", "mail2dominicanrepublic.com", "mail2don.com", "mail2donald.com", "mail2donna.com", "mail2doris.com", "mail2dorothy.com", "mail2doug.com", "mail2dough.com", "mail2douglas.com", "mail2dow.com", "mail2downtown.com", "mail2dream.com", "mail2dreamer.com", "mail2dude.com", "mail2dustin.com", "mail2dyke.com", "mail2dylan.com", "mail2earl.com", "mail2earth.com", "mail2eastend.com", "mail2eat.com", "mail2economist.com", "mail2ecuador.com", "mail2eddie.com", "mail2edgar.com", "mail2edwin.com", "mail2egypt.com", "mail2electron.com", "mail2eli.com", "mail2elizabeth.com", "mail2ellen.com", "mail2elliot.com", "mail2elsalvador.com", "mail2elvis.com", "mail2emergency.com", "mail2emil
5749y.com", "mail2engineer.com", "mail2english.com", "mail2environmentalist.com", "mail2eos.com", "mail2eric.com", "mail2erica.com", "mail2erin.com", "mail2erinyes.com", "mail2eris.com", "mail2eritrea.com", "mail2ernie.com", "mail2eros.com", "mail2estonia.com", "mail2ethan.com", "mail2ethiopia.com", "mail2eu.com", "mail2europe.com", "mail2eurus.com", "mail2eva.com", "mail2evan.com", "mail2evelyn.com", "mail2everything.com", "mail2exciting.com", "mail2expert.com", "mail2fairy.com", "mail2faith.com", "mail2fanatic.com", "mail2fancy.com", "mail2fantasy.com", "mail2farm.com", "mail2farmer.com", "mail2fashion.com", "mail2fat.com", "mail2feeling.com", "mail2female.com", "mail2fever.com", "mail2fighter.com", "mail2fiji.com", "mail2filmfestival.com", "mail2films.com", "mail2finance.com", "mail2finland.com", "mail2fireman.com", "mail2firm.com", "mail2fisherman.com", "mail2flexible.com", "mail2florence.com", "mail2florida.com", "mail2floyd.com", "mail2fly.com", "mail2fond.com", "mail2fondness.com", "mail2football.com", "mail2footballfan.com", "mail2found.com", "mail2france.com", "mail2frank.com", "mail2frankfurt.com", "mail2franklin.com", "mail2fred.com", "mail2freddie.com", "mail2free.com", "mail2freedom.com", "mail2french.com", "mail2freudian.com", "mail2friendship.com", "mail2from.com", "mail2fun.com", "mail2gabon.com", "mail2gabriel.com", "mail2gail.com", "mail2galaxy.com", "mail2gambia.com", "mail2games.com", "mail2gary.com", "mail2gavin.com", "mail2gemini.com", "mail2gene.com", "mail2genes.com", "mail2geneva.com", "mail2george.com", "mail2georgia.com", "mail2gerald.com", "mail2german.com", "mail2germany.com", "mail2ghana.com", "mail2gilbert.com", "mail2gina.com", "mail2girl.com", "mail2glen.com", "mail2gloria.com", "mail2goddess.com", "mail2gold.com", "mail2golfclub.com", "mail2golfer.com", "mail2gordon.com", "mail2government.com", "mail2grab.com", "mail2grace.com", "mail2graham.com", "mail2grandma.com", "mail2grandpa.com", "mail2grant.com", "mail2greece.com", "mail2green.com", "mail2greg.com", "mail2grenada.com", "mail2gsm.com", "mail2guard.com", "mail2guatemala.com", "mail2guy.com", "mail2hades.com", "mail2haiti.com", "mail2hal.com", "mail2handhelds.com", "mail2hank.com", "mail2hannah.com", "mail2harold.com", "mail2harry.com", "mail2hawaii.com", "mail2headhunter.com", "mail2heal.com", "mail2heather.com", "mail2heaven.com", "mail2hebe.com", "mail2hecate.com", "mail2heidi.com", "mail2helen.com", "mail2hell.com", "mail2help.com", "mail2helpdesk.com", "mail2henry.com", "mail2hephaestus.com", "mail2hera.com", "mail2hercules.com", "mail2herman.com", "mail2hermes.com", "mail2hespera.com", "mail2hestia.com", "mail2highschool.com", "mail2hindu.com", "mail2hip.com", "mail2hiphop.com", "mail2holland.com", "mail2holly.com", "mail2hollywood.com", "mail2homer.com", "mail2honduras.com", "mail2honey.com", "mail2hongkong.com", "mail2hope.com", "mail2horse.com", "mail2hot.com", "mail2hotel.com", "mail2houston.com", "mail2howard.com", "mail2hugh.com", "mail2human.com", "mail2hungary.com", "mail2hungry.com", "mail2hygeia.com", "mail2hyperspace.com", "mail2hypnos.com", "mail2ian.com", "mail2ice-cream.com", "mail2iceland.com", "mail2idaho.com", "mail2idontknow.com", "mail2illinois.com", "mail2imam.com", "mail2in.com", "mail2india.com", "mail2indian.com", "mail2indiana.com", "mail2indonesia.com", "mail2infinity.com", "mail2intense.com", "mail2iowa.com", "mail2iran.com", "mail2iraq.com", "mail2ireland.com", "mail2irene.com", "mail2iris.com", "mail2irresistible.com", "mail2irving.com", "mail2irwin.com", "mail2isaac.com", "mail2israel.com", "mail2italian.com", "mail2italy.com", "mail2jackie.com", "mail2jacob.com", "mail2jail.com", "mail2jaime.com", "mail2jake.com", "mail2jamaica.com", "mail2james.com", "mail2jamie.com", "mail2jan.com", "mail2jane.com", "mail2janet.com", "mail2janice.com", "mail2japan.com", "mail2japanese.com", "mail2jasmine.com", "mail2jason.com", "mail2java.com", "mail2jay.com", "mail2jazz.com", "mail2jed.com", "mail2jeffrey.com", "mail2jennifer.com", "mail2jenny.com", "mail2jeremy.com", "mail2jerry.com", "mail2jessica.com", "mail2jessie.com", "mail2jesus.com", "mail2jew.com", "mail2jeweler.com", "mail2jim.com", "mail2jimmy.com", "mail2joan.com", "mail2joann.
5749com", "mail2joanna.com", "mail2jody.com", "mail2joe.com", "mail2joel.com", "mail2joey.com", "mail2john.com", "mail2join.com", "mail2jon.com", "mail2jonathan.com", "mail2jones.com", "mail2jordan.com", "mail2joseph.com", "mail2josh.com", "mail2joy.com", "mail2juan.com", "mail2judge.com", "mail2judy.com", "mail2juggler.com", "mail2julian.com", "mail2julie.com", "mail2jumbo.com", "mail2junk.com", "mail2justin.com", "mail2justme.com", "mail2k.ru", "mail2kansas.com", "mail2karate.com", "mail2karen.com", "mail2karl.com", "mail2karma.com", "mail2kathleen.com", "mail2kathy.com", "mail2katie.com", "mail2kay.com", "mail2kazakhstan.com", "mail2keen.com", "mail2keith.com", "mail2kelly.com", "mail2kelsey.com", "mail2ken.com", "mail2kendall.com", "mail2kennedy.com", "mail2kenneth.com", "mail2kenny.com", "mail2kentucky.com", "mail2kenya.com", "mail2kerry.com", "mail2kevin.com", "mail2kim.com", "mail2kimberly.com", "mail2king.com", "mail2kirk.com", "mail2kiss.com", "mail2kosher.com", "mail2kristin.com", "mail2kurt.com", "mail2kuwait.com", "mail2kyle.com", "mail2kyrgyzstan.com", "mail2la.com", "mail2lacrosse.com", "mail2lance.com", "mail2lao.com", "mail2larry.com", "mail2latvia.com", "mail2laugh.com", "mail2laura.com", "mail2lauren.com", "mail2laurie.com", "mail2lawrence.com", "mail2lawyer.com", "mail2lebanon.com", "mail2lee.com", "mail2leo.com", "mail2leon.com", "mail2leonard.com", "mail2leone.com", "mail2leslie.com", "mail2letter.com", "mail2liberia.com", "mail2libertarian.com", "mail2libra.com", "mail2libya.com", "mail2liechtenstein.com", "mail2life.com", "mail2linda.com", "mail2linux.com", "mail2lionel.com", "mail2lipstick.com", "mail2liquid.com", "mail2lisa.com", "mail2lithuania.com", "mail2litigator.com", "mail2liz.com", "mail2lloyd.com", "mail2lois.com", "mail2lola.com", "mail2london.com", "mail2looking.com", "mail2lori.com", "mail2lost.com", "mail2lou.com", "mail2louis.com", "mail2louisiana.com", "mail2lovable.com", "mail2love.com", "mail2lucky.com", "mail2lucy.com", "mail2lunch.com", "mail2lust.com", "mail2luxembourg.com", "mail2luxury.com", "mail2lyle.com", "mail2lynn.com", "mail2madagascar.com", "mail2madison.com", "mail2madrid.com", "mail2maggie.com", "mail2mail4.com", "mail2maine.com", "mail2malawi.com", "mail2malaysia.com", "mail2maldives.com", "mail2mali.com", "mail2malta.com", "mail2mambo.com", "mail2man.com", "mail2mandy.com", "mail2manhunter.com", "mail2mankind.com", "mail2many.com", "mail2marc.com", "mail2marcia.com", "mail2margaret.com", "mail2margie.com", "mail2marhaba.com", "mail2maria.com", "mail2marilyn.com", "mail2marines.com", "mail2mark.com", "mail2marriage.com", "mail2married.com", "mail2marries.com", "mail2mars.com", "mail2marsha.com", "mail2marshallislands.com", "mail2martha.com", "mail2martin.com", "mail2marty.com", "mail2marvin.com", "mail2mary.com", "mail2maryland.com", "mail2mason.com", "mail2massachusetts.com", "mail2matt.com", "mail2matthew.com", "mail2maurice.com", "mail2mauritania.com", "mail2mauritius.com", "mail2max.com", "mail2maxwell.com", "mail2maybe.com", "mail2mba.com", "mail2me4u.com", "mail2mechanic.com", "mail2medieval.com", "mail2megan.com", "mail2mel.com", "mail2melanie.com", "mail2melissa.com", "mail2melody.com", "mail2member.com", "mail2memphis.com", "mail2methodist.com", "mail2mexican.com", "mail2mexico.com", "mail2mgz.com", "mail2miami.com", "mail2michael.com", "mail2michelle.com", "mail2michigan.com", "mail2mike.com", "mail2milan.com", "mail2milano.com", "mail2mildred.com", "mail2milkyway.com", "mail2millennium.com", "mail2millionaire.com", "mail2milton.com", "mail2mime.com", "mail2mindreader.com", "mail2mini.com", "mail2minister.com", "mail2minneapolis.com", "mail2minnesota.com", "mail2miracle.com", "mail2missionary.com", "mail2mississippi.com", "mail2missouri.com", "mail2mitch.com", "mail2model.com", "mail2moldova.commail2molly.com", "mail2mom.com", "mail2monaco.com", "mail2money.com", "mail2mongolia.com", "mail2monica.com", "mail2montana.com", "mail2monty.com", "mail2moon.com", "mail2morocco.com", "mail2morpheus.com", "mail2mors.com", "mail2moscow.com", "mail2moslem.com", "mail2mouseketeer.com", "mail2movies.com", "mail2mozambique.com", "mail2mp3.com", "mail2mrright.com", "mail2msright.com", "mail2museum.com", "mail2music.com", "mail2musician.com", "mail2muslim.com", "mail2my.com", "mail2myboat.com", "mail2mycar.com", "mail2mycell.com", "mail2mygsm.com", "mail2mylaptop.com", "mail2mymac.com", "mail2mypager.com", "mail2mypalm.com", "mail2mypc.com", "mail2myphone.com", "mail2myplane.com", "mail2namibia.com", "mail2nancy.com", "mail2nasdaq.com", "mail2nathan.com", "mail2nauru.com", "mail2navy.com", "mail2neal.com", "mail2nebraska.com", "mail2ned.com", "mail2neil.com", "mail2nelson.com", "mail2nemesis.com", "mail2nepal.com", "mail2netherlands.com", "mail2network.com", "mail2nevada.com", "mail2newhampshire.com", "mail2newjersey.com", "mail2newmexico.com", "mail2newyork.com", "mail2newzealand.com", "mail2nicaragua.com", "mail2nick.com", "mail2nicole.com", "mail2niger.com", "mail2nigeria.com", "mail2nike.com", "mail2no.com", "mail2noah.com", "mail2noel.com", "mail2noelle.com", "mail2normal.com", "mail2norman.com", "mail2northamerica.com", "mail2northcarol
5749ina.com", "mail2northdakota.com", "mail2northpole.com", "mail2norway.com", "mail2notus.com", "mail2noway.com", "mail2nowhere.com", "mail2nuclear.com", "mail2nun.com", "mail2ny.com", "mail2oasis.com", "mail2oceanographer.com", "mail2ohio.com", "mail2ok.com", "mail2oklahoma.com", "mail2oliver.com", "mail2oman.com", "mail2one.com", "mail2onfire.com", "mail2online.com", "mail2oops.com", "mail2open.com", "mail2ophthalmologist.com", "mail2optometrist.com", "mail2oregon.com", "mail2oscars.com", "mail2oslo.com", "mail2painter.com", "mail2pakistan.com", "mail2palau.com", "mail2pan.com", "mail2panama.com", "mail2paraguay.com", "mail2paralegal.com", "mail2paris.com", "mail2park.com", "mail2parker.com", "mail2party.com", "mail2passion.com", "mail2pat.com", "mail2patricia.com", "mail2patrick.com", "mail2patty.com", "mail2paul.com", "mail2paula.com", "mail2pay.com", "mail2peace.com", "mail2pediatrician.com", "mail2peggy.com", "mail2pennsylvania.com", "mail2perry.com", "mail2persephone.com", "mail2persian.com", "mail2peru.com", "mail2pete.com", "mail2peter.com", "mail2pharmacist.com", "mail2phil.com", "mail2philippines.com", "mail2phoenix.com", "mail2phonecall.com", "mail2phyllis.com", "mail2pickup.com", "mail2pilot.com", "mail2pisces.com", "mail2planet.com", "mail2platinum.com", "mail2plato.com", "mail2pluto.com", "mail2pm.com", "mail2podiatrist.com", "mail2poet.com", "mail2poland.com", "mail2policeman.com", "mail2policewoman.com", "mail2politician.com", "mail2pop.com", "mail2pope.com", "mail2popular.com", "mail2portugal.com", "mail2poseidon.com", "mail2potatohead.com", "mail2power.com", "mail2presbyterian.com", "mail2president.com", "mail2priest.com", "mail2prince.com", "mail2princess.com", "mail2producer.com", "mail2professor.com", "mail2protect.com", "mail2psychiatrist.com", "mail2psycho.com", "mail2psychologist.com", "mail2qatar.com", "mail2queen.com", "mail2rabbi.com", "mail2race.com", "mail2racer.com", "mail2rachel.com", "mail2rage.com", "mail2rainmaker.com", "mail2ralph.com", "mail2randy.com", "mail2rap.com", "mail2rare.com", "mail2rave.com", "mail2ray.com", "mail2raymond.com", "mail2realtor.com", "mail2rebecca.com", "mail2recruiter.com", "mail2recycle.com", "mail2redhead.com", "mail2reed.com", "mail2reggie.com", "mail2register.com", "mail2rent.com", "mail2republican.com", "mail2resort.com", "mail2rex.com", "mail2rhodeisland.com", "mail2rich.com", "mail2richard.com", "mail2ricky.com", "mail2ride.com", "mail2riley.com", "mail2rita.com", "mail2rob.com", "mail2robert.com", "mail2roberta.com", "mail2robin.com", "mail2rock.com", "mail2rocker.com", "mail2rod.com", "mail2rodney.com", "mail2romania.com", "mail2rome.com", "mail2ron.com", "mail2ronald.com", "mail2ronnie.com", "mail2rose.com", "mail2rosie.com", "mail2roy.com", "mail2rss.org", "mail2rudy.com", "mail2rugby.com", "mail2runner.com", "mail2russell.com", "mail2russia.com", "mail2russian.com", "mail2rusty.com", "mail2ruth.com", "mail2rwanda.com", "mail2ryan.com", "mail2sa.com", "mail2sabrina.com", "mail2safe.com", "mail2sagittarius.com", "mail2sail.com", "mail2sailor.com", "mail2sal.com", "mail2salaam.com", "mail2sam.com", "mail2samantha.com", "mail2samoa.com", "mail2samurai.com", "mail2sandra.com", "mail2sandy.com", "mail2sanfrancisco.com", "mail2sanmarino.com", "mail2santa.com", "mail2sara.com", "mail2sarah.com", "mail2sat.com", "mail2saturn.com", "mail2saudi.com", "mail2saudiarabia.com", "mail2save.com", "mail2savings.com", "mail2school.com", "mail2scientist.com", "mail2scorpio.com", "mail2scott.com", "mail2sean.com", "mail2search.com", "mail2seattle.com", "mail2secretagent.com", "mail2senate.com", "mail2senegal.com", "mail2sensual.com", "mail2seth.com", "mail2sevenseas.com", "mail2sexy.com", "mail2seychelles.com", "mail2shane.com", "mail2sharon.com", "mail2shawn.com", "mail2ship.com", "mail2shirley.com", "mail2shoot.com", "mail2shuttle.com", "mail2sierraleone.com", "mail2simon.com", "mail2singapore.com", "mail2single.com", "mail2site.com", "mail2skater.com", "mail2skier.com", "mail2sky.com", "mail2sleek.com", "mail2slim.com", "mail2slovakia.com", "mail2slovenia.com", "mail2smile.com", "mail2smith.com", "mail2smooth.com", "mail2soccer.com", "mail2soccerfan.com", "mail2socialist.com", "mail2soldier.com", "mail2somalia.com", "mail2son.com", "mail2song.com", "mail2sos.com", "mail2sound.com", "mail2southafrica.com", "mail2southamerica.com", "mail2southcarolina.com", "mail2southdakota.com", "mail2southkorea.com", "mail2southpole.com", "mail2spain.com", "mail2spanish.com", "mail2spare.com", "mail2spectrum.com", "mail2splash.com", "mail2sponsor.com", "mail2sports.com", "mail2srilanka.com", "mail2stacy.com", "mail2stan.com", "mail2stanley.com", "mail2star.com", "mail2state.com", "mail2stephanie.com", "mail2steve.com", "mail2steven.com", "mail2stewart.com", "mail2stlouis.com", "mail2stock.com", "mail2stockholm.com", "mail2stockmarket.com", "mail2storage.com", "mail2store.com", "mail2strong.com", "mail2student.com", "mail2studio.com", "mail2studio54.com", "mail2stuntman.com", "mail2subscribe.com", "mail2sudan.com", "mail2superstar.com", "mail2surfer.com", "mail2suriname.com", "mail2susan.com", "mail2suzie.com", "mail2swaziland.com", "mail2sweden.com", "mail2sweetheart.com", "mail2swim.com", "mail2swimmer.com", "mail2swiss.com", "mail2switzerland.com", "mail2sydney.com", "mail2sylvia.com", "mail2syria.com", "mail2taboo.com", "mail2taiwan.com", "mail2tajikistan.com", "mail2tammy.com", "mail2tango.com", "mail2tanya.com", "mail2tanzania.com", "mail2tara.com", "mail2taurus.com", "mail2taxi.com", "mail2taxidermist.com", "mail2taylor.com", "mail2taz.com", "mail2teacher.com", "mail2technician.com", "mail2ted.com", "mail2telephone.com", "mail2teletubbie.com", "mail2tenderness.com", "mail2tennessee.com", "mail2tennis.com", "mail2tennisfan.com", "mail2terri.com", "mail2terry.com", "mail2test.com", "mail2texas.com", "mail2thailand.com", "mail2therapy.com", "mail2think.com", "mail2tickets.com", "mail2tiffany.com", "mail2tim.com", "mail2time.com", "mail2timothy.com", "mail2tina.com", "mail2titanic.com", "mail2toby.com", "mail2todd.com", "mail2togo.com", "mail2tom.com", "mail2tommy.com", "mail2tonga.com", "mail2tony.
5749com", "mail2touch.com", "mail2tourist.com", "mail2tracey.com", "mail2tracy.com", "mail2tramp.com", "mail2travel.com", "mail2traveler.com", "mail2travis.com", "mail2trekkie.com", "mail2trex.com", "mail2triallawyer.com", "mail2trick.com", "mail2trillionaire.com", "mail2troy.com", "mail2truck.com", "mail2trump.com", "mail2try.com", "mail2tunisia.com", "mail2turbo.com", "mail2turkey.com", "mail2turkmenistan.com", "mail2tv.com", "mail2tycoon.com", "mail2tyler.com", "mail2u4me.com", "mail2uae.com", "mail2uganda.com", "mail2uk.com", "mail2ukraine.com", "mail2uncle.com", "mail2unsubscribe.com", "mail2uptown.com", "mail2uruguay.com", "mail2usa.com", "mail2utah.com", "mail2uzbekistan.com", "mail2v.com", "mail2vacation.com", "mail2valentines.com", "mail2valerie.com", "mail2valley.com", "mail2vamoose.com", "mail2vanessa.com", "mail2vanuatu.com", "mail2venezuela.com", "mail2venous.com", "mail2venus.com", "mail2vermont.com", "mail2vickie.com", "mail2victor.com", "mail2victoria.com", "mail2vienna.com", "mail2vietnam.com", "mail2vince.com", "mail2virginia.com", "mail2virgo.com", "mail2visionary.com", "mail2vodka.com", "mail2volleyball.com", "mail2waiter.com", "mail2wallstreet.com", "mail2wally.com", "mail2walter.com", "mail2warren.com", "mail2washington.com", "mail2wave.com", "mail2way.com", "mail2waycool.com", "mail2wayne.com", "mail2webmaster.com", "mail2webtop.com", "mail2webtv.com", "mail2weird.com", "mail2wendell.com", "mail2wendy.com", "mail2westend.com", "mail2westvirginia.com", "mail2whether.com", "mail2whip.com", "mail2white.com", "mail2whitehouse.com", "mail2whitney.com", "mail2why.com", "mail2wilbur.com", "mail2wild.com", "mail2willard.com", "mail2willie.com", "mail2wine.com", "mail2winner.com", "mail2wired.com", "mail2wisconsin.com", "mail2woman.com", "mail2wonder.com", "mail2world.com", "mail2worship.com", "mail2wow.com", "mail2www.com", "mail2wyoming.com", "mail2xfiles.com", "mail2xox.com", "mail2yachtclub.com", "mail2yahalla.com", "mail2yemen.com", "mail2yes.com", "mail2yugoslavia.com", "mail2zack.com", "mail2zambia.com", "mail2zenith.com", "mail2zephir.com", "mail2zeus.com", "mail2zipper.com", "mail2zoo.com", "mail2zoologist.com", "mail2zurich.com", "mail3000.com", "mail333.com", "mail4.uk", "mail4qa.com", "mail4trash.com", "mail4u.info", "mail666.ru", "mail7.io", "mail707.com", "mail72.com", "mail789.dedyn.io", "mailaddress.de", "mailadresi.tk", "mailandftp.com", "mailandnews.com", "mailapp.top", "mailapril.org", "mailas.com", "mailasia.com", "mailba.uk", "mailback.com", "mailbai.com", "mailbali.com", "mailbidon.com", "mailbiscuit.com", "mailbiz.biz", "mailblocks.com", "mailbolt.com", "mailbomb.net", "mailboom.com", "mailbox.as", "mailbox.co.za", "mailbox.gr", "mailbox.hu", "mailbox.in.ua", "mailbox.zip", "mailbox49.com", "mailbox52.ga", "mailbox72.biz", "mailbox80.biz", "mailbox82.biz", "mailbox87.de", "mailbox92.biz", "mailboxify.ru", "mailboxify.store", "mailboxly.ru", "mailboxly.store", "mailboxy.fun", "mailboxy.ru", "mailboxy.store", "mailbr.com.br", "mailbucket.org", "mailc.net", "mailcan.com", "mailcat.biz", "mailcatch.com", "mailcc.com", "mailchannels.de", "mailchatgpt.eu.cc", "mailchoose.co", "mailchop.com", "mailcity.com", "mailcker.com", "mailclone2023.top", "mailclub.fr", "mailclub.net", "maildax.me", "mailde.de", "mailde.info", "maildrop.cc", "maildrop.cf", "maildrop.ga", "maildrop.gq", "maildrop.ml", "maildu.de", "maildx.com", "maildy.site", "maileater.com", "mailed.in", "mailed.ro", "mailedu.edu.pl", "maileimer.de", "maileme101.com", "mailer.edu.pl", "mailer.io.vn", "mailers.edu.pl", "mailexcite.com", "mailexpire.com", "mailf5.com", "mailfa.tk", "mailfall.com", "mailfast.pro", "mailfence.com", "mailfirefly.com", "mailfirst.icu", "mailforce.net", "mailforspam.com", "mailfree.ga", "mailfree.gq", "mailfree.ml", "mailfreeonline.com", "mailfs.com", "mailftp.com", "mailgenie.net", "mailgo.cyou", "mailguard.me", "mailgutter.com", "mailhaven.com", "mailhazard.com", "mailhazard.us", "mailhex.com", "mailhood.com", "mailhub.pro", "mailhz.me", "mailimate.com", "mailin8r.com", "mailinatar.com", "mailinater.com", "mailinator.co.uk", "mailinator.com", "mailinator.gq", "mailinator.info", "mailinator.net", "mailinator.org", "mailinator.us", "mailinator0.com", "mailinator1.com", "mailinator2.com", "mailinator2.net", "mailinator3.com", "mailinator4.com", "mailinator5.com", "mailinator6.com", "mailinator7.com", "mailinator8.com", "mailinator9.com", "mailinblack.com", "mailincubator.com", "mailingaddress.org", "mailingweb.com", "mailisent.com", "mailisia.com", "mailismagic.com", "mailistry.com", "mailita.tk", "mailite.com", "mailjunk.cf", "mailjunk.ga", "mailjunk.gq", "mailjunk.ml", "mailjunk.tk", "mailku.co", "maill.wuwang1028.bond", "mailllshop.website", "maillog.uk", "mailmagnet.co", "mailmate.com", "mailmaxy.one", "mailmay.org", "mailme.dk", "mailme.gq", "mailme.ir", "mailme.lv", "mailme24.com", "mailmenot.io", "mailmetrash.com", "mailmight.com", "mailmij.nl", "mailmoat.com", "mailmoth.com", "mailms.com", "mailna.biz", "mailna.co", "mailna.in", "mailna.me", "mailnada.cc", "mailnada.com", "mailnator.com", "mailnesia.com", "mailnet.io.vn", "mailnew.com", "mailnoop.store", "mailnull.com", "mailnuo.com", "mailo.edu.pl", "mailonaut.com", "mailontod.com", "mailops.com", "mailorc.com", "mailorg.org", "mailosaur.net", "mailox.fun", "mailoye.com", "mailp.org", "mailpanda.com", "mailphu.com", "mailpick.biz", "mailpluss.com", "mailpokemon.com", "mailpooch.com", "mailpoof.com", "mailpost.zzn.com", "mailpress.gq", "mailpride.com", "mailpro.lat", "mailpro.live", "mailproxsy.com", "mailpull.com", "mailpuppy.com", "mailquack.com", "mailrock.biz", "mailroom.com", "mailru.com", "mailrun.one", "mailsa.biz.id", "mailsa.my.id", "mailsac.com", "mailsafe.fr.nf", "mailsbay.com", "mailscrap.com", "mailseal.de", "mailsent.net", "mailserv.info", "mailservice.ms", "mailshan.com", "mailshell.com", "mailshiv.com", "mailshou.com", "mailshun.com", "mailshuttle.com", "mailsiphon.com", "mailslapping.com", "mailslite.com", "mailslurp.com", "mailsmtp.qzz.io", "mailstart.com", "mailstartplus.com", "mailsucker.net", "mailsurf.com", "mailt.net", "mailt.top", "mailtag.com", "mailtao.me", "mailtechx.com", "mailtecom.com", "mailtemp.info", "mailtemp.rest", "mailtemp.xyz", "mailtemple.xyz", "mailtemporaire.com", "mailtemporaire.fr", "mailtest.ccwu.cc", "mailto.de", "mailto.plus", "mailtome.de", "mailtothis.com", "mailtraps.com", "mailtrash.net", "mailtrix.net", "mailtub.com", "mailtv.net", "mailtv.tv", "mailueberfall.de", "mailuniverse.co.uk", "mailup.net", "mailvip.net", "mailw.site", "mailwire.com", "mailworks.org", "mailx.04.mom", "mailx.click", "mailxyz.cyou", "mailyan.my.id", "mailzi.ru", "mailzilla.com", "mailzilla.org", "mailzy.org", "mainerfolg.info", "mainkask.site", "make.cc.cd", "makemenaughty.club", "makemetheking.com", "makeraura.online", "makertrial.com", "makoli.sbs", "makoli.space", "maktoob.com", "malahov.de", "malayalamdtp.com", "malayalamtelevision.net", "mali.729406.xyz", "malioter.pro", "maltesemail.com", "mama3.org", "mamabood.com", "mamber.net", "mameganteng.store", "mamulenok.ru", "managedisabled.online", "manager.de", "mancity.net", "mandraghen.cf", "manifestgenerator.com", "mannawo.com", "mansiondev.com", "mantrafreenet.com", "mantramail.com", "mantraonline.com", "manybrain.com", "maohe.cloud", "mapkernel.com", "marchguidesassociation.org", "marchguidesassociation.org.uk", "marchmail.com", "marhumal.tech", "mariahc.com", "marijuana.com", "marijuana.nl", "marineso.com", "mariyaa.pp.ua", "mark-compressoren.ru", "markableytrust.org.uk", "markandvirginiarometty.org", "marketlink.info", "markmurfin.com", "married-not.com", "marrytodo.de", "marsattack.com", "martenson-mail.mywire.org", "martenson-mail.ooguy.com", "martenson-mail.theworkpc.com", "martindalemail.com", "masbahlil.xyz", "mash4077.com", "mask03.ru", "maskmy.id", "masonline.info", "masrawy.com", "masteryforn.shop", "masupost.tokenized.name", "masurii.tokenized.name", "masuriidev.tokenized.name", "maswae.world", "matamuasu.ga", "matchpol.net", "matjoa.com", "matmail.com", "matmayer.com", "matprivate.tokenized.name", "matra.site", "mats.edu.pl", "mauimail.com", "mauritius.com", "max-mail.org", "maxleft.com", "maxmail.co.uk", "maxresistance.com", "maxseeding.com", "maxturns.com", "mayre.shop", "mbal.top", "mbox.com.au", "mbox.re", "mbx.cc", "mc-fly.be", "mcache.net", "mcdomaine.fr.nf", "mchasd.eu.cc", "mchsi.com", "mciek.com", "mcpservers.one", "mcs.cc.cd", "mcunnm.ccwu.cc", "mdahld.eu.cc", "mdhc.tk", "mdz.email", "me-mail.hu", "me.com", "meantinc.com", "mebeiuk.co.uk", "mebelnu.info", "mech2build.io.vn", "mechanicalresumes.com", "mechanicspedia.com", "medevsa.com", "mediaeast.uk", "mediaholy.com", "medical.net.au", "medicichoir.org", "medkabinet-uzi.ru", "medscape.com", "meef.uk", "meepsheep.eu", "meetingmall.com", "meevpo.id", "megaegg.ne.jp", "megago.com", "megamail.pt", "megapoint.com", "megasend.org", "mehda.eu.cc", "mehr-bitcoin.de", "mehrani.com", "mehtaweb.com", "meidecn.com", "meikeya.com", "meine-dateien.info", "meine-diashow.de", "meine-fotos.info", "meine-urlaubsfotos.de", "meinspamschutz.de", "meituy.com", "mekhong.com", "mekqh.eu.cc", "melodymail.com", "meloo.com", "meltedbrownies.com", "meltmail.com", "meltp.com", "memeazon.com", "memoniclife.online", "memsg.site", "mengma.eu.cc", "mengundang.live", "mentonit.net", "meocon.org", "meomo.store", "mepost.pw", "merda.flu.cc", "merda.igg.biz", "merda.nut.cc", "merda.usa.cc", "merepost.com", "merry.pink", "meruado.uk", "merumart.com", "merxo.me", "mesemails.fr.nf", "mesh.ad.jp", "mess-mails.fr.nf", "message.hu", "message.myspace.com", "messagebeamer.de", "messages.to", "messibucu.click", "messwiththebestdielikethe.rest", "metacrawler.com", "metadownload.org", "metaintern.net", "metajaya.biz.id", "metalfan.com", "metalunits.com", "metaorbitx.com", "metaping.com", "metta.lk", "mexicomail.com", "mexvat.com", "mezimages.net", "mfapi.dpdns.org", "mfsa.info", "mfsa.ru", "mfunza.com", "mfxis.com", "mgxianlu.gq", "mhzayt.online", "miaferrari.c
5749om", "miauj.com", "michaeladmin.eu", "michaeladmin.fr", "michaeladmin.org", "michaeladmin.store", "mickaben.fr.nf", "microsoftazureamazonawsibmapplenvidiaoracleciscoadobe.com", "midcoastcustoms.com", "midcoastcustoms.net", "midcoastsolutions.com", "midcoastsolutions.net", "middletoncheneyuc.uk", "midiharmonica.com", "midlertidig.com", "midlertidig.net", "midlertidig.org", "midwestpride.org", "mierdamail.com", "miesto.sk", "mighty.co.za", "migmail.net", "migmail.pl", "migumail.com", "mihep.com", "miho-nakayama.com", "miho.uk", "miistermail.fr", "mijnhva.nl", "mikasa.ccwu.cc", "mikfarm.com", "mikrotamanet.com", "mikrotikvietnam.com", "mikrotikvn.com", "mikrotikx.com", "millionaireintraining.com", "millionairemail.com", "milmail.com", "miloras.fr.nf", "minafter.com", "mindless.com", "mindspring.com", "minefieldmail.com", "mineo.jp", "mingw.de5.net", "minhquang2000.com", "minidmx.icu", "minimail.gq", "minister.com", "ministry-of-silly-walks.de", "minitts.net", "minsmail.com", "mintemail.com", "minuteafter.com", "minuteinbox.com", "miomail.indevs.in", "mirai.re", "mirasync.tokyo", "miros.cloud", "misery.net", "missionbulldogs.org", "misterpinball.de", "misty.indevs.in", "mitico.org", "mitrabisa.com", "mitraprem.online", "mitraprem.site", "mittalweb.com", "miucce.com", "miwacle.com", "mixmail.com", "mixmail.site", "mixzu.net", "mjfrogmail.com", "mji.ro", "mjj.edu.ge", "mjukglass.nu", "mkeya.com", "mkpfilm.com", "mkseiuuda.top", "mkvesta.io.vn", "mkzaso.com", "ml1.net", "ml8.ca", "mlanm.online", "mlb.bounce.ed10.net", "mlgmail.top", "mliok.com", "mlongmail.com", "mm.my", "mm.rc0101.site", "mm.st", "mm2flip.pw", "mm5.se", "mmail.wuwang1028.bond", "mmaily.com", "mmcat.icu", "mmdesign.work.gd", "mmmail.nof1.de", "mmmggg0123.ccwu.cc", "mmmo.us.ci", "mmo.us.ci", "mmo365.store", "mmyuu.cn", "mnode.me", "mns.ru", "mnvr.site", "moakt.cc", "moakt.co", "moakt.com", "moakt.ws", "mobilbatam.com", "mobileninja.co.uk", "mobilevpn.top", "moburl.com", "mochamail.com", "mockmyid.com", "modirosa.com", "moeri.org", "mofu.be", "mohammed.com", "mohemil.com", "mohmal.com", "mohmal.im", "mohmal.in", "mohmal.tech", "moimoi.re", "mokook.com", "moldova.cc", "moldova.com", "moldovacc.com", "molms.com", "momentics.ru", "momoi.uk", "momopifa.cc.cd", "momoshe.com", "momslife.com", "mona.edu.kg", "mona.edu.pl", "mona.edu.rs", "monachat.tk", "monadi.ml", "monchu.fr", "moncourrier.fr.nf", "mondial.asso.st", "monemail.com", "monemail.fr.nf", "money.net", "moneypipe.net", "monglung.space", "mongrec.top", "monity.top", "monmail.fr.nf", "monomoho.site", "monopacket.com", "montevideo.com.uy", "monumentmail.com", "monyal.shop", "moolee.net", "moonapps.org", "moondyal.com", "moonfee.com", "moonikent.us", "moonman.com", "moonwake.com", "mooo.com", "moose-mail.com", "moot.es", "mopera.net", "mor19.uu.gl", "mora45ktil.io.vn", "moreawesomethanyou.com", "moreorcs.com", "morriesworld.ml", "morsin.com", "mortaza.com", "moruzza.com", "mosaicfx.com", "moscowmail.com", "mosswoodmissionhall.bio", "most-wanted.com", "mostlysunny.com", "motion.jo3.org", "motique.de", "motormania.com", "mountainregionallibrary.net", "moutianwuliu.top", "movemail.com", "movieluver.com", "mowline.com", "mox.pp.ua", "moy-elektrik.ru", "moyang303.de5.net", "moza.pl", "mozej.com", "mp-j.ga", "mp3oxi.com", "mp4.it", "mpk.ovh", "mr-email.fr.nf", "mr-potatohead.com", "mr24.co", "mrcheannko45k.io.vn", "mrip.top", "mriscan.live", "mriscanner.live", "mrizkifreelace.dpdns.org", "mrotzis.com", "mrphoto.org", "mrvpm.net", "mrvpt.com", "msarra.com", "mscold.com", "msdsj.cyou", "msgbox.com", "msgos.com", "msn-mail-free-1.dynv6.net", "msn-mail-free-1092.dynv6.net", "msn-mail-free-1268.dynv6.net", "msn-mail-free-1522.dynv6.net", "msn-mail-free-1659.dynv6.net", "msn-mail-free-1750.dynv6.net", "msn-mail-free-189.dynv6.net", "msn-mail-free-1974.dynv6.net", "msn-mail-free-1980.dynv6.net", "msn-mail-free-2112.dynv6.net", "msn-mail-free-2193.dynv6.net", "msn-mail-free-2205.dynv6.net", "msn-mail-free-2634.dynv6.net", "msn-mail-free-2681.dynv6.net", "msn-mail-free-3011.dynv6.net", "msn-mail-free-3229.dynv6.net", "msn-mail-free-3232.dynv6.net", "msn-mail-free-3270.dynv6.net", "msn-mail-free-33.dynv6.net", "msn-mail-free-3312.dynv6.net", "msn-mail-free-3373.dynv6.net", "msn-mail-free-3414.dynv6.net", "msn-mail-free-3622.dynv6.net", "msn-mail-free-3632.dynv6.net", "msn-mail-free-3737.dynv6.net", "msn-mail-free-3812.dynv6.net", "msn-mail-free-4062.dynv6.net", "msn-mail-free-4088.dynv6.net", "msn-mail-free-4151.dynv6.net", "msn-mail-free-4290.dynv6.net", "msn-mail-free-4304.dynv6.net", "msn-mail-free-4411.dynv6.net", "msn-mail-free-4518.dynv6.net", "msn-mail-free-4640.dynv6.net", "msn-mail-free-4718.dynv6.net", "msn-mail-free-4868.dynv6.net", "msn-mail-free-5064.dynv6.net", "msn-mail-free-5162.dynv6.net", "msn-mail-free-5184.dynv6.net", "msn-mail-free-5198.dynv6.net", "msn-mail-free-5402.dynv6.net", "msn-mail-free-5415.dynv6.net", "msn-mail-free-554.dynv6.net", "msn-mail-free-5696.dynv6.net", "msn-mail-free-5718.dynv6.net", "msn-mail-free-5872.dynv6.net", "msn-mail-free-6047.dynv6.net", "msn-mail-free-6113.dynv6.net", "msn-mail-free-6326.dynv6.net", "msn-mail-free-6581.dynv6.net", "msn-mail-free-6589.dynv6.net", "msn-mail-free-6760.dynv6.net", "msn-mail-free-678.dynv6.net", "msn-mail-free-6877.dynv6.net", "msn-mail-free-6883.dynv6.net", "msn-mail-free-6906.dynv6.net", "msn-mail-free-6943.dynv6.net", "msn-mail-free-6959.dynv6.net", "msn-mail-free-6981.dynv6.net", "msn-mail-free-708.dynv6.net", "msn-mail-free-7155.dynv6.net", "msn-mail-free-727.dynv6.net", "msn-mail-free-733.dynv6.net", "msn-mail-free-7424.dynv6.net", "msn-mail-free-7429.dynv6.net", "msn-mail-free-7434.dynv6.net", "msn-mail-free-7509.dynv6.net", "msn-mail-free-7570.dynv6.net", "msn-mail-free-7742.dynv6.net", "msn-mail-free-7760.dynv6.net", "msn-mail-free-8047.dynv6.net", "msn-mail-free-810.dynv6.net", "msn-mail-free-8131.dynv6.net", "msn-mail-free-8282.dynv6.net", "msn-mail-free-8582.dynv6.net", "msn-mail-free-86.dynv6.net", "msn-mail-free-8632.dynv6.net", "msn-mail-free-8704.dynv6.net", "msn-mail-free-8776.dynv6.net", "msn-mail-free-8841.dynv6.net", "msn-mail-free-890.dynv6.net", "msn-mail-free-8952.dynv6.net", "msn-mail-free-8986.dynv6.net", "msn-mail-free-9002.dynv6.net", "msn-mail-free-9061.dynv6.net", "msn-mail-free-9121.dynv6.net", "msn-mail-free-9173.dynv6.net", "msn-mail-free-9224.dynv6.net", "msn-mail-free-9313.dynv6.net", "msn-mail-free-9368.dynv6.net", "msn-mail-free-9382.dynv6.net", "msn-mail-free-9444.dynv6.net", "msn-mail-free-9536.dynv6.net", "msn-mail-free-9587.dynv6.net", "msn-mail-free-9597.dynv6.net", "msn-mail-free-9649.dynv6.net", "msn-mail-free-9734.dynv6.net", "msn-mail-free-9921.dynv6.net", "msn-mail-free-9990.dynv6.net", "msn-mail-free-9998.dynv6.net", "msn.cn", "msn.com", "msn.nl", "mspeciosa.com", "msqatl.com", "msrc.ml", "msssg.com", "mswork.ru", "msxd.com", "mt2009.com", "mt2014.com", "mt2015.com", "mt2016.com", "mtdalmshouse.fitness", "mtdalmshouse.uk", "mtmdev.com", "mtnewtoy.us", "mtshop18.io.vn", "mttestdriver.com", "mtupu.com", "mua.lacdn.cn", "muadaingan.com", "muareview.com", "muataikhoan.info", "muathegame.com", "muchomail.com", "mucincanon.com", "mudahmaxwin.com", "muehlacker.tk", "muell.icu", "muell.io", "muell.monster", "muell.xyz", "muellemail.com", "muellmail.com", "muetop.store", "mugadget.com", "mui.cc.cd", "mui.de5.net", "multicorse.com", "muncloud.com", "mundomail.net", "munich.com", "munik.edu.pl", "munoubengoshi.gq", "muonwhila.com", "muralin-aja.com", "muratec.eu.org", "muratreis.icu", "music.com", "musiccode.me", "musicflow.buzz", "musician.org", "musicscene.org", "musiku.studio", "muskelshirt.de", "muslim.com", "muslimsonline.com", "mutant.me", "mutantweb.com", "mutudev.com", "mvpmedix.com", "mvrht.com", "mvrht.net", "mwalshabs.dev", "mwarner.org", "mwqj.xyz", "mxclip.com", "mxfuel.com", "mxhquxyi.top", "mxmv.top", "mxvia.com", "my-pomsies.ru", "my-teddyy.ru", "my.com", "my10minutemail.com", "mybitti.de", "mybox.it", "mycabin.com", "mycity.com", "mycleaninbox.net", "mycool.com", "mycorneroftheinter.net", "mycreativeinbox.com", "myde.ml", "mydefipet.live", "mydemo.equipment", "mydomain.com", "mydotcomaddress.com", "myecho.es", "myemailboxy.com", "myfamily.com", "myfastmail.com", "myfxspot.com", "mygeoweb.info", "mygo.com", "myhochzeitsfilm.de", "myhosrn.servehalflife.com", "myindohome.services", "myinfoinc.com", "myinterserver.ml", "myiris.com", "mykickassideas.com", "myletters.online", "mymacmail.com", "mymail-in.net", "mymail.infos.st", "mymail90.com", "mymaildo.kro.kr", "mymailoasis.com", "mymaily.lol", "mymrxuyrd.top", "mynamedot.com", "mynes.com", "mynet.com", "mynetaddress.com", "mynetstore.de", "mynoop.store", "myntora.cfd", "myopang.com", "myownemail.com", "myownfriends.com", "mypacks.net", "mypad.com", "mypartyclip.de", "mypersonalemail.com", "myphantomemail.com", "myplace.com", "myrambler.ru", "myrealbox.com", "myremarq.com", "mysadfjwefwf.us.ci", "mysamp.de", "myself.com", "myself.fr.nf", "myspaceinc.com", "myspaceinc.net", "myspaceinc.org", "myspacepimpedup.com", "myspamless.com", "mystupidjob.com", "mystvpn.com", "mysugartime.ru", "mytemp.email", "mytempemail.com", "mytempmail.com", "mythirdage.com", "mytrashmail.com", "mywarnernet.net", "myway.com", "myweblaw.com", "myworldmail.com", "mywrld.site", "mywrld.top", "myxentra.cfd", "myzx.com", "mzico.com", "mzl2wvp6.nsmjj.tech", "n1nja.org", "n2.com", "n2baseball.com", "n2business.com", "n2mail.com", "n2soccer.com", "n2software.com", "n5.jesys.net", "n8.gs", "na-cat.com", "naacpadvancement.org", "naah.ru", "naah.store", "nabaxox.edu.pl", "nabc.biz", "nabomail.com", "nabuma.com", "nada.email", "nada.ltd", "nafe.com", "nagi.be", "nagisa.eu.cc", "nagpal.net", "nailooong.site", "n
5749aka.edu.pl", "nakedgreens.com", "nakedtruth.biz", "namdevmail2.qzz.io", "name.com", "namenan.me", "nameplanet.com", "namewok.com", "nanana.uk", "nandomail.com", "nangspa.vn", "naniniva.com", "nanonym.ch", "nanopools.info", "nanoskin.vn", "naobk.com", "naocan.org", "naplesnews.net", "naraka.eu.cc", "narrowment.com", "narsub.online", "narsub.shop", "naseej.com", "nashapoultryshop.com", "naslazhdai.ru", "natachai.me", "natange.org.uk", "nate.com", "nationalgardeningclub.com", "nativestar.net", "nativeweb.net", "natuanal.com", "naui.net", "nautonk.com", "navalcadets.com", "naver.com", "naverapp.com", "naverly.com", "navermail.kr", "navigator.lv", "navy.org", "nawmin.info", "naxx.dev", "naylonksosmed.com", "naymedia.com", "naz.com", "nazisat.com", "nb.syh.cnkmmk.win", "nb.syh.evv.me", "nb.syh.hyper.ci", "nb.syh.localhost.cc", "nb.syh.new.cd", "nb.syh.qqc.me", "nb.syh.qqs.me", "nb.syh.rua.ci", "nb.syh5.eu.cc", "nbmbb.com", "nbspace.us", "nbvrluhsh.top", "nbzmr.com", "nc.rr.com", "nchoicemail.com", "ncien.com", "ncyc7b.2026157.xyz", "ndade.eu.cc", "ndnphim.io.vn", "ndut.pro", "neatdaynote.com", "necub.com", "neeva.net", "negated.com", "neghtlefi.com", "neko2.net", "nekochan.fr", "nekosan.uk", "nemomo.org", "nemra1.com", "nenter.com", "neo.rr.com", "neomailbox.com", "neosstudy.work", "neotlozhniy-zaim.ru", "nepwk.com", "neroki.shop", "nervhq.org", "nervmich.net", "nervtmich.net", "nesopf.com", "nespf.com", "nespj.com", "nespressopixie.com", "nestlynotes.com", "net-c.be", "net-c.ca", "net-c.cat", "net-c.com", "net-c.es", "net-c.fr", "net-c.it", "net-c.lu", "net-c.nl", "net-c.pl", "net-pager.net", "net-shopping.com", "net1mail.com", "net4b.pt", "net4you.at", "netbounce.com", "netbroadcaster.com", "netby.dk", "netc.eu", "netc.fr", "netc.it", "netc.lu", "netc.pl", "netcenter-vn.net", "netcmail.com", "netcom.ws", "netcourrier.com", "netexecutive.com", "netexpressway.com", "netfusionhub.surf", "netfxd.com", "netgenie.com", "netherfieldvillagehall.co.uk", "netian.com", "netizen.com.ar", "netlane.com", "netlimit.com", "netmails.com", "netmails.net", "netmongol.com", "netn.top", "netnet.com.sg", "netnoir.net", "netoiu.com", "netpiper.com", "netposta.net", "netralink.com", "netricity.nl", "netris.net", "netscape.net", "netscapeonline.co.uk", "netsgo.com", "netspace.net.au", "netspeedway.com", "netsquare.com", "netster.com", "nettaxi.com", "nettemail.com", "netterchef.de", "netti.fi", "netviewer-france.com", "netzero.com", "netzero.net", "netzidiot.de", "neue-dateien.de", "neuro.md", "nevanata.com", "neverlose.eu.cc", "nevermail.de", "neverover.life", "new-api.cc.cd", "newaddr.com", "newbpotato.tk", "newbreedapps.com", "newdelhi.io.vn", "newfilm24.ru", "newgreenpath.org", "newideasfornewpeople.info", "newmail.com", "newmail.net", "newmail.ru", "newmail.top", "newmano.store", "newsboysmail.com", "newsteadabbeypartnership.org", "newyork.com", "newyork.io.vn", "nexarisystems.online", "nexarsh.store", "nexarshop.store", "nexentia.cfd", "nexio.sbs", "nexorabio.pro.vn", "nexosphere.lifestyle", "next.ovh", "nextmail.info", "nextmail.ru", "nextstopvalhalla.com", "nextsuns.com", "nexus-streams.online", "nexxmail.com", "nezdiro.org", "nezid.com", "nezuka.net", "nezumi.be", "nezzart.com", "nfast.net", "nfkah.eu.cc", "nfmail.com", "nghienplus.io.vn", "nghienplus.store", "nguyendanhkietisocial.com", "nguyenlieu24h.com", "nguyentinhblog.com", "nguyenusedcars.com", "nh3.ro", "nhienpv1.io.vn", "nhmi1.com", "nhmvn.com", "nhoopmail.store", "nhotv.com", "nhungdang.xyz", "niang-sfx.biz", "nice-4u.com", "nice.qzz.io", "nicebush.com", "nicegal.com", "nicemail.cc", "nichaoxing.cc", "nicholastse.net", "nick-ao.com", "nickmxh.com", "nicknassar.com", "nicolastse.com", "nicusaurelus.online", "nifty.com", "nifty.ne.jp", "nigeriansincoventry.org", "nightfood.studio", "nightmail.com", "nightorb.com", "nik.edu.pl", "nikopage.com", "nikora.fr.nf", "nimail.cn", "nimail.com", "nimbacharity.com", "nincsmail.com", "nincsmail.hu", "ninepacman.com", "ninfan.com", "niprack.com", "nirvanafan.com", "niseko.be", "niwave.shop", "niwave.top", "niwl.net", "njwzzvmtin.my", "nm123.com", "nm7.cc", "nmail.cf", "nnh.com", "nnot.net", "nnoway.ru", "no-spam.ws", "no-trash.ru", "no-ux.com", "no2bullyingatwork.org.uk", "noavar.com", "noblepioneer.com", "nobugmail.com", "nobulk.com", "nobuma.com", "noclickemail.com", "nocp.ru", "nocp.store", "nodejs.uk", "nodezine.com", "noexpire.top", "nogmailspam.info", "noicd.com", "noinspect.top", "noizonicfoundation.com", "nokdot.com", "nokiamail.com", "nolemail.ga", "nolettersbox.com", "nomail.cf", "nomail.ga", "nomail.pw", "nomail2me.com", "nomes.fr.nf", "nomorespamemails.com", "nomorix.cfd", "nonchalantresmita.biz", "nondon.site", "nondon.store", "nongnue.com", "nonpartisan.com", "nonspam.eu", "nonspammer.de", "nonze.ro", "nooploop.store", "noopmail.com", "noproposal.com", "noref.in", "noreply.fr", "nori24.tv", "norika-fujiwara.com", "norikomail.com", "norseforce.com", "northboveymeadow.business", "northgates.net", "northsixty.com", "norvanta.cfd", "norweg
5749ischlernen.info", "noship.shop", "noshiper.pro", "nospam.fr.nf", "nospam.today", "nospam4.us", "nospamfor.us", "nospammail.net", "nospamthanks.info", "nosubcriber.shop", "notboxletters.com", "nothingtoseehere.ca", "notif.me", "notipr.com", "notlettersmail.com", "notmailinator.com", "notrnailinator.com", "notsharingmy.info", "novaemail.com", "novaprime.vip", "novasub.click", "novyrix.cfd", "now.im", "nowhere.org", "nowmymail.com", "nowmymail.net", "nownuri.net", "nowrouter.store", "nowyoudme1.cc.cd", "noyavip.com", "noyp.fr.nf", "nproxi.com", "nqmo.com", "nrbs.me", "nrdsthrh.mcndeb.de5.net", "nrehi.com", "nriza.com", "nrlord.com", "ns01.biz", "nsvpn.com", "ntelos.net", "nthrl.com", "ntlhelp.net", "ntlworld.com", "ntscan.com", "nubescontrol.com", "nucleant.org", "nuitx.com", "null.net", "nulla.de5.net", "nullbox.asia", "nullbox.info", "nuoifb.com", "nuox.eu.org", "nur-fuer-spam.de", "nurfuerspam.de", "nus.edu.sg", "nut.cc", "nutpa.net", "nuts2trade.com", "nvhrw.com", "nvqt304.xyz", "nwldx.com", "nwrlr.org", "nwytg.com", "nwytg.net", "nxdbxd.dpdns.org", "nxdbxd.indevs.in", "nxdbxd.top", "nxdbxdl.cc.cd", "nxt.ru", "ny.com", "ny7.me", "nyasan.com", "nybella.com", "nyc.com", "nycmail.com", "nyfhk.com", "nypato.com", "nyrmusic.com", "nyx223.eu.cc", "nyxmail.pro", "nyxpanel.xyz", "nyxstores.id", "nzoomail.com", "o-tay.com", "o2.co.uk", "o2stk.org", "o7i.net", "oaifree.ai6.me", "oaklandas-fan.com", "oakon.com", "oalsp.com", "oath.com", "obelion.cfd", "obfusko.com", "objectmail.com", "obobbo.com", "oborudovanieizturcii.ru", "obxpestcontrol.com", "oc.lacdn.cn", "oceanfree.net", "oceva.site", "ocn.ne.jp", "octovie.com", "odaymail.com", "oddpost.com", "odeask.com", "odem.com", "odmail.com", "odn.ad.jp", "odn.ne.jp", "odnorazovoe.ru", "odynex.online", "oepia.com", "oerpub.org", "oewc.top", "ofanda.com", "office-dateien.de", "office-email.com", "officecombine.com", "offroadwarrior.com", "offshore-proxies.net", "ofisher.net", "ogoplace.pro", "ogrencikredisi.org", "ohaaa.de", "ohgitu.me", "ohi.tw", "ohm.edu.pl", "oicexchange.com", "oida.icu", "oiioii.email", "oiioii.vip", "oikrach.com", "oing.cf", "okbank.com", "okcdeals.com", "okclprojects.com", "okcpress.com", "okcx.edu.rs", "okcxhssgk.top", "okhko.com", "okhuman.com", "okiae.com", "okinawa.li", "okmad.com", "okmagic.com", "okname.net", "okrent.us", "oku.ovh", "okuk.com", "oky.ovh", "okzk.com", "oldao.com", "oldies104mail.com", "ole.com", "olemail.com", "oletters.com", "oliespace.id", "olimp-case.ru", "olisup.cyou", "oliviadiffuser.store", "oloh.ru", "oloh.store", "olympist.net", "olypmall.ru", "omail.de", "omail.pro", "omaninfo.com", "omarnasrrr.com", "omen.ru", "omfg.run", "omgheels.com", "omkiujk.ddnsgeek.com", "omnievents.org", "omnilog.space", "omnisent.cfd", "omnivex.cfd", "omtecha.com", "onbap.com", "one-mail.top", "one-ml.com", "one-sec-mail.site", "one-time.email", "one2mail.info", "onebox.com", "onekisspresave.com", "onelettersmail.com", "onemail.host", "onemuou.com", "onenet.com.ar", "oneoffemail.com", "oneoffmail.com", "onet.com.pl", "onet.eu", "onet.pl", "onetm-ml.com", "onetm.jp", "onetopclick.online", "oneummahorg.uk", "onewaymail.com", "onheb.com", "oninet.pt", "onionred.com", "oniventa.cfd", "onlatedotcom.info", "onldm.net", "online.ie", "online.ms", "online.nl", "onlinecmail.com", "onlineidea.info", "onlinewiz.com", "onlyapp.net", "onmailflare.com", "onmilwaukee.com", "onobox.com", "onqin.com", "ontasa.com", "ontyne.biz", "oohioo.com", "oolus.com", "oonies-shoprus.ru", "oooooooo.store", "oopi.org", "oosln.com", "oovk.ru", "oovk.store", "ooxxoo.asia", "op.pl", "opayq.com", "opelkun.net", "opemails.com", "openagent.cfd", "openavz.com", "openclawskill.shop", "opendns.ro", "openedclaw.top", "openmail.pro", "openmailbox.org", "opentrash.com", "openwrt.qzz.io", "operafan.com", "operamail.com", "opihhushdjn.cyou", "opmmedia.ga", "opoczta.pl", "oposite.org", "opp24.com", "opportunity-africa.com", "optician.com", "optimaweb.me", "optivex.cfd", "optonline.net", "optusnet.com.au", "opwebw.com", "oranek.com", "orange.fr", "oravantis.cfd", "oravell.cfd", "orbit25k.io.vn", "orbitel.bg", "orbitxhive.com", "orbixacoa.com", "orceqjqw.top", "ordinaryamerican.net", "ordite.com", "oreidresume.com", "orgmail.net", "orgmail.pro", "orgmbx.cc", "orimassage.com", "oroki.de", "oronny.com", "orsbap.com", "orthodontist.net", "ortogenmail.com", "osaxadinhos.com.br", "oscarluna.xyz", "osd.edu.kg", "oshietechan.link", "osifixtech.com.mx", "osite.com.br", "oskarstalbergcitygenerator.com", "oso.com", "ospirun.com", "ostahie.com", "ostinmail.com", "osux.cyberdigital.site", "osuzu.eu.cc", "osxofulk.com", "otakumail.com", "otherinbox.com", "otmail.jp", "otona.uk", "otp1second.com", "otp1second.net", "otp1second.online", "otp1second.xyz", "otp2s.com", "otp3s.com", "otpgmail.com", "otpku.com", "otpquick.com", "ouchcloud.com", "ouk.me", "oupul8b1k.bond", "oupul8b1k.cyou", "our-computer.com", "our-office.com", "our.st", "ourbrisbane.com", "ourklips.com", "ourl.me", "ournet.md", "ourpreviewdomain.com", "outdaremusicdevon.org", "outgun.c
5749om", "outiook.com", "outlawspam.com", "outlook.at", "outlook.be", "outlook.cl", "outlook.co.id", "outlook.co.il", "outlook.co.nz", "outlook.co.th", "outlook.com", "outlook.com.au", "outlook.com.br", "outlook.com.gr", "outlook.com.pe", "outlook.com.tr", "outlook.com.vn", "outlook.cz", "outlook.de", "outlook.dk", "outlook.edu.pl", "outlook.es", "outlook.fr", "outlook.hu", "outlook.ie", "outlook.in", "outlook.it", "outlook.jp", "outlook.kr", "outlook.lv", "outlook.my", "outlook.nl", "outlook.ph", "outlook.pt", "outlook.sa", "outlook.sg", "outlook.sk", "outlook.tw", "outlookapp.tech", "outlooks.bond", "outmail.win", "ovbest.com", "over-the-rainbow.com", "ovomail.co", "ovpn.to", "owleyes.ch", "owlpic.com", "ownmail.net", "ownsyou.de", "owo-mailteam.bond", "owo-mailteam.cyou", "owube.com", "oxfo.edu.pl", "oxmail.homes", "oxopoha.com", "oyisam.my", "ozatvn.com", "ozbytes.net.au", "ozemail.com.au", "ozm.fr", "ozsaip.com", "ozyl.de", "p-668.top", "p-aac.top", "p-banlis.ru", "p-kk2.icu", "p-ttz.top", "p-y.cc", "p.evev.fun", "p1aintiff.qzz.io", "p33.org", "p71ce1m.com", "pa9e.com", "pacbell.net", "pachilly.com", "pacific-ocean.com", "pacific-re.com", "pacificwest.com", "packersfan.com", "packiu.com", "padue.app", "pagamenti.tk", "pagina.de", "pagons.org", "paharpurmim.ga", "pakadebu.ga", "pakistanmail.com", "pakistanoye.com", "palaze.cc", "palestinemail.com", "paliospiti.com", "pamaweb.com", "pamil.fr.nf", "pancakemail.com", "panda.tnc.ne.jp", "pandora.be", "pandorasboxproductions.org", "panlix.cloud", "papierkorb.me", "paplease.com", "para2019.ru", "paran.com", "paratrabajar.xyz", "parisdaily.fr", "parkjiyoon.com", "parlimentpetitioner.tk", "parsitv.com", "parsmail.com", "parthekio.live", "parthxxtoasts.site", "partlycloudy.com", "partybombe.de", "partyheld.de", "partynight.at", "parvazi.com", "passeone.com", "passeone.xyz", "passwordmail.com", "past-line.com", "pastebitch.com", "pastryofistanbul.com", "pathfindermail.com", "patity.com", "patonce.com", "pavilionx2.com", "pawobby.cfd", "paxlys.com", "paylaar.com", "payperex2.com", "payspun.com", "pazard.com", "pazuric.com", "pbgmlzez.top", "pbhak.dev", "pcaa.lol", "pcbb.lol", "pckage.com", "pconnections.net", "pcph.asia", "pcpostal.com", "pcsrock.com", "pcusers.otherinbox.com", "pddfw.cn", "pdf-cutter.com", "pdood.com", "pdvs.top", "pdx.ne.jp", "pe.hu", "peakinbox.net", "pecinan.com", "pecinan.net", "pecinan.org", "pediatrician.com", "pelviro.sbs", "penisgoes.in", "penoto.tk", "penpen.com", "peoplepc.com", "peopleweb.com", "pepamail.com", "pepbot.com", "percyfx.com", "perfectmail.com", "perso.be", "personal.ro", "personales.com", "pertera.com", "pesagilt.top", "peterdethier.com", "petloca.com", "petlover.com", "petml.com", "petrzilka.net", "pettypool.com", "pewpewpewpew.pw", "pezeshkpour.com", "pflege-schoene-haut.de", "pfui.ru", "phamay.com", "phanmembanhang24h.com", "phayze.com", "phctool.com", "philipdowney.com", "phimib.com", "phimteen.net", "phmail.site", "phone-elkey.ru", "phone.net", "photo-impact.eu", "photobrex.com", "photographer.net", "photomark.net", "phpbb.uu.gl", "phpto.us", "phreaker.net", "phucmmo.com", "phuongnhicare.com", "phus8kajuspa.cu.cc", "phuturemail.com", "phyones.com", "physcroenmail.com", "physicaladithama.io", "physicist.net", "pi.vu", "piaa.me", "pianomail.com", "picdirect.net", "pickuplanet.com", "pickupman.com", "picturehostel.com", "picturehostel.fr", "picturehostel.org", "picturehostel.store", "picusnet.com", "pig.pp.ua", "pigeonprotocol.com", "pigpig.net", "pii.at", "pikara.ne.jp", "piki.si", "pimpedupmyspace.com", "pinehill-seattle.org", "pingddns.net", "pingir.com", "pink.cleansite.us", "pinkgreengenerator.me", "pinmx.net", "pinoymail.com", "pinpool.ai", "pipemail.space", "pipmmotube.store", "pippoc.com", "piracha.net", "piscesbody.xyz", "pisem.net", "pisls.com", "pitaniezdorovie.ru", "pithu.org", "pitiful.pp.ua", "pivo-bar.ru", "pivotylabs.pro", "pixdd.com", "pixelcroft.org", "pixelgagnant.net", "pixiil.com", "pixoledge.net", "pizu.ru", "pizu.store", "pizuhdev.work", "pizzajunk.com", "pjjkp.com", "pkday.eu.cc", "placebomail10.com", "plala.or.jp", "planet.nl", "planetaccess.com", "planetarymotion.net", "planetearthinter.net", "planetmail.com", "planetmail.net", "planetout.com", "planworker.pro", "plasa.com", "playersodds.com", "playful.com", "playstation.sony.com", "pleasenoham.org", "plenoryx.cfd", "plexfirm.com", "plexolan.de", "plhk.ru", "pliz.fr.nf", "ploae.com", "ploki.fr", "ploncy.com", "plowcreek.org", "plugintonature.org.uk", "plus.com", "plus.google.com", "plusmail.com.br", "plw.me", "pm.me", "pmail.net", "pmail.site", "pngk.uk", "pngrise.com", "pntvipveo45k.io.vn", "pnvipveo25k.io.vn", "pobbofqd.top", "pobox.hu", "pobox.sk", "pochta.ru", "pochtac.ru", "poczta.fm", "poczta.onet.pl", "poehali-otdihat.ru", "poetic.com", "pofmagic.com", "pojok.ml", "pokemail.net", "pokemonpost.com", "pokemons1.fr.nf", "pokepost.com", "pokiemobile.com", "polandmail.com", "polarkingxx.ml", "polbox.com", "policeoffice.com", "politician.com", "politikerclub.de", "polizisten-duzer.de", "polkaroad.net", "polvexar.space", "polyfaust.com", "polyfaust.net", "polysolextcoin.cloud", "pongpong.org", "ponp.be", "pooae.com", "poofy.org", "pookmail.com", "pool-sharks.com", "poolemethodists.org.uk", "poond.com", "pooo.ooguy.com", "poopiebutt.club", "popaccount.com", "popcornfarm7.com", "popcornfly.com", "popes
5749odomy.com", "popgx.com", "poplk.com", "popmail.com", "popol.fr.nf", "popsmail.com", "popstar.com", "porjoton.com", "porsh.net", "porsilapongo.cl", "portaltrendsarena.com", "portfolink.vps.cd", "portugalmail.com", "portugalmail.pt", "portugalnet.com", "pos.lukeliou.site", "posdz.com", "positive-thinking.com", "positivevoiceteesvalley.co.uk", "post.com", "post.cz", "post.sk", "posta.ro", "posta.store", "postaccesslite.com", "postacin.com", "postafree.com", "postaweb.com", "postbx.ru", "postbx.store", "posteo.at", "posteo.be", "posteo.ch", "posteo.cl", "posteo.co", "posteo.de", "posteo.dk", "posteo.es", "posteo.gl", "posteo.net", "posteo.no", "posteo.us", "postfach.cc", "postinbox.com", "postino.ch", "postm.net", "postmark.net", "postmaster.co.uk", "postmaster.twitter.com", "postonline.me", "postpro.net", "poubelle-du.net", "poubelle.fr.nf", "pousa.com", "poutineyourface.com", "powerdea.me", "powered.name", "powerencry.com", "powerfan.com", "powerscrews.com", "powlearn.com", "pox2.com", "pozima.rest", "pp-n6.top", "pp-tw.cc", "pp.inet.fi", "pp7rvv.com", "ppdf.cc", "ppedu.pp.ua", "ppetw.com", "ppoo.ccwu.cc", "pptrvv.com", "pqoia.com", "praize.com", "pratikmail.com", "pratikmail.net", "pratikmail.org", "prazdnik-37.ru", "prc.cx", "predatorrat.cf", "predatorrat.ga", "predatorrat.gq", "predatorrat.ml", "predatorrat.tk", "premiapp.com", "premieragents.net", "premierr.site", "premigu.co", "premirum.shop", "premium-mail.fr", "premiumgo.id", "premiumonebd.store", "premiumservice.com", "premsy.net", "presidency.com", "press.co.jp", "prestige-leadership.org", "prestore.space", "pretreer.com", "pricegh.com", "pricegh.fun", "pride-worldwi.de", "priest.com", "primabananen.net", "primalhigh.click", "primejetnet.com", "primposta.com", "primposta.hu", "prin.be", "printz.site", "prisonity.com", "privacy-mail.top", "privacy.net", "privacyshield.cc", "privatdemail.net", "privmail.edu.pl", "privo.edu.pl", "privy-mail.com", "privy-mail.de", "privymail.de", "priyo-mail.com", "priyo.ovh", "priyo.site", "priyoemail.site", "priyomail.in", "priyomail.net", "priyomail.top", "priyomail.uk", "priyomail.us", "priyor.com", "priyp.com", "prkmail.xyz", "pro-tag.org", "pro.hu", "pro5g.com", "probemail.com", "procrackers.com", "prodigy.net", "productmm.shop", "profast.top", "progetplus.it", "programist.ru", "programmer.net", "programozo.hu", "prohade.com", "prohisi.store", "proinbox.com", "project2k.com", "projectcl.com", "promailt.com", "promessage.com", "promyvia.cfd", "prontomail.com", "proprietativalcea.ro", "propscore.com", "prosocial.io.vn", "protectsmail.net", "protempmail.com", "protestant.com", "proton.me", "protonmail.ch", "protonmail.com", "protonza.com", "prout.be", "proveity.com", "proxy-gateway.net", "proxymail.eu", "proxyparking.com", "prtnx.com", "prtshr.com", "prtz.eu", "prydirect.info", "psai.run.place", "psh.me", "psles.com", "psnator.com", "psoxs.com", "pspay.xyz", "psv-supporter.com", "ptct.net", "ptd.net", "ptncereio.com", "ptnstudio.vn", "ptsculure.com", "puabook.com", "public-files.de", "public.usa.com", "publicist.com", "puffiqo.store", "puglieisi.com", "puji.pro", "pulp-fiction.com", "pulse25k.io.vn", "punchbagartgallery.org.uk", "punkass.com", "punkproof.com", "puppetmail.de", "purcell.email", "pureheart.org.uk", "purelogistics.org", "purifyzed.org", "purmuttad.com", "purpleturtle.com", "pursip.com", "pushcom.store", "pusmail.com", "pussport.com", "put2.net", "puttanamaiala.tk", "putthisinyourspamdatabase.com", "puxa.top", "pvnmax.space", "pwpwa.com", "pwrby.com", "pwx129.love", "pxlys.com", "pylm.ccwu.cc", "pyrosenex.cfd", "pyskillsgame.com", "q.com", "q.elementfx.com", "qabq.com", "qacmjeq.com", "qamlykl.info", "qasti.com", "qatarmail.com", "qavexo.site", "qbfree.us", "qc.to", "qcgmtzhzh.top", "qd.je", "qd28max.eu.cc", "qejjyl.com", "qentic.shop", "qeurtor.com", "qgming.qzz.io", "qhgs.com", "qiang66.ccwu.cc", "qibl.at", "qiott.com", "qipmail.net", "qiq.us", "qisdo.com", "qisoa.com", "qiuvision.com", "qlhub.org.uk", "qmail.com", "qmrbe.com", "qodiq.com", "qoika.com", "qopow.com", "qoq.indevs.in", "qprfans.com", "qq.com", "qq.my", "qrio.com", "qsl.ro", "qsmail.cc.cd", "qsuo.uno", "qtum-ico.c
5749om", "quackquack.com", "quadrafit.com", "quakemail.com", "qualityservice.com", "quantentunnel.de", "quantorynexus.space", "quarvex.cfd", "qudone.net", "qudsmail.com", "quentavo.cfd", "quepasa.com", "questtechsystems.com", "quick-mail.cc", "quickdrop.buzz", "quickemail.info", "quickhosts.com", "quickinbox.com", "quickmail.nl", "quicknet.nl", "quicksend.ch", "quickwebmail.com", "quiet-branch.com", "quiklinks.com", "quikmail.com", "quillet.eu", "quinz.me", "quipas.com", "quixentra.cfd", "quorixia.cfd", "ququb.com", "qv7.info", "qvmao.com", "qvttclass.us", "qvy.me", "qweasd123.cc.cd", "qwer.729406.xyz", "qwertyhandsome.net", "qwest.net", "qwestoffice.net", "qwezxc321.cc.cd", "qwickmail.com", "qydxproapi.store", "qytechs.cn", "qzueos.com", "r-o-o-t.com", "r2money.io.vn", "r4.sdfe.app", "r4nd0m.de", "ra3.us", "raakim.com", "rabin.ca", "rabiot.reisen", "rabitex.com", "racaho.com", "racedriver.com", "racefanz.com", "racingfan.com.au", "racingmail.com", "rackabzar.com", "racovor.com", "radiant-flow.org", "radicalz.com", "radiku.ye.vc", "radiologist.net", "rael.us", "raetp9.com", "ragingbull.com", "rainbowly.ml", "rajaiblis.com", "raketenmann.de", "rakumail.jp", "rakuten.jp", "raleigh-construction.com", "ralib.com", "rambler.ru", "ramcen.com", "ramenmail.de", "ramin200.site", "ramizan.com", "rancidhome.net", "randol.infos.st", "randomail.io", "randomail.net", "ranmamail.com", "raotus.com", "rapidefr.fr.nf", "rapplo.com", "rapt.be", "raqid.com", "rastogi.net", "ratt-n-roll.com", "rattle-snake.com", "raubtierbaendiger.de", "ravavo.bond", "ravearena.com", "ravemail.com", "raveqxon.blog", "rawr.foo", "rax.la", "raxio.app", "raxtest.com", "rayrayactive.com", "razemail.com", "razeny.com", "razormail.com", "razuz.com", "rbb.org", "rbs1.xyz", "rcasd.com", "rccgmail.org", "rccgmanifestinghisglory.co.uk", "rcn.com", "rcpt.at", "rdevmail.tokenized.name", "rdklcrv.xyz", "rdsekaunx.top", "re-gister.com", "realemail.net", "reality-concept.club", "reallyfast.biz", "reallyfast.info", "reallymymail.com", "realmail.co", "realman.mywire.org", "realmka.io", "realquickemail.com", "realradiomail.com", "realseek.xyz", "realtyagent.com", "realtyalerts.ca", "reapsa.com", "rebates.stream", "reborn.com", "receiveee.com", "recipeforfailure.com", "reclameaqui.services", "recode.me", "reconmail.com", "recyclemail.dk", "recycler.com", "recyclermail.com", "redfeathercrow.com", "redi.fr.nf", "rediff.com", "rediffmail.com", "rediffmailpro.com", "rednecks.com", "rednotecreatoracademy.art", "redproxies.com", "redseven.de", "redsfans.com", "reestore.site", "refblogs.com", "refk.site", "reftoken.net", "regapts.com", "regbypass.com", "reggaefan.com", "registerednurses.com", "regspaces.tk", "regvippro.site", "reimondo.com", "reincarnate.com", "rejectmail.com", "rejo.technology", "rekaer.com", "reliable-mail.com", "relieve.us.ci", "religious.com", "remahankerupuk.com", "remai.freeddns.org", "remail.cf", "remail.ga", "remarkable.rocks", "remote.li", "remoteflyer.co.uk", "renkun.biz.id", "renkun.my.id", "renren.com", "rensumo.top", "rentaen.com", "rentop.asia", "renvotra.cfd", "renydox.com", "repairman.com", "reply.hu", "reply.ticketmaster.com", "replyloop.com", "reportfresh.com", "representative.com", "reptilegenetics.com", "rescueteam.com", "resgedvgfed.tk", "resmso.com", "resource.calendar.google.com", "restorationchurchtv.com", "resumeforest.cn", "resumemail.com", "reusable.email", "reusecomputers.site", "reverendneedham.co.uk", "reviewfood.vn", "revolvingdoorhoax.org", "rexabot.com", "rexmoo.ccwu.cc", "rexornge.net", "rexornge.site", "reymaticx.com", "rezai.com", "rezato.com", "rf.gd", "rfc822.org", "rfods.tech", "rfzpnrbpv.top", "rgbeastcomputers.site", "rhalmshouse.church", "rhalmshouse.co.uk", "rhyta.com", "riazra.bond", "ricardo0911.xyz", "richfinances.pw", "richmondhill.com", "rickymail.com", "riddermark.de", "riffproductions.co.uk", "rifkian.ga", "rikka0612.site", "rilzz.store", "rimshacooking.site", "rin.ru", "rinseart.com", "riopreto.com.br", "rippb.com", "risinggirl.co.uk", "risingsuntouch.com", "riski.cf", "risu.be", "rith.me", "rklips.com", "rkomo.com", "rkzpcx.top", "rm2rf.com", "rma.ec", "rmmr.fun", "rmqkr.net", "rn.com", "rnailinator.com", "rnmut8pudgj0ikregqx6.dynv6.net", "ro.lt", "ro.ru", "roadrunner.com", "roanokemail.com", "robertspcrepair.com", "roborena.com", "robot-mail.com", "robothandcook.cfd", "rock.com", "rocketmail.com", "rocketship.com", "rockfan.com", "rodhazlitt.com", "rodrun.com", "rogers.com", "roguemaster.dev", "rollindo.agency", "rome.com", "ronete.com", "ronger.cfd", "ronghsng.buzz", "ronnierage.net", "roosh.com", "rootfest.net", "rootprompt.org", "roratu.com", "roroki.cn", "rosebearmylove.ru", "rotaniliam.com", "rotomails.co.uk", "rotomails.com", "rouflav.com", "roughnet.com", "route64.de", "routerboardvietnam.com", "rover.info", "rowdydow.com", "rowe-solutions.
5749com", "roweryo.com", "royal.net", "royaldoodles.org", "royalmarket.life", "royalpriesthoodagc.org.uk", "royandk.com", "roybl.com", "rppkn.com", "rr.com", "rr.nu", "rrohio.com", "rs.sdfe.app", "rsub.com", "rsvhr.com", "rt.jesys.net", "rteet.com", "rtrobinsbequest.org.uk", "rtrtr.com", "rtskiya.xyz", "rua.pp.ua", "rubyridge.com", "rudymail.ml", "ruinique.tech", "rukiaops.me", "rulersonline.com", "rumahweb.site", "rumgel.com", "runbox.com", "runcubesapps.id", "runi.ca", "rupayamail.com", "ruru.be", "rushpost.com", "rustydoor.com", "rustyload.com", "ruttolibero.com", "ruu.kr", "ruutukf.com", "rvb.ro", "rvneous.com", "rvshop.com", "rwstatus.com", "rwxsxnomo.top", "rxinai.com", "rxs9.cn", "rygel.infos.st", "rymtool.eu.cc", "ryteto.me", "ryuu.codes", "ryyr.ru", "ryyr.store", "s-mail.com", "s-mail.social", "s-mdg.top", "s0ny.net", "s1q59z82q.top", "s33db0x.com", "s3k.net", "s4sfoundation.org.uk", "sabreshockey.com", "sabrestlouis.com", "sacbeemail.com", "sackboii.com", "sad23321adja.cn", "sadfg.indevs.in", "sadrain.shop", "sads-ads-awe.top", "saeoil.com", "saeuferleber.de", "safaat.cf", "safe-mail.net", "safemail.site", "safermail.info", "safersignup.de", "safetymail.info", "safetypost.de", "safrica.com", "sagametour.com", "sagra.lu", "sags-per-mail.de", "saharanightstempe.com", "sahildash.dev", "sailmail.io", "sailormoon.com", "saintly.com", "saintmail.net", "saisonhama.shop", "sajutadollars.com", "sakoonthroughcancer.com", "sakurapink.top", "salakoais.shop", "sale-sale-sale.com", "salehi.net", "saleis.live", "salesperson.net", "salmeow.tk", "sam1.eu.org", "samaltour.site", "samaritanfamilyfoundation.com", "samblogs.nett.to", "samblogs.zone.id", "samerica.com", "samilan.net", "sammimail.com", "samsclass.info", "sandcars.net", "sandelf.de", "sandwhichvideo.com", "sanfinder.com", "sanfnge.run", "sanfnges.cc", "sanfranmail.com", "sanim.net", "sanook.com", "sanstr.com", "saovangtiles.site", "sapo.pt", "sappisi.com", "sarawakreport.com", "sast.ro", "sasukiez.shop", "satisfyme.club", "satorix.id", "satukosong.com", "saturrshop.uk", "saudia.com", "saungadaid.pro", "sausen.com", "save4now.com", "savelife.ml", "savemydinar.com", "savests.com", "say0.com", "sayhi.net", "saynotospams.com", "sayverfox.com", "sbcglbal.net", "sbcglobal.com", "sbcglobal.net", "sbgork.icu", "scandalmail.com", "scarlet.nl", "scatmail.com", "scatterteam.com", "scay.net", "schachrol.com", "schafmail.de", "schizo.com", "schmeissweg.tk", "schmusemail.de", "schoolemail.com", "schoolmail.com", "schoolsucks.com", "schreib-doch-mal-wieder.de", "schrott-email.de", "schweiz.org", "sci.fi", "scientist.com", "scifianime.com", "scook.cfd", "scotland.com", "scotlandmail.com", "scottcoffman.net", "scottishmail.co.uk", "scottni.com", "scottsboro.org", "scpulse.com", "scrsot.com", "scubadiving.com", "sd3.in", "sdbbs.cc", "sdfsdf.nl", "sdhaiok.eu.cc", "sdj.fr.nf", "sdsfre.blog", "sdvft.com", "sdvgeft.com", "sdvrecft.com", "seakris.fun", "seanet.com", "search.ua", "search4gpt.com", "searchwales.com", "seasonofgrace.org", "sebbcn.net", "sebil.com", "seckinmail.com", "secmail.pw", "secret-police.com", "secretary.net", "secretemail.de", "secretservices.net", "secure-mail.biz", "secure-mail.cc", "secured-link.net", "securehost.com.es", "securemail.edu.pl", "sedekah-mudah.com", "seduck.com", "seductive.com", "seedcorn.foundation", "seedspeed.site", "seekapps.com", "seekjobs4u.com", "seekstoyboy.com", "seguros.com.br", "sehier.fr", "sejaa.lv", "sekotong.store", "selaciptama.com", "seler25k.io.vn", "selfdestructingmail.com", "selfdestructingmail.org", "selftrak.fit", "selltub.com", "selltub.me", "seman.edu.kg", "semut.me", "send.hu", "send22u.info", "send4.uk", "sendapp.uk", "sendfree.org", "sendgrid.ovh", "sendingspecialflyers.com", "sendme.cz", "sendnow.win", "sendo.dedyn.io", "sendo.giize.com", "sendokai.click", "sendos.fr.nf", "sendos.infos.st", "sendspamhere.com", "sengkuni.dedyn.io", "sengkuni.qzz.io", "sengkuni.xx.kg", "senpro.store", "senseless-entertainment.com", "sent.as", "sent.at", "sent.com", "sentra-premium.com", "sentrismail.com", "senvas.me", "senyan.fun", "seosnaps.com", "seqerc.com", "serbaprem.store", "serci.app", "serenith.cfd", "serga.com.ar", "servemymail.com", "server-x.mail.azurec.xyz", "server.ms", "servermaps.net", "servicee.es", "services391.com", "servicetr.me", "sesasdl.top", "sesmail.com", "setxko.com", "sevopay.com", "sewink.my.id", "sex520.eu.org", "sexforswingers.com", "sexical.com", "sexmagnet.com", "sexyalwasmi.top", "seznam.cz", "sfacg.org", "sfolkar.com", "sfsfdsrfe24242.eu.cc", "sgatra.com", "sgm.ovh", "shaceng.biz.id", "shaceng.my.id", "shadap.org", "shaguaaini.click", "shahabnoor.org", "shahweb.net", "shalar.net", "shanh
5749aijuli.sbs", "shaniastuff.com", "shanyouem.xyz", "shaole.me", "sharebot.net", "shared-files.de", "sharedmailbox.org", "sharkfaces.com", "sharklasers.com", "sharmaweb.com", "shaw.ca", "shchiba.uk", "she.com", "sheerid.top", "sheinup.com", "shengxia.asia", "sherazhaider.com", "sheryli.com", "shhmail.com", "shhuut.org", "shieldedmail.com", "shieldedpost.net", "shieldemail.com", "shiftmail.com", "shiita12.com", "shinedyoureyes.com", "shipfromto.com", "shiphazmat.org", "shipping-regulations.com", "shippingterms.org", "shiptudo.com", "shitaway.cf", "shitaway.cu.cc", "shitaway.ga", "shitaway.gq", "shitaway.ml", "shitaway.tk", "shitaway.usa.cc", "shitmail.de", "shitmail.me", "shitmail.org", "shitware.nl", "shizuku-lulu.love", "shkele.cyou", "shmeriously.com", "shockinmytown.cu.cc", "shootmail.com", "shopaccmmo.com", "shopbantkclone.com", "shopcreative.cc", "shopempva11.com", "shopld.linkpc.net", "shopvipduzk666.shop", "shopvipduzk6868.shop", "shopxda.com", "shopy.club", "shortmail.com", "shortmail.net", "shortweb.live", "shotgun.hu", "shotmail.ru", "showslow.de", "shrib.com", "shuelder.com", "shuf.com", "shut.name", "shut.ws", "shxwonew.xyz", "sialkotcity.com", "sialkotian.com", "sialkotoye.com", "siap-sepuh.com", "siberpay.com", "sicmg.com", "sidelka-mytischi.ru", "sidement.com", "sidlabs.site", "sidneymichaelpoland.travel", "siempre.gratis", "sifan077.cc.cd", "siftportal.ru", "sify.com", "sig.de5.net", "signalxp.com", "signinid.com", "signsoflife.org.uk", "sihanoma.store", "sika3.com", "sikux.com", "silenceofthespam.com", "silentmail.ccwu.cc", "siliwangi.ga", "silkroad.net", "silvaron.cfd", "silvercoin.life", "sim-simka.ru", "simaenaga.com", "simoka.sbs", "simpleitsecurity.info", "simranaitech.space", "sin.cl", "sina.cn", "sina.com", "sinaite.net", "sinamail.com", "sind-hier.com", "sind-wir.com", "sindhier.com", "sindwir.com", "sinema.ml", "sinfiltro.cl", "singapore.com", "singles4jesus.com", "singlespride.com", "singmail.com", "singnet.com.sg", "sinnlos-mail.de", "sino.tw", "sinorto.com", "siperer.online", "siroja.top", "siteinfox.com", "siteposter.net", "sitwelltownlands.org.uk", "six25.biz", "sixoplus.com", "sizzlemctwizzle.com", "sjuaq.com", "sjusngde.info", "sk-ai.eu.cc", "skafan.com", "skeefmail.com", "skim.com", "skingkong.com", "skizo.hu", "skrak.com", "skrhqfnya.top", "skrx.tk", "sky-inbox.com", "sky-ts.de", "sky.com", "sky.tkc.ne.jp", "sky.tkk.ne.jp", "sky.tu-ka.ne.jp", "skyemails.app", "skyemails.tech", "skyforte25k.io.vn", "skygazer42.cn", "skygazerhub.com", "skyhope666.icu", "skynet.be", "skynet.infos.st", "skyrt.de", "skytopway.com", "slamdunkfan.com", "slapsfromlastnight.com", "slaskpost.se", "slave-auctions.net", "slimirin.com", "slingshot.com", "slippery.email", "slipry.net", "sliverkeigo.fun", "slo.net", "slopsbox.com", "slothmail.net", "slotter.com", "slowpokerfrance.eu", "slow
5749pokerfrance.fr", "slowpokerfrance.org", "slowpokerfrance.store", "slushmail.com", "slushpools.cloud", "sluteen.com", "sly.io", "slyouthuk.org", "smailpro.com", "smakit.vn", "smallker.tk", "smap.4nmv.ru", "smapfree24.com", "smapfree24.de", "smapfree24.eu", "smapfree24.info", "smapfree24.org", "smapxsmap.net", "smartemailbox.co", "smartnator.com", "smarttalent.pw", "smarttickethub.com", "smashmail.de", "smell.sbs", "smellfear.com", "smellrear.com", "smellypotato.tk", "smeux.com", "smileyface.comsmithemail.net", "smkanba.com", "smncloud.com", "smoothmail.com", "smpcharity.co.uk", "smpnegeri4-pwt.my.id", "sms.at", "smtp99.com", "smwg.info", "smykwb.com", "sn6fk3.nsmjj.tech", "snail-mail.net", "snakebite.com", "snakebutt.com", "snakemail.com", "snapbx.com", "snapmail.cc", "snapmail.site", "snapmail.xyz", "snapwet.com", "sndt.net", "sneakemail.com", "sneakmail.de", "snece.com", "snet.net", "sneydgreen-communityhall.co.uk", "sniper.hu", "snkmail.com", "snoopymail.com", "snowboarding.com", "snowdonia.net", "snowlash.com", "snpmail.fun", "so-net.ne.jp", "soc123.net", "socamail.com", "socceramerica.net", "soccermail.com", "soccermomz.com", "social-mailer.tk", "socialfurry.org", "socialist.sbs", "sociallymediocre.com", "socialpulse.casa", "socialworker.net", "sociologist.com", "soco7.com", "socoori.com", "sofia.re", "sofimail.com", "sofort-mail.de", "sofortmail.de", "sofrge.com", "softbank.id", "softbank.ne.jp", "softhome.net", "softkey-office.ru", "softlitceg.com", "softpls.asia", "sogetthis.com", "sogou.com", "sohai.ml", "sohao.top", "sohu.com", "sohus.cn", "soioa.com", "soisz.com", "sol.dk", "solar-impact.pro", "solarnyx.com", "solarunited.net", "solarunited.org", "solcon.nl", "soldier.hu", "solenox.cfd", "solerbe.net", "solkill.store", "solquira.cfd", "solution4u.com", "solvemail.info", "solventtrap.wiki", "somelora.com", "somoj.com", "son2d.site", "songsan.business", "songsign.com", "songwriter.net", "soniot.fr", "soniot.info", "soniot.online", "soniot.store", "sonjj.edu.pl", "sonnenkinder.org", "sonny.tk", "sonphuongthinh.com", "sonrusu.com", "sonshi.cf", "soodmail.com", "soodomail.com", "soodonims.com", "soombo.com", "soon.com", "soon.it", "soppat.com", "soscandia.org", "soson.shop", "soul-association.com", "soulfoodcookbook.com", "southai.bond", "southeastessexanimal.uk", "soyboy.observer", "sozenit.com", "sp.nl", "spaaqs.ne.jp", "space-bank.com", "space-man.com", "space-ship.com", "space-travel.com", "space.com", "spacebazzar.ru", "spacehotline.com", "spacemart.com", "spacetowns.com", "spacewar.com", "spacework.top", "spacezin.space", "spainmail.com", "spam-be-gone.com", "spam.2012-2016.ru", "spam.care", "spam.ceo", "spam.la", "spam.org.es", "spam.su", "spam4.me", "spamail.de", "spamarrest.com", "spamavert.com", "spambob.com", "spambob.net", "spambob.org", "spambog.com", "spambog.de", "spambog.net", "spambog.ru", "spambooger.com", "spambox.info", "spambox.me", "spambox.org", "spambox.us", "spambox.xyz", "spamcero.com", "spamcon.org", "spamcorptastic.com", "spamcowboy.com", "spamcowboy.net", "spamcowboy.org", "spamday.com", "spamdecoy.net", "spameater.com", "spameater.org", "spamex.com", "spamfellas.com", "spamfighter.cf", "spamfighter.ga", "spamfighter.gq", "spamfighter.ml", "spamfighter.tk", "spamfree.eu", "spamfree24.com", "spamfree24.de", "spamfree24.eu", "spamfree24.info", "spamfree24.net", "spamfree24.org", "spamgoes.in", "spamherelots.com", "spamhereplease.com", "spamhole.com", "spamify.com", "spaminator.de", "spamkill.info", "spaml.com", "spaml.de", "spamlot.net", "spammer.fail", "spammotel.com", "spammy.host", "spamobox.com", "spamoff.de", "spamok.de", "spamsalad.in", "spamsandwich.com", "spamslicer.com", "spamsphere.com", "spamspot.com", "spamstack.net", "spamthis.co.uk", "spamthis.network", "spamthisplease.com", "spamtrail.com", "spamtrap.ro", "spamtroll.net", "spamwc.cf", "spamwc.ga", "spamwc.gq", "spamwc.ml", "sparkletoc.com", "spartapiet.com", "spazmail.com", "speak2all.com", "speaknow.org.uk", "specialneedscircle.co.uk", "speedemail.net", "speedgaus.net", "speedlooking.fun", "speedpost.net", "speedrules.com", "speedrulz.com", "speedymail.org", "sperke.net", "sperma.cf", "spicysoda.com", "spiedemtion.store", "spikio.com", "spils.com", "spindl-e.com", "spinfinder.com", "spinly.net", "spl.at", "splitparents.com", "spoko.pl", "spo
5749ofmail.de", "sportcornwall.org", "sportemail.com", "sportrid.com", "sportsfunlifestyle.org", "sportsmail.com", "sporttruckdriver.com", "spr.io", "spray.no", "spray.se", "spring.bot.cd", "spritzzone.de", "spruzme.com", "spybox.de", "spymac.com", "spymail.com", "spymail.one", "sql.vezra.store", "sqp.cc.cd", "squizzy.de", "squizzy.net", "sraka.xyz", "srame.com", "srilankan.net", "sroff.com", "sry.li", "ssanphone.me", "ssi-bsn.infos.st", "ssl-mail.com", "ssoia.com", "sssig.one", "sssvcv.uno", "st-davids.net", "stacys.mom", "stade.fr", "stalag13.com", "stanfordujjain.com", "star-fish.org.uk", "starbalance.site", "starcheck.in", "stardust-2.store", "stargateradio.com", "starlight-breaker.net", "starlight.store", "starmail.com", "starmail.net", "starmail.org", "starmedia.com", "starnlink.com", "starplace.com", "starpower.space", "starspath.com", "start.com.au", "startfu.com", "startkeys.com", "statdvr.com", "stathost.net", "statiix.com", "stayhome.li", "steam-area.ru", "steam-coin.com", "steambot.net", "steel4work.io.vn", "stepsofhope.co.uk", "sterlingpointco.com", "stexsy.com", "stinkefinger.net", "stipte.nl", "stmail.cc.cd", "stomatogomail.ru", "stoned.com", "stones.com", "stonesinwater.com", "stop-my-spam.cf", "stop-my-spam.com", "stop-my-spam.ga", "stop-my-spam.ml", "stop-my-spam.pp.ua", "stop-my-spam.tk", "stopdropandroll.com", "stopspam.app", "storebanme.com", "storegmail.net", "storiesonthestreet.org", "storiqax.top", "storj99.com", "storj99.top", "storksite.com", "storybuddies.online", "stpaulsgrammaralumniusa.org", "stravico.cfd", "strayhood.org", "streamingku.live", "streamtv.biz.id", "streamwolf.store", "streber24.de", "streetwisemail.com", "stribmail.com", "stromox.com", "strompost.com", "strongguy.com", "stuckmail.com", "student.nyc.mn", "student.su", "studentcenter.org", "studio.jo3.org", "studio.publicvm.com", "studyhub.edu.pl", "stuffmail.de", "stufmail.com", "stumpfwerk.com", "stylist-volos.ru", "su.cloudns.biz", "suahi.com", "suarj.com", "submic.com", "submitreports.com", "subram.com", "suburbanthug.com", "suckmyd.com", "sudanmail.net", "sudern.de", "sudolife.me", "sudolife.net", "sudomail.biz", "sudomail.com", "sudomail.net", "sudoverse.com", "sudoverse.net", "sudoweb.net", "sudoworld.com", "sudoworld.net", "sueshaw.com", "suexamplesb.com", "suftwari.com", "sugarloafstudios.net", "suhabi.com", "suhasmedam.com", "suiemail.com", "suini.dpdns.org", "suioe.com", "suisse.org", "sukhumvit.net", "sumberakun.com", "sunpoint.net", "sunrain.tech", "sunrise-sunset.com", "sunsgame.com", "suntuy.com", "sunumail.sn", "suomi24.fi", "super-auswahl.de", "super.lgbt", "superblohey.com", "superbowlstarttime.org", "superdada.com", "supereva.it", "supergreatmail.com", "supergrok.site", "supergrox.me", "supermail.ru", "supermailer.jp", "superplatyna.com", "superrito.com", "supersave.net", "superstachel.de", "superyp.com", "supplementsdiary.com", "supportorganization.online", "supporttc.com", "surat.com", "surbitonnewlifebaptist.com", "suremail.info", "surf3.net", "surfree.com", "surfy.net", "surgical.net", "surimail.com", "survivormail.com", "suryain.app", "sushisalmon.online", "susi.ml", "sute.jp", "svetims.com", "svip520.cn", "svip888888888.com", "svipcun.eu.org", "svk.jp", "svxr.org", "swagpapa.com", "swap.name.ng", "swbell.net", "sweb.cz", "swedenmail.com", "sweetberry.online", "sweetpotato.ml", "sweetville.net", "sweetxxx.de", "swift-mail.com", "swift-mail.net", "swift10minutemail.com", "swiftcroft.org", "swiftdesk.com", "swingeasyhithard.com", "swingfan.com", "swipermail.zzn.com", "swirve.com", "swissinfo.org", "swissmail.com", "swissmail.net", "swissokalmo.org.uk", "switchboardmail.com", "switzerland.org", "swsdz.com", "sx172.com", "sx227.top", "sx235.top", "sx697.top", "sx856.top", "sx872.top", "sx882.top", "sx992.top", "syinxun.com", "sylentha.cfd", "sylvannet.com", "symphonyresume.com", "synarca.com", "syncax.com", "synovaris.cfd", "synsky.com", "syom.com", "syosetu.gq", "syriamail.com", "sysout.cloud", "sytchampton.directory", "sytchamptoncc.co.uk", "syujob.accountants", "szerz.com", "t-com.ne.jp", "t-online.de", "t.psh.me", "t2mail.com", "t6s7.top", "tacomail.de", "tafmail.com", "tafoi.gr", "tagara.infos.st", "taglead.com", "tagmymedia.com", "tagyourself.com", "taikhoankiro.pro", "taimb.com", "taischaves.com", "tako.skin", "takuyakimura.com", "talemarketing.com", "talk21.com", "talkcity.com", "talkinator.com", "talkmatrix.study", "talkup.sbs", "talmetry.com", "tamil.com", "tampabay.rr.com", "tamthomca.click", "tamttts.com", "tandlplith.se", "tankpolice.com", "tanlanav.com", "tanukis.org", "tanvo.online", "taobudao.com", "taohucom.store", "taomail.web.id", "tapchicuoihoi.com", "taphear.com", "tapi.re", "tarasbest.xyz", "tartinemoi.com", "tarzanmail.cf", "taseek.cc.cd", "taseek.top", "tastmemail.com", "tastrg.com", "tatadidi.com", "tatanova.com", "tatsu.uk", "taugr.com", "taukah.com", "taxibmt.com", "taxibmt.net", "taymonera.de", "tb-on-line.net", "tbgroupconsultants.com", "tbr.fr.nf", "tbterqwzv.to
5749p", "tbwt.com", "tcc.on.ca", "tcwlm.com", "tcwlx.com", "tds.net", "tdtda.com", "teachermail.net", "teachers.org", "teambunnyfoundation.org.uk", "teamdiscovery.com", "teamnewmexico.org", "teamtitan.co", "teamtulsa.net", "tech-center.com", "tech2grow.io.vn", "tech4peace.org", "tech69.com", "techblast.ch", "techemail.com", "techgroup.me", "techie.com", "techlhj.email", "technisamail.co.za", "technologist.com", "technoproxy.ru", "techscout.com", "techspot.com", "techusa.org", "teenagedirtbag.com", "teerest.com", "teewars.org", "tefl.ro", "tehillahpraise.uk", "teihu.com", "tele2.nl", "telebot.com", "telecomix.pl", "telefonica.net", "teleg.eu", "telegmail.com", "teleline.es", "telenet.be", "telepac.pt", "telerymd.com", "teleworm.com", "teleworm.us", "telfort.nl", "telfortglasvezel.nl", "teliedge.com", "teligmail.site", "telimail.online", "telinco.net", "telkom.net", "tellos.xyz", "telor.studio", "telos.lat", "telpage.net", "telstra.com", "telstra.com.au", "telvetto.com", "temailz.com", "tembusselalu.biz.id", "tembusselalu.my.id", "teml.net", "temp-email.de5.net", "temp-link.net", "temp-mail-free.dedyn.io", "temp-mail-free.dynv6.net", "temp-mail.best", "temp-mail.cfd", "temp-mail.com", "temp-mail.de", "temp-mail.freeddns.org", "temp-mail.gg", "temp-mail.lol", "temp-mail.now", "temp-mail.org", "temp-mail.pp.ua", "temp-mail.ru", "temp-mailer.dynv6.net", "temp-mails.com", "temp.headstrong.de", "temp.now", "temp.skymeshdynamics.com", "temp1month.icu", "temp2.qzz.io", "tempail.com", "tempalias.com", "tempblockchain.com", "tempe-mail.com", "tempebossok.my.id", "tempemail.biz", "tempemail.co.za", "tempemail.com", "tempemail.de", "tempemail.guru", "tempemail.life", "tempemail.net", "tempemailgen.com", "tempemaill.com", "tempemailo.org", "tempinbox.co.uk", "tempinbox.com", "tempmail.at", "tempmail.best", "tempmail.cc", "tempmail.cn", "tempmail.co", "tempmail.de", "tempmail.email", "tempmail.eu", "tempmail.id.vn", "tempmail.ing", "tempmail.io.vn", "tempmail.it", "tempmail.net", "tempmail.ninja", "tempmail.plus", "tempmail.pp.ua", "tempmail.us", "tempmail.vip", "tempmail.world", "tempmail.ws", "tempmail101.com", "tempmail2.com", "tempmail5.com", "tempmaildemo.com", "tempmailer.com", "tempmailer.de", "tempmailer.net", "tempmailfree.net", "tempmailo.com", "tempmailpro.io", "tempmailr.com", "tempmails.net", "tempmailto.com", "tempmailyo.org", "tempomail.fr", "tempomail.org", "tempomailo.site", "temporalemail.org", "temporam.com", "temporam.online", "temporam.xin", "temporam.xyz", "temporarily.de", "temporarioemail.com.br", "temporarly.com", "temporarmail.edu.pl", "temporary-mail.net", "temporaryemail.dpdns.org", "temporaryemail.net", "temporaryemail.us", "temporaryforwarding.com", "temporaryinbox.com", "temporarymailaddress.com", "tempp-mails.com", "temppppo.store", "tempr.email", "tempsky.com", "temptami.com", "tempthe.net", "tempy-email.com", "tempy.email", "tempymail.com", "temtulsa.net", "temz.net", "tenchiclub.com", "tenderkiss.com", "tenhub.uk", "tennismail.com", "tensi.org", "tenull.com", "terminverpennt.de", "ternaklele.ga", "terra.cl", "terra.com", "terra.com.ar", "terra.com.br", "terra.es", "terre.infos.st", "test-infos.fr.nf", "test.com", "test.de", "test1byali.cfd", "testore.co", "testudine.com", "tevstart.com", "texify.online", "tfanus.com.er", "tfz.net", "tgduck.com", "thai.com", "thaihp.net", "thaimail.com", "thaimail.net", "thaitudang.xyz", "thalarex.cfd", "thameschamberorchestra.co.uk", "thanhnhontienbao.com", "thanksnospam.info", "thankyou2010.com", "thaotri.com", "thatim.info", "thc.st", "thdfyrg.top", "the-african.com", "the-airforce.com", "the-aliens.com", "the-american.com", "the-animal.com", "the-army.com", "the-astronaut.com", "the-beauty.com", "the-big-apple.com", "the-biker.com", "the-boss.com", "the-brazilian.com", "the-canadian.com", "the-canuck.com", "the-captain.com", "the-chinese.com", "the-country.com", "the-cowboy.com", "the-davis-home.com", "the-dutchman.com", "the-eagles.com", "the-englishman.com", "the-fastest.net", "the-fool.com", "the-frenchman.com", "the-galaxy.net", "the-genius.com", "the-gentleman.com", "the-german.
5749com", "the-gremlin.com", "the-hooligan.com", "the-italian.com", "the-japanese.com", "the-lair.com", "the-madman.com", "the-mailinglist.com", "the-marine.com", "the-master.com", "the-mexican.com", "the-ministry.com", "the-monkey.com", "the-newsletter.net", "the-pentagon.com", "the-police.com", "the-prayer.com", "the-professional.com", "the-quickest.com", "the-russian.com", "the-snake.com", "the-spaceman.com", "the-stock-market.com", "the-student.net", "the-whitehouse.net", "the-wild-west.com", "the18th.com", "the23app.com", "theaviors.com", "thebearshark.com", "thebest73.shop", "theboys.cyou", "thecarinformation.com", "thechildrensfocus.com", "thecity.biz", "thecloudindex.com", "thecoolguy.com", "thecriminals.com", "thecwf.co.uk", "thediamants.org", "thedirhq.info", "thedoghousemail.com", "thedorm.com", "thedorsetcarershub.org", "theend.hu", "theeyeoftruth.com", "theglobe.com", "thegolfcourse.com", "thegooner.com", "thegrampians.net", "theheadoffice.com", "thehjhvj.ink", "theinternetemail.com", "thejenkins.net", "thejoker5.com", "theking.id", "thelanddownunder.com", "thelifecentre.org.uk", "thelightningmail.net", "thelimescommunitygarden.org", "thelimestones.com", "themail.com", "themailer.de", "thembones.com.au", "themccarneyfoundation.co.uk", "themegreview.com", "themillionare.net", "themostemail.com", "theoffice.net", "theplate.com", "thepokerface.com", "thepostmaster.net", "theraces.com", "theracetrack.com", "therapist.net", "thereddoors.online", "theroyalweb.club", "thescrappermovie.com", "these.cc", "theshahnazfoundation.com", "thespamfather.com", "thestreetfighter.com", "theteastory.info", "thetechnext.net", "theteebox.com", "thewatercooler.com", "thewebpros.co.uk", "theweifamily.icu", "thewizzard.com", "thewizzkid.com", "thex.ro", "thezhangs.net", "thg.cc.cd", "thichanthit.com", "thichmmo.com", "thiefness.com", "thietbivanphong.asia", "thirdage.com", "thirifara.com", "thisgirl.com", "thisisnotmyrealemail.com", "thismail.net", "thispy.top", "thisurl.website", "thly.cc.cd", "thnikka.com", "thoas.ru", "thoitrangnam2024.shop", "thomasblackerby.org.uk", "thor.my.id", "thraml.com", "thrma.com", "throam.com", "thrott.com", "throwam.com", "throwaway.dynv6.net", "throwawayemailaddress.com", "throwawaymail.com", "throwawaymail.pp.ua", "throya.com", "thrubay.com", "thrunet.com", "thshyo.org", "thueotp.net", "thulinh.net", "thunderbolt.science", "thundermail.com", "thunkinator.org", "thuongxg.com", "thurleighchurchestate.church", "thxmail.net", "thxmate.com", "tianblog.top", "tianmi.me", "tiapz.com", "tic.ec", "tidaksuka.cfd", "tidewick.org", "tidissajiiu.com", "tidni.com", "tidylifehub.com", "tiendadezapasok.com", "tiffincrane.com", "tigrisstem.org", "tijdelijke.email", "tikanony.com", "tiki.ne.jp", "tikmail.org", "tiksofi.uk", "tiktakgrab.com", "tiktakgrab.shop", "tiktakgrabber.com", "tilien.com", "tilumo.cfd", "tilvex.click", "timbourkescholarshipfund.org", "timein.net", "timgiarevn.com", "timkassouf.com", "tinoza.org", "tinpho.com", "tinytimer.org", "tinyurl24.com", "tipsb.com", "tirasya.pro", "tiscali.at", "tiscali.be", "tiscali.co.uk", "tiscali.it", "tiscali.lu", "tiscali.se", "tistory.com", "titangamezz.com", "titenpa.com", "tittbit.in", "tiv.cc", "tivendra.cfd", "tivertonhospitalleagueoffriends.co.uk", "tivo.camdvr.org", "tizi.com", "tkcity.com", "tkfb24h.com", "tkitc.de", "tlpn.org", "tm.488448.xyz", "tm.515666.xyz", "tm.622221.xyz", "tm.spkun.org", "tmail.com", "tmail.edu.rs", "tmail.gg", "tmail.io", "tmail.link", "tmail.lt", "tmail.mx", "tmail.ws", "tmail1.org", "tmail2.org", "tmail3.com", "tmail3.org", "tmail4.org", "tmail5.org", "tmail6.com", "tmail9.com", "tmaile.net", "tmailinator.com", "tmailor.com", "tmailor.net", "tmails.net", "tmmbt.net", "tmpbox.net", "tmpemails.com", "tmpeml.com", "tmpeml.info", "tmpjr.me", "tmpmail.net", "tmpmail.org", "tmpmailtor.com", "tmpnator.live", "tmpx.sa.com", "tmxttvmail.com", "tnbeta.com", "toaik.com", "toast.com", "toddsbighug.com", "tofeat.com", "tohru.org", "toiea.com", "tokai.or.jp", "toke.com", "tokem.co", "token.ro", "tokenizer.qwen3-30b-a3b.xyz", "tokenmail.de", "tokfly.org", "tokmail.fun", "tokmail.net", "tokobibit.co", "tokyo112.top", "tokyoflarex.tokyo", "tom.com", "tomail.cc.cd", "tommyfommy.site", "tonaeto.com", "tongle.ccwu.cc", "toni.io.vn", "tonne.to", "tonyfarm.indevs.in", "tonymanso.com", "too.li", "toolbox.ovh", "toolnator.plus", "toolourles.tech", "tools-capcut.com", "toolsource.com", "toomail.biz", "toon.ml", "toothfairy.com", "top-shop-tovar.ru", "top101.de", "top1mail.ru", "top1post.ru", "topchat.com", "topdatamaster.com", "topgamers.co.uk", "topinrock.cf", "topletter.com", "topmail-files.de", "topmail.com.ar", "topmail2.com", "topmail2.net", "topofertasdehoy.com", "topranklist.de", "topren.cyou", "topren.top", "toprumours.com", "topsurf.com", "topupgg.app", "topvu.net", "torchmail.com", "tormail.org", "tormails.com", "torontomail.com", "torrent411.fr.nf", "tortenboxer.de", "torvila.sbs", "tospage.com", "toss.pw", "tosunkaya.com", "totallynotfake.net", "totalmail.de", "totalmusic.net", "totalvista.com", "totesmail.com", "totoan.info", "totococo.fr.nf", "toupiao7003.top", "tourcc.com", "townisp.com", "tozya.com", "tp-qa-mail.com", "tpg.com.au", "tppp.one", "tppp.online", "tpwlb.com", "tqoai.com", "tqosi.com", "trackden.com", "tradermail.info", "tradingview.my.id", "trainthem2fish.co.uk", "tramynguyen.net", "trancever
5749sal.com", "trandigabapoe.shop", "trangiabao.click", "trangzim.uk", "translateid.com", "traodoinick.com", "trap-mail.de", "trash-amil.com", "trash-mail.at", "trash-mail.cf", "trash-mail.com", "trash-mail.de", "trash-mail.ga", "trash-mail.gq", "trash-mail.ml", "trash-mail.tk", "trash-mail.webredirect.org", "trash-me.com", "trash2009.com", "trash2010.com", "trash2011.com", "trashcanmail.com", "trashdevil.com", "trashdevil.de", "trashemail.de", "trashemails.de", "trashinbox.com", "trashmail.at", "trashmail.com", "trashmail.de", "trashmail.fr", "trashmail.gq", "trashmail.hu", "trashmail.io", "trashmail.me", "trashmail.net", "trashmail.org", "trashmail.se", "trashmail.ws", "trashmailer.com", "trashmailgenerator.de", "trashmailr.com", "trashmails.com", "trashymail.com", "trashymail.net", "trasz.com", "travel.li", "travelistaworld.com", "travelovelinka.club", "travionex.cfd", "trayna.com", "trbvm.com", "trbvn.com", "trbvo.com", "treesforderby.org", "trend-maker.ru", "treso.me", "treterter.shop", "trevourus.com", "trfu.to", "trgfu.com", "trgovinanaveliko.info", "trialbytrivia.com", "trialmail.de", "trickmail.net", "trieuhao.site", "trillianpro.com", "trimix.cn", "trinovia.cfd", "triots.com", "tritium.net", "trixtrux1.ru", "trmailbox.com", "trojanvmesswrt.dpdns.org", "trolebrotmail.com", "trollproject.com", "tropicalbass.info", "tropicalstorm.com", "tropovenamail.com", "trovantis.cfd", "troveniq.cfd", "truckerz.com", "truckracer.com", "truckracers.com", "trunghocphothong.io.vn", "trungmetax.com", "trungtamtoeic.com", "trust-me.com", "trustcheck.cc", "trustguru.vip", "truthfinderlogin.com", "truthmail.com", "tryalert.com", "tryninja.io", "trythe.net", "tryzoe.com", "tsamail.co.za", "tscasalnt.top", "tsderp.com", "tsdpt.co.uk", "tshirtsavvy.com", "tsmtp.org", "tsnu.edu.kg", "tstrust.org.uk", "tsuit.edu.kg", "ttirv.org", "ttml.co.in", "ttpo89japan.com", "ttszuo.xyz", "tualias.com", "tuamaeaquelaursa.com", "tubeemail.com", "tuku26012023.xyz", "tumroc.net", "tunisiamail.com", "tunthuta.com", "tuofs.com", "tupmail.com", "turboprinz.de", "turboprinzessin.de", "turkey.com", "turkeyth.com", "turnimon.com", "turoid.com", "turual.com", "turuma.com", "tut.by", "tutuapp.bid", "tuyenchau.click", "tuyenchau.online", "tuyenchau.site", "tuyenhuy.click", "tuyenhuy.online", "tuyenhuy.site", "tvchd.com", "tverya.com", "tvstar.com", "twc.com", "twcny.com", "tweet.fr.nf", "twinmail.de", "twinstarsmail.com", "twitch.work", "twitchythoughtcreations.in", "twkly.ml", "twocowmail.net", "twoweirdtricks.com", "twskyhope.top", "twzhhq.online", "tx.rr.com", "txcct.com", "txen.de", "txtadvertise.com", "tycoonmail.com", "tyhe.ro", "tyldd.com", "tympe.net", "typemail.com", "tzrj.pro", "u14269.ml", "u2club.com", "ua.fm", "uacro.com", "uae.ac", "uaemail.com", "uaqz.top", "ubbi.com", "ubbi.com.br", "uber-mail.com", "ubinert.com", "ubismail.net", "ubm.md", "uboot.com", "ucche.us", "ucom.ne.jp", "ucupdong.ml", "uddinfoundation.org", "udingclin.com", "uemail99.com", "ufacturing.com", "ufokeuabmail.com", "ug.wtf", "uggsrock.com", "uguuchantele.com", "uhe2.com", "uhhu.ru", "uiemail.com", "uiu.us", "uivm.top", "ujijima1129.gq", "uk.to", "uk2.net", "uk2k.com", "uk2net.com", "uk7.net", "uk8.net", "ukbuilder.com", "ukcool.com", "ukdreamcast.com", "ukev.org", "uki.io.vn", "ukm.ovh", "ukmail.org", "ukmax.com", "ukr.net", "uku.co.uk", "ulm-dsl.de", "ultapulta.com", "ulteriq.cfd", "ultra.fyi", "ultrada.ru", "ultralux.io.vn", "ultrapostman.com", "ultravex.cfd", "ultraz1.io.vn", "ultrmigos.online", "uma3.be", "umail.net", "umil.net", "umiudi.cn", "ummah.org", "umombiss.tk", "umpire.com", "unbounded.com", "undeadbank.com", "underseagolf.com", "undo.it", "unfairship.com", "unforgettable.com", "uni.de", "unican.es", "unicodeworld.com", "unids.com", "unihome.com", "unimark.org", "uniquefox.xyz", "uniromax.com", "unit7lahaina.com", "unitedcharitiesosm.org.uk", "unitel.co.kr", "unitybox.de", "universal.pt", "universall.me", "unlikeyth.com", "unmail.ru", "uno.ee", "uno.it", "unofree.it", "unratito.com", "unterderbruecke.de", "uofzcpg9ftykob.asia", "uol.com.ar", "uol.com.br", "uol.com.co", "uol.com.mx", "uol.com.ve", "uole.com", "uole.com.ve", "uolmail.com", "uomail.com", "uooos.com", "uorak.com", "upc.infos.st", "upc.nl", "upcmail.nl", "upf.org", "upliftnow.com", "uplipht.com", "uploadnolimit.com", "upozowac.info", "upphim.net", "upsnab.net", "uqmobile.jp", "uqqlrdi.top", "ureach.com", "urfunktion.se", "urgentmail.biz", "urgentmail.ovh", "urhen.com", "uroid.com", "us-p2.top", "us-x.top", "us.af", "us.to", "usa.cc", "usa.com", "usa.edu.pl", "usa.net", "usaaccess.net", "usagica.com", "usaishop.shop", "usako.net", "usanetmail.com", "usbc.be", "usdtbeta.com", "used-product.fr", "usedus.me", "uselesswebsites.net", "usermail.com", "username.e4ward.com", "ushijima1129.cf", "ushijima1129.ga", "ushijima1129.gq", "ushijima1129.ml", "ushijima1129.tk", "usm.ovh", "usma.net", "usmc.net", "ustorp.com", "usus.accesscam.org", "usus.camdvr.org", "usus.casacam.net", "usus.ddnsfree.com", "ususus.dynv6.net", "uswestmail.net", "utiket.us", "utkarsh.tech", "uu.gl", "uu2.ovh", "uue.edu.pl", "uuf.me", "uuii.in", "uvaul.us.ci", "uwork4.us", "uyhip.com", "uymail.com", "uyuyuy.com", "uz8.net", "v-mail.xyz", "v-sexi.com", "v6.army", "v6.navy", "v6.rocks", "vaasfc4.tk", "vaati.org", "vae.indevs.in", "vafyxh.com", "vahoo.com", "valanides.com", "valemail.net", "valhalladev.com", "valueineveryone.co.uk", "vampirehunter.com", "vankin.de", "varbizmail.com", "vasteron.com", "vatos.gg", "vaupk.org", "vbgvd.com", "vbv.cards", "vcmail.com", "vcois.com", "vctel.com", "vda.ro", "vddaz.com", "vdig.com", "veanlo.com", "veb37.com", "vectorbrasil.app", "vegan.qzz.io", "veint.top", "velatrix.cfd", "veletis.bond", "velmoor.org", "velnet.co.uk", "velocall.com", "velocitronix.online", "veltexline.com", "vemomail.win", "venariq.cfd", "venompen.com", "ventrovia.cfd", "veo.kr", "veo325k.io.vn", "veo325kcredit.io.vn", "veo33.io.vn", "veomatrix25k.io.vn", "veoverse25k.io.vn", "ver0.cf", "ver0.ga", "ver0.gq", "ver0.ml", "ver0.tk", "vercelli.cf", "vercelli.ga", "vercelli.gq", "vercelli.ml", "verdejo.com", "verifycenter.net", "verityemail.site", "verizon.net", "verizonmail.com", "verlass-mich-nicht.de", "vermutlich.net", "vernonbourne.uk", "veronicamira.info", "versatel.nl", "vertexinbox.com", "vertexium.net", "veruvercomail.com", "veryday.ch", "veryday.eu", "veryday.info", "veryfast.biz", "veryrealemail.com", "veryspeedy.net", "ves.ink", "vesa.pw", "vesdev01.shop", "vetra.cyou", "vevs.de", "vexalor.cfd", "vexaluno.xyz", "vexi.my", "vextora.click", "vfdhks.eu.cc", "vfemail.net", "vfre4w3.dynv6.net", "vfwladiesauxin.org", "via.tokyo.jp", "viavuive.net", "vibertees.com", "vibzi.net", "vickaentb.tk", "victime.ninja", "victoriaalison.com", "victoriantwins.com", "vidchart.com", "videoigdownload.com", "videotoptop.com", "videotron.ca", "viditag.com", "vidwobox.com", "viemarter.online", "viettravel.io.vn", "viewbuster.ru", "viewcastmedia.com", "viewcastmedia.net", "viewcastmedia.org", "viewmuse.com", "vigilantkeep.net", "vigoneo.com", "vikingsonly.com", "villaxo
5749a.site", "vinaemail.com", "vinakoop.com", "vinakop.com", "vinatissue.org", "vinbazar.com", "vinernet.com", "vinhdo.shop", "vintomaper.com", "viole.cfd", "violet0923.online", "violinmakers.co.uk", "vip.126.com", "vip.21cn.com", "vip.aoko.cc.cd", "vip.aoko.eu.cc", "vip.chaldea.eu.cc", "vip.citiz.net", "vip.gr", "vip.mssk.cc.cd", "vip.mssk.eu.cc", "vip.mssk.qzz.io", "vip.onet.pl", "vip.qq.com", "vip.sina.com", "vipepe.com", "vipmail.name", "vipmail.pw", "vipmail.ru", "vipmba.cc", "vips.pics", "vipxm.net", "viralplays.com", "virelio.cfd", "virgilian.com", "virgilio.it", "virgin.net", "virginbroadband.com.au", "virginmedia.com", "virginsrus.xyz", "virtualemail.info", "virtualmail.com", "virtue1.qzz.io", "visal007.tk", "visal168.cf", "visal168.ga", "visal168.gq", "visal168.ml", "visal168.tk", "visignal.com", "visitmail.com", "visitweb.com", "visto.com", "visualcities.com", "visualdep.run.place", "visualnest.work", "visuals.linkpc.net", "vitahicks.com", "vitaspherelife.com", "vitrineproducoes.com", "viv2.com", "vivavelocity.com", "vivianhsu.net", "vixletdev.com", "vixtricks.com", "vjoid.ru", "vjoid.store", "vjtimail.com", "vjuum.com", "vkbb.ru", "vkbb.store", "vkbt.ru", "vkbt.store", "vkcbt.ru", "vkcbt.store", "vkcode.ru", "vkfu.ru", "vkfu.store", "vkjashdf.eu.cc", "vkpr.store", "vkr1.com", "vkrr.ru", "vkrr.store", "vladhub.buzz", "vlemi.com", "vlrregulatory.com", "vmailing.info", "vmani.com", "vmm.indevs.in", "vmpanda.com", "vn-one.com", "vncctv.org", "vnedu.me", "vnet.citiz.net", "vnfjsh.eu.cc", "vnn.indevs.in", "vnn.vn", "vntechhub.online", "vnvmail.com", "vobau.net", "vodafone.ne.jp", "vodafone.nl", "vodafonethuis.nl", "voerpemww.click", "voicesforchangeinc.org", "voidbay.com", "voidmail.one", "voidpop.win", "volaj.com", "volcanomail.com", "volku.org", "vollbio.de", "volloeko.de", "voltaer.com", "voltr.click", "voltravia.cfd", "vomoto.com", "vorga.org", "vorqx.site", "vorsicht-bissig.de", "vorsicht-scharf.de", "vortalis.cfd", "vote-democrats.com", "vote-hillary.com", "vote-republicans.com", "vote4gop.org", "votenet.com", "vothanhtuan.shop", "votiputox.org", "voxelcore.com", "voxinh.net", "vp.pl", "vpn.st", "vpn64.de", "vpnseat.com", "vps30.com", "vps79.com", "vps911.net", "vr9.com", "vradportal.com", "vremonte24-store.ru", "vrmtr.com", "vsdsd23gsdf.shop", "vsimcard.com", "vsmailpro.com", "vssms.com", "vtmpj.com", "vtmpj.net", "vtxmail.us", "vuatrochoi.nl", "vubby.com", "vuiy.pw", "vuket.org", "vulca.sbs", "vulcanpioneerjers.org", "vupn.me", "vusra.com", "vutrugay.org", "vvatxiy.com", "vwagamlk.top", "vwhins.com", "vxsolar.com", "vystella.cfd", "vztc.com", "w-asertun.ru", "w3.to", "w3internet.co.uk", "wacold.com", "wahoye.com", "waisfoundation.com", "waitbeqa.com", "waivey.com", "wakingupesther.com", "walala.org", "wales2000.net", "walkmail.net", "walkmail.ru", "wallm.com", "wam.co.za", "wanadoo.es", "wanadoo.fr", "wanai.biz.id", "wanaofamouscar.com", "wanko.be", "wanting2work.org.uk", "wanva.shop", "war-im-urlaub.de", "wargravepreschool.uk", "warlus.asso.st", "warmmail.com", "waroengin.com", "waroengku.cc", "waroengkuy.com", "waroengmail.com", "waroengpremium.com", "warpmail.net", "warrior.hu", "warrity25k.io.vn", "warunkto.com", "watch-harry-potter.com", "watchever.biz", "watchfull.net", "watchironman3onlinefreefullmovie.com", "waterisgone.com", "waterpalace.pro", "watersoftenersystemcost.com", "watrf.com", "watsawang.com", "waumail.com", "waventra.cfd", "waw.indevs.in", "wazabi.club", "wbdet.com", "wbdev.tech", "wbml.net", "wbslxy.cc.cd", "wbzqxl.eu.cc", "wcm.ne.jp", "wcnmd11908.eu.cc", "wdf.sryze.cc", "wdsm.uno", "wearab.net", "wearkeymail.site", "wearvault.biz.id", "web-contact.info", "web-emailbox.eu", "web-ideal.fr", "web-inc.net", "web-library.net", "web-mail.com.ar", "web-mail.pp.ua", "web-police.com", "web.de", "web2mailco.com", "webave.com", "webcammail.com", "webcamness.com", "webcity.ca", "webclub.infos.st", "webcontact-france.eu", "webdream.com", "webemail.me", "webhook.site", "webinarmoa.com", "webindia123.com", "webjump.com", "webm4il.info", "webmail.co.yu", "webmail.co.za", "webmail.hu", "webmail24.top", "webmails.com", "webmailus.com", "webname.com", "webofip.com", "webpiko.top", "webprogramming.com", "webscash.com", "websend.net", "webstation.com", "webstore.fr.nf", "websurfer.co.za", "webtopmail.com", "webtrip.ch", "webui.cc.cd", "webuser.in", "webxio.pro", "wecanmakehit.win", "wecp.ru", "wecp.store", "wedwe.eu.cc", "wee.my", "weedmail.com", "weekfly.com", "weekmail.com", "weekonline.com", "weekzs.icu", "wef.gr", "wefjo.grn.cc", "weg-werf-email.de", "wegas.ru", "wegoo.dpdns.org", "wegwerf-email-addressen.de", "wegwerf-email-adressen.de", "wegwerf-email.at", "wegwerf-email.de", "wegwerf-email.net", "wegwerf-emails.de", "wegwerfadresse.de", "wegwerfemail.com", "wegwerfemail.de", "wegwerfemail.info", "wegwerfemail.net", "wegwerfemail.org", "wegwerfemailadresse.com", "wegwerfmail.de", "wegwerfmail.info", "wegwerfmail.net", "wegwerfmail.org", "wegwerpmailadres.nl", "wegwrfmail.de", "wegwrfmail.net", "wegwrfmail.org", "wehshee.com", "weibsvolk.de", "weibsvolk.org", "weidongxd.kdns.fr", "weinenvorglueck.de", "weiruipingji.com", "weizixu.com", "wekawa.com", "welikecookies.com", "wellsfargocomcardholders.com", "welsh-lady.com", "wemel.top", "wendypro.web.id", "wenkuu.com", "wentcity.com", "wenyuanshe.com", "wep.email", "westnet.com", "westnet.com.au", "wetrainbayarea.com", "wetrainbayarea.org", "weyword.cfd", "wfgdfhj.tk", "wg0.com", "wh4f.org", "whaaaaaaaaaat.com", "whale-mail.com", "whartontx.com", "whatagarbage.com", "whatever.za.net", "whatiaas.com", "whatifanalytics.com", "whatpaas.com", "whatsaas.com", "wheelweb.com", "whf222.top", "whiffles.org", "whipmail.com", "whirlygirlink.org", "whispermail.org", "whitehousecalculator.com", "whitemistral.pro", "whoever.com", "whoopymail.com", "whopy.com", "whtjddn.33mail.com", "whyspam.me", "wi.rr.com", "wi.twcbc.com", "wibblesmith.com", "wicfolhumanservices.org", "wickmail.net", "widaryanto.info", "wideopenwest.com", "widget.gg", "wiemei.com", "wierie.tk", "wifimaple.com", "wifioak.com", "wikfee.com", "wikidocuslava.ru", "wikinime.com", "wildan.tech", "wildmail.com", "wilemail.com", "will-hier-weg.de", "willcom.com", "willhackforfood.biz", "willselfdestruct.com", "wimsg.com", "windowslive.com", "windrivers.net", "windstream.net", "windsurfcom.shop", "winemaven.info", "wingnutz.com", "winmail.com.au", "winning.com", "winocs.com", "wins.com.br", "wintersgf.store", "wintersmail.site", "wir-haben-nachwuchs.de", "wir-sind-cool.org", "wir-sind.com", "wireconnected.com", "wirsindcool.de", "wishy.fr", "witty.com", "wivstore.com", "wiz.cc", "wkbwmail.com", "wlist.ro", "wlsom.com", "wmail.cf", "wmail.club", "wmct.info", "wnbaldwy.com", "wo.com.cn", "wo1jiao2ren3jian4hu5.qzz.io", "wo4dashauige666.qzz.io", "woaisufulei.de5.net", "woh.rr.com", "wohb
5749c.co.uk", "wokcy.com", "wolf-web.com", "wolfmail.ml", "wolfsmail.tk", "wolke7.net", "wollan.info", "wombles.com", "women-at-work.org", "womp-wo.mp", "wongfaye.com", "woofgl.email", "woofidog.fr.nf", "wooow.it", "woopros.com", "work.2026157.xyz", "worker.com", "workhorsefilms.com", "workingtall.com", "workmail.com", "worldcoins.top", "worldemail.com", "worldlylife.store", "worldnet.att.net", "worldspace.link", "wormseo.cn", "wosaddict.com", "woshiemoman.cloud-ip.cc", "wouldilie.com", "wovz.cu.cc", "wowgirl.com", "wowmail.com", "wowway.com", "wp.pl", "wpdork.com", "wpg.im", "wplacetools.com", "wptamail.com", "wralawfirm.com", "wrexham.net", "writeme.com", "writeme.us", "writemeback.com", "wronghead.com", "wrongmail.com", "wrqj.top", "ws.gy", "wshu.net", "wsym.de", "wsypc.com", "wtjinkintrust.co.uk", "wtvhmail.com", "wudet.men", "wudiai.shop", "wuespdj.xyz", "wupics.com", "wusongdahu.cc.cd", "wuuvo.com", "wuzak.com", "wuzup.net", "wuzupmail.net", "wwc8.com", "wwdg.com", "wwdskboiv.top", "wwefd.top", "wwej.cc.cd", "wwjmp.com", "wwtykkm.bond", "wwvec.uno", "wwvk.ru", "wwvk.store", "www.com", "www.e4ward.com", "www2000.net", "wwwnew.eu", "wx88.net", "wxcv.fr.nf", "wxf07.shop", "wxnw.net", "wxs.net", "wyattcloud.vip", "wyoxafp.com", "wywnxa.com", "wzjpj.com", "wzjyyds.com", "wzofit.com", "x-clone.asia", "x-lab.net", "x-mail.net", "x-networks.net", "x0q.net", "x1ix.com", "x24.com", "x5g.com", "x80.dpdns.org", "x80la.shop", "x9ad1.my", "xagloo.co", "xagloo.com", "xaker.ru", "xandoria.cfd", "xapimail.top", "xazymarcie.space", "xbaby69.top", "xbrok.com", "xcf.pet", "xclone.asia", "xcode.ro", "xcodes.net", "xcompress.com", "xcoxc.com", "xcpy.com", "xcsllajs.eu.cc", "xcucngon.site", "xcvuaylik.top", "xcvv.xyz", "xddroot.eu.org", "xdfrms.fun", "xdnss.cc", "xdpxdp.online", "xehop.org", "xelio.sbs", "xelu.space", "xemaps.com", "xemne.com", "xenloria.cfd", "xeno.gay", "xenta.cfd", "xents.com", "xepa.ru", "xeramail.com", "xfavaj.com", "xgmail.bond", "xhd.sryze.cc", "xhotmail.cyou", "xi2.cc", "xiajspof.eu.cc", "xiangshan.eu.cc", "xiaoche.ggff.net", "xiaodi.indevs.in", "xiaohuangyu.ccwu.cc", "xiaolajiao.dedyn.io", "xiaolajiao.tech", "xiaoting.cc", "xib.icu", "xidealx.com", "xiejiang.site", "xiejiang.us.ci", "xikemail.com", "ximenor.site", "xing886.uu.gl", "xingmeisofa.com", "xinxing.eu.org", "xirentha.cfd", "xitler.top", "xiwinnie.icu", "xjoi.com", "xkx.me", "xkxkud.com", "xl.cx", "xlcsh.icu", "xmailer.be", "xmailtm.com", "xmaily.com", "xmastime.com", "xmlab.icu", "xms.nl", "xmsg.com", "xmyvgkvw.top", "xn--5nx.cc", "xn--9kq967o.com", "xn--d-bga.net", "xn--ihq4pool8g32cwxiiqcovaa9159jhvah03g.top", "xn--jxsa73o.eu.org", "xn--o38h.abrdns.com", "xn--yaho-sqa.com", "xn-xp8h.bond", "xojxe.com", "xomqirantel.site", "xoom.com", "xopmail.fun", "xost.us", "xoxo3.website", "xoxox.cc", "xperiae5.com", "xpremium.pro", "xpressmail.zzn.com", "xqqgegsd.eu.cc", "xrap.de", "xs4all.nl", "xsecurity.org", "xsend.org", "xshop.bond", "xsioap.eu.cc", "xsmail.com", "xsnipersquad.com", "xsnipersquad.site", "xsnipersquad.space", "xstyled.net", "xtd2.ccwu.cc", "xtra.co.nz", "xtxt.de5.net", "xuicf1r.site", "xuno.com", "xvx.us", "xww.ro", "xx.lucky04.dpdns.org", "xxhamsterxx.ga", "xxi2.com", "xxl.st", "xxlocanto.us", "xxmailedu.dpdns.org", "xxolocanto.us", "xxqx3802.com", "xxvd.net", "xxvk.ru", "xxvk.store", "xxxhi.cc", "xxxmailaxx.site", "xy9ce.tk", "xylanta.cfd", "xylar.ru", "xylar.store", "xywqfry.cn", "xyxy.app", "xyzfree.net", "xzapmail.com", "xzsok.com", "y7mail.com", "ya.ru", "yabai-oppai.tk", "yabes.ovh", "yada-yada.com", "yahmail.top", "yaho.com", "yahoo.ae", "yahoo.at", "yahoo.be", "yahoo.ca", "yahoo.ch", "yahoo.cn", "yahoo.co", "yahoo.co.id", "yahoo.co.il", "yahoo.co.in", "yahoo.co.jp", "yahoo.co.kr", "yahoo.co.nz", "yahoo.co.th", "yahoo.co.uk", "yahoo.co.za", "yahoo.com", "yahoo.com.ar", "yahoo.com.au", "yahoo.com.br", "yahoo.com.cn", "yahoo.com.co", "yahoo.com.hk", "yahoo.com.is", "yahoo.com.mx", "yahoo.com.my", "yahoo.com.ph", "yahoo.com.ru", "yahoo.com.sg", "yahoo.com.tr", "yahoo.com.tw", "yahoo.com.vn", "yahoo.cz", "yahoo.de", "yahoo.dk", "yahoo.es", "yahoo.fi", "yahoo.fr", "yahoo.gr", "yahoo.hu", "yahoo.ie", "yahoo.in", "yahoo.it", "yahoo.jp", "yahoo.nl", "yahoo.no", "yahoo.pl", "yahoo.pt", "yahoo.ro", "yahoo.ru", "yahoo.se", "yahoofs.com", "yahooproduct.net", "yahoox.cyou", "yalla.com", "yalla.com.lb", "yaloo.fr.nf", "yalook.com", "yam.com", "yamail.win", "yandex.com", "yandex.pl", "yandex.ru", "yandex.ua", "yanemail.com", "yanet.me", "yangzhai.xyz", "yangzhong-sfd.cc", "yanhuolt.com", "yannmail.win", "yanxuan.eu.cc", "yaonas.cloud", "yapost.com", "yapped.net", "yaqp.com", "yarn.cloudns.org", "yarnpedia.ga", "yawmail.com", "ybb.ne.jp", "ybidbccmv.top", "yc08.cn", "ycare.de", "ycglobalmovement.com", "ycn.ro", "ydns.eu", "ye.vc", "yeah.net", "yebox.com", "yecp.ru", "yecp.store", "yedi.org", "yeezus.ru", "yehey.com", "yellofdf2.click", "yemenmail.com", "yenphandinhe.com", "yep.it", "yepmail.net", "yermail.net", "yert.ye.vc", "yesey.net", "yeummo.io.vn", "yfhsdb.eu.cc", "ygbelira.me", "ygl.vbepor.de5.net", "yhg.biz", "yifan.net", "yih
5749acihuy.top", "yilue.eu.org", "ying-ge.com", "yingzi321.shop", "yjlwcbrf.top", "yl66.cfd", "ymail.com", "ymail.ne.jp", "ymee.eu.cc", "yml666.cc.cd", "ymobile.ne.jp", "ymobile1.ne.jp", "ymonthl.com", "ymze.eu.cc", "ynagjie-66.cc", "ynmrealty.com", "yodwg.sbs", "yodx.ro", "yogamaven.com", "yoggm.com", "yogirt.com", "yogotemail.com", "yomail.edu.pl", "yomail.info", "yomand.store", "yondrix.cfd", "yongpeng.de5.net", "yoo.ro", "yopmail.com", "yopmail.fr", "yopmail.gq", "yopmail.kro.kr", "yopmail.loseyourip.com", "yopmail.net", "yopmail.ooguy.com", "yopmail.pp.ua", "yopmail.theworkpc.com", "yopmail.webredirect.org", "yopolis.com", "yoptruc.fr.nf", "yopweb.com", "yordanmail.cf", "yorushika.one", "yotmail.fr.nf", "you-spam.com", "youareadork.com", "yougotgoated.com", "youmail.ga", "youmailr.com", "youneedmore.info", "youpymail.com", "your-house.com", "your-mail.com", "your5.ru", "your5.store", "yourdomain.com", "youremail.cf", "yourewronghereswhy.com", "yourinbox.com", "yourlifesucks.cu.cc", "yourlms.biz", "yourlover.net", "yourname.freeservers.com", "yournightmare.com", "yours.com", "yours.tools", "yourspamgoesto.space", "yourssincerely.com", "yoursubdomain.zzn.com", "yourteacher.net", "yourtube.ml", "yourwap.com", "youtube-com-watch-jtpdc8khnpi.accesscam.org", "youtube-com-watch-jtpdc8khnpi.bond", "youtube-com-watch-jtpdc8khnpi.cyou", "youtube-com-watch-jtpdc8khnpi.dedyn.io", "youtube-com-watch-jtpdc8khnpi.freeddns.org", "youtube-com-watch-jtpdc8khnpi.gleeze.com", "youtube-com-watch-jtpdc8khnpi.loseyourip.com", "youtube-com-watch-jtpdc8khnpi.mywire.org", "youtube-com-watch-jtpdc8khnpi.ooguy.com", "youtube-com-watch-jtpdc8khnpi.theworkpc.com", "youtube-com-watch-jtpdc8khnpi.webredirect.org", "youxiang.dev", "yroid.com", "yrppwsekv.top", "ys.deepl.cc.cd", "ysfuddr.top", "ysgdjd.fun", "yshdnhh.click", "yspend.com", "ysuhd.art", "yszmy.cn", "ytkj.us.ci", "ytnhy.com", "ytoof.app", "ytpayy.com", "yugasandrika.com", "yui.it", "yujiehanjiao.cc", "yuki.ren", "yummymeow.eu", "yummymeow.fr", "yummymeow.org", "yummymeow.store", "yun.pics", "yuoia.com", "yurevia.cfd", "yuuhuu.net", "yuurok.com", "ywiueryweqrwerqsdf.us.ci", "ywzmb.top", "yxdad.ru", "yxdad.store", "yxx1.ccwu.cc", "yxxala.ccwu.cc", "yxxawa.ccwu.cc", "yxxawa.top", "yxzx.net", "yy.lucky04.dpdns.org", "yyddss.qzz.io", "yyds.729406.xyz", "yyds.950309.xyz", "yyds.adorable0v0.top", "yyds.lkberich.online", "yyds.mail.13140905.xyz", "yyds.mcmdo.com", "yyds12.eu.cc", "yyds26.eu.cc", "yyds31.eu.cc", "yydsmail.cckff.ggff.net", "yydsmail.syrf109475.top", "yydsplus.top", "yyhmail.com", "yyolf.net", "yyy.btyjhnytd.de5.net", "yzcalo.com", "yzm.de", "z-o-e-v-a.ru", "z0d.eu", "z1p.biz", "z86.ru", "za.com", "zahadum.com", "zai.asia", "zain.com.co", "zain.site", "zainmax.net", "zaktouni.fr", "zakumaka.shop", "zalesie.net.pl", "zapmail.one", "zaq.ne.jp", "zarabotokdoma11.ru", "zarkbin.store", "zasod.com", "zauxpbp.cn", "zaym-zaym.ru", "zcjzy.cc.cd", "zcovz.ru", "zcovz.store", "zcrcd.com", "zdenka.net", "ze.tc", "zebins.com", "zebins.eu", "zeepost.nl", "zehnminuten.de", "zehnminutenmail.de", "zeldaa.ccwu.cc", "zellatrix.cfd", "zellio.yachts", "zemzar.net", "zenbada.com", "zenbyul.com", "zenthara.cfd", "zenthira.cfd", "zenthranet.com", "zephyros.cfd", "zepp.dk", "zeppost.com", "zeronerbacomail.com", "zeropolly.com", "zetmail.com", "zevionyx.com", "zeystair.sbs", "zfymail.com", "zgx7jfa.nsmjj.cc.cd", "zhaji.eu.org", "zhanhuokma2.wang", "zhaoqian.ninja", "zhaov.edu.kg", "zhaowei.net", "zhaoyuanedu.cn", "zhcne.com", "zhengwz.dpdns.org", "zhewei88.com", "zhizhiwei.fun", "zhjjq.tech", "zhorachu.com", "zhouemail.510520.org", "zhousj.eu.org", "ziggo.nl", "zijie.de5.net", "zik.dj", "zikzak.site", "zionweb.org", "zip.net", "zipcad.com", "zipcatfish.com", "zipido.com", "ziping.me", "ziplip.com", "zipmail.com", "zipmail.com.br", "zipmail.one", "zipmax.com", "zipo1.gq", "zippymail.info", "zipsendtest.com", "zira.my", "ziragold.com", "zivox.sbs", "zizo7.com", "zkfdwz.shop", "zkvuhgs.info", "zmail.cam", "zmail.ru", "zmnai.top", "znhyo.dpdns.org", "znvx.me", "zoaxe.com", "zoemail.com", "zoemail.net", "zoemail.org", "zoetropes.org", "zoho.com", "zohomail.com", "zolamin.com", "zolmiu.cfd", "zombie-hive.com", "zomg.info", "zonnet.nl", "zoomintens.com", "zoominternet.net", "zorg.fr.nf", "zouz.fr.nf", "zovion.com", "zozozo123.com", "zsero.com", "zsmj.cc.cd", "zsts.top", "zubee.com", "zudpck.com", "zuldev.live", "zumnime.me", "zumpul.com", "zutomayo.best", "zuvio.com", "zuzzurello.com", "zv68.com", "zvvzuv.com", "zwallet.com", "zweb.in", "zx81.ovh", "zxcv.com", "zxcvbn123.cc.cd", "zxcvbnm.com", "zxhyzlwcp.top", "zxqzin.cn", "zybermail.com", "zydecofan.com", "zymuying.com", "zyns.com", "zypherin.cfd", "zyranova.cfd", "zyvenix.cfd", "zzi.us", "zzn.com", "zzom.co.uk", "zzrgg.com", "zzz.com", "zzz.pl", "zzzzzzzzzzzzzz-1090.dynv6.net", "zzzzzzzzzzzzzz-2092.dynv6.net", "zzzzzzzzzzzzzz-277.dynv6.net", "zzzzzzzzzzzzzz-3294.dynv6.net", "zzzzzzzzzzzzzz-3330.dynv6.net", "zzzzzzzzzzzzzz-3535.dynv6.net", "zzzzzzzzzzzzzz-3928.dynv6.net", "zzzzzzzzzzzzzz-3940.dynv6.net", "zzzzzzzzzzzzzz-4283.dynv6.net", "zzzzzzzzzzzzzz-4904.dynv6.net", "zzzzzzzzzzzzzz-5055.dynv6.net", "zzzzzzzzzzzzzz-5246.dynv6.net", "zzzzzzzzzzzzzz-546.dynv6.net", "zzzzzzzzzzzzzz-739.dynv6.net", "zzzzzzzzzzzzzz-7619.dynv6.net", "zzzzzzzzzzzzzz-7911.dynv6.net", "zzzzzzzzzzzzzz-8050.dynv6.net", "zzzzzzzzzzzzzz-8079.dynv6.net", "zzzzzzzzzzzzzz-8874.dynv6.net", "zzzzzzzzzzzzzz-969.dynv6.net", "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.loseyourip.c
5749om", "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.ooguy.com"]; 5750 5751 var demoFormInit = function demoFormInit() { 5752 var HONEYPOT_FIELD_NAME = "_honeypot"; 5753 var FORM_RESET_DELAY_MS = 1000; 5754 var forms = document.querySelectorAll(".form--inline, .form--demo, .form--generic"); 5755 forms.forEach(function (form) { 5756 var _form$querySelector; 5757 var downloadFormLink = "https://submit-form.com/" + form.dataset.formsparkid; 5758 var contactEmail = "[email protected]"; 5759 var contactLink = "<a href=\"mailto:".concat(contactEmail, "\">").concat(contactEmail, "</a>"); 5760 var defaultErrorMsg = "Something went wrong on our end. Please try again, or contact us at ".concat(contactLink, "."); 5761 var blockedRequestMsg = "We couldn't reach our registration service. This is often caused by an ad-blocker, privacy extension or corporate network blocking the request \u2014 please disable it and try again, or email us at ".concat(contactLink, "."); 5762 var defaultSuccessMsg = "Thank you. We will soon contact you with a reply via e-mail."; 5763 var defaultValidationMsg = "Please check your data in fields."; 5764 var defaultPrivacyMsg = "Please accept our privacy policy terms."; 5765 var defaultErrorInvalidEmail = "Please use an email address that is not from a free domain."; 5766 var defaultErrorNotOwaspEmail = "Please use an email address that is related to owasp domain."; 5767 var semaphore = true; 5768 var formResult = (_form$querySelector = form.querySelector(".form__result")) !== null && _form$querySelector !== void 0 ? _form$querySelector : form.nextElementSibling; 5769 var setResultMessage = function setResultMessage(msg) { 5770 return formResult.innerHTML = msg !== null && msg !== void 0 ? msg : ""; 5771 }; 5772 form.addEventListener("submit", function (e) { 5773 e.preventDefault(); 5774 if (semaphore) { 5775 var data = {}; 5776 var isFormValid = true; 5777 semaphore = false; 5778 form.classList.add("form--loading"); 5779 var privacy = true; 5780 var freeEmail = false; 5781 var notOwaspEmail = false; 5782 var isSpam = false;
5783 form.querySelectorAll("input, textarea, select").forEach(function (input) { 5784 var _input$closest; 5785 var formInput = (_input$closest = input.closest(".input")) !== null && _input$closest !== void 0 ? _input$closest : input; 5786 5787 // Honeypot check - if _honeypot field is filled, it's spam 5788 if (input.name === HONEYPOT_FIELD_NAME) { 5789 if (input.value !== "") { 5790 isSpam = true; 5791 } 5792 return; 5793 } 5794 switch (input.type) { 5795 case "checkbox": 5796 if (!input.checked) { 5797 formInput.classList.add("error"); 5798 isFormValid = false; 5799 if (input.name == "privacy") { 5800 privacy = false; 5801 } 5802 return; 5803 } 5804 data[input.name] = input.checked; 5805 break; 5806 case "email": 5807 if (isFreeEmailDomain(input.value)) { 5808 formInput.classList.add("error"); 5809 isFormValid = false; 5810 freeEmail = true; 5811 return; // Prevent form submission 5812 } 5813 if (input.value == "") { 5814 formInput.classList.add("error"); 5815 isFormValid = false; 5816 return; 5817 } 5818 if (form.getAttribute("data-context") === "owasp") { 5819 if (!isOwaspEmail(input.value)) { 5820 formInput.classList.add("error"); 5821 isFormValid = false; 5822 notOwaspEmail = true; 5823 return; 5824 } 5825 } 5826 if (input.value) data[input.name] = input.value; 5827 break; 5828 case "hidden": 5829 break; 5830 default: 5831 if (input.value == "" && (input.classList.contains("required") || input.required)) { 5832 formInput.classList.add("error"); 5833 isFormValid = false; 5834 return; 5835 } 5836 if (input.value) data[input.name] = input.value; 5837 } 5838 }); 5839 5840 // Silently reject spam submissions (honeypot filled) 5841 if (isSpam) { 5842 form.classList.remove("form--loading"); 5843 // Show success message to bot but don't actually submit 5844 setResultMessage(defaultSuccessMsg); 5845 setTimeout(function () { 5846 form.reset(); 5847 }, FORM_RESET_DELAY_MS); 5848 semaphore = true; 5849 return; // Exit early to prevent further processing 5850 } 5851 if (!isFormValid) { 5852 form.classList.remove("form--loading"); 5853 if (freeEmail) { 5854 setResultMessage(defaultErrorInvalidEmail); 5855 } else if (!privacy) { 5856 setResultMessage(defaultPrivacyMsg); 5857 } else if (notOwaspEmail) { 5858 setResultMessage(defaultErrorNotOwaspEmail); 5859 } else { 5860 setResultMessage(defaultValidationMsg); 5861 } 5862 semaphore = true; 5863 return false; 5864 } 5865 5866 // for some forms we need to parse URL query params 5867 // into fetch body data 5868 var context = form.getAttribute("data-context"); 5869 if (context && "aws|gcp".indexOf(context) > -1) { 5870 var queryParams = Object.fromEntries(new URL(window.location.href).searchParams.entries()); 5871 for (var _i = 0, _Object$entries = Object.entries(queryParams); _i < _Object$entries.length; _i++) { 5872 var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2), 5873 key = _Object$entries$_i[0], 5874 value = _Object$entries$_i[1]; 5875 if (value) { 5876 data[key] = value; 5877 } 5878 } 5879 } 5880 fetch(downloadFormLink, { 5881 method: "POST", 5882 headers: { 5883 "Content-Type": "application/json", 5884 Accept: "application/json" 5885 }, 5886 body: JSON.stringify(data) 5887 }).then(function (res) { 5888 if (!res.ok) { 5889 setResultMessage(defaultErrorMsg); 5890 return; 5891 } 5892 setResultMessage(defaultSuccessMsg); 5893 if (typeof _iub != "undefined" && typeof _iub.cons_instructions != "undefined") { 5894 _iub.cons_instructions.push(["submit", { 5895 form: { 5896 selector: form, 5897 map: { 5898 subject: { 5899 email: "email" 5900 }, 5901 preferences: { 5902 generic: "privacy" 5903 } 5904 } 5905 }, 5906 consent: { 5907 legal_notices: [{ 5908 identifier: "privacy_policy" 5909 }] 5910 } 5911 }]); 5912 } 5913 if (context === "demo") { 5914 window.location.href = "/demo/thank-you/"; 5915 return; 5916 } 5917 setTimeout(function () { 5918 form.reset(); 5919 }, FORM_RESET_DELAY_MS); 5920 }).catch(function () { 5921 form.classList.remove("form--loading"); 5922 setResultMessage(blockedRequestMsg); 5923 }).finally(function () { 5924 form.classList.remove("form--loading"); 5925 semaphore = true; 5926 }); 5927 } 5928 }); 5929 form.querySelectorAll("input, textarea").forEach(function (input) { 5930 input.addEventListener("change", function () { 5931 var formInput = input.closest(".input"); 5932 if (formInput && formInput.classList.contains("error")) formInput.classList.remove("error"); 5933 }); 5934 input.addEventListener("focus", function () { 5935 var formInput = input.closest(".input"); 5936 if (formInput) { 5937 formInput.classList.add("focus"); 5938 } 5939 }); 5940 input.addEventListener("blur", function () { 5941 var formInput = input.closest(".input"); 5942 if (formInput) { 5943 formInput.classList.remove("focus"); 5944 } 5945 }); 5946 }); 5947 }); 5948 }; 5949 5950 // `freeEmailDomains` is a vendored list of ~13k free/personal email providers 5951 // (gmail, outlook, icloud, gmx, yandex, â¦). Using it instead of a hand-kept 5952 // array avoids gaps like the missing `outlook.com` (see #672). 5953 var freeEmailDomainSet = new Set(freeEmailDomains.map(function (domain) { 5954 return domain.toLowerCase(); 5955 })); 5956 function isFreeEmailDomain(email) { 5957 var domain = email.substring(email.lastIndexOf("@") + 1); 5958 return freeEmailDomainSet.has(domain.toLowerCase()); 5959 } 5960 function isOwaspEmail(email) { 5961 var domains = ["@equixly.", "@owasp.com", "@owasp.org"]; 5962 return domains.some(function (domain) { 5963 return email.includes(domain); 5964 }); 5965 } 5966 5967 var initStrips = function initStrips() { 5968 var strips = document.querySelectorAll('.strip'); 5969 strips.forEach(setupStrip); 5970 }; 5971 var setupStrip = function setupStrip(strip) { 5972 new Swiper(strip, { 5973 // Optional parameters 5974 direction: 'horizontal', 5975 loop: true, 5976 grabCursor: true, 5977 slidesPerView: 'auto', 5978 centeredSlides: true, 5979 autoplay: { 5980 delay: 1000, 5981 disableOnInteraction: false 5982 }, 5983 modules: [Autoplay] 5984 }); 5985 }; 5986 5987 // const setupStrip = (strip) => { 5988 // startAutoScroll(strip); // Start auto-scroll animation 5989 // strip.addEventListener("mousedown", (e) => startDrag(e, strip)); 5990 // strip.addEventListener("touchstart", (e) => startDrag(e, strip), { 5991 // passive: true, 5992 // }); 5993 // }; 5994 5995 // // Dragging state variables 5996 // let isDragging = false;
5997 // let startX = 0; 5998 // let currentTranslateX = 0; 5999 // let animationFrameId = null; 6000 6001 // // Start drag function 6002 // const startDrag = (event, strip) => { 6003 // event.preventDefault(); 6004 // isDragging = true; 6005 // pauseAutoScroll(strip); 6006 6007 // startX = event.type === "mousedown" ? event.pageX : event.touches[0].pageX; 6008 6009 // document.addEventListener("mousemove", onDragMove); 6010 // document.addEventListener("mouseup", onDragEnd); 6011 // document.addEventListener("touchmove", onDragMove, { passive: false }); 6012 // document.addEventListener("touchend", onDragEnd); 6013 // }; 6014 6015 // // Dragging function with animation frame 6016 // const onDragMove = (event) => { 6017 // if (!isDragging) return; 6018 6019 // const x = event.type === "mousemove" ? event.pageX : event.touches[0].pageX; 6020 // const delta = x - startX; 6021 6022 // if (delta > 0) return; // Prevent left-to-right scroll 6023 6024 // const walk = delta * 0.02; 6025 // currentTranslateX += walk; 6026 // currentTranslateX %= 50; 6027 6028 // if (!animationFrameId) { 6029 // animationFrameId = requestAnimationFrame(() => { 6030 // const strip = document.querySelector(".strip"); 6031 // if (strip) { 6032 // updateTransform(strip.querySelector("ul")); 6033 // } 6034 // }); 6035 // } 6036 6037 // startX = x; 6038 // }; 6039 6040 // // Update transform function 6041 // const updateTransform = (ul) => { 6042 // ul.style.transform = `translate3d(${currentTranslateX}%, 0, 0)`; 6043 // animationFrameId = null; 6044 // }; 6045 6046 // // Stop drag function 6047 // const onDragEnd = (event) => { 6048 // isDragging = false; 6049 // const strip = document.querySelector(".strip"); 6050 // if (strip) { 6051 // resumeAutoScroll(strip); 6052 // } 6053 6054 // document.removeEventListener("mousemove", onDragMove); 6055 // document.removeEventListener("mouseup", onDragEnd); 6056 // document.removeEventListener("touchmove", onDragMove); 6057 // document.removeEventListener("touchend", onDragEnd); 6058 6059 // if (animationFrameId) { 6060 // cancelAnimationFrame(animationFrameId); 6061 // animationFrameId = null; 6062 // } 6063 // }; 6064 6065 // // Start auto-scrolling function 6066 // const startAutoScroll = (strip) => { 6067 // const autoScroll = () => { 6068 // currentTranslateX -= scrollSpeed; 6069 // if (currentTranslateX <= -50) { 6070 // currentTranslateX = 0; 6071 // } 6072 // strip.querySelector( 6073 // "ul" 6074 // ).style.transform = `translate3d(${currentTranslateX}%, 0, 0)`; 6075 // strip._autoScrollId = requestAnimationFrame(autoScroll); 6076 // }; 6077 6078 // strip._autoScroll = autoScroll; 6079 // autoScroll(); 6080 // }; 6081 6082 // // Pause auto-scrolling function 6083 // const pauseAutoScroll = (strip) => { 6084 // if (strip._autoScrollId) { 6085 // cancelAnimationFrame(strip._autoScrollId); 6086 // strip._autoScrollId = null; 6087 // } 6088 // }; 6089 6090 // // Resume auto-scrolling function 6091 // const resumeAutoScroll = (strip) => { 6092 // if (!strip || !strip._autoScrollId) { 6093 // strip._autoScroll(); 6094 // } 6095 // }; 6096 6097 var initStickyGalleries = function initStickyGalleries() { 6098 var galleries = document.querySelectorAll('.sticky-gallery'); 6099 galleries.forEach(function (gallery) { 6100 var sections = gallery.querySelectorAll('.sticky-gallery__text > div'); 6101 var images = gallery.querySelectorAll('.sticky-gallery__images > li'); 6102 sections.forEach(function (section, index) { 6103 var observer = new IntersectionObserver(function (_ref) { 6104 var _ref2 = _slicedToArray(_ref, 1), 6105 e = _ref2[0]; 6106 if (e.isIntersecting) { 6107 gallery.querySelector('.sticky-gallery__images > li.active').classList.remove('active'); 6108 images[index].classList.add('active'); 6109 } 6110 }, { 6111 threshold: [0], 6112 rootMargin: '0px 0px -70% 0px' 6113 }); 6114 observer.observe(section); 6115 }); 6116 }); 6117 }; 6118 6119 var initDrawer = function initDrawer() { 6120 var drawerEl = document.querySelector('#drawer'); 6121 var drawerBtn = document.querySelector('#drawerButton'); 6122 if (!drawerEl) return; 6123 window.addEventListener('scroll', function () { 6124 if (window.scrollY >= 300) {
6125 drawerEl.classList.add('drawer--show-button'); 6126 } else { 6127 if (!drawerEl.classList.contains('drawer--open')) { 6128 drawerEl.classList.remove('drawer--show-button'); 6129 } 6130 } 6131 }); 6132 if (drawerBtn) { 6133 drawerBtn.addEventListener('click', function () { 6134 drawerEl.classList.toggle('drawer--open'); 6135 }); 6136 } 6137 }; 6138 6139 function getDefaultExportFromCjs (x) { 6140 return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; 6141 } 6142 6143 var sal$2 = {exports: {}}; 6144 6145 var sal$1 = sal$2.exports; 6146 6147 var hasRequiredSal; 6148 6149 function requireSal () { 6150 if (hasRequiredSal) return sal$2.exports; 6151 hasRequiredSal = 1; 6152 (function (module, exports) { 6153 !function(e,t){module.exports=t();}(sal$1,(function(){return (()=>{var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]});},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};function n(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r);}return n}function r(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){o(e,t,r[t]);})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t));}));}return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}e.d(t,{default:()=>j});var a="Sal was not initialised! Probably it is used in SSR.",s="Your browser does not support IntersectionObserver!\nGet a polyfill from here:\nhttps://github.com/w3c/IntersectionObserver/tree/master/polyfill",i={root:null,rootMargin:"0% 50%",threshold:.5,animateClassName:"sal-animate",disabledClassName:"sal-disabled",enterEventName:"sal:in",exitEventName:"sal:out",selector:"[data-sal]",once:!0,disabled:!1},l=[],c=null,u=function(e){e&&e!==i&&(i=r(r({},i),e));},d=function(e){e.classList.remove(i.animateClassName);},f=function(e,t){var n=new CustomEvent(e,{bubbles:!0,detail:t});t.target.dispatchEvent(n);},b=function(){document.body.classList.add(i.disabledClassName);},p=function(){c.disconnect(),c=null;},m=function(){return i.disabled||"function"==typeof i.disabled&&i.disabled()},v=function(e,t){e.forEach((function(e){var n=e.target,r=void 0!==n.dataset.salRepeat,o=void 0!==n.dataset.salOnce,a=r||!(o||i.once);e.intersectionRatio>=i.threshold?(function(e){e.target.classList.add(i.animateClassName),f(i.enterEventName,e);}(e),a||t.unobserve(n)):a&&function(e){d(e.target),f(i.exitEventName,e);}(e);}));},y=function(){var e=[].filter.call(document.querySelectorAll(i.selector),(function(e){return !function(e){return e.classList.contains(i.animateClassName)}(e,i.animateClassName)}));return e.forEach((function(e){return c.observe(e)})),e},O=function(){b(),p();},h=function(){document.body.classList.remove(i.disabledClassName),c=new IntersectionObserver(v,{root:i.root,rootMargin:i.rootMargin,threshold:i.threshold}),l=y();},g=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};p(),Array.from(document.querySelectorAll(i.selector)).forEach(d),u(e),h();},w=function(){var e=y();l.push(e);};const j=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i;if(u(e),"undefined"==typeof window)return console.warn(a),{elements:l,disable:O,enable:h,reset:g,update:w};if(!window.IntersectionObserver)throw b(),Error(s);return m()?b():h(),{elements:l,disable:O,enable:h,reset:g,update:w}};return t.default})()})); 6154 6155 } (sal$2, sal$2.exports)); 6156 return sal$2.exports; 6157 } 6158 6159 var salExports = requireSal(); 6160 var sal = /*@__PURE__*/getDefaultExportFromCjs(salExports); 6161 6162 // ES6 modules 6163 var initScrollAnimation = function initScrollAnimation() { 6164 sal({ 6165 threshold: 0.2, 6166 once: true 6167 }); 6168 }; 6169 6170 var initTextCarousel = function initTextCarousel() { 6171 var carouselElements = document.querySelectorAll('.text-carousel-component'); 6172 console.log('Found carousel elements:', carouselElements.length);
6173 carouselElements.forEach(function (carouselElement) { 6174 var textElement = carouselElement.querySelector('.animated-text'); 6175 console.log('Carousel element:', carouselElement); 6176 console.log('Text element:', textElement); 6177 console.log('Raw phrases data:', carouselElement.dataset.phrases); 6178 var phrases; 6179 try { 6180 phrases = JSON.parse(carouselElement.dataset.phrases || '[]'); 6181 console.log('Parsed phrases:', phrases); 6182 } catch (error) { 6183 console.error('Error parsing phrases:', error); 6184 phrases = []; 6185 } 6186 function initializeCarousel(carouselPhrases) { 6187 if (!textElement || !carouselPhrases || carouselPhrases.length === 0) { 6188 if (textElement) textElement.textContent = 'No phrases provided.'; 6189 console.error('Animated text element not found or no phrases provided.'); 6190 return; 6191 } 6192 var currentIndex = 0; 6193 var intervalTime = 3000; // 3 seconds between phrases 6194 var overlapDuration = 100; // Start new text animation very early 6195 6196 function changeText() { 6197 // Start exit animation 6198 textElement.classList.remove('slide-up-in'); 6199 textElement.classList.add('slide-up-out'); 6200 6201 // Start entry animation very early in the exit animation 6202 setTimeout(function () { 6203 currentIndex = (currentIndex + 1) % carouselPhrases.length; 6204 textElement.textContent = carouselPhrases[currentIndex]; 6205 6206 // Force reflow to restart animation 6207 void textElement.offsetWidth; 6208 6209 // Start entry animation 6210 textElement.classList.remove('slide-up-out'); 6211 textElement.classList.add('slide-up-in'); 6212 }, overlapDuration); 6213 } 6214 6215 // Set first phrase and initial animation 6216 if (carouselPhrases.length > 0) { 6217 textElement.textContent = carouselPhrases[currentIndex]; 6218 textElement.classList.add('slide-up-in'); 6219 } 6220 6221 // Change phrase every 3 seconds 6222 if (carouselPhrases.length > 1) { 6223 setInterval(changeText, intervalTime); 6224 } 6225 } 6226 initializeCarousel(phrases); 6227 }); 6228 }; 6229 6230 function initAccordions() { 6231 document.querySelectorAll('.accordions .tab input[type="radio"]').forEach(function (radio) { 6232 radio.addEventListener('click', function () { 6233 if (this.dataset.checked === 'true') { 6234 this.checked = false; 6235 this.dataset.checked = 'false'; 6236 } else { 6237 document.querySelectorAll(".accordions .tab input[name=\"".concat(this.name, "\"]")).forEach(function (r) { 6238 r.dataset.checked = 'false'; 6239 }); 6240 this.dataset.checked = 'true'; 6241 } 6242 }); 6243 }); 6244 } 6245 6246 function initBlogFilter() { 6247 var postsList = document.getElementById('blog-posts'); 6248 if (!postsList) return; 6249 var posts = Array.from(postsList.querySelectorAll('li[data-category]')); 6250 var paginationContainer = document.getElementById('blog-pagination'); 6251 var sidebar = document.getElementById('blog-sidebar'); 6252 var toggle = document.getElementById('blog-filter-toggle'); 6253 var checkboxes = sidebar ? Array.from(sidebar.querySelectorAll('input[type="checkbox"]')) : []; 6254 var PER_PAGE = 12; 6255 var currentPage = 1; 6256 function getSelectedCategories() { 6257 return checkboxes.filter(function (cb) { 6258 return cb.checked; 6259 }).map(function (cb) { 6260 return cb.value; 6261 }); 6262 } 6263 function getFilteredPosts() { 6264 var selected = getSelectedCategories(); 6265 if (selected.length === 0) return posts; 6266 return posts.filter(function (li) { 6267 return selected.includes(li.dataset.category); 6268 }); 6269 } 6270 function renderPage() { 6271 var filtered = getFilteredPosts(); 6272 var totalPages = Math.ceil(filtered.length / PER_PAGE); 6273 if (currentPage > totalPages) currentPage = totalPages || 1; 6274 var start = (currentPage - 1) * PER_PAGE; 6275 var end = start + PER_PAGE; 6276 posts.forEach(function (li) { 6277 return li.hidden = true; 6278 }); 6279 filtered.forEach(function (li, i) { 6280 li.hidden = i < start || i >= end; 6281 }); 6282 6283 // No results 6284 var existing = postsList.querySelector('.blog__no-results'); 6285 if (existing) existing.remove(); 6286 if (filtered.length === 0) { 6287 var msg = document.createElement('p'); 6288 msg.className = 'blog__no-results'; 6289 msg.textContent = 'No posts found for the selected filters.'; 6290 postsList.appendChild(msg); 6291 } 6292 renderPagination(totalPages); 6293 } 6294 function renderPagination(totalPages) { 6295 if (!paginationContainer) return; 6296 if (totalPages <= 1) { 6297 paginationContainer.innerHTML = ''; 6298 return; 6299 } 6300 var html = ''; 6301 6302 // Prev 6303 if (currentPage > 1) { 6304 html += "<a href=\"#\" class=\"pagination-nav\" data-page=\"".concat(currentPage - 1, "\">«<span class=\"desktop-only\">
6304 Prev</span></a>"); 6305 } else { 6306 html += "<span class=\"pagination-nav pagination-disabled\">«<span class=\"desktop-only\"> Prev</span></span>"; 6307 } 6308 6309 // Pages 6310 html += '<div class="pagination-pages"><div class="pagination-desktop">'; 6311 var range = buildRange(currentPage, totalPages, 5); 6312 html += renderRange(range, currentPage, totalPages); 6313 html += '</div><div class="pagination-mobile">'; 6314 var mobileRange = buildRange(currentPage, totalPages, 3); 6315 html += renderRange(mobileRange, currentPage, totalPages); 6316 html += '</div></div>'; 6317 6318 // Next 6319 if (currentPage < totalPages) { 6320 html += "<a href=\"#\" class=\"pagination-nav\" data-page=\"".concat(currentPage + 1, "\"><span class=\"desktop-only\">Next </span>»</a>"); 6321 } else { 6322 html += "<span class=\"pagination-nav pagination-disabled\"><span class=\"desktop-only\">Next</span> »</span>"; 6323 } 6324 paginationContainer.innerHTML = html; 6325 paginationContainer.querySelectorAll('a[data-page]').forEach(function (a) { 6326 a.addEventListener('click', function (e) { 6327 e.preventDefault(); 6328 currentPage = parseInt(a.dataset.page, 10); 6329 renderPage(); 6330 postsList.scrollIntoView({ 6331 behavior: 'smooth', 6332 block: 'start' 6333 }); 6334 }); 6335 }); 6336 } 6337 function buildRange(current, total, maxVisible) { 6338 if (total <= maxVisible) return { 6339 start: 1, 6340 end: total 6341 }; 6342 var half = Math.floor(maxVisible / 2); 6343 var start = current - half; 6344 var end = current + half; 6345 if (start < 1) { 6346 start = 1; 6347 end = maxVisible; 6348 } 6349 if (end > total) { 6350 end = total; 6351 start = total - maxVisible + 1; 6352 } 6353 return { 6354 start: start, 6355 end: end 6356 }; 6357 } 6358 function renderRange(range, current, total) { 6359 var html = ''; 6360 if (range.start > 1) { 6361 html += "<a href=\"#\" data-page=\"1\">1</a>"; 6362 if (range.start > 2) html += '<span class="pagination-dots">...</span>'; 6363 } 6364 for (var p = range.start; p <= range.end; p++) { 6365 if (p === current) { 6366 html += "<em>".concat(p, "</em>"); 6367 } else { 6368 html += "<a href=\"#\" data-page=\"".concat(p, "\">").concat(p, "</a>"); 6369 } 6370 } 6371 if (range.end < total) { 6372 if (range.end < total - 1) html += '<span class="pagination-dots">...</span>'; 6373 html += "<a href=\"#\" data-page=\"".concat(total, "\">
6373").concat(total, "</a>"); 6374 } 6375 return html; 6376 } 6377 6378 // Checkbox filtering 6379 checkboxes.forEach(function (cb) { 6380 cb.addEventListener('change', function () { 6381 currentPage = 1; 6382 renderPage(); 6383 }); 6384 }); 6385 6386 // Mobile toggle 6387 if (toggle && sidebar) { 6388 toggle.addEventListener('click', function () { 6389 var isOpen = sidebar.classList.toggle('is-open'); 6390 toggle.classList.toggle('is-open', isOpen); 6391 }); 6392 } 6393 6394 // Apply category from URL query param (e.g. ?category=Press+Releases) 6395 var urlParams = new URLSearchParams(window.location.search); 6396 var categoryParam = urlParams.get('category'); 6397 if (categoryParam) { 6398 checkboxes.forEach(function (cb) { 6399 if (cb.value === categoryParam) cb.checked = true; 6400 }); 6401 } 6402 6403 // Initial render 6404 renderPage(); 6405 } 6406 6407 function initResourcesFilter() { 6408 var grid = document.getElementById('resources-grid'); 6409 if (!grid) return; 6410 var items = Array.from(grid.querySelectorAll('li[data-type]')); 6411 var sidebar = document.getElementById('resources-sidebar'); 6412 var toggle = document.getElementById('resources-filter-toggle'); 6413 var noResults = document.getElementById('resources-no-results'); 6414 var checkboxes = sidebar ? Array.from(sidebar.querySelectorAll('input[type="checkbox"]')) : []; 6415 function getSelectedTypes() { 6416 return checkboxes.filter(function (cb) { 6417 return cb.checked; 6418 }).map(function (cb) { 6419 return cb.value; 6420 }); 6421 } 6422 function render() { 6423 var selected = getSelectedTypes(); 6424 var visibleCount = 0; 6425 items.forEach(function (li) { 6426 var match = selected.length === 0 || selected.includes(li.dataset.type); 6427 li.hidden = !match; 6428 if (match) visibleCount++; 6429 }); 6430 if (noResults) { 6431 noResults.hidden = visibleCount > 0; 6432 } 6433 } 6434 6435 // Checkbox filtering 6436 checkboxes.forEach(function (cb) { 6437 cb.addEventListener('change', render); 6438 }); 6439 6440 // Mobile toggle 6441 if (toggle && sidebar) { 6442 toggle.addEventListener('click', function () { 6443 var isOpen = sidebar.classList.toggle('is-open'); 6444 toggle.classList.toggle('is-open', isOpen); 6445 }); 6446 } 6447 6448 // Apply type from URL query param (e.g. ?type=Datasheet) 6449 var urlParams = new URLSearchParams(window.location.search); 6450 var typeParam = urlParams.get('type'); 6451 if (typeParam) { 6452 checkboxes.forEach(function (cb) { 6453 if (cb.value === typeParam) cb.checked = true; 6454 }); 6455 } 6456 6457 // Initial render 6458 render(); 6459 } 6460 6461 // if (module.hot) { 6462 // module.hot.accept(); 6463 // } 6464 6465 document.addEventListener('DOMContentLoaded', function () { 6466 initBg(); 6467 initIllustrationLog(); 6468 initSliders(); 6469 initHeader(); 6470 initModals(); 6471 demoFormInit(); 6472 initDrawer(); 6473 initStrips(); 6474 initStickyGalleries(); 6475 initTextCarousel(); 6476 initScrollAnimation(); 6477 initAccordions(); 6478 initBlogFilter(); 6479 initResourcesFilter(); 6480 }); 6481 6482})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.