preactjs / preact

⚛️ Fast 3kB React alternative with the same modern API. Components & Virtual DOM.
https://preactjs.com
MIT License
36.35k stars 1.94k forks source link

Support components that return a raw DOM node #3278

Closed fabiospampinato closed 2 years ago

fabiospampinato commented 2 years ago

Describe the feature you'd love to see

Some context: I work on a Markdown-based notes app, I'm trying to make it as fast as possible but I've found the inability to return raw DOM nodes from Preact components to be a major performance issue for me.

Ideally I'd like the app to take the following steps:

  1. Compile the Markdown to HTML: that's necessary in order to render it on screen.
  2. Construct nodes out of the HTML: that's necessary for sanitizing them.
  3. Sanitize the nodes: can't have XSS issues.
  4. Now those fresh nodes need to be swapped in and out of the DOM.
  5. Finish.

Essentially every step in the list is necessary, at least for parts of the input string.

The problem is with Preact I can't quite just do those steps easily, because I can't just return DOM nodes from components at step 4. and let Preact manage the swapping in and out for me.

So instead of a simple step 4. I need to either:

  1. Convert those nodes into actual JSX elements, which will then be converted back into nodes, which is just wasteful since I already had the fresh nodes to begin with.
  2. Break out of Preact and manage swapping nodes in and out manually, which isn't ideal since I'm using Preact precisely because I'd rather avoid mutating the DOM imperatively like that.

Maybe there are some fundamental issues with allowing this, but it seems like the cleanest solution to me. Maybe managing this manually is actually quite easy and quick and it's better to ask users to do that to squeeze some extra performance if their use case allows for it. I'm not sure what the best path forward is on this, both for myself and Preact.

Additional context (optional)

Kind of off-topic but Solid supports returning raw DOM nodes from components.

JoviDeCroock commented 2 years ago

You can use dangerouslySetInnerHtmk for this case as that won't be 'wasteful' and will just insert the html.

fabiospampinato commented 2 years ago

I can't quite do that without paying for parsing twice, as I need to parse the HTML on my own in any case in order to sanitize it first.

fabiospampinato commented 2 years ago

Personally I ended up inserting and removing those DOM nodes manually, it's fairly easy to do efficiently, and it bypasses Preact entirely essentially.

I think having native support for returning DOM nodes might be an interesting capability though, and it would make this easier/quicker to do for other people.

I'm keeping the issue open to keep the discussion going, but feel free to just close it if it seems unlikely that this is going to happen 👍

Kanaye commented 2 years ago

Well managing dom-nodes somewhere outside (p)react breaks all sort of features like server side rendering or hydration. Also there are a load of libraries that support rendering markdown into components at various levels. e.g. mdxjs at build time or react-markdown at runtime. I've used both of them successfully with preact in past.

But if you need to manage nodes yourself, preact gives you all the tools to do so using refs and disabling component updates.

A short example would be: https://codesandbox.io/s/friendly-dream-38jhd?file=/src/index.js

fabiospampinato commented 2 years ago

Well managing dom-nodes somewhere outside (p)react breaks all sort of features like server side rendering or hydration.

I don't need those, if the internet imploded my app would work just the same basically. I suppose nodes could be serialized somewhat though, and hydrated back on the client.

Also there are a load of libraries that support rendering markdown into components at various levels. e.g. mdxjs at build time or react-markdown at runtime. I've used both of them successfully with preact in past.

The problem isn't doing it, is doing it with optimal performance. Performance-wise bypassing Preact/React is the least of the problems those ready-made runtime-rendering solutions have.

But if you need to manage nodes yourself, preact gives you all the tools to do so using refs and disabling component updates.

Yes, it's quite simple in the end. Perhaps it should be made simpler though, I'm not sure.

Kanaye commented 2 years ago

I don't need those, if the internet imploded my app would work just the same basically.

Good for you! The problem I see is supporting it on a library level, while breaking features other library users depend on. But I'm not a maintainer of preact, just a user. So the decision is up to them ;)

fabiospampinato commented 2 years ago

Good for you! The problem I see is supporting it on a library level, while breaking features other library users depend on. But I'm not a maintainer of preact, just a user. So the decision is up to them ;)

Sure sure, if I had to guess I'd say this is largely backwards compatible, as no components that currently work are returning a DOM node, plus one really has to put some effort in order to break their apps because of this feature when considering servers, like there's no DOM available server-side already, it'll just throw immediately.

developit commented 2 years ago

@fabiospampinato you can use this component to render raw DOM nodes:

function DomNode({ children }) {
  this.shouldComponentUpdate = () => false;
  return Object.defineProperty(h(children.localName), '__e', { get: () => children, set: Object });
}

// usage:
function Markdown({ md }) {
  const dom = markdown_to_dom(md);
  return <DomNode>{dom}</DomNode>
}

That being said, you might be able to construct a pipeline for which Preact is actually beneficial as the renderer, rather than being overhead. If you parse the markdown-generated HTML using DOMParser rather than innerHTML it could be sanitized separately from rendering, which should be much faster. Then converting that to VDOM means Preact can diff when updating instead of destroying and recreating the whole DOM tree on each keystroke. To take things a step further, if you're able to assume the output of markdown-to-html conversion is well-formed, you could use a simple JavaScript HTML parser to construct VNodes directly:

// Parse a well-formed subset of HTML directly to VDOM
import { h } from 'preact';
const voidElements = {area:true,base:true,br:true,col:true,embed:true,hr:true,img:true,input:true,link:true,meta:true,param:true,source:true,track:true,wbr:true};
const tokenizer = /(?:<([a-z0-9]+)( \w+=(['"])[^>'"\n]*\3)*\s*(\/?)\s*>|<\/([a-z0-9]+)>|([^&<>]+))/gi;
const attrTokenizer = / (\w+)=(['"])([^>'"\n]*)\2/g;
function parseHtml(html) {
  let root = h('div', { children: [] });
  let stack = [];
  let parent = root;
  let token, t, node;
  tokenizer.lastIndex = 0;
  while (token = tokenizer.exec(html)) {
    if (token[1]) {
      let props = { children: [] };
      attrTokenizer.lastIndex = 0;
      while (t = attrTokenizer.exec(token[2])) props[t[1]] = t[3];
      node = h(token[1], props);
      parent.props.children.push(node);
      if (!voidElements[token[1]]) {
        stack.push(parent);
        parent = node;
      }
    }
    else if (token[5]) parent = stack.pop() || root;
    else parent.props.children.push(token[6]);
  }
  return root;
}

Here's a full demo of the above: https://jsfiddle.net/developit/1djq4z7r/

fabiospampinato commented 2 years ago

@developit Lots of interesting things to comment on!

First of all for some added context I ended up doing the following:

Component ```tsx import {useLayoutEffect} from '@ui/hooks'; import diff from '@packages/dom-diff'; // Special component that manually handles diffing the DOM against a new set of nodes, significant performance speed-up const NodesRaw = ({ r, nodes }: { r: ReactRefObject, nodes: ArrayLike }): JSXE => { useLayoutEffect ( () => { const parent = r.current; if ( !parent ) return; diff ( parent, parent.childNodes, nodes ); }, [r.current, nodes] ); return null; }; export default NodesRaw; ```
Diff function ```ts // Simple diffing algorithm optimized for lists -- unchanged nodes are not touched at all const diff = ( parent: HTMLElement, prev: ArrayLike, next: ArrayLike ): void => { /* VARIABLES */ const prevLength = prev.length; const nextLength = next.length; const compLength = Math.min ( prevLength, nextLength ); /* START OFFSET */ // Counting how many nodes from the start didn't change let startOffset = 0; for ( let i = 0; i < compLength; i++ ) { if ( prev[i] !== next[i] ) break; startOffset += 1; } /* END OFFSET */ // Counting how many nodes from the end didn't change let endOffset = 0; for ( let i = 0; i < ( compLength - startOffset ); i++ ) { if ( prev[prevLength - 1 - i] !== next[nextLength - 1 - i] ) break; endOffset += 1; } /* REMOVING */ // Removing nodes that changed const removeLength = prevLength - startOffset - endOffset; for ( let i = removeLength; i > 0; i-- ) { parent.removeChild ( prev[startOffset - 1 + i] ); } /* INSERTING */ // Inserting nodes that changed const insertLength = nextLength - startOffset - endOffset; const anchor = prev[startOffset]; for ( let i = 0; i < insertLength; i++ ) { parent.insertBefore ( next[startOffset + i], anchor ); } }; export default diff; ```

@fabiospampinato you can use this component to render raw DOM nodes:

That component looks pretty interesting to me, because compared to what I'm currently using it doesn't require having a ref to the parent node, which is nice.

How is it diffed against the previous render though, are the previous nodes mutated at all? Do all the old nodes get detached and all the new ones attached? Are only the old/new nodes that changed detached/attached?

If you parse the markdown-generated HTML using DOMParser rather than innerHTML it could be sanitized separately from rendering, which should be much faster.

I'm not sure what you mean by this, I'm using DOMPurify for sanitization, which is the only tool that I mostly trust to do the job, and parsing+sanitizing before rendering is the only thing you can do safely, right? I'd really like to move sanitization to a worker, but DOMPurify doesn't support that.

Then converting that to VDOM means Preact can diff when updating instead of destroying and recreating the whole DOM tree on each keystroke.

True, but I'm already using DOMParser only on the portion of the HTML that changed and caching all the other nodes, and I'm already doing some rough diffing with the function I posted above. The diffing is a bit crude but: 1) the DOM tree corresponding to each markdown string is almost always fairly shallow, most of the times I only need to detach something like a paragraph and construct and attach a new one, which should be very fast already. 2) I guess Preact would do a recursive diff, but this way the old nodes would be mutated, so I could no longer keep around a cache mapping html strings to DOM nodes, as those may get edited by Preact, I guess.

To take things a step further, if you're able to assume the output of markdown-to-html conversion is well-formed, you could use a simple JavaScript HTML parser to construct VNodes directly:

Unfortunately I very much can't assume that the produced HTML is well-formed (I think in order for a Markdown compiler to be CommonMark-compliant it mustn't produce well-formed HTML under every scenario, like I think for example some malformed HTML should just pass through unchanged, plus I have plugins that can edit the HTML the compiler outputs however they like), but also I'm not sure how resilient that would be against XSS, like I think that would just pass through stuff like the "onerror" attribute here: <img onerror="alert(123)">, or maybe not, I don't know there are so many XSS shenanigans that I wouldn't feel confident enough doing that with arbitrary user input, but in any case importantly there's a browser-provided sanitization API coming soon (https://wicg.github.io/sanitizer-api/) that I would want to make sure to use as it should be more reliable and hopefully faster.


Performance-wise more in general, in case you are interested in reading this, for my use case I'm more or less doing the following, considering the first render and subsequent renders when the markdown gets edited:

  1. The markdown string is tokenized and the last input string and output tokens are remembered.
  2. When the markdown is edited it is detected very quickly where the edits occurred.
  3. The block of markdown that got edited, and only that block, is tokenized and the new tokens are used to patch the previous cached tokens. If this can't be done safely (rare-ish) the whole thing is tokenized anew.
  4. Then tokens are converted to HTML, each token if it got rendered already in the past remembers what its corresponding HTML string should be, so really only the new tokens are converted to HTML.
  5. The resulting html string is split into top-level html tags in a worker.
  6. Each html tag is parsed with DOMParser and sanitized with DOMPurify. I'm caching this so when edits happen only the edited/new top-level tags gets parsed and sanitized really.

Then if the output is relatively small:

  1. Nodes are attached directly to the DOM using the diff function I posted above. This is potentially a bit wasteful because you may spend time on nodes that aren't currently visible, but also scrolling happens in another thread so the user experience is generally more consistently great in my opinion.

If instead the output is pretty huge:

  1. I render the output nodes using a virtualized list, converting the visible nodes to VDOM and letting Preact do the diffing.

To improve this further I think I could potentially explore the following options:

Anyway I'm always open to ideas on how to speed things up 😁

developit commented 2 years ago

@fabiospampinato Here's an implementation of Markdown processing and HTML sanitization in a Worker. It uses DOMPurify in the Worker by instantiating it against Linkedom: https://jsfiddle.net/developit/fjdh23pc/

As for the windowing/diffing bit, this could probably be done more simply in Preact because it could use referential equality rather than a bidirectional search algorithm.

Iframes won't help performance sadly, since they're only out-of-process when the iframe is loading content from another origin.

fabiospampinato commented 2 years ago

@fabiospampinato Here's an implementation of Markdown processing and HTML sanitization in a Worker. It uses DOMPurify in the Worker by instantiating it against Linkedom:

Oh wow, that's amazing!

On one hand I'm allergic to adding ~200kb+ of dependencies, on the other hand this is awesome, with something like that I could potentially sanitize stuff in parallel too. Other drawbacks are that I most probably would still want to use the new Sanitizer API, which just isn't available in a worker, and while parsing and sanitization is offloaded to the worker some nodes would still need to be created on the main thread, but I guess in this scenario it'd be better to just output VDOM and let Preact do its magic. I wonder if LinkeDOM not being 100% spec compliant could cause issues in some edge cases, maybe not, I'm not sure which parts of the DOM DOMPurify actually relies on.

Iframes won't help performance sadly, since they're only out-of-process when the iframe is loading content from another origin.

Oh really? 😢 Maybe that'll change in the future, maybe it's just a limitation of the browser that will eventually be lifted.

developit commented 2 years ago

I don't think DOMPurify relies on anything linkedom lacks, but I haven't read the source in its entirety.

Here's a version of the original "using Preact to apply markdown updates via diff" demo that adds subtree caching. In the demo, subtrees Preact touches (even if unchanged) are indicated by a purple flash. When typing, you can see how little of the DOM is actually being traversed: https://jsfiddle.net/developit/8of0p9cn/

https://user-images.githubusercontent.com/105127/137214681-d10e7a48-32f2-4d79-a52a-e6133a76440d.mov

One advantage of this approach is that the "skipping over unchanged blocks" technique is applied to the entire document, rather than only its root elements. When editing a long paragraph or the contents of a table, this means only the modified text / table cell is traversed and diffed rather than the entire containing paragraph/table.

fabiospampinato commented 2 years ago

Pretty amazing how far very little code can get you.

To summarize:


I'm closing this as the component mentioned here seems to basically address the issue already, and mutating the DOM manually with a ref to the parent is quite doable too.

fabiospampinato commented 2 years ago

Little performance update.

I'm playing with editing the following document, by appending a character at line 3:

Huge.md ```markdown # TLD Try changing this line: foo | TLD | Protocol | WWW | Subdomain | Email | | --- | :-----: | :---: | :---: | :---: | | `aaa` | http://foo.aaa | www.foo.aaa | sub.foo.aaa | foo@foo.aaa | | `aarp` | http://foo.aarp | www.foo.aarp | sub.foo.aarp | foo@foo.aarp | | `abarth` | http://foo.abarth | www.foo.abarth | sub.foo.abarth | foo@foo.abarth | | `abb` | http://foo.abb | www.foo.abb | sub.foo.abb | foo@foo.abb | | `abbott` | http://foo.abbott | www.foo.abbott | sub.foo.abbott | foo@foo.abbott | | `abbvie` | http://foo.abbvie | www.foo.abbvie | sub.foo.abbvie | foo@foo.abbvie | | `abc` | http://foo.abc | www.foo.abc | sub.foo.abc | foo@foo.abc | | `able` | http://foo.able | www.foo.able | sub.foo.able | foo@foo.able | | `abogado` | http://foo.abogado | www.foo.abogado | sub.foo.abogado | foo@foo.abogado | | `abudhabi` | http://foo.abudhabi | www.foo.abudhabi | sub.foo.abudhabi | foo@foo.abudhabi | | `ac` | http://foo.ac | www.foo.ac | sub.foo.ac | foo@foo.ac | | `academy` | http://foo.academy | www.foo.academy | sub.foo.academy | foo@foo.academy | | `accenture` | http://foo.accenture | www.foo.accenture | sub.foo.accenture | foo@foo.accenture | | `accountant` | http://foo.accountant | www.foo.accountant | sub.foo.accountant | foo@foo.accountant | | `accountants` | http://foo.accountants | www.foo.accountants | sub.foo.accountants | foo@foo.accountants | | `aco` | http://foo.aco | www.foo.aco | sub.foo.aco | foo@foo.aco | | `actor` | http://foo.actor | www.foo.actor | sub.foo.actor | foo@foo.actor | | `ad` | http://foo.ad | www.foo.ad | sub.foo.ad | foo@foo.ad | | `adac` | http://foo.adac | www.foo.adac | sub.foo.adac | foo@foo.adac | | `ads` | http://foo.ads | www.foo.ads | sub.foo.ads | foo@foo.ads | | `adult` | http://foo.adult | www.foo.adult | sub.foo.adult | foo@foo.adult | | `ae` | http://foo.ae | www.foo.ae | sub.foo.ae | foo@foo.ae | | `aeg` | http://foo.aeg | www.foo.aeg | sub.foo.aeg | foo@foo.aeg | | `aero` | http://foo.aero | www.foo.aero | sub.foo.aero | foo@foo.aero | | `aetna` | http://foo.aetna | www.foo.aetna | sub.foo.aetna | foo@foo.aetna | | `af` | http://foo.af | www.foo.af | sub.foo.af | foo@foo.af | | `afamilycompany` | http://foo.afamilycompany | www.foo.afamilycompany | sub.foo.afamilycompany | foo@foo.afamilycompany | | `afl` | http://foo.afl | www.foo.afl | sub.foo.afl | foo@foo.afl | | `africa` | http://foo.africa | www.foo.africa | sub.foo.africa | foo@foo.africa | | `ag` | http://foo.ag | www.foo.ag | sub.foo.ag | foo@foo.ag | | `agakhan` | http://foo.agakhan | www.foo.agakhan | sub.foo.agakhan | foo@foo.agakhan | | `agency` | http://foo.agency | www.foo.agency | sub.foo.agency | foo@foo.agency | | `ai` | http://foo.ai | www.foo.ai | sub.foo.ai | foo@foo.ai | | `aig` | http://foo.aig | www.foo.aig | sub.foo.aig | foo@foo.aig | | `aigo` | http://foo.aigo | www.foo.aigo | sub.foo.aigo | foo@foo.aigo | | `airbus` | http://foo.airbus | www.foo.airbus | sub.foo.airbus | foo@foo.airbus | | `airforce` | http://foo.airforce | www.foo.airforce | sub.foo.airforce | foo@foo.airforce | | `airtel` | http://foo.airtel | www.foo.airtel | sub.foo.airtel | foo@foo.airtel | | `akdn` | http://foo.akdn | www.foo.akdn | sub.foo.akdn | foo@foo.akdn | | `al` | http://foo.al | www.foo.al | sub.foo.al | foo@foo.al | | `alfaromeo` | http://foo.alfaromeo | www.foo.alfaromeo | sub.foo.alfaromeo | foo@foo.alfaromeo | | `alibaba` | http://foo.alibaba | www.foo.alibaba | sub.foo.alibaba | foo@foo.alibaba | | `alipay` | http://foo.alipay | www.foo.alipay | sub.foo.alipay | foo@foo.alipay | | `allfinanz` | http://foo.allfinanz | www.foo.allfinanz | sub.foo.allfinanz | foo@foo.allfinanz | | `allstate` | http://foo.allstate | www.foo.allstate | sub.foo.allstate | foo@foo.allstate | | `ally` | http://foo.ally | www.foo.ally | sub.foo.ally | foo@foo.ally | | `alsace` | http://foo.alsace | www.foo.alsace | sub.foo.alsace | foo@foo.alsace | | `alstom` | http://foo.alstom | www.foo.alstom | sub.foo.alstom | foo@foo.alstom | | `am` | http://foo.am | www.foo.am | sub.foo.am | foo@foo.am | | `americanexpress` | http://foo.americanexpress | www.foo.americanexpress | sub.foo.americanexpress | foo@foo.americanexpress | | `americanfamily` | http://foo.americanfamily | www.foo.americanfamily | sub.foo.americanfamily | foo@foo.americanfamily | | `amex` | http://foo.amex | www.foo.amex | sub.foo.amex | foo@foo.amex | | `amfam` | http://foo.amfam | www.foo.amfam | sub.foo.amfam | foo@foo.amfam | | `amica` | http://foo.amica | www.foo.amica | sub.foo.amica | foo@foo.amica | | `amsterdam` | http://foo.amsterdam | www.foo.amsterdam | sub.foo.amsterdam | foo@foo.amsterdam | | `analytics` | http://foo.analytics | www.foo.analytics | sub.foo.analytics | foo@foo.analytics | | `android` | http://foo.android | www.foo.android | sub.foo.android | foo@foo.android | | `anquan` | http://foo.anquan | www.foo.anquan | sub.foo.anquan | foo@foo.anquan | | `anz` | http://foo.anz | www.foo.anz | sub.foo.anz | foo@foo.anz | | `ao` | http://foo.ao | www.foo.ao | sub.foo.ao | foo@foo.ao | | `aol` | http://foo.aol | www.foo.aol | sub.foo.aol | foo@foo.aol | | `apartments` | http://foo.apartments | www.foo.apartments | sub.foo.apartments | foo@foo.apartments | | `app` | http://foo.app | www.foo.app | sub.foo.app | foo@foo.app | | `apple` | http://foo.apple | www.foo.apple | sub.foo.apple | foo@foo.apple | | `aq` | http://foo.aq | www.foo.aq | sub.foo.aq | foo@foo.aq | | `aquarelle` | http://foo.aquarelle | www.foo.aquarelle | sub.foo.aquarelle | foo@foo.aquarelle | | `ar` | http://foo.ar | www.foo.ar | sub.foo.ar | foo@foo.ar | | `arab` | http://foo.arab | www.foo.arab | sub.foo.arab | foo@foo.arab | | `aramco` | http://foo.aramco | www.foo.aramco | sub.foo.aramco | foo@foo.aramco | | `archi` | http://foo.archi | www.foo.archi | sub.foo.archi | foo@foo.archi | | `army` | http://foo.army | www.foo.army | sub.foo.army | foo@foo.army | | `arpa` | http://foo.arpa | www.foo.arpa | sub.foo.arpa | foo@foo.arpa | | `art` | http://foo.art | www.foo.art | sub.foo.art | foo@foo.art | | `arte` | http://foo.arte | www.foo.arte | sub.foo.arte | foo@foo.arte | | `as` | http://foo.as | www.foo.as | sub.foo.as | foo@foo.as | | `asda` | http://foo.asda | www.foo.asda | sub.foo.asda | foo@foo.asda | | `asia` | http://foo.asia | www.foo.asia | sub.foo.asia | foo@foo.asia | | `associates` | http://foo.associates | www.foo.associates | sub.foo.associates | foo@foo.associates | | `at` | http://foo.at | www.foo.at | sub.foo.at | foo@foo.at | | `athleta` | http://foo.athleta | www.foo.athleta | sub.foo.athleta | foo@foo.athleta | | `attorney` | http://foo.attorney | www.foo.attorney | sub.foo.attorney | foo@foo.attorney | | `au` | http://foo.au | www.foo.au | sub.foo.au | foo@foo.au | | `auction` | http://foo.auction | www.foo.auction | sub.foo.auction | foo@foo.auction | | `audi` | http://foo.audi | www.foo.audi | sub.foo.audi | foo@foo.audi | | `audible` | http://foo.audible | www.foo.audible | sub.foo.audible | foo@foo.audible | | `audio` | http://foo.audio | www.foo.audio | sub.foo.audio | foo@foo.audio | | `auspost` | http://foo.auspost | www.foo.auspost | sub.foo.auspost | foo@foo.auspost | | `author` | http://foo.author | www.foo.author | sub.foo.author | foo@foo.author | | `auto` | http://foo.auto | www.foo.auto | sub.foo.auto | foo@foo.auto | | `autos` | http://foo.autos | www.foo.autos | sub.foo.autos | foo@foo.autos | | `avianca` | http://foo.avianca | www.foo.avianca | sub.foo.avianca | foo@foo.avianca | | `aw` | http://foo.aw | www.foo.aw | sub.foo.aw | foo@foo.aw | | `aws` | http://foo.aws | www.foo.aws | sub.foo.aws | foo@foo.aws | | `ax` | http://foo.ax | www.foo.ax | sub.foo.ax | foo@foo.ax | | `axa` | http://foo.axa | www.foo.axa | sub.foo.axa | foo@foo.axa | | `az` | http://foo.az | www.foo.az | sub.foo.az | foo@foo.az | | `azure` | http://foo.azure | www.foo.azure | sub.foo.azure | foo@foo.azure | | `ba` | http://foo.ba | www.foo.ba | sub.foo.ba | foo@foo.ba | | `baby` | http://foo.baby | www.foo.baby | sub.foo.baby | foo@foo.baby | | `baidu` | http://foo.baidu | www.foo.baidu | sub.foo.baidu | foo@foo.baidu | | `banamex` | http://foo.banamex | www.foo.banamex | sub.foo.banamex | foo@foo.banamex | | `bananarepublic` | http://foo.bananarepublic | www.foo.bananarepublic | sub.foo.bananarepublic | foo@foo.bananarepublic | | `band` | http://foo.band | www.foo.band | sub.foo.band | foo@foo.band | | `bank` | http://foo.bank | www.foo.bank | sub.foo.bank | foo@foo.bank | | `bar` | http://foo.bar | www.foo.bar | sub.foo.bar | foo@foo.bar | | `barcelona` | http://foo.barcelona | www.foo.barcelona | sub.foo.barcelona | foo@foo.barcelona | | `barclaycard` | http://foo.barclaycard | www.foo.barclaycard | sub.foo.barclaycard | foo@foo.barclaycard | | `barclays` | http://foo.barclays | www.foo.barclays | sub.foo.barclays | foo@foo.barclays | | `barefoot` | http://foo.barefoot | www.foo.barefoot | sub.foo.barefoot | foo@foo.barefoot | | `bargains` | http://foo.bargains | www.foo.bargains | sub.foo.bargains | foo@foo.bargains | | `baseball` | http://foo.baseball | www.foo.baseball | sub.foo.baseball | foo@foo.baseball | | `basketball` | http://foo.basketball | www.foo.basketball | sub.foo.basketball | foo@foo.basketball | | `bauhaus` | http://foo.bauhaus | www.foo.bauhaus | sub.foo.bauhaus | foo@foo.bauhaus | | `bayern` | http://foo.bayern | www.foo.bayern | sub.foo.bayern | foo@foo.bayern | | `bb` | http://foo.bb | www.foo.bb | sub.foo.bb | foo@foo.bb | | `bbc` | http://foo.bbc | www.foo.bbc | sub.foo.bbc | foo@foo.bbc | | `bbt` | http://foo.bbt | www.foo.bbt | sub.foo.bbt | foo@foo.bbt | | `bbva` | http://foo.bbva | www.foo.bbva | sub.foo.bbva | foo@foo.bbva | | `bcg` | http://foo.bcg | www.foo.bcg | sub.foo.bcg | foo@foo.bcg | | `bcn` | http://foo.bcn | www.foo.bcn | sub.foo.bcn | foo@foo.bcn | | `bd` | http://foo.bd | www.foo.bd | sub.foo.bd | foo@foo.bd | | `be` | http://foo.be | www.foo.be | sub.foo.be | foo@foo.be | | `beats` | http://foo.beats | www.foo.beats | sub.foo.beats | foo@foo.beats | | `beauty` | http://foo.beauty | www.foo.beauty | sub.foo.beauty | foo@foo.beauty | | `beer` | http://foo.beer | www.foo.beer | sub.foo.beer | foo@foo.beer | | `bentley` | http://foo.bentley | www.foo.bentley | sub.foo.bentley | foo@foo.bentley | | `berlin` | http://foo.berlin | www.foo.berlin | sub.foo.berlin | foo@foo.berlin | | `best` | http://foo.best | www.foo.best | sub.foo.best | foo@foo.best | | `bestbuy` | http://foo.bestbuy | www.foo.bestbuy | sub.foo.bestbuy | foo@foo.bestbuy | | `bet` | http://foo.bet | www.foo.bet | sub.foo.bet | foo@foo.bet | | `bf` | http://foo.bf | www.foo.bf | sub.foo.bf | foo@foo.bf | | `bg` | http://foo.bg | www.foo.bg | sub.foo.bg | foo@foo.bg | | `bh` | http://foo.bh | www.foo.bh | sub.foo.bh | foo@foo.bh | | `bharti` | http://foo.bharti | www.foo.bharti | sub.foo.bharti | foo@foo.bharti | | `bi` | http://foo.bi | www.foo.bi | sub.foo.bi | foo@foo.bi | | `bible` | http://foo.bible | www.foo.bible | sub.foo.bible | foo@foo.bible | | `bid` | http://foo.bid | www.foo.bid | sub.foo.bid | foo@foo.bid | | `bike` | http://foo.bike | www.foo.bike | sub.foo.bike | foo@foo.bike | | `bing` | http://foo.bing | www.foo.bing | sub.foo.bing | foo@foo.bing | | `bingo` | http://foo.bingo | www.foo.bingo | sub.foo.bingo | foo@foo.bingo | | `bio` | http://foo.bio | www.foo.bio | sub.foo.bio | foo@foo.bio | | `biz` | http://foo.biz | www.foo.biz | sub.foo.biz | foo@foo.biz | | `bj` | http://foo.bj | www.foo.bj | sub.foo.bj | foo@foo.bj | | `black` | http://foo.black | www.foo.black | sub.foo.black | foo@foo.black | | `blackfriday` | http://foo.blackfriday | www.foo.blackfriday | sub.foo.blackfriday | foo@foo.blackfriday | | `blockbuster` | http://foo.blockbuster | www.foo.blockbuster | sub.foo.blockbuster | foo@foo.blockbuster | | `blog` | http://foo.blog | www.foo.blog | sub.foo.blog | foo@foo.blog | | `bloomberg` | http://foo.bloomberg | www.foo.bloomberg | sub.foo.bloomberg | foo@foo.bloomberg | | `blue` | http://foo.blue | www.foo.blue | sub.foo.blue | foo@foo.blue | | `bm` | http://foo.bm | www.foo.bm | sub.foo.bm | foo@foo.bm | | `bms` | http://foo.bms | www.foo.bms | sub.foo.bms | foo@foo.bms | | `bmw` | http://foo.bmw | www.foo.bmw | sub.foo.bmw | foo@foo.bmw | | `bn` | http://foo.bn | www.foo.bn | sub.foo.bn | foo@foo.bn | | `bnpparibas` | http://foo.bnpparibas | www.foo.bnpparibas | sub.foo.bnpparibas | foo@foo.bnpparibas | | `bo` | http://foo.bo | www.foo.bo | sub.foo.bo | foo@foo.bo | | `boats` | http://foo.boats | www.foo.boats | sub.foo.boats | foo@foo.boats | | `boehringer` | http://foo.boehringer | www.foo.boehringer | sub.foo.boehringer | foo@foo.boehringer | | `bofa` | http://foo.bofa | www.foo.bofa | sub.foo.bofa | foo@foo.bofa | | `bom` | http://foo.bom | www.foo.bom | sub.foo.bom | foo@foo.bom | | `bond` | http://foo.bond | www.foo.bond | sub.foo.bond | foo@foo.bond | | `boo` | http://foo.boo | www.foo.boo | sub.foo.boo | foo@foo.boo | | `book` | http://foo.book | www.foo.book | sub.foo.book | foo@foo.book | | `booking` | http://foo.booking | www.foo.booking | sub.foo.booking | foo@foo.booking | | `bosch` | http://foo.bosch | www.foo.bosch | sub.foo.bosch | foo@foo.bosch | | `bostik` | http://foo.bostik | www.foo.bostik | sub.foo.bostik | foo@foo.bostik | | `boston` | http://foo.boston | www.foo.boston | sub.foo.boston | foo@foo.boston | | `bot` | http://foo.bot | www.foo.bot | sub.foo.bot | foo@foo.bot | | `boutique` | http://foo.boutique | www.foo.boutique | sub.foo.boutique | foo@foo.boutique | | `box` | http://foo.box | www.foo.box | sub.foo.box | foo@foo.box | | `br` | http://foo.br | www.foo.br | sub.foo.br | foo@foo.br | | `bradesco` | http://foo.bradesco | www.foo.bradesco | sub.foo.bradesco | foo@foo.bradesco | | `bridgestone` | http://foo.bridgestone | www.foo.bridgestone | sub.foo.bridgestone | foo@foo.bridgestone | | `broadway` | http://foo.broadway | www.foo.broadway | sub.foo.broadway | foo@foo.broadway | | `broker` | http://foo.broker | www.foo.broker | sub.foo.broker | foo@foo.broker | | `brother` | http://foo.brother | www.foo.brother | sub.foo.brother | foo@foo.brother | | `brussels` | http://foo.brussels | www.foo.brussels | sub.foo.brussels | foo@foo.brussels | | `bs` | http://foo.bs | www.foo.bs | sub.foo.bs | foo@foo.bs | | `bt` | http://foo.bt | www.foo.bt | sub.foo.bt | foo@foo.bt | | `budapest` | http://foo.budapest | www.foo.budapest | sub.foo.budapest | foo@foo.budapest | | `bugatti` | http://foo.bugatti | www.foo.bugatti | sub.foo.bugatti | foo@foo.bugatti | | `build` | http://foo.build | www.foo.build | sub.foo.build | foo@foo.build | | `builders` | http://foo.builders | www.foo.builders | sub.foo.builders | foo@foo.builders | | `business` | http://foo.business | www.foo.business | sub.foo.business | foo@foo.business | | `buy` | http://foo.buy | www.foo.buy | sub.foo.buy | foo@foo.buy | | `buzz` | http://foo.buzz | www.foo.buzz | sub.foo.buzz | foo@foo.buzz | | `bv` | http://foo.bv | www.foo.bv | sub.foo.bv | foo@foo.bv | | `bw` | http://foo.bw | www.foo.bw | sub.foo.bw | foo@foo.bw | | `by` | http://foo.by | www.foo.by | sub.foo.by | foo@foo.by | | `bz` | http://foo.bz | www.foo.bz | sub.foo.bz | foo@foo.bz | | `bzh` | http://foo.bzh | www.foo.bzh | sub.foo.bzh | foo@foo.bzh | | `ca` | http://foo.ca | www.foo.ca | sub.foo.ca | foo@foo.ca | | `cab` | http://foo.cab | www.foo.cab | sub.foo.cab | foo@foo.cab | | `cafe` | http://foo.cafe | www.foo.cafe | sub.foo.cafe | foo@foo.cafe | | `cal` | http://foo.cal | www.foo.cal | sub.foo.cal | foo@foo.cal | | `call` | http://foo.call | www.foo.call | sub.foo.call | foo@foo.call | | `calvinklein` | http://foo.calvinklein | www.foo.calvinklein | sub.foo.calvinklein | foo@foo.calvinklein | | `cam` | http://foo.cam | www.foo.cam | sub.foo.cam | foo@foo.cam | | `camera` | http://foo.camera | www.foo.camera | sub.foo.camera | foo@foo.camera | | `camp` | http://foo.camp | www.foo.camp | sub.foo.camp | foo@foo.camp | | `cancerresearch` | http://foo.cancerresearch | www.foo.cancerresearch | sub.foo.cancerresearch | foo@foo.cancerresearch | | `canon` | http://foo.canon | www.foo.canon | sub.foo.canon | foo@foo.canon | | `capetown` | http://foo.capetown | www.foo.capetown | sub.foo.capetown | foo@foo.capetown | | `capital` | http://foo.capital | www.foo.capital | sub.foo.capital | foo@foo.capital | | `capitalone` | http://foo.capitalone | www.foo.capitalone | sub.foo.capitalone | foo@foo.capitalone | | `car` | http://foo.car | www.foo.car | sub.foo.car | foo@foo.car | | `caravan` | http://foo.caravan | www.foo.caravan | sub.foo.caravan | foo@foo.caravan | | `cards` | http://foo.cards | www.foo.cards | sub.foo.cards | foo@foo.cards | | `care` | http://foo.care | www.foo.care | sub.foo.care | foo@foo.care | | `career` | http://foo.career | www.foo.career | sub.foo.career | foo@foo.career | | `careers` | http://foo.careers | www.foo.careers | sub.foo.careers | foo@foo.careers | | `cars` | http://foo.cars | www.foo.cars | sub.foo.cars | foo@foo.cars | | `casa` | http://foo.casa | www.foo.casa | sub.foo.casa | foo@foo.casa | | `case` | http://foo.case | www.foo.case | sub.foo.case | foo@foo.case | | `caseih` | http://foo.caseih | www.foo.caseih | sub.foo.caseih | foo@foo.caseih | | `cash` | http://foo.cash | www.foo.cash | sub.foo.cash | foo@foo.cash | | `casino` | http://foo.casino | www.foo.casino | sub.foo.casino | foo@foo.casino | | `cat` | http://foo.cat | www.foo.cat | sub.foo.cat | foo@foo.cat | | `catering` | http://foo.catering | www.foo.catering | sub.foo.catering | foo@foo.catering | | `catholic` | http://foo.catholic | www.foo.catholic | sub.foo.catholic | foo@foo.catholic | | `cba` | http://foo.cba | www.foo.cba | sub.foo.cba | foo@foo.cba | | `cbn` | http://foo.cbn | www.foo.cbn | sub.foo.cbn | foo@foo.cbn | | `cbre` | http://foo.cbre | www.foo.cbre | sub.foo.cbre | foo@foo.cbre | | `cbs` | http://foo.cbs | www.foo.cbs | sub.foo.cbs | foo@foo.cbs | | `cc` | http://foo.cc | www.foo.cc | sub.foo.cc | foo@foo.cc | | `cd` | http://foo.cd | www.foo.cd | sub.foo.cd | foo@foo.cd | | `ceb` | http://foo.ceb | www.foo.ceb | sub.foo.ceb | foo@foo.ceb | | `center` | http://foo.center | www.foo.center | sub.foo.center | foo@foo.center | | `ceo` | http://foo.ceo | www.foo.ceo | sub.foo.ceo | foo@foo.ceo | | `cern` | http://foo.cern | www.foo.cern | sub.foo.cern | foo@foo.cern | | `cf` | http://foo.cf | www.foo.cf | sub.foo.cf | foo@foo.cf | | `cfa` | http://foo.cfa | www.foo.cfa | sub.foo.cfa | foo@foo.cfa | | `cfd` | http://foo.cfd | www.foo.cfd | sub.foo.cfd | foo@foo.cfd | | `cg` | http://foo.cg | www.foo.cg | sub.foo.cg | foo@foo.cg | | `ch` | http://foo.ch | www.foo.ch | sub.foo.ch | foo@foo.ch | | `chanel` | http://foo.chanel | www.foo.chanel | sub.foo.chanel | foo@foo.chanel | | `channel` | http://foo.channel | www.foo.channel | sub.foo.channel | foo@foo.channel | | `charity` | http://foo.charity | www.foo.charity | sub.foo.charity | foo@foo.charity | | `chase` | http://foo.chase | www.foo.chase | sub.foo.chase | foo@foo.chase | | `chat` | http://foo.chat | www.foo.chat | sub.foo.chat | foo@foo.chat | | `cheap` | http://foo.cheap | www.foo.cheap | sub.foo.cheap | foo@foo.cheap | | `chintai` | http://foo.chintai | www.foo.chintai | sub.foo.chintai | foo@foo.chintai | | `christmas` | http://foo.christmas | www.foo.christmas | sub.foo.christmas | foo@foo.christmas | | `chrome` | http://foo.chrome | www.foo.chrome | sub.foo.chrome | foo@foo.chrome | | `church` | http://foo.church | www.foo.church | sub.foo.church | foo@foo.church | | `ci` | http://foo.ci | www.foo.ci | sub.foo.ci | foo@foo.ci | | `cipriani` | http://foo.cipriani | www.foo.cipriani | sub.foo.cipriani | foo@foo.cipriani | | `circle` | http://foo.circle | www.foo.circle | sub.foo.circle | foo@foo.circle | | `cisco` | http://foo.cisco | www.foo.cisco | sub.foo.cisco | foo@foo.cisco | | `citadel` | http://foo.citadel | www.foo.citadel | sub.foo.citadel | foo@foo.citadel | | `citi` | http://foo.citi | www.foo.citi | sub.foo.citi | foo@foo.citi | | `citic` | http://foo.citic | www.foo.citic | sub.foo.citic | foo@foo.citic | | `city` | http://foo.city | www.foo.city | sub.foo.city | foo@foo.city | | `cityeats` | http://foo.cityeats | www.foo.cityeats | sub.foo.cityeats | foo@foo.cityeats | | `ck` | http://foo.ck | www.foo.ck | sub.foo.ck | foo@foo.ck | | `cl` | http://foo.cl | www.foo.cl | sub.foo.cl | foo@foo.cl | | `claims` | http://foo.claims | www.foo.claims | sub.foo.claims | foo@foo.claims | | `cleaning` | http://foo.cleaning | www.foo.cleaning | sub.foo.cleaning | foo@foo.cleaning | | `click` | http://foo.click | www.foo.click | sub.foo.click | foo@foo.click | | `clinic` | http://foo.clinic | www.foo.clinic | sub.foo.clinic | foo@foo.clinic | | `clinique` | http://foo.clinique | www.foo.clinique | sub.foo.clinique | foo@foo.clinique | | `clothing` | http://foo.clothing | www.foo.clothing | sub.foo.clothing | foo@foo.clothing | | `cloud` | http://foo.cloud | www.foo.cloud | sub.foo.cloud | foo@foo.cloud | | `club` | http://foo.club | www.foo.club | sub.foo.club | foo@foo.club | | `clubmed` | http://foo.clubmed | www.foo.clubmed | sub.foo.clubmed | foo@foo.clubmed | | `cm` | http://foo.cm | www.foo.cm | sub.foo.cm | foo@foo.cm | | `cn` | http://foo.cn | www.foo.cn | sub.foo.cn | foo@foo.cn | | `co` | http://foo.co | www.foo.co | sub.foo.co | foo@foo.co | | `coach` | http://foo.coach | www.foo.coach | sub.foo.coach | foo@foo.coach | | `codes` | http://foo.codes | www.foo.codes | sub.foo.codes | foo@foo.codes | | `coffee` | http://foo.coffee | www.foo.coffee | sub.foo.coffee | foo@foo.coffee | | `college` | http://foo.college | www.foo.college | sub.foo.college | foo@foo.college | | `cologne` | http://foo.cologne | www.foo.cologne | sub.foo.cologne | foo@foo.cologne | | `com` | http://foo.com | www.foo.com | sub.foo.com | foo@foo.com | | `comcast` | http://foo.comcast | www.foo.comcast | sub.foo.comcast | foo@foo.comcast | | `commbank` | http://foo.commbank | www.foo.commbank | sub.foo.commbank | foo@foo.commbank | | `community` | http://foo.community | www.foo.community | sub.foo.community | foo@foo.community | | `company` | http://foo.company | www.foo.company | sub.foo.company | foo@foo.company | | `compare` | http://foo.compare | www.foo.compare | sub.foo.compare | foo@foo.compare | | `computer` | http://foo.computer | www.foo.computer | sub.foo.computer | foo@foo.computer | | `comsec` | http://foo.comsec | www.foo.comsec | sub.foo.comsec | foo@foo.comsec | | `condos` | http://foo.condos | www.foo.condos | sub.foo.condos | foo@foo.condos | | `construction` | http://foo.construction | www.foo.construction | sub.foo.construction | foo@foo.construction | | `consulting` | http://foo.consulting | www.foo.consulting | sub.foo.consulting | foo@foo.consulting | | `contact` | http://foo.contact | www.foo.contact | sub.foo.contact | foo@foo.contact | | `contractors` | http://foo.contractors | www.foo.contractors | sub.foo.contractors | foo@foo.contractors | | `cooking` | http://foo.cooking | www.foo.cooking | sub.foo.cooking | foo@foo.cooking | | `cookingchannel` | http://foo.cookingchannel | www.foo.cookingchannel | sub.foo.cookingchannel | foo@foo.cookingchannel | | `cool` | http://foo.cool | www.foo.cool | sub.foo.cool | foo@foo.cool | | `coop` | http://foo.coop | www.foo.coop | sub.foo.coop | foo@foo.coop | | `corsica` | http://foo.corsica | www.foo.corsica | sub.foo.corsica | foo@foo.corsica | | `country` | http://foo.country | www.foo.country | sub.foo.country | foo@foo.country | | `coupon` | http://foo.coupon | www.foo.coupon | sub.foo.coupon | foo@foo.coupon | | `coupons` | http://foo.coupons | www.foo.coupons | sub.foo.coupons | foo@foo.coupons | | `courses` | http://foo.courses | www.foo.courses | sub.foo.courses | foo@foo.courses | | `cpa` | http://foo.cpa | www.foo.cpa | sub.foo.cpa | foo@foo.cpa | | `cr` | http://foo.cr | www.foo.cr | sub.foo.cr | foo@foo.cr | | `credit` | http://foo.credit | www.foo.credit | sub.foo.credit | foo@foo.credit | | `creditcard` | http://foo.creditcard | www.foo.creditcard | sub.foo.creditcard | foo@foo.creditcard | | `creditunion` | http://foo.creditunion | www.foo.creditunion | sub.foo.creditunion | foo@foo.creditunion | | `cricket` | http://foo.cricket | www.foo.cricket | sub.foo.cricket | foo@foo.cricket | | `crown` | http://foo.crown | www.foo.crown | sub.foo.crown | foo@foo.crown | | `crs` | http://foo.crs | www.foo.crs | sub.foo.crs | foo@foo.crs | | `cruise` | http://foo.cruise | www.foo.cruise | sub.foo.cruise | foo@foo.cruise | | `cruises` | http://foo.cruises | www.foo.cruises | sub.foo.cruises | foo@foo.cruises | | `csc` | http://foo.csc | www.foo.csc | sub.foo.csc | foo@foo.csc | | `cu` | http://foo.cu | www.foo.cu | sub.foo.cu | foo@foo.cu | | `cuisinella` | http://foo.cuisinella | www.foo.cuisinella | sub.foo.cuisinella | foo@foo.cuisinella | | `cv` | http://foo.cv | www.foo.cv | sub.foo.cv | foo@foo.cv | | `cw` | http://foo.cw | www.foo.cw | sub.foo.cw | foo@foo.cw | | `cx` | http://foo.cx | www.foo.cx | sub.foo.cx | foo@foo.cx | | `cy` | http://foo.cy | www.foo.cy | sub.foo.cy | foo@foo.cy | | `cymru` | http://foo.cymru | www.foo.cymru | sub.foo.cymru | foo@foo.cymru | | `cyou` | http://foo.cyou | www.foo.cyou | sub.foo.cyou | foo@foo.cyou | | `cz` | http://foo.cz | www.foo.cz | sub.foo.cz | foo@foo.cz | | `dabur` | http://foo.dabur | www.foo.dabur | sub.foo.dabur | foo@foo.dabur | | `dad` | http://foo.dad | www.foo.dad | sub.foo.dad | foo@foo.dad | | `dance` | http://foo.dance | www.foo.dance | sub.foo.dance | foo@foo.dance | | `data` | http://foo.data | www.foo.data | sub.foo.data | foo@foo.data | | `date` | http://foo.date | www.foo.date | sub.foo.date | foo@foo.date | | `dating` | http://foo.dating | www.foo.dating | sub.foo.dating | foo@foo.dating | | `datsun` | http://foo.datsun | www.foo.datsun | sub.foo.datsun | foo@foo.datsun | | `day` | http://foo.day | www.foo.day | sub.foo.day | foo@foo.day | | `dclk` | http://foo.dclk | www.foo.dclk | sub.foo.dclk | foo@foo.dclk | | `dds` | http://foo.dds | www.foo.dds | sub.foo.dds | foo@foo.dds | | `de` | http://foo.de | www.foo.de | sub.foo.de | foo@foo.de | | `deal` | http://foo.deal | www.foo.deal | sub.foo.deal | foo@foo.deal | | `dealer` | http://foo.dealer | www.foo.dealer | sub.foo.dealer | foo@foo.dealer | | `deals` | http://foo.deals | www.foo.deals | sub.foo.deals | foo@foo.deals | | `degree` | http://foo.degree | www.foo.degree | sub.foo.degree | foo@foo.degree | | `delivery` | http://foo.delivery | www.foo.delivery | sub.foo.delivery | foo@foo.delivery | | `dell` | http://foo.dell | www.foo.dell | sub.foo.dell | foo@foo.dell | | `deloitte` | http://foo.deloitte | www.foo.deloitte | sub.foo.deloitte | foo@foo.deloitte | | `delta` | http://foo.delta | www.foo.delta | sub.foo.delta | foo@foo.delta | | `democrat` | http://foo.democrat | www.foo.democrat | sub.foo.democrat | foo@foo.democrat | | `dental` | http://foo.dental | www.foo.dental | sub.foo.dental | foo@foo.dental | | `dentist` | http://foo.dentist | www.foo.dentist | sub.foo.dentist | foo@foo.dentist | | `desi` | http://foo.desi | www.foo.desi | sub.foo.desi | foo@foo.desi | | `design` | http://foo.design | www.foo.design | sub.foo.design | foo@foo.design | | `dev` | http://foo.dev | www.foo.dev | sub.foo.dev | foo@foo.dev | | `dhl` | http://foo.dhl | www.foo.dhl | sub.foo.dhl | foo@foo.dhl | | `diamonds` | http://foo.diamonds | www.foo.diamonds | sub.foo.diamonds | foo@foo.diamonds | | `diet` | http://foo.diet | www.foo.diet | sub.foo.diet | foo@foo.diet | | `digital` | http://foo.digital | www.foo.digital | sub.foo.digital | foo@foo.digital | | `direct` | http://foo.direct | www.foo.direct | sub.foo.direct | foo@foo.direct | | `directory` | http://foo.directory | www.foo.directory | sub.foo.directory | foo@foo.directory | | `discount` | http://foo.discount | www.foo.discount | sub.foo.discount | foo@foo.discount | | `discover` | http://foo.discover | www.foo.discover | sub.foo.discover | foo@foo.discover | | `dish` | http://foo.dish | www.foo.dish | sub.foo.dish | foo@foo.dish | | `diy` | http://foo.diy | www.foo.diy | sub.foo.diy | foo@foo.diy | | `dj` | http://foo.dj | www.foo.dj | sub.foo.dj | foo@foo.dj | | `dk` | http://foo.dk | www.foo.dk | sub.foo.dk | foo@foo.dk | | `dm` | http://foo.dm | www.foo.dm | sub.foo.dm | foo@foo.dm | | `dnp` | http://foo.dnp | www.foo.dnp | sub.foo.dnp | foo@foo.dnp | | `do` | http://foo.do | www.foo.do | sub.foo.do | foo@foo.do | | `docs` | http://foo.docs | www.foo.docs | sub.foo.docs | foo@foo.docs | | `doctor` | http://foo.doctor | www.foo.doctor | sub.foo.doctor | foo@foo.doctor | | `dog` | http://foo.dog | www.foo.dog | sub.foo.dog | foo@foo.dog | | `domains` | http://foo.domains | www.foo.domains | sub.foo.domains | foo@foo.domains | | `dot` | http://foo.dot | www.foo.dot | sub.foo.dot | foo@foo.dot | | `download` | http://foo.download | www.foo.download | sub.foo.download | foo@foo.download | | `drive` | http://foo.drive | www.foo.drive | sub.foo.drive | foo@foo.drive | | `dtv` | http://foo.dtv | www.foo.dtv | sub.foo.dtv | foo@foo.dtv | | `dubai` | http://foo.dubai | www.foo.dubai | sub.foo.dubai | foo@foo.dubai | | `duck` | http://foo.duck | www.foo.duck | sub.foo.duck | foo@foo.duck | | `dunlop` | http://foo.dunlop | www.foo.dunlop | sub.foo.dunlop | foo@foo.dunlop | | `dupont` | http://foo.dupont | www.foo.dupont | sub.foo.dupont | foo@foo.dupont | | `durban` | http://foo.durban | www.foo.durban | sub.foo.durban | foo@foo.durban | | `dvag` | http://foo.dvag | www.foo.dvag | sub.foo.dvag | foo@foo.dvag | | `dvr` | http://foo.dvr | www.foo.dvr | sub.foo.dvr | foo@foo.dvr | | `dz` | http://foo.dz | www.foo.dz | sub.foo.dz | foo@foo.dz | | `earth` | http://foo.earth | www.foo.earth | sub.foo.earth | foo@foo.earth | | `eat` | http://foo.eat | www.foo.eat | sub.foo.eat | foo@foo.eat | | `ec` | http://foo.ec | www.foo.ec | sub.foo.ec | foo@foo.ec | | `eco` | http://foo.eco | www.foo.eco | sub.foo.eco | foo@foo.eco | | `edeka` | http://foo.edeka | www.foo.edeka | sub.foo.edeka | foo@foo.edeka | | `edu` | http://foo.edu | www.foo.edu | sub.foo.edu | foo@foo.edu | | `education` | http://foo.education | www.foo.education | sub.foo.education | foo@foo.education | | `ee` | http://foo.ee | www.foo.ee | sub.foo.ee | foo@foo.ee | | `eg` | http://foo.eg | www.foo.eg | sub.foo.eg | foo@foo.eg | | `email` | http://foo.email | www.foo.email | sub.foo.email | foo@foo.email | | `emerck` | http://foo.emerck | www.foo.emerck | sub.foo.emerck | foo@foo.emerck | | `energy` | http://foo.energy | www.foo.energy | sub.foo.energy | foo@foo.energy | | `engineer` | http://foo.engineer | www.foo.engineer | sub.foo.engineer | foo@foo.engineer | | `engineering` | http://foo.engineering | www.foo.engineering | sub.foo.engineering | foo@foo.engineering | | `enterprises` | http://foo.enterprises | www.foo.enterprises | sub.foo.enterprises | foo@foo.enterprises | | `epson` | http://foo.epson | www.foo.epson | sub.foo.epson | foo@foo.epson | | `equipment` | http://foo.equipment | www.foo.equipment | sub.foo.equipment | foo@foo.equipment | | `er` | http://foo.er | www.foo.er | sub.foo.er | foo@foo.er | | `ericsson` | http://foo.ericsson | www.foo.ericsson | sub.foo.ericsson | foo@foo.ericsson | | `erni` | http://foo.erni | www.foo.erni | sub.foo.erni | foo@foo.erni | | `es` | http://foo.es | www.foo.es | sub.foo.es | foo@foo.es | | `esq` | http://foo.esq | www.foo.esq | sub.foo.esq | foo@foo.esq | | `estate` | http://foo.estate | www.foo.estate | sub.foo.estate | foo@foo.estate | | `esurance` | http://foo.esurance | www.foo.esurance | sub.foo.esurance | foo@foo.esurance | | `et` | http://foo.et | www.foo.et | sub.foo.et | foo@foo.et | | `etisalat` | http://foo.etisalat | www.foo.etisalat | sub.foo.etisalat | foo@foo.etisalat | | `eu` | http://foo.eu | www.foo.eu | sub.foo.eu | foo@foo.eu | | `eurovision` | http://foo.eurovision | www.foo.eurovision | sub.foo.eurovision | foo@foo.eurovision | | `eus` | http://foo.eus | www.foo.eus | sub.foo.eus | foo@foo.eus | | `events` | http://foo.events | www.foo.events | sub.foo.events | foo@foo.events | | `exchange` | http://foo.exchange | www.foo.exchange | sub.foo.exchange | foo@foo.exchange | | `expert` | http://foo.expert | www.foo.expert | sub.foo.expert | foo@foo.expert | | `exposed` | http://foo.exposed | www.foo.exposed | sub.foo.exposed | foo@foo.exposed | | `express` | http://foo.express | www.foo.express | sub.foo.express | foo@foo.express | | `extraspace` | http://foo.extraspace | www.foo.extraspace | sub.foo.extraspace | foo@foo.extraspace | | `fage` | http://foo.fage | www.foo.fage | sub.foo.fage | foo@foo.fage | | `fail` | http://foo.fail | www.foo.fail | sub.foo.fail | foo@foo.fail | | `fairwinds` | http://foo.fairwinds | www.foo.fairwinds | sub.foo.fairwinds | foo@foo.fairwinds | | `faith` | http://foo.faith | www.foo.faith | sub.foo.faith | foo@foo.faith | | `family` | http://foo.family | www.foo.family | sub.foo.family | foo@foo.family | | `fan` | http://foo.fan | www.foo.fan | sub.foo.fan | foo@foo.fan | | `fans` | http://foo.fans | www.foo.fans | sub.foo.fans | foo@foo.fans | | `farm` | http://foo.farm | www.foo.farm | sub.foo.farm | foo@foo.farm | | `farmers` | http://foo.farmers | www.foo.farmers | sub.foo.farmers | foo@foo.farmers | | `fashion` | http://foo.fashion | www.foo.fashion | sub.foo.fashion | foo@foo.fashion | | `fast` | http://foo.fast | www.foo.fast | sub.foo.fast | foo@foo.fast | | `fedex` | http://foo.fedex | www.foo.fedex | sub.foo.fedex | foo@foo.fedex | | `feedback` | http://foo.feedback | www.foo.feedback | sub.foo.feedback | foo@foo.feedback | | `ferrari` | http://foo.ferrari | www.foo.ferrari | sub.foo.ferrari | foo@foo.ferrari | | `ferrero` | http://foo.ferrero | www.foo.ferrero | sub.foo.ferrero | foo@foo.ferrero | | `fi` | http://foo.fi | www.foo.fi | sub.foo.fi | foo@foo.fi | | `fiat` | http://foo.fiat | www.foo.fiat | sub.foo.fiat | foo@foo.fiat | | `fidelity` | http://foo.fidelity | www.foo.fidelity | sub.foo.fidelity | foo@foo.fidelity | | `fido` | http://foo.fido | www.foo.fido | sub.foo.fido | foo@foo.fido | | `film` | http://foo.film | www.foo.film | sub.foo.film | foo@foo.film | | `final` | http://foo.final | www.foo.final | sub.foo.final | foo@foo.final | | `finance` | http://foo.finance | www.foo.finance | sub.foo.finance | foo@foo.finance | | `financial` | http://foo.financial | www.foo.financial | sub.foo.financial | foo@foo.financial | | `fire` | http://foo.fire | www.foo.fire | sub.foo.fire | foo@foo.fire | | `firestone` | http://foo.firestone | www.foo.firestone | sub.foo.firestone | foo@foo.firestone | | `firmdale` | http://foo.firmdale | www.foo.firmdale | sub.foo.firmdale | foo@foo.firmdale | | `fish` | http://foo.fish | www.foo.fish | sub.foo.fish | foo@foo.fish | | `fishing` | http://foo.fishing | www.foo.fishing | sub.foo.fishing | foo@foo.fishing | | `fit` | http://foo.fit | www.foo.fit | sub.foo.fit | foo@foo.fit | | `fitness` | http://foo.fitness | www.foo.fitness | sub.foo.fitness | foo@foo.fitness | | `fj` | http://foo.fj | www.foo.fj | sub.foo.fj | foo@foo.fj | | `fk` | http://foo.fk | www.foo.fk | sub.foo.fk | foo@foo.fk | | `flickr` | http://foo.flickr | www.foo.flickr | sub.foo.flickr | foo@foo.flickr | | `flights` | http://foo.flights | www.foo.flights | sub.foo.flights | foo@foo.flights | | `flir` | http://foo.flir | www.foo.flir | sub.foo.flir | foo@foo.flir | | `florist` | http://foo.florist | www.foo.florist | sub.foo.florist | foo@foo.florist | | `flowers` | http://foo.flowers | www.foo.flowers | sub.foo.flowers | foo@foo.flowers | | `fly` | http://foo.fly | www.foo.fly | sub.foo.fly | foo@foo.fly | | `fm` | http://foo.fm | www.foo.fm | sub.foo.fm | foo@foo.fm | | `fo` | http://foo.fo | www.foo.fo | sub.foo.fo | foo@foo.fo | | `foo` | http://foo.foo | www.foo.foo | sub.foo.foo | foo@foo.foo | | `food` | http://foo.food | www.foo.food | sub.foo.food | foo@foo.food | | `foodnetwork` | http://foo.foodnetwork | www.foo.foodnetwork | sub.foo.foodnetwork | foo@foo.foodnetwork | | `football` | http://foo.football | www.foo.football | sub.foo.football | foo@foo.football | | `ford` | http://foo.ford | www.foo.ford | sub.foo.ford | foo@foo.ford | | `forex` | http://foo.forex | www.foo.forex | sub.foo.forex | foo@foo.forex | | `forsale` | http://foo.forsale | www.foo.forsale | sub.foo.forsale | foo@foo.forsale | | `forum` | http://foo.forum | www.foo.forum | sub.foo.forum | foo@foo.forum | | `foundation` | http://foo.foundation | www.foo.foundation | sub.foo.foundation | foo@foo.foundation | | `fox` | http://foo.fox | www.foo.fox | sub.foo.fox | foo@foo.fox | | `fr` | http://foo.fr | www.foo.fr | sub.foo.fr | foo@foo.fr | | `free` | http://foo.free | www.foo.free | sub.foo.free | foo@foo.free | | `fresenius` | http://foo.fresenius | www.foo.fresenius | sub.foo.fresenius | foo@foo.fresenius | | `frl` | http://foo.frl | www.foo.frl | sub.foo.frl | foo@foo.frl | | `frogans` | http://foo.frogans | www.foo.frogans | sub.foo.frogans | foo@foo.frogans | | `frontdoor` | http://foo.frontdoor | www.foo.frontdoor | sub.foo.frontdoor | foo@foo.frontdoor | | `frontier` | http://foo.frontier | www.foo.frontier | sub.foo.frontier | foo@foo.frontier | | `ftr` | http://foo.ftr | www.foo.ftr | sub.foo.ftr | foo@foo.ftr | | `fujitsu` | http://foo.fujitsu | www.foo.fujitsu | sub.foo.fujitsu | foo@foo.fujitsu | | `fujixerox` | http://foo.fujixerox | www.foo.fujixerox | sub.foo.fujixerox | foo@foo.fujixerox | | `fun` | http://foo.fun | www.foo.fun | sub.foo.fun | foo@foo.fun | | `fund` | http://foo.fund | www.foo.fund | sub.foo.fund | foo@foo.fund | | `furniture` | http://foo.furniture | www.foo.furniture | sub.foo.furniture | foo@foo.furniture | | `futbol` | http://foo.futbol | www.foo.futbol | sub.foo.futbol | foo@foo.futbol | | `fyi` | http://foo.fyi | www.foo.fyi | sub.foo.fyi | foo@foo.fyi | | `ga` | http://foo.ga | www.foo.ga | sub.foo.ga | foo@foo.ga | | `gal` | http://foo.gal | www.foo.gal | sub.foo.gal | foo@foo.gal | | `gallery` | http://foo.gallery | www.foo.gallery | sub.foo.gallery | foo@foo.gallery | | `gallo` | http://foo.gallo | www.foo.gallo | sub.foo.gallo | foo@foo.gallo | | `gallup` | http://foo.gallup | www.foo.gallup | sub.foo.gallup | foo@foo.gallup | | `game` | http://foo.game | www.foo.game | sub.foo.game | foo@foo.game | | `games` | http://foo.games | www.foo.games | sub.foo.games | foo@foo.games | | `gap` | http://foo.gap | www.foo.gap | sub.foo.gap | foo@foo.gap | | `garden` | http://foo.garden | www.foo.garden | sub.foo.garden | foo@foo.garden | | `gay` | http://foo.gay | www.foo.gay | sub.foo.gay | foo@foo.gay | | `gb` | http://foo.gb | www.foo.gb | sub.foo.gb | foo@foo.gb | | `gbiz` | http://foo.gbiz | www.foo.gbiz | sub.foo.gbiz | foo@foo.gbiz | | `gd` | http://foo.gd | www.foo.gd | sub.foo.gd | foo@foo.gd | | `gdn` | http://foo.gdn | www.foo.gdn | sub.foo.gdn | foo@foo.gdn | | `ge` | http://foo.ge | www.foo.ge | sub.foo.ge | foo@foo.ge | | `gea` | http://foo.gea | www.foo.gea | sub.foo.gea | foo@foo.gea | | `gent` | http://foo.gent | www.foo.gent | sub.foo.gent | foo@foo.gent | | `genting` | http://foo.genting | www.foo.genting | sub.foo.genting | foo@foo.genting | | `george` | http://foo.george | www.foo.george | sub.foo.george | foo@foo.george | | `gf` | http://foo.gf | www.foo.gf | sub.foo.gf | foo@foo.gf | | `gg` | http://foo.gg | www.foo.gg | sub.foo.gg | foo@foo.gg | | `ggee` | http://foo.ggee | www.foo.ggee | sub.foo.ggee | foo@foo.ggee | | `gh` | http://foo.gh | www.foo.gh | sub.foo.gh | foo@foo.gh | | `gi` | http://foo.gi | www.foo.gi | sub.foo.gi | foo@foo.gi | | `gift` | http://foo.gift | www.foo.gift | sub.foo.gift | foo@foo.gift | | `gifts` | http://foo.gifts | www.foo.gifts | sub.foo.gifts | foo@foo.gifts | | `gives` | http://foo.gives | www.foo.gives | sub.foo.gives | foo@foo.gives | | `giving` | http://foo.giving | www.foo.giving | sub.foo.giving | foo@foo.giving | | `gl` | http://foo.gl | www.foo.gl | sub.foo.gl | foo@foo.gl | | `glade` | http://foo.glade | www.foo.glade | sub.foo.glade | foo@foo.glade | | `glass` | http://foo.glass | www.foo.glass | sub.foo.glass | foo@foo.glass | | `gle` | http://foo.gle | www.foo.gle | sub.foo.gle | foo@foo.gle | | `global` | http://foo.global | www.foo.global | sub.foo.global | foo@foo.global | | `globo` | http://foo.globo | www.foo.globo | sub.foo.globo | foo@foo.globo | | `gm` | http://foo.gm | www.foo.gm | sub.foo.gm | foo@foo.gm | | `gmail` | http://foo.gmail | www.foo.gmail | sub.foo.gmail | foo@foo.gmail | | `gmbh` | http://foo.gmbh | www.foo.gmbh | sub.foo.gmbh | foo@foo.gmbh | | `gmo` | http://foo.gmo | www.foo.gmo | sub.foo.gmo | foo@foo.gmo | | `gmx` | http://foo.gmx | www.foo.gmx | sub.foo.gmx | foo@foo.gmx | | `gn` | http://foo.gn | www.foo.gn | sub.foo.gn | foo@foo.gn | | `godaddy` | http://foo.godaddy | www.foo.godaddy | sub.foo.godaddy | foo@foo.godaddy | | `gold` | http://foo.gold | www.foo.gold | sub.foo.gold | foo@foo.gold | | `goldpoint` | http://foo.goldpoint | www.foo.goldpoint | sub.foo.goldpoint | foo@foo.goldpoint | | `golf` | http://foo.golf | www.foo.golf | sub.foo.golf | foo@foo.golf | | `goo` | http://foo.goo | www.foo.goo | sub.foo.goo | foo@foo.goo | | `goodyear` | http://foo.goodyear | www.foo.goodyear | sub.foo.goodyear | foo@foo.goodyear | | `goog` | http://foo.goog | www.foo.goog | sub.foo.goog | foo@foo.goog | | `google` | http://foo.google | www.foo.google | sub.foo.google | foo@foo.google | | `gop` | http://foo.gop | www.foo.gop | sub.foo.gop | foo@foo.gop | | `got` | http://foo.got | www.foo.got | sub.foo.got | foo@foo.got | | `gov` | http://foo.gov | www.foo.gov | sub.foo.gov | foo@foo.gov | | `gp` | http://foo.gp | www.foo.gp | sub.foo.gp | foo@foo.gp | | `gq` | http://foo.gq | www.foo.gq | sub.foo.gq | foo@foo.gq | | `gr` | http://foo.gr | www.foo.gr | sub.foo.gr | foo@foo.gr | | `grainger` | http://foo.grainger | www.foo.grainger | sub.foo.grainger | foo@foo.grainger | | `graphics` | http://foo.graphics | www.foo.graphics | sub.foo.graphics | foo@foo.graphics | | `gratis` | http://foo.gratis | www.foo.gratis | sub.foo.gratis | foo@foo.gratis | | `green` | http://foo.green | www.foo.green | sub.foo.green | foo@foo.green | | `gripe` | http://foo.gripe | www.foo.gripe | sub.foo.gripe | foo@foo.gripe | | `grocery` | http://foo.grocery | www.foo.grocery | sub.foo.grocery | foo@foo.grocery | | `group` | http://foo.group | www.foo.group | sub.foo.group | foo@foo.group | | `gs` | http://foo.gs | www.foo.gs | sub.foo.gs | foo@foo.gs | | `gt` | http://foo.gt | www.foo.gt | sub.foo.gt | foo@foo.gt | | `gu` | http://foo.gu | www.foo.gu | sub.foo.gu | foo@foo.gu | | `guardian` | http://foo.guardian | www.foo.guardian | sub.foo.guardian | foo@foo.guardian | | `gucci` | http://foo.gucci | www.foo.gucci | sub.foo.gucci | foo@foo.gucci | | `guge` | http://foo.guge | www.foo.guge | sub.foo.guge | foo@foo.guge | | `guide` | http://foo.guide | www.foo.guide | sub.foo.guide | foo@foo.guide | | `guitars` | http://foo.guitars | www.foo.guitars | sub.foo.guitars | foo@foo.guitars | | `guru` | http://foo.guru | www.foo.guru | sub.foo.guru | foo@foo.guru | | `gw` | http://foo.gw | www.foo.gw | sub.foo.gw | foo@foo.gw | | `gy` | http://foo.gy | www.foo.gy | sub.foo.gy | foo@foo.gy | | `hair` | http://foo.hair | www.foo.hair | sub.foo.hair | foo@foo.hair | | `hamburg` | http://foo.hamburg | www.foo.hamburg | sub.foo.hamburg | foo@foo.hamburg | | `hangout` | http://foo.hangout | www.foo.hangout | sub.foo.hangout | foo@foo.hangout | | `haus` | http://foo.haus | www.foo.haus | sub.foo.haus | foo@foo.haus | | `hbo` | http://foo.hbo | www.foo.hbo | sub.foo.hbo | foo@foo.hbo | | `hdfc` | http://foo.hdfc | www.foo.hdfc | sub.foo.hdfc | foo@foo.hdfc | | `hdfcbank` | http://foo.hdfcbank | www.foo.hdfcbank | sub.foo.hdfcbank | foo@foo.hdfcbank | | `health` | http://foo.health | www.foo.health | sub.foo.health | foo@foo.health | | `healthcare` | http://foo.healthcare | www.foo.healthcare | sub.foo.healthcare | foo@foo.healthcare | | `help` | http://foo.help | www.foo.help | sub.foo.help | foo@foo.help | | `helsinki` | http://foo.helsinki | www.foo.helsinki | sub.foo.helsinki | foo@foo.helsinki | | `here` | http://foo.here | www.foo.here | sub.foo.here | foo@foo.here | | `hermes` | http://foo.hermes | www.foo.hermes | sub.foo.hermes | foo@foo.hermes | | `hgtv` | http://foo.hgtv | www.foo.hgtv | sub.foo.hgtv | foo@foo.hgtv | | `hiphop` | http://foo.hiphop | www.foo.hiphop | sub.foo.hiphop | foo@foo.hiphop | | `hisamitsu` | http://foo.hisamitsu | www.foo.hisamitsu | sub.foo.hisamitsu | foo@foo.hisamitsu | | `hitachi` | http://foo.hitachi | www.foo.hitachi | sub.foo.hitachi | foo@foo.hitachi | | `hiv` | http://foo.hiv | www.foo.hiv | sub.foo.hiv | foo@foo.hiv | | `hk` | http://foo.hk | www.foo.hk | sub.foo.hk | foo@foo.hk | | `hkt` | http://foo.hkt | www.foo.hkt | sub.foo.hkt | foo@foo.hkt | | `hm` | http://foo.hm | www.foo.hm | sub.foo.hm | foo@foo.hm | | `hn` | http://foo.hn | www.foo.hn | sub.foo.hn | foo@foo.hn | | `hockey` | http://foo.hockey | www.foo.hockey | sub.foo.hockey | foo@foo.hockey | | `holdings` | http://foo.holdings | www.foo.holdings | sub.foo.holdings | foo@foo.holdings | | `holiday` | http://foo.holiday | www.foo.holiday | sub.foo.holiday | foo@foo.holiday | | `homedepot` | http://foo.homedepot | www.foo.homedepot | sub.foo.homedepot | foo@foo.homedepot | | `homegoods` | http://foo.homegoods | www.foo.homegoods | sub.foo.homegoods | foo@foo.homegoods | | `homes` | http://foo.homes | www.foo.homes | sub.foo.homes | foo@foo.homes | | `homesense` | http://foo.homesense | www.foo.homesense | sub.foo.homesense | foo@foo.homesense | | `honda` | http://foo.honda | www.foo.honda | sub.foo.honda | foo@foo.honda | | `horse` | http://foo.horse | www.foo.horse | sub.foo.horse | foo@foo.horse | | `hospital` | http://foo.hospital | www.foo.hospital | sub.foo.hospital | foo@foo.hospital | | `host` | http://foo.host | www.foo.host | sub.foo.host | foo@foo.host | | `hosting` | http://foo.hosting | www.foo.hosting | sub.foo.hosting | foo@foo.hosting | | `hot` | http://foo.hot | www.foo.hot | sub.foo.hot | foo@foo.hot | | `hoteles` | http://foo.hoteles | www.foo.hoteles | sub.foo.hoteles | foo@foo.hoteles | | `hotels` | http://foo.hotels | www.foo.hotels | sub.foo.hotels | foo@foo.hotels | | `hotmail` | http://foo.hotmail | www.foo.hotmail | sub.foo.hotmail | foo@foo.hotmail | | `house` | http://foo.house | www.foo.house | sub.foo.house | foo@foo.house | | `how` | http://foo.how | www.foo.how | sub.foo.how | foo@foo.how | | `hr` | http://foo.hr | www.foo.hr | sub.foo.hr | foo@foo.hr | | `hsbc` | http://foo.hsbc | www.foo.hsbc | sub.foo.hsbc | foo@foo.hsbc | | `ht` | http://foo.ht | www.foo.ht | sub.foo.ht | foo@foo.ht | | `hu` | http://foo.hu | www.foo.hu | sub.foo.hu | foo@foo.hu | | `hughes` | http://foo.hughes | www.foo.hughes | sub.foo.hughes | foo@foo.hughes | | `hyatt` | http://foo.hyatt | www.foo.hyatt | sub.foo.hyatt | foo@foo.hyatt | | `hyundai` | http://foo.hyundai | www.foo.hyundai | sub.foo.hyundai | foo@foo.hyundai | | `ibm` | http://foo.ibm | www.foo.ibm | sub.foo.ibm | foo@foo.ibm | | `icbc` | http://foo.icbc | www.foo.icbc | sub.foo.icbc | foo@foo.icbc | | `ice` | http://foo.ice | www.foo.ice | sub.foo.ice | foo@foo.ice | | `icu` | http://foo.icu | www.foo.icu | sub.foo.icu | foo@foo.icu | | `id` | http://foo.id | www.foo.id | sub.foo.id | foo@foo.id | | `ie` | http://foo.ie | www.foo.ie | sub.foo.ie | foo@foo.ie | | `ieee` | http://foo.ieee | www.foo.ieee | sub.foo.ieee | foo@foo.ieee | | `ifm` | http://foo.ifm | www.foo.ifm | sub.foo.ifm | foo@foo.ifm | | `ikano` | http://foo.ikano | www.foo.ikano | sub.foo.ikano | foo@foo.ikano | | `il` | http://foo.il | www.foo.il | sub.foo.il | foo@foo.il | | `im` | http://foo.im | www.foo.im | sub.foo.im | foo@foo.im | | `imamat` | http://foo.imamat | www.foo.imamat | sub.foo.imamat | foo@foo.imamat | | `imdb` | http://foo.imdb | www.foo.imdb | sub.foo.imdb | foo@foo.imdb | | `immo` | http://foo.immo | www.foo.immo | sub.foo.immo | foo@foo.immo | | `immobilien` | http://foo.immobilien | www.foo.immobilien | sub.foo.immobilien | foo@foo.immobilien | | `in` | http://foo.in | www.foo.in | sub.foo.in | foo@foo.in | | `inc` | http://foo.inc | www.foo.inc | sub.foo.inc | foo@foo.inc | | `industries` | http://foo.industries | www.foo.industries | sub.foo.industries | foo@foo.industries | | `infiniti` | http://foo.infiniti | www.foo.infiniti | sub.foo.infiniti | foo@foo.infiniti | | `info` | http://foo.info | www.foo.info | sub.foo.info | foo@foo.info | | `ing` | http://foo.ing | www.foo.ing | sub.foo.ing | foo@foo.ing | | `ink` | http://foo.ink | www.foo.ink | sub.foo.ink | foo@foo.ink | | `institute` | http://foo.institute | www.foo.institute | sub.foo.institute | foo@foo.institute | | `insurance` | http://foo.insurance | www.foo.insurance | sub.foo.insurance | foo@foo.insurance | | `insure` | http://foo.insure | www.foo.insure | sub.foo.insure | foo@foo.insure | | `int` | http://foo.int | www.foo.int | sub.foo.int | foo@foo.int | | `intel` | http://foo.intel | www.foo.intel | sub.foo.intel | foo@foo.intel | | `international` | http://foo.international | www.foo.international | sub.foo.international | foo@foo.international | | `intuit` | http://foo.intuit | www.foo.intuit | sub.foo.intuit | foo@foo.intuit | | `investments` | http://foo.investments | www.foo.investments | sub.foo.investments | foo@foo.investments | | `io` | http://foo.io | www.foo.io | sub.foo.io | foo@foo.io | | `ipiranga` | http://foo.ipiranga | www.foo.ipiranga | sub.foo.ipiranga | foo@foo.ipiranga | | `iq` | http://foo.iq | www.foo.iq | sub.foo.iq | foo@foo.iq | | `ir` | http://foo.ir | www.foo.ir | sub.foo.ir | foo@foo.ir | | `irish` | http://foo.irish | www.foo.irish | sub.foo.irish | foo@foo.irish | | `is` | http://foo.is | www.foo.is | sub.foo.is | foo@foo.is | | `ismaili` | http://foo.ismaili | www.foo.ismaili | sub.foo.ismaili | foo@foo.ismaili | | `ist` | http://foo.ist | www.foo.ist | sub.foo.ist | foo@foo.ist | | `istanbul` | http://foo.istanbul | www.foo.istanbul | sub.foo.istanbul | foo@foo.istanbul | | `it` | http://foo.it | www.foo.it | sub.foo.it | foo@foo.it | | `itau` | http://foo.itau | www.foo.itau | sub.foo.itau | foo@foo.itau | | `itv` | http://foo.itv | www.foo.itv | sub.foo.itv | foo@foo.itv | | `iveco` | http://foo.iveco | www.foo.iveco | sub.foo.iveco | foo@foo.iveco | | `jaguar` | http://foo.jaguar | www.foo.jaguar | sub.foo.jaguar | foo@foo.jaguar | | `java` | http://foo.java | www.foo.java | sub.foo.java | foo@foo.java | | `jcb` | http://foo.jcb | www.foo.jcb | sub.foo.jcb | foo@foo.jcb | | `jcp` | http://foo.jcp | www.foo.jcp | sub.foo.jcp | foo@foo.jcp | | `je` | http://foo.je | www.foo.je | sub.foo.je | foo@foo.je | | `jeep` | http://foo.jeep | www.foo.jeep | sub.foo.jeep | foo@foo.jeep | | `jetzt` | http://foo.jetzt | www.foo.jetzt | sub.foo.jetzt | foo@foo.jetzt | | `jewelry` | http://foo.jewelry | www.foo.jewelry | sub.foo.jewelry | foo@foo.jewelry | | `jio` | http://foo.jio | www.foo.jio | sub.foo.jio | foo@foo.jio | | `jll` | http://foo.jll | www.foo.jll | sub.foo.jll | foo@foo.jll | | `jm` | http://foo.jm | www.foo.jm | sub.foo.jm | foo@foo.jm | | `jmp` | http://foo.jmp | www.foo.jmp | sub.foo.jmp | foo@foo.jmp | | `jnj` | http://foo.jnj | www.foo.jnj | sub.foo.jnj | foo@foo.jnj | | `jo` | http://foo.jo | www.foo.jo | sub.foo.jo | foo@foo.jo | | `jobs` | http://foo.jobs | www.foo.jobs | sub.foo.jobs | foo@foo.jobs | | `joburg` | http://foo.joburg | www.foo.joburg | sub.foo.joburg | foo@foo.joburg | | `jot` | http://foo.jot | www.foo.jot | sub.foo.jot | foo@foo.jot | | `joy` | http://foo.joy | www.foo.joy | sub.foo.joy | foo@foo.joy | | `jp` | http://foo.jp | www.foo.jp | sub.foo.jp | foo@foo.jp | | `jpmorgan` | http://foo.jpmorgan | www.foo.jpmorgan | sub.foo.jpmorgan | foo@foo.jpmorgan | | `jprs` | http://foo.jprs | www.foo.jprs | sub.foo.jprs | foo@foo.jprs | | `juegos` | http://foo.juegos | www.foo.juegos | sub.foo.juegos | foo@foo.juegos | | `juniper` | http://foo.juniper | www.foo.juniper | sub.foo.juniper | foo@foo.juniper | | `kaufen` | http://foo.kaufen | www.foo.kaufen | sub.foo.kaufen | foo@foo.kaufen | | `kddi` | http://foo.kddi | www.foo.kddi | sub.foo.kddi | foo@foo.kddi | | `ke` | http://foo.ke | www.foo.ke | sub.foo.ke | foo@foo.ke | | `kerryhotels` | http://foo.kerryhotels | www.foo.kerryhotels | sub.foo.kerryhotels | foo@foo.kerryhotels | | `kerrylogistics` | http://foo.kerrylogistics | www.foo.kerrylogistics | sub.foo.kerrylogistics | foo@foo.kerrylogistics | | `kerryproperties` | http://foo.kerryproperties | www.foo.kerryproperties | sub.foo.kerryproperties | foo@foo.kerryproperties | | `kfh` | http://foo.kfh | www.foo.kfh | sub.foo.kfh | foo@foo.kfh | | `kg` | http://foo.kg | www.foo.kg | sub.foo.kg | foo@foo.kg | | `kh` | http://foo.kh | www.foo.kh | sub.foo.kh | foo@foo.kh | | `ki` | http://foo.ki | www.foo.ki | sub.foo.ki | foo@foo.ki | | `kia` | http://foo.kia | www.foo.kia | sub.foo.kia | foo@foo.kia | | `kim` | http://foo.kim | www.foo.kim | sub.foo.kim | foo@foo.kim | | `kinder` | http://foo.kinder | www.foo.kinder | sub.foo.kinder | foo@foo.kinder | | `kindle` | http://foo.kindle | www.foo.kindle | sub.foo.kindle | foo@foo.kindle | | `kitchen` | http://foo.kitchen | www.foo.kitchen | sub.foo.kitchen | foo@foo.kitchen | | `kiwi` | http://foo.kiwi | www.foo.kiwi | sub.foo.kiwi | foo@foo.kiwi | | `km` | http://foo.km | www.foo.km | sub.foo.km | foo@foo.km | | `kn` | http://foo.kn | www.foo.kn | sub.foo.kn | foo@foo.kn | | `koeln` | http://foo.koeln | www.foo.koeln | sub.foo.koeln | foo@foo.koeln | | `komatsu` | http://foo.komatsu | www.foo.komatsu | sub.foo.komatsu | foo@foo.komatsu | | `kosher` | http://foo.kosher | www.foo.kosher | sub.foo.kosher | foo@foo.kosher | | `kp` | http://foo.kp | www.foo.kp | sub.foo.kp | foo@foo.kp | | `kpmg` | http://foo.kpmg | www.foo.kpmg | sub.foo.kpmg | foo@foo.kpmg | | `kpn` | http://foo.kpn | www.foo.kpn | sub.foo.kpn | foo@foo.kpn | | `kr` | http://foo.kr | www.foo.kr | sub.foo.kr | foo@foo.kr | | `krd` | http://foo.krd | www.foo.krd | sub.foo.krd | foo@foo.krd | | `kred` | http://foo.kred | www.foo.kred | sub.foo.kred | foo@foo.kred | | `kuokgroup` | http://foo.kuokgroup | www.foo.kuokgroup | sub.foo.kuokgroup | foo@foo.kuokgroup | | `kw` | http://foo.kw | www.foo.kw | sub.foo.kw | foo@foo.kw | | `ky` | http://foo.ky | www.foo.ky | sub.foo.ky | foo@foo.ky | | `kyoto` | http://foo.kyoto | www.foo.kyoto | sub.foo.kyoto | foo@foo.kyoto | | `kz` | http://foo.kz | www.foo.kz | sub.foo.kz | foo@foo.kz | | `la` | http://foo.la | www.foo.la | sub.foo.la | foo@foo.la | | `lacaixa` | http://foo.lacaixa | www.foo.lacaixa | sub.foo.lacaixa | foo@foo.lacaixa | | `lamborghini` | http://foo.lamborghini | www.foo.lamborghini | sub.foo.lamborghini | foo@foo.lamborghini | | `lamer` | http://foo.lamer | www.foo.lamer | sub.foo.lamer | foo@foo.lamer | | `lancaster` | http://foo.lancaster | www.foo.lancaster | sub.foo.lancaster | foo@foo.lancaster | | `lancia` | http://foo.lancia | www.foo.lancia | sub.foo.lancia | foo@foo.lancia | | `land` | http://foo.land | www.foo.land | sub.foo.land | foo@foo.land | | `landrover` | http://foo.landrover | www.foo.landrover | sub.foo.landrover | foo@foo.landrover | | `lanxess` | http://foo.lanxess | www.foo.lanxess | sub.foo.lanxess | foo@foo.lanxess | | `lasalle` | http://foo.lasalle | www.foo.lasalle | sub.foo.lasalle | foo@foo.lasalle | | `lat` | http://foo.lat | www.foo.lat | sub.foo.lat | foo@foo.lat | | `latino` | http://foo.latino | www.foo.latino | sub.foo.latino | foo@foo.latino | | `latrobe` | http://foo.latrobe | www.foo.latrobe | sub.foo.latrobe | foo@foo.latrobe | | `law` | http://foo.law | www.foo.law | sub.foo.law | foo@foo.law | | `lawyer` | http://foo.lawyer | www.foo.lawyer | sub.foo.lawyer | foo@foo.lawyer | | `lb` | http://foo.lb | www.foo.lb | sub.foo.lb | foo@foo.lb | | `lc` | http://foo.lc | www.foo.lc | sub.foo.lc | foo@foo.lc | | `lds` | http://foo.lds | www.foo.lds | sub.foo.lds | foo@foo.lds | | `lease` | http://foo.lease | www.foo.lease | sub.foo.lease | foo@foo.lease | | `leclerc` | http://foo.leclerc | www.foo.leclerc | sub.foo.leclerc | foo@foo.leclerc | | `lefrak` | http://foo.lefrak | www.foo.lefrak | sub.foo.lefrak | foo@foo.lefrak | | `legal` | http://foo.legal | www.foo.legal | sub.foo.legal | foo@foo.legal | | `lego` | http://foo.lego | www.foo.lego | sub.foo.lego | foo@foo.lego | | `lexus` | http://foo.lexus | www.foo.lexus | sub.foo.lexus | foo@foo.lexus | | `lgbt` | http://foo.lgbt | www.foo.lgbt | sub.foo.lgbt | foo@foo.lgbt | | `li` | http://foo.li | www.foo.li | sub.foo.li | foo@foo.li | | `liaison` | http://foo.liaison | www.foo.liaison | sub.foo.liaison | foo@foo.liaison | | `lidl` | http://foo.lidl | www.foo.lidl | sub.foo.lidl | foo@foo.lidl | | `life` | http://foo.life | www.foo.life | sub.foo.life | foo@foo.life | | `lifeinsurance` | http://foo.lifeinsurance | www.foo.lifeinsurance | sub.foo.lifeinsurance | foo@foo.lifeinsurance | | `lifestyle` | http://foo.lifestyle | www.foo.lifestyle | sub.foo.lifestyle | foo@foo.lifestyle | | `lighting` | http://foo.lighting | www.foo.lighting | sub.foo.lighting | foo@foo.lighting | | `like` | http://foo.like | www.foo.like | sub.foo.like | foo@foo.like | | `lilly` | http://foo.lilly | www.foo.lilly | sub.foo.lilly | foo@foo.lilly | | `limited` | http://foo.limited | www.foo.limited | sub.foo.limited | foo@foo.limited | | `limo` | http://foo.limo | www.foo.limo | sub.foo.limo | foo@foo.limo | | `lincoln` | http://foo.lincoln | www.foo.lincoln | sub.foo.lincoln | foo@foo.lincoln | | `linde` | http://foo.linde | www.foo.linde | sub.foo.linde | foo@foo.linde | | `link` | http://foo.link | www.foo.link | sub.foo.link | foo@foo.link | | `lipsy` | http://foo.lipsy | www.foo.lipsy | sub.foo.lipsy | foo@foo.lipsy | | `live` | http://foo.live | www.foo.live | sub.foo.live | foo@foo.live | | `living` | http://foo.living | www.foo.living | sub.foo.living | foo@foo.living | | `lixil` | http://foo.lixil | www.foo.lixil | sub.foo.lixil | foo@foo.lixil | | `lk` | http://foo.lk | www.foo.lk | sub.foo.lk | foo@foo.lk | | `llc` | http://foo.llc | www.foo.llc | sub.foo.llc | foo@foo.llc | | `loan` | http://foo.loan | www.foo.loan | sub.foo.loan | foo@foo.loan | | `loans` | http://foo.loans | www.foo.loans | sub.foo.loans | foo@foo.loans | | `locker` | http://foo.locker | www.foo.locker | sub.foo.locker | foo@foo.locker | | `locus` | http://foo.locus | www.foo.locus | sub.foo.locus | foo@foo.locus | | `loft` | http://foo.loft | www.foo.loft | sub.foo.loft | foo@foo.loft | | `lol` | http://foo.lol | www.foo.lol | sub.foo.lol | foo@foo.lol | | `london` | http://foo.london | www.foo.london | sub.foo.london | foo@foo.london | | `lotte` | http://foo.lotte | www.foo.lotte | sub.foo.lotte | foo@foo.lotte | | `lotto` | http://foo.lotto | www.foo.lotto | sub.foo.lotto | foo@foo.lotto | | `love` | http://foo.love | www.foo.love | sub.foo.love | foo@foo.love | | `lpl` | http://foo.lpl | www.foo.lpl | sub.foo.lpl | foo@foo.lpl | | `lplfinancial` | http://foo.lplfinancial | www.foo.lplfinancial | sub.foo.lplfinancial | foo@foo.lplfinancial | | `lr` | http://foo.lr | www.foo.lr | sub.foo.lr | foo@foo.lr | | `ls` | http://foo.ls | www.foo.ls | sub.foo.ls | foo@foo.ls | | `lt` | http://foo.lt | www.foo.lt | sub.foo.lt | foo@foo.lt | | `ltd` | http://foo.ltd | www.foo.ltd | sub.foo.ltd | foo@foo.ltd | | `ltda` | http://foo.ltda | www.foo.ltda | sub.foo.ltda | foo@foo.ltda | | `lu` | http://foo.lu | www.foo.lu | sub.foo.lu | foo@foo.lu | | `lundbeck` | http://foo.lundbeck | www.foo.lundbeck | sub.foo.lundbeck | foo@foo.lundbeck | | `lupin` | http://foo.lupin | www.foo.lupin | sub.foo.lupin | foo@foo.lupin | | `luxe` | http://foo.luxe | www.foo.luxe | sub.foo.luxe | foo@foo.luxe | | `luxury` | http://foo.luxury | www.foo.luxury | sub.foo.luxury | foo@foo.luxury | | `lv` | http://foo.lv | www.foo.lv | sub.foo.lv | foo@foo.lv | | `ly` | http://foo.ly | www.foo.ly | sub.foo.ly | foo@foo.ly | | `ma` | http://foo.ma | www.foo.ma | sub.foo.ma | foo@foo.ma | | `macys` | http://foo.macys | www.foo.macys | sub.foo.macys | foo@foo.macys | | `madrid` | http://foo.madrid | www.foo.madrid | sub.foo.madrid | foo@foo.madrid | | `maif` | http://foo.maif | www.foo.maif | sub.foo.maif | foo@foo.maif | | `maison` | http://foo.maison | www.foo.maison | sub.foo.maison | foo@foo.maison | | `makeup` | http://foo.makeup | www.foo.makeup | sub.foo.makeup | foo@foo.makeup | | `man` | http://foo.man | www.foo.man | sub.foo.man | foo@foo.man | | `management` | http://foo.management | www.foo.management | sub.foo.management | foo@foo.management | | `mango` | http://foo.mango | www.foo.mango | sub.foo.mango | foo@foo.mango | | `map` | http://foo.map | www.foo.map | sub.foo.map | foo@foo.map | | `market` | http://foo.market | www.foo.market | sub.foo.market | foo@foo.market | | `marketing` | http://foo.marketing | www.foo.marketing | sub.foo.marketing | foo@foo.marketing | | `markets` | http://foo.markets | www.foo.markets | sub.foo.markets | foo@foo.markets | | `marriott` | http://foo.marriott | www.foo.marriott | sub.foo.marriott | foo@foo.marriott | | `marshalls` | http://foo.marshalls | www.foo.marshalls | sub.foo.marshalls | foo@foo.marshalls | | `maserati` | http://foo.maserati | www.foo.maserati | sub.foo.maserati | foo@foo.maserati | | `mattel` | http://foo.mattel | www.foo.mattel | sub.foo.mattel | foo@foo.mattel | | `mba` | http://foo.mba | www.foo.mba | sub.foo.mba | foo@foo.mba | | `mc` | http://foo.mc | www.foo.mc | sub.foo.mc | foo@foo.mc | | `mckinsey` | http://foo.mckinsey | www.foo.mckinsey | sub.foo.mckinsey | foo@foo.mckinsey | | `md` | http://foo.md | www.foo.md | sub.foo.md | foo@foo.md | | `me` | http://foo.me | www.foo.me | sub.foo.me | foo@foo.me | | `med` | http://foo.med | www.foo.med | sub.foo.med | foo@foo.med | | `media` | http://foo.media | www.foo.media | sub.foo.media | foo@foo.media | | `meet` | http://foo.meet | www.foo.meet | sub.foo.meet | foo@foo.meet | | `melbourne` | http://foo.melbourne | www.foo.melbourne | sub.foo.melbourne | foo@foo.melbourne | | `meme` | http://foo.meme | www.foo.meme | sub.foo.meme | foo@foo.meme | | `memorial` | http://foo.memorial | www.foo.memorial | sub.foo.memorial | foo@foo.memorial | | `men` | http://foo.men | www.foo.men | sub.foo.men | foo@foo.men | | `menu` | http://foo.menu | www.foo.menu | sub.foo.menu | foo@foo.menu | | `merckmsd` | http://foo.merckmsd | www.foo.merckmsd | sub.foo.merckmsd | foo@foo.merckmsd | | `metlife` | http://foo.metlife | www.foo.metlife | sub.foo.metlife | foo@foo.metlife | | `mg` | http://foo.mg | www.foo.mg | sub.foo.mg | foo@foo.mg | | `mh` | http://foo.mh | www.foo.mh | sub.foo.mh | foo@foo.mh | | `miami` | http://foo.miami | www.foo.miami | sub.foo.miami | foo@foo.miami | | `microsoft` | http://foo.microsoft | www.foo.microsoft | sub.foo.microsoft | foo@foo.microsoft | | `mil` | http://foo.mil | www.foo.mil | sub.foo.mil | foo@foo.mil | | `mini` | http://foo.mini | www.foo.mini | sub.foo.mini | foo@foo.mini | | `mint` | http://foo.mint | www.foo.mint | sub.foo.mint | foo@foo.mint | | `mit` | http://foo.mit | www.foo.mit | sub.foo.mit | foo@foo.mit | | `mitsubishi` | http://foo.mitsubishi | www.foo.mitsubishi | sub.foo.mitsubishi | foo@foo.mitsubishi | | `mk` | http://foo.mk | www.foo.mk | sub.foo.mk | foo@foo.mk | | `ml` | http://foo.ml | www.foo.ml | sub.foo.ml | foo@foo.ml | | `mlb` | http://foo.mlb | www.foo.mlb | sub.foo.mlb | foo@foo.mlb | | `mls` | http://foo.mls | www.foo.mls | sub.foo.mls | foo@foo.mls | | `mm` | http://foo.mm | www.foo.mm | sub.foo.mm | foo@foo.mm | | `mma` | http://foo.mma | www.foo.mma | sub.foo.mma | foo@foo.mma | | `mn` | http://foo.mn | www.foo.mn | sub.foo.mn | foo@foo.mn | | `mo` | http://foo.mo | www.foo.mo | sub.foo.mo | foo@foo.mo | | `mobi` | http://foo.mobi | www.foo.mobi | sub.foo.mobi | foo@foo.mobi | | `mobile` | http://foo.mobile | www.foo.mobile | sub.foo.mobile | foo@foo.mobile | | `moda` | http://foo.moda | www.foo.moda | sub.foo.moda | foo@foo.moda | | `moe` | http://foo.moe | www.foo.moe | sub.foo.moe | foo@foo.moe | | `moi` | http://foo.moi | www.foo.moi | sub.foo.moi | foo@foo.moi | | `mom` | http://foo.mom | www.foo.mom | sub.foo.mom | foo@foo.mom | | `monash` | http://foo.monash | www.foo.monash | sub.foo.monash | foo@foo.monash | | `money` | http://foo.money | www.foo.money | sub.foo.money | foo@foo.money | | `monster` | http://foo.monster | www.foo.monster | sub.foo.monster | foo@foo.monster | | `mormon` | http://foo.mormon | www.foo.mormon | sub.foo.mormon | foo@foo.mormon | | `mortgage` | http://foo.mortgage | www.foo.mortgage | sub.foo.mortgage | foo@foo.mortgage | | `moscow` | http://foo.moscow | www.foo.moscow | sub.foo.moscow | foo@foo.moscow | | `moto` | http://foo.moto | www.foo.moto | sub.foo.moto | foo@foo.moto | | `motorcycles` | http://foo.motorcycles | www.foo.motorcycles | sub.foo.motorcycles | foo@foo.motorcycles | | `mov` | http://foo.mov | www.foo.mov | sub.foo.mov | foo@foo.mov | | `movie` | http://foo.movie | www.foo.movie | sub.foo.movie | foo@foo.movie | | `movistar` | http://foo.movistar | www.foo.movistar | sub.foo.movistar | foo@foo.movistar | | `mp` | http://foo.mp | www.foo.mp | sub.foo.mp | foo@foo.mp | | `mq` | http://foo.mq | www.foo.mq | sub.foo.mq | foo@foo.mq | | `mr` | http://foo.mr | www.foo.mr | sub.foo.mr | foo@foo.mr | | `ms` | http://foo.ms | www.foo.ms | sub.foo.ms | foo@foo.ms | | `msd` | http://foo.msd | www.foo.msd | sub.foo.msd | foo@foo.msd | | `mt` | http://foo.mt | www.foo.mt | sub.foo.mt | foo@foo.mt | | `mtn` | http://foo.mtn | www.foo.mtn | sub.foo.mtn | foo@foo.mtn | | `mtr` | http://foo.mtr | www.foo.mtr | sub.foo.mtr | foo@foo.mtr | | `mu` | http://foo.mu | www.foo.mu | sub.foo.mu | foo@foo.mu | | `museum` | http://foo.museum | www.foo.museum | sub.foo.museum | foo@foo.museum | | `mutual` | http://foo.mutual | www.foo.mutual | sub.foo.mutual | foo@foo.mutual | | `mv` | http://foo.mv | www.foo.mv | sub.foo.mv | foo@foo.mv | | `mw` | http://foo.mw | www.foo.mw | sub.foo.mw | foo@foo.mw | | `mx` | http://foo.mx | www.foo.mx | sub.foo.mx | foo@foo.mx | | `my` | http://foo.my | www.foo.my | sub.foo.my | foo@foo.my | | `mz` | http://foo.mz | www.foo.mz | sub.foo.mz | foo@foo.mz | | `na` | http://foo.na | www.foo.na | sub.foo.na | foo@foo.na | | `nab` | http://foo.nab | www.foo.nab | sub.foo.nab | foo@foo.nab | | `nadex` | http://foo.nadex | www.foo.nadex | sub.foo.nadex | foo@foo.nadex | | `nagoya` | http://foo.nagoya | www.foo.nagoya | sub.foo.nagoya | foo@foo.nagoya | | `name` | http://foo.name | www.foo.name | sub.foo.name | foo@foo.name | | `nationwide` | http://foo.nationwide | www.foo.nationwide | sub.foo.nationwide | foo@foo.nationwide | | `natura` | http://foo.natura | www.foo.natura | sub.foo.natura | foo@foo.natura | | `navy` | http://foo.navy | www.foo.navy | sub.foo.navy | foo@foo.navy | | `nba` | http://foo.nba | www.foo.nba | sub.foo.nba | foo@foo.nba | | `nc` | http://foo.nc | www.foo.nc | sub.foo.nc | foo@foo.nc | | `ne` | http://foo.ne | www.foo.ne | sub.foo.ne | foo@foo.ne | | `nec` | http://foo.nec | www.foo.nec | sub.foo.nec | foo@foo.nec | | `net` | http://foo.net | www.foo.net | sub.foo.net | foo@foo.net | | `netbank` | http://foo.netbank | www.foo.netbank | sub.foo.netbank | foo@foo.netbank | | `netflix` | http://foo.netflix | www.foo.netflix | sub.foo.netflix | foo@foo.netflix | | `network` | http://foo.network | www.foo.network | sub.foo.network | foo@foo.network | | `neustar` | http://foo.neustar | www.foo.neustar | sub.foo.neustar | foo@foo.neustar | | `new` | http://foo.new | www.foo.new | sub.foo.new | foo@foo.new | | `newholland` | http://foo.newholland | www.foo.newholland | sub.foo.newholland | foo@foo.newholland | | `news` | http://foo.news | www.foo.news | sub.foo.news | foo@foo.news | | `next` | http://foo.next | www.foo.next | sub.foo.next | foo@foo.next | | `nextdirect` | http://foo.nextdirect | www.foo.nextdirect | sub.foo.nextdirect | foo@foo.nextdirect | | `nexus` | http://foo.nexus | www.foo.nexus | sub.foo.nexus | foo@foo.nexus | | `nf` | http://foo.nf | www.foo.nf | sub.foo.nf | foo@foo.nf | | `nfl` | http://foo.nfl | www.foo.nfl | sub.foo.nfl | foo@foo.nfl | | `ng` | http://foo.ng | www.foo.ng | sub.foo.ng | foo@foo.ng | | `ngo` | http://foo.ngo | www.foo.ngo | sub.foo.ngo | foo@foo.ngo | | `nhk` | http://foo.nhk | www.foo.nhk | sub.foo.nhk | foo@foo.nhk | | `ni` | http://foo.ni | www.foo.ni | sub.foo.ni | foo@foo.ni | | `nico` | http://foo.nico | www.foo.nico | sub.foo.nico | foo@foo.nico | | `nike` | http://foo.nike | www.foo.nike | sub.foo.nike | foo@foo.nike | | `nikon` | http://foo.nikon | www.foo.nikon | sub.foo.nikon | foo@foo.nikon | | `ninja` | http://foo.ninja | www.foo.ninja | sub.foo.ninja | foo@foo.ninja | | `nissan` | http://foo.nissan | www.foo.nissan | sub.foo.nissan | foo@foo.nissan | | `nissay` | http://foo.nissay | www.foo.nissay | sub.foo.nissay | foo@foo.nissay | | `nl` | http://foo.nl | www.foo.nl | sub.foo.nl | foo@foo.nl | | `no` | http://foo.no | www.foo.no | sub.foo.no | foo@foo.no | | `nokia` | http://foo.nokia | www.foo.nokia | sub.foo.nokia | foo@foo.nokia | | `northwesternmutual` | http://foo.northwesternmutual | www.foo.northwesternmutual | sub.foo.northwesternmutual | foo@foo.northwesternmutual | | `norton` | http://foo.norton | www.foo.norton | sub.foo.norton | foo@foo.norton | | `now` | http://foo.now | www.foo.now | sub.foo.now | foo@foo.now | | `nowruz` | http://foo.nowruz | www.foo.nowruz | sub.foo.nowruz | foo@foo.nowruz | | `nowtv` | http://foo.nowtv | www.foo.nowtv | sub.foo.nowtv | foo@foo.nowtv | | `np` | http://foo.np | www.foo.np | sub.foo.np | foo@foo.np | | `nr` | http://foo.nr | www.foo.nr | sub.foo.nr | foo@foo.nr | | `nra` | http://foo.nra | www.foo.nra | sub.foo.nra | foo@foo.nra | | `nrw` | http://foo.nrw | www.foo.nrw | sub.foo.nrw | foo@foo.nrw | | `ntt` | http://foo.ntt | www.foo.ntt | sub.foo.ntt | foo@foo.ntt | | `nu` | http://foo.nu | www.foo.nu | sub.foo.nu | foo@foo.nu | | `nyc` | http://foo.nyc | www.foo.nyc | sub.foo.nyc | foo@foo.nyc | | `nz` | http://foo.nz | www.foo.nz | sub.foo.nz | foo@foo.nz | | `obi` | http://foo.obi | www.foo.obi | sub.foo.obi | foo@foo.obi | | `observer` | http://foo.observer | www.foo.observer | sub.foo.observer | foo@foo.observer | | `off` | http://foo.off | www.foo.off | sub.foo.off | foo@foo.off | | `office` | http://foo.office | www.foo.office | sub.foo.office | foo@foo.office | | `okinawa` | http://foo.okinawa | www.foo.okinawa | sub.foo.okinawa | foo@foo.okinawa | | `olayan` | http://foo.olayan | www.foo.olayan | sub.foo.olayan | foo@foo.olayan | | `olayangroup` | http://foo.olayangroup | www.foo.olayangroup | sub.foo.olayangroup | foo@foo.olayangroup | | `oldnavy` | http://foo.oldnavy | www.foo.oldnavy | sub.foo.oldnavy | foo@foo.oldnavy | | `ollo` | http://foo.ollo | www.foo.ollo | sub.foo.ollo | foo@foo.ollo | | `om` | http://foo.om | www.foo.om | sub.foo.om | foo@foo.om | | `omega` | http://foo.omega | www.foo.omega | sub.foo.omega | foo@foo.omega | | `one` | http://foo.one | www.foo.one | sub.foo.one | foo@foo.one | | `ong` | http://foo.ong | www.foo.ong | sub.foo.ong | foo@foo.ong | | `onl` | http://foo.onl | www.foo.onl | sub.foo.onl | foo@foo.onl | | `online` | http://foo.online | www.foo.online | sub.foo.online | foo@foo.online | | `onyourside` | http://foo.onyourside | www.foo.onyourside | sub.foo.onyourside | foo@foo.onyourside | | `ooo` | http://foo.ooo | www.foo.ooo | sub.foo.ooo | foo@foo.ooo | | `open` | http://foo.open | www.foo.open | sub.foo.open | foo@foo.open | | `oracle` | http://foo.oracle | www.foo.oracle | sub.foo.oracle | foo@foo.oracle | | `orange` | http://foo.orange | www.foo.orange | sub.foo.orange | foo@foo.orange | | `org` | http://foo.org | www.foo.org | sub.foo.org | foo@foo.org | | `organic` | http://foo.organic | www.foo.organic | sub.foo.organic | foo@foo.organic | | `origins` | http://foo.origins | www.foo.origins | sub.foo.origins | foo@foo.origins | | `osaka` | http://foo.osaka | www.foo.osaka | sub.foo.osaka | foo@foo.osaka | | `otsuka` | http://foo.otsuka | www.foo.otsuka | sub.foo.otsuka | foo@foo.otsuka | | `ott` | http://foo.ott | www.foo.ott | sub.foo.ott | foo@foo.ott | | `ovh` | http://foo.ovh | www.foo.ovh | sub.foo.ovh | foo@foo.ovh | | `pa` | http://foo.pa | www.foo.pa | sub.foo.pa | foo@foo.pa | | `page` | http://foo.page | www.foo.page | sub.foo.page | foo@foo.page | | `panasonic` | http://foo.panasonic | www.foo.panasonic | sub.foo.panasonic | foo@foo.panasonic | | `paris` | http://foo.paris | www.foo.paris | sub.foo.paris | foo@foo.paris | | `pars` | http://foo.pars | www.foo.pars | sub.foo.pars | foo@foo.pars | | `partners` | http://foo.partners | www.foo.partners | sub.foo.partners | foo@foo.partners | | `parts` | http://foo.parts | www.foo.parts | sub.foo.parts | foo@foo.parts | | `party` | http://foo.party | www.foo.party | sub.foo.party | foo@foo.party | | `passagens` | http://foo.passagens | www.foo.passagens | sub.foo.passagens | foo@foo.passagens | | `pay` | http://foo.pay | www.foo.pay | sub.foo.pay | foo@foo.pay | | `pccw` | http://foo.pccw | www.foo.pccw | sub.foo.pccw | foo@foo.pccw | | `pe` | http://foo.pe | www.foo.pe | sub.foo.pe | foo@foo.pe | | `pet` | http://foo.pet | www.foo.pet | sub.foo.pet | foo@foo.pet | | `pf` | http://foo.pf | www.foo.pf | sub.foo.pf | foo@foo.pf | | `pfizer` | http://foo.pfizer | www.foo.pfizer | sub.foo.pfizer | foo@foo.pfizer | | `pg` | http://foo.pg | www.foo.pg | sub.foo.pg | foo@foo.pg | | `ph` | http://foo.ph | www.foo.ph | sub.foo.ph | foo@foo.ph | | `pharmacy` | http://foo.pharmacy | www.foo.pharmacy | sub.foo.pharmacy | foo@foo.pharmacy | | `phd` | http://foo.phd | www.foo.phd | sub.foo.phd | foo@foo.phd | | `philips` | http://foo.philips | www.foo.philips | sub.foo.philips | foo@foo.philips | | `phone` | http://foo.phone | www.foo.phone | sub.foo.phone | foo@foo.phone | | `photo` | http://foo.photo | www.foo.photo | sub.foo.photo | foo@foo.photo | | `photography` | http://foo.photography | www.foo.photography | sub.foo.photography | foo@foo.photography | | `photos` | http://foo.photos | www.foo.photos | sub.foo.photos | foo@foo.photos | | `physio` | http://foo.physio | www.foo.physio | sub.foo.physio | foo@foo.physio | | `pics` | http://foo.pics | www.foo.pics | sub.foo.pics | foo@foo.pics | | `pictet` | http://foo.pictet | www.foo.pictet | sub.foo.pictet | foo@foo.pictet | | `pictures` | http://foo.pictures | www.foo.pictures | sub.foo.pictures | foo@foo.pictures | | `pid` | http://foo.pid | www.foo.pid | sub.foo.pid | foo@foo.pid | | `pin` | http://foo.pin | www.foo.pin | sub.foo.pin | foo@foo.pin | | `ping` | http://foo.ping | www.foo.ping | sub.foo.ping | foo@foo.ping | | `pink` | http://foo.pink | www.foo.pink | sub.foo.pink | foo@foo.pink | | `pioneer` | http://foo.pioneer | www.foo.pioneer | sub.foo.pioneer | foo@foo.pioneer | | `pizza` | http://foo.pizza | www.foo.pizza | sub.foo.pizza | foo@foo.pizza | | `pk` | http://foo.pk | www.foo.pk | sub.foo.pk | foo@foo.pk | | `pl` | http://foo.pl | www.foo.pl | sub.foo.pl | foo@foo.pl | | `place` | http://foo.place | www.foo.place | sub.foo.place | foo@foo.place | | `play` | http://foo.play | www.foo.play | sub.foo.play | foo@foo.play | | `playstation` | http://foo.playstation | www.foo.playstation | sub.foo.playstation | foo@foo.playstation | | `plumbing` | http://foo.plumbing | www.foo.plumbing | sub.foo.plumbing | foo@foo.plumbing | | `plus` | http://foo.plus | www.foo.plus | sub.foo.plus | foo@foo.plus | | `pm` | http://foo.pm | www.foo.pm | sub.foo.pm | foo@foo.pm | | `pn` | http://foo.pn | www.foo.pn | sub.foo.pn | foo@foo.pn | | `pnc` | http://foo.pnc | www.foo.pnc | sub.foo.pnc | foo@foo.pnc | | `pohl` | http://foo.pohl | www.foo.pohl | sub.foo.pohl | foo@foo.pohl | | `poker` | http://foo.poker | www.foo.poker | sub.foo.poker | foo@foo.poker | | `politie` | http://foo.politie | www.foo.politie | sub.foo.politie | foo@foo.politie | | `porn` | http://foo.porn | www.foo.porn | sub.foo.porn | foo@foo.porn | | `post` | http://foo.post | www.foo.post | sub.foo.post | foo@foo.post | | `pr` | http://foo.pr | www.foo.pr | sub.foo.pr | foo@foo.pr | | `pramerica` | http://foo.pramerica | www.foo.pramerica | sub.foo.pramerica | foo@foo.pramerica | | `praxi` | http://foo.praxi | www.foo.praxi | sub.foo.praxi | foo@foo.praxi | | `press` | http://foo.press | www.foo.press | sub.foo.press | foo@foo.press | | `prime` | http://foo.prime | www.foo.prime | sub.foo.prime | foo@foo.prime | | `pro` | http://foo.pro | www.foo.pro | sub.foo.pro | foo@foo.pro | | `prod` | http://foo.prod | www.foo.prod | sub.foo.prod | foo@foo.prod | | `productions` | http://foo.productions | www.foo.productions | sub.foo.productions | foo@foo.productions | | `prof` | http://foo.prof | www.foo.prof | sub.foo.prof | foo@foo.prof | | `progressive` | http://foo.progressive | www.foo.progressive | sub.foo.progressive | foo@foo.progressive | | `promo` | http://foo.promo | www.foo.promo | sub.foo.promo | foo@foo.promo | | `properties` | http://foo.properties | www.foo.properties | sub.foo.properties | foo@foo.properties | | `property` | http://foo.property | www.foo.property | sub.foo.property | foo@foo.property | | `protection` | http://foo.protection | www.foo.protection | sub.foo.protection | foo@foo.protection | | `pru` | http://foo.pru | www.foo.pru | sub.foo.pru | foo@foo.pru | | `prudential` | http://foo.prudential | www.foo.prudential | sub.foo.prudential | foo@foo.prudential | | `ps` | http://foo.ps | www.foo.ps | sub.foo.ps | foo@foo.ps | | `pt` | http://foo.pt | www.foo.pt | sub.foo.pt | foo@foo.pt | | `pub` | http://foo.pub | www.foo.pub | sub.foo.pub | foo@foo.pub | | `pw` | http://foo.pw | www.foo.pw | sub.foo.pw | foo@foo.pw | | `pwc` | http://foo.pwc | www.foo.pwc | sub.foo.pwc | foo@foo.pwc | | `py` | http://foo.py | www.foo.py | sub.foo.py | foo@foo.py | | `qa` | http://foo.qa | www.foo.qa | sub.foo.qa | foo@foo.qa | | `qpon` | http://foo.qpon | www.foo.qpon | sub.foo.qpon | foo@foo.qpon | | `quebec` | http://foo.quebec | www.foo.quebec | sub.foo.quebec | foo@foo.quebec | | `quest` | http://foo.quest | www.foo.quest | sub.foo.quest | foo@foo.quest | | `qvc` | http://foo.qvc | www.foo.qvc | sub.foo.qvc | foo@foo.qvc | | `racing` | http://foo.racing | www.foo.racing | sub.foo.racing | foo@foo.racing | | `radio` | http://foo.radio | www.foo.radio | sub.foo.radio | foo@foo.radio | | `raid` | http://foo.raid | www.foo.raid | sub.foo.raid | foo@foo.raid | | `re` | http://foo.re | www.foo.re | sub.foo.re | foo@foo.re | | `read` | http://foo.read | www.foo.read | sub.foo.read | foo@foo.read | | `realestate` | http://foo.realestate | www.foo.realestate | sub.foo.realestate | foo@foo.realestate | | `realtor` | http://foo.realtor | www.foo.realtor | sub.foo.realtor | foo@foo.realtor | | `realty` | http://foo.realty | www.foo.realty | sub.foo.realty | foo@foo.realty | | `recipes` | http://foo.recipes | www.foo.recipes | sub.foo.recipes | foo@foo.recipes | | `red` | http://foo.red | www.foo.red | sub.foo.red | foo@foo.red | | `redstone` | http://foo.redstone | www.foo.redstone | sub.foo.redstone | foo@foo.redstone | | `redumbrella` | http://foo.redumbrella | www.foo.redumbrella | sub.foo.redumbrella | foo@foo.redumbrella | | `rehab` | http://foo.rehab | www.foo.rehab | sub.foo.rehab | foo@foo.rehab | | `reise` | http://foo.reise | www.foo.reise | sub.foo.reise | foo@foo.reise | | `reisen` | http://foo.reisen | www.foo.reisen | sub.foo.reisen | foo@foo.reisen | | `reit` | http://foo.reit | www.foo.reit | sub.foo.reit | foo@foo.reit | | `reliance` | http://foo.reliance | www.foo.reliance | sub.foo.reliance | foo@foo.reliance | | `ren` | http://foo.ren | www.foo.ren | sub.foo.ren | foo@foo.ren | | `rent` | http://foo.rent | www.foo.rent | sub.foo.rent | foo@foo.rent | | `rentals` | http://foo.rentals | www.foo.rentals | sub.foo.rentals | foo@foo.rentals | | `repair` | http://foo.repair | www.foo.repair | sub.foo.repair | foo@foo.repair | | `report` | http://foo.report | www.foo.report | sub.foo.report | foo@foo.report | | `republican` | http://foo.republican | www.foo.republican | sub.foo.republican | foo@foo.republican | | `rest` | http://foo.rest | www.foo.rest | sub.foo.rest | foo@foo.rest | | `restaurant` | http://foo.restaurant | www.foo.restaurant | sub.foo.restaurant | foo@foo.restaurant | | `review` | http://foo.review | www.foo.review | sub.foo.review | foo@foo.review | | `reviews` | http://foo.reviews | www.foo.reviews | sub.foo.reviews | foo@foo.reviews | | `rexroth` | http://foo.rexroth | www.foo.rexroth | sub.foo.rexroth | foo@foo.rexroth | | `rich` | http://foo.rich | www.foo.rich | sub.foo.rich | foo@foo.rich | | `richardli` | http://foo.richardli | www.foo.richardli | sub.foo.richardli | foo@foo.richardli | | `ricoh` | http://foo.ricoh | www.foo.ricoh | sub.foo.ricoh | foo@foo.ricoh | | `rightathome` | http://foo.rightathome | www.foo.rightathome | sub.foo.rightathome | foo@foo.rightathome | | `ril` | http://foo.ril | www.foo.ril | sub.foo.ril | foo@foo.ril | | `rio` | http://foo.rio | www.foo.rio | sub.foo.rio | foo@foo.rio | | `rip` | http://foo.rip | www.foo.rip | sub.foo.rip | foo@foo.rip | | `rmit` | http://foo.rmit | www.foo.rmit | sub.foo.rmit | foo@foo.rmit | | `ro` | http://foo.ro | www.foo.ro | sub.foo.ro | foo@foo.ro | | `rocher` | http://foo.rocher | www.foo.rocher | sub.foo.rocher | foo@foo.rocher | | `rocks` | http://foo.rocks | www.foo.rocks | sub.foo.rocks | foo@foo.rocks | | `rodeo` | http://foo.rodeo | www.foo.rodeo | sub.foo.rodeo | foo@foo.rodeo | | `rogers` | http://foo.rogers | www.foo.rogers | sub.foo.rogers | foo@foo.rogers | | `room` | http://foo.room | www.foo.room | sub.foo.room | foo@foo.room | | `rs` | http://foo.rs | www.foo.rs | sub.foo.rs | foo@foo.rs | | `rsvp` | http://foo.rsvp | www.foo.rsvp | sub.foo.rsvp | foo@foo.rsvp | | `ru` | http://foo.ru | www.foo.ru | sub.foo.ru | foo@foo.ru | | `rugby` | http://foo.rugby | www.foo.rugby | sub.foo.rugby | foo@foo.rugby | | `ruhr` | http://foo.ruhr | www.foo.ruhr | sub.foo.ruhr | foo@foo.ruhr | | `run` | http://foo.run | www.foo.run | sub.foo.run | foo@foo.run | | `rw` | http://foo.rw | www.foo.rw | sub.foo.rw | foo@foo.rw | | `rwe` | http://foo.rwe | www.foo.rwe | sub.foo.rwe | foo@foo.rwe | | `ryukyu` | http://foo.ryukyu | www.foo.ryukyu | sub.foo.ryukyu | foo@foo.ryukyu | | `sa` | http://foo.sa | www.foo.sa | sub.foo.sa | foo@foo.sa | | `saarland` | http://foo.saarland | www.foo.saarland | sub.foo.saarland | foo@foo.saarland | | `safe` | http://foo.safe | www.foo.safe | sub.foo.safe | foo@foo.safe | | `safety` | http://foo.safety | www.foo.safety | sub.foo.safety | foo@foo.safety | | `sakura` | http://foo.sakura | www.foo.sakura | sub.foo.sakura | foo@foo.sakura | | `sale` | http://foo.sale | www.foo.sale | sub.foo.sale | foo@foo.sale | | `salon` | http://foo.salon | www.foo.salon | sub.foo.salon | foo@foo.salon | | `samsclub` | http://foo.samsclub | www.foo.samsclub | sub.foo.samsclub | foo@foo.samsclub | | `samsung` | http://foo.samsung | www.foo.samsung | sub.foo.samsung | foo@foo.samsung | | `sandvik` | http://foo.sandvik | www.foo.sandvik | sub.foo.sandvik | foo@foo.sandvik | | `sandvikcoromant` | http://foo.sandvikcoromant | www.foo.sandvikcoromant | sub.foo.sandvikcoromant | foo@foo.sandvikcoromant | | `sanofi` | http://foo.sanofi | www.foo.sanofi | sub.foo.sanofi | foo@foo.sanofi | | `sap` | http://foo.sap | www.foo.sap | sub.foo.sap | foo@foo.sap | | `sarl` | http://foo.sarl | www.foo.sarl | sub.foo.sarl | foo@foo.sarl | | `sas` | http://foo.sas | www.foo.sas | sub.foo.sas | foo@foo.sas | | `save` | http://foo.save | www.foo.save | sub.foo.save | foo@foo.save | | `saxo` | http://foo.saxo | www.foo.saxo | sub.foo.saxo | foo@foo.saxo | | `sb` | http://foo.sb | www.foo.sb | sub.foo.sb | foo@foo.sb | | `sbi` | http://foo.sbi | www.foo.sbi | sub.foo.sbi | foo@foo.sbi | | `sbs` | http://foo.sbs | www.foo.sbs | sub.foo.sbs | foo@foo.sbs | | `sc` | http://foo.sc | www.foo.sc | sub.foo.sc | foo@foo.sc | | `sca` | http://foo.sca | www.foo.sca | sub.foo.sca | foo@foo.sca | | `scb` | http://foo.scb | www.foo.scb | sub.foo.scb | foo@foo.scb | | `schaeffler` | http://foo.schaeffler | www.foo.schaeffler | sub.foo.schaeffler | foo@foo.schaeffler | | `schmidt` | http://foo.schmidt | www.foo.schmidt | sub.foo.schmidt | foo@foo.schmidt | | `scholarships` | http://foo.scholarships | www.foo.scholarships | sub.foo.scholarships | foo@foo.scholarships | | `school` | http://foo.school | www.foo.school | sub.foo.school | foo@foo.school | | `schule` | http://foo.schule | www.foo.schule | sub.foo.schule | foo@foo.schule | | `schwarz` | http://foo.schwarz | www.foo.schwarz | sub.foo.schwarz | foo@foo.schwarz | | `science` | http://foo.science | www.foo.science | sub.foo.science | foo@foo.science | | `scjohnson` | http://foo.scjohnson | www.foo.scjohnson | sub.foo.scjohnson | foo@foo.scjohnson | | `scor` | http://foo.scor | www.foo.scor | sub.foo.scor | foo@foo.scor | | `scot` | http://foo.scot | www.foo.scot | sub.foo.scot | foo@foo.scot | | `sd` | http://foo.sd | www.foo.sd | sub.foo.sd | foo@foo.sd | | `se` | http://foo.se | www.foo.se | sub.foo.se | foo@foo.se | | `search` | http://foo.search | www.foo.search | sub.foo.search | foo@foo.search | | `seat` | http://foo.seat | www.foo.seat | sub.foo.seat | foo@foo.seat | | `secure` | http://foo.secure | www.foo.secure | sub.foo.secure | foo@foo.secure | | `security` | http://foo.security | www.foo.security | sub.foo.security | foo@foo.security | | `seek` | http://foo.seek | www.foo.seek | sub.foo.seek | foo@foo.seek | | `select` | http://foo.select | www.foo.select | sub.foo.select | foo@foo.select | | `sener` | http://foo.sener | www.foo.sener | sub.foo.sener | foo@foo.sener | | `services` | http://foo.services | www.foo.services | sub.foo.services | foo@foo.services | | `ses` | http://foo.ses | www.foo.ses | sub.foo.ses | foo@foo.ses | | `seven` | http://foo.seven | www.foo.seven | sub.foo.seven | foo@foo.seven | | `sew` | http://foo.sew | www.foo.sew | sub.foo.sew | foo@foo.sew | | `sex` | http://foo.sex | www.foo.sex | sub.foo.sex | foo@foo.sex | | `sexy` | http://foo.sexy | www.foo.sexy | sub.foo.sexy | foo@foo.sexy | | `sfr` | http://foo.sfr | www.foo.sfr | sub.foo.sfr | foo@foo.sfr | | `sg` | http://foo.sg | www.foo.sg | sub.foo.sg | foo@foo.sg | | `sh` | http://foo.sh | www.foo.sh | sub.foo.sh | foo@foo.sh | | `shangrila` | http://foo.shangrila | www.foo.shangrila | sub.foo.shangrila | foo@foo.shangrila | | `sharp` | http://foo.sharp | www.foo.sharp | sub.foo.sharp | foo@foo.sharp | | `shaw` | http://foo.shaw | www.foo.shaw | sub.foo.shaw | foo@foo.shaw | | `shell` | http://foo.shell | www.foo.shell | sub.foo.shell | foo@foo.shell | | `shia` | http://foo.shia | www.foo.shia | sub.foo.shia | foo@foo.shia | | `shiksha` | http://foo.shiksha | www.foo.shiksha | sub.foo.shiksha | foo@foo.shiksha | | `shoes` | http://foo.shoes | www.foo.shoes | sub.foo.shoes | foo@foo.shoes | | `shop` | http://foo.shop | www.foo.shop | sub.foo.shop | foo@foo.shop | | `shopping` | http://foo.shopping | www.foo.shopping | sub.foo.shopping | foo@foo.shopping | | `shouji` | http://foo.shouji | www.foo.shouji | sub.foo.shouji | foo@foo.shouji | | `show` | http://foo.show | www.foo.show | sub.foo.show | foo@foo.show | | `showtime` | http://foo.showtime | www.foo.showtime | sub.foo.showtime | foo@foo.showtime | | `shriram` | http://foo.shriram | www.foo.shriram | sub.foo.shriram | foo@foo.shriram | | `si` | http://foo.si | www.foo.si | sub.foo.si | foo@foo.si | | `silk` | http://foo.silk | www.foo.silk | sub.foo.silk | foo@foo.silk | | `sina` | http://foo.sina | www.foo.sina | sub.foo.sina | foo@foo.sina | | `singles` | http://foo.singles | www.foo.singles | sub.foo.singles | foo@foo.singles | | `site` | http://foo.site | www.foo.site | sub.foo.site | foo@foo.site | | `sj` | http://foo.sj | www.foo.sj | sub.foo.sj | foo@foo.sj | | `sk` | http://foo.sk | www.foo.sk | sub.foo.sk | foo@foo.sk | | `ski` | http://foo.ski | www.foo.ski | sub.foo.ski | foo@foo.ski | | `skin` | http://foo.skin | www.foo.skin | sub.foo.skin | foo@foo.skin | | `sky` | http://foo.sky | www.foo.sky | sub.foo.sky | foo@foo.sky | | `skype` | http://foo.skype | www.foo.skype | sub.foo.skype | foo@foo.skype | | `sl` | http://foo.sl | www.foo.sl | sub.foo.sl | foo@foo.sl | | `sling` | http://foo.sling | www.foo.sling | sub.foo.sling | foo@foo.sling | | `sm` | http://foo.sm | www.foo.sm | sub.foo.sm | foo@foo.sm | | `smart` | http://foo.smart | www.foo.smart | sub.foo.smart | foo@foo.smart | | `smile` | http://foo.smile | www.foo.smile | sub.foo.smile | foo@foo.smile | | `sn` | http://foo.sn | www.foo.sn | sub.foo.sn | foo@foo.sn | | `sncf` | http://foo.sncf | www.foo.sncf | sub.foo.sncf | foo@foo.sncf | | `so` | http://foo.so | www.foo.so | sub.foo.so | foo@foo.so | | `soccer` | http://foo.soccer | www.foo.soccer | sub.foo.soccer | foo@foo.soccer | | `social` | http://foo.social | www.foo.social | sub.foo.social | foo@foo.social | | `softbank` | http://foo.softbank | www.foo.softbank | sub.foo.softbank | foo@foo.softbank | | `software` | http://foo.software | www.foo.software | sub.foo.software | foo@foo.software | | `sohu` | http://foo.sohu | www.foo.sohu | sub.foo.sohu | foo@foo.sohu | | `solar` | http://foo.solar | www.foo.solar | sub.foo.solar | foo@foo.solar | | `solutions` | http://foo.solutions | www.foo.solutions | sub.foo.solutions | foo@foo.solutions | | `song` | http://foo.song | www.foo.song | sub.foo.song | foo@foo.song | | `sony` | http://foo.sony | www.foo.sony | sub.foo.sony | foo@foo.sony | | `soy` | http://foo.soy | www.foo.soy | sub.foo.soy | foo@foo.soy | | `space` | http://foo.space | www.foo.space | sub.foo.space | foo@foo.space | | `sport` | http://foo.sport | www.foo.sport | sub.foo.sport | foo@foo.sport | | `spot` | http://foo.spot | www.foo.spot | sub.foo.spot | foo@foo.spot | | `spreadbetting` | http://foo.spreadbetting | www.foo.spreadbetting | sub.foo.spreadbetting | foo@foo.spreadbetting | | `sr` | http://foo.sr | www.foo.sr | sub.foo.sr | foo@foo.sr | | `srl` | http://foo.srl | www.foo.srl | sub.foo.srl | foo@foo.srl | | `ss` | http://foo.ss | www.foo.ss | sub.foo.ss | foo@foo.ss | | `st` | http://foo.st | www.foo.st | sub.foo.st | foo@foo.st | | `stada` | http://foo.stada | www.foo.stada | sub.foo.stada | foo@foo.stada | | `staples` | http://foo.staples | www.foo.staples | sub.foo.staples | foo@foo.staples | | `star` | http://foo.star | www.foo.star | sub.foo.star | foo@foo.star | | `statebank` | http://foo.statebank | www.foo.statebank | sub.foo.statebank | foo@foo.statebank | | `statefarm` | http://foo.statefarm | www.foo.statefarm | sub.foo.statefarm | foo@foo.statefarm | | `stc` | http://foo.stc | www.foo.stc | sub.foo.stc | foo@foo.stc | | `stcgroup` | http://foo.stcgroup | www.foo.stcgroup | sub.foo.stcgroup | foo@foo.stcgroup | | `stockholm` | http://foo.stockholm | www.foo.stockholm | sub.foo.stockholm | foo@foo.stockholm | | `storage` | http://foo.storage | www.foo.storage | sub.foo.storage | foo@foo.storage | | `store` | http://foo.store | www.foo.store | sub.foo.store | foo@foo.store | | `stream` | http://foo.stream | www.foo.stream | sub.foo.stream | foo@foo.stream | | `studio` | http://foo.studio | www.foo.studio | sub.foo.studio | foo@foo.studio | | `study` | http://foo.study | www.foo.study | sub.foo.study | foo@foo.study | | `style` | http://foo.style | www.foo.style | sub.foo.style | foo@foo.style | | `su` | http://foo.su | www.foo.su | sub.foo.su | foo@foo.su | | `sucks` | http://foo.sucks | www.foo.sucks | sub.foo.sucks | foo@foo.sucks | | `supplies` | http://foo.supplies | www.foo.supplies | sub.foo.supplies | foo@foo.supplies | | `supply` | http://foo.supply | www.foo.supply | sub.foo.supply | foo@foo.supply | | `support` | http://foo.support | www.foo.support | sub.foo.support | foo@foo.support | | `surf` | http://foo.surf | www.foo.surf | sub.foo.surf | foo@foo.surf | | `surgery` | http://foo.surgery | www.foo.surgery | sub.foo.surgery | foo@foo.surgery | | `suzuki` | http://foo.suzuki | www.foo.suzuki | sub.foo.suzuki | foo@foo.suzuki | | `sv` | http://foo.sv | www.foo.sv | sub.foo.sv | foo@foo.sv | | `swatch` | http://foo.swatch | www.foo.swatch | sub.foo.swatch | foo@foo.swatch | | `swiftcover` | http://foo.swiftcover | www.foo.swiftcover | sub.foo.swiftcover | foo@foo.swiftcover | | `swiss` | http://foo.swiss | www.foo.swiss | sub.foo.swiss | foo@foo.swiss | | `sx` | http://foo.sx | www.foo.sx | sub.foo.sx | foo@foo.sx | | `sy` | http://foo.sy | www.foo.sy | sub.foo.sy | foo@foo.sy | | `sydney` | http://foo.sydney | www.foo.sydney | sub.foo.sydney | foo@foo.sydney | | `symantec` | http://foo.symantec | www.foo.symantec | sub.foo.symantec | foo@foo.symantec | | `systems` | http://foo.systems | www.foo.systems | sub.foo.systems | foo@foo.systems | | `sz` | http://foo.sz | www.foo.sz | sub.foo.sz | foo@foo.sz | | `tab` | http://foo.tab | www.foo.tab | sub.foo.tab | foo@foo.tab | | `taipei` | http://foo.taipei | www.foo.taipei | sub.foo.taipei | foo@foo.taipei | | `talk` | http://foo.talk | www.foo.talk | sub.foo.talk | foo@foo.talk | | `taobao` | http://foo.taobao | www.foo.taobao | sub.foo.taobao | foo@foo.taobao | | `target` | http://foo.target | www.foo.target | sub.foo.target | foo@foo.target | | `tatamotors` | http://foo.tatamotors | www.foo.tatamotors | sub.foo.tatamotors | foo@foo.tatamotors | | `tatar` | http://foo.tatar | www.foo.tatar | sub.foo.tatar | foo@foo.tatar | | `tattoo` | http://foo.tattoo | www.foo.tattoo | sub.foo.tattoo | foo@foo.tattoo | | `tax` | http://foo.tax | www.foo.tax | sub.foo.tax | foo@foo.tax | | `taxi` | http://foo.taxi | www.foo.taxi | sub.foo.taxi | foo@foo.taxi | | `tc` | http://foo.tc | www.foo.tc | sub.foo.tc | foo@foo.tc | | `tci` | http://foo.tci | www.foo.tci | sub.foo.tci | foo@foo.tci | | `td` | http://foo.td | www.foo.td | sub.foo.td | foo@foo.td | | `tdk` | http://foo.tdk | www.foo.tdk | sub.foo.tdk | foo@foo.tdk | | `team` | http://foo.team | www.foo.team | sub.foo.team | foo@foo.team | | `tech` | http://foo.tech | www.foo.tech | sub.foo.tech | foo@foo.tech | | `technology` | http://foo.technology | www.foo.technology | sub.foo.technology | foo@foo.technology | | `tel` | http://foo.tel | www.foo.tel | sub.foo.tel | foo@foo.tel | | `telefonica` | http://foo.telefonica | www.foo.telefonica | sub.foo.telefonica | foo@foo.telefonica | | `temasek` | http://foo.temasek | www.foo.temasek | sub.foo.temasek | foo@foo.temasek | | `tennis` | http://foo.tennis | www.foo.tennis | sub.foo.tennis | foo@foo.tennis | | `teva` | http://foo.teva | www.foo.teva | sub.foo.teva | foo@foo.teva | | `tf` | http://foo.tf | www.foo.tf | sub.foo.tf | foo@foo.tf | | `tg` | http://foo.tg | www.foo.tg | sub.foo.tg | foo@foo.tg | | `th` | http://foo.th | www.foo.th | sub.foo.th | foo@foo.th | | `thd` | http://foo.thd | www.foo.thd | sub.foo.thd | foo@foo.thd | | `theater` | http://foo.theater | www.foo.theater | sub.foo.theater | foo@foo.theater | | `theatre` | http://foo.theatre | www.foo.theatre | sub.foo.theatre | foo@foo.theatre | | `tiaa` | http://foo.tiaa | www.foo.tiaa | sub.foo.tiaa | foo@foo.tiaa | | `tickets` | http://foo.tickets | www.foo.tickets | sub.foo.tickets | foo@foo.tickets | | `tienda` | http://foo.tienda | www.foo.tienda | sub.foo.tienda | foo@foo.tienda | | `tiffany` | http://foo.tiffany | www.foo.tiffany | sub.foo.tiffany | foo@foo.tiffany | | `tips` | http://foo.tips | www.foo.tips | sub.foo.tips | foo@foo.tips | | `tires` | http://foo.tires | www.foo.tires | sub.foo.tires | foo@foo.tires | | `tirol` | http://foo.tirol | www.foo.tirol | sub.foo.tirol | foo@foo.tirol | | `tj` | http://foo.tj | www.foo.tj | sub.foo.tj | foo@foo.tj | | `tjmaxx` | http://foo.tjmaxx | www.foo.tjmaxx | sub.foo.tjmaxx | foo@foo.tjmaxx | | `tjx` | http://foo.tjx | www.foo.tjx | sub.foo.tjx | foo@foo.tjx | | `tk` | http://foo.tk | www.foo.tk | sub.foo.tk | foo@foo.tk | | `tkmaxx` | http://foo.tkmaxx | www.foo.tkmaxx | sub.foo.tkmaxx | foo@foo.tkmaxx | | `tl` | http://foo.tl | www.foo.tl | sub.foo.tl | foo@foo.tl | | `tm` | http://foo.tm | www.foo.tm | sub.foo.tm | foo@foo.tm | | `tmall` | http://foo.tmall | www.foo.tmall | sub.foo.tmall | foo@foo.tmall | | `tn` | http://foo.tn | www.foo.tn | sub.foo.tn | foo@foo.tn | | `to` | http://foo.to | www.foo.to | sub.foo.to | foo@foo.to | | `today` | http://foo.today | www.foo.today | sub.foo.today | foo@foo.today | | `tokyo` | http://foo.tokyo | www.foo.tokyo | sub.foo.tokyo | foo@foo.tokyo | | `tools` | http://foo.tools | www.foo.tools | sub.foo.tools | foo@foo.tools | | `top` | http://foo.top | www.foo.top | sub.foo.top | foo@foo.top | | `toray` | http://foo.toray | www.foo.toray | sub.foo.toray | foo@foo.toray | | `toshiba` | http://foo.toshiba | www.foo.toshiba | sub.foo.toshiba | foo@foo.toshiba | | `total` | http://foo.total | www.foo.total | sub.foo.total | foo@foo.total | | `tours` | http://foo.tours | www.foo.tours | sub.foo.tours | foo@foo.tours | | `town` | http://foo.town | www.foo.town | sub.foo.town | foo@foo.town | | `toyota` | http://foo.toyota | www.foo.toyota | sub.foo.toyota | foo@foo.toyota | | `toys` | http://foo.toys | www.foo.toys | sub.foo.toys | foo@foo.toys | | `tr` | http://foo.tr | www.foo.tr | sub.foo.tr | foo@foo.tr | | `trade` | http://foo.trade | www.foo.trade | sub.foo.trade | foo@foo.trade | | `trading` | http://foo.trading | www.foo.trading | sub.foo.trading | foo@foo.trading | | `training` | http://foo.training | www.foo.training | sub.foo.training | foo@foo.training | | `travel` | http://foo.travel | www.foo.travel | sub.foo.travel | foo@foo.travel | | `travelchannel` | http://foo.travelchannel | www.foo.travelchannel | sub.foo.travelchannel | foo@foo.travelchannel | | `travelers` | http://foo.travelers | www.foo.travelers | sub.foo.travelers | foo@foo.travelers | | `travelersinsurance` | http://foo.travelersinsurance | www.foo.travelersinsurance | sub.foo.travelersinsurance | foo@foo.travelersinsurance | | `trust` | http://foo.trust | www.foo.trust | sub.foo.trust | foo@foo.trust | | `trv` | http://foo.trv | www.foo.trv | sub.foo.trv | foo@foo.trv | | `tt` | http://foo.tt | www.foo.tt | sub.foo.tt | foo@foo.tt | | `tube` | http://foo.tube | www.foo.tube | sub.foo.tube | foo@foo.tube | | `tui` | http://foo.tui | www.foo.tui | sub.foo.tui | foo@foo.tui | | `tunes` | http://foo.tunes | www.foo.tunes | sub.foo.tunes | foo@foo.tunes | | `tushu` | http://foo.tushu | www.foo.tushu | sub.foo.tushu | foo@foo.tushu | | `tv` | http://foo.tv | www.foo.tv | sub.foo.tv | foo@foo.tv | | `tvs` | http://foo.tvs | www.foo.tvs | sub.foo.tvs | foo@foo.tvs | | `tw` | http://foo.tw | www.foo.tw | sub.foo.tw | foo@foo.tw | | `tz` | http://foo.tz | www.foo.tz | sub.foo.tz | foo@foo.tz | | `ua` | http://foo.ua | www.foo.ua | sub.foo.ua | foo@foo.ua | | `ubank` | http://foo.ubank | www.foo.ubank | sub.foo.ubank | foo@foo.ubank | | `ubs` | http://foo.ubs | www.foo.ubs | sub.foo.ubs | foo@foo.ubs | | `ug` | http://foo.ug | www.foo.ug | sub.foo.ug | foo@foo.ug | | `uk` | http://foo.uk | www.foo.uk | sub.foo.uk | foo@foo.uk | | `unicom` | http://foo.unicom | www.foo.unicom | sub.foo.unicom | foo@foo.unicom | | `university` | http://foo.university | www.foo.university | sub.foo.university | foo@foo.university | | `uno` | http://foo.uno | www.foo.uno | sub.foo.uno | foo@foo.uno | | `uol` | http://foo.uol | www.foo.uol | sub.foo.uol | foo@foo.uol | | `ups` | http://foo.ups | www.foo.ups | sub.foo.ups | foo@foo.ups | | `us` | http://foo.us | www.foo.us | sub.foo.us | foo@foo.us | | `uy` | http://foo.uy | www.foo.uy | sub.foo.uy | foo@foo.uy | | `uz` | http://foo.uz | www.foo.uz | sub.foo.uz | foo@foo.uz | | `va` | http://foo.va | www.foo.va | sub.foo.va | foo@foo.va | | `vacations` | http://foo.vacations | www.foo.vacations | sub.foo.vacations | foo@foo.vacations | | `vana` | http://foo.vana | www.foo.vana | sub.foo.vana | foo@foo.vana | | `vanguard` | http://foo.vanguard | www.foo.vanguard | sub.foo.vanguard | foo@foo.vanguard | | `vc` | http://foo.vc | www.foo.vc | sub.foo.vc | foo@foo.vc | | `ve` | http://foo.ve | www.foo.ve | sub.foo.ve | foo@foo.ve | | `vegas` | http://foo.vegas | www.foo.vegas | sub.foo.vegas | foo@foo.vegas | | `ventures` | http://foo.ventures | www.foo.ventures | sub.foo.ventures | foo@foo.ventures | | `verisign` | http://foo.verisign | www.foo.verisign | sub.foo.verisign | foo@foo.verisign | | `versicherung` | http://foo.versicherung | www.foo.versicherung | sub.foo.versicherung | foo@foo.versicherung | | `vet` | http://foo.vet | www.foo.vet | sub.foo.vet | foo@foo.vet | | `vg` | http://foo.vg | www.foo.vg | sub.foo.vg | foo@foo.vg | | `vi` | http://foo.vi | www.foo.vi | sub.foo.vi | foo@foo.vi | | `viajes` | http://foo.viajes | www.foo.viajes | sub.foo.viajes | foo@foo.viajes | | `video` | http://foo.video | www.foo.video | sub.foo.video | foo@foo.video | | `vig` | http://foo.vig | www.foo.vig | sub.foo.vig | foo@foo.vig | | `viking` | http://foo.viking | www.foo.viking | sub.foo.viking | foo@foo.viking | | `villas` | http://foo.villas | www.foo.villas | sub.foo.villas | foo@foo.villas | | `vin` | http://foo.vin | www.foo.vin | sub.foo.vin | foo@foo.vin | | `vip` | http://foo.vip | www.foo.vip | sub.foo.vip | foo@foo.vip | | `virgin` | http://foo.virgin | www.foo.virgin | sub.foo.virgin | foo@foo.virgin | | `visa` | http://foo.visa | www.foo.visa | sub.foo.visa | foo@foo.visa | | `vision` | http://foo.vision | www.foo.vision | sub.foo.vision | foo@foo.vision | | `vistaprint` | http://foo.vistaprint | www.foo.vistaprint | sub.foo.vistaprint | foo@foo.vistaprint | | `viva` | http://foo.viva | www.foo.viva | sub.foo.viva | foo@foo.viva | | `vivo` | http://foo.vivo | www.foo.vivo | sub.foo.vivo | foo@foo.vivo | | `vlaanderen` | http://foo.vlaanderen | www.foo.vlaanderen | sub.foo.vlaanderen | foo@foo.vlaanderen | | `vn` | http://foo.vn | www.foo.vn | sub.foo.vn | foo@foo.vn | | `vodka` | http://foo.vodka | www.foo.vodka | sub.foo.vodka | foo@foo.vodka | | `volkswagen` | http://foo.volkswagen | www.foo.volkswagen | sub.foo.volkswagen | foo@foo.volkswagen | | `volvo` | http://foo.volvo | www.foo.volvo | sub.foo.volvo | foo@foo.volvo | | `vote` | http://foo.vote | www.foo.vote | sub.foo.vote | foo@foo.vote | | `voting` | http://foo.voting | www.foo.voting | sub.foo.voting | foo@foo.voting | | `voto` | http://foo.voto | www.foo.voto | sub.foo.voto | foo@foo.voto | | `voyage` | http://foo.voyage | www.foo.voyage | sub.foo.voyage | foo@foo.voyage | | `vu` | http://foo.vu | www.foo.vu | sub.foo.vu | foo@foo.vu | | `vuelos` | http://foo.vuelos | www.foo.vuelos | sub.foo.vuelos | foo@foo.vuelos | | `wales` | http://foo.wales | www.foo.wales | sub.foo.wales | foo@foo.wales | | `walmart` | http://foo.walmart | www.foo.walmart | sub.foo.walmart | foo@foo.walmart | | `walter` | http://foo.walter | www.foo.walter | sub.foo.walter | foo@foo.walter | | `wang` | http://foo.wang | www.foo.wang | sub.foo.wang | foo@foo.wang | | `wanggou` | http://foo.wanggou | www.foo.wanggou | sub.foo.wanggou | foo@foo.wanggou | | `watch` | http://foo.watch | www.foo.watch | sub.foo.watch | foo@foo.watch | | `watches` | http://foo.watches | www.foo.watches | sub.foo.watches | foo@foo.watches | | `weather` | http://foo.weather | www.foo.weather | sub.foo.weather | foo@foo.weather | | `weatherchannel` | http://foo.weatherchannel | www.foo.weatherchannel | sub.foo.weatherchannel | foo@foo.weatherchannel | | `webcam` | http://foo.webcam | www.foo.webcam | sub.foo.webcam | foo@foo.webcam | | `weber` | http://foo.weber | www.foo.weber | sub.foo.weber | foo@foo.weber | | `website` | http://foo.website | www.foo.website | sub.foo.website | foo@foo.website | | `wed` | http://foo.wed | www.foo.wed | sub.foo.wed | foo@foo.wed | | `wedding` | http://foo.wedding | www.foo.wedding | sub.foo.wedding | foo@foo.wedding | | `weibo` | http://foo.weibo | www.foo.weibo | sub.foo.weibo | foo@foo.weibo | | `weir` | http://foo.weir | www.foo.weir | sub.foo.weir | foo@foo.weir | | `wf` | http://foo.wf | www.foo.wf | sub.foo.wf | foo@foo.wf | | `whoswho` | http://foo.whoswho | www.foo.whoswho | sub.foo.whoswho | foo@foo.whoswho | | `wien` | http://foo.wien | www.foo.wien | sub.foo.wien | foo@foo.wien | | `wiki` | http://foo.wiki | www.foo.wiki | sub.foo.wiki | foo@foo.wiki | | `williamhill` | http://foo.williamhill | www.foo.williamhill | sub.foo.williamhill | foo@foo.williamhill | | `win` | http://foo.win | www.foo.win | sub.foo.win | foo@foo.win | | `windows` | http://foo.windows | www.foo.windows | sub.foo.windows | foo@foo.windows | | `wine` | http://foo.wine | www.foo.wine | sub.foo.wine | foo@foo.wine | | `winners` | http://foo.winners | www.foo.winners | sub.foo.winners | foo@foo.winners | | `wme` | http://foo.wme | www.foo.wme | sub.foo.wme | foo@foo.wme | | `wolterskluwer` | http://foo.wolterskluwer | www.foo.wolterskluwer | sub.foo.wolterskluwer | foo@foo.wolterskluwer | | `woodside` | http://foo.woodside | www.foo.woodside | sub.foo.woodside | foo@foo.woodside | | `work` | http://foo.work | www.foo.work | sub.foo.work | foo@foo.work | | `works` | http://foo.works | www.foo.works | sub.foo.works | foo@foo.works | | `world` | http://foo.world | www.foo.world | sub.foo.world | foo@foo.world | | `wow` | http://foo.wow | www.foo.wow | sub.foo.wow | foo@foo.wow | | `ws` | http://foo.ws | www.foo.ws | sub.foo.ws | foo@foo.ws | | `wtc` | http://foo.wtc | www.foo.wtc | sub.foo.wtc | foo@foo.wtc | | `wtf` | http://foo.wtf | www.foo.wtf | sub.foo.wtf | foo@foo.wtf | | `xbox` | http://foo.xbox | www.foo.xbox | sub.foo.xbox | foo@foo.xbox | | `xerox` | http://foo.xerox | www.foo.xerox | sub.foo.xerox | foo@foo.xerox | | `xfinity` | http://foo.xfinity | www.foo.xfinity | sub.foo.xfinity | foo@foo.xfinity | | `xihuan` | http://foo.xihuan | www.foo.xihuan | sub.foo.xihuan | foo@foo.xihuan | | `xin` | http://foo.xin | www.foo.xin | sub.foo.xin | foo@foo.xin | | `कॉम` | http://foo.कॉम | www.foo.कॉम | sub.foo.कॉम | foo@foo.कॉम | | `セール` | http://foo.セール | www.foo.セール | sub.foo.セール | foo@foo.セール | | `佛山` | http://foo.佛山 | www.foo.佛山 | sub.foo.佛山 | foo@foo.佛山 | | `ಭಾರತ` | http://foo.ಭಾರತ | www.foo.ಭಾರತ | sub.foo.ಭಾರತ | foo@foo.ಭಾರತ | | `慈善` | http://foo.慈善 | www.foo.慈善 | sub.foo.慈善 | foo@foo.慈善 | | `集团` | http://foo.集团 | www.foo.集团 | sub.foo.集团 | foo@foo.集团 | | `在线` | http://foo.在线 | www.foo.在线 | sub.foo.在线 | foo@foo.在线 | | `한국` | http://foo.한국 | www.foo.한국 | sub.foo.한국 | foo@foo.한국 | | `ଭାରତ` | http://foo.ଭାରତ | www.foo.ଭାରତ | sub.foo.ଭାରତ | foo@foo.ଭାରତ | | `大众汽车` | http://foo.大众汽车 | www.foo.大众汽车 | sub.foo.大众汽车 | foo@foo.大众汽车 | | `点看` | http://foo.点看 | www.foo.点看 | sub.foo.点看 | foo@foo.点看 | | `คอม` | http://foo.คอม | www.foo.คอม | sub.foo.คอม | foo@foo.คอม | | `ভাৰত` | http://foo.ভাৰত | www.foo.ভাৰত | sub.foo.ভাৰত | foo@foo.ভাৰত | | `ভারত` | http://foo.ভারত | www.foo.ভারত | sub.foo.ভারত | foo@foo.ভারত | | `八卦` | http://foo.八卦 | www.foo.八卦 | sub.foo.八卦 | foo@foo.八卦 | | `موقع` | http://foo.موقع | www.foo.موقع | sub.foo.موقع | foo@foo.موقع | | `বাংলা` | http://foo.বাংলা | www.foo.বাংলা | sub.foo.বাংলা | foo@foo.বাংলা | | `公益` | http://foo.公益 | www.foo.公益 | sub.foo.公益 | foo@foo.公益 | | `公司` | http://foo.公司 | www.foo.公司 | sub.foo.公司 | foo@foo.公司 | | `香格里拉` | http://foo.香格里拉 | www.foo.香格里拉 | sub.foo.香格里拉 | foo@foo.香格里拉 | | `网站` | http://foo.网站 | www.foo.网站 | sub.foo.网站 | foo@foo.网站 | | `移动` | http://foo.移动 | www.foo.移动 | sub.foo.移动 | foo@foo.移动 | | `我爱你` | http://foo.我爱你 | www.foo.我爱你 | sub.foo.我爱你 | foo@foo.我爱你 | | `москва` | http://foo.москва | www.foo.москва | sub.foo.москва | foo@foo.москва | | `қаз` | http://foo.қаз | www.foo.қаз | sub.foo.қаз | foo@foo.қаз | | `католик` | http://foo.католик | www.foo.католик | sub.foo.католик | foo@foo.католик | | `онлайн` | http://foo.онлайн | www.foo.онлайн | sub.foo.онлайн | foo@foo.онлайн | | `сайт` | http://foo.сайт | www.foo.сайт | sub.foo.сайт | foo@foo.сайт | | `联通` | http://foo.联通 | www.foo.联通 | sub.foo.联通 | foo@foo.联通 | | `срб` | http://foo.срб | www.foo.срб | sub.foo.срб | foo@foo.срб | | `бг` | http://foo.бг | www.foo.бг | sub.foo.бг | foo@foo.бг | | `бел` | http://foo.бел | www.foo.бел | sub.foo.бел | foo@foo.бел | | `קום` | http://foo.קום | www.foo.קום | sub.foo.קום | foo@foo.קום | | `时尚` | http://foo.时尚 | www.foo.时尚 | sub.foo.时尚 | foo@foo.时尚 | | `微博` | http://foo.微博 | www.foo.微博 | sub.foo.微博 | foo@foo.微博 | | `淡马锡` | http://foo.淡马锡 | www.foo.淡马锡 | sub.foo.淡马锡 | foo@foo.淡马锡 | | `ファッション` | http://foo.ファッション | www.foo.ファッション | sub.foo.ファッション | foo@foo.ファッション | | `орг` | http://foo.орг | www.foo.орг | sub.foo.орг | foo@foo.орг | | `नेट` | http://foo.नेट | www.foo.नेट | sub.foo.नेट | foo@foo.नेट | | `ストア` | http://foo.ストア | www.foo.ストア | sub.foo.ストア | foo@foo.ストア | | `삼성` | http://foo.삼성 | www.foo.삼성 | sub.foo.삼성 | foo@foo.삼성 | | `சிங்கப்பூர்` | http://foo.சிங்கப்பூர் | www.foo.சிங்கப்பூர் | sub.foo.சிங்கப்பூர் | foo@foo.சிங்கப்பூர் | | `商标` | http://foo.商标 | www.foo.商标 | sub.foo.商标 | foo@foo.商标 | | `商店` | http://foo.商店 | www.foo.商店 | sub.foo.商店 | foo@foo.商店 | | `商城` | http://foo.商城 | www.foo.商城 | sub.foo.商城 | foo@foo.商城 | | `дети` | http://foo.дети | www.foo.дети | sub.foo.дети | foo@foo.дети | | `мкд` | http://foo.мкд | www.foo.мкд | sub.foo.мкд | foo@foo.мкд | | `ею` | http://foo.ею | www.foo.ею | sub.foo.ею | foo@foo.ею | | `ポイント` | http://foo.ポイント | www.foo.ポイント | sub.foo.ポイント | foo@foo.ポイント | | `新闻` | http://foo.新闻 | www.foo.新闻 | sub.foo.新闻 | foo@foo.新闻 | | `工行` | http://foo.工行 | www.foo.工行 | sub.foo.工行 | foo@foo.工行 | | `家電` | http://foo.家電 | www.foo.家電 | sub.foo.家電 | foo@foo.家電 | | `كوم` | http://foo.كوم | www.foo.كوم | sub.foo.كوم | foo@foo.كوم | | `中文网` | http://foo.中文网 | www.foo.中文网 | sub.foo.中文网 | foo@foo.中文网 | | `中信` | http://foo.中信 | www.foo.中信 | sub.foo.中信 | foo@foo.中信 | | `中国` | http://foo.中国 | www.foo.中国 | sub.foo.中国 | foo@foo.中国 | | `中國` | http://foo.中國 | www.foo.中國 | sub.foo.中國 | foo@foo.中國 | | `娱乐` | http://foo.娱乐 | www.foo.娱乐 | sub.foo.娱乐 | foo@foo.娱乐 | | `谷歌` | http://foo.谷歌 | www.foo.谷歌 | sub.foo.谷歌 | foo@foo.谷歌 | | `భారత్` | http://foo.భారత్ | www.foo.భారత్ | sub.foo.భారత్ | foo@foo.భారత్ | | `ලංකා` | http://foo.ලංකා | www.foo.ලංකා | sub.foo.ලංකා | foo@foo.ලංකා | | `電訊盈科` | http://foo.電訊盈科 | www.foo.電訊盈科 | sub.foo.電訊盈科 | foo@foo.電訊盈科 | | `购物` | http://foo.购物 | www.foo.购物 | sub.foo.购物 | foo@foo.购物 | | `クラウド` | http://foo.クラウド | www.foo.クラウド | sub.foo.クラウド | foo@foo.クラウド | | `ભારત` | http://foo.ભારત | www.foo.ભારત | sub.foo.ભારત | foo@foo.ભારત | | `通販` | http://foo.通販 | www.foo.通販 | sub.foo.通販 | foo@foo.通販 | | `भारतम्` | http://foo.भारतम् | www.foo.भारतम् | sub.foo.भारतम् | foo@foo.भारतम् | | `भारत` | http://foo.भारत | www.foo.भारत | sub.foo.भारत | foo@foo.भारत | | `भारोत` | http://foo.भारोत | www.foo.भारोत | sub.foo.भारोत | foo@foo.भारोत | | `网店` | http://foo.网店 | www.foo.网店 | sub.foo.网店 | foo@foo.网店 | | `संगठन` | http://foo.संगठन | www.foo.संगठन | sub.foo.संगठन | foo@foo.संगठन | | `餐厅` | http://foo.餐厅 | www.foo.餐厅 | sub.foo.餐厅 | foo@foo.餐厅 | | `网络` | http://foo.网络 | www.foo.网络 | sub.foo.网络 | foo@foo.网络 | | `ком` | http://foo.ком | www.foo.ком | sub.foo.ком | foo@foo.ком | | `укр` | http://foo.укр | www.foo.укр | sub.foo.укр | foo@foo.укр | | `香港` | http://foo.香港 | www.foo.香港 | sub.foo.香港 | foo@foo.香港 | | `诺基亚` | http://foo.诺基亚 | www.foo.诺基亚 | sub.foo.诺基亚 | foo@foo.诺基亚 | | `食品` | http://foo.食品 | www.foo.食品 | sub.foo.食品 | foo@foo.食品 | | `飞利浦` | http://foo.飞利浦 | www.foo.飞利浦 | sub.foo.飞利浦 | foo@foo.飞利浦 | | `台湾` | http://foo.台湾 | www.foo.台湾 | sub.foo.台湾 | foo@foo.台湾 | | `台灣` | http://foo.台灣 | www.foo.台灣 | sub.foo.台灣 | foo@foo.台灣 | | `手表` | http://foo.手表 | www.foo.手表 | sub.foo.手表 | foo@foo.手表 | | `手机` | http://foo.手机 | www.foo.手机 | sub.foo.手机 | foo@foo.手机 | | `мон` | http://foo.мон | www.foo.мон | sub.foo.мон | foo@foo.мон | | `الجزائر` | http://foo.الجزائر | www.foo.الجزائر | sub.foo.الجزائر | foo@foo.الجزائر | | `عمان` | http://foo.عمان | www.foo.عمان | sub.foo.عمان | foo@foo.عمان | | `ارامكو` | http://foo.ارامكو | www.foo.ارامكو | sub.foo.ارامكو | foo@foo.ارامكو | | `ایران` | http://foo.ایران | www.foo.ایران | sub.foo.ایران | foo@foo.ایران | | `العليان` | http://foo.العليان | www.foo.العليان | sub.foo.العليان | foo@foo.العليان | | `اتصالات` | http://foo.اتصالات | www.foo.اتصالات | sub.foo.اتصالات | foo@foo.اتصالات | | `امارات` | http://foo.امارات | www.foo.امارات | sub.foo.امارات | foo@foo.امارات | | `بازار` | http://foo.بازار | www.foo.بازار | sub.foo.بازار | foo@foo.بازار | | `موريتانيا` | http://foo.موريتانيا | www.foo.موريتانيا | sub.foo.موريتانيا | foo@foo.موريتانيا | | `پاکستان` | http://foo.پاکستان | www.foo.پاکستان | sub.foo.پاکستان | foo@foo.پاکستان | | `الاردن` | http://foo.الاردن | www.foo.الاردن | sub.foo.الاردن | foo@foo.الاردن | | `بارت` | http://foo.بارت | www.foo.بارت | sub.foo.بارت | foo@foo.بارت | | `بھارت` | http://foo.بھارت | www.foo.بھارت | sub.foo.بھارت | foo@foo.بھارت | | `المغرب` | http://foo.المغرب | www.foo.المغرب | sub.foo.المغرب | foo@foo.المغرب | | `ابوظبي` | http://foo.ابوظبي | www.foo.ابوظبي | sub.foo.ابوظبي | foo@foo.ابوظبي | | `السعودية` | http://foo.السعودية | www.foo.السعودية | sub.foo.السعودية | foo@foo.السعودية | | `ڀارت` | http://foo.ڀارت | www.foo.ڀارت | sub.foo.ڀارت | foo@foo.ڀارت | | `كاثوليك` | http://foo.كاثوليك | www.foo.كاثوليك | sub.foo.كاثوليك | foo@foo.كاثوليك | | `سودان` | http://foo.سودان | www.foo.سودان | sub.foo.سودان | foo@foo.سودان | | `همراه` | http://foo.همراه | www.foo.همراه | sub.foo.همراه | foo@foo.همراه | | `عراق` | http://foo.عراق | www.foo.عراق | sub.foo.عراق | foo@foo.عراق | | `مليسيا` | http://foo.مليسيا | www.foo.مليسيا | sub.foo.مليسيا | foo@foo.مليسيا | | `澳門` | http://foo.澳門 | www.foo.澳門 | sub.foo.澳門 | foo@foo.澳門 | | `닷컴` | http://foo.닷컴 | www.foo.닷컴 | sub.foo.닷컴 | foo@foo.닷컴 | | `政府` | http://foo.政府 | www.foo.政府 | sub.foo.政府 | foo@foo.政府 | | `شبكة` | http://foo.شبكة | www.foo.شبكة | sub.foo.شبكة | foo@foo.شبكة | | `بيتك` | http://foo.بيتك | www.foo.بيتك | sub.foo.بيتك | foo@foo.بيتك | | `عرب` | http://foo.عرب | www.foo.عرب | sub.foo.عرب | foo@foo.عرب | | `გე` | http://foo.გე | www.foo.გე | sub.foo.გე | foo@foo.გე | | `机构` | http://foo.机构 | www.foo.机构 | sub.foo.机构 | foo@foo.机构 | | `组织机构` | http://foo.组织机构 | www.foo.组织机构 | sub.foo.组织机构 | foo@foo.组织机构 | | `健康` | http://foo.健康 | www.foo.健康 | sub.foo.健康 | foo@foo.健康 | | `ไทย` | http://foo.ไทย | www.foo.ไทย | sub.foo.ไทย | foo@foo.ไทย | | `سورية` | http://foo.سورية | www.foo.سورية | sub.foo.سورية | foo@foo.سورية | | `招聘` | http://foo.招聘 | www.foo.招聘 | sub.foo.招聘 | foo@foo.招聘 | | `рус` | http://foo.рус | www.foo.рус | sub.foo.рус | foo@foo.рус | | `рф` | http://foo.рф | www.foo.рф | sub.foo.рф | foo@foo.рф | | `珠宝` | http://foo.珠宝 | www.foo.珠宝 | sub.foo.珠宝 | foo@foo.珠宝 | | `تونس` | http://foo.تونس | www.foo.تونس | sub.foo.تونس | foo@foo.تونس | | `大拿` | http://foo.大拿 | www.foo.大拿 | sub.foo.大拿 | foo@foo.大拿 | | `みんな` | http://foo.みんな | www.foo.みんな | sub.foo.みんな | foo@foo.みんな | | `グーグル` | http://foo.グーグル | www.foo.グーグル | sub.foo.グーグル | foo@foo.グーグル | | `ευ` | http://foo.ευ | www.foo.ευ | sub.foo.ευ | foo@foo.ευ | | `ελ` | http://foo.ελ | www.foo.ελ | sub.foo.ελ | foo@foo.ελ | | `世界` | http://foo.世界 | www.foo.世界 | sub.foo.世界 | foo@foo.世界 | | `書籍` | http://foo.書籍 | www.foo.書籍 | sub.foo.書籍 | foo@foo.書籍 | | `ഭാരതം` | http://foo.ഭാരതം | www.foo.ഭാരതം | sub.foo.ഭാരതം | foo@foo.ഭാരതം | | `ਭਾਰਤ` | http://foo.ਭਾਰਤ | www.foo.ਭਾਰਤ | sub.foo.ਭਾਰਤ | foo@foo.ਭਾਰਤ | | `网址` | http://foo.网址 | www.foo.网址 | sub.foo.网址 | foo@foo.网址 | | `닷넷` | http://foo.닷넷 | www.foo.닷넷 | sub.foo.닷넷 | foo@foo.닷넷 | | `コム` | http://foo.コム | www.foo.コム | sub.foo.コム | foo@foo.コム | | `天主教` | http://foo.天主教 | www.foo.天主教 | sub.foo.天主教 | foo@foo.天主教 | | `游戏` | http://foo.游戏 | www.foo.游戏 | sub.foo.游戏 | foo@foo.游戏 | | `vermögensberater` | http://foo.vermögensberater | www.foo.vermögensberater | sub.foo.vermögensberater | foo@foo.vermögensberater | | `vermögensberatung` | http://foo.vermögensberatung | www.foo.vermögensberatung | sub.foo.vermögensberatung | foo@foo.vermögensberatung | | `企业` | http://foo.企业 | www.foo.企业 | sub.foo.企业 | foo@foo.企业 | | `信息` | http://foo.信息 | www.foo.信息 | sub.foo.信息 | foo@foo.信息 | | `嘉里大酒店` | http://foo.嘉里大酒店 | www.foo.嘉里大酒店 | sub.foo.嘉里大酒店 | foo@foo.嘉里大酒店 | | `嘉里` | http://foo.嘉里 | www.foo.嘉里 | sub.foo.嘉里 | foo@foo.嘉里 | | `مصر` | http://foo.مصر | www.foo.مصر | sub.foo.مصر | foo@foo.مصر | | `قطر` | http://foo.قطر | www.foo.قطر | sub.foo.قطر | foo@foo.قطر | | `广东` | http://foo.广东 | www.foo.广东 | sub.foo.广东 | foo@foo.广东 | | `இலங்கை` | http://foo.இலங்கை | www.foo.இலங்கை | sub.foo.இலங்கை | foo@foo.இலங்கை | | `இந்தியா` | http://foo.இந்தியா | www.foo.இந்தியா | sub.foo.இந்தியா | foo@foo.இந்தியா | | `հայ` | http://foo.հայ | www.foo.հայ | sub.foo.հայ | foo@foo.հայ | | `新加坡` | http://foo.新加坡 | www.foo.新加坡 | sub.foo.新加坡 | foo@foo.新加坡 | | `فلسطين` | http://foo.فلسطين | www.foo.فلسطين | sub.foo.فلسطين | foo@foo.فلسطين | | `政务` | http://foo.政务 | www.foo.政务 | sub.foo.政务 | foo@foo.政务 | | `xxx` | http://foo.xxx | www.foo.xxx | sub.foo.xxx | foo@foo.xxx | | `xyz` | http://foo.xyz | www.foo.xyz | sub.foo.xyz | foo@foo.xyz | | `yachts` | http://foo.yachts | www.foo.yachts | sub.foo.yachts | foo@foo.yachts | | `yahoo` | http://foo.yahoo | www.foo.yahoo | sub.foo.yahoo | foo@foo.yahoo | | `yamaxun` | http://foo.yamaxun | www.foo.yamaxun | sub.foo.yamaxun | foo@foo.yamaxun | | `yandex` | http://foo.yandex | www.foo.yandex | sub.foo.yandex | foo@foo.yandex | | `ye` | http://foo.ye | www.foo.ye | sub.foo.ye | foo@foo.ye | | `yodobashi` | http://foo.yodobashi | www.foo.yodobashi | sub.foo.yodobashi | foo@foo.yodobashi | | `yoga` | http://foo.yoga | www.foo.yoga | sub.foo.yoga | foo@foo.yoga | | `yokohama` | http://foo.yokohama | www.foo.yokohama | sub.foo.yokohama | foo@foo.yokohama | | `you` | http://foo.you | www.foo.you | sub.foo.you | foo@foo.you | | `youtube` | http://foo.youtube | www.foo.youtube | sub.foo.youtube | foo@foo.youtube | | `yt` | http://foo.yt | www.foo.yt | sub.foo.yt | foo@foo.yt | | `yun` | http://foo.yun | www.foo.yun | sub.foo.yun | foo@foo.yun | | `za` | http://foo.za | www.foo.za | sub.foo.za | foo@foo.za | | `zappos` | http://foo.zappos | www.foo.zappos | sub.foo.zappos | foo@foo.zappos | | `zara` | http://foo.zara | www.foo.zara | sub.foo.zara | foo@foo.zara | | `zero` | http://foo.zero | www.foo.zero | sub.foo.zero | foo@foo.zero | | `zip` | http://foo.zip | www.foo.zip | sub.foo.zip | foo@foo.zip | | `zm` | http://foo.zm | www.foo.zm | sub.foo.zm | foo@foo.zm | | `zone` | http://foo.zone | www.foo.zone | sub.foo.zone | foo@foo.zone | | `zuerich` | http://foo.zuerich | www.foo.zuerich | sub.foo.zuerich | foo@foo.zuerich | | `zw` | http://foo.zw | www.foo.zw | sub.foo.zw | foo@foo.zw | | TLD | Protocol | WWW | Subdomain | Email | | --- | :-----: | :---: | :---: | :---: | | `unknown` | http://foo.unknown | www.foo.unknown | sub.foo.unknown | foo@foo.unknown | ```
Preact

I'm getting the following with the the latest preact-based fiddle provided (with the flash plugin disabled though):

preact

Basically Preact takes ~60ms to work its magic, which seems fairly high to me if subtrees are cached properly, maybe there could be a bug in the caching logic. But also there's a huge chunk of style recalculation and layout happening, I'm not sure if that's caused by Preact itself or something else though.

Rough DOM-based diffing

This is what I'm getting with the rough diff function I was using before:

replace

Basically the diffing itself in this specific use case doesn't take much time at all (most of those 2ms are actually spent doing other things), but there's still a huge style recalculation chunk. I'm seeing the same result independently of using removeChild+insertBefore or replaceChild (which I didn't know existed and I was hoping was going to be more optimized).

Recursive DOM-based diffing

This is what I'm getting instead if top-level nodes aren't entirely swapped in and out but they are patched:

patch

There's basically nothing happening really, the chunk on the left is about compiling the markdown, the diffing itself takes almost no time, and almost everything else is due to unrelated app-level things.

This is the updated diff function I'm using:

diff.ts ```ts import nanomorph from 'nanomorph'; // Simple diffing algorithm optimized for lists -- unchanged nodes are not touched at all const diff = ( parent: HTMLElement, prev: ArrayLike, next: ArrayLike ): void => { /* VARIABLES */ const prevLength = prev.length; const nextLength = next.length; const compLength = Math.min ( prevLength, nextLength ); /* START OFFSET */ // Counting how many nodes from the start didn't change let startOffset = 0; for ( let i = 0; i < compLength; i++ ) { if ( prev[i] !== next[i] ) break; startOffset += 1; } /* END OFFSET */ // Counting how many nodes from the end didn't change let endOffset = 0; for ( let i = 0; i < ( compLength - startOffset ); i++ ) { if ( prev[prevLength - 1 - i] !== next[nextLength - 1 - i] ) break; endOffset += 1; } if ( prevLength === nextLength ) { /* PATCHING */ // Patching old nodes to look like the new ones const replaceLength = prevLength - startOffset - endOffset; for ( let i = replaceLength; i > 0; i-- ) { nanomorph ( prev[startOffset - 1 + i], next[startOffset - 1 + i] ); } } else { /* REMOVING */ // Removing nodes that changed const removeLength = prevLength - startOffset - endOffset; for ( let i = removeLength; i > 0; i-- ) { parent.removeChild ( prev[startOffset - 1 + i] ); } /* INSERTING */ // Inserting nodes that changed const insertLength = nextLength - startOffset - endOffset; const anchor = prev[startOffset]; for ( let i = 0; i < insertLength; i++ ) { parent.insertBefore ( next[startOffset + i], anchor ); } } }; export default diff; ```

To summarize DOM-based recursive diffing seems much much faster both when considering the diffing itself and also everything that happens later in the rendering pipeline of the browser. I'm not sure if there are some bugs in the fiddle that once fixed could make it just as fast, and it seems unlikely to me that it could be made the fastest since almost nothing is happening with DOM-based recursive diffing already.

fabiospampinato commented 2 years ago

It might be worth noting that nanomorph in particular seems something between broken and super slow in the general case though. I should find something better.

fabiospampinato commented 2 years ago

@developit I think I've spotted some issues with the component for returning raw dom nodes:

function DomNode({ children }) {
  this.shouldComponentUpdate = () => false;
  return Object.defineProperty(h(children.localName), '__e', { get: () => children, set: Object });
}
  1. It throws for text nodes if preact/debug is loaded, because children.localName would be undefined in that case and preact/debug is explicitly checking for that.
  2. It kinda works for text nodes if I use null or span as the node type, but then I get some quirks during development, multiple nodes get injected in the page with each HMR event basically. Maybe I should detach the child node manually when the component is unmounted?

https://user-images.githubusercontent.com/1812093/139543595-e57532fc-7657-4b35-b6bb-5e5961900e35.mov


Update: using null + detaching the node manually when the component unmounts seems to work, I can't spot any issues with it.

developit commented 2 years ago

@fabiospampinato that makes sense - Preact uses null internally for text nodes as the vnode type.

djalmajr commented 7 months ago

function DomNode({ children }) {
  this.shouldComponentUpdate = () => false;
  return Object.defineProperty(h(children.localName), '__e', { get: () => children, set: Object });
}

Awesome!! 🎉 Just one question: is it safe to use this approach long term? Can I trust this implementation or will this change in minor releases? I know it's working so far, but it doesn't hurt to ask 😬 (I don't know what that "__e" means... It seems to me it's something internal)

rschristian commented 7 months ago

or will this change in minor releases?

It's stable.

I don't know what that "__e" means... It seems to me it's something internal

It's the __dom property, which is set to be consistently mangled to __e. This is done specifically to facilitate this sort of thing.

djalmajr commented 7 months ago

or will this change in minor releases?

It's stable.

I don't know what that "__e" means... It seems to me it's something internal

It's the __dom property, which is set to be consistently mangled to __e. This is done specifically to facilitate this sort of thing.

Thanks a lot!