
/* Controltag Loader for Guardian */
(function(){
  var debugging = /kxdebug/.test(location);
  var log = function() {
    // It's a flag, so if it's there, then it means debug.
    debugging && window.console && console.log([].slice.call(arguments).join(' '));
  };

  var load = function(url, callback) {
    log('Loading script from:', url);
    var node = document.createElement('script');
    node.async = true;  // This is just to be friendly.
    node.src = url;

    // Connect to both in case we're in older IE.
    node.onload = node.onreadystatechange = function() {
      var state = node.readyState;
      if (!callback.done && (!state || /loaded|complete/.test(state))) {
        log('Script loaded from:', url);
        callback.done = true;  // Mark the callback, so we don't load it twice on accident.
        callback();
      }
    };

    // Fetch the first script element, so we can insert the
    // controltag before it. There *must* be at least one
    // script element, or this code would never be called
    var sibling = document.getElementsByTagName('script')[0];
    sibling.parentNode.insertBefore(node, sibling);
  };

  // ControlTag simply crashes when opening a website from Twitter browser on
  // iOS, temporarily disable CT when Twitter for iPhone is detected until they
  // fix this (works fine with other twitter client though)
  if (/Twitter for iPhone/.test(window.navigator.userAgent || '')) return;

  var config = {"partner_segment_map": {}, "context_terms": [], "tags": [{"content": "<script>\r\n(function(){\r\n  if (window.Krux) {\r\n    var kuid = window.Krux('get', 'user');\r\n    if (kuid && typeof kuid != 'undefined') {\r\n       var rubicon_url = '//tap.rubiconproject.com/oz/feeds/krux/tokens?afu=' + kuid;\r\n       var i = new Image();\r\n       i.src = rubicon_url;\r\n    }\r\n  }\r\n})();\r\n</script>", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 0, "execution_results": null, "tier": 1, "internal": false, "content_type": "html", "criteria": [{"operator": "notContains", "name": "url", "value": "https://"}], "timing": "onload", "method": "document", "type": "publisher", "id": 51725, "name": "Rubicon Project"}, {"content": "<script>\r\n(function(){\r\n  if (window.Krux) {\r\n    var kuid = window.Krux('get', 'user');\r\n    if (kuid && typeof kuid != 'undefined') {\r\n       var rubicon_url = '//tap.rubiconproject.com/oz/feeds/krux/tokens?afu=' + kuid;\r\n       var i = new Image();\r\n       i.src = rubicon_url;\r\n    }\r\n  }\r\n})();\r\n</script>", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 0, "execution_results": null, "tier": 1, "internal": false, "content_type": "html", "criteria": [{"operator": "=", "name": "page_attr_AWIN.sProtocol", "value": "http://"}], "timing": "onload", "method": "document", "type": "publisher", "id": 51725, "name": "Rubicon Project"}, {"criteria": [{"operator": "notContains", "name": "url", "value": "https://"}], "content": "<script>\r\n(function(){\r\n  var kuid = Krux('get', 'user');\r\n  if (kuid) {\r\n      var liveramp_url = 'https://idsync.rlcdn.com/379708.gif?partner_uid=' + kuid;\r\n      var i = new Image();\r\n      i.src = liveramp_url;      \r\n  }\r\n})();\r\n</script>", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 1, "internal": 21, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "type": "data provider", "id": 42000, "name": "Acxiom S2S provider tag"}, {"criteria": [{"operator": "notContains", "name": "url", "value": "https://"}], "content": "<script>\r\n\r\n(function() {\r\n    (new Image()).src = \"//apiservices.krxd.net/um?partner=vdna&r=\" + window.location.protocol + \"//e.visualdna.com/conversion&_kdpid=8f95f20d-4acf-43fc-9832-3f5174a166cc\";\r\n})();\r\n\r\n</script>", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 0, "execution_results": null, "tier": 1, "internal": 12, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "type": "data provider", "id": 42003, "name": "Visual DNA provider tag"}, {"criteria": [{"operator": "notContains", "name": "url", "value": "https://"}], "content": "<script>\r\n(function(){\r\n  var kuid = Krux('get', 'user');\r\n  if (kuid) {\r\n    Krux('require:http').pixel({\r\n      url: \"//loadm.exelator.com/load\",\r\n      data: {\r\n          _kdpid: 'e4942ff0-4070-4896-a7ef-e6a5a30ce9f9',\r\n          buid: kuid,\r\n          p: '204',\r\n          g: '270',\r\n          j: '0'\r\n      }});\r\n  }\r\n  })();\r\n</script>", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 1, "internal": 11, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "type": "data provider", "id": 42004, "name": "eXelate Media provider tag"}, {"content": "<script>\r\n(function() {\r\n\tvar login;\r\n  // Using Omniture prop2 to produce user attribute omniture_prop2\r\n  \t\tKrux('set', 'user_attr_omniture_prop2', typeof window.s =='object' && window.s['prop2']);\r\n  \t\tlogin = typeof window.s =='object' && window.s['prop2'] ? 'Yes' : 'No';\r\n  \t\tKrux('set','user_attr_user_logged_in', login);\r\n})();\r\n</script>", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 1, "execution_results": {"onloadSafe": true, "docwrite": false, "listeners": []}, "tier": 1, "internal": false, "content_type": "html", "timing": "onload", "method": "document", "type": "publisher", "id": 62745, "name": "GUID capture for UberID"}, {"content": "", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 0, "execution_results": null, "tier": 1, "internal": false, "content_type": "html", "criteria": [{"operator": "notContains", "name": "url", "value": "https://"}], "timing": "onload", "method": "document", "id": 35367, "name": "Krux Track Social"}, {"criteria": [{"operator": "notContains", "name": "url", "value": "https://"}], "content": "<script>\r\n// this tag is intentionally blank\r\n</script>", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 0, "execution_results": null, "tier": 1, "internal": 6, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "type": "data provider", "id": 35368, "name": "Technographic Data provider tag"}, {"criteria": [{"operator": "notContains", "name": "url", "value": "https://"}], "content": "", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 0, "execution_results": null, "tier": 1, "internal": 14, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "id": 35369, "name": "Krux Geographic Data provider tag"}, {"criteria": [{"operator": "notContains", "name": "url", "value": "https://"}], "content": "<script>\r\n(function(){\r\n        var kuid = Krux('get', 'user');\r\n        if (kuid) {\r\n            var prefix = location.protocol == 'https:' ? \"https:\" : \"http:\";\r\n            var kurl = prefix + '//beacon.krxd.net/usermatch.gif?adnxs_uid=$UID';\r\n            var appnexus_url = '//ib.adnxs.com/getuid?' + kurl\r\n            var i = new Image();\r\n            i.src = appnexus_url;\r\n        }\r\n})();\r\n</script>", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 0, "execution_results": {"onloadSafe": true, "docwrite": false, "listeners": []}, "tier": 1, "internal": false, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "type": "publisher", "id": 43429, "name": "AppNexus Connect Pixel"}, {"criteria": [{"operator": "notContains", "name": "url", "value": "https://"}], "content": "<script>\r\n\r\n(function () {\r\n_ml = window._ml || {};\r\n_ml.pub = '748';\r\n_ml.redirect = '//beacon.krxd.net/usermatch.gif?partner=madisonlogic&partner_uid=[PersonID]';\r\nvar s = document.getElementsByTagName('script')[0], cd = new Date(), mltag = document.createElement('script');\r\nmltag.type = 'text/javascript'; mltag.async = true;\r\nmltag.src = '//ml314.com/tag.aspx?' + cd.getDate() + cd.getMonth() + cd.getFullYear();\r\ns.parentNode.insertBefore(mltag, s);\r\n})();\r\n\r\n</script>", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 1, "internal": 47, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "type": "data provider", "id": 49605, "name": "Madison Logic provider tag"}, {"criteria": [{"operator": "notContains", "name": "url", "value": "https://"}], "content": "<script>\r\n    (function() {\r\n        var kuid = Krux('get', 'user');\r\n        if (kuid) {\r\n            var prefix = location.protocol == 'https:' ? \"https:\" : \"http:\";\r\n            var kurl_params = encodeURIComponent(\"_kuid=\" + kuid + \"&_kdpid=2dd640a6-6ebd-4d4f-af30-af8baa441a0d&dlxid=<na_id>&dlxdata=<na_da>\");\r\n            var kurl = prefix + \"//beacon.krxd.net/data.gif?\" + kurl_params;\r\n            var dlx_url = '//r.nexac.com/e/getdata.xgi?dt=br&pkey=gpwn29rvapq62&ru=' + kurl;\r\n            var i = new Image();\r\n            i.src = dlx_url;\r\n        }\r\n    })();\r\n</script>", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 1, "internal": 8, "content_type": "html", "freq_cap": 1, "timing": "onload", "method": "document", "type": "data provider", "id": 49606, "name": "DataLogix provider tag"}, {"criteria": [{"operator": "notContains", "name": "url", "value": "https://"}], "content": "", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 1, "internal": 16, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "id": 49607, "name": "Gigya provider tag"}, {"content": "", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 0, "execution_results": null, "tier": 1, "internal": false, "content_type": "html", "timing": "onload", "method": "document", "id": 65236, "name": "Facebook ISA"}, {"content": "<script>\r\nKrux('scrape', { 'page_attr_pageid': {js_global: \"guardian.config.page.pageId\"}});\r\nKrux('scrape', { 'page_attr_sectionid': {js_global: \"guardian.config.page.section\"}});\r\nKrux('scrape', { 'page_attr_edition': {js_global: \"guardian.config.page.edition\"}});\r\nKrux('scrape', { 'page_attr_keywordIds': {js_global: \"guardian.config.page.keywordIds\"}});\r\nKrux('scrape', { 'page_attr_contentType': {js_global: \"guardian.config.page.contentType\"}});\r\nKrux('scrape', { 'page_attr_authorIds': {js_global: \"guardian.config.page.authorIds\"}});\r\nKrux('scrape', { 'user_attr_cookie_s_campaign': {cookie: 's_campaign'}});\r\n</script>", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 0, "execution_results": {"onloadSafe": true, "docwrite": false, "listeners": []}, "tier": 1, "internal": false, "content_type": "html", "timing": "onload", "method": "document", "type": "publisher", "id": 41180, "name": "DTC NextGen"}], "buckets": [], "publisher": {"uuid": "2196ddf0-947c-45ec-9b0d-0a82fb280cb8", "id": 12310, "name": "Guardian"}, "controltag_options": {"async": "true", "render": true}, "site": {"id": 18680, "name": "Guardian NextGen"}, "prioritized_segments": ["pvrdjmqvf", "proqwo9aq", "ptz4ibvtn", "pfbydt1la", "o9d2ttnn8", "pddoepmg9", "pc40t9co0", "pc7rdizb1", "pc5nbdjj6", "puzw810sx", "pc34lrflh", "pdcg4ot2c", "pc3qvpl05", "penl4dfdk", "pc4zpkoug", "pt2yjeej1", "pdwol2qtw", "pc9nwfl88", "phy8dbm0s", "pdckv4cas", "pf630mmbe", "pc5vehxke", "pd4qbbfgm", "pc30v552x", "pejva6oth", "pdgs7v63v", "pc3yb2jnr", "pc4rbl7c1", "pdcvwqmj9", "pd7rurt4z", "pf6yq8g55", "pc5skfqq4", "pd75vtkvb", "pf6ykx980", "pf6yobv9a", "psjp17hcn", "pf7ywv06y", "psjpxlswv", "pekj6xcey", "pdgt3njnf", "psfta56j4", "prrzo102v", "pitx85x39", "pc5w36i05", "pdr1oq8g2", "pddlukb05", "pc0w6lsxy", "pejrd6nks", "pg7frotfj", "pc4yr3v68", "pddqecujr", "phqiyc6hy", "pc5od6yai", "pfb8e3ig6", "pq0rh070l", "pd8ji32s2", "pgfu0fcgh", "pejmmlt9p", "pqkplf0be", "pddkdvlsy", "pm07exsjk", "pez2d3d65", "pc5jz538h", "pokgelbhk", "pejm3tokw", "pf7je666b", "o7x4flan5", "o9hrfhrbb", "pc4mk6ami", "pns9m3e12", "pn0ypwdx3", "pc5kmruvq", "pg2fdclf7", "pm9o9oplh", "pf69bc5ej", "pddsg4s8s", "pf6o9hmkv", "plprbhhko", "pej1rgbfz", "peobygmnj", "piivzraa1", "pf78uuqp9", "pdr05l94c", "pf7b390qs", "o980l8rw2", "pejwioqwn", "pjmtfs000", "piiqugz58", "pjh1q2nu5", "pgypmsgn3", "phu475oqv", "pdvufedsd", "phvgaoeg7", "pen73cot7", "pacsezf1a", "pacq5etbx", "pgypp7moc", "o7t9e8n50", "pacqhvg0a", "o9014ry8e", "pg2ihcbve", "o90ybs3cz", "o91ikbu3n", "o7x58k35t", "pckweeb4b", "o9hsvqzmh", "pc4n3hzc2", "o9kv0nirv", "o9d08i9e0", "o9kz6a44e", "o9d3g5y8j", "pf7ada0f3", "o7tnag02m", "o8t8m33zj", "pdf5716xx", "o8q817ljs", "o98sacjda", "o9la4hbc7", "pacpk24tt", "o9d15sc10", "o9hrs31q0", "o99sxp0ek", "o9k71oieo", "o901c5kja", "o9kx7ipge", "o9hpuy6yx", "o983hpg7l", "o9dc1uetx", "o9k7dba0f", "o982gxw80", "pacnk0nnb", "o98yl02f8", "o99oztuyy", "o7trw3wm6", "o983lnmef", "pacptlrbv", "o8t9ae9ur", "o982xjq8s", "o98y7aqld", "o900rzsy5", "o98z64ojz", "o98sy245e", "o98zeo2gg", "o9d4iai5q", "o9hqqhuhq", "o98w47bej", "o90yif1p1", "o900akem3", "o98zucgnm", "o98tjjazh", "o981tagvy", "o91i4xwws", "o9803wshw", "o980d6bss", "o98wt05fc", "o90zqjd4u", "o981d4u31", "o98wbvmu5", "o98347a4n", "o99tnhus8", "o90zfgla7", "o9814bbkr", "o980x7vl6", "o99qk17ns", "pdvmffa62", "pdw0ntmqs", "pdwozd0oq", "o99od5ayz", "pf3nvob3x", "pf685gwyd", "pf69ikaox", "pf69xxbie", "pf7vh80dw", "pf7vtdfnc", "pf8b46ehq", "pgayoajls", "pgbnhqfcz", "pgx9xwn0t", "pgyofd3ei", "pgyo3hf51", "pgyo7tfn0", "pgypbl1il", "pgypeanqs", "pgyom0xjf", "pf62rumx5", "pfrhy56qe", "pg8w6vlia", "pg7b5eojd", "pge5jedtz", "phupxwgrh", "phazhlez1", "phyl9nbp9", "piiruh2d1", "pimlaiwt6", "piml0kyjv", "pimmapn1c", "piquo8r95", "pirae8sgr", "pirak431b", "piu5jl1k3", "piu55vjzt", "pja4e8v1t", "pjdtgu5qy", "pjh1tpc2v", "pj98zb3aw", "pj99a383d", "pj99jvtnd", "pkaeybgui", "pj6jhw17h", "pimlgnofl", "pketd2fs8", "pkufk917o", "pkyj2hii2", "pkym60wwt", "pk1co5ai7", "pkedj6or1", "pllbroto5", "plljun0n8", "plljwka5b", "plpleewk5", "plmd4naf5", "plyfdpqz9", "pmdcltgca", "pf7chzo0p", "pmhgf9vl6", "pkplsqlt1", "pmpzjhn04", "pns5wz8nq", "pnw07um1b", "pnxmcawyi", "plle9u1dd", "pllfdaymb", "pn5cs9tev", "pn9d2bj52", "pow4zhk9k", "pos6k0l5k", "pqj8nnpni", "pq8jxgbh9", "pq8jz9xax", "pq8j3ftvp", "pq8xkui1f", "pq8zdloub", "prcdx4ead", "prrtob9cz", "prrzw7mw2", "prrz9czjh", "prr0falpt", "prwc6lgok", "pkymxasdv", "plmea5gai", "phykmx56w", "pmpvu8bwl", "pkpmupqfd", "pltc88vx0", "pf659ci8m", "pqj3dy4jc", "pkpl16ncf", "pmpo75i1v", "prno0tcac", "prorcbl9i", "pk158jinw", "prnmm44xt", "pimpzyu1g", "pqv6k42he", "psrlvrnjk", "ps745zv06", "pf6ywryhc", "pf6yt2suu", "ptb2m0rr8", "pti6nfjwb", "ptkat24tq", "pua66e5js", "purp52uv6", "pu2nmeb0r", "pu2ot7z2w", "pu2ow1trx", "pu3jp4f7t", "pvnv6qba3", "pu3kt1kl3"], "realtime_segments": [{"test": ["and", ["or", ["and", ["or", ["intersects", "$page_attr_keywordIds:,", "[\"travel/snowboarding\", \"travel/skiing\", \"sport/winter-olympics\", \"travel/winter-sports\", \"sport/winter-olympics-2014\", \"travel/chalets\", \"sport/skiing\", \"sport/winter-olympics-2014-skeleton\", \"sport/winter-paralympics-2014\", \"sport/winter-olympics-2014-bobsleigh\", \"sport/winter-olympics-2014-ice-hockey\", \"sport/winter-olympics-2014-figure-skating\", \"sport/winter-olympics-2014-nordic-combined\"]"]]]]], "id": "o7trw3wm6"}, {"test": ["and", ["or", ["and", ["or", ["intersects", "$page_attr_edition", "[\"au\"]"]]]]], "id": "o8q817ljs"}, {"test": ["and", ["or", ["and", ["or", ["intersects", "$page_attr_keywordIds:,", "[\"media-network/mobile\", \"technology/mobile-world-congress\"]"], ["intersects", "$page_attr_keywordIds:,", "[\"media-network/mobile\", \"technology/mobile-world-congress\", \"media-network/series/future-of-advertising\"]"]]]]], "id": "pu3jp4f7t"}], "dnt": null, "params": {"connector_host": "connector.krxd.net", "first_party_uid": false, "control_tag_load_sync": "false", "userData_host": "cdn.krxd.net", "disable_http_compression": false, "remove_kxhead": true, "supertag_requires_approval": false, "control_tag_namespace": null, "control_tag_stats_prefix": null, "beacon_host": "beacon.krxd.net", "control_tag_pixel_throttle": "100", "store_realtime_segments": false, "user_id_cookie": null, "max_segments": "200", "no_pii": 0, "recommend": false, "revenue_optimization": false, "context_terms": "false", "jslog_host": "jslog.krxd.net", "buckets": "", "site_level_supertag_config": "site", "max_slot_time": 1000, "services_host": "apiservices.krxd.net", "capture_leakage": true, "client_side_storage": "localStorage,cookie", "fingerprint": false, "config_source": 1, "control_tag_version": "stable", "capture_js_errors": "true", "datatag_version": "3", "dfp_premium": "true", "userdata_host": "cdn.krxd.net", "target_fingerprint": false}, "services": {"event": "//beacon.krxd.net/event.gif", "impression": "//beacon.krxd.net/ad_impression.gif", "stats": "//apiservices.krxd.net/stats", "log": "//jslog.krxd.net/jslog.gif", "optout": "//beacon.krxd.net/optout_check", "um": "//apiservices.krxd.net/um", "pixel": "//beacon.krxd.net/pixel.gif", "contentConnector": "//connector.krxd.net/content_connector/", "is_optout": "//beacon.krxd.net/optout_check", "set_optin": "//apiservices.krxd.net/consumer/optin", "social": "//beacon.krxd.net/social.gif", "set_optout": "//apiservices.krxd.net/consumer/optout", "userData": "//cdn.krxd.net/userdata/get", "data": "//beacon.krxd.net/data.gif", "userdata": "//cdn.krxd.net/userdata/get", "addSegment": "//cdn.krxd.net/userdata/add"}, "geo": {}, "segments": [], "confid": "JVZiE3vn"};

  // Wrap in a function and comment, then toString the func and replace
  // everything that's not the beginning or end of a JSON object, so we get a
  // string that's either empty or JSON.
  var esiGeo = String(function(){/*
    {"CONTINENT":"NA", "COUNTRY":"CA", "REGION":"QC", "CITY":"Montréal", "DMA":"0", "AREACODE":"0", "ZIP":"H3G", "LATITUDE":"45.499", "LONGITUDE":"-73.579"}
  */}).replace(/^.*\/\*[^{]+|[^}]+\*\/.*$/g, '');

  if (esiGeo) {
    log('Got a request for:', esiGeo, 'adding geo to config.');
    try {
      config.geo = window.JSON.parse(esiGeo);
    } catch (__) {
      // Couldn't parse, so setting to {}
      log('Unable to parse geo from:', config.geo);
      config.geo = {};
    }
  }

  
  
  

  load('//cdn.krxd.net/ctjs/controltag.js.875fd5b280a77e06def8c74a5a268e2c', function() {
    
    
    log('Loading krux configuration.');

    Krux('config', config);

    
  });
})();
