From f4defa8ae56b0f2d9637d9c49032d80e7adf6a5c Mon Sep 17 00:00:00 2001 From: Chris Quamme Rhoden Date: Thu, 31 Oct 2019 13:51:51 -0400 Subject: [PATCH 1/4] parse appLinks in QSDAdapter and FeedAdapter --- src/app/embed/adapters/adapter.properties.ts | 3 + src/app/embed/adapters/applinks.ts | 53 +++++++++++ src/app/embed/adapters/feed.adapter.spec.ts | 96 ++++++++++++++++---- src/app/embed/adapters/feed.adapter.ts | 31 +++++-- src/app/embed/adapters/qsd.adapter.ts | 7 +- src/app/embed/embed.constants.ts | 1 + 6 files changed, 164 insertions(+), 27 deletions(-) create mode 100644 src/app/embed/adapters/applinks.ts diff --git a/src/app/embed/adapters/adapter.properties.ts b/src/app/embed/adapters/adapter.properties.ts index 7937e45..2da612b 100644 --- a/src/app/embed/adapters/adapter.properties.ts +++ b/src/app/embed/adapters/adapter.properties.ts @@ -1,4 +1,6 @@ import { Observable } from 'rxjs/Observable'; +import { AppLinks } from './applinks'; +export { AppLinks, toAppLinks } from './applinks'; export const PropNames = [ 'audioUrl', @@ -23,6 +25,7 @@ export interface AdapterProperties { feedArtworkUrl?: string; episodes?: Array; index?: number; + appLinks?: AppLinks; } export interface DataAdapter { diff --git a/src/app/embed/adapters/applinks.ts b/src/app/embed/adapters/applinks.ts new file mode 100644 index 0000000..8eae571 --- /dev/null +++ b/src/app/embed/adapters/applinks.ts @@ -0,0 +1,53 @@ +interface AppLinkMatchers { + apple: RegExp; + google: RegExp; + stitcher: RegExp; + iheartradio: RegExp; + podbean: RegExp; + tunein: RegExp; + soundcloud: RegExp; + anchor: RegExp; + breaker: RegExp; + spotify: RegExp; + overcast: RegExp; + castbox: RegExp; + googleplay: RegExp; + castro: RegExp; + pocketcasts: RegExp; + playerfm: RegExp; +} + +const APP_MATCHERS: AppLinkMatchers = { + apple: /^https?:\/\/(?:itunes|podcasts)\.apple\.com\//i, + google: /^https:\/\/podcasts\.google\.com\//i, + stitcher: /^https?:\/\/(www\.)?stitcher\.com\//i, + iheartradio: /^https?:\/\/(www\.)?iheart\.com\//i, + podbean: /^https?:\/\/(www\.)?([a-z0-9]+)\.podbean\.com\//i, + tunein: /^https?:\/\/(www\.)?tunein\.com\//i, + soundcloud: /^https?:\/\/(www\.)?soundcloud\.com\//i, + anchor: /^https?:\/\/(www\.)?anchor\.fm\//i, + breaker: /^https?:\/\/(www\.)?breaker\.audio\//i, + spotify: /^https?:\/\/open\.spotify\.com\//i, + overcast: /^https?:\/\/(www\.)?overcast\.fm\//i, + castbox: /^https?:\/\/(www\.)?castbox\.fm\//i, + googleplay: /^https:\/\/play\.google\.com\//i, + castro: /^https?:\/\/(www\.)?castro\.fm\//i, + pocketcasts: /^https?:\/\/pca.st\//i, + playerfm: /^https?:\/\/(www\.)?player\.fm\//i, +}; + +export type AppLinks = { [A in keyof AppLinkMatchers]?: string } & { rss?: string }; + +export function toAppLinks(links: string[]): AppLinks | undefined { + const result: AppLinks = {}; + for (const appKey of Object.keys(APP_MATCHERS)) { + const matchedLink = links.find(link => APP_MATCHERS[appKey].test(link)); + if (matchedLink) { + result[appKey] = matchedLink; + } + } + if (Object.keys(result).some(key => result[key])) { + return result; + } + return; +} diff --git a/src/app/embed/adapters/feed.adapter.spec.ts b/src/app/embed/adapters/feed.adapter.spec.ts index 00b1892..a307414 100644 --- a/src/app/embed/adapters/feed.adapter.spec.ts +++ b/src/app/embed/adapters/feed.adapter.spec.ts @@ -19,6 +19,9 @@ describe('FeedAdapter', () => { + + guid-1 Title #1 @@ -43,25 +46,58 @@ describe('FeedAdapter', () => { `; + const TEST_FEED_MULTIPLE_SELF_LINKS = ` + + + The Channel Title + + + + + guid-1 + Title #1 + + 1:00 + + + + + `; + + const TEST_FEED_NO_SELF_LINKS = ` + + + The Channel Title + + + guid-1 + Title #1 + + 1:00 + + + + + `; + // helper to sync-get properties - const getProperties = (feed, feedUrl = null, guid = null, numEps = null): any => { - const params = {}; + const getProperties = (feed, feedUrl?, guid?, numEps?): any => { const props = {}; - if (feedUrl) { params[EMBED_FEED_URL_PARAM] = feedUrl; } - if (guid) { params[EMBED_EPISODE_GUID_PARAM] = guid; } - if (numEps) { params[EMBED_SHOW_PLAYLIST_PARAM] = numEps; } - feed.getProperties(params).subscribe(result => { - Object.keys(result).forEach(k => props[k] = result[k]); - }); + const params = { + [EMBED_FEED_URL_PARAM]: feedUrl, + [EMBED_EPISODE_GUID_PARAM]: guid, + [EMBED_SHOW_PLAYLIST_PARAM]: numEps + }; + feed.getProperties(params).subscribe(result => Object.assign(props, result)); return props; }; it('only runs when feedUrl is set', injectHttp((feed: FeedAdapter, mocker) => { mocker(TEST_FEED); - expect(getProperties(feed, null, null, null)).toEqual({}); - expect(getProperties(feed, 'http://some.where/feed.xml', null, null)).not.toEqual({}); - expect(getProperties(feed, null, '1234', null)).toEqual({}); - expect(getProperties(feed, 'http://some.where/feed.xml', '1234', null)).not.toEqual({}); + expect(getProperties(feed)).toEqual({}); + expect(getProperties(feed, 'http://some.where/feed.xml')).not.toEqual({}); + expect(getProperties(feed, undefined, '1234')).toEqual({}); + expect(getProperties(feed, 'http://some.where/feed.xml', '1234')).not.toEqual({}); expect(getProperties(feed, 'http://some.where/feed.xml', '1234', 2)).not.toEqual({}); })); @@ -78,22 +114,46 @@ describe('FeedAdapter', () => { expect(props.episodes.length).toEqual(2); })); + it ('parses app links', injectHttp((feed: FeedAdapter, mocker) => { + mocker(TEST_FEED); + const props = getProperties(feed, 'https://example.com/feed.xml'); + expect(props.appLinks).toBeDefined(); + expect(props.appLinks.apple).toEqual('https://podcasts.apple.com/us/podcast/the-adventure-zone/id947899573'); + expect(props.appLinks.google) + .toEqual('https://podcasts.google.com/?feed=aHR0cDovL2ZlZWRzLjk5cGVyY2VudGludmlzaWJsZS5vcmcvOTlwZXJjZW50aW52aXNpYmxl'); + expect(props.appLinks.rss).toEqual('http://atom/self/link'); + })); + + describe('atom self link parsing', () => { + it ('works when multiple self links are included', injectHttp((feed: FeedAdapter, mocker) => { + mocker(TEST_FEED_MULTIPLE_SELF_LINKS); + const props = getProperties(feed, 'https://example.com/feed.xml'); + expect(props.appLinks.rss).toEqual('http://atom/self/link/xml'); + })); + + it ('falls back to the requested URL when no self links are included', injectHttp((feed: FeedAdapter, mocker) => { + mocker(TEST_FEED_NO_SELF_LINKS); + const props = getProperties(feed, 'https://example.com/feed.xml'); + expect(props.appLinks.rss).toEqual('https://example.com/feed.xml'); + })); + }); + it('does not fallback to channel artwork at this level', injectHttp((feed: FeedAdapter, mocker) => { mocker(TEST_FEED); - const props = getProperties(feed, 'http://some.where/feed.xml', 'guid-2', null); + const props = getProperties(feed, 'http://some.where/feed.xml', 'guid-2'); expect(props.artworkUrl).toBeUndefined(); expect(props.feedArtworkUrl).toEqual('http://channel/image.png'); })); it('falls back to the enclosure for audioUrl', injectHttp((feed: FeedAdapter, mocker) => { mocker(TEST_FEED); - const props = getProperties(feed, 'http://some.where/feed.xml', 'guid-2', null); + const props = getProperties(feed, 'http://some.where/feed.xml', 'guid-2'); expect(props.audioUrl).toEqual('http://item2/enclosure.mp3'); })); it('can not find a guid', injectHttp((feed: FeedAdapter, mocker) => { mocker(TEST_FEED); - const props = getProperties(feed, 'http://some.where/feed.xml', 'guid-not-found', null); + const props = getProperties(feed, 'http://some.where/feed.xml', 'guid-not-found'); expect(props.audioUrl).toBeUndefined(); expect(props.title).toBeUndefined(); expect(props.subtitle).toEqual('The Channel Title'); @@ -105,17 +165,17 @@ describe('FeedAdapter', () => { it('can not find anything at all', injectHttp((feed: FeedAdapter, mocker) => { mocker(''); - expect(getProperties(feed, 'whatev', 'guid', null)).toEqual({}); + expect(getProperties(feed, 'whatev', 'guid')).toEqual({}); })); it('handles parser errors', injectHttp((feed: FeedAdapter, mocker) => { mocker('{"some":"json"}'); - expect(getProperties(feed, 'whatev', 'guid', null)).toEqual({}); + expect(getProperties(feed, 'whatev', 'guid')).toEqual({}); })); it('handles http errors', injectHttp((feed: FeedAdapter, mocker) => { mocker('', 500); - expect(getProperties(feed, 'whatev', 'guid', null)).toEqual({}); + expect(getProperties(feed, 'whatev', 'guid')).toEqual({}); })); it('configures a proxy url', injectHttp((feed: FeedAdapter, mocker) => { diff --git a/src/app/embed/adapters/feed.adapter.ts b/src/app/embed/adapters/feed.adapter.ts index 886a986..9fe3413 100644 --- a/src/app/embed/adapters/feed.adapter.ts +++ b/src/app/embed/adapters/feed.adapter.ts @@ -6,7 +6,7 @@ import { EMBED_EPISODE_GUID_PARAM, EMBED_SHOW_PLAYLIST_PARAM } from './../embed.constants'; -import { AdapterProperties, DataAdapter } from './adapter.properties'; +import { AdapterProperties, DataAdapter, AppLinks, toAppLinks } from './adapter.properties'; import { sha1 } from './sha1'; const GUID_PREFIX = 's1!'; @@ -40,7 +40,7 @@ export class FeedAdapter implements DataAdapter { processFeed(feedUrl: string, episodeGuid?: string, numEpisodes?: number | string): Observable { return this.fetchFeed(feedUrl).map(body => { - const props = this.parseFeed(body, episodeGuid, numEpisodes); + const props = this.parseFeed(body, episodeGuid, numEpisodes, feedUrl); Object.keys(props).filter(k => props[k] === undefined).forEach(key => delete props[key]); return props; }).catch(err => { @@ -62,10 +62,15 @@ export class FeedAdapter implements DataAdapter { }); } - parseFeed(xml: string, episodeGuid?: string, numEpisodes?: number | string): AdapterProperties { + parseFeed(xml: string, episodeGuid?: string, numEpisodes?: number | string, requestedUrl?: string): AdapterProperties { const parser = new DOMParser(); const doc = parser.parseFromString(xml, 'application/xml') as XMLDocument; - let props = this.processDoc(doc); + + if (doc.getRootNode().childNodes[0].nodeName !== 'rss') { + return {}; + } + + let props = this.processDoc(doc, {}, requestedUrl); if (numEpisodes) { const episodes = this.parseFeedEpisodes(doc, numEpisodes); @@ -113,11 +118,11 @@ export class FeedAdapter implements DataAdapter { }); } - processDoc(doc: XMLDocument, props: AdapterProperties = {}): AdapterProperties { + processDoc(doc: XMLDocument, props: AdapterProperties = {}, requestedUrl?: string): AdapterProperties { props.subtitle = this.getTagText(doc, 'title'); props.subscribeUrl = this.getTagAttributeNS(doc, ATOM_NAMESPACE, 'link', 'href'); // TODO: what if this isn't the first link? props.feedArtworkUrl = this.getTagAttributeNS(doc, ITUNES_NAMESPACE, 'image', 'href'); - + props.appLinks = this.getAppLinks(doc, requestedUrl); return props; } @@ -166,6 +171,20 @@ export class FeedAdapter implements DataAdapter { } } + protected getAppLinks(doc: XMLDocument, requestedUrl?: string): AppLinks { + const linkTags = Array.from(doc.getElementsByTagNameNS(ATOM_NAMESPACE, 'link')); + const selfLinks = linkTags.filter(el => el.getAttribute('rel') === 'self'); + const rss = this.getRssLink(selfLinks) || requestedUrl; + const urls = linkTags.filter(el => el.getAttribute('rel') === 'me').map(el => el.getAttribute('href')); + return {rss, ...toAppLinks(urls)}; + } + + protected getRssLink(links: Element[]): string | undefined { + if (!links || !links.length) { + return; + } + return (links.find(link => link.getAttribute('type') === 'application/rss+xml') || links[0]).getAttribute('href'); + } protected getTagTextNS(el: Element | XMLDocument, namespace: string, tag: string): string { const found = el.getElementsByTagNameNS(namespace, tag); diff --git a/src/app/embed/adapters/qsd.adapter.ts b/src/app/embed/adapters/qsd.adapter.ts index ff92036..14ef079 100644 --- a/src/app/embed/adapters/qsd.adapter.ts +++ b/src/app/embed/adapters/qsd.adapter.ts @@ -2,8 +2,8 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/Observable'; import { EMBED_AUDIO_URL_PARAM, EMBED_TITLE_PARAM, EMBED_SUBTITLE_PARAM, EMBED_SUBSCRIBE_URL_PARAM, EMBED_SUBSCRIBE_TARGET, EMBED_IMAGE_URL_PARAM, - EMBED_EP_IMAGE_URL_PARAM } from '../embed.constants'; -import { AdapterProperties, DataAdapter } from './adapter.properties'; + EMBED_EP_IMAGE_URL_PARAM, EMBED_APP_LINKS_PARAM } from '../embed.constants'; +import { AdapterProperties, DataAdapter, toAppLinks } from './adapter.properties'; @Injectable() export class QSDAdapter implements DataAdapter { @@ -22,7 +22,8 @@ export class QSDAdapter implements DataAdapter { subscribeUrl: params[EMBED_SUBSCRIBE_URL_PARAM], subscribeTarget: params[EMBED_SUBSCRIBE_TARGET], feedArtworkUrl: params[EMBED_IMAGE_URL_PARAM], - artworkUrl: params[EMBED_EP_IMAGE_URL_PARAM] + artworkUrl: params[EMBED_EP_IMAGE_URL_PARAM], + appLinks: params[EMBED_APP_LINKS_PARAM] ? toAppLinks(params[EMBED_APP_LINKS_PARAM].split(',')) : undefined }; } diff --git a/src/app/embed/embed.constants.ts b/src/app/embed/embed.constants.ts index 87b31e8..c8fdfaf 100644 --- a/src/app/embed/embed.constants.ts +++ b/src/app/embed/embed.constants.ts @@ -15,3 +15,4 @@ export const EMBED_SUBSCRIBE_URL_PARAM = 'us'; export const EMBED_SUBSCRIBE_TARGET = 'gs'; export const EMBED_CTA_TARGET = 'gc'; export const EMBED_SHOW_PLAYLIST_PARAM = 'sp'; +export const EMBED_APP_LINKS_PARAM = 'la'; From 80b1c0945322370e088ad66f38082c99102057ed Mon Sep 17 00:00:00 2001 From: Chris Quamme Rhoden Date: Thu, 31 Oct 2019 14:08:55 -0400 Subject: [PATCH 2/4] Always include radiopublic app link in draper results --- src/app/embed/adapters/applinks.ts | 24 +++++++------- src/app/embed/adapters/draper.adapter.spec.ts | 31 ++++++++++++------- src/app/embed/adapters/draper.adapter.ts | 14 +++++++-- 3 files changed, 43 insertions(+), 26 deletions(-) diff --git a/src/app/embed/adapters/applinks.ts b/src/app/embed/adapters/applinks.ts index 8eae571..e6a4036 100644 --- a/src/app/embed/adapters/applinks.ts +++ b/src/app/embed/adapters/applinks.ts @@ -15,25 +15,27 @@ interface AppLinkMatchers { castro: RegExp; pocketcasts: RegExp; playerfm: RegExp; + radiopublic: RegExp; } const APP_MATCHERS: AppLinkMatchers = { apple: /^https?:\/\/(?:itunes|podcasts)\.apple\.com\//i, google: /^https:\/\/podcasts\.google\.com\//i, - stitcher: /^https?:\/\/(www\.)?stitcher\.com\//i, - iheartradio: /^https?:\/\/(www\.)?iheart\.com\//i, - podbean: /^https?:\/\/(www\.)?([a-z0-9]+)\.podbean\.com\//i, - tunein: /^https?:\/\/(www\.)?tunein\.com\//i, - soundcloud: /^https?:\/\/(www\.)?soundcloud\.com\//i, - anchor: /^https?:\/\/(www\.)?anchor\.fm\//i, - breaker: /^https?:\/\/(www\.)?breaker\.audio\//i, + stitcher: /^https?:\/\/(?:www\.)?stitcher\.com\//i, + iheartradio: /^https?:\/\/(?:www\.)?iheart\.com\//i, + podbean: /^https?:\/\/(?:www\.)?([a-z0-9]+)\.podbean\.com\//i, + tunein: /^https?:\/\/(?:www\.)?tunein\.com\//i, + soundcloud: /^https?:\/\/(?:www\.)?soundcloud\.com\//i, + anchor: /^https?:\/\/(?:www\.)?anchor\.fm\//i, + breaker: /^https?:\/\/(?:www\.)?breaker\.audio\//i, spotify: /^https?:\/\/open\.spotify\.com\//i, - overcast: /^https?:\/\/(www\.)?overcast\.fm\//i, - castbox: /^https?:\/\/(www\.)?castbox\.fm\//i, + overcast: /^https?:\/\/(?:www\.)?overcast\.fm\//i, + castbox: /^https?:\/\/(?:www\.)?castbox\.fm\//i, googleplay: /^https:\/\/play\.google\.com\//i, - castro: /^https?:\/\/(www\.)?castro\.fm\//i, + castro: /^https?:\/\/(?:www\.)?castro\.fm\//i, pocketcasts: /^https?:\/\/pca.st\//i, - playerfm: /^https?:\/\/(www\.)?player\.fm\//i, + playerfm: /^https?:\/\/(?:www\.)?player\.fm\//i, + radiopublic: /^https:\/\/(?:play\.)?radiopublic\.com\//i }; export type AppLinks = { [A in keyof AppLinkMatchers]?: string } & { rss?: string }; diff --git a/src/app/embed/adapters/draper.adapter.spec.ts b/src/app/embed/adapters/draper.adapter.spec.ts index a813551..1305f18 100644 --- a/src/app/embed/adapters/draper.adapter.spec.ts +++ b/src/app/embed/adapters/draper.adapter.spec.ts @@ -2,6 +2,7 @@ import { testService, injectHttp } from '../../../testing'; import { DraperAdapter } from './draper.adapter'; import { FeedAdapter } from './feed.adapter'; import { EMBED_FEED_ID_PARAM, EMBED_EPISODE_GUID_PARAM } from '../embed.constants'; +import { AdapterProperties } from './adapter.properties'; describe('DraperAdapter', () => { @@ -21,6 +22,7 @@ describe('DraperAdapter', () => { foo + agreatslug @@ -44,22 +46,21 @@ describe('DraperAdapter', () => { `; // helper to sync-get properties - const getProperties = (feed, feedId = null, guid = null): any => { - const params = {}; + const getProperties = (feed: DraperAdapter, feedId?: string, guid?: string): AdapterProperties => { + const params = { + [EMBED_FEED_ID_PARAM]: feedId, + [EMBED_EPISODE_GUID_PARAM]: guid + }; const props = {}; - if (feedId) { params[EMBED_FEED_ID_PARAM] = feedId; } - if (guid) { params[EMBED_EPISODE_GUID_PARAM] = guid; } - feed.getProperties(params).subscribe(result => { - Object.keys(result).forEach(k => props[k] = result[k]); - }); + feed.getProperties(params).subscribe(result => Object.assign(props, result)); return props; }; it('only runs when feedId is set', injectHttp((feed: DraperAdapter, mocker) => { mocker(TEST_DRAPE); - expect(getProperties(feed, null, null)).toEqual({}); - expect(getProperties(feed, 'http://some.where/feed.xml', null)).not.toEqual({}); - expect(getProperties(feed, null, '1234')).toEqual({}); + expect(getProperties(feed)).toEqual({}); + expect(getProperties(feed, 'http://some.where/feed.xml')).not.toEqual({}); + expect(getProperties(feed, undefined, '1234')).toEqual({}); expect(getProperties(feed, 'http://some.where/feed.xml', '1234')).not.toEqual({}); })); @@ -69,12 +70,18 @@ describe('DraperAdapter', () => { expect(props.audioUrl).toEqual('http://item1/original.mp3'); expect(props.title).toEqual('Title #1'); expect(props.subtitle).toEqual('The Channel Title'); - expect(props.subscribeUrl).toEqual('https://play.radiopublic.com/foo/ep/s1!e661165c969fa6801bb8a7711daa73544b5149e9'); + expect(props.subscribeUrl).toEqual('https://radiopublic.com/agreatslug/ep/s1!e661165c969fa6801bb8a7711daa73544b5149e9'); expect(props.subscribeTarget).toEqual('_top'); expect(props.artworkUrl).toEqual('http://item1/rp/image.png'); expect(props.feedArtworkUrl).toEqual('http://channel/rp/image.png'); })); + it('always includes RadioPublic in appLinks', injectHttp((feed: DraperAdapter, mocker) => { + mocker(TEST_DRAPE); + const props = getProperties(feed, 'http://some.where/feed.xml'); + expect(props.appLinks.radiopublic).toEqual('https://radiopublic.com/agreatslug'); + })); + it('falls back to the itunes:image if no rp:image', injectHttp((feed: DraperAdapter, mocker) => { mocker(TEST_DRAPE); const props = getProperties(feed, 'http://some.where/feed.xml', 'guid-2'); @@ -87,7 +94,7 @@ describe('DraperAdapter', () => { expect(props.audioUrl).toBeUndefined(); expect(props.title).toBeUndefined(); expect(props.subtitle).toEqual('The Channel Title'); - expect(props.subscribeUrl).toEqual('https://play.radiopublic.com/foo/ep/s1!f0ac9c9a4b7ad98f1663f828eb6b5587dfce3434'); + expect(props.subscribeUrl).toEqual('https://radiopublic.com/agreatslug/ep/s1!f0ac9c9a4b7ad98f1663f828eb6b5587dfce3434'); expect(props.subscribeTarget).toEqual('_top'); expect(props.artworkUrl).toBeUndefined(); expect(props.feedArtworkUrl).toEqual('http://channel/rp/image.png'); diff --git a/src/app/embed/adapters/draper.adapter.ts b/src/app/embed/adapters/draper.adapter.ts index 76acff9..cfdd4ff 100644 --- a/src/app/embed/adapters/draper.adapter.ts +++ b/src/app/embed/adapters/draper.adapter.ts @@ -2,7 +2,7 @@ import { Injectable } from '@angular/core'; import { Http } from '@angular/http'; import { Observable } from 'rxjs'; import { EMBED_FEED_ID_PARAM, EMBED_EPISODE_GUID_PARAM } from './../embed.constants'; -import { AdapterProperties } from './adapter.properties'; +import { AdapterProperties, AppLinks } from './adapter.properties'; import { FeedAdapter } from './feed.adapter'; const RADIOPUBLIC_NAMESPACE = 'https://www.w3id.org/rp/v1'; @@ -41,11 +41,19 @@ export class DraperAdapter extends FeedAdapter { }); } + protected getAppLinks(doc: XMLDocument, requestedUrl?: string): AppLinks { + const appLinks = super.getAppLinks(doc) || {}; + if (!appLinks.radiopublic) { + appLinks.radiopublic = `https://radiopublic.com/${this.getTagTextNS(doc, RADIOPUBLIC_NAMESPACE, 'slug')}`; + } + return appLinks; + } + processDoc(doc: XMLDocument, props: AdapterProperties = {}): AdapterProperties { props = super.processDoc(doc, props); props.feedArtworkUrl = this.getTagAttributeNS(doc, RADIOPUBLIC_NAMESPACE, 'image', 'href') || props.feedArtworkUrl; - props.subscribeUrl = `https://play.radiopublic.com/${this.getTagTextNS(doc, RADIOPUBLIC_NAMESPACE, 'program-id')}`; + props.subscribeUrl = `https://radiopublic.com/${this.getTagTextNS(doc, RADIOPUBLIC_NAMESPACE, 'slug')}`; return props; } @@ -58,7 +66,7 @@ export class DraperAdapter extends FeedAdapter { } proxyUrl(feedId: string): string { - return `https://draper.radiopublic.com/transform?program_id=${feedId}`; + return `https://draper.radiopublic.com/transform?program_id=${feedId}&target=radiopublic/embed`; } protected getItemGuid(el: Element | XMLDocument): string { From 457619a89bf58f720708316deab7d45dbf83c278 Mon Sep 17 00:00:00 2001 From: Chris Quamme Rhoden Date: Thu, 31 Oct 2019 14:16:39 -0400 Subject: [PATCH 3/4] Handle old typescript definitions missing getRootNode --- src/app/embed/adapters/feed.adapter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/embed/adapters/feed.adapter.ts b/src/app/embed/adapters/feed.adapter.ts index 9fe3413..c736308 100644 --- a/src/app/embed/adapters/feed.adapter.ts +++ b/src/app/embed/adapters/feed.adapter.ts @@ -66,7 +66,7 @@ export class FeedAdapter implements DataAdapter { const parser = new DOMParser(); const doc = parser.parseFromString(xml, 'application/xml') as XMLDocument; - if (doc.getRootNode().childNodes[0].nodeName !== 'rss') { + if (!doc.getElementsByTagName('rss').length) { return {}; } From ef859e6dbebcbfa1ffbaefb66493556c2e47229e Mon Sep 17 00:00:00 2001 From: Chris Quamme Rhoden Date: Fri, 1 Nov 2019 12:12:48 -0400 Subject: [PATCH 4/4] Render app icons in subscribe overlay --- src/app/app.routing.ts | 6 +- src/app/embed/adapters/adapter.properties.ts | 5 +- src/app/embed/app-links/app-icon.component.ts | 41 ++++++ .../embed/app-links/app-links.component.css | 0 .../embed/app-links/app-links.component.ts | 59 ++++++++ src/app/embed/embed.component.ts | 135 +++++++++++------- src/assets/images/app-icons/anchor.png | Bin 0 -> 5619 bytes src/assets/images/app-icons/apple.png | Bin 0 -> 10350 bytes src/assets/images/app-icons/breaker.png | Bin 0 -> 8025 bytes src/assets/images/app-icons/castbox.png | Bin 0 -> 7127 bytes src/assets/images/app-icons/castro.png | Bin 0 -> 8954 bytes src/assets/images/app-icons/google.png | Bin 0 -> 2576 bytes src/assets/images/app-icons/googleplay.png | Bin 0 -> 4753 bytes src/assets/images/app-icons/iheartradio.png | Bin 0 -> 7401 bytes src/assets/images/app-icons/overcast.png | Bin 0 -> 8955 bytes src/assets/images/app-icons/playerfm.png | Bin 0 -> 11114 bytes src/assets/images/app-icons/pocketcasts.png | Bin 0 -> 5392 bytes src/assets/images/app-icons/podbean.png | Bin 0 -> 9291 bytes src/assets/images/app-icons/radiopublic.png | Bin 0 -> 3875 bytes src/assets/images/app-icons/soundcloud.png | Bin 0 -> 4329 bytes src/assets/images/app-icons/spotify.png | Bin 0 -> 8096 bytes src/assets/images/app-icons/stitcher.png | Bin 0 -> 1552 bytes src/assets/images/app-icons/tunein.png | Bin 0 -> 4005 bytes 23 files changed, 192 insertions(+), 54 deletions(-) create mode 100644 src/app/embed/app-links/app-icon.component.ts create mode 100644 src/app/embed/app-links/app-links.component.css create mode 100644 src/app/embed/app-links/app-links.component.ts create mode 100755 src/assets/images/app-icons/anchor.png create mode 100755 src/assets/images/app-icons/apple.png create mode 100755 src/assets/images/app-icons/breaker.png create mode 100755 src/assets/images/app-icons/castbox.png create mode 100755 src/assets/images/app-icons/castro.png create mode 100755 src/assets/images/app-icons/google.png create mode 100755 src/assets/images/app-icons/googleplay.png create mode 100755 src/assets/images/app-icons/iheartradio.png create mode 100755 src/assets/images/app-icons/overcast.png create mode 100755 src/assets/images/app-icons/playerfm.png create mode 100755 src/assets/images/app-icons/pocketcasts.png create mode 100755 src/assets/images/app-icons/podbean.png create mode 100644 src/assets/images/app-icons/radiopublic.png create mode 100755 src/assets/images/app-icons/soundcloud.png create mode 100755 src/assets/images/app-icons/spotify.png create mode 100755 src/assets/images/app-icons/stitcher.png create mode 100755 src/assets/images/app-icons/tunein.png diff --git a/src/app/app.routing.ts b/src/app/app.routing.ts index 84a1b17..dd779da 100644 --- a/src/app/app.routing.ts +++ b/src/app/app.routing.ts @@ -4,6 +4,8 @@ import { Routes, RouterModule } from '@angular/router'; import { BuilderComponent, EpisodePickerComponent } from './builder'; import { EmbedComponent, ShareModalComponent } from './embed'; import { DemoComponent } from './demo'; +import { AppLinksComponent } from './embed/app-links/app-links.component'; +import { AppIconComponent } from './embed/app-links/app-icon.component'; export const routes: Routes = [ { path: '', component: BuilderComponent }, @@ -16,7 +18,9 @@ export const routingComponents: any[] = [ DemoComponent, EmbedComponent, EpisodePickerComponent, - ShareModalComponent + ShareModalComponent, + AppLinksComponent, + AppIconComponent ]; export const routingProviders: any[] = []; diff --git a/src/app/embed/adapters/adapter.properties.ts b/src/app/embed/adapters/adapter.properties.ts index 2da612b..111428e 100644 --- a/src/app/embed/adapters/adapter.properties.ts +++ b/src/app/embed/adapters/adapter.properties.ts @@ -11,7 +11,8 @@ export const PropNames = [ 'subscribeTarget', 'artworkUrl', 'feedArtworkUrl', - 'episodes' + 'episodes', + 'appLinks' ]; export interface AdapterProperties { @@ -24,8 +25,8 @@ export interface AdapterProperties { artworkUrl?: string; feedArtworkUrl?: string; episodes?: Array; - index?: number; appLinks?: AppLinks; + index?: number; } export interface DataAdapter { diff --git a/src/app/embed/app-links/app-icon.component.ts b/src/app/embed/app-links/app-icon.component.ts new file mode 100644 index 0000000..19aa09f --- /dev/null +++ b/src/app/embed/app-links/app-icon.component.ts @@ -0,0 +1,41 @@ +import { Component, Input } from '@angular/core'; +import { AppLink } from './app-links.component'; + +@Component({ + selector: 'app-icon', + styles: [` + :host { + border-radius: 8px; + overflow: hidden; + display: inline-block; + width: 48px; + height: 48px; + margin-right: 15px; + position: relative; + box-shadow: 0 0 5px -3px rgba(0, 0, 0, 0.3); + } + + :host::after { + position: absolute; + top: 0; bottom: 0; left: 0; right: 0; + border-radius: 8px; + display: block; + content: ''; + box-shadow: inset 0 0 1px rgba(255, 255, 255, 0.3); + } + + img { + width: 100%; + } + `], + template: ` + + ` +}) +export class AppIconComponent { + @Input() appName: string; + + get imageUrl() { + return `/assets/images/app-icons/${this.appName}.png`; + } +} diff --git a/src/app/embed/app-links/app-links.component.css b/src/app/embed/app-links/app-links.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/embed/app-links/app-links.component.ts b/src/app/embed/app-links/app-links.component.ts new file mode 100644 index 0000000..cf20734 --- /dev/null +++ b/src/app/embed/app-links/app-links.component.ts @@ -0,0 +1,59 @@ +import { Component, Input, OnChanges, SimpleChanges } from '@angular/core'; +import { AppLinks } from '../adapters/applinks'; + +@Component({ + selector: 'app-links', + styleUrls: ['app-links.component.css'], + template: ` + + ` +}) +export class AppLinksComponent implements OnChanges { + @Input() appLinks: AppLinks; + sortedAppLinks: AppLink[]; + + ngOnChanges(changes: SimpleChanges): void { + if (changes.appLinks) { + this.sortedAppLinks = getSortedAppLinks(changes.appLinks.currentValue); + } + } + +} + + +export interface AppLink { + appName: keyof AppLinks; + url: string; +} + +const APP_PRIORITY_ORDER: (keyof AppLinks)[] = [ + 'apple', + 'spotify', + 'radiopublic', + 'stitcher', + 'overcast', + 'pocketcasts', + 'google', + 'iheartradio', + 'googleplay', + 'playerfm', + 'tunein', + 'soundcloud', + 'castbox', + 'breaker', + 'castro', + 'podbean', + 'anchor' +]; + +function getSortedAppLinks(appLinks?: AppLinks): AppLink[] { + const result = []; + if (appLinks) { + for (const appName of APP_PRIORITY_ORDER) { + if (appLinks[appName]) { + result.push({ appName, url: appLinks[appName] }); + } + } + } + return result; +} diff --git a/src/app/embed/embed.component.ts b/src/app/embed/embed.component.ts index e4be65e..5468fca 100644 --- a/src/app/embed/embed.component.ts +++ b/src/app/embed/embed.component.ts @@ -4,7 +4,7 @@ import { MergeAdapter } from './adapters/merge.adapter'; import { QSDAdapter } from './adapters/qsd.adapter'; import { DraperAdapter } from './adapters/draper.adapter'; import { FeedAdapter } from './adapters/feed.adapter'; -import { AdapterProperties } from './adapters/adapter.properties'; +import { AdapterProperties, AppLinks } from './adapters/adapter.properties'; import { PlayerComponent } from '../shared/player/player.component'; import { EMBED_SHOW_PLAYLIST_PARAM } from './embed.constants'; import { VisibilityService } from '../shared/visibility'; @@ -35,49 +35,62 @@ const IOS = 'iOSApp'; const BEACON = 'beacon'; const EVENT = 'event'; -const RequestAnimationFrame = window['requestAnimationFrame'] - || window['mozRequestAnimationFrame'] - || window['webkitRequestAnimationFrame'] - || window['msRequestAnimationFrame'] - || (cb => setTimeout(cb, 0)); +const RequestAnimationFrame = + window['requestAnimationFrame'] || + window['mozRequestAnimationFrame'] || + window['webkitRequestAnimationFrame'] || + window['msRequestAnimationFrame'] || + (cb => setTimeout(cb, 0)); @Component({ selector: 'play-embed', styleUrls: ['embed.component.css'], providers: [MergeAdapter, QSDAdapter, DraperAdapter, FeedAdapter], template: ` - - + +
-

Never miss an episode from {{this.subtitle}} - and other great podcasts when you download the free RadioPublic app.

+

+ Never miss an episode from {{ this.subtitle }} and + other great podcasts when you download the free RadioPublic app. +

-

You can also download the audio file if you're on a computer.

+

+ You can also + download the audio file + if you're on a computer. +

` }) - export class EmbedComponent implements OnInit { - showShareModal = false; hasInteracted = false; downloadRequested = false; @@ -96,6 +109,8 @@ export class EmbedComponent implements OnInit { modalDisplayReason?: string; + appLinks?: AppLinks; + // playlist showPlaylist: boolean; episodes: AdapterProperties[]; @@ -105,12 +120,17 @@ export class EmbedComponent implements OnInit { @ViewChild(PlayerComponent) private player: PlayerComponent; - constructor(private route: ActivatedRoute, private adapter: MergeAdapter, private visibility: VisibilityService) {} + constructor( + private route: ActivatedRoute, + private adapter: MergeAdapter, + private visibility: VisibilityService + ) {} ngOnInit() { this.route.queryParams.forEach(params => { this.pymId = params[PYM_CHILD_ID_PARAM]; - this.showPlaylist = typeof params[EMBED_SHOW_PLAYLIST_PARAM] !== 'undefined'; + this.showPlaylist = + typeof params[EMBED_SHOW_PLAYLIST_PARAM] !== 'undefined'; this.setEmbedHeight(); this.loadOnInFrame(params); }); @@ -167,23 +187,30 @@ export class EmbedComponent implements OnInit { } playStoreLink() { - return `https://play.radiopublic.com/${encodeURIComponent(this.subscribeUrl)}?getApp=1&platform=android`; + return `https://play.radiopublic.com/${encodeURIComponent( + this.subscribeUrl + )}?getApp=1&platform=android`; } appStoreLink() { - return `https://play.radiopublic.com/${encodeURIComponent(this.subscribeUrl)}?getApp=1&platform=ios`; + return `https://play.radiopublic.com/${encodeURIComponent( + this.subscribeUrl + )}?getApp=1&platform=ios`; } private assignEpisodePropertiesToPlayer(properties: AdapterProperties) { - this.audioUrl = ( properties.audioUrl || this.audioUrl ); - this.duration = ( properties.duration || this.duration || 0 ); - this.title = ( properties.title || this.title ); - this.subtitle = ( properties.subtitle || this.subtitle ); - this.subscribeUrl = ( properties.subscribeUrl || this.subscribeUrl ); - this.subscribeTarget = ( properties.subscribeTarget || this.subscribeTarget || '_blank'); - this.artworkUrl = ( properties.artworkUrl || this.artworkUrl ); - this.feedArtworkUrl = ( properties.feedArtworkUrl || this.feedArtworkUrl ); + this.audioUrl = properties.audioUrl || this.audioUrl; + this.duration = properties.duration || this.duration || 0; + this.title = properties.title || this.title; + this.subtitle = properties.subtitle || this.subtitle; + this.subscribeUrl = properties.subscribeUrl || this.subscribeUrl; + this.subscribeTarget = + properties.subscribeTarget || this.subscribeTarget || '_blank'; + this.artworkUrl = properties.artworkUrl || this.artworkUrl; + this.feedArtworkUrl = properties.feedArtworkUrl || this.feedArtworkUrl; this.episodes = properties.episodes || []; + console.log(properties); + this.appLinks = properties.appLinks; // fallback to feed image this.artworkUrl = this.artworkUrl || this.feedArtworkUrl; @@ -208,15 +235,19 @@ export class EmbedComponent implements OnInit { @HostListener('window:resize', []) setEmbedHeight() { if (window.parent && window.parent.postMessage) { - window.parent.postMessage(JSON.stringify({ - src: window.location.toString(), - context: 'iframe.resize', - height: 185 - }), '*'); + window.parent.postMessage( + JSON.stringify({ + src: window.location.toString(), + context: 'iframe.resize', + height: 185 + }), + '*' + ); if (this.pymId) { - window.parent.postMessage([ - 'pym', this.pymId, 'height', 185 - ].join(PYM_MESSAGE_DELIMITER), '*'); + window.parent.postMessage( + ['pym', this.pymId, 'height', 185].join(PYM_MESSAGE_DELIMITER), + '*' + ); } } } @@ -224,8 +255,11 @@ export class EmbedComponent implements OnInit { private logEvent(category: string, action: string, label: string) { if (window['ga']) { window['ga']('send', { - transport: BEACON, hitType: EVENT, - eventCategory: category, eventAction: action, eventLabel: label + transport: BEACON, + hitType: EVENT, + eventCategory: category, + eventAction: action, + eventLabel: label }); } } @@ -237,5 +271,4 @@ export class EmbedComponent implements OnInit { }); }); } - } diff --git a/src/assets/images/app-icons/anchor.png b/src/assets/images/app-icons/anchor.png new file mode 100755 index 0000000000000000000000000000000000000000..f6ce99f9242a3ea56476cb78e610fa5a24e250c3 GIT binary patch literal 5619 zcmVORnkPU}Dj3(1@kU;#or3lo#rK>S`FNu1y$5Aqzx5aT3&I0oY9B*f3; zIT-v0#4(r{J0Tp7A%H=M0OAab5VEj!5LgL}R=`SPS35IZmG7(So<62~rf0RY%gX!l z8qL)8RefL8cUI4eA77+21`z~}W(E}X%RaQA?KE|Z=9;F3OgGTFmLKu5ywBA#Ah#^5 zeNntc+NPgIh!#}@N1A|H(5OD$t|)_bF8R@L zoI*H6lEJPvXH6r%cWtLQC3OK#hwT*_fo(5y@Mg7*%^srKr!kYF`PXY-WWD+A8*j>J zy$nhENDM0sg;FSrqu7ZWY;f&AS#l$UdUaXQEKdir2U>|^XxHlw58p>2gu)D9IVQwN zup>tnxVniW5GkK(NvcH=2I(f+HfrC@SgppJ*S`KZ#DKKczV zaJ)t8h8l0<_A0a7E$Z><&_zs_RYyZ%$Qo-PZJQaV)p!RoPi;@Ys2Uzl7-m0U6ml5Q ztS$WO27^T(QI7$mkPm}JAHklm%&{SoT#lk1gMl`CtbyXl?WcWO9@QwaK%_^ZV7s0o zI2zAInE!Nv_VwzjO1Q8?h9iU8(BF~as5hRZ%7yDHn0>N?Ek6W4=u%K3AY9RCY5}}) z0_!^MvY@ypjKP7yB7BiP?gSqzFLNal~$0T zv=a-56D|=LKZEwWaL_iv!5Lq0vF_y9bie9hxYzIM2ClFc_87?_p65XDS|an~wqx+Hq`rMAb3s0mfibtK>xe+UD*(Tp|4TB z0nmpwV$PXgsGzM~W7~hRJ+2_69Q5_pJzx|c61QF8A9XT_MUW$WELy9u>JL~6J49R& zXMt@;4D!nrJoQf+J2z5+a52t!f84#3(dIcw3C2f3L$fI*%gK@aI3zkwzMP2fIyH-P+6C7ArNr?U z3PWs83;Mpm3;zmidq5%U;7eEG?5i}|JCv3GEuQ~~w}K|j(HJvL+wen*q8x%?3xCa( z5=%azA$h@cN?b>x^9K^|b!Fsf;b77{iFs!SR#l6^xp47UuMNNOfmDd1cdd9r7%V*f z2PAep2vkHrW-epdt!$t;WCs1~IM&R3>s22I-w_6P=`irlc8w+HRp6M@6NM~Tgv~rb zg!%@RNPYacy(OUC9GF``Px!7=katoghZSEjG@@#38dhq|-Y;$hWi2#2eJ=;}b$ zn@_*6PV!=+Ct6@gtYm%ivGv*Qv-;YxQD>~iIQVghAahPFW85@t!VVUg5duA3F7Ej< zizXd-$H|2+I7?v3TF0_ZOMLLYgKhVcr<}UA%wF=?84iv=SCZK}(DgQ=ooJ+lix}e~ zr+u?#T=C1n6Bd-Q;aUfmd|P1U#cZiqvrz|W!o&N4pZzV7w4Yn2uY*gRdbtlx&X^8# zMd#hr=lvw7I8w=2mu`qBZJS+hJsQ|LIoL|2r4N~sj-#;p^Aa8@*0IM>MDtG^eELQY z?UO6UFR*Q0biLx@nLA3$zSC~A@!-?K!sZ^(R zOV$*`f)IOj&gXh%1L@mn99`SS(U^Be3G+{pM&=tDk*PUr1#r6c|!aCq?a+jFN>Tp*@ zrdrfqWz@yT(LtR;GO`%RY>m_yS)i(8PAA)Z{A`l#ei>;e$svYJUF_iW%PU5K8u3DF z+x4tO_jX-F0?v#rTW{@uV=a;Y@aAR*86?25A63NIXa^_h6Q6(bNv;q0&L9+9M{Oip9L!%`Av3fDW2(~5 z-Exnp5kahE=bs|bHWo${F`gaIFe7U15^tQuq=iV$zy5loyh8ooxwogF87YH^6Vcx(Hb1B(N1x8c#hck%emWb2p8iQU9~9TFLz(NrjbuOKd8?^V-~zH+hW zrGEOJ)Ei9BV^_3MeW0zV?YpmQtC-`AqG#f42TH1(IiU`H>OD=opivyG7@0{i^>trz zam+%tQW%K~O$PTbpHO)8M%t9UOej7X_7FyIm=s1s;@ZRJ+se4;28!+Lj%s+BCF|Ui z6x^{Ir9P`<-|Td({g*g_KBXZEzj2JMzUbLwV?)|RQUjn5Vu;C^acv9^5#4mu_>aZy$3@4Zb#uB75sRLS~c{1m6TO;P|{j-R9<^bl)UEh0?6=A|@D?5GBRYZ{{~=}UyNJtT z!yMKHi!}D{2vUqn;^4a)lV&CRw~ZlYP435`9uE$+IZWa03h4~DEj}+vA!}w-nHc1n zB#>Ed4lmM)9-Y9Lq+i{OSsC<)PSR{cic zT~hf>Qff1nCso+Mpe?hM$DKHfZ#g(NT1q8{4-o@WjW{;cF_{wdulr^loV`q6o(NB9 z$7DXu9IlW_8q|X-eX4^+eKoRmfR3*st30UF)izPXNwa-xd2oBOb07a_g`H2+VSmWM z!jmhc%-Vu^xPw6a`rwUo>4d3Z(R30^PG&oIj56LaD{W5VtMGneYJy&eH4;>ViKpol zA1F>+{ygY9KvkRw33;cpj<=rR#Mx!EPn0budSWi+DDP|jb+XecKAZl*YoyvH7c!5g z5o~pCkVKwuG2pg?eiv`g_Of9D87PLur~Xbmjz7;w#}r|b&BQ|JAyp*LppiEE(@IF^ArjeT zY=^53JWa9qC%>o3)+Sn&*};)9-yybLMSVQsWW)L}t~BQ)AIF_zWA@3m60dD^g0~_$ zQ~@kLi#L^5Gw6Xm!O+5n6s(^hlbTAiBj=;sFCl8;Ke746+E;0ju1~E|rmyE!wYU-2 zx(-o9ewmdmmdNzE)N8#-PM1SgzGW;?z!1yBybB=Q` zZGos2nZ(F_J4pnw@>LE6_$pX|&MJkiqsMD@@_tE-QXm zQ;(g>j%4yQ*%1WZ*dl^FUgLQ-6I~clcSHLQD6*_r(R;?cje}1jq@O|!|M@p1^!LI< zS!r)$%CV#;&P}$p3b%r7k5>!@L?FVBTU)Du&DdoBzyGEKF=+Nr1S5(82Px|L{GCj^ zC=(WXpKMP4^zTY|Z?9t#HVho+Km9TV&vlYk5;#olWBW#F3_h;nY~j+i6hIV7Z<%$& z>zzRFetpE^I15G;1Nb$h7w@K!aaWW(U}C=atHZeeIz?G8*JQOqIxRa(W7P#tEd3b( z3FH^=B?j>uG(wt0%#=Ak7MuukTP|wH+)>!|Tse4uZ}7=Aq8Ok_QT88}cbiL%Fn&KwW(>}h8bFW~#C26AajxP0;u=S@3mFi2}8cWU~=6P;HQJXza zN`1$Zq@a~3?BO;8L;qgp5dzEW-B0=0@}Q<2?_k%nWTW_w*{M2kx>#Lae7#FyamR!X zk^?Aok~3)H`mm<5`IE?B@3N z3N~EhV)lv3I%p}v_3Q?r`pxSQ z6vj=G*zgqxi`VduZA*Cc=AAI|4IcS6MQi&5kCKpC_0yf5~{ z8zp4g# z1y)~nm@FT@9FQb%_+Id)Ta>Z1h5|;u2qGd@Xm@Y=E(w-$+3es0-3mXxrh+HF8|q?- zFkQLw!ZOzW;TZFNLDKTE?*%{mqY_?!u{Cj@EEw@hIE1cOD7f~B#Qwegc$K1|z3)nM zCn&VwnfxbT0<62T%~(G*Kr(FKE=rf)$t~?md_w^>3<%A-yt24Ep0!J|-1SD|Wqr=7 ztB04D^6)p!Pc@lPb@*c&d?J|MXJ4st`lXbVky&zG~uNsb>=&=sYz8b<8vJ@w9`my~{-u1HPx=9?bD2TV-Jo7*v3Gow1 zVxJq0*$mElmJFnH{y3Q8Y@e=IJl(MI6{|8aFcezCF5{>YQ4#UhZ8yIGpmYd_-s zfGpsw)?3>gyz-E5ZnPQTSCw=HdtcGGL$5HeEbcX?P3c76 zRIH@>^I|#u8{tg^!$em5Fm##5TMP&4j$MC@di7bfOVcrFhKdXh$IC>W9T2M%sdiPz z2)be4BI6~97>=!VO}l1r)Gf=vTLeeEy%yQ++^lF}kpNV)0Ww=D&BrSg|e1b}A{MpaLt3eLx zif|$syKE^$vK?!QB3C330|F&od5jm_y6a#^YpJLDYBNPM*hcq&2hY@pVI8!h3`w#wB;GcL7QvM&pRzYx8CRQ zx;yU}<~}$3ynSx5&2iF>`kQ-S^LRTMlaDT1JL0|EwNCqPH}KZ`E_|-hI(dG%TBo#V zH>R!@z;a(Z4n}7^bSMFx_R;)Y=Zn~$c-^ew-2OTlgFjcqJL}wCKt$&sg#5bs(yS_J z{61~^zTG&SIYf6CxDSgO--Y*~!{*HSetvqUX)A*??(;iW8J*oXmn)lpUTCo!m*zgx z%@`KCZ=vxmM{D2R{IJ+)9%{K>CHwD-J01~ z+E{nm|GW~=tpV)jo=zp8#klG(8uu-{2+QG(%{PYS=&!kTt%5G5s+eic%zq0u8QXF$ zz;Zm-?)PpdH+9#Z&Ke7m8GpUz>Zv=dKbnN_EBXH0_BbJSh)Vc;e{A}5CDdPwPR zxq!?o(e6^ZbWq+#|(7oPAQ zU1`&9zRN(DmS@_~%zrI#bLu2;9iIdPLSs;OW0beVSiQZ3!qx=kO+NgU5xhd4g!6P- zsl!E@i7|X6PDDBfKvF<774pMxPXm+3fXd+n<0q;pn=%qEvde{tr4xZo(gd$&TXrv~ zn`Tm%oS4A$Ok?v~`_OxZhuo#)-m(yxgf-+=<0B@~BS#2k10K`hDt`4$4jLQs)_jkT ze6I&*BQS8iK|JjtJekAr6EOx4Od=UA!SyL6i1?_BSF<^ferEcjh(M}f9EqA3iK9tO z(#o}jEbNG}_ALdhd^6Qa$ws&-B|)yMY7(v|ojd{Kgz9Mq6}Zi@r`%^FV52J`q&3-_ zMHR)o;3Am@#vXGp`cQ<*OGd%N6tbw41}?CuWRI#V<-0plJ4E ziBnt~VBq}@R_+ZD6i93m-b*-fsvzOZl+P%^Nl?#NQl|VlsZm;LT#UpbuMUaj=R{(7 zoi{py1t~$TVf15u?~&u#Z&38G>YWMtuL&^ue1ua!sKT5qqn?l9(?qy_z~zV+gGDT< zU9<&AGSyLZitzFgR{tD1{uU!*0N>@Lg{2M0LLxbYnPZ6RNKqT)*E9V3A~1D?_F;n3 zLjwzPX`EU@c_ePig>@)B`IRpEx1=au$_3u)Ay~tOE!L^Z0?XMV9bD+3O!ah)gWju4 zID1cm$sYpMfU*#B0sYjDWx2hLd788Tj;U8{1yt=ADh}##^<>D=`8UPb_NzI#8(ieb z%`S~%l!}r_tx+Yn*3TK7e4vi0CxB=;RUPAdG_;9uwv`C&eI`J%Ka0i@V{Y`CsIUZu z0T0DJRB>-Bp}2)|m4h04@qgq#hdM{@ojwua%=ftvPx@R_E-c^2UyF~$` zx`_;3J|nKAL++EwtpA{k_3zKYE32Yb)uDXG`x3e(!v|<2?~O2ZIzqnI%V#4+U6(R- zlNz-thMrG(dy2L146x#cBFGmAVpqo?gG)qRRSeGDXE5}?5_(IK5?)r-O^f^*bu{;d zAoBTs?>v0_rW_b42is=ws=FoHp%a=!p;`_r#b!#NPxC z0?LEy)~RCrWzYhSnq!Y_pQJgMD4}Xfu;G0^`mf`)oTo8?@;TLxc%|b{J2>`@I>IrI zg^Od1r*^56xnGn8nA=I)XUOHIH^J`P3MlL*$5Gddn<0}G!q!iPIQ6|4V~-fiZ9X|N zBJl$&5uQxivB6fitub!P&0?AMxc<~#QhEV)_KGSgOr8`eNraD9xY@fdMfKXR%br{u3I@mZ(dFjmclm%0j zVkv3hE= zv~XGp)AFM;XM7hn=b_uix-h~HT5;joE<6+Py>%G6b-TYXfbu0Iq*v5H%caf@sRB-a zhbrf9$mI-%TtA}c;m!B+j8bBTPT%qv}=^_sJRI zI4+PA&vu_Ws(I41M!bjId96X|8XtXIeB{c6EOPW;L@kJfxOOVwl0kO8=mu1K4U(SsqL{m)zk z+6yN%8l=rjU#y&Rwy%_6nF3~@CRGdSf#2R$) z)Ym2v9`c}ZQEZK)$y`+F-gC+ENvJMh@d_80z8&bfwg|uEs3|qHkm7nua3=Ijt)FOD zz*tvNbiHUZMT{6P3_Tmtv#DVEd5IkytEK3R3h{k$ffIov3VgP%((COq*mJv&ps&DA zYMf6Akz2#)y*`fIO{S4WH*p(EEIxL29=vt5{WEhGcm7+%s0zoXYRK|?tJrhL0Ni}4 zA-=kI)dWZH0?s}$HX7q2_=zk=4Lv*hvF>JrHP`d$AP-;Shb(t%BpOz? zRP;DW?OG^Hm`kKa-e)pkPkb9`v3NF&oF@*}aqhq(}5h4BbE+$0S| z)lqO1A(z6-p`S*1*R52I0i}WW#U>ATD#lO0SOJ=NR_61vG+Lnf?S;m*5#* zR|WT>+7W_>gTT;Z5ylTmphkjLBr>+}hDWcd+{6CX$LQNd|9)2iJ(o~Ad}GxWiR}4w z2J#F9KSW!yEr;j-=MbV}y_B9hrPNbS7taYfqN55%0652)g`=T4 z7dsw4n-frPGl)02jC{E;Bx=BgHLk_0LoTXEE`IEfrV&3w=hm&#qbhN+XU8WDpM0o}Oa#R( zWb_3_3G>8=9IUy4WAiL*VHhly*BG24R^>}%jTlR5Zo^0J_T$76R?$-_5q*@jpQ|27 zjsu*+q??#=o_whf8yx!63QpV!Oq`~d;!P`3YBZhL zG}*ahfuuEUKe@=Nu$mj9G92NlyTsE@z5M!CGr!vN=O(n&QyOQD~u-owlXO&5XIYqK9g5eAbY< zP69N6R7Z}BP`adm(l+6qg6ieSOL6WV8mti+Y}mBYiTeLSkR2cEML&}<&Ws;VpZi#Z z$A6#R#<`%waiF97L@G4Zz#y%5%Ee<}8e@)_Dn?TZk!Hk#4S8(-1joa;z=@dHcdbM< z`iLeY9OoiPA-|hgIJ~^cLwSd%c40{pfG(Pw3Wjgth)p-qgYb=F1&Y@UyEt{7m2rZnSxQcK>RTKLcDWtj!&!>3u&QV0ub^X07x6p9!_;?><8iC6xy@{En1^Wyq ziC-OvG&k*wLFVsQUdMp1U~|VNb`%Y0OS2iew$iq%lw@kt_dRBb?;;XenUP(HWL-|6AX+dp0B`G1KA8z^N0kh@RAly0?o;Aiay4AB)oI4QU==X50!soZ1}qLji-b5L0eGx+sgjy;ygXQphaWD@5tV)Q*SN$amQDpF#-^6^!p+-1ukfw`sNxM=( z3NetoR=&m8Bser?a!{pMk3Gpj1c|ztGV#Vr$3#cBeSj{hmlacyaCLe)M~IC2Y5VFJ z#|V^0_hk$4?%!R3Ex*DT`_epegdyaLOX4`}TWrymU#R2Vzq1y}B{@W9r50>CZtGSm zmo9PWOw$!jarA%FO+I6*A#@=*v@IVl(v7XRxV7R02(&TsR7khlQ^!IhVA6Wc+bOYe zs$Q298!WbUXM|~7CN3r~?o%E1z4J;w_)=Xa0AR zGUbrlTir`3{0b;h0&64_z)L@@h*ncpbjjs~O%Vom<}^}otbu04B&Essoql!-vq{nf z>#r(m1g)yfxQjQ!jeuq`AHhF^vWvo6>v)RJafy|TJ)fwNk_gwjXHs5h6Y1-(D=Nk! z$rgc;s}uB=9-*pGgSWu@Xfn2ctc+k4pQ5iQ6%`Agm7KBJ@d2=3@ zf3zPcq?&JT8M~mVsAq6qjB^jt1)iXk%8Mj|&KI!x`jR58D!uZ&sv}Wp4yF!;Hexrn zSfIcK&-Z3!jv6d3j+R|XfFXhVHcM3KsrpDc>9m?MaEe+Ds2UlfhklHeR|hSkH+qnH zf%D=)RjDf6dEH0(^zEdiy*r>(iK^~27oA`oq3qISl1#6+org~^D4K{d`XujhB2`5K zk+0b6tBb0_tqYK9ep==;_L88xMpc_Im`hby+{nc@5*O9Fkbo{0Krpag8Y~O18}*MT zN2XCZ*Gfo3wItqAuD683`c~qd-%nNGOpy3NmV9Y-DI1Hhj>M3vihy{1rzXo+&_9Ru z*Klk}uI)UcG*;pcK0-xB)hP8yhLaJl?p;-!9Zw|solqhp-^wUcl_Q~rAh=*+=z9nz zItr)97iR%HaqZTSC`LRTUy~mZ?PNM#Z6SnIt|c5)X)T}0iGN*FfXy)28Go{-r6IO@ z&@}aLqeNs$^zxRRVnm|rJNMTz$l#LFg^)$_LK}= zN}zBPlQ5~RP1SfMwQi{)8d@8U73NkQ&TIJ|PZK%DEFKr?Dh?1&J>R3@C6tBPMOdNA zka~P~wm*|bisc7uQ_JPq{gt6eaev2kmEc-D)f{;?NkqtOR*zG#QLH8$y$(ibqx4$U zXa$Drw#mmjmWV>s>Ih?twX@fP)zfLEGev3fZsp%QV3TK04$s#Ej5dBx(j3PBveiem|%<#w$bdtq)*COmO8 z!sOpQsxwA-kU2Kjli{7*w|O6nd_3&ttgA9 zBw9f0m?Wp2CRl78Usozf>M2Dlr?2|~1Q=dKkVBV}=@N`QTG3k2c73acH#YW8o!0&vDo^v!4V8#yJC$Y&Vx`{EJm2DJ z=^L~7=uN5^1S?U>OJpRRuen=W&oeWLY{x`cBX^~C1BGy-mz(u+8aAL^8+(p!;-gG8 zz9kPU886RaLX4sP3CK2p7dw`#of+pn)q>(IsL(G; z3u7h4U~%+R;B~S8V!kl0WxK0nCHc}oyd28|GyjCHf}BoIgxPpgU96yxEf%r}7-;*h zkb3;!H-{0QaWj>dG(-k=V};S*YcHwozdma4;-5{TMztu_7VY{*qiTbOHdodi3E9E` zRf2EAO9|2$@XU^t5qG{(E@|f**CRq7-B2>s!UHV!BLj@bC23--5QNin{g%MZ_a&O7 zNico3Q4F5y{iXH3P479Fon)JLB`#go!wK&B(n)$xf^L#yjbz6rrRGFcpLAmAQdOyV z>O&#+{mv1LoDL;kw-IgIc^IvL^ZfwDRkPXHy~L-jc3Yo4H)j8e_>z`dV8L-ewQ%{LWM?kO{mliK=E;@Htxgp>Ow@bq7@ zugQYO8{++h1ms+I{=Ss}vZrhd)nZ>3L`v~41C;UOqN78tEAqVr4bAEm8Qrh2D%7#g z5vIq)3ytlzrbW`Ty9MBAriSfKmQZjQ@%2}vC^5Y^buOH}FSVQM;vw1rW|i^-j;0mG zquB8F9vnVA$h!*koOoY4zlS5cA2sOlBQAQ1Xa79J3*VbW&m~;+KIU~vf$C_Av17#f zr^GR?+uVWUD)HcYZHXeb%tRqJ?On;ihMHd$pC}w-R%}=bd?i@)ZAD(@ffagu6ju4L zHF&nzck+Csb4_uP7C;o&x4D#lv6 zqi&XlTz^d-&wq;|&Rk()7T6Hy+ENuYh*Akh=r)z4h07iu0%^Wb9%JMx-P*R)u-7U|K1P8zjIBEU2i7o&+N&M1r%0S|mNY ztcoz0ILjnTRYY5hG?g|3JMuFgjTLA9GNCTzf}FUost~Z21M*WOG+k!2DfoP}5R99o zTAZa(M_Q%C*?!W*mZv95I9utU(1EFDKv|oX-kI`o_PHtbL@b9TSbKFLt5&m< z*Ig%)KPEv=P(Mdw_CDdVBBRG$pXlRH{sl>s=GHRUunad>KyHgm6_&%+Tl%p5L#wdv zhCCr?BBnIhb(FX$K}Yk5iFoe%=nA-bb%m6OA@dXGej3@WOEZIzdt+5s>-P4v^l|n% za=$=eQvSGjkA9&zz;gENk4^XK@c|)DJT!$h*XGs8iLh+qqWpvlPoQkh_ z2xiFO+>?{IM?y7!~6Z12DjyaKu3#k%PSIGb$bssT-A@< zN~@M^YSbo9WdCu>ROImor|{UfPNQ}v$lwk6G;PX|;}A4o5o7g^61HC7XE%BX0Xg3@ zk5}jcMY^T6F@Kxg$m>xFYj@>T>J%EMkw5Y9Ia{MDWi+N_D?R3G%{Fc(sOVM&B{KOO zPCq`aIJg8;qHn#ThwbkrS4(}TC&5~*VySQuney>(4Qtvibu$klm*O3_ZA6%>BcBv# zkc_IRmZ)1cPu%3<#;<^ul8ZZ6-C$zb-RW3*u9gOI_%p3uSxn9EDSl zkUh1A^om~|z$G8(*F9uuVxw9$fuz9|zr336W}xLFp5rYrCxHuMa$~?uB=0NrV)w@e zkQT#6;H>kmQ&e`|)Qj!Ev|3ZATIpw`400Mzf17S66ZT13(;kgh0a_)xX2)8rxZJlp zDW$@j9Ui}r_a;6a1DOv!t~gn|1n5iV`@jbIGoPkwb^(|nqWU@flL^$urtPjN4y;fN zaLwQEv7Fp&$6_hHcTqp$<7Zz#u0^uKex5uTIC$HqS7Gzp^E2fs5#@QswgUP$6d)qriqE@0*6kjURN;igEc!xYJMz$os$;>X6{_Hz+tag&mcY#Kmt34%A0j90 zi|8WSnn`g5*SsY_-yXV{ag#2W+8c^(o!m0G&&OkTk8`~${7_9uW{qIjwYP78K<{yE zt08*VNp`9WN6ocyf!LwGwFRpJNhsO4am}aJBQ6TBcp8()4$T+-d=y81SZ$e?5!X1X zDslVvI9Pjq&U$#7TL^LLKEf5JV>P-iHl#`N7Ah@bFhh7<9#|cAA^mrW&PV z_l>L3vpdj56Jkq(^vF->I-j<=;^w_>-Lxf3fDAn6PvbFiQROtnILpw}P z)xF43+$9)m{FAU>wgvg5{g3|rQ5>fDyRpO!M5T2?m7J6w}z0MCt@mfLS~K&Ns_PL8RN=Z%Lrs~khwDoD0$MoA9!Gj%-v&7mywrI}VDjKFobm*~MHGeFhMbFw#!92ry!IPiz3@!(fa z!@~Qi9#tdv)G7&*u1*xQ!I!9!dc|b#vxZvE8QTBHqd0Kq1Pb*@!pox?(4})!NnD)9 zyFPO{@+&A!I4*tf2sXd9 ztdOoybk*)vc<(<+anFAo(Zorj4jbJ$E}HCok@Cf<(BKd!_QLlksD5HC1@!5mRL8k+ za=2TtI5ng$JPAr98nvm=a=)k`X6C+e$4e+nmQGZo)5rJNZLPu(w!(viE_t~5H@2aF zkKOSjwnBiq^ZTc9@H@j<^3hfG>Mrpt3s<+2F5#ma+hkvua09bX`@Vdh`jJwR+R9~d zem1|ifa~w*r%|Q>6j6_B+0J;0Qtb&>Dl}3O9(#6YBc-E0We-s5rb%$ckOGy7D9g^- zxFe8*0kd?fFZxLfi0c}82=QxFp?hyzi7hwxX+lQ!3rJtp^OLye_fP9a6CG=osTUV_ zDfH_qC)_g8ITZ&nq1m5&=@f4HH*1-u>{To86ne1x<0Vbb|Lm(nnucqBuhaUM9kMJI zjo>IHCh8(*4S^<7eKwq$RS~xPb`sARg`U`ZKDQN@|9r1Kjv&nnr>VB?{SQN^pRX$< zZqlXEthv3+@%1mSo*M35qY2P<{*e$r`|=cS_{U{EoJsBxjBLnlLdLQYZ&xB&t^h9taTCiII*a zS)wECcu1~-ddzGw5mb-uj{2E-W&0My`bF|CYN6isy?D=WZN!fEti#A=FM}J}`iaDl`J6^v#{RFL!J}V0qqf1gq59w+iM@_k z{x9Bn8MfZIh6!;`D<^E|AEoi7>7(Ln0aT=xV_SoU+ z(Z&X9S%B<(&khzq*nVO-6rD&Hes&&SEJnEmf8!M1_xVeSKb4XAma~oG%uuy=fUfEz z-#kMHO#HSY(zbfPOD{5e%r`B1-)T}$-HDe%05rCds2-UQa|2KR^`M@=cH_U?0I%03 zv}HquM-OA?%>`_Ja~UuFcoO^XI)&s*Zgzf8M`K7;xgk1RgD;2g zNr`&Ct}#IGYJ=-Py#hOK+=*bo9__02-L5S^Nh&G6|HY#?{YXVQKh_kgS%4hfMe2>m z{8lDkT1;SjNN2jy(m%DV9uEC@5QB#&aKk^}j4gZ1_HhW>h`v*r+J!;dWv&?ChgETEvYBcwi(rxx*Y}uZ07}JfD#}eHC#Z!3b>!;w> zB$%n$?3hS|1phq=-u#gbdQMN8l>trJX}jb9#7(!7E9ZCL4e*Tf=rNe0rjFEhA>Sw~;xfngXZ%hJB57Q&$;u=wxVxx5MHB)_6OcNfcOja>PLgp_i zcC2khR;nWrDx)<`7m7_!`n(7L+_|RADf6Ho?G_SdWM4 zbQOkAQHj(-wI3l(NY4i5a|vy{^uTEx_{%ABJd;E9IurMKN@!j8BQJJy#d5S)?GHFe z77V7W$(JY{!r=2c{NI0F#XVm-P4B#fs_Zfn&xc{a*pUj>z18l>L`TtZilJkn9|tD9}nY&ee}l0?cuHV6nrW@Ler`1&1AMNc3aQ}G!JOG53f%304KW%&Xd$xw&Rjn zN@A;(nYv4Xlt)j*y1&30;!YO8!O+PGO?M`ajW4Q%B~aB%h@1P+Z_NcE&vMVbU4IKo zz^f%4EsaAMIx=nliiYcUq=Lk~oIJ`bn_~mFv7n6ugYhGY{hJ!;@^bHTwC4W&rX59dw#m&I_=1I6^Y`&`*P8E|p;K1rJbNj|&>)F= zHbm5$)1m~&v6axxJ0{~Kf=vPWm^@1lYIr&;U5xcyqQy36&S+<8md-g4cg}q+eYBr_ zqrVmv)a+$1X3f(@{{F)I+Tc-;3JPLJj3b`8e-hX246+I|*o<3~{CZmV)biqEe{~MYNRZ`raiKWLu{Fef zFyi8|Z=cY5AK5s9WlWyf;VtisFEGMO=jQIN&B}P|W(|SMN`6&rsk!C(LGqo@s*VEl>}4oekx+C_0uXJdW2`Mx~WoZs8~)7OTz z?V#yFH+>E^Ut7k`cdS7Fr3E$8XHJdc*uEN$K6oBpt)Tdl!RupMuZch8)@joX>T-hN zeZzR^{!yx!R5grLuo*f1T=YG$eW_k^mQbm1G23h6PZ@UF+Zz(_Dz`Tz;8kv~c?p=Cje0GQx0|v4e_~3&*EDOLD*ylh M07*qoM6N<$g2T5*MF0Q* literal 0 HcmV?d00001 diff --git a/src/assets/images/app-icons/breaker.png b/src/assets/images/app-icons/breaker.png new file mode 100755 index 0000000000000000000000000000000000000000..2b344dd658938451523670591a60b13539e864f8 GIT binary patch literal 8025 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 z

vcCq%`vv{BOU34y-ZrEd*%yJN*+TfJ(KuEyNoF&#d7QE8@l9O7VoZb;RN3*nx9 z#|_@?^OHhf6Jjb)xrTf_PNDMlxyu)Ml6dNRS{=2pDEAK`(E9yeKO>9NLs)~AA!&!< z=ayZ^`ZB^T4P)3Xz~lo#!1Gt0hfv7p z^)@w}-4JzK^;mcU)Po@yKw{Uv){L6R=qD#92YR6_MnodH*;uq>o+`-wOl+1}%l5-G zB-l40%JFF$Kq5*6P(xEEyv_hDDJ{TA3d7QQG`gHJrKGo=XvTC4u>)FBB&08$Ouc#3T3yw?XyKP3Q0z=6oWrLjc{59;1lBZ*S31T z7YO+gj*Nx@^x&qfyc7!-&DK250B2AXb`N#xN45-w4H;26Ed%hv+hZ+J&-e24a*042 zy`!~lChO*-yu1VgUQ`9$S`R`Ts~VR!I4uLPf}1G#mf<}ya`@KGS_c|Xg@Np bsEYpw^U7jdP@|9y00000NkvXXu0mjf!}5xI literal 0 HcmV?d00001 diff --git a/src/assets/images/app-icons/castbox.png b/src/assets/images/app-icons/castbox.png new file mode 100755 index 0000000000000000000000000000000000000000..dd9de088b7492d038ab672357a868b023e4c2dcb GIT binary patch literal 7127 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 N002ovPDHLkV1krI`)&XL literal 0 HcmV?d00001 diff --git a/src/assets/images/app-icons/castro.png b/src/assets/images/app-icons/castro.png new file mode 100755 index 0000000000000000000000000000000000000000..5e4fbefa716bbca18371f0d4f06ca047a289bdc4 GIT binary patch literal 8954 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/app-icons/google.png b/src/assets/images/app-icons/google.png new file mode 100755 index 0000000000000000000000000000000000000000..3537705b981d532d1f46bd259a832e0185a63c6e GIT binary patch literal 2576 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/app-icons/iheartradio.png b/src/assets/images/app-icons/iheartradio.png new file mode 100755 index 0000000000000000000000000000000000000000..33ad2676c264c8f324626ee1739c8dae653979d3 GIT binary patch literal 7401 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 V*q1$|ob3Pr002ovPDHLkV1gZebEW_Q literal 0 HcmV?d00001 diff --git a/src/assets/images/app-icons/playerfm.png b/src/assets/images/app-icons/playerfm.png new file mode 100755 index 0000000000000000000000000000000000000000..53a44b9e53fb826e42fc0c64e0ae74ac5d1cef80 GIT binary patch literal 11114 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/app-icons/pocketcasts.png b/src/assets/images/app-icons/pocketcasts.png new file mode 100755 index 0000000000000000000000000000000000000000..0cdeded380e6239a2d02b7cf406662ec602c2533 GIT binary patch literal 5392 zcmV+r74PbaP)aes_wnrJzv_1P%rM<|x_i2(8JVARhoQS}-Kzhu zfBXKb3u~HnltLdBjcld*_+L!20f{~;9&z+hQK?S=MW#Lh6q))2P-N;8K#{4F0D5~+ zn(g?rXVfrk%4QDP&NrX@>2*H9 zWbSln9waUXe@XVnbz`HK5o63}y5YI2_{sU4pf=MmT;+n0Z2|&f|x2&ju{oPaG9Csqvz$zpd!kLvt2IAs3;2%q~yIJ1rg zw=L`{B!z&-Jg7I{g7=GCp_&`b=h@DeWhl7z-z5c5P@>4g8@oRu*WQfK;GubSuKA`I z`G=NY-2&&me^bPy^VGt!r?3K$Bw>of<*XACzUarWN=kgGXD9%F)v!2Tqx@K2N1lRK zYipFE7-7OsZaH9)Ffq(BtrPB4|IQMbTBbuLXRVrB(E7W(q5kq`3U#e`x?LDH6*Ld< zxJ2aa^AI}ibTHed&@yx6Lz+Lzl&t02mGEAF3vA<8z}mGCTere(tOxg8*d$~{A*|}( z57rQhqDG7aA3hrV;0eI!(X;?4gUCYT%oxi`5xV$tc%d-dr=EmWK!s(EGbZO@$}Z%$Px+ zW!9e-Le%pRd*t`9A9*OAbmx~{c^80zx4-jUQsK)?I2SZogJu$gg)8Cx>s>_ey%V8z zYmN34iez;)?DH>%Gk${3zhGw|4CM+m-*G$S3(v;28F{0;3BY%Lq^J`nAac`f;N);Q z(wiL<1JfV3VLPJt+zGYx6|k15F(n=PrO^rc;m0HKoIy!r9$5UziH7D`iX|{=q;kK4 zRMHXTq)#{jp?Md`*zpsfUA)*%x-zV5otWU}gPaSlrl5Na!|* zE$e|5pFu7EH>~;wVm2*-RN7>sDFJubaD;EU4Uti!6Zm%Um}@tp<=iu2HMJmLlt%#& zlW66KrcE=pG99#_q>o%iUw;Mo-(N!2*ZCNKI{_G1OiXt|Wst`ljqt4FVeNl_2?-M= zL}|*8o!7WooF3Wzm7l_U<{8LkZ$Xi8u#-0GJGpkWq^Zu&7a}zNaCBvj%($1lh}h3> zGFp%iJ;<8?)WjnYUU)m4E<#Nm>3B`f$~y=j9NK3 zVvlUMYT6F(`R5@XeS}P0bLxham9zQRqTkG80{hbefeygjTW*4U`DOUwSof&g0#KB= z@c!ipKlB(ZgJz~_M@!$+UgDj%;a;}@j3S<$Nze*&rq2Ms>gMR zA+Dq`7`L8y2(51KU&~-kngme(z|$avrhUJD5FrPO>I*E9p65v2%q%E688{fuf1MKC zOoLq%?KCgA%9sID$%>Put6Tl4CUEz?2+#aBWv+h4oNu_uqE&5E-_EhK!EU;hN}B^{ z_IA6OFj#dBh~97`R9#)*))R}y7y0&V64XF|b&rLH6**rz=s#{YtO1pQ*`-IbiQRWE z_@)hp`HB1WPq%6ytlutzGrAg?l6Hnl`cQ@WT}XrBWJ0?15<2i;gzmT(UPZYnQ5uIF z|DLU1jo4jx8iX{k#!q!=_MKA<*2IxJ4>{u7JaV~|T>|^q6MXz6V8wXv{}cG@Urnf~ z8JD=94X8lmhJ^?Z*()o1?=>~S`-;pNg_|B-VnYpNtR*8M=mnrx9p7Uwl>OpY6sp>~ zZr?U0$`Rz!|3}N)6g?@Cz8`8EKK^7VrzE*mCYP&QU>qZy#TvFp+V4Fba%y}pA2f_C z3{RP0>HBQTQ{=w;BXs4@pl-cUBTOc&H7k>%GxZzNf{BNl2rT8?Y0=q(1|d4-NQjqS zq50+Jh;uSvNxwhys4g53g>6fhfDyw~!sx^^ROef>;LM(#_Rd5F>B}ExHHpdEbX5 zrl^`#+6epKYK>C9Bh{Z+AAbt<@coEV+t?Ei0}YLFXj-KVRJ3sHqi2Fm`DW+rcKup- zB=D||a9Pu4b_=S`NdPAO3HL+zkV(3rm%ekFlX&70Q($KamQo&|!XbzYFEI8v9SLd| z{p1tG=FJ11dKA2=(SUNk-Rw-JT)=%s^TsBqMT<~B?;MELUqUNTs)D;-4319j=3fO_ z8tM3aeLeXEW$a#{5bSBBaV7ncEAhlC%I2bg9hfwc;DIoyXlg5F;{K05f>`ls$NRO@ zI^+9@R1HmAAMkWYxa@62ue=0U^QB+A&0(Al!PxEv=Rtn-LEKKKW zUFPHpauNXVKM-on$bc3Um3;9TtZmzq{4-iXBMi@(Lr7_Av!(Zgia$LGzIh!~?tZNk z87KW!4Vr&~X|IukCZHfXOWzp~wuT?OTVnW5yC@RYvPBdu%8-0gM<< zA)bSPQIXyKuw&;s_9lGCsUDj?=BLSek3H(6sd>Q~+mSAFE`APb!-kakf)VuwTw)Nn^PhgUK#^7kEk4iply6wWyPv5D9LHNmup8l z{veuVdZ0@zegUkx3E7M((@P_nk@_aHH&mpE+>EcWZOEyUeeF|zm}=>8sCGSN^8xeK z_YNBB*QB!?S5_Lp5<&dXp~5=`rD+}NRWtu}N@(Y@qMPu~0Ew;O-c8ebprR!50%&N*jo}{C! z?(nypQ01$lB2d~g8im!+0NHL888bkGOxa$mckKo<$wHq`V=4x@eQWyf2NFsuIod}7 zd1T&F;#FUE?4feTCO7ms-LjJ=uULdQHR7f$O>E8D7zt^(W?ZDhl?I_My2BJ_M_V~!g=CnOyK>y_6 zRX&q|ok?f6#L9FO4}dyBun~0oRNB(TX{GPR!+qZ9a6G( zAl!~^DckGJnpKhWW734HyYlYod{b^v#FknFrK;Kcwig*ThmQK)1E|( zs#_~QPU~dZ&|$#wCt-J@+`zc{I>f%LN&CGvL2URa(t@FW$O=EQ(G@L^it~EMK`Jua zJubKiYQ)I2*!|ayauR??85aBS!?fQU{9Gq&lcyvT7ZyKEAzpb2UQ>OV8%c1EjqrkN z!6|7|@so^SXUeT8Pc>fo&YJ<>Gqb%fG~*auRAYHWb}#N!C)9qfPu5xV_$la&fq zSZt`+lv7Pu<3X_x-h=Q&VA8}7nE-yEzwIQsgF%1(%+rXG851dzK)vD}YGjW)1d#{- z0Bi8Dmpis2 zu}#Ws;a{`boM>cYbZxma0GBw<%0m%^4n7#xF~`B`-ygE6kp|u>u)jd2TI|r_0{bPxOTv;i|&Kix`|*OFQ6SmWZXDdS6u_S)0Tt&t5fu^3zr?jb z!w>lP?OK*4 z!Rmw78qQD^l~4zbN6EMY!G;Vq`*0Lh-dZlcknZ)+TZz>ld02h~kmzvSHxRnxE`-X; zx^7HQZYA3V_B)8)cNf?vD-7BiQmnJRPxPgd)-S$$fuZLpVLuXfyqmo>=2-wfJBWE_ zorAIqerzg{U2U|LQlBRfW>p)w`j3x5tytk7<}j*$*Hx7nv1v5=+i7v*NR}$<~4eP{{!6qF+@u@>O0)@BD{u^(3kFNBd zp}cE==@iU_r271>I{ODGz3@lIdRRQOU1R>MX#6);F@03@^OcCbzYKyRExvjUkbXYnSy#LHdngbC7)p{$&;ItS(e zvP5Bb(-n{k>d|~xWe`8O%aamc*(r;0W zwxIR0OVD!VC5YB;FefRyOT8QlqC{-c_#T~tS-IMTl$JowIUS{Q{~K&TrElA_IpCo5 z>w2PSoIaT{;oj>5dOWB$mPf-2`V8=c_oL;^)6jC?J#fETkKK`aTmurMlBWf@f4nnP z0)Eudux8FeXyRe?@33iQ>cXis<7=V;MH4_OGDiuxgcUA_b;J~~Z%&0>T@5~ZA225r zcf8U+nV`=Ud#xmZBh3Nu-b%aF{~=@E9;II|+}Z^1mHz{yE2iHKU0DHpR&AJa3XJ`+@A u>JvbbsZRh!ral1_nfe4!Wa<+@k?B8vmlDRGv9UM+0000P~`)-Du1T3 zRXM4WA}3B1m1$9;BvTY*krX$R`{RVwQDOLE)KgO8C_xpHq7E->?7N02?&=7j~j@_%a3718Z>T%V8fV`t-bFWT|6oG9P;nL_2$h_ z`g@Qt<-c2Z4Jh1C6>pj+*)Rec4AuYzHL}?#o1^>!Qy}_Uge&{|M$Ou~FrX+6`R|8I zU)fL?%p4)=D1txaHl67N~q&;(UDPT|BRkdG7DPs2srt7LY>M{EdyEJhf^8{c{hR zEBoAcOy}0&_syYm*Qma0%2sb~QgcQb`O~bia}3BIF&Lu$WzNf(kx@+Xw9yz^%A8^N zy6^8*+EF^)V8Aix@4<82xYh+Xiaz>pHq1ob47?n9s6J6CL2Cx+v+Xx-T5jf=QAbdG za8}R6eP*NWWk=Ky2wC>sASMjDE=3Q;d!%z{Sxf3eN+nno=Y+|bzHBb68J(^*ZuZ=~ z*~yQa(tu$Se=}0PitwsObo<*HM|b!1%)VL7fIr3YWH4Ul5usWe&X&bLgZ^IY`(ft> z{a=<5smurDuN#J)M-Q&ds+>|jAC)J3aSi=*r9{upaObF;c71$vbR$vspmTz9!WiU3 zlcJ@{!%H;~A*IAbPI^-lz(bRiOJuBy^V7`qJu|_hb3Aw+NvyHz>v;+p4wW-=534;Z z;VPjc9$jJt(J}H$jB(d{&fM9n<$q$MQf%8ZTgtN^Qbo#ZO*tYoPFs5v?46ej^HlcF z;8a9@!rauw>jy4i@UT;w?7m`UoO{WBr;`$qW5t7M;wB%C!(^^S|A6Csr!An@y`O#qe27{OEr;g~_C>LUn= z&_U9>S7QR*HqdNFh?`wRO@(MBK(|TE2xxst0-qRXw6Yq^|7jcdh!SX1(9mIHcuL!> zd0zfl&}YF4K5iJ12Zb{#_iuKo`z=HziRL*Kn*x?@6^KMy$)jMZsxiJf#Ppnp*?m4H zwrNzyNQx^S8%vVnid|D`%XJ>5bshR4GOKY*&@Rb;BSGV`kNGoQTsyDOxei2aVutg_ z#23**YjAxD)Kum#dh0I|*W~`~C*Kg}6s~sDAJ}tf;1#MbBrA0&_T-+V8%nVqB&^#nmsk?XbABO|l&!HbLe?$B|FsIi3Q z3u8F{PJr|8E)kPFIqaE;7{Du{bw`0bmnIcSZMVt%1#-S(4Tr4Ck7cX7d-uV@k<47k zRja@6|GS?7YSm{a{bKm7^aoX7^X?Ek?+Y-qKSF(~3L|{6j#5L96hn+QRQ4Q(9JC=n zf|$%1X90kBRRXKoc_Iw;v9$^8tlTd&vCwS{@cG>BfkLq&Hq4;`5-nebT1Hccz8Vm+#4K zym4U1{lMJ4zGcO4k)1BRpZ5$vb4dS>Z>2`AraONo= zQ{-nH0TGolKn|8lyefS5oT-uZ6Rrxq8Zfnl$9`iDv%9K@D+^>cYxI3YCy;&Be7(k< zG?<7I$B}TvK0ALB6!J+6ACBSGXD^|3jUiK&Oj(=Gu>qat_(B&MaHDAowQuL$*^xY9 zR~J@H&bg|L@ba0BB3ZG=u`LB&ump}tl)B}A&&E}hrq6XQJs_d%FA9{CpI!#ZDI z@IApyjzMr^LmW1(>C#&UuRqs9(ja9ZE+iCXgPu_*);DNvkWV=jv!S`W=Fw$81F{2! z3}w;uScl7@J}jaj@=VVKc=UHd)V9!fL=4hnD~&g3Y6Sn2)S0-7#$p%k>k8K{L|D3P z(4MD2su3fKjD6@NO>1~o0Lbyz#yr$F8BFa6uxW>f$ytSPDxu>X2Xm<9QKnw5YobGDw7ej|kET#K)& z*mfkrqhFb#d;ysn6U#z1BL^`HUb-5mNsxSx(l$^L$sqA!DUTaI7A|&i=~PTXQUmcy z)uInpYmWo7#F~XPPH+xT$m5631hBL#k;H_|o*()cn+!3tFUDQ>)G)n0Ky8vWDG_)| zCkawxn{P^#Rf%+yMh6@zS1En~jz6=Eb0=s$G3S{`8#s6~T}gEqvs(I%HhnC0zxNJe z09H$VPx2v>FNcZX2OkS?|C5_xstssnkQprTBB|`Sl#xKoa}}0=AnWz>z^T`+V*Y)4 zp5=;&Q~CgsyUC3*wN`y;>Y@f4aS`nJ!-)!Z+>>DMr)rqlPALn&OXj3W&s8BpdRS{P zA=%WKsDk6qF5~p;oX((UPe}ceK%BJJgZrrl`Glbi=y$jo@qJ(NIESAKvHxfYPSr@Z zk@GPa{176slHw)FBPn7Dz3_GiAHLqk!bg!TK1E0=%(LozGjO$+^S4gdIGj&csg3TlNF{AFW}>{yH&&J@neOLcIIqWt{ji5nit#>Ourip23-=^w|gf z<}p%VkY$4Dr55P(p3f*8`aC^|=1_%hs3>hr3sTT!G=X$rP(J4R} zTEoQL+T`GT5t~boVgutx*!R>VWnouv>aQr^q)APZ18XA;wP$YMD)+413~cjR>V3AA z9GbJEBb&eH34@0|KTAr`6#H3rGih;2;UGy)M48FAo?pV5*VwREb5dTEjv}Fn`TSsD zDC^t!!G)t1a`xac-;Wb$cJ-0X|I>A`Gm93$>g*Y?l65cxoxmRMEl;o?53TOvWtro7<0DpRN=Ie!rEeWtpKnVA+_c0K za@^y2ZN*Fos}d0si~l{FV-gf*@|0Rdz4SPP-G%cJ=1(Q4&v+Oo^rXFtFx(U350)~P z2kpn$wtEsQi)}P6(HDuw=#-A-QWYhmPXp3o2zutmcN$Ptl)?1y*?%~O%2bWKenjVn z7Rr>^PKg}|j=uH$GTwic9T&q#E{Y^#4$#M}^u9cwmn+z?RB4K$Yc)bNlsT%`xPGe(gZ3q zU4pj0sHQEf76ncTdWt30-C5H3;eTI1e2t1hx+^|`gT~Y$+h8rvfbGNpm6v*ld|2&8 z!Yags1W)|a&DeIBmQ5MKfNgRKWaDVlkj;$e1N`*=E@JTxQJj z*bHbqEzT)>KxN#$G-^~G8=ECa`&1Q&el-+fj0sPBYJxN^7PH096gj89>b|Pj;AM+* zyhcJRj1Pkjr7-F^_xcj06WZv^*C^U<+gy$*MzD51*aQf1u`=7nQ@_6#;pQbmPiz^= z;svr8s!r^0Qv$DpQ$JZDhSUTpMo}WMNYrwdMlw9Nm0uF2S$0M1-$U0Db>&)$rI? zH&bbnAI{}>be$xa)tUr>iLa4$Pz)QE5f15ap@)c~1107vpa~{+*Kzo&mAD+A5|}N_rnGv((QUhqkKVtGT?aSAuQLp_-4#ZXd%3!_z-P)g(eK$gg1D!< zXf7LDa6-=y69@~1a#uxu^JGLFDiJ4P5hGyMx#;$8rT%9rj zS@zTupCW!vF^pDX&bI8WVDE!9Ts;?|yKJmKVUuX!+FL9$IGLx}zPHCPe{l)B?i;7$ ziOUKoID_DB4EG1oj;v+iS8?%F*Gj#1v@*pYff%sq>-lD)6d&`b)O~#Vx9jBeLZ}ke zx6esPWu=Lizq5jCA66tM!pSm7fTc4u!~an_1;Ln)M}Bh*k9>8KKHGMYk;Ho)2HXB1 z2;_G-?&F@v30~LgxNv%r9;GTdEOElx7UTuV@naIIX)GG7kY?|?Zwy_|d1>xl8XR@; zbz_tmeE&7_U!1>A{H%bJAEi(2d2|C}W9%oT>4kI(<8^WJ#SoWIQZ(F+Bn`|CPMdD; zG=`QWWMf-=Jo&X59H2CY$N3X>Qr_*`E69St#P@w$i%v`(dnuiA^lLj%n`zVcp;ABaviGz37cZ( z6(nLSFP@0;&d;vVgOOyhiX}#Dp#*8<7x=4?q;7H>@Wel3G{p~3I?DL~39*I*D(SH_ zl2rEon*4)id#`Mmlx2;i&&abd(}LRp#Oc*Htl9A~_WI0Ga=6B`Mf=n=Gg;!q zVtPf{&ktTRIRAD`j}{@{rfD}N2BOiL=4>tnQo;mP16csm+IcAh@_~XOl}QLaaQ}=B zR&q5^BMni8)3S7VXUX6f-(8^kOWi^{M>Zjc7mH1;`E}H1J7n*7NIQz}`R)v7>rJ_V z*Bm<#1tN(!3ErASh{}#xX)cI#<$-;=m+#xQ#12VZB28AFq!We>>u-oSq>WQM48=Nk zVSG!BpyI=Bqjo6^=a0Ci5VvBy{VbL0yEc_>M8Y`^NnH6S5D5FhaZ1p&d7ci^ywcD@45NP@)%vLNS49(d`N@yk~InOoM6$F!b%0TX%Evx zz#aQN%9cd+W%Q4?|GBv3vjCKo=c;z!@Sgk-6TD4}#W39NRxp?tEC;()y-wLGcalLJ0? zDOUu=cy)s#UmU}sN4QCoy9CB4hp+Ma4=!TqOr0X!uBapcU zL>&h)?fFW&`$9=yjO~r_nJ>>#&`1pA%y6qpwc{qyrU5VFv@{_oV+Av>1vv&31F>E- zT#Sr83jc!|g+tXqaxblh5zkIuSNw$~q>)8=&Z$;wAs%{q0!OG$%t*lVgHq{Jl!J*m zI;MCbq+srYR~mTZ`DY1@|4D z7L&=~Lb)uwCgO;b95C24zV+P>Uj5!YWi|s54egR^X}lzK;S>esiz@W2eo#TXMVZi! zvI#k5T;S!3_Krpa12KEk;v({?;h1xRkxx=d1n(qr1GYmp(bQ`tWa;2E1wYr$`)YXj zwk-4Ro53HY)c6>kwg! zLmXkTkB=5ZTzcP7?V*D$WTNVm)y$#$A`pYk6BBRSZXegq`dGQv%BoyxFqQsj*aCni zf6#3+0+gr$5o>hP^QpG8!(?@i5(X517l_2s921wEV#0*y45cKtT+2%OALoz=zWUWJ zp8SI?WSc{IP_EB&gO=+D`MxC#3HFSOtl*?vdnVd zkCiM&Mv;WuyjIyuKnI#vW1N1IT=ztTEps&i2qrcXbPeVJ`Kz#l&D%n}{j-kS!s~95 z=Crsx$#md?p0V1%xgco{;?C=SyO)@peS>mlmSjTz0-;oeuq@-|pwfkQ_itR16*c7L0vGLh3$G z1(D^;3bidQidCu-ICBxk;}nHwZTj+A;H764BxM^XRHRAR&-l5yQ@ zV=;T|oNevZNaK~!lz-v-u+P!$4E4bIE)#bsyBp&5XO_v)PGD>&1#u+pMt}mD5zS#9 zWpn8soeQy)DlHv+%UF|Zn;9j<7?Mf+*h!dvILMK!qD&~FI^KNl8Xo?gX;9dJFyd%6 z5GHVx9g{zK>CY}9UZToT(sAt`JcB0$w}h7}fLIqzjG5U{$6W_1nBARVVk?ogT9;e5 zJ6)_?_ApOK=gJ2$mM#(Uikqk?Hi5)k?Ic(lx_s-fNdwyp3P1YRWjy_FNDIO-VrG|^ z$)KT&E(LH&Gr}u>u|yVCxlJP&$rRtnP`h{R{g_i0n|9NBuIKv_56nFj}%tTzdt8TwS}NM z8Vgj{_;ASUA7mUnic6Km6 zF;3~+So%D@n50x%4qK%41Pke}v>n3txe0}e8uwQ4*?%&Pod*N7xit`6XpdpDVt}pV zrjSs%eZYjnX^xOGwAU$*^@BgTf`v0p(!4sExCXMGBV!{?mhAwPUiMZnzSYO{OpSsm zLp5cJ?z_IE)|1$_Lu$8^vghDGKIzt<0V2U(R(9lkP>Ncz!VeeSwaGbeowcGcT;-z8 zyK0qj)FMKQa|*i2|WC}WRod3Z=|Mh zV-Fexq+3y7H-U|H@aXT>so+10*S>$1YTCZtYBV4_sdLd1g8`$FNqpYy;6}=GYm9X( zLuElCdSQABnK?XXgd-2=Brk2xupMZg_y+#|p)ZY-3DjSaoDfefO;e0GdE+Fh!aQg(XesJj4zBO^JMJoF$OL+stSQ}6O>)jv#(l=j%be{pc%PQsKch(=m zp6SnFygn`WSZU7Vqs5nSvH1$xCXpU~4=MCCS(is_mhtqz+<|ZWhYLW1b6MOx(A#u} zA;Fa~>t}ZI;}#TSdyBV`bl*{vf3=Mz4Cmh;JUWZoc4g6t$-kw=!clGrJF?{oJh=5A zV{`2gG0s9m4iZ!?!Qm}WVWD*aug`xAr{gA=H>3Ao^<00WKMT?s{EQw z-W}Z1aeI0}WaKw|SY#xvAruJhIN(!sTPJi9qrX(iq~1I6Bp%=W@2IBWyTcC0n_MRm zcOmeWDJp;;-T6n@J@L5g`7m1bG>*IRDBUo(Zya;?1+sfHE3BwnV`A1Cw~qn2=j-h` zvk~f!gH>)pmC-M7rnHM-|6z2JCy^DkII!Ij0uo{?9HS_VY^Z*6t{|{4RGI)91k0mJipK#~-gZ&*0>>=VZem zV|}|J!e8Z(`ER=k!tQW6dHES!?Vh%~T?!}K*2wcGjr6m^HFjC#(<|`Yu5p`TXs)9y z=@qs=INm_x>I(S+U)s)*tCeuW){7Va2Tm{jOo}yuWJS3}u?R1@(#1_iydUl4;&XU| zazeao(eE#^P`0yise#MyY3WBwU!-CF)@wk&j%S#R)$Xd7YHY;t zrzi3|<*EmwD($Y+o>< z?fV^I@@u?(W8G@PBi}H~1KC}e_N7lsUUhcQQvp8z2eWii&Av~F8>0ZETcoscFN)$$ z2-gk4CM7W|QUg$aWP>*88%pcXfiRKZZpHhIfAT-C;O*xarnU$ISETn}C&kR??bM15 zLqTbJntyl`w?~9L^%LOiD^05DE)xx7NgH@MspP&LP6@?i|GPeK2W=B!?Tc3B#Tr@{ zy5;0Pbe!Mi}`!AR9?(=jn%1?7&62AZ{Z7=*g-~;S1rtinqU6ZJTfTZ!+|GI)R zFOg*OOF1f9(gxNi^T}0m#9XRu!;6e`By-obmaL{PKN8|`@TGfkg&{L^`elt*{ z+ah1ll|5<+?|gA}Y^-ywchs=~8jw$XxdvQ$%?#Cfd2?So#`pi^EZ%>a&`vjY{r=9Z z7*|<=-M6f=G(uXZwU5NzdEgf?=`or6?5n^J{@VpKmm}%QlNWbW_{~L}UVDlH*0I(* z>bQ+gxHtxM#l!Z|8z~>2eyNET`On!s9;(%G*}!3&zEts=)gPq-#(NQ3*O&3)|6jsS zzj+B^vKgJYE6o9H^LuYF0aEGTh;iGUaCYNdUr<`OweKh5<@mC5-t)$=X`9BwU#?-# zr>9Y!R@sKTe$bMSw|HaZTgR^B=g%Z)&uh{w?!0#I73$h%tKMsC%q{8n8Fg$R161*M zx(Sha!4WY$M3|0nFkFx%}SKG}WdMq5{R z7t<1u4n!UydArfiBjWPb*lx#{ON_kBxg(grC7G zI%L|CrR~*V@|op64c-UEY-?ecH>%r-vkJkqPs*`rD6S-JpUg}Xh8UV0s_twP*xRxcx!pM>dwsc#( zDZ-WF3n98uTu6`*Un&a?03bsUtXE$Wod^o?_3@)2LQvA%2n6eW%M6tUZA0kZC}~@~ z1qe$CAb~U?8W5N?nhyj5Ap_jp5yx7Dst_3TS2R)x`9Ek|p8uq|x&D(CH88+uJ0~|+D9MN9OY)=BSUlBV z%CTzu5Apv58A7Cf7uzo4_uP1Xt|jNO09>~QQLy161~fi7Mo zSNe|CVy)Ts-akzAfbK9Op}#~USvvuNr?`>b88{-HgjR#8>Zquys=!nUs;UUq34y}CfG3Sl<+&sJ zWZvV_Y_vxRX9P3+utF3O5xDWlo|BNczFuVtUkkbJp zA3Dw+z?LBdGYZn|=5jmSD*NIYNHm!@%17-A>fv>!#AQ-mD6%8L0b_@Oa}-36vnv6P zg-o+6$wtqN#=m7(VpFWoXGR(WdJ{jrb%N6?6if3%2+y#VaG`Eq-qn)^$Y`K=aw}}a zNMLXIs-`ZWu*Zm@9L9b&&8ifv?@Y1UJt9HW9o~rL4nNi8;GqDS#zf{%6Oa%Uu-uU@ zmv@g8Dx5@%i+Q!2OC57(b^3DIeY`Jd4`ww6Vev(3@2g(63LAicDM_7rz4I$$p>XP~ z=XiH+<&CcABkgs#UK14+u;2P*A~R>>a8`EN!GhlAh-$_7w!q+}jm4Pzi37p?o2b)o zN*n8nWm8L!($9WUs~zj-y={ zyo(v|w@yVydZM24ByYY^R#d%rF#dkJi|5hqpdilJSa$4@FW8Od>-OO&U;^0MmKTQ0 zMEfh#{YN5(0(O$fupMGLugJA)*^$DJFRw*P|D5cg`e7@YU%| zVjj_XzeMCftKi~6^~cnDIu@^(rrB7e7)AE?;B+XYuM8}+W)oA-$D0g*fmFtDcCE#O6W zDInFxCf^(>)e_F-E8FKSmx2+u5QVwqhBx~##JF`tPj2Gp<0b~{)O^g8ds9z+`jBnS zCB(h2tuLXmF?u*Ee-KF_IA5ErdljmChuJaftyJLF_KwKr;50`YtC-@2&1?48 zGIP^n^}NZ*sI|X*hhy(~KxEVk(u|8z8z|;FTt}@tUVJH!Nb1{|GN_douf#uSzcGv?|IX@lEdhqsa!^WbI6MT#@od}#^SVi@ZizoR{hsgM6bfC{>&5!UuYelSgwqS zc}qK2SzMwRPv|*kv9PLIQmE9+Q06zK)L*|R%%86aUv#bk7#HUm;EfWJ%#oYEVw!33 zcw{+G8tP=4Q|iN69+0%4`|b<-+T$f8nXqrKD*+Jue1tBIFF9(6Dwr2$qyDf?zfQtX zmy1U#O;H3`lXU}Z0cLDC%9$a(mc+9>3kMDq$Oyh%a;m*WZLDZnu4n&!+Pw%=hlXSW zaB0zJ+kuae7pg@7zU!Y)-j8U;UOHZ{Ma%T^#kW>i1(wE>rNoWRUCpBFkav<5>d+Xe z%D`M8`#Yq1~I~DEayk<5yOZ8oWI?Wr->WM1J?mexJs9 zY#mSfXzdDMZ|w(|+C=|c$hzvS5cQO2HlOx$a_SJRi@KG#SNmbuv88OvobHma{p-vz z7F@U{vzS?7MkqVCGWKkJ8d%-g?qJcNv%CkSc(LorT1>y@=~eW};|d;)we65Zk(Iea zm|?NzFL}Ud1@p^7MF`80AY9;erva-xQJZ~^0)iXa+_+-7#mM*hQq(-6ovDGMcS_H+ zl3|*jYI?gc3=E>}-3J8LXy_i_^+Gw+Lz8V9k>_mBHz0DAbfAWWx<{XE5&w`tz2t|)`Yz;bSEwbW{Gt}U#Tork8D@J*KR4erLRU~qqdC9K63TAle!dz3Re(6Aq^0#Zq!$Yh%}f4{i!b5M=pAs7 z*q_kvQk@PJ@?7gX^Dt)}{+NnFIbrC?A6kKH3OYiAQ zEuX&)uDs>kWD?-BFD$jnl0)}IQHR{>AGrclpGI;|3t{-4O0Pup z`O7n)wY)t2pk2H6%K3lEzW=7ItmPD!IxIQErz6tOnPw9|8zkcu&7m)Im^ftZKMoi8 zN>_U1RGzTRmLf7i^U%s1zi{K27r40Vh85eu+C@JkFI}QKadfR|s;NODh`Z#j;>g}Y zcu||!;|T_OpTKhtsmqLdHtX|w1g%_s-~qmv=mqgPG5SsIp|~Csfkvl*Ej(isn$b@J38CiG4ve)E^sZexK-jjp#<*vK});ninY%|LQYHi z-P2enI}@ToptSzzNczS*Tke*`f!h9v8RsV(2a4>z>H&zKyYRQd&)jAZ<(|-|29BKA z505GTgH#jRE!b{q#y5HCV{k<$)S)fuzB5rHDAv2#xEHH6TU;jZrL3x(QWz-X;L*_7 zc+Jt#epB>Q6-GuWLfuk8gpDYkd23AEcs_LTfS#$t|;M2%;GxG68N$aER=uk zYTy93K1Qa;`&Bk`6SRAY#>R{^y^B#`)s7q?K1uEySjq={{eV& azp-^_kGt6n?@!wLZ8b75!&Mx1j{YA!{&GD4 literal 0 HcmV?d00001 diff --git a/src/assets/images/app-icons/soundcloud.png b/src/assets/images/app-icons/soundcloud.png new file mode 100755 index 0000000000000000000000000000000000000000..e93dec19988b83dfd9d79bec799ced051e678f49 GIT binary patch literal 4329 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 IsJ)2%ACyxs#sB~S literal 0 HcmV?d00001 diff --git a/src/assets/images/app-icons/spotify.png b/src/assets/images/app-icons/spotify.png new file mode 100755 index 0000000000000000000000000000000000000000..bb82846bd4f4b21d68cee839c3c6ace1992fca52 GIT binary patch literal 8096 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 uV4cS$2dwkBsdH~8EH!lMD zAh4MUNQ0YKby?{HS#xL#yx3-a>A1?yvQ-#_G}EM4a#Xs%U3}G=GDm#HqZjc^^J# zbj_h$G9xW^VN0}*j*}k9q8o=~^)Uz%x6=8Jy)ufzTI56^MFun4UCvbqIpJlOxsaLG zQ}6|D@v?9{Vm1ACyXLAKvuJDGEXmy>3G5R+#56BpUa|7i4{im|#im?a(m+H~Q6NaPS@d@`|Hfyv@-dSGup($S!vVyGXqYSx4a&6 zr6Ut>Z9)kfa|o3mYj9H6@p@9b+NMzcNznHOAO+1>erZA^=b3$faL%G~c6?xbnDZmO7Wm^RbJ)32igSl%Ckw4b zbAHc$_>tUF+z-FV?w5a73s=_J3d2hqZZA*i$WS;lS2>QDdloy93Z+w%G;L#NhhGsJMt?-PcPetXr9&P-OS09R zpLC%oqaz$EYk>UjSCV3gM~Nx~mF;PhgViQY9Ax+oo39#xy}Y=Sakw*+ z9Tj{|LT(C!4+m6Qw%+IKNBWkE^1+94U<9@*eHNU-p)HdaSn~)Y-ruKDj4jy8R6e}* zN}YYUI3hmfN7c(Ja^mHtj5*jIUwJntKo`2{nWuLw{ui(Ve0|E$9b;bfoL-DPhwGR~d7FC!=8jAUHK$=+F)EzXvUk6fWRtD}S~BbgzQ zk(D?kTln_<8@{ja56| zXzYlgqT&Jnuc%EBpxu8XH3ng%Pt`CC-1t{$y`dIRDyqh8mcJ-EDk^qO6FAg1oSNe7 zQ|D~Q?;Q1X>1u$)=oF7c{#cszJ^pL7327*66_6DC5t&?MoPq6zkCDYLcC(=dConyC zJx-2vkU4dNKHWI8ZGx?jiAer8qtu&oOXg?o?_#!PcXT#lcD^4Tc1{sXX3rvb_z!0` z1*eWE=ZKcA+CR6i^|J}k1sg#1h9wyL`RS-NszgP-uhFh#B*vH7aO5a6UkNt+Kc8|} z^&~oG?Jf|3ncdZ;?xOa_Kn94(u}>U6B6ZZn#zaNm3R?URx!Oq!)QpS~>7bxol1?K zUyaO7Hb7rXEi)X}R`z*jNdSeV8+YDkjIY30cU>9EtxC&E}+=QcEhMm%@!s)b3&kydN9hQf+hd_MCh+wSDUNDG8Yp)ob^j zAOhmN6+5ZPdg%)mUw}n#vMCfOMM52}@Z98v;N(+C+lZt|C_FOmBu2+e=sofj+H369 zb0z4Rr8ecesObz_DUjYrHlU&J;5m)14tzt36OKM!6rm!^1iT(x30QKx{>QR*3Q}7p;ugX0F|d zrBjs62SZ0lPJj*+qG9d`_-i^E5XGVla6`^$2i>)Q=tYJ=mK!MH|NSYZ_S0-0wq;gG zL0F1L1xGCs$8FQ`eq7csUAyNKXU}nah5Ls;llG{fNvGD#@~nJ<<+wrP=U2zxJvWqs zp2}onA71H`7(hw%1#8&<=flH%<;LdS$j0cAWl07zlrPvtI$f!|rNrCT-I5$uQAqHZ z4W50t)BG@uKfBLN(f?0*pOPg55(MdGx&#R=Q=)gG!zXQc+l_<<6(Nj9hJmBbR;V9? zM9EJP&QDfTT@;B7fgB}V5R}ox%6XCO6pVhUy_nZr-o>+lHG6`~PI zN|$GeYrhNnllcYWU1edJ)5Tl9fo9y{EGc7)US_tUnU%wDYOb#Pcd)R#$0ZYy0pgGo zFW-=s@P5FP8nja!`_izFs&$SL z-uEkAygUxuFQc_fd#Gu>&_(~`6FV$YWU^1&N=$wEPSU~~9!Rxt+;N2MPPp+`qvoG( zDzO)KCCUSTH=K7}klDwB7>?+ZJ)CT*{ifqgAVDZ|+@h_=@lq{=cvPYbz*d=A(h0j{ zj{oEv;_{OTx;Om|7Eq*0J?@Tvth5NDO9isV^k3;1&9UTf&?bU3oD7gIgo89#6>^ue-B>Ti~?ZprQGh8$GvnRif7(>3N|7 ztdM*}h#sVYoa2^`)4i2(eB!{5V@o7jCTcusNhEk2uQ8179`7!5G2U5G&qD3hti$ue zqUDn_F5L@mS&fl0xq?2J+SdYON33DmLcx2lL&SzYcvtR!#ju))-Qv-D306;vApj+(_>GK3slH~!dnV;IU6IUwiBx1He zNz<;DRzHZKVBKUX6P7|5s$pHWRU=pZ#hx_?&V79MClj$o?tze__tnL@aZ*M(P*Cv1 z`SuILjx~W zPwjZ!^Momm_&$61+~)pBHx2na=%UczhvNYZjdtR4r(BiI!b6S6bn4S-mi1}>11x)L z`r&R@1n|lOQfkCrlvzDxNoA9_kWS~1tU-vvHw=bgPv4MDow)_2ZNS)#gCH*4bT;8jHurNe`mB z8_n>?k?iHvW<9pi!zS^aqo%EdaG-L}s>pNkA@!6VRJ9p2OgcQc)Xrd7HBU_#oy~@VPREkz}Y>+(}4w{N|#p*TLL!UanSy3_n}f z{*F?7#hB9yHH|1#pm&&h0AF75s2tY%&E)2A9Y6181U5n}R60CQbNh!V`a(%M(3(!yPJxVTZ>zg)BP3|>w?|h(%K)nQ#wNj75i+G^ z{XB+f^vXeIy~|Ogx_l-&9#Y77 za%D{~4-NoDEzGWeY70QO3Uh{G6ScWS8*kfY1@X6eT~^`Fb22_jJqgN^`I_u{{_qE*b5$KbaN2Oa82^CB^D=TBjs>#he_}2-_j?XP|tu4ck={rt8kLsJLEWG1h#puvt z27_9af4zlodP?_h%?$^_X1Qh0rC6T1Ho#5Kw^cyA$$JXX0*)^=dlP8~h?rUR&;2qbI^MUS#C(ZIr(NvRI`RKad0_}1pASXn6@(yT3O(m8+u5MI z+D<`+?>;8B1U!3(^K0xxk&mUshT<^FU%HG!wbblsS~VS-d~Z5`2$8$KPY0kU+DAma zt!5Xlq?i(HN#Ep-Oq%L#d{|TPY+%aO`0vGf?)t@yZJq;-0u@gP6eNt15aeM4GjF%} zO%EAS8o`EVfxe_YojDL%-qsXxJ`9h1wzJ%?#x6MV4Zi_AyRD5^Z4NDLp8ZaeAN2D& z(@v<1RRqc0!-ZZm*ZW_WdVZoYD*LPzFkhb3CSp z&8L1X9%y^MbZP>VTclAX)1O0?zpj;JzVey2tM&h2G0QwzaUE;zZBSTCh#iUZyPU2Y zjWHPyy_V;%??p4tWCUYx`fVUx2>J4*12i$e{@7)tl+*UEiS*_#V5{(O(zX-VggK@E z{U!^0!o`O+K1g_86}n2QJe3_(L^57c6jSqoH|cDBb-B96O^S*)R<|!Ax%5%J{0hHG zp&@Ujr>8&v6B1@W#X1z*+MT0e@|MV^=*05}eY5G;;Uz;L1vn|dCFW3Tn&s`#c6c*w zb-KD~?L{GeJP-ZYS2zOd@F>vplaREu-7-L=6oowa4>RUKdw1_kL#;T0si=!}Z8Elo z9}~Z|{=4LvVJD7uZe;N^zXdzVf)x8<<;ZT(E(tTbJ zg)W6Z!|IYHwnx4XTwq>Y+0DcwU03VBS$F