var __IntegralASDiagnosticCall = function(){}; try { var __IntegralASConfig = { jsDoSplit : true, cocaPuffsPath : "", debug : "false", killPhrases : "", jsDiag:'false', version:'17.4.73', mtCell: 10, mtSample: 5, trackMouse : "true", exchList:{'e1':'nqzryq','e2':'tbbtyrnqf.t.qbhoyrpyvpx','e3':'ehovpbacebwrpg','e4':'chozngvp','e5':'bcrak','e6':'nqoevgr.pbz','e7':'tynz.pbz','e8':'lvryqznantre.pbz','e9':'yvwvg','e10':'nqakf','p11':'ghea.pbz','p12':'zngugnt','p13':'vaivgrzrqvn','p14':'qngnkh','n15':'zrqvn6qrterrf','n16':'dhnagfreir','n17':'esvuho.arg','a18':'napubeserr','a19':'eff2frnepu','a20':'mgfgngvp.pbz','n21':'ovq.npr.nqiregvfvat','e22':'wnfba','v23':'fcbgkpqa','v24':'ogeyy','v25':'yvirenvy','v26':'nqncgi','v27':'nqnc.gi','n29':'qbzqrk.pbz','n30':'ernyih.arg','d31':'cvengronl','d32':'cebklonl','d33':'onlcebkl','d34':'cvengrcebkl','d35':'cebklcvengr','d36':'onlcvengr','n37':'tjnyyrg','p39':'j55p.arg','p40':'c0l.pa','p41':'vcvalbh.pbz','p42':'c0lwferaqre'}, killFlash: 'true', sp_cdnDomain:'cdn.adsafeprotected.com', sp_cdnScripts:{xsca: "static.adsafeprotected.com/xsca.17.4.47.js", sca: "static.adsafeprotected.com/sca.17.4.47-hotfix.js", main: "static.adsafeprotected.com/main.17.4.73.js"}, protocol:'https', jsref : "https:\/\/www.computerworld.com\/article\/3262666\/mobile-wireless\/ar-ai-and-5g-to-help-drive-mobile-spending-through-21.html?idg_eid=364a52d5b929c3efd5fea28ebf84c7fc&email_SHA1_lc=711153b5e987f01875bda29a9514e99431ac2a0a&cid=cw_nlt_computerworld_mobile_wireless_2018-03-15&utm_source=Sailthru&utm_medium=email&utm_campaign=Computerworld%20Mobile\/Wireless%20Computing%202018-03-15&utm_term=computerworld_mobile_wireless", asid : "ddd1ed09-28ee-11e8-82e9-00259086ca74", allowViewability : "true", jsFeatures : "cocoapuffs,viewabilityready,consecutive,cachebust:0,forcecocoa:0,rattie,exch,recordalternate:0,usedtdomain,nextcocoa:100,bapiDiag,postDts:0,videotwoseconds,getPl,decodePl,resolution,usetpl,tpiLookupURL,hundredpct,jloadDiag:0,blur:0,sendclogs,zeroPing,idMap,offscreen,everySecond:1,sdkdetection,moreAdTalkCalls,slid,fm2:1,largeAd,nextcocoaie:100,usevh,fxdet:0,mmsb:0,bigmon:0,chromeNativeIO:100,oddet:0,ios:100,ancestor:100,avmm:100,avgrn:100,useScreenLocationInfoAdaptor:100,swapids:100,pIntervals:10,firewall_cdn_domain,forceid:0,usesca:40,usexsca:1,bustediframe:100,impFailSafe:100,yieldmo:100,displayCustomView:0,sfdetect,pmdetect:100,novidnodeerr:5,diagnosticCM:0,viewabilityOptimization:100,usehaps:0,customMetric:100,sizmek,celtra,groupmCM,avidPropertiesInImpression,abcAudit,useMraidGeometricMeasurement,useAvidGeometricMeasurement,mrcAudit:1", adsafeDomain : "adsafeprotected.com:80", minimizeCalls : "false", adWidth : "", adHeight : "", forceAppend : "true", sp_imp_maxLength: 8000, sp_imp_jsInfo_minLength: 200, _onInViewMRC15 : __IntegralASConfig && __IntegralASConfig.onInViewMRC15, _onInViewMRC : __IntegralASConfig && __IntegralASConfig.onInViewMRC, _onMeasurable : __IntegralASConfig && __IntegralASConfig.onMeasurable, _onAPIResult : __IntegralASConfig && __IntegralASConfig.onAPIResult, _onInViewFull : __IntegralASConfig && __IntegralASConfig.onInViewFull, _onSuspicious : __IntegralASConfig && __IntegralASConfig.onSuspicious, _onInViewMRC5 : __IntegralASConfig && __IntegralASConfig.onInViewMRC5, reqquery : "anId=8879&campId=300x250&pubId=24942056&chanId=21394136&placementId=4576691406&pubCreative=138227498245&pubOrder=2244015587&cb=2146950885&custom=ATF1&custom2=computerworld.com&adsafe_par&impId=", mode : "jload", requrl : "https:\/\/pixel.adsafeprotected.com\/mon", dtBaseURL: "https:\/\/dt.adsafeprotected.com\/dt?anId=8879", adsafeSrc : "", tpiLookupURL:"", getTpl: "false", use100v: true, useBapiCallback: "", useViewabilityNotification: "", scriptUrl : "https:\/\/pixel.adsafeprotected.com\/jload?anId=8879&campId=300x250&pubId=24942056&chanId=21394136&placementId=4576691406&pubCreative=138227498245&pubOrd", accountForSadImps:'', sendCookie:'false', cookieBaseURL:'sc.iasds01.com\/dtc?anId=8879&pubId=24942056', fwMonitoring:'', doNothing: false, mn: "app05ami", mobOrTab: false, mobFwUrl : "https://mobile.adsafeprotected.com/external/monitoring/app/initial/8879/", anId : '8879', advEntityId : '', pubEntityId : '', videoId : '', videoChannel : '', customViewability: [{ "id":"publ1", "tiv": 1, "minunit":1, "thresholds": [{"piv":100, "ub":242499}, {"piv":30, "lb":242500}], "mediaTypes":["display"], "distributionChannels":["web","app"] }, { "id":"publ2", "tiv": 2, "minunit":2, "thresholds": [{"piv":100, "ub": 242499}, {"piv":50, "lb": 242500}], "mediaTypes":["video"], "distributionChannels":["web","app"] },{ "id":"grpm1", "tiv": 1, "minunit":1, "thresholds": [{"piv":100, "ub": 242499}, {"piv": 50, "lb": 242500}], "mediaTypes":["display"], "deviceGroups":["desktop"], "distributionChannels":["web","app"], "rts":"_onInViewGroupM" },{ "id":"grpm2", "tiv": "15|50%", "minunit":1, "sound": "on", "soundExcl": "groupm_native", "thresholds": [{"piv":100, "ub": 299999},{"piv":80, "lb": 300000} ], "mediaTypes":["video"], "deviceGroups":["desktop"], "distributionChannels":["web","app"] },{ "id":"grpm3", "tiv": 1, "minunit":1, "thresholdType":"grpmMobPassThru","thresholds": [{"piv":100}], "mediaTypes":["display"], "deviceGroups":["mobile"], "distributionChannels":["web","app"], "rts":"_onInViewGroupM" },{ "id":"grpm4", "tiv": "15|50%", "minunit":1, "sound": "on", "soundExcl": "groupm_native", "thresholdType":"grpmMobPassThru","thresholds": [{"piv":100} ], "mediaTypes":["video"], "deviceGroups":["mobile"], "distributionChannels":["web","app"] }], serverSideAppDetection: [] }; if (__IntegralASConfig.jsFeatures.indexOf('asidJsDiagnostic') !== -1) { var fakeErr = { message: __IntegralASConfig.asid }; __IntegralASDiagnosticCall('asid', fakeErr); } __IntegralASConfig.birthdate = new Date().getTime(); __IntegralASConfig.useFIF = (!!window.__IntegralASUseFIF) && __IntegralASConfig.mode === 'jload'; __IntegralASConfig.contextNode = (function() { if (__IntegralASConfig.useFIF) { return window.frameElement; // Early exit if using FIF } var tempScript, embedded = window != top, scripts = document.getElementsByTagName('script'), result = scripts[scripts.length - 1], scriptIndex = scripts.length, useDocWrite = 'jss,jsi,jspix'.indexOf(__IntegralASConfig.mode) !== -1, scriptUrl = __IntegralASConfig.scriptUrl; try { while (--scriptIndex >= 0) { tempScript = scripts[scriptIndex]; if (tempScript.src && tempScript.src.indexOf(scriptUrl) === 0 && tempScript.getAttribute('data-ias-script-tag') === null) { result = tempScript; tempScript.setAttribute('data-ias-script-tag', 'found'); break; } } if (scriptIndex === 0 && useDocWrite && !embedded) { document.write(''); result = document.getElementById('s' + __IntegralASConfig.asid).parentNode; } } catch(e) { } return result; }()); } catch(err) { __IntegralASConfig = {}; __IntegralASDiagnosticCall('bootstrapper', err); } // This is an immediately invoked bootstrapper extension, rather than an anonymous IIFE to enable unit testing. window.__IntegralASConfig = window.__IntegralASConfig || {}; window.__IntegralASConfig.mainScriptAppender = function(params, mainScriptScope) { "use strict"; // TODO: minification for this file function isDef(obj) { return typeof obj !== 'undefined'; } function isFunc(obj) { return typeof obj === 'function'; } function sendDiag(point, err) { if (isFunc(mainScriptScope.__IntegralASDiagnosticCall)) { mainScriptScope.__IntegralASDiagnosticCall('appender-' + point, err, params); } } function getInitializerIfAvailable() { // TODO: future enhancement - look in top when available and consider storing in top when possible to increase availability. // Also consider potential timing issues between when a version of __IntegralASExec would be // loaded by another script vs. when this code checks. (E.g. three tags on a page all direct. // When the Bootstrapper Script runs for all three, none have had time to load an __IntegralASExec // yet, so all three wind up requesting it. (The browser may combine the requests into one due to browser caching.) // Perhaps the three tags should coordinate somehow?) var result = false; var functionExists = isDef(mainScriptScope.__IntegralASExec) && isDef(mainScriptScope.__IntegralASExec[params.version]) && isFunc(mainScriptScope.__IntegralASExec[params.version].initialize); if (functionExists) { result = mainScriptScope.__IntegralASExec[params.version].initialize; } return result; } // TODO: add an onload handler so we can short-circuit polling https://stackoverflow.com/questions/4845762/onload-handler-for-script-tag-in-internet-explorer function appendScript(scriptUrl) { var mainScriptDoc = mainScriptScope.document; var script = mainScriptDoc.createElement('script'); script.type = 'text/javascript'; script.src = scriptUrl; mainScriptDoc.head.appendChild(script); } function lookForMainScriptAndRun() { var intervalId, initializerFn, shouldSendTimeout, timePassed, timeoutExceeded; var initializerScope = params.useFIF ? mainScriptScope.parent : mainScriptScope; var TIMEOUT_MS = 5000; var INTERVAL_MS = 25; var timeoutDiagSent = false; intervalId = setInterval(function() { try { initializerFn = getInitializerIfAvailable(); if (initializerFn) { clearInterval(intervalId); initializerFn(params, initializerScope, initializerScope.document); } else { timePassed = new Date().getTime() - params.birthdate; timeoutExceeded = timePassed > TIMEOUT_MS; shouldSendTimeout = !timeoutDiagSent && timeoutExceeded; if (shouldSendTimeout) { sendDiag('timeout', new Error('Exceeded 5s time limit on loading static script.')); timeoutDiagSent = true; } } } catch(err) { sendDiag('interval', err); clearInterval(intervalId); } }, INTERVAL_MS); } function loadMainScript(scriptUrl) { // In jss,jsi,jspix modes, when params.forceAppend is "false", we need to use document.write instead of document.append // TODO: check for docWrite mode and properly invoke when we move beyond "jload only" appendScript(scriptUrl); lookForMainScriptAndRun(); } function beginAppending() { var mainScriptUrl = params.protocol + '://' + params.sp_cdnScripts.main; // TODO: add functionality here to getInitializerIfAvailable() and only requst the main script if necessary // Not doing now because: // 1) it adds a lot of complexity to testing // 2) in most of the initial use cases, our script will be in its own iframe and // I don't want to add the complexity of looking in other scopes yet loadMainScript(mainScriptUrl); } function isValidToAppend() { var configIsValid = params.protocol && params.sp_cdnScripts && params.sp_cdnScripts.main, tagTypeIsValid = params.mode === 'jload'; return configIsValid && tagTypeIsValid; } function start() { try { params.isSplitMode = true; if (isValidToAppend()) { beginAppending(); } else { throw new Error("incorrect configuration for split mode"); } } catch(err) { sendDiag('start', err); } } start(); }; window.__IntegralASConfig.mainScriptAppender(window.__IntegralASConfig, window);