diff --git a/apps/api/src/controllers/event.controller.ts b/apps/api/src/controllers/event.controller.ts index 601d1f6a..2ce8ef35 100644 --- a/apps/api/src/controllers/event.controller.ts +++ b/apps/api/src/controllers/event.controller.ts @@ -1,95 +1,24 @@ -import { logger, logInfo, noop } from '@/utils/logger'; import { getClientIp, parseIp } from '@/utils/parseIp'; -import { getReferrerWithQuery, parseReferrer } from '@/utils/parseReferrer'; -import { isUserAgentSet, parseUserAgent } from '@/utils/parseUserAgent'; -import { isSameDomain, parsePath } from '@/utils/url'; import type { FastifyReply, FastifyRequest } from 'fastify'; -import { omit } from 'ramda'; -import { escape } from 'sqlstring'; -import { v4 as uuid } from 'uuid'; -import { generateDeviceId, getTime, toISOString } from '@openpanel/common'; -import type { IServiceCreateEventPayload } from '@openpanel/db'; -import { createEvent, getEvents, getSalts } from '@openpanel/db'; -import type { JobsOptions } from '@openpanel/queue'; +import { generateDeviceId } from '@openpanel/common'; +import { getSalts } from '@openpanel/db'; import { eventsQueue } from '@openpanel/queue'; -import { findJobByPrefix } from '@openpanel/queue/src/utils'; import type { PostEventPayload } from '@openpanel/sdk'; -const SESSION_TIMEOUT = 1000 * 60 * 30; -const SESSION_END_TIMEOUT = SESSION_TIMEOUT + 1000; - -async function withTiming(name: string, promise: Promise) { - try { - const start = Date.now(); - const res = await promise; - const end = Date.now(); - if (end - start > 1000) { - logInfo(`${name} took too long: ${end - start}ms`); - } - return res; - } catch (error) { - logger.error(error, `Failed to execute ${name}`); - throw error; - } -} - -function createContextLogger(request: FastifyRequest) { - const _log = request.log.child({ - requestId: request.id, - requestUrl: request.url, - headers: request.headers, - projectId: request.projectId, - }); - let obj: Record = {}; - return { - add: (key: string, value: unknown) => (obj[key] = value), - addObject: (key: string, value: Record) => { - obj = { ...obj, ...value }; - }, - send: (message: string, value: Record) => - _log.info({ ...obj, ...value }, message), - }; -} - -const GLOBAL_PROPERTIES = ['__path', '__referrer']; - export async function postEvent( request: FastifyRequest<{ Body: PostEventPayload; }>, reply: FastifyReply ) { - const contextLogger = createContextLogger(request); - let deviceId: string | null = null; - const { projectId, body } = request; - const properties = body.properties ?? {}; - const getProperty = (name: string): string | undefined => { - // replace thing is just for older sdks when we didn't have `__` - // remove when kiddokitchen app (24.09.02) is not used anymore - return ( - ((properties[name] || properties[name.replace('__', '')]) as - | string - | null - | undefined) ?? undefined - ); - }; - const profileId = body.profileId ?? ''; - const createdAt = new Date(body.timestamp); - const url = getProperty('__path'); - const { path, hash, query } = parsePath(url); - const referrer = isSameDomain(getProperty('__referrer'), url) - ? null - : parseReferrer(getProperty('__referrer')); - const utmReferrer = getReferrerWithQuery(query); const ip = getClientIp(request)!; - const origin = request.headers.origin!; const ua = request.headers['user-agent']!; - const uaInfo = parseUserAgent(ua); - const [geo, salts] = await Promise.all([parseIp(ip), getSalts()]); + const origin = request.headers.origin!; + const salts = await getSalts(); const currentDeviceId = generateDeviceId({ salt: salts.current, - origin, + origin: origin, ip, ua, }); @@ -100,237 +29,20 @@ export async function postEvent( ua, }); - const isServerEvent = !isUserAgentSet(ua); - - if (isServerEvent) { - const [event] = await withTiming( - 'Get last event (server-event)', - getEvents( - `SELECT * FROM events WHERE name = 'screen_view' AND profile_id = ${escape(profileId)} AND project_id = ${escape(projectId)} ORDER BY created_at DESC LIMIT 1` - ) - ); - - const payload: Omit = { - name: body.name, - deviceId: event?.deviceId || '', - sessionId: event?.sessionId || '', - profileId, - projectId, - properties: Object.assign({}, omit(GLOBAL_PROPERTIES, properties)), - createdAt, - country: event?.country || geo.country || '', - city: event?.city || geo.city || '', - region: event?.region || geo.region || '', - continent: event?.continent || geo.continent || '', - os: event?.os ?? '', - osVersion: event?.osVersion ?? '', - browser: event?.browser ?? '', - browserVersion: event?.browserVersion ?? '', - device: event?.device ?? '', - brand: event?.brand ?? '', - model: event?.model ?? '', - duration: 0, - path: event?.path ?? '', - referrer: event?.referrer ?? '', - referrerName: event?.referrerName ?? '', - referrerType: event?.referrerType ?? '', - profile: undefined, - meta: undefined, - }; - - contextLogger.send('server event is queued', { - ip, - origin, - ua, - uaInfo, - referrer, - profileId, - projectId, - deviceId, - path, - payload, - prevEvent: event, - }); - - eventsQueue.add('event', { - type: 'createEvent', - payload, - }); - return reply.status(200).send(''); - } - - const [sessionEndJobCurrentDeviceId, sessionEndJobPreviousDeviceId] = - await withTiming( - 'Get geo and jobs from queue', - Promise.all([ - findJobByPrefix( - eventsQueue, - `sessionEnd:${projectId}:${currentDeviceId}:` - ), - findJobByPrefix( - eventsQueue, - `sessionEnd:${projectId}:${previousDeviceId}:` - ), - ]) - ); - - const createSessionStart = - !sessionEndJobCurrentDeviceId && !sessionEndJobPreviousDeviceId; - - if (sessionEndJobCurrentDeviceId && !sessionEndJobPreviousDeviceId) { - deviceId = currentDeviceId; - const diff = Date.now() - sessionEndJobCurrentDeviceId.timestamp; - sessionEndJobCurrentDeviceId.changeDelay(diff + SESSION_END_TIMEOUT); - } else if (!sessionEndJobCurrentDeviceId && sessionEndJobPreviousDeviceId) { - deviceId = previousDeviceId; - const diff = Date.now() - sessionEndJobPreviousDeviceId.timestamp; - sessionEndJobPreviousDeviceId.changeDelay(diff + SESSION_END_TIMEOUT); - } else { - deviceId = currentDeviceId; - // Queue session end - eventsQueue.add( - 'event', - { - type: 'createSessionEnd', - payload: { - deviceId, - }, + eventsQueue.add('event', { + type: 'incomingEvent', + payload: { + projectId: request.projectId, + headers: { + origin, + ua, }, - { - delay: SESSION_END_TIMEOUT, - jobId: `sessionEnd:${projectId}:${deviceId}:${Date.now()}`, - } - ); - } - - const [[sessionStartEvent], prevEventJob] = await withTiming( - 'Get session start event', - Promise.all([ - getEvents( - `SELECT * FROM events WHERE name = 'session_start' AND device_id = ${escape(deviceId)} AND project_id = ${escape(projectId)} ORDER BY created_at DESC LIMIT 1` - ), - findJobByPrefix(eventsQueue, `event:${projectId}:${deviceId}:`), - ]) - ); - - const payload: Omit = { - name: body.name, - deviceId, - profileId, - projectId, - sessionId: createSessionStart ? uuid() : sessionStartEvent?.sessionId ?? '', - properties: Object.assign({}, omit(GLOBAL_PROPERTIES, properties), { - __hash: hash, - __query: query, - }), - createdAt, - country: geo.country, - city: geo.city, - region: geo.region, - continent: geo.continent, - os: uaInfo.os, - osVersion: uaInfo.osVersion, - browser: uaInfo.browser, - browserVersion: uaInfo.browserVersion, - device: uaInfo.device, - brand: uaInfo.brand, - model: uaInfo.model, - duration: 0, - path: path, - referrer: referrer?.url, - referrerName: referrer?.name || utmReferrer?.name || '', - referrerType: referrer?.type || utmReferrer?.type || '', - profile: undefined, - meta: undefined, - }; - - const isDelayed = prevEventJob ? await prevEventJob?.isDelayed() : false; - - if (isDelayed && prevEventJob && prevEventJob.data.type === 'createEvent') { - const prevEvent = prevEventJob.data.payload; - const duration = getTime(payload.createdAt) - getTime(prevEvent.createdAt); - contextLogger.add('prevEvent', prevEvent); - - // Set path from prev screen_view event if current event is not a screen_view - if (payload.name != 'screen_view') { - payload.path = prevEvent.path; - } - - if (payload.name === 'screen_view') { - if (duration < 0) { - contextLogger.send('duration is wrong', { - payload, - duration, - }); - } else { - // Skip update duration if it's wrong - // Seems like request is not in right order - await withTiming( - 'Update previous job with duration', - prevEventJob.updateData({ - type: 'createEvent', - payload: { - ...prevEvent, - duration, - }, - }) - ); - } - - await withTiming('Promote previous job', prevEventJob.promote()); - } - } else if (payload.name !== 'screen_view') { - contextLogger.send('no previous job', { - prevEventJob, - payload, - }); - } - - if (createSessionStart) { - // We do not need to queue session_start - await withTiming( - 'Create session start event', - createEvent({ - ...payload, - name: 'session_start', - // @ts-expect-error - createdAt: toISOString(getTime(payload.createdAt) - 100), - }) - ); - } - - const options: JobsOptions = {}; - if (payload.name === 'screen_view') { - options.delay = SESSION_TIMEOUT; - options.jobId = `event:${projectId}:${deviceId}:${Date.now()}`; - } - - contextLogger.send('event is queued', { - ip, - origin, - ua, - uaInfo, - referrer, - profileId, - projectId, - deviceId, - geo, - sessionStartEvent, - path, - payload, + event: request.body, + geo: await parseIp(ip), + currentDeviceId, + previousDeviceId, + }, }); - // Queue current event - eventsQueue - .add( - 'event', - { - type: 'createEvent', - payload, - }, - options - ) - .catch(noop('Failed to queue event')); - - reply.status(202).send(deviceId); + reply.status(202).send('ok'); } diff --git a/apps/worker/package.json b/apps/worker/package.json index f56f9d04..6a4fb39a 100644 --- a/apps/worker/package.json +++ b/apps/worker/package.json @@ -13,13 +13,16 @@ "dependencies": { "@bull-board/api": "^5.13.0", "@bull-board/express": "^5.13.0", + "@openpanel/common": "workspace:*", "@openpanel/db": "workspace:*", "@openpanel/queue": "workspace:*", - "@openpanel/common": "workspace:*", "@openpanel/redis": "workspace:*", "bullmq": "^5.1.1", "express": "^4.18.2", - "ramda": "^0.29.1" + "ramda": "^0.29.1", + "sqlstring": "^2.3.3", + "ua-parser-js": "^1.0.37", + "uuid": "^9.0.1" }, "devDependencies": { "@openpanel/eslint-config": "workspace:*", @@ -27,6 +30,9 @@ "@openpanel/tsconfig": "workspace:*", "@types/express": "^4.17.21", "@types/ramda": "^0.29.6", + "@types/sqlstring": "^2.3.2", + "@types/ua-parser-js": "^0.7.39", + "@types/uuid": "^9.0.8", "eslint": "^8.48.0", "prettier": "^3.0.3", "tsup": "^7.2.0", diff --git a/apps/worker/src/jobs/events.incoming-event.ts b/apps/worker/src/jobs/events.incoming-event.ts new file mode 100644 index 00000000..a171b0a5 --- /dev/null +++ b/apps/worker/src/jobs/events.incoming-event.ts @@ -0,0 +1,258 @@ +import { getReferrerWithQuery, parseReferrer } from '@/utils/parse-referrer'; +import { isUserAgentSet, parseUserAgent } from '@/utils/parse-user-agent'; +import { isSameDomain, parsePath } from '@/utils/url'; +import type { Job, JobsOptions } from 'bullmq'; +import { omit } from 'ramda'; +import { escape } from 'sqlstring'; +import { v4 as uuid } from 'uuid'; + +import { getTime, toISOString } from '@openpanel/common'; +import type { IServiceCreateEventPayload } from '@openpanel/db'; +import { createEvent, getEvents } from '@openpanel/db'; +import { findJobByPrefix } from '@openpanel/queue'; +import { eventsQueue } from '@openpanel/queue/src/queues'; +import type { EventsQueuePayloadIncomingEvent } from '@openpanel/queue/src/queues'; + +const GLOBAL_PROPERTIES = ['__path', '__referrer']; +const SESSION_TIMEOUT = 1000 * 60 * 30; +const SESSION_END_TIMEOUT = SESSION_TIMEOUT + 1000; + +export async function incomingEvent(job: Job) { + const { + geo, + event: body, + headers, + projectId, + currentDeviceId, + previousDeviceId, + } = job.data.payload; + let deviceId: string | null = null; + + const properties = body.properties ?? {}; + const getProperty = (name: string): string | undefined => { + // replace thing is just for older sdks when we didn't have `__` + // remove when kiddokitchen app (24.09.02) is not used anymore + return ( + ((properties[name] || properties[name.replace('__', '')]) as + | string + | null + | undefined) ?? undefined + ); + }; + const { origin, ua } = headers; + const profileId = body.profileId ?? ''; + const createdAt = new Date(body.timestamp); + const url = getProperty('__path'); + const { path, hash, query } = parsePath(url); + const referrer = isSameDomain(getProperty('__referrer'), url) + ? null + : parseReferrer(getProperty('__referrer')); + const utmReferrer = getReferrerWithQuery(query); + const uaInfo = ua ? parseUserAgent(ua) : null; + const isServerEvent = ua ? !isUserAgentSet(ua) : true; + + if (isServerEvent) { + const [event] = await getEvents( + `SELECT * FROM events WHERE name = 'screen_view' AND profile_id = ${escape(profileId)} AND project_id = ${escape(projectId)} ORDER BY created_at DESC LIMIT 1` + ); + + const payload: Omit = { + name: body.name, + deviceId: event?.deviceId || '', + sessionId: event?.sessionId || '', + profileId, + projectId, + properties: Object.assign({}, omit(GLOBAL_PROPERTIES, properties)), + createdAt, + country: event?.country || geo.country || '', + city: event?.city || geo.city || '', + region: event?.region || geo.region || '', + continent: event?.continent || geo.continent || '', + os: event?.os ?? '', + osVersion: event?.osVersion ?? '', + browser: event?.browser ?? '', + browserVersion: event?.browserVersion ?? '', + device: event?.device ?? '', + brand: event?.brand ?? '', + model: event?.model ?? '', + duration: 0, + path: event?.path ?? '', + referrer: event?.referrer ?? '', + referrerName: event?.referrerName ?? '', + referrerType: event?.referrerType ?? '', + profile: undefined, + meta: undefined, + }; + + return createEvent(payload); + } + + const [sessionEndJobCurrentDeviceId, sessionEndJobPreviousDeviceId] = + await Promise.all([ + findJobByPrefix( + eventsQueue, + `sessionEnd:${projectId}:${currentDeviceId}:` + ), + findJobByPrefix( + eventsQueue, + `sessionEnd:${projectId}:${previousDeviceId}:` + ), + ]); + + const createSessionStart = + !sessionEndJobCurrentDeviceId && !sessionEndJobPreviousDeviceId; + + if (sessionEndJobCurrentDeviceId && !sessionEndJobPreviousDeviceId) { + deviceId = currentDeviceId; + const diff = Date.now() - sessionEndJobCurrentDeviceId.timestamp; + sessionEndJobCurrentDeviceId.changeDelay(diff + SESSION_END_TIMEOUT); + } else if (!sessionEndJobCurrentDeviceId && sessionEndJobPreviousDeviceId) { + deviceId = previousDeviceId; + const diff = Date.now() - sessionEndJobPreviousDeviceId.timestamp; + sessionEndJobPreviousDeviceId.changeDelay(diff + SESSION_END_TIMEOUT); + } else { + deviceId = currentDeviceId; + // Queue session end + eventsQueue.add( + 'event', + { + type: 'createSessionEnd', + payload: { + deviceId, + }, + }, + { + delay: SESSION_END_TIMEOUT, + jobId: `sessionEnd:${projectId}:${deviceId}:${Date.now()}`, + } + ); + } + + const [[sessionStartEvent], prevEventJob] = await Promise.all([ + getEvents( + `SELECT * FROM events WHERE name = 'session_start' AND device_id = ${escape(deviceId)} AND project_id = ${escape(projectId)} ORDER BY created_at DESC LIMIT 1` + ), + findJobByPrefix(eventsQueue, `event:${projectId}:${deviceId}:`), + ]); + + const payload: Omit = { + name: body.name, + deviceId, + profileId, + projectId, + sessionId: createSessionStart ? uuid() : sessionStartEvent?.sessionId ?? '', + properties: Object.assign({}, omit(GLOBAL_PROPERTIES, properties), { + __hash: hash, + __query: query, + }), + createdAt, + country: geo.country, + city: geo.city, + region: geo.region, + continent: geo.continent, + os: uaInfo?.os ?? '', + osVersion: uaInfo?.osVersion ?? '', + browser: uaInfo?.browser ?? '', + browserVersion: uaInfo?.browserVersion ?? '', + device: uaInfo?.device ?? '', + brand: uaInfo?.brand ?? '', + model: uaInfo?.model ?? '', + duration: 0, + path: path, + referrer: referrer?.url, + referrerName: referrer?.name || utmReferrer?.name || '', + referrerType: referrer?.type || utmReferrer?.type || '', + profile: undefined, + meta: undefined, + }; + + const isDelayed = prevEventJob ? await prevEventJob?.isDelayed() : false; + + if (isDelayed && prevEventJob && prevEventJob.data.type === 'createEvent') { + const prevEvent = prevEventJob.data.payload; + const duration = getTime(payload.createdAt) - getTime(prevEvent.createdAt); + job.log(`prevEvent ${JSON.stringify(prevEvent, null, 2)}`); + + // Set path from prev screen_view event if current event is not a screen_view + if (payload.name != 'screen_view') { + payload.path = prevEvent.path; + } + + if (payload.name === 'screen_view') { + if (duration < 0) { + job.log(`prevEvent ${JSON.stringify(prevEvent, null, 2)}`); + } else { + // Skip update duration if it's wrong + // Seems like request is not in right order + await prevEventJob.updateData({ + type: 'createEvent', + payload: { + ...prevEvent, + duration, + }, + }); + } + + await prevEventJob.promote(); + } + } else if (payload.name !== 'screen_view') { + job.log( + `no previous job ${JSON.stringify( + { + prevEventJob, + payload, + }, + null, + 2 + )}` + ); + } + + if (createSessionStart) { + // We do not need to queue session_start + await createEvent({ + ...payload, + name: 'session_start', + // @ts-expect-error + createdAt: toISOString(getTime(payload.createdAt) - 100), + }); + } + + const options: JobsOptions = {}; + if (payload.name === 'screen_view') { + options.delay = SESSION_TIMEOUT; + options.jobId = `event:${projectId}:${deviceId}:${Date.now()}`; + } + + job.log( + `event is queued ${JSON.stringify( + { + origin, + ua, + uaInfo, + referrer, + profileId, + projectId, + deviceId, + geo, + sessionStartEvent, + path, + payload, + }, + null, + 2 + )}` + ); + + // Queue event instead of creating it, + // since we want to update duration if we get more events in the same session + // The event will only be delayed if it's a screen_view event + return eventsQueue.add( + 'event', + { + type: 'createEvent', + payload, + }, + options + ); +} diff --git a/apps/worker/src/jobs/events.ts b/apps/worker/src/jobs/events.ts index 08998f83..82acc921 100644 --- a/apps/worker/src/jobs/events.ts +++ b/apps/worker/src/jobs/events.ts @@ -4,20 +4,23 @@ import { createEvent } from '@openpanel/db'; import type { EventsQueuePayload, EventsQueuePayloadCreateSessionEnd, + EventsQueuePayloadIncomingEvent, } from '@openpanel/queue/src/queues'; import { createSessionEnd } from './events.create-session-end'; +import { incomingEvent } from './events.incoming-event'; export async function eventsJob(job: Job) { switch (job.data.type) { + case 'incomingEvent': { + return await incomingEvent(job as Job); + } case 'createEvent': { if (job.attemptsStarted > 1 && job.data.payload.duration < 0) { job.data.payload.duration = 0; } return await createEvent(job.data.payload); } - } - switch (job.data.type) { case 'createSessionEnd': { return await createSessionEnd( job as Job diff --git a/apps/worker/src/referrers/index.ts b/apps/worker/src/referrers/index.ts new file mode 100644 index 00000000..3bcba5ee --- /dev/null +++ b/apps/worker/src/referrers/index.ts @@ -0,0 +1,2684 @@ +// This file is generated by the script get-referrers.ts + +// The data is fetch from snowplow-referer-parser https://github.com/snowplow-referer-parser/referer-parser +// The orginal referers.yml is based on Piwik's SearchEngines.php and Socials.php, copyright 2012 Matthieu Aubry and available under the GNU General Public License v3. + +const referrers: Record = { + 'support.google.com': { type: 'unknown', name: 'Google' }, + 'developers.google.com': { type: 'unknown', name: 'Google' }, + 'maps.google.com': { type: 'unknown', name: 'Google' }, + 'accounts.google.com': { type: 'unknown', name: 'Google' }, + 'drive.google.com': { type: 'unknown', name: 'Google' }, + 'sites.google.com': { type: 'unknown', name: 'Google' }, + 'groups.google.com': { type: 'unknown', name: 'Google' }, + 'groups.google.co.uk': { type: 'unknown', name: 'Google' }, + 'maps.yandex.ru': { type: 'unknown', name: 'Yandex Maps' }, + 'maps.yandex.ua': { type: 'unknown', name: 'Yandex Maps' }, + 'maps.yandex.com': { type: 'unknown', name: 'Yandex Maps' }, + 'maps.yandex.by': { type: 'unknown', name: 'Yandex Maps' }, + 'n.maps.yandex.ru': { type: 'unknown', name: 'Yandex Maps' }, + 'finance.yahoo.com': { type: 'unknown', name: 'Yahoo!' }, + 'news.yahoo.com': { type: 'unknown', name: 'Yahoo!' }, + 'eurosport.yahoo.com': { type: 'unknown', name: 'Yahoo!' }, + 'sports.yahoo.com': { type: 'unknown', name: 'Yahoo!' }, + 'astrology.yahoo.com': { type: 'unknown', name: 'Yahoo!' }, + 'travel.yahoo.com': { type: 'unknown', name: 'Yahoo!' }, + 'answers.yahoo.com': { type: 'unknown', name: 'Yahoo!' }, + 'screen.yahoo.com': { type: 'unknown', name: 'Yahoo!' }, + 'weather.yahoo.com': { type: 'unknown', name: 'Yahoo!' }, + 'messenger.yahoo.com': { type: 'unknown', name: 'Yahoo!' }, + 'games.yahoo.com': { type: 'unknown', name: 'Yahoo!' }, + 'shopping.yahoo.net': { type: 'unknown', name: 'Yahoo!' }, + 'movies.yahoo.com': { type: 'unknown', name: 'Yahoo!' }, + 'cars.yahoo.com': { type: 'unknown', name: 'Yahoo!' }, + 'lifestyle.yahoo.com': { type: 'unknown', name: 'Yahoo!' }, + 'omg.yahoo.com': { type: 'unknown', name: 'Yahoo!' }, + 'match.yahoo.net': { type: 'unknown', name: 'Yahoo!' }, + 'www.talktalk.co.uk': { type: 'search', name: 'TalkTalk' }, + '1.cz': { type: 'search', name: '1.cz' }, + 'search.softonic.com': { type: 'search', name: 'Softonic' }, + 'gais.cs.ccu.edu.tw': { type: 'search', name: 'GAIS' }, + 'search.freecause.com': { type: 'search', name: 'Freecause' }, + 'so.360.cn': { type: 'search', name: '360.cn' }, + 'www.so.com': { type: 'search', name: '360.cn' }, + 'rpmfind.net': { type: 'search', name: 'RPMFind' }, + 'fr2.rpmfind.net': { type: 'search', name: 'RPMFind' }, + 'serach.comcast.net': { type: 'search', name: 'Comcast' }, + 'search.ke.voila.fr': { type: 'search', name: 'Voila' }, + 'www.lemoteur.fr': { type: 'search', name: 'Voila' }, + 'search.nifty.com': { type: 'search', name: 'Nifty' }, + 'searchatlas.centrum.cz': { type: 'search', name: 'Atlas' }, + '2gis.ru': { type: 'search', name: '2gis' }, + 'www.2gis.ru': { type: 'search', name: '2gis' }, + 'link.2gis.ru': { type: 'search', name: '2gis' }, + 'www.link.2gis.ru': { type: 'search', name: '2gis' }, + 'lo.st': { type: 'search', name: 'Lo.st' }, + 'www1.dastelefonbuch.de': { type: 'search', name: 'DasTelefonbuch' }, + 'www.fireball.de': { type: 'search', name: 'Fireball' }, + 'search.1und1.de': { type: 'search', name: '1und1' }, + 'ricerca.virgilio.it': { type: 'search', name: 'Virgilio' }, + 'ricercaimmagini.virgilio.it': { type: 'search', name: 'Virgilio' }, + 'ricercavideo.virgilio.it': { type: 'search', name: 'Virgilio' }, + 'ricercanews.virgilio.it': { type: 'search', name: 'Virgilio' }, + 'mobile.virgilio.it': { type: 'search', name: 'Virgilio' }, + 'search.media.telstra.com.au': { type: 'search', name: 'Telstra' }, + 'www.web.nl': { type: 'search', name: 'Web.nl' }, + 'www.plazoo.com': { type: 'search', name: 'Plazoo' }, + 'www.goyellow.de': { type: 'search', name: 'Goyellow.de' }, + 'search.aol.com': { type: 'search', name: 'AOL' }, + 'search.aol.it': { type: 'search', name: 'AOL' }, + 'aolsearch.aol.com': { type: 'search', name: 'AOL' }, + 'aolsearch.com': { type: 'search', name: 'AOL' }, + 'www.aolrecherche.aol.fr': { type: 'search', name: 'AOL' }, + 'www.aolrecherches.aol.fr': { type: 'search', name: 'AOL' }, + 'www.aolimages.aol.fr': { type: 'search', name: 'AOL' }, + 'aim.search.aol.com': { type: 'search', name: 'AOL' }, + 'www.recherche.aol.fr': { type: 'search', name: 'AOL' }, + 'recherche.aol.fr': { type: 'search', name: 'AOL' }, + 'find.web.aol.com': { type: 'search', name: 'AOL' }, + 'recherche.aol.ca': { type: 'search', name: 'AOL' }, + 'aolsearch.aol.co.uk': { type: 'search', name: 'AOL' }, + 'search.aol.co.uk': { type: 'search', name: 'AOL' }, + 'aolrecherche.aol.fr': { type: 'search', name: 'AOL' }, + 'sucheaol.aol.de': { type: 'search', name: 'AOL' }, + 'suche.aol.de': { type: 'search', name: 'AOL' }, + 'suche.aolsvc.de': { type: 'search', name: 'AOL' }, + 'aolbusqueda.aol.com.mx': { type: 'search', name: 'AOL' }, + 'alicesuche.aol.de': { type: 'search', name: 'AOL' }, + 'alicesuchet.aol.de': { type: 'search', name: 'AOL' }, + 'suchet2.aol.de': { type: 'search', name: 'AOL' }, + 'search.hp.my.aol.com.au': { type: 'search', name: 'AOL' }, + 'search.hp.my.aol.de': { type: 'search', name: 'AOL' }, + 'search.hp.my.aol.it': { type: 'search', name: 'AOL' }, + 'search-intl.netscape.com': { type: 'search', name: 'AOL' }, + 'www.acoon.de': { type: 'search', name: 'Acoon' }, + 'search.free.fr': { type: 'search', name: 'Free' }, + 'search1-2.free.fr': { type: 'search', name: 'Free' }, + 'search1-1.free.fr': { type: 'search', name: 'Free' }, + 'apollo.lv/portal/search/': { type: 'search', name: 'Apollo Latvia' }, + 'www.highbeam.com': { type: 'search', name: 'HighBeam' }, + 'start.iplay.com': { type: 'search', name: 'I-play' }, + 'friendfeed.com': { type: 'search', name: 'FriendFeed' }, + 'www.yasni.de': { type: 'search', name: 'Yasni' }, + 'www.yasni.com': { type: 'search', name: 'Yasni' }, + 'www.yasni.co.uk': { type: 'search', name: 'Yasni' }, + 'www.yasni.ch': { type: 'search', name: 'Yasni' }, + 'www.yasni.at': { type: 'search', name: 'Yasni' }, + 'www.gigablast.com': { type: 'search', name: 'Gigablast' }, + 'dir.gigablast.com': { type: 'search', name: 'Gigablast' }, + 'www.arcor.de': { type: 'search', name: 'Arcor' }, + 'arama.com': { type: 'search', name: 'arama' }, + 'www.fixsuche.de': { type: 'search', name: 'Fixsuche' }, + 'apontador.com.br': { type: 'search', name: 'Apontador' }, + 'www.apontador.com.br': { type: 'search', name: 'Apontador' }, + 'www.search.com': { type: 'search', name: 'Search.com' }, + 'www.monstercrawler.com': { type: 'search', name: 'Monstercrawler' }, + 'google.ac/imgres': { type: 'search', name: 'Google Images' }, + 'google.ad/imgres': { type: 'search', name: 'Google Images' }, + 'google.ae/imgres': { type: 'search', name: 'Google Images' }, + 'google.am/imgres': { type: 'search', name: 'Google Images' }, + 'google.as/imgres': { type: 'search', name: 'Google Images' }, + 'google.at/imgres': { type: 'search', name: 'Google Images' }, + 'google.az/imgres': { type: 'search', name: 'Google Images' }, + 'google.ba/imgres': { type: 'search', name: 'Google Images' }, + 'google.be/imgres': { type: 'search', name: 'Google Images' }, + 'google.bf/imgres': { type: 'search', name: 'Google Images' }, + 'google.bg/imgres': { type: 'search', name: 'Google Images' }, + 'google.bi/imgres': { type: 'search', name: 'Google Images' }, + 'google.bj/imgres': { type: 'search', name: 'Google Images' }, + 'google.bs/imgres': { type: 'search', name: 'Google Images' }, + 'google.by/imgres': { type: 'search', name: 'Google Images' }, + 'google.ca/imgres': { type: 'search', name: 'Google Images' }, + 'google.cat/imgres': { type: 'search', name: 'Google Images' }, + 'google.cc/imgres': { type: 'search', name: 'Google Images' }, + 'google.cd/imgres': { type: 'search', name: 'Google Images' }, + 'google.cf/imgres': { type: 'search', name: 'Google Images' }, + 'google.cg/imgres': { type: 'search', name: 'Google Images' }, + 'google.ch/imgres': { type: 'search', name: 'Google Images' }, + 'google.ci/imgres': { type: 'search', name: 'Google Images' }, + 'google.cl/imgres': { type: 'search', name: 'Google Images' }, + 'google.cm/imgres': { type: 'search', name: 'Google Images' }, + 'google.cn/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.bw/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.ck/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.cr/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.id/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.il/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.in/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.jp/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.ke/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.kr/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.ls/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.ma/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.mz/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.nz/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.th/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.tz/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.ug/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.uk/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.uz/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.ve/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.vi/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.za/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.zm/imgres': { type: 'search', name: 'Google Images' }, + 'google.co.zw/imgres': { type: 'search', name: 'Google Images' }, + 'google.com/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.af/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.ag/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.ai/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.ar/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.au/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.bd/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.bh/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.bn/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.bo/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.br/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.by/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.bz/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.co/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.cu/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.cy/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.do/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.ec/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.eg/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.et/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.fj/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.gh/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.gi/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.gt/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.hk/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.jm/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.kh/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.kw/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.lb/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.lc/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.ly/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.mt/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.mx/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.my/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.na/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.nf/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.ng/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.ni/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.np/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.om/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.pa/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.pe/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.ph/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.pk/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.pr/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.py/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.qa/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.sa/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.sb/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.sg/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.sl/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.sv/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.tj/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.tn/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.tr/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.tw/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.ua/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.uy/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.vc/imgres': { type: 'search', name: 'Google Images' }, + 'google.com.vn/imgres': { type: 'search', name: 'Google Images' }, + 'google.cv/imgres': { type: 'search', name: 'Google Images' }, + 'google.cz/imgres': { type: 'search', name: 'Google Images' }, + 'google.de/imgres': { type: 'search', name: 'Google Images' }, + 'google.dj/imgres': { type: 'search', name: 'Google Images' }, + 'google.dk/imgres': { type: 'search', name: 'Google Images' }, + 'google.dm/imgres': { type: 'search', name: 'Google Images' }, + 'google.dz/imgres': { type: 'search', name: 'Google Images' }, + 'google.ee/imgres': { type: 'search', name: 'Google Images' }, + 'google.es/imgres': { type: 'search', name: 'Google Images' }, + 'google.fi/imgres': { type: 'search', name: 'Google Images' }, + 'google.fm/imgres': { type: 'search', name: 'Google Images' }, + 'google.fr/imgres': { type: 'search', name: 'Google Images' }, + 'google.ga/imgres': { type: 'search', name: 'Google Images' }, + 'google.gd/imgres': { type: 'search', name: 'Google Images' }, + 'google.ge/imgres': { type: 'search', name: 'Google Images' }, + 'google.gf/imgres': { type: 'search', name: 'Google Images' }, + 'google.gg/imgres': { type: 'search', name: 'Google Images' }, + 'google.gl/imgres': { type: 'search', name: 'Google Images' }, + 'google.gm/imgres': { type: 'search', name: 'Google Images' }, + 'google.gp/imgres': { type: 'search', name: 'Google Images' }, + 'google.gr/imgres': { type: 'search', name: 'Google Images' }, + 'google.gy/imgres': { type: 'search', name: 'Google Images' }, + 'google.hn/imgres': { type: 'search', name: 'Google Images' }, + 'google.hr/imgres': { type: 'search', name: 'Google Images' }, + 'google.ht/imgres': { type: 'search', name: 'Google Images' }, + 'google.hu/imgres': { type: 'search', name: 'Google Images' }, + 'google.ie/imgres': { type: 'search', name: 'Google Images' }, + 'google.im/imgres': { type: 'search', name: 'Google Images' }, + 'google.io/imgres': { type: 'search', name: 'Google Images' }, + 'google.iq/imgres': { type: 'search', name: 'Google Images' }, + 'google.is/imgres': { type: 'search', name: 'Google Images' }, + 'google.it/imgres': { type: 'search', name: 'Google Images' }, + 'google.it.ao/imgres': { type: 'search', name: 'Google Images' }, + 'google.je/imgres': { type: 'search', name: 'Google Images' }, + 'google.jo/imgres': { type: 'search', name: 'Google Images' }, + 'google.kg/imgres': { type: 'search', name: 'Google Images' }, + 'google.ki/imgres': { type: 'search', name: 'Google Images' }, + 'google.kz/imgres': { type: 'search', name: 'Google Images' }, + 'google.la/imgres': { type: 'search', name: 'Google Images' }, + 'google.li/imgres': { type: 'search', name: 'Google Images' }, + 'google.lk/imgres': { type: 'search', name: 'Google Images' }, + 'google.lt/imgres': { type: 'search', name: 'Google Images' }, + 'google.lu/imgres': { type: 'search', name: 'Google Images' }, + 'google.lv/imgres': { type: 'search', name: 'Google Images' }, + 'google.md/imgres': { type: 'search', name: 'Google Images' }, + 'google.me/imgres': { type: 'search', name: 'Google Images' }, + 'google.mg/imgres': { type: 'search', name: 'Google Images' }, + 'google.mk/imgres': { type: 'search', name: 'Google Images' }, + 'google.ml/imgres': { type: 'search', name: 'Google Images' }, + 'google.mn/imgres': { type: 'search', name: 'Google Images' }, + 'google.ms/imgres': { type: 'search', name: 'Google Images' }, + 'google.mu/imgres': { type: 'search', name: 'Google Images' }, + 'google.mv/imgres': { type: 'search', name: 'Google Images' }, + 'google.mw/imgres': { type: 'search', name: 'Google Images' }, + 'google.ne/imgres': { type: 'search', name: 'Google Images' }, + 'google.nl/imgres': { type: 'search', name: 'Google Images' }, + 'google.no/imgres': { type: 'search', name: 'Google Images' }, + 'google.nr/imgres': { type: 'search', name: 'Google Images' }, + 'google.nu/imgres': { type: 'search', name: 'Google Images' }, + 'google.pl/imgres': { type: 'search', name: 'Google Images' }, + 'google.pn/imgres': { type: 'search', name: 'Google Images' }, + 'google.ps/imgres': { type: 'search', name: 'Google Images' }, + 'google.pt/imgres': { type: 'search', name: 'Google Images' }, + 'google.ro/imgres': { type: 'search', name: 'Google Images' }, + 'google.rs/imgres': { type: 'search', name: 'Google Images' }, + 'google.ru/imgres': { type: 'search', name: 'Google Images' }, + 'google.rw/imgres': { type: 'search', name: 'Google Images' }, + 'google.sc/imgres': { type: 'search', name: 'Google Images' }, + 'google.se/imgres': { type: 'search', name: 'Google Images' }, + 'google.sh/imgres': { type: 'search', name: 'Google Images' }, + 'google.si/imgres': { type: 'search', name: 'Google Images' }, + 'google.sk/imgres': { type: 'search', name: 'Google Images' }, + 'google.sm/imgres': { type: 'search', name: 'Google Images' }, + 'google.sn/imgres': { type: 'search', name: 'Google Images' }, + 'google.so/imgres': { type: 'search', name: 'Google Images' }, + 'google.st/imgres': { type: 'search', name: 'Google Images' }, + 'google.td/imgres': { type: 'search', name: 'Google Images' }, + 'google.tg/imgres': { type: 'search', name: 'Google Images' }, + 'google.tk/imgres': { type: 'search', name: 'Google Images' }, + 'google.tl/imgres': { type: 'search', name: 'Google Images' }, + 'google.tm/imgres': { type: 'search', name: 'Google Images' }, + 'google.to/imgres': { type: 'search', name: 'Google Images' }, + 'google.tt/imgres': { type: 'search', name: 'Google Images' }, + 'google.us/imgres': { type: 'search', name: 'Google Images' }, + 'google.vg/imgres': { type: 'search', name: 'Google Images' }, + 'google.vu/imgres': { type: 'search', name: 'Google Images' }, + 'images.google.ws': { type: 'search', name: 'Google Images' }, + 'images.google.ac': { type: 'search', name: 'Google Images' }, + 'images.google.ad': { type: 'search', name: 'Google Images' }, + 'images.google.ae': { type: 'search', name: 'Google Images' }, + 'images.google.am': { type: 'search', name: 'Google Images' }, + 'images.google.as': { type: 'search', name: 'Google Images' }, + 'images.google.at': { type: 'search', name: 'Google Images' }, + 'images.google.az': { type: 'search', name: 'Google Images' }, + 'images.google.ba': { type: 'search', name: 'Google Images' }, + 'images.google.be': { type: 'search', name: 'Google Images' }, + 'images.google.bf': { type: 'search', name: 'Google Images' }, + 'images.google.bg': { type: 'search', name: 'Google Images' }, + 'images.google.bi': { type: 'search', name: 'Google Images' }, + 'images.google.bj': { type: 'search', name: 'Google Images' }, + 'images.google.bs': { type: 'search', name: 'Google Images' }, + 'images.google.by': { type: 'search', name: 'Google Images' }, + 'images.google.ca': { type: 'search', name: 'Google Images' }, + 'images.google.cat': { type: 'search', name: 'Google Images' }, + 'images.google.cc': { type: 'search', name: 'Google Images' }, + 'images.google.cd': { type: 'search', name: 'Google Images' }, + 'images.google.cf': { type: 'search', name: 'Google Images' }, + 'images.google.cg': { type: 'search', name: 'Google Images' }, + 'images.google.ch': { type: 'search', name: 'Google Images' }, + 'images.google.ci': { type: 'search', name: 'Google Images' }, + 'images.google.cl': { type: 'search', name: 'Google Images' }, + 'images.google.cm': { type: 'search', name: 'Google Images' }, + 'images.google.cn': { type: 'search', name: 'Google Images' }, + 'images.google.co.bw': { type: 'search', name: 'Google Images' }, + 'images.google.co.ck': { type: 'search', name: 'Google Images' }, + 'images.google.co.cr': { type: 'search', name: 'Google Images' }, + 'images.google.co.id': { type: 'search', name: 'Google Images' }, + 'images.google.co.il': { type: 'search', name: 'Google Images' }, + 'images.google.co.in': { type: 'search', name: 'Google Images' }, + 'images.google.co.jp': { type: 'search', name: 'Google Images' }, + 'images.google.co.ke': { type: 'search', name: 'Google Images' }, + 'images.google.co.kr': { type: 'search', name: 'Google Images' }, + 'images.google.co.ls': { type: 'search', name: 'Google Images' }, + 'images.google.co.ma': { type: 'search', name: 'Google Images' }, + 'images.google.co.mz': { type: 'search', name: 'Google Images' }, + 'images.google.co.nz': { type: 'search', name: 'Google Images' }, + 'images.google.co.th': { type: 'search', name: 'Google Images' }, + 'images.google.co.tz': { type: 'search', name: 'Google Images' }, + 'images.google.co.ug': { type: 'search', name: 'Google Images' }, + 'images.google.co.uk': { type: 'search', name: 'Google Images' }, + 'images.google.co.uz': { type: 'search', name: 'Google Images' }, + 'images.google.co.ve': { type: 'search', name: 'Google Images' }, + 'images.google.co.vi': { type: 'search', name: 'Google Images' }, + 'images.google.co.za': { type: 'search', name: 'Google Images' }, + 'images.google.co.zm': { type: 'search', name: 'Google Images' }, + 'images.google.co.zw': { type: 'search', name: 'Google Images' }, + 'images.google.com': { type: 'search', name: 'Google Images' }, + 'images.google.com.af': { type: 'search', name: 'Google Images' }, + 'images.google.com.ag': { type: 'search', name: 'Google Images' }, + 'images.google.com.ai': { type: 'search', name: 'Google Images' }, + 'images.google.com.ar': { type: 'search', name: 'Google Images' }, + 'images.google.com.au': { type: 'search', name: 'Google Images' }, + 'images.google.com.bd': { type: 'search', name: 'Google Images' }, + 'images.google.com.bh': { type: 'search', name: 'Google Images' }, + 'images.google.com.bn': { type: 'search', name: 'Google Images' }, + 'images.google.com.bo': { type: 'search', name: 'Google Images' }, + 'images.google.com.br': { type: 'search', name: 'Google Images' }, + 'images.google.com.by': { type: 'search', name: 'Google Images' }, + 'images.google.com.bz': { type: 'search', name: 'Google Images' }, + 'images.google.com.co': { type: 'search', name: 'Google Images' }, + 'images.google.com.cu': { type: 'search', name: 'Google Images' }, + 'images.google.com.cy': { type: 'search', name: 'Google Images' }, + 'images.google.com.do': { type: 'search', name: 'Google Images' }, + 'images.google.com.ec': { type: 'search', name: 'Google Images' }, + 'images.google.com.eg': { type: 'search', name: 'Google Images' }, + 'images.google.com.et': { type: 'search', name: 'Google Images' }, + 'images.google.com.fj': { type: 'search', name: 'Google Images' }, + 'images.google.com.gh': { type: 'search', name: 'Google Images' }, + 'images.google.com.gi': { type: 'search', name: 'Google Images' }, + 'images.google.com.gt': { type: 'search', name: 'Google Images' }, + 'images.google.com.hk': { type: 'search', name: 'Google Images' }, + 'images.google.com.jm': { type: 'search', name: 'Google Images' }, + 'images.google.com.kh': { type: 'search', name: 'Google Images' }, + 'images.google.com.kw': { type: 'search', name: 'Google Images' }, + 'images.google.com.lb': { type: 'search', name: 'Google Images' }, + 'images.google.com.lc': { type: 'search', name: 'Google Images' }, + 'images.google.com.ly': { type: 'search', name: 'Google Images' }, + 'images.google.com.mt': { type: 'search', name: 'Google Images' }, + 'images.google.com.mx': { type: 'search', name: 'Google Images' }, + 'images.google.com.my': { type: 'search', name: 'Google Images' }, + 'images.google.com.na': { type: 'search', name: 'Google Images' }, + 'images.google.com.nf': { type: 'search', name: 'Google Images' }, + 'images.google.com.ng': { type: 'search', name: 'Google Images' }, + 'images.google.com.ni': { type: 'search', name: 'Google Images' }, + 'images.google.com.np': { type: 'search', name: 'Google Images' }, + 'images.google.com.om': { type: 'search', name: 'Google Images' }, + 'images.google.com.pa': { type: 'search', name: 'Google Images' }, + 'images.google.com.pe': { type: 'search', name: 'Google Images' }, + 'images.google.com.ph': { type: 'search', name: 'Google Images' }, + 'images.google.com.pk': { type: 'search', name: 'Google Images' }, + 'images.google.com.pr': { type: 'search', name: 'Google Images' }, + 'images.google.com.py': { type: 'search', name: 'Google Images' }, + 'images.google.com.qa': { type: 'search', name: 'Google Images' }, + 'images.google.com.sa': { type: 'search', name: 'Google Images' }, + 'images.google.com.sb': { type: 'search', name: 'Google Images' }, + 'images.google.com.sg': { type: 'search', name: 'Google Images' }, + 'images.google.com.sl': { type: 'search', name: 'Google Images' }, + 'images.google.com.sv': { type: 'search', name: 'Google Images' }, + 'images.google.com.tj': { type: 'search', name: 'Google Images' }, + 'images.google.com.tn': { type: 'search', name: 'Google Images' }, + 'images.google.com.tr': { type: 'search', name: 'Google Images' }, + 'images.google.com.tw': { type: 'search', name: 'Google Images' }, + 'images.google.com.ua': { type: 'search', name: 'Google Images' }, + 'images.google.com.uy': { type: 'search', name: 'Google Images' }, + 'images.google.com.vc': { type: 'search', name: 'Google Images' }, + 'images.google.com.vn': { type: 'search', name: 'Google Images' }, + 'images.google.cv': { type: 'search', name: 'Google Images' }, + 'images.google.cz': { type: 'search', name: 'Google Images' }, + 'images.google.de': { type: 'search', name: 'Google Images' }, + 'images.google.dj': { type: 'search', name: 'Google Images' }, + 'images.google.dk': { type: 'search', name: 'Google Images' }, + 'images.google.dm': { type: 'search', name: 'Google Images' }, + 'images.google.dz': { type: 'search', name: 'Google Images' }, + 'images.google.ee': { type: 'search', name: 'Google Images' }, + 'images.google.es': { type: 'search', name: 'Google Images' }, + 'images.google.fi': { type: 'search', name: 'Google Images' }, + 'images.google.fm': { type: 'search', name: 'Google Images' }, + 'images.google.fr': { type: 'search', name: 'Google Images' }, + 'images.google.ga': { type: 'search', name: 'Google Images' }, + 'images.google.gd': { type: 'search', name: 'Google Images' }, + 'images.google.ge': { type: 'search', name: 'Google Images' }, + 'images.google.gf': { type: 'search', name: 'Google Images' }, + 'images.google.gg': { type: 'search', name: 'Google Images' }, + 'images.google.gl': { type: 'search', name: 'Google Images' }, + 'images.google.gm': { type: 'search', name: 'Google Images' }, + 'images.google.gp': { type: 'search', name: 'Google Images' }, + 'images.google.gr': { type: 'search', name: 'Google Images' }, + 'images.google.gy': { type: 'search', name: 'Google Images' }, + 'images.google.hn': { type: 'search', name: 'Google Images' }, + 'images.google.hr': { type: 'search', name: 'Google Images' }, + 'images.google.ht': { type: 'search', name: 'Google Images' }, + 'images.google.hu': { type: 'search', name: 'Google Images' }, + 'images.google.ie': { type: 'search', name: 'Google Images' }, + 'images.google.im': { type: 'search', name: 'Google Images' }, + 'images.google.io': { type: 'search', name: 'Google Images' }, + 'images.google.iq': { type: 'search', name: 'Google Images' }, + 'images.google.is': { type: 'search', name: 'Google Images' }, + 'images.google.it': { type: 'search', name: 'Google Images' }, + 'images.google.it.ao': { type: 'search', name: 'Google Images' }, + 'images.google.je': { type: 'search', name: 'Google Images' }, + 'images.google.jo': { type: 'search', name: 'Google Images' }, + 'images.google.kg': { type: 'search', name: 'Google Images' }, + 'images.google.ki': { type: 'search', name: 'Google Images' }, + 'images.google.kz': { type: 'search', name: 'Google Images' }, + 'images.google.la': { type: 'search', name: 'Google Images' }, + 'images.google.li': { type: 'search', name: 'Google Images' }, + 'images.google.lk': { type: 'search', name: 'Google Images' }, + 'images.google.lt': { type: 'search', name: 'Google Images' }, + 'images.google.lu': { type: 'search', name: 'Google Images' }, + 'images.google.lv': { type: 'search', name: 'Google Images' }, + 'images.google.md': { type: 'search', name: 'Google Images' }, + 'images.google.me': { type: 'search', name: 'Google Images' }, + 'images.google.mg': { type: 'search', name: 'Google Images' }, + 'images.google.mk': { type: 'search', name: 'Google Images' }, + 'images.google.ml': { type: 'search', name: 'Google Images' }, + 'images.google.mn': { type: 'search', name: 'Google Images' }, + 'images.google.ms': { type: 'search', name: 'Google Images' }, + 'images.google.mu': { type: 'search', name: 'Google Images' }, + 'images.google.mv': { type: 'search', name: 'Google Images' }, + 'images.google.mw': { type: 'search', name: 'Google Images' }, + 'images.google.ne': { type: 'search', name: 'Google Images' }, + 'images.google.nl': { type: 'search', name: 'Google Images' }, + 'images.google.no': { type: 'search', name: 'Google Images' }, + 'images.google.nr': { type: 'search', name: 'Google Images' }, + 'images.google.nu': { type: 'search', name: 'Google Images' }, + 'images.google.pl': { type: 'search', name: 'Google Images' }, + 'images.google.pn': { type: 'search', name: 'Google Images' }, + 'images.google.ps': { type: 'search', name: 'Google Images' }, + 'images.google.pt': { type: 'search', name: 'Google Images' }, + 'images.google.ro': { type: 'search', name: 'Google Images' }, + 'images.google.rs': { type: 'search', name: 'Google Images' }, + 'images.google.ru': { type: 'search', name: 'Google Images' }, + 'images.google.rw': { type: 'search', name: 'Google Images' }, + 'images.google.sc': { type: 'search', name: 'Google Images' }, + 'images.google.se': { type: 'search', name: 'Google Images' }, + 'images.google.sh': { type: 'search', name: 'Google Images' }, + 'images.google.si': { type: 'search', name: 'Google Images' }, + 'images.google.sk': { type: 'search', name: 'Google Images' }, + 'images.google.sm': { type: 'search', name: 'Google Images' }, + 'images.google.sn': { type: 'search', name: 'Google Images' }, + 'images.google.so': { type: 'search', name: 'Google Images' }, + 'images.google.st': { type: 'search', name: 'Google Images' }, + 'images.google.td': { type: 'search', name: 'Google Images' }, + 'images.google.tg': { type: 'search', name: 'Google Images' }, + 'images.google.tk': { type: 'search', name: 'Google Images' }, + 'images.google.tl': { type: 'search', name: 'Google Images' }, + 'images.google.tm': { type: 'search', name: 'Google Images' }, + 'images.google.to': { type: 'search', name: 'Google Images' }, + 'images.google.tt': { type: 'search', name: 'Google Images' }, + 'images.google.us': { type: 'search', name: 'Google Images' }, + 'images.google.vg': { type: 'search', name: 'Google Images' }, + 'images.google.vu': { type: 'search', name: 'Google Images' }, + 'abcsolk.no': { type: 'search', name: 'ABCsøk' }, + 'verden.abcsok.no': { type: 'search', name: 'ABCsøk' }, + 'google.ac/products': { type: 'search', name: 'Google Product Search' }, + 'google.ad/products': { type: 'search', name: 'Google Product Search' }, + 'google.ae/products': { type: 'search', name: 'Google Product Search' }, + 'google.am/products': { type: 'search', name: 'Google Product Search' }, + 'google.as/products': { type: 'search', name: 'Google Product Search' }, + 'google.at/products': { type: 'search', name: 'Google Product Search' }, + 'google.az/products': { type: 'search', name: 'Google Product Search' }, + 'google.ba/products': { type: 'search', name: 'Google Product Search' }, + 'google.be/products': { type: 'search', name: 'Google Product Search' }, + 'google.bf/products': { type: 'search', name: 'Google Product Search' }, + 'google.bg/products': { type: 'search', name: 'Google Product Search' }, + 'google.bi/products': { type: 'search', name: 'Google Product Search' }, + 'google.bj/products': { type: 'search', name: 'Google Product Search' }, + 'google.bs/products': { type: 'search', name: 'Google Product Search' }, + 'google.by/products': { type: 'search', name: 'Google Product Search' }, + 'google.ca/products': { type: 'search', name: 'Google Product Search' }, + 'google.cat/products': { type: 'search', name: 'Google Product Search' }, + 'google.cc/products': { type: 'search', name: 'Google Product Search' }, + 'google.cd/products': { type: 'search', name: 'Google Product Search' }, + 'google.cf/products': { type: 'search', name: 'Google Product Search' }, + 'google.cg/products': { type: 'search', name: 'Google Product Search' }, + 'google.ch/products': { type: 'search', name: 'Google Product Search' }, + 'google.ci/products': { type: 'search', name: 'Google Product Search' }, + 'google.cl/products': { type: 'search', name: 'Google Product Search' }, + 'google.cm/products': { type: 'search', name: 'Google Product Search' }, + 'google.cn/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.bw/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.ck/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.cr/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.id/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.il/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.in/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.jp/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.ke/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.kr/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.ls/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.ma/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.mz/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.nz/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.th/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.tz/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.ug/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.uk/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.uz/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.ve/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.vi/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.za/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.zm/products': { type: 'search', name: 'Google Product Search' }, + 'google.co.zw/products': { type: 'search', name: 'Google Product Search' }, + 'google.com/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.af/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.ag/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.ai/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.ar/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.au/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.bd/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.bh/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.bn/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.bo/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.br/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.by/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.bz/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.co/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.cu/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.cy/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.do/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.ec/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.eg/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.et/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.fj/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.gh/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.gi/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.gt/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.hk/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.jm/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.kh/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.kw/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.lb/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.lc/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.ly/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.mt/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.mx/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.my/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.na/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.nf/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.ng/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.ni/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.np/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.om/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.pa/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.pe/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.ph/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.pk/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.pr/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.py/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.qa/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.sa/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.sb/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.sg/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.sl/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.sv/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.tj/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.tn/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.tr/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.tw/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.ua/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.uy/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.vc/products': { type: 'search', name: 'Google Product Search' }, + 'google.com.vn/products': { type: 'search', name: 'Google Product Search' }, + 'google.cv/products': { type: 'search', name: 'Google Product Search' }, + 'google.cz/products': { type: 'search', name: 'Google Product Search' }, + 'google.de/products': { type: 'search', name: 'Google Product Search' }, + 'google.dj/products': { type: 'search', name: 'Google Product Search' }, + 'google.dk/products': { type: 'search', name: 'Google Product Search' }, + 'google.dm/products': { type: 'search', name: 'Google Product Search' }, + 'google.dz/products': { type: 'search', name: 'Google Product Search' }, + 'google.ee/products': { type: 'search', name: 'Google Product Search' }, + 'google.es/products': { type: 'search', name: 'Google Product Search' }, + 'google.fi/products': { type: 'search', name: 'Google Product Search' }, + 'google.fm/products': { type: 'search', name: 'Google Product Search' }, + 'google.fr/products': { type: 'search', name: 'Google Product Search' }, + 'google.ga/products': { type: 'search', name: 'Google Product Search' }, + 'google.gd/products': { type: 'search', name: 'Google Product Search' }, + 'google.ge/products': { type: 'search', name: 'Google Product Search' }, + 'google.gf/products': { type: 'search', name: 'Google Product Search' }, + 'google.gg/products': { type: 'search', name: 'Google Product Search' }, + 'google.gl/products': { type: 'search', name: 'Google Product Search' }, + 'google.gm/products': { type: 'search', name: 'Google Product Search' }, + 'google.gp/products': { type: 'search', name: 'Google Product Search' }, + 'google.gr/products': { type: 'search', name: 'Google Product Search' }, + 'google.gy/products': { type: 'search', name: 'Google Product Search' }, + 'google.hn/products': { type: 'search', name: 'Google Product Search' }, + 'google.hr/products': { type: 'search', name: 'Google Product Search' }, + 'google.ht/products': { type: 'search', name: 'Google Product Search' }, + 'google.hu/products': { type: 'search', name: 'Google Product Search' }, + 'google.ie/products': { type: 'search', name: 'Google Product Search' }, + 'google.im/products': { type: 'search', name: 'Google Product Search' }, + 'google.io/products': { type: 'search', name: 'Google Product Search' }, + 'google.iq/products': { type: 'search', name: 'Google Product Search' }, + 'google.is/products': { type: 'search', name: 'Google Product Search' }, + 'google.it/products': { type: 'search', name: 'Google Product Search' }, + 'google.it.ao/products': { type: 'search', name: 'Google Product Search' }, + 'google.je/products': { type: 'search', name: 'Google Product Search' }, + 'google.jo/products': { type: 'search', name: 'Google Product Search' }, + 'google.kg/products': { type: 'search', name: 'Google Product Search' }, + 'google.ki/products': { type: 'search', name: 'Google Product Search' }, + 'google.kz/products': { type: 'search', name: 'Google Product Search' }, + 'google.la/products': { type: 'search', name: 'Google Product Search' }, + 'google.li/products': { type: 'search', name: 'Google Product Search' }, + 'google.lk/products': { type: 'search', name: 'Google Product Search' }, + 'google.lt/products': { type: 'search', name: 'Google Product Search' }, + 'google.lu/products': { type: 'search', name: 'Google Product Search' }, + 'google.lv/products': { type: 'search', name: 'Google Product Search' }, + 'google.md/products': { type: 'search', name: 'Google Product Search' }, + 'google.me/products': { type: 'search', name: 'Google Product Search' }, + 'google.mg/products': { type: 'search', name: 'Google Product Search' }, + 'google.mk/products': { type: 'search', name: 'Google Product Search' }, + 'google.ml/products': { type: 'search', name: 'Google Product Search' }, + 'google.mn/products': { type: 'search', name: 'Google Product Search' }, + 'google.ms/products': { type: 'search', name: 'Google Product Search' }, + 'google.mu/products': { type: 'search', name: 'Google Product Search' }, + 'google.mv/products': { type: 'search', name: 'Google Product Search' }, + 'google.mw/products': { type: 'search', name: 'Google Product Search' }, + 'google.ne/products': { type: 'search', name: 'Google Product Search' }, + 'google.nl/products': { type: 'search', name: 'Google Product Search' }, + 'google.no/products': { type: 'search', name: 'Google Product Search' }, + 'google.nr/products': { type: 'search', name: 'Google Product Search' }, + 'google.nu/products': { type: 'search', name: 'Google Product Search' }, + 'google.pl/products': { type: 'search', name: 'Google Product Search' }, + 'google.pn/products': { type: 'search', name: 'Google Product Search' }, + 'google.ps/products': { type: 'search', name: 'Google Product Search' }, + 'google.pt/products': { type: 'search', name: 'Google Product Search' }, + 'google.ro/products': { type: 'search', name: 'Google Product Search' }, + 'google.rs/products': { type: 'search', name: 'Google Product Search' }, + 'google.ru/products': { type: 'search', name: 'Google Product Search' }, + 'google.rw/products': { type: 'search', name: 'Google Product Search' }, + 'google.sc/products': { type: 'search', name: 'Google Product Search' }, + 'google.se/products': { type: 'search', name: 'Google Product Search' }, + 'google.sh/products': { type: 'search', name: 'Google Product Search' }, + 'google.si/products': { type: 'search', name: 'Google Product Search' }, + 'google.sk/products': { type: 'search', name: 'Google Product Search' }, + 'google.sm/products': { type: 'search', name: 'Google Product Search' }, + 'google.sn/products': { type: 'search', name: 'Google Product Search' }, + 'google.so/products': { type: 'search', name: 'Google Product Search' }, + 'google.st/products': { type: 'search', name: 'Google Product Search' }, + 'google.td/products': { type: 'search', name: 'Google Product Search' }, + 'google.tg/products': { type: 'search', name: 'Google Product Search' }, + 'google.tk/products': { type: 'search', name: 'Google Product Search' }, + 'google.tl/products': { type: 'search', name: 'Google Product Search' }, + 'google.tm/products': { type: 'search', name: 'Google Product Search' }, + 'google.to/products': { type: 'search', name: 'Google Product Search' }, + 'google.tt/products': { type: 'search', name: 'Google Product Search' }, + 'google.us/products': { type: 'search', name: 'Google Product Search' }, + 'google.vg/products': { type: 'search', name: 'Google Product Search' }, + 'google.vu/products': { type: 'search', name: 'Google Product Search' }, + 'google.ws/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ac/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ad/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ae/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.am/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.as/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.at/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.az/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ba/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.be/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.bf/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.bg/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.bi/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.bj/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.bs/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.by/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ca/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.cat/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.cc/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.cd/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.cf/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.cg/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ch/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ci/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.cl/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.cm/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.cn/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.co.bw/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.ck/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.cr/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.id/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.il/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.in/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.jp/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.ke/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.kr/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.ls/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.ma/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.mz/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.nz/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.th/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.tz/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.ug/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.uk/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.uz/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.ve/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.vi/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.za/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.zm/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.co.zw/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.com.af/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.ag/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.ai/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.ar/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.au/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.bd/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.bh/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.bn/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.bo/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.br/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.by/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.bz/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.co/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.cu/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.cy/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.do/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.ec/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.eg/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.et/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.fj/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.gh/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.gi/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.gt/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.hk/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.jm/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.kh/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.kw/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.lb/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.lc/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.ly/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.mt/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.mx/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.my/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.na/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.nf/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.ng/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.ni/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.np/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.om/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.pa/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.pe/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.ph/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.pk/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.pr/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.py/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.qa/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.sa/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.sb/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.sg/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.sl/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.sv/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.tj/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.tn/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.tr/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.tw/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.ua/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.uy/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.vc/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.com.vn/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.cv/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.cz/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.de/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.dj/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.dk/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.dm/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.dz/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ee/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.es/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.fi/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.fm/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.fr/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ga/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.gd/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ge/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.gf/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.gg/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.gl/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.gm/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.gp/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.gr/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.gy/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.hn/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.hr/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ht/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.hu/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ie/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.im/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.io/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.iq/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.is/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.it/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.it.ao/products': { + type: 'search', + name: 'Google Product Search', + }, + 'www.google.je/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.jo/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.kg/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ki/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.kz/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.la/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.li/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.lk/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.lt/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.lu/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.lv/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.md/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.me/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.mg/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.mk/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ml/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.mn/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ms/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.mu/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.mv/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.mw/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ne/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.nl/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.no/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.nr/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.nu/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.pl/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.pn/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ps/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.pt/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ro/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.rs/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ru/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.rw/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.sc/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.se/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.sh/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.si/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.sk/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.sm/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.sn/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.so/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.st/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.td/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.tg/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.tk/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.tl/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.tm/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.to/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.tt/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.us/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.vg/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.vu/products': { type: 'search', name: 'Google Product Search' }, + 'www.google.ws/products': { type: 'search', name: 'Google Product Search' }, + 'www.dasoertliche.de': { type: 'search', name: 'DasOertliche' }, + 'infospace.com': { type: 'search', name: 'InfoSpace' }, + 'dogpile.com': { type: 'search', name: 'InfoSpace' }, + 'www.dogpile.com': { type: 'search', name: 'InfoSpace' }, + 'metacrawler.com': { type: 'search', name: 'InfoSpace' }, + 'webfetch.com': { type: 'search', name: 'InfoSpace' }, + 'webcrawler.com': { type: 'search', name: 'InfoSpace' }, + 'search.kiwee.com': { type: 'search', name: 'InfoSpace' }, + 'isearch.babylon.com': { type: 'search', name: 'InfoSpace' }, + 'start.facemoods.com': { type: 'search', name: 'InfoSpace' }, + 'search.magnetic.com': { type: 'search', name: 'InfoSpace' }, + 'search.searchcompletion.com': { type: 'search', name: 'InfoSpace' }, + 'clusty.com': { type: 'search', name: 'InfoSpace' }, + 'www.weborama.com': { type: 'search', name: 'Weborama' }, + 'search.bluewin.ch': { type: 'search', name: 'Bluewin' }, + 'search.bt.com': { type: 'search', name: 'British Telecommunications' }, + 'www.neti.ee': { type: 'search', name: 'Neti' }, + 'nigma.ru': { type: 'search', name: 'Nigma' }, + 'image.yahoo.cn': { type: 'search', name: 'Yahoo! Images' }, + 'images.search.yahoo.com': { type: 'search', name: 'Yahoo! Images' }, + 'www.exalead.fr': { type: 'search', name: 'Exalead' }, + 'www.exalead.com': { type: 'search', name: 'Exalead' }, + 'www.teoma.com': { type: 'search', name: 'Teoma' }, + 'ko.search.need2find.com': { type: 'search', name: 'Needtofind' }, + 'www.looksmart.com': { type: 'search', name: 'Looksmart' }, + 'inspsearch.com': { type: 'search', name: 'Flyingbird' }, + 'viview.inspsearch.com': { type: 'search', name: 'Flyingbird' }, + 'www.everyclick.com': { type: 'search', name: 'Everyclick' }, + 'szukaj.wp.pl': { type: 'search', name: 'Wirtualna Polska' }, + 'www.toolbarhome.com': { type: 'search', name: 'Toolbarhome' }, + 'vshare.toolbarhome.com': { type: 'search', name: 'Toolbarhome' }, + 'searchalot.com': { type: 'search', name: 'Searchalot' }, + 'yandex.ru': { type: 'search', name: 'Yandex' }, + 'yandex.ua': { type: 'search', name: 'Yandex' }, + 'yandex.com': { type: 'search', name: 'Yandex' }, + 'yandex.by': { type: 'search', name: 'Yandex' }, + 'www.yandex.ru': { type: 'search', name: 'Yandex' }, + 'www.yandex.ua': { type: 'search', name: 'Yandex' }, + 'www.yandex.com': { type: 'search', name: 'Yandex' }, + 'www.yandex.by': { type: 'search', name: 'Yandex' }, + 'clck.yandex.ru': { type: 'search', name: 'Yandex' }, + 'clck.yandex.ua': { type: 'search', name: 'Yandex' }, + 'clck.yandex.com': { type: 'search', name: 'Yandex' }, + 'clck.yandex.by': { type: 'search', name: 'Yandex' }, + 'de.indeed.com': { type: 'search', name: 'Indeed' }, + 'at.indeed.com': { type: 'search', name: 'Indeed' }, + 'fr.indeed.com': { type: 'search', name: 'Indeed' }, + 'it.indeed.com': { type: 'search', name: 'Indeed' }, + 'ch.indeed.com': { type: 'search', name: 'Indeed' }, + 'au.indeed.com': { type: 'search', name: 'Indeed' }, + 'web.canoe.ca': { type: 'search', name: 'canoe.ca' }, + 'websearch.cs.com': { type: 'search', name: 'Compuserve' }, + 'www.blogdigger.com': { type: 'search', name: 'Blogdigger' }, + 'startgoogle.startpagina.nl': { type: 'search', name: 'Startpagina' }, + 'eo.st': { type: 'search', name: 'eo' }, + 'p.zhongsou.com': { type: 'search', name: 'Zhongsou' }, + 'www.toile.com': { type: 'search', name: 'La Toile Du Quebec Via Google' }, + 'web.toile.com': { type: 'search', name: 'La Toile Du Quebec Via Google' }, + 'www.paperball.de': { type: 'search', name: 'Paperball' }, + 'www.stepstone.de': { type: 'search', name: 'StepStone' }, + 'www.stepstone.at': { type: 'search', name: 'StepStone' }, + 'www.stepstone.be': { type: 'search', name: 'StepStone' }, + 'www.stepstone.fr': { type: 'search', name: 'StepStone' }, + 'www.stepstone.nl': { type: 'search', name: 'StepStone' }, + 'www.stepstone.dk': { type: 'search', name: 'StepStone' }, + 'www.stepstone.se': { type: 'search', name: 'StepStone' }, + 'www.jungle-spider.de': { type: 'search', name: 'Jungle Spider' }, + 'search.peoplepc.com': { type: 'search', name: 'PeoplePC' }, + 'thesmartsearch.net': { type: 'search', name: 'The Smart Search' }, + 'www.thesmartsearch.net': { type: 'search', name: 'The Smart Search' }, + 's1.metacrawler.de': { type: 'search', name: 'MetaCrawler.de' }, + 's2.metacrawler.de': { type: 'search', name: 'MetaCrawler.de' }, + 's3.metacrawler.de': { type: 'search', name: 'MetaCrawler.de' }, + 'busca.orange.es': { type: 'search', name: 'Orange' }, + 'search.orange.co.uk': { type: 'search', name: 'Orange' }, + 'lemoteur.orange.fr': { type: 'search', name: 'Orange' }, + 'www.gulesider.no': { type: 'search', name: 'Gule Sider' }, + 'search.i.ua': { type: 'search', name: 'I.ua' }, + 'recherche.francite.com': { type: 'search', name: 'Francite' }, + 'search.tb.ask.com': { type: 'search', name: 'Ask Toolbar' }, + 'search.tut.by': { type: 'search', name: 'Tut.by' }, + 'www.trusted--search.com': { type: 'search', name: 'Trusted-Search' }, + 'search.goo.ne.jp': { type: 'search', name: 'goo' }, + 'ocnsearch.goo.ne.jp': { type: 'search', name: 'goo' }, + 'www.fastbrowsersearch.com': { type: 'search', name: 'Fast Browser Search' }, + 'kununu.com': { type: 'search', name: 'kununu' }, + 'web.volny.cz': { type: 'search', name: 'Volny' }, + 'blogs.icerocket.com': { type: 'search', name: 'Icerockeet' }, + 'buscador.terra.es': { type: 'search', name: 'Terra' }, + 'buscador.terra.cl': { type: 'search', name: 'Terra' }, + 'buscador.terra.com.br': { type: 'search', name: 'Terra' }, + 'amazon.com': { type: 'search', name: 'Amazon' }, + 'www.amazon.com': { type: 'search', name: 'Amazon' }, + 'szukaj.onet.pl': { type: 'search', name: 'Onet' }, + 'digg.com': { type: 'search', name: 'Digg' }, + 'www.abacho.de': { type: 'search', name: 'Abacho' }, + 'www.abacho.com': { type: 'search', name: 'Abacho' }, + 'www.abacho.co.uk': { type: 'search', name: 'Abacho' }, + 'www.se.abacho.com': { type: 'search', name: 'Abacho' }, + 'www.tr.abacho.com': { type: 'search', name: 'Abacho' }, + 'www.abacho.at': { type: 'search', name: 'Abacho' }, + 'www.abacho.fr': { type: 'search', name: 'Abacho' }, + 'www.abacho.es': { type: 'search', name: 'Abacho' }, + 'www.abacho.ch': { type: 'search', name: 'Abacho' }, + 'www.abacho.it': { type: 'search', name: 'Abacho' }, + 'www.maailm.com': { type: 'search', name: 'maailm' }, + 'www.flix.de': { type: 'search', name: 'Flix' }, + 'inbox.com/search/': { type: 'search', name: 'Inbox.com' }, + 'suche.freenet.de': { type: 'search', name: 'Freenet' }, + 'www.suchnase.de': { type: 'search', name: 'Suchnase' }, + 'google.dodo.com.au': { type: 'search', name: 'Dodo' }, + 'blogsearch.google.ac': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ad': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ae': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.am': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.as': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.at': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.az': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ba': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.be': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.bf': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.bg': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.bi': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.bj': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.bs': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.by': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ca': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.cat': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.cc': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.cd': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.cf': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.cg': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ch': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ci': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.cl': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.cm': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.cn': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.bw': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.ck': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.cr': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.id': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.il': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.in': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.jp': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.ke': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.kr': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.ls': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.ma': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.mz': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.nz': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.th': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.tz': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.ug': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.uk': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.uz': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.ve': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.vi': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.za': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.zm': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.co.zw': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.af': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.ag': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.ai': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.ar': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.au': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.bd': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.bh': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.bn': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.bo': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.br': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.by': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.bz': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.co': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.cu': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.cy': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.do': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.ec': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.eg': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.et': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.fj': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.gh': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.gi': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.gt': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.hk': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.jm': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.kh': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.kw': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.lb': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.lc': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.ly': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.mt': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.mx': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.my': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.na': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.nf': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.ng': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.ni': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.np': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.om': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.pa': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.pe': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.ph': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.pk': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.pr': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.py': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.qa': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.sa': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.sb': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.sg': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.sl': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.sv': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.tj': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.tn': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.tr': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.tw': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.ua': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.uy': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.vc': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.com.vn': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.cv': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.cz': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.de': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.dj': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.dk': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.dm': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.dz': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ee': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.es': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.fi': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.fm': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.fr': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ga': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.gd': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ge': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.gf': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.gg': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.gl': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.gm': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.gp': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.gr': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.gy': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.hn': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.hr': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ht': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.hu': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ie': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.im': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.io': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.iq': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.is': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.it': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.it.ao': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.je': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.jo': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.kg': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ki': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.kz': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.la': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.li': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.lk': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.lt': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.lu': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.lv': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.md': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.me': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.mg': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.mk': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ml': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.mn': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ms': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.mu': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.mv': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.mw': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ne': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.nl': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.no': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.nr': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.nu': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.pl': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.pn': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ps': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.pt': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ro': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.rs': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ru': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.rw': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.sc': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.se': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.sh': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.si': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.sk': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.sm': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.sn': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.so': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.st': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.td': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.tg': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.tk': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.tl': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.tm': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.to': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.tt': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.us': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.vg': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.vu': { type: 'search', name: 'Google Blogsearch' }, + 'blogsearch.google.ws': { type: 'search', name: 'Google Blogsearch' }, + 'poisk.ru': { type: 'search', name: 'Poisk.ru' }, + 'www.sharelook.fr': { type: 'search', name: 'Sharelook' }, + 'www.finderoo.com': { type: 'search', name: 'Finderoo' }, + 'www.najdi.si': { type: 'search', name: 'Najdi' }, + 'www.picsearch.com': { type: 'search', name: 'Picsearch' }, + 'mail.ru': { type: 'search', name: 'Mail.ru' }, + 'm.mail.ru': { type: 'search', name: 'Mail.ru' }, + 'go.mail.ru': { type: 'search', name: 'Mail.ru' }, + 'alexa.com': { type: 'search', name: 'Alexa' }, + 'search.toolbars.alexa.com': { type: 'search', name: 'Alexa' }, + 'meta.rrzn.uni-hannover.de': { type: 'search', name: 'Metager' }, + 'www.metager.de': { type: 'search', name: 'Metager' }, + 'technorati.com': { type: 'search', name: 'Technorati' }, + 'searches.globososo.com': { type: 'search', name: 'Globososo' }, + 'search.globososo.com': { type: 'search', name: 'Globososo' }, + 'search.www.ee': { type: 'search', name: 'WWW' }, + 'www.trouvez.com': { type: 'search', name: 'Trouvez.com' }, + 'ixquick.com': { type: 'search', name: 'IXquick' }, + 'www.eu.ixquick.com': { type: 'search', name: 'IXquick' }, + 'ixquick.de': { type: 'search', name: 'IXquick' }, + 'www.ixquick.de': { type: 'search', name: 'IXquick' }, + 'us.ixquick.com': { type: 'search', name: 'IXquick' }, + 's1.us.ixquick.com': { type: 'search', name: 'IXquick' }, + 's2.us.ixquick.com': { type: 'search', name: 'IXquick' }, + 's3.us.ixquick.com': { type: 'search', name: 'IXquick' }, + 's4.us.ixquick.com': { type: 'search', name: 'IXquick' }, + 's5.us.ixquick.com': { type: 'search', name: 'IXquick' }, + 'eu.ixquick.com': { type: 'search', name: 'IXquick' }, + 's8-eu.ixquick.com': { type: 'search', name: 'IXquick' }, + 's1-eu.ixquick.de': { type: 'search', name: 'IXquick' }, + 'image.search.naver.com': { type: 'search', name: 'Naver Images' }, + 'imagesearch.naver.com': { type: 'search', name: 'Naver Images' }, + 'www.zapmeta.com': { type: 'search', name: 'Zapmeta' }, + 'www.zapmeta.nl': { type: 'search', name: 'Zapmeta' }, + 'www.zapmeta.de': { type: 'search', name: 'Zapmeta' }, + 'uk.zapmeta.com': { type: 'search', name: 'Zapmeta' }, + 'search.yippy.com': { type: 'search', name: 'Yippy' }, + 'pesquisa.clix.pt': { type: 'search', name: 'Clix' }, + 'www.walhello.info': { type: 'search', name: 'Walhello' }, + 'www.walhello.com': { type: 'search', name: 'Walhello' }, + 'www.walhello.de': { type: 'search', name: 'Walhello' }, + 'www.walhello.nl': { type: 'search', name: 'Walhello' }, + 'meta.ua': { type: 'search', name: 'Meta' }, + 'www.skynet.be': { type: 'search', name: 'Skynet' }, + 'www.searchy.co.uk': { type: 'search', name: 'Searchy' }, + 'search.findwide.com': { type: 'search', name: 'Findwide' }, + 'www.websearch.com': { type: 'search', name: 'WebSearch' }, + 'nova.rambler.ru': { type: 'search', name: 'Rambler' }, + 'www.latne.lv': { type: 'search', name: 'Latne' }, + 'mysearch.com': { type: 'search', name: 'MySearch' }, + 'www.mysearch.com': { type: 'search', name: 'MySearch' }, + 'ms114.mysearch.com': { type: 'search', name: 'MySearch' }, + 'ms146.mysearch.com': { type: 'search', name: 'MySearch' }, + 'kf.mysearch.myway.com': { type: 'search', name: 'MySearch' }, + 'ki.mysearch.myway.com': { type: 'search', name: 'MySearch' }, + 'search.myway.com': { type: 'search', name: 'MySearch' }, + 'search.mywebsearch.com': { type: 'search', name: 'MySearch' }, + 'www.cuil.com': { type: 'search', name: 'Cuil' }, + 'www.tixuma.de': { type: 'search', name: 'Tixuma' }, + 'pesquisa.sapo.pt': { type: 'search', name: 'Sapo' }, + 'www.gnadenmeer.de': { type: 'search', name: 'Gnadenmeer' }, + 'search.lilo.org': { type: 'search', name: 'Lilo' }, + 'search.naver.com': { type: 'search', name: 'Naver' }, + 'www.zoeken.nl': { type: 'search', name: 'Zoeken' }, + 'www.startsiden.no': { type: 'search', name: 'Startsiden' }, + 'search.yam.com': { type: 'search', name: 'Yam' }, + 'www.eniro.se': { type: 'search', name: 'Eniro' }, + 'apollo7.de': { type: 'search', name: 'APOLL07' }, + 'cgi.search.biglobe.ne.jp': { type: 'search', name: 'Biglobe' }, + 'www.mozbot.fr': { type: 'search', name: 'Mozbot' }, + 'www.mozbot.co.uk': { type: 'search', name: 'Mozbot' }, + 'www.mozbot.com': { type: 'search', name: 'Mozbot' }, + 'www.icq.com': { type: 'search', name: 'ICQ' }, + 'search.icq.com': { type: 'search', name: 'ICQ' }, + 'www.baidu.com': { type: 'search', name: 'Baidu' }, + 'www1.baidu.com': { type: 'search', name: 'Baidu' }, + 'zhidao.baidu.com': { type: 'search', name: 'Baidu' }, + 'tieba.baidu.com': { type: 'search', name: 'Baidu' }, + 'news.baidu.com': { type: 'search', name: 'Baidu' }, + 'web.gougou.com': { type: 'search', name: 'Baidu' }, + 'm.baidu.com': { type: 'search', name: 'Baidu' }, + 'search.conduit.com': { type: 'search', name: 'Conduit' }, + 'www.vindex.nl': { type: 'search', name: 'Vindex' }, + 'search.vindex.nl': { type: 'search', name: 'Vindex' }, + 'search.babylon.com': { type: 'search', name: 'Babylon' }, + 'searchassist.babylon.com': { type: 'search', name: 'Babylon' }, + 'www.trovarapido.com': { type: 'search', name: 'TrovaRapido' }, + 'search.winamp.com': { type: 'search', name: 'Winamp' }, + 'www.suchmaschine.com': { type: 'search', name: 'Suchmaschine.com' }, + 'search.lycos.com': { type: 'search', name: 'Lycos' }, + 'www.lycos.com': { type: 'search', name: 'Lycos' }, + 'lycos.com': { type: 'search', name: 'Lycos' }, + 'www.vinden.nl': { type: 'search', name: 'Vinden' }, + 'www.altavista.com': { type: 'search', name: 'Altavista' }, + 'search.altavista.com': { type: 'search', name: 'Altavista' }, + 'listings.altavista.com': { type: 'search', name: 'Altavista' }, + 'altavista.de': { type: 'search', name: 'Altavista' }, + 'altavista.fr': { type: 'search', name: 'Altavista' }, + 'be-nl.altavista.com': { type: 'search', name: 'Altavista' }, + 'be-fr.altavista.com': { type: 'search', name: 'Altavista' }, + 'dmoz.org': { type: 'search', name: 'dmoz' }, + 'editors.dmoz.org': { type: 'search', name: 'dmoz' }, + 'ecosia.org': { type: 'search', name: 'Ecosia' }, + 'maxwebsearch.com': { type: 'search', name: 'Maxwebsearch' }, + 'www.euroseek.com': { type: 'search', name: 'Euroseek' }, + 'www.qwant.com': { type: 'search', name: 'Qwant' }, + 'lite.qwant.com': { type: 'search', name: 'Qwant' }, + 'www.x-recherche.com': { type: 'search', name: 'X-recherche' }, + 'images.yandex.ru': { type: 'search', name: 'Yandex Images' }, + 'images.yandex.ua': { type: 'search', name: 'Yandex Images' }, + 'images.yandex.com': { type: 'search', name: 'Yandex Images' }, + 'images.yandex.by': { type: 'search', name: 'Yandex Images' }, + 'suche.gmx.net': { type: 'search', name: 'GMX' }, + 'daemon-search.com': { type: 'search', name: 'Daemon search' }, + 'my.daemon-search.com': { type: 'search', name: 'Daemon search' }, + 'so.m.sm.cn': { type: 'search', name: 'Shenma' }, + 'yz.m.sm.cn': { type: 'search', name: 'Shenma' }, + 'm.sm.cn': { type: 'search', name: 'Shenma' }, + 'quark.sm.cn': { type: 'search', name: 'Shenma' }, + 'm.sp.sm.cn': { type: 'search', name: 'Shenma' }, + 'm.yz2.sm.cn': { type: 'search', name: 'Shenma' }, + 'm.yz.sm.cn': { type: 'search', name: 'Shenma' }, + 'www.firstsfind.com': { type: 'search', name: 'Firstfind' }, + 'www.crawler.com': { type: 'search', name: 'Crawler' }, + 'holmes.ge': { type: 'search', name: 'Holmes' }, + 'www.charter.net': { type: 'search', name: 'Charter' }, + 'www.ilse.nl': { type: 'search', name: 'Ilse' }, + 'search.earthlink.net': { type: 'search', name: 'earthlink' }, + 'www.qualigo.at': { type: 'search', name: 'Qualigo' }, + 'www.qualigo.ch': { type: 'search', name: 'Qualigo' }, + 'www.qualigo.de': { type: 'search', name: 'Qualigo' }, + 'www.qualigo.nl': { type: 'search', name: 'Qualigo' }, + 'ariadna.elmundo.es': { type: 'search', name: 'El Mundo' }, + 'metager2.de': { type: 'search', name: 'Metager2' }, + 'forestle.org': { type: 'search', name: 'Forestle' }, + 'www.forestle.org': { type: 'search', name: 'Forestle' }, + 'forestle.mobi': { type: 'search', name: 'Forestle' }, + 'www.search.ch': { type: 'search', name: 'Search.ch' }, + 'liveinternet.ru': { type: 'search', name: 'Liveinternet' }, + 'www.meinestadt.de': { type: 'search', name: 'Meinestadt' }, + 'www.fresh-weather.com': { type: 'search', name: 'Freshweather' }, + 'www.alltheweb.com': { type: 'search', name: 'AllTheWeb' }, + 'coccoc.com': { type: 'search', name: 'Coccoc' }, + 'search.snapdo.com': { type: 'search', name: 'Snapdo' }, + 'search.ukr.net': { type: 'search', name: 'UKR.net' }, + 'www3.zoek.nl': { type: 'search', name: 'Zoek' }, + 'search.daum.net': { type: 'search', name: 'Daum' }, + 'www.marktplaats.nl': { type: 'search', name: 'Marktplaats' }, + 'suche.info': { type: 'search', name: 'suche.info' }, + 'news.google.ac': { type: 'search', name: 'Google News' }, + 'news.google.ad': { type: 'search', name: 'Google News' }, + 'news.google.ae': { type: 'search', name: 'Google News' }, + 'news.google.am': { type: 'search', name: 'Google News' }, + 'news.google.as': { type: 'search', name: 'Google News' }, + 'news.google.at': { type: 'search', name: 'Google News' }, + 'news.google.az': { type: 'search', name: 'Google News' }, + 'news.google.ba': { type: 'search', name: 'Google News' }, + 'news.google.be': { type: 'search', name: 'Google News' }, + 'news.google.bf': { type: 'search', name: 'Google News' }, + 'news.google.bg': { type: 'search', name: 'Google News' }, + 'news.google.bi': { type: 'search', name: 'Google News' }, + 'news.google.bj': { type: 'search', name: 'Google News' }, + 'news.google.bs': { type: 'search', name: 'Google News' }, + 'news.google.by': { type: 'search', name: 'Google News' }, + 'news.google.ca': { type: 'search', name: 'Google News' }, + 'news.google.cat': { type: 'search', name: 'Google News' }, + 'news.google.cc': { type: 'search', name: 'Google News' }, + 'news.google.cd': { type: 'search', name: 'Google News' }, + 'news.google.cf': { type: 'search', name: 'Google News' }, + 'news.google.cg': { type: 'search', name: 'Google News' }, + 'news.google.ch': { type: 'search', name: 'Google News' }, + 'news.google.ci': { type: 'search', name: 'Google News' }, + 'news.google.cl': { type: 'search', name: 'Google News' }, + 'news.google.cm': { type: 'search', name: 'Google News' }, + 'news.google.cn': { type: 'search', name: 'Google News' }, + 'news.google.co.bw': { type: 'search', name: 'Google News' }, + 'news.google.co.ck': { type: 'search', name: 'Google News' }, + 'news.google.co.cr': { type: 'search', name: 'Google News' }, + 'news.google.co.id': { type: 'search', name: 'Google News' }, + 'news.google.co.il': { type: 'search', name: 'Google News' }, + 'news.google.co.in': { type: 'search', name: 'Google News' }, + 'news.google.co.jp': { type: 'search', name: 'Google News' }, + 'news.google.co.ke': { type: 'search', name: 'Google News' }, + 'news.google.co.kr': { type: 'search', name: 'Google News' }, + 'news.google.co.ls': { type: 'search', name: 'Google News' }, + 'news.google.co.ma': { type: 'search', name: 'Google News' }, + 'news.google.co.mz': { type: 'search', name: 'Google News' }, + 'news.google.co.nz': { type: 'search', name: 'Google News' }, + 'news.google.co.th': { type: 'search', name: 'Google News' }, + 'news.google.co.tz': { type: 'search', name: 'Google News' }, + 'news.google.co.ug': { type: 'search', name: 'Google News' }, + 'news.google.co.uk': { type: 'search', name: 'Google News' }, + 'news.google.co.uz': { type: 'search', name: 'Google News' }, + 'news.google.co.ve': { type: 'search', name: 'Google News' }, + 'news.google.co.vi': { type: 'search', name: 'Google News' }, + 'news.google.co.za': { type: 'search', name: 'Google News' }, + 'news.google.co.zm': { type: 'search', name: 'Google News' }, + 'news.google.co.zw': { type: 'search', name: 'Google News' }, + 'news.google.com': { type: 'search', name: 'Google News' }, + 'news.google.com.af': { type: 'search', name: 'Google News' }, + 'news.google.com.ag': { type: 'search', name: 'Google News' }, + 'news.google.com.ai': { type: 'search', name: 'Google News' }, + 'news.google.com.ar': { type: 'search', name: 'Google News' }, + 'news.google.com.au': { type: 'search', name: 'Google News' }, + 'news.google.com.bd': { type: 'search', name: 'Google News' }, + 'news.google.com.bh': { type: 'search', name: 'Google News' }, + 'news.google.com.bn': { type: 'search', name: 'Google News' }, + 'news.google.com.bo': { type: 'search', name: 'Google News' }, + 'news.google.com.br': { type: 'search', name: 'Google News' }, + 'news.google.com.by': { type: 'search', name: 'Google News' }, + 'news.google.com.bz': { type: 'search', name: 'Google News' }, + 'news.google.com.co': { type: 'search', name: 'Google News' }, + 'news.google.com.cu': { type: 'search', name: 'Google News' }, + 'news.google.com.cy': { type: 'search', name: 'Google News' }, + 'news.google.com.do': { type: 'search', name: 'Google News' }, + 'news.google.com.ec': { type: 'search', name: 'Google News' }, + 'news.google.com.eg': { type: 'search', name: 'Google News' }, + 'news.google.com.et': { type: 'search', name: 'Google News' }, + 'news.google.com.fj': { type: 'search', name: 'Google News' }, + 'news.google.com.gh': { type: 'search', name: 'Google News' }, + 'news.google.com.gi': { type: 'search', name: 'Google News' }, + 'news.google.com.gt': { type: 'search', name: 'Google News' }, + 'news.google.com.hk': { type: 'search', name: 'Google News' }, + 'news.google.com.jm': { type: 'search', name: 'Google News' }, + 'news.google.com.kh': { type: 'search', name: 'Google News' }, + 'news.google.com.kw': { type: 'search', name: 'Google News' }, + 'news.google.com.lb': { type: 'search', name: 'Google News' }, + 'news.google.com.lc': { type: 'search', name: 'Google News' }, + 'news.google.com.ly': { type: 'search', name: 'Google News' }, + 'news.google.com.mt': { type: 'search', name: 'Google News' }, + 'news.google.com.mx': { type: 'search', name: 'Google News' }, + 'news.google.com.my': { type: 'search', name: 'Google News' }, + 'news.google.com.na': { type: 'search', name: 'Google News' }, + 'news.google.com.nf': { type: 'search', name: 'Google News' }, + 'news.google.com.ng': { type: 'search', name: 'Google News' }, + 'news.google.com.ni': { type: 'search', name: 'Google News' }, + 'news.google.com.np': { type: 'search', name: 'Google News' }, + 'news.google.com.om': { type: 'search', name: 'Google News' }, + 'news.google.com.pa': { type: 'search', name: 'Google News' }, + 'news.google.com.pe': { type: 'search', name: 'Google News' }, + 'news.google.com.ph': { type: 'search', name: 'Google News' }, + 'news.google.com.pk': { type: 'search', name: 'Google News' }, + 'news.google.com.pr': { type: 'search', name: 'Google News' }, + 'news.google.com.py': { type: 'search', name: 'Google News' }, + 'news.google.com.qa': { type: 'search', name: 'Google News' }, + 'news.google.com.sa': { type: 'search', name: 'Google News' }, + 'news.google.com.sb': { type: 'search', name: 'Google News' }, + 'news.google.com.sg': { type: 'search', name: 'Google News' }, + 'news.google.com.sl': { type: 'search', name: 'Google News' }, + 'news.google.com.sv': { type: 'search', name: 'Google News' }, + 'news.google.com.tj': { type: 'search', name: 'Google News' }, + 'news.google.com.tn': { type: 'search', name: 'Google News' }, + 'news.google.com.tr': { type: 'search', name: 'Google News' }, + 'news.google.com.tw': { type: 'search', name: 'Google News' }, + 'news.google.com.ua': { type: 'search', name: 'Google News' }, + 'news.google.com.uy': { type: 'search', name: 'Google News' }, + 'news.google.com.vc': { type: 'search', name: 'Google News' }, + 'news.google.com.vn': { type: 'search', name: 'Google News' }, + 'news.google.cv': { type: 'search', name: 'Google News' }, + 'news.google.cz': { type: 'search', name: 'Google News' }, + 'news.google.de': { type: 'search', name: 'Google News' }, + 'news.google.dj': { type: 'search', name: 'Google News' }, + 'news.google.dk': { type: 'search', name: 'Google News' }, + 'news.google.dm': { type: 'search', name: 'Google News' }, + 'news.google.dz': { type: 'search', name: 'Google News' }, + 'news.google.ee': { type: 'search', name: 'Google News' }, + 'news.google.es': { type: 'search', name: 'Google News' }, + 'news.google.fi': { type: 'search', name: 'Google News' }, + 'news.google.fm': { type: 'search', name: 'Google News' }, + 'news.google.fr': { type: 'search', name: 'Google News' }, + 'news.google.ga': { type: 'search', name: 'Google News' }, + 'news.google.gd': { type: 'search', name: 'Google News' }, + 'news.google.ge': { type: 'search', name: 'Google News' }, + 'news.google.gf': { type: 'search', name: 'Google News' }, + 'news.google.gg': { type: 'search', name: 'Google News' }, + 'news.google.gl': { type: 'search', name: 'Google News' }, + 'news.google.gm': { type: 'search', name: 'Google News' }, + 'news.google.gp': { type: 'search', name: 'Google News' }, + 'news.google.gr': { type: 'search', name: 'Google News' }, + 'news.google.gy': { type: 'search', name: 'Google News' }, + 'news.google.hn': { type: 'search', name: 'Google News' }, + 'news.google.hr': { type: 'search', name: 'Google News' }, + 'news.google.ht': { type: 'search', name: 'Google News' }, + 'news.google.hu': { type: 'search', name: 'Google News' }, + 'news.google.ie': { type: 'search', name: 'Google News' }, + 'news.google.im': { type: 'search', name: 'Google News' }, + 'news.google.io': { type: 'search', name: 'Google News' }, + 'news.google.iq': { type: 'search', name: 'Google News' }, + 'news.google.is': { type: 'search', name: 'Google News' }, + 'news.google.it': { type: 'search', name: 'Google News' }, + 'news.google.it.ao': { type: 'search', name: 'Google News' }, + 'news.google.je': { type: 'search', name: 'Google News' }, + 'news.google.jo': { type: 'search', name: 'Google News' }, + 'news.google.kg': { type: 'search', name: 'Google News' }, + 'news.google.ki': { type: 'search', name: 'Google News' }, + 'news.google.kz': { type: 'search', name: 'Google News' }, + 'news.google.la': { type: 'search', name: 'Google News' }, + 'news.google.li': { type: 'search', name: 'Google News' }, + 'news.google.lk': { type: 'search', name: 'Google News' }, + 'news.google.lt': { type: 'search', name: 'Google News' }, + 'news.google.lu': { type: 'search', name: 'Google News' }, + 'news.google.lv': { type: 'search', name: 'Google News' }, + 'news.google.md': { type: 'search', name: 'Google News' }, + 'news.google.me': { type: 'search', name: 'Google News' }, + 'news.google.mg': { type: 'search', name: 'Google News' }, + 'news.google.mk': { type: 'search', name: 'Google News' }, + 'news.google.ml': { type: 'search', name: 'Google News' }, + 'news.google.mn': { type: 'search', name: 'Google News' }, + 'news.google.ms': { type: 'search', name: 'Google News' }, + 'news.google.mu': { type: 'search', name: 'Google News' }, + 'news.google.mv': { type: 'search', name: 'Google News' }, + 'news.google.mw': { type: 'search', name: 'Google News' }, + 'news.google.ne': { type: 'search', name: 'Google News' }, + 'news.google.nl': { type: 'search', name: 'Google News' }, + 'news.google.no': { type: 'search', name: 'Google News' }, + 'news.google.nr': { type: 'search', name: 'Google News' }, + 'news.google.nu': { type: 'search', name: 'Google News' }, + 'news.google.pl': { type: 'search', name: 'Google News' }, + 'news.google.pn': { type: 'search', name: 'Google News' }, + 'news.google.ps': { type: 'search', name: 'Google News' }, + 'news.google.pt': { type: 'search', name: 'Google News' }, + 'news.google.ro': { type: 'search', name: 'Google News' }, + 'news.google.rs': { type: 'search', name: 'Google News' }, + 'news.google.ru': { type: 'search', name: 'Google News' }, + 'news.google.rw': { type: 'search', name: 'Google News' }, + 'news.google.sc': { type: 'search', name: 'Google News' }, + 'news.google.se': { type: 'search', name: 'Google News' }, + 'news.google.sh': { type: 'search', name: 'Google News' }, + 'news.google.si': { type: 'search', name: 'Google News' }, + 'news.google.sk': { type: 'search', name: 'Google News' }, + 'news.google.sm': { type: 'search', name: 'Google News' }, + 'news.google.sn': { type: 'search', name: 'Google News' }, + 'news.google.so': { type: 'search', name: 'Google News' }, + 'news.google.st': { type: 'search', name: 'Google News' }, + 'news.google.td': { type: 'search', name: 'Google News' }, + 'news.google.tg': { type: 'search', name: 'Google News' }, + 'news.google.tk': { type: 'search', name: 'Google News' }, + 'news.google.tl': { type: 'search', name: 'Google News' }, + 'news.google.tm': { type: 'search', name: 'Google News' }, + 'news.google.to': { type: 'search', name: 'Google News' }, + 'news.google.tt': { type: 'search', name: 'Google News' }, + 'news.google.us': { type: 'search', name: 'Google News' }, + 'news.google.vg': { type: 'search', name: 'Google News' }, + 'news.google.vu': { type: 'search', name: 'Google News' }, + 'news.google.ws': { type: 'search', name: 'Google News' }, + 'zoohoo.cz': { type: 'search', name: 'Zoohoo' }, + 'search.seznam.cz': { type: 'search', name: 'Seznam' }, + 'online.no': { type: 'search', name: 'Online.no' }, + 'www.eurip.com': { type: 'search', name: 'Eurip' }, + 'all.by': { type: 'search', name: 'all.by' }, + 'search.rr.com': { type: 'search', name: 'Road Runner Search' }, + 'www.1881.no': { type: 'search', name: 'Opplysningen 1881' }, + 'www.yougoo.fr': { type: 'search', name: 'YouGoo' }, + 'bing.com/images/search': { type: 'search', name: 'Bing Images' }, + 'www.bing.com/images/search': { type: 'search', name: 'Bing Images' }, + 'geona.net': { type: 'search', name: 'Geona' }, + 'search.nate.com': { type: 'search', name: 'Nate' }, + 'www.searchthis.com': { type: 'search', name: 'Search This' }, + 'duckduckgo.com': { type: 'search', name: 'DuckDuckGo' }, + 'www.monster.be': { type: 'search', name: 'Monster' }, + 'www.monster.cz': { type: 'search', name: 'Monster' }, + 'www.monster.de': { type: 'search', name: 'Monster' }, + 'www.monster.fi': { type: 'search', name: 'Monster' }, + 'www.monster.fr': { type: 'search', name: 'Monster' }, + 'www.monster.ie': { type: 'search', name: 'Monster' }, + 'www.monster.it': { type: 'search', name: 'Monster' }, + 'www.monster.lu': { type: 'search', name: 'Monster' }, + 'www.monster.ch': { type: 'search', name: 'Monster' }, + 'www.monster.co.uk': { type: 'search', name: 'Monster' }, + 'www.hotbot.com': { type: 'search', name: 'Hotbot' }, + 'www.kvasir.no': { type: 'search', name: 'Kvasir' }, + 'www2.austronaut.at': { type: 'search', name: 'Austronaut' }, + 'www1.astronaut.at': { type: 'search', name: 'Austronaut' }, + 'sosodesktop.com': { type: 'search', name: 'SoSoDesk' }, + 'search.sosodesktop.com': { type: 'search', name: 'SoSoDesk' }, + 'search.excite.it': { type: 'search', name: 'Excite' }, + 'search.excite.fr': { type: 'search', name: 'Excite' }, + 'search.excite.de': { type: 'search', name: 'Excite' }, + 'search.excite.co.uk': { type: 'search', name: 'Excite' }, + 'serach.excite.es': { type: 'search', name: 'Excite' }, + 'search.excite.nl': { type: 'search', name: 'Excite' }, + 'msxml.excite.com': { type: 'search', name: 'Excite' }, + 'www.excite.co.jp': { type: 'search', name: 'Excite' }, + 'search.1and1.com': { type: 'search', name: '1&1' }, + 'search.qip.ru': { type: 'search', name: 'qip' }, + 'search.certified-toolbar.com': { type: 'search', name: 'Certified-Toolbar' }, + 'search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'ar.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'ar.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'au.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'au.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'br.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'br.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'ca.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'ca.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'cade.searchde.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'cade.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'chinese.searchinese.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'chinese.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'cn.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'cn.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'de.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'de.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'dk.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'dk.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'es.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'es.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'espanol.searchpanol.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'espanol.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'fr.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'fr.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'hk.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'hk.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'ie.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'ie.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'in.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'in.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'it.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'it.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'kr.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'kr.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'mx.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'mx.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'no.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'no.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'nz.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'nz.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'one.cn.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'one.searchn.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'qc.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'qc.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'ru.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'ru.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'se.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'se.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'search.searcharch.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'tw.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'tw.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'uk.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'uk.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'us.search.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'us.yahoo.com': { type: 'search', name: 'Yahoo!' }, + 'www.yahoo.co.jp': { type: 'search', name: 'Yahoo!' }, + 'search.yahoo.co.jp': { type: 'search', name: 'Yahoo!' }, + 'www.cercato.it': { type: 'search', name: 'Yahoo!' }, + 'search.offerbox.com': { type: 'search', name: 'Yahoo!' }, + 'ys.mirostart.com': { type: 'search', name: 'Yahoo!' }, + 'www.url.org': { type: 'search', name: 'URL.ORGanizier' }, + 'www.witch.de': { type: 'search', name: 'Witch' }, + 'www.mister-wong.com': { type: 'search', name: 'Mister Wong' }, + 'www.mister-wong.de': { type: 'search', name: 'Mister Wong' }, + 'sm.aport.ru': { type: 'search', name: 'Aport' }, + 'suche.web.de': { type: 'search', name: 'Web.de' }, + 'ask.com': { type: 'search', name: 'Ask' }, + 'www.ask.com': { type: 'search', name: 'Ask' }, + 'web.ask.com': { type: 'search', name: 'Ask' }, + 'int.ask.com': { type: 'search', name: 'Ask' }, + 'mws.ask.com': { type: 'search', name: 'Ask' }, + 'uk.ask.com': { type: 'search', name: 'Ask' }, + 'images.ask.com': { type: 'search', name: 'Ask' }, + 'ask.reference.com': { type: 'search', name: 'Ask' }, + 'www.askkids.com': { type: 'search', name: 'Ask' }, + 'iwon.ask.com': { type: 'search', name: 'Ask' }, + 'www.ask.co.uk': { type: 'search', name: 'Ask' }, + 'www.qbyrd.com': { type: 'search', name: 'Ask' }, + 'search-results.com': { type: 'search', name: 'Ask' }, + 'uk.search-results.com': { type: 'search', name: 'Ask' }, + 'www.search-results.com': { type: 'search', name: 'Ask' }, + 'int.search-results.com': { type: 'search', name: 'Ask' }, + 'serach.centrum.cz': { type: 'search', name: 'Centrum' }, + 'morfeo.centrum.cz': { type: 'search', name: 'Centrum' }, + 'bing.com': { type: 'search', name: 'Bing' }, + 'www.bing.com': { type: 'search', name: 'Bing' }, + 'msnbc.msn.com': { type: 'search', name: 'Bing' }, + 'dizionario.it.msn.com': { type: 'search', name: 'Bing' }, + 'cc.bingj.com': { type: 'search', name: 'Bing' }, + 'm.bing.com': { type: 'search', name: 'Bing' }, + 'video.google.com': { type: 'search', name: 'Google Video' }, + 'otsing.delfi.ee': { type: 'search', name: 'Delfi' }, + 'blekko.com': { type: 'search', name: 'blekko' }, + 'jyxo.1188.cz': { type: 'search', name: 'Jyxo' }, + 'www.kataweb.it': { type: 'search', name: 'Kataweb' }, + 'busca.uol.com.br': { type: 'search', name: 'uol.com.br' }, + 'arianna.libero.it': { type: 'search', name: 'Arianna' }, + 'www.arianna.com': { type: 'search', name: 'Arianna' }, + 'www.mamma.com': { type: 'search', name: 'Mamma' }, + 'mamma75.mamma.com': { type: 'search', name: 'Mamma' }, + 'www.yatedo.com': { type: 'search', name: 'Yatedo' }, + 'www.yatedo.fr': { type: 'search', name: 'Yatedo' }, + 'www.twingly.com': { type: 'search', name: 'Twingly' }, + 'smart.delfi.lv': { type: 'search', name: 'Delfi latvia' }, + 'www.pricerunner.co.uk': { type: 'search', name: 'PriceRunner' }, + 'websearch.rakuten.co.jp': { type: 'search', name: 'Rakuten' }, + 'www.google.com': { type: 'search', name: 'Google' }, + 'www.google.ac': { type: 'search', name: 'Google' }, + 'www.google.ad': { type: 'search', name: 'Google' }, + 'www.google.com.af': { type: 'search', name: 'Google' }, + 'www.google.com.ag': { type: 'search', name: 'Google' }, + 'www.google.com.ai': { type: 'search', name: 'Google' }, + 'www.google.am': { type: 'search', name: 'Google' }, + 'www.google.it.ao': { type: 'search', name: 'Google' }, + 'www.google.com.ar': { type: 'search', name: 'Google' }, + 'www.google.as': { type: 'search', name: 'Google' }, + 'www.google.at': { type: 'search', name: 'Google' }, + 'www.google.com.au': { type: 'search', name: 'Google' }, + 'www.google.az': { type: 'search', name: 'Google' }, + 'www.google.ba': { type: 'search', name: 'Google' }, + 'www.google.com.bd': { type: 'search', name: 'Google' }, + 'www.google.be': { type: 'search', name: 'Google' }, + 'www.google.bf': { type: 'search', name: 'Google' }, + 'www.google.bg': { type: 'search', name: 'Google' }, + 'www.google.com.bh': { type: 'search', name: 'Google' }, + 'www.google.bi': { type: 'search', name: 'Google' }, + 'www.google.bj': { type: 'search', name: 'Google' }, + 'www.google.com.bn': { type: 'search', name: 'Google' }, + 'www.google.com.bo': { type: 'search', name: 'Google' }, + 'www.google.com.br': { type: 'search', name: 'Google' }, + 'www.google.bs': { type: 'search', name: 'Google' }, + 'www.google.co.bw': { type: 'search', name: 'Google' }, + 'www.google.com.by': { type: 'search', name: 'Google' }, + 'www.google.by': { type: 'search', name: 'Google' }, + 'www.google.com.bz': { type: 'search', name: 'Google' }, + 'www.google.ca': { type: 'search', name: 'Google' }, + 'www.google.com.kh': { type: 'search', name: 'Google' }, + 'www.google.cc': { type: 'search', name: 'Google' }, + 'www.google.cd': { type: 'search', name: 'Google' }, + 'www.google.cf': { type: 'search', name: 'Google' }, + 'www.google.cat': { type: 'search', name: 'Google' }, + 'www.google.cg': { type: 'search', name: 'Google' }, + 'www.google.ch': { type: 'search', name: 'Google' }, + 'www.google.ci': { type: 'search', name: 'Google' }, + 'www.google.co.ck': { type: 'search', name: 'Google' }, + 'www.google.cl': { type: 'search', name: 'Google' }, + 'www.google.cm': { type: 'search', name: 'Google' }, + 'www.google.cn': { type: 'search', name: 'Google' }, + 'www.google.com.co': { type: 'search', name: 'Google' }, + 'www.google.co.cr': { type: 'search', name: 'Google' }, + 'www.google.com.cu': { type: 'search', name: 'Google' }, + 'www.google.cv': { type: 'search', name: 'Google' }, + 'www.google.com.cy': { type: 'search', name: 'Google' }, + 'www.google.cz': { type: 'search', name: 'Google' }, + 'www.google.de': { type: 'search', name: 'Google' }, + 'www.google.dj': { type: 'search', name: 'Google' }, + 'www.google.dk': { type: 'search', name: 'Google' }, + 'www.google.dm': { type: 'search', name: 'Google' }, + 'www.google.com.do': { type: 'search', name: 'Google' }, + 'www.google.dz': { type: 'search', name: 'Google' }, + 'www.google.com.ec': { type: 'search', name: 'Google' }, + 'www.google.ee': { type: 'search', name: 'Google' }, + 'www.google.com.eg': { type: 'search', name: 'Google' }, + 'www.google.es': { type: 'search', name: 'Google' }, + 'www.google.com.et': { type: 'search', name: 'Google' }, + 'www.google.fi': { type: 'search', name: 'Google' }, + 'www.google.com.fj': { type: 'search', name: 'Google' }, + 'www.google.fm': { type: 'search', name: 'Google' }, + 'www.google.fr': { type: 'search', name: 'Google' }, + 'www.google.ga': { type: 'search', name: 'Google' }, + 'www.google.gd': { type: 'search', name: 'Google' }, + 'www.google.ge': { type: 'search', name: 'Google' }, + 'www.google.gf': { type: 'search', name: 'Google' }, + 'www.google.gg': { type: 'search', name: 'Google' }, + 'www.google.com.gh': { type: 'search', name: 'Google' }, + 'www.google.com.gi': { type: 'search', name: 'Google' }, + 'www.google.gl': { type: 'search', name: 'Google' }, + 'www.google.gm': { type: 'search', name: 'Google' }, + 'www.google.gp': { type: 'search', name: 'Google' }, + 'www.google.gr': { type: 'search', name: 'Google' }, + 'www.google.com.gt': { type: 'search', name: 'Google' }, + 'www.google.gy': { type: 'search', name: 'Google' }, + 'www.google.com.hk': { type: 'search', name: 'Google' }, + 'www.google.hn': { type: 'search', name: 'Google' }, + 'www.google.hr': { type: 'search', name: 'Google' }, + 'www.google.ht': { type: 'search', name: 'Google' }, + 'www.google.hu': { type: 'search', name: 'Google' }, + 'www.google.co.id': { type: 'search', name: 'Google' }, + 'www.google.iq': { type: 'search', name: 'Google' }, + 'www.google.ie': { type: 'search', name: 'Google' }, + 'www.google.co.il': { type: 'search', name: 'Google' }, + 'www.google.im': { type: 'search', name: 'Google' }, + 'www.google.co.in': { type: 'search', name: 'Google' }, + 'www.google.io': { type: 'search', name: 'Google' }, + 'www.google.is': { type: 'search', name: 'Google' }, + 'www.google.it': { type: 'search', name: 'Google' }, + 'www.google.je': { type: 'search', name: 'Google' }, + 'www.google.com.jm': { type: 'search', name: 'Google' }, + 'www.google.jo': { type: 'search', name: 'Google' }, + 'www.google.co.jp': { type: 'search', name: 'Google' }, + 'www.google.co.ke': { type: 'search', name: 'Google' }, + 'www.google.ki': { type: 'search', name: 'Google' }, + 'www.google.kg': { type: 'search', name: 'Google' }, + 'www.google.co.kr': { type: 'search', name: 'Google' }, + 'www.google.com.kw': { type: 'search', name: 'Google' }, + 'www.google.kz': { type: 'search', name: 'Google' }, + 'www.google.la': { type: 'search', name: 'Google' }, + 'www.google.com.lb': { type: 'search', name: 'Google' }, + 'www.google.com.lc': { type: 'search', name: 'Google' }, + 'www.google.li': { type: 'search', name: 'Google' }, + 'www.google.lk': { type: 'search', name: 'Google' }, + 'www.google.co.ls': { type: 'search', name: 'Google' }, + 'www.google.lt': { type: 'search', name: 'Google' }, + 'www.google.lu': { type: 'search', name: 'Google' }, + 'www.google.lv': { type: 'search', name: 'Google' }, + 'www.google.com.ly': { type: 'search', name: 'Google' }, + 'www.google.co.ma': { type: 'search', name: 'Google' }, + 'www.google.md': { type: 'search', name: 'Google' }, + 'www.google.me': { type: 'search', name: 'Google' }, + 'www.google.mg': { type: 'search', name: 'Google' }, + 'www.google.mk': { type: 'search', name: 'Google' }, + 'www.google.ml': { type: 'search', name: 'Google' }, + 'www.google.mn': { type: 'search', name: 'Google' }, + 'www.google.ms': { type: 'search', name: 'Google' }, + 'www.google.com.mt': { type: 'search', name: 'Google' }, + 'www.google.mu': { type: 'search', name: 'Google' }, + 'www.google.mv': { type: 'search', name: 'Google' }, + 'www.google.mw': { type: 'search', name: 'Google' }, + 'www.google.com.mx': { type: 'search', name: 'Google' }, + 'www.google.com.my': { type: 'search', name: 'Google' }, + 'www.google.co.mz': { type: 'search', name: 'Google' }, + 'www.google.com.na': { type: 'search', name: 'Google' }, + 'www.google.ne': { type: 'search', name: 'Google' }, + 'www.google.com.nf': { type: 'search', name: 'Google' }, + 'www.google.com.ng': { type: 'search', name: 'Google' }, + 'www.google.com.ni': { type: 'search', name: 'Google' }, + 'www.google.nl': { type: 'search', name: 'Google' }, + 'www.google.no': { type: 'search', name: 'Google' }, + 'www.google.com.np': { type: 'search', name: 'Google' }, + 'www.google.nr': { type: 'search', name: 'Google' }, + 'www.google.nu': { type: 'search', name: 'Google' }, + 'www.google.co.nz': { type: 'search', name: 'Google' }, + 'www.google.com.om': { type: 'search', name: 'Google' }, + 'www.google.com.pa': { type: 'search', name: 'Google' }, + 'www.google.com.pe': { type: 'search', name: 'Google' }, + 'www.google.com.ph': { type: 'search', name: 'Google' }, + 'www.google.com.pk': { type: 'search', name: 'Google' }, + 'www.google.pl': { type: 'search', name: 'Google' }, + 'www.google.pn': { type: 'search', name: 'Google' }, + 'www.google.com.pr': { type: 'search', name: 'Google' }, + 'www.google.ps': { type: 'search', name: 'Google' }, + 'www.google.pt': { type: 'search', name: 'Google' }, + 'www.google.com.py': { type: 'search', name: 'Google' }, + 'www.google.com.qa': { type: 'search', name: 'Google' }, + 'www.google.ro': { type: 'search', name: 'Google' }, + 'www.google.rs': { type: 'search', name: 'Google' }, + 'www.google.ru': { type: 'search', name: 'Google' }, + 'www.google.rw': { type: 'search', name: 'Google' }, + 'www.google.com.sa': { type: 'search', name: 'Google' }, + 'www.google.com.sb': { type: 'search', name: 'Google' }, + 'www.google.sc': { type: 'search', name: 'Google' }, + 'www.google.se': { type: 'search', name: 'Google' }, + 'www.google.com.sg': { type: 'search', name: 'Google' }, + 'www.google.sh': { type: 'search', name: 'Google' }, + 'www.google.si': { type: 'search', name: 'Google' }, + 'www.google.sk': { type: 'search', name: 'Google' }, + 'www.google.com.sl': { type: 'search', name: 'Google' }, + 'www.google.sn': { type: 'search', name: 'Google' }, + 'www.google.sm': { type: 'search', name: 'Google' }, + 'www.google.so': { type: 'search', name: 'Google' }, + 'www.google.st': { type: 'search', name: 'Google' }, + 'www.google.com.sv': { type: 'search', name: 'Google' }, + 'www.google.td': { type: 'search', name: 'Google' }, + 'www.google.tg': { type: 'search', name: 'Google' }, + 'www.google.co.th': { type: 'search', name: 'Google' }, + 'www.google.com.tj': { type: 'search', name: 'Google' }, + 'www.google.tk': { type: 'search', name: 'Google' }, + 'www.google.tl': { type: 'search', name: 'Google' }, + 'www.google.tm': { type: 'search', name: 'Google' }, + 'www.google.to': { type: 'search', name: 'Google' }, + 'www.google.com.tn': { type: 'search', name: 'Google' }, + 'www.google.tn': { type: 'search', name: 'Google' }, + 'www.google.com.tr': { type: 'search', name: 'Google' }, + 'www.google.tt': { type: 'search', name: 'Google' }, + 'www.google.com.tw': { type: 'search', name: 'Google' }, + 'www.google.co.tz': { type: 'search', name: 'Google' }, + 'www.google.com.ua': { type: 'search', name: 'Google' }, + 'www.google.co.ug': { type: 'search', name: 'Google' }, + 'www.google.ae': { type: 'search', name: 'Google' }, + 'www.google.co.uk': { type: 'search', name: 'Google' }, + 'www.google.us': { type: 'search', name: 'Google' }, + 'www.google.com.uy': { type: 'search', name: 'Google' }, + 'www.google.co.uz': { type: 'search', name: 'Google' }, + 'www.google.com.vc': { type: 'search', name: 'Google' }, + 'www.google.co.ve': { type: 'search', name: 'Google' }, + 'www.google.vg': { type: 'search', name: 'Google' }, + 'www.google.co.vi': { type: 'search', name: 'Google' }, + 'www.google.com.vn': { type: 'search', name: 'Google' }, + 'www.google.vu': { type: 'search', name: 'Google' }, + 'www.google.ws': { type: 'search', name: 'Google' }, + 'www.google.co.za': { type: 'search', name: 'Google' }, + 'www.google.co.zm': { type: 'search', name: 'Google' }, + 'www.google.co.zw': { type: 'search', name: 'Google' }, + 'google.com': { type: 'search', name: 'Google' }, + 'google.ac': { type: 'search', name: 'Google' }, + 'google.ad': { type: 'search', name: 'Google' }, + 'google.com.af': { type: 'search', name: 'Google' }, + 'google.com.ag': { type: 'search', name: 'Google' }, + 'google.com.ai': { type: 'search', name: 'Google' }, + 'google.am': { type: 'search', name: 'Google' }, + 'google.it.ao': { type: 'search', name: 'Google' }, + 'google.com.ar': { type: 'search', name: 'Google' }, + 'google.as': { type: 'search', name: 'Google' }, + 'google.at': { type: 'search', name: 'Google' }, + 'google.com.au': { type: 'search', name: 'Google' }, + 'google.az': { type: 'search', name: 'Google' }, + 'google.ba': { type: 'search', name: 'Google' }, + 'google.com.bd': { type: 'search', name: 'Google' }, + 'google.be': { type: 'search', name: 'Google' }, + 'google.bf': { type: 'search', name: 'Google' }, + 'google.bg': { type: 'search', name: 'Google' }, + 'google.com.bh': { type: 'search', name: 'Google' }, + 'google.bi': { type: 'search', name: 'Google' }, + 'google.bj': { type: 'search', name: 'Google' }, + 'google.com.bn': { type: 'search', name: 'Google' }, + 'google.com.bo': { type: 'search', name: 'Google' }, + 'google.com.br': { type: 'search', name: 'Google' }, + 'google.bs': { type: 'search', name: 'Google' }, + 'google.co.bw': { type: 'search', name: 'Google' }, + 'google.com.by': { type: 'search', name: 'Google' }, + 'google.by': { type: 'search', name: 'Google' }, + 'google.com.bz': { type: 'search', name: 'Google' }, + 'google.ca': { type: 'search', name: 'Google' }, + 'google.com.kh': { type: 'search', name: 'Google' }, + 'google.cc': { type: 'search', name: 'Google' }, + 'google.cd': { type: 'search', name: 'Google' }, + 'google.cf': { type: 'search', name: 'Google' }, + 'google.cat': { type: 'search', name: 'Google' }, + 'google.cg': { type: 'search', name: 'Google' }, + 'google.ch': { type: 'search', name: 'Google' }, + 'google.ci': { type: 'search', name: 'Google' }, + 'google.co.ck': { type: 'search', name: 'Google' }, + 'google.cl': { type: 'search', name: 'Google' }, + 'google.cm': { type: 'search', name: 'Google' }, + 'google.cn': { type: 'search', name: 'Google' }, + 'google.com.co': { type: 'search', name: 'Google' }, + 'google.co.cr': { type: 'search', name: 'Google' }, + 'google.com.cu': { type: 'search', name: 'Google' }, + 'google.cv': { type: 'search', name: 'Google' }, + 'google.com.cy': { type: 'search', name: 'Google' }, + 'google.cz': { type: 'search', name: 'Google' }, + 'google.de': { type: 'search', name: 'Google' }, + 'google.dj': { type: 'search', name: 'Google' }, + 'google.dk': { type: 'search', name: 'Google' }, + 'google.dm': { type: 'search', name: 'Google' }, + 'google.com.do': { type: 'search', name: 'Google' }, + 'google.dz': { type: 'search', name: 'Google' }, + 'google.com.ec': { type: 'search', name: 'Google' }, + 'google.ee': { type: 'search', name: 'Google' }, + 'google.com.eg': { type: 'search', name: 'Google' }, + 'google.es': { type: 'search', name: 'Google' }, + 'google.com.et': { type: 'search', name: 'Google' }, + 'google.fi': { type: 'search', name: 'Google' }, + 'google.com.fj': { type: 'search', name: 'Google' }, + 'google.fm': { type: 'search', name: 'Google' }, + 'google.fr': { type: 'search', name: 'Google' }, + 'google.ga': { type: 'search', name: 'Google' }, + 'google.gd': { type: 'search', name: 'Google' }, + 'google.ge': { type: 'search', name: 'Google' }, + 'google.gf': { type: 'search', name: 'Google' }, + 'google.gg': { type: 'search', name: 'Google' }, + 'google.com.gh': { type: 'search', name: 'Google' }, + 'google.com.gi': { type: 'search', name: 'Google' }, + 'google.gl': { type: 'search', name: 'Google' }, + 'google.gm': { type: 'search', name: 'Google' }, + 'google.gp': { type: 'search', name: 'Google' }, + 'google.gr': { type: 'search', name: 'Google' }, + 'google.com.gt': { type: 'search', name: 'Google' }, + 'google.gy': { type: 'search', name: 'Google' }, + 'google.com.hk': { type: 'search', name: 'Google' }, + 'google.hn': { type: 'search', name: 'Google' }, + 'google.hr': { type: 'search', name: 'Google' }, + 'google.ht': { type: 'search', name: 'Google' }, + 'google.hu': { type: 'search', name: 'Google' }, + 'google.co.id': { type: 'search', name: 'Google' }, + 'google.iq': { type: 'search', name: 'Google' }, + 'google.ie': { type: 'search', name: 'Google' }, + 'google.co.il': { type: 'search', name: 'Google' }, + 'google.im': { type: 'search', name: 'Google' }, + 'google.co.in': { type: 'search', name: 'Google' }, + 'google.io': { type: 'search', name: 'Google' }, + 'google.is': { type: 'search', name: 'Google' }, + 'google.it': { type: 'search', name: 'Google' }, + 'google.je': { type: 'search', name: 'Google' }, + 'google.com.jm': { type: 'search', name: 'Google' }, + 'google.jo': { type: 'search', name: 'Google' }, + 'google.co.jp': { type: 'search', name: 'Google' }, + 'google.co.ke': { type: 'search', name: 'Google' }, + 'google.ki': { type: 'search', name: 'Google' }, + 'google.kg': { type: 'search', name: 'Google' }, + 'google.co.kr': { type: 'search', name: 'Google' }, + 'google.com.kw': { type: 'search', name: 'Google' }, + 'google.kz': { type: 'search', name: 'Google' }, + 'google.la': { type: 'search', name: 'Google' }, + 'google.com.lb': { type: 'search', name: 'Google' }, + 'google.com.lc': { type: 'search', name: 'Google' }, + 'google.li': { type: 'search', name: 'Google' }, + 'google.lk': { type: 'search', name: 'Google' }, + 'google.co.ls': { type: 'search', name: 'Google' }, + 'google.lt': { type: 'search', name: 'Google' }, + 'google.lu': { type: 'search', name: 'Google' }, + 'google.lv': { type: 'search', name: 'Google' }, + 'google.com.ly': { type: 'search', name: 'Google' }, + 'google.co.ma': { type: 'search', name: 'Google' }, + 'google.md': { type: 'search', name: 'Google' }, + 'google.me': { type: 'search', name: 'Google' }, + 'google.mg': { type: 'search', name: 'Google' }, + 'google.mk': { type: 'search', name: 'Google' }, + 'google.ml': { type: 'search', name: 'Google' }, + 'google.mn': { type: 'search', name: 'Google' }, + 'google.ms': { type: 'search', name: 'Google' }, + 'google.com.mt': { type: 'search', name: 'Google' }, + 'google.mu': { type: 'search', name: 'Google' }, + 'google.mv': { type: 'search', name: 'Google' }, + 'google.mw': { type: 'search', name: 'Google' }, + 'google.com.mx': { type: 'search', name: 'Google' }, + 'google.com.my': { type: 'search', name: 'Google' }, + 'google.co.mz': { type: 'search', name: 'Google' }, + 'google.com.na': { type: 'search', name: 'Google' }, + 'google.ne': { type: 'search', name: 'Google' }, + 'google.com.nf': { type: 'search', name: 'Google' }, + 'google.com.ng': { type: 'search', name: 'Google' }, + 'google.com.ni': { type: 'search', name: 'Google' }, + 'google.nl': { type: 'search', name: 'Google' }, + 'google.no': { type: 'search', name: 'Google' }, + 'google.com.np': { type: 'search', name: 'Google' }, + 'google.nr': { type: 'search', name: 'Google' }, + 'google.nu': { type: 'search', name: 'Google' }, + 'google.co.nz': { type: 'search', name: 'Google' }, + 'google.com.om': { type: 'search', name: 'Google' }, + 'google.com.pa': { type: 'search', name: 'Google' }, + 'google.com.pe': { type: 'search', name: 'Google' }, + 'google.com.ph': { type: 'search', name: 'Google' }, + 'google.com.pk': { type: 'search', name: 'Google' }, + 'google.pl': { type: 'search', name: 'Google' }, + 'google.pn': { type: 'search', name: 'Google' }, + 'google.com.pr': { type: 'search', name: 'Google' }, + 'google.ps': { type: 'search', name: 'Google' }, + 'google.pt': { type: 'search', name: 'Google' }, + 'google.com.py': { type: 'search', name: 'Google' }, + 'google.com.qa': { type: 'search', name: 'Google' }, + 'google.ro': { type: 'search', name: 'Google' }, + 'google.rs': { type: 'search', name: 'Google' }, + 'google.ru': { type: 'search', name: 'Google' }, + 'google.rw': { type: 'search', name: 'Google' }, + 'google.com.sa': { type: 'search', name: 'Google' }, + 'google.com.sb': { type: 'search', name: 'Google' }, + 'google.sc': { type: 'search', name: 'Google' }, + 'google.se': { type: 'search', name: 'Google' }, + 'google.com.sg': { type: 'search', name: 'Google' }, + 'google.sh': { type: 'search', name: 'Google' }, + 'google.si': { type: 'search', name: 'Google' }, + 'google.sk': { type: 'search', name: 'Google' }, + 'google.com.sl': { type: 'search', name: 'Google' }, + 'google.sn': { type: 'search', name: 'Google' }, + 'google.sm': { type: 'search', name: 'Google' }, + 'google.so': { type: 'search', name: 'Google' }, + 'google.st': { type: 'search', name: 'Google' }, + 'google.com.sv': { type: 'search', name: 'Google' }, + 'google.td': { type: 'search', name: 'Google' }, + 'google.tg': { type: 'search', name: 'Google' }, + 'google.co.th': { type: 'search', name: 'Google' }, + 'google.com.tj': { type: 'search', name: 'Google' }, + 'google.tk': { type: 'search', name: 'Google' }, + 'google.tl': { type: 'search', name: 'Google' }, + 'google.tm': { type: 'search', name: 'Google' }, + 'google.to': { type: 'search', name: 'Google' }, + 'google.com.tn': { type: 'search', name: 'Google' }, + 'google.com.tr': { type: 'search', name: 'Google' }, + 'google.tt': { type: 'search', name: 'Google' }, + 'google.com.tw': { type: 'search', name: 'Google' }, + 'google.co.tz': { type: 'search', name: 'Google' }, + 'google.com.ua': { type: 'search', name: 'Google' }, + 'google.co.ug': { type: 'search', name: 'Google' }, + 'google.ae': { type: 'search', name: 'Google' }, + 'google.co.uk': { type: 'search', name: 'Google' }, + 'google.us': { type: 'search', name: 'Google' }, + 'google.com.uy': { type: 'search', name: 'Google' }, + 'google.co.uz': { type: 'search', name: 'Google' }, + 'google.com.vc': { type: 'search', name: 'Google' }, + 'google.co.ve': { type: 'search', name: 'Google' }, + 'google.vg': { type: 'search', name: 'Google' }, + 'google.co.vi': { type: 'search', name: 'Google' }, + 'google.com.vn': { type: 'search', name: 'Google' }, + 'google.vu': { type: 'search', name: 'Google' }, + 'google.ws': { type: 'search', name: 'Google' }, + 'google.co.za': { type: 'search', name: 'Google' }, + 'google.co.zm': { type: 'search', name: 'Google' }, + 'google.co.zw': { type: 'search', name: 'Google' }, + 'google.tn': { type: 'search', name: 'Google' }, + 'search.avg.com': { type: 'search', name: 'Google' }, + 'isearch.avg.com': { type: 'search', name: 'Google' }, + 'www.cnn.com': { type: 'search', name: 'Google' }, + 'darkoogle.com': { type: 'search', name: 'Google' }, + 'search.darkoogle.com': { type: 'search', name: 'Google' }, + 'search.foxtab.com': { type: 'search', name: 'Google' }, + 'www.gooofullsearch.com': { type: 'search', name: 'Google' }, + 'search.hiyo.com': { type: 'search', name: 'Google' }, + 'search.incredimail.com': { type: 'search', name: 'Google' }, + 'search1.incredimail.com': { type: 'search', name: 'Google' }, + 'search2.incredimail.com': { type: 'search', name: 'Google' }, + 'search3.incredimail.com': { type: 'search', name: 'Google' }, + 'search4.incredimail.com': { type: 'search', name: 'Google' }, + 'search.incredibar.com': { type: 'search', name: 'Google' }, + 'search.sweetim.com': { type: 'search', name: 'Google' }, + 'www.fastweb.it': { type: 'search', name: 'Google' }, + 'search.juno.com': { type: 'search', name: 'Google' }, + 'find.tdc.dk': { type: 'search', name: 'Google' }, + 'searchresults.verizon.com': { type: 'search', name: 'Google' }, + 'search.walla.co.il': { type: 'search', name: 'Google' }, + 'search.alot.com': { type: 'search', name: 'Google' }, + 'www.googleearth.de': { type: 'search', name: 'Google' }, + 'www.googleearth.fr': { type: 'search', name: 'Google' }, + 'webcache.googleusercontent.com': { type: 'search', name: 'Google' }, + 'encrypted.google.com': { type: 'search', name: 'Google' }, + 'googlesyndicatedsearch.com': { type: 'search', name: 'Google' }, + 'com.google.android.googlequicksearchbox': { type: 'search', name: 'Google' }, + 'www.blogpulse.com': { type: 'search', name: 'Blogpulse' }, + 'www.hooseek.com': { type: 'search', name: 'Hooseek.com' }, + 'www.dalesearch.com': { type: 'search', name: 'Dalesearch' }, + 'rechercher.aliceadsl.fr': { type: 'search', name: 'Alice Adsl' }, + 'suche.t-online.de': { type: 'search', name: 'T-Online' }, + 'brisbane.t-online.de': { type: 'search', name: 'T-Online' }, + 'navigationshilfe.t-online.de': { type: 'search', name: 'T-Online' }, + 'www.sougou.com': { type: 'search', name: 'Sogou' }, + 'www.soso.com': { type: 'search', name: 'Sogou' }, + 'req.-hit-parade.com': { type: 'search', name: 'Hit-Parade' }, + 'class.hit-parade.com': { type: 'search', name: 'Hit-Parade' }, + 'www.hit-parade.com': { type: 'search', name: 'Hit-Parade' }, + 'www.searchcanvas.com': { type: 'search', name: 'SearchCanvas' }, + 'junglekey.com': { type: 'search', name: 'Jungle Key' }, + 'junglekey.fr': { type: 'search', name: 'Jungle Key' }, + 'www.google.interia.pl': { type: 'search', name: 'Interia' }, + 'search.genieo.com': { type: 'search', name: 'Genieo' }, + 'search.tiscali.it': { type: 'search', name: 'Tiscali' }, + 'search-dyn.tiscali.it': { type: 'search', name: 'Tiscali' }, + 'hledani.tiscali.cz': { type: 'search', name: 'Tiscali' }, + 'www.gomeo.com': { type: 'search', name: 'Gomeo' }, + 'webmail.bigpond.com': { type: 'email', name: 'Bigpond' }, + 'webmail2.bigpond.com': { type: 'email', name: 'Bigpond' }, + 'email.telstra.com': { type: 'email', name: 'Bigpond' }, + 'basic.messaging.bigpond.com': { type: 'email', name: 'Bigpond' }, + 'mail.naver.com': { type: 'email', name: 'Naver Mail' }, + 'mail.zoho.com': { type: 'email', name: 'Zoho' }, + 'webmail.virginbroadband.com.au': { type: 'email', name: 'Virgin' }, + 'mail.yahoo.net': { type: 'email', name: 'Yahoo! Mail' }, + 'mail.yahoo.com': { type: 'email', name: 'Yahoo! Mail' }, + 'mail.yahoo.co.uk': { type: 'email', name: 'Yahoo! Mail' }, + 'mail.yahoo.co.jp': { type: 'email', name: 'Yahoo! Mail' }, + 'com.yahoo.mobile.client.android.mail': { + type: 'email', + name: 'Yahoo! Mail', + }, + 'webmail.iinet.net.au': { type: 'email', name: 'iiNet' }, + 'mail.iinet.net.au': { type: 'email', name: 'iiNet' }, + 'mail.e1.ru': { type: 'email', name: 'E1.ru' }, + 'webmail.vodafone.co.nz': { type: 'email', name: 'Vodafone' }, + 'mail.126.com': { type: 'email', name: '126 Mail' }, + 'com.mailchimp.mailchimp': { type: 'email', name: 'Mailchimp' }, + 'inbox.com': { type: 'email', name: 'Inbox.com' }, + 'webmail.iprimus.com.au': { type: 'email', name: 'iPrimus' }, + 'mail.qq.com': { type: 'email', name: 'QQ Mail' }, + 'exmail.qq.com': { type: 'email', name: 'QQ Mail' }, + 'mail.qip.ru': { type: 'email', name: 'QIP' }, + 'sibmail.com': { type: 'email', name: 'Sibmail' }, + 'webmail.freenet.de': { type: 'email', name: 'Freenet' }, + 'email.seznam.cz': { type: 'email', name: 'Seznam Mail' }, + 'webmail.westnet.com.au': { type: 'email', name: 'Westnet' }, + 'mail.live.com': { type: 'email', name: 'Outlook.com' }, + 'outlook.live.com': { type: 'email', name: 'Outlook.com' }, + 'com.microsoft.office.outlook': { type: 'email', name: 'Outlook.com' }, + 'webmail.dodo.com.au': { type: 'email', name: 'Dodo' }, + 'webmail.2degreesbroadband.co.nz': { type: 'email', name: '2degrees' }, + 'mail2.daum.net': { type: 'email', name: 'Daum Mail' }, + 'mail.daum.net': { type: 'email', name: 'Daum Mail' }, + 'post.ru': { type: 'email', name: 'Beeline' }, + 'e.mail.ru': { type: 'email', name: 'Mail.ru' }, + 'touch.mail.ru': { type: 'email', name: 'Mail.ru' }, + 'webmail.adam.com.au': { type: 'email', name: 'Adam Internet' }, + 'orange.fr/webmail': { type: 'email', name: 'Orange Webmail' }, + 'com.earthlink.myearthlink': { type: 'email', name: 'earthlink' }, + 'mail.aol.com': { type: 'email', name: 'AOL Mail' }, + 'com.aol.mobile.aolapp': { type: 'email', name: 'AOL Mail' }, + 'webmail.netspace.net.au': { type: 'email', name: 'Netspace' }, + 'webmail.optuszoo.com.au': { type: 'email', name: 'Optus Zoo' }, + 'webmail.optusnet.com.au': { type: 'email', name: 'Optus Zoo' }, + 'webmail.commander.net.au': { type: 'email', name: 'Commander' }, + 'mastermail.ru': { type: 'email', name: 'Mastermail' }, + 'm.mastermail.ru': { type: 'email', name: 'Mastermail' }, + 'mail.yandex.ru': { type: 'email', name: 'Yandex' }, + 'mail.yandex.com': { type: 'email', name: 'Yandex' }, + 'mail.yandex.kz': { type: 'email', name: 'Yandex' }, + 'mail.yandex.ua': { type: 'email', name: 'Yandex' }, + 'mail.yandex.by': { type: 'email', name: 'Yandex' }, + 'mail.163.com': { type: 'email', name: '163 Mail' }, + 'mail.ukr.net': { type: 'email', name: 'Ukr.net' }, + 'mail.rambler.ru': { type: 'email', name: 'Rambler' }, + 'mail.mynet.com': { type: 'email', name: 'Mynet Mail' }, + 'mail.google.com': { type: 'email', name: 'Gmail' }, + 'com.google.android.gm': { type: 'email', name: 'Gmail' }, + 'inbox.google.com': { type: 'email', name: 'Gmail' }, + 'adspirit.de': { type: 'paid', name: 'AdSpirit' }, + 'rtbcity.com': { type: 'paid', name: 'AdSpirit' }, + 'plusperformance.com': { type: 'paid', name: 'AdSpirit' }, + 'flashtalking.com': { type: 'paid', name: 'Flashtalking' }, + 'servedby.flashtalking.com': { type: 'paid', name: 'Flashtalking' }, + 'wunderloop.net': { type: 'paid', name: 'AudienceScience' }, + 'paid.outbrain.com': { type: 'paid', name: 'Outbrain' }, + 'yieldmo.com': { type: 'paid', name: 'Yieldmo' }, + 'mozo.com.au': { type: 'paid', name: 'Mozo' }, + 'a.mozo.com.au': { type: 'paid', name: 'Mozo' }, + 'acuityplatform.com': { type: 'paid', name: 'Acuity Ads' }, + 'lfstmedia.com': { type: 'paid', name: 'LifeStreet' }, + 'microad.jp': { type: 'paid', name: 'MicroAd' }, + 'trc.taboola.com': { type: 'paid', name: 'Taboola' }, + 'api.taboola.com': { type: 'paid', name: 'Taboola' }, + 'taboola.com': { type: 'paid', name: 'Taboola' }, + 'ad.doubleclick.net': { type: 'paid', name: 'Doubleclick' }, + 'ad-apac.doubleclick.net': { type: 'paid', name: 'Doubleclick' }, + 's0.2mdn.net': { type: 'paid', name: 'Doubleclick' }, + 's1.2mdn.net': { type: 'paid', name: 'Doubleclick' }, + 'dp.g.doubleclick.net': { type: 'paid', name: 'Doubleclick' }, + 'pubads.g.doubleclick.net': { type: 'paid', name: 'Doubleclick' }, + 'adform.net': { type: 'paid', name: 'Adform' }, + 'bs.serving-sys.com': { type: 'paid', name: 'Sizmek' }, + 'cas.jp.as.criteo.com': { type: 'paid', name: 'Criteo' }, + 'cas.criteo.com': { type: 'paid', name: 'Criteo' }, + 'adingo.jp': { type: 'paid', name: 'Fluct' }, + 'lowermybills.com': { type: 'paid', name: 'LowerMyBills' }, + 'www.whitepages.com.au': { type: 'paid', name: 'White Pages' }, + 'mobile.whitepages.com.au': { type: 'paid', name: 'White Pages' }, + 'adadvisor.net': { type: 'paid', name: 'Neustar AdAdvisor' }, + 'nexage.com': { type: 'paid', name: 'ONE by AOL' }, + 'mixpo.com': { type: 'paid', name: 'Mixpo' }, + 'optimized-by.rubiconproject.com': { type: 'paid', name: 'Rubicon Project' }, + 'sshowads.pubmatic.com': { type: 'paid', name: 'PubMatic' }, + 'jivox.com': { type: 'paid', name: 'Jivox' }, + 'bidswitch.net': { type: 'paid', name: 'BidSwitch' }, + 'sonobi.com': { type: 'paid', name: 'Sonobi' }, + 'steelhousemedia.com': { type: 'paid', name: 'SteelHouse' }, + 'adroll.com': { type: 'paid', name: 'AdRoll' }, + 'adnet.de': { type: 'paid', name: 'AdNET' }, + 'cdnx.tribalfusion.com': { type: 'paid', name: 'Tribal Fusion' }, + 'market.yandex.ru': { type: 'paid', name: 'Yandex.Market' }, + 'm.market.yandex.ru': { type: 'paid', name: 'Yandex.Market' }, + 'stickyadstv.com': { type: 'paid', name: 'StickyADS.tv' }, + 'sfx.stickyadstv.com': { type: 'paid', name: 'StickyADS.tv' }, + 'zedo.com': { type: 'paid', name: 'ZEDO' }, + 'z1.zedo.com': { type: 'paid', name: 'ZEDO' }, + 'farm.plista.com': { type: 'paid', name: 'Plista' }, + 'ib.adnxs.com': { type: 'paid', name: 'AppNexus' }, + 'adnxs.com': { type: 'paid', name: 'AppNexus' }, + '247realmedia.com': { type: 'paid', name: 'AppNexus' }, + 'lijit.com': { type: 'paid', name: 'Sovrn' }, + 'www.googleadservices.com': { type: 'paid', name: 'Google' }, + 'partner.googleadservices.com': { type: 'paid', name: 'Google' }, + 'googleads.g.doubleclick.net': { type: 'paid', name: 'Google' }, + 'tpc.googlesyndication.com': { type: 'paid', name: 'Google' }, + 'googleadservices.com': { type: 'paid', name: 'Google' }, + 'imasdk.googleapis.com': { type: 'paid', name: 'Google' }, + 'eyeota.net': { type: 'paid', name: 'Eyeota' }, + 'price.ru': { type: 'paid', name: 'Price.ru' }, + 'v.price.ru': { type: 'paid', name: 'Price.ru' }, + 'us-ads.openx.net': { type: 'paid', name: 'OpenX' }, + 'openx.net': { type: 'paid', name: 'OpenX' }, + 'servedbyopenx.com': { type: 'paid', name: 'OpenX' }, + 'openxenterprise.com': { type: 'paid', name: 'OpenX' }, + 'casalemedia.com': { type: 'paid', name: 'Casale Media' }, + 'adition.com': { type: 'paid', name: 'Adition' }, + 'an.yandex.ru': { type: 'paid', name: 'Yandex.Direct' }, + 'yabs.yandex.ru': { type: 'paid', name: 'Yandex.Direct' }, + 'yabs.yandex.ua': { type: 'paid', name: 'Yandex.Direct' }, + 'yabs.yandex.com': { type: 'paid', name: 'Yandex.Direct' }, + 'yabs.yandex.by': { type: 'paid', name: 'Yandex.Direct' }, + 'adfox.ru': { type: 'paid', name: 'ADFOX' }, + 'www.adfox.ru': { type: 'paid', name: 'ADFOX' }, + 'ads.adfox.ru': { type: 'paid', name: 'ADFOX' }, + 'www.ads.adfox.ru': { type: 'paid', name: 'ADFOX' }, + 'torg.mail.ru': { type: 'paid', name: 'Torg.Mail.ru' }, + 'sociomantic.com': { type: 'paid', name: 'Sociomantic Labs' }, + 'hi5.com': { type: 'social', name: 'hi5' }, + 'friendster.com': { type: 'social', name: 'Friendster' }, + 'vkrugudruzei.ru': { type: 'social', name: 'vKruguDruzei.ru' }, + 'xanga.com': { type: 'social', name: 'Xanga' }, + 'myspace.com': { type: 'social', name: 'Myspace' }, + 'buzznet.com': { type: 'social', name: 'Buzznet' }, + 'mylife.ru': { type: 'social', name: 'MyLife' }, + 'flickr.com': { type: 'social', name: 'Flickr' }, + 'forums.whirlpool.net.au': { type: 'social', name: 'Whirlpool' }, + 'sonico.com': { type: 'social', name: 'Sonico.com' }, + 'odnoklassniki.ru': { type: 'social', name: 'Odnoklassniki' }, + 'ok.ru': { type: 'social', name: 'Odnoklassniki' }, + 'tildes.net': { type: 'social', name: 'Tildes' }, + 'com.talklittle.android.tildes': { type: 'social', name: 'Tildes' }, + 'classmates.com': { type: 'social', name: 'Classmates' }, + 'friendsreunited.com': { type: 'social', name: 'Friends Reunited' }, + 'news.ycombinator.com': { type: 'social', name: 'Hacker News' }, + 'io.github.hidroh.materialistic': { type: 'social', name: 'Hacker News' }, + 'quora.com': { type: 'social', name: 'Quora' }, + 'livejournal.ru': { type: 'social', name: 'LiveJournal' }, + 'netlog.com': { type: 'social', name: 'Netlog' }, + 'orkut.com': { type: 'social', name: 'Orkut' }, + 'myheritage.com': { type: 'social', name: 'MyHeritage' }, + 'multiply.com': { type: 'social', name: 'Multiply' }, + 'threads.net': { type: 'social', name: 'Threads' }, + 'l.threads.net': { type: 'social', name: 'Threads' }, + 'com.instagram.barcelona': { type: 'social', name: 'Threads' }, + 'myyearbook.com': { type: 'social', name: 'myYearbook' }, + 'renren.com': { type: 'social', name: 'Renren' }, + 'app.slack.com': { type: 'social', name: 'Slack' }, + 'com.slack': { type: 'social', name: 'Slack' }, + 'weeworld.com': { type: 'social', name: 'WeeWorld' }, + 'vimeo.com': { type: 'social', name: 'Vimeo' }, + 'Sozluk.com': { type: 'social', name: 'Eksi Sozluk' }, + 'sourtimes.org': { type: 'social', name: 'Eksi Sozluk' }, + 'mixi.jp': { type: 'social', name: 'Mixi' }, + 'geni.com': { type: 'social', name: 'Geni' }, + 'uludagsozluk.com': { type: 'social', name: 'Uludag Sozluk' }, + 'ulusozluk.com': { type: 'social', name: 'Uludag Sozluk' }, + 'sourceforge.net': { type: 'social', name: 'SourceForge' }, + 'plaxo.com': { type: 'social', name: 'Plaxo' }, + 'taringa.net': { type: 'social', name: 'Taringa!' }, + 'login.tagged.com': { type: 'social', name: 'Tagged' }, + 'xing.com': { type: 'social', name: 'XING' }, + 'instagram.com': { type: 'social', name: 'Instagram' }, + 'l.instagram.com': { type: 'social', name: 'Instagram' }, + 'com.instagram.android': { type: 'social', name: 'Instagram' }, + 'm.vk.com': { type: 'social', name: 'Vkontakte' }, + 'vk.com': { type: 'social', name: 'Vkontakte' }, + 'away.vk.com': { type: 'social', name: 'Vkontakte' }, + 'vkontakte.ru': { type: 'social', name: 'Vkontakte' }, + 'weibo.com': { type: 'social', name: 'Weibo' }, + 't.cn': { type: 'social', name: 'Weibo' }, + 'web.telegram.org': { type: 'social', name: 'Telegram' }, + 'org.telegram.messenger': { type: 'social', name: 'Telegram' }, + 'org.telegram.messenger.web': { type: 'social', name: 'Telegram' }, + 'org.aka.messenger': { type: 'social', name: 'Telegram' }, + 'org.telegram.biftogram': { type: 'social', name: 'Telegram' }, + 'org.telegram.plus': { type: 'social', name: 'Telegram' }, + 'twitter.com': { type: 'social', name: 'Twitter' }, + 't.co': { type: 'social', name: 'Twitter' }, + 'com.twitter.android': { type: 'social', name: 'Twitter' }, + 'com.snapchat.android': { type: 'social', name: 'Snapchat' }, + 'snapchat.com': { type: 'social', name: 'Snapchat' }, + 'donanimhaber.com': { type: 'social', name: 'Donanimhaber' }, + 'wayn.com': { type: 'social', name: 'WAYN' }, + 'web.skype.com': { type: 'social', name: 'Skype' }, + 'my.mail.ru': { type: 'social', name: 'Mail.ru' }, + 'badoo.com': { type: 'social', name: 'Badoo' }, + 'instela.com': { type: 'social', name: 'Instela' }, + 'habbo.com': { type: 'social', name: 'Habbo' }, + 'pinterest.ca': { type: 'social', name: 'Pinterest' }, + 'pinterest.cl': { type: 'social', name: 'Pinterest' }, + 'pinterest.co.kr': { type: 'social', name: 'Pinterest' }, + 'pinterest.com': { type: 'social', name: 'Pinterest' }, + 'pinterest.com.au': { type: 'social', name: 'Pinterest' }, + 'pinterest.co.uk': { type: 'social', name: 'Pinterest' }, + 'pinterest.de': { type: 'social', name: 'Pinterest' }, + 'pinterest.dk': { type: 'social', name: 'Pinterest' }, + 'pinterest.es': { type: 'social', name: 'Pinterest' }, + 'pinterest.fr': { type: 'social', name: 'Pinterest' }, + 'pinterest.jp': { type: 'social', name: 'Pinterest' }, + 'pinterest.nz': { type: 'social', name: 'Pinterest' }, + 'pinterest.pt': { type: 'social', name: 'Pinterest' }, + 'pinterest.se': { type: 'social', name: 'Pinterest' }, + 'pinterest.at': { type: 'social', name: 'Pinterest' }, + 'pinterest.ch': { type: 'social', name: 'Pinterest' }, + 'pinterest.com.mx': { type: 'social', name: 'Pinterest' }, + 'pinterest.ie': { type: 'social', name: 'Pinterest' }, + 'pinterest.it': { type: 'social', name: 'Pinterest' }, + 'pinterest.ph': { type: 'social', name: 'Pinterest' }, + 'pinterest.ru': { type: 'social', name: 'Pinterest' }, + 'com.pinterest': { type: 'social', name: 'Pinterest' }, + 'com.linkedin.android': { type: 'social', name: 'LinkedIn' }, + 'linkedin.com': { type: 'social', name: 'LinkedIn' }, + 'lnkd.in': { type: 'social', name: 'LinkedIn' }, + 'foursquare.com': { type: 'social', name: 'Foursquare' }, + 'douban.com': { type: 'social', name: 'Douban' }, + 'login.live.com': { type: 'social', name: 'Windows Live Spaces' }, + 'blackplanet.com': { type: 'social', name: 'BlackPlanet' }, + 'global.cyworld.com': { type: 'social', name: 'Cyworld' }, + 'getpocket.com': { type: 'social', name: 'Pocket' }, + 'skyrock.com': { type: 'social', name: 'Skyrock' }, + 'facebook.com': { type: 'social', name: 'Facebook' }, + 'fb.me': { type: 'social', name: 'Facebook' }, + 'm.facebook.com': { type: 'social', name: 'Facebook' }, + 'l.facebook.com': { type: 'social', name: 'Facebook' }, + 'lm.facebook.com': { type: 'social', name: 'Facebook' }, + 'com.facebook.katana': { type: 'social', name: 'Facebook' }, + 'web.whatsapp.com': { type: 'social', name: 'WhatsApp' }, + 'com.whatsapp': { type: 'social', name: 'WhatsApp' }, + 'redirect.disqus.com': { type: 'social', name: 'Disqus' }, + 'disq.us': { type: 'social', name: 'Disqus' }, + 'disqus.com': { type: 'social', name: 'Disqus' }, + 'studivz.net': { type: 'social', name: 'StudiVZ' }, + 'fotolog.com': { type: 'social', name: 'Fotolog' }, + 'itusozluk.com': { type: 'social', name: 'ITU Sozluk' }, + 'url.google.com': { type: 'social', name: 'Google+' }, + 'plus.google.com': { type: 'social', name: 'Google+' }, + 'nk.pl': { type: 'social', name: 'Nasza-klasa.pl' }, + 'qzone.qq.com': { type: 'social', name: 'Qzone' }, + 'flixster.com': { type: 'social', name: 'Flixster' }, + 'bebo.com': { type: 'social', name: 'Bebo' }, + 'tuenti.com': { type: 'social', name: 'Tuenti' }, + 'youtube.com': { type: 'social', name: 'Youtube' }, + 'youtu.be': { type: 'social', name: 'Youtube' }, + 'reddit.com': { type: 'social', name: 'Reddit' }, + 'io.syncapps.lemmy_sync': { type: 'social', name: 'Reddit' }, + 'com.laurencedawson.reddit_sync': { type: 'social', name: 'Reddit' }, + 'com.laurencedawson.reddit_sync.pro': { type: 'social', name: 'Reddit' }, + 'viadeo.com': { type: 'social', name: 'Viadeo' }, + 'github.com': { type: 'social', name: 'GitHub' }, + 'stackoverflow.com': { type: 'social', name: 'StackOverflow' }, + 'gaiaonline.com': { type: 'social', name: 'Gaia Online' }, + 'stumbleupon.com': { type: 'social', name: 'StumbleUpon' }, + 'inci.sozlukspot.com': { type: 'social', name: 'Inci Sozluk' }, + 'incisozluk.com': { type: 'social', name: 'Inci Sozluk' }, + 'incisozluk.cc': { type: 'social', name: 'Inci Sozluk' }, + 'identi.ca': { type: 'social', name: 'Identi.ca' }, + 'lastfm.ru': { type: 'social', name: 'Last.fm' }, + 'tumblr.com': { type: 'social', name: 'Tumblr' }, + 't.umblr.com': { type: 'social', name: 'Tumblr' }, + 'tiktok.com': { type: 'social', name: 'TikTok' }, + 'hocam.com': { type: 'social', name: 'Hocam.com' }, + 'delicious.com': { type: 'social', name: 'Delicious' }, + 'hyves.nl': { type: 'social', name: 'Hyves' }, + 'paper.li': { type: 'social', name: 'Paper.li' }, + 'moikrug.ru': { type: 'social', name: 'MoiKrug.ru' }, +} as const; +export default referrers; diff --git a/apps/worker/src/referrers/referrers.readme.md b/apps/worker/src/referrers/referrers.readme.md new file mode 100644 index 00000000..098d1c2a --- /dev/null +++ b/apps/worker/src/referrers/referrers.readme.md @@ -0,0 +1,5 @@ +# Snowplow Referer Parser + +The file index.ts in this dir is generated from snowplows referer database [Snowplow Referer Parser](https://github.com/snowplow-referer-parser/referer-parser). + +The orginal [referers.yml](https://github.com/snowplow-referer-parser/referer-parser/blob/master/resources/referers.yml) is based on Piwik's SearchEngines.php and Socials.php, copyright 2012 Matthieu Aubry and available under the GNU General Public License v3. diff --git a/apps/worker/src/utils/parse-referrer.ts b/apps/worker/src/utils/parse-referrer.ts new file mode 100644 index 00000000..adec1df9 --- /dev/null +++ b/apps/worker/src/utils/parse-referrer.ts @@ -0,0 +1,58 @@ +import { stripTrailingSlash } from '@openpanel/common'; + +import referrers from '../referrers'; + +function getHostname(url: string | undefined) { + if (!url) { + return ''; + } + + try { + return new URL(url).hostname; + } catch (e) { + return ''; + } +} + +export function parseReferrer(url: string | undefined) { + const hostname = getHostname(url); + const match = referrers[hostname] ?? referrers[hostname.replace('www.', '')]; + + return { + name: match?.name ?? '', + type: match?.type ?? 'unknown', + url: stripTrailingSlash(url ?? ''), + }; +} + +export function getReferrerWithQuery( + query: Record | undefined +) { + if (!query) { + return null; + } + + const source = query.utm_source ?? query.ref ?? query.utm_referrer ?? ''; + + if (source === '') { + return null; + } + + const match = Object.values(referrers).find( + (referrer) => referrer.name.toLowerCase() === source.toLowerCase() + ); + + if (match) { + return { + name: match.name, + type: match.type, + url: '', + }; + } + + return { + name: source, + type: 'unknown', + url: '', + }; +} diff --git a/apps/worker/src/utils/user-agent.ts b/apps/worker/src/utils/parse-user-agent.ts similarity index 69% rename from apps/worker/src/utils/user-agent.ts rename to apps/worker/src/utils/parse-user-agent.ts index ec95b85d..4a8842a9 100644 --- a/apps/worker/src/utils/user-agent.ts +++ b/apps/worker/src/utils/parse-user-agent.ts @@ -1,54 +1,23 @@ -export function getOS(ua?: string) { - if (!ua) { - return null; - } - if (/iPad/i.test(ua)) { - return 'iPad'; - } - if (/iPhone/i.test(ua)) { - return 'iPhone'; - } - if (/iPod/i.test(ua)) { - return 'iPod'; - } - if (/Macintosh/i.test(ua)) { - return 'macOS'; - } - if (/IEMobile|Windows/i.test(ua)) { - return 'Windows'; - } - if (/Android/i.test(ua)) { - return 'Android'; - } - if (/BlackBerry/i.test(ua)) { - return 'BlackBerry'; - } - if (/EF500/i.test(ua)) { - return 'Bluebird'; - } - if (/CrOS/i.test(ua)) { - return 'Chrome OS'; - } - if (/DL-AXIS/i.test(ua)) { - return 'Datalogic'; - } - if (/CT50/i.test(ua)) { - return 'Honeywell'; - } - if (/TC70|TC55/i.test(ua)) { - return 'Zebra'; - } - if (/Linux/i.test(ua)) { - return 'Generic Linux'; - } - return 'Unknown'; +import { UAParser } from 'ua-parser-js'; + +export function isUserAgentSet(ua: string) { + return ua !== 'node' && ua !== 'undici' && !!ua; } -export function getDevice(ua?: string) { - if (!ua) { - return null; - } +export function parseUserAgent(ua: string) { + const res = new UAParser(ua).getResult(); + return { + os: res.os.name, + osVersion: res.os.version, + browser: res.browser.name, + browserVersion: res.browser.version, + device: res.device.type ?? getDevice(ua), + brand: res.device.vendor, + model: res.device.model, + }; +} +export function getDevice(ua: string) { const t1 = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test( ua diff --git a/apps/worker/src/utils/url.ts b/apps/worker/src/utils/url.ts new file mode 100644 index 00000000..c6d3723d --- /dev/null +++ b/apps/worker/src/utils/url.ts @@ -0,0 +1,48 @@ +export function parseSearchParams( + params: URLSearchParams +): Record | undefined { + const result: Record = {}; + for (const [key, value] of params.entries()) { + result[key] = value; + } + return Object.keys(result).length ? result : undefined; +} + +export function parsePath(path?: string): { + query?: Record; + path: string; + hash?: string; +} { + if (!path) { + return { + path: '', + }; + } + + try { + const url = new URL(path); + return { + query: parseSearchParams(url.searchParams), + path: url.pathname, + hash: url.hash || undefined, + }; + } catch (error) { + return { + path, + }; + } +} + +export function isSameDomain( + url1: string | undefined, + url2: string | undefined +) { + if (!url1 || !url2) { + return false; + } + try { + return new URL(url1).hostname === new URL(url2).hostname; + } catch (e) { + return false; + } +} diff --git a/packages/queue/package.json b/packages/queue/package.json index f54ef843..fe30a30a 100644 --- a/packages/queue/package.json +++ b/packages/queue/package.json @@ -12,6 +12,7 @@ "bullmq": "^5.1.1" }, "devDependencies": { + "@openpanel/sdk": "workspace:*", "@openpanel/eslint-config": "workspace:*", "@openpanel/prettier-config": "workspace:*", "@openpanel/tsconfig": "workspace:*", diff --git a/packages/queue/src/queues.ts b/packages/queue/src/queues.ts index dd957dc1..1c760a75 100644 --- a/packages/queue/src/queues.ts +++ b/packages/queue/src/queues.ts @@ -1,9 +1,29 @@ import { Queue } from 'bullmq'; import type { IServiceCreateEventPayload } from '@openpanel/db'; +import type { PostEventPayload } from '@openpanel/sdk'; import { connection } from './connection'; +export interface EventsQueuePayloadIncomingEvent { + type: 'incomingEvent'; + payload: { + projectId: string; + event: PostEventPayload; + geo: { + country: string | undefined; + city: string | undefined; + region: string | undefined; + continent: string | undefined; + }; + headers: { + origin: string | undefined; + ua: string | undefined; + }; + currentDeviceId: string; + previousDeviceId: string; + }; +} export interface EventsQueuePayloadCreateEvent { type: 'createEvent'; payload: Omit; @@ -14,7 +34,8 @@ export interface EventsQueuePayloadCreateSessionEnd { } export type EventsQueuePayload = | EventsQueuePayloadCreateEvent - | EventsQueuePayloadCreateSessionEnd; + | EventsQueuePayloadCreateSessionEnd + | EventsQueuePayloadIncomingEvent; export interface CronQueuePayload { type: 'salt'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ff898fb7..48e3c6b3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -672,6 +672,15 @@ importers: ramda: specifier: ^0.29.1 version: 0.29.1 + sqlstring: + specifier: ^2.3.3 + version: 2.3.3 + ua-parser-js: + specifier: ^1.0.37 + version: 1.0.37 + uuid: + specifier: ^9.0.1 + version: 9.0.1 devDependencies: '@openpanel/eslint-config': specifier: workspace:* @@ -688,6 +697,15 @@ importers: '@types/ramda': specifier: ^0.29.6 version: 0.29.10 + '@types/sqlstring': + specifier: ^2.3.2 + version: 2.3.2 + '@types/ua-parser-js': + specifier: ^0.7.39 + version: 0.7.39 + '@types/uuid': + specifier: ^9.0.8 + version: 9.0.8 eslint: specifier: ^8.48.0 version: 8.56.0 @@ -847,6 +865,9 @@ importers: '@openpanel/prettier-config': specifier: workspace:* version: link:../../tooling/prettier + '@openpanel/sdk': + specifier: workspace:* + version: link:../sdks/sdk '@openpanel/tsconfig': specifier: workspace:* version: link:../../tooling/typescript