From 06df47325d5ecaff3b8d099fe1db7b85aac87b1e Mon Sep 17 00:00:00 2001 From: "@jehovahsays" Date: Sun, 16 Jun 2024 05:16:14 -0400 Subject: [PATCH] added featured updates --- action.php | 31 +- en/about.html | 13 + en/index.html | 13 + index.html | 9 + jquery-3.7.1.min.js | 2 + lastrss/bridge.php | 61 ++ lastrss/cache/index.htm | 1 + .../rss_81d78ad357e9d31d5149709a151624c7 | 1 + lastrss/lastRSS.php | 220 ++++++ newspaper.html | 75 ++ play.html | 106 +++ rssticker.js | 147 ++++ springy.html | 27 + springy.js | 735 ++++++++++++++++++ springyui.js | 394 ++++++++++ 15 files changed, 1834 insertions(+), 1 deletion(-) create mode 100644 en/about.html create mode 100644 en/index.html create mode 100644 jquery-3.7.1.min.js create mode 100644 lastrss/bridge.php create mode 100644 lastrss/cache/index.htm create mode 100644 lastrss/cache/rss_81d78ad357e9d31d5149709a151624c7 create mode 100644 lastrss/lastRSS.php create mode 100644 newspaper.html create mode 100644 play.html create mode 100644 rssticker.js create mode 100644 springy.html create mode 100644 springy.js create mode 100755 springyui.js diff --git a/action.php b/action.php index b619599..5d5c83f 100644 --- a/action.php +++ b/action.php @@ -50,7 +50,36 @@ . "\n" . "\r\n"); $handle = fopen("./index.html", "a"); - fwrite($handle, "" . "
" . "\r\n"); + fwrite($handle, + "" + . "
" + . "\r\n"); + +$handle = fopen("./springy.html", "a"); +// load the data and delete the line from the array +$lines = file('./springy.html'); +$last = sizeof($lines) - 1 ; +unset($lines[$last]); +// write the new data to the file +file_put_contents('./springy.html', $lines); + fwrite($handle, + "\"" + . $value + . "\"" + . "," . "\n" . "]};" + . "\r\n"); } fclose($handle); ?> \ No newline at end of file diff --git a/en/about.html b/en/about.html new file mode 100644 index 0000000..53be068 --- /dev/null +++ b/en/about.html @@ -0,0 +1,13 @@ + +aboutabout

+ +
+ +
delete this page
+
return to homepage
+ + diff --git a/en/index.html b/en/index.html new file mode 100644 index 0000000..dd8c327 --- /dev/null +++ b/en/index.html @@ -0,0 +1,13 @@ + +indexindex

+ +
+ +
delete this page
+
return to homepage
+ + diff --git a/index.html b/index.html index 33748d2..e1839e8 100644 --- a/index.html +++ b/index.html @@ -109,6 +109,15 @@

+springy +

+newspaper +

+play + +
    +
    +
    diff --git a/jquery-3.7.1.min.js b/jquery-3.7.1.min.js new file mode 100644 index 0000000..7f37b5d --- /dev/null +++ b/jquery-3.7.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
    ",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0cache_dir = 'cache'; //path to cache directory on your server from this script. Chmod 777! +$rss->date_format = 'M d, Y g:i:s A'; //date format of RSS item. See PHP date() function for possible input. + +// List of RSS URLs +$rsslist=array( +"Google" => "https://news.google.com/?output=rss", +"BBC" => "https://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml", +"news.com" => "https://news.com.com/2547-1_3-0-5.xml", +"slashdot" => "https://rss.slashdot.org/Slashdot/slashdot", +"dynamicdrive" => "https://www.dynamicdrive.com/export.php?type=new" +); + +////Beginners don't need to configure past here//////////////////// + +$rssid=$_GET['id']; +$rssurl=isset($rsslist[$rssid])? $rsslist[$rssid] : die("Error: Can't find requested RSS in list."); + +// ------------------------------------------------------------------- +// outputRSS_XML()- Outputs the "title", "link", "description", and "pubDate" elements of an RSS feed in XML format +// ------------------------------------------------------------------- + +function outputRSS_XML($url) { + global $rss; + $cacheseconds=(int) $_GET["cachetime"]; //typecast "cachetime" parameter as integer (0 or greater) + $rss->cache_time = $cacheseconds; + if ($rs = $rss->get($url)) { + echo "\n\n\n"; + foreach ($rs['items'] as $item) { + echo "\n$item[link]\n$item[title]\n$item[description]\n$item[pubDate]\n\n\n"; + } + echo ""; + if ($rs['items_count'] <= 0) { echo "
  • Sorry, no items found in the RSS file :-(
  • "; } + } + else { + echo "Sorry: It's not possible to reach RSS file $url\n
    "; + // you will probably hide this message in a live version + } +} + +// =============================================================================== + +outputRSS_XML($rssurl); + +?> \ No newline at end of file diff --git a/lastrss/cache/index.htm b/lastrss/cache/index.htm new file mode 100644 index 0000000..6bbd1b5 --- /dev/null +++ b/lastrss/cache/index.htm @@ -0,0 +1 @@ +Oh oh \ No newline at end of file diff --git a/lastrss/cache/rss_81d78ad357e9d31d5149709a151624c7 b/lastrss/cache/rss_81d78ad357e9d31d5149709a151624c7 new file mode 100644 index 0000000..e6bf823 --- /dev/null +++ b/lastrss/cache/rss_81d78ad357e9d31d5149709a151624c7 @@ -0,0 +1 @@ +a:10:{s:8:"encoding";s:5:"UTF-8";s:5:"title";s:25:"Top stories - Google News";s:4:"link";s:58:"https://news.google.com/?hl=en-US&gl=US&ceid=US:en";s:11:"description";s:11:"Google News";s:8:"language";s:5:"en-US";s:9:"copyright";s:16:"2024 Google Inc.";s:9:"webMaster";s:25:"news-webmaster@google.com";s:13:"lastBuildDate";s:23:"Jun 16, 2024 9:09:20 AM";s:5:"items";a:38:{i:0;a:6:{s:5:"title";s:120:"Detroit pastor thanks Trump for visiting the 'hood' as Biden, Obama who ‘never came’ attend LA fundraiser - Fox News";s:4:"link";s:394:"https://news.google.com/rss/articles/CBMifmh0dHBzOi8vd3d3LmZveG5ld3MuY29tL3BvbGl0aWNzL2RldHJvaXQtcGFzdG9yLXRoYW5rcy10cnVtcC12aXNpdGluZy10aGUtaG9vZC1iaWRlbi1vYmFtYS13aG8tbmV2ZXItY2FtZS1hdHRlbmQtbGEtZnVuZHJhaXNlctIBggFodHRwczovL3d3dy5mb3huZXdzLmNvbS9wb2xpdGljcy9kZXRyb2l0LXBhc3Rvci10aGFua3MtdHJ1bXAtdmlzaXRpbmctdGhlLWhvb2QtYmlkZW4tb2JhbWEtd2hvLW5ldmVyLWNhbWUtYXR0ZW5kLWxhLWZ1bmRyYWlzZXIuYW1w?oc=5";s:11:"description";s:2565:"<ol><li><a href="https://news.google.com/rss/articles/CBMifmh0dHBzOi8vd3d3LmZveG5ld3MuY29tL3BvbGl0aWNzL2RldHJvaXQtcGFzdG9yLXRoYW5rcy10cnVtcC12aXNpdGluZy10aGUtaG9vZC1iaWRlbi1vYmFtYS13aG8tbmV2ZXItY2FtZS1hdHRlbmQtbGEtZnVuZHJhaXNlctIBggFodHRwczovL3d3dy5mb3huZXdzLmNvbS9wb2xpdGljcy9kZXRyb2l0LXBhc3Rvci10aGFua3MtdHJ1bXAtdmlzaXRpbmctdGhlLWhvb2QtYmlkZW4tb2JhbWEtd2hvLW5ldmVyLWNhbWUtYXR0ZW5kLWxhLWZ1bmRyYWlzZXIuYW1w?oc=5" target="_blank">Detroit pastor thanks Trump for visiting the 'hood' as Biden, Obama who ‘never came’ attend LA fundraiser</a>&nbsp;&nbsp;<font color="#6f6f6f">Fox News</font></li><li><a href="https://news.google.com/rss/articles/CBMia2h0dHBzOi8vYXBuZXdzLmNvbS9hcnRpY2xlL3RydW1wLW1pY2hpZ2FuLWJsYWNrLXZvdGVycy1mYXItcmlnaHQtYWN0aXZpc3RzLTJkZGFiMzVlY2VlY2I0MmVlODg5OWYwNzIwNzE1YjMy0gEA?oc=5" target="_blank">Trump blasts immigrants for taking jobs as he courts voters at a Black church, MAGA event in Detroit</a>&nbsp;&nbsp;<font color="#6f6f6f">The Associated Press</font></li><li><a href="https://news.google.com/rss/articles/CBMib2h0dHBzOi8vd3d3LmZveDJkZXRyb2l0LmNvbS9uZXdzL3RydW1wcy1kdXJpbmctZGV0cm9pdC1jaHVyY2gtdmlzaXQtYmlkZW4taGFzLWJlZW4td29yc3QtcHJlc2lkZW50LWJsYWNrLXBlb3BsZdIBc2h0dHBzOi8vd3d3LmZveDJkZXRyb2l0LmNvbS9uZXdzL3RydW1wcy1kdXJpbmctZGV0cm9pdC1jaHVyY2gtdmlzaXQtYmlkZW4taGFzLWJlZW4td29yc3QtcHJlc2lkZW50LWJsYWNrLXBlb3BsZS5hbXA?oc=5" target="_blank">Trump during Detroit church visit: Biden has been 'worst president for Black people'</a>&nbsp;&nbsp;<font color="#6f6f6f">FOX 2 Detroit</font></li><li><a href="https://news.google.com/rss/articles/CBMipAFodHRwczovL3d3dy5kZXRyb2l0bmV3cy5jb20vc3RvcnkvbmV3cy9wb2xpdGljcy8yMDI0LzA2LzE1L2RvbmFsZC10cnVtcC1kZXRyb2l0LWNhbXBhaWduLWt3YW1lLWtpbHBhdHJpY2stZW5kb3JzZW1lbnQtdHVybmluZy1wb2ludC1hY3Rpb24tYmxhY2stdm90ZXJzLzc0MDYwNjMxMDA3L9IBAA?oc=5" target="_blank">Trump slams EV push, immigration policy as he courts voters in Detroit</a>&nbsp;&nbsp;<font color="#6f6f6f">Detroit News</font></li><li><a href="https://news.google.com/rss/articles/CBMibWh0dHBzOi8vd3d3LmZyZWVwLmNvbS9zdG9yeS9uZXdzL3BvbGl0aWNzLzIwMjQvMDYvMTUvbWFnYS1ib2F0LXBhcmFkZS1kdXJpbmctdHJ1bXAtZGV0cm9pdC12aXNpdC83NDExMDcwMTAwNy_SAQA?oc=5" target="_blank">Trump supporters, protestors turn out for MAGA Boat Parade in metro Detroit</a>&nbsp;&nbsp;<font color="#6f6f6f">Detroit Free Press</font></li></ol>";s:4:"guid";s:352:"CBMifmh0dHBzOi8vd3d3LmZveG5ld3MuY29tL3BvbGl0aWNzL2RldHJvaXQtcGFzdG9yLXRoYW5rcy10cnVtcC12aXNpdGluZy10aGUtaG9vZC1iaWRlbi1vYmFtYS13aG8tbmV2ZXItY2FtZS1hdHRlbmQtbGEtZnVuZHJhaXNlctIBggFodHRwczovL3d3dy5mb3huZXdzLmNvbS9wb2xpdGljcy9kZXRyb2l0LXBhc3Rvci10aGFua3MtdHJ1bXAtdmlzaXRpbmctdGhlLWhvb2QtYmlkZW4tb2JhbWEtd2hvLW5ldmVyLWNhbWUtYXR0ZW5kLWxhLWZ1bmRyYWlzZXIuYW1w";s:7:"pubDate";s:24:"Jun 16, 2024 12:30:09 AM";s:6:"source";s:8:"Fox News";}i:1;a:6:{s:5:"title";s:67:"Extreme heat to scorch central, southern US on Father’s Day - CNN";s:4:"link";s:280:"https://news.google.com/rss/articles/CBMiWWh0dHBzOi8vd3d3LmNubi5jb20vMjAyNC8wNi8xNi93ZWF0aGVyL3VzLWZhdGhlcnMtZGF5LWhlYXQtd2F2ZS1jbGltYXRlLXN1bmRheS9pbmRleC5odG1s0gFSaHR0cHM6Ly9hbXAuY25uLmNvbS9jbm4vMjAyNC8wNi8xNi93ZWF0aGVyL3VzLWZhdGhlcnMtZGF5LWhlYXQtd2F2ZS1jbGltYXRlLXN1bmRheQ?oc=5";s:11:"description";s:1984:"<ol><li><a href="https://news.google.com/rss/articles/CBMiWWh0dHBzOi8vd3d3LmNubi5jb20vMjAyNC8wNi8xNi93ZWF0aGVyL3VzLWZhdGhlcnMtZGF5LWhlYXQtd2F2ZS1jbGltYXRlLXN1bmRheS9pbmRleC5odG1s0gFSaHR0cHM6Ly9hbXAuY25uLmNvbS9jbm4vMjAyNC8wNi8xNi93ZWF0aGVyL3VzLWZhdGhlcnMtZGF5LWhlYXQtd2F2ZS1jbGltYXRlLXN1bmRheQ?oc=5" target="_blank">Extreme heat to scorch central, southern US on Father’s Day</a>&nbsp;&nbsp;<font color="#6f6f6f">CNN</font></li><li><a href="https://news.google.com/rss/articles/CBMiZWh0dHBzOi8vd3d3Lm5iY25ld3MuY29tL25ld3MvdGVtcGVyYXR1cmVzLWV4cGVjdGVkLXNvYXItc291dGgtc2l6emxpbmctZmF0aGVycy1kYXktd2Vla2VuZC1yY25hMTU3MzQw0gEraHR0cHM6Ly93d3cubmJjbmV3cy5jb20vbmV3cy9hbXAvcmNuYTE1NzM0MA?oc=5" target="_blank">Temperatures expected to soar in the South over sizzling Father's Day weekend</a>&nbsp;&nbsp;<font color="#6f6f6f">NBC News</font></li><li><a href="https://news.google.com/rss/articles/CBMiXGh0dHBzOi8vd3d3LndjdmIuY29tL2FydGljbGUvYm9zdG9uLW1hc3NhY2h1c2V0dHMtd2VhdGhlci1mb3JlY2FzdC02cG0tanVuZS0xNS0yMDI0LzYxMTIyOTk40gEA?oc=5" target="_blank">Video: Great weather for Father's Day before high heat hits Mass.</a>&nbsp;&nbsp;<font color="#6f6f6f">WCVB Boston</font></li><li><a href="https://news.google.com/rss/articles/CBMiL2h0dHBzOi8vd3d3LmtjcmcuY29tLzIwMjQvMDYvMTQvaGVhdGluZy11cC1kYWQv0gEA?oc=5" target="_blank">Storms Arrive Before the Highest Heat</a>&nbsp;&nbsp;<font color="#6f6f6f">KCRG</font></li><li><a href="https://news.google.com/rss/articles/CBMiaGh0dHBzOi8vd3d3LnVzYXRvZGF5LmNvbS9zdG9yeS9uZXdzL3dlYXRoZXIvMjAyNC8wNi8xNS9ob3QtdGVtcGVyYXR1cmVzLWZhdGhlcnMtZGF5LXdlZWtlbmQvNzQxMDg0MzYwMDcv0gEA?oc=5" target="_blank">Dangerous heat wave in US forecast as 90+ degree temps spread</a>&nbsp;&nbsp;<font color="#6f6f6f">USA TODAY</font></li></ol>";s:4:"guid";s:238:"CBMiWWh0dHBzOi8vd3d3LmNubi5jb20vMjAyNC8wNi8xNi93ZWF0aGVyL3VzLWZhdGhlcnMtZGF5LWhlYXQtd2F2ZS1jbGltYXRlLXN1bmRheS9pbmRleC5odG1s0gFSaHR0cHM6Ly9hbXAuY25uLmNvbS9jbm4vMjAyNC8wNi8xNi93ZWF0aGVyL3VzLWZhdGhlcnMtZGF5LWhlYXQtd2F2ZS1jbGltYXRlLXN1bmRheQ";s:7:"pubDate";s:23:"Jun 16, 2024 4:15:00 AM";s:6:"source";s:3:"CNN";}i:2;a:6:{s:5:"title";s:97:"Israel announces 'tactical pause' in southern Gaza Strip to allow more aid - The Associated Press";s:4:"link";s:198:"https://news.google.com/rss/articles/CBMibmh0dHBzOi8vYXBuZXdzLmNvbS9hcnRpY2xlL2lzcmFlbC1wYWxlc3RpbmlhbnMtZ2F6YS1oYW1hcy13YXItdW4taHVtYW5pdGFyaWFuLThjMTExZjJkY2Y3ODNmODY3MWU2ZGQ2ZjE5NTQ3YjE30gEA?oc=5";s:11:"description";s:2023:"<ol><li><a href="https://news.google.com/rss/articles/CBMibmh0dHBzOi8vYXBuZXdzLmNvbS9hcnRpY2xlL2lzcmFlbC1wYWxlc3RpbmlhbnMtZ2F6YS1oYW1hcy13YXItdW4taHVtYW5pdGFyaWFuLThjMTExZjJkY2Y3ODNmODY3MWU2ZGQ2ZjE5NTQ3YjE30gEA?oc=5" target="_blank">Israel announces 'tactical pause' in southern Gaza Strip to allow more aid</a>&nbsp;&nbsp;<font color="#6f6f6f">The Associated Press</font></li><li><a href="https://news.google.com/rss/articles/CBMie2h0dHBzOi8vd3d3LmFsamF6ZWVyYS5jb20vbmV3cy9saXZlYmxvZy8yMDI0LzYvMTYvaXNyYWVscy13YXItb24tZ2F6YS1saXZlLWlzcmFlbC1ib21iYXJkcy1nYXphLWhvbWVzLWFmdGVyLXNvbGRpZXJzLWtpbGxlZNIBAA?oc=5" target="_blank">Israel war on Gaza live: Unclear if war cabinet knew about ‘tactical pause’ | Israel-Palestine conflict News</a>&nbsp;&nbsp;<font color="#6f6f6f">Al Jazeera English</font></li><li><a href="https://news.google.com/rss/articles/CBMicmh0dHBzOi8vd3d3Lm5iY25ld3MuY29tL25ld3Mvd29ybGQvaXNyYWVsaS1taWxpdGFyeS1hbm5vdW5jZXMtdGFjdGljYWwtcGF1c2UtdHJ5LWluY3JlYXNlLWFpZC1mbG93LWdhemEtcmNuYTE1NzM4M9IBK2h0dHBzOi8vd3d3Lm5iY25ld3MuY29tL25ld3MvYW1wL3JjbmExNTczODM?oc=5" target="_blank">Israeli military announces 'tactical pause' to try to increase aid flow into Gaza</a>&nbsp;&nbsp;<font color="#6f6f6f">NBC News</font></li><li><a href="https://news.google.com/rss/articles/CBMiMmh0dHBzOi8vd3d3Lmpwb3N0LmNvbS9icmVha2luZy1uZXdzL2FydGljbGUtODA2Mzc10gEA?oc=5" target="_blank">IDF announces humanitarian pause in Salah al-Din area of Gaza</a>&nbsp;&nbsp;<font color="#6f6f6f">The Jerusalem Post</font></li><li><a href="https://news.google.com/rss/articles/CBMiLmh0dHBzOi8vd3d3LmJiYy5jb20vbmV3cy9hcnRpY2xlcy9jZ2VlcGs4cnA5eG_SAQA?oc=5" target="_blank">Gaza war: Israel announces daily military pause along road to let in aid</a>&nbsp;&nbsp;<font color="#6f6f6f">BBC.com</font></li></ol>";s:4:"guid";s:156:"CBMibmh0dHBzOi8vYXBuZXdzLmNvbS9hcnRpY2xlL2lzcmFlbC1wYWxlc3RpbmlhbnMtZ2F6YS1oYW1hcy13YXItdW4taHVtYW5pdGFyaWFuLThjMTExZjJkY2Y3ODNmODY3MWU2ZGQ2ZjE5NTQ3YjE30gEA";s:7:"pubDate";s:23:"Jun 16, 2024 7:09:00 AM";s:6:"source";s:20:"The Associated Press";}i:3;a:6:{s:5:"title";s:95:"Biden raises over $28 million at Hollywood fundraiser featuring Obama, campaign says - CBS News";s:4:"link";s:278:"https://news.google.com/rss/articles/CBMiU2h0dHBzOi8vd3d3LmNic25ld3MuY29tL25ld3MvYmlkZW4tY2FtcGFpZ24tdHJhaWwtbG9zLWFuZ2VsZXMtaG9sbHl3b29kLWZ1bmRyYWlzZXIv0gFXaHR0cHM6Ly93d3cuY2JzbmV3cy5jb20vYW1wL25ld3MvYmlkZW4tY2FtcGFpZ24tdHJhaWwtbG9zLWFuZ2VsZXMtaG9sbHl3b29kLWZ1bmRyYWlzZXIv?oc=5";s:11:"description";s:2217:"<ol><li><a href="https://news.google.com/rss/articles/CBMiU2h0dHBzOi8vd3d3LmNic25ld3MuY29tL25ld3MvYmlkZW4tY2FtcGFpZ24tdHJhaWwtbG9zLWFuZ2VsZXMtaG9sbHl3b29kLWZ1bmRyYWlzZXIv0gFXaHR0cHM6Ly93d3cuY2JzbmV3cy5jb20vYW1wL25ld3MvYmlkZW4tY2FtcGFpZ24tdHJhaWwtbG9zLWFuZ2VsZXMtaG9sbHl3b29kLWZ1bmRyYWlzZXIv?oc=5" target="_blank">Biden raises over $28 million at Hollywood fundraiser featuring Obama, campaign says</a>&nbsp;&nbsp;<font color="#6f6f6f">CBS News</font></li><li><a href="https://news.google.com/rss/articles/CBMiUWh0dHBzOi8vYWJjNy5jb20vcG9zdC9wcmVzaWRlbnQtam9lLWJpZGVuLWFycml2ZXMtbGEtYWhlYWQtc3Rhci1zdHVkZGVkLzE0OTU0MjIwL9IBAA?oc=5" target="_blank">President Biden attends star-studded, high-dollar fundraiser in downtown LA</a>&nbsp;&nbsp;<font color="#6f6f6f">KABC-TV</font></li><li><a href="https://news.google.com/rss/articles/CBMifWh0dHBzOi8vd3d3LmxhdGltZXMuY29tL3BvbGl0aWNzL3N0b3J5LzIwMjQtMDYtMTUvYmlkZW4tb2JhbWEtY2VsZWJyaXRpZXMtcmFpc2UtbWlsbGlvbnMtaW4tbC1hLWZvci1wcmVzaWRlbnRzLXJlZWxlY3Rpb24tYmlk0gEA?oc=5" target="_blank">Biden, Obama, celebrities expected to raise at least $28 million</a>&nbsp;&nbsp;<font color="#6f6f6f">Los Angeles Times</font></li><li><a href="https://news.google.com/rss/articles/CBMiUGh0dHBzOi8vd3d3Lm55dGltZXMuY29tLzIwMjQvMDYvMTYvdXMvcG9saXRpY3MvYmlkZW4tZnVuZHJhaXNlci1sb3MtYW5nZWxlcy5odG1s0gEA?oc=5" target="_blank">At Biden Fund-Raiser, Hollywood and Democrats Let the Trump Attacks Fly</a>&nbsp;&nbsp;<font color="#6f6f6f">The New York Times</font></li><li><a href="https://news.google.com/rss/articles/CBMiZmh0dHBzOi8va3RsYS5jb20vbmV3cy9sb2NhbC1uZXdzL2JpZGVuLWFycml2ZXMtaW4tc291dGhlcm4tY2FsaWZvcm5pYS1haGVhZC1vZi1sb3MtYW5nZWxlcy1mdW5kcmFpc2VyL9IBamh0dHBzOi8va3RsYS5jb20vbmV3cy9sb2NhbC1uZXdzL2JpZGVuLWFycml2ZXMtaW4tc291dGhlcm4tY2FsaWZvcm5pYS1haGVhZC1vZi1sb3MtYW5nZWxlcy1mdW5kcmFpc2VyL2FtcC8?oc=5" target="_blank">Biden arrives in Southern California ahead of Los Angeles fundraiser</a>&nbsp;&nbsp;<font color="#6f6f6f">KTLA Los Angeles</font></li></ol>";s:4:"guid";s:236:"CBMiU2h0dHBzOi8vd3d3LmNic25ld3MuY29tL25ld3MvYmlkZW4tY2FtcGFpZ24tdHJhaWwtbG9zLWFuZ2VsZXMtaG9sbHl3b29kLWZ1bmRyYWlzZXIv0gFXaHR0cHM6Ly93d3cuY2JzbmV3cy5jb20vYW1wL25ld3MvYmlkZW4tY2FtcGFpZ24tdHJhaWwtbG9zLWFuZ2VsZXMtaG9sbHl3b29kLWZ1bmRyYWlzZXIv";s:7:"pubDate";s:23:"Jun 16, 2024 4:35:09 AM";s:6:"source";s:8:"CBS News";}i:4;a:6:{s:5:"title";s:81:"Rochester Hills splash pad shooting: 9 injured, suspect dead - Detroit Free Press";s:4:"link";s:252:"https://news.google.com/rss/articles/CBMilQFodHRwczovL3d3dy5mcmVlcC5jb20vc3RvcnkvbmV3cy9sb2NhbC9taWNoaWdhbi9vYWtsYW5kLzIwMjQvMDYvMTUvcG9saWNlLW11bHRpcGxlLWluanVyaWVzLWFmdGVyLXNob290aW5nLWF0LXJvY2hlc3Rlci1oaWxscy1zcGxhc2gtcGFkLzc0MTEzMTQzMDA3L9IBAA?oc=5";s:11:"description";s:2334:"<ol><li><a href="https://news.google.com/rss/articles/CBMilQFodHRwczovL3d3dy5mcmVlcC5jb20vc3RvcnkvbmV3cy9sb2NhbC9taWNoaWdhbi9vYWtsYW5kLzIwMjQvMDYvMTUvcG9saWNlLW11bHRpcGxlLWluanVyaWVzLWFmdGVyLXNob290aW5nLWF0LXJvY2hlc3Rlci1oaWxscy1zcGxhc2gtcGFkLzc0MTEzMTQzMDA3L9IBAA?oc=5" target="_blank">Rochester Hills splash pad shooting: 9 injured, suspect dead</a>&nbsp;&nbsp;<font color="#6f6f6f">Detroit Free Press</font></li><li><a href="https://news.google.com/rss/articles/CBMihgFodHRwczovL3d3dy5jbGlja29uZGV0cm9pdC5jb20vbmV3cy9sb2NhbC8yMDI0LzA2LzE1L2F0LWxlYXN0LTktaW5qdXJlZC1pbi1yYW5kb20tc2hvb3RpbmctYXQtcm9jaGVzdGVyLWhpbGxzLXNwbGFzaC1wYWQtc2hvb3Rlci1kZWFkL9IBAA?oc=5" target="_blank">8 injured in 'random' shooting at Rochester Hills splash pad; shooter dead</a>&nbsp;&nbsp;<font color="#6f6f6f">WDIV ClickOnDetroit</font></li><li><a href="https://news.google.com/rss/articles/CBMiT2h0dHBzOi8vd3d3LmZveDJkZXRyb2l0LmNvbS9uZXdzL211bHRpcGxlLXBlb3BsZS1zaG90LXJvY2hlc3Rlci1oaWxscy1zcGxhc2hwYWTSAVNodHRwczovL3d3dy5mb3gyZGV0cm9pdC5jb20vbmV3cy9tdWx0aXBsZS1wZW9wbGUtc2hvdC1yb2NoZXN0ZXItaGlsbHMtc3BsYXNocGFkLmFtcA?oc=5" target="_blank">Brooklands Splashpad shooting: Suspect dead after wounding 9 in Rochester Hills</a>&nbsp;&nbsp;<font color="#6f6f6f">FOX 2 Detroit</font></li><li><a href="https://news.google.com/rss/articles/CBMiWWh0dHBzOi8vd3d3LmNubi5jb20vMjAyNC8wNi8xNS91cy9yb2NoZXN0ZXItaGlsbHMtbWljaGlnYW4tc3BsYXNoLXBhZC1zaG9vdGluZy9pbmRleC5odG1s0gFSaHR0cHM6Ly9hbXAuY25uLmNvbS9jbm4vMjAyNC8wNi8xNS91cy9yb2NoZXN0ZXItaGlsbHMtbWljaGlnYW4tc3BsYXNoLXBhZC1zaG9vdGluZw?oc=5" target="_blank">At least 9 people shot, including 2 children, at Michigan recreation center before suspect is found dead, police say</a>&nbsp;&nbsp;<font color="#6f6f6f">CNN</font></li><li><a href="https://news.google.com/rss/articles/CBMiU2h0dHBzOi8vd3d3LnlhaG9vLmNvbS9uZXdzL3Nob290aW5nLW1pY2hpZ2FuLWxlYXZlcy1udW1lcm91cy13b3VuZGVkLTIzNTkyODY2NS5odG1s0gEA?oc=5" target="_blank">Shooting at splash pad in Detroit suburb injures 9, including 2 children. An 8-year-old is critical</a>&nbsp;&nbsp;<font color="#6f6f6f">Yahoo! Voices</font></li></ol>";s:4:"guid";s:210:"CBMilQFodHRwczovL3d3dy5mcmVlcC5jb20vc3RvcnkvbmV3cy9sb2NhbC9taWNoaWdhbi9vYWtsYW5kLzIwMjQvMDYvMTUvcG9saWNlLW11bHRpcGxlLWluanVyaWVzLWFmdGVyLXNob290aW5nLWF0LXJvY2hlc3Rlci1oaWxscy1zcGxhc2gtcGFkLzc0MTEzMTQzMDA3L9IBAA";s:7:"pubDate";s:23:"Jun 16, 2024 3:28:17 AM";s:6:"source";s:18:"Detroit Free Press";}i:5;a:6:{s:5:"title";s:81:"French protesters turn out to oppose far-right shift ahead of snap election - NPR";s:4:"link";s:166:"https://news.google.com/rss/articles/CBMiVmh0dHBzOi8vd3d3Lm5wci5vcmcvMjAyNC8wNi8xNS9ueC1zMS01MDA3MzkxL2ZyZW5jaC1wcm90ZXN0cy1vcHBvc2UtZmFyLXJpZ2h0LWVsZWN0aW9u0gEA?oc=5";s:11:"description";s:2103:"<ol><li><a href="https://news.google.com/rss/articles/CBMiVmh0dHBzOi8vd3d3Lm5wci5vcmcvMjAyNC8wNi8xNS9ueC1zMS01MDA3MzkxL2ZyZW5jaC1wcm90ZXN0cy1vcHBvc2UtZmFyLXJpZ2h0LWVsZWN0aW9u0gEA?oc=5" target="_blank">French protesters turn out to oppose far-right shift ahead of snap election</a>&nbsp;&nbsp;<font color="#6f6f6f">NPR</font></li><li><a href="https://news.google.com/rss/articles/CBMiTmh0dHBzOi8vd3d3Lm55dGltZXMuY29tLzIwMjQvMDYvMTUvd29ybGQvZXVyb3BlL2ZyYW5jZS1wcm90ZXN0cy1mYXItcmlnaHQuaHRtbNIBAA?oc=5" target="_blank">'We Need to Unite': Protests Against the Far Right Are Held Across France</a>&nbsp;&nbsp;<font color="#6f6f6f">The New York Times</font></li><li><a href="https://news.google.com/rss/articles/CBMibmh0dHBzOi8vd3d3LmJsb29tYmVyZy5jb20vbmV3cy9hcnRpY2xlcy8yMDI0LTA2LTE1L2ZyZW5jaC1lbGVjdGlvbi1tYWNyb24tZ2l2ZXMtZXVyb3BlLWJyZXhpdC1uaWdodG1hcmVzLWFnYWlu0gEA?oc=5" target="_blank">French Election: Macron Gives Europe Brexit Nightmares Again</a>&nbsp;&nbsp;<font color="#6f6f6f">Bloomberg</font></li><li><a href="https://news.google.com/rss/articles/CBMiW2h0dHBzOi8vd3d3Lndzai5jb20vd29ybGQvZXVyb3BlL3Rob3VzYW5kcy1wcm90ZXN0LWFnYWluc3QtZmFyLXJpZ2h0LWFjcm9zcy1mcmFuY2UtZTIyOWJhYmXSAQA?oc=5" target="_blank">Thousands Protest Against Far Right Across France</a>&nbsp;&nbsp;<font color="#6f6f6f">The Wall Street Journal</font></li><li><a href="https://news.google.com/rss/articles/CBMiemh0dHBzOi8vd3d3LnRoZWd1YXJkaWFuLmNvbS9idXNpbmVzcy9hcnRpY2xlLzIwMjQvanVuLzE0L2ZyZW5jaC1zdG9jay1tYXJrZXQtcGx1bW1ldHMtYW1pZC1mZWFycy1vZi1mYXItcmlnaHQtZWxlY3Rpb24td2lu0gF6aHR0cHM6Ly9hbXAudGhlZ3VhcmRpYW4uY29tL2J1c2luZXNzL2FydGljbGUvMjAyNC9qdW4vMTQvZnJlbmNoLXN0b2NrLW1hcmtldC1wbHVtbWV0cy1hbWlkLWZlYXJzLW9mLWZhci1yaWdodC1lbGVjdGlvbi13aW4?oc=5" target="_blank">French stock market plummets amid fears of far right election win</a>&nbsp;&nbsp;<font color="#6f6f6f">The Guardian</font></li></ol>";s:4:"guid";s:124:"CBMiVmh0dHBzOi8vd3d3Lm5wci5vcmcvMjAyNC8wNi8xNS9ueC1zMS01MDA3MzkxL2ZyZW5jaC1wcm90ZXN0cy1vcHBvc2UtZmFyLXJpZ2h0LWVsZWN0aW9u0gEA";s:7:"pubDate";s:23:"Jun 16, 2024 1:43:38 AM";s:6:"source";s:3:"NPR";}i:6;a:6:{s:5:"title";s:67:"Oaks Park Ride Malfunctions, 28 People Stuck Upside Down - Deadline";s:4:"link";s:238:"https://news.google.com/rss/articles/CBMiRGh0dHBzOi8vZGVhZGxpbmUuY29tLzIwMjQvMDYvb2Frcy1wYXJrLXJpZGUtbWFsZnVuY3Rpb25zLTEyMzU5NzQ0MTUv0gFIaHR0cHM6Ly9kZWFkbGluZS5jb20vMjAyNC8wNi9vYWtzLXBhcmstcmlkZS1tYWxmdW5jdGlvbnMtMTIzNTk3NDQxNS9hbXAv?oc=5";s:11:"description";s:2126:"<ol><li><a href="https://news.google.com/rss/articles/CBMiRGh0dHBzOi8vZGVhZGxpbmUuY29tLzIwMjQvMDYvb2Frcy1wYXJrLXJpZGUtbWFsZnVuY3Rpb25zLTEyMzU5NzQ0MTUv0gFIaHR0cHM6Ly9kZWFkbGluZS5jb20vMjAyNC8wNi9vYWtzLXBhcmstcmlkZS1tYWxmdW5jdGlvbnMtMTIzNTk3NDQxNS9hbXAv?oc=5" target="_blank">Oaks Park Ride Malfunctions, 28 People Stuck Upside Down</a>&nbsp;&nbsp;<font color="#6f6f6f">Deadline</font></li><li><a href="https://news.google.com/rss/articles/CBMiLGh0dHBzOi8vd3d3LmJiYy5jb20vbmV3cy92aWRlb3MvYzEwMDI4MWdqeWpv0gEA?oc=5" target="_blank">People left dangling upside down on amusement park ride</a>&nbsp;&nbsp;<font color="#6f6f6f">BBC.com</font></li><li><a href="https://news.google.com/rss/articles/CBMia2h0dHBzOi8vcGVvcGxlLmNvbS8yOC1wZW9wbGUtdHJhcHBlZC11cHNpZGUtZG93bi1vbi1hbXVzZW1lbnQtcGFyay1yaWRlLWF0bW9zZmVhci1yZXNjdWVkLWluLW9yZWdvbi04NjY0MDMz0gEA?oc=5" target="_blank">28 People Trapped Upside Down on Amusement Park Ride Rescued in Oregon</a>&nbsp;&nbsp;<font color="#6f6f6f">PEOPLE</font></li><li><a href="https://news.google.com/rss/articles/CBMiV2h0dHBzOi8vd3d3LmtwdHYuY29tLzIwMjQvMDYvMTUvb2Frcy1wYXJrLXJpZGUtZXZhY3VhdGVkLWFmdGVyLWJlaW5nLXN0dWNrLXVwc2lkZS1kb3duL9IBZmh0dHBzOi8vd3d3LmtwdHYuY29tLzIwMjQvMDYvMTUvb2Frcy1wYXJrLXJpZGUtZXZhY3VhdGVkLWFmdGVyLWJlaW5nLXN0dWNrLXVwc2lkZS1kb3duLz9vdXRwdXRUeXBlPWFtcA?oc=5" target="_blank">Oaks Park ride evacuated after being stuck upside down</a>&nbsp;&nbsp;<font color="#6f6f6f">Fox 12 Oregon</font></li><li><a href="https://news.google.com/rss/articles/CBMidmh0dHBzOi8vd3d3Lm5iY25ld3MuY29tL25ld3MvdXMtbmV3cy9uZWFybHktMzAtcGVvcGxlLWxlZnQtc3VzcGVuZGVkLXVwc2lkZS1wb3J0bGFuZC1hbXVzZW1lbnQtcGFyay1yaWRlLW1hLXJjbmExNTczMzHSAStodHRwczovL3d3dy5uYmNuZXdzLmNvbS9uZXdzL2FtcC9yY25hMTU3MzMx?oc=5" target="_blank">Nearly 30 people left suspended upside down after Portland amusement park ride malfunctions</a>&nbsp;&nbsp;<font color="#6f6f6f">NBC News</font></li></ol>";s:4:"guid";s:196:"CBMiRGh0dHBzOi8vZGVhZGxpbmUuY29tLzIwMjQvMDYvb2Frcy1wYXJrLXJpZGUtbWFsZnVuY3Rpb25zLTEyMzU5NzQ0MTUv0gFIaHR0cHM6Ly9kZWFkbGluZS5jb20vMjAyNC8wNi9vYWtzLXBhcmstcmlkZS1tYWxmdW5jdGlvbnMtMTIzNTk3NDQxNS9hbXAv";s:7:"pubDate";s:23:"Jun 15, 2024 4:39:00 PM";s:6:"source";s:8:"Deadline";}i:7;a:6:{s:5:"title";s:57:"Jill Biden reacts to Hunter Biden's conviction - NBC News";s:4:"link";s:237:"https://news.google.com/rss/articles/CBMiYGh0dHBzOi8vd3d3Lm5iY25ld3MuY29tL3BvbGl0aWNzL2pvZS1iaWRlbi9qaWxsLWJpZGVuLXJlYWN0cy1odW50ZXItYmlkZW5zLWNvbnZpY3Rpb24tcmNuYTE1NzM3NtIBK2h0dHBzOi8vd3d3Lm5iY25ld3MuY29tL25ld3MvYW1wL3JjbmExNTczNzY?oc=5";s:11:"description";s:2291:"<ol><li><a href="https://news.google.com/rss/articles/CBMiYGh0dHBzOi8vd3d3Lm5iY25ld3MuY29tL3BvbGl0aWNzL2pvZS1iaWRlbi9qaWxsLWJpZGVuLXJlYWN0cy1odW50ZXItYmlkZW5zLWNvbnZpY3Rpb24tcmNuYTE1NzM3NtIBK2h0dHBzOi8vd3d3Lm5iY25ld3MuY29tL25ld3MvYW1wL3JjbmExNTczNzY?oc=5" target="_blank">Jill Biden reacts to Hunter Biden's conviction</a>&nbsp;&nbsp;<font color="#6f6f6f">NBC News</font></li><li><a href="https://news.google.com/rss/articles/CBMiZWh0dHBzOi8vd3d3LmNubi5jb20vMjAyNC8wNi8xMy9vcGluaW9ucy9zZWNvbmQtYW1lbmRtZW50LWh1bnRlci1iaWRlbi1ndW4tYXBwZWFsLXNpbmdsZXRvbi9pbmRleC5odG1s0gFeaHR0cHM6Ly9hbXAuY25uLmNvbS9jbm4vMjAyNC8wNi8xMy9vcGluaW9ucy9zZWNvbmQtYW1lbmRtZW50LWh1bnRlci1iaWRlbi1ndW4tYXBwZWFsLXNpbmdsZXRvbg?oc=5" target="_blank">Opinion: If you love the Second Amendment like me, you know how important Hunter Biden’s appeal is</a>&nbsp;&nbsp;<font color="#6f6f6f">CNN</font></li><li><a href="https://news.google.com/rss/articles/CBMiYGh0dHBzOi8vdGhlaGlsbC5jb20vaG9tZW5ld3MvY2FtcGFpZ24vNDcxODU1Ny1hbmR5LW9nbGVzLWh1bnRlci1iaWRlbi1jb252aWN0aW9uLW1pY2hlbGxlLW9iYW1hL9IBZGh0dHBzOi8vdGhlaGlsbC5jb20vaG9tZW5ld3MvY2FtcGFpZ24vNDcxODU1Ny1hbmR5LW9nbGVzLWh1bnRlci1iaWRlbi1jb252aWN0aW9uLW1pY2hlbGxlLW9iYW1hL2FtcC8?oc=5" target="_blank">GOP rep: Hunter Biden conviction ‘creates an opening’ for Michelle Obama</a>&nbsp;&nbsp;<font color="#6f6f6f">The Hill</font></li><li><a href="https://news.google.com/rss/articles/CBMiUWh0dHBzOi8vd3d3Lm55dGltZXMuY29tLzIwMjQvMDYvMTMvdXMvcG9saXRpY3MvYmlkZW4taHVudGVyLWNvbW11dGUtc2VudGVuY2UuaHRtbNIBAA?oc=5" target="_blank">Biden Says He Won't Commute Son's Sentence on Gun Charges</a>&nbsp;&nbsp;<font color="#6f6f6f">The New York Times</font></li><li><a href="https://news.google.com/rss/articles/CBMifGh0dHBzOi8vd3d3Lm5ld3lvcmtlci5jb20vcG9kY2FzdC9wb2xpdGljYWwtc2NlbmUvaHVudGVyLWJpZGVucy1jb252aWN0aW9uLWFuZC10cnVtcHMtcmlzay10by10aGUtanVzdGljZS1kZXBhcnRtZW50LWluLTIwMjTSAQA?oc=5" target="_blank">Hunter Biden's Conviction and Trump's Risk to the Justice Department in 2024</a>&nbsp;&nbsp;<font color="#6f6f6f">The New Yorker</font></li></ol>";s:4:"guid";s:195:"CBMiYGh0dHBzOi8vd3d3Lm5iY25ld3MuY29tL3BvbGl0aWNzL2pvZS1iaWRlbi9qaWxsLWJpZGVuLXJlYWN0cy1odW50ZXItYmlkZW5zLWNvbnZpY3Rpb24tcmNuYTE1NzM3NtIBK2h0dHBzOi8vd3d3Lm5iY25ld3MuY29tL25ld3MvYW1wL3JjbmExNTczNzY";s:7:"pubDate";s:24:"Jun 16, 2024 12:41:00 AM";s:6:"source";s:8:"NBC News";}i:8;a:6:{s:5:"title";s:85:"Wildfire north of Los Angeles spreads as authorities evacuate 1,200 people - ABC News";s:4:"link";s:348:"https://news.google.com/rss/articles/CBMibWh0dHBzOi8vYWJjbmV3cy5nby5jb20vVVMvd2lyZVN0b3J5L3dpbGRmaXJlLW5vcnRoLWxvcy1hbmdlbGVzLXNwcmVhZHMtYXV0aG9yaXRpZXMtaXNzdWUtZXZhY3VhdGlvbi0xMTExNjA1NTXSAXFodHRwczovL2FiY25ld3MuZ28uY29tL2FtcC9VUy93aXJlU3Rvcnkvd2lsZGZpcmUtbm9ydGgtbG9zLWFuZ2VsZXMtc3ByZWFkcy1hdXRob3JpdGllcy1pc3N1ZS1ldmFjdWF0aW9uLTExMTE2MDU1NQ?oc=5";s:11:"description";s:2564:"<ol><li><a href="https://news.google.com/rss/articles/CBMibWh0dHBzOi8vYWJjbmV3cy5nby5jb20vVVMvd2lyZVN0b3J5L3dpbGRmaXJlLW5vcnRoLWxvcy1hbmdlbGVzLXNwcmVhZHMtYXV0aG9yaXRpZXMtaXNzdWUtZXZhY3VhdGlvbi0xMTExNjA1NTXSAXFodHRwczovL2FiY25ld3MuZ28uY29tL2FtcC9VUy93aXJlU3Rvcnkvd2lsZGZpcmUtbm9ydGgtbG9zLWFuZ2VsZXMtc3ByZWFkcy1hdXRob3JpdGllcy1pc3N1ZS1ldmFjdWF0aW9uLTExMTE2MDU1NQ?oc=5" target="_blank">Wildfire north of Los Angeles spreads as authorities evacuate 1,200 people</a>&nbsp;&nbsp;<font color="#6f6f6f">ABC News</font></li><li><a href="https://news.google.com/rss/articles/CBMiZ2h0dHBzOi8va3RsYS5jb20vbmV3cy9sb2NhbC1uZXdzL2ZpcmUtbmVhci01LWZyZWV3YXktaW4tZ29ybWFuLXRocmVhdGVucy1zdHJ1Y3R1cmVzLWZvcmNlcy1ldmFjdWF0aW9ucy_SAWtodHRwczovL2t0bGEuY29tL25ld3MvbG9jYWwtbmV3cy9maXJlLW5lYXItNS1mcmVld2F5LWluLWdvcm1hbi10aHJlYXRlbnMtc3RydWN0dXJlcy1mb3JjZXMtZXZhY3VhdGlvbnMvYW1wLw?oc=5" target="_blank">Brush fire near 5 Freeway in Gorman forces evacuations</a>&nbsp;&nbsp;<font color="#6f6f6f">KTLA Los Angeles</font></li><li><a href="https://news.google.com/rss/articles/CBMiUmh0dHBzOi8vd3d3Lm5iY2xvc2FuZ2VsZXMuY29tL25ld3MvbG9jYWwvYnJ1c2gtZmlyZS1nb3JtYW4tbGEtY291bnR5LWZpcmUvMzQzNzY5Ny_SAVhodHRwczovL3d3dy5uYmNsb3NhbmdlbGVzLmNvbS9uZXdzL2xvY2FsL2JydXNoLWZpcmUtZ29ybWFuLWxhLWNvdW50eS1maXJlLzM0Mzc2OTcvP2FtcD0x?oc=5" target="_blank">4,400-acre brush fire in Gorman prompts evacuation orders</a>&nbsp;&nbsp;<font color="#6f6f6f">NBC Los Angeles</font></li><li><a href="https://news.google.com/rss/articles/CBMidWh0dHBzOi8vd3d3LmxhdGltZXMuY29tL2NhbGlmb3JuaWEvc3RvcnkvMjAyNC0wNi0xNS9mYXN0LWJ1cm5pbmctZmlyZS1wcm9tcHRzLWV2YWN1YXRpb25zLWZyZWV3YXktY2xvc3VyZS1uZWFyLWdvcm1vbtIBAA?oc=5" target="_blank">Fast-burning fire prompts evacuations, freeway closure near Gorman</a>&nbsp;&nbsp;<font color="#6f6f6f">Los Angeles Times</font></li><li><a href="https://news.google.com/rss/articles/CBMicWh0dHBzOi8vd3d3LmJha2Vyc2ZpZWxkbm93LmNvbS9uZXdzL2xvY2FsL2ZpcmVmaWdodGVycy1iYXR0bGUtNTAwLWFjcmUtcG9zdC1maXJlLW5lYXItZ29ybWFuLWV2YWN1YXRpb25zLXVuZGVyd2F50gFxaHR0cHM6Ly9iYWtlcnNmaWVsZG5vdy5jb20vYW1wL25ld3MvbG9jYWwvZmlyZWZpZ2h0ZXJzLWJhdHRsZS01MDAtYWNyZS1wb3N0LWZpcmUtbmVhci1nb3JtYW4tZXZhY3VhdGlvbnMtdW5kZXJ3YXk?oc=5" target="_blank">Firefighters battle 3,000+ acre 'Post Fire' near Gorman, evacuations underway</a>&nbsp;&nbsp;<font color="#6f6f6f">Bakersfield Now</font></li></ol>";s:4:"guid";s:306:"CBMibWh0dHBzOi8vYWJjbmV3cy5nby5jb20vVVMvd2lyZVN0b3J5L3dpbGRmaXJlLW5vcnRoLWxvcy1hbmdlbGVzLXNwcmVhZHMtYXV0aG9yaXRpZXMtaXNzdWUtZXZhY3VhdGlvbi0xMTExNjA1NTXSAXFodHRwczovL2FiY25ld3MuZ28uY29tL2FtcC9VUy93aXJlU3Rvcnkvd2lsZGZpcmUtbm9ydGgtbG9zLWFuZ2VsZXMtc3ByZWFkcy1hdXRob3JpdGllcy1pc3N1ZS1ldmFjdWF0aW9uLTExMTE2MDU1NQ";s:7:"pubDate";s:23:"Jun 16, 2024 8:03:45 AM";s:6:"source";s:8:"ABC News";}i:9;a:6:{s:5:"title";s:100:"Crockett calls Thomas ‘corrupt’ after Supreme Court decision to upend bump stocks ban - The Hill";s:4:"link";s:300:"https://news.google.com/rss/articles/CBMiW2h0dHBzOi8vdGhlaGlsbC5jb20vaG9tZW5ld3MvNDcyNDE2My1jcm9ja2V0dC10aG9tYXMtY29ycnVwdC1zdXByZW1lLWNvdXJ0LWJ1bXAtc3RvY2tzLWJhbi_SAV9odHRwczovL3RoZWhpbGwuY29tL2hvbWVuZXdzLzQ3MjQxNjMtY3JvY2tldHQtdGhvbWFzLWNvcnJ1cHQtc3VwcmVtZS1jb3VydC1idW1wLXN0b2Nrcy1iYW4vYW1wLw?oc=5";s:11:"description";s:2396:"<ol><li><a href="https://news.google.com/rss/articles/CBMiW2h0dHBzOi8vdGhlaGlsbC5jb20vaG9tZW5ld3MvNDcyNDE2My1jcm9ja2V0dC10aG9tYXMtY29ycnVwdC1zdXByZW1lLWNvdXJ0LWJ1bXAtc3RvY2tzLWJhbi_SAV9odHRwczovL3RoZWhpbGwuY29tL2hvbWVuZXdzLzQ3MjQxNjMtY3JvY2tldHQtdGhvbWFzLWNvcnJ1cHQtc3VwcmVtZS1jb3VydC1idW1wLXN0b2Nrcy1iYW4vYW1wLw?oc=5" target="_blank">Crockett calls Thomas ‘corrupt’ after Supreme Court decision to upend bump stocks ban</a>&nbsp;&nbsp;<font color="#6f6f6f">The Hill</font></li><li><a href="https://news.google.com/rss/articles/CBMiX2h0dHBzOi8vd3d3LmJ1c2luZXNzaW5zaWRlci5jb20vc3VwcmVtZS1jb3VydC10b3NzZXMtYmFuLWJ1bXAtc3RvY2tzLWd1bnMtYWxpdG8tY29uZ3Jlc3MtMjAyNC020gFjaHR0cHM6Ly93d3cuYnVzaW5lc3NpbnNpZGVyLmNvbS9zdXByZW1lLWNvdXJ0LXRvc3Nlcy1iYW4tYnVtcC1zdG9ja3MtZ3Vucy1hbGl0by1jb25ncmVzcy0yMDI0LTY_YW1w?oc=5" target="_blank">Supreme Court strikes down bump-stock ban; Alito tells Congress to act</a>&nbsp;&nbsp;<font color="#6f6f6f">Business Insider</font></li><li><a href="https://news.google.com/rss/articles/CBMiUGh0dHBzOi8vd3d3LnlhaG9vLmNvbS9uZXdzL3JlYWN0aW5nLXN1cHJlbWUtY291cnQtcnVsaW5nLWdvdmVybm9yLTIwMTY0NzAwMS5odG1s0gEA?oc=5" target="_blank">Reacting to Supreme Court ruling, governor wrongly says Buffalo supermarket killer used bump stock</a>&nbsp;&nbsp;<font color="#6f6f6f">Yahoo! Voices</font></li><li><a href="https://news.google.com/rss/articles/CBMicWh0dHBzOi8vd3d3Lm1zbmJjLmNvbS9hbGktdmVsc2hpL3dhdGNoLy1jbGFyZW5jZS10aG9tYXMtaXMtY29ycnVwdC1lbmQtb2Ytc3RvcnktcmVwLWphc21pbmUtY3JvY2tldHQtMjEzMDU0MDIxOTAx0gE2aHR0cHM6Ly93d3cubXNuYmMuY29tL21zbmJjL2FtcC12aWRlby9tbXZvMjEzMDU0MDIxOTAx?oc=5" target="_blank">'Clarence Thomas is corrupt – end of story': Rep. Jasmine Crockett</a>&nbsp;&nbsp;<font color="#6f6f6f">MSNBC</font></li><li><a href="https://news.google.com/rss/articles/CBMiemh0dHBzOi8vc2xhdGUuY29tL25ld3MtYW5kLXBvbGl0aWNzLzIwMjQvMDYvc290b21heW9yLWRpc3NlbnQtc3VwcmVtZS1jb3VydC1idW1wLXN0b2Nrcy1kZWNpc2lvbi10ZXh0dWFsaXNtLWh5cG9jcmlzeS5odG1s0gEA?oc=5" target="_blank">Supreme Court bump stocks decision: Sotomayor points out how quickly the conservative justices will drop their principles.</a>&nbsp;&nbsp;<font color="#6f6f6f">Slate</font></li></ol>";s:4:"guid";s:258:"CBMiW2h0dHBzOi8vdGhlaGlsbC5jb20vaG9tZW5ld3MvNDcyNDE2My1jcm9ja2V0dC10aG9tYXMtY29ycnVwdC1zdXByZW1lLWNvdXJ0LWJ1bXAtc3RvY2tzLWJhbi_SAV9odHRwczovL3RoZWhpbGwuY29tL2hvbWVuZXdzLzQ3MjQxNjMtY3JvY2tldHQtdGhvbWFzLWNvcnJ1cHQtc3VwcmVtZS1jb3VydC1idW1wLXN0b2Nrcy1iYW4vYW1wLw";s:7:"pubDate";s:24:"Jun 15, 2024 10:05:00 PM";s:6:"source";s:8:"The Hill";}i:10;a:6:{s:5:"title";s:68:"Russia-Ukraine war: List of key events, day 842 - Al Jazeera English";s:4:"link";s:286:"https://news.google.com/rss/articles/CBMiVmh0dHBzOi8vd3d3LmFsamF6ZWVyYS5jb20vbmV3cy8yMDI0LzYvMTYvcnVzc2lhLXVrcmFpbmUtd2FyLWxpc3Qtb2Yta2V5LWV2ZW50cy1kYXktODQy0gFaaHR0cHM6Ly93d3cuYWxqYXplZXJhLmNvbS9hbXAvbmV3cy8yMDI0LzYvMTYvcnVzc2lhLXVrcmFpbmUtd2FyLWxpc3Qtb2Yta2V5LWV2ZW50cy1kYXktODQy?oc=5";s:11:"description";s:2097:"<ol><li><a href="https://news.google.com/rss/articles/CBMiVmh0dHBzOi8vd3d3LmFsamF6ZWVyYS5jb20vbmV3cy8yMDI0LzYvMTYvcnVzc2lhLXVrcmFpbmUtd2FyLWxpc3Qtb2Yta2V5LWV2ZW50cy1kYXktODQy0gFaaHR0cHM6Ly93d3cuYWxqYXplZXJhLmNvbS9hbXAvbmV3cy8yMDI0LzYvMTYvcnVzc2lhLXVrcmFpbmUtd2FyLWxpc3Qtb2Yta2V5LWV2ZW50cy1kYXktODQy?oc=5" target="_blank">Russia-Ukraine war: List of key events, day 842</a>&nbsp;&nbsp;<font color="#6f6f6f">Al Jazeera English</font></li><li><a href="https://news.google.com/rss/articles/CBMiZmh0dHBzOi8vd3d3LnJldXRlcnMuY29tL3dvcmxkL2V1cm9wZS9kcmFmdC1qb2ludC1jb21tdW5pcXVlLXVrcmFpbmUtY29uZmVyZW5jZS1zd2l0emVybGFuZC0yMDI0LTA2LTE1L9IBAA?oc=5" target="_blank">Ukraine conference joint communiqué: full text</a>&nbsp;&nbsp;<font color="#6f6f6f">Reuters</font></li><li><a href="https://news.google.com/rss/articles/CBMiVmh0dHBzOi8vd3d3LmNubi5jb20vMjAyNC8wNi8xNS9ldXJvcGUvdWtyYWluZS1wZWFjZS1zdW1taXQtc3dpdHplcmxhbmQtaW50bC9pbmRleC5odG1s0gFPaHR0cHM6Ly9hbXAuY25uLmNvbS9jbm4vMjAyNC8wNi8xNS9ldXJvcGUvdWtyYWluZS1wZWFjZS1zdW1taXQtc3dpdHplcmxhbmQtaW50bA?oc=5" target="_blank">World leaders join major Ukraine peace summit in Switzerland - but no Russia or China</a>&nbsp;&nbsp;<font color="#6f6f6f">CNN</font></li><li><a href="https://news.google.com/rss/articles/CBMibmh0dHBzOi8vd3d3LmJsb29tYmVyZy5jb20vbmV3cy9hcnRpY2xlcy8yMDI0LTA2LTE1L3plbGVuc2tpeS12b3dzLXRvLWZvcmdlLWFoZWFkLWFzLXN1bW1pdC1yaXNrcy1mYWxsaW5nLXNob3J00gEA?oc=5" target="_blank">Ukraine War: Zelenskiy Seeks to Broaden Support as Leaders Skip Swiss Summit</a>&nbsp;&nbsp;<font color="#6f6f6f">Bloomberg</font></li><li><a href="https://news.google.com/rss/articles/CBMiUWh0dHBzOi8vd3d3LmZvcmVpZ25hZmZhaXJzLmNvbS9jaGluYS93aHktY2hpbmEtc2Fib3RhZ2luZy11a3JhaW5lLXBlYWNlLWFncmVlbWVudNIBAA?oc=5" target="_blank">Why China Is Sabotaging Ukraine</a>&nbsp;&nbsp;<font color="#6f6f6f">Foreign Affairs Magazine</font></li></ol>";s:4:"guid";s:244:"CBMiVmh0dHBzOi8vd3d3LmFsamF6ZWVyYS5jb20vbmV3cy8yMDI0LzYvMTYvcnVzc2lhLXVrcmFpbmUtd2FyLWxpc3Qtb2Yta2V5LWV2ZW50cy1kYXktODQy0gFaaHR0cHM6Ly93d3cuYWxqYXplZXJhLmNvbS9hbXAvbmV3cy8yMDI0LzYvMTYvcnVzc2lhLXVrcmFpbmUtd2FyLWxpc3Qtb2Yta2V5LWV2ZW50cy1kYXktODQy";s:7:"pubDate";s:23:"Jun 16, 2024 6:35:22 AM";s:6:"source";s:18:"Al Jazeera English";}i:11;a:6:{s:5:"title";s:67:"Iran and Sweden exchange prisoners in Oman-mediated swap - CBS News";s:4:"link";s:228:"https://news.google.com/rss/articles/CBMiQGh0dHBzOi8vd3d3LmNic25ld3MuY29tL25ld3MvaXJhbi1hbmQtc3dlZGVuLWV4Y2hhbmdlLXByaXNvbmVycy_SAURodHRwczovL3d3dy5jYnNuZXdzLmNvbS9hbXAvbmV3cy9pcmFuLWFuZC1zd2VkZW4tZXhjaGFuZ2UtcHJpc29uZXJzLw?oc=5";s:11:"description";s:2197:"<ol><li><a href="https://news.google.com/rss/articles/CBMiQGh0dHBzOi8vd3d3LmNic25ld3MuY29tL25ld3MvaXJhbi1hbmQtc3dlZGVuLWV4Y2hhbmdlLXByaXNvbmVycy_SAURodHRwczovL3d3dy5jYnNuZXdzLmNvbS9hbXAvbmV3cy9pcmFuLWFuZC1zd2VkZW4tZXhjaGFuZ2UtcHJpc29uZXJzLw?oc=5" target="_blank">Iran and Sweden exchange prisoners in Oman-mediated swap</a>&nbsp;&nbsp;<font color="#6f6f6f">CBS News</font></li><li><a href="https://news.google.com/rss/articles/CBMiLmh0dHBzOi8vd3d3LmJiYy5jb20vbmV3cy9hcnRpY2xlcy9jenJyMmtlbWpsZW_SAQA?oc=5" target="_blank">Iranian convicted of war crimes freed in Sweden prisoner swap</a>&nbsp;&nbsp;<font color="#6f6f6f">BBC.com</font></li><li><a href="https://news.google.com/rss/articles/CBMiT2h0dHBzOi8vd3d3LmNubi5jb20vMjAyNC8wNi8xNS9ldXJvcGUvc3dlZGVuLWlyYW4tcHJpc29uZXItc3dhcC1pbnRsL2luZGV4Lmh0bWzSAUhodHRwczovL2FtcC5jbm4uY29tL2Nubi8yMDI0LzA2LzE1L2V1cm9wZS9zd2VkZW4taXJhbi1wcmlzb25lci1zd2FwLWludGw?oc=5" target="_blank">Sweden and Iran exchange prisoners in breakthrough deal, officials say</a>&nbsp;&nbsp;<font color="#6f6f6f">CNN</font></li><li><a href="https://news.google.com/rss/articles/CBMifmh0dHBzOi8vd3d3LnRoZWd1YXJkaWFuLmNvbS93b3JsZC9hcnRpY2xlLzIwMjQvanVuLzE1L3N3ZWRpc2gtZXUtZGlwbG9tYXQtam9oYW4tZmxvZGVydXMtZnJlZWQtZnJvbS1pcmFuLWphaWwtaW4tcHJpc29uZXItc3dhcNIBfmh0dHBzOi8vYW1wLnRoZWd1YXJkaWFuLmNvbS93b3JsZC9hcnRpY2xlLzIwMjQvanVuLzE1L3N3ZWRpc2gtZXUtZGlwbG9tYXQtam9oYW4tZmxvZGVydXMtZnJlZWQtZnJvbS1pcmFuLWphaWwtaW4tcHJpc29uZXItc3dhcA?oc=5" target="_blank">Swedish EU diplomat Johan Floderus freed from Iranian jail in prisoner swap</a>&nbsp;&nbsp;<font color="#6f6f6f">The Guardian</font></li><li><a href="https://news.google.com/rss/articles/CBMia2h0dHBzOi8vd3d3Lndzai5jb20vd29ybGQvbWlkZGxlLWVhc3QvaXJhbi1mcmVlcy10d28tc3dlZGlzaC1jaXRpemVucy1mb3ItaXJhbmlhbi1qYWlsZWQtaW4tc3dlZGVuLTdkODYxNGRl0gEA?oc=5" target="_blank">Iran Frees Two Swedish Citizens for Iranian Jailed in Sweden</a>&nbsp;&nbsp;<font color="#6f6f6f">The Wall Street Journal</font></li></ol>";s:4:"guid";s:186:"CBMiQGh0dHBzOi8vd3d3LmNic25ld3MuY29tL25ld3MvaXJhbi1hbmQtc3dlZGVuLWV4Y2hhbmdlLXByaXNvbmVycy_SAURodHRwczovL3d3dy5jYnNuZXdzLmNvbS9hbXAvbmV3cy9pcmFuLWFuZC1zd2VkZW4tZXhjaGFuZ2UtcHJpc29uZXJzLw";s:7:"pubDate";s:24:"Jun 15, 2024 10:19:04 PM";s:6:"source";s:8:"CBS News";}i:12;a:6:{s:5:"title";s:121:"US forces destroy Houthi radars in Yemen that allowed Iranian-backed group to target commercial ships, CENTCOM says - CNN";s:4:"link";s:280:"https://news.google.com/rss/articles/CBMiWWh0dHBzOi8vd3d3LmNubi5jb20vMjAyNC8wNi8xNC9wb2xpdGljcy9jaXZpbGlhbi1tYXJpbmVyLW1pc3NpbmctaG91dGhpLWF0dGFjay9pbmRleC5odG1s0gFSaHR0cHM6Ly9hbXAuY25uLmNvbS9jbm4vMjAyNC8wNi8xNC9wb2xpdGljcy9jaXZpbGlhbi1tYXJpbmVyLW1pc3NpbmctaG91dGhpLWF0dGFjaw?oc=5";s:11:"description";s:760:"<a href="https://news.google.com/rss/articles/CBMiWWh0dHBzOi8vd3d3LmNubi5jb20vMjAyNC8wNi8xNC9wb2xpdGljcy9jaXZpbGlhbi1tYXJpbmVyLW1pc3NpbmctaG91dGhpLWF0dGFjay9pbmRleC5odG1s0gFSaHR0cHM6Ly9hbXAuY25uLmNvbS9jbm4vMjAyNC8wNi8xNC9wb2xpdGljcy9jaXZpbGlhbi1tYXJpbmVyLW1pc3NpbmctaG91dGhpLWF0dGFjaw?oc=5" target="_blank">US forces destroy Houthi radars in Yemen that allowed Iranian-backed group to target commercial ships, CENTCOM says</a>&nbsp;&nbsp;<font color="#6f6f6f">CNN</font><strong><a href="https://news.google.com/stories/CAAqNggKIjBDQklTSGpvSmMzUnZjbmt0TXpZd1NoRUtEd2oyMnJybEN4Rk9QRDNzOEt5OVhpZ0FQAQ?hl=en-US&gl=US&ceid=US:en&oc=5" target="_blank">View Full Coverage on Google News</a></strong>";s:4:"guid";s:238:"CBMiWWh0dHBzOi8vd3d3LmNubi5jb20vMjAyNC8wNi8xNC9wb2xpdGljcy9jaXZpbGlhbi1tYXJpbmVyLW1pc3NpbmctaG91dGhpLWF0dGFjay9pbmRleC5odG1s0gFSaHR0cHM6Ly9hbXAuY25uLmNvbS9jbm4vMjAyNC8wNi8xNC9wb2xpdGljcy9jaXZpbGlhbi1tYXJpbmVyLW1pc3NpbmctaG91dGhpLWF0dGFjaw";s:7:"pubDate";s:24:"Jun 15, 2024 10:17:00 PM";s:6:"source";s:3:"CNN";}i:13;a:6:{s:5:"title";s:97:"Two reservists killed in north Gaza, as soldiers slain in Rafah blast named - The Times of Israel";s:4:"link";s:337:"https://news.google.com/rss/articles/CBMiaWh0dHBzOi8vd3d3LnRpbWVzb2Zpc3JhZWwuY29tL3R3by1yZXNlcnZpc3RzLWtpbGxlZC1pbi1ub3J0aC1nYXphLWFzLXNvbGRpZXJzLXNsYWluLWluLXJhZmFoLWJsYXN0LW5hbWVkL9IBbWh0dHBzOi8vd3d3LnRpbWVzb2Zpc3JhZWwuY29tL3R3by1yZXNlcnZpc3RzLWtpbGxlZC1pbi1ub3J0aC1nYXphLWFzLXNvbGRpZXJzLXNsYWluLWluLXJhZmFoLWJsYXN0LW5hbWVkL2FtcC8?oc=5";s:11:"description";s:793:"<a href="https://news.google.com/rss/articles/CBMiaWh0dHBzOi8vd3d3LnRpbWVzb2Zpc3JhZWwuY29tL3R3by1yZXNlcnZpc3RzLWtpbGxlZC1pbi1ub3J0aC1nYXphLWFzLXNvbGRpZXJzLXNsYWluLWluLXJhZmFoLWJsYXN0LW5hbWVkL9IBbWh0dHBzOi8vd3d3LnRpbWVzb2Zpc3JhZWwuY29tL3R3by1yZXNlcnZpc3RzLWtpbGxlZC1pbi1ub3J0aC1nYXphLWFzLXNvbGRpZXJzLXNsYWluLWluLXJhZmFoLWJsYXN0LW5hbWVkL2FtcC8?oc=5" target="_blank">Two reservists killed in north Gaza, as soldiers slain in Rafah blast named</a>&nbsp;&nbsp;<font color="#6f6f6f">The Times of Israel</font><strong><a href="https://news.google.com/stories/CAAqNggKIjBDQklTSGpvSmMzUnZjbmt0TXpZd1NoRUtEd2psbFlYZkN4R21QeTNFSjZkTUNDZ0FQAQ?hl=en-US&gl=US&ceid=US:en&oc=5" target="_blank">View Full Coverage on Google News</a></strong>";s:4:"guid";s:295:"CBMiaWh0dHBzOi8vd3d3LnRpbWVzb2Zpc3JhZWwuY29tL3R3by1yZXNlcnZpc3RzLWtpbGxlZC1pbi1ub3J0aC1nYXphLWFzLXNvbGRpZXJzLXNsYWluLWluLXJhZmFoLWJsYXN0LW5hbWVkL9IBbWh0dHBzOi8vd3d3LnRpbWVzb2Zpc3JhZWwuY29tL3R3by1yZXNlcnZpc3RzLWtpbGxlZC1pbi1ub3J0aC1nYXphLWFzLXNvbGRpZXJzLXNsYWluLWluLXJhZmFoLWJsYXN0LW5hbWVkL2FtcC8";s:7:"pubDate";s:23:"Jun 16, 2024 5:17:17 AM";s:6:"source";s:19:"The Times of Israel";}i:14;a:6:{s:5:"title";s:94:"How Elon Musk’s $44.9B Tesla pay package compares to other top U.S. CEO plans - PBS NewsHour";s:4:"link";s:353:"https://news.google.com/rss/articles/CBMib2h0dHBzOi8vd3d3LnBicy5vcmcvbmV3c2hvdXIvZWNvbm9teS9ob3ctZWxvbi1tdXNrcy00NC05Yi10ZXNsYS1wYXktcGFja2FnZS1jb21wYXJlcy10by1vdGhlci10b3AtdS1zLWNlby1wbGFuc9IBc2h0dHBzOi8vd3d3LnBicy5vcmcvbmV3c2hvdXIvYW1wL2Vjb25vbXkvaG93LWVsb24tbXVza3MtNDQtOWItdGVzbGEtcGF5LXBhY2thZ2UtY29tcGFyZXMtdG8tb3RoZXItdG9wLXUtcy1jZW8tcGxhbnM?oc=5";s:11:"description";s:2252:"<ol><li><a href="https://news.google.com/rss/articles/CBMib2h0dHBzOi8vd3d3LnBicy5vcmcvbmV3c2hvdXIvZWNvbm9teS9ob3ctZWxvbi1tdXNrcy00NC05Yi10ZXNsYS1wYXktcGFja2FnZS1jb21wYXJlcy10by1vdGhlci10b3AtdS1zLWNlby1wbGFuc9IBc2h0dHBzOi8vd3d3LnBicy5vcmcvbmV3c2hvdXIvYW1wL2Vjb25vbXkvaG93LWVsb24tbXVza3MtNDQtOWItdGVzbGEtcGF5LXBhY2thZ2UtY29tcGFyZXMtdG8tb3RoZXItdG9wLXUtcy1jZW8tcGxhbnM?oc=5" target="_blank">How Elon Musk’s $44.9B Tesla pay package compares to other top U.S. CEO plans</a>&nbsp;&nbsp;<font color="#6f6f6f">PBS NewsHour</font></li><li><a href="https://news.google.com/rss/articles/CBMiXWh0dHBzOi8vd3d3LmJ1c2luZXNzaW5zaWRlci5jb20vdGVzbGEtaW5zdGl0dXRpb25hbC1zaGFyZWhvbGRlcnMtZWxvbi1tdXNrLXBheS1wYWNrYWdlLTIwMjQtNtIBYWh0dHBzOi8vd3d3LmJ1c2luZXNzaW5zaWRlci5jb20vdGVzbGEtaW5zdGl0dXRpb25hbC1zaGFyZWhvbGRlcnMtZWxvbi1tdXNrLXBheS1wYWNrYWdlLTIwMjQtNj9hbXA?oc=5" target="_blank">Musk's pay package approval was a mistake: institutional shareholders</a>&nbsp;&nbsp;<font color="#6f6f6f">Business Insider</font></li><li><a href="https://news.google.com/rss/articles/CBMiT2h0dHBzOi8vd3d3Lm55dGltZXMuY29tLzIwMjQvMDYvMTQvYnVzaW5lc3MvdGVzbGEtZWxvbi1tdXNrLXBheS12b3RlLXN0b2NrLmh0bWzSAQA?oc=5" target="_blank">Elon Musk Got 72% in Tesla Shareholder Vote on Pay</a>&nbsp;&nbsp;<font color="#6f6f6f">The New York Times</font></li><li><a href="https://news.google.com/rss/articles/CBMid2h0dHBzOi8vZmluYW5jZS55YWhvby5jb20vbmV3cy93aGF0cy1uZXh0LWZvci10ZXNsYXMtc3RvY2stYXMtc2hhcmVob2xkZXJzLWFuZC13YWxsLXN0cmVldC1wcm9zLXdlaWdoLWluLTExMzMwMDgzMC5odG1s0gEA?oc=5" target="_blank">What's next for Tesla's stock as shareholders and Wall Street pros weigh in</a>&nbsp;&nbsp;<font color="#6f6f6f">Yahoo Finance</font></li><li><a href="https://news.google.com/rss/articles/CBMiTWh0dHBzOi8vd3d3Lndzai5jb20vYnVzaW5lc3MvYXV0b3Mvb2xkLWVsb24tbXVzay1yZXR1cm5zLXBheS1wYWNrYWdlLWM0MGFjMDFl0gEA?oc=5" target="_blank">What Does $48 Billion Get Tesla Investors? A Return of the Old Elon Musk</a>&nbsp;&nbsp;<font color="#6f6f6f">The Wall Street Journal</font></li></ol>";s:4:"guid";s:311:"CBMib2h0dHBzOi8vd3d3LnBicy5vcmcvbmV3c2hvdXIvZWNvbm9teS9ob3ctZWxvbi1tdXNrcy00NC05Yi10ZXNsYS1wYXktcGFja2FnZS1jb21wYXJlcy10by1vdGhlci10b3AtdS1zLWNlby1wbGFuc9IBc2h0dHBzOi8vd3d3LnBicy5vcmcvbmV3c2hvdXIvYW1wL2Vjb25vbXkvaG93LWVsb24tbXVza3MtNDQtOWItdGVzbGEtcGF5LXBhY2thZ2UtY29tcGFyZXMtdG8tb3RoZXItdG9wLXUtcy1jZW8tcGxhbnM";s:7:"pubDate";s:23:"Jun 15, 2024 4:30:47 PM";s:6:"source";s:12:"PBS NewsHour";}i:15;a:6:{s:5:"title";s:81:"The Biggest Victim Of Europe's Anti-China EV Tariffs: The Mini Cooper - InsideEVs";s:4:"link";s:238:"https://news.google.com/rss/articles/CBMiRGh0dHBzOi8vaW5zaWRlZXZzLmNvbS9uZXdzLzcyMzQwMy90YXJpZmYtbWluaS1jb29wZXItZWxlY3RyaWMtY2hpbmEv0gFIaHR0cHM6Ly9pbnNpZGVldnMuY29tL25ld3MvNzIzNDAzL3RhcmlmZi1taW5pLWNvb3Blci1lbGVjdHJpYy1jaGluYS9hbXAv?oc=5";s:11:"description";s:2140:"<ol><li><a href="https://news.google.com/rss/articles/CBMiRGh0dHBzOi8vaW5zaWRlZXZzLmNvbS9uZXdzLzcyMzQwMy90YXJpZmYtbWluaS1jb29wZXItZWxlY3RyaWMtY2hpbmEv0gFIaHR0cHM6Ly9pbnNpZGVldnMuY29tL25ld3MvNzIzNDAzL3RhcmlmZi1taW5pLWNvb3Blci1lbGVjdHJpYy1jaGluYS9hbXAv?oc=5" target="_blank">The Biggest Victim Of Europe's Anti-China EV Tariffs: The Mini Cooper</a>&nbsp;&nbsp;<font color="#6f6f6f">InsideEVs </font></li><li><a href="https://news.google.com/rss/articles/CBMihAFodHRwczovL3d3dy5yZXV0ZXJzLmNvbS9idXNpbmVzcy9hdXRvcy10cmFuc3BvcnRhdGlvbi9ibXctZWxlY3RyaWMtbWluaS10aHJlYXRlbmVkLXdpdGgtaGlnaGVzdC1ldi10YXJpZmYtZXUtc291cmNlLXNheXMtMjAyNC0wNi0xNC_SAQA?oc=5" target="_blank">BMW electric Mini threatened with highest EV tariff from EU, source says</a>&nbsp;&nbsp;<font color="#6f6f6f">Reuters</font></li><li><a href="https://news.google.com/rss/articles/CBMicWh0dHBzOi8vd3d3LmJsb29tYmVyZy5jb20vbmV3cy9hcnRpY2xlcy8yMDI0LTA2LTE0L3hpLWhhcy1mZXctb3B0aW9ucy10by1wdW5pc2gtZXVyb3BlLXdpdGhvdXQtc3BhcmtpbmctdHJhZGUtd2Fy0gEA?oc=5" target="_blank">Xi Has Few Options to Punish EU Without Starting Trade War</a>&nbsp;&nbsp;<font color="#6f6f6f">Bloomberg</font></li><li><a href="https://news.google.com/rss/articles/CBMiUmh0dHBzOi8vZmluYW5jZS55YWhvby5jb20vbmV3cy93aG9sZS1zdXBwbHktY2hhaW4tc3Vic2lkaXNlZC1pbnNpZGUtMDkzMDAwNzg1Lmh0bWzSAQA?oc=5" target="_blank">'The whole supply chain is subsidised': inside the EU's blockbuster Chinese EV probe</a>&nbsp;&nbsp;<font color="#6f6f6f">Yahoo Finance</font></li><li><a href="https://news.google.com/rss/articles/CBMijQFodHRwczovL3d3dy5zY21wLmNvbS9uZXdzL2NoaW5hL2RpcGxvbWFjeS9hcnRpY2xlLzMyNjY1MjEvYmVpamluZy1rbm93cy13aGVyZS1pdC1odXJ0cy1tb3N0LWNoaW5hLWNvbnNpZGVycy1pdHMtcmVzcG9uc2UtYWZ0ZXItZXUtdGFyaWZmLWhpa2XSAQA?oc=5" target="_blank">'Beijing knows where it hurts': China considers response after EU tariff hike</a>&nbsp;&nbsp;<font color="#6f6f6f">South China Morning Post</font></li></ol>";s:4:"guid";s:196:"CBMiRGh0dHBzOi8vaW5zaWRlZXZzLmNvbS9uZXdzLzcyMzQwMy90YXJpZmYtbWluaS1jb29wZXItZWxlY3RyaWMtY2hpbmEv0gFIaHR0cHM6Ly9pbnNpZGVldnMuY29tL25ld3MvNzIzNDAzL3RhcmlmZi1taW5pLWNvb3Blci1lbGVjdHJpYy1jaGluYS9hbXAv";s:7:"pubDate";s:23:"Jun 14, 2024 7:33:00 PM";s:6:"source";s:9:"InsideEVs";}i:16;a:6:{s:5:"title";s:169:"Inflation Cools In May, Fed Hints At Slower Pace Of Rate Cuts, Stocks Hit New Record Highs: This Week In The Market - Apple (NASDAQ:AAPL), GameStop (NYSE:GME) - Benzinga";s:4:"link";s:257:"https://news.google.com/rss/articles/CBMimQFodHRwczovL3d3dy5iZW56aW5nYS5jb20vbWFya2V0cy9lcXVpdGllcy8yNC8wNi8zOTM0MDcxOS9pbmZsYXRpb24tY29vbHMtaW4tbWF5LWZlZC1oaW50cy1hdC1zbG93ZXItcGFjZS1vZi1yYXRlLWN1dHMtc3RvY2tzLWhpdC1uZXctcmVjb3JkLWhpZ2hzLXRoaXMtd2XSAQA?oc=5";s:11:"description";s:2153:"<ol><li><a href="https://news.google.com/rss/articles/CBMimQFodHRwczovL3d3dy5iZW56aW5nYS5jb20vbWFya2V0cy9lcXVpdGllcy8yNC8wNi8zOTM0MDcxOS9pbmZsYXRpb24tY29vbHMtaW4tbWF5LWZlZC1oaW50cy1hdC1zbG93ZXItcGFjZS1vZi1yYXRlLWN1dHMtc3RvY2tzLWhpdC1uZXctcmVjb3JkLWhpZ2hzLXRoaXMtd2XSAQA?oc=5" target="_blank">Inflation Cools In May, Fed Hints At Slower Pace Of Rate Cuts, Stocks Hit New Record Highs: This Week In The Market - Apple (NASDAQ:AAPL), GameStop (NYSE:GME)</a>&nbsp;&nbsp;<font color="#6f6f6f">Benzinga</font></li><li><a href="https://news.google.com/rss/articles/CBMiRGh0dHBzOi8vd3d3LmNuYmMuY29tLzIwMjQvMDYvMTMvc3RvY2stbWFya2V0LXRvZGF5LWxpdmUtdXBkYXRlcy5odG1s0gFIaHR0cHM6Ly93d3cuY25iYy5jb20vYW1wLzIwMjQvMDYvMTMvc3RvY2stbWFya2V0LXRvZGF5LWxpdmUtdXBkYXRlcy5odG1s?oc=5" target="_blank">Nasdaq Composite ekes out fifth straight record close, notches a 3% weekly gain: Live updates</a>&nbsp;&nbsp;<font color="#6f6f6f">CNBC</font></li><li><a href="https://news.google.com/rss/articles/CBMiPWh0dHBzOi8vd3d3LmludmVzdG9wZWRpYS5jb20vZG93LWpvbmVzLXRvZGF5LTA2MTQyMDI0LTg2NjMzNzbSAQA?oc=5" target="_blank">Markets News, June 14, 2024: Tech Lifts Nasdaq to Fifth Straight Record; Dow Lags</a>&nbsp;&nbsp;<font color="#6f6f6f">Investopedia</font></li><li><a href="https://news.google.com/rss/articles/CBMiamh0dHBzOi8vd3d3Lm1vcm5pbmdzdGFyLmNvbS9tYXJrZXRzLzQtcmVhc29ucy13aHktdG9kYXlzLXN0b2NrLW1hcmtldC1pcy1kZWxpdmVyaW5nLWltcHJlc3NpdmUtcGVyZm9ybWFuY2XSAQA?oc=5" target="_blank">4 Reasons Why Today's Stock Market Is Delivering Impressive Performance</a>&nbsp;&nbsp;<font color="#6f6f6f">Morningstar</font></li><li><a href="https://news.google.com/rss/articles/CBMiVWh0dHBzOi8vd3d3Lndzai5jb20vZmluYW5jZS9zdG9ja3MvZ2xvYmFsLXN0b2Nrcy1tYXJrZXRzLWRvdy1uZXdzLTA2LTE0LTIwMjQtMDk1YjljZmLSAQA?oc=5" target="_blank">Cooling Inflation Powers S&P 500, Nasdaq to Weekly Gains</a>&nbsp;&nbsp;<font color="#6f6f6f">The Wall Street Journal</font></li></ol>";s:4:"guid";s:215:"CBMimQFodHRwczovL3d3dy5iZW56aW5nYS5jb20vbWFya2V0cy9lcXVpdGllcy8yNC8wNi8zOTM0MDcxOS9pbmZsYXRpb24tY29vbHMtaW4tbWF5LWZlZC1oaW50cy1hdC1zbG93ZXItcGFjZS1vZi1yYXRlLWN1dHMtc3RvY2tzLWhpdC1uZXctcmVjb3JkLWhpZ2hzLXRoaXMtd2XSAQA";s:7:"pubDate";s:23:"Jun 14, 2024 8:06:26 PM";s:6:"source";s:8:"Benzinga";}i:17;a:6:{s:5:"title";s:72:"The Market Is Blowing Off What the Fed Is Saying About Rates - Bloomberg";s:4:"link";s:200:"https://news.google.com/rss/articles/CBMib2h0dHBzOi8vd3d3LmJsb29tYmVyZy5jb20vbmV3cy9hcnRpY2xlcy8yMDI0LTA2LTE1L3RoZS1tYXJrZXQtaXMtYmxvd2luZy1vZmYtd2hhdC10aGUtZmVkLWlzLXNheWluZy1hYm91dC1yYXRlc9IBAA?oc=5";s:11:"description";s:2008:"<ol><li><a href="https://news.google.com/rss/articles/CBMib2h0dHBzOi8vd3d3LmJsb29tYmVyZy5jb20vbmV3cy9hcnRpY2xlcy8yMDI0LTA2LTE1L3RoZS1tYXJrZXQtaXMtYmxvd2luZy1vZmYtd2hhdC10aGUtZmVkLWlzLXNheWluZy1hYm91dC1yYXRlc9IBAA?oc=5" target="_blank">The Market Is Blowing Off What the Fed Is Saying About Rates</a>&nbsp;&nbsp;<font color="#6f6f6f">Bloomberg</font></li><li><a href="https://news.google.com/rss/articles/CBMiU2h0dHBzOi8vd3d3Lm55dGltZXMuY29tLzIwMjQvMDYvMTQvYnVzaW5lc3Mvc3RvY2stbWFya2V0LWludGVyZXN0LXJhdGVzLWZlZC1haS5odG1s0gEA?oc=5" target="_blank">Why the Stock Market Has Risen Even With No Fed Rate Cuts</a>&nbsp;&nbsp;<font color="#6f6f6f">The New York Times</font></li><li><a href="https://news.google.com/rss/articles/CBMiZGh0dHBzOi8vd3d3LmJ1c2luZXNzaW5zaWRlci5jb20vc3RvY2stbWFya2V0LWluZGV4LWNvdWxkLXNlZS1nYWlucy1yYXRlLWN1dHMtZm9yZWNhc3Qtb3V0bG9vay0yMDI0LTbSAQA?oc=5" target="_blank">How a Stock Index Could See 100% Gains in 2024 and 2025</a>&nbsp;&nbsp;<font color="#6f6f6f">Business Insider</font></li><li><a href="https://news.google.com/rss/articles/CBMiZ2h0dHBzOi8vd3d3LmNuYmMuY29tLzIwMjQvMDYvMTEvaGVyZXMtd2hhdC1pbnZlc3RvcnMtZXhwZWN0LWZyb20tc3RvY2tzLWFmdGVyLXRoZS1mZWQtb24td2VkbmVzZGF5Lmh0bWzSAQA?oc=5" target="_blank">Here's what investors expect from the stock market after the Fed decision Wednesday</a>&nbsp;&nbsp;<font color="#6f6f6f">CNBC</font></li><li><a href="https://news.google.com/rss/articles/CBMiSmh0dHBzOi8vd3d3LmJhcnJvbnMuY29tL2FydGljbGVzL3N0b2NrLW1hcmtldC1yYXRlLWN1dHMtYXBwbGUtZmVkLTE0MjM4MWZj0gFOaHR0cHM6Ly93d3cuYmFycm9ucy5jb20vYW1wL2FydGljbGVzL3N0b2NrLW1hcmtldC1yYXRlLWN1dHMtYXBwbGUtZmVkLTE0MjM4MWZj?oc=5" target="_blank">The Stock Market Doesn’t Need the Fed’s Stinking Rate Cuts</a>&nbsp;&nbsp;<font color="#6f6f6f">Barron's</font></li></ol>";s:4:"guid";s:158:"CBMib2h0dHBzOi8vd3d3LmJsb29tYmVyZy5jb20vbmV3cy9hcnRpY2xlcy8yMDI0LTA2LTE1L3RoZS1tYXJrZXQtaXMtYmxvd2luZy1vZmYtd2hhdC10aGUtZmVkLWlzLXNheWluZy1hYm91dC1yYXRlc9IBAA";s:7:"pubDate";s:23:"Jun 15, 2024 2:00:00 PM";s:6:"source";s:9:"Bloomberg";}i:18;a:6:{s:5:"title";s:69:"Apple joins the race to find an AI icon that makes sense - TechCrunch";s:4:"link";s:173:"https://news.google.com/rss/articles/CBMiW2h0dHBzOi8vdGVjaGNydW5jaC5jb20vMjAyNC8wNi8xNS9hcHBsZS1qb2lucy10aGUtcmFjZS10by1maW5kLWFuLWFpLWljb24tdGhhdC1tYWtlcy1zZW5zZS_SAQA?oc=5";s:11:"description";s:1913:"<ol><li><a href="https://news.google.com/rss/articles/CBMiW2h0dHBzOi8vdGVjaGNydW5jaC5jb20vMjAyNC8wNi8xNS9hcHBsZS1qb2lucy10aGUtcmFjZS10by1maW5kLWFuLWFpLWljb24tdGhhdC1tYWtlcy1zZW5zZS_SAQA?oc=5" target="_blank">Apple joins the race to find an AI icon that makes sense</a>&nbsp;&nbsp;<font color="#6f6f6f">TechCrunch</font></li><li><a href="https://news.google.com/rss/articles/CBMiKWh0dHBzOi8vd3d3LmFwcGxlLmNvbS9hcHBsZS1pbnRlbGxpZ2VuY2Uv0gEA?oc=5" target="_blank">Apple Intelligence Preview</a>&nbsp;&nbsp;<font color="#6f6f6f">Apple</font></li><li><a href="https://news.google.com/rss/articles/CBMiL2h0dHBzOi8vd3d3LmZveGJ1c2luZXNzLmNvbS92aWRlby82MzU0ODc2MDgxMTEy0gEA?oc=5" target="_blank">Apple may be late to the AI party but its approach is smart: David Nicholas</a>&nbsp;&nbsp;<font color="#6f6f6f">Fox Business</font></li><li><a href="https://news.google.com/rss/articles/CBMiXWh0dHBzOi8vd3d3LmJ1c2luZXNzaW5zaWRlci5jb20vYXBwbGUtaG9sZHMtcG93ZXItb3BlbmFpLWRlYWwtY2hhdGdwdC1pcGhvbmVzLXRpbS1jb29rLTIwMjQtNtIBYWh0dHBzOi8vd3d3LmJ1c2luZXNzaW5zaWRlci5jb20vYXBwbGUtaG9sZHMtcG93ZXItb3BlbmFpLWRlYWwtY2hhdGdwdC1pcGhvbmVzLXRpbS1jb29rLTIwMjQtNj9hbXA?oc=5" target="_blank">We now know who holds the most power in Apple's deal with OpenAI</a>&nbsp;&nbsp;<font color="#6f6f6f">Business Insider</font></li><li><a href="https://news.google.com/rss/articles/CBMicmh0dHBzOi8vd3d3LmZhc3Rjb21wYW55LmNvbS85MTE0MDQxNy9kb3dubG9hZC1pb3MtMTgtaXBob25lLXVwZGF0ZS10aW1lbGluZS1wdWJsaWMtYmV0YS1nZW5lcmFsLXJlbGVhc2UtZGF0ZXMtbmVhctIBAA?oc=5" target="_blank">When can I download iOS 18? iPhone update timeline as beta and general release dates near</a>&nbsp;&nbsp;<font color="#6f6f6f">Fast Company</font></li></ol>";s:4:"guid";s:131:"CBMiW2h0dHBzOi8vdGVjaGNydW5jaC5jb20vMjAyNC8wNi8xNS9hcHBsZS1qb2lucy10aGUtcmFjZS10by1maW5kLWFuLWFpLWljb24tdGhhdC1tYWtlcy1zZW5zZS_SAQA";s:7:"pubDate";s:23:"Jun 15, 2024 6:01:00 PM";s:6:"source";s:10:"TechCrunch";}i:19;a:6:{s:5:"title";s:78:"iOS 18 brings math and conversions support to your iPhone's keyboard - 9to5Mac";s:4:"link";s:146:"https://news.google.com/rss/articles/CBMiR2h0dHBzOi8vOXRvNW1hYy5jb20vMjAyNC8wNi8xNC9pb3MtMTgtbWF0aC1jb252ZXJzaW9ucy1pcGhvbmUta2V5Ym9hcmQv0gEA?oc=5";s:11:"description";s:583:"<a href="https://news.google.com/rss/articles/CBMiR2h0dHBzOi8vOXRvNW1hYy5jb20vMjAyNC8wNi8xNC9pb3MtMTgtbWF0aC1jb252ZXJzaW9ucy1pcGhvbmUta2V5Ym9hcmQv0gEA?oc=5" target="_blank">iOS 18 brings math and conversions support to your iPhone's keyboard</a>&nbsp;&nbsp;<font color="#6f6f6f">9to5Mac</font><strong><a href="https://news.google.com/stories/CAAqNggKIjBDQklTSGpvSmMzUnZjbmt0TXpZd1NoRUtEd2pvOXVyaUN4RmMxZjZOODZwSXhpZ0FQAQ?hl=en-US&gl=US&ceid=US:en&oc=5" target="_blank">View Full Coverage on Google News</a></strong>";s:4:"guid";s:104:"CBMiR2h0dHBzOi8vOXRvNW1hYy5jb20vMjAyNC8wNi8xNC9pb3MtMTgtbWF0aC1jb252ZXJzaW9ucy1pcGhvbmUta2V5Ym9hcmQv0gEA";s:7:"pubDate";s:23:"Jun 14, 2024 4:07:00 PM";s:6:"source";s:7:"9to5Mac";}i:20;a:6:{s:5:"title";s:94:"Watch Apple BRUTALLY roast Microsoft's spectacular Windows Recall AI failure - Windows Central";s:4:"link";s:241:"https://news.google.com/rss/articles/CBMijQFodHRwczovL3d3dy53aW5kb3dzY2VudHJhbC5jb20vc29mdHdhcmUtYXBwcy93aW5kb3dzLTExL2xpc3Rlbi10by1hcHBsZXMtbW9ja2luZy1yZXNwb25zZS10by1taWNyb3NvZnRzLXNwZWN0YWN1bGFyLXdpbmRvd3MtcmVjYWxsLWFpLWZhaWx1cmXSAQA?oc=5";s:11:"description";s:2092:"<ol><li><a href="https://news.google.com/rss/articles/CBMijQFodHRwczovL3d3dy53aW5kb3dzY2VudHJhbC5jb20vc29mdHdhcmUtYXBwcy93aW5kb3dzLTExL2xpc3Rlbi10by1hcHBsZXMtbW9ja2luZy1yZXNwb25zZS10by1taWNyb3NvZnRzLXNwZWN0YWN1bGFyLXdpbmRvd3MtcmVjYWxsLWFpLWZhaWx1cmXSAQA?oc=5" target="_blank">Watch Apple BRUTALLY roast Microsoft's spectacular Windows Recall AI failure</a>&nbsp;&nbsp;<font color="#6f6f6f">Windows Central</font></li><li><a href="https://news.google.com/rss/articles/CBMiiwFodHRwczovL3d3dy50b21zaGFyZHdhcmUuY29tL3NvZnR3YXJlL3dpbmRvd3MvZGVzcGl0ZS1jb250cm92ZXJzeS1yZWNhbGwtYWRkcy1uZXctc2NyZWVucmF5LWZlYXR1cmUtd2hpY2gtYW5hbHl6ZXMtY3VycmVudC1kZXNrdG9wLWNvbnRlbnRz0gEA?oc=5" target="_blank">Despite controversy, Recall adds new 'Screenray' feature, which analyzes current desktop contents</a>&nbsp;&nbsp;<font color="#6f6f6f">Tom's Hardware</font></li><li><a href="https://news.google.com/rss/articles/CBMiPmh0dHBzOi8vZnV0dXJpc20uY29tL3RoZS1ieXRlL21pY3Jvc29mdC1yZWNhbGwtc3VydmVpbGxhbmNlLWFp0gEA?oc=5" target="_blank">Microsoft Admits That Maybe Surveiling Everything You Do on Your Computer Isn't a Brilliant Idea</a>&nbsp;&nbsp;<font color="#6f6f6f">Futurism</font></li><li><a href="https://news.google.com/rss/articles/CBMiWWh0dHBzOi8vd3d3LnRoZXZlcmdlLmNvbS8yNDE3NzYwNS9taWNyb3NvZnQtd2luZG93cy1yZWNhbGwtYWN0aXZpdHktdHJhY2tlci1yZWNhbGwtaG93LXRv0gEA?oc=5" target="_blank">How to turn off Windows' aging activity tracker</a>&nbsp;&nbsp;<font color="#6f6f6f">The Verge</font></li><li><a href="https://news.google.com/rss/articles/CBMiggFodHRwczovL3d3dy5yZXV0ZXJzLmNvbS90ZWNobm9sb2d5L2FydGlmaWNpYWwtaW50ZWxsaWdlbmNlL21pY3Jvc29mdC1kZWxheS1yZWxlYXNlLXJlY2FsbC1haS1mZWF0dXJlLXNlY3VyaXR5LWNvbmNlcm5zLTIwMjQtMDYtMTQv0gEA?oc=5" target="_blank">Microsoft to delay release of Recall AI feature on security concerns</a>&nbsp;&nbsp;<font color="#6f6f6f">Reuters</font></li></ol>";s:4:"guid";s:199:"CBMijQFodHRwczovL3d3dy53aW5kb3dzY2VudHJhbC5jb20vc29mdHdhcmUtYXBwcy93aW5kb3dzLTExL2xpc3Rlbi10by1hcHBsZXMtbW9ja2luZy1yZXNwb25zZS10by1taWNyb3NvZnRzLXNwZWN0YWN1bGFyLXdpbmRvd3MtcmVjYWxsLWFpLWZhaWx1cmXSAQA";s:7:"pubDate";s:23:"Jun 15, 2024 6:54:20 PM";s:6:"source";s:15:"Windows Central";}i:21;a:6:{s:5:"title";s:74:"The countdown begins for Samsung's July 10 Unpacked event - Android Police";s:4:"link";s:134:"https://news.google.com/rss/articles/CBMiPmh0dHBzOi8vd3d3LmFuZHJvaWRwb2xpY2UuY29tL3NhbXN1bmctdW5wYWNrZWQtanVseS1jb3VudGRvd24v0gEA?oc=5";s:11:"description";s:2036:"<ol><li><a href="https://news.google.com/rss/articles/CBMiPmh0dHBzOi8vd3d3LmFuZHJvaWRwb2xpY2UuY29tL3NhbXN1bmctdW5wYWNrZWQtanVseS1jb3VudGRvd24v0gEA?oc=5" target="_blank">The countdown begins for Samsung's July 10 Unpacked event</a>&nbsp;&nbsp;<font color="#6f6f6f">Android Police</font></li><li><a href="https://news.google.com/rss/articles/CBMifmh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcGhvbmVzL3NhbXN1bmctcGhvbmVzL3NhbXN1bmctZ2FsYXh5LXotZm9sZC02LXNwZWNzLWxlYWstc3VnZ2VzdHMtZm9sZGFibGUtZmFucy13aWxsLWJlLWRpc2FwcG9pbnRlZNIBAA?oc=5" target="_blank">Samsung Galaxy Z Fold 6 full specs leak — and it's bad news for foldable phone fans</a>&nbsp;&nbsp;<font color="#6f6f6f">Tom's Guide</font></li><li><a href="https://news.google.com/rss/articles/CBMigAFodHRwczovL3d3dy50ZWNocmFkYXIuY29tL3Bob25lcy9zYW1zdW5nLWdhbGF4eS1waG9uZXMvdGhlLWxhdW5jaC1kYXRlLWZvci1zYW1zdW5ncy1uZXctZm9sZGFibGVzLWFuZC13ZWFyYWJsZXMtaGFzLWxlYWtlZC1hZ2FpbtIBAA?oc=5" target="_blank">The launch date for Samsung's new foldables and wearables has leaked again</a>&nbsp;&nbsp;<font color="#6f6f6f">TechRadar</font></li><li><a href="https://news.google.com/rss/articles/CBMiW2h0dHBzOi8vd3d3LnRoZXZlcmdlLmNvbS8yMDI0LzYvMTQvMjQxNzg1MDkvc2Ftc3VuZy1nYWxheHktei1mb2xkLTYtcHJvdG90eXBlLWJveGllci1kZXNpZ27SAQA?oc=5" target="_blank">Samsung Galaxy Z Fold 6 prototype points to a squared-off design</a>&nbsp;&nbsp;<font color="#6f6f6f">The Verge</font></li><li><a href="https://news.google.com/rss/articles/CBMifmh0dHBzOi8vd3d3LnBob25lYXJlbmEuY29tL25ld3MvQmVzdC1nbG93LXVwLXRoaXMtc3VtbWVyLUdhbGF4eS1aLUZvbGQtNi1sb29rcy1hbWF6aW5nLW5leHQtdG8tRm9sZC01LWluLWxlYWtlZC12aWRlb19pZDE1OTQzN9IBAA?oc=5" target="_blank">Best glow-up this summer: Galaxy Z Fold 6 looks amazing next to Fold 5 in leaked video</a>&nbsp;&nbsp;<font color="#6f6f6f">PhoneArena</font></li></ol>";s:4:"guid";s:92:"CBMiPmh0dHBzOi8vd3d3LmFuZHJvaWRwb2xpY2UuY29tL3NhbXN1bmctdW5wYWNrZWQtanVseS1jb3VudGRvd24v0gEA";s:7:"pubDate";s:23:"Jun 14, 2024 6:22:00 PM";s:6:"source";s:14:"Android Police";}i:22;a:6:{s:5:"title";s:89:"Kate Middleton Gives Monarchy 'Best Day Since Coronation': Royal Source - The Daily Beast";s:4:"link";s:182:"https://news.google.com/rss/articles/CBMiYmh0dHBzOi8vd3d3LnRoZWRhaWx5YmVhc3QuY29tL2thdGUtbWlkZGxldG9uLWdpdmVzLW1vbmFyY2h5LWJlc3QtZGF5LXNpbmNlLWNvcm9uYXRpb24tcm95YWwtc291cmNl0gEA?oc=5";s:11:"description";s:2263:"<ol><li><a href="https://news.google.com/rss/articles/CBMiYmh0dHBzOi8vd3d3LnRoZWRhaWx5YmVhc3QuY29tL2thdGUtbWlkZGxldG9uLWdpdmVzLW1vbmFyY2h5LWJlc3QtZGF5LXNpbmNlLWNvcm9uYXRpb24tcm95YWwtc291cmNl0gEA?oc=5" target="_blank">Kate Middleton Gives Monarchy 'Best Day Since Coronation': Royal Source</a>&nbsp;&nbsp;<font color="#6f6f6f">The Daily Beast</font></li><li><a href="https://news.google.com/rss/articles/CBMieGh0dHBzOi8vd3d3LmNubi5jb20vdmlkZW9zL3dvcmxkLzIwMjQvMDYvMTUvcHJpbmNlc3Mta2F0ZS1maXJzdC1hcHBlYXJhbmNlLWNhbmNlci10cm9vcGluZy10aGUtY29sb3VyLW5yLWludGwtZGlndmlkLmNubtIBAA?oc=5" target="_blank">Video shows Princess of Wales exiting carriage in first appearance since cancer diagnosis</a>&nbsp;&nbsp;<font color="#6f6f6f">CNN</font></li><li><a href="https://news.google.com/rss/articles/CBMic2h0dHBzOi8vd3d3LmZveG5ld3MuY29tL2VudGVydGFpbm1lbnQva2F0ZS1taWRkbGV0b24tdWx0aW1hdGUtdHJvb3Blci1hcHBlYXJpbmctcm95YWwtY2VyZW1vbnktY2FuY2VyLWJhdHRsZS1leHBlcnTSAXdodHRwczovL3d3dy5mb3huZXdzLmNvbS9lbnRlcnRhaW5tZW50L2thdGUtbWlkZGxldG9uLXVsdGltYXRlLXRyb29wZXItYXBwZWFyaW5nLXJveWFsLWNlcmVtb255LWNhbmNlci1iYXR0bGUtZXhwZXJ0LmFtcA?oc=5" target="_blank">Kate Middleton is 'the ultimate trooper' for appearing at royal ceremony amid cancer battle: expert</a>&nbsp;&nbsp;<font color="#6f6f6f">Fox News</font></li><li><a href="https://news.google.com/rss/articles/CBMibWh0dHBzOi8vd3d3LmhhcnBlcnNiYXphYXIuY29tL2NlbGVicml0eS9sYXRlc3QvZzYxMTE1MjYwL2V2ZXJ5LXBob3RvLWthdGUtbWlkZGxldG9uLXRyb29waW5nLXRoZS1jb2xvdXItMjAyNC_SAQA?oc=5" target="_blank">See All the Photos of Princess Kate at Trooping the Colour 2024</a>&nbsp;&nbsp;<font color="#6f6f6f">Harper's BAZAAR</font></li><li><a href="https://news.google.com/rss/articles/CBMidWh0dHBzOi8vcGVvcGxlLmNvbS9rYXRlLW1pZGRsZXRvbi1hcHBlYXJzLWJ1Y2tpbmdoYW0tcGFsYWNlLWJhbGNvbnktdHJvb3BpbmctdGhlLWNvbG91ci1hbWlkLWNhbmNlci10cmVhdG1lbnQtODY2Mzc2NNIBAA?oc=5" target="_blank">Kate Middleton Joins Royal Family on Buckingham Palace Balcony at Trooping the Colour</a>&nbsp;&nbsp;<font color="#6f6f6f">PEOPLE</font></li></ol>";s:4:"guid";s:140:"CBMiYmh0dHBzOi8vd3d3LnRoZWRhaWx5YmVhc3QuY29tL2thdGUtbWlkZGxldG9uLWdpdmVzLW1vbmFyY2h5LWJlc3QtZGF5LXNpbmNlLWNvcm9uYXRpb24tcm95YWwtc291cmNl0gEA";s:7:"pubDate";s:23:"Jun 16, 2024 7:29:12 AM";s:6:"source";s:15:"The Daily Beast";}i:23;a:6:{s:5:"title";s:117:"Taylor Swift's ex Joe Alwyn breaks silence on split, says relationship was 'long, loving, fully committed' - Fox News";s:4:"link";s:409:"https://news.google.com/rss/articles/CBMigwFodHRwczovL3d3dy5mb3huZXdzLmNvbS9lbnRlcnRhaW5tZW50L3RheWxvci1zd2lmdHMtZXgtam9lLWFsd3luLWJyZWFrcy1zaWxlbmNlLXNwbGl0LXNheXMtcmVsYXRpb25zaGlwLWxvbmctbG92aW5nLWZ1bGx5LWNvbW1pdHRlZNIBhwFodHRwczovL3d3dy5mb3huZXdzLmNvbS9lbnRlcnRhaW5tZW50L3RheWxvci1zd2lmdHMtZXgtam9lLWFsd3luLWJyZWFrcy1zaWxlbmNlLXNwbGl0LXNheXMtcmVsYXRpb25zaGlwLWxvbmctbG92aW5nLWZ1bGx5LWNvbW1pdHRlZC5hbXA?oc=5";s:11:"description";s:2582:"<ol><li><a href="https://news.google.com/rss/articles/CBMigwFodHRwczovL3d3dy5mb3huZXdzLmNvbS9lbnRlcnRhaW5tZW50L3RheWxvci1zd2lmdHMtZXgtam9lLWFsd3luLWJyZWFrcy1zaWxlbmNlLXNwbGl0LXNheXMtcmVsYXRpb25zaGlwLWxvbmctbG92aW5nLWZ1bGx5LWNvbW1pdHRlZNIBhwFodHRwczovL3d3dy5mb3huZXdzLmNvbS9lbnRlcnRhaW5tZW50L3RheWxvci1zd2lmdHMtZXgtam9lLWFsd3luLWJyZWFrcy1zaWxlbmNlLXNwbGl0LXNheXMtcmVsYXRpb25zaGlwLWxvbmctbG92aW5nLWZ1bGx5LWNvbW1pdHRlZC5hbXA?oc=5" target="_blank">Taylor Swift's ex Joe Alwyn breaks silence on split, says relationship was 'long, loving, fully committed'</a>&nbsp;&nbsp;<font color="#6f6f6f">Fox News</font></li><li><a href="https://news.google.com/rss/articles/CBMiaWh0dHBzOi8vd3d3LnRoZXRpbWVzLmNvbS9jdWx0dXJlL2ZpbG0vYXJ0aWNsZS9qb2UtYWx3eW4taW50ZXJ2aWV3LWVuZC1yZWxhdGlvbnNoaXAtdGF5bG9yLXN3aWZ0LWZ6YjNrNWZmatIBAA?oc=5" target="_blank">Joe Alwyn: 'The end of a long relationship is a hard thing to navigate'</a>&nbsp;&nbsp;<font color="#6f6f6f">The Times</font></li><li><a href="https://news.google.com/rss/articles/CBMidGh0dHBzOi8vd3d3LmhvbGx5d29vZHJlcG9ydGVyLmNvbS9saWZlc3R5bGUvbGlmZXN0eWxlLW5ld3Mvam9lLWFsd3luLWJyZWFrcy1zaWxlbmNlLXRheWxvci1zd2lmdC1icmVha3VwLTEyMzU5MjM2MTIv0gF4aHR0cHM6Ly93d3cuaG9sbHl3b29kcmVwb3J0ZXIuY29tL2xpZmVzdHlsZS9saWZlc3R5bGUtbmV3cy9qb2UtYWx3eW4tYnJlYWtzLXNpbGVuY2UtdGF5bG9yLXN3aWZ0LWJyZWFrdXAtMTIzNTkyMzYxMi9hbXAv?oc=5" target="_blank">Joe Alwyn Breaks Silence on Taylor Swift Breakup: “A Hard Thing to Navigate”</a>&nbsp;&nbsp;<font color="#6f6f6f">Hollywood Reporter</font></li><li><a href="https://news.google.com/rss/articles/CBMiSWh0dHBzOi8vcGVvcGxlLmNvbS9qb2UtYWx3eW4tYnJlYWtzLXNpbGVuY2Utb24tdGF5bG9yLXN3aWZ0LXNwbGl0LTg2NjM5ODjSAQA?oc=5" target="_blank">Joe Alwyn Breaks Silence on Taylor Swift Split, Calls Their Relationship 'Long, Loving' and 'Fully Committed'</a>&nbsp;&nbsp;<font color="#6f6f6f">PEOPLE</font></li><li><a href="https://news.google.com/rss/articles/CBMiaWh0dHBzOi8vd3d3LnRoZW5ld3MuY29tLnBrL2xhdGVzdC8xMjAxMDE5LWpvZS1hbHd5bi1tYWtlcy1wZWFjZS13aXRoLXVuc2FpZC10cnV0aC1vZi10YXlsb3Itc3dpZnQtcm9tYW5jZdIBZmh0dHBzOi8vd3d3LnRoZW5ld3MuY29tLnBrL2FtcC8xMjAxMDE5LWpvZS1hbHd5bi1tYWtlcy1wZWFjZS13aXRoLXVuc2FpZC10cnV0aC1vZi10YXlsb3Itc3dpZnQtcm9tYW5jZQ?oc=5" target="_blank">Joe Alwyn makes peace with unsaid truth of Taylor Swift romance</a>&nbsp;&nbsp;<font color="#6f6f6f">The News International</font></li></ol>";s:4:"guid";s:367:"CBMigwFodHRwczovL3d3dy5mb3huZXdzLmNvbS9lbnRlcnRhaW5tZW50L3RheWxvci1zd2lmdHMtZXgtam9lLWFsd3luLWJyZWFrcy1zaWxlbmNlLXNwbGl0LXNheXMtcmVsYXRpb25zaGlwLWxvbmctbG92aW5nLWZ1bGx5LWNvbW1pdHRlZNIBhwFodHRwczovL3d3dy5mb3huZXdzLmNvbS9lbnRlcnRhaW5tZW50L3RheWxvci1zd2lmdHMtZXgtam9lLWFsd3luLWJyZWFrcy1zaWxlbmNlLXNwbGl0LXNheXMtcmVsYXRpb25zaGlwLWxvbmctbG92aW5nLWZ1bGx5LWNvbW1pdHRlZC5hbXA";s:7:"pubDate";s:23:"Jun 16, 2024 6:42:00 AM";s:6:"source";s:8:"Fox News";}i:24;a:6:{s:5:"title";s:122:"Box Office: ‘Inside Out 2’ Heading for Historic $140M-$150M U.S. Opening, a Near-Record for Pixar - Hollywood Reporter";s:4:"link";s:350:"https://news.google.com/rss/articles/CBMibmh0dHBzOi8vd3d3LmhvbGx5d29vZHJlcG9ydGVyLmNvbS9tb3ZpZXMvbW92aWUtbmV3cy9pbnNpZGUtb3V0LTItYm94LW9mZmljZS1oaXN0b3JpYy1waXhhci1vcGVuaW5nLTEyMzU5MjM1OTgv0gFyaHR0cHM6Ly93d3cuaG9sbHl3b29kcmVwb3J0ZXIuY29tL21vdmllcy9tb3ZpZS1uZXdzL2luc2lkZS1vdXQtMi1ib3gtb2ZmaWNlLWhpc3RvcmljLXBpeGFyLW9wZW5pbmctMTIzNTkyMzU5OC9hbXAv?oc=5";s:11:"description";s:2433:"<ol><li><a href="https://news.google.com/rss/articles/CBMibmh0dHBzOi8vd3d3LmhvbGx5d29vZHJlcG9ydGVyLmNvbS9tb3ZpZXMvbW92aWUtbmV3cy9pbnNpZGUtb3V0LTItYm94LW9mZmljZS1oaXN0b3JpYy1waXhhci1vcGVuaW5nLTEyMzU5MjM1OTgv0gFyaHR0cHM6Ly93d3cuaG9sbHl3b29kcmVwb3J0ZXIuY29tL21vdmllcy9tb3ZpZS1uZXdzL2luc2lkZS1vdXQtMi1ib3gtb2ZmaWNlLWhpc3RvcmljLXBpeGFyLW9wZW5pbmctMTIzNTkyMzU5OC9hbXAv?oc=5" target="_blank">Box Office: ‘Inside Out 2’ Heading for Historic $140M-$150M U.S. Opening, a Near-Record for Pixar</a>&nbsp;&nbsp;<font color="#6f6f6f">Hollywood Reporter</font></li><li><a href="https://news.google.com/rss/articles/CBMiQGh0dHBzOi8vZGVhZGxpbmUuY29tLzIwMjQvMDYvYm94LW9mZmljZS1pbnNpZGUtb3V0LTItMTIzNTk3MzQzMi_SAURodHRwczovL2RlYWRsaW5lLmNvbS8yMDI0LzA2L2JveC1vZmZpY2UtaW5zaWRlLW91dC0yLTEyMzU5NzM0MzIvYW1wLw?oc=5" target="_blank">‘Inside Out 2’ Turns Box Office Right Side Up With Second-Best Animated Pic Opening Of All-Time At $150M-$155M – Saturday PM Update</a>&nbsp;&nbsp;<font color="#6f6f6f">Deadline</font></li><li><a href="https://news.google.com/rss/articles/CBMiXmh0dHBzOi8vdmFyaWV0eS5jb20vMjAyNC9maWxtL2JveC1vZmZpY2UvYm94LW9mZmljZS1pbnNpZGUtb3V0LTItdGh1cnNkYXktcHJldmlld3MtMTIzNjAzNTY4Ni_SAWJodHRwczovL3ZhcmlldHkuY29tLzIwMjQvZmlsbS9ib3gtb2ZmaWNlL2JveC1vZmZpY2UtaW5zaWRlLW91dC0yLXRodXJzZGF5LXByZXZpZXdzLTEyMzYwMzU2ODYvYW1wLw?oc=5" target="_blank">Box Office: ‘Inside Out 2’ Launches to $13 Million in Previews, the Most of Any 2024 Movie</a>&nbsp;&nbsp;<font color="#6f6f6f">Variety</font></li><li><a href="https://news.google.com/rss/articles/CBMiiQFodHRwczovL3d3dy5mb3JiZXMuY29tL3NpdGVzL21vbmljYW1lcmN1cmkvMjAyNC8wNi8xNC9kb2VzLWluc2lkZS1vdXQtMi1oYXZlLWEtcG9zdC1jcmVkaXQtc2NlbmUtaGVyZXMtd2h5LXlvdS1zaG91bGQtc3RheS1pbi15b3VyLXNlYXRzL9IBAA?oc=5" target="_blank">Does 'Inside Out 2' Have A Post-Credits Scene? Here's Why You Should Stay In Your Seats</a>&nbsp;&nbsp;<font color="#6f6f6f">Forbes</font></li><li><a href="https://news.google.com/rss/articles/CBMiRmh0dHBzOi8vd3d3Lm55dGltZXMuY29tLzIwMjQvMDYvMTQvd2VsbC9taW5kL2luc2lkZS1vdXQtMi1hbnhpZXR5Lmh0bWzSAQA?oc=5" target="_blank">What 'Inside Out 2' Teaches Us About Anxiety</a>&nbsp;&nbsp;<font color="#6f6f6f">The New York Times</font></li></ol>";s:4:"guid";s:308:"CBMibmh0dHBzOi8vd3d3LmhvbGx5d29vZHJlcG9ydGVyLmNvbS9tb3ZpZXMvbW92aWUtbmV3cy9pbnNpZGUtb3V0LTItYm94LW9mZmljZS1oaXN0b3JpYy1waXhhci1vcGVuaW5nLTEyMzU5MjM1OTgv0gFyaHR0cHM6Ly93d3cuaG9sbHl3b29kcmVwb3J0ZXIuY29tL21vdmllcy9tb3ZpZS1uZXdzL2luc2lkZS1vdXQtMi1ib3gtb2ZmaWNlLWhpc3RvcmljLXBpeGFyLW9wZW5pbmctMTIzNTkyMzU5OC9hbXAv";s:7:"pubDate";s:23:"Jun 15, 2024 4:18:45 PM";s:6:"source";s:18:"Hollywood Reporter";}i:25;a:6:{s:5:"title";s:60:"Your lookahead horoscope: June 16, 2024 - The Globe and Mail";s:4:"link";s:177:"https://news.google.com/rss/articles/CBMiXmh0dHBzOi8vd3d3LnRoZWdsb2JlYW5kbWFpbC5jb20vbGlmZS9ob3Jvc2NvcGVzL2FydGljbGUteW91ci1sb29rYWhlYWQtaG9yb3Njb3BlLWp1bmUtMTYtMjAyNC_SAQA?oc=5";s:11:"description";s:1878:"<ol><li><a href="https://news.google.com/rss/articles/CBMiXmh0dHBzOi8vd3d3LnRoZWdsb2JlYW5kbWFpbC5jb20vbGlmZS9ob3Jvc2NvcGVzL2FydGljbGUteW91ci1sb29rYWhlYWQtaG9yb3Njb3BlLWp1bmUtMTYtMjAyNC_SAQA?oc=5" target="_blank">Your lookahead horoscope: June 16, 2024</a>&nbsp;&nbsp;<font color="#6f6f6f">The Globe and Mail</font></li><li><a href="https://news.google.com/rss/articles/CBMiV2h0dHBzOi8vd3d3LnVzYXRvZGF5LmNvbS9zdG9yeS9saWZlL2hvcm9zY29wZXMvMjAyNC8wNi8xNi9ob3Jvc2NvcGVzLXRvZGF5Lzc0MTE2MTI1MDA3L9IBAA?oc=5" target="_blank">Horoscopes Today, June 16, 2024</a>&nbsp;&nbsp;<font color="#6f6f6f">USA TODAY</font></li><li><a href="https://news.google.com/rss/articles/CBMiR2h0dHBzOi8vd3d3LmRlbnZlcnBvc3QuY29tLzIwMjQvMDYvMTYvZGFpbHktaG9yb3Njb3BlLWZvci1qdW5lLTE2LTIwMjQv0gFLaHR0cHM6Ly93d3cuZGVudmVycG9zdC5jb20vMjAyNC8wNi8xNi9kYWlseS1ob3Jvc2NvcGUtZm9yLWp1bmUtMTYtMjAyNC9hbXAv?oc=5" target="_blank">Daily horoscope for June 16, 2024</a>&nbsp;&nbsp;<font color="#6f6f6f">The Denver Post</font></li><li><a href="https://news.google.com/rss/articles/CBMiR2h0dHBzOi8vd3d3LnZvZ3VlLmluL2hvcm9zY29wZS9jb2xsZWN0aW9uL2hvcm9zY29wZS10b2RheS1qdW5lLTE2LTIwMjQv0gEA?oc=5" target="_blank">Horoscope Today: June 16, 2024</a>&nbsp;&nbsp;<font color="#6f6f6f">VOGUE India</font></li><li><a href="https://news.google.com/rss/articles/CBMigAFodHRwczovL3d3dy5oaW5kdXN0YW50aW1lcy5jb20vYXN0cm9sb2d5L2hvcm9zY29wZS9ob3Jvc2NvcGUtdG9kYXktYXN0cm9sb2dpY2FsLXByZWRpY3Rpb24tZm9yLWp1bmUtMTYtMjAyNC0xMDE3MTg0NDc1Mjg5MjUuaHRtbNIBAA?oc=5" target="_blank">Horoscope Today: Astrological prediction for June 16, 2024 | Astrology</a>&nbsp;&nbsp;<font color="#6f6f6f">Hindustan Times</font></li></ol>";s:4:"guid";s:135:"CBMiXmh0dHBzOi8vd3d3LnRoZWdsb2JlYW5kbWFpbC5jb20vbGlmZS9ob3Jvc2NvcGVzL2FydGljbGUteW91ci1sb29rYWhlYWQtaG9yb3Njb3BlLWp1bmUtMTYtMjAyNC_SAQA";s:7:"pubDate";s:23:"Jun 16, 2024 4:00:00 AM";s:6:"source";s:18:"The Globe and Mail";}i:26;a:6:{s:5:"title";s:107:"Bryson DeChambeau takes control of US Open with glorious 67 as Rory McIlroy rues late bogeys - The Guardian";s:4:"link";s:444:"https://news.google.com/rss/articles/CBMikgFodHRwczovL3d3dy50aGVndWFyZGlhbi5jb20vc3BvcnQvYXJ0aWNsZS8yMDI0L2p1bi8xNi9icnlzb24tZGVjaGFtYmVhdS10YWtlcy1jb250cm9sLW9mLXVzLW9wZW4td2l0aC1nbG9yaW91cy02Ny1hcy1yb3J5LW1jaWxyb3ktcnVlcy1sYXRlLWJvZ2V5c9IBkgFodHRwczovL2FtcC50aGVndWFyZGlhbi5jb20vc3BvcnQvYXJ0aWNsZS8yMDI0L2p1bi8xNi9icnlzb24tZGVjaGFtYmVhdS10YWtlcy1jb250cm9sLW9mLXVzLW9wZW4td2l0aC1nbG9yaW91cy02Ny1hcy1yb3J5LW1jaWxyb3ktcnVlcy1sYXRlLWJvZ2V5cw?oc=5";s:11:"description";s:2503:"<ol><li><a href="https://news.google.com/rss/articles/CBMikgFodHRwczovL3d3dy50aGVndWFyZGlhbi5jb20vc3BvcnQvYXJ0aWNsZS8yMDI0L2p1bi8xNi9icnlzb24tZGVjaGFtYmVhdS10YWtlcy1jb250cm9sLW9mLXVzLW9wZW4td2l0aC1nbG9yaW91cy02Ny1hcy1yb3J5LW1jaWxyb3ktcnVlcy1sYXRlLWJvZ2V5c9IBkgFodHRwczovL2FtcC50aGVndWFyZGlhbi5jb20vc3BvcnQvYXJ0aWNsZS8yMDI0L2p1bi8xNi9icnlzb24tZGVjaGFtYmVhdS10YWtlcy1jb250cm9sLW9mLXVzLW9wZW4td2l0aC1nbG9yaW91cy02Ny1hcy1yb3J5LW1jaWxyb3ktcnVlcy1sYXRlLWJvZ2V5cw?oc=5" target="_blank">Bryson DeChambeau takes control of US Open with glorious 67 as Rory McIlroy rues late bogeys</a>&nbsp;&nbsp;<font color="#6f6f6f">The Guardian</font></li><li><a href="https://news.google.com/rss/articles/CBMiQGh0dHBzOi8vZ29sZi5jb20vbmV3cy91cy1vcGVuLWJyeXNvbi1kZWNoYW1iZWF1LWhhcy1hbHJlYWR5LXdvbi_SAUBodHRwczovL2dvbGYuY29tL25ld3MvdXMtb3Blbi1icnlzb24tZGVjaGFtYmVhdS1oYXMtYWxyZWFkeS13b24v?oc=5" target="_blank">The U.S. Open isn’t over, but Bryson DeChambeau has already won it</a>&nbsp;&nbsp;<font color="#6f6f6f">Golf.com</font></li><li><a href="https://news.google.com/rss/articles/CBMiYWh0dHBzOi8vd3d3LmVzcG4uY29tL2dvbGYvc3RvcnkvXy9pZC80MDM1OTY5Ny9icnlzb24tZGVjaGFtYmVhdS1maWdodHMtaGlwLWluanVyeS0zLXNob3RzLXVzLW9wZW7SAQA?oc=5" target="_blank">Bryson DeChambeau fights hip injury, up 3 shots at U.S. Open</a>&nbsp;&nbsp;<font color="#6f6f6f">ESPN</font></li><li><a href="https://news.google.com/rss/articles/CBMijgFodHRwczovL3d3dy5jYnNzcG9ydHMuY29tL2dvbGYvbmV3cy8yMDI0LXUtcy1vcGVuLWxlYWRlcmJvYXJkLWJyeXNvbi1kZWNoYW1iZWF1LXNjb3Jlcy1zaXgtYmlyZGllcy10by1vcGVuLXRocmVlLXNob3QtbGVhZC1hZnRlci1yb3VuZC0zL2xpdmUv0gGSAWh0dHBzOi8vd3d3LmNic3Nwb3J0cy5jb20vZ29sZi9uZXdzLzIwMjQtdS1zLW9wZW4tbGVhZGVyYm9hcmQtYnJ5c29uLWRlY2hhbWJlYXUtc2NvcmVzLXNpeC1iaXJkaWVzLXRvLW9wZW4tdGhyZWUtc2hvdC1sZWFkLWFmdGVyLXJvdW5kLTMvbGl2ZS9hbXAv?oc=5" target="_blank">2024 U.S. Open leaderboard: Bryson DeChambeau scores six birdies to open three-shot lead after Round 3</a>&nbsp;&nbsp;<font color="#6f6f6f">CBS Sports</font></li><li><a href="https://news.google.com/rss/articles/CBMiPGh0dHBzOi8vd3d3LnNpLmNvbS9nb2xmL2NvbnRlbmRlcnMtc3VuZGF5LXUtcy1vcGVuLXBpbmVodXJzdNIBAA?oc=5" target="_blank">Here's a Look at the Contenders Heading to Sunday at the U.S. Open</a>&nbsp;&nbsp;<font color="#6f6f6f">Sports Illustrated</font></li></ol>";s:4:"guid";s:402:"CBMikgFodHRwczovL3d3dy50aGVndWFyZGlhbi5jb20vc3BvcnQvYXJ0aWNsZS8yMDI0L2p1bi8xNi9icnlzb24tZGVjaGFtYmVhdS10YWtlcy1jb250cm9sLW9mLXVzLW9wZW4td2l0aC1nbG9yaW91cy02Ny1hcy1yb3J5LW1jaWxyb3ktcnVlcy1sYXRlLWJvZ2V5c9IBkgFodHRwczovL2FtcC50aGVndWFyZGlhbi5jb20vc3BvcnQvYXJ0aWNsZS8yMDI0L2p1bi8xNi9icnlzb24tZGVjaGFtYmVhdS10YWtlcy1jb250cm9sLW9mLXVzLW9wZW4td2l0aC1nbG9yaW91cy02Ny1hcy1yb3J5LW1jaWxyb3ktcnVlcy1sYXRlLWJvZ2V5cw";s:7:"pubDate";s:23:"Jun 16, 2024 2:52:00 AM";s:6:"source";s:12:"The Guardian";}i:27;a:6:{s:5:"title";s:73:"NBA Finals Film Study: Mavericks stand up defensively in Game 4 - NBA.com";s:4:"link";s:129:"https://news.google.com/rss/articles/CBMiOmh0dHBzOi8vd3d3Lm5iYS5jb20vbmV3cy8yMDI0LW5iYS1maW5hbHMtZmlsbS1zdHVkeS1nYW1lLTTSAQA?oc=5";s:11:"description";s:2247:"<ol><li><a href="https://news.google.com/rss/articles/CBMiOmh0dHBzOi8vd3d3Lm5iYS5jb20vbmV3cy8yMDI0LW5iYS1maW5hbHMtZmlsbS1zdHVkeS1nYW1lLTTSAQA?oc=5" target="_blank">NBA Finals Film Study: Mavericks stand up defensively in Game 4</a>&nbsp;&nbsp;<font color="#6f6f6f">NBA.com</font></li><li><a href="https://news.google.com/rss/articles/CBMie2h0dHBzOi8vYmxlYWNoZXJyZXBvcnQuY29tL2FydGljbGVzLzEwMTI0OTIyLWphc29uLWtpZGQtbWF2cy13ZXJlLXJlYWR5LXRvLWdvLWZvci1maW5hbHMtZzQtY2VsdGljcy13ZXJlLXJlYWR5LXRvLWNlbGVicmF0ZdIBiwFodHRwczovL3N5bmRpY2F0aW9uLmJsZWFjaGVycmVwb3J0LmNvbS9hbXAvMTAxMjQ5MjItamFzb24ta2lkZC1tYXZzLXdlcmUtcmVhZHktdG8tZ28tZm9yLWZpbmFscy1nNC1jZWx0aWNzLXdlcmUtcmVhZHktdG8tY2VsZWJyYXRlLmFtcC5odG1s?oc=5" target="_blank">Jason Kidd: Mavs Were 'Ready to Go' for Finals G4, Celtics 'Were Ready to Celebrate'</a>&nbsp;&nbsp;<font color="#6f6f6f">Bleacher Report</font></li><li><a href="https://news.google.com/rss/articles/CBMiVmh0dHBzOi8vd3d3Lm5iYS5jb20vbmV3cy9sdWthLWRvbmNpYy1yZXNwb25kcy1nYW1lLTQtbWF2ZXJpY2tzLWNlbHRpY3MtMjAyNC1uYmEtZmluYWxz0gEA?oc=5" target="_blank">Luka Doncic keeps Mavericks alive with impressive Game 4 performance</a>&nbsp;&nbsp;<font color="#6f6f6f">NBA.com</font></li><li><a href="https://news.google.com/rss/articles/CBMihgFodHRwczovL3d3dy5hemNlbnRyYWwuY29tL3N0b3J5L3Nwb3J0cy9uYmEvMjAyNC8wNi8xNS9kYWxsYXMtbWF2ZXJpY2tzLWJvc3Rvbi1jZWx0aWNzLXBpY2tzLXByZWRpY3Rpb25zLW5iYS1maW5hbHMtZ2FtZS01Lzc0MTA2NzI3MDA3L9IBAA?oc=5" target="_blank">Dallas Mavericks vs Boston Celtics picks, predictions: Who wins Game 5 of 2024 NBA Finals?</a>&nbsp;&nbsp;<font color="#6f6f6f">The Arizona Republic</font></li><li><a href="https://news.google.com/rss/articles/CBMifWh0dHBzOi8vc3BvcnRzLnlhaG9vLmNvbS8yMDI0LW5iYS1maW5hbHMtY2VsdGljcy1zdHVubmVkLWluLWxvcHNpZGVkLWxvc3MtdG8tbWF2ZXJpY2tzLWluLWdhbWUtNC13aGF0LWhhcHBlbmVkLTEzNTUzNDYzNi5odG1s0gEA?oc=5" target="_blank">2024 NBA Finals: Celtics stunned in lopsided loss to Mavericks in Game 4. What happened?</a>&nbsp;&nbsp;<font color="#6f6f6f">Yahoo Sports</font></li></ol>";s:4:"guid";s:87:"CBMiOmh0dHBzOi8vd3d3Lm5iYS5jb20vbmV3cy8yMDI0LW5iYS1maW5hbHMtZmlsbS1zdHVkeS1nYW1lLTTSAQA";s:7:"pubDate";s:23:"Jun 16, 2024 1:40:22 AM";s:6:"source";s:7:"NBA.com";}i:28;a:6:{s:5:"title";s:121:"Gervonta Davis vs. Frank Martin fight results, highlights: 'Tank' lowers the boom for brutal knockout finish - CBS Sports";s:4:"link";s:452:"https://news.google.com/rss/articles/CBMikwFodHRwczovL3d3dy5jYnNzcG9ydHMuY29tL2JveGluZy9uZXdzL2dlcnZvbnRhLWRhdmlzLXZzLWZyYW5rLW1hcnRpbi1maWdodC1yZXN1bHRzLWhpZ2hsaWdodHMtdGFuay1sb3dlcnMtdGhlLWJvb20tZm9yLWJydXRhbC1rbm9ja291dC1maW5pc2gvbGl2ZS_SAZcBaHR0cHM6Ly93d3cuY2Jzc3BvcnRzLmNvbS9ib3hpbmcvbmV3cy9nZXJ2b250YS1kYXZpcy12cy1mcmFuay1tYXJ0aW4tZmlnaHQtcmVzdWx0cy1oaWdobGlnaHRzLXRhbmstbG93ZXJzLXRoZS1ib29tLWZvci1icnV0YWwta25vY2tvdXQtZmluaXNoL2xpdmUvYW1wLw?oc=5";s:11:"description";s:2524:"<ol><li><a href="https://news.google.com/rss/articles/CBMikwFodHRwczovL3d3dy5jYnNzcG9ydHMuY29tL2JveGluZy9uZXdzL2dlcnZvbnRhLWRhdmlzLXZzLWZyYW5rLW1hcnRpbi1maWdodC1yZXN1bHRzLWhpZ2hsaWdodHMtdGFuay1sb3dlcnMtdGhlLWJvb20tZm9yLWJydXRhbC1rbm9ja291dC1maW5pc2gvbGl2ZS_SAZcBaHR0cHM6Ly93d3cuY2Jzc3BvcnRzLmNvbS9ib3hpbmcvbmV3cy9nZXJ2b250YS1kYXZpcy12cy1mcmFuay1tYXJ0aW4tZmlnaHQtcmVzdWx0cy1oaWdobGlnaHRzLXRhbmstbG93ZXJzLXRoZS1ib29tLWZvci1icnV0YWwta25vY2tvdXQtZmluaXNoL2xpdmUvYW1wLw?oc=5" target="_blank">Gervonta Davis vs. Frank Martin fight results, highlights: 'Tank' lowers the boom for brutal knockout finish</a>&nbsp;&nbsp;<font color="#6f6f6f">CBS Sports</font></li><li><a href="https://news.google.com/rss/articles/CBMiaWh0dHBzOi8vd3d3LmVzcG4uY29tL2JveGluZy9zdG9yeS9fL2lkLzQwMzYxMjUzL2dlcnZvbnRhLWRhdmlzLWZsYXR0ZW5zLWZyYW5rLW1hcnRpbi04dGgtcm91bmQta28tdmljdG9yedIBAA?oc=5" target="_blank">Gervonta Davis flattens Frank Martin in 8th-round KO victory</a>&nbsp;&nbsp;<font color="#6f6f6f">ESPN</font></li><li><a href="https://news.google.com/rss/articles/CBMiUmh0dHBzOi8vd3d3Lndhc2hpbmd0b25wb3N0LmNvbS9zcG9ydHMvMjAyNC8wNi8xNS9nZXJ2b250YS1kYXZpcy1mcmFuay1tYXJ0aW4tbGl2ZS_SAQA?oc=5" target="_blank">Gervonta Davis knocks out Frank Martin to retain WBA lightweight title</a>&nbsp;&nbsp;<font color="#6f6f6f">The Washington Post</font></li><li><a href="https://news.google.com/rss/articles/CBMifWh0dHBzOi8vYmxlYWNoZXJyZXBvcnQuY29tL2FydGljbGVzLzEwMTI0Njc1LWdlcnZvbnRhLWRhdmlzLWtvcy1mcmFuay1tYXJ0aW4taW4tOHRoLXJvdW5kLW9mLWJveGluZy1maWdodC10by1yZXRhaW4td2JhLXRpdGxl0gGNAWh0dHBzOi8vc3luZGljYXRpb24uYmxlYWNoZXJyZXBvcnQuY29tL2FtcC8xMDEyNDY3NS1nZXJ2b250YS1kYXZpcy1rb3MtZnJhbmstbWFydGluLWluLTh0aC1yb3VuZC1vZi1ib3hpbmctZmlnaHQtdG8tcmV0YWluLXdiYS10aXRsZS5hbXAuaHRtbA?oc=5" target="_blank">Gervonta Davis KOs Frank Martin in 8th Round of Boxing Fight to Retain WBA Title</a>&nbsp;&nbsp;<font color="#6f6f6f">Bleacher Report</font></li><li><a href="https://news.google.com/rss/articles/CBMifmh0dHBzOi8vd3d3LnVzYXRvZGF5LmNvbS9zdG9yeS9zcG9ydHMvYm94aW5nLzIwMjQvMDYvMTUvZ2Vydm9udGEtZGF2aXMtdnMtZnJhbmstbWFydGluLWZpZ2h0LWxpdmUtdXBkYXRlcy1yZXN1bHRzLzc0MDQ3MTc1MDA3L9IBAA?oc=5" target="_blank">Gervonta Davis vs Frank Martin live results, fight highlights, updates</a>&nbsp;&nbsp;<font color="#6f6f6f">USA TODAY</font></li></ol>";s:4:"guid";s:410:"CBMikwFodHRwczovL3d3dy5jYnNzcG9ydHMuY29tL2JveGluZy9uZXdzL2dlcnZvbnRhLWRhdmlzLXZzLWZyYW5rLW1hcnRpbi1maWdodC1yZXN1bHRzLWhpZ2hsaWdodHMtdGFuay1sb3dlcnMtdGhlLWJvb20tZm9yLWJydXRhbC1rbm9ja291dC1maW5pc2gvbGl2ZS_SAZcBaHR0cHM6Ly93d3cuY2Jzc3BvcnRzLmNvbS9ib3hpbmcvbmV3cy9nZXJ2b250YS1kYXZpcy12cy1mcmFuay1tYXJ0aW4tZmlnaHQtcmVzdWx0cy1oaWdobGlnaHRzLXRhbmstbG93ZXJzLXRoZS1ib29tLWZvci1icnV0YWwta25vY2tvdXQtZmluaXNoL2xpdmUvYW1wLw";s:7:"pubDate";s:23:"Jun 16, 2024 4:54:53 AM";s:6:"source";s:10:"CBS Sports";}i:29;a:6:{s:5:"title";s:89:"Oilers evade Stanley Cup Final sweep in dominant scoring barrage over Panthers - Fox News";s:4:"link";s:340:"https://news.google.com/rss/articles/CBMiamh0dHBzOi8vd3d3LmZveG5ld3MuY29tL3Nwb3J0cy9vaWxlcnMtZXZhZGUtc3RhbmxleS1jdXAtZmluYWwtc3dlZXAtZG9taW5hbnQtc2NvcmluZy1iYXJyYWdlLW92ZXItcGFudGhlcnPSAW5odHRwczovL3d3dy5mb3huZXdzLmNvbS9zcG9ydHMvb2lsZXJzLWV2YWRlLXN0YW5sZXktY3VwLWZpbmFsLXN3ZWVwLWRvbWluYW50LXNjb3JpbmctYmFycmFnZS1vdmVyLXBhbnRoZXJzLmFtcA?oc=5";s:11:"description";s:2128:"<ol><li><a href="https://news.google.com/rss/articles/CBMiamh0dHBzOi8vd3d3LmZveG5ld3MuY29tL3Nwb3J0cy9vaWxlcnMtZXZhZGUtc3RhbmxleS1jdXAtZmluYWwtc3dlZXAtZG9taW5hbnQtc2NvcmluZy1iYXJyYWdlLW92ZXItcGFudGhlcnPSAW5odHRwczovL3d3dy5mb3huZXdzLmNvbS9zcG9ydHMvb2lsZXJzLWV2YWRlLXN0YW5sZXktY3VwLWZpbmFsLXN3ZWVwLWRvbWluYW50LXNjb3JpbmctYmFycmFnZS1vdmVyLXBhbnRoZXJzLmFtcA?oc=5" target="_blank">Oilers evade Stanley Cup Final sweep in dominant scoring barrage over Panthers</a>&nbsp;&nbsp;<font color="#6f6f6f">Fox News</font></li><li><a href="https://news.google.com/rss/articles/CBMiTmh0dHBzOi8vd3d3Lm5obC5jb20vbmV3cy9mbG9yaWRhLXBhbnRoZXJzLWVkbW9udG9uLW9pbGVycy1nYW1lLTQtcmVjYXAtanVuZS0xNdIBAA?oc=5" target="_blank">McDavid sets playoff assists record, Oilers roll past Panthers in Game 4 of Cup Final</a>&nbsp;&nbsp;<font color="#6f6f6f">NHL.com</font></li><li><a href="https://news.google.com/rss/articles/CBMiV2h0dHBzOi8vd3d3Lm55dGltZXMuY29tL2F0aGxldGljLzU1Njc0NjQvMjAyNC8wNi8xNi9wYW50aGVycy1vaWxlcnMtZ2FtZS00LXN0YW5sZXktY3VwL9IBAA?oc=5" target="_blank">Panthers unable to find answer for Oilers in lopsided Game 4 loss, look to 'bounce back'</a>&nbsp;&nbsp;<font color="#6f6f6f">The New York Times</font></li><li><a href="https://news.google.com/rss/articles/CBMiWGh0dHBzOi8vYXBuZXdzLmNvbS9hcnRpY2xlL3NlcmdlaS1ib2Jyb3Zza3ktc3RhbmxleS1jdXAtMGNkNmZjMWYxMjJkOTRiZmE4OWU4YWExNmRhYjQ1YzHSAQA?oc=5" target="_blank">Panthers' Sergei Bobrovsky gets pulled after allowing 5 goals in Stanley Cup Final Game 4</a>&nbsp;&nbsp;<font color="#6f6f6f">The Associated Press</font></li><li><a href="https://news.google.com/rss/articles/CBMibmh0dHBzOi8vd3d3LmVzcG4uY29tL25obC9zdG9yeS9fL2lkLzQwMzYwMTc0L25obC1wbGF5b2Zmcy0yMDI0LXN0YW5sZXktY3VwLWZpbmFsLXBhbnRoZXJzLW9pbGVycy1nYW1lLTQtZ3JhZGVz0gEA?oc=5" target="_blank">Panthers-Oilers Game 4 takeaways, early look at Game 5</a>&nbsp;&nbsp;<font color="#6f6f6f">ESPN</font></li></ol>";s:4:"guid";s:298:"CBMiamh0dHBzOi8vd3d3LmZveG5ld3MuY29tL3Nwb3J0cy9vaWxlcnMtZXZhZGUtc3RhbmxleS1jdXAtZmluYWwtc3dlZXAtZG9taW5hbnQtc2NvcmluZy1iYXJyYWdlLW92ZXItcGFudGhlcnPSAW5odHRwczovL3d3dy5mb3huZXdzLmNvbS9zcG9ydHMvb2lsZXJzLWV2YWRlLXN0YW5sZXktY3VwLWZpbmFsLXN3ZWVwLWRvbWluYW50LXNjb3JpbmctYmFycmFnZS1vdmVyLXBhbnRoZXJzLmFtcA";s:7:"pubDate";s:23:"Jun 16, 2024 4:39:00 AM";s:6:"source";s:8:"Fox News";}i:30;a:6:{s:5:"title";s:89:"NASA says Voyager 1 is fully back online months after it stopped making sense - The Verge";s:4:"link";s:168:"https://news.google.com/rss/articles/CBMiV2h0dHBzOi8vd3d3LnRoZXZlcmdlLmNvbS8yMDI0LzYvMTUvMjQxNzkyNjUvdm95YWdlci0xLWZ1bmN0aW9uaW5nLWFnYWluLW5hc2EtZGVlcC1zcGFjZdIBAA?oc=5";s:11:"description";s:2176:"<ol><li><a href="https://news.google.com/rss/articles/CBMiV2h0dHBzOi8vd3d3LnRoZXZlcmdlLmNvbS8yMDI0LzYvMTUvMjQxNzkyNjUvdm95YWdlci0xLWZ1bmN0aW9uaW5nLWFnYWluLW5hc2EtZGVlcC1zcGFjZdIBAA?oc=5" target="_blank">NASA says Voyager 1 is fully back online months after it stopped making sense</a>&nbsp;&nbsp;<font color="#6f6f6f">The Verge</font></li><li><a href="https://news.google.com/rss/articles/CBMiMWh0dHBzOi8vd3d3LnNwYWNlLmNvbS92b3lhZ2VyLTEtZnVsbHktb3BlcmF0aW9uYWzSAQA?oc=5" target="_blank">Voyager 1 is back online! NASA's most distant spacecraft returns data from all 4 instruments</a>&nbsp;&nbsp;<font color="#6f6f6f">Space.com</font></li><li><a href="https://news.google.com/rss/articles/CBMiSGh0dHBzOi8vd3d3LmZveHdlYXRoZXIuY29tL2VhcnRoLXNwYWNlL3NwYWNlY3JhZnQtb25lLW5hc2EtZGVsYXlzLWlzc3Vlc9IBTGh0dHBzOi8vd3d3LmZveHdlYXRoZXIuY29tL2VhcnRoLXNwYWNlL3NwYWNlY3JhZnQtb25lLW5hc2EtZGVsYXlzLWlzc3Vlcy5hbXA?oc=5" target="_blank">Houston, we no longer have a problem: NASA’s Voyager 1 back in operation</a>&nbsp;&nbsp;<font color="#6f6f6f">Fox Weather </font></li><li><a href="https://news.google.com/rss/articles/CBMiTGh0dHBzOi8vd3d3Lm55dGltZXMuY29tLzIwMjQvMDYvMTUvc2NpZW5jZS9zcGFjZS9uYXNhLXZveWFnZXItb25lLWZpeGVkLmh0bWzSAQA?oc=5" target="_blank">Voyager 1, After Major Malfunction, Is Back From the Brink, NASA Says</a>&nbsp;&nbsp;<font color="#6f6f6f">The New York Times</font></li><li><a href="https://news.google.com/rss/articles/CBMifWh0dHBzOi8vd3d3Lndpb25ld3MuY29tL3NjaWVuY2UvbmFzYXMtdm95YWdlci0xLXJlc3VtZXMtZnVsbC1vcHMtdHJhbnNtaXRzLXZhbHVhYmxlLWRhdGEtYWZ0ZXItb3ZlcmNvbWluZy1tYWxmdW5jdGlvbnMtNzMyMDA50gGBAWh0dHBzOi8vd3d3Lndpb25ld3MuY29tL3NjaWVuY2UvbmFzYXMtdm95YWdlci0xLXJlc3VtZXMtZnVsbC1vcHMtdHJhbnNtaXRzLXZhbHVhYmxlLWRhdGEtYWZ0ZXItb3ZlcmNvbWluZy1tYWxmdW5jdGlvbnMtNzMyMDA5L2FtcA?oc=5" target="_blank">NASA`s Voyager 1 resumes full ops, transmits valuable data after overcoming malfunction</a>&nbsp;&nbsp;<font color="#6f6f6f">WION</font></li></ol>";s:4:"guid";s:126:"CBMiV2h0dHBzOi8vd3d3LnRoZXZlcmdlLmNvbS8yMDI0LzYvMTUvMjQxNzkyNjUvdm95YWdlci0xLWZ1bmN0aW9uaW5nLWFnYWluLW5hc2EtZGVlcC1zcGFjZdIBAA";s:7:"pubDate";s:24:"Jun 15, 2024 10:25:38 PM";s:6:"source";s:9:"The Verge";}i:31;a:6:{s:5:"title";s:96:"Naked-Eye Nova Coming Soon // Starship Mars Sample Return // Frost on Olympus Mons - Fraser Cain";s:4:"link";s:66:"https://news.google.com/rss/articles/CCAiC3lQR0dpMS15QVVFmAEB?oc=5";s:11:"description";s:1895:"<ol><li><a href="https://news.google.com/rss/articles/CCAiC3lQR0dpMS15QVVFmAEB?oc=5" target="_blank">Naked-Eye Nova Coming Soon // Starship Mars Sample Return // Frost on Olympus Mons</a>&nbsp;&nbsp;<font color="#6f6f6f">Fraser Cain</font></li><li><a href="https://news.google.com/rss/articles/CBMiYmh0dHBzOi8vd3d3Lm5vcnRoamVyc2V5LmNvbS9zdG9yeS9uZXdzLzIwMjQvMDYvMTQvMjAyNC1ub3ZhLWR1ZS10by1hcHBlYXItdGhpcy1zdW1tZXIvNzQwNzIyMzMwMDcv0gEA?oc=5" target="_blank">2024 nova due this summer: Where in the sky to see it</a>&nbsp;&nbsp;<font color="#6f6f6f">NorthJersey.com</font></li><li><a href="https://news.google.com/rss/articles/CBMiXWh0dHBzOi8vd3d3LnVzYXRvZGF5LmNvbS9zdG9yeS9uZXdzL25hdGlvbi8yMDI0LzA2LzEzL3RjcmItc3Rhci1leHBsb3Npb24tdGltaW5nLzc0MDgyNDI0MDA3L9IBAA?oc=5" target="_blank">'Once-in-a-lifetime event': Explosion in space to look like new star, NASA says</a>&nbsp;&nbsp;<font color="#6f6f6f">USA TODAY</font></li><li><a href="https://news.google.com/rss/articles/CBMia2h0dHBzOi8vd3d3Lnd5ZmY0LmNvbS9hcnRpY2xlL25hc2EtcHJlZGljdHMtb25jZS1pbi1hLWxpZmV0aW1lLW5vdmEtZXhwbG9zaW9uLXNvbWV0aW1lLXRoaXMtc3VtbWVyLzYxMTE5MzU30gEA?oc=5" target="_blank">NASA predicts 'once-in-a-lifetime' summer nova explosion</a>&nbsp;&nbsp;<font color="#6f6f6f">WYFF4 Greenville</font></li><li><a href="https://news.google.com/rss/articles/CBMiSGh0dHBzOi8vd3d3LmNubi5jb20vMjAyNC8wNi8xMS9zY2llbmNlL25vdmEtbmV3LXN0YXItbmFzYS1zY24vaW5kZXguaHRtbNIBQWh0dHBzOi8vYW1wLmNubi5jb20vY25uLzIwMjQvMDYvMTEvc2NpZW5jZS9ub3ZhLW5ldy1zdGFyLW5hc2Etc2Nu?oc=5" target="_blank">‘Once-in-a-lifetime’ explosion will bring a new star to the night sky</a>&nbsp;&nbsp;<font color="#6f6f6f">CNN</font></li></ol>";s:4:"guid";s:24:"CCAiC3lQR0dpMS15QVVFmAEB";s:7:"pubDate";s:23:"Jun 14, 2024 7:04:02 PM";s:6:"source";s:11:"Fraser Cain";}i:32;a:6:{s:5:"title";s:73:"NASA rover discovers mysterious Mars boulder unlike any others - Mashable";s:4:"link";s:134:"https://news.google.com/rss/articles/CBMiPmh0dHBzOi8vbWFzaGFibGUuY29tL2FydGljbGUvbmFzYS1tYXJzLXJvdmVyLWJvdWxkZXItZGlzY292ZXJ50gEA?oc=5";s:11:"description";s:1823:"<ol><li><a href="https://news.google.com/rss/articles/CBMiPmh0dHBzOi8vbWFzaGFibGUuY29tL2FydGljbGUvbmFzYS1tYXJzLXJvdmVyLWJvdWxkZXItZGlzY292ZXJ50gEA?oc=5" target="_blank">NASA rover discovers mysterious Mars boulder unlike any others</a>&nbsp;&nbsp;<font color="#6f6f6f">Mashable</font></li><li><a href="https://news.google.com/rss/articles/CBMiS2h0dHBzOi8vZGFpbHlnYWxheHkuY29tLzIwMjQvMDYvbmFzYXMtcGVyc2V2ZXJhbmNlLWFuY2llbnQtc2VjcmV0cy1vbi1tYXJzL9IBAA?oc=5" target="_blank">NASA's Perseverance Uncovers Ancient Geological Secrets on Mars</a>&nbsp;&nbsp;<font color="#6f6f6f">The Daily Galaxy --Great Discoveries Channel</font></li><li><a href="https://news.google.com/rss/articles/CBMiZGh0dHBzOi8vd3d3LmV4dHJlbWV0ZWNoLmNvbS9zY2llbmNlL3BlcnNldmVyYW5jZS1tYXJzLXJvdmVyLXRha2VzLXNob3J0Y3V0LXRocm91Z2gtYW5jaWVudC1yaXZlci1iZWTSAQA?oc=5" target="_blank">Perseverance Mars Rover Takes Shortcut Through Ancient River Bed</a>&nbsp;&nbsp;<font color="#6f6f6f">ExtremeTech</font></li><li><a href="https://news.google.com/rss/articles/CBMidWh0dHBzOi8vd3d3Lm1zbi5jb20vZW4tdXMvbmV3cy90ZWNobm9sb2d5L3BlcnNldmVyYW5jZS1yb3Zlci1kZWxpdmVyZWQtYW1hemluZy12aWV3LW9mLWFuY2llbnQtbWFycy1yaXZlci92aS1CQjFvaWs5btIBAA?oc=5" target="_blank">Perseverance Rover Delivered Amazing View Of Ancient Mars River</a>&nbsp;&nbsp;<font color="#6f6f6f">MSN</font></li><li><a href="https://news.google.com/rss/articles/CBMiQWh0dHBzOi8vd3d3Lm1pcmFnZW5ld3MuY29tL2JyaWdodC1yb2Nrcy1hbmQtYnJpZ2h0LWFuZ2VsLTEyNTMwNzkv0gEA?oc=5" target="_blank">Bright Rocks And "Bright Angel"</a>&nbsp;&nbsp;<font color="#6f6f6f">Mirage News</font></li></ol>";s:4:"guid";s:92:"CBMiPmh0dHBzOi8vbWFzaGFibGUuY29tL2FydGljbGUvbmFzYS1tYXJzLXJvdmVyLWJvdWxkZXItZGlzY292ZXJ50gEA";s:7:"pubDate";s:23:"Jun 15, 2024 9:00:00 AM";s:6:"source";s:8:"Mashable";}i:33;a:6:{s:5:"title";s:127:"Flares and Echoes: Unveiling the Supermassive Black Hole at the Milky Way's Core - The Daily Galaxy --Great Discoveries Channel";s:4:"link";s:144:"https://news.google.com/rss/articles/CBMiRWh0dHBzOi8vZGFpbHlnYWxheHkuY29tLzIwMjQvMDYvZmxhcmVzLWFuZC1lY2hvZXMtbW9uc3Rlci1ibGFjay1ob2xlL9IBAA?oc=5";s:11:"description";s:1940:"<ol><li><a href="https://news.google.com/rss/articles/CBMiRWh0dHBzOi8vZGFpbHlnYWxheHkuY29tLzIwMjQvMDYvZmxhcmVzLWFuZC1lY2hvZXMtbW9uc3Rlci1ibGFjay1ob2xlL9IBAA?oc=5" target="_blank">Flares and Echoes: Unveiling the Supermassive Black Hole at the Milky Way's Core</a>&nbsp;&nbsp;<font color="#6f6f6f">The Daily Galaxy --Great Discoveries Channel</font></li><li><a href="https://news.google.com/rss/articles/CBMiRWh0dHBzOi8vd3d3LnNwYWNlLmNvbS9taWxreS13YXktc3VwZXJtYXNzaXZlLWJsYWNrLWhvbGUtZmxhcmVzLWVjaG9lc9IBAA?oc=5" target="_blank">NASA telescope spots 'cosmic fireworks' and faint echos from the Milky Way's supermassive black hole</a>&nbsp;&nbsp;<font color="#6f6f6f">Space.com</font></li><li><a href="https://news.google.com/rss/articles/CBMiYmh0dHBzOi8vd3d3LnVuaXZlcnNldG9kYXkuY29tLzE2NzM5Ny9lY2hvZXMtb2YtZmxhcmVzLWZyb20tdGhlLW1pbGt5LXdheXMtc3VwZXJtYXNzaXZlLWJsYWNrLWhvbGUv0gEA?oc=5" target="_blank">Echoes of Flares from the Milky Way's Supermassive Black Hole</a>&nbsp;&nbsp;<font color="#6f6f6f">Universe Today</font></li><li><a href="https://news.google.com/rss/articles/CBMidGh0dHBzOi8vbXN1dG9kYXkubXN1LmVkdS9uZXdzLzIwMjQvbXN1LXJlc2VhcmNoZXJzLXVudmVpbC1zZWNyZXRzLW9mLW91ci1nYWxheHktYmxhY2staG9sZS13aXRoLWZpcmV3b3Jrcy1hbmQtZWNob2Vz0gEA?oc=5" target="_blank">MSU researchers unveil secrets of our galaxy's black hole with 'fireworks' and 'echoes'</a>&nbsp;&nbsp;<font color="#6f6f6f">MSUToday</font></li><li><a href="https://news.google.com/rss/articles/CBMiW2h0dHBzOi8vd3d3Lm1zbi5jb20vZW4tdXMvdmlkZW8vd2F0Y2gvbWlsa3ktd2F5cy1lbm9ybW91cy1ibGFjay1ob2xlL3ZpLUJCMW9oWkU1P29jaWQ9aHBtc27SAQA?oc=5" target="_blank">Milky Way's Enormous Black Hole | Watch</a>&nbsp;&nbsp;<font color="#6f6f6f">MSN</font></li></ol>";s:4:"guid";s:102:"CBMiRWh0dHBzOi8vZGFpbHlnYWxheHkuY29tLzIwMjQvMDYvZmxhcmVzLWFuZC1lY2hvZXMtbW9uc3Rlci1ibGFjay1ob2xlL9IBAA";s:7:"pubDate";s:23:"Jun 15, 2024 8:00:06 PM";s:6:"source";s:44:"The Daily Galaxy --Great Discoveries Channel";}i:34;a:6:{s:5:"title";s:107:"Infectious bird flu survived milk pasteurization in lab tests, study finds. Here's what to know. - CBS News";s:4:"link";s:142:"https://news.google.com/rss/articles/CBMiRGh0dHBzOi8vd3d3LmNic25ld3MuY29tL25ld3MvYmlyZC1mbHUtbWlsay1wYXN0ZXVyaXphdGlvbi1uaWgtc3R1ZHkv0gEA?oc=5";s:11:"description";s:1912:"<ol><li><a href="https://news.google.com/rss/articles/CBMiRGh0dHBzOi8vd3d3LmNic25ld3MuY29tL25ld3MvYmlyZC1mbHUtbWlsay1wYXN0ZXVyaXphdGlvbi1uaWgtc3R1ZHkv0gEA?oc=5" target="_blank">Infectious bird flu survived milk pasteurization in lab tests, study finds. Here's what to know.</a>&nbsp;&nbsp;<font color="#6f6f6f">CBS News</font></li><li><a href="https://news.google.com/rss/articles/CBMiPGh0dHBzOi8vd3d3LmhlYWx0aGxpbmUuY29tL2hlYWx0aC1uZXdzL3Jhdy1taWxrLWhlYWx0aC1yaXNrc9IBAA?oc=5" target="_blank">Raw Milk: Why Interest in Unpasteurized Milk Is Growing</a>&nbsp;&nbsp;<font color="#6f6f6f">Healthline</font></li><li><a href="https://news.google.com/rss/articles/CBMiNmh0dHBzOi8vdGltZS5jb20vNjk4ODYwMy9iaXJkLWZsdS1taWxrLXBhc3RldXJpemF0aW9uL9IBAA?oc=5" target="_blank">Can Bird Flu Survive in Milk? | TIME</a>&nbsp;&nbsp;<font color="#6f6f6f">TIME</font></li><li><a href="https://news.google.com/rss/articles/CBMifGh0dHBzOi8vd3d3LmNpZHJhcC51bW4uZWR1L2F2aWFuLWluZmx1ZW56YS1iaXJkLWZsdS9uaWFpZC1leHBlcmltZW50cy1zaG93LWg1bjEtbGV2ZWxzLXBsdW1tZXQtYWZ0ZXItaGVhdC10cmVhdG1lbnQtbm90LXplcm_SAQA?oc=5" target="_blank">NIAID experiments show H5N1 levels plummet after heat treatment, but not to zero in some cases</a>&nbsp;&nbsp;<font color="#6f6f6f">University of Minnesota Twin Cities</font></li><li><a href="https://news.google.com/rss/articles/CBMiiQFodHRwczovL3d3dy5yZXV0ZXJzLmNvbS9idXNpbmVzcy9oZWFsdGhjYXJlLXBoYXJtYWNldXRpY2Fscy9wYXN0ZXVyaXphdGlvbi1tYXktbm90LWNsZWFyLWJpcmQtZmx1LXZpcnVzLWhlYXZpbHktaW5mZWN0ZWQtbWlsay0yMDI0LTA2LTE0L9IBAA?oc=5" target="_blank">Pasteurization may not clear bird flu virus from heavily infected milk</a>&nbsp;&nbsp;<font color="#6f6f6f">Reuters</font></li></ol>";s:4:"guid";s:100:"CBMiRGh0dHBzOi8vd3d3LmNic25ld3MuY29tL25ld3MvYmlyZC1mbHUtbWlsay1wYXN0ZXVyaXphdGlvbi1uaWgtc3R1ZHkv0gEA";s:7:"pubDate";s:23:"Jun 14, 2024 6:59:06 PM";s:6:"source";s:8:"CBS News";}i:35;a:6:{s:5:"title";s:57:"Former CDC director predicts bird flu pandemic - The Hill";s:4:"link";s:305:"https://news.google.com/rss/articles/CBMiXWh0dHBzOi8vdGhlaGlsbC5jb20vcG9saWN5L2hlYWx0aGNhcmUvNDcyMzc1My1mb3JtZXItY2RjLWRpcmVjdG9yLXByZWRpY3RzLWJpcmQtZmx1LXBhbmRlbWljL9IBYWh0dHBzOi8vdGhlaGlsbC5jb20vcG9saWN5L2hlYWx0aGNhcmUvNDcyMzc1My1mb3JtZXItY2RjLWRpcmVjdG9yLXByZWRpY3RzLWJpcmQtZmx1LXBhbmRlbWljL2FtcC8?oc=5";s:11:"description";s:2255:"<ol><li><a href="https://news.google.com/rss/articles/CBMiXWh0dHBzOi8vdGhlaGlsbC5jb20vcG9saWN5L2hlYWx0aGNhcmUvNDcyMzc1My1mb3JtZXItY2RjLWRpcmVjdG9yLXByZWRpY3RzLWJpcmQtZmx1LXBhbmRlbWljL9IBYWh0dHBzOi8vdGhlaGlsbC5jb20vcG9saWN5L2hlYWx0aGNhcmUvNDcyMzc1My1mb3JtZXItY2RjLWRpcmVjdG9yLXByZWRpY3RzLWJpcmQtZmx1LXBhbmRlbWljL2FtcC8?oc=5" target="_blank">Former CDC director predicts bird flu pandemic</a>&nbsp;&nbsp;<font color="#6f6f6f">The Hill</font></li><li><a href="https://news.google.com/rss/articles/CBMidGh0dHBzOi8vd3d3LnNjaWVudGlmaWNhbWVyaWNhbi5jb20vYXJ0aWNsZS90aGUtZGFpcnktaW5kdXN0cnktbXVzdC1hY3QtZmFzdGVyLXRvLWtlZXAtaDVuMS1iaXJkLWZsdS1mcm9tLXN0YXJ0aW5nLWEv0gEA?oc=5" target="_blank">The Dairy Industry Must Act Faster to Keep H5N1 Bird Flu from Starting a Human Epidemic</a>&nbsp;&nbsp;<font color="#6f6f6f">Scientific American</font></li><li><a href="https://news.google.com/rss/articles/CBMiUmh0dHBzOi8vd3d3LndsbnMuY29tL25ld3MvbWVldC10aGUtbXN1LWxhYi10ZWFtLW9uLWZyb250bGluZS1vZi1iaXJkLWZsdS1vdXRicmVhay_SAVZodHRwczovL3d3dy53bG5zLmNvbS9uZXdzL21lZXQtdGhlLW1zdS1sYWItdGVhbS1vbi1mcm9udGxpbmUtb2YtYmlyZC1mbHUtb3V0YnJlYWsvYW1wLw?oc=5" target="_blank">Meet the MSU lab team on frontline of bird flu outbreak</a>&nbsp;&nbsp;<font color="#6f6f6f">WLNS</font></li><li><a href="https://news.google.com/rss/articles/CBMilAFodHRwczovL3d3dy5kZXNtb2luZXNyZWdpc3Rlci5jb20vc3RvcnkvbW9uZXkvYWdyaWN1bHR1cmUvMjAyNC8wNi8xNC9pb3dhLWhhcy1oYWQtZml2ZS1iaXJkLWZsdS1vdXRicmVha3MtaW4tZGFpcnktaGVyZHMtaW4tanVuZS1zby1mYXIvNzQxMDI4NjkwMDcv0gEA?oc=5" target="_blank">Iowa has had five bird flu outbreaks in dairy herds in June so far</a>&nbsp;&nbsp;<font color="#6f6f6f">Des Moines Register</font></li><li><a href="https://news.google.com/rss/articles/CBMiXWh0dHBzOi8vd3d3LmNubi5jb20vYXVkaW8vcG9kY2FzdHMvY2hhc2luZy1saWZlL2VwaXNvZGVzL2U1MjY1YzI4LThlZmEtMTFlZS1hZTljLTQ3NDdlZGM1ODNhN9IBAA?oc=5" target="_blank">Are We Prepared for Bird Flu? - Chasing Life with Dr. Sanjay Gupta - Podcast on CNN Audio</a>&nbsp;&nbsp;<font color="#6f6f6f">CNN</font></li></ol>";s:4:"guid";s:263:"CBMiXWh0dHBzOi8vdGhlaGlsbC5jb20vcG9saWN5L2hlYWx0aGNhcmUvNDcyMzc1My1mb3JtZXItY2RjLWRpcmVjdG9yLXByZWRpY3RzLWJpcmQtZmx1LXBhbmRlbWljL9IBYWh0dHBzOi8vdGhlaGlsbC5jb20vcG9saWN5L2hlYWx0aGNhcmUvNDcyMzc1My1mb3JtZXItY2RjLWRpcmVjdG9yLXByZWRpY3RzLWJpcmQtZmx1LXBhbmRlbWljL2FtcC8";s:7:"pubDate";s:23:"Jun 15, 2024 1:43:00 PM";s:6:"source";s:8:"The Hill";}i:36;a:6:{s:5:"title";s:128:"A rare flesh-eating bacteria with a 'terrifying' mortality rate that can kill people in 48 hours is spreading in Japan - Fortune";s:4:"link";s:214:"https://news.google.com/rss/articles/CBMiemh0dHBzOi8vZm9ydHVuZS5jb20vMjAyNC8wNi8xNS9mbGVzaC1lYXRpbmctYmFjdGVyaWEtdGVycmlmeWluZy1tb3J0YWxpdHktcmF0ZS1ncm91cC1hLXN0cmVwdG9jb2NjdXMtc2hvY2stc3luZHJvbWUtamFwYW4v0gEA?oc=5";s:11:"description";s:2512:"<ol><li><a href="https://news.google.com/rss/articles/CBMiemh0dHBzOi8vZm9ydHVuZS5jb20vMjAyNC8wNi8xNS9mbGVzaC1lYXRpbmctYmFjdGVyaWEtdGVycmlmeWluZy1tb3J0YWxpdHktcmF0ZS1ncm91cC1hLXN0cmVwdG9jb2NjdXMtc2hvY2stc3luZHJvbWUtamFwYW4v0gEA?oc=5" target="_blank">A rare flesh-eating bacteria with a 'terrifying' mortality rate that can kill people in 48 hours is spreading in Japan</a>&nbsp;&nbsp;<font color="#6f6f6f">Fortune</font></li><li><a href="https://news.google.com/rss/articles/CBMic2h0dHBzOi8vd3d3LmJsb29tYmVyZy5jb20vbmV3cy9hcnRpY2xlcy8yMDI0LTA2LTE1L2ZsZXNoLWVhdGluZy1iYWN0ZXJpYS10aGF0LWNhbi1raWxsLWluLXR3by1kYXlzLXNwcmVhZHMtaW4tamFwYW7SAQA?oc=5" target="_blank">Flesh-Eating Bacteria That Can Kill in Two Days Spreads in Japan</a>&nbsp;&nbsp;<font color="#6f6f6f">Bloomberg</font></li><li><a href="https://news.google.com/rss/articles/CBMiggFodHRwczovL3d3dy5oaW5kdXN0YW50aW1lcy5jb20vd29ybGQtbmV3cy9yYXJlLWZsZXNoLWVhdGluZy1iYWN0ZXJpYS1zcHJlYWRzLWluLWphcGFuLWNhbi1raWxsLWluLTItZGF5cy1zdHNzLTEwMTcxODQ2Nzk2NTIzNy5odG1s0gEA?oc=5" target="_blank">Disease caused by rare flesh-eating bacteria that can kill in 2 days spreads in Japan. All you need to know</a>&nbsp;&nbsp;<font color="#6f6f6f">Hindustan Times</font></li><li><a href="https://news.google.com/rss/articles/CBMicmh0dHBzOi8vZW5nbGlzaC5reW9kb25ld3MubmV0L25ld3MvMjAyNC8wNi8xMjNkYWE0NWRiODEtZmxlc2gtZWF0aW5nLWJhY3Rlcml1bS1jYXNlcy1oaXQtcmVjb3JkLWhpZ2gtaW4tamFwYW4uaHRtbNIBAA?oc=5" target="_blank">"Flesh-eating" bacterium cases hit record high in Japan</a>&nbsp;&nbsp;<font color="#6f6f6f">Kyodo News Plus</font></li><li><a href="https://news.google.com/rss/articles/CBMirAFodHRwczovL3RpbWVzb2ZpbmRpYS5pbmRpYXRpbWVzLmNvbS93b3JsZC9yZXN0LW9mLXdvcmxkL3JhcmUtYmFjdGVyaWEtdGhhdC1jYW4ta2lsbC1pbi00OC1ob3Vycy1zcHJlYWRpbmctaW4tamFwYW4tYWxsLXlvdS1uZWVkLXRvLWtub3ctYWJvdXQtc3Rzcy9hcnRpY2xlc2hvdy8xMTEwMjM1NTQuY21z0gGwAWh0dHBzOi8vdGltZXNvZmluZGlhLmluZGlhdGltZXMuY29tL3dvcmxkL3Jlc3Qtb2Ytd29ybGQvcmFyZS1iYWN0ZXJpYS10aGF0LWNhbi1raWxsLWluLTQ4LWhvdXJzLXNwcmVhZGluZy1pbi1qYXBhbi1hbGwteW91LW5lZWQtdG8ta25vdy1hYm91dC1zdHNzL2FtcF9hcnRpY2xlc2hvdy8xMTEwMjM1NTQuY21z?oc=5" target="_blank">Rare bacteria that can kill in 48 hours spreading in Japan: All you need to know about STSS</a>&nbsp;&nbsp;<font color="#6f6f6f">The Times of India</font></li></ol>";s:4:"guid";s:172:"CBMiemh0dHBzOi8vZm9ydHVuZS5jb20vMjAyNC8wNi8xNS9mbGVzaC1lYXRpbmctYmFjdGVyaWEtdGVycmlmeWluZy1tb3J0YWxpdHktcmF0ZS1ncm91cC1hLXN0cmVwdG9jb2NjdXMtc2hvY2stc3luZHJvbWUtamFwYW4v0gEA";s:7:"pubDate";s:24:"Jun 15, 2024 10:51:00 PM";s:6:"source";s:7:"Fortune";}i:37;a:6:{s:5:"title";s:104:"Major health organization makes startling heart disease prediction: 'Near-perfect storm' - Yahoo! Voices";s:4:"link";s:162:"https://news.google.com/rss/articles/CBMiU2h0dHBzOi8vd3d3LnlhaG9vLmNvbS9uZXdzL21ham9yLWhlYWx0aC1vcmdhbml6YXRpb24tbWFrZXMtc3RhcnRsaW5nLTIxMDEyOTk4OS5odG1s0gEA?oc=5";s:11:"description";s:2469:"<ol><li><a href="https://news.google.com/rss/articles/CBMiU2h0dHBzOi8vd3d3LnlhaG9vLmNvbS9uZXdzL21ham9yLWhlYWx0aC1vcmdhbml6YXRpb24tbWFrZXMtc3RhcnRsaW5nLTIxMDEyOTk4OS5odG1s0gEA?oc=5" target="_blank">Major health organization makes startling heart disease prediction: 'Near-perfect storm'</a>&nbsp;&nbsp;<font color="#6f6f6f">Yahoo! Voices</font></li><li><a href="https://news.google.com/rss/articles/CBMidGh0dHBzOi8vd3d3LmZveG5ld3MuY29tL2hlYWx0aC9tYWpvci1oZWFsdGgtb3JnYW5pemF0aW9uLW1ha2VzLXN0YXJ0bGluZy1oZWFydC1kaXNlYXNlLXByZWRpY3Rpb24tbmVhci1wZXJmZWN0LXN0b3Jt0gF4aHR0cHM6Ly93d3cuZm94bmV3cy5jb20vaGVhbHRoL21ham9yLWhlYWx0aC1vcmdhbml6YXRpb24tbWFrZXMtc3RhcnRsaW5nLWhlYXJ0LWRpc2Vhc2UtcHJlZGljdGlvbi1uZWFyLXBlcmZlY3Qtc3Rvcm0uYW1w?oc=5" target="_blank">Major health organization makes startling heart disease prediction: ‘Near-perfect storm’</a>&nbsp;&nbsp;<font color="#6f6f6f">Fox News</font></li><li><a href="https://news.google.com/rss/articles/CBMidGh0dHBzOi8vZm94YmFsdGltb3JlLmNvbS9uZXdzL2Jtb3JlLWxpZmVzdHlsZS9uZXctcmVwb3J0LXNoaW5lcy1saWdodC1vbi1jb25jZXJuaW5nLXRyZW5kcy1pbi1jYXJkaW92YXNjdWxhci1kaXNlYXNl0gF4aHR0cHM6Ly9mb3hiYWx0aW1vcmUuY29tL2FtcC9uZXdzL2Jtb3JlLWxpZmVzdHlsZS9uZXctcmVwb3J0LXNoaW5lcy1saWdodC1vbi1jb25jZXJuaW5nLXRyZW5kcy1pbi1jYXJkaW92YXNjdWxhci1kaXNlYXNl?oc=5" target="_blank">New report shines light on concerning trends in cardiovascular disease</a>&nbsp;&nbsp;<font color="#6f6f6f">Fox Baltimore</font></li><li><a href="https://news.google.com/rss/articles/CBMiqgFodHRwczovL3d3dy5kY291cmllci5jb20vZmVhdHVyZXMvaGVhbHRoY2FyZS1mb2N1cy9oZWFydC1kaXNlYXNlLWFuZC1zdHJva2UtY291bGQtYWZmZWN0LWF0LWxlYXN0LTYwLW9mLWFkdWx0cy1pbi11LXMtYnkvYXJ0aWNsZV9hOGE3YjMzYS0yODIxLTExZWYtYjdmNS01YjY2MTViNjNmOTQuaHRtbNIBAA?oc=5" target="_blank">Heart disease and stroke could affect at least 60% of adults in U.S. by 2050</a>&nbsp;&nbsp;<font color="#6f6f6f">Prescott Daily Courier</font></li><li><a href="https://news.google.com/rss/articles/CBMiZWh0dHBzOi8vd3d3LndiZXoub3JnL3Jlc2V0LXdpdGgtc2FzaGEtYW5uLXNpbW9ucy8yMDI0LzA2LzExL3doYXQtdG8ta25vdy1hYm91dC1jYXJkaW92YXNjdWxhci1kaXNlYXNl0gEA?oc=5" target="_blank">Will more than half of Americans have cardiovascular disease by 2050?</a>&nbsp;&nbsp;<font color="#6f6f6f">WBEZ Chicago</font></li></ol>";s:4:"guid";s:120:"CBMiU2h0dHBzOi8vd3d3LnlhaG9vLmNvbS9uZXdzL21ham9yLWhlYWx0aC1vcmdhbml6YXRpb24tbWFrZXMtc3RhcnRsaW5nLTIxMDEyOTk4OS5odG1s0gEA";s:7:"pubDate";s:23:"Jun 14, 2024 9:01:29 PM";s:6:"source";s:13:"Yahoo! Voices";}}s:11:"items_count";i:38;} \ No newline at end of file diff --git a/lastrss/lastRSS.php b/lastrss/lastRSS.php new file mode 100644 index 0000000..2499d22 --- /dev/null +++ b/lastrss/lastRSS.php @@ -0,0 +1,220 @@ +cache_dir != '') { + $cache_file = $this->cache_dir . '/rss_' . md5($rss_url); + $timedif = @(time() - filemtime($cache_file)); + if ($timedif < $this->cache_time) { + // cached file is fresh enough, return cached array + $result = unserialize(join('', file($cache_file))); + // set 'cached' to 1 only if cached file is correct + if ($result) $result['cached'] = 1; + } else { + // cached file is too old, create new + $result = $this->Parse($rss_url); + $serialized = serialize($result); + if ($f = @fopen($cache_file, 'w')) { + fwrite ($f, $serialized, strlen($serialized)); + fclose($f); + } + if ($result) $result['cached'] = 0; + } + } + // If CACHE DISABLED >> load and parse the file directly + else { + $result = $this->Parse($rss_url); + if ($result) $result['cached'] = 0; + } + // return result + return $result; + } + + // ------------------------------------------------------------------- + // Modification of preg_match(); return trimed field with index 1 + // from 'classic' preg_match() array output + // ------------------------------------------------------------------- + function my_preg_match ($pattern, $subject) { + // start regullar expression + preg_match($pattern, $subject, $out); + + // if there is some result... process it and return it + if(isset($out[1])) { + // Process CDATA (if present) + if ($this->CDATA == 'content') { // Get CDATA content (without CDATA tag) + $out[1] = strtr($out[1], array(''', ']]>'=>'')); + } elseif ($this->CDATA == 'strip') { // Strip CDATA + $out[1] = strtr($out[1], array(''', ']]>'=>'')); + } + + // If code page is set convert character encoding to required + if ($this->cp != '') + //$out[1] = $this->MyConvertEncoding($this->rsscp, $this->cp, $out[1]); + $out[1] = iconv($this->rsscp, $this->cp.'//TRANSLIT', $out[1]); + // Return result + return trim($out[1]); + } else { + // if there is NO result, return empty string + return ''; + } + } + + // ------------------------------------------------------------------- + // Replace HTML entities &something; by real characters + // ------------------------------------------------------------------- + function unhtmlentities ($string) { + // Get HTML entities table + $trans_tbl = get_html_translation_table (HTML_ENTITIES, ENT_QUOTES); + // Flip keys<==>values + $trans_tbl = array_flip ($trans_tbl); + // Add support for ' entity (missing in HTML_ENTITIES) + $trans_tbl += array(''' => "'"); + // Replace entities by values + return strtr ($string, $trans_tbl); + } + + // ------------------------------------------------------------------- + // Parse() is private method used by Get() to load and parse RSS file. + // Don't use Parse() in your scripts - use Get($rss_file) instead. + // ------------------------------------------------------------------- + function Parse ($rss_url) { + // Open and load RSS file + if ($f = @fopen($rss_url, 'r')) { + $rss_content = ''; + while (!feof($f)) { + $rss_content .= fgets($f, 4096); + } + fclose($f); + + // Parse document encoding + $result['encoding'] = $this->my_preg_match("'encoding=[\'\"](.*?)[\'\"]'si", $rss_content); + // if document codepage is specified, use it + if ($result['encoding'] != '') + { $this->rsscp = $result['encoding']; } // This is used in my_preg_match() + // otherwise use the default codepage + else + { $this->rsscp = $this->default_cp; } // This is used in my_preg_match() + + // Parse CHANNEL info + preg_match("'(.*?)'si", $rss_content, $out_channel); + foreach($this->channeltags as $channeltag) + { + $temp = $this->my_preg_match("'<$channeltag.*?>(.*?)'si", $out_channel[1]); + if ($temp != '') $result[$channeltag] = $temp; // Set only if not empty + } + // If date_format is specified and lastBuildDate is valid + if ($this->date_format != '' && ($timestamp = strtotime($result['lastBuildDate'])) !==-1) { + // convert lastBuildDate to specified date format + $result['lastBuildDate'] = date($this->date_format, $timestamp); + } + + // Parse TEXTINPUT info + preg_match("']*[^/])>(.*?)'si", $rss_content, $out_textinfo); + // This a little strange regexp means: + // Look for tag with or without any attributes, but skip truncated version (it's not beggining tag) + if (isset($out_textinfo[2])) { + foreach($this->textinputtags as $textinputtag) { + $temp = $this->my_preg_match("'<$textinputtag.*?>(.*?)'si", $out_textinfo[2]); + if ($temp != '') $result['textinput_'.$textinputtag] = $temp; // Set only if not empty + } + } + // Parse IMAGE info + preg_match("'(.*?)'si", $rss_content, $out_imageinfo); + if (isset($out_imageinfo[1])) { + foreach($this->imagetags as $imagetag) { + $temp = $this->my_preg_match("'<$imagetag.*?>(.*?)'si", $out_imageinfo[1]); + if ($temp != '') $result['image_'.$imagetag] = $temp; // Set only if not empty + } + } + // Parse ITEMS + preg_match_all("'(.*?)'si", $rss_content, $items); + $rss_items = $items[2]; + $i = 0; + $result['items'] = array(); // create array even if there are no items + foreach($rss_items as $rss_item) { + // If number of items is lower then limit: Parse one item + if ($i < $this->items_limit || $this->items_limit == 0) { + foreach($this->itemtags as $itemtag) { + $temp = $this->my_preg_match("'<$itemtag.*?>(.*?)'si", $rss_item); + if ($temp != '') $result['items'][$i][$itemtag] = $temp; // Set only if not empty + } + // Strip HTML tags and other bullshit from DESCRIPTION + if ($this->stripHTML && $result['items'][$i]['description']) + $result['items'][$i]['description'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['description']))); + // Strip HTML tags and other bullshit from TITLE + if ($this->stripHTML && $result['items'][$i]['title']) + $result['items'][$i]['title'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['title']))); + // If date_format is specified and pubDate is valid + if ($this->date_format != '' && ($timestamp = strtotime($result['items'][$i]['pubDate'])) !==-1) { + // convert pubDate to specified date format + $result['items'][$i]['pubDate'] = date($this->date_format, $timestamp); + } + // Item counter + $i++; + } + } + + $result['items_count'] = $i; + return $result; + } + else // Error in opening return False + { + return False; + } + } +} + +?> \ No newline at end of file diff --git a/newspaper.html b/newspaper.html new file mode 100644 index 0000000..2d6a175 --- /dev/null +++ b/newspaper.html @@ -0,0 +1,75 @@ + + + + + recent changes + + + + + + + + + + + + +return to homepage +

    +
    +
    + + \ No newline at end of file diff --git a/play.html b/play.html new file mode 100644 index 0000000..f6ac34e --- /dev/null +++ b/play.html @@ -0,0 +1,106 @@ + + + + + +handle + + + + + + + + + +return to homepage + +
    +

    + +

    + +
    +
    +
    +
    +
      \ No newline at end of file diff --git a/rssticker.js b/rssticker.js new file mode 100644 index 0000000..1e8b7df --- /dev/null +++ b/rssticker.js @@ -0,0 +1,147 @@ +// ------------------------------------------------------------------- +// Advanced RSS Ticker (Ajax invocation) core file +// Author: Dynamic Drive (http://www.dynamicdrive.com) +// Updated May 2nd, 2016 for minor bug fix +// ------------------------------------------------------------------- + +//Relative URL syntax: +var lastrssbridgeurl="lastrss/bridge.php" + +//Absolute URL syntax. Uncomment below line if you wish to use an absolute reference: +//var lastrssbridgeurl="https://"+window.location.hostname+"/lastrss/bridge.php" + +////////////No need to edit beyond here////////////// + +function createAjaxObj(){ +var httprequest=false +if (window.XMLHttpRequest){ // if Mozilla, Safari etc +httprequest=new XMLHttpRequest() +if (httprequest.overrideMimeType) +httprequest.overrideMimeType('text/xml') +} +else if (window.ActiveXObject){ // if IE +try { +httprequest=new ActiveXObject("Msxml2.XMLHTTP"); +} +catch (e){ +try{ +httprequest=new ActiveXObject("Microsoft.XMLHTTP"); +} +catch (e){} +} +} +return httprequest +} + +// ------------------------------------------------------------------- +// Main RSS Ticker Object function +// rssticker_ajax(RSS_id, cachetime, divId, divClass, delay, optionallogicswitch) +// ------------------------------------------------------------------- + +function rssticker_ajax(RSS_id, cachetime, divId, divClass, delay, logicswitch){ +this.RSS_id=RSS_id //Array key indicating which RSS feed to display +this.cachetime=cachetime //Time to cache feed, in minutes. 0=no cache. +this.tickerid=divId //ID of ticker div to display information +this.delay=delay //Delay between msg change, in miliseconds. +this.logicswitch=(typeof logicswitch!="undefined")? logicswitch : "" +this.mouseoverBol=0 //Boolean to indicate whether mouse is currently over ticker (and pause it if it is) +this.pointer=0 +this.opacitysetting=0.2 //Opacity value when reset. Internal use. +this.title=[], this.link=[], this.description=[], this.pubdate=[] //Arrays to hold each component of an RSS item +this.ajaxobj=createAjaxObj() +document.write('
      Loading Newspaper...
      ') +if (window.getComputedStyle) //detect if moz-opacity is defined in external CSS for specified class +this.mozopacityisdefined=(window.getComputedStyle(document.getElementById(this.tickerid), "").getPropertyValue("-moz-opacity")==1)? 0 : 1 +this.getAjaxcontent() +} + +// ------------------------------------------------------------------- +// getAjaxcontent()- Makes asynchronous GET request to "bridge.php" with the supplied parameters +// ------------------------------------------------------------------- + +rssticker_ajax.prototype.getAjaxcontent=function(){ +if (this.ajaxobj){ +var instanceOfTicker=this +var parameters="id="+encodeURIComponent(this.RSS_id)+"&cachetime="+this.cachetime+"&bustcache="+new Date().getTime() +this.ajaxobj.onreadystatechange=function(){instanceOfTicker.initialize()} +this.ajaxobj.open('GET', lastrssbridgeurl+"?"+parameters, true) +this.ajaxobj.send(null) +} +} + +// ------------------------------------------------------------------- +// initialize()- Initialize ticker method. +// -Gets contents of RSS content and parse it using JavaScript DOM methods +// ------------------------------------------------------------------- + +rssticker_ajax.prototype.initialize=function(){ +if (this.ajaxobj.readyState == 4){ //if request of file completed +if (this.ajaxobj.status==200){ //if request was successful +var xmldata=this.ajaxobj.responseXML +if(xmldata.getElementsByTagName("item").length==0){ //if no elements found in returned content +document.getElementById(this.tickerid).innerHTML="Error fetching remote RSS feed!
      "+this.ajaxobj.responseText +return +} +var instanceOfTicker=this +this.feeditems=xmldata.getElementsByTagName("item") +//Cycle through RSS XML object and store each peice of an item inside a corresponding array +for (var i=0; i'+this.title[this.pointer]+'' +var description='
      '+this.description[this.pointer]+'
      ' +var feeddate='
      '+this.pubdate[this.pointer]+'
      ' +if (this.logicswitch.indexOf("description")==-1) description="" +if (this.logicswitch.indexOf("date")==-1) feeddate="" +var tickercontent=linktitle+feeddate+description //STRING FOR FEED CONTENTS +this.fadetransition("reset") //FADE EFFECT- RESET OPACITY +tickerDiv.innerHTML=tickercontent +this.fadetimer1=setInterval(function(){instanceOfTicker.fadetransition('up', 'fadetimer1')}, 100) //FADE EFFECT- PLAY IT +this.pointer=(this.pointer=1) +clearInterval(this[timerid]) +} \ No newline at end of file diff --git a/springy.html b/springy.html new file mode 100644 index 0000000..02e2794 --- /dev/null +++ b/springy.html @@ -0,0 +1,27 @@ + + + + +return to homepage + + + + + + + \ No newline at end of file diff --git a/springy.js b/springy.js new file mode 100644 index 0000000..0bf5ba4 --- /dev/null +++ b/springy.js @@ -0,0 +1,735 @@ +/** + * Springy v2.7.1 + * + * Copyright (c) 2010-2013 Dennis Hotson + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(function () { + return (root.returnExportsGlobal = factory()); + }); + } else if (typeof exports === 'object') { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like enviroments that support module.exports, + // like Node. + module.exports = factory(); + } else { + // Browser globals + root.Springy = factory(); + } +}(this, function() { + + var Springy = {}; + + var Graph = Springy.Graph = function() { + this.nodeSet = {}; + this.nodes = []; + this.edges = []; + this.adjacency = {}; + + this.nextNodeId = 0; + this.nextEdgeId = 0; + this.eventListeners = []; + }; + + var Node = Springy.Node = function(id, data) { + this.id = id; + this.data = (data !== undefined) ? data : {}; + + // Data fields used by layout algorithm in this file: + // this.data.mass + // Data used by default renderer in springyui.js + // this.data.label + }; + + var Edge = Springy.Edge = function(id, source, target, data) { + this.id = id; + this.source = source; + this.target = target; + this.data = (data !== undefined) ? data : {}; + + // Edge data field used by layout alorithm + // this.data.length + // this.data.type + }; + + Graph.prototype.addNode = function(node) { + if (!(node.id in this.nodeSet)) { + this.nodes.push(node); + } + + this.nodeSet[node.id] = node; + + this.notify(); + return node; + }; + + Graph.prototype.addNodes = function() { + // accepts variable number of arguments, where each argument + // is a string that becomes both node identifier and label + for (var i = 0; i < arguments.length; i++) { + var name = arguments[i]; + var node = new Node(name, {label:name}); + this.addNode(node); + } + }; + + Graph.prototype.addEdge = function(edge) { + var exists = false; + this.edges.forEach(function(e) { + if (edge.id === e.id) { exists = true; } + }); + + if (!exists) { + this.edges.push(edge); + } + + if (!(edge.source.id in this.adjacency)) { + this.adjacency[edge.source.id] = {}; + } + if (!(edge.target.id in this.adjacency[edge.source.id])) { + this.adjacency[edge.source.id][edge.target.id] = []; + } + + exists = false; + this.adjacency[edge.source.id][edge.target.id].forEach(function(e) { + if (edge.id === e.id) { exists = true; } + }); + + if (!exists) { + this.adjacency[edge.source.id][edge.target.id].push(edge); + } + + this.notify(); + return edge; + }; + + Graph.prototype.addEdges = function() { + // accepts variable number of arguments, where each argument + // is a triple [nodeid1, nodeid2, attributes] + for (var i = 0; i < arguments.length; i++) { + var e = arguments[i]; + var node1 = this.nodeSet[e[0]]; + if (node1 == undefined) { + throw new TypeError("invalid node name: " + e[0]); + } + var node2 = this.nodeSet[e[1]]; + if (node2 == undefined) { + throw new TypeError("invalid node name: " + e[1]); + } + var attr = e[2]; + + this.newEdge(node1, node2, attr); + } + }; + + Graph.prototype.newNode = function(data) { + var node = new Node(this.nextNodeId++, data); + this.addNode(node); + return node; + }; + + Graph.prototype.newEdge = function(source, target, data) { + var edge = new Edge(this.nextEdgeId++, source, target, data); + this.addEdge(edge); + return edge; + }; + + + // add nodes and edges from JSON object + Graph.prototype.loadJSON = function(json) { + /** + Springy's simple JSON format for graphs. + + historically, Springy uses separate lists + of nodes and edges: + + { + "nodes": [ + "center", + "left", + "right", + "up", + "satellite" + ], + "edges": [ + ["center", "left"], + ["center", "right"], + ["center", "up"] + ] + } + + **/ + // parse if a string is passed (EC5+ browsers) + if (typeof json == 'string' || json instanceof String) { + json = JSON.parse( json ); + } + + if ('nodes' in json || 'edges' in json) { + this.addNodes.apply(this, json['nodes']); + this.addEdges.apply(this, json['edges']); + } + } + + + // find the edges from node1 to node2 + Graph.prototype.getEdges = function(node1, node2) { + if (node1.id in this.adjacency + && node2.id in this.adjacency[node1.id]) { + return this.adjacency[node1.id][node2.id]; + } + + return []; + }; + + // remove a node and it's associated edges from the graph + Graph.prototype.removeNode = function(node) { + if (node.id in this.nodeSet) { + delete this.nodeSet[node.id]; + } + + for (var i = this.nodes.length - 1; i >= 0; i--) { + if (this.nodes[i].id === node.id) { + this.nodes.splice(i, 1); + } + } + + this.detachNode(node); + }; + + // removes edges associated with a given node + Graph.prototype.detachNode = function(node) { + var tmpEdges = this.edges.slice(); + tmpEdges.forEach(function(e) { + if (e.source.id === node.id || e.target.id === node.id) { + this.removeEdge(e); + } + }, this); + + this.notify(); + }; + + // remove a node and it's associated edges from the graph + Graph.prototype.removeEdge = function(edge) { + for (var i = this.edges.length - 1; i >= 0; i--) { + if (this.edges[i].id === edge.id) { + this.edges.splice(i, 1); + } + } + + for (var x in this.adjacency) { + for (var y in this.adjacency[x]) { + var edges = this.adjacency[x][y]; + + for (var j=edges.length - 1; j>=0; j--) { + if (this.adjacency[x][y][j].id === edge.id) { + this.adjacency[x][y].splice(j, 1); + } + } + + // Clean up empty edge arrays + if (this.adjacency[x][y].length == 0) { + delete this.adjacency[x][y]; + } + } + + // Clean up empty objects + if (isEmpty(this.adjacency[x])) { + delete this.adjacency[x]; + } + } + + this.notify(); + }; + + /* Merge a list of nodes and edges into the current graph. eg. + var o = { + nodes: [ + {id: 123, data: {type: 'user', userid: 123, displayname: 'aaa'}}, + {id: 234, data: {type: 'user', userid: 234, displayname: 'bbb'}} + ], + edges: [ + {from: 0, to: 1, type: 'submitted_design', directed: true, data: {weight: }} + ] + } + */ + Graph.prototype.merge = function(data) { + var nodes = []; + data.nodes.forEach(function(n) { + nodes.push(this.addNode(new Node(n.id, n.data))); + }, this); + + data.edges.forEach(function(e) { + var from = nodes[e.from]; + var to = nodes[e.to]; + + var id = (e.directed) + ? (id = e.type + "-" + from.id + "-" + to.id) + : (from.id < to.id) // normalise id for non-directed edges + ? e.type + "-" + from.id + "-" + to.id + : e.type + "-" + to.id + "-" + from.id; + + var edge = this.addEdge(new Edge(id, from, to, e.data)); + edge.data.type = e.type; + }, this); + }; + + Graph.prototype.filterNodes = function(fn) { + var tmpNodes = this.nodes.slice(); + tmpNodes.forEach(function(n) { + if (!fn(n)) { + this.removeNode(n); + } + }, this); + }; + + Graph.prototype.filterEdges = function(fn) { + var tmpEdges = this.edges.slice(); + tmpEdges.forEach(function(e) { + if (!fn(e)) { + this.removeEdge(e); + } + }, this); + }; + + + Graph.prototype.addGraphListener = function(obj) { + this.eventListeners.push(obj); + }; + + Graph.prototype.notify = function() { + this.eventListeners.forEach(function(obj){ + obj.graphChanged(); + }); + }; + + // ----------- + var Layout = Springy.Layout = {}; + Layout.ForceDirected = function(graph, stiffness, repulsion, damping, minEnergyThreshold, maxSpeed) { + this.graph = graph; + this.stiffness = stiffness; // spring stiffness constant + this.repulsion = repulsion; // repulsion constant + this.damping = damping; // velocity damping factor + this.minEnergyThreshold = minEnergyThreshold || 0.01; //threshold used to determine render stop + this.maxSpeed = maxSpeed || Infinity; // nodes aren't allowed to exceed this speed + + this.nodePoints = {}; // keep track of points associated with nodes + this.edgeSprings = {}; // keep track of springs associated with edges + }; + + Layout.ForceDirected.prototype.point = function(node) { + if (!(node.id in this.nodePoints)) { + var mass = (node.data.mass !== undefined) ? node.data.mass : 1.0; + this.nodePoints[node.id] = new Layout.ForceDirected.Point(Vector.random(), mass); + } + + return this.nodePoints[node.id]; + }; + + Layout.ForceDirected.prototype.spring = function(edge) { + if (!(edge.id in this.edgeSprings)) { + var length = (edge.data.length !== undefined) ? edge.data.length : 1.0; + + var existingSpring = false; + + var from = this.graph.getEdges(edge.source, edge.target); + from.forEach(function(e) { + if (existingSpring === false && e.id in this.edgeSprings) { + existingSpring = this.edgeSprings[e.id]; + } + }, this); + + if (existingSpring !== false) { + return new Layout.ForceDirected.Spring(existingSpring.point1, existingSpring.point2, 0.0, 0.0); + } + + var to = this.graph.getEdges(edge.target, edge.source); + from.forEach(function(e){ + if (existingSpring === false && e.id in this.edgeSprings) { + existingSpring = this.edgeSprings[e.id]; + } + }, this); + + if (existingSpring !== false) { + return new Layout.ForceDirected.Spring(existingSpring.point2, existingSpring.point1, 0.0, 0.0); + } + + this.edgeSprings[edge.id] = new Layout.ForceDirected.Spring( + this.point(edge.source), this.point(edge.target), length, this.stiffness + ); + } + + return this.edgeSprings[edge.id]; + }; + + // callback should accept two arguments: Node, Point + Layout.ForceDirected.prototype.eachNode = function(callback) { + var t = this; + this.graph.nodes.forEach(function(n){ + callback.call(t, n, t.point(n)); + }); + }; + + // callback should accept two arguments: Edge, Spring + Layout.ForceDirected.prototype.eachEdge = function(callback) { + var t = this; + this.graph.edges.forEach(function(e){ + callback.call(t, e, t.spring(e)); + }); + }; + + // callback should accept one argument: Spring + Layout.ForceDirected.prototype.eachSpring = function(callback) { + var t = this; + this.graph.edges.forEach(function(e){ + callback.call(t, t.spring(e)); + }); + }; + + + // Physics stuff + Layout.ForceDirected.prototype.applyCoulombsLaw = function() { + this.eachNode(function(n1, point1) { + this.eachNode(function(n2, point2) { + if (point1 !== point2) + { + var d = point1.p.subtract(point2.p); + var distance = d.magnitude() + 0.1; // avoid massive forces at small distances (and divide by zero) + var direction = d.normalise(); + + // apply force to each end point + point1.applyForce(direction.multiply(this.repulsion).divide(distance * distance * 0.5)); + point2.applyForce(direction.multiply(this.repulsion).divide(distance * distance * -0.5)); + } + }); + }); + }; + + Layout.ForceDirected.prototype.applyHookesLaw = function() { + this.eachSpring(function(spring){ + var d = spring.point2.p.subtract(spring.point1.p); // the direction of the spring + var displacement = spring.length - d.magnitude(); + var direction = d.normalise(); + + // apply force to each end point + spring.point1.applyForce(direction.multiply(spring.k * displacement * -0.5)); + spring.point2.applyForce(direction.multiply(spring.k * displacement * 0.5)); + }); + }; + + Layout.ForceDirected.prototype.attractToCentre = function() { + this.eachNode(function(node, point) { + var direction = point.p.multiply(-1.0); + point.applyForce(direction.multiply(this.repulsion / 50.0)); + }); + }; + + + Layout.ForceDirected.prototype.updateVelocity = function(timestep) { + this.eachNode(function(node, point) { + // Is this, along with updatePosition below, the only places that your + // integration code exist? + point.v = point.v.add(point.a.multiply(timestep)).multiply(this.damping); + if (point.v.magnitude() > this.maxSpeed) { + point.v = point.v.normalise().multiply(this.maxSpeed); + } + point.a = new Vector(0,0); + }); + }; + + Layout.ForceDirected.prototype.updatePosition = function(timestep) { + this.eachNode(function(node, point) { + // Same question as above; along with updateVelocity, is this all of + // your integration code? + point.p = point.p.add(point.v.multiply(timestep)); + }); + }; + + // Calculate the total kinetic energy of the system + Layout.ForceDirected.prototype.totalEnergy = function(timestep) { + var energy = 0.0; + this.eachNode(function(node, point) { + var speed = point.v.magnitude(); + energy += 0.5 * point.m * speed * speed; + }); + + return energy; + }; + + var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; // stolen from coffeescript, thanks jashkenas! ;-) + + Springy.requestAnimationFrame = __bind(this.requestAnimationFrame || + this.webkitRequestAnimationFrame || + this.mozRequestAnimationFrame || + this.oRequestAnimationFrame || + this.msRequestAnimationFrame || + (function(callback, element) { + this.setTimeout(callback, 10); + }), this); + + + /** + * Start simulation if it's not running already. + * In case it's running then the call is ignored, and none of the callbacks passed is ever executed. + */ + Layout.ForceDirected.prototype.start = function(render, onRenderStop, onRenderStart) { + var t = this; + + if (this._started) return; + this._started = true; + this._stop = false; + + if (onRenderStart !== undefined) { onRenderStart(); } + + Springy.requestAnimationFrame(function step() { + t.tick(0.03); + + if (render !== undefined) { + render(); + } + + // stop simulation when energy of the system goes below a threshold + if (t._stop || t.totalEnergy() < t.minEnergyThreshold) { + t._started = false; + if (onRenderStop !== undefined) { onRenderStop(); } + } else { + Springy.requestAnimationFrame(step); + } + }); + }; + + Layout.ForceDirected.prototype.stop = function() { + this._stop = true; + } + + Layout.ForceDirected.prototype.tick = function(timestep) { + this.applyCoulombsLaw(); + this.applyHookesLaw(); + this.attractToCentre(); + this.updateVelocity(timestep); + this.updatePosition(timestep); + }; + + // Find the nearest point to a particular position + Layout.ForceDirected.prototype.nearest = function(pos) { + var min = {node: null, point: null, distance: null}; + var t = this; + this.graph.nodes.forEach(function(n){ + var point = t.point(n); + var distance = point.p.subtract(pos).magnitude(); + + if (min.distance === null || distance < min.distance) { + min = {node: n, point: point, distance: distance}; + } + }); + + return min; + }; + + // returns [bottomleft, topright] + Layout.ForceDirected.prototype.getBoundingBox = function() { + var bottomleft = new Vector(-2,-2); + var topright = new Vector(2,2); + + this.eachNode(function(n, point) { + if (point.p.x < bottomleft.x) { + bottomleft.x = point.p.x; + } + if (point.p.y < bottomleft.y) { + bottomleft.y = point.p.y; + } + if (point.p.x > topright.x) { + topright.x = point.p.x; + } + if (point.p.y > topright.y) { + topright.y = point.p.y; + } + }); + + var padding = topright.subtract(bottomleft).multiply(0.07); // ~5% padding + + return {bottomleft: bottomleft.subtract(padding), topright: topright.add(padding)}; + }; + + + // Vector + var Vector = Springy.Vector = function(x, y) { + this.x = x; + this.y = y; + }; + + Vector.random = function() { + return new Vector(10.0 * (Math.random() - 0.5), 10.0 * (Math.random() - 0.5)); + }; + + Vector.prototype.add = function(v2) { + return new Vector(this.x + v2.x, this.y + v2.y); + }; + + Vector.prototype.subtract = function(v2) { + return new Vector(this.x - v2.x, this.y - v2.y); + }; + + Vector.prototype.multiply = function(n) { + return new Vector(this.x * n, this.y * n); + }; + + Vector.prototype.divide = function(n) { + return new Vector((this.x / n) || 0, (this.y / n) || 0); // Avoid divide by zero errors.. + }; + + Vector.prototype.magnitude = function() { + return Math.sqrt(this.x*this.x + this.y*this.y); + }; + + Vector.prototype.normal = function() { + return new Vector(-this.y, this.x); + }; + + Vector.prototype.normalise = function() { + return this.divide(this.magnitude()); + }; + + // Point + Layout.ForceDirected.Point = function(position, mass) { + this.p = position; // position + this.m = mass; // mass + this.v = new Vector(0, 0); // velocity + this.a = new Vector(0, 0); // acceleration + }; + + Layout.ForceDirected.Point.prototype.applyForce = function(force) { + this.a = this.a.add(force.divide(this.m)); + }; + + // Spring + Layout.ForceDirected.Spring = function(point1, point2, length, k) { + this.point1 = point1; + this.point2 = point2; + this.length = length; // spring length at rest + this.k = k; // spring constant (See Hooke's law) .. how stiff the spring is + }; + + // Layout.ForceDirected.Spring.prototype.distanceToPoint = function(point) + // { + // // hardcore vector arithmetic.. ohh yeah! + // // .. see http://stackoverflow.com/questions/849211/shortest-distance-between-a-point-and-a-line-segment/865080#865080 + // var n = this.point2.p.subtract(this.point1.p).normalise().normal(); + // var ac = point.p.subtract(this.point1.p); + // return Math.abs(ac.x * n.x + ac.y * n.y); + // }; + + /** + * Renderer handles the layout rendering loop + * @param onRenderStop optional callback function that gets executed whenever rendering stops. + * @param onRenderStart optional callback function that gets executed whenever rendering starts. + * @param onRenderFrame optional callback function that gets executed after each frame is rendered. + */ + var Renderer = Springy.Renderer = function(layout, clear, drawEdge, drawNode, onRenderStop, onRenderStart, onRenderFrame) { + this.layout = layout; + this.clear = clear; + this.drawEdge = drawEdge; + this.drawNode = drawNode; + this.onRenderStop = onRenderStop; + this.onRenderStart = onRenderStart; + this.onRenderFrame = onRenderFrame; + + this.layout.graph.addGraphListener(this); + } + + Renderer.prototype.graphChanged = function(e) { + this.start(); + }; + + /** + * Starts the simulation of the layout in use. + * + * Note that in case the algorithm is still or already running then the layout that's in use + * might silently ignore the call, and your optional done callback is never executed. + * At least the built-in ForceDirected layout behaves in this way. + * + * @param done An optional callback function that gets executed when the springy algorithm stops, + * either because it ended or because stop() was called. + */ + Renderer.prototype.start = function(done) { + var t = this; + this.layout.start(function render() { + t.clear(); + + t.layout.eachEdge(function(edge, spring) { + t.drawEdge(edge, spring.point1.p, spring.point2.p); + }); + + t.layout.eachNode(function(node, point) { + t.drawNode(node, point.p); + }); + + if (t.onRenderFrame !== undefined) { t.onRenderFrame(); } + }, this.onRenderStop, this.onRenderStart); + }; + + Renderer.prototype.stop = function() { + this.layout.stop(); + }; + + // Array.forEach implementation for IE support.. + //https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach + if ( !Array.prototype.forEach ) { + Array.prototype.forEach = function( callback, thisArg ) { + var T, k; + if ( this == null ) { + throw new TypeError( " this is null or not defined" ); + } + var O = Object(this); + var len = O.length >>> 0; // Hack to convert O.length to a UInt32 + if ( {}.toString.call(callback) != "[object Function]" ) { + throw new TypeError( callback + " is not a function" ); + } + if ( thisArg ) { + T = thisArg; + } + k = 0; + while( k < len ) { + var kValue; + if ( k in O ) { + kValue = O[ k ]; + callback.call( T, kValue, k, O ); + } + k++; + } + }; + } + + var isEmpty = function(obj) { + for (var k in obj) { + if (obj.hasOwnProperty(k)) { + return false; + } + } + return true; + }; + + return Springy; +})); diff --git a/springyui.js b/springyui.js new file mode 100755 index 0000000..acc35eb --- /dev/null +++ b/springyui.js @@ -0,0 +1,394 @@ +/** +Copyright (c) 2010 Dennis Hotson + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. +*/ + +(function() { + +jQuery.fn.springy = function(params) { + var graph = this.graph = params.graph || new Springy.Graph(); + var nodeFont = "16px Verdana, sans-serif"; + var edgeFont = "8px Verdana, sans-serif"; + var stiffness = params.stiffness || 400.0; + var repulsion = params.repulsion || 400.0; + var damping = params.damping || 0.5; + var minEnergyThreshold = params.minEnergyThreshold || 0.00001; + var nodeSelected = params.nodeSelected || null; + var nodeImages = {}; + var edgeLabelsUpright = true; + + var canvas = this[0]; + var ctx = canvas.getContext("2d"); + + var layout = this.layout = new Springy.Layout.ForceDirected(graph, stiffness, repulsion, damping, minEnergyThreshold); + + // calculate bounding box of graph layout.. with ease-in + var currentBB = layout.getBoundingBox(); + var targetBB = {bottomleft: new Springy.Vector(-2, -2), topright: new Springy.Vector(2, 2)}; + + // auto adjusting bounding box + Springy.requestAnimationFrame(function adjust() { + targetBB = layout.getBoundingBox(); + // current gets 20% closer to target every iteration + currentBB = { + bottomleft: currentBB.bottomleft.add( targetBB.bottomleft.subtract(currentBB.bottomleft) + .divide(10)), + topright: currentBB.topright.add( targetBB.topright.subtract(currentBB.topright) + .divide(10)) + }; + + Springy.requestAnimationFrame(adjust); + }); + + // convert to/from screen coordinates + var toScreen = function(p) { + var size = currentBB.topright.subtract(currentBB.bottomleft); + var sx = p.subtract(currentBB.bottomleft).divide(size.x).x * canvas.width; + var sy = p.subtract(currentBB.bottomleft).divide(size.y).y * canvas.height; + return new Springy.Vector(sx, sy); + }; + + var fromScreen = function(s) { + var size = currentBB.topright.subtract(currentBB.bottomleft); + var px = (s.x / canvas.width) * size.x + currentBB.bottomleft.x; + var py = (s.y / canvas.height) * size.y + currentBB.bottomleft.y; + return new Springy.Vector(px, py); + }; + + // half-assed drag and drop + var selected = null; + var nearest = null; + var dragged = null; + + jQuery(canvas).mousedown(function(e) { + var pos = jQuery(this).offset(); + var p = fromScreen({x: e.pageX - pos.left, y: e.pageY - pos.top}); + selected = nearest = dragged = layout.nearest(p); + + if (selected.node !== null) { + dragged.point.m = 10000.0; + + if (nodeSelected) { + nodeSelected(selected.node); + } + } + + renderer.start(); + }); + + // Basic double click handler + jQuery(canvas).dblclick(function(e) { + var pos = jQuery(this).offset(); + var p = fromScreen({x: e.pageX - pos.left, y: e.pageY - pos.top}); + selected = layout.nearest(p); + node = selected.node; + if (node && node.data && node.data.ondoubleclick) { + node.data.ondoubleclick(); + } + }); + + jQuery(canvas).mousemove(function(e) { + var pos = jQuery(this).offset(); + var p = fromScreen({x: e.pageX - pos.left, y: e.pageY - pos.top}); + nearest = layout.nearest(p); + + if (dragged !== null && dragged.node !== null) { + dragged.point.p.x = p.x; + dragged.point.p.y = p.y; + } + + renderer.start(); + }); + + jQuery(window).bind('mouseup',function(e) { + dragged = null; + }); + + var getTextWidth = function(node) { + var text = (node.data.label !== undefined) ? node.data.label : node.id; + if (node._width && node._width[text]) + return node._width[text]; + + ctx.save(); + ctx.font = (node.data.font !== undefined) ? node.data.font : nodeFont; + var width = ctx.measureText(text).width; + ctx.restore(); + + node._width || (node._width = {}); + node._width[text] = width; + + return width; + }; + + var getTextHeight = function(node) { + return 16; + // In a more modular world, this would actually read the font size, but I think leaving it a constant is sufficient for now. + // If you change the font size, I'd adjust this too. + }; + + var getImageWidth = function(node) { + var width = (node.data.image.width !== undefined) ? node.data.image.width : nodeImages[node.data.image.src].object.width; + return width; + } + + var getImageHeight = function(node) { + var height = (node.data.image.height !== undefined) ? node.data.image.height : nodeImages[node.data.image.src].object.height; + return height; + } + + Springy.Node.prototype.getHeight = function() { + var height; + if (this.data.image == undefined) { + height = getTextHeight(this); + } else { + if (this.data.image.src in nodeImages && nodeImages[this.data.image.src].loaded) { + height = getImageHeight(this); + } else {height = 10;} + } + return height; + } + + Springy.Node.prototype.getWidth = function() { + var width; + if (this.data.image == undefined) { + width = getTextWidth(this); + } else { + if (this.data.image.src in nodeImages && nodeImages[this.data.image.src].loaded) { + width = getImageWidth(this); + } else {width = 10;} + } + return width; + } + + var renderer = this.renderer = new Springy.Renderer(layout, + function clear() { + ctx.clearRect(0,0,canvas.width,canvas.height); + }, + function drawEdge(edge, p1, p2) { + var x1 = toScreen(p1).x; + var y1 = toScreen(p1).y; + var x2 = toScreen(p2).x; + var y2 = toScreen(p2).y; + + var direction = new Springy.Vector(x2-x1, y2-y1); + var normal = direction.normal().normalise(); + + var from = graph.getEdges(edge.source, edge.target); + var to = graph.getEdges(edge.target, edge.source); + + var total = from.length + to.length; + + // Figure out edge's position in relation to other edges between the same nodes + var n = 0; + for (var i=0; i Math.PI/2 || angle < -Math.PI/2)) { + displacement = 8; + angle += Math.PI; + } + var textPos = s1.add(s2).divide(2).add(normal.multiply(displacement)); + ctx.translate(textPos.x, textPos.y); + ctx.rotate(angle); + ctx.fillText(text, 0,-2); + ctx.restore(); + } + + }, + function drawNode(node, p) { + var s = toScreen(p); + + ctx.save(); + + // Pulled out the padding aspect sso that the size functions could be used in multiple places + // These should probably be settable by the user (and scoped higher) but this suffices for now + var paddingX = 6; + var paddingY = 6; + + var contentWidth = node.getWidth(); + var contentHeight = node.getHeight(); + var boxWidth = contentWidth + paddingX; + var boxHeight = contentHeight + paddingY; + + // clear background + ctx.clearRect(s.x - boxWidth/2, s.y - boxHeight/2, boxWidth, boxHeight); + + // fill background + if (selected !== null && selected.node !== null && selected.node.id === node.id) { + ctx.fillStyle = "#FFFFE0"; + } else if (nearest !== null && nearest.node !== null && nearest.node.id === node.id) { + ctx.fillStyle = "#EEEEEE"; + } else { + ctx.fillStyle = "#FFFFFF"; + } + ctx.fillRect(s.x - boxWidth/2, s.y - boxHeight/2, boxWidth, boxHeight); + + if (node.data.image == undefined) { + ctx.textAlign = "left"; + ctx.textBaseline = "top"; + ctx.font = (node.data.font !== undefined) ? node.data.font : nodeFont; + ctx.fillStyle = (node.data.color !== undefined) ? node.data.color : "#000000"; + var text = (node.data.label !== undefined) ? node.data.label : node.id; + ctx.fillText(text, s.x - contentWidth/2, s.y - contentHeight/2); + } else { + // Currently we just ignore any labels if the image object is set. One might want to extend this logic to allow for both, or other composite nodes. + var src = node.data.image.src; // There should probably be a sanity check here too, but un-src-ed images aren't exaclty a disaster. + if (src in nodeImages) { + if (nodeImages[src].loaded) { + // Our image is loaded, so it's safe to draw + ctx.drawImage(nodeImages[src].object, s.x - contentWidth/2, s.y - contentHeight/2, contentWidth, contentHeight); + } + }else{ + // First time seeing an image with this src address, so add it to our set of image objects + // Note: we index images by their src to avoid making too many duplicates + nodeImages[src] = {}; + var img = new Image(); + nodeImages[src].object = img; + img.addEventListener("load", function () { + // HTMLImageElement objects are very finicky about being used before they are loaded, so we set a flag when it is done + nodeImages[src].loaded = true; + }); + img.src = src; + } + } + ctx.restore(); + } + ); + + renderer.start(); + + // helpers for figuring out where to draw arrows + function intersect_line_line(p1, p2, p3, p4) { + var denom = ((p4.y - p3.y)*(p2.x - p1.x) - (p4.x - p3.x)*(p2.y - p1.y)); + + // lines are parallel + if (denom === 0) { + return false; + } + + var ua = ((p4.x - p3.x)*(p1.y - p3.y) - (p4.y - p3.y)*(p1.x - p3.x)) / denom; + var ub = ((p2.x - p1.x)*(p1.y - p3.y) - (p2.y - p1.y)*(p1.x - p3.x)) / denom; + + if (ua < 0 || ua > 1 || ub < 0 || ub > 1) { + return false; + } + + return new Springy.Vector(p1.x + ua * (p2.x - p1.x), p1.y + ua * (p2.y - p1.y)); + } + + function intersect_line_box(p1, p2, p3, w, h) { + var tl = {x: p3.x, y: p3.y}; + var tr = {x: p3.x + w, y: p3.y}; + var bl = {x: p3.x, y: p3.y + h}; + var br = {x: p3.x + w, y: p3.y + h}; + + var result; + if (result = intersect_line_line(p1, p2, tl, tr)) { return result; } // top + if (result = intersect_line_line(p1, p2, tr, br)) { return result; } // right + if (result = intersect_line_line(p1, p2, br, bl)) { return result; } // bottom + if (result = intersect_line_line(p1, p2, bl, tl)) { return result; } // left + + return false; + } + + return this; +} + +})();