From c59061c4564819dd966495791a630513d62eefb6 Mon Sep 17 00:00:00 2001 From: rolux Date: Tue, 11 Dec 2012 16:38:44 +0100 Subject: [PATCH] refactor audio example --- examples/ui/audio_player/css/example.css | 88 + examples/ui/audio_player/js/example.js | 1720 ++++++++++------- .../{03 Encore.mp3 => 01-03 Encore.mp3} | Bin .../audio_player/mp3/Danger Mouse/artwork.png | Bin 0 -> 6761 bytes .../{03 No Love.mp3 => 01-03 No Love.mp3} | Bin .../{09 Deep Web.mp3 => 01-09 Deep Web.mp3} | Bin .../audio_player/mp3/Death Grips/artwork.png | Bin 0 -> 48585 bytes 7 files changed, 1063 insertions(+), 745 deletions(-) rename examples/ui/audio_player/mp3/Danger Mouse/2004 The Grey Album/{03 Encore.mp3 => 01-03 Encore.mp3} (100%) create mode 100644 examples/ui/audio_player/mp3/Danger Mouse/artwork.png rename examples/ui/audio_player/mp3/Death Grips/2012 No Love Deep Web/{03 No Love.mp3 => 01-03 No Love.mp3} (100%) rename examples/ui/audio_player/mp3/Death Grips/2012 No Love Deep Web/{09 Deep Web.mp3 => 01-09 Deep Web.mp3} (100%) create mode 100644 examples/ui/audio_player/mp3/Death Grips/artwork.png diff --git a/examples/ui/audio_player/css/example.css b/examples/ui/audio_player/css/example.css index 0046c2e8..0bbcae98 100644 --- a/examples/ui/audio_player/css/example.css +++ b/examples/ui/audio_player/css/example.css @@ -1,3 +1,91 @@ +#artworkText { + padding-top: 1px; + text-align: center; +} +#findInput { + right: 4px; + top: 19px; + border-top-left-radius: 0; +} +#findInput > input { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +#findInput > .OxButton { + border-top-right-radius: 0; +} +#findLabel { + right: 20px; + top: 4px; + padding-top: 1px; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + font-size: 9px; +} +#findSelect { + right: 4px; + top: 4px; + border-bottom-right-radius: 0; +} +#statusText { + padding-top: 3px; + font-size: 9px; + text-align: center; +} +#toolbar > * { + position: absolute; +} +#viewButtons > .OxButton:first-child { + border-top-left-radius: 0; +} +#viewButtons > .OxButton:last-child { + border-top-right-radius: 0; +} +#viewLabel { + right: 136px; + top: 4px; + padding: 1px 4px 0 4px; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + font-size: 9px; +} + +.item { + height: 32px; +} +.item > * { + position: relative; +} +.itemIcon { + left: 2px; + top: 2px; + width: 28px; + height: 28px; +} +.itemTitle { + left: 34px; + top: -28px; + height: 14px; + font-size: 13px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + cursor: default; +} +.itemInfo { + left: 34px; + top: -28px; + height: 10px; + font-size: 9px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + cursor: default; +} + +.OxDialog > .OxContent { + padding: 24px; +} .OxTableList .OxItem .OxCell > img.image { width: 14px; height: 14px; diff --git a/examples/ui/audio_player/js/example.js b/examples/ui/audio_player/js/example.js index dbc2e90a..05fc7f40 100644 --- a/examples/ui/audio_player/js/example.js +++ b/examples/ui/audio_player/js/example.js @@ -6,249 +6,388 @@ Demo application using Ox.AudioPlayer. Ox.load('UI', function() { - var columns = [ - { - format: function(value) { - return value - ? Ox.Element('') + var app = { + $ui: {}, + data: {}, + site: { + listColumns: [ + { + format: function(value, data) { + return Ox.Element('') .addClass('symbol') .attr({src: Ox.UI.getImageURL( - paused ? 'symbolUnmute' : 'symbolMute' - )}) - : Ox.Element(); + 'symbol' + Ox.toTitleCase( + value || (data.query ? 'find ': 'click') + ) + )}); + }, + id: 'icon', + title: 'icon', + visible: true, + width: 16 }, - id: 'playing', - removable: false, - title: 'Playing', - titleImage: 'mute', - visible: true, - width: 16 - }, - { - format: function(value) { - return value - ? Ox.Element('') - .addClass('symbol') - .attr({src: Ox.UI.getImageURL( - 'symbolCheck' - )}) - : Ox.Element(); + { + id: 'title', + title: 'Title', + visible: true, + width: 136 }, - id: 'checked', - removable: false, - title: 'Checked', - titleImage: 'check', - visible: true, - width: 16 - }, - { - format: function(value) { - return value - ? Ox.Element('') - .addClass('image') - .attr({src: value}) - : Ox.Element() - }, - id: 'artwork', - operator: '+', - title: 'Artwork', - titleImage: 'icon', - visible: true, - width: 16 - }, - { - align: 'right', - id: 'disc', - operator: '+', - title: 'Disc', - titleImage: 'circle', - width: 32 - }, - { - align: 'right', - id: 'track', - operator: '+', - title: 'Track', - titleImage: 'square', - width: 32 - }, - { - id: 'title', - operator: '+', - removable: false, - title: 'Title', - visible: true, - width: 192 - }, - { - id: 'artist', - operator: '+', - removable: false, - title: 'Artist', - visible: true, - width: 192 - }, - { - id: 'album', - operator: '+', - removable: false, - title: 'Album', - visible: true, - width: 192 - }, - { - align: 'right', - id: 'year', - operator: '+', - title: 'Year', - visible: true, - width: 64 - }, - { - align: 'right', - format: function(value) { - return Ox.formatDuration(value).substr(4); - }, - id: 'duration', - operator: '-', - title: 'Time', - visible: true, - width: 64 - }, - { - align: 'right', - format: function(value) { - return Ox.formatValue(value, 'B'); - }, - id: 'size', - operator: '-', - title: 'Size', - visible: true, - width: 64 - }, - { - align: 'right', - format: function(value) { - return Math.round(value) + ' kbps' - }, - id: 'bitrate', - operator: '-', - title: 'Bitrate', - visible: true, - width: 64 - }, - { - id: 'genre', - operator: '+', - title: 'Genre', - visible: true, - width: 128 - } - ], - paused = true, - sidebarSize = 192, - sort = [ - {key: 'artist', operator: '+'}, - {key: 'year', operator: '+'}, - {key: 'disc', operator: '+'}, - {key: 'track', operator: '+'} - ], - track = 0, - tracklistSize = 256, - tracks = [ - { - album: 'The Grey Album', - artist: 'Danger Mouse', - artwork: 'mp3/Danger Mouse/2004 The Grey Album/artwork.png', - bitrate: 128, - checked: true, - disc: 1, - duration: 160.417, - file: 'mp3/Danger Mouse/2004 The Grey Album/03 Encore.mp3', - genre: 'Hip-Hop', - playing: false, - size: 2556502, - title: 'Encore', - track: 3, - year: '2004' - }, - { - album: 'No Love Deep Web', - artist: 'Death Grips', - artwork: 'mp3/Death Grips/2012 No Love Deep Web/artwork.png', - bitrate: 128, - checked: true, - disc: 1, - duration: 303.960, - file: 'mp3/Death Grips/2012 No Love Deep Web/03 No Love.mp3', - genre: 'Electronic', - playing: false, - size: 4863327, - title: 'No Love', - track: 3, - year: '2012' - }, - { - album: 'No Love Deep Web', - artist: 'Death Grips', - artwork: 'mp3/Death Grips/2012 No Love Deep Web/artwork.png', - bitrate: 128, - checked: true, - disc: 1, - duration: 138.370, - file: 'mp3/Death Grips/2012 No Love Deep Web/09 Deep Web.mp3', - genre: 'Electronic', - playing: false, - size: 2214303, - title: 'Deep Web', - track: 9, - year: '2012' - } - ], - artists = getArtists(tracks), - albums = getAlbums(artists), - view = 'tracks', - - $toolbar = Ox.Bar({size: 39}), - - $audioPlayer = Ox.AudioPlayer({ - audio: tracks, - paused: true, - width: window.innerWidth - 190 - }) - .css({left: '4px', top: '4px'}) - .bindEvent({ - paused: function(data) { - paused = data.paused; - $musicList.value(tracks[track].file, 'playing', false); - $musicList.value(tracks[track].file, 'playing', true); - }, - track: function(data) { - $musicList.value(tracks[track].file, 'playing', false); - track = data.track; - $musicList.value(tracks[track].file, 'playing', true); + { + align: 'right', + id: 'items', + title: 'Items', + visible: true, + width: 40 } - }) - .appendTo($toolbar) - .gainFocus(), + ], + lists: [ + {icon: 'audio', id: 'Music', index: 0, items: 3, title: 'Music'}, + {icon: 'playlist', id: 'Playing', index: 1, items: 0, title: 'Playing'} + ], + sort: [ + {key: 'artist', operator: '+'}, + {key: 'year', operator: '+'}, + {key: 'disc', operator: '+'}, + {key: 'track', operator: '+'} + ], + sums: ['duration', 'size'], + trackColumns: [ + { + format: function(value) { + return value + ? Ox.Element('') + .addClass('symbol') + .attr({src: Ox.UI.getImageURL( + app.user.ui.paused + ? 'symbolUnmute' : 'symbolMute' + )}) + : Ox.Element(); + }, + id: 'playing', + removable: false, + title: 'Playing', + titleImage: 'mute', + visible: true, + width: 16 + }, + { + format: function(value) { + return value + ? Ox.Element('') + .addClass('symbol') + .attr({src: Ox.UI.getImageURL( + 'symbolCheck' + )}) + : Ox.Element(); + }, + id: 'checked', + removable: false, + title: 'Checked', + titleImage: 'check', + visible: true, + width: 16 + }, + { + format: function(value) { + return value + ? Ox.Element('') + .addClass('image') + .attr({src: value}) + : Ox.Element() + }, + id: 'artwork', + operator: '+', + title: 'Artwork', + titleImage: 'icon', + visible: true, + width: 16 + }, + { + align: 'right', + id: 'disc', + operator: '+', + title: 'Disc', + titleImage: 'circle', + width: 32 + }, + { + align: 'right', + id: 'track', + operator: '+', + title: 'Track', + titleImage: 'square', + width: 32 + }, + { + id: 'title', + operator: '+', + removable: false, + title: 'Title', + visible: true, + width: 192 + }, + { + id: 'artist', + operator: '+', + removable: false, + title: 'Artist', + visible: true, + width: 192 + }, + { + id: 'album', + operator: '+', + removable: false, + title: 'Album', + visible: true, + width: 192 + }, + { + align: 'right', + id: 'year', + operator: '+', + title: 'Year', + visible: true, + width: 64 + }, + { + align: 'right', + format: function(value) { + return Ox.formatDuration(value).substr(4); + }, + id: 'duration', + operator: '-', + title: 'Time', + visible: true, + width: 64 + }, + { + align: 'right', + format: function(value) { + return Ox.formatValue(value, 'B'); + }, + id: 'size', + operator: '-', + title: 'Size', + visible: true, + width: 64 + }, + { + align: 'right', + format: function(value) { + return Math.round(value) + ' kbps' + }, + id: 'bitrate', + operator: '-', + title: 'Bitrate', + visible: true, + width: 64 + }, + { + id: 'genre', + operator: '+', + title: 'Genre', + visible: true, + width: 128 + } + ] + }, + ui: {}, + user: { + lists: [ + { + id: 'favorites', + index: 0, + items: 0, + title: 'Favorites', + type: 'static' + }, + { + id: 'hip-hop', + index: 1, + items: 1, + query: { + conditions: [ + {key: 'genre', operator: '==', value: 'Hip-Hop'} + ], + operator: '&' + }, + title: 'Hip-Hop' + } + ], + ui: { + artwork: 'selected', + coverSize: 64, + list: 'Music', + paused: true, + query: { + conditions: [], + operator: '&', + }, + selectedAlbum: [], + selectedArtist: [], + selectedTrack: [], + showSidebar: true, + sidebarSize: 192, + track: 0, + tracklistSize: 256, + view: 'tracks' + } + }, + utils: {} + }; - $viewLabel = Ox.Label({ + app.user.ui.sort = Ox.clone(app.site.sort, true); + + app.load = function() { + Ox.getJSON('json/music.json', function(data) { + app.data.tracks = data; + app.data.artists = app.utils.getArtists(); + app.data.albums = app.utils.getAlbums(); + app.$ui.appPanel = app.ui.appPanel().appendTo(Ox.$body); + Ox.$window.bind({resize: app.utils.resizeWindow}); + }); + }; + + app.UI = (function() { + var that = {}; + that.set = function() { + var args = Ox.makeObject(arguments), + keys = [], + previousUI = Ox.clone(app.user.ui, true); + Ox.forEach(args, function(value, key) { + if (!Ox.isEqual(value, previousUI[key])) { + app.user.ui[key] = value; + keys.push(key); + } + }); + keys.forEach(function(key) { + var data = { + previousValue: previousUI[key], + value: app.user.ui[key] + } + Ox.print('ui_' + key.toLowerCase(), JSON.stringify(app.user.ui[key])) + Ox.forEach(app.$ui, function($elements) { + Ox.makeArray($elements).forEach(function($element) { + $element.triggerEvent('ui_' + key.toLowerCase(), data); + }); + }); + }); + }; + return that; + }()); + + app.ui.appPanel = function() { + return Ox.SplitPanel({ + elements: [ + {element: app.$ui.mainMenu = app.ui.mainMenu(), size: 20}, + {element: app.$ui.mainPanel = app.ui.mainPanel()} + ], + orientation: 'vertical' + }); + }; + + app.ui.mainMenu = function() { + return Ox.MainMenu({ + menus: [ + { + id: '0xcd', + title: '0xCD', + items: [ + {id: 'about', title: 'About 0xCD'} + ] + } + ] + }) + .bindEvent({ + click: function(data) { + if (data.id == 'about') { + app.$ui.aboutDialog = ( + app.$ui.aboutDialog || app.ui.aboutDialog() + ).open(); + } + } + }); + }; + + app.ui.aboutDialog = function() { + var $element = Ox.Dialog({ + buttons: [ + Ox.Button({ + id: 'close', + title: 'Close' + }) + .bindEvent({ + click: function() { + $element.close(); + } + }) + ], + content: Ox.Element() + .html('Audio Player Example'), + height: 256, + keys: {enter: 'close', escape: 'close'}, + title: 'About 0xCD', + width: 512 + }); + return $element; + }; + + app.ui.mainPanel = function() { + return Ox.SplitPanel({ + elements: [ + {element: app.ui.$toolbar = app.ui.toolbar(), size: 39}, + {element: app.ui.$bothPanel = app.ui.bothPanel()} + ], + orientation: 'vertical' + }); + }; + + app.ui.toolbar = function() { + return Ox.Bar({size: 39}) + .attr({id: 'toolbar'}) + .append(app.$ui.audioPlayer = app.ui.audioPlayer()) + .append(app.$ui.viewLabel = app.ui.viewLabel()) + .append(app.$ui.viewButtons = app.ui.viewButtons()) + .append(app.$ui.findSelect = app.ui.findSelect()) + .append(app.$ui.findLabel = app.ui.findLabel()) + .append(app.$ui.findInput = app.ui.findInput()); + }; + + app.ui.audioPlayer = function() { + return Ox.AudioPlayer({ + audio: app.data.tracks, + paused: true, + width: window.innerWidth - 190 + }) + .css({left: '4px', top: '4px'}) + .bindEvent({ + paused: function(data) { + var id = app.data.tracks[app.user.ui.track].file + app.user.ui.paused = data.paused; + app.$ui.trackList.value(id, 'playing', false); + app.$ui.trackList.value(id, 'playing', true); + }, + track: function(data) { + var id = app.data.tracks[app.user.ui.track].file + app.$ui.trackList.value(id, 'playing', false); + app.user.ui.track = data.track; + $app.$ui.trackList.value(id, 'playing', true); + } + }); + }; + + app.ui.viewLabel = function() { + return Ox.Label({ textAlign: 'center', title: 'Tracks', width: 50 }) - .css({ - position: 'absolute', - right: '136px', - top: '4px', - padding: '1px 4px 0 4px', - borderBottomLeftRadius: 0, - borderBottomRightRadius: 0, - fontSize: '9px' - }) - .appendTo($toolbar), + .attr({id: 'viewLabel'}); + }; - $viewButtons = Ox.ButtonGroup({ + app.ui.viewButtons = function() { + return Ox.ButtonGroup({ buttons: [ {id: 'tracks', title: 'list', tooltip: 'View Tracks'}, {id: 'albums', title: 'grid', tooltip: 'View Albums'}, @@ -259,6 +398,7 @@ Ox.load('UI', function() { selectable: true, type: 'image' }) + .attr({id: 'viewButtons'}) .css({ position: 'absolute', right: '136px', @@ -266,223 +406,625 @@ Ox.load('UI', function() { }) .bindEvent({ change: function(data) { - view = data.value; - $viewLabel.options({title: Ox.toTitleCase(view)}); - $rightPanel.replaceElement(0, musicPanel(view)); + app.user.ui.view = data.value; + app.$ui.viewLabel.options({title: Ox.toTitleCase(app.user.ui.view)}); + app.$ui.rightPanel.replaceElement(0, app.$ui.musicPanel = app.ui.musicPanel()); } - }) - .appendTo($toolbar), + }); + }; - $findSelect = Ox.Select({ - items: [ - {id: 'all', title: 'Find: All'}, - {id: 'tracks', title: 'Find: Tracks'}, - {id: 'artists', title: 'Find: Artists'}, - {id: 'albums', title: 'Find: Albums'} - ], - overlap: 'left', - type: 'image' - }) - .css({ - position: 'absolute', - right: '4px', - top: '4px', - borderBottomRightRadius: 0 - }) - .bindEvent({ - change: function(data) { - $findLabel.options({title: data.title}); - } - }) - .appendTo($toolbar), - - $findLabel = Ox.Label({ + app.ui.findSelect = function() { + return Ox.Select({ + items: [ + {id: 'all', title: 'Find: All'}, + {id: 'tracks', title: 'Find: Tracks'}, + {id: 'artists', title: 'Find: Artists'}, + {id: 'albums', title: 'Find: Albums'} + ], + overlap: 'left', + type: 'image' + }) + .attr({id: 'findSelect'}) + .bindEvent({ + change: function(data) { + $findLabel.options({title: data.title}); + } + }); + }; + + app.ui.findLabel = function() { + return Ox.Label({ title: 'Find: All', width: 112 }) - .css({ - position: 'absolute', - right: '20px', - top: '4px', - paddingTop: '1px', - borderBottomLeftRadius: 0, - borderBottomRightRadius: 0, - fontSize: '9px' - }) - .appendTo($toolbar), + .attr({id: 'findLabel'}); + }; - $findInput = Ox.Input({ + app.ui.findInput = function() { + return Ox.Input({ clear: true, width: 128 }) - .css({ - position: 'absolute', - right: '4px', - top: '19px', - borderTopLeftRadius: 0 - }) - .appendTo($toolbar), + .attr({id: 'findInput'}); + }; - $listsList = Ox.TableList({ - columns: [ - { - format: function(value) { - return Ox.Element('') - .addClass('symbol') - .attr({src: Ox.UI.getImageURL( - 'symbol' + Ox.toTitleCase(value) - )}); - }, - id: 'icon', - title: 'icon', - visible: true, - width: 16 - }, - { - id: 'title', - title: 'Title', - visible: true, - width: 136 - }, - { - align: 'right', - id: 'items', - title: 'Items', - visible: true, - width: 40 - } - ], - items: [ - {icon: 'audio', index: '0', items: 3, title: 'Music'}, - {icon: 'playlist', index: '1', items: 0, title: 'Playing'}, - {icon: 'click', index: '1', items: 0, title: 'Favorites'}, - {icon: 'find', index: '1', items: 1, title: 'Hip-Hop'} - ], - max: 1, - selected: ['0'], - sort: [{key: 'index', operator: '+'}], - sortable: true, - unique: 'index' - }), + app.ui.bothPanel = function() { + return Ox.SplitPanel({ + elements: [ + { + collapsible: true, + element: app.$ui.leftPanel = app.ui.leftPanel(), + resizable: true, + resize: [128, 192, 256, 320, 384], + size: app.user.ui.sidebarSize + }, + { + element: app.$ui.rightPanel = app.ui.rightPanel() + } + ], + orientation: 'horizontal' + }); + } - $artworkbar = Ox.Bar({size: 16}), - - $artworkText = Ox.Element() - .css({ - paddingTop: '1px', - textAlign: 'center' - }) - .html('Selected Item') - .appendTo($artworkbar), - - $artwork = Ox.Element('') - .attr({src: tracks[0].artwork}) - .css({ - width: sidebarSize + 'px', - height: sidebarSize + 'px' - }), - - $artworkPanel = Ox.SplitPanel({ - elements: [ - {element: $artworkbar, size: 16}, - {element: $artwork} - ], - orientation: 'vertical' - }), - - $leftPanel = Ox.SplitPanel({ + app.ui.leftPanel = function() { + return Ox.SplitPanel({ elements: [ { - element: $listsList + element: app.$ui.listsPanel = app.ui.listsPanel() }, { collapsible: true, - element: $artworkPanel, - size: sidebarSize + 16 + element: app.$ui.artworkPanel = app.ui.artworkPanel(), + size: app.user.ui.sidebarSize + 16 } ], orientation: 'vertical' }) .bindEvent({ resize: function(data) { - sidebarSize = data.size; - $listsList.setColumnWidth('title', sidebarSize - 56); - $leftPanel.size(1, sidebarSize + 16); - $artwork.css({ - width: sidebarSize + 'px', - height: sidebarSize + 'px' + app.user.ui.sidebarSize = data.size; + [app.$ui.siteLists, app.$ui.userLists].forEach(function($list) { + $list.setColumnWidth('title', app.user.ui.sidebarSize - 56); + }); + app.$ui.listsList + app.$ui.leftPanel.size(1, app.user.ui.sidebarSize + 16); + app.$ui.artwork.css({ + width: app.user.ui.sidebarSize + 'px', + height: app.user.ui.sidebarSize + 'px' }); //$musicList.size(); } - }), - - $musicList, - - $musicPanel = musicPanel(view), - - $statusbar = Ox.Bar({size: 16}), - - $status = Ox.Element().css({ - paddingTop: '3px', - fontSize: '9px', - textAlign: 'center' }) - .html('Loading...') - .appendTo($statusbar), + }; - $rightPanel = Ox.SplitPanel({ - elements: [ - {element: $musicPanel}, - {element: $statusbar, size: 16} - ], - orientation: 'vertical' - }), + app.ui.listsPanel = function() { + return Ox.SplitPanel({ + elements: [ + { + element: app.$ui.siteLists = app.ui.siteLists(), + size: app.site.lists.length * 16 + }, + { + element: app.$ui.userLists = app.ui.userLists() + } + ], + orientation: 'vertical' + }); + }; - $mainPanel = Ox.SplitPanel({ - elements: [ - { - collapsible: true, - element: $leftPanel, - resizable: true, - resize: [128, 192, 256, 320, 384], - size: sidebarSize - }, - { - element: $rightPanel + app.ui.siteLists = function() { + var $element = Ox.TableList({ + columns: app.site.listColumns, + items: app.site.lists, + max: 1, + selected: [app.user.ui.list], + sort: [{key: 'index', operator: '+'}], + unique: 'id' + }) + .bindEvent({ + select: function(data) { + app.UI.set({list: data.ids[0] || app.site.lists[0].id}); + }, + selectafter: function() { + app.UI.set({list: app.user.lists[0].id}); + app.$ui.userLists.gainFocus(); + }, + ui_list: function(data) { + $element.options({ + selected: data.value[0] == data.value[0].toUpperCase() + ? [data.value] : [] + }); + } + }); + $element.update = function() { + return $element.setColumnWidth('title', app.user.ui.sidebarSize - 56); + }; + return $element.update(); + }; + + app.ui.userLists = function() { + var $element = Ox.TableList({ + columns: app.site.listColumns, + items: app.user.lists, + max: 1, + selected: [app.user.ui.list], + sort: [{key: 'index', operator: '+'}], + sortable: true, + unique: 'id' + }) + .bindEvent({ + move: function(data) { + Ox.print('MOVE:', data); + }, + select: function(data) { + app.UI.set({list: data.ids[0] || app.site.lists[0].id}); + }, + selectbefore: function() { + app.UI.set({list: Ox.last(app.site.lists).id}); + app.$ui.siteLists.gainFocus(); + }, + ui_list: function(data) { + $element.options({ + selected: data.value[0] == data.value[0].toLowerCase() + ? [data.value] : [] + }); + } + }); + $element.update = function() { + return $element.setColumnWidth('title', app.user.ui.sidebarSize - 56); + }; + return $element.update(); + }; + + app.ui.artworkPanel = function() { + return Ox.SplitPanel({ + elements: [ + {element: app.$ui.artworkbar = app.ui.artworkbar(), size: 16}, + {element: app.$ui.artwork = app.ui.artwork()} + ], + orientation: 'vertical' + }); + }; + + app.ui.artworkbar = function() { + return Ox.Bar({size: 16}) + .append(app.$ui.artworkText = app.ui.artworkText()) + .bindEvent({ + anyclick: function() { + app.UI.set({ + artwork: app.user.ui.artwork == 'playing' + ? 'selected' : 'playing' + }); + } + }); + }; + + app.ui.artworkText = function() { + var $element = Ox.Element() + .attr({id: 'artworkText'}) + .bindEvent({ + ui_artwork: function() { + $element.update(); + } + }); + $element.update = function() { + $element.html( + app.user.ui.artwork == 'playing' + ? 'Now Playing' : 'Selected Item' + ); + return $element; + }; + return $element.update(); + }; + + app.ui.artwork = function() { + var $element = Ox.Element('') + .attr({src: app.data.tracks[0].artwork}) + .bindEvent({ + ui_selectedalbum: function(data) { + if (app.user.ui.artwork == 'selected') { + $element.attr({ + src: data.value.length + ? Ox.getObjectById(app.data.albums, data.value[0]).artwork + : '' + }); } - ], - orientation: 'horizontal' - }), + }, + ui_selectedartist: function(data) { + if (app.user.ui.artwork == 'selected') { + $element.attr({ + src: data.value.length + ? Ox.getObjectById(app.data.artists, data.value[0]).artwork + : '' + }); + } + }, + ui_selectedtrack: function(data) { + if (app.user.ui.artwork == 'selected') { + $element.attr({ + src: data.value.length + ? Ox.getObjectById(app.data.tracks, data.value[0]).artwork + : '' + }); + } + } + }); + $element.update = function() { + $element.css({ + width: app.user.ui.sidebarSize + 'px', + height: app.user.ui.sidebarSize + 'px' + }); + return $element; + }; + return $element.update(); + }; - $appPanel = Ox.SplitPanel({ - elements: [ - {element: $toolbar, size: 39}, - {element: $mainPanel} - ], - orientation: 'vertical' + app.ui.rightPanel = function() { + return Ox.SplitPanel({ + elements: [ + {element: app.$ui.musicPanel = app.ui.musicPanel()}, + {element: app.$ui.statusbar = app.ui.statusbar(), size: 16} + ], + orientation: 'vertical' + }); + }; + + app.ui.musicPanel = function() { + return app.ui[app.user.ui.view + 'Panel'](); + }; + + app.ui.tracksPanel = function() { + return Ox.SplitPanel({ + elements: [ + { + collapsible: true, + element: app.$ui.albumBrowser = app.ui.albumBrowser(), + size: 112 + Ox.UI.SCROLLBAR_SIZE + }, + { + element: app.$ui.trackList = app.ui.trackList() + } + ], + orientation: 'vertical' + }); + }; + + app.ui.albumBrowser = function() { + var $element = Ox.IconList({ + fixedRatio: 1, + item: function(data, sort, size) { + return { + height: size, + id: data.id, + info: data.year, + title: [data.artist, data.title].join(' — '), + url: data.artwork, + width: size + }; + }, + items: app.data.albums, + max: 1, + orientation: 'horizontal', + pageLength: 100, + query: {conditions: [], operator: '&'}, + selected: [], + size: 64, + sort: [{key: 'index', operator: '+'}], + unique: 'id' }) - .appendTo(Ox.$body); + .bindEvent({ + ui_sort: function() { + $element.update(); + } + }); + $element.update = function() { + app.utils.getTrackAlbums(function(albums) { + Ox.print('ALBUMS::::', albums) + $element.options({items: albums}); + }); + return $element; + } + return $element; + }; - $($viewButtons.find('.OxButton')[0]).css({borderTopLeftRadius: 0}); - $($viewButtons.find('.OxButton')[2]).css({borderTopRightRadius: 0}); - $findInput.find('input').css({borderTopLeftRadius: 0, borderTopRightRadius: 0}); - $findInput.find('.OxButton').css({borderTopRightRadius: 0}); + app.ui.trackList = function() { + return Ox.TableList({ + columns: app.site.trackColumns, + columnsMovable: true, + columnsRemovable: true, + columnsResizable: true, + columnsVisible: true, + items: app.data.tracks, + scrollbarVisible: true, + sort: Ox.clone(app.user.ui.sort, true), + sums: app.site.sums, + unique: 'id' + }) + .bindEvent({ + init: function(data) { + app.$ui.statusText.update(data); + app.utils.getTrackAlbums(function(data) { + Ox.print('::::', data); + }); + }, + open: function(data) { + var file = data.ids[0], + id = app.data.tracks[app.user.ui.track].id, + index = Ox.getIndexById(app.data.tracks, id); + if (index == app.user.ui.track) { + app.$ui.trackList.value(id, 'playing', true); + app.$ui.audioPlayer.options({paused: false, position: 0}); + } else { + app.$ui.trackList.value(id, 'playing', false); + app.user.ui.track = index; + app.$ui.audioPlayer.options({paused: false, track: app.user.ui.track}); + app.$ui.trackList.value(id, 'playing', true); + } + }, + openpreview: function(data) { + app.user.ui.paused = !app.user.ui.paused; + app.$ui.audioPlayer.options({paused: app.user.ui.paused}); + app.$ui.trackList.closePreview(); + }, + select: function(data) { + app.UI.set({selectedTrack: data.ids}); + }, + sort: function(data) { + Ox.print('DDD', data); + app.UI.set({sort: [data]}); + } + }); + }; - // Ox.print('ARTISTS', artists, 'ALBUMS', albums); + app.ui.albumsPanel = function() { + return Ox.SplitPanel({ + elements: [ + { + element: app.$ui.albumList = app.ui.albumList() + }, + { + element: app.$ui.trackBrowser = app.ui.trackBrowser(), + resizable: true, + resize: [192, 256, 320], + size: app.user.ui.tracklistSize + } + ], + orientation: 'horizontal' + }); + }; - function getAlbums(artists) { + app.ui.albumList = function() { + return Ox.IconList({ + fixedRatio: 1, + item: function(data, sort, size) { + var key = Ox.contains(['artist', 'title'], sort[0].key) + ? 'year' : sort[0].key, + column = Ox.getObjectById(app.site.trackColumns, key), + info = (column.format || Ox.identity)(data[key]); + return { + height: size, + id: data.id, + info: info, + title: [data.artist, data.title].join(' — '), + url: data.artwork, + width: size + }; + }, + items: app.data.albums, + pageLength: 120, + query: {conditions: [], operator: '&'}, + selected: [], + size: 128, + sort: Ox.clone(app.user.ui.sort, true), + unique: 'id' + }) + .bindEvent({ + select: function(data) { + app.UI.set({selectedAlbum: data.ids}); + }, + openpreview: function() { + + } + }); + }; + + app.ui.trackBrowser = function() { + return Ox.TableList({ + columns: [ + Ox.getObjectById(app.site.trackColumns, 'playing'), + Ox.getObjectById(app.site.trackColumns, 'checked'), + Ox.getObjectById(app.site.trackColumns, 'artwork'), + Ox.extend( + Ox.getObjectById(app.site.trackColumns, 'track'), + {visible: true} + ), + Ox.extend( + Ox.getObjectById(app.site.trackColumns, 'title'), + {width: app.user.ui.tracklistSize - 144 - Ox.UI.SCROLLBAR_SIZE} + ), + Ox.getObjectById(app.site.trackColumns, 'duration') + ], + items: app.data.tracks, + query: {conditions: [], operator: '&'}, + scrollbarVisible: true, + selected: [], + sort: Ox.clone(app.site.sort, true), + unique: 'id' + }) + .bindEvent({ + resize: function(data) { + app.user.ui.tracklistSize = data.size; + app.$ui.trackBrowser.setColumnWidth( + 'title', app.user.ui.tracklistSize - 144 - Ox.UI.SCROLLBAR_SIZE + ); + }, + ui_selectedalbum: function(data) { + app.$ui.trackBrowser.options({ + items: data.value.length ? Ox.flatten( + data.value.map(function(id) { + return Ox.getObjectById(app.data.albums, id).items; + }) + ) : [] + }); + } + }); + }; + + app.ui.artistsPanel = function() { + return Ox.ColumnList({ + columns: [ + { + id: 'artists', + item: function(data, width) { + data.artwork = data.artwork || ''; + data.years = data.years || []; + var $item = $('
') + .addClass('item') + .css({width: width + 'px'}); + $('') + .addClass('itemIcon') + .attr({src: data.artwork}) + .appendTo($item); + $('
') + .addClass('itemTitle') + .css({width: width - 36 + 'px'}) + .html(data.name ? data.name : '') + .appendTo($item); + $('
') + .addClass('itemInfo OxLight') + .css({width: width - 36 + 'px'}) + .html( + [ + data.years.join('-'), + Ox.formatCount(data.albums, 'album'), + Ox.formatCount(data.tracks, 'track'), + Ox.formatDuration(data.duration), + Ox.formatValue(data.size, 'B') + ].join(' — ') + ) + .appendTo($item); + return $item; + }, + itemHeight: 32, + keys: ['albums', 'artwork', 'duration', 'name', 'size', 'tracks', 'years'] + }, + { + id: 'albums', + item: function(data, width) { + data.artwork = data.artwork || ''; + data.tracks = data.tracks || [{duration: 0}]; + data.year = data.year || '????'; + var $item = $('
') + .addClass('item') + .css({width: width + 'px'}); + $('') + .addClass('itemIcon') + .attr({src: data.artwork}) + .appendTo($item); + $('
') + .addClass('itemTitle') + .css({width: width - 36 + 'px'}) + .html(data.title ? data.title : '') + .appendTo($item); + $('
') + .addClass('itemInfo OxLight') + .css({width: width - 36 + 'px'}) + .html( + [ + data.year, + Ox.formatCount(data.tracks, 'track'), + Ox.formatDuration(data.duration), + Ox.formatValue(data.size, 'B') + ].join(' — ') + ) + .appendTo($item); + return $item; + }, + itemHeight: 32, + keys: ['artwork', 'duration', 'size', 'title', 'tracks', 'year'] + }, + { + id: 'tracks', + item: function(data, width) { + var $item = $('
') + .addClass('item') + .css({width: width + 'px'}); + $('') + .addClass('itemIcon') + .attr({src: data.artwork}) + .appendTo($item); + $('
') + .addClass('itemTitle') + .css({width: width - 36 + 'px'}) + .html(data.title ? data.title : '') + .appendTo($item); + $('
') + .addClass('itemInfo OxLight') + .css({width: width - 36 + 'px'}) + .html( + [ + Ox.formatDuration(data.duration), + Ox.formatValue(data.size, 'B'), + Math.round(data.bitrate) + ' kbps' + ].join(' — ') + ) + .appendTo($item); + return $item; + }, + itemHeight: 32, + keys: ['artwork', 'bitrate', 'checked', 'duration', 'playing', 'size', 'title'] + } + ], + items: app.data.artists, + list: 'custom', + width: window.innerWidth - app.user.ui.sidebarSize - 1 + }) + .bindEvent({ + resize: function(data) { + $panel.options({width: data.size}) + }, + select: function(data) { + Ox.print('SELECT::', data) + app.UI.set( + 'selected' + Ox.toTitleCase(data.id.slice(0, -1)), + data.ids + ); + } + }); + }; + + app.ui.statusbar = function() { + return Ox.Bar({size: 16}) + .append(app.$ui.statusText = app.ui.statusText()); + }; + + app.ui.statusText = function() { + var $element = Ox.Element().attr({id: 'statusText'}); + $element.update = function(data) { + return $element.html( + data ? [ + Ox.formatCount(data.items, 'track'), + Ox.formatDuration(data.duration), + Ox.formatValue(data.size, 'B') + ].join(' — ') : 'Loading...' + ); + }; + return $element.update(); + }; + + app.utils.getAlbums = function() { var albums = [] - artists.forEach(function(artist) { + app.data.artists.forEach(function(artist) { artist.items.forEach(function(album) { albums.push(Ox.extend(album, {artist: artist.name})); }); }); return albums; - } + }; - function getArtists(tracks) { + app.utils.getArtists = function() { var artists = [], tree = {}; - tracks.forEach(function(track, index) { + app.data.tracks.forEach(function(track, index) { var artist = track.artist, album = track.year + ' ' + track.album, title = Ox.pad(track.disc, 2) + '\n' + Ox.pad(track.track, 2) @@ -513,7 +1055,7 @@ Ox.load('UI', function() { duration: Ox.values(tracks).reduce(function(r, v, i) { return r + v.duration; }, 0), - id: [year, title].join('\n'), + id: [artist.id, year + ' ' + title].join('\n'), items: [], size: Ox.values(tracks).reduce(function(r, v, i) { return r + v.size; @@ -555,345 +1097,33 @@ Ox.load('UI', function() { artists.push(artist); }); return artists; - } + }; - function musicPanel(view) { - var $panel; - if (view == 'tracks') { - var $trackAlbumList = trackAlbumList(); - $musicList = Ox.TableList({ - columns: columns, - columnsMovable: true, - columnsRemovable: true, - columnsResizable: true, - columnsVisible: true, - items: tracks, - max: 1, - scrollbarVisible: true, - sort: Ox.clone(sort, true), - unique: 'file' - }) - .bindEvent({ - open: function(data) { - var file = data.ids[0], - index = Ox.indexOf(tracks, function(track) { - return track.file == file; - }); - if (index == track) { - $musicList.value(tracks[track].file, 'playing', true); - $audioPlayer.options({paused: false, position: 0}); - } else { - $musicList.value(tracks[track].file, 'playing', false); - track = index; - $audioPlayer.options({paused: false, track: track}); - $musicList.value(tracks[track].file, 'playing', true); - } - }, - openpreview: function(data) { - paused = !paused; - $audioPlayer.options({paused: paused}); - $musicList.closePreview(); - } - }); - $panel = Ox.SplitPanel({ - elements: [ - { - collapsible: true, - element: $trackAlbumList, - size: 112 + Ox.UI.SCROLLBAR_SIZE - }, - { - element: $musicList - } - ], - orientation: 'vertical' - }); - } else if (view == 'albums') { - $musicList = Ox.IconList({ - fixedRatio: 1, - item: function(data, sort, size) { - var key = Ox.contains(['artist', 'title'], sort[0].key) - ? 'year' : sort[0].key, - column = Ox.getObjectById(columns, key), - info = (column.format || Ox.identity)(data[key]); - return { - height: size, - id: data.id, - info: info, - title: [data.artist, data.title].join(' — '), - url: data.artwork, - width: size - } - }, - items: albums, - max: 1, - pageLength: 120, - query: {conditions: [], operator: '&'}, - selected: [], - size: 128, - sort: Ox.clone(sort, true), - unique: 'id' - }) - .bindEvent({ - - }); - var $albumTrackList = albumTrackList(); - $panel = Ox.SplitPanel({ - elements: [ - { - element: $musicList - }, - { - element: $albumTrackList, - resizable: true, - resize: [192, 256, 320], - size: tracklistSize - } - ], - orientation: 'horizontal' - }); - } else if (view == 'artists') { - $panel = Ox.ColumnList({ - columns: [ - { - id: 'artist', - item: function(data, width) { - data.artwork = data.artwork || ''; - data.years = data.years || []; - var $item = $('
') - .css({width: width + 'px', height: '32px'}); - $('') - .attr({src: data.artwork}) - .css({ - position: 'relative', - left: '2px', - top: '2px', - width: '28px', - height: '28px', - borderRadius: '7px' - }) - .appendTo($item); - $('
') - .css({ - position: 'relative', - left: '34px', - top: '-28px', - width: width - 36 + 'px', - fontSize: '13px', - textOverflow: 'ellipsis', - cursor: 'default', - overflow: 'hidden' - }) - .html(data.name ? data.name : '') - .appendTo($item); - $('
') - .addClass('OxLight') - .css({ - position: 'relative', - left: '34px', - top: '-28px', - width: width - 36 + 'px', - height: '10px', - fontSize: '9px', - textOverflow: 'ellipsis', - whiteSpace: 'nowrap', - cursor: 'default', - overflow: 'hidden' - }) - .html( - [ - data.years.join('-'), - Ox.formatCount(data.albums, 'album'), - Ox.formatCount(data.tracks, 'track'), - Ox.formatDuration(data.duration), - Ox.formatValue(data.size, 'B') - ].join(' — ') - ) - .appendTo($item); - return $item; - }, - itemHeight: 32, - keys: ['albums', 'artwork', 'duration', 'name', 'size', 'tracks', 'years'] - }, - { - id: 'album', - item: function(data, width) { - data.artwork = data.artwork || ''; - data.tracks = data.tracks || [{duration: 0}]; - data.year = data.year || '????'; - var $item = $('
') - .css({width: width + 'px', height: '32px'}); - $('') - .attr({src: data.artwork}) - .css({ - position: 'relative', - left: '2px', - top: '2px', - width: '28px', - height: '28px' - }) - .appendTo($item); - $('
') - .css({ - position: 'relative', - left: '34px', - top: '-28px', - width: width - 36 + 'px', - fontSize: '13px', - textOverflow: 'ellipsis', - cursor: 'default', - overflow: 'hidden' - }) - .html(data.title ? data.title : '') - .appendTo($item); - $('
') - .addClass('OxLight') - .css({ - position: 'relative', - left: '34px', - top: '-28px', - width: width - 36 + 'px', - fontSize: '9px', - textOverflow: 'ellipsis', - cursor: 'default', - overflow: 'hidden' - }) - .html( - [ - data.year, - Ox.formatCount(data.tracks, 'track'), - Ox.formatDuration(data.duration), - Ox.formatValue(data.size, 'B') - ].join(' — ') - ) - .appendTo($item); - return $item; - }, - itemHeight: 32, - keys: ['artwork', 'duration', 'size', 'title', 'tracks', 'year'] - }, - { - id: 'track', - item: function(data, width) { - var $item = $('
') - .css({width: width + 'px', height: '32px'}); - $('') - .attr({src: data.artwork}) - .css({ - position: 'relative', - left: '2px', - top: '2px', - width: '28px', - height: '28px' - }) - .appendTo($item); - $('
') - .css({ - position: 'relative', - left: '34px', - top: '-28px', - width: width - 36 + 'px', - fontSize: '13px', - textOverflow: 'ellipsis', - cursor: 'default', - overflow: 'hidden' - }) - .html(data.title ? data.title : '') - .appendTo($item); - $('
') - .addClass('OxLight') - .css({ - position: 'relative', - left: '34px', - top: '-28px', - width: width - 36 + 'px', - fontSize: '9px', - textOverflow: 'ellipsis', - cursor: 'default', - overflow: 'hidden' - }) - .html( - [ - data.duration, - Ox.formatValue(data.size, 'B'), - Math.round(data.bitrate) + ' kbps' - ].join(' — ') - ) - .appendTo($item); - return $item; - }, - itemHeight: 32, - keys: ['artwork', 'bitrate', 'checked', 'duration', 'playing', 'size', 'title'] - } - ], - items: artists, - list: 'custom', - width: window.innerWidth - sidebarSize - 1 - }) - .bindEvent({ - resize: function(data) { - $panel.options({width: data.size}) - } - }); - } - return $panel; - } - - function albumTrackList() { - var $list = Ox.TableList({ - columns: [ - Ox.getObjectById(columns, 'playing'), - Ox.getObjectById(columns, 'checked'), + app.utils.getTrackAlbums = function(callback) { + app.$ui.trackList.api({ + keys: ['id'], + query: app.user.ui.query, + sort: app.user.ui.sort + }, function(result) { + callback(result.data.items.reduce(function(r, v, i) { + var albumId = v.id.split('\n').slice(0, 2).join('\n'), + last = Ox.last(r); + return last && last.albumId == albumId ? r : r.concat( Ox.extend( - Ox.getObjectById(columns, 'title'), - {width: tracklistSize - 96 - Ox.UI.SCROLLBAR_SIZE} - ), - Ox.getObjectById(columns, 'duration') - ], - items: tracks, - max: 1, - query: {conditions: [], operator: '&'}, - scrollbarVisible: true, - selected: [], - sort: Ox.clone(sort, true), - unique: 'file' - }) - .bindEvent({ - resize: function(data) { - tracklistSize = data.size; - $list.setColumnWidth('title', tracklistSize - 96 - Ox.UI.SCROLLBAR_SIZE); - } - }); - return $list; - } - - function trackAlbumList() { - return Ox.IconList({ - fixedRatio: 1, - item: function(data, sort, size) { - var key = Ox.contains(['artist', 'title'], sort[0].key) - ? 'year' : sort[0].key, - column = Ox.getObjectById(columns, key), - info = (column.format || Ox.identity)(data[key]); - return { - height: size, - id: data.id, - info: info, - title: [data.artist, data.title].join(' — '), - url: data.artwork, - width: size - } - }, - items: albums, - max: 1, - orientation: 'horizontal', - pageLength: 100, - query: {conditions: [], operator: '&'}, - selected: [], - size: 64, - sort: Ox.clone(sort, true), - unique: 'id' + Ox.clone(Ox.getObjectById(app.data.albums, albumId)), + {albumId: albumId, id: v.id, index: r.length} + ) + ); + }, [])); }); - } + }; + + app.utils.resizeWindow = function() { + + }; + + app.load(); + + window.app = app; }); diff --git a/examples/ui/audio_player/mp3/Danger Mouse/2004 The Grey Album/03 Encore.mp3 b/examples/ui/audio_player/mp3/Danger Mouse/2004 The Grey Album/01-03 Encore.mp3 similarity index 100% rename from examples/ui/audio_player/mp3/Danger Mouse/2004 The Grey Album/03 Encore.mp3 rename to examples/ui/audio_player/mp3/Danger Mouse/2004 The Grey Album/01-03 Encore.mp3 diff --git a/examples/ui/audio_player/mp3/Danger Mouse/artwork.png b/examples/ui/audio_player/mp3/Danger Mouse/artwork.png new file mode 100644 index 0000000000000000000000000000000000000000..61c12fa20e454373ceda3063bf63951e87aa3f99 GIT binary patch literal 6761 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 a5Q0|~UGIPjt-xI#(pJB(R<82s`Tqf0#NUnp literal 0 HcmV?d00001 diff --git a/examples/ui/audio_player/mp3/Death Grips/2012 No Love Deep Web/03 No Love.mp3 b/examples/ui/audio_player/mp3/Death Grips/2012 No Love Deep Web/01-03 No Love.mp3 similarity index 100% rename from examples/ui/audio_player/mp3/Death Grips/2012 No Love Deep Web/03 No Love.mp3 rename to examples/ui/audio_player/mp3/Death Grips/2012 No Love Deep Web/01-03 No Love.mp3 diff --git a/examples/ui/audio_player/mp3/Death Grips/2012 No Love Deep Web/09 Deep Web.mp3 b/examples/ui/audio_player/mp3/Death Grips/2012 No Love Deep Web/01-09 Deep Web.mp3 similarity index 100% rename from examples/ui/audio_player/mp3/Death Grips/2012 No Love Deep Web/09 Deep Web.mp3 rename to examples/ui/audio_player/mp3/Death Grips/2012 No Love Deep Web/01-09 Deep Web.mp3 diff --git a/examples/ui/audio_player/mp3/Death Grips/artwork.png b/examples/ui/audio_player/mp3/Death Grips/artwork.png new file mode 100644 index 0000000000000000000000000000000000000000..48e6d15a5b485237a40f846d93ae1454d6b779b3 GIT binary patch literal 48585 zcmXV1WmsEV(+w9|T#8F^cPP-}!Ci_w6t|+mU5dL)ad&rjiWhfxm*A3oy!U=T^6dOO zd(9bHGqXte=AKK|o2C;!xu9Ln##@`Lq={JTSDq$0Fp9L}d@a zK&Uq%2fb0k03Ln#`57sC;JW}YZnMY;fFAkZJ#3#tpy($eX}U0ezhHWt;<#lI{ICH+ z9?>F203it&zsyt`6+jLg;K!J;(JtUSGvEiU@4+m5YafK6J%ObSrb4CtA}K&}HIpa9sELWAf5aGro4e<&&4 z0Kd`z*b+Ay{MU?C7>5k+mP)JRZ>8c9_t!ySc7WH=U?HKKl*VJk{%ZJ-VY(1YpL-g? z7k^IlE$}!1kQ0aVju!mpHi=d>Ir%lZ3C)1{r28Y3!pLYBvOiUBF9ZN=JNZmQm{{ux z{rEom*+BBBFW@Znk#n3MBFyU0g&F}l$156O`~TTSJU6y=d3k?tZ%JlAM8|Mc!y97W zXV9bZ_VdYy|MlT+t80hK|BIf#B;4ax-}tRu;peG%#9u~h2QiYb&B)MK;#rCTX`@z6 z2JBrWOowQ(^hofRLW(evc=|!=8K}w5CesV7;3gNK#!3*zGmg1L&lvVzmKHz$)Rfc3Ko+@5lUUIO1FbEpA+X43Hv0D!(26^rUiPJ&_rqE*^6QVUzeK18`b029kWBnOJN}@r2oRwQo~R*a_`y0SM9kTvWD%TTkH*rc z)`BKrkN#|kkkw1q;g1L>{09NckbET+#wc8qG8zFdE$ETFR|*a@f{JV;6kCZxHjYb* zT{&EpOihaTM!@kOo)BG$wm7~&fG+{B!5xz9iT-s;0&^&hqOB$02!BcBA^$aTVo#63 z&H4S;v4Kz^@@wwl-*OA|l^8+MVYZ$le0Yw5pKL5c{UWv8Oo$1_W3?0&DCI+hHR=_x z?O}JuQ?;&enEv8Dh+pAcMaT?Egrzj)G!>SlO2|G_aei7s{DuhoOR0~RBB4aKfu`-# z(*VBF7xoZMDJIGV%or?I49`%}fp1ipVWMAXTVwx`t}RfV!JLtpu~nu#W-9&7DMd(` zFtTD|T?fyT$VA5YCulEouYZqYk7$qlMh7X=NXVh!QDuitdDKdVU>{?jbN{1h>K9?P z{B-5@l3dkKTrt`rmAOsI)k+~HSe(x3JQIPq(z1n>c}cT`7I+p9meog2ZJ*YYNEA~3 zYRrrsOCF^h!QQ%}pa$av4u_i45&Xu7$2TW%#jj44DeyT#G zVqVHu5>jSfVy6l$@X>k;`>53~*RLpApp;WgB?FH>+tHelBiz4kZ7S{l3~jBuejD}{``4~C<*jP%OTxes$H8Qo1uJ~k2K^o zvhpYL7wO9Ktwr=jd~$qp!xQ5Zc@qn1T)zd_7rz|-KK#A-d$ak6wwpFnQ%O^csdU|* zc9GUaQ-^JkHjh@Jrkb{1y+mbZCG|pkWqa|b;#P$Oh4QQg^ZuIarje%7W`dgirH`vs zO*T#5hUP|i=FNju{TB(H3EpkqQEvk9s3FT}<;2>=KA;9iY+iNVjr7Tk3!wMlZSpaz zx#kqc)Dp*T6V@30fMur2?^#K6Jo8piAUHH4Og3PQB}I_sH__1gpUyoQr#lC|ZI79| z%-{9D`_4;Nt1rG@SYCvzWsh@a(`RXMfd2OX5#3VSp9UglC$U*?R`@82D*Br@9#XOz zv&LyuF4i;`x|Tf{Ug8Pf3p!@+3hwfM+xW7fWibA&r}_s4ped1nL2u z1{C{I!}MVphN`c&Kf5+x&%q%(nLEh4o_MLO zfAs9#b0_<5gNkuWSumM+lZE6$6}S_xgfSROa3iU2uw1F5k=*-;`^+g=r@u~zE{Wxl;{t6f*6%{-Q07?T|y2TmQ|Qg`4g|X7fdWx05|EJ}%Zlq>NlX zp~?Kj{J_j*tim*?4l-yP(acJc1V3V3A6xN3iy5g&r07Uhn{JT-zRuiK!>oHEY?LRt zJd1JSe7t^iHTGM^Wj6F2vk!ASzNs)+R)d*X^PscBil>g>!F?5J7v}?Gu=>Xe{+942 z2Ag@s@^g)pDxXdo4|!{U{oc`l-bNVfQ)D%y{UGntwZ(HiMNL+%%|^rL;7lSxoUrgJ z>{YxJ9N#6nHMf1D5WCUtw6(;B((-{;lPR+qv*Uve<}4kwuW>aFUt>eq{z^+v)BEU62zIWeo1 zNcv5>#BY`K7ab#=HpOwl>4lRGk5|c6QuGW?el2$yu|ysX_;9z0yYAyi`!+e& zzU)eSQQ4u`VQ?#SF1#$d9x@NqfvhcEuK8N^xaNST*CZc41_e$*;_hP5ML)!(#f$}` z2A^he3-a*n03F|sUyDVjOr~hE@F01Ru_`=VR-ecD)5Xc@)al%mo0NoZ8?VB*lb%z8 z>eZpXA(E~UHx73FTlJUoUe`5O;>-L^bj3X{GG98V#Z&E_%HQIb1cHPFC>(4m_|=$$ zdG(!dk{L@W%L4!&)Bu2AAOP?LeLs%@0B1G;;N%AYz?%vH;Mv6+3`zh1b+^)D!m4g7 zXK$7@Haaeg@Q|TYP-Wx8@kM9#h+vXc4vJ}BkBe$6OvOj%H0Apf;Y#87AT}5lC4X3Z zqaMFC{~A>M*=6pZ8p}$bAY15n(`X2IWZ!>VNf(TJJ*})}dQNV5R`ML;-x-c~PPMYC z6#dMf8{;<@?{K{oc*tm9)Q7eXe+ETDAEEnpZ>_*ncl#cg9u9fzFAeGzY9l-_f3+hn z4SNSIC;p)2(~u?13?v5S(t|BxH`SUNSJ3Gt4;3 zWaO{CFQUH&npwzj!VD7-u>DF#`6k{Fr&p5ocTcKgZCg+bZvN3oCM*$?hc+WE5p&i} zW)haie8^$PM8KYt1`-0j9&R0k9_(Zr`0OV{?)rK979*gw5Say2Zuz*0qJ?ssaa5`W zH;8b-&OpmcxY^hW#Nss(PUq7T*d4y2W}v_pOJX(g8qo(0uYx91g3cF~=a>i0(g%$= z(~QNrIfKSS+jfraba$0Oc0ApW_p|JsravDW@2=b1@>PD~-}zQ1~npu4qC) z=-)L92EPQAzE2(8^z;`H?5na-Hk4F?N`eUnTMnM;Pe_$ozSRWHVGjJ;xX|BGzF9@r z+69hcLU7txN7IF^(^TX_Mat!5Unpin$y?n0cF+)L{?0^OVG$TEA~m^-D2#HWgfd7X zD#S#$fV}#^#lszM8yul%3nJ`=>XHDQK`(Mt#727DFgmPH zndMxcX^YqJ?g3e7e&Hq*+GByjJOX7Jj6%|tBthfHR85!V_Y!?wD}Vy z8^LomL)yY&7YyvA!i2Gm6vASNq?0~!I(!eSE_`Fz56Lv|Mi8eG%(zJ9xxfJvOpkL% zZ^>Ar;)o~24W!NpX;;6$PqW?Z2|UblA5dIh!@?C>iA=}(M>>W2@RFTmsR5z{k}zeN zIV+)}w7(r&^t-rxQoYMf5{}!5L)O2U`}E3ci@H4BeG!NIk~C~co;(s zX`^;$09BNOtuSiYl{{Gb{) zLX4P$Y+=54e;wo~4K&<~Q;xcs#Pdo#(FjbHP`xvkN-pJ5ixcE2;<(6?q3lm{9mUqs z7U7&qRC%8D<>DxzTAS;i9l})O%CY%fV6s*k*D|$<%4+iq6Frf1EGvhiP2(15l;Fs# zCB~7OA2)x#g4s;uh%^Po2K!s3a8dv<>Ys2r#M4s~D0*fn7)mWN4C3SF*f7h&&c3Tz zn8l5@Y+1GNRI2G>QV_W2b8}W(_**4aVw33WiV2JAQ=(5!Cvs;gaO-6{x_XcEU1VKV zdCFiFGX*I{jcjjt7=b)O!0y9l%ipzOv92PEv3qj3Ir31&jdP`7Nhxf~0%*hw?lX-d z`!JC6qGg5}oyiDMPp9?1A8(fZL!TdVtK5q<<KbU4z?R5+18oo3(Sd>k1_eskbQb zI6u+7z=@L*%>1RL$Uz(|Y+*xFh!_V$Tc5RXl<0PK#ASQkz5IB1@(&Hw#1@XjX=!$V zNEp?}T**KB<4YR9ej~I>=85!I#;Yn3w(O?A{1fIx>t19!9KXf9u`RehKn&&{Lk#zT zAxc}P)6T_ZIrPVSg_(7ml=-MGtr^odef`P2xVXce+t?z?GmFOuGJ#(MPNN;82A^eI zBK@w*PY!RNrW2^cQ^i{P)t-}1VFXJ7d(cRE68gMN@EM7XM3H{qsf2_U4yzCW0aq!N zThABXLyunm zPwAHuWmQ-cLIUcr9~Rg#XwVG*d+|dN8&pS;?@|E~-`VP@!@0g2HZ!S~j^oFqgxivU zoE-eSMhJ#*SZ!F`TFx+V7IxDebg$PqBs&JbFeq4Z9D<|Iy?RZxTGnvNSbxxG`6Ef4 zqpN!&9Sb}o@t`W1p3^%@lpvS|ST*?QVv9@DaE777?QrAR$0L_v7N2H){L1mF-G=v_ zmfW2*#w2sb;<&JfzEh({5WyM;_e-SF54p@dVHMkwogj8$f z3E&{dXGusiWr+r=e^PXlXKD}DNfcr^2*P6}txf!p6n2)TgjH_2W6`;D;jv>OmyyBW zzY6|^XKG8tayXjcZl;eU+gjj0s21l2_twiuLCJHf_991a*aHgp>hi=Vc`2Mjm=bRXD!`mvVUhH+g@teB#NS>)whUKP@Bth0m25pR+4k z*95mmoxQs<=lC~@Py=#PVXEo15wkf} zf;6@an&^^veqwE=3x|ZIt~$%>1EmHHHxN*fIws(wwB?0nL~<}7Pxyo^ic_|M(7aq7 zS)Q<6eL3E}L9W9K&DhGsIXc8RIwppom}|H^uAR1+inzqI-%S5~3~@lbYHDU4q|I1{ z2s)o$uoNgmM#cH_B}Yt0!vCj?N`$%tZAd6mOP&_pMF?7>MT5=2F4=NHv;FhpLuIyi zoXpyvtdhE&U49_xQunGUh_Xm(f6b_* zQ_srhJ0DHhLfIZbPp8!u#A;;zrj84m!6E2-er{$n<5uaKsKfkj9s9irvTN1a`tJyJ zUqJ=7u!Ua>iVgDuev_GuCx;Hbj23v(s+|!ideH5NeNCw%Ol24^6jR;M5EclpeF>uc zXDFHpOIpGVHV#odkeB|u6U@f}97RNP!y3$=<)0&%(8I`M*nN2+#j<{}Jn-KOcTqb3m8P772TL7hZqIE;{+sTeLjL zR7&jDJx(m(ahn;p#OgDS_@}$jt-M~=_9g^Qdf4#W0HtHg zf;wM24^65B#;MQQwV~jh{Fk4uI*upp`^=DUgwQi4GFbONncUxZ2316A6qJu5Dai=t z-kyrEuXItcJye%uRr4bDvSV0=bIfa$iT{P3W`;9QU<0d= zXDaL@!aO7Qtsi+$&4^GkUbr4k@Z*%Os~ad@uEjqBv=!(C`G!_W;3m-UGo7cB=_hDE zZ^DAd9G~?&P92SUdRkG~JZCLQkc0ijfpMJ)c5Yj(b&xVrVI`e*%|aeE^)zNaUXqu= z-)rvvop2T7MG%@v`di4zgeBq}=;zFiNluzLV<~t_g9qg0G;r-PA*)E@(A8NmAN=`b z@cpftyn0%&!0(6_xI{nQw3X%GCjU{xZesxGF$W(+x3cej?wsiQQ3dc#H@3NmOdr7% zrQtzr#OB8dryC6q!`VU38{HAJLX^V&@)0+Z2_&j)Tst%#8L@kyq?8ow9@gdJs0><@ z{6W6|ky;5(8!5}>WEQtkeJ%0>t*nT3{x&xKSwr91p4YGM_(S8os1+e$N*t221Duhc ztE1xzrrYm=n4{E*D!ENd&$P*<2leRTu0`1k#C0r4C$d*yo+qstl(-gdRreIjBICJ7 zv0N91b(7OlCP}}`@L+GC)eF1>)O-c|jM8f(3LqhxU{MuHnU7bkU_U!u7tan0J*SCP zX^WSN58}@k+d`g=q~3xn)s)pUB8}uKO0O*mUn5p3*~M7i#wc_LzoEW50v!`7b6$z zF})$m;%y->juFxu^s8jZ!7@fPjr6)ZO4C%LC+wrZxp7K1|>iR-}PPaX? ziZH3d=kJ=cF5r|&)9509%T(?ee?Cdk zniDve%B@CaSySVrG>P>0;Btg0g>9MpeOr{CTPw!oTRz*IGd#daE}#36hC*h~XuB z3dWWHLDT?EcG)@RVFpDA9D1Vv=?bv!)HL)gqnsJRq7NtTq^>V!zi^E`EghSW-YP-M zG&OC({zcx^{2^8Ct>-J2Vy0aeS-idU8E>5TI3f<>iKX?M7m=5hGsb4N2GIe?zGMA5 zkf8KE}-r|s}nP({a> z+g1Gwy9EVmEVzeLUT*hKEt=eEoTq!whXZYk#yZBJWrjjr8Rjh)DZP4z^u%^atX)91 z+g(P)1g`ZpqU{d5$_CHtzqz%Z=G?@e+AQT$25z^MgN3)6X+IhgcQCpTwm^4@^=uk9(%MYe!*=%jrFC z7s@B_SC#29lYH6)cUpJbb!}bNx?2hoXLO88eJ7bc=H4M%yw;EEFN^K=wm(>wDo{6& zr0pt((Ajog)c~i&b!eYQLcVofvSayK*FhLl8#lV0;>8*?#LO;>G^ZopKHeXrkzv(5w+jV^S427P2A@OOwIQ46BLfXamv9cRIfjU6#g)c{r=r zaOT8+uWk{QQ2`n(bS(|Tde3z-jt!J(6qIM?pVK&yB91d`gf=N+YBTC;mn`qaw`^g` zht+1E5Am~E7$tpF@9$B{;wHw5@5R?T^k2g~RGh3WEG|4SAxxd^z>9h(In$5kc(iHT zn3giP6onjNaMJ8B2W6VH=u)hEpATZz12uC{#iZh48x|-$j8fHRxXJV#jw{g;3&NP# zIrJRr;47!!!WUXJ%y|Dw=!v=*D)QWIB@Itc(QmMQi>HtOs2gd;kz37{hk-nvq%HJ9 zpfZj>GoN?w;cqT!y6!55Zp%&ZC-h^v9v1@r%ZF3k{M#EvbhzarE-C$KD&553`PNJ9Fm`iw-kQm@_TBKqXd2aDtvCwNF^|qq%(_j) zzt{VWkb{E4mGK7mN8W29J``m#7DVd$YpyhvqI2hDCWJ<(K_9JtLg2(FJ>Jhv zT$|#9dI{ClFRu5oGtZr#1RKgJpsj$+?zVm&Mqm-A~zX6f)AO=(mmxn#k@nv-qW)=2Eqf@_uW0ien)NESTcebEUtJ z8nx`m_UCB#^YU02LTMv0!v1dPZGt)j0j^wPGi%QwqR(hM@J69!-}OA7%`!Ff$IY-^ z5;J(3{Jr99=6kGHk>@fTKDW9$4e4A^jpsI|4MtAb4o~^+6u!41Y!EGN`^1M6R!@=} z|1$bc_%%dq57fs~50eR@k&>XvWkDRyC|{88S0_xX(#tQnq9hb8L)fXVwF8Wq^^gOV z{MI;UD#SUnkhJ4B8wK})KMiJbvjf8hK5^ZTi;!%7_qzQDU+A|h-=`=jEz39R=l(iY zA%Z}S*zf|f@Wd4Fo*RLD#StwHrWMIGT}DuzF^~49Y1o7@MwLH$V1vPVbhZ|Vi9nVw!=A|Dq-1<00Jl+!WW@~;BXLjlOBMMuK z6IjT5Dj=?U&dkP6llYA^^SY>g>dWk7A$)bsvW=F9fsDFy;ajjFH^pHtW0o#uf`zJo0(bsbM+FqhiXt3R-)$U7pTSeL``tc#$mOPu zIpoIodJ{Ygd>G4+8>R}Z&|93$V1Q+&4#%DOQKJ60q_pgewyOfYU6oMg1ia_~DJRcx z=tQNe^)sUKF+d1kpKkvfeA0Nh$KG6+{)b0dt-iCR-lzwK9XHFRYY^64<0>4t0TEgdPWopdj>ilc3g zVw6B*v;B~<{HzcS>m;ldkLwc;4l_v;5AX!diA+wuIOpp8da;%E%yaq6ndwIj&2^L(PgC{#QS33Xm`8b9!^oY$ow za)phnVycDKh=JLX;?P-jbRC^9Lki>PFS7Q}&nIF@i+ayIZkx0*L5VXMZFeGzu?dqx zyXi7Eo6>Cs@{drrKJd-H|E*b#ry$BKcu~SuY3rK&gLMTk=Z&Z{%ZNrV zZpN?7p9$VsP1ho;)zfK|6>=l%1?>i3-t?8Tf*JMN*T;Qt7NG{OORTRHmZJ@cR}F2v z7tc~j00DQr0sEMZ+CfpfvL3j|k}9-#8wVhPSD#JK&u${285jrhMwBdczQWj-DHG+C zsWuwz7t2LRe+v{N3_*01-_r~IW&rsRy=BQ3t>xSy4D4tzJpa|WYw+jTJ0K$HZEy8c zUCfWt2S&=113~qpMVe;)OOc%m3)?q2%Iu;_AAF3s#ZFk%b1rF~8L^0wieI-J6ZRJD z$6SL1=K^N(o=;ZiA914c=hIX4-J^U@H=z-)GsXHl*-rB-k0HP(P{%H@-2t(kFLI-c zp=9xI1N;#bXX;|I0;*4{m?N~9VRIwwFM14oi*-p}E*@ z9GZF{OIM=r;Zta2JQ?B(o<9X4it}x8S{_VJBdTTMv69rTo|jY#+!?MlpLATBO~(^i zsQo)vt}dT1TP4r~b79eCl4gaFHxTo(6^X2m#paseNyvv}`@a1-ydzo$Pdwm?3%en7 zHFCi2U&UT|Eg=RQ9+^bsl((6$eOxHV(sz4OgLHP^Y+lVUqCahV=;{A_M20T=j>Wv~ zu{wTL5auq8vLZAW3A^Ra^%mMIJ8aM}@4Og3NGxFiiPK2a<;x-Pq*|{$vrXtT)6f;< zlPkeY_onm)YHb2oLZEL-$wbo#m&H4|CYm5S~ z;tNBWo1Gv{oS-(o?pZPga|1*`?fx(VBVwsJ#7)oi@mYksA@*LJ>cfLT46j*VHBIg9 z$`op3eA|z_x~zqctJ0K5knfY-^$p|0)2645D<5QL^ZD|z)Zi8WG=VEGyeJnvuE(Am z-W9dE_*l zSC0O1dnzMiTiX42M6?O)h2OPoJxnacSIvRI(~pRm|oY+leg8fswOaEnysmVvL0 zKtvo4bh-zTn{_=LMlEW@8UUf*^JroI$gAi%kD-60WOj2MpKdR5bH7!OdT?Er;u-7# z9~pfk@GgNn(4)rnpN}z+QQwIe$lO$opa8F`#{9AO8su;6MznU;Kh{&fr!0fYcF!;( z*{S0_?7M7w1OgcYQ7Tj{R?6)wmz>w@PQuTrL&6qH*vvH~0uvktTlB9-9Y+EuJ~T!M zoLxQ$%~&$8nO9j~J#d`-FZg{0_;?LFwc|XmMWQZzX{40P{BFV9KF(*(!w-Attt72& z|5&<^lV{)8pxZGZL^ULTQWwUfrpxm*)kLduYAnz1akIxLZ+eB%104juT_ea=RZs$Af;5z<0n07%IPt#EMJG+oY-QEA~ zle$S185d5SYijn&rrI7Xr}C6aI~V?`D>BT!ZR2Fd6|$%PC?A=gmqhWb`rKUXTPE>R zoPL*OuKCqETo?&Q{25NGN#Vxr`U7OW`)cuNuN?ic*jrEE_9+Hh4-F=L8Oh$geME?p znz%nt>;LEPCotwAPgo&SX9&|eUvf>Dkk_X9g@BgtbH6>#GQ8LqX?Rs|aqB`G(E;@U zr8u{s;DM9(K>s>*Ojd@94(htkD*Ei>c1D|TrS@sBvQ_mzPX8lC1|f-Vt6)1LE;&uE zaPBJMZ$B#sflMM7ac0_z;otnN&O`c`eDXY9lbV z{fm4}_e~96te*+v0L?(Zyd)J>I%c(9%5kr#p!qRW-|NS{+S6Ma2%koI)Z|w_|JB(w zy?js#D~VDiu|?rQu8?P@!-J*K47}&@_cvIv#bu+&1xyHw{f6;*U1^%xU zYFjaq(YBGyBIYVzHeDU*beD`?Uk@>sFvw$_+gy&Pu&bSFF9$h=)Ae+}svsa?U5k_$ z9QGa-imyT4qsY}8hZ-+sjW@2oJH=0Zt{s`I?uUGuR-Hq>iyI*uQ?3S$<^c#C1D-3{ zhra?<#vpRitOcbsRK-80rP)^3PER$-JlEgkCc~8AvkW%3nQ2|!ox!P!f^Jb09j7Fo z3&R#XvEo&pBL<474-c!C- zoMyFzzSk3s?~Npcm$l=SFuSrmc@+41oV_c%ap%%?MQm62^|IsqEyv|Nf`^!YSGC`6 zp};xq)EWfVQ?z6Kz0P}Di3vL1*%-6BVXV2@IrC0b@7SFLH^BHD_m1(mcJ%!8U1;CQ zgE!n8Rd~KTZ++|Ln+$tzF<2nSod!>ftmw=<+f0 zFxxx&n*jLpROZI+YA!ToG0j!22cr>l?do-eU}~*%8030+J)X(8rj=bI<4`1rF!M|#N{1xxQSeY668E?G zD2hVkcbBGna;Q^}JWQb3kt7Ym)# zzH4=Bp-MhQ@0|OVywO{jHC#}G&%b0Sv^w(tk@;*cdYSBxj!b{blCVPkB07^}7B10{ zWo^iD$=$tnbM=b&ZlI{eEPj)3Qw`b#H$9p499f;981u=Co3mxTi;5T?LfQiBfpU8N z6|Q0pG!?_RdxUht;bGWpx9ty*y=>@d$JMB}Pi3_-BXkV-NZ<8HYYjp<>dPY>f*4D1rMY{Y!B<7pw1yIAkCj`rB(~k?j1%KnKqEau_&T4efKi{$S@xRM-$$EAg%j z3v_VC?O~*d5;L=)l;)t}3Z+QTp^?iY!xc#~q|7t{65#2&-H|28?GF5&x?qpE9y@$! zUHgd!dRb)bTwHaYhFEeJ>Ue_GS}(15i-+z0CuE55eO~N3Cj#!s?rU-kpN3I$9hkb> zqp#yp-Tyexmr|xK-XNSlI#!R--*wq==xW{SeKID|%K!=5r5zIZB_v=eOij8$&R8BM zFC07cK@HmMMgE?&v|cAcDUZg!7r;X-*3H8x7v{p7W++7QO8n9d+2FOxwJyf!f{^22~X;1dnEze771r>nXrOUotVp;@#kN7lcZNG z36gWlRdIYB$Z9k#$w)*0TtV&_lb4hJiMn2^zufu{Qt##yAMi^G^RT;#w*2}gGh|g( zEMm`s)rrMv2Jufpr;m<#+_`6rhND!jPS;$Y+48kX`}TGMX!3mx$jnj58T?rZN<76s z_4b1P7zlhleA*+zcs(`m>wb9;pzNm|*PEbAFTTce0?o9&VC6s3lv&@XWkbbOYXLxN zvB)NkU}_~xRXjPzl;XMz39L;}2JME|C65`NzQ-*?3i#stWvlH`ZE?Il>thQ~`cM_? zp+M!Cx6QW=$Qs^%dHd~m_lv8y$*kFU;_N&@zlTW`^88Ap*4cJ=)zO{Ig2ko*b^w5( zH@HndQp$5Xz?xpBGOAUzsr`Kbl}s}^<#R>~76raidc78ExaAuZszW9>q0(J@dUm_- z;h~jsVyBoY?UH8779r|}lS|6(uCYF! zZx3TiOlczp;jFtN=)zrQMwWM#<>26)9<60}D~Z+Tu=;-_CZc0an=y^d?NZpH-$$a5VC6*hw+) zihH*T^5n8(nWXSg>Bfj#wH<*;{>{l*`98{iJsUH+ZKO17q4kD zLHIsh{rP(Lc$7Fh%fU%sh+D*2N2tEXf6MbT%t#`DpGv*_7_g(i&Nb=(S%MHf@)eB?)8ZGd?I>#yjpzCxE_!y+SW8K345DoV1TRyWx$y z_EtW0CQLqJoBLKb`~F9*^25xtT8Et)@-!*QD~iJmKjRO_-FXahqgJS&evgq3vrN~= zn+DIqk}qn?y+^x;y_nKMIZk!Q4TJ9i@QJA7YDH8~qk6(+EE^Kx8`1rM1)RDbVP`SS zI-Z!u^|qG|kcKh)L4JAMIFk39DvHVl9~BjzXy1u{XOgqFb?rUy3v^Y^qtKNvnsm>d zoi016)E0LiFvS`6RuVOtn*J3c9LGSnNuNVY>eeUSKo=z06sK{8NrB$Cr~aKJ`#`L# z#o4%1(3U4-Y5rZfV%HUg?>+GC{bDDuf{WG4NWL$ZZ*T@TRn6cjuWddp8Q~232Ap2_ z!HS%XG)K=y-Eyg7`wLgO(+tn~f!~T3HG=7nbNTT6YXa^kx<2!Q_4=Ig{o~I`qdvSS z=VZ}OTuJy2ZM_ktrGiXISTfETcI$@1c$&VSJ7 z3x=MLy%)N7EuY}cFyu-yHjFCCJ*#%+{bK$oX1x-;H9gADD9987&Rr4y(QAxZ8sD58 zy~c~*M<&2GJO~48hfDUKOO2%)^!?y_=K!482PB-E*|A6z8s)+!*3Q;tWt#gb=?o=bB=;bFsm<-E3$| zSNwlWkka>zlJpbYgbX7x*k$Z_FY(wyymCy}ZIwc_vE1~BhnvJoEFl?6o{-XB!SmG!{0qi(T3XuIn_+{knAbE?cTrRq zucoR(Y{+5vgYj#2_mSRfy}?b;`rF-I6zKjBziy8J_?1jVFr!?fPH;g&PCv*a>{iwi ztNahTXKsNCo*RmIf+51e((wqf;M2&de0S}(zWGe! z{aC-=A5{)tk{9QZr*w_JxH`HCh&aaz$4R#3buYOI&Vi_)b@e{}Lq6~|_CHL;m?p?RFb=o3Z8g4Z_u?gJ~p)9=s@2G@XZJ4W4_l;0;|2}o%mnZfacC~ z=8j#PDHRuvMr;>wbYGv+WJX0mltv|+iQ(A?N}K5PKx&k8i7X9Rl9##F_3A?Z#YEo1 z0M+rf7lr1WFRqYQ-~ICcB)rucnB@88IJ;JTR+Q}&=|2$mXMR4>M>m%#%Y^w9Bb48L z0z$yu1KkjKC>v?_2k30o*m-gcS&|@P}D~5c;I6s;NwfrFZSXqTRm&zT)R!dbQ4} z63Gz(^Wh4Vnh{UCW>j{H4($(u`{jJDk0aSo>aK^)$L`GlD5Eava~bQQC-Bua`8+zn zUn1^YL7$_FmL!=u<|pz>jj{uBQ))}i!c}57$Z4pQ&*gLaTOoF`yIC{SxO%R7I#Hvd zSCEp4n0Fj@5lP;xzE18-AU;7}N@-lha_S_xZ2G zr9;aok`y)~02MV=3<8IGL3>MZ)zbAbvCqz-;Lzo>0PxSS&vDB8Rd6Vv z=ssgFC8p8$QJfvJa-`Mja6^im>1&tW z%MU5@Z=y^U*#ndpB!yw~4F`~e_;p*+`u)GVQIu<4=|ti=-tz(soip8p3(J} zb53*p2I!>Kt(|D8-%#kBH1w?3|AJ+%$iIdLYb_~EGzI>%s{V&zNqq44jm~>qOg}yl z3cWRat4Sf+kR(+TPEXJnReTF1-S6Lg6?okNJ`d^?0FC#c%3aXkz#d)X1CA=;4U1oO zRb&|?#2g0$ZxJ9FdT+OWbW%}RZ4CzpfA!VbimD4qbL_w2U;dsr$4L#-+jH+XVuU1$ zksFRTG}-@;d;+1>opCilt6cpuED!TNS||j#7r1$&*Bl4cXz98>?M}ah9-x0umf?Vv z&YfOBk+U$%DDY3%r3`2NnM@4k-I>hlu|Wp;GkaAKX$m3tG1H>~aMK`8h$)OY6- z*>QOGQ(E@U`$I9huaLX#BW}%GHo$y7e4B5~mqRHZY-Biw=PkILw9CH5tJTTzgKkk6 zMt9FYRGv01uC!qk_yq;pV)c8p7nd0~ZDoyooFKAceQ~10WmM;|VZBR)cF75fl^(1U%uE;LaXh)9|a6Xy6>4U%}Z0Tb^JbQ@CMDI z?KT{Y9<$Z(61Hf%oF&U@m!E07^@U=BHZjjS22o2DZp7w4V%D}b2Djx4Jy;Ol7XV5qIBxIVqt7@FN|o$|$kjI57PbKi^nj!SRSmJjc~wDE@1 zop}ivsy1(4HEbZWwxDjMY(9R=z48txEU0)tYrN;9J`y-!HL- zvj~uFV&|*zX3hhz-8^&I=%VtS_cROSbNc0iNFNbBe7ypOT(37`<@5XFI3Zf?5>L)o zz8B`c$q(Jox7Qt3NdA8jTIsd;&4;;=B~e?6n0;!F@F$OTxK6H2Z)5G(?OV5rpGm{* zsD+#-kh6~=t+wLm;PnGTVm*P#&xIOJ4^?c7`H)jJ1J&Fn0zQz%f3~SgxHum z_5U=|vh;@M1p#a~v%oi%ck5mr8k4q1y=K?WgOdzKU43^wQ_cGYob%!PyKwLp*?^z@5p28l+(CRTtP<-eT#(r{S}d`|GXf+cPHpCffWopuKUuQExE z=sCcuOW4NxW-{y39lwEX3EUL)7LMt((J>0|!VVH$UHj!G@4x+7yf5O@W_IUu-9E7% z@z%$gu>C5#d4CZGQ|6EbqRc+?(QzZ<;>puTj$oP zy1(30b^n4{YjyYAPe1*5=&XLBByYIWR{ded|Ss2IaTkbycdNhR$ zgv-^8$a6R&6#23FD}4Nhw8^0z29Qs(ksXhIX2;*nrP1Toi`6Gep&bEO+e=MlYke?-P-Bj7J$4G%3`@_s1Xyd*a^j`irb1DQyh9yw9v$t+1OkkQ6Am{S>jo7Z`Q5Y*! za3vODOL0s93xEZ4vfw;eyC9(a983FY*V%iix-A>NwhnDIuO5VsNgzr*R&;)B3LV}k z3)N^HRwP6H!sn5j+aAB3%kf5KzsJAz-!ECOPDx(@uGc29l?1^!3=Cp!hKGSTHL+`` zx`PS4#2PDneA}02h_NiB69-f%p(_{}7-g<(GlFB7^5rF{%kp56t+Z4OdG^sdjh_)E z`jq~K%AWNL?!Nl4P0D&1!j)2 zC>iNobz5Z&fyOfi`_X09;Ov`C$?}jwf|y$V-a5^BpIGX2`mJ_}UjJ_isFv>X6Y_R2 zotyXT@IS5Qy?pySyWRYzy%wxUdtJBe zshPxOVxJ`{>zx6zs|)N*8MqE*T}5Lbv7H7eP(I2a^r|+U6}m9B&Cv~aSMv9vB+DL` z7RqTRpd&}~g|Hy#4dO^Jm^Xpumqnoy9QLwP59Z}Dr0UJFV?VQ#WhY(UA(BU-Jbo#> zP_YlCHn@6pYp@7>f88DkEgP>+QB?k22d`Knm#*zj0r%IMl^eZA}Mi6sttYp_F1B(s}7`fEYG7sCgzwhXKliccc(g%W-ssVo>R<*R<;#o z8QzHWpLk_g7IR}y*<`OoL}%?DM%5imIE6F%6NqjLlKGZQDtAHJQQ;{KJ;zZ?K{`el zl!sxSk|xF@Qc>FRCtURZ7P-#fFdNH4&-Ks;XiFWnl>;-Q5PDY86lRFZ)YpIQ84|4r z@tujC7r>7L+b&lQi2(q8@B27_&QBkE3tRJuu4u-gee4U(*Rv-Ha`UA`5#W7uW*~BX ztUpiGQnpuJV}RisAYlhj8m3{++$2)Yur4G)n(o+PYxG$4-*UG;@a_Wj{DJs+!_E8W z@NNPyFnxA}y`UCc+2OV>iP#Ln`@2%!*hJ3~T{}C_KFz7WB)HeLn>f}H(N{C(kh zb3e}BAE3WHDnM{&j>DkPL&u3kSDHGO6sWpiUrIK*jqE~0miA{nX1QMKvSVjCY7d+F zh7Dv4b4WufSnu&wF3hWN-Z;4rvL0fLCHYtVze&RVL~Gk0e&{%NXRXo`lq{n}is1N# z($mY2=z^C9W=};O26!_>xlpSYXu*a~Uq+cJ=5DISlG?xSaJa%75{#^v>-TsM z|K((8I&lktb}$i>P5l9wRy4XzM0r7g&zaOD#&Nf$3C;(D%g+$8{`$}i| zWo_PXz6+92wOVl5$quujBYZy#9SXmnr)@^`D)JU4F*8*>b)*XkG&Ky{k9c~dMqm!s zU}%24ylyFtT{oyJYhUTS+Gr0Xg;vc_$D~4rWR4CH_j{hWYW6*)d{rlxHcad?EUXRY zR+|l&4Qer13MOlF{Zk;tl%M9J;ErCwOcf}DP}jXWt$J4Z&k8qIMW%uM?+`i~_WT`k z{!)p?#tK?y6(BF1U~DEqZ=aK`52+WIO&2$k#sDWf>_}@+Ik~P?1GHuK)-LI*ggizH z9uOHYXyQyK#=Xj3qHgiI?(Zau+mDRAmAVes>mErC^EKBhmFQFy1vHm8k|w3^ z@%&NUB#TD=n{Wa1J=Eeud>cQ0ckx>Fa_W74?#Y@t$|A|H$N$jxX;!PJ$G0@m5C}Ht z4*ToN6o(1ocD32885;mOxCw5Z?4%*!qAi}fZsvYbsBk9kj_y#_>9K5Tn)%_PtRpbc zg#^2~WLbyPaVGkSpzPxr!S~eQA`)0C?&sYR6f>BlqX-#Nm|3FP6MoKv3^S#(IPS}h zLB4&H;lXM{lbAHO?E$DZ=XlL+gxLr@e?#iHTkgzRtqErz&`(-Cu9F&q10&`HH4n2z z6~+M)dZ%tjs=_vagoAK^y_*{>SQ0zd#WPogJcz-7d_vmQ05FM5gpdFnplzs~uUre3 zqw-7fYAw0*QE(tNXU;O#x!Uk*#2GXgG8dMVoe#xC45yWlZa+v=_qZO+Am^(R^c*m0 z6?ciM({jWf0%4wTKIc3U4AiPcwLA%7%X9VT| zi`JvbmhJ5O&B~oPr7kLixipBsMf+Ah(+oplmRJvndkCYfYPp7O2PU335S5Ohdy;E% zM4E5XvLKJiHVG$bGL7fBf-B6!emsn;MvRlrbd!j2V=;hRBku~;8dnT`8#6!HlKpK0~|(1yFH8vqEg z=-ZIA+PpNiDV$ATlv@cE0K2$pN2c3>ro=^1i-R&NsC0k)*leEOALPH$7!;o6l2g`hGfqU@iPJ1Nct%?}VE~d+y(F zWs__Rkql=#Ts|~y8N|MREkGxpN-qJ6J1nP@hy(P)9qd|0ajLtBN|qmBGMX7ceu4lU z%MkC!LKyl0Ps(N^!zAEBUKp?neqO&Dzg586D0zdJ)(wBgi$SJW&0#ccn3@xixx-V+gREfSC&o$fl}oh+IaW-CyrNq+;g^`i=CpAu8M#QK>Kl zP!*IKy{89+}`q zV0!a@P^z-^=?+>CdaQ#Iof>OaWa8IEY+bD1Lu9Z$&Y^SAZXajv>KsXqA-Px*r{5#- z^RhP~qgV=Ep2H-)7;YlQJO4N{Z~IUwbn(=Yb^fqdwQJa#*A%ZN1D}B*Lj_NDC9TMY zA^I_|8)(k}$O4L5JNSXG2CVC?+Jb|1Y{w4kAPy`%nPO;*;7OF*)rHTY(%HMea~YM) zue7M_(-7@6j8>*U+yym;$aVGh(5HknsXSo;k?;5_QuKR(yn0p5Zr-88qcN#0B-e#W z_ls+^G3)@e?sA%yt66Ew*A=vPjrVV)J#S9@@7kVLJEPAZVycYRM!CLZe7jcWiw6<1 zHRThu*oILsP$gNQfa_-2YG%U5hKb-&W?%OmNcA(vb=B(x2yD-NvJ&gO&CLUqO~ z6~{HZjAxA|)i{nAIFD!G`X4UMq1j1dVr&lL9O2lrEbKZz>5)VdEDV!cwxv0bH^Z)n ziK}!4H>X@TVQGC*Q%0hr{6mJgC!e+34Lf4+Kz3&=3Gfnin zWwn!ynaz{*ShQPsDL&3+(O@%%xH?MN#8;Z+GYFuh8{nz9$(GM7(bfMr%BqMNth9D* zzYv2{*!(apC36>mrgD!+9-0JcLijR+Ihw8EbkLruOg%!>yR~xUbK~qF=93q0sA19Z ztJgzai&wkKyQb^pj5-i)DxX|!*A|DTWfVY~|2c@XDJX(s4WhB6s)6Ja(8 z*Isu2dCbt}5rZ_ksr9%Iz{=w2jc4nXda`9oZq%o@a@1-D{?HSFKR@_e@&RVKdT-K}C!4=( zR3DNIhYV*Q;Zzcci3n{d`!9Q@Ne|k~;6 z{*L(rmfbHn`ta=8u&KGv>X3{kC&yUP&HCZcCd2|7K_wI@2IV9jtbJe84}&HqlVO;$ zQt)dBXTJuR`$IuwyG^UKgm*AcrH42KW{^^Y>E=nI)TKveD2s@=c2VzQ<2hmK87LuO zT)aX-yjK2NM3qJjplyo#P&%b;3so(~&%(v;|Acm&4L^tpUx3?gFJRUx)zpZPvw2#& zBO0ZzZ%K}(v{lsv8SCBY=zdx=Q7$(_6WAqwTFC9eH5u~yZxflk=We1)dcGT`f z+El@{F*V95g>@ZOX9+?i@Y&ZrBC|70Q`kY&W(_!~C2G3;#)tW?3xz zx z+*DcaohVyP17z1V(44&VmxZxBZ5VI42%aiaz{&?Pixx6K09k_Qsf5)>1&!zkr=2*| z5)o7rnnuX#HYR|7YikQJ6%@QsSSO9C@QL3+1Jw-`J%R;8rJS}ZM^Y8OX%zB8^ik3>GyF%_R{)BS(58-miX5&N^1x-Q8SWc48KfqN^xOxKGcWs z*t1(MQzVF7skT@T64^l}n+&z6$K3Xrz$9u~!Eq+IK@0(2Y+oywq8t@Pwc+s~@>lWX z7Rq1zv#v${bfG3x@}t&IwZWvXm4LLhgtLi=uTKWqtG?1_rP8j#3K?|VYzUKa)dUe? zcNERw%Lzb|eiLv^=YO*?Mpw@Bi5Uo3-+C(#eIta5#_iC~4ASS@J7`w_Gj>EkdGAm7 zfJl+!Iyn^@T!QE%_yZwZQwW)8Jsg_)O@{yqUUCs%MXvYRX;y%&Njtw$C1iVbWJ?qB z`6E`g(NI*pB{G09P5S792br9H%U?Ssz8Sx-b+wkhlqV)e z5wBl$tZ__`RgHLJ36YM1{e%J|GUT^r0xs2PVVkH$6O}H~ERQrkI^jjvg@MI{m_ebckb$dy>gNo@-$kUUmU7O7?HC^ zqE^+SQ<8b2Ls0}~3rQR9E(kK|P*Tqng90*d8dB+aLu81RLfig(lH^?~%%+J75-j6H zQ+dM?=Wml=?)Tqt-oE=huUG%G@88UN&%6149j>XK8JbAf9L$@Ml|fB~(2rpGzB&!b%eD=|C%bP_q z9^rOBI1BrvmHPwMemT&L_EtwR3OM;kKTZ zZp*CEKbBe7BSvEd4;YZ>7ccqNh77e4tLjzVmW#kV!-aeil0#e8vd!blz=^uc5eL)y zA;GqV{4y%?$5H0C(9pj0uCJA);Y=gZU zcJfBhtwPxAzH<{=($?Rwz0Vu{i1(MJCIIHCd|Y`-N;d3Ot1YF&lpeH7X)3L_E#|zx z49RHlqG_;`C1vpsNvz+2uvRJ}scELtv{EGX2oMe8{8O?-si|q}Wov@c0bu`~k|xjU zhB#Xee-#P(IYhD?d#4QJU%!a!@GzN)6c`nY!bb(2I_O7SL_nJ)?S^x4=>KEp(B_upBR#ITt?B%}aGu9%9e3=d7-bry0ha10?Aa)2egD}o$- zzeSx!zyl4wjOVYoh@e$LGGUx&!(B<=6bEYhQd{`oot{WkZ{*Qd;PVIB zy~tt&(m-a}J(M-d(G_3|I@z)OZ7<*Id*0>+p~rlLj)?PzqN=UeNLHssoGVKTi+oEr zS@z@Ld3$?{Bc={$(-MAQeEk>Al9)Oxq;j=e9y#_bC>|M8oj#6Zj=-H9H5{tj8&^3} z53pNj0u?yVlGXw&HPBJJAYB35dY?z0VwCq;uy?7{fmQ~$bQm+LcE-d_oFtS9i)TF6 zsd8n3iGkyKVwfR;2@2%ek}GUFj~6mDR-$!iZSIJKmV-M)WpC4L)nk<9vkYPM`Nrd$ zSWb6Q|H`_~BAAU#;hXyB%=J5H$IVtTudrXYZDYX?bH%Wa(_HL@QBmpj@LHhLYK;qq zcz73VO~8$0rVcC0X!}t4Mz{^5c?4X7_~cZ&27iLhhI5*^E%|&Fwq?OAK_B6*81-D~ zFZA7b;%IqJ2>@b<1}xW~YL?qDWbo5aF?{}zC6Nr@rTKLlh>3{=pg_<35#Q*Y5*|pi zORQLbd7?BwLZ>g$O(g<oP?{gFvNfp@TYMWCan*39Z(U+^sh z?x)|WfKV^#^Gj#qQ&op7KDHta7cvm1g2$46s_vIz}a*~A;9MU53JXV4{o(x6;&sx9}g0 zHK!$Ke`J+@KBZf33_yZ}Np}~jSQ$yf_8(IgszW_NlkgWgL2-f=BwMzRoAQ{%CTfpN z&B=7H(qf6z)`*H(YL37}Y)KiSDkZ#7$}6^Cr4AM8vqw?;=U;mk2gSRa+Pwd12qk>` zp7`#9c>PNM^`7+A7n)xGbr|poH5G?Pu01V}0Gwe8N#y9+4biBG6#OtO+mD`|WbirZ zcWnnph$x5Qy%I+$`?4+2^rP{|020*pU&6Q=Tg68gazwHU0FkJV|e^QkKkodZIt7~#QJJ^3^;>mb2vM4kQ&P3 zC>6uv4?GSJUG}|rK^o(W3zJk9gju95=8w4Te#h`ez<9uxcVk{%$e#3U{(_;;SgYib zIawjz!bC(Ncfm&>GF3rFqDq-ZVSWM|rg7;C@fh@`5$bPwJCU?-AAZCI8I+_d9@Z(c zgnO`vUlNI;Yhcb{mhbNU&)-;HdxT#?ONXiZWhRZI5IIyAXl&e)9Q|37 zK?1+v^*E=k=TDOvGP*(zJhmX+a5He)iUT%e;T(#vquB=bMTZ~lLqsmr7CiFOImjwP zvFmwUujP-CB|-3s6)sgS*B#}&gP010h5=9T^nb~~g_T^v6;tY_9D5MU&x#?~%PscJ zUh?3GD89PYK6GxNoJw1KB?+>D@g#2IPWx6=P>K#9PF^wGK^nTMfYb?p3e&yZ&Mv9# zd=SQSR`Ti~jA-9C6RSEPyQV#Df_e4gin*&SP%q3*@LAXjW+T-1AoPBd^mY0VwLVL{ zNlzMrBRvr~YQHGGMJPW7*)))f5){H8fsJhE8jEB{4?UjJfe08Og<*K0#+ag{MQfJD zuZtWY1uS2+!Gc67a!|Yjuc3K2#C61a@NZHX++_2(x73IJ?7aXhBoj>)08r&vzEAoL z3nwcmZ%1?o5l5iX=wfGE2|mUF-B0TuuYR{16~IAGB` zBHavV6v#luN+b(_jXVb>)2b0@FqT`0CUVG6Oa;Z6&n2sT310=pU&qL;U%EG;(9?56 zyzvDs;pT%>N=E}$L}KRi;6)@{*;P@STrWfR)T+XQBjiZFg+L@)HzvIm*-H$KW3?S^ zLNK5@q{o_!oo(XtIt78n53o)Ywy0q?hm5M)K&Zb#+UIeiXiB?QuT(dmuH_~#$I$Cj zBcaPHT93=ga%nL zlFpu-<87x&iQDmsNxb;U^CVyQE_eBsPg81wxG~ELH`9K1#fNA-&Y_&%4zB%b5gA39 zCa}Ztw*A6I%|**4B_g3)x>jO3(u%6z^F>jWyjWZopE#&*$Ui0nqMR~IBn$kcW!1#Y zWa@LmNn|{Od@NW^LTk#Z%Ons%--iL>%fU!A{XqHPF3q0EJD9qFngEgK6;KOiavQ{? zDwQucCr2%d3Us{N31anK7Vvl-`#M6%+Wv^qd2_|;1VY4R!;D)3k@WTMjTe$)${mGi^FEjUZvfEL+cxPmWp(=rrO#vk+HSA; zFa3TiYO2YeW23#$_nO5lPP^zD>UW8di0%(uqwUxQWU!1F*S1ACB94X@aO|gLRoJuk zPLn9qjDe_y1hcygW4dPE_*$;P9N!@yO~%Z5An0?)*zz#uHa-VE2vP8Jc#ft-9QuUI z9+)(k%mxY41aR35k~m#Z>?aUEpoqc8jm)2^gx0v-Fm3CcyN4lkcsRR2b?tJm@hW9M z$Bf$;+8=YZ#aMMYlo*$(3M_Tm2^v{G&%Qe0cM^O)vV6a`^#-BLu;X_CXMYoeW^lY z<#(hP7mjj&F+>x#M*1#IwiXNGy~ZotZNJ*@-+$`i>Ne1ShMJWTZ^D1ykx@M7oWJtC zj^w_GB^_yXGz>3@>XBR?Y{HTVxer*~o!2%mY}9i+#SE{e3=cCen-p1_DsnrSWyEFi z5nz-jJMt*32*}kXQt}KVLOWrgu$9EonEqwBOk9TGB*MX8z=O(9C?j+B1o{jqvi7w$ zg`>emqC>FMANKsyc5yH)@CFj36=V+S9{&I?J&Kqhx;YcQ_yr3iwqLdvf42o4M}aDd zNl&=MWsXMVBFWK%BoVkHa0~lcZf1k#K|pk(rSQ3MB2gK;iVrQmQn0L}--#9)|7uoI4}B$g!?E zuEQgJwmqheCYn~fDGk9{*56n9fbdxfIG-mB)f^y6txmF(oNR;AwR&|@#(mI!md-=4 zUEhB9xR7W3sB7zfXdcH_PJU`RGMG7UDdR3bF2K2US5S-TLnm;-i}9cx;d$-0l$#P{ zH8-8jp8?>17Ah9!IZsjm(ePEz)#2CimN%TCaAF*>Fb9`_%qd%yzk2VrKz25TZo6?r zLSzb)2KY8d3X{?xs*WTBe4H_uw8#Dh?3cpNvBG0eMTPtJe8re+OcZKWBjq@O`{kIR za{Gykdy|bOE9c@$aPW?NdG| zD%bVc`Y6TFNxIexLRFY*pWi>UkgUewzBeTmMU7|JV#p;jZhFR=D(KAw9_&d|dabZLxyEz_8uHUBYquA*~3YPpv; z=ijSGVWnwzWP1CFa8H%L9jl6XCb+&h6F4Eg>i}iXGB>-Th z@LO3@lHaQn-tD#TBbkT`Y$(ouctvV86BeI-`IK-S=5n}zDrj;jymju=3vyr8<+QEAL)#hu`w?p#;glz z0BP=c3mPs~_aOw%;DB12=$&rNsCgcpkkC8)gqjSF^35QDY2p|S*zxSFOPo<@U(BO1 zT^uOq`uemx(F0oT^O&6IdTu&KzJ30R0y~^$^2SVO#Q1jG%?EB9yz<&Bry~J%srKQTCao7+uGi*Gi?2 z-d*!~JISli(Yasen_cHe!=F^XP4$vfFxSC*sK2qxv$UhFxT61ylg)iNw3VjNq>n8F zSW4Vkz{e1TMTOE)of&jFpB5#E)`uysJ*-qt#$4vKP&>_tO*-?K%`?RA2Ui5A{>2#W zE{Rsp;MGyc0?!dujk%xge6nk$G#@%CbKtXUS{Z{{zR)-@*7lBhG_o43rFmUu9|lh8 zOV?k0XEnXgA)ljn9<^i2YYX@p`qBMCe>)>rS>#DLG9J5^%NI*-{Xc~xxing?LCMOQ zoYGJPviwKg-m|?hxxxrt(1sUmx*11o0 zO1@3gzG0&NQ!u+h^W|I>K+aq3{Nj>4p-GD`gG!l~G4M%UEK-;3W`ujMOsBl5&=&Fo zD|8Q=Ss7fD+}#ryNoPJ_wbR9yfzdyWSX};ZDxiNAbInD`Vk-&6R>sb^qN8N3cy2Fr zzQDwO;E(7IQPmQskKm+SQmzvi<+&iADk2cYpr}8`GOGH_8ph9nKR@ShzKW?IpjN|5 zQ~qt}fV@5G;pPat_X6wjcFJwJBI5MxuF1IjU#nKYS*d<2f2!9hhYEqS+Ob7Z58FrZ zXdxFl$AIn=4uFOrYdK~|ofeaodJRgr;)6)kL@_GH=Gmr_o@Q3g{xz zGaB}x4j7-s9{IjTn0hL=E8t^5_)TK2GYSsFPF?$7p6>o-u;iL?!V_Dp;Zci!2H~raa)`7|6w2_l$PyG z?UvUS_y1OXtaoPp^-24{=du4)`+U|G5z*Y>z^3eFp71Qf(iF>Jcj&N*#$u~){*03q z`QO+{ZR3ZFBCOK+lC&2b{0^2C_+qyd7T5)?dOkq0e@miY7b?o#?;|`+lLe;vb+Hww^m|!f84l_sZQf6RpI9|tiX~x|pjPj;_|Pcb zV@!Iw4f7FWcF2k~0%E(xLm?DoB{$53VU}}Tm{9I2|5iKgGWxU;W>&~`6(<^_?T;gd zg?(Jfv^0t#1_sSa${61OotcRkS9X3|7vQuprpV#4#M%U^xNUfo+Pf0VJMVyJk0hxhv)d>B$8_muzoUr4TntR*5qC#cR5UB3;*G?>3 zXD8*bzay+?%JTSU89K^g2<-^T@)y|rk*Q+}Q!J6lI5c(lZYz>1cZyZ>w5l&Y;VhQu$>hDEWEjfz#@sMdvj z95^~ewXk{`sW$N%UDN=N^O&oeghq0dNC9)2&9RMNGC}fu4!3~|Xj2E>jBBidsj%Is z3(3D8?JzHiKAFGHe4236pJt1Z&d7;)mPuB@kn-3XdrTYVxSo1|m8B2uUN&ghhk6u| zerrm65{!9LW1Y?2F7aKuK=49MmAf5mWw}Rl##d? z^wK!_n`{NBR=+Adx$Du@tKsgX{ncB|^p+*k^oiskeQlJxLAJ>vNy(;Aw5mlLgp0m> z6Hjkfx{)}gMR}J{r)h#0u(o1zkGR39Mm8g&)u=I)PA{OTK{^vi>{DN(pWZfHp&!Uw;ouAsXXx5yU zGY@;n6o{$4m6(hDS<3OhavJ8w8@q}%5H4Rl>J5Yt`j^EDMk^$8mkv(TqsqvEe=tXb zw?t|3a9kBGi7Fzk_LR2GA`u3~h%%5z4RP81HL{||XXfz6vXkXeGNfU51lgeTme;WY zcG`1CpTyq383zbHku_+LEu|izTlrLKr6G~%cxP@%w1HWb6=pM4_nvS}p&}KUxsDb3=wkJYml$S8Od#OiI_(fY`~2>H^1c>|$Ydrf#bjWR zhO`E&&V|d10eS=;$mRG89TkFSK1>FAL_4c?f#TGqIXLdaEc1E7I~>0c7?Lp?AXTEe zkeAnfM)vqdSH?veZVD)A&!;a;4?~kVa$4@XIhk9kEQ!jSFVghA{*70eyUG=zgjh{h z(L~4~3AQH}DfkQO8>iJmrHqIR85v~zJ>?I*cS=T3)KtAW0BdHlH-MD+8DF4qF{ggF z=9QBsKL;6lP-8FPElcO7-CBjS@Ez4ud2Ij)COODcOQo3W@3qNkq>tc) zl-PUAabT^qrhwG4!j=#KPv4z#Nl3;VY;TcgnkcswAjd@w@ogZy{_`tboj?l}7Ft@I z<)z_`jI$9O<+6nN`craJpfJH7ir4yFE&oL8bM>-}H@nt!Jy`+#iPCXcm_I5#?PZho z2lz%vTM>SLBMgh9LNEtQ-1M@Q7dm`v+j6WHq_Uup8 zx1g%{)qNM5@``A*H{_O>`WdNWLvw>IiDl^D3_vy)Hj2O(YXQ#avtFE(R6NBTbfKcD z7M;D>s{BBDD=SYy4Kde}pXA#qi^(90Ff40cmYhG3iR?XF$o}CYjC`i@TjBq2{&Atb zwnc!B81%mcqJpmF5GJVMJPLAWKg}A(mo(-75R+Dvk#{l>i&A)B6wzFx1=6P6?d{k1 z4Da8My&ru$!Bvs%_WqTs+65foOovE=_{1Xm?B4HmxC4d6?c?b@L5i#5RimD;^u)ulx^y{P6bsuBa=; zMAK*A4h;SKue%QRTFFwigl{#=O|1ol%af-t)p1OS$sqt4QR(+w86uE{4^4Tn2pio$ zVLU!q8xbyV@O)Zcb-lTJH4i1WHO+(hAZlJh&dAuGdcL}u)jofOX0`sLuaPXjED1p~(!;n*1}T3)i-De=hIkfLZ=Y*Q9M=>kOLUGzFy1);>iaG( z$d^vxI7w0yd|Qh#JloLd@z79oYb0BhHd-8nWKj^fES()*=78O@fIaO+P6mEF1>?lA zB&!?KU#hAJG~%f^vulLqPX#|2& zQjlcTGDgj3wQ0S@v_{$?o`DC#YtEag-~Hos9*pNn9%GE5bf zkWug>zU#z*;G6Y-!$78^x;&OtK8ab2;!zuKQzB_$o)sT+P~+Cg6v(2Unu+#`edi;4 zV!qcs_G!sPh_kaRI#Gw6qYT^5*Ku39q>s+X1W%Kw3dj0Vc>TV3z7v|mavfWs$c0%O zZ;ESrg2Ws!705A{WjQ?7TXob7EgiAtRgYis6se!_F&PR3Nl=xWfK~k%oD{nm6!bcI;#gW-?ma5h|uM1B_MY-(L z?nZrc62~b#^DKu_8vz;4{4^-`HkiH~LE{h2_v*3A;_dGxrx8=gf zam&y5a-IZrvJW45rw&HkuFBNxbszkg8G?GF`ZE26wdtjXF4L$WeG`;m#pT{6*F|7u zH}Qz@)vH&YpBnT@9TuPGtgK1-tCN9QZmi!C#`#;hU$j*2^GW!Z;oXSNyV^J0&f8^D zS_KYnYC#31s@64Cs&7hbDC{dnuGW`Dn(9B^-;^kRNwK-~l0CuW7m4=BajhX@GRK z7*l6ltERn$W<+LnqiNjW)AD*aH8s~FP8Pk6?(eUJ!lSgLtv6l}&1AsCESgW$(|Kp= z)AtKOSqn&vB625N0{)S#qKLE%1+;lhNty~k*TJ{^11j)}?=W-r>@UH(Nd@?kocNZ*O^DtcP++Elbfaq_)e!i>JzEGBKJ$Ms$2 z3pl`}1RE^=?t6RQs`6P+tmC#C3**|6?^8kd{D9A}_{%9xI=}JLUoua@zrnr@E4)l8 znwjw*h}nasDYzTwlCX@eI~6nIWz$ z?7w{>eOc&FS9pZjpzWuxbsbi78B|A2Cpw2r^jXcy&$|>RjrE#M+&UdlG2t6ahRozRu?UmUQ1878kL}(Ye3~O!6L;$*%^Lg%%XFwRIYnM=PT!1gj{OX8!m!&4$=5S zsozc2Lp_>LR-i9NP$Gc7$bmMAmxQ(sQC!hX(aLSE*28)XZ`DL`kO~o$iYWSNFJq3T zNV~P~L$Df`;J!!>P5LTP_~8=EB1AraWpZ>OQ@&Y9c<*QseNWL+zP&a-bDF5t^N8a# z{ht}<*Ir#a@4i&5-nV?g9?oT9VE@}H!YHr4ioT}fdysaor(mxte~%e%w`owFEd_m3 zmB&mTqOiK*VS4BMq?~0)_>eWn_GCZHrQ7S~_;v4Y`P(d%im;pDcX9m|g68*(IdW?n z#*ooML*Z}hgl0=(+jtslw)-!1nHUOPu7pCD51`Oxsp>MgV(lMaic^zrX8KHwPD)Ot z7i}Z~6r1pzGF@n$M(6L8hCn*;pIUL&E84et3bTtp$o5*X{9EacgI{2$mP~rbQGh@M zO+i}}?x<*y4 ziPy8k>)!aYVC?ty%XK1)_Ox**9`%~_VHfQUzV;Ie{ymKeOWjzzNw{84aKY+ zjinzwF?jL(LX{1q^x3OG@M|rw{ijwRca4$M9wx11;9Ax_bBZJYJ`}E^&6gXU3Utu; z4J;1L5=qx0BYG@lwm;+rOh|+A4G5f70w`KsLrfB7H8TVl{F;_Fyrqx^S-T?Ud=;y_$hPL5;jzs_v(U?vA2Mte3)$#aPPU*s~s!cB%@5{2jTrJcf? zTJ)t7yA|hnnDrc%C=|Jz5x}HF=^^+^=XYA{nuy^6uCCuZ>M5%ikisLDl0q!kD^Avt!`YZ#vHohn3qB#HNG~KVd$1_2KMQ%l z+l!|-IXkNnUfz7X3Ljd|4bu<@Oc52d_VA9vS!Ypn1bzIJ~P@lCvkrb_d zV1&@cSWTc>fiKY_;|QVYcAR-Bem{Nz`LGqIOSW(=WC|W+X_+l&o0TN)_}0o*IJpxR z;3O6Fyf=B0Hb$e{;vCrds`?f{TlxGN*m?MgRr5J8_vwrGg%PQlog1xb-Oe70(u!zz;64n9kg@<855~^FJ+Z?OL1N%&;>yc<9EsUKVPOhs#NgVhFv~DZS ztxD>f;oF2*<%Gae58jC!la;Td@}8Ki+0fmv<5Fq;!Ntz!J}1)6u|GIccV&6M+Zf0A z)2|c^XC>@jioT>h>IOw26=UW}p|36CKLuz4_HMBF%u2EV%X%0!m%(xwIya6^fUd!_ z5m(oTk?mM0`0}rk`^{jvcV#XBsq^BPbW`rk4~Ere^92Qzwb^NvDOUA&wRk(7tlRmL z6MXK}O;c*(Q(VYBrG}ZHT75v3W^=Yn&lFdG?n|>TUPbIS{>fu)4K62ZeJ9>ZGp#Cx z*=Rf?Dg{-0$2#SCv0(F&yVLzm2&%!qKTiw1jtrBKDB?7U3Lh@!p4yKGM+&~hv^L*$ z>#exh57cE&xDdC~)J2CaDaX&8d0vVQ(0mq|e~*55;bzu>=p!zgQbH&qCeE|JBB_`l zlfaH?I-S#>+XO*-+Zn$)z|_3={%XSXd?Y0Vk^BDqzGLTgU$yMZ+AXj|Z^=+GbA)$x zAd|avbnh|Bw&URtY*TAx)Q&Bh%5nw<)8qyRq`y!c-=omD_oZMT3eP`bO6?(P)nhM~Jdx zq=p7*kZzC;rJ1ww`wy4g%--)_{jT*ab{re3kfvcNSr@y%I>6SN=jCa*k}oanoZjc2 zA2Ap2-2RH+D;CMUA2GlGsq%8Rc?nciYput2#28%ddk(Px5o2w;cJ2r-eD696$G>ICR^G@vxGu zn$Szo4`X^qST@Q_CoVPMWRVT(RwgCPKZRW?7$T?Vp%^VhzIVRNI8n3}5pHe#>$4kS zOnlWBTcZc0WXoGy7F{;og$GT(C!d8_4YsOK2%0xf<9Zgzr*OT7g5E+OOx_fHNY>ha zxEz(;bGVd_pW0k=w;n2p6&V9Qk=RZxUG-V;C;8I*jn`sBsqL5kM)&!?5=<*bmXS|>bQzpc6+~^luF-q>r`P!VYu!p6S^=lOo$g6Z< zN`y4n<7Wi|W&XPL3Jl`PliQqBLG4lr+Q#@i?lQIOMI|LvZ(tw(~>1cKFJ zTU0lNjMA-JM-uU|7(2v$-s2WI=dQ24Wa{L8> z22cBC0JEIqKr5O2)s`xRE9NDz+GgjB#gUZ4*u$pDBES)aXW*|y6xkZAU*!s%X$coU%}8T>zKgWXKfER48w=hUtmoKV|V}Z7?ssWwAIs7TZ5WRU)m|TVXsJd zB}=}PYZL)7f#CkDfkJ42zIlA5b!@Sx?7F^aQv6NL)~wmsAAK3p>?IS9D#CvG)Pmou z0sYGc?VqAgZhxqp4%B1b*L!svU$4pBNU-_5Gd}MoQ2m|pC0Wjqo=V{3^hKEkQeqe- z{#tQRnA+S}4K;G|MxdPIUya#Gn+-e9iy&XNmA;{11-_gu3+U3N?-=5ziqb-B5>dyP zqK=zkA0e%V<^~eBrUQll-XLHt$I!IsPz7VpN~D}qwIXN2%&XX4imkXo`rsxX z^OY(R@AQI|q#g-DmOy?INH;pT&vg*o{4L@lGxyrCB>}^ucLkJ@oAt<4pLbAJx9TB7lTfz1%FsNV9mVYon>zN^wk%gwWhUo zIJv;iK(two0bxRQcX_ONmsf%9qkZeo(M1PR=l(7fHlKA0Krw(q0Gm-;=7N1_J{FQl z_Ay5$8E5wK^D3#541&)p>mcxaqoUhJdk z=4uzzGe>8YV<-B8#~wF#`OAVsDM224QC5PgOM2nNi$6;-Etgp!BbPnL<%zKDSZnZy z!TkhEqj|A;#gU;gK$Hv+mjBDMzpmabV?;7W_90h~1uy$q%yLb;;7~khn2c-PSig8Y zblIvv2b0l2xiZfO3Suud1K_(rBxEN%m+L|b9NhH*Ae?M#7=D8&L@+ED$_cGkC%E-k ze_%=at=oFy#KCUu=6ah;<+R7kLKY2N>$N0vO&x6>i|zOBV5`cH)Fh*~rNjQe!aOni z@1qo=_;&ydZ>%5Be*wdK=e-C9Q#U&*YR^EIyL4l#MD2@dUg@S~$W{f}z_ zA*SKn`tgXBI;-KQ1Pb^a{P2SE@EXh;;=isfHbem)jJ)~E_UZZNFVX@8{W1g|jkzz0 zSSaCoZeaxdze~St77j1f2MoB7HG#p=T^TNggD?QEj3xtqxO!nBCPI7e?lliJZeJLn zxG}H(r!8WB@GHNo9yy_!Zd)DBshH&lzp{DSZ)fSuc`D^Cytca^H6se7r8Rj+-+EaK zBGIK%z~{RPbZ?1CJ3H?swls(D@l8f7+#=P-PpKX!nRxB4jEf%9w!#B@JfYd;b9nF!|yx&|Np!w zu2(|ik>rreXOKylTJL=0x|ru>N$_>#$7|kBI$X74x^K;%3Hyorwzdj;-XM$Js>6eT z2iuPP!|-HjZY0196xY~BxA_FB5nrIJ&LCTAMVV{Kg3y*i*vnWlFW$v%pHMHCHsSTb zKCEHThbOjjgNNv!C$_RM>V{-Xy2CC~~I^Rm1z zaA8F>F`EH`T3ir3dpPLh5Kh|ZsgRkzRr=22I z29LqMcebytv%3A>bF-a3XXHm61(mH&+dsm{4joa41FFI@hOj4dyCtgb1_z| zaugzU$(u=;EE*GYB!z@!))d2S6tKK(JDUjk`A08)@^O8DtbzBMvU58gilUi%e;KmgTlO^k z!c$w-QO*@9TXkf^i>9mZP7T<$`=4Xqt_H96lt_NBr|)5$)G79DeW&i;<=4gnObbGC zvZ$s_{0{Xq39E!M05=Z)Jr#TIC-ygSoYAy@_kai%9{`W+gayDMY&!wo`>EeA=ZcHE z`G1G&^$`EgK_U1l>UMJrmGxwK2@U=qR@s5HH@)>LBOB-oyHeDC{7d$(V>J~%sQoV( zq(Jz5>PjU+EM0-$f+8d<@1la~XvbQZ^n=QXe!q}NIHW*s4#CYn;3Q6lym{#A{uD@R z=vdv1a%*uPm)ZQ{;M*7hL;=?d#zD~D)G1j8Gd?^^u|K58q^_G=X`6j4(j-KBds{`r zBq6trG}nlmC_(It&cCOKJrAmJzUWbXdx32HNY@bpSStd!((^E?90`UBSiHaBJ0-f& zNd^hG_queQ@{v5V)S0C99tM*ukD{Fq1C|{ZcL8BCc&2q?4vOf zDn}mCqbl%CE*S5hWy*X}gO282eQgGy&=*ABM|{<;0~R@vJnzlWzG+F=PMTj7TWb{k zLm03g0QVQY7$~sMZFuub*?HA(eDm?{*vg=aesjPTYGGkQXZ^RR3&zAdX_@DQMpgNb zsq7%0Q~VNQ3~A8IYU^K&TE$lxA4T*Q_>X14Wq^f!_Ocr4 z(11w22x62ST_fRe#FF^xpToZ*dfjeLy2x~vecd=cHD)#`%VB0S>@F}RSCzy7`FC{( zZUq5)`pjp$z&Y?e-ZTi9y4fGmiu9a?B?l^hsv*AJw56_YbZMOv*q-W<5WNI`PycZP z-hcqF7k2WW8NNwr6#h}8!)f+y!a`_->vkdNU^9@U;aTOpj`I^znSE*?No+~LWR+|Y zZT!)Nlt_yyrRT>Ga?%Hn0`5NTS5ne51aerv-~CGPLi`sCTpY1YU=2?1zY;Q1?MDz4 zc<xu5;b)`fp?BJH|$m1RQe) z#ib_pOb!#~5E}2i*=L#>U=wDl9(HzPRw5Zf zU?K+r+VFntl}62wP7Wm{VCjxe$GhI^?51KBjU^Jb2uaUBd&}^ySw_dS;5+WzDc<6; z*w&obU!;z+%+72T@VPp`?Nr!?|7{eLCDP{Th>zfl++W^L8eBo2OH~K~hJ1OwnmrQf zDuqtVPSgGE)+|EmA>x^i)oE@w^+zOn7wd%4N4x=h#}Vrw4>Z-$A9 zJ#2?4#giIERTX^oA{x9i!GX;r$fa*en7Q(A&WYV3tz5=jorkOVyGCAe2|EQm*j=Nn zo?@2IAZbyW&rRoN6!)$_K38CjG_B1GjF6@74-0DSNWzCPL|Nh$o!1IFe}$km;h|dU zkcP_mfo_fVaf_DGy{^<FfJoQ)TYQa?sT zz6Iqa>+S5-bdT=;#Q;_6W4DW(%!G3jes zX*T_R%YGpn%qit>rtDXIOiT7lWID)Ka^-xF*sBTICqW*S4e!U*dqU^mGFo8?LF;Iu zYD%bd5rkO1H9O3nK0xQ6XG2r|pP|dAEw?4eplo4H(R-%O5&f0FqN0yN6swdEQOR)2 zHn;;uEhE(qlflqry!pxY!07bp&bJ}?N%8z1 z%6;IAnb%nRP3*nx>T+G8<13%j1dEY3?_cm355= zf6y#hBr<_|B!*3%QJX?aQCQ6XV4;0 zV)7wtj8VTW${TMw@ByAOh=YI=>vB&J;3<2IxV`ZKEuGmpe2G86Xk_T~SGfkJ)8jYc zzDCazly9O}uh}s~F0K6U8UuWvw5R%k%ec>X_3@b~s*PruK$SGh`V^=wp(4(*n@q^- zTmF&(sd}c9F9VcF99f5YPm7}>+BZVb>g92|y=psXu0bW!s@9A~eNIb7?mf;z))%}L zS>c(Kvs>QuOF)IV9vx7xM^N4|!b81#NLHFE?{l|(hV6_8bN%i}h=z~~(B8)~MR$KB z5vXjgTlG-%5{wC@8D0k{l*7d7?D;{*`hnSeP4D{Ta_IHM^R?#m)Vy#BOPk(&)tsHh zgxYMwZ3<&+>T0~I$DG8^otIC#Ss1eWWO=mHp;zE z^o_?|n|n*dXMcWhm9fwMbKInzG}5&qnmqJpoz|R;$QJUwC`NxkwBC(4m*pFIx@(`r z3&Brlfnn7rfgLXUhBEfPZs}M^FC%Q3B)d1qMbtym=(NlK-Cyk1&yF@~KgOQ^lyLgx z=_|IFeFA0M6fwTj)7s3^OU}Z(2yEtAkJ=m!$IAjrNA3Gj`ojW|J|k1(w`~$SlEW%}*}*Mhga*E&ii*y8<4K>lE_O5Jo!>!G-%qvS&=)2STEw&e(-B977PvLL^t zng3c1gk#Jlg-YLEg14wBcDi1#4$z6#R^E^E|MuA)emdS^Tg#?m{7aK2q(C#RuMzw2 ziR6ACj{M!DOE2gP+~#N3iN4GKo?c}e1fZ0842*h4JKiXZ7d3C0n z8q{V)jmVhuR1gj){ARhI$nHg#6HinZsco(Aw-DU^b;d#GF%d-Wxwy=h!Fym+{CAh6 zoKC>4&Fx#O5-W1DGgz*2LcNqXus?fZ=CdRuzeod%o34U?_66;~2+3^{sq-e2VqFQN zJ$Uu;h^6r^Jx9CqP~|*^@BU*>n-8A&AOlAxt*3Qsl4&5WrK4NQ=I5E`^(A}l^r1pR z%n;}0-HM?%QlP@yo&u)57sL=)T%0r5_Ya4%8JbS-;7l_-Wu17Ly zftxG)a$*4MXV?5VnYxmJpr{$CbVXL+?yb8?yPDWyI{0F@_*kg8<31C?T_16Sjf zWRnMV@Rsx+4)^UU??ob;8`u9FE+9|6#bOWpfCZjD^1IPKJ#K7^s6{U}MJ`iv#wv<= zITlU;+ILnH3}PN4dx#RUe$8CgML+VrU$CnXR9RQU@!b>Z=;)pwA(KUY5R}c6>YM%d z(=0;~8LDpU2N^SFe#1k`88xq^ex0|_P--lB237l~q!=dV)D^I^tAx=Oc;&Zjm&Qhr zh9^0PcR6h*vb*G;+fx)iG(?sfbj;vJc0Dqolu}N^_+hqJgX<%wrHr6$C2n~Vh@J+# z7VR84_^YB(WZrNs48ILM^TY{%d1c^B^)xYMf?C0TfjM`S7Qj)S1~|$y07u#VZe48m zdY5HdCBWz+LTpTE^_(-MJWl%QpKF%qK?B=23knCicM(LAPv4I zGFZ+erAo;~Wl@gw$%j4ohi)o5}}*;dvwdWXZJ3#WVypm+@X zFy*Ob7d+PEV=g&?R}=>(GMZ(Yu&wu9Ow)P!gZmiJV6l08gSC6jW}WGO}r$dQw> z6pqtovW)Tk<%T8g87IEXgCq1S(vtRXs29FT!d}g|qg)I02k1W=d-6R25m)}pcIj-6 zP)r$MWeomrrgK;`LinZz1AtMce17}wU_oep`_~37-33jVA*R$=6o64?ndhL)c=z-@;8tRC}6MVCVTW*nXlgFhc*6 zEpsnmJj39g2;X<@jNz^;R}FK)B8d!+97UxxF`ksAY8+Jd@AALH8gQbXFv?>OhJr4v z%WY#nNxfz_i6#PVyUXmG78rjq=aS`_iGmCXQJ9@=R(n#Dld%27-f?keBDWu@D$!e7 zl$ah1Oxv)|yr3jw`A5wospcN-ht^kEQ+N29dBhf?0E}{ynagp4`u6gt3UjLo3$q`7&j5_F z>V#Hb52-7C@V4#Sk4P%?2eOli3GssFvrIUdYdJ*21N`_QrhStLeAaPI7vY#4=LHU3 zfZXNYy*Q2G^FupNB!5SYi%P@ir3!wBnq|ZL)B{Fy&lCMz$S6$H{ zh2ftCXLT1=7WK+rmCzj8)(ok>D%06DQJAoHz32@iVCio*=EJdWm;NinI!7JI~{8%d@t9sPSlH`yCpyHq%IDX&tBBremnY zq$Jd)t(Q#st9IpNASvn@kx+dON~^Dd@se3>)DN`epn^1{uslYUNKd1aS7&!?&ec66 zU;kLvzJ+`bQ7-J!!j>`*Z=oCcKr1*)W29B0_{5Y_lHsR6wbq8^95!tn$za>RpzT!KX03+4(? zKLTs`3Zpz_-pDP|)!1Jk-Rd|KOGQ|-GrqIF{_7>uJLvp@p=+dUCv9S0tJt`eydY>9 zBr7s^%;FfKux;|o%?18h;Ud#OsCi~yyEaXuAY<+m@h|6;F`tx`{bQ1^G3w_sHBItJ zjRcxM&@N_4DIG|Sk|pU%YlRv6$O`*;{6i*Wa0_Nf{Nlrr~hmj-u9k63ceic>;(z`uS}_LBTwKh0-NL&-)S7i){m!d6*n3Q5HReJB*@ zHhXtQEh6>HX9zyKLt1Zy+M)X%IZN6rJr&U(t+}L;7KET#;vpFo%^3BUc=khl1m{f5 z*JY79hEykmf1VX?fcH7n=+3p{kD=4r(3w&pfBrXmGWj{BG@3kjGN$qhm_U!}FZ%ys zl<~~JBctCvJoh?W?K0=9c5y$T_C)-EX62~ChSjls8->n#kZscb#_V;N`5J#!4eyFL z*D+D~nN!Gv8#q>n0+G|+6T`_A)5ZOj+)$NLv+v1^vLPJpYH9n+r&tQ!%<$~Qd#e2A z@0Dn;8PtNXARW}NN%|l!wHVCuk+OVp+;d`qRSTuu)PkPMoMjrMYufZCTfpmtqRyfZ zLNZrFIn6xrkE5&+0OmRuxT|1#{7Ci0QT{NgOGR9^7nc0QQI2}s#{I)w8sI4Nr~n*g zbn36+o;F`l?(PiIj$G~hyW67D-2ZdF7iu@18Dj99P#rY$NMp}#**p(d5ynpp!Davz zKZ!G3K9yRU$!|PHQErF1-OSvS5x9ZA6ZScv<W@wx`Wqu>(e!3zUndK-Sq5hj65NuZ|MhJ4 z1ZQu%65aSDBB^HwyA)s~>D6L0u+r#|CF${b)_jlwU|dk?s@Ax#A&h~ou-xJIni$XJ z!odPuJw(qSO=gqS-!cj^4Yk|_H^S(K$1vhLAYUY&EGpKf0_+5dAgTW&k0J|1l zy{5l%^C_iA*dnfyq5kj3SSo^PMsIAb(U3g4;N%4AkQOU{DTFzY9BUls-Q69bvztq| zS@RMhkEfv(Ww_jNdUyh@YO6epNeW?z%{226W~kV(gTeGpM^Tg4G_hPAkI!klU33q? zkZYBezW_kWkpM`!az9bC*~>{fHEWo!$_=EVdbBxTo_v_TO>l+>1UhiB`%Ze49|s*f zOy1*sZ6STOU+`s^*GVuMA~b)66;h%LA{YH}mp+K$+X!t<=n+Lo4AQln^is4^kLmvc z3QBVGZkitA4>~w7Bi(Zim0ju*#KkkU=FH28cg;_cmm*psv{RLqaG2Hki1`TsDQnb8 z@DPqt3TXYPN3g4SCEoYNaKGuogaU8>e_~oh!UKpNjWrO~pcr79 z6QA9e6CSPmwn&YK9*+XHBd}+MxowZ8}NeY#C3EygdWJ6p90d zvS2%InGxl1Ov-m(z{ohmOLB}`#8jlOq%nqyc?5&Mzm@J<$W%U~&SKU|%jI!2$duL^ zA)r3$!iJz0qV~OSv)e!`(0d~+O;QT2A?#U@5_UDBGS*s{=uKmsI*!XmE)ak!>r9(# z6?x;8NYgoA9h0-FlMA#Ap4pP;oNCJDPQBW4IxDDVN+s>D z`p#xVUrhvUbZ>wgMK^cCfECIos}H>rBjOf6UURvPB2o0zLgU3yWrVkK*g@be*{s9# zinaVOJi+}v+R$k|!r?GwA*;lkDA#?MQcS337O-oj$10-8q}>w3EWGvYQ_Bc=6Q0HP z44BW{ZaZsyvk-cbO0b+%^tVXF>q8*%ZUFpYTDQ&eb5Z<>vtHC#Vo zyt7!JVF;flx1AVPn?nuMmP=mD^lVFp;Qv^Qu)S`17f}+YO6%thQEJV}lk_0h!us*P zG)$_aB@9%0sQk(5AxH|v%V1I1L7FpxkBW%TuEYK&>CS-A&|*e4Tt^A zAx`~m}DfmJ6vN%=d!!Xmd4Jlg?!3y zQCC3k^umddO#7;{q~9*50^pTjm(g1V|9&aIq#gXFeIcsV6GN9pOW4IdF+(0d`63Dpxxxj?&+v4_8AkpXBg+Udy}mf<60 zq0aRfc_&=@79WlIf_Peu#hW3Gp+GmwZo7H#<@^TxE)?!o^$dI=v@(zzF!vRFersuq zVv358B!RsIfS4qs`MyOvm&J75{3R83<{IEQCu$Fj8A#L73ukn|Q-iRD_q0bwMHvV* z$7KGr>%It5_GOk5uGfq-_}jE*N-w8wGblnV@94tDw2iNY$9)_b92k*E%1AS5x)--( zUJxA6Ne>xWP)KjjHryFDuOiE4*AknWKwo5NKj9L?Wq}~CDxn*1x7~eA&T!-m21h2=hAb3L^V4S7 zgEuM&kBMnw8!Te9&5LsJmvK=S9DCmHa>?xOb~~p2PYdNg4J;QdTBGgQ~W_Narnq=t+tl9UZ#v zuCQu5Mw3Q2>LG%=!8U!J5+xQ$LX2RTj+TzzWN}n-O*%e;JWb?hzsFTov}tORHNQ}C z1$gwok3Li`rS#G2#b>-dQY!?}#K_MC`rt9EI-#;`n^>o|4<^wOT<~6r2ysU8EfRHU zzuP{1S39pu zTTt*tm^zH3gKkJi;kv1n&uaEn>f2C7p>5}r&wWG9F0PTAE^-M`mU*+2Z^$RP4;*Zk z$&+!vBr?2bJ0QI&qVpQ2R+BWP#1RbeMEnXkwfl8=1rrb(Y%*P^cy+`S^r4k7v<;J% z{hU@u0VrXPwtr<;25_vBQi55DkxB@|kfb5<;(%yN>mic-;E!q2 z33%!ac!l2cYTq@co1&|>FMY0EIw@-+ltW950yMTfA+@Snl^G2dT397ozYJ@ZBbQ1v zu~5u+te#-X1k+RykE5OrcL|2WOR@-8yIM2d=?&H^lork8q8kqt(kC@q!)-Ft@D8< zDqGHskcD#w6sC}%5yJUit4yCz_!C4z&M~Q0T80-X&~dNC2o0~qEdJIuL{7uj4FN%X zVc)mN2WBha`kk=5MvsiI1pn0xDl=a^C`P^119d0Uf_gvX10%MJb~t81iS{indfkIX zw}n?|_5y3-*}~M5%MR{>>#98?|FmX#e{%(tbXQzs@f{6@^WK9C0bqKT*tX~q>| z_PjYy{lG7B7Q;T8|8UBlln(vUs*0#*r$yTP14d~@WS*`Y7FobpT}hP&>5%M)67s*J z31*^XZRhF=2hrc_dAb5ab82jD2%7(>%eiOl6}N6Frz`t%dt5#qI=}h_Jbe!w#pv0} zsDhIkJH%Bsm-@eNcq1U7K{Ef~NH;jaIfIMO1}H(+8Kr92Xr(4KOp~ z5|Wsyq+uGARIAq|14^CWr(-5S(J~*2FdU*SBJzUq29{}IqV>SW0yjk{(;CV0Dl#;a z5;aPp((?tfsw(XX(9N1vDe8KiFdhBgB5*25IY;fAH z2|1<{1_cb@bcX%RSBk|`Z;QebL}WlC!7u+6^*X;j`F4M_fPMW{pbuRPHZj4HGE74i zvJ(`>p02nDlD-{Ld|6S;S}V9AwLv&-U?9gqQt4R9@!i(Y2tkGUcUY0mTRB`Zk|}xL zI*&syoHG4+9_wHbP*k`GftK_V<8hY>*A*s|7ReHS&C`62#$J&wvhl&8`Mfl+g!9N3 zq`Z{2YC-rK5u>~)2{9;Y;tO3=tw&c+v60h z1ypY$9cYv7p|t#6_KfNYsGRZyRAz%^ED+=A^J0x^X}|5(A*&SM;a1V8zHXxYgF`F0 zJ$oP4S3?OQT416!)l@!7kAEU6XVjJ3LTuQ_G{RhxDrLl}q+^%xS_&RQii_ccL5E2l-Am#sTEo*IPn}X3@sX} zvMQQ-2@EK|e(j5c4I3O}`S0tzMOZU*3V11Y-F~vWGsshhZlmo|id8?IK~%<3R%*3G ztnJKM95bs(9%u>ii&ajl!b$3=eIhDX1mTxyX$ZcLxAn#Rk!HXWa*&=Ju^0SW>uRSd*DT?V zY-QmQQCXAkZc!oUfs?0IpW#fTTIsNb7g?hRQDKiqhnPjx%NW$JG5ox?KjxmzyR! zLZZ6S1Jr7mR$=(3#9HzN?}qWhKk)9gC>|GIHq%`p?F+juKo-Pju+E5sB6&MKzKSZz zF}MKin%RgQ{xYfhzKpTf-ie9#vhU`91{M;vztNMHmFA!;z`fv)kndKE%X7{XGU3by zDqS)c1*esALQV8|5`Okc%63}`Ki%F%?6ODHB-CVJqV?$`x)#f7^#(709Jl91k+TE+ zJrCM7Y)ia5Zb|+6AmYgC=(_!zr^>K>Z~{DNc5^e109drcZuo`XvyP*OlXa(uy(>@% zj%Q;2;2w?zEmr1t9nP5kYgIzM7q&lnxMosVj7q-|RYa!KIiiwE5XG6s8VDuOKNJ?U zOnHo1)V<_4r1K`$y_MyGNThkF%a;OGe_MTaMw&DWsAXklqakq7U!sSFv$Q*)!#gYg zTV8X3anzF5+)+`;v^ukn{w3XTW>UUvZqK42sanA-?kLH}<62B{d@Us+9^rwG@G4`bt$9U`@3ehlek(fR^!eQDix!33sGyHrTkfdsJzPX10QZp z0jxfIak{+vunb;%DTbW2wu!_!vhOBCF5_7QGfc#@Y>*&|)g_|dCsJrCn74@^J)T%6 z>z}=Tmj#Mu@B>Lk)keqAGH~VQ*0e!Q5_Tr8)o8AikAssw-8zO=A-n0Dz;}GMv!lKq$PF_w2ev&oSEWUh5@}EphoKldLG4>w6@aeiZp^bFj z-s1#{?7O##+5$wVi683Z*}B(q#Y9elSEYN*O?`2?+i|4-wD9?TNvUV zxU7cVSjk22dGCPFU^rXzLUvGc60x5s5;-)`uA4r|R{Z#F|5e^AajBHNQbdDH9|?~L zg5K^v8n3s8+fC$d<{rH^s=Wi`dajir*j@lrxq@n9LJiCKEph)35I&)LP%pD(LeXBF z7nvcSxN!Z{)solx3pW1=KZALpEgP4_apAK!v8&z*H|L0(ocG%_Quwp%6=vMfKDYs} zE(cJ`2g6m^>&Knf>^n+HxFfk;sVUddbm7-bUFbCM2Q>)CL;SVcGQ#U*cDy5}*MM z+0dc#0>MNnhPCeKdg1oxnTW+7CbJf~@ox)6Ifu#W{kw-`fWDRjh5{PcZ*O@;ZYsjT zyHPBz@I-Lf^4pI#-MaaV7R~Q--Y0Zh5K|Q@CwHi`9v+<~+!+llhZ1m98+0#FE;!Ee*S3;Dsx>6FC7#f(&bF=T=WOnwwyh-3qwO)5vc%=+#Ze6Lm)&j(73E#vaO=u)h=m z8raibeS`2$gnAL;RZMOxu3ENf;FtRZDNYB;QGVohk08{2#YSUb13}3s`@a0;73a5{ zxP>G~Y`7tpqFZ4b>G7c(ynTGv$7^}?`!H#?!S30xb`$tOP)3H2%8ivo6gL82et&`L zA~5o9NnrTUGgn^)prMcZ-(T$3ox=x!E)CgO-|#Xg)&2w2a`PCKm?r-}j52dh&aUo} zH<|NN?+ic1e zThT8fd}Q8n&LP{-; zlIK)RC3SDTRHX0InTb#KSwgXtv*Ih%aeRX}BPzHkuHi7D@y|Q#Ci}J5*}ZR0|9TffN+b?>=OxhJ@hSR%4kaSil$v48)*YPYysJFkCsee=bHKkO zQkZ#JGZE=@CRTk7?;v=FwVt_p_vd~-HUPuig*kV@(*7GNUz5uN@m#gx?$Av6NbIgR zLj`zn(6wuDFtD%2EUS8cZe-meaBD;vm^exPIv5oBI=rQ^2Rv`yVZdq3+RS6@>c(MG z{-s-XDA_`l8LTZNsHNq?D2mS<-8I^f(?VRzSh&Oy(j|_44oOl zxRUU-InPRd#FR{Z`nGGZb^keLDOXB{7r15$lcuzu*fvZOlhNFJMw14DxqR*#2XEUFx{m`*q;ifO+TeA3N=4ANTA&+u(RCGInf8)a8pSinh-LWMlmE r>aICzGMm@ehUH^h5IN!6hAWuQIneS%LfIm4YWyz`!CV~G4Yj7lQ literal 0 HcmV?d00001