diff --git a/apps/public/public/op.js b/apps/public/public/op.js index 7c7ac82c..e3e119d3 100644 --- a/apps/public/public/op.js +++ b/apps/public/public/op.js @@ -1 +1,2 @@ -"use strict";(()=>{function y(u,t,e){return function(s,o,v){let m=`${u}${s}`,l,h={"mixan-client-id":t,"Content-Type":"application/json"};return e&&(h["mixan-client-secret"]=e),new Promise(p=>{let f=n=>{clearTimeout(l),fetch(m,{headers:h,method:"POST",body:JSON.stringify(o??{}),keepalive:!0,...v??{}}).then(async a=>{if(a.status!==200&&a.status!==202)return g(n,p);let w=await a.text();if(!w)return p(null);p(w)}).catch(()=>g(n,p))};function g(n,a){if(n>1)return a(null);l=setTimeout(()=>{f(n+1)},Math.pow(2,n)*500)}f(0)})}}var c=class{options;api;state={properties:{}};constructor(t){this.options=t,this.api=y(t.url,t.clientId,t.clientSecret)}init(t){this.state.properties=t??{}}getProfileId(){if(this.state.profileId)return this.state.profileId;this.options.getProfileId&&(this.state.profileId=this.options.getProfileId()||void 0)}async event(t,e){let i=await this.api("/event",{name:t,properties:{...this.state.properties,...e??{}},timestamp:this.timestamp(),profileId:this.getProfileId()});this.options.setProfileId&&i&&this.options.setProfileId(i)}setGlobalProperties(t){this.state.properties={...this.state.properties,...t}}clear(){this.state.profileId=void 0,this.options.removeProfileId&&this.options.removeProfileId()}setUserProperty(t,e,i=!0){}timestamp(){return new Date().toISOString()}};var d=class extends c{constructor(t){super(t),this.options.trackOutgoingLinks&&this.trackOutgoingLinks(),this.options.trackScreenViews&&this.trackScreenViews()}isServer(){return typeof document>"u"}getTimezone(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}trackOutgoingLinks(){this.isServer()||document.addEventListener("click",t=>{let e=t.target;if(e.tagName==="A"){let i=e.getAttribute("href");i?.startsWith("http")&&super.event("link_out",{href:i,text:e.innerText})}})}trackScreenViews(){if(this.isServer())return;let t=history.pushState;history.pushState=function(...s){let o=t.apply(this,s);return window.dispatchEvent(new Event("pushstate")),window.dispatchEvent(new Event("locationchange")),o};let e=history.replaceState;history.replaceState=function(...s){let o=e.apply(this,s);return window.dispatchEvent(new Event("replacestate")),window.dispatchEvent(new Event("locationchange")),o},window.addEventListener("popstate",()=>window.dispatchEvent(new Event("locationchange"))),this.options.hash?window.addEventListener("hashchange",()=>this.screenView()):window.addEventListener("locationchange",()=>this.screenView()),this.screenView()}screenView(t){this.isServer()||super.event("screen_view",{...t??{},path:window.location.href,title:document.title,referrer:document.referrer})}};var r=document.currentScript;r&&(window.openpanel=new d({url:r?.getAttribute("data-url"),clientId:r?.getAttribute("data-client-id"),clientSecret:r?.getAttribute("data-client-secret"),trackOutgoingLinks:!!r?.getAttribute("data-track-outgoing-links"),trackScreenViews:!!r?.getAttribute("data-track-screen-views")}));})(); +"use strict";(()=>{function m(s){return Promise.all(Object.entries(s).map(async([t,e])=>[t,await e??""])).then(t=>Object.fromEntries(t))}function P(s){let t={"Content-Type":"application/json"};return{headers:t,async fetch(e,i,o){let a=`${s}${e}`,h,w=await m(t);return new Promise(p=>{let u=n=>{clearTimeout(h),fetch(a,{headers:w,method:"POST",body:JSON.stringify(i??{}),keepalive:!0,...o??{}}).then(async c=>{if(c.status!==200&&c.status!==202)return f(n,p);let g=await c.text();if(!g)return p(null);p(g)}).catch(()=>f(n,p))};function f(n,c){if(n>1)return c(null);h=setTimeout(()=>{u(n+1)},Math.pow(2,n)*500)}u(0)})}}}var l=class{options;api;state={properties:{}};constructor(t){this.options=t,this.api=P(t.url),this.api.headers["mixan-client-id"]=t.clientId,this.options.clientSecret&&(this.api.headers["mixan-client-secret"]=this.options.clientSecret)}init(t){this.state.properties=t??{}}setUser(t){this.api.fetch("/profile",{profileId:this.getProfileId(),...t,properties:{...this.state.properties,...t.properties}})}increment(t,e){this.api.fetch("/profile/increment",{property:t,value:e,profileId:this.getProfileId()})}decrement(t,e){this.api.fetch("/profile/decrement",{property:t,value:e,profileId:this.getProfileId()})}event(t,e){this.api.fetch("/event",{name:t,properties:{...this.state.properties,...e??{}},timestamp:this.timestamp(),profileId:this.getProfileId()}).then(i=>{this.options.setProfileId&&i&&this.options.setProfileId(i)})}setGlobalProperties(t){this.state.properties={...this.state.properties,...t}}clear(){this.state.profileId=void 0,this.options.removeProfileId&&this.options.removeProfileId()}timestamp(){return new Date().toISOString()}getProfileId(){if(this.state.profileId)return this.state.profileId;this.options.getProfileId&&(this.state.profileId=this.options.getProfileId()||void 0)}};var d=class extends l{lastPath="";constructor(t){super(t),this.options.trackOutgoingLinks&&this.trackOutgoingLinks(),this.options.trackScreenViews&&this.trackScreenViews()}isServer(){return typeof document>"u"}trackOutgoingLinks(){this.isServer()||document.addEventListener("click",t=>{let e=t.target;if(e.tagName==="A"){let i=e.getAttribute("href");i?.startsWith("http")&&super.event("link_out",{href:i,text:e.innerText})}})}trackScreenViews(){if(this.isServer())return;let t=history.pushState;history.pushState=function(...o){let a=t.apply(this,o);return window.dispatchEvent(new Event("pushstate")),window.dispatchEvent(new Event("locationchange")),a};let e=history.replaceState;history.replaceState=function(...o){let a=e.apply(this,o);return window.dispatchEvent(new Event("replacestate")),window.dispatchEvent(new Event("locationchange")),a},window.addEventListener("popstate",()=>window.dispatchEvent(new Event("locationchange"))),this.options.hash?window.addEventListener("hashchange",()=>this.screenView()):window.addEventListener("locationchange",()=>this.screenView()),this.screenView()}screenView(t){this.isServer()||this.lastPath!==window.location.href&&(this.lastPath=window.location.href,super.event("screen_view",{...t??{},path:window.location.href,title:document.title,referrer:document.referrer}))}};var r=document.currentScript;r&&(window.openpanel=new d({url:r?.getAttribute("data-url"),clientId:r?.getAttribute("data-client-id"),clientSecret:r?.getAttribute("data-client-secret"),trackOutgoingLinks:!!r?.getAttribute("data-track-outgoing-links"),trackScreenViews:!!r?.getAttribute("data-track-screen-views")}));})(); +//# sourceMappingURL=cdn.global.js.map \ No newline at end of file diff --git a/apps/sdk-api/scripts/get-referrers.ts b/apps/sdk-api/scripts/get-referrers.ts new file mode 100644 index 00000000..e0934a00 --- /dev/null +++ b/apps/sdk-api/scripts/get-referrers.ts @@ -0,0 +1,48 @@ +import fs from 'fs'; +import path from 'path'; + +function transform(data: any) { + const obj: Record = {}; + for (const type in data) { + for (const name in data[type]) { + const domains = data[type][name].domains ?? []; + for (const domain of domains) { + obj[domain] = { + type, + name, + }; + } + } + } + + return obj; +} + +async function main() { + // Get document, or throw exception on error + try { + const data = await fetch( + 'https://s3-eu-west-1.amazonaws.com/snowplow-hosted-assets/third-party/referer-parser/referers-latest.json' + ).then((res) => res.json()); + + fs.writeFileSync( + path.resolve(__dirname, '../src/referrers/index.ts'), + [ + '// 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 = ${JSON.stringify( + transform(data) + )} as const;`, + 'export default referrers;', + ].join('\n'), + 'utf-8' + ); + } catch (e) { + console.log(e); + } +} + +main(); diff --git a/apps/sdk-api/scripts/test-events.ts b/apps/sdk-api/scripts/test-events.ts index 7df343be..9d66422a 100644 --- a/apps/sdk-api/scripts/test-events.ts +++ b/apps/sdk-api/scripts/test-events.ts @@ -97,16 +97,14 @@ async function main() { const ua = properties.ua!; const uaInfo = parseUserAgent(ua); const salts = await getSalts(); + const profileId = generateProfileId({ + salt: salts.current, + origin, + ip, + ua, + }); - const [profileId, geo] = await Promise.all([ - generateProfileId({ - salt: salts.current, - origin, - ip, - ua, - }), - parseIp(ip), - ]); + const geo = parseIp(ip); const isNextEventNewSession = nextEvent && diff --git a/apps/sdk-api/scripts/test-ua.ts b/apps/sdk-api/scripts/test-ua.ts new file mode 100644 index 00000000..00547799 --- /dev/null +++ b/apps/sdk-api/scripts/test-ua.ts @@ -0,0 +1,18 @@ +//@ts-nocheck + +async function main() { + const crypto = require('crypto'); + + function createHash(data, len) { + return crypto + .createHash('shake256', { outputLength: len }) + .update(data) + .digest('hex'); + } + + console.log(createHash('foo', 2)); + // 1af9 + console.log(createHash('foo', 32)); + // 1af97f7818a28edf} +} +main(); diff --git a/apps/sdk-api/src/controllers/event.controller.ts b/apps/sdk-api/src/controllers/event.controller.ts index 576cddac..de2e5a46 100644 --- a/apps/sdk-api/src/controllers/event.controller.ts +++ b/apps/sdk-api/src/controllers/event.controller.ts @@ -1,4 +1,5 @@ import { parseIp } from '@/utils/parseIp'; +import { parseReferrer } from '@/utils/parseReferrer'; import { parseUserAgent } from '@/utils/parseUserAgent'; import type { FastifyReply, FastifyRequest } from 'fastify'; import { omit } from 'ramda'; @@ -56,33 +57,30 @@ export async function postEvent( let profileId: string | null = null; const projectId = request.projectId; const body = request.body; - const { path, hash, query } = parsePath( - body.properties?.path as string | undefined - ); - const referrer = body.properties?.referrer as string | undefined; + const { path, hash, query } = parsePath(body.properties?.path); + const referrer = parseReferrer(body.properties?.referrer); const ip = getClientIp(request)!; const origin = request.headers.origin!; const ua = request.headers['user-agent']!; const uaInfo = parseUserAgent(ua); const salts = await getSalts(); + const currentProfileId = generateProfileId({ + salt: salts.current, + origin, + ip, + ua, + }); + const previousProfileId = generateProfileId({ + salt: salts.previous, + origin, + ip, + ua, + }); - const [currentProfileId, previousProfileId, geo, eventsJobs] = - await Promise.all([ - generateProfileId({ - salt: salts.current, - origin, - ip, - ua, - }), - generateProfileId({ - salt: salts.previous, - origin, - ip, - ua, - }), - parseIp(ip), - eventsQueue.getJobs(['delayed']), - ]); + const [geo, eventsJobs] = await Promise.all([ + parseIp(ip), + eventsQueue.getJobs(['delayed']), + ]); // find session_end job const sessionEndJobCurrentProfileId = findJobByPrefix( @@ -148,8 +146,9 @@ export async function postEvent( model: uaInfo.model, duration: 0, path: path, - referrer, - referrerName: referrer, // TODO + referrer: referrer.url, + referrerName: referrer.name, + referrerType: referrer.type, }; const job = findJobByPrefix(eventsJobs, `event:${projectId}:${profileId}:`); @@ -171,7 +170,7 @@ export async function postEvent( duration, }, }); - job.promote(); + await job.promote(); } } diff --git a/apps/sdk-api/src/controllers/profile.controller.ts b/apps/sdk-api/src/controllers/profile.controller.ts new file mode 100644 index 00000000..c4754be8 --- /dev/null +++ b/apps/sdk-api/src/controllers/profile.controller.ts @@ -0,0 +1,291 @@ +import { parseIp } from '@/utils/parseIp'; +import { parseUserAgent } from '@/utils/parseUserAgent'; +import type { FastifyReply, FastifyRequest } from 'fastify'; +import { assocPath, mergeDeepRight, path } from 'ramda'; +import { getClientIp } from 'request-ip'; + +import { generateProfileId, toDots } from '@mixan/common'; +import type { IDBProfile, Profile } from '@mixan/db'; +import { db, getSalts } from '@mixan/db'; +import type { + IncrementProfilePayload, + UpdateProfilePayload, +} from '@mixan/types'; + +async function findProfile({ + profileId, + ip, + origin, + ua, +}: { + profileId: string | null; + ip: string; + origin: string; + ua: string; +}) { + const salts = await getSalts(); + const currentProfileId = generateProfileId({ + salt: salts.current, + origin, + ip, + ua, + }); + const previousProfileId = generateProfileId({ + salt: salts.previous, + origin, + ip, + ua, + }); + + const ids = [currentProfileId, previousProfileId]; + if (profileId) { + ids.push(profileId); + } + + const profiles = await db.profile.findMany({ + where: { + id: { + in: ids, + }, + }, + }); + + return profiles.find((p) => { + return ( + p.id === profileId || + p.id === currentProfileId || + p.id === previousProfileId + ); + }) as IDBProfile | undefined; +} + +export async function updateProfile( + request: FastifyRequest<{ + Body: UpdateProfilePayload; + }>, + reply: FastifyReply +) { + const body = request.body; + const profileId: string | null = body.profileId ?? null; + const projectId = request.projectId; + const ip = getClientIp(request)!; + const origin = request.headers.origin ?? projectId; + const ua = request.headers['user-agent']!; + const salts = await getSalts(); + const uaInfo = parseUserAgent(ua); + const geo = await parseIp(ip); + + if (profileId === null) { + const currentProfileId = generateProfileId({ + salt: salts.current, + origin, + ip, + ua, + }); + const previousProfileId = generateProfileId({ + salt: salts.previous, + origin, + ip, + ua, + }); + + const profiles = await db.profile.findMany({ + where: { + id: { + in: [currentProfileId, previousProfileId], + }, + }, + }); + + if (profiles.length === 0) { + const profile = await db.profile.create({ + data: { + id: currentProfileId, + external_id: body.id, + first_name: body.first_name, + last_name: body.last_name, + email: body.email, + avatar: body.avatar, + project_id: projectId, + properties: body.properties ?? {}, + // ...uaInfo, + // ...geo, + }, + }); + + return reply.status(201).send(profile); + } + const currentProfile = profiles.find((p) => p.id === currentProfileId); + const previousProfile = profiles.find((p) => p.id === previousProfileId); + const profile = currentProfile ?? previousProfile; + + if (profile) { + await db.profile.update({ + where: { + id: profile.id, + }, + data: { + external_id: body.id, + first_name: body.first_name, + last_name: body.last_name, + email: body.email, + avatar: body.avatar, + properties: toDots( + mergeDeepRight( + profile.properties as Record, + body.properties ?? {} + ) + ), + // ...uaInfo, + // ...geo, + }, + }); + + return reply.status(200).send(profile.id); + } + + return reply.status(200).send(); + } + + const profile = await db.profile.findUnique({ + where: { + id: profileId, + }, + }); + + if (profile) { + await db.profile.update({ + where: { + id: profile.id, + }, + data: { + external_id: body.id, + first_name: body.first_name, + last_name: body.last_name, + email: body.email, + avatar: body.avatar, + properties: toDots( + mergeDeepRight( + profile.properties as Record, + body.properties ?? {} + ) + ), + // ...uaInfo, + // ...geo, + }, + }); + } else { + await db.profile.create({ + data: { + id: profileId, + external_id: body.id, + first_name: body.first_name, + last_name: body.last_name, + email: body.email, + avatar: body.avatar, + project_id: projectId, + properties: body.properties ?? {}, + // ...uaInfo, + // ...geo, + }, + }); + } + + reply.status(202).send(profileId); +} + +export async function incrementProfileProperty( + request: FastifyRequest<{ + Body: IncrementProfilePayload; + }>, + reply: FastifyReply +) { + const body = request.body; + const profileId: string | null = body.profileId ?? null; + const projectId = request.projectId; + const ip = getClientIp(request)!; + const origin = request.headers.origin ?? projectId; + const ua = request.headers['user-agent']!; + + const profile = await findProfile({ + ip, + origin, + ua, + profileId, + }); + + if (!profile) { + return reply.status(404).send('Not found'); + } + + const property = path(body.property.split('.'), profile.properties); + + if (typeof property !== 'number' && typeof property !== 'undefined') { + return reply.status(400).send('Not number'); + } + + profile.properties = assocPath( + body.property.split('.'), + property ? property + body.value : body.value, + profile.properties + ); + + await db.profile.update({ + where: { + id: profile.id, + }, + data: { + properties: profile.properties as any, + }, + }); + + reply.status(202).send(profile.id); +} + +export async function decrementProfileProperty( + request: FastifyRequest<{ + Body: IncrementProfilePayload; + }>, + reply: FastifyReply +) { + const body = request.body; + const profileId: string | null = body.profileId ?? null; + const projectId = request.projectId; + const ip = getClientIp(request)!; + const origin = request.headers.origin ?? projectId; + const ua = request.headers['user-agent']!; + + const profile = await findProfile({ + ip, + origin, + ua, + profileId, + }); + + if (!profile) { + return reply.status(404).send('Not found'); + } + + const property = path(body.property.split('.'), profile.properties); + + if (typeof property !== 'number') { + return reply.status(400).send('Not number'); + } + + profile.properties = assocPath( + body.property.split('.'), + property ? property - body.value : -body.value, + profile.properties + ); + + await db.profile.update({ + where: { + id: profile.id, + }, + data: { + properties: profile.properties as any, + }, + }); + + reply.status(202).send(profile.id); +} diff --git a/apps/sdk-api/src/index.ts b/apps/sdk-api/src/index.ts index 3d1f0643..54ad20f8 100644 --- a/apps/sdk-api/src/index.ts +++ b/apps/sdk-api/src/index.ts @@ -7,6 +7,7 @@ import { redisPub } from '@mixan/redis'; import eventRouter from './routes/event.router'; import liveRouter from './routes/live.router'; +import profileRouter from './routes/profile.router'; declare module 'fastify' { interface FastifyRequest { @@ -29,6 +30,7 @@ const startServer = async () => { fastify.register(FastifySSEPlugin); fastify.decorateRequest('projectId', ''); fastify.register(eventRouter, { prefix: '/event' }); + fastify.register(profileRouter, { prefix: '/profile' }); fastify.register(liveRouter, { prefix: '/live' }); fastify.setErrorHandler((error, request, reply) => { fastify.log.error(error); diff --git a/apps/sdk-api/src/referrers/index.ts b/apps/sdk-api/src/referrers/index.ts new file mode 100644 index 00000000..3bcba5ee --- /dev/null +++ b/apps/sdk-api/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/sdk-api/src/referrers/referrers.readme.md b/apps/sdk-api/src/referrers/referrers.readme.md new file mode 100644 index 00000000..098d1c2a --- /dev/null +++ b/apps/sdk-api/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/sdk-api/src/routes/profile.router.ts b/apps/sdk-api/src/routes/profile.router.ts new file mode 100644 index 00000000..24445872 --- /dev/null +++ b/apps/sdk-api/src/routes/profile.router.ts @@ -0,0 +1,37 @@ +import * as controller from '@/controllers/profile.controller'; +import { validateSdkRequest } from '@/utils/auth'; +import type { FastifyPluginCallback } from 'fastify'; + +const eventRouter: FastifyPluginCallback = (fastify, opts, done) => { + fastify.addHook('preHandler', (req, reply, done) => { + validateSdkRequest(req.headers) + .then((projectId) => { + req.projectId = projectId; + done(); + }) + .catch((e) => { + reply.status(401).send(); + }); + }); + + fastify.route({ + method: 'POST', + url: '/', + handler: controller.updateProfile, + }); + + fastify.route({ + method: 'POST', + url: '/increment', + handler: controller.incrementProfileProperty, + }); + + fastify.route({ + method: 'POST', + url: '/decrement', + handler: controller.decrementProfileProperty, + }); + done(); +}; + +export default eventRouter; diff --git a/apps/sdk-api/src/utils/parseIp.ts b/apps/sdk-api/src/utils/parseIp.ts index 2a0bab18..115cd64c 100644 --- a/apps/sdk-api/src/utils/parseIp.ts +++ b/apps/sdk-api/src/utils/parseIp.ts @@ -1,12 +1,34 @@ -export async function parseIp(ip: string) { +interface RemoteIpLookupResponse { + country: string | undefined; + city: string | undefined; + stateprov: string | undefined; + continent: string | undefined; +} + +interface GeoLocation { + country: string | undefined; + city: string | undefined; + region: string | undefined; + continent: string | undefined; +} + +const geo: GeoLocation = { + country: undefined, + city: undefined, + region: undefined, + continent: undefined, +}; + +const ignore = ['127.0.0.1', '::1']; + +export async function parseIp(ip?: string): Promise { + if (!ip || ignore.includes(ip)) { + return geo; + } + try { const geo = await fetch(`${process.env.GEO_IP_HOST}/${ip}`); - const res = (await geo.json()) as { - country: string | undefined; - city: string | undefined; - stateprov: string | undefined; - continent: string | undefined; - }; + const res = (await geo.json()) as RemoteIpLookupResponse; return { country: res.country, @@ -16,12 +38,6 @@ export async function parseIp(ip: string) { }; } catch (e) { console.log('Failed to parse ip', e); - - return { - country: undefined, - city: undefined, - region: undefined, - continent: undefined, - }; + return geo; } } diff --git a/apps/sdk-api/src/utils/parseReferrer.ts b/apps/sdk-api/src/utils/parseReferrer.ts new file mode 100644 index 00000000..db7775f1 --- /dev/null +++ b/apps/sdk-api/src/utils/parseReferrer.ts @@ -0,0 +1,15 @@ +import referrers from '../referrers'; + +export function parseReferrer(url?: string) { + const { hostname } = new URL(url || ''); + const match = referrers[hostname]; + + console.log('Parsing referrer', url); + console.log('Match', match); + + return { + name: match?.name ?? '', + type: match?.type ?? 'unknown', + url: url ?? '', + }; +} diff --git a/apps/test/public/op.js b/apps/test/public/op.js index a5ccdd10..e3e119d3 100644 --- a/apps/test/public/op.js +++ b/apps/test/public/op.js @@ -1,2 +1,2 @@ -"use strict";(()=>{function y(u,t,e){return function(s,o,v){let m=`${u}${s}`,l,h={"mixan-client-id":t,"Content-Type":"application/json"};return e&&(h["mixan-client-secret"]=e),new Promise(a=>{let f=n=>{clearTimeout(l),fetch(m,{headers:h,method:"POST",body:JSON.stringify(o??{}),keepalive:!0,...v??{}}).then(async p=>{if(p.status!==200)return g(n,a);let w=await p.json();if(!w)return a(null);a(w)}).catch(()=>g(n,a))};function g(n,p){if(n>1)return p(null);l=setTimeout(()=>{f(n+1)},Math.pow(2,n)*500)}f(0)})}}var c=class{options;api;state={properties:{}};constructor(t){this.options=t,this.api=y(t.url,t.clientId,t.clientSecret)}init(t){this.state.properties=t??{}}getProfileId(){if(this.state.profileId)return this.state.profileId;this.options.getProfileId&&(this.state.profileId=this.options.getProfileId()||void 0)}async event(t,e){let i=await this.api("/event",{name:t,properties:{...this.state.properties,...e??{}},timestamp:this.timestamp(),profileId:this.getProfileId()});this.options.setProfileId&&i&&this.options.setProfileId(i)}setGlobalProperties(t){this.state.properties={...this.state.properties,...t}}clear(){this.state.profileId=void 0,this.options.removeProfileId&&this.options.removeProfileId()}setUserProperty(t,e,i=!0){}timestamp(){return new Date().toISOString()}};var d=class extends c{constructor(t){super(t),this.options.trackOutgoingLinks&&this.trackOutgoingLinks(),this.options.trackScreenViews&&this.trackScreenViews()}isServer(){return typeof document>"u"}getTimezone(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}trackOutgoingLinks(){this.isServer()||document.addEventListener("click",t=>{let e=t.target;if(e.tagName==="A"){let i=e.getAttribute("href");i?.startsWith("http")&&super.event("link_out",{href:i,text:e.innerText})}})}trackScreenViews(){if(this.isServer())return;let t=history.pushState;history.pushState=function(...s){let o=t.apply(this,s);return window.dispatchEvent(new Event("pushstate")),window.dispatchEvent(new Event("locationchange")),o};let e=history.replaceState;history.replaceState=function(...s){let o=e.apply(this,s);return window.dispatchEvent(new Event("replacestate")),window.dispatchEvent(new Event("locationchange")),o},window.addEventListener("popstate",()=>window.dispatchEvent(new Event("locationchange"))),this.options.hash?window.addEventListener("hashchange",()=>this.screenView()):window.addEventListener("locationchange",()=>this.screenView())}screenView(t){this.isServer()||super.event("screen_view",{...t??{},path:window.location.href,title:document.title,referrer:document.referrer})}};var r=document.currentScript;r&&(window.openpanel=new d({url:r?.getAttribute("data-url"),clientId:r?.getAttribute("data-client-id"),clientSecret:r?.getAttribute("data-client-secret"),trackOutgoingLinks:!!r?.getAttribute("data-track-outgoing-links"),trackScreenViews:!!r?.getAttribute("data-track-screen-views")}));})(); -//# sourceMappingURL=op.js.map \ No newline at end of file +"use strict";(()=>{function m(s){return Promise.all(Object.entries(s).map(async([t,e])=>[t,await e??""])).then(t=>Object.fromEntries(t))}function P(s){let t={"Content-Type":"application/json"};return{headers:t,async fetch(e,i,o){let a=`${s}${e}`,h,w=await m(t);return new Promise(p=>{let u=n=>{clearTimeout(h),fetch(a,{headers:w,method:"POST",body:JSON.stringify(i??{}),keepalive:!0,...o??{}}).then(async c=>{if(c.status!==200&&c.status!==202)return f(n,p);let g=await c.text();if(!g)return p(null);p(g)}).catch(()=>f(n,p))};function f(n,c){if(n>1)return c(null);h=setTimeout(()=>{u(n+1)},Math.pow(2,n)*500)}u(0)})}}}var l=class{options;api;state={properties:{}};constructor(t){this.options=t,this.api=P(t.url),this.api.headers["mixan-client-id"]=t.clientId,this.options.clientSecret&&(this.api.headers["mixan-client-secret"]=this.options.clientSecret)}init(t){this.state.properties=t??{}}setUser(t){this.api.fetch("/profile",{profileId:this.getProfileId(),...t,properties:{...this.state.properties,...t.properties}})}increment(t,e){this.api.fetch("/profile/increment",{property:t,value:e,profileId:this.getProfileId()})}decrement(t,e){this.api.fetch("/profile/decrement",{property:t,value:e,profileId:this.getProfileId()})}event(t,e){this.api.fetch("/event",{name:t,properties:{...this.state.properties,...e??{}},timestamp:this.timestamp(),profileId:this.getProfileId()}).then(i=>{this.options.setProfileId&&i&&this.options.setProfileId(i)})}setGlobalProperties(t){this.state.properties={...this.state.properties,...t}}clear(){this.state.profileId=void 0,this.options.removeProfileId&&this.options.removeProfileId()}timestamp(){return new Date().toISOString()}getProfileId(){if(this.state.profileId)return this.state.profileId;this.options.getProfileId&&(this.state.profileId=this.options.getProfileId()||void 0)}};var d=class extends l{lastPath="";constructor(t){super(t),this.options.trackOutgoingLinks&&this.trackOutgoingLinks(),this.options.trackScreenViews&&this.trackScreenViews()}isServer(){return typeof document>"u"}trackOutgoingLinks(){this.isServer()||document.addEventListener("click",t=>{let e=t.target;if(e.tagName==="A"){let i=e.getAttribute("href");i?.startsWith("http")&&super.event("link_out",{href:i,text:e.innerText})}})}trackScreenViews(){if(this.isServer())return;let t=history.pushState;history.pushState=function(...o){let a=t.apply(this,o);return window.dispatchEvent(new Event("pushstate")),window.dispatchEvent(new Event("locationchange")),a};let e=history.replaceState;history.replaceState=function(...o){let a=e.apply(this,o);return window.dispatchEvent(new Event("replacestate")),window.dispatchEvent(new Event("locationchange")),a},window.addEventListener("popstate",()=>window.dispatchEvent(new Event("locationchange"))),this.options.hash?window.addEventListener("hashchange",()=>this.screenView()):window.addEventListener("locationchange",()=>this.screenView()),this.screenView()}screenView(t){this.isServer()||this.lastPath!==window.location.href&&(this.lastPath=window.location.href,super.event("screen_view",{...t??{},path:window.location.href,title:document.title,referrer:document.referrer}))}};var r=document.currentScript;r&&(window.openpanel=new d({url:r?.getAttribute("data-url"),clientId:r?.getAttribute("data-client-id"),clientSecret:r?.getAttribute("data-client-secret"),trackOutgoingLinks:!!r?.getAttribute("data-track-outgoing-links"),trackScreenViews:!!r?.getAttribute("data-track-screen-views")}));})(); +//# sourceMappingURL=cdn.global.js.map \ No newline at end of file diff --git a/apps/test/src/pages/_document.tsx b/apps/test/src/pages/_document.tsx index 4a2e17d0..7536c1ae 100644 --- a/apps/test/src/pages/_document.tsx +++ b/apps/test/src/pages/_document.tsx @@ -7,8 +7,8 @@ export default function Document() {