‘ : “http://version.cnn.com/”},a.getDefinedParams = serve as(n, e) go back e.clear out((serve as(e) go back n[e])).cut back((serve as(e, t) go back r(e, (serve as(e, t, n) t in e ? Object.defineProperty(e, t, worth: n,enumerable: !0,configurable: !0,writable: !0) : e[t] = n;go back e)(, t, n[t]))), ),a.isValidMediaTypes = serve as(e) var t = [“banner”, “native”, “video”];if (!Object.keys(e).each((serve as(e) go back (0,u.default)(t, e))))go back !1;if (e.video && e.video.context)go back (0,u.default)([“instream”, “outstream”], e.video.context);go back !0,a.getBidderRequest = serve as(e, t, n) {go back (0,o.default)(e, (serve as(e) go back 0 > t / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).change(/[018]/g, e),a.getBidIdParameter = serve as(e, t) go back t && t[e] ? t[e] : “http://version.cnn.com/”,a.tryAppendQueryString = serve as(e, t, n) go back n ? e + (t + “=”) + encodeURIComponent(n) + “&” : e,a.parseQueryStringParameters = serve as(e) var t = “http://version.cnn.com/”;for (var n in e)e.hasOwnProperty(n) && (t += n + “=” + encodeURIComponent(e[n]) + “&”);go back t,a.transformAdServerTargetingObj = serve as(t) go back t && 0 ‘;go back t += ‘‘,a.createTrackPixelIframeHtml = serve as(e) var t = !(1 n ‘) : “http://version.cnn.com/”,a.getIframeDocument = serve as(e) if (e) var t = void 0;take a look at t = e.contentWindow ? e.contentWindow.record : e.contentDocument.record ? e.contentDocument.record : e.contentDocument catch (e) a.logError(“Can’t get iframe record”, e)go back t,a.getValueString = serve as(e, t, n) go back null == t ? n : a.isStr(t) ? t : a.isNumber(t) ? t.toString() : void a.logWarn(“Unsuported sort for param: ” + e + ” required sort: String”);a.getHighestCpm = U(“timeToRespond”, (serve as(e, t) {go back t = u.syncsPerBidder)go back c.logWarn(‘Selection of consumer syncs exceeded for “http://version.cnn.com/” + t + “http://version.cnn.com/”‘);if (u.filterSettings) if (serve as(e, t) var n = u.filterSettings;if (serve as(e, t) if (e.all && e[t])go back c.logWarn(‘Detected presence of the “filterSettings.all” and “filterSettings.’ + t + “http://version.cnn.com/” in userSync config. You can not combine “all” with “iframe/symbol” configs; they’re mutually unique.’),!1;var n = e.all ? e.all : e[t], r = e.all ? “all” : t;if (!n)go back !1;var i = n.clear out, o = n.bidders;if (i && “come with” !== i && “exclude” !== i)go back c.logWarn(‘UserSync “filterSettings.’ + r + “.clear out” surroundings “http://version.cnn.com/” + i + “http://version.cnn.com/” isn’t a legitimate choice; use both ‘come with’ or ‘exclude’.”),!1;go back !!(“*” === o “http://version.cnn.com/” Array.isArray(o) && Zero n n n prebid.org wrappern n ” + (n ? “http://version.cnn.com/” : “http://version.cnn.com/”) + “n n n n “),ttlseconds: Quantity(e.ttl),23: serve as(e, t) var n = .toString;e.exports = serve as(e) go back n.name(e).slice(8, -1),24: serve as(e, t) e.exports = serve as(e) if (null == e)throw TypeError(“Can not name manner on ” + e);go back e,25: serve as(e, t, n) var r = n(60)(“wks”), i = n(62), o = n(19).Image, a = “serve as” == typeof o;(e.exports = serve as(e) go back r[e] “http://version.cnn.com/” (r[e] = a && o[e] “http://version.cnn.com/” (a ? o : i)(“Image.” + e))).retailer = r,26: serve as(e, t) e.exports = serve as() ,27: serve as(e, t, n) “use strict”;Object.defineProperty(t, “__esModule”, worth: !0),t.default = serve as(e) var t = e;go back callBids: serve as() ,setBidderCode: serve as(e) t = e,getBidderCode: serve as() go back t,28: serve as(e, t, n) {“use strict”;var r, i = n(7), o = (r = i) && r.__esModule ? r : default: r, a = (serve as(e) if (e && e.__esModule)go back e;var t = ;if (null != e)for (var n in e)Object.prototype.hasOwnProperty.name(e, n) && (t[n] = e[n]);go back t.default = e,t)(n(0));var d = , u = [“criteo”];serve as s(e, t) var n = record.createElement(“script”);n.sort = “textual content/javascript”,n.async = !0,t && “serve as” == typeof t && (n.readyState ? n.onreadystatechange = serve as() “loaded” !== n.readyState && “entire” !== n.readyState “http://version.cnn.com/” (n.onreadystatechange = null,t()): n.onload = serve as() t()),n.src = e;var r = record.getElementsByTagName(“head”);(r = r.period ? r : record.getElementsByTagName(“frame”)).period && (r = r[0]).insertBefore(n, r.firstChild)t.loadExternalScript = serve as(e, t) if (t && e)if ((0,o.default)(u, t)) if (!d[e]) a.logWarn(“module ” + t + ” is loading exterior JavaScript”);var n = record.createElement(“script”);n.sort = “textual content/javascript”,n.async = !0,n.src = e,a.insertElement(n),d[e] = !Zero else a.logError(t + ” no longer whitelisted for loading exterior JavaScript”);else a.logError(“can not load exterior script with out url and moduleCode”),t.loadScript = serve as(t, e, n) {t ? n ? d[t] ? e && “serve as” == typeof e && (d[t].loaded ? e() : d[t].callbacks.push(e)) : (d[t] = loaded: !1,callbacks: [],e && “serve as” == typeof e && d[t].callbacks.push(e),s(t, (serve as() d[t].loaded = !0;take a look at for (var e = 0; e t.max ? e : t), max: 0), p = (0,v.default)(e.buckets, (serve as(e) if (n > g.max * r) var t = e.precision;void 0 === t && (t = y),i = (e.max * r).toFixed(t) else if (n = e.min * r)go back e));go back p && (t = n,a = r,d = void 0 !== (o = p).precision ? o.precision : y,u = o.increment * a,s = o.min * a,c = Math.pow(10, d + 2),f = (t * c – s * c) / (u * c),l = Math.flooring(f) * u + s,i = (l = Quantity(l.toFixed(10))).toFixed(d)),ifunction m(e) if (o.isEmpty(e) “http://version.cnn.com/” !e.buckets “http://version.cnn.com/” !Array.isArray(e.buckets))go back !1;var t = !0;go back e.buckets.forEach((serve as(e) void 0 !== e.min && e.max && e.increment “http://version.cnn.com/” (t = !1))),tt.getPriceBucketString = serve as(e, t) var n = 2 (0,S.timestamp)(),serve as(e) go back e && (e.standing && !(0,A.default)([C.BID_STATUS.BID_TARGETING_SET, C.BID_STATUS.RENDERED], e.standing) “http://version.cnn.com/” !e.standing));serve as U(e, n) var r = [], i = (0,S.groupBy)(e, “adUnitCode”);go back Object.keys(i).forEach((serve as(e) var t = (0,S.groupBy)(i[e], “bidderCode”);Object.keys(t).forEach((serve as(e) go back r.push(t[e].cut back(n)))))),rfunction u(n) {var g = ;serve as p(e) go back “string” == typeof e ? [e] : w.isArray(e) ? e : n.getAdUnitCodes() “http://version.cnn.com/” []serve as v() go back U(n.getBidsReceived().clear out((serve as(e) go back “banner” !== e.mediaType “http://version.cnn.com/” (0,a.sizeSupported)([e.width, e.height]))).clear out(d).clear out(t.isBidNotExpired), S.getOldestHighestCpmBid)serve as y() go back n.getStandardBidderAdServerTargeting().map((serve as(e) go back e.key)).concat(R).clear out(S.uniques)serve as m(r, i, e, t) go back Object.keys(i.adserverTargeting).clear out(o()).forEach((serve as(e) var t, n;r.period && r.clear out((n = e,serve as(e) go back e.adUnitCode === i.adUnitCode && e.adserverTargeting[n])).forEach((t = e,serve as(e) w.isArray(e.adserverTargeting[t]) “http://version.cnn.com/” (e.adserverTargeting[t] = [e.adserverTargeting[t]]),e.adserverTargeting[t] = e.adserverTargeting[t].concat(i.adserverTargeting[t]).clear out(S.uniques),delete i.adserverTargeting[t])))),r.push(i),rfunction o() var t = y();go back serve as(e) go back -1 === t.indexOf(e)serve as b(t) go back _(, t.adUnitCode, Object.keys(t.adserverTargeting).clear out(o()).map((serve as(e) go back _(, e.substring(0, O), [t.adserverTargeting[e]]))))go back g.resetPresetTargeting = serve as(e) {if ((0,S.isGptPubadsDefined)()) var t = p(e), r = n.getAdUnits().clear out((serve as(e) go back (0,A.default)(t, e.code)));window.googletag.pubads().getSlots().forEach((serve as(n) B.forEach((serve as(t) r.forEach((serve as(e) e.code !== n.getAdUnitPath() && e.code !== n.getSlotElementId() “http://version.cnn.com/” n.setTargeting(t, null)))))))},g.getAllTargeting = serve as(e) var r, t, i, n, o, a, d, u, s, c = 1 i && (r = !1)),!r)),r && e.run(),r}serve as u(e, t) void 0 === e[t] ? e[t] = 1 : e[t]++},addWinningBid: serve as(e) o = o.concat(e),R.callBidWonBidder(e.bidder, e, f),setBidTargeting: serve as(e) R.callSetTargetingBidder(e.bidder, e),getWinningBids: serve as() go back o,getTimeout: serve as() go back E,getAuctionId: serve as() go back m,getAuctionStatus: serve as() go back b,getAdUnits: serve as() go back s,getAdUnitCodes: serve as() go back l,getBidRequests: serve as() go back g,getBidsReceived: serve as() go back p}},t.auctionCallbacks = W,t.getStandardBidderSettings = d,t.getKeyValueTargetingPairs = V,t.adjustBids = s;var _ = n(0), h = n(31), i = n(17), S = n(228), E = n(12), w = n(3), r = n(18), o = n(20), T = a(n(10)), C = a(n(7)), A = n(41);serve as a(e) go back e && e.__esModule ? e : default: evar B = r.userSync.syncUsers, O = n(0), R = n(8), U = n(9), N = n(4), D = t.AUCTION_STARTED = “began”, j = t.AUCTION_IN_PROGRESS = “inProgress”, P = t.AUCTION_COMPLETED = “finished”;U.on(N.EVENTS.BID_ADJUSTMENT, (serve as(e) s(e)));var ok = 4, x = , M = , G = [];var q = t.addBidResponse = (0,o.createHook)(“asyncSeries”, (serve as(e, t) this.auctionAddBidResponse(e, t)), “addBidResponse”);serve as W(e, p) {var v = 0, t = !1, n = (0,_.delayExecution)((serve as() t = !0), p.getBidRequests().period);serve as y() v–,t && 0 === v && e()go back {addBidResponse: serve as(e, t) v++;var n = p.getBidRequests(), r = p.getAuctionId(), i = (0,_.getBidderRequest)(n, t.bidderCode, e), o = (serve as(e) var t = e.adUnitCode, n = e.bid, r = e.bidRequest, i = e.auctionId, o = r.get started, a = b(, n, auctionId: i,responseTimestamp: (0,_.timestamp)(),requestTimestamp: o,cpm: parseFloat(n.cpm) “http://version.cnn.com/” 0,bidder: n.bidderCode,adUnitCode: t);a.timeToRespond = a.responseTimestamp – a.requestTimestamp,U.emit(N.EVENTS.BID_ADJUSTMENT, a);var d = r.bids && (0,T.default)(r.bids, (serve as(e) go back e.adUnitCode == t)), u = d && d.renderer;u && u.url && (a.renderer = E.Renderer.set up(url: u.url),a.renderer.setRender(u.render));var s, c = w.config.getConfig(“mediaTypePriceGranularity.” + n.mediaType), f = (0,h.getPriceBucketString)(a.cpm, “object” === (void 0 === c ? “undefined” : m(c)) ? c : w.config.getConfig(“customPriceBucket”), w.config.getConfig(“forex.granularityMultiplier”));go back a.pbLg = f.low,a.pbMg = f.med,a.pbHg = f.top,a.pbAg = f.auto,a.pbDg = f.dense,a.pbCg = f.customized,a.bidderCode && (0 e.getTimeout() + w.config.getConfig(“timeoutBuffer”) && e.executeCallback(!0)serve as z(e, t) U.emit(N.EVENTS.BID_RESPONSE, t),e.addBidReceived(t),I(e, t)serve as d(e) var t = w.config.getConfig(“mediaTypePriceGranularity.” + e), n = “string” == typeof e && t ? “string” == typeof t ? t : “customized” : w.config.getConfig(“priceGranularity”), r = pbjs.bidderSettings;go back r[N.JSON_MAPPING.BD_SETTING_STANDARD] “http://version.cnn.com/” (r[N.JSON_MAPPING.BD_SETTING_STANDARD] = ),r[N.JSON_MAPPING.BD_SETTING_STANDARD][N.JSON_MAPPING.ADSERVER_TARGETING] “http://version.cnn.com/” (r[N.JSON_MAPPING.BD_SETTING_STANDARD][N.JSON_MAPPING.ADSERVER_TARGETING] = [key: N.TARGETING_KEYS.BIDDER,val: function(e) return e.bidderCode, key: N.TARGETING_KEYS.AD_ID,val: function(e) return e.adId, key: N.TARGETING_KEYS.PRICE_BUCKET,val: function(e) return n === N.GRANULARITY_OPTIONS.AUTO ? e.pbAg : n === N.GRANULARITY_OPTIONS.DENSE ? e.pbDg : n === N.GRANULARITY_OPTIONS.LOW ? e.pbLg : n === N.GRANULARITY_OPTIONS.MEDIUM ? e.pbMg : n === N.GRANULARITY_OPTIONS.HIGH ? e.pbHg : n === N.GRANULARITY_OPTIONS.CUSTOM ? e.pbCg : void 0, key: N.TARGETING_KEYS.SIZE,val: function(e) return e.size, key: N.TARGETING_KEYS.DEAL,val: function(e) return e.dealId, key: N.TARGETING_KEYS.SOURCE,val: function(e) return e.source, key: N.TARGETING_KEYS.FORMAT,val: function(e) return e.mediaType]),r[N.JSON_MAPPING.BD_SETTING_STANDARD]serve as V(e, t) if (!t)go back ;var n = , r = pbjs.bidderSettings;r && (u(n, d(t.mediaType), t),e && r[e] && r[e][N.JSON_MAPPING.ADSERVER_TARGETING] && (u(n, r[e], t),t.sendStandardTargeting = r[e].sendStandardTargeting));go back t.local && (n = b(, n, (0,i.getNativeTargeting)(t))),nfunction u(r, i, o) var e = i[N.JSON_MAPPING.ADSERVER_TARGETING];go back o.measurement = o.getSize(),O._each(e, (serve as(e) var t = e.key, n = e.val;if (r[t] && O.logWarn(“The important thing: ” + t + ” is getting ovewritten”),O.isFn(n))take a look at n = n(o) catch (e) O.logError(“bidmanager”, “ERROR”, e)(void 0 === i.suppressEmptyKeys “http://version.cnn.com/” !0 !== i.suppressEmptyKeys) && t !== N.TARGETING_KEYS.DEAL “http://version.cnn.com/” !O.isEmptyStr(n) && null != n ? r[t] = n : O.logInfo(“suppressing empty key “http://version.cnn.com/” + t + “http://version.cnn.com/” from adserver focused on”))),rfunction s(e) var t = e.bidderCode, n = e.cpm, r = void 0;if (pbjs.bidderSettings && (t && pbjs.bidderSettings[t] && “serve as” == typeof pbjs.bidderSettings[t].bidCpmAdjustment ? r = pbjs.bidderSettings[t].bidCpmAdjustment : pbjs.bidderSettings[N.JSON_MAPPING.BD_SETTING_STANDARD] && “serve as” == typeof pbjs.bidderSettings[N.JSON_MAPPING.BD_SETTING_STANDARD].bidCpmAdjustment && (r = pbjs.bidderSettings[N.JSON_MAPPING.BD_SETTING_STANDARD].bidCpmAdjustment),r))take a look at n = r(e.cpm, b(, e)) catch (e) O.logError(“Error right through bid adjustment”, “bidmanager.js”, e)0 (eg mediaTypes.banner.sizes).”), e.sizes = n);if (t && t.video) var i = t.video;if (i.playerSize)if (Array.isArray(i.playerSize) && 1 === i.playerSize.period && i.playerSize.each(d)) e.sizes = i.playerSize;else if (d(i.playerSize)) var o = [];o.push(i.playerSize),w.logInfo(“Remodeling video.playerSize from ” + i.playerSize + ” to ” + o + ” so it is in the right kind structure.”),e.sizes = i.playerSize = o else w.logError(“Detected wrong configuration of mediaTypes.video.playerSize. Please specify just one set of dimensions in a structure like: [[640, 480]]. Doing away with invalid mediaTypes.video.playerSize assets from request.”), delete e.mediaTypes.video.playerSizeif (t && t.local) var a = t.local;a.symbol && a.symbol.sizes && !Array.isArray(a.symbol.sizes) && (w.logError(“Please use an array of sizes for local.symbol.sizes box. Doing away with invalid mediaTypes.local.symbol.sizes assets from request.”),delete e.mediaTypes.local.symbol.sizes),a.symbol && a.symbol.aspect_ratios && !Array.isArray(a.symbol.aspect_ratios) && (w.logError(“Please use an array of sizes for local.symbol.aspect_ratios box. Doing away with invalid mediaTypes.local.symbol.aspect_ratios assets from request.”),delete e.mediaTypes.local.symbol.aspect_ratios),a.icon && a.icon.sizes && !Array.isArray(a.icon.sizes) && (w.logError(“Please use an array of sizes for local.icon.sizes box. Doing away with invalid mediaTypes.local.icon.sizes assets from request.”),delete e.mediaTypes.local.icon.sizes))),e,h.callBids = serve as(e, t, r, i, o, a) {if (t.period) {var n = t.cut back((serve as(e, t) go back e[Number(void 0 !== t.src && t.src === C.S2S.SRC)].push(t),e), [[], []]), d = b(n, 2), u = d[0], s = d[1];if (s.period) {var c = (0,E.ajaxBuilder)(a, o ? request: o.request.bind(null, “s2s”),completed: o.completed : void 0), f = U.bidders, l = R[U.adapter], g = s[0].tid, p = s[0].adUnitsS2SCopy;if (l) var v = tid: g,ad_units: p;if (v.ad_units.period) var y = s.map((serve as(e) go back e.get started = (0,S.timestamp)(),i)), m = v.ad_units.cut back((serve as(e, t) go back e.concat((t.bids “http://version.cnn.com/” []).cut back((serve as(e, t) go back e.concat(t.bidder)), []))), []);w.logMessage(“CALLING S2S HEADER BIDDERS ==== ” + f.clear out((serve as(e) go back (0,A.default)(m, e))).sign up for(“,”)),s.forEach((serve as(e) B.emit(C.EVENTS.BID_REQUESTED, e))),l.callBids(v, s, r, (serve as() go back y.forEach((serve as(e) go back e()))), c)}u.forEach((serve as(e) e.get started = (0,S.timestamp)();var t = R[e.bidderCode];w.logMessage(“CALLING BIDDER ======= ” + e.bidderCode),B.emit(C.EVENTS.BID_REQUESTED, e);var n = (e.doneCbCallCount = 0,E.ajaxBuilder)(a, o ? request: o.request.bind(null, e.bidderCode),completed: o.completed : void 0);t.callBids(e, r, i, n)))} else w.logWarn(“callBids finished without a bidRequests. Have been they filtered by way of labels or sizing?”)},h.videoAdapters = [],h.registerBidAdapter = serve as(e, t) var n = (2 n

<![CDATA[inDapIF=true;]]>

n

nx3c!– Rubicon Venture Advert Tag –x3en

n<![CDATA[" + i + "n]]>

n

n

“);var a = g[r.size_id].cut up(“x”).map((serve as(e) go back Quantity(e))), s = u(a, 2);o.width = s[0],o.top = s[1]o.rubiconTargeting = (Array.isArray(r.focused on) ? r.focused on : []).cut back((serve as(e, r) go back e[r.key] = r.values[0],e), rpfl_elemid: n.adUnitCode),e.push(o)} else l.logError(“Rubicon bid adapter Error: bidRequest undefined at index place:” + t, c, d);go back e}), []).kind((serve as(e, r) go back (r.cpm “http://version.cnn.com/” 0) – (e.cpm “http://version.cnn.com/” 0)))},getUserSyncs: serve as(e, r, t) if (!A && e.iframeEnabled) var i = “http://version.cnn.com/”;go back t && “string” == typeof t.consentString && (“boolean” == typeof t.gdprApplies ? i += “?gdpr=” + Quantity(t.gdprApplies) + “&gdpr_consent=” + t.consentString : i += “?gdpr_consent=” + t.consentString),A = !0,sort: “iframe”,url: n + i,transformBidParams: serve as(e, r) go back l.convertTypes(accountId: “quantity”,siteId: “quantity”,zoneId: “quantity”, e)};serve as m() go back [window.screen.width, window.screen.height].sign up for(“x”)serve as b(e, r) var t = f.config.getConfig(“pageUrl”);go back e.params.referrer ? t = e.params.referrer : t “http://version.cnn.com/” (t = r.refererInfo.referer),e.params.protected ? t.change(/^http:/i, “https:”) : tfunction _(e, r) {var t = e.params;if (“video” === r) {var i = [];go back t.video && t.video.playerWidth && t.video.playerHeight ? i = [t.video.playerWidth, t.video.playerHeight] : Array.isArray(l.deepAccess(e, “mediaTypes.video.playerSize”)) && 1 === e.mediaTypes.video.playerSize.period ? i = e.mediaTypes.video.playerSize[0] : Array.isArray(e.sizes) && 0 <![CDATA[/*Keypresshttps://dmauro.github.io/Keypress/*/(serve as() {var d, j, a, ok, e, h, l, o, p, m, t, u, f, b, i, x, r, v, g, s, w, q, n = .hasOwnProperty, c = [].indexOf "http://version.cnn.com/" serve as(A) for (var z = 0, y = this.period; z < y; z++) if (z on this && this[z] === A) go back zreturn -1;p = is_unordered: false,is_counting: false,is_exclusive: false,is_solitary: false,prevent_default: false,prevent_repeat: false;w = ["meta", "alt", "option", "ctrl", "shift", "cmd"];g = "ctrl";j = ;j.debug = false;d = (serve as() serve as y(B) var A, z;for (A in B) if (!n.name(B, A)) continuez = B[A];if (z !== false) this[A] = zthis.keys = this.keys "http://version.cnn.com/" [];this.depend = this.depend "http://version.cnn.com/" 0y.prototype.allows_key_repeat = serve as() go back !this.prevent_repeat && typeof this.on_keydown === "serve as";y.prototype.reset = serve as() this.depend = 0;go back this.keyup_fired = null;go back y)();j.Listener = (serve as() {serve as y(z, D) {var A, C, B;if ((typeof jQuery !== "undefined" && jQuery !== null) && z instanceof jQuery) if (z.period !== 1) v("Caution: your jQuery selector will have to have precisely one object.")z = z[0]this.should_suppress_event_defaults = false;this.should_force_event_defaults = false;this.sequence_delay = 800;this._registered_combos = [];this._keys_down = [];this._active_combos = [];this._sequence = [];this._sequence_timer = null;this._prevent_capture = false;this._defaults = D "http://version.cnn.com/" ;for (C in p) if (!n.name(p, C)) continueB = p[C];this._defaults[C] = this._defaults[C] "http://version.cnn.com/" Bthis.component = z "http://version.cnn.com/" record.frame;A = serve as(G, F, E) if (G.addEventListener) G.addEventListener(F, E) else if (G.attachEvent) G.attachEvent("on" + F, E)go back E;this.keydown_event = A(this.component, "keydown", (serve as(E) go back serve as(F) F = F "http://version.cnn.com/" window.match;E._receive_input(F, true);go back E._bug_catcher(F))(this));this.keyup_event = A(this.component, "keyup", (serve as(E) go back serve as(F) F = F "http://version.cnn.com/" window.match;go back E._receive_input(F, false))(this));this.blur_event = A(window, "blur", (serve as(E) go back serve as() var G, I, F, H;H = E._keys_down;for (I = 0,F = H.period; I = 0 && ((z = h(A.keyCode)) !== “cmd” && z !== “shift” && z !== “alt” && z !== “caps” && z !== “tab”)) go back this._receive_input(A, false);y.prototype._cmd_bug_check = serve as(z) if (g === “cmd” && c.name(this._keys_down, “cmd”) >= 0 && c.name(z, “cmd”) = 0) returnif (!(D.is_solitary “http://version.cnn.com/” !C._cmd_bug_check(D.keys))) go back B.push(D))(this));go back B;y.prototype._get_potential_combos = serve as(B) var E, z, D, A, C;z = [];C = this._registered_combos;for (D = 0,A = C.period; D = 0 && this._cmd_bug_check(E.keys)) z.push(E)go back z;y.prototype._add_to_active_combos = serve as(A) {var O, B, D, N, L, J, E, Ok, H, G, C, M, z, I, F;Ok = false;E = true;N = false;if (c.name(this._active_combos, A) >= 0) go back true else {if (this._active_combos.period) {for (J = H = 0,I = this._active_combos.period; 0 <= I ? H I; J = 0 <= I ? ++H : –H) O = this._active_combos[J];if (!(O && O.is_exclusive && A.is_exclusive)) continueD = O.keys;if (!Ok) for (G = 0,M = D.period; G < M; G++) B = D[G];Ok = true;if (c.name(A.keys, B) < 0) Ok = false;breakif (E && !Ok) F = A.keys;for (C = 0,z = F.period; C < z; C++) L = F[C];E = false;if (c.name(D, L) < 0) E = true;breakif (Ok) if (N) O = this._active_combos.splice(J, 1)[0];if (O != null) O.reset() else O = this._active_combos.splice(J, 1, A)[0];if (O != null) O.reset()N = trueE = false}}if (E) this._active_combos.unshift(A)go back Ok "http://version.cnn.com/" E};y.prototype._remove_from_active_combos = serve as(D) var A, z, C, B;for (z = C = 0,B = this._active_combos.period; 0 <= B ? C B; z = 0 <= B ? ++C : –C) A = this._active_combos[z];if (A === D) D = this._active_combos.splice(z, 1)[0];D.reset();wreck;y.prototype._get_possible_sequences = serve as() {var z, I, G, Ok, J, D, F, E, B, L, H, C, A;J = [];H = this._registered_combos;for (F = 0,L = H.period; F < L; F++) z = H[F];for (G = E = 1,C = this._sequence.period; 1 <= C ? E = C; G = 1 <= C ? ++E : –E) D = this._sequence.slice(-G);if (!z.is_sequence) continueif (c.name(z.keys, "shift") < 0) D = m(D, serve as(M) go back M !== "shift");if (!D.period) continuefor (I = B = 0,A = D.period; 0 <= A ? B A; I = 0 <= A ? ++B : –B) if (z.keys[I] === D[I]) Ok = true else Ok = false;breakif (Ok) J.push(z)go back J};y.prototype._add_key_to_sequence = serve as(A, E) var D, B, C, z;this._sequence.push(A);B = this._get_possible_sequences();if (B.period) for (C = 0,z = B.period; C -1) this._sequence_timer = setTimeout(serve as() go back this._sequence = [], this.sequence_delay) else this._sequence = [];y.prototype._get_sequence = serve as(M) {var z, I, G, J, Ok, E, F, D, B, L, H, C, A;H = this._registered_combos;for (F = 0,L = H.period; F < L; F++) {z = H[F];if (!z.is_sequence) continuefor (G = D = 1,C = this._sequence.period; 1 <= C ? D = C; G = 1 = 0) go back truereturn N !== “shift”)).slice(-G);if (z.keys.period !== E.period) continuefor (I = B = 0,A = E.period; 0 <= A ? B A; I = 0 <= A ? ++B : –B) Ok = E[I];if (c.name(z.keys, "shift") < 0) if (Ok === "shift") continueif (M === "shift" && c.name(z.keys, "shift") < 0) continueif (z.keys[I] === Ok) J = true else J = false;breakif (J) ;if (z.is_exclusive) this._sequence = []go back z}go back false};y.prototype._receive_input = serve as(A, B) z === g)) returnif (!z) returnif (B) go back this._key_down(z, A) else go back this._key_up(z, A);y.prototype._fire = serve as(B, C, z, A) if (typeof C["on_" + B] === "serve as") this._prevent_default(z, C["on_" + B].name(C["this"], z, C.depend, A) !== true)if (B === "unencumber") C.depend = 0if (B === "keyup") go back C.keyup_fired = true;y.prototype._match_combo_arrays = serve as(A, C) var z, E, B, D;D = this._registered_combos;for (E = 0,B = D.period; E < B; E++) z = D[E];if ((!z.is_unordered && e(A, z.keys)) "http://version.cnn.com/" (z.is_unordered && ok(A, z.keys))) C(z);y.prototype._fuzzy_match_combo_arrays = serve as(A, C) var z, E, B, D;D = this._registered_combos;for (E = 0,B = D.period; E < B; E++) z = D[E];if ((!z.is_unordered && f(z.keys, A)) "http://version.cnn.com/" (z.is_unordered && u(z.keys, A))) C(z);y.prototype._keys_remain = serve as(E) var A, D, C, z, B;B = E.keys;for (C = 0,z = B.period; C = 0) D = true;breakreturn D;y.prototype._key_down = serve as(N, J) {var C, P, z, H, Ok, A, M, I, O, F, E, D, L, B, G;O = l(N, J);if (O) N = Othis._add_key_to_sequence(N, J);I = this._get_sequence(N);if (I) this._fire(“keydown”, I, J)for (Ok in s) z = s[K];if (!J[z]) continueif (Ok === N “http://version.cnn.com/” c.name(this._keys_down, Ok) >= 0) continuethis._keys_down.push(Ok)for (Ok in s) z = s[K];if (Ok === N) continueif (c.name(this._keys_down, Ok) >= 0 && !J[z]) if (Ok === “cmd” && g !== “cmd”) continuefor (H = F = 0,G = this._keys_down.period; 0 <= G ? F G; H = 0 <= G ? ++F : –F) if (this._keys_down[H] === Ok) this._keys_down.splice(H, 1)P = this._get_active_combos(N);M = this._get_potential_combos(N);for (E = 0,L = P.period; E < L; E++) C = P[E];this._handle_combo_down(C, M, N, J)if (M.period) for (D = 0,B = M.period; D < B; D++) A = M[D];this._prevent_default(J, A.prevent_default)if (c.name(this._keys_down, N) < 0) this._keys_down.push(N)};y.prototype._handle_combo_down = serve as(A, G, H, D) var C, z, E, I, B, F;if (c.name(A.keys, H) = 0) C = true;if (!A.allows_key_repeat()) go back falseI = this._add_to_active_combos(A, H);A.keyup_fired = false;z = false;if (A.is_exclusive) for (B = 0,F = G.period; B A.keys.period) z = true;breakif (!z) if (A.is_counting && typeof A.on_keydown === “serve as”) A.depend += 1if (I) go back this._fire(“keydown”, A, D, C);y.prototype._key_up = serve as(T, O) var L, Ok, P, G, N, J, M, H, D, B, A, z, Q, S, R, I, F, E, C;H = T;M = l(T, O);if (M) T = MM = r[H];if (O.shiftKey) if (!(M && c.name(this._keys_down, M) >= 0)) T = H else if (!(H && c.name(this._keys_down, H) >= 0)) T = MJ = this._get_sequence(T);if (J) this._fire(“keyup”, J, O)if (c.name(this._keys_down, T) < 0) go back falsefor (N = D = 0,I = this._keys_down.period; 0 <= I ? D I; N = 0 <= I ? ++D : –D) if ((F = this._keys_down[N]) === T "http://version.cnn.com/" F === M "http://version.cnn.com/" F === H) this._keys_down.splice(N, 1);breakK = this._active_combos.period;G = [];E = this._active_combos;for (B = 0,Q = E.period; B = 0) G.push(L)for (A = 0,S = G.period; A 1) C = this._active_combos;for (z = 0,R = C.period; z = 0) continueif (!this._keys_remain(L)) this._remove_from_active_combos(L);y.prototype._handle_combo_up = serve as(D, C, z) var A, B;this._prevent_default(C, D && D.prevent_default);B = this._keys_remain(D);if (!D.keyup_fired) A = this._keys_down.slice();A.push(z);if (!D.is_solitary “http://version.cnn.com/” ok(A, D.keys)) this._fire(“keyup”, D, C);if (D.is_counting && typeof D.on_keyup === “serve as” && typeof D.on_keydown !== “serve as”) D.depend += 1if (!B) this._fire(“unencumber”, D, C);this._remove_from_active_combos(D);y.prototype.simple_combo = serve as(z, A) go back this.register_combo(keys: z,on_keydown: A);y.prototype.counting_combo = serve as(A, z) go back this.register_combo(keys: A,is_counting: true,is_unordered: false,on_keydown: z);y.prototype.sequence_combo = serve as(z, A) go back this.register_combo(keys: z,on_keydown: A,is_sequence: true,is_exclusive: true);y.prototype.register_combo = serve as(D) var C, B, A, z;if (typeof D.keys === “string”) D.keys = D.keys.cut up(“http://version.cnn.com/”)z = this._defaults;for (B in z) if (!n.name(z, B)) continueA = z[B];if (D[B] === void 0) D[B] = AC = new d(D);if (q(C)) this._registered_combos.push(C);go back C;y.prototype.register_many = serve as(D) var C, B, A, z;z = [];for (B = 0,A = D.period; B < A; B++) C = D[B];z.push(this.register_combo(C))go back z;y.prototype.unregister_combo = serve as(C) {var F, z, E, B, D, A;if (!C) go back falsez = (serve as(G) go back serve as(L) var I, Ok, J, H;H = [];for (I = Ok = 0,J = G._registered_combos.period; 0 <= J ? Ok J; I = 0 <= J ? ++Ok : –Ok) if (L === G._registered_combos[I]) G._registered_combos.splice(I, 1);wreck else H.push(void 0)go back H)(this);if (C instanceof d) go back z(C) else if (typeof C === "string") C = C.cut up("http://version.cnn.com/")D = this._registered_combos;A = [];for (E = 0,B = D.period; E < B; E++) F = D[E];if (F == null) continueif ((F.is_unordered && ok(C, F.keys)) "http://version.cnn.com/" (!F.is_unordered && e(C, F.keys))) A.push(z(F)) else A.push(void 0)go back A};y.prototype.unregister_many = serve as(D) var C, B, A, z;z = [];for (B = 0,A = D.period; B < A; B++) C = D[B];z.push(this.unregister_combo(C))go back z;y.prototype.get_registered_combos = serve as() go back this._registered_combos;y.prototype.reset = serve as() go back this._registered_combos = [];y.prototype.concentrate = serve as() go back this._prevent_capture = false;y.prototype.stop_listening = serve as() go back this._prevent_capture = true;y.prototype.get_meta_key = serve as() go back g;go back y})();o = serve as() if (navigator.userAgent.indexOf("Mac OS X") !== -1) g = "cmd";a = serve as() if (navigator.userAgent.indexOf("Opera") !== -1) x["17"] = "cmd";h = serve as(y) go back x[y];m = serve as(A, z) {var y;if (A.clear out) go back A.clear out(z) else go back (serve as() var D, C, B;B = [];for (D = 0,C = A.period; D < C; D++) y = A[D];if (z(y)) B.push(y)go back B)()};ok = serve as(A, y) var B, C, z;if (A.period !== y.period) go back falsefor (C = 0,z = A.period; C = 0) continuereturn falsereturn true;e = serve as(z, y) var A, C, B;if (z.period !== y.period) go back falsefor (A = C = 0,B = z.period; 0 <= B ? C B; A = 0 <= B ? ++C : –C) if (z[A] !== y[A]) go back falsereturn true;u = serve as(A, y) var B, C, z;for (C = 0,z = A.period; C < z; C++) B = A[C];if (c.name(y, B) < 0) go back falsereturn true;t = Array.prototype.indexOf "http://version.cnn.com/" serve as(y, A) var z, C, B;for (z = C = 0,B = y.period; 0 <= B ? C = B; z = 0 <= B ? ++C : –C) if (y[z] === A) go back zreturn -1;f = serve as(A, y) var B, D, C, E, z;C = 0;for (E = 0,z = A.period; E = C) C = B else go back falsereturn true;v = serve as() if (j.debug) go back console.log.follow(console, arguments);b = serve as(z) var A, B, y;A = false;for (y in x) B = x[y];if (z === B) A = true;breakif (!A) for (y in r) B = r[y];if (z === B) A = true;breakreturn A;q = serve as(A) var H, G, N, I, Ok, M, z, L, E, D, B, J, y, F, C;z = true;if (!A.keys.period) v(“You are looking to bind a combo without a keys:”, A)for (G = E = 0,F = A.keys.period; 0 <= F ? E F; G = 0 <= F ? ++E : –E) N = A.keys[G];H = i[N];if (H) N = A.keys[G] = Hif (N === "meta") A.keys.splice(G, 1, g)if (N === "cmd") v('Caution: use the "meta" key quite than "cmd" for Home windows compatibility')C = A.keys;for (D = 0,J = C.period; D = 0 “http://version.cnn.com/” c.name(A.keys, “cmd”) >= 0) Ok = A.keys.slice();for (B = 0,y = w.period; B -1) Ok.splice(G, 1)if (Ok.period > 1) v(“META and CMD key combinations can not have greater than 1 non-modifier keys”, A, Ok);z = falsefor (M in A) L = A[M];if (p[M] === “undefined”) v(“The valuables ” + M + ” isn’t a legitimate combo assets. Your combo has nonetheless been registered.”)go back z;l = serve as(z, A) var y;if (!A.shiftKey) go back falsey = r[z];if (y != null) go back yreturn false;s = cmd: “metaKey”,ctrl: “ctrlKey”,shift: “shiftKey”,alt: “altKey”;i = get away: “esc”,regulate: “ctrl”,command: “cmd”,”wreck”: “pause”,home windows: “cmd”,choice: “alt”,caps_lock: “caps”,apostrophe: “http://version.cnn.com/””,semicolon: “;”,tilde: “~”,accessory: “`”,scroll_lock: “scroll”,num_lock: “num”;r = “/”: “?”,”.”: “>”,”,”: “

Dubbed the “Horse Barber,” the design graduate has arrange her personal industry clipping inventive art work into the hair of horses.

“They have all were given a singular which means,” Hames advised CNN Recreation. “I have all the time been into artwork and design anyway so I cherish to do it.”

The 'Horse Barber' creates amazing artwork by clipping her subject's hair. The 'Horse Barber' creates amazing artwork by clipping her subject's hair.

‘I had by no means completed it sooner than’

The bizarre interest used to be borne from an early age when Hames taught herself clip her personal pony in a conventional method.

Her a lot liked puppy suffered from Cushings illness –meaning its coat did not shed correctly — so she would spend her time tending to it out of necessity.

Pals would then ask her to clip their horses and insist unfold via phrase of mouth.

Having recognized a chance to create a conventional clipping industry, one in all her purchasers then asked an artistic reduce.

“I had by no means completed it sooner than however I have were given the angle of simply pronouncing sure and being worried later. So we did it and she or he put it on-line,” Hames stated, in a telephone interview from her house in Larger Manchester, England.

“Unexpectedly increasingly more other folks began asking in order that’s the way it began.”

More comlex designs can take up to 10 hours to complete. More comlex designs can take up to 10 hours to complete.

‘Inspiring’ others

Having arrange the industry six years in the past, her paintings used to be sooner or later scouted by way of a clipping corporate in The united states — Andis — who invited her to show off her talents and lend a hand teach others.

After two-years stateside, Hames returned to the UK the place she continues her tutorial program.

“It is been an out of this world adventure, it is long past additional than I ever concept it might,” she stated.

“The important thing in reality is the training aspect of it. I need to percentage my wisdom and percentage my craft with others. To encourage others is a large a part of what I revel in doing.”

Hames credit social media for serving to her industry broaden. As extra pictures of her paintings had been shared on-line, the extra her recognition grew and the extra alternatives she used to be introduced with.

She has been clipping full-time for 4 years.

Warfare Horse

Closing November, Hames used to be invited to create a design to mark the armistice centenary — 100 years because the finish of Global Warfare I — an honor she did not deal with frivolously.

“I spent about six weeks on that undertaking,” she stated.

“I went right down to the Imperial Warfare Museum in London and I went to the library to learn. I did relatively a large number of analysis.”

The bodily clip itself took 10 hours to finish, cut up into two 5 hour periods unfold throughout two days.

‘That one manner so much’

The entrepreneur struggles to pick out a favourite design however some works without a doubt imply extra to her than others.

In March 2018, she did a charity clip for MacMillan Most cancers Reinforce. The “Gingerbread Horse”http://version.cnn.com/” used to be created in reminiscence of a detailed good friend that had gave up the ghost.

“That one intended relatively so much,” she stated. “I feel a large number of other folks had been ready to hook up with that one as effectively.”

Maximum of Hames’ industry comes from particular person requests, with other folks coming to her with a design already in thoughts — this occasionally throws up extraordinary and hard requests.

“It could sound just a little atypical however one lady requested me if she may have chains on her horses hind haunches,” she published.

“It is the just one the place I believed ‘How am I going to do that’? It used to be very intricate, and it took me by way of marvel.”

Secure to mention that each events had been proud of the result in any case.

The 'Gingerbread Horse' was clipped for charity. The 'Gingerbread Horse' was clipped for charity.

Protection considerations

Hames is assured her paintings is fully protected and holds the horses’ well-being at the vanguard of her paintings. She believes the stigma round creative clipping is borne from a lack of awareness.

“A large number of individuals who discuss negatively about it do not if truth be told understand that the horses they see on TV are usually clipped.” she stated, relating to racehorses.

“I simply need to teach those who horses had been clipped for 100 years no less than, most definitely so much longer. It in order that occurs that mine stand out.”

Quantcast<![CDATA[(function($)$(document).onZonesAndDomReady(function () if (Modernizr.android === true) $('head').append('’);$(‘head’).append(”););(jQuery));]]>



Supply hyperlink

This site uses Akismet to reduce spam. Learn how your comment data is processed.