var __IntegralASDiagnosticCall = function(){}; try { var __IntegralASConfig = { jsDoSplit: true, cocaPuffsPath: "", debug: "false", killPhrases: "", jsDiag: 'false', version: '17.4.114', 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.85.js", sca: "static.adsafeprotected.com/sca.17.4.95.js", main: "static.adsafeprotected.com/main.17.4.114.js"}, protocol: 'https', jsref: "https:\/\/www.networkworld.com\/article\/3284066\/data-center\/ibm-system-ends-chinas-five-year-reign-at-top-of-supercomputer-rankings.html?idg_eid=364a52d5b929c3efd5fea28ebf84c7fc&email_SHA1_lc=711153b5e987f01875bda29a9514e99431ac2a0a&cid=nww_nlt_networkworld_data_center_alert_2018-06-26&utm_source=Sailthru&utm_medium=email&utm_campaign=NWW%20Data%20Center%202018-06-26&utm_term=networkworld_data_center_alert", asid: "f8cb8859-7a0a-11e8-896e-98f2b3ea1dc8", 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:100,customMetric:100,sizmek,celtra,groupmCM,avidPropertiesInImpression,abcAudit,useMraidGeometricMeasurement,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=4483313278&chanId=22351376&placementId=4689601562&pubCreative=138234603684&pubOrder=2304407515&cb=2113280393&custom=ATF1&custom2=networkworld.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=4483313278&chanId=22351376&placementId=4689601562&pubCreative=138234603684&pubO", accountForSadImps: '', sendCookie: 'false', cookieBaseURL: 'sc.iasds01.com\/dtc?anId=8879&pubId=4483313278', fwMonitoring: '', doNothing: false, mn: "app46ami", 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: [] }; try { __IASScope = typeof window !== "undefined" ? window : this; __IntegralASConfig.birthdate = new Date().getTime(); __IntegralASConfig.perfBirth = (typeof __IASScope.performance !== "undefined" && typeof __IASScope.performance.now === 'function') ? __IASScope.performance.now() : null; //copy/pasted the contents of the thirdpart OmidVerificationClient.js file here, remove and replace when a new version is received ;(function(omidGlobal, factory, exports) { // CommonJS support if (typeof exports === 'object' && typeof exports.nodeName !== 'string') { factory(omidGlobal, exports); // If neither AMD nor CommonJS are used, export to a versioned name in the // global context. } else { var exports = {}; factory(omidGlobal, exports); function deepFreeze(object) { for (var key in object) { if (object.hasOwnProperty(key)) { object[key] = deepFreeze(object[key]); } } return Object.freeze(object); } // Inject and freeze the exported components of omid. for (var key in exports) { if (exports.hasOwnProperty(key)) { if (!Object.getOwnPropertyDescriptor(omidGlobal, key)) { Object.defineProperty(omidGlobal, key, { get: function () { return deepFreeze({'1.0.2-dev': exports[key]}); }, }); } } } } }(typeof global === 'undefined' ? this : global, function(omidGlobal, omidExports) { 'use strict';var $jscomp = $jscomp || {}; $jscomp.scope = {}; $jscomp.inherits = function(a, b) { function c() { } c.prototype = b.prototype; a.superClass_ = b.prototype; a.prototype = new c; a.prototype.constructor = a; for (var d in b) { if ("prototype" != d) { if (Object.defineProperties) { var e = Object.getOwnPropertyDescriptor(b, d); e && Object.defineProperty(a, d, e); } else { a[d] = b[d]; } } } }; $jscomp.ASSUME_ES5 = !1; $jscomp.ASSUME_NO_NATIVE_MAP = !1; $jscomp.ASSUME_NO_NATIVE_SET = !1; $jscomp.defineProperty = $jscomp.ASSUME_ES5 || "function" == typeof Object.defineProperties ? Object.defineProperty : function(a, b, c) { a != Array.prototype && a != Object.prototype && (a[b] = c.value); }; $jscomp.getGlobal = function(a) { return "undefined" != typeof window && window === a ? a : "undefined" != typeof global && null != global ? global : a; }; $jscomp.global = $jscomp.getGlobal(this); $jscomp.SYMBOL_PREFIX = "jscomp_symbol_"; $jscomp.initSymbol = function() { $jscomp.initSymbol = function() { }; $jscomp.global.Symbol || ($jscomp.global.Symbol = $jscomp.Symbol); }; $jscomp.symbolCounter_ = 0; $jscomp.Symbol = function(a) { return $jscomp.SYMBOL_PREFIX + (a || "") + $jscomp.symbolCounter_++; }; $jscomp.initSymbolIterator = function() { $jscomp.initSymbol(); var a = $jscomp.global.Symbol.iterator; a || (a = $jscomp.global.Symbol.iterator = $jscomp.global.Symbol("iterator")); "function" != typeof Array.prototype[a] && $jscomp.defineProperty(Array.prototype, a, {configurable:!0, writable:!0, value:function() { return $jscomp.arrayIterator(this); }}); $jscomp.initSymbolIterator = function() { }; }; $jscomp.arrayIterator = function(a) { var b = 0; return $jscomp.iteratorPrototype(function() { return b < a.length ? {done:!1, value:a[b++]} : {done:!0}; }); }; $jscomp.iteratorPrototype = function(a) { $jscomp.initSymbolIterator(); a = {next:a}; a[$jscomp.global.Symbol.iterator] = function() { return this; }; return a; }; $jscomp.makeIterator = function(a) { $jscomp.initSymbolIterator(); var b = a[Symbol.iterator]; return b ? b.call(a) : $jscomp.arrayIterator(a); }; $jscomp.arrayFromIterator = function(a) { for (var b, c = []; !(b = a.next()).done;) { c.push(b.value); } return c; }; $jscomp.arrayFromIterable = function(a) { return a instanceof Array ? a : $jscomp.arrayFromIterator($jscomp.makeIterator(a)); }; var module$exports$omid$common$argsChecker = {assertTruthyString:function(a, b) { if (!b) { throw Error("Value for " + a + " is undefined, null or blank."); } if ("string" !== typeof b && !(b instanceof String)) { throw Error("Value for " + a + " is not a string."); } if ("" === b.trim()) { throw Error("Value for " + a + " is empty string."); } }, assertNotNullObject:function(a, b) { if (null == b) { throw Error("Value for " + a + " is undefined or null"); } }, assertNumber:function(a, b) { if (null == b) { throw Error(a + " must not be null or undefined."); } if ("number" !== typeof b || isNaN(b)) { throw Error("Value for " + a + " is not a number"); } }, assertNumberBetween:function(a, b, c, d) { (0,module$exports$omid$common$argsChecker.assertNumber)(a, b); if (b < c || b > d) { throw Error("Value for " + a + " is outside the range [" + c + "," + d + "]"); } }, assertFunction:function(a, b) { if (!b) { throw Error(a + " must not be truthy."); } }, assertPositiveNumber:function(a, b) { (0,module$exports$omid$common$argsChecker.assertNumber)(a, b); if (0 > b) { throw Error(a + " must be a positive number."); } }}; var module$contents$omid$common$InternalMessage_GUID_KEY = "omid_message_guid", module$contents$omid$common$InternalMessage_METHOD_KEY = "omid_message_method", module$contents$omid$common$InternalMessage_VERSION_KEY = "omid_message_version", module$contents$omid$common$InternalMessage_ARGS_KEY = "omid_message_args", module$exports$omid$common$InternalMessage = function(a, b, c, d) { this.guid = a; this.method = b; this.version = c; this.args = d; }; module$exports$omid$common$InternalMessage.isValidSerializedMessage = function(a) { return !!a && void 0 !== a[module$contents$omid$common$InternalMessage_GUID_KEY] && void 0 !== a[module$contents$omid$common$InternalMessage_METHOD_KEY] && void 0 !== a[module$contents$omid$common$InternalMessage_VERSION_KEY] && "string" === typeof a[module$contents$omid$common$InternalMessage_GUID_KEY] && "string" === typeof a[module$contents$omid$common$InternalMessage_METHOD_KEY] && "string" === typeof a[module$contents$omid$common$InternalMessage_VERSION_KEY] && (void 0 === a[module$contents$omid$common$InternalMessage_ARGS_KEY] || "string" === typeof a[module$contents$omid$common$InternalMessage_ARGS_KEY]); }; module$exports$omid$common$InternalMessage.deserialize = function(a) { return new module$exports$omid$common$InternalMessage(a[module$contents$omid$common$InternalMessage_GUID_KEY], a[module$contents$omid$common$InternalMessage_METHOD_KEY], a[module$contents$omid$common$InternalMessage_VERSION_KEY], a[module$contents$omid$common$InternalMessage_ARGS_KEY]); }; module$exports$omid$common$InternalMessage.prototype.serialize = function() { var a = {}; a = (a[module$contents$omid$common$InternalMessage_GUID_KEY] = this.guid, a[module$contents$omid$common$InternalMessage_METHOD_KEY] = this.method, a[module$contents$omid$common$InternalMessage_VERSION_KEY] = this.version, a); void 0 !== this.args && (a[module$contents$omid$common$InternalMessage_ARGS_KEY] = this.args); return a; }; var module$exports$omid$common$Communication = function(a) { this.to = a; }; module$exports$omid$common$Communication.prototype.sendMessage = function(a, b) { }; module$exports$omid$common$Communication.prototype.handleMessage = function(a, b) { if (this.onMessage) { this.onMessage(a, b); } }; module$exports$omid$common$Communication.prototype.generateGuid = function() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(a) { var b = 16 * Math.random() | 0; a = "y" === a ? (b & 3 | 8).toString(16) : b.toString(16); return a; }); }; module$exports$omid$common$Communication.prototype.serialize = function(a) { return JSON.stringify(a); }; module$exports$omid$common$Communication.prototype.deserialize = function(a) { return JSON.parse(a); }; var module$exports$omid$common$constants = {AdEventType:{IMPRESSION:"impression", STATE_CHANGE:"stateChange", GEOMETRY_CHANGE:"geometryChange", SESSION_START:"sessionStart", SESSION_ERROR:"sessionError", SESSION_FINISH:"sessionFinish", VIDEO:"video", LOADED:"loaded", START:"start", FIRST_QUARTILE:"firstQuartile", MIDPOINT:"midpoint", THIRD_QUARTILE:"thirdQuartile", COMPLETE:"complete", PAUSE:"pause", RESUME:"resume", BUFFER_START:"bufferStart", BUFFER_FINISH:"bufferFinish", SKIPPED:"skipped", VOLUME_CHANGE:"volumeChange", PLAYER_STATE_CHANGE:"playerStateChange", AD_USER_INTERACTION:"adUserInteraction"}, VideoEventType:{LOADED:"loaded", START:"start", FIRST_QUARTILE:"firstQuartile", MIDPOINT:"midpoint", THIRD_QUARTILE:"thirdQuartile", COMPLETE:"complete", PAUSE:"pause", RESUME:"resume", BUFFER_START:"bufferStart", BUFFER_FINISH:"bufferFinish", SKIPPED:"skipped", VOLUME_CHANGE:"volumeChange", PLAYER_STATE_CHANGE:"playerStateChange", AD_USER_INTERACTION:"adUserInteraction"}, ErrorType:{GENERIC:"generic", VIDEO:"video"}, AdSessionType:{NATIVE:"native", HTML:"html"}, EventOwner:{NATIVE:"native", JAVASCRIPT:"javascript", NONE:"none"}, AppState:{BACKGROUNDED:"backgrounded", FOREGROUNDED:"foregrounded"}, Environment:{MOBILE:"app"}, InteractionType:{CLICK:"click", INVITATION_ACCEPT:"invitationAccept"}, MediaType:{DISPLAY:"display", VIDEO:"video"}, Reason:{NOT_FOUND:"notFound", HIDDEN:"hidden", BACKGROUNDED:"backgrounded", VIEWPORT:"viewport", OBSTRUCTED:"obstructed", CLIPPED:"clipped"}, SupportedFeatures:{CONTAINER:"clid", VIDEO:"vlid"}, VideoPosition:{PREROLL:"preroll", MIDROLL:"midroll", POSTROLL:"postroll", STANDALONE:"standalone"}, VideoPlayerState:{MINIMIZED:"minimized", COLLAPSED:"collapsed", NORMAL:"normal", EXPANDED:"expanded", FULLSCREEN:"fullscreen"}, NativeViewKeys:{X:"x", Y:"y", WIDTH:"width", HEIGHT:"height", AD_SESSION_ID:"adSessionId", IS_FRIENDLY_OBSTRUCTION_FOR:"isFriendlyObstructionFor", CLIPS_TO_BOUNDS:"clipsToBounds", CHILD_VIEWS:"childViews", END_X:"endX", END_Y:"endY", OBSTRUCTIONS:"obstructions"}}; var module$exports$omid$common$DetectOmid = {OMID_PRESENT_FRAME_NAME:"omid_v1_present", isOmidPresent:function(a) { try { return a.frames ? !!a.frames[module$exports$omid$common$DetectOmid.OMID_PRESENT_FRAME_NAME] : !1; } catch (b) { return !1; } }, declareOmidPresence:function(a) { a.frames && a.document && (module$exports$omid$common$DetectOmid.OMID_PRESENT_FRAME_NAME in a.frames || (null == a.document.body && module$exports$omid$common$DetectOmid.isMutationObserverAvailable_(a) ? module$exports$omid$common$DetectOmid.registerMutationObserver_(a) : a.document.body ? module$exports$omid$common$DetectOmid.appendPresenceIframe_(a) : a.document.write('"))); }, appendPresenceIframe_:function(a) { var b = a.document.createElement("iframe"); b.id = module$exports$omid$common$DetectOmid.OMID_PRESENT_FRAME_NAME; b.name = module$exports$omid$common$DetectOmid.OMID_PRESENT_FRAME_NAME; b.style.display = "none"; a.document.body.appendChild(b); }, isMutationObserverAvailable_:function(a) { return "MutationObserver" in a; }, registerMutationObserver_:function(a) { var b = new MutationObserver(function(c) { c.forEach(function(c) { "BODY" === c.addedNodes[0].nodeName && (module$exports$omid$common$DetectOmid.appendPresenceIframe_(a), b.disconnect()); }); }); b.observe(a.document.documentElement, {childList:!0}); }}; var module$exports$omid$common$DirectCommunication = function(a) { module$exports$omid$common$Communication.call(this, a); this.handleExportedMessage = module$exports$omid$common$DirectCommunication.prototype.handleExportedMessage.bind(this); }; $jscomp.inherits(module$exports$omid$common$DirectCommunication, module$exports$omid$common$Communication); module$exports$omid$common$DirectCommunication.prototype.sendMessage = function(a, b) { b = void 0 === b ? this.to : b; if (!b) { throw Error("Message destination must be defined at construction time or when sending the message."); } b.handleExportedMessage(a.serialize(), this); }; module$exports$omid$common$DirectCommunication.prototype.handleExportedMessage = function(a, b) { module$exports$omid$common$InternalMessage.isValidSerializedMessage(a) && this.handleMessage(module$exports$omid$common$InternalMessage.deserialize(a), b); }; var module$exports$omid$common$eventTypedefs = {}; var module$exports$omid$common$exporter = {}; function module$contents$omid$common$exporter_getOmidExports() { return "undefined" === typeof omidExports ? null : omidExports; } function module$contents$omid$common$exporter_getOrCreateName(a, b) { return a && (a[b] || (a[b] = {})); } module$exports$omid$common$exporter.packageExport = function(a, b, c) { if (c = void 0 === c ? module$contents$omid$common$exporter_getOmidExports() : c) { a = a.split("."), a.slice(0, a.length - 1).reduce(module$contents$omid$common$exporter_getOrCreateName, c)[a[a.length - 1]] = b; } }; var module$exports$omid$common$logger = {error:function(a) { for (var b = [], c = 0; c < arguments.length; ++c) { b[c - 0] = arguments[c]; } module$contents$omid$common$logger_executeLog(function() { throw new (Function.prototype.bind.apply(Error, [null].concat(["Could not complete the test successfully - "], $jscomp.arrayFromIterable(b)))); }, function() { return console.error.apply(console, [].concat($jscomp.arrayFromIterable(b))); }); }, debug:function(a) { for (var b = [], c = 0; c < arguments.length; ++c) { b[c - 0] = arguments[c]; } module$contents$omid$common$logger_executeLog(function() { }, function() { return console.error.apply(console, [].concat($jscomp.arrayFromIterable(b))); }); }}; function module$contents$omid$common$logger_executeLog(a, b) { "undefined" !== typeof jasmine && jasmine ? a() : "undefined" !== typeof console && console && console.error && b(); } ;var module$exports$omid$common$OmidGlobalProvider = {}, module$contents$omid$common$OmidGlobalProvider_globalThis = eval("this"); function module$contents$omid$common$OmidGlobalProvider_getOmidGlobal() { if ("undefined" !== typeof omidGlobal && omidGlobal) { return omidGlobal; } if ("undefined" !== typeof global && global) { return global; } if ("undefined" !== typeof window && window) { return window; } if ("undefined" !== typeof module$contents$omid$common$OmidGlobalProvider_globalThis && module$contents$omid$common$OmidGlobalProvider_globalThis) { return module$contents$omid$common$OmidGlobalProvider_globalThis; } throw Error("Could not determine global object context."); } module$exports$omid$common$OmidGlobalProvider.omidGlobal = module$contents$omid$common$OmidGlobalProvider_getOmidGlobal(); var module$exports$omid$common$PostMessageCommunication = function(a, b) { b = void 0 === b ? module$exports$omid$common$OmidGlobalProvider.omidGlobal : b; module$exports$omid$common$Communication.call(this, b); var c = this; a.addEventListener("message", function(a) { if ("object" === typeof a.data) { var b = a.data; module$exports$omid$common$InternalMessage.isValidSerializedMessage(b) && (b = module$exports$omid$common$InternalMessage.deserialize(b), a.source && c.handleMessage(b, a.source)); } }); }; $jscomp.inherits(module$exports$omid$common$PostMessageCommunication, module$exports$omid$common$Communication); module$exports$omid$common$PostMessageCommunication.isCompatibleContext = function(a) { return !!(a && a.addEventListener && a.postMessage); }; module$exports$omid$common$PostMessageCommunication.prototype.sendMessage = function(a, b) { b = void 0 === b ? this.to : b; if (!b) { throw Error("Message destination must be defined at construction time or when sending the message."); } b.postMessage(a.serialize(), "*"); }; var module$exports$omid$common$Rectangle = function(a, b, c, d) { this.x = a; this.y = b; this.width = c; this.height = d; }; var module$exports$omid$common$serviceCommunication = {}; function module$contents$omid$common$serviceCommunication_getUnobfuscatedKey(a, b) { return b.reduce(function(a, b) { return a && a[b]; }, a); } module$exports$omid$common$serviceCommunication.startServiceCommunication = function(a, b, c) { c = void 0 === c ? module$exports$omid$common$DetectOmid.isOmidPresent : c; return (b = module$contents$omid$common$serviceCommunication_getUnobfuscatedKey(a, b)) ? new module$exports$omid$common$DirectCommunication(b) : a.top && c(a.top) ? new module$exports$omid$common$PostMessageCommunication(a, a.top) : null; }; var module$exports$omid$common$VastProperties = function(a, b, c, d) { this.isSkippable = a; this.skipOffset = b; this.isAutoPlay = c; this.position = d; }; var module$exports$omid$common$version = {Version:"1.0.1-dev"}; var module$contents$omid$verificationClient$VerificationClient_MESSAGE_VERSION = module$exports$omid$common$version.Version, module$contents$omid$verificationClient$VerificationClient_EventCallback, module$exports$omid$verificationClient$VerificationClient = function(a) { if (this.communication = a = void 0 === a ? (0,module$exports$omid$common$serviceCommunication.startServiceCommunication)(module$exports$omid$common$OmidGlobalProvider.omidGlobal, ["omid", "v1_VerificationServiceCommunication"]) : a) { this.communication.onMessage = this.handleMessage_.bind(this); } this.remoteIntervals_ = this.remoteTimeouts_ = 0; this.callbackMap_ = {}; }; module$exports$omid$verificationClient$VerificationClient.prototype.isSupported = function() { return !!this.communication; }; module$exports$omid$verificationClient$VerificationClient.prototype.registerSessionObserver = function(a, b) { (0,module$exports$omid$common$argsChecker.assertFunction)("functionToExecute", a); this.sendMessage_("addSessionListener", a, b); }; module$exports$omid$verificationClient$VerificationClient.prototype.addEventListener = function(a, b) { (0,module$exports$omid$common$argsChecker.assertTruthyString)("eventType", a); (0,module$exports$omid$common$argsChecker.assertFunction)("functionToExecute", b); this.sendMessage_("addEventListener", b, a); }; module$exports$omid$verificationClient$VerificationClient.prototype.sendUrl = function(a, b, c) { (0,module$exports$omid$common$argsChecker.assertTruthyString)("url", a); this.sendMessage_("sendUrl", function(a) { a && b ? b() : !a && c && c(); }, a); }; module$exports$omid$verificationClient$VerificationClient.prototype.injectJavaScriptResource = function(a, b, c) { var d = this; (0,module$exports$omid$common$argsChecker.assertTruthyString)("url", a); module$exports$omid$common$OmidGlobalProvider.omidGlobal.document ? this.injectJavascriptResourceUrlInDom_(a, b, c) : this.sendMessage_("injectJavaScriptResource", function(e, f) { e ? (d.evaluateJavaScript_(f, a), b()) : (module$exports$omid$common$logger.error("Service failed to load JavaScript resource."), c()); }, a); }; module$exports$omid$verificationClient$VerificationClient.prototype.injectJavascriptResourceUrlInDom_ = function(a, b, c) { var d = module$exports$omid$common$OmidGlobalProvider.omidGlobal.document, e = d.body; d = d.createElement("script"); d.onload = b; d.onerror = c; d.src = a; d.type = "application/javascript"; e.appendChild(d); }; module$exports$omid$verificationClient$VerificationClient.prototype.evaluateJavaScript_ = function(a, b) { try { eval(a); } catch (c) { module$exports$omid$common$logger.error('Error evaluating the JavaScript resource from "' + b + '".'); } }; module$exports$omid$verificationClient$VerificationClient.prototype.setTimeout = function(a, b) { (0,module$exports$omid$common$argsChecker.assertFunction)("functionToExecute", a); (0,module$exports$omid$common$argsChecker.assertPositiveNumber)("timeInMillis", b); if (this.hasTimeoutMethods_()) { return module$exports$omid$common$OmidGlobalProvider.omidGlobal.setTimeout(a, b); } var c = this.remoteTimeouts_++; this.sendMessage_("setTimeout", a, c, b); return c; }; module$exports$omid$verificationClient$VerificationClient.prototype.clearTimeout = function(a) { (0,module$exports$omid$common$argsChecker.assertPositiveNumber)("timeoutId", a); this.hasTimeoutMethods_() ? module$exports$omid$common$OmidGlobalProvider.omidGlobal.clearTimeout(a) : this.sendOneWayMessage_("clearTimeout", a); }; module$exports$omid$verificationClient$VerificationClient.prototype.setInterval = function(a, b) { (0,module$exports$omid$common$argsChecker.assertFunction)("functionToExecute", a); (0,module$exports$omid$common$argsChecker.assertPositiveNumber)("timeInMillis", b); if (this.hasIntervalMethods_()) { return module$exports$omid$common$OmidGlobalProvider.omidGlobal.setInterval(a, b); } var c = this.remoteIntervals_++; this.sendMessage_("setInterval", a, c, b); return c; }; module$exports$omid$verificationClient$VerificationClient.prototype.clearInterval = function(a) { (0,module$exports$omid$common$argsChecker.assertPositiveNumber)("intervalId", a); this.hasIntervalMethods_() ? module$exports$omid$common$OmidGlobalProvider.omidGlobal.clearInterval(a) : this.sendOneWayMessage_("clearInterval", a); }; module$exports$omid$verificationClient$VerificationClient.prototype.hasTimeoutMethods_ = function() { return "function" === typeof module$exports$omid$common$OmidGlobalProvider.omidGlobal.setTimeout && "function" === typeof module$exports$omid$common$OmidGlobalProvider.omidGlobal.clearTimeout; }; module$exports$omid$verificationClient$VerificationClient.prototype.hasIntervalMethods_ = function() { return "function" === typeof module$exports$omid$common$OmidGlobalProvider.omidGlobal.setInterval && "function" === typeof module$exports$omid$common$OmidGlobalProvider.omidGlobal.clearInterval; }; module$exports$omid$verificationClient$VerificationClient.prototype.handleMessage_ = function(a, b) { b = a.method; var c = a.guid; a = a.args; if ("response" === b && this.callbackMap_[c]) { var d = a ? JSON.parse(a) : []; this.callbackMap_[c].apply(this, d); } "error" === b && window.console && module$exports$omid$common$logger.error(a); }; module$exports$omid$verificationClient$VerificationClient.prototype.sendOneWayMessage_ = function(a, b) { for (var c = [], d = 1; d < arguments.length; ++d) { c[d - 1] = arguments[d]; } this.sendMessage_.apply(this, [].concat([a, null], $jscomp.arrayFromIterable(c))); }; module$exports$omid$verificationClient$VerificationClient.prototype.sendMessage_ = function(a, b, c) { for (var d = [], e = 2; e < arguments.length; ++e) { d[e - 2] = arguments[e]; } this.isSupported() && (e = this.communication.generateGuid(), b && (this.callbackMap_[e] = b), d = new module$exports$omid$common$InternalMessage(e, "VerificationService." + a, module$contents$omid$verificationClient$VerificationClient_MESSAGE_VERSION, JSON.stringify(d)), this.communication.sendMessage(d)); }; (0,module$exports$omid$common$exporter.packageExport)("OmidVerificationClient", module$exports$omid$verificationClient$VerificationClient); }, typeof exports === 'undefined' ? undefined : exports)); } catch(e) { __IntegralASDiagnosticCall('thirdparty', e); } __IASScope.isDomless = (typeof window === "undefined" ? true : false); __IASOmidVerificationClient = { isSupported: function () { return false; } }; if (typeof __IASScope.OmidVerificationClient !== 'undefined') { try { __IASOmidVerificationClient = new __IASScope.OmidVerificationClient['1.0.2-dev'](); //try standard in-browser instantiation } catch(e) { try { __IASOmidVerificationClient = new __IASScope.OmidVerificationClient(); //try domless version which has no version } catch(e) { } } } if (__IntegralASConfig.jsFeatures.indexOf('asidJsDiagnostic') !== -1) { var fakeErr = { message: __IntegralASConfig.asid }; __IntegralASDiagnosticCall('asid', fakeErr); } __IntegralASConfig.useFIF = (__IASScope && !!__IASScope.__IntegralASUseFIF) && __IntegralASConfig.mode === 'jload'; __IntegralASConfig.contextNode = (function() { if (__IASScope.isDomless) { return; } if (__IntegralASConfig.useFIF) { return __IASScope.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; }()); __IntegralASConfig.perf = (function() { var _marks = {}; var START_CODE = 'A'; var END_CODE = 'Z'; function _addMark(codeName, time) { // TODO: consider validation that codeName doesn't already exist and throwing in debug mode // also that the code name is a string of the expected format // and/or consider consolidating all PERF_MARK_ definitions into a global-to-our-closure constants file // (except the ones in this file, since _init() wouldn't have access to that scope) _marks[codeName] = time; } function mark(codeName) { _addMark(codeName, Math.round(__IASScope.performance.now())); } function markStart(baseName) { mark(baseName + START_CODE); } function markEnd(baseName) { mark(baseName + END_CODE); } function markResource(baseName, url) { var entry, entries; entries = __IASScope.performance.getEntriesByName(url); if (entries && entries.length) { entry = entries[entries.length - 1]; if (entry.startTime > 0 && entry.responseEnd > 0) { _addMark(baseName + START_CODE, Math.round(entry.startTime)); // TODO: if we address the CORS issues in FW, we can gather more details about the download process here _addMark(baseName + END_CODE, Math.round(entry.responseEnd)); } } } function getData() { return _marks; } function noop() {} function setNoops() { _addMark = noop; mark = noop; markStart = noop; markEnd = noop; markResource = noop; } function isFunc(obj) { return typeof obj === 'function'; } function _init() { var canUsePerformanceAPIs = false; var PERF_MARK_BOOTSTRAPPER_EXECUTION = 'be'; var PERF_MARK_BOOTSTRAPPER_SCRIPT_DOWNLOAD = 'bd'; var PERF_MARK_MAIN_SCRIPT_DOWNLOAD = 'md'; // note: this code is intentionally the same as the one in globalConstants.js var downloadMark; try { canUsePerformanceAPIs = __IASScope.performance && isFunc(__IASScope.performance.getEntriesByName) && isFunc(__IASScope.performance.now) && __IntegralASConfig.perfBirth !== null; if (canUsePerformanceAPIs) { downloadMark = __IntegralASConfig.jsDoSplit ? PERF_MARK_BOOTSTRAPPER_SCRIPT_DOWNLOAD : PERF_MARK_MAIN_SCRIPT_DOWNLOAD; markResource(downloadMark, __IntegralASConfig.scriptUrl); // in split mode, this captures download time for the bootstrapper script, in bundled mode, the bundled/main script _addMark(PERF_MARK_BOOTSTRAPPER_EXECUTION + START_CODE, Math.round(__IntegralASConfig.perfBirth)); // put the birthdate that we already captured into our list of marks markEnd(PERF_MARK_BOOTSTRAPPER_EXECUTION); // roughly the end time of execution for the bootstrapper script in split mode, in bundled mode, end of the bootstrapper part of the script and start of the module definition part } else { setNoops(); } } catch (err) { // TODO: remove if we never get here? setNoops(); if (isFunc(__IASScope.__IntegralASDiagnosticCall)) { __IASScope.__IntegralASDiagnosticCall('perf', err, __IntegralASConfig); } } } _init(); return { mark: mark, markStart: markStart, markEnd: markEnd, markResource: markResource, getData: getData }; }()); } catch(err) { __IntegralASConfig = {}; __IntegralASDiagnosticCall('bootstrapper', err); } // This is an immediately invoked bootstrapper extension, rather than an anonymous IIFE to enable unit testing. __IASScope.__IntegralASConfig = typeof __IntegralASConfig !== 'undefined' ? __IntegralASConfig : {}; __IASScope.__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) { if (__IASScope.isDomless) { if (__IASOmidVerificationClient && __IASOmidVerificationClient.injectJavaScriptResource) { __IASOmidVerificationClient.injectJavaScriptResource(scriptUrl, function(){}); } } else { var mainScriptDoc = mainScriptScope.document; var script = mainScriptDoc.createElement('script'); script.type = 'text/javascript'; script.src = scriptUrl; mainScriptDoc.head.appendChild(script); } } function lookForMainScriptAndRun() { var initializerFn, shouldSendTimeout, timePassed, timeoutExceeded; var initializerScope = params.useFIF ? mainScriptScope.parent : mainScriptScope; var TIMEOUT_MS = 5000; var INTERVAL_MS = 25; var timeoutDiagSent = false; var timeoutScope = __IASScope; if (__IASScope.isDomless && __IASOmidVerificationClient && __IASOmidVerificationClient.setTimeout) { timeoutScope = __IASOmidVerificationClient; } function timedLoad() { try { initializerFn = getInitializerIfAvailable(); if (initializerFn) { 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; } timeoutScope.setTimeout(timedLoad, INTERVAL_MS); //thanks to this setTimeout, we're keeping the interval behaviour } } catch(err) { sendDiag('interval', err); } } timeoutScope.setTimeout(timedLoad, 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(); }; __IASScope.__IntegralASConfig.mainScriptAppender(__IASScope.__IntegralASConfig, __IASScope);