From d6aa0438536bb5d12ca3c8e9c2fa5a84fb083dc1 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Mon, 6 Jan 2025 10:29:09 +0000 Subject: [PATCH 01/31] Build/Test Tools: Expand performance tests setup. Run tests against Multisite (possible since [58097]) and on single post pages. Also improve cache flushes/resets between iterations. Props swissspidy, flixos90, desrosj, mukesh27. Fixes #62725. git-svn-id: https://develop.svn.wordpress.org/trunk@59577 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/performance.yml | 4 +- .github/workflows/reusable-performance.yml | 28 +++++-- tests/performance/compare-results.js | 6 +- tests/performance/log-results.js | 14 +++- tests/performance/specs/admin.test.js | 9 ++- tests/performance/specs/home.test.js | 12 +-- tests/performance/specs/single-post.test.js | 79 +++++++++++++++++++ tests/performance/utils.js | 6 ++ .../wp-content/mu-plugins/clear-cache.php | 27 +++++++ 9 files changed, 164 insertions(+), 21 deletions(-) create mode 100644 tests/performance/specs/single-post.test.js create mode 100644 tests/performance/wp-content/mu-plugins/clear-cache.php diff --git a/.github/workflows/performance.yml b/.github/workflows/performance.yml index dba6091a5547a..dbb672a30da39 100644 --- a/.github/workflows/performance.yml +++ b/.github/workflows/performance.yml @@ -32,7 +32,7 @@ permissions: {} jobs: # Runs the performance test suite. performance: - name: Performance tests ${{ matrix.memcached && '(with memcached)' || '' }} + name: ${{ matrix.multisite && 'Multisite' || 'Single site' }} uses: WordPress/wordpress-develop/.github/workflows/reusable-performance.yml@trunk permissions: contents: read @@ -41,8 +41,10 @@ jobs: fail-fast: false matrix: memcached: [ true, false ] + multisite: [ true, false ] with: memcached: ${{ matrix.memcached }} + multisite: ${{ matrix.multisite }} secrets: CODEVITALS_PROJECT_TOKEN: ${{ secrets.CODEVITALS_PROJECT_TOKEN }} diff --git a/.github/workflows/reusable-performance.yml b/.github/workflows/reusable-performance.yml index e5c29aa0b1849..61c40b80a41db 100644 --- a/.github/workflows/reusable-performance.yml +++ b/.github/workflows/reusable-performance.yml @@ -1,7 +1,7 @@ ## # A reusable workflow that runs the performance test suite. ## -name: Performance Tests +name: Run performance Tests on: workflow_call: @@ -26,6 +26,11 @@ on: required: false type: 'boolean' default: false + multisite: + description: 'Whether to use Multisite.' + required: false + type: 'boolean' + default: false secrets: CODEVITALS_PROJECT_TOKEN: description: 'The authorization token for https://www.codevitals.run/project/wordpress.' @@ -53,6 +58,7 @@ env: LOCAL_PHP_MEMCACHED: ${{ inputs.memcached }} LOCAL_PHP: ${{ inputs.php-version }}${{ 'latest' != inputs.php-version && '-fpm' || '' }} + LOCAL_MULTISITE: ${{ inputs.multisite }} jobs: # Performs the following steps: @@ -65,9 +71,11 @@ jobs: # - Install Playwright browsers. # - Build WordPress. # - Start Docker environment. + # - Install object cache drop-in. # - Log running Docker containers. # - Docker debug information. # - Install WordPress. + # - Enable themes on Multisite. # - Install WordPress Importer plugin. # - Import mock data. # - Deactivate WordPress Importer plugin. @@ -98,7 +106,7 @@ jobs: # - Publish performance results. # - Ensure version-controlled files are not modified or deleted. performance: - name: Run tests + name: ${{ inputs.multisite && 'Multisite' || 'Single site' }} / ${{ inputs.memcached && 'Memcached' || 'Default' }} runs-on: ubuntu-latest permissions: contents: read @@ -166,6 +174,14 @@ jobs: - name: Install WordPress run: npm run env:install + - name: Enable themes on Multisite + if: ${{ inputs.multisite }} + run: | + npm run env:cli -- theme enable twentytwentyone --network --path=/var/www/${{ env.LOCAL_DIR }} + npm run env:cli -- theme enable twentytwentythree --network --path=/var/www/${{ env.LOCAL_DIR }} + npm run env:cli -- theme enable twentytwentyfour --network --path=/var/www/${{ env.LOCAL_DIR }} + npm run env:cli -- theme enable twentytwentyfive --network --path=/var/www/${{ env.LOCAL_DIR }} + - name: Install WordPress Importer plugin run: npm run env:cli -- plugin install wordpress-importer --activate --path=/var/www/${{ env.LOCAL_DIR }} @@ -290,7 +306,7 @@ jobs: uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 if: always() with: - name: performance-artifacts${{ inputs.memcached && '-memcached' || '' }}-${{ github.run_id }} + name: performance-artifacts${{ inputs.multisite && '-multisite' || '' }}${{ inputs.memcached && '-memcached' || '' }}-${{ github.run_id }} path: artifacts if-no-files-found: ignore include-hidden-files: true @@ -303,7 +319,7 @@ jobs: - name: Set the base sha # Only needed when publishing results. - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' && ! inputs.memcached }} + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' && ! inputs.memcached && ! inputs.multisite }} uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 id: base-sha with: @@ -314,7 +330,7 @@ jobs: - name: Set commit details # Only needed when publishing results. - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' && ! inputs.memcached }} + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' && ! inputs.memcached && ! inputs.multisite }} uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 id: commit-timestamp with: @@ -325,7 +341,7 @@ jobs: - name: Publish performance results # Only publish results on pushes to trunk. - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' && ! inputs.memcached }} + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' && ! inputs.memcached && ! inputs.multisite }} env: BASE_SHA: ${{ steps.base-sha.outputs.result }} COMMITTED_AT: ${{ steps.commit-timestamp.outputs.result }} diff --git a/tests/performance/compare-results.js b/tests/performance/compare-results.js index c9d51e1a11117..c47de270f0727 100644 --- a/tests/performance/compare-results.js +++ b/tests/performance/compare-results.js @@ -96,6 +96,8 @@ if ( process.env.GITHUB_SHA ) { ); } +summaryMarkdown += `
Results`; + for ( const { title, results } of afterStats ) { const prevStat = beforeStats.find( ( s ) => s.title === title ); @@ -143,10 +145,12 @@ for ( const { title, results } of afterStats ) { console.log( '(no results)' ); } - summaryMarkdown += `**${ title }**\n\n`; + summaryMarkdown += `${ title }\n\n`; summaryMarkdown += `${ formatAsMarkdownTable( rows ) }\n`; } +summaryMarkdown += `
`; + writeFileSync( join( process.env.WP_ARTIFACTS_PATH, '/performance-results.md' ), summaryMarkdown diff --git a/tests/performance/log-results.js b/tests/performance/log-results.js index 581c0d39868b5..3612780bb361f 100644 --- a/tests/performance/log-results.js +++ b/tests/performance/log-results.js @@ -18,12 +18,18 @@ const { median, parseFile, accumulateValues } = require( './utils' ); const testSuiteMap = { 'Admin › Locale: en_US': 'admin', 'Admin › Locale: de_DE': 'admin-l10n', - 'Front End › Theme: twentytwentyone, Locale: en_US': 'home-classic-theme', - 'Front End › Theme: twentytwentyone, Locale: de_DE': + 'Homepage › Theme: twentytwentyone, Locale: en_US': 'home-classic-theme', + 'Homepage › Theme: twentytwentyone, Locale: de_DE': 'home-classic-theme-l10n', - 'Front End › Theme: twentytwentythree, Locale: en_US': 'home-block-theme', - 'Front End › Theme: twentytwentythree, Locale: de_DE': + 'Homepage › Theme: twentytwentythree, Locale: en_US': 'home-block-theme', + 'Homepage › Theme: twentytwentythree, Locale: de_DE': 'home-block-theme-l10n', + 'Homepage › Theme: twentytwentyfour, Locale: en_US': 'home-twentytwentyfour', + 'Homepage › Theme: twentytwentyfour, Locale: de_DE': + 'home-twentytwentyfour-l10n', + 'Homepage › Theme: twentytwentyfive, Locale: en_US': 'home-twentytwentyfive', + 'Homepage › Theme: twentytwentyfive, Locale: de_DE': + 'home-twentytwentyfive-l10n', }; /** diff --git a/tests/performance/specs/admin.test.js b/tests/performance/specs/admin.test.js index 36bdd9c628aa1..3414fdd3dbed9 100644 --- a/tests/performance/specs/admin.test.js +++ b/tests/performance/specs/admin.test.js @@ -6,14 +6,12 @@ import { test } from '@wordpress/e2e-test-utils-playwright'; /** * Internal dependencies */ -import { camelCaseDashes } from '../utils'; +import { camelCaseDashes, locales } from '../utils'; const results = { timeToFirstByte: [], }; -const locales = [ 'en_US', 'de_DE' ]; - test.describe( 'Admin', () => { for ( const locale of locales ) { test.describe( `Locale: ${ locale }`, () => { @@ -47,9 +45,14 @@ test.describe( 'Admin', () => { const iterations = Number( process.env.TEST_RUNS ); for ( let i = 1; i <= iterations; i++ ) { test( `Measure load time metrics (${ i } of ${ iterations })`, async ( { + page, admin, metrics, } ) => { + // Clear caches using the clear-cache.php mu-plugin. Not actually loading the page. + await page.goto( '/?clear_cache' ); + + // This is the actual page to test. await admin.visitAdminPage( '/' ); const serverTiming = await metrics.getServerTiming(); diff --git a/tests/performance/specs/home.test.js b/tests/performance/specs/home.test.js index 004c8f03debd4..cd3de40518fe3 100644 --- a/tests/performance/specs/home.test.js +++ b/tests/performance/specs/home.test.js @@ -6,7 +6,7 @@ import { test } from '@wordpress/e2e-test-utils-playwright'; /** * Internal dependencies */ -import { camelCaseDashes } from '../utils'; +import { camelCaseDashes, themes, locales } from '../utils'; const results = { timeToFirstByte: [], @@ -14,11 +14,7 @@ const results = { lcpMinusTtfb: [], }; -const themes = [ 'twentytwentyone', 'twentytwentythree', 'twentytwentyfour', 'twentytwentyfive' ]; - -const locales = [ 'en_US', 'de_DE' ]; - -test.describe( 'Front End', () => { +test.describe( 'Homepage', () => { test.use( { storageState: {}, // User will be logged out. } ); @@ -54,6 +50,10 @@ test.describe( 'Front End', () => { page, metrics, } ) => { + // Clear caches using the clear-cache.php mu-plugin. Not actually loading the page. + await page.goto( '/?clear_cache' ); + + // This is the actual page to test. await page.goto( '/' ); const serverTiming = await metrics.getServerTiming(); diff --git a/tests/performance/specs/single-post.test.js b/tests/performance/specs/single-post.test.js new file mode 100644 index 0000000000000..dbdf6916ef2fd --- /dev/null +++ b/tests/performance/specs/single-post.test.js @@ -0,0 +1,79 @@ +/** + * WordPress dependencies + */ +import { test } from '@wordpress/e2e-test-utils-playwright'; + +/** + * Internal dependencies + */ +import { camelCaseDashes, themes, locales } from '../utils'; + +const results = { + timeToFirstByte: [], + largestContentfulPaint: [], + lcpMinusTtfb: [], +}; + +test.describe( 'Single Post', () => { + test.use( { + storageState: {}, // User will be logged out. + } ); + + for ( const theme of themes ) { + for ( const locale of locales ) { + test.describe( `Theme: ${ theme }, Locale: ${ locale }`, () => { + test.beforeAll( async ( { requestUtils } ) => { + await requestUtils.activateTheme( theme ); + await requestUtils.updateSiteSettings( { + language: 'en_US' === locale ? '' : locale, + } ); + } ); + + test.afterAll( async ( { requestUtils }, testInfo ) => { + await testInfo.attach( 'results', { + body: JSON.stringify( results, null, 2 ), + contentType: 'application/json', + } ); + + await requestUtils.updateSiteSettings( { + language: '', + } ); + + results.largestContentfulPaint = []; + results.timeToFirstByte = []; + results.lcpMinusTtfb = []; + } ); + + const iterations = Number( process.env.TEST_RUNS ); + for ( let i = 1; i <= iterations; i++ ) { + test( `Measure load time metrics (${ i } of ${ iterations })`, async ( { + page, + metrics, + } ) => { + // Clear caches using the clear-cache.php mu-plugin. Not actually loading the page. + await page.goto( '/?clear_cache' ); + + // This is the actual page to test. + await page.goto( '/2018/11/03/block-image/' ); + + const serverTiming = await metrics.getServerTiming(); + + for ( const [ key, value ] of Object.entries( + serverTiming + ) ) { + results[ camelCaseDashes( key ) ] ??= []; + results[ camelCaseDashes( key ) ].push( value ); + } + + const ttfb = await metrics.getTimeToFirstByte(); + const lcp = await metrics.getLargestContentfulPaint(); + + results.largestContentfulPaint.push( lcp ); + results.timeToFirstByte.push( ttfb ); + results.lcpMinusTtfb.push( lcp - ttfb ); + } ); + } + } ); + } + } +} ); diff --git a/tests/performance/utils.js b/tests/performance/utils.js index 4d023be586048..b7481dfd67605 100644 --- a/tests/performance/utils.js +++ b/tests/performance/utils.js @@ -6,6 +6,10 @@ const { join } = require( 'node:path' ); process.env.WP_ARTIFACTS_PATH ??= join( process.cwd(), 'artifacts' ); +const locales = [ 'en_US', 'de_DE' ]; + +const themes = [ 'twentytwentyone', 'twentytwentythree', 'twentytwentyfour', 'twentytwentyfive' ]; + /** * Parse test files into JSON objects. * @@ -189,4 +193,6 @@ module.exports = { standardDeviation, medianAbsoluteDeviation, accumulateValues, + themes, + locales, }; diff --git a/tests/performance/wp-content/mu-plugins/clear-cache.php b/tests/performance/wp-content/mu-plugins/clear-cache.php new file mode 100644 index 0000000000000..4d6ff4ea2c586 --- /dev/null +++ b/tests/performance/wp-content/mu-plugins/clear-cache.php @@ -0,0 +1,27 @@ + Date: Mon, 6 Jan 2025 15:21:26 +0000 Subject: [PATCH 02/31] Security: Enhance the `wp_hash()` function to support custom hashing algorithms. The default algorithm remains as md5, but this change allows any algorithm that's supported by `hash_hmac()` to be used instead. Props pushpenderindia, ayeshrajans, debarghyabanerjee, johnbillion Fixes #62005 git-svn-id: https://develop.svn.wordpress.org/trunk@59578 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/pluggable.php | 26 +++++++++++-- tests/phpunit/tests/functions/wpHash.php | 39 ++++++++++++++++++++ tests/phpunit/tests/pluggable/signatures.php | 1 + 3 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 tests/phpunit/tests/functions/wpHash.php diff --git a/src/wp-includes/pluggable.php b/src/wp-includes/pluggable.php index 3dd629fa1990c..d0b2d3602a980 100644 --- a/src/wp-includes/pluggable.php +++ b/src/wp-includes/pluggable.php @@ -2581,18 +2581,38 @@ function wp_salt( $scheme = 'auth' ) { if ( ! function_exists( 'wp_hash' ) ) : /** - * Gets hash of given string. + * Gets the hash of the given string. + * + * The default algorithm is md5 but can be changed to any algorithm supported by + * `hash_hmac()`. Use the `hash_hmac_algos()` function to check the supported + * algorithms. * * @since 2.0.3 + * @since 6.8.0 The `$algo` parameter was added. + * + * @throws InvalidArgumentException if the hashing algorithm is not supported. * * @param string $data Plain text to hash. * @param string $scheme Authentication scheme (auth, secure_auth, logged_in, nonce). + * @param string $algo Hashing algorithm to use. Default: 'md5'. * @return string Hash of $data. */ - function wp_hash( $data, $scheme = 'auth' ) { + function wp_hash( $data, $scheme = 'auth', $algo = 'md5' ) { $salt = wp_salt( $scheme ); - return hash_hmac( 'md5', $data, $salt ); + // Ensure the algorithm is supported by the hash_hmac function. + if ( ! in_array( $algo, hash_hmac_algos(), true ) ) { + throw new InvalidArgumentException( + sprintf( + /** translators: 1: Name of a cryptographic hash algorithm. 2: List of supported algorithms. */ + __( 'Unsupported hashing algorithm: %1$s. Supported algorithms are: %2$s' ), + $algo, + implode( ', ', hash_hmac_algos() ) + ) + ); + } + + return hash_hmac( $algo, $data, $salt ); } endif; diff --git a/tests/phpunit/tests/functions/wpHash.php b/tests/phpunit/tests/functions/wpHash.php new file mode 100644 index 0000000000000..63744b188dace --- /dev/null +++ b/tests/phpunit/tests/functions/wpHash.php @@ -0,0 +1,39 @@ +assertSame( $expected_length, strlen( $hash ) ); + } + + public function data_wp_hash_uses_specified_algorithm() { + return array( + array( 'md5', 32 ), + array( 'sha1', 40 ), + array( 'sha256', 64 ), + ); + } + + /** + * @ticket 62005 + */ + public function test_wp_hash_throws_exception_on_invalid_algorithm() { + $this->expectException( 'InvalidArgumentException' ); + + wp_hash( 'data', 'auth', 'invalid' ); + } +} diff --git a/tests/phpunit/tests/pluggable/signatures.php b/tests/phpunit/tests/pluggable/signatures.php index 81fd079621916..8ac1dfb6966b6 100644 --- a/tests/phpunit/tests/pluggable/signatures.php +++ b/tests/phpunit/tests/pluggable/signatures.php @@ -209,6 +209,7 @@ public function get_pluggable_function_signatures() { 'wp_hash' => array( 'data', 'scheme' => 'auth', + 'algo' => 'md5', ), 'wp_hash_password' => array( 'password' ), 'wp_check_password' => array( From 375af8c6c6fe222fc4dacad6eed16f31a68061d7 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Mon, 6 Jan 2025 15:58:50 +0000 Subject: [PATCH 03/31] Tests: Improve the test for the copyright year in bundled themes' `readme.txt`. This aims to catch entries like `(C) 2024 WordPress.org` in addition to `Copyright 2024 WordPress.org`. Includes converting the test to use a data provider, so that messages could be displayed for each individual theme. Follow-up to [46719], [59569]. See #62280. git-svn-id: https://develop.svn.wordpress.org/trunk@59579 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/theme.php | 40 ++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/tests/phpunit/tests/theme.php b/tests/phpunit/tests/theme.php index 248aaa833a02f..c18c4d434f44b 100644 --- a/tests/phpunit/tests/theme.php +++ b/tests/phpunit/tests/theme.php @@ -302,36 +302,38 @@ public function test_default_themes_have_textdomain() { /** * @ticket 48566 + * + * @dataProvider data_year_in_readme */ - public function test_year_in_readme() { + public function test_year_in_readme( $theme ) { // This test is designed to only run on trunk. $this->skipOnAutomatedBranches(); - foreach ( $this->default_themes as $theme ) { - $wp_theme = wp_get_theme( $theme ); - - $path_to_readme_txt = $wp_theme->get_theme_root() . '/' . $wp_theme->get_stylesheet() . '/readme.txt'; - $this->assertFileExists( $path_to_readme_txt ); + $wp_theme = wp_get_theme( $theme ); - $readme = file_get_contents( $path_to_readme_txt ); - $this_year = gmdate( 'Y' ); + $path_to_readme_txt = $wp_theme->get_theme_root() . '/' . $wp_theme->get_stylesheet() . '/readme.txt'; + $this->assertFileExists( $path_to_readme_txt ); - preg_match( '#Copyright (\d+) WordPress.org#', $readme, $matches ); - if ( $matches ) { - $readme_year = trim( $matches[1] ); + $readme = file_get_contents( $path_to_readme_txt ); + $this_year = gmdate( 'Y' ); - $this->assertSame( $this_year, $readme_year, "Bundled themes readme.txt's year needs to be updated to $this_year." ); - } - - preg_match( '#Copyright 20\d\d-(\d+) WordPress.org#', $readme, $matches ); - if ( $matches ) { - $readme_year = trim( $matches[1] ); + preg_match( '#(Copyright|\(C\)) (20\d\d-)?(\d+) WordPress.org#i', $readme, $matches ); + if ( $matches ) { + $readme_year = trim( $matches[3] ); - $this->assertSame( $this_year, $readme_year, "Bundled themes readme.txt's year needs to be updated to $this_year." ); - } + $this->assertSame( $this_year, $readme_year, "$theme readme.txt's year needs to be updated to $this_year." ); } } + public function data_year_in_readme() { + return array_map( + static function ( $theme ) { + return array( $theme ); + }, + $this->default_themes + ); + } + /** * @ticket 20897 * @expectedDeprecated get_theme_data From d49258b6f77d2dbeba9846a71bc474c2ec9a7690 Mon Sep 17 00:00:00 2001 From: Kelly Choyce-Dwan Date: Mon, 6 Jan 2025 16:18:25 +0000 Subject: [PATCH 04/31] Help/About: Allow "See everything new" button to wrap On some screen sizes and languages, the "See everything new" button expands out of the content area. This change allows the button to wrap at all screen sizes, and updates the style of this button for wrapped text. Props franciscabusas22, sabernhardt, yogeshbhutka, sainathpoojary, im3dabasia1, audrasjb. Fixes #62380. git-svn-id: https://develop.svn.wordpress.org/trunk@59580 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/about.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/wp-admin/css/about.css b/src/wp-admin/css/about.css index 79f0254ad33b8..70af0337307ab 100644 --- a/src/wp-admin/css/about.css +++ b/src/wp-admin/css/about.css @@ -454,7 +454,12 @@ } .about__section a.button.button-hero { + padding-top: 1.1875rem; + padding-bottom: 1.1875rem; font-size: 1.5rem; + line-height: 1.4; + white-space: normal; + text-wrap: pretty; } .about__container ul { From 4a9a928dbcd1c91d3633c8de51614dd90d8ea0ac Mon Sep 17 00:00:00 2001 From: Felix Arntz Date: Mon, 6 Jan 2025 21:19:51 +0000 Subject: [PATCH 05/31] Build/Test Tools: Fix incorrect commit time being reported to WordPress Code Vitals Dashboard. 2nd attempt of [59570]. Props mukesh27, ayeshrajans, swissspidy, desrosj. Fixes #62766. git-svn-id: https://develop.svn.wordpress.org/trunk@59582 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/reusable-performance.yml | 10 ++-------- tests/performance/log-results.js | 4 ++-- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/.github/workflows/reusable-performance.yml b/.github/workflows/reusable-performance.yml index 61c40b80a41db..f75cb6b3e4969 100644 --- a/.github/workflows/reusable-performance.yml +++ b/.github/workflows/reusable-performance.yml @@ -331,20 +331,14 @@ jobs: - name: Set commit details # Only needed when publishing results. if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' && ! inputs.memcached && ! inputs.multisite }} - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 - id: commit-timestamp - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - const commit_details = await github.rest.git.getCommit({ owner: context.repo.owner, repo: context.repo.repo, commit_sha: context.sha }); - return parseInt((new Date( commit_details.data.author.date ).getTime() / 1000).toFixed(0)) + # Write to an environment variable to have the output available in later steps of the job. + run: echo "COMMITTED_AT=$(git show -s $GITHUB_SHA --format='%cI')" >> $GITHUB_ENV - name: Publish performance results # Only publish results on pushes to trunk. if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' && ! inputs.memcached && ! inputs.multisite }} env: BASE_SHA: ${{ steps.base-sha.outputs.result }} - COMMITTED_AT: ${{ steps.commit-timestamp.outputs.result }} CODEVITALS_PROJECT_TOKEN: ${{ secrets.CODEVITALS_PROJECT_TOKEN }} HOST_NAME: "www.codevitals.run" run: | diff --git a/tests/performance/log-results.js b/tests/performance/log-results.js index 3612780bb361f..f8214b68d4eb3 100644 --- a/tests/performance/log-results.js +++ b/tests/performance/log-results.js @@ -11,7 +11,7 @@ * External dependencies. */ const https = require( 'https' ); -const [ token, branch, hash, baseHash, timestamp, host ] = +const [ token, branch, hash, baseHash, date, host ] = process.argv.slice( 2 ); const { median, parseFile, accumulateValues } = require( './utils' ); @@ -87,7 +87,7 @@ const data = new TextEncoder().encode( branch, hash, baseHash, - timestamp: parseInt( timestamp, 10 ), + timestamp: date, metrics: metrics, baseMetrics: baseMetrics, } ) From d0e1e903fbfbd232f3032e74f6846acb0865d93c Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Tue, 7 Jan 2025 15:40:19 +0000 Subject: [PATCH 06/31] Tests: Fix `explode()` error for old DB versions on PHP 8.1+. On MySQL/MariaDB 5.5, the default value for `sql_mode` was a blank string. By itself this is not a problem. However, `$wpdb->get_var()` returns `null` when a variable has an empty value. One test method currently passes the result of `$wpdb->get_var( 'SELECT @@SESSION.sql_mode;' )` to `explode()` in order to reset the database to the pre-test method state. This causes an error when running PHP 8.1+, which deprecated the ability to pass `null` as a parameter of `explode()`. This edge case was undiscovered because these versions are not currently included in the automated testing matrix. See #62280. git-svn-id: https://develop.svn.wordpress.org/trunk@59583 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/db.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/phpunit/tests/db.php b/tests/phpunit/tests/db.php index 3e06afcc1bf2c..57f5db65a2f5a 100644 --- a/tests/phpunit/tests/db.php +++ b/tests/phpunit/tests/db.php @@ -296,7 +296,7 @@ public function test_set_sql_mode() { $check_new_modes = $wpdb->get_var( 'SELECT @@SESSION.sql_mode;' ); $this->assertSameSets( $new_modes, explode( ',', $check_new_modes ) ); - $wpdb->set_sql_mode( explode( ',', $current_modes ) ); + $wpdb->set_sql_mode( empty( $current_modes ) ? array() : explode( ',', $current_modes ) ); } /** From 0134aa371e45a9dbe67aa1e8cc8908eb6fcd92e2 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Tue, 7 Jan 2025 15:46:25 +0000 Subject: [PATCH 07/31] Coding Standards: Use strict comparison in `wp_check_for_changed_slugs()`. Follow-up to [4556], [4637], [34685]. Props aristath, poena, afercia, SergeyBiryukov. See #62279. git-svn-id: https://develop.svn.wordpress.org/trunk@59584 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/post.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php index 4d85ef2fb25d7..6d225470d2b4e 100644 --- a/src/wp-includes/post.php +++ b/src/wp-includes/post.php @@ -7207,12 +7207,14 @@ function wp_mime_type_icon( $mime = 0, $preferred_ext = '.png' ) { */ function wp_check_for_changed_slugs( $post_id, $post, $post_before ) { // Don't bother if it hasn't changed. - if ( $post->post_name == $post_before->post_name ) { + if ( $post->post_name === $post_before->post_name ) { return; } // We're only concerned with published, non-hierarchical objects. - if ( ! ( 'publish' === $post->post_status || ( 'attachment' === get_post_type( $post ) && 'inherit' === $post->post_status ) ) || is_post_type_hierarchical( $post->post_type ) ) { + if ( ! ( 'publish' === $post->post_status || ( 'attachment' === $post->post_type && 'inherit' === $post->post_status ) ) + || is_post_type_hierarchical( $post->post_type ) + ) { return; } From 615b03f51ad6e090af3d6e4fb6dc6cf69b4cf3ce Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Tue, 7 Jan 2025 15:51:30 +0000 Subject: [PATCH 08/31] Build/Test Tools: Test against MySQL 9.1. This is the latest innovation release from MySQL. Props johnbillion, jorbin. See #62221. git-svn-id: https://develop.svn.wordpress.org/trunk@59585 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/install-testing.yml | 6 ++++-- .github/workflows/local-docker-environment.yml | 6 ++++-- .github/workflows/phpunit-tests.yml | 6 +++--- .version-support-mysql.json | 1 + 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/.github/workflows/install-testing.yml b/.github/workflows/install-testing.yml index f40f044586c88..f347958e8b4ae 100644 --- a/.github/workflows/install-testing.yml +++ b/.github/workflows/install-testing.yml @@ -90,11 +90,13 @@ jobs: db-version: '8.4' - php: '7.3' db-version: '8.4' + # Only test the latest innovation release. + - db-version: '9.0' # MySQL 9.0+ will not work on PHP 7.2 & 7.3. See https://core.trac.wordpress.org/ticket/61218. - php: '7.2' - db-version: '9.0' + db-version: '9.1' - php: '7.3' - db-version: '9.0' + db-version: '9.1' services: database: diff --git a/.github/workflows/local-docker-environment.yml b/.github/workflows/local-docker-environment.yml index 17d078198c009..09b212e90ead5 100644 --- a/.github/workflows/local-docker-environment.yml +++ b/.github/workflows/local-docker-environment.yml @@ -90,11 +90,13 @@ jobs: exclude: # MySQL containers <= 5.5 do not exist or fail to start properly. - db-version: '5.5' + # Only test the latest innovation release. + - db-version: '9.0' # MySQL 9.0+ will not work on PHP 7.2 & 7.3. See https://core.trac.wordpress.org/ticket/61218. - php: '7.2' - db-version: '9.0' + db-version: '9.1' - php: '7.3' - db-version: '9.0' + db-version: '9.1' with: os: ${{ matrix.os }} diff --git a/.github/workflows/phpunit-tests.yml b/.github/workflows/phpunit-tests.yml index 3ea45fcdc331e..89f4c0ab64ff8 100644 --- a/.github/workflows/phpunit-tests.yml +++ b/.github/workflows/phpunit-tests.yml @@ -47,7 +47,7 @@ jobs: os: [ ubuntu-latest ] php: [ '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4' ] db-type: [ 'mysql' ] - db-version: [ '5.7', '8.0', '8.4', '9.0' ] + db-version: [ '5.7', '8.0', '8.4', '9.1' ] tests-domain: [ 'example.org' ] multisite: [ false, true ] memcached: [ false ] @@ -95,9 +95,9 @@ jobs: exclude: # MySQL 9.0+ will not work on PHP 7.2 & 7.3. See https://core.trac.wordpress.org/ticket/61218. - php: '7.2' - db-version: '9.0' + db-version: '9.1' - php: '7.3' - db-version: '9.0' + db-version: '9.1' with: os: ${{ matrix.os }} diff --git a/.version-support-mysql.json b/.version-support-mysql.json index f6cffac449cae..8616ffb294e43 100644 --- a/.version-support-mysql.json +++ b/.version-support-mysql.json @@ -1,5 +1,6 @@ { "6-8": [ + "9.1", "9.0", "8.4", "8.0", From 8c45570f5acaa9c46c77fb0f9749c2b681bafa7a Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Tue, 7 Jan 2025 15:57:22 +0000 Subject: [PATCH 09/31] Build/Test Tools: Test MariaDB innovation releases. MariaDB also follows the innovation release model. This adds testing for these releases to the test matrix and moves innovation versions to a new job in order to more clearly differentiate from LTS ones. The current innovation release for MariaDB is `11.6`. Props johnbillion, jorbin. See #62221. git-svn-id: https://develop.svn.wordpress.org/trunk@59586 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/phpunit-tests.yml | 61 ++++++++++++++++--- .../workflows/reusable-phpunit-tests-v3.yml | 7 ++- 2 files changed, 57 insertions(+), 11 deletions(-) diff --git a/.github/workflows/phpunit-tests.yml b/.github/workflows/phpunit-tests.yml index 89f4c0ab64ff8..81d9520b7021b 100644 --- a/.github/workflows/phpunit-tests.yml +++ b/.github/workflows/phpunit-tests.yml @@ -47,7 +47,7 @@ jobs: os: [ ubuntu-latest ] php: [ '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4' ] db-type: [ 'mysql' ] - db-version: [ '5.7', '8.0', '8.4', '9.1' ] + db-version: [ '5.7', '8.0', '8.4' ] tests-domain: [ 'example.org' ] multisite: [ false, true ] memcached: [ false ] @@ -91,14 +91,6 @@ jobs: multisite: false memcached: false report: true - - exclude: - # MySQL 9.0+ will not work on PHP 7.2 & 7.3. See https://core.trac.wordpress.org/ticket/61218. - - php: '7.2' - db-version: '9.1' - - php: '7.3' - db-version: '9.1' - with: os: ${{ matrix.os }} php: ${{ matrix.php }} @@ -154,6 +146,55 @@ jobs: phpunit-config: ${{ matrix.multisite && 'tests/phpunit/multisite.xml' || 'phpunit.xml.dist' }} report: ${{ matrix.report || false }} + # + # Creates PHPUnit test jobs to test MariaDB and MySQL innovation releases. + # + # Though innovation releases are deemed "production grade" and never receive LTS status, they include new features + # and updates that will be included in the next LTS version. + # + # Because upstream support for innovation releases gets dropped when a new one is released, only the most recent + # innovation version is tested. + # + test-innovation-releases: + name: PHP ${{ matrix.php }} + uses: WordPress/wordpress-develop/.github/workflows/reusable-phpunit-tests-v3.yml@trunk + permissions: + contents: read + secrets: inherit + if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} + strategy: + fail-fast: false + matrix: + os: [ ubuntu-latest ] + php: [ '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4' ] + db-type: [ 'mysql', 'mariadb' ] + db-version: [ '9.1', '11.6' ] + multisite: [ false, true ] + memcached: [ false ] + db-innovation: [ true ] + + exclude: + # MySQL 9.0+ will not work on PHP <= 7.3 because mysql_native_password was removed. See https://core.trac.wordpress.org/ticket/61218. + - php: '7.2' + db-version: '9.1' + - php: '7.3' + db-version: '9.1' + # Exclude version combinations that don't exist. + - db-type: 'mariadb' + db-version: '9.1' + - db-type: 'mysql' + db-version: '11.6' + with: + os: ${{ matrix.os }} + php: ${{ matrix.php }} + db-type: ${{ matrix.db-type }} + db-version: ${{ matrix.db-version }} + db-innovation: ${{ matrix.db-innovation }} + multisite: ${{ matrix.multisite }} + memcached: ${{ matrix.memcached }} + phpunit-config: ${{ matrix.multisite && 'tests/phpunit/multisite.xml' || 'phpunit.xml.dist' }} + report: ${{ matrix.report || false }} + # # Runs specific individual test groups. # @@ -183,7 +224,7 @@ jobs: permissions: actions: read contents: read - needs: [ test-with-mysql, test-with-mariadb, specific-test-groups ] + needs: [ test-with-mysql, test-with-mariadb, test-innovation-releases, specific-test-groups ] if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name != 'pull_request' && always() }} with: calling_status: ${{ contains( needs.*.result, 'cancelled' ) && 'cancelled' || contains( needs.*.result, 'failure' ) && 'failure' || 'success' }} diff --git a/.github/workflows/reusable-phpunit-tests-v3.yml b/.github/workflows/reusable-phpunit-tests-v3.yml index cac3015af383a..3d26efa7026b2 100644 --- a/.github/workflows/reusable-phpunit-tests-v3.yml +++ b/.github/workflows/reusable-phpunit-tests-v3.yml @@ -27,6 +27,11 @@ on: required: false type: 'string' default: '8.4' + db-innovation: + description: 'Whether a database software innovation release is being tested.' + required: false + type: 'boolean' + default: false multisite: description: 'Whether to run tests as multisite' required: false @@ -105,7 +110,7 @@ jobs: # - Checks out the WordPress Test reporter repository. # - Submit the test results to the WordPress.org host test results. phpunit-tests: - name: ${{ inputs.phpunit-test-groups && format( '{0} / ', inputs.phpunit-test-groups ) || '' }}PHP ${{ inputs.php }} ${{ ! inputs.phpunit-test-groups && ! inputs.coverage-report && '/ ' || 'with ' }}${{ 'mariadb' == inputs.db-type && 'MariaDB' || 'MySQL' }} ${{ inputs.db-version }}${{ inputs.multisite && ' multisite' || '' }}${{ inputs.memcached && ' with memcached' || '' }}${{ inputs.report && ' (test reporting enabled)' || '' }} ${{ 'example.org' != inputs.tests-domain && inputs.tests-domain || '' }} + name: ${{ inputs.phpunit-test-groups && format( '{0} / ', inputs.phpunit-test-groups ) || '' }}PHP ${{ inputs.php }} ${{ ! inputs.phpunit-test-groups && ! inputs.coverage-report && '/ ' || 'with ' }}${{ 'mariadb' == inputs.db-type && 'MariaDB' || 'MySQL' }} ${{ inputs.db-version }}${{ inputs.multisite && ' multisite' || '' }}${{ inputs.db-innovation && ' (innovation release)' || '' }}${{ inputs.memcached && ' with memcached' || '' }}${{ inputs.report && ' (test reporting enabled)' || '' }} ${{ 'example.org' != inputs.tests-domain && inputs.tests-domain || '' }} runs-on: ${{ inputs.os }} timeout-minutes: ${{ inputs.coverage-report && 120 || 20 }} From 4cd96f7f5cad2f1099f6470e9b5677b0c7943b88 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Tue, 7 Jan 2025 16:13:20 +0000 Subject: [PATCH 10/31] Build/Test Tools: Expand and improve MariaDB test matrix. The latest LTS version of MariaDB is 11.4, which is now included in the test matrix. This changeset also expands the test matrix to include all LTS versions of MariaDB with > 1% of usage on WordPress sites in the wild as reported by the stats page on WordPress.org. Though a few of these are unsupported upstream, they are still supported in WordPress itself. MariaDB 5.5 is also included in the new matrix. Because it was intended as a drop-in replacement to MySQL at the time, this also brings some MySQL 5.5 testing into the matrix. This has not been regularly tested against since specific database versions were included due to the lack of a working Docker container. Props johnbillion, jorbin. See #62221. git-svn-id: https://develop.svn.wordpress.org/trunk@59587 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/phpunit-tests.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/phpunit-tests.yml b/.github/workflows/phpunit-tests.yml index 81d9520b7021b..3fe069b709fea 100644 --- a/.github/workflows/phpunit-tests.yml +++ b/.github/workflows/phpunit-tests.yml @@ -118,7 +118,7 @@ jobs: os: [ ubuntu-latest ] php: [ '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4' ] db-type: [ 'mariadb' ] - db-version: [ '10.4', '10.6', '10.11', '11.2' ] + db-version: [ '5.5', '10.3', '10.4', '10.5', '10.6', '10.11', '11.4' ] multisite: [ false, true ] memcached: [ false ] @@ -127,13 +127,13 @@ jobs: - os: ubuntu-latest php: '8.3' db-type: 'mariadb' - db-version: '11.2' + db-version: '11.4' multisite: false memcached: true - os: ubuntu-latest php: '8.3' db-type: 'mariadb' - db-version: '11.2' + db-version: '11.4' multisite: true memcached: true with: From 2bab211bc76f7070dc986ee4ebce28ee6a7fa05b Mon Sep 17 00:00:00 2001 From: Adam Silverstein Date: Tue, 7 Jan 2025 21:04:35 +0000 Subject: [PATCH 11/31] Media: enable high bit depth resized image output with Imagick. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix an issue where uploaded HDR images were resized and output as SDR and thus significantly degraded from the original. When using Imagick, output images will now match the bit depth of the uploaded image. Add a new filter ‘image_max_bit_depth’ which developers can use to control the maximum bit depth for resized images. Props adamsilverstein, kirasong, gregbenz, apermo. Fixes #62285. git-svn-id: https://develop.svn.wordpress.org/trunk@59588 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-image-editor-imagick.php | 20 ++++-- tests/phpunit/tests/image/editorImagick.php | 67 +++++++++++++++++++ 2 files changed, 83 insertions(+), 4 deletions(-) diff --git a/src/wp-includes/class-wp-image-editor-imagick.php b/src/wp-includes/class-wp-image-editor-imagick.php index dd8b9ad5191ee..9abb631847544 100644 --- a/src/wp-includes/class-wp-image-editor-imagick.php +++ b/src/wp-includes/class-wp-image-editor-imagick.php @@ -503,11 +503,23 @@ protected function thumbnail_image( $dst_w, $dst_h, $filter_name = 'FILTER_TRIAN } } - // Limit the bit depth of resized images to 8 bits per channel. + // Limit the bit depth of resized images. if ( is_callable( array( $this->image, 'getImageDepth' ) ) && is_callable( array( $this->image, 'setImageDepth' ) ) ) { - if ( 8 < $this->image->getImageDepth() ) { - $this->image->setImageDepth( 8 ); - } + /** + * Filters the maximum bit depth of resized images. + * + * This filter only applies when resizing using the Imagick editor since GD + * does not support getting or setting bit depth. + * + * Use this to adjust the maximum bit depth of resized images. + * + * @since 6.8.0 + * + * @param int $max_depth The maximum bit depth. Default is the input depth. + * @param int $image_depth The bit depth of the original image. + */ + $max_depth = apply_filters( 'image_max_bit_depth', $this->image->getImageDepth(), $this->image->getImageDepth() ); + $this->image->setImageDepth( $max_depth ); } } catch ( Exception $e ) { return new WP_Error( 'image_resize_error', $e->getMessage() ); diff --git a/tests/phpunit/tests/image/editorImagick.php b/tests/phpunit/tests/image/editorImagick.php index 30747f69f1b62..cd424a8856cc5 100644 --- a/tests/phpunit/tests/image/editorImagick.php +++ b/tests/phpunit/tests/image/editorImagick.php @@ -691,4 +691,71 @@ static function ( $value ) { $imagick->destroy(); $this->assertSame( $expected, $output, 'The image color of the generated thumb does not match expected opaque background.' ); // Allow for floating point equivalence. } + + /** + * Test filter `image_max_bit_depth` correctly sets the maximum bit depth of resized images. + * + * @ticket 62285 + */ + public function test_image_max_bit_depth() { + $file = DIR_TESTDATA . '/images/colors_hdr_p3.avif'; + $imagick_image_editor = new WP_Image_Editor_Imagick( $file ); + + // Skip if AVIF not supported. + if ( ! $imagick_image_editor->supports_mime_type( 'image/avif' ) ) { + $this->markTestSkipped( 'The image editor does not support the AVIF mime type.' ); + } + + // Skip if depth methods not available. + if ( ! method_exists( 'Imagick', 'getImageDepth' ) || ! method_exists( 'Imagick', 'setImageDepth' ) ) { + $this->markTestSkipped( 'The image editor does not support get or setImageDepth.' ); + } + + // Verify source image has 10-bit depth. + $imagick = new Imagick( $file ); + $this->assertSame( 10, $imagick->getImageDepth() ); + + // Test ability to save 10-bit image. + $imagick->setImageDepth( 10 ); + $test_file = tempnam( get_temp_dir(), '' ) . 'test10.avif'; + $imagick->writeImage( $test_file ); + $im = new Imagick( $test_file ); + + if ( $im->getImageDepth() !== 10 ) { + $this->markTestSkipped( 'Imagick is unable to save a 10 bit image.' ); + } + $im->destroy(); + unlink( $test_file ); + + // Test default behavior preserves 10-bit depth. + $imagick_image_editor->load(); + $imagick_image_editor->resize( 100, 50 ); + $test_file = tempnam( get_temp_dir(), '' ) . 'test1.avif'; + $imagick_image_editor->save( $test_file ); + $im = new Imagick( $test_file ); + $this->assertSame( 10, $im->getImageDepth() ); + unlink( $test_file ); + $im->destroy(); + + // Test filter can set 8-bit depth + add_filter( 'image_max_bit_depth', array( $this, '__return_eight' ) ); + $imagick_image_editor = new WP_Image_Editor_Imagick( $file ); + $imagick_image_editor->load(); + $imagick_image_editor->resize( 100, 50 ); + $test_file = tempnam( get_temp_dir(), '' ) . 'test2.avif'; + $imagick_image_editor->save( $test_file ); + $im = new Imagick( $test_file ); + $this->assertSame( 8, $im->getImageDepth() ); + unlink( $test_file ); + $im->destroy(); + } + + /** + * Helper function to return 8 for the `image_max_bit_depth` filter. + * + * @return int + */ + public function __return_eight() { + return 8; + } } From 082f6e6f3bb0716969414d47b9fe71251b984ccb Mon Sep 17 00:00:00 2001 From: Adam Silverstein Date: Tue, 7 Jan 2025 22:33:37 +0000 Subject: [PATCH 12/31] Media: improve Imagick handling of colors and alpha channel for PNG image uploads. Fix an issue where index color (8 bit) PNG uploads were output as true color (24 bit) PNGs, significantly increasing their size. When using Imagick, PNG output images will now match the colors of the uploaded image. Also, correct handling of PNG alpha channel information so it is preserved in output images. Props adamsilverstein, pbearne, nosilver4u, peterdavehello, joemcgill, azaozz, codex-m, kirasong, justlevine, jokanane, sallyruchman, wpfed, tgsrvrs, antpb, tb1909. Fixes #36477. git-svn-id: https://develop.svn.wordpress.org/trunk@59589 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-image-editor-imagick.php | 33 ++++++++++- .../images/png-tests/Palette_icon-or8.png | Bin 0 -> 24841 bytes .../images/png-tests/cloudflare-status.png | Bin 0 -> 24940 bytes .../data/images/png-tests/deskcat8.png | Bin 0 -> 105705 bytes .../png-tests/rabbit-time-paletted-or8.png | Bin 0 -> 200581 bytes tests/phpunit/data/images/png-tests/test8.png | Bin 0 -> 45231 bytes tests/phpunit/tests/image/editorImagick.php | 53 ++++++++++++++++++ 7 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 tests/phpunit/data/images/png-tests/Palette_icon-or8.png create mode 100644 tests/phpunit/data/images/png-tests/cloudflare-status.png create mode 100644 tests/phpunit/data/images/png-tests/deskcat8.png create mode 100644 tests/phpunit/data/images/png-tests/rabbit-time-paletted-or8.png create mode 100644 tests/phpunit/data/images/png-tests/test8.png diff --git a/src/wp-includes/class-wp-image-editor-imagick.php b/src/wp-includes/class-wp-image-editor-imagick.php index 9abb631847544..edce8d2b7dcd9 100644 --- a/src/wp-includes/class-wp-image-editor-imagick.php +++ b/src/wp-includes/class-wp-image-editor-imagick.php @@ -484,7 +484,38 @@ protected function thumbnail_image( $dst_w, $dst_h, $filter_name = 'FILTER_TRIAN $this->image->setOption( 'png:compression-filter', '5' ); $this->image->setOption( 'png:compression-level', '9' ); $this->image->setOption( 'png:compression-strategy', '1' ); - $this->image->setOption( 'png:exclude-chunk', 'all' ); + // Check to see if a PNG is indexed, and find the pixel depth. + if ( is_callable( array( $this->image, 'getImageDepth' ) ) ) { + $indexed_pixel_depth = $this->image->getImageDepth(); + + // Indexed PNG files get some additional handling. + if ( 0 < $indexed_pixel_depth && 8 >= $indexed_pixel_depth ) { + // Check for an alpha channel. + if ( + is_callable( array( $this->image, 'getImageAlphaChannel' ) ) + && $this->image->getImageAlphaChannel() + ) { + $this->image->setOption( 'png:include-chunk', 'tRNS' ); + } else { + $this->image->setOption( 'png:exclude-chunk', 'all' ); + } + + // Reduce colors in the images to maximum needed, using the global colorspace. + $max_colors = pow( 2, $indexed_pixel_depth ); + if ( is_callable( array( $this->image, 'getImageColors' ) ) ) { + $current_colors = $this->image->getImageColors(); + $max_colors = min( $max_colors, $current_colors ); + } + $this->image->quantizeImage( $max_colors, $this->image->getColorspace(), 0, false, false ); + + /** + * If the colorspace is 'gray', use the png8 format to ensure it stays indexed. + */ + if ( Imagick::COLORSPACE_GRAY === $this->image->getImageColorspace() ) { + $this->image->setOption( 'png:format', 'png8' ); + } + } + } } /* diff --git a/tests/phpunit/data/images/png-tests/Palette_icon-or8.png b/tests/phpunit/data/images/png-tests/Palette_icon-or8.png new file mode 100644 index 0000000000000000000000000000000000000000..ead89766a3246f5185c07757b2e23f541ee72897 GIT binary patch literal 24841 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 literal 0 HcmV?d00001 diff --git a/tests/phpunit/data/images/png-tests/cloudflare-status.png b/tests/phpunit/data/images/png-tests/cloudflare-status.png new file mode 100644 index 0000000000000000000000000000000000000000..8517ff0b59fb97559a3a5aefb13fc6a53b19d1d3 GIT binary patch literal 24940 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 literal 0 HcmV?d00001 diff --git a/tests/phpunit/data/images/png-tests/deskcat8.png b/tests/phpunit/data/images/png-tests/deskcat8.png new file mode 100644 index 0000000000000000000000000000000000000000..89e62cd9e2b2c3d6a0113ea9af77c4b2724811a6 GIT binary patch literal 105705 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 literal 0 HcmV?d00001 diff --git a/tests/phpunit/data/images/png-tests/rabbit-time-paletted-or8.png b/tests/phpunit/data/images/png-tests/rabbit-time-paletted-or8.png new file mode 100644 index 0000000000000000000000000000000000000000..cff28ed3b2b3aaf81679599aa02160cdedd01608 GIT binary patch literal 200581 zcmd3O_dDC~8?Vo|tuCrjqjrnZnys0d)f!dA-a&1GNbFTwT0)GXD1zEMYR9Gt+FCVY z#z+*kVpIE|=ll;Rzqpd?df(5z$LoIH!nHsu)Hj%KP*6}%tG-m!p`f^qqoBAlaqZIC zF9K21;%9#@+bd`&P*9Y|+&r?pa`yc{cO8}I6zE>oMGA^b6k6(fN-8jQK>)=c($MDe zu9svn@Fto^!4goAmssUrbX*s?v`2HB62E zbd_T=m1J-fxz^cSn4ov(cdB|_<(D{JW($eixFFG?Xoa_C(z}JK&M%maC0U{&D(}_q z%w%W{bX0h03i?W4w|MwJBhE`vfwqTV&2?D*w^wPH5#!}6an)Ji^6wF>#dEH&P@!N~ zLwnUn-k=9nFrLGyb}O-4C)*3_HBl=w-N&P`FrCLv`ckL8?oJQ>w^eAw4!FFth(8$$ zo^1T`9xUSX`bA!(%kfl3s@=oB*cX`8z{0GL`LCHGUtYC&@LwUq+RN%yMfy8cy8lq# zx>^Fa8iVEB`6-fPgFb80M;fyy1elq~vadEfto*9^6{F_%_&;1rxtq)_FZt_W_DjT` zT49!JO_2Mp_y5!9yYh^KvOC3#+~$7NU>ge6>hTr4%Y63%%dKyLGB%HIo2v?cL&uII z#b+uVMkD0>G?*S4M-|NWae#qC60Q%znJm?jRml*Y3wtGqb z1}n)jrJ3QAX@>rl`(OK7)o)Dd;|_QXZp*r;850+^=}X^FCX#VKbRN+L|9hJ5ZP6;{b8DW}*fBb~H# z6@jUGR7ytRzh9L7k)PhaR(27g2o|}V>SqCUFztlWEtlG@po20s1u*U3C3x;M+6ouF zWP>1b3oUN5KGoB54vsK-+Ni}f(3rw{i6ZeSjTz&AA5|$vV(dQ0`!#sHdJatrmZj({ zO+NGX_wVehQo_8%=pKN)L&WIJ!J@?e4i8V$(>jAVC+*YI)3LZGisZd#=Yip&1Jb2< zHa}`dL2-{lRZ&6DXMAPy36f=zt(EvfS3TkjPxEZ+<@YkL6~F@5oHI?s-K}kkwQh`c zD?ID;aDxXs(K22&W;70eR0AAxNpSnI)ao2-RrgK6u;8OEwDsfKN6nAPu?ACbujeP! z05@fNDth>R@JD}JwxZ?sFP|~+|Hc#Gn-;ZOXMy~X6x)eqhUFI{4*L@?Q8=$n@sTPb8$Lw%AAP-xW1G?(^u}|N0=3R4n)>Ua1J}3RI*a9f zo;+Prd$c#}!472O$8TkKBo^HF}X*l)nzpB)e%bZs3} zsF&hV8M^#nhkNkWxau39r+pWW;XDYNw0wfNIq1_|@oNMcH& zO2rmjkTk=YsV7n!TG;IGZu60v#{w6dDpl9?4yEj}mbKD|S))%9@;CgCx`X2?9 z0lplnmUrC$r!g(k4!NIIa|~ZHcVp$Cq3rBT8ncg#hcEy1NZCH4w)gAg?3C}u^$^Uw zho79Rt7mAowjA=%vTJ%$s?p-cz|=iCId;~)S@Sq`(~(GsHUpfurS_D9LUMhk9fpT# z<{9Ivdn+UOnW5Sfy&e;lr4|c%mC#M~XR$@_6=yZ%VnirLu%*w?W#@Xud@8HfnXUNW^r3%eVo(I%=?~&J?F(x(fO5mW!cLf(*vuOaepKYg3{z#u4F@&}FU`Wjvi9|R> z+ieMQk=u~47Cjn+OU*nx16G{Uz}zl)OOchLHIEYOiIx4qB@}OOz$#1v)*IufNn}-%dIq?q z)>@<-<|GT_BO&j@br#nWTLleJ%$MZI&K|GIw5x`^=8D=?pZhYP^`yyp&Eu2)w0n(- zFh@T@(v(FEW^CozSr&8tGxo#pHe*$W`c}p_ll1&uMmPgpn-C)j-uTMWd3;hlAVvJ< zm6D#j*f|d?9X=d;e*VyB*tDGVxP|=f5nr9g*ER%aP33IcZ-S&=8>~35(!tI!wIOrf zhnNT86D>kpTiXcdS$@n8^*6G}$m3a1tt`Me%0(bIRlyAK1r}w(;2N`W`_7;fZ=s`H zcxpf+F#^%RdoGUyW`TneuJCJ7EVVd-Wr2|;%ZkB!YRsXhLxHOdgU1hj{p2-JSy@8j zsT@;bK_f5~duQAoIiDpI^QJjTstMJ6ap-(mco#num<;~S#MrqeVO+60qMWTAC2uhW z`JNGK+C#KE-*z#fjMm`@_rHFS{Mq$YYP8*FONW@wTJLn{9Sm<45t0p+n=IaXTbUP8a@b5> z#nW6bc9C&-rCKMz7=vaLA9@(eAb8H4^n8%wwYb z2HrMzly*Idi#XF^g){4(SxLKvwH(paZ07$5sM`KCtyd{S9EGW9V_6o7!3grer*-;a z;&1qDsq;PQKj;(<#UZu~xzHhJHJ5_oZ#H`XrmEy99+McakNPp9V~nlFY2;fQ8`L5& z_V2H<9_~cNnfVDTU3%`@{z&|dHE!-|BvqK9Ap&^L@hT@dOgcr|NPX@=6}Qncpp8JS0EeZFnf_RI90 z%uufr37>Zjy5|aSPJ~^(sv%ugnpkN9x1)v2POx`b`7cFLck)N8fL#iSIX5x`#Pv7! z=ZCg(CcYnVM~f47Chq;EkH1h_D*o0j2hm=ydk)c+nIt3JPRIM(e8roVi}7USQ&xS1 zMoVUU^$?_*t+HO1td%AX4m8CsmZeg{Wk}F}>Vs|`P5qbK0}ZraDhkwro5$P+z}3gH z))B=|L?&DBfHxr{88LAe zUJH$1+}0hstMw`iVR78b5=}$mc4>LCQ+X$l5g@y{5>K^9=G8FkSd;WhDey?(ElA z)Po1hg^N}u;2Da6mHG4Tz~rNkvhPkF(ngErC^i6&4J-X*`Hf$eLK4|JH*#D4(t(cL zg`yE%!@7oippv|U>DirgE%DE1**^j}i^)F8~DyZS0{a`*~AP(vVJ3LOh|eXP;< z8^Aaaa7(hL@j@J}y^#&3H6@DclW^{!1FS2=o!KS5I$GR_$ah4E6 zE2~4d=Kp0poi+L?*q8?OQ4ytF=%CoJOK9-}3v3;F*7rUVbCcf{=y~vi8DP@jdART7 zbX&6M!~6JVX(z+t9Z8Z0<`ruO-b3!gRy;ylPF8j<=+kMsBH`m{lU(?n4BY--?sJpB zj#sgI;@J-qAUq%R5bF`&V!K5O0QAAXeKqZp5dZZXXQ6*?8g4W`OUTEcNy-J}Il4k!pfD0SS-8Q^P~Iu20=QBi&k`J^lT^#k$o-B0F=+ z=+F$p66F9ihp$`>@Ln=9|JD-I5E+>pY%Lckrxx@reKGJUGXH~1VY36!VsBv#Jw$rc zf}GRqhyB#_Q98HMGWlqtBJ0Q>_yS1|6!|Lv8U!~>>#w}>>|QCEp0@Fb!W@RVj2UQ{T)x=Z=6tbc6eIx@^Wj^ z^uPQ#tXFBu9M@1THuBf)U?y`Oa`X|X4S!?cYGsBeX5jis+@O5>27k{*%91(0sLmuk z3n`B1AT~yyDR3mIaTC!{-|^2DAPz}ZdZo+RK%}sTWju^ z#Ea64X?O)!!wzUrzc}mO%#Cq9XmnXvbD0d*^nYhU8SR?EZ}CdxRRoBtuYLQ$9PMiV znttRJ7aCKlkU=J|lF0^L3$PR=valrTRBZoE9IN0rKC}SIPJo2&eREpIv5|7F>cqxd z`~wi|MuJ}7%}P}ie{+O2!2ABLg!Or%)=pJ^U7*>zFjeH>IL8U z*Jql+Znf^6>K?L8ombCi{n?V1Roe>Snzu`yGJ`Xzx*vXj1Uw0M(inV0U38S+KLu@S zHf*wdQVrRm%jE&>Q2#F$u8P}_xAfBw={(gMfQiDF6J^@{&t!XhTIt=1cFA#M?F`pb zuPiWbi6sJWcg$G2D?R&Y%IUaHZ_k7IY-i<>@cIT;U{p9K*|YMutj@|8&UUvnWHHu` zA^3lx0K>bpRuQW7FEjnt8RlOn3Az&w8`q?>wFT4;E(K=b8oZnh2LpVke5V;18fB5o z*_b6ZOsl@TqK@5sA!! z>(P<2;@(Z0+ZipKMza$T8>}a6LivO zZ?Y5%RXdxxe|+Ir)J9_bSwJeNps1_oz^Rt#_M7RO#R@3;A_TH79JA=LM0v0j%11(H zEIwte#Fm!TlL#G;vB{L}!qVGqb z^l)868e+HKlJ43BoBQA}ez=H@8h;PnpH;0l2HR2qbL*tE>jNY)@+6z}H?vp&5fK+d zuq1{6iwn_s9p1?A2;H7MK6LLyX5hrw;_8XS)HtMsAGp5}ev9#u4K^VJXkwaR!I<@Z zM1tT#r?gsZ=yQe=Q&5N_LolzG*tgj{@djTwg{TTi|I0TO2kWE@iBL6wrkBc^3*OoJ zPb}HQa%w2qKp|Sxyzl*l$tUjz0ejO3rPY}K%S?j^=?MB15l_7!b@gi1qv}Xtvg_ce zXHi7gb~>fq+Cb5A$|IEMQ|VNhlP?1rbOI@TM4eb3RiQuQLwM@^U2)c+j`;JCDHz)e z!&X9`=&zc>x>;a6Bv#%}whO>|;&%IV`-m*Ci z^y}A<`yShVklLEWSEXCv$qlCf@#0^rmp9 zsjxH2NALW6_l1Q8bFffes92aO0^|4+z{?M6p<(p?ECuGy6Rw}^NU0>U7l&5vxrn}B z?%_fsvQz|mMijwyrT@8JbUH(9KM`ALZnyIfUEp*J!zUWztkzAL2Sv*z(i~7ixp+!@ zxQu8##ysxY7>rXp3|Yd4d$Qk56_GK+j9qG zQ93sGB~kZOi+;p+b|OY(dLel{1)?LAFG#)56M`w2{FZ%TSoPo^xSNMtF9MUOh-mYZ zgL}i&_PW@y<`wiWM|9Js`S|imF~UFA)=OFC#$eA){5)mv7JlIn!km zMVP`S?R=l3x_n_@ZRqyMdlq^)-y&jj?v-Do<6maDo66cwe)-`FNDj2#etyqy78MbF zI2C&(M^hp~&-<0n(l=5KJSQ0R!M@+uNV0_-c(|L>fzc(ZuF(;?yNr%i?FO^YE z{4C_(b6vXC!uqa`-`gWZNkuHRqtY^Gs0+p00UUMl`}imJPdzq{&t`_0`TC)>w6t`M z#W|>0=yLSVJ*Y+6V=H^6_)}@$FD%iE2(|YwM{bd#Pv6;}r;pbt4iEvJ4AU5Ql#0PL z2rlfM`J9Si3EDz^)mvqt*-ZLDbosslJPU>EH-$S1JH6)hF*$pVq62nU^C!Zo9?r^s znLa59K7i2No3!^OQCi;h8WGOhl|QP(kFQlRfDTsmPwBH>(#m~_xU=Z2gzdij~L zLBirFqtWdt{>Hus^HmE)Fm?XTwZaDQ7>wL@pg>p-6Lb`d129hJG7D)7V>h_#%*^4a z)Gp>MT^Ygi$6aXEW#k21A=d~%uaNo=p~%Je7Cee3=;t+Cc2%yd1ll{&SGc7R@QPse@`uu&_-p;8APtDr- z$kp*npt}aHP&2(=EbLAl%Xj%+%Dvp(27g!69sJP2lNJHZei^StmH%=&bxh>{;O2vcB!amP|8@h&mrsiPS(+lN+H zUEVZ*x0nk{v-QZkrZ&;Jr48HU>cS3SQp-jal3g& zqSePu^hvEt59OdVfbkP`r=#YJZ;rGhlO;rR`M~O?+P!aLVE$}XR{jX?BtYl(4M)>< z)404Juf0y+P%CAw8N1Z}Ush6oD3;|(>8bDOgG(gx+}H=LmUs?&|5$nWcs#rWYGFu{ zz0)5a35-R0nf|WmvguwNRI+KGoPePYlOO7BJwaXM%hxiJoycErO!agIbLkfb@~_g>l9zjM@GBS9EXYR}k5YbOZgB0J1-IncyOG(J>SAUo4Y6?;e#$iTtv6gm}V51dlCi6-0BA%~p6xzV$T=2ukmoF3-! za|zj?f9T<4A99lEsrye_+lF4X|DAUWYI%WAoFWixj5#NIvMdZb7*l8C-b0yUnUV@O zOuuPr7Lrbw1$o?qg&5`XBUmh-(4UcgT}bRz&n~0w6{8A!GSB>G&^Q?MR#x zJ7fbcs;m-jUl?U|J6{BJV*Vhl;h8kajzrT<{2epKEHhq<_gm_zmiqN;Zte|yKg4ve zq2Go*SCuy0_@})ir@Nr6Y+BD>%X%>+GA_jg)ZVps#wkVaTJUK19rE$u-cI1jVRNi- zUOjqn&wig8o|@)Zp!bJ&$YOa;51C&Jy-S3cf@@PBbn18r@(U3iQwF{{y1gn`h(M_I z?kwtwony_<7Ow_riJ>+!VmM}BZS-)G4lemYyJ(ueR#;*SIjlMa@vw|ZT9w1uKkthW zob>PtBF`Otcx(w~`%}gyZtoZ&1v*h(c*_h0o-Z#bDCkUfRmWiShcQ7yE!tg$k=nSz z(AimPj;4HGUH@(Cj^{f@E=0_qBiC zk!t$b`;hc-j*}VtBSOt5@C7TH@ti9ohq2P*O|6g;%ugL`a(5OB$m%n`D1F+_Iif(K5!R+UrVVt(r(AkC!oiOlyq=>EI19T#zYrZAVv zIpV~P4zN^=l$K_m-`3Z?L$!jr$~}B(si1WUr_c|s=$rS4-sxp7xOq%o%g53lWuk#> zaP7FiTl=vO8VCR1T>xOjZ;OR$1g>!k&fDsibUws?e)kX{I!+0Mr#;42 zBbHh6MAJn2SaiQBndhE1)FQX7q`&qZwN7)W$Dq;Z;Jj+i>9aM_vLIZ9^j<0pyP~#O`<98(Q{)v2nJ-2^}!%CHj zyy5m8(;c8WQ%4;-8Y8L@#+-#HeVRNjJ#gKAV!PcW84Ew2k!7^SZG5t~c9jbP?(t~H z^S0|09Zf(zA^kRTeOzQ(>hliaD`~M8KY_mWZ(ZfSlxT>^`_l&_HQvc)_Y?h zkSmeM8NH0xlZ~CFgR4%#5XjG~(sM&))~4F_I#mJv;<$dD_|FW6qTxix)XZe zdN6WI4>o#$aF4c{PP%R=P7XW`wR6JqD&dTincF>8mOd7><2il=O#qByxv2u@4x@m z`6e#i43QMt-YW7(HE($0%znX#LX=m#gm-kQqx}C~%(x89HP-b?xY*GrHtlr>5kLsW z+Ak}R=i81cNe_3WXP&I;c^JpoHvDGux1*eosa)weVW-g{29$HaM+#8=BkLwYnldZU zCak|MXgNV>o?pg$-3Dp;r7P)~M>N3IWtwPAW=k&hp*|+3DxykxVU8&bJzfjtJ9YEv z-U8vmv{5{;ig|%_6+#23nLav_e0+)Hywp8&44dFZJATHyU^5ZO2PU8dz(}7r?gRS* zm)#ABh@n_t3MH<3;;&ygHpi8A8Lxm z%-5|Q&Ta(Aoyhy|kx3HuVQ^IJ4ap9HKUUb+x1(FF#yDpl14gX}Ryh0UAYux^SFq3i zCpB}8K&8ta`R$z|1{NC+Ef&rrv zQo3gB1kXgl{-(cc&FO%BU&TBizyA>`>!C?5r?kVx=8Z+n{1u!XUhOOoW`~)f^~Jzk z;SFYzuv!|D6u9oFrTon-=@AlRi{CG@9F5zVQ~R9p=A|*tSK;x{@2lJ4l$}ge5p#M0 zyl29{-9Zep*fGHSQnvetj6|PNgfP_C=E}qaelyp zaF|D?Du?~oh%r{_-WlJ}{*3;&@rFdvi&Q5`=#n8RYSSsBC&1xA>z{l=AII|)7TouY zGz1fTKr(EVh-^(~+YuzNOVI6R{hUTh*rLp78Gnq+SUWd)cBxSBV3$Ge9N=xOM#QTp z@vuf=pa7WjZOJqcbsQX?#T@FNfmmJ-2z$?J3fj@7g*gA5Z(Ofb(hE|Uu5(q}HksZ( zxPR3`*EwO5W+54SqGis4BL-h6jXEKe&fORr{@h)V6!~b*SJjI7oqt&8K@nHA21&7c@@8L+!Al<&!!_4-%s|8=MK#)C*hcQk z_Z*S~t~8RgZgrkwTE)v^y0ybCqA&prBW`2&$fMi-^-5giq}2(cNkmow2TS|k)uN#s z8Pe$AC`IrRqf_DP62|S1E*aOzR%({4MEt8Y&Ij&R(Z)DiwIZ+=5B^KEYI~C; zt=Y&WT6n38J1~8=lR1;%(ST?%qBNV>lj+(+;`Qop_D1wr(Jg%UB5>R~to#p@ciub` z@&-gJ5&TJ424I4IBGnk9_c?^^HwAkh31X;nmq$BcCdrI?wD5r*KrMkI$>{ef$NNls zNSD772_^E8&A3p;=j)~oALT_G#d4Cl95!E|OY0pj5)PcjbkX;TeT+z@lrtsPcohP&XMsG}&Iz8Pv~Ls-ZoNsRA6K*p!M4NOW3R5HOcx8n|Gqloj)LW6 zV0+Zr>y-vGTmwXBHaprg)o4Ep#Bx$6UGCVeWyaVy^!ZrISW+(>1q_?VV6FgEZ#4<` z?nYXNkL^d@g zW1eHt&o=Emk&kmXqJRsRFZvPK9X0Jb+P>??*j4g?lQJQIZf~mcPdTO3nPor!#0N^d zRGXlTCk4biV}~_?0&8JvD=0q^%wP6^k);G)?%7*%h9cY~O8S6%7y1+14*#(s*k((w z(kJmNV^Uz2s*ekh|Jk&R(ee6o9sPr_u=aQ={y(!+#ng;SnVn?j@}#PFyX&)x#U=4q zd1=<)ol&8HLNLm+zgQQp^Iq#Q5k1v6fLq9zt|e>Cl9!dF%r=F^3;7CLVuRJN9xm&< zJzLEmPJA~GA4bUZWgF*r@X(tkn)nW^(eS4Nc(X6MA}A6w%6fgI3WHX#&|i0c#GnN2 z5^NDWeVHJebmXuhs6O_)wDVTRs|9Vkz?+QRlf8X?WA}PBw-E89RskxDH*!7$XHIxE zXy)*oJHh}gs%u`kwJx|7u&r=~7XA|evXgio)jG2cA=6uqfj3DJh{U!u1BQ;8pHBr;g0jE}n&gRP7o6#`vi zfKuZVhw7Zr=Wgg}!(Xs-5xoyW6bXY-)p|+v;JwkuRDH{i*$phwciLk&s~%jdR)t?q zD9sb1DVzsL?!B?tD>H{XbPKs4kH}Apfuxz(EWUV61sKE*S@>^RZ5p6ejZJvVkK`Qb z>40_WS|3QPi+yO2CgDUR4Z_3~96+B)uVQzwg%;Um77O)#1qN}a#7`QYsv zw3B*Nt%YA~o$U*-DxGh0*)6A8Za+zjv70K5K=;j5;Dzar3WlzRNQJ~)7y(HWL*IbF*i|Zzm+~+$sc=FMgu)2}25cu8H1rw~I$p9U`Mt)K zccE=#W6KF)HJb`x=P^jGdD58Ml5--P$1l4iQO94<+U2LJ9V6$386!wCcTABuOUN4N z?d7pB19LceyA*#ox#S#!p|$WgNyzb~i}l&c_K@Em`v&n}aJJv6(`&JheLKkKnF4Xy z4^{%##E^aUi+C#i*#6BSO+*LWqwHe5-pN|f>4L?BVVI2l<;69xTK5c9aH%GjP}IQF za12a-XKNB3GNkshv1eh?dt%R1mIhPb{YoQqxzL|6WgBe8*l}$5h!XB{0SUBD0=#|2 z&#u0<^qu%A^TNreV+|pUwLN0dvx-vP?bkwnmuKEJx3l@Yw*VtafRVxuX4W)27ImpmcRiejL4fb_iy`wq zh{W#hZwpbC9W!eDvk;ZqoFaYr9jWl__o7tyg9;=0b?0<^Cecqy8IPx=)ogI3{TK1N zrc5naWUuSV1jm0cRZ)rFs=a!tL%KE{yI4=Y?4_AIZR_vf;JUmZMVjwRm$wK%xFyJ* z2lkMS$ro3)hqpJ?GI{4Q;Hue)As608Eog_-$9YQS@o@Df0v1?*So8t6vQ6!o1b##& zGRuaVtynl=MkiA>WGV=GqEbYx2mVWNc<%}#&@9oU zNBp*$thy&kE#t5jy^lY`#N?#JrBx;5>b7k7Nt+ovNH*B^ zXjLatkzmVS4C*km@A&1~q~92W64-h&ua?N3h9YD-=~UwRCIZoXTta3-FT_V$G4<&C zf+K@FCK6!Q>9pM@^a4}6-{f>B6mS-_Z_T)bX1F@59+AXMCsD6doX2C`>7FFEj|&2L z{WbN$M)>h~UQetGRAVv%WAB(_9wGfWGPrkUD4|eQKrqkjh2EaTHJX3H8n1o(a=9bB z;B0hWYFc!z<8yu$6b+B9M zN4$g??&iL9beBk-QOTU)-HV~=wPXeHf1Y#0ab(DsHoes~*C`K=&g(~!V=1}EK~VnL5&n@AxmC6D<%Y%H(dpT+OU5eiBY| z4ie0m{pBGIc>(9}!a<2o&-U_9$PO*;bR*fJgDW#iw(lh_c1vvu}0Z zjp+D=vjsLG({hJQyWFcI3M%ea0dsAOctn0Un3AikTgr z$O~+RgxW1iJ|Lv)AHz7`zZOF+xu_79VbAF$o42;Lk9TS$PiB2A9$VgR9}DJgZ?^v` zXFVvY?}ikoyx1am;k|ty>s_%=iGGEVJt%dYcAs}Q9o%8z$Q`Ga3a_kc5VBTBILs9r zr0UZrX@2vVss}NcK7tPm(?(!KvCHJHQ0rs41cJ$A$K0xXo631dwhpz}hvuZ`K@$Da zi-H2mq@r042%1$a_PRTE`KmO!xg9U1NYlNb7?JNKN| z74psb&I%$(a}nG#uzPYa-y_QeKZt|3e6sj6S;Y!+6%*@PLV1Z*-l;NOeVT@=-um%H z>Lb^J?-WG0RVhS_Ek|tsww%8*pi{9$SQ;JTQCZbuTo4#om%e~X1l_1QG``?6At`FPMJE$sU;BrM+Jd}Ky! z4RLD{VvoKdg_u>)sUS=IOUP)sqqv}7PsAtXCL{A8Qf$@9k>!Zpzb8DT?r5%{j$3gy zcN_0E-8JARIb0Jj8I48C%pcc2)Xj3?M26paX_b$MULt{(O#bknBe~-dh9m( z)zNZozIUkp_p2ltYbJP0nua)Da|s>?%XmU|bz%5H86PgaWmj25+^kR^6p0WLtvvv| z0xnwiOUh*H(TBNTjHi2hNt#@yZeo-08cq-roWwDG8{U*|?h-#(O}r^oUP|3E0Kr3| z?5)d+Fd{!i%8kVb5&?T!O03z*l&(Q(mmT>e%5a$%?W)%UXTCyzK7dFJS!Br|toH}8C*^Y~*G2n?2^mq{$R3crwovpXG zZ#pnFLE&z6j-MD*~=o#*d8ZrhtR z2v(0d56rxngpFJGpJ?Ff`XfQ4qDUwFv>`t!&gQ^{9zJLzng}V#FEk%%wLfRYg0yp7~yL;X2X)d z3mB87Fa)_`NlRJ6?EE?#`Q9Ze*UR)Durew8W^6CX18q03HKb`SnNCkaTplXV{(lO#orrl$7`c9?0r2MYM+K}-TM25p}OL+YTWBrOq~(j0wc?%5r>!L z&SA5+dk9R>ULCV|we!TlHbfpA(8yXZLZXELnL(>A;^2^IBJ=Lz`gTweiB#PG!I!So zE-YQIiFSeQ+I>nx`h~;_((`1vk~Yc={K-|5B=gVh{C)QasEZg0Ljgq{VTL!IGaDlr)ym}yFnzbXen+6St=URcShyZKNbI6 zv6I4dYQGk(KzVe1yIMYAC#u=4$&xoU+7S@1)td`Q}27QhL5|)o29fLo_D-nb6M+;y{MK5#Ia!x!NZf9<=nz2eplK&zjX%7Y(OZ%F0F^bIXM`2= zw9{azX(}QPAnlj_;DA_Wt>k>u%dxo-NLI4sRMgOIM!5NGh_X z*2jvQsHA0k;>6P`kE~7T91qhoT%ePX+Ql1aMq$vnRrzgjQN-aPAz?Y9>o>I7vf|n~ zM`my2Q~TMMq)3hF3%ONPDlbSfDF8zWa0q!EGMrjG)ftnGdHClgc44P3bY@ehC?cMh zH_xcR!c3QYkUx{J_czx04c(6N_kTHpd@o!!8zrpsh*U&8LX`?T-POYCD;Vy(2~IRN zmniTO=5jR}3d&B8f(?FyM-qzlS=E{tlEO>4{|$IyD&U_*_u=MinR8FgnG>jakNG1c zvYEFh#@l!-PB0_QwRo5<&djYot*!CX&HH8}L#`dRVgew85ao(90Qt&f{$I*-lM&v1 zNA-NfY_0h@>ik{~?HUOQWQlUS4=pBkfNNZD7ft>=)-wsc0~az&*2cmkfJro!kHQs8C^zb3w2V@I;|dXnzZY*m z5Ll`}V^#*W64KPI*x()`$1>TILkZ^L@p(g{fyC+b=LSIiJ&>Y7vEyh%sHarW>GI_rC1loUzkjSxP=gpb(KdzwfE#*dHH#tA;=Q7EAA>oeb7Tn=(*FD3~BAr^O-|=K#z!6&Z(aun)=4v~fJRRS)L^X7b80>`dt(X;9g z^ihQsYdd~+1c|9h?3=}uV~+LT=cS2EmKDUEt<_EW#{5XObh@~Nn{df!F=t_1;nZ?L zhs-rQTX!M5Rtmt69iGKvZ+Nm%ywVY%32+&&eGcu4z%IxHLEM9r1LR6C|I zS$n&4*tW8`#5-RD1vW%rY^5}kg0C)d)h^x(aq-5FOhg0ktN$xZ z_eZ~Eatg6`e7FJZs?d3os^ljxZdjUw!iI5SOHu8mZbePw_|s%`A4o5b$tjftQjrvT6UP!T5S^jURv6Q|`( zx2iR_>fa~{9sQQ%zKoTpNqo~mF`egHfZZJiY8K9rh>^?!OE-9RnHX&kBC+koEde_p zfY#qs_HpnIcq1*L#2nFZl4Us0E%;3~XlH33+Ir>Pj~6l?XC&TUGE+wy31e+--`jFR zbM@f2CI?!XReH))P{_j7_- z?RR88R?QWLruv#c{p3jpTi2-yMd(2F~ zg`i^;19xE}v0yGQQM||QgXL3p!P-d(Mxl?1-(zmrrV1>i;v0w4$7yRkI$Fk)dx~UZ19vGG=Fk_CA}ddaAF~g>26Q@jO2tg4&rP2?IhDAg zY038E|DCb?@BacEaQJfyU8|R1KY#D1wT&H2FD^Coal^3e85>>ZO1d|?QIRgCV}O9vXb>1(1C$i$W}~DPrk zbI!TvTu!POsY7|LCY}js9G%P_JB6#pwyJjb1tURsTN3#9Zgc&EDTS_E@dxY_@m=}S zLZAuc)p1n>H)pL5z=1a*y^BM-AynKTXrf>iBr7^Pdd#yky|3^1s)|1B{JOjx)mBf1 z{&buF0`z;Dm{xZ6oWFKx%$c=!mItpK+iZPqf}^-b=%s)X{-xA==nUN9ud00()4c7o zlPdG^!QFzl`U8A@!lEoflsc)XlV}RUxS)ke_g@C^QGkiroEJOtsHZ2h09RzLZE2rg zr{}1fZv;8%;_&0@t?k_zGAtdJplbYBcnTIqYF2wOz2Vq{g2(c(HDHP?k#|Ge2~v-=+UUE;mEyxye68w#Y^qM0RWCG4%F-drW@hrb8NmZ zWgkJwYm&jY9@6h9`6i!w<;s~eQYlcDQhfv&gj!n>PRCLNK#UPJPs3IDK6Hjge-R2% z7IUIB(558UPUGtlYFN_{KB}t)*V^v|n$0M)t{^qM_A(@M&NiMYW3M~6U7EI68lAe{ zp4utNpYZU9H~AwU4^>>JS6#!Nh7B3kgJ3UkGm*k$AtfxPPD{fmpYALwUR}^`+mmvq zdIy+RV11^M;Q5ZyOW~{XrbV@$8wt!(9Xhn@0XKg=#^Zdu&hr0rTj*zw1)g)x^*?&w z#Y06^^C6M*r$WUbwTn@C2Jb1}^TM?>Mv3W`N=WG);7Qzy?T_!j zREMl-srhvGy!@VQ(2KR3CY8rHr-pCKwKM_qjez< zr9V7}28zE}h^-MZ{4ERappH|35eE~|+X1C9Ri?yvbj$})Sgt!&_(Z0q;Xlw?KE1q) z{_*sZh`y=dPl+*otW5y6xA!-_Z)?-suAK(XZPr9ZPZV{$jgg+h+^9s%LbbIsU(s-H zi@S24i1FZMUhU1;h*-{k`nhzZYgta7ycu@l(4p|31Z+Cr0iLH?eU_ltj|#q8i-LSQ zb9_c@paBvSKlF(<{+G6JM6CQ>Tzn|)dbr(Mr@g;!EuRFoUoph;K8+HY=hUGc3*$V9 z(E0F~Sc7<`1UvR=EHzCJi?ZFX(wJs42>!pKzVvlFC}Z#MHe)0ouNJK$;TCf4pSE3_9OVv|Ih2;l&sdaxe{?IZ z)6BswesNN7qnJTn zQNUSu5=LLkDl*u3l-}C`p|>;45H1c@*x8BG=Xr@89*6E_-z)4>Y=EtD~u7d#nDA$Bs9%G#nN= zgwf7mmm^5pa<^bCkwf0vuIgyF#&4F5g24K^|wmUz7nuFc=h3e408 z1R4r<^Fd+n3XDaG^s`2SyWZTgqs(gBALVvm{>G_A%)4DPRcdPvRwtencP*IHL-k4D znAKwS8KAGmrCukiG5oHZ*I*_78+?j4gyCc=K5=TP00kb6PFiSBEcQy%LuOAx5-9x~ zW!w;*%j+H-!*^GK%C2-y27*437Va`U*<#t07(z9*-xx1k8RIP6mL;Q4XTlP%%ChSu zZI`*Sw)=`|{L$DH2D}*R?)B1t8W`~2-%2$7ZQS}Ni#Trfu&|llk?^=nGbiuY7+cVP zM@XA^yQ&n`4ZV(o2>dNPnO%=#_8G^eWL;d*OuLj36BQ9cCZvFP@0POVf zH48T)?V0G_m!_IPwDg~Zr9Rsnc(tEu*NS*w!fHbTATaX=)OW^yvoq_AZb>>!c^~ zFbibYO%go*fE1*Lx>9dc?$c&9qK|FA2(-GxmA}2-I|{?}o>5peGVcg{az7C=f*MhJ z#Rl^BWH%%a)#R8BjGqTe`rO`+&*s-2x_QltB=D=8S=?Az?D5(@l+R_ViRakZXgz%U zmqNXfO_YYDvE%z(WtL?KFxD02n`iJLh?c)1*b5^oSuM?hj5^XnhrKQ5EcIiL9^y*Z?jQ{z% zO1AN8=cB_{unTbIb-7;kZRGb`ZH-!1is8twbz{$G&3LoL`)ZV#6>1685LU09(N$Gc zWHscPUH^1ev7l$zTGCm@Fz^>-Z;VX;x`c6j)i|&Xpc8T5bC)HJ1grE`!N`|A7)9t1 zOs2iE6?mZ*o^0Z+$w@E$%zxvO)m%S;hW}*-7iuslSUQKIv~b4sFNL%EZuV6)VAL&f z!bXrm*1g}xjli{p{F%C-RP@2Kxq8FC(XiUq6RiZwNzo95!$cSLgL{{$tryC0*l%VRf7bJfks|i2ulUh>zZpE7ZJ$~jp>G4Kgv!y_7CRefV;l$y?d-WrYh&}w*LBOo#QG|*n4 zwx2|1fXJ3J-`UXF0f-4;QEz#)J=IrGc|hsNZPeFWc20}i-aO%`l#EYhs+j-r!+>15 zi-za>p_R7UV2@n-?y*6a`d>Azp=}(@m0LA(XrZYH%zk~LpX8)arOsih$`@S z)~%$QZp zGhtU!KD)k53z)lY`+CiX3=^8~XC;-#7)A~!thCdfgACI`_stHK=j)^!+w|-S*;Kfp zDV(J?I+htXR5I1gxvZfgo^!j*d-Z7PQ6SHk3vK!=a<-`x|016x4AE8c=UPI+y8stS z`uIL~nF-GY*O&ss-Ugx7#5_LTNytnSUm{Ke?$Fq)??vBrNsaMvrLrMI>&iX89B5q? zpmgvB^64-iwnZ`AfwI=Tc78v01p>XbHcmR-Ci2(WhvyNQ@egN*s)}`u$MTl(6q~hd zqXamk-emEzV#&kAXQ^0Xaw5vfWnOAHIvCmTAla}3<_C{-7uC$bA5n_r!VH=D2{An>qK-53+1JIQ zMq=$412sJ9Ow_STbQ9H_wMoyFvu&l+GgqVF@WwnLW-U^H!g3!y^#V=D6MZ2{_u`iNcX1nme@lZE3OJvXHy1d|3YA9+pJy`dFb@bM zE`9NP1IHcUC%3j?t$$UmO*CDp4H>_>&I1<7Ey?CaS<>3}2}Me*Ur>+#5cze??SMEx zlRmz6933L(`J0|CIsWPApx%WBea`7pCE};Ru4}7GZ427T&!w+x)uz7M6!`*h6Bsm# zBAF)Onmdl4pM8lM(7!_cXjMnNrrrJEVKoosnj%1l?85|@rVb2lHK;rA^v9w2b&eAv zeBZ#ZdBK{tRk&Q}RGBFYw=RPxE&nKFdT(Wo(l~@oMrEsQFqC zx=>@#YZxFuZ|7kKg^ES^dkjVdgt6T^rc7EW{jlT+1#D~o$8P;AEeq-(xc{s`)X!gi zq9RY^#D*QI6oQrTe|;qK{HxwG+5{}UDn=j6ERWvGy^Z3$gy#NrcGya#Ua3j-C}GjH zz^8S4Qh7z0OO(dh<1Ty?gr`y>LNjD#r8#1SOmP6cs@fgY(jeQLj{#S2W8)CsrnZJx zS;a$uqD=Pplm(j;6BCIzn@WrNR{Zt?5jAq#aKNyW`sn4)eE%4Pka#A4sntCw?f#9e$TmTOA3#G z;&ww!9yZ`d<>B?O^{IBFz~dz%_hxCp&+GB-kla%ERvfc(0J-fqa$(qZZw07*u7G1e zz}aS3-UosCZ&mfMRHa}r%43Kqf7xMYJ_pPD;;grs$pBeC|FCpE$IrYff<{?8RuN`D zGY;Vg&F^X>ELs=VH$MIS$wGGv+nnHwoQs9x9yj)~yt+$f;G}&}R_j5)V&Ha!@hD=b zo&Y>m5T-Lh9S;if9hYAFiEFO(lh@-a#`bu9598yjfp_g%WhLCWnTGT=(wb5yZ`@nH+CrOK%3!ZBZL3e;a>RhA1 zov*dqFn2gQdBW2 zMJRq-xV>Q0o^X(s+_jwiqGzV`ax2EYD`YN0u*+2e`p}5W+sAjax7u;ejASxV&N#;&x#s{@PZ5V{^ScFEq`r_HlJ7j_(cyth;bWyQ=dgW?wPF)>&^dLyg! z0MDD_5%Hg@qCTZqMlTDB6i5ey`^T;!y5gB)A2}}~pHBIxp)N93CubhbWeb95Q=#F` z4SwbXd-RC&Kab~QR_PDcJ2gJ_2beZ9Ggd{*4rNjec^e=-6-=LBo!5>1&M<3h@#yhg z;EM+~G(#nYr&_(bFVJ0K6XNrk0|Tm^Y`8AY7^2@^#UMy56{V;?SsNbI%>RuI%YW~c z(N16ViwiCO=EgD}G@pC5w#KO;5OVlKxOp%!LU22y_e7J{_DFiZbFK5;3Q67y6~^s% zT#sJoef4f3o{EskOz{-d7vVbADLGzx`0nPjrVcqYaPkBFh1TrYQDXK&z-Tf;+uK~a zO6GE?0n|f=89VVK<*X1d`bu|W@6VsukGw?a7q@G+`39e-SV&-(?W`*dxqNAT4h8H0IGp^_mJMs%mclYkL$O@Fh zil@SS>ha*h!a~mX<4|Cw1*QADQ{02VNw=td66<4ilNS8GHyY+kINRc_W6J*V&-Yfo z1|_uW`VKSgjef@t`r2tC1k-cnwAvf4=9T zQVe=uyqDSM9Pk8YEuoeVFA&6Xo095dYBG%+!lr*B;QCEAWGBC?B&VvxrwJWqL)T0t zT@cL6M5*+RzXK)hFe^^;{>{1$tl943woKwC9=NF3kC1 zi`IY2DE(8tZx@kFV=Fh)9>~p;Wk4{G$Hg)2AQUJ!zA6%FnI#VZ<*{e{v}dLMIRJv$ z4m?aX``CZ&k-CpOsD`fl4pdHsRIwvI?{TsA;zaW!|Jg&{zZ=(9U!S8}G}?>C1M^~R zqa*x}nvgi_-@0vP8*!dK`^KXK>@i?lc^%l zLj78KP6NTSn3K78A^+N25te%FFV%B$HD}C;5i-&Kp)RdPu3lXe{A(6CoP#;#%or-) zyLpw(s4}sk2y56ico>ZUb@KbRCUe+s%RVn5567+mP zpcedI?BU1XiF3q%C9^I&MiGZQ*BDnQ6#GV+&V`)T*+FC=R%GTIFc3ac29?ax@D$d_ zR}Dlyqf=G{2D% zwyO)0>gc{@$5j*}OJ_dDRI{iIIa`KC8*yi=$7MUD^w?EM#{mbZM*>Y=*aUo;aHxY- zB0!w;eh()^5b}#uHS@_0yM<9+Q-dTf)#?4-I-&x58P?!wH`rw>&;k*IxG+1Yx&^|) zgm8@|u4)omUe z%X-sj#0`oo=&w%(8ao{LLMj}y%e{0CBP2}q!9H|hdspW%@b&qnlMCGJTOhxKm$Q|> z0i%ii=0`r?kp7D{c_8>JwSE*G2n;*j$z=GkwnG#skp8!gj(&q^gWJ_w_*oTr1} zjGd~UnTl-mqZM?3O<>&@Iq|Z=T%`rY@kcHj+UdI-MnhC&U#Ek0H`~CU6uP^icC9p* zl}0EvP!my*cD>det~nn*rMSk{r|TTJk_3nN`Zi@_mDPS6aB-=5RjrtBGo$2-#JXwz z8uKlIS-I`gOe%MgPOG-W@N*smA#gRRcS{U{=FpE2`@T#bwKVmSap}a@jJJKa2{3=T z;=W@+a3;D1XJK@Jb(T+|8*fwUMoq>QF78#IcmNCQeieoK9$SZv&hu@PXTZ&fu*r#R-&4(G6l%&!u=KxJaiXbQZO<6W7htL@aARjQLO z=>D}|2Q1)M2Z0$?F2?1(XP4jLMzF+F$(u_t8=|7i0MHtlt>Mh%fX*RHL(gJK&+|Pe zUxe(rjQ<9~Y;Q`B1rwPHV~hoJ>pMoi7;GD_boBedRbtZIPIE}%N8D|J_wS(j|7kOS zX4NJ-_)923qg!01v%?hQ__BtOiSkE{yn%MH(k{ADy+P6-V#aO1QSkX3b4$$FCREx| z`Ap{-n2f&NeMAh5hIPw^Ul<>L!YaoL50^N}%2FXlT9Ae_JbBOXjUI_Yyb`Wa0_U$C zzhh@_H&C5-lf0%uLYJyA!oMo@a z=ew{A4*AJQYh{zJ`zzJxA`8lF*wqGX2t- zh)M*q7{VN+#3kn=S%#Ix>30;9`^BS5mvf)r?oxC1R(WD8ee&nV;$Kft{Q0}H4H_*# zDq@4cOeWw8D9%A@`Yu z?$#YxtD!yuMJ)G5_pJ2s(#2awu27%+mOZDRqShBQfYpC81V$qAppj42j9L#5$wRB3 zCwr1p5Q!B1EgG^u~2OlrX2M$v8{gT+b!4orYyh=jmMWr*}vGWM-%*H z-^=I%afJKq+#Rfw_zj=nVniv0L-*kyAF$rY{Bn;bFCFiFK7=(F6vpPyANg&Uj5;j$ zeUX+3jxEu`5`{8g;rxv15!5@|#3X7=jo41tn@vC;`2E{NyQmN4R>>p{1c*PFoQQiS z7i7Ho;<}oEJ?ba)6{+o977elfOsBgdA?CZSy3ay0#<*U9SMul1i$jo`wP&Kax&MC` zV8$?jM&koyn_1%vv~uO3Jvfjsb3PjiA=Ou%d6s~PP=#rz8_f{cuGCl5iP#zO*(xX# zj%Gj$QWS(E8># zC+io5d#&Q)c6A7(y>;S{9)wMUR6Do0$>0m|$+7brXykV(I{?5p&p8 zFX_;|@q1gP87dD5fpB7St?S+}LG1EU5-p7(+utgUu2?C_Uk8pgKOo6ex=^dr=vj?t zjK7U`E66HJhkvjB6E8c-z?AY5M%Rv}uo^wRMlqJGk^$=-$VX(WdVtHpaTt;o;4AK| zaQL67`eF1(1nWeG>^HfetK^Duy@(;KJ*OumN*b%*t(dI+81k3mf7zEo-eEa5{b7Lq zm}NM5B|AZmD++fBqy!FsKC}qrt(XhAp^K-xJ7B!tzXIamT)rzxRe%<$*Q8x$T2|@hw=coV~CUSj5o)x764*@Az4{<4Vz|#9mb#~*rpPpPi(0nZi zsM9I0WZ*yMCP&qudrvY{{1695>>~@ndwW3|+P3L<)lc2E)yCWI) zgfhNcba=j|z_t}i&|;dvrV~?6?qn$gEh#T{*t<~A}vao=2GxO9V z9M*zvczrJa=`Kgcy1JmmmSf&q^EEWrg36TRCp&yaldIJ-uG{k+}dsE??vA{jZ8+e4W)u&D( z@~|&U;}0PSwA0?CTU`q!K>%lX>C~6J=F07hcT6-1x+=^S&@S3Ir6^ai<7z4DXHHAh zv0fY!k;nq9iTo$+_x^ofaku^KU-DtA@fIWs&0f*c?B59HkqK5sKN?wS3s2tYECZ@o zS$E;Zg)+Y`DfHzdby3J;NK0|3?pe@4t0b&qT8HW_EJG4FpF}!R5?9aF{5 zN?7sCd3c|u7i4BAya=^_UNkE;fk&B&n2%S2p?vS#N5|s10g!7fhUvmuufp59vdFJX`nQ}XT1f{FYu6;O?H8g#{ zFDs- zNz_XjNr1hdwm$!2lT-vEqA4*Z zGTJxX?7=@p#@{WFE?;U3n|UI6qU^jiJhCwmJ&xwl3BTw^_cAyQO0D(kedvfuPs(rt zk`fmUyEVd`#_cWy!X z9+&J;Meu`u2HsOuI?8&QLGl--Mxp~=I)zVKUXWuS&vSl<+Sqst9FX$EcyD0S_bD1q zPqX}oZ*hitSoT(MbN9O*YYU}7>M)|SLs!S>3z*!x(tkKukrFyKI(nz$q;q;5@Zm#{?7YROPyjk04|Azv1sOfUiFPST}slquI zUErDyTu~Rlt;0FtCADuegg)b@0?l)4hVVj>p_Wg7l!dnvd_*WjdT>H*+DA8rN&-*$ zJq(Sz2>}&-?udtpyQ^*k!(nG)bdT;B?iD2^tkw?7XfpX!UPSS*3JAxlHB`Djkl89( z8$y^-I8{8sBM(KU@2J4khojvb#BB_c!xJ_jHT86SOnO`&fea^zQHWjIJjy7{{}FM6 z?boy(vXc4HGra8oZ4mj=_{xuv4cMiST)TbG41!$z~ars z0Ka*wJ;CsNd+|dAl1Q3$c#`Z?H$nhmPP`G|&*Hf-`+1E-VNw<>FVOFSFEor{1b;XU zb=YW`Xy#GA#ZzgO$T^9g{I|DS`3--xS{B{Ls-!mi-^%PRQ`kcQ=jV4^k1dqeVw3^t z%QObL@r-DNMKv3!=1J5qzX?^oi{A&IQ*3J+W~$GiL^Wn5}gu` zcym$iKO~0;qU)tncnTO61_ms;2D(ow1rq4H{<_3HQ@VYxyUHn?|i_KgzwF@b|o}2n%%(6idar>lm5I74i{%s>8nqk*_M`! z0t`F|O{|9^+;lO9xTq z*Q296#9b4y%qz_FyX4lg3KWloV#Q!|S!OeJ$}Z5viOT?<@AR_U4(HFF6plrJiRG>F z`?q2QixZ`jYd*OpUtw41xP3OJV?v;P6 zjH~+X1oECeF&z2G{JmoUM~Iq8Q|poohuro&{#VA$)aB!Q^(3(Tt zY?@i%m;1sx_djYkjR0JN&C;u9ARk^O5!V>;q#kB+(^haVmKTZ_Qsp4VT9W*v9>fc} zh5+*$QV^|ke0xQ~EARfXRrK}#*yP6*-WPaJqw^2NK$66dsHBX4$(X($>#Ssej#_Dt z6>WkwYSrM<))%ikSK-z$X}J6yy+J4QcG8YYwIf6pv!%q~pK zk)7ug?VdR9&=2^c{$}eqDUiPm&a986odq5+atC@g?+pQ?W zq5Scc%IsY1qHZDdrMI2XV5}R5cSAQqe_Tfv{YH}L&a>=1*ebnPh*(jk0M0Wc&a@)< zp0H=Jq^tl_o-2`FW0OC2DN=K=U=s9C{8BWCa?92$5>m2K#~uX64ZY=PYO1Vx&jE!& zGpt|G@cyydULW@)v{g=+N4(5&)plOPn(#goM%Y~a;)`2git?X|;*WlLr!y2)&dKw} ziI*SowMX+l6vibRB_E&HgMazfcM*#>lbgOp8qz#SH3lrz3S*ULgmm`|E+2zDbL648 zN>-V*CdMJB%9wo`n~rE`NP-pf&A|D>J4dH6W}ba$KY>8XFT3iip-+=O$)O_> zfXQCo(Q^XaO+(|&IG zuw}sH&+hd!k|qS%N)CTuJ%#QXVUDXSR?*%6m8HQ5wI(b|u*?1;8XVAadA07Z1gphI z!?{u{^HFJa_S%+TOQ5cXQgwYI5NPaN62h;xgdW{^C;zL}sxUSwt2D*t!DW?5)s|uo zyQlGZ_X-)HKWRfqkZikZAn`2xcyvY5RbUW{hH_t-@Eb`})9av3?*`1f1@hZoD00;` zAL72R>M0%Q^Gs@6YK77X327HP4@6(N1dUt#1r-7I9W;#35I<;8ZU3`xpTWM!z;H-9 zZ_fo1E-@M=FA)e?;mz2lHQCUDZJKSu%eQeoANAEVC3~%{v$j^x&S60_l>}NyQabJ3 zESYPiCv15|qTpv~pB`2r)(;q`5a+aUzwPdz+MkGnAljHY<4L|AZFE=XrOX5RUz{uy zM$%@l2t`x)9;pPq;DP+i6kViwp?)RnWx1wllrdQzz#B=zT%N|0_pZH~L1VAo=Qyuj zV`WhwTyWu>{~q;5?_n%M93EX~?YleAlb?dHnyaSUsZBztJ#r@bAcR0D^`dQ?cjhAZ zFANnn-5LW{eD#`tCZ|}GxTJv2G>G+ygw*}@g!tcfC{vdf9vj*^n61;n%940|2FLgO?#mbO8EX$Plq|>mv>sZ zZ@{XLUW$$QAwH1iP#xWA@H`4rv?AM}Qmi%aeeyuYf>?2H=8Q1jQusZ02|hH( z1Z{2~@?{f@uEBayx?NQ&oD5VCRg1G2I@Eyrjb9Sa8V0+Lq>qA%%%LsbbqkV?B98VU97g}_tg$jLK!!0QQMVs4 z3Z(W=z3=&04Y58nkz@G;v z4<9%-N<`ptfRg-WBo9CKT3=(PzO@)GyBd*W`>t&6pQ`Xv5~={#4dllRRgmtU)b8j)JS`)q8fsTRzffAsxn zkUM7Lk(BU^S4oQtO&^J{UT>sp10%I+dWmA3r8rS)M30t)BKj zf=@e4NPw7ewugXVU2MNB#4J7wpL#KTrHgzdm}4Y^>NypDMI{{0ZHU z`Gx)x;)56_Ai6x|7PVy!c8IHVGwZ>R?iTC zx!SdHxbn+H3-+>`?_Mm8RJQ@q@fc3sFq_F7P1TK7iA9=V1*EsCAF2M?I750$zib>& zqhmn{md5`xN5p^4P168uI1O0j_@_7|gFZ2Ax;kWZ$a26iC+Jxte4y6dvi_{16RmQA*G-APiy4D$ zeE(44^iP;j%$Vq^b2r+fS)BXCuhq}fM62h2X$<3@Xl<99QQ3BLl~PsvF;p7TnPYxp z;!TSIGgG8H8BPL%&miVM)VJLpyz!fb6GiesH?t7;!|f_tQRUw2&)US4QxBJC*^{XY z@xB}TOHV~|q!c;u3B;KQ_=a$BM1U{wqciK>8YlZg9vU|g{I|5&9vB@>bEm{JJkpnX z9H4Lc8$+{wj$?UAexg|qYVks!c9-&jV@SL~8p*k%ZxQ$h50{uScb`(Ryi8F3yTN+Z z^r8PVH17ErJ5GGZA~o4Mlq^3%@ISOgwO$k7|K;Ahmt~^&fgrak5Z6^dv`STa=v5vGfqa041j9 z=#s?a$k)HWFO=*`rf|jgDD-Oavh#cBO9Tq-j zahQ^ZJ>?{F(YI{~^~{Cz%$u9f(c^1szSTun$&=lIzTHoV`M8oz0%MpC@a(d^F3nT* zr9a<~!?P8}L?CaR67hd56Kt8aK~t6b>~^V|B3mUw$_e{fczprGfoB4~-xt-{7K2TT zik9LAspvJ|=weflJem3R#lOPZ`i;Gj-kWbKVTyso`as8pMEKzf#IIf4M5A;_qgK#l zB&xI!R}{AGchrsg9`&^~x23&3S`_aNRT(ot8@25}+h<%>^=!JGIbc)9*wdQtDWRo@YZd<{gq1 zqjmr)n^TPe+&JMO;`U%hPWOXE#&BcT(AP(mKmM+{8JcKZjIq>;Y3c124b*Q9wT5u4 zdYt=SVWycWgL%1&_W1Z>?hNv3(HML3@e-NGc6DIMrvl=2`Bh?o#`bKzv+`LolB)Vo zc~_)vTu!8pu;CGfWm5t?x!W2nnn>rHzoYWSB@TjkQi#nfcYMgxIeV|0W{`5K)}=w> zXAKr1B0&0Sqp^4a^80+uwTb3^)>-b*5S-@&F9Z>r3H!DPDdxDGOvjrG`WNkdkrF!x zzR)$3kBF>x;l<^wkUP^l@&%Le1by>BR9pJc@jbw3zSSQ9R`n1pdp1l?K2@Q|=zAgKZ%a6<;MEJ&bAR2T@+1cK z%+3<&W8NYkZWu;JV*JcM^0yWKO7{-meO?an4}oE(F%Pp|!s{G4N*`u*rxB7oSLt~D zsQl#fe`w!i2?*}wyw-9f1HPzotu>HP7Q7RrVSFX@+uU`|W$K5v z`awX&_h)gPlcHZNemTjk0yizsqjG-R#Z9j;wtI>QBU7YVA-_dequgX|GpSTA^nwjO_RO-Sfn%jj~FA!nz0^t(x+&B^uJv5RLmS4yurS4qT;2_G& zr5H{&=jov9@9#gf=C>Q-=vJrRjChbtA` z9CLHRRJ2H0&Nw04<@D0Wf#*NumclInz5%3 zqF6^jV!BzrWCDf1R6F;8Nr6C<; zz8XX^Eu`?+*b)hfvO@6GCzF<8Qx<__aTWuUOks!rrM_>BLDbZ4WdOc!?@O?(bPY8hRSE z6gI=;nMh`DJrhO*)&C>I(F4UV@@^hS^{&Vph}He1wXWiDoLZKprQu=%?EM-&JNw@7 zW?Rq3rTx@P1GYBxdsFrJp$5dFK$^xFEymE6b zYMUByOo}aIw^Mq{OQR0pNAMmD5#RN;F9X=4N>27{mFHWPr9gFDZ_re7w^+)GoVej( zEM8#k3x=UM{rWdFx@tgx1^&j-wD?c3hGxrsPhjw}|1yLqlfTB}$xGkBMXXM8=fLR~ zxD-2Etc(_vwd1=g*MExF1j0GLHK%tcldkaW+Y?T$^insZ43YVcQD@_gAiA8L@kT~Q zd>yxX{iX0K+gFK;j;$qM{u7P2v9XSDI8QmxOY*+Wq=`7^j4pJ9QAHYN1jfI)0N+s0 zveqC8d*P5A=l^g>bjZ7d{F_H~hH$Rk^YqxV6KCr#*94%5H&6;vjU?^HE)Z*NaC$FQ z{wF&X+Il0~qIAsmS+>L{Zy!TP)?ZOK{5`M3)#MVEi~JXNuyVaamZ+L0Mli<-(Q-0d zMh--ku3sGV5Xy$K2 z6a*OcslZitC8n;r3okdp?>OQG;3+zcCXr!pW`16f2Re(gIAc|Utr1De{rl_(>T4ee zdxde55ukye0dEqXlBfQrYHzHc(;!tr*KlcYEkq@}kz?V>P62MV;t^`AO9wrl$-W>_ z0z(7ndF&9e3r_kE-GS22DvbG`g|K*F9jw#9A%FP`ATpPbpv9)cx7W>&x3x>UhlZ+O zx%BvM%2?^I=q`2tPyV>rpGNAW22|G0vRTdOlpuZAnWICo14Z@OAQZiyli2LybkF6%>Y|UxX7V z&)>s^gI7L32HD{1$2?@wAZ5W9>Vx)=qe!J*q=rNg7uwtXsn^8}OL)w9MYrK=9#^L^ z!#lY;kcz-OD3Vu3iPzBCnix->4h|Qj%o}zH=p(C`AjWMticpV~@U2o3Gxa<0U57lS z2)i1tbV@yVa#utUFpkvWu5T3b;40m@0HdeRAEm8f<0}3&h$Lg#eAguwH}Rtcu!+Y3 zm0h*B&v3Bt`G$SfRKX@9$XqSf8ZWKMV}f?jChz{P@|{c;(1U0;+>Dc;Rv`(uX9n0Oe%? zn2obwq`RESsArFfTR!^}ohsmT&vKRKjw+nRk4xQCT*-GKnnxm%GYU}gnZ5Z^0f4Y6 zG1`n;EBQa3zQYj;|Np;Ih+Lc*XV0u`hY;C&&qD~=clIucbA*t6cJ>P4?6|YClYPb= z5t&(;{nY#O{k{Hz=W9IY>+yU%-5P6zGrhpYP;M4a-2j`-R46KWrKe{l5C`?PS?Xxt zyOV}WDS4?jo6HdK=3g$AaiQP@=v z_LLl}JPj205#NNy6B5z_9(yjgSd;6claJCNVwLIKurx{b9Ss-~{ct)WYW_}SYqg#| zI=b9qY^VQr668f;`kp+#I1bD4z z0bW7d^Mb-EL(i)WZFOA>*qpQ2$lc0Tcwsq99W^jfz^NY>y=tbA5?Fda=iSqHRb{GN z3O+&)KDg{}X-xIMFbJP`wM6V>>-yE@$185&T}74%kXBh-=39YBz0SaBnqw}po^*wx zu37DR5lpO`(T{tav9pIc-n+p`Tm01Y83&v*waEeOvcG?iUXEt}_D}Id93;f=Ft9@W z8VL6|Jo=Vx>jVF6854q{85lq^S)=Q=!~L&3r`BUn3D3^|?7doi`Y*n?V1C7-6Hl7d zm50@XW_}415Xc{V05I)de0tWYg)d0Qh^O})aUYc?Jp<4pG!(Hc;powut@LLDmK-`S z``V4bfa!uvof=LzAw%B+v~a9m3H~)xg5<*j6o)8SIUXJ>q%H8>%P&ks$LxA= zU0kbo$xYRjq@mNZ?=M14!(Hj9TB%%AlWw&H@q3egzn-eTG!CBJmw+GC6ir`9aLdz6 zc2Oixj*pjx7RFo1xFv(pxT~u)$AdW&$7E-SREo6h@4?4jnS3Cjd9~FJDg9me#{Do@ z{64GfgTDu}zi0_^gpIkq2xuR|(Q62U0BJt5roe4NG+sl$_f(~g)k-LI`(+s&(lk3%~PRR5(%i=Jn5es6`~ zhHUiSC}{1B0oVh!d6HSI+^HGXM3X{YWp-~@7-9I>%*h?IlC6NG8hem!TEZ6oyHy?k zOcq%v5Otv1!$S>He%D*a7mb+r05rZVhh z0gEpfS^iU1lk9Qqd>nt;q5_}srkj`%Y4z)g3^UOYG>$4I^pAAN%`W6mk7FXys9;BF zkOorU1vTZih@JUOWCoFQu)yw-`=e&KO?7bVv%QE739Y~dcWj>1e+S`ub}yDxV($s) zD-*h_5xfvT_*9I{u;t@B)cOx-+_LF7#^4EwI^jFCg7T!@;s=+cxBPwbJHH+ud8rv& zCL8&n6!SN4!8J|ygQGAoH_E~)^-W%$YvCs+P00Pv*Cn%tT^X+HUhd!fENT25-!#!j z=~z*DPhQ>E`C^&BfWsOZ9zy?GStVUFWSSJj00Z3y^d(?6igtzJ_Qz4c5@9%+PLNKU zu&}(k+l%6(Z14?69U~(FX1GuLFdk1~Mm249OKT{-dv;inR}FI0rEKH%c2Eh%%6|?r zSvG1Z>9%jn`;o1qw*KJsnh21Ai0I|>v*SA&5M{M%l*aJT>K^}YaZK1#ehH|EVucRe zdvIy2{;z!{m$ijiPvCB41Bm!uW~8VaFtURmi_tog^f{Gv^&k7)ivRpQrd;r26Jdp@ z=+P6txcXJL!9>AP!z$=ynu};eqs-&z*80XZ|G7DrvgziY(@XhZ?QDD(eo;sKO{h#L z>d10pg0^JW2>_sJyeCqODdOVhuF2dsQW%o-`2`x;KIN08|EoIVlr-xL-?O6%0q|14 z0oDy=@67TCByjq)G0h;WiI^x%_^^52RE*&js(pV?Sg$5XWi?oNIGOaWh!f^<=9 z)4Jh_K{oui{$L!d8rJ$j=ev!8zd?EQ;zzLZQ~7$L_;A`%4FeXpq%BV=$VYi5o-(Pb z(#fL{ex0vJ4}{H!zkkzv(oms=|Ky>8yz>Yp>4z@+0j=I-JSI(z0WU}A92k1{?P7jh zNk@5((y4+x8vM*GtwzHn#AN+fPKbyU@ia6dZ&NYfMU$Nj**hqmV5RP%b*6|K&XfD)h6J!P{233WU z6IEEKPvm{J5Ge%T1$n4|LFefcMlzJuFEE8ZwX-ZzbiBGNppnD2Tp8@e9rmbXjx1wP zOvM@VfgEp%K(r|1&ffUvTsT}eZ7_@Iftdr+sV4a*2i#IYtKVp z!9EThF2rAKb~KYMy?_p7jLEm9HE1~rr*R^t%Rov+go!BOr!Eb(LrruaUa6h+`P~Lk zyg6hC2fTQrI7V6K?>x}&Kng~_X)wx~+}!glS)aHg4@MreXm82DW~xjo+zX^({+q}5 zXHCfaFzzszY^ycpIu4N0J?Z!5^zjzO!?XjHD%NE4ncMJ+HWzj5OKaqVz0;^DX#tOF zf19vzhaZ-M!a%lY_Wz``UZxl^jKm-k%VGZIb20e0Lh+iALizqjR>q&~M3QbJNS|gB z8BUU~LaV4hr(&OyagMCqbverQdlZ%Y3>{5ra!J!Tv2o~k)_u{IE0taQX~fpvEZhH& zGsN=|zlV5hz~(o$Pe!KG!qGC7RnI+Nb*DVosvmbX`+SGJMu`a?tYVFPxsM;}-@qlB zsj4a1%GKl?7-=xXAB7{qmveMP11#O_DTJfC$0~|BOLs z73z|GdAFskSIn5VcSYwn>p(PcvgHTV4|_-|g$&tUJZ@Yv=0RBqgFtELhc*c({w~`z zO>=XP>~=09zqqC|Z{wEVHnD!9m52G*FgicObGFJE7qf{c85y}3AiujzqSo*~uuj-9t?|B=qK}Au| zlt}LQaKYxjel@73K=3TQ1C#oL;W5HUc2-e%Ym-0;>16q2H}%M^lJDP`r}wR+Bs~{F z^aPVmeVl-RFSh~w)!pl5QJ9oIK1RmLg9!Tw(>}u?9B;=+rpuPys5FE*SlA&>3Y!~t zUi1#-eSWC-&%Jn>A^RqX3nM2r{a9g)fRgetS04HzLVk%Y62vvmgto83)VMvqnwDfJ zy+UP^1(rUeOgA8?2D+!kIAih3)o>yYda^SxZ(K461rJz2rMa1E9R2-V;Be2+c$2;2 zsLuU6?0gL=0Jvq1TOPW7m0;3~kXq0%FeC8S>Hsb2T0TlxC9v%t(BJVx;le9@tkc_^ zpxJ8|N5b8gKe^ZN5EiPtk@25R$$wPZm2xjQ*mnnd4A3Y_T6wvZt^0yuma(tacQ1+9 zp1+SzXb13x0D+>KH_v=1Y&$r%Tqd+qNhqq~4!mb&;ucEwSC@Y89kMa@ShJZ^BSReQCG-fpgmy=SzUe?@-Wl_5ER* zkl!6A=U0$w#2@2KfGTfhD6-t;O+O3l?y;vB1xz+}k3&#I*?s3o1FLqfzxh6-;AS=Y zu4^82Fk+F(zcm}(@aJ6qPkSqqWkS)cwE!<{){OuB_6>xl%yE&3+(*W06OWvdoFtQq zhE1Csn*gSUWbh`m3kG{$8YBtQovBK zsj8AX&!Ot9Zjx!X4x<$A==dn`9EG;BUIR4w&2Bf&LsvG8L))j zC~n80HwKCDk*AX~e4?os^LjFMf*rKF@0rd~cO>bk6TLT?e7>}kI?}chAf;pUbUlcB zm!Dtj(WkdP`wl0!sIG$xu3I`dqw^H!3QMd&%Ih-f+$S^+ z|7;X--wt(uG3=Z?VfyoM^boIx#^$NPYi_T1nC}ON`%0>+w>i2}QOS&+?d9mec0a&L zu-|)L{`-DXjMbrgD`Li|qfZUXSNVbHPhO~(3Xf?;N#kU^K5w}UD?A=3VfX-@iC-^| zi%GO$B9=@7Kbx5qy=5$LdD$+1BEzO8RgtiWDGOm-{8afp^^tIQAHSJ zT%)XusW0WRUV|!p=c4$eEq+6_Oo_??tjn4GkOos`v@o(XvLN{VKxp;`JD_lVwketW z;I5S^KVm|s&0v1Ff1ntBgd%E2R~_j`dbcu2VefZ-AnZFF@amv88y zX1Xj6QzKpgNmjZI%rxe#ry+SHBGd0tXI(c-Fte8+c~7!fR}IL+w81!sJm)u)am!9O z|3(8ATKLkQ6ky!-EOd3GDtzG1wV)2QBBrz0+i*T-5mu4$Pw0gEqOqDB8ck&+t1Kad z3Gq7PeP1sR0{yrJlbqB+os_gvQop8t!oc_6idEk2ewNny0MiWF8Qt;dVeyPLR|io_ zh_>#psf4FI4W zKf4%#MLR3@lhK5^pGIA{04mjAsx}U@G)um_?(t$X!bob2FUr4hs5`11pVKmrc1ukt zs4l5@D-G{-=fjRB@i}~9imUIX<0x#AjFu64E?ZlG${@-QXCL^0#>X3yN{5B)j0Fq4 z>oNB(Rnj|x?A*_&jYU=dcbGGHjP{+NVB2(s=@g9~G`Hs6@lV6cO(QkOs~W3CkxBCJv<|;r|qkIU;(KmyPYWnkUFzZ#l)9&V`Hz<2Q#HiC=#oO{rd6U;$QW>Fy8t!VE zW`nUard~hN;EPH|9W%>1J8+}WnC(owiE5k%4?nFW^rF1yz}lKs5>V%j=$ zZt2krE&NO*%KC!*uf3qnY+RPT|cf-7$@Fp&(g~abKu(Q?1;@|fVE=Jn})`{Sj7M6r?nTZ~IuvuQv zr``Ih*0qZ^Mhx|g60bMdkD_|NvEgVD^t(ZcQ_vad!i)9oy~7I=ipqT3w_-E;%|%rC zGrb=%JQjNF;$}EpanJx5mo{$1?d;^Ut6IFs-u!^Z1#z>+3?fIK0saAjs)l4wYrd^e zr4Ww=6Vh<+_@Wy7oD7vZ3kF)Mi5#>?*N;>ap5Q-4VY;-XgUfG{tQs+!fgZ)gwi%I2 ze#H^N32f@KlnJva$pruW9$6^Swf}~vS3vrve!;{M!Q8&n>@unAYO>x1e{?yC4GFqD zljnIELle978TYWS^nn&W<}o~Zi_Zt9UdJye{WQ|O^nAHX?}rTi`p?IWo-YSU0q`vM zpUi~-$l% zuwug;QJ*DN-c){L61)k^wI*_|V1O~8lfaA8NywW8^1rubUf$ERb?w;{YG~To*-Zx9 ztjk?e>q;b}2Fx`a`6K>2R?i!`FBdl`^T8uu!HqjPme}In_d3l5w?}!TpFcKkJTbRVoD5JgXXLlud*vSVR^8_ z4Vsh&0Vt}{O301|H98ACVSo5(kiXhY%*B|2sMC0``9cbx_1v& zjClROj&f1~DKj!;xn6RlFbB~nYme4vIU zhI-TPR@vGzU5IuWg(iNBV6tpnNpJNP=8laSUM2oGE+OGO z7%S^hBgs=KP}5ay6vkLR=#4j(Vb0P<*fTj9z_ONjgy4gY=91TTxfZzWvz7ZeYJMT* zo_#{k+#V;!oceb^R7(L*LC)uhW9FYM}lY(?>B z?Qd7&>hN-596#tWtra(+(wq9(gRCerl9CI zY+?dB!Cg^_i4^k2U>Z!|BO7ar2mvxz>sE7&Y;AH_W_*Up@*2lr1nQP2-GCQD(=hUU zc&izQ(zkv{+f?LkU(@rT5%VCmJF>ZFKM3{f%RQraN`+$@in$)}m5QUFLjMneIW40C z9yMM1aGBVb|7uvj*2boe$Gh9>KlXKTpJ8HNEWKMcR(!7PCzyjq?_M@-z9rK{qlG7NZYJ<; zhXXb3r9)8lJt<_%M%tRUZ;SB|8WIRC(Cx z*pN2OZ+ncDYU{Z;zOmpFN*2mq5fSgn;NKa{a$3MyFQeoCns#QE8V_0e>B(V?fSDXy ztsAG07XG!H+QK&JoyqBpq1->eq^ZhZb;A-_62Ymb%=|ke@3O)zHf0%LD5r`Mr%9ac zMuvqtr^U&$5{P8BfDP4pbz0YQS%l$l7qPl;I%|wie$_39*0h@Pp+SQ zG#IP%ndeDXxwyCl#~!7ovb>?Z{d5J>kz5|$QA=1eTH=Zw7WLCSLSb-E{}YqT^bt|q z4w!OfrIN~loeM$gAd=5gi_*%OGW`Gs=P*5G29Ez z)_FP9SuTz?cRz{l&iGQQYME8uwcUm-)F9%T=1(!oXSWfc%nsJ7DrY}=tTl)?P{PxH zN-uW@s6S9ZvTPZsk~*cO*3A~V#gv1ve(%V_e@4IlUFPrd#g+d&G+^G<4BMUY>x2Cz z^!Ka3HI9DxVCPKYzN%2wT#4685{I(_C&sr$h(*N;lzWpNiM-SCWCZC&&dUU}rg@}J*p$*c6(iqBuXhjW ziXY)av(zA(4d4g#xF3q(VI2M3eic^9|MeNfwk+X&0Z&7`APlPIJ0$Zxa8qA= z?2S`MVD5+`&X1k}{ny#Sr;Xk zmNT_Cp>n&G1!9XoJ~agKf+5o&OwpTECd}|x7M(X++T-%Wj#doWQ}W{Q!t<3Jxi$%$ zmsQA*eJ$AwpQctxrGj+7$SmYMEEvfnj2=4m6B1sZ<&jkl)Mk{J6`PI6fxCE zlWR2Nhq6yn^``7T1^8RKeVV`S7iHIrEz}HAE@Y3_Kw=G!+)P_1$A~V4gbGz*dn--t zodYd(f@Z+=c4$CAI2bv)1xpp(XZUnjMcc(q|2Om)p%65p`BfH zj0nk5fmJF!iy41G6~zo@^ZLXoh#HQRdmx0UpRg-OUtfk!=hC02%@-X#DVtf36mTrj z!8#z1A{}mnxaP_8!o@qfI;ry-?8vtzVhGo0frj+V&7aW(h=}G$b5<=z4-@xDQ4pZI zWW-0w+~lAIWc+0OyO%chxDJM-cC;Ayr;(ns*X)Bval70sm?)vH;_dXmNd3l&5<`{O{zVt zlS|F)Z!|K#rmXxA3otHPE`R5(yO)4I`5o}W4dD9zX|)xzxGIdjWRdO!JWC|k|JNmY zU8Q$8m_fu)WM{>|=Td?OWkxY!>g8U3G6edNZyYc;F_ApX<;4iMN0$4J8Nl@N!dso} zn!ob={ODu`oB#E==YY#?PTQu@(?h`Z^I!fY zTZ{ks?bljFwg-=>j2bG+=QA-~gv%s-mA@XZ`?qdWv&T$u#xwlhNo|*Z6A=b}X`FQY zE&SW1KesyMG#ViKevkz=INabUMOI&q!L6w()n9*>z zRDqY&zRBqSzwYf)wwCGK71Urr7+L0EgV{u!@_+HT!j)FserBK573S%akDmvGFf0{#_S3iyn1z6C=TR2eR{1D$FPo_LvlWnEFU z(;4jl8Z$YeIv0-u@<8g_be}grqTvA zo|FEYgBaWsTt^0yNac>Q&~VWvK$X9Gesf`7B&IC<1E)Hi2G9d#Wd+7k#_?GS%mKKk zpGRaqrc}G_CA6NYdHdGgno)1(%ida+_!#WQMdMk5Sl&O8`lZ&ch%FO&d){{JPUk#| zG8@@mLttcWk>%(rnpqx8+%xGEm=j?dN`_e~K?W;Z0Cj}(k5;~IPf%8~wK}G1mxqupe zD!SXaFF%uh$@up7RTd9+NrK6VoF3|a%iS+us1}&6xy^rYMC?EXj+O~d)h*P-e~<@i z-UhDf+CFXj(Mku%iZTpUx_eZ^{l}XZ;FN^w`+dmv*X2oFGfI(ObG_G;qMI50x_JX( zdq(&e430Mpo*iQJoG%IEb+MNRJn29WU((p23{Ibyb{FL{2(~wvUng9a)lbEJt4^(a zz3S+R5LvWT`Jt~d;%~_GsYtJBo?YF>8dwdPpkQ;VFezI(pBjMtSgRG)Z~0|HQ*A&g zhZhcNhHR;23UlEt;Ua?{SXV7x{86zz**&oYN&jo)KzbsAK_sCmqZ2_ciPFdj+=3rm z<`%Gto*meCzv|axQA|XSdRKTb9=i zF8a(*>GaGQNKp9rx8Ky94ju?mP_;JIj^5S|&8^HH@hO6qk9WMFqqcqvtI&nU#=WKz z7=0OpRYAZ*qK#pZc*xqKb4_N7Dov|fo*%-AEI`LC*T?>i!qziKll0>!I7VEiufMq> zdE(VTD>WEi-KZGyuTtQdOPR-|7~xE`aK-H?m|V1a?9$0YNZIXt$ef+IFvrMHW-)Yl z7hhPo|NF<|T2uha2LINs9Hjsf%(|3l)u~6RJpJ)tzJ>pb-A?Cqp;j#`kiM@%c8I*n zM{7!@MKH;+zmW#9lJ~Hc>S=l;7ZJCFqd*xr%~)s_bSCWw zQxsj0)q2#UwY8^suWgdQ3-nk?b_<{Xktm_QbNwXvpvjnKPC7DBZj8&lfJzI8J~>sD zS)=O+;4=$3)|@$ zs?UgPA&yrEfz&R`AJ378zvdM>YQq?QlpF&qCey0u>OL&KT5)27eKf&v1*}lRDch2$ zXvMBSrz*KeQj2>geps@4HeB0Dr4sLNgz8w%lKM+&2G=|aWG2Qp9KCQpeR*&uJULQy z*4dLF`1dd7qQ&_IJJ9KsGHhZ97nD`=dRW}m%A*~@lda?VRrnA9AOAteQ14@=a@|_e z$_#KR3o0!Vd>r&#BI`V7`1aY)CjpBa0I7! zOC6?JMrL6xQic$nT|es4r4?a49dP>VyXsoj)Xkqy{%E}%?8Vu}VTug2@Gp3XvXlWf zl(E58iqq&}&)a7iXl?KY4Mnf8si9U88SK!9SGk<&*JIJgQakIP*Ux@F!Ti*<9k)hJOUGp<0{;vWui6vtfO(y3c}Y1+dcO_;Gy()O``YO z_%-dUzdT>u13%aik1kN%drt*mvYjWsm|B?J{&SG!`f?l1yolfQMm65N`1VgwFI+BE za#Fa|;czqMy!|i(q3rDdw+F6=)$Kincggyj0H?K3zXy6^(~cYuv|B@m%XzxY-l}2m z!kW-%v;z%Bfr?gLVf(!@%x&UPU}JN#gCSY?lUINu9mu0n($I_^#^8zw@FND7<!)PZC1qBI)R-e;gFsrO(sKc;XTMB%K6(yQ0l*{BMbwXn=18(?Pv4~@-$}Bv zuOq0P>dw%B*os)3VwC6J(|=Z{KazAp32#C}n^8v*+qzIuRe*;o;XylluV-baZ12KH z)$l$nFzG7i>e1_JV?Cd_@&GVcMhc-Ejb`kP?&&c?*fT;KxEboqCB6z>H>ca-V<_jA zfQYoalXyI&nNv_R&CcNtDEb13Xq>x8}9Ce`Ei1~rg+!$p$F+?nXg*s%l)Qo@UdBo}{`9N(( z)VIf0_f=2O3i4P~^5}a3!SWFawaPpVI6WSF#v6Ct+=Se&iS8-`IMv^+gXGOGZ%%b7 zoMgSn1$MBg7ABc_ffWiiAY$$n<;42F zOZ_-#@xR(TdGGUQ&!N&FE*huTY^5gt8syWZ{^TXD)s&&MX-eQBlJjj)gK4qmckHj5zcMZCD zG4^;55+zXF*eePE&m)S^^4It{7Am2me9BNW|+E5 z@B*!szq@~hK(+g`-?CCjd8%@fxsGh)y-7*T|AI~f5xCQJxKUN*{1H5n=ekD)pMaNW z$0>cM$$fSIWJ8AVYP`7!fV{slBi;6*-SV^>Uu`vN3wkgs|AlaWIJ2n zCP_J{vt`qPaQ%D0*~#iPV+L5aqrj`^!QB}}gKg-`7tZx3?f0_)`n;|oPd%lvgkjeI zs%-W++5{6t2FrK>E?7|0Pwwf09e02vSOjl3N`p;Jf$lmhU`ulEdBn{Uy0Rq$=s104hgt*=`>oio}M7ju`>0>U1S1mPbi z@u#SOLhJ@`{jQV1>G7{qznB~uk`BJ%BzVhmj-0c*7lOkT{>5M+{Esi|yaphr%3d^T z_{K)a1eD43tb`X);Rl}Rk8#zjDvzgIDAv_oIGC5|6#=^nrDF%FW1H_L+geFU`)pN+Ygx%G}&O%OI8gJs~L(J<}57c z2p6w8Jxh%6)?3>t*L;`T(37+MKcs&heF#6@z5AW#BX+f@p)b8EuP&tjlyZs{YG4n2 z%y#{nH4V$fFQGUJcyRo}k{4Z^$3o8phv3C4KXjEjj(pQmIE?@?*jv}kXpEon4K~KV zjw#?sR(GhegW1T3ZCRKTz}bs?VJxtpzQDBp{yZqXwjn5ro)_Tn8Z8acm4cryaDGH7 zM%i2!y8vJ#4xOZ5c@inZ59?sabF|I6^+UJj^Dn*G_-lk9!2IF z8|DJ;Pc))tB~|G6rfB}#%Fv&^-y@8JPb0qL&@y}`uCJak*5{sdvQg22PD4xV$8cV# zZZ5-v`PX2p8Cl7uC!9K-AXZ>WaInT6MylA{rUm{hw%q@~q* z)QlEE+t|0D*x&QNJO7Z_Vx4jYx}Fwavw?8|0QgNM7y4pG5pkfZ49@K%Q~FAKovJqe z3vj(TzdF|S#g78u^jC?!c*=6tNu1&z``r-5IjsZm;#7nto@&m8A!C8H*!&mM&X5Du$o76LmF@vhhj_-)ljtbpSG;&^O3Ijd7dKN7YwN+B!)p{ld+4 zEhb#BO=}8aHq445q^eXdgvSo9$w$ld^_PG#1;>tVXy`QOwA1?Ns~+2wbG{^0mZ=Rm zY~Yaslgo|Qx^qz;yKJy;I36mJNX64_=ypn|iwmwZf00yGF%OEIlwN~w9sHT<7&U)0 z?C3r7<>c};2G`I&v*yF@1$5eE1DfvZP)%bWzq(zWGD-$;G%SiEV}m`h6^aE_zmEh7 z9=*Q}kb1lI+*I-|?N`AH*Vg zF&gLgh10J}XLl#kJ0|$iA^;*UR2?-ez<&3*+r|nEB2H$}N#NY+w**c@0=odWi2CSy znY+#;C-HI~Zo|*5*XyBfe36_w9ZAwxJeooHC%ET{KU+>b+nB0LN?J>IUcrYvyP zliO|uoDr@YFKB93c$tE(=GW68NzCTh3_{<&e(iv{^BR^w_tbSK1bUb|YRa4W*Il{9 znPc!0_y6ryFGSt(?Rip`afc+`Q-Kuf^i;pr2+?ev0JF2n4svyOs48J=Z5KSEhh14nSWn>(FO!6 zTS5W~iR?4@vv@tfc-p0*Px%Bdh?2ZnOB@QT!)RBl(Q9)*N31duaZ||Wn~~DQd#NW z)oIc!<&kPb+{7^$PJzSvr`H-u_2uTT_VHWlmT_HqFEaCcO#%^W5M|HvlJ@QG?c6!C z`)wsB2kx9ly`G0>iBF!fkdI|7%C&LkE`GhU+|2umL+6hNaQa*TZRU+x&MDRqawP$p zcJrFD08ieifhy0mS<{}%H`fX$lL8zL#wgOVRCz^n&q2Ip3rEaKcV^gtu|10o;HK+- z!$7v=*D4ho?>MUof>u8@G|U6wpJ}F9mstQ8ac}%!Cp=6V)UnEm-wX%W4NM1$qCSBz ztYJS0@>}Cguh?3>)dkg)E~Xt2uCLJL9EtN4$~Kx@l;s%ekh^lVayEjnYiJW`J z@;A{T8K9FB9Vwa|9zjq#Z@KgllM$G17}*?Ul!1wJI$$`xzQ^1F+G5H}buG#2A{DNm zn^@r|Zv(&F@dykgD}iR^{NT7XL^g$~(hBNFMigITo^I>9S8+^gFkdSpv#;79H~kF- zY%MpyFZP)!nheGfZ5b5LsUuMKx?4SIP+mi@^!Prb35Q35KJrlpGFzJ?8nf^JWbwBb zeC5=H7xvfm*;x>cR;`(J~%mw4h-U)pNCM0C|GKX^`By87s4Mv4q$bEYyRy~Og;67N2Vm zQwPiRG$+F`4<5+M7+Y2GLLwhlHkn&n2w8U8yR!)26JHxD6BG>5+{HYPG zGNPiCNq_Lh{EmTev#{`p_$(7T`!*|Hn@NXtE9;9dNpAGkSh z?rxkHI5HN6(;+ZG!S_pvI0S(R6>K@CNd4Y4yigK|sVbUaWJ(BDH{t}W(JM`t5l&*y zYRYL*$9tZ;nj_qf6n8ml<0vW9j3YINBG8N-5?vE6ynoMthbX4!#TLm4Q@9mq($EV8 z$MLFFPTuPI=7hF}qHJq!hT86V^@b**Jl|o24Z~k~cdZdCP>8>w5)@naVJj5PcyA1Q z2Ge05{HW59ITunkI3)idgiTlMZ6^mM8D?d*V3XQ=<$O~0m*+Ee2(Nh9PZJu5M+lUV z-{Z`Isml`gb+hS2O}GI-N$n8J=NgMvK&twJ)t1Gwd+aFE4E$l>t_7nlsJpwny57sU zfEc^+T$-*~{5WwP_=8{K3!~5A15Gu|Gz?y&j;^&HIS^j4bxiJRp|_<<{E z2N-@HZSLyMZu=4SnbRkT@E`DXHVM81_dfW@s)Hns+$QM9DcZgRCj+7wp9%Wrm21%Y zbtlwud2LA$ii8{hliTch z>^t9reMOj>^EUl==`;nr!N4B%04?K+haEqmw}9fhu!?%`ih3TFNXmuRPvS)}i5)%c zsO}i1v_VFl#b2Zf*vute4jrwMOY#XE8M_5|W^8QiV{HFr2>krEIt0hI0~giRN?-p@ zx8rBYPzSd0!e6C5P67W<2l%GHzHLH0OQ@*ay6o<%B_v*TnW5dX?-L#Q0<*VXg`%w^ zd^MbI`2Y$hKi5?rndbP6p`YC|_pVRR6z4z9#Tj;M z^*4|Wx}@$%OmeokA{kTfQO$BnQ_eZMydC@Tl$2r3whLbCko%=BIBXr8wQ8~843BxV zK0ozRocvb!{m!M+%MmeU5ZT`~tV2KI;rWfWE~F&`npq5il( zn~n25y10}$0Ra`czJev;X~6K|OylmxELG24z1Wq&oC9*qosXPx;a?btVUjAncNElw z?v*rMQ5~O~_#xA+%+)KR&a2JBf-N2cPlk4FAXn@DP~Y-8F2MDir%y_B(_(q#9*1f0 zQ6@neyo-xs9@w1TZ*4yu9KtjrQ>I-UGA-za@~b)dV}#ceIc->`Mddib6Gs_M$XKPrfoDH1|Oyj}MN@nIoc)ip8U`=wyg{8X?z+N3)_*uVCB($0Cnm&13~Iz7!lO}V6e~RV z7yp)@pp_MY0|Qyf2>8Zozct1CpM=4l-ky&ZRbF=s?cE%Yc~rkiPk?+Ou{G;G)aV{# z4_1b?#m3#`cM>B^TzUQab1WNo09Xh~uKAWb-GZCH|}TRnPZZ_?<2& zuL_oqWdy$3WOoCdQNitcEG+_mX`Cn^3~B5ojn1OuVhB4(957{1G(ZNEVgheMe=c16 zk*6{#V!F7sD!3tv{A8!0aJKThjn$s^X4VvUw0oWC!y1)BUVM4d2O6Rrqm%xIM(OLZ z9NQNkc9KUeEq{ismZ4Zz=SOZ%L_0%C(G6DgiZO-U|9{V-4QqMErWUUzz}3RbwG~nJ ziMY%_MKCNZOpbePZC&OGOgh`xl#329CDJfo0EWbP?`yDLQ~md{^lf*t60^Vl0rb90 zppT4oc+a28B8a>?-zrqK=nnnUKDwKL_WPEl@PAln-r0)p#toI?6YnrU)B$-zjHu72z?tn!ngV3 z7HHRTMo50{e6_U4>ptC_022K3*I)xmw*?M{#-kuJvowIP1p&~jclei7G7Dw_J5n7>sOW4_2*~N>~ z0rjGvzG9&JaiKu~PIps#r0{iL=Y8?n*;#UlPL2UZlh1Xo{_DolSN@Jq-N*Z@Cefs2 zQG6#JFh&M^uMx7W|=kNK#1rOrc zK`6PvC}*I1{8-B8LE`2X3G+wr7;{F%%TuWY@aP=6a`kdNW{#yLFd?{X}; zM z_Yq;(k6`^6)FEBO>)p8Fz21*PwROdDUJ2FTsv^~-&ua6A^A;dcww@D^=gY{mG+QIfYB12z0OMH^-EltNMj$-v;T z$?8#>qgkyn{!QqCX37U+M5(q;QBqNKGKd6EKO)(7{DxN;3vo*36Gn03o>hm_{GZwi zzRkY2kfiB4hhoQN6a%-w`)eh+*5EVA7bP*3{mDz7m<6Nnb%8l6($eqkkiIr!jzU>W zzeK6?sQMmp^FRx4%9SKIqgto5AUYokzPg`bh7lXxAPOP^zuou!{(OJeWBWTuN-$1M;5SF$}RYb68*vg zSO%1Pp;ir%?ze5}aU9GAK3_Tepc=R7O48hT>Hj>uJt59rMblK9Ys<4qd z9+SJ0bnf6Zr|QzL_Epl2YsrMT+NfpxjkFCxHv$OuU^JK&)1UpTy!`DHnDRAuGeV%k zLA(a>=HqU)07jM~w~;i{s~HL)xwac=)i$gzus2#>s`P!vO)YxB?tf0+WmSh$MiZL0 zShFU*)1-iBl*uFMstKWaotJPUEd$C0seOOJ>qU zs)+$?6m8;$HqYM_Q72RhGqIogkQwTj&}Iy=7ak<8iEnuJ>{Sf(q-&4lPM}MslD~FA zICs@0%<|HKhA(7q3ehwmF(s0y+4B({k7yrs`~FFwW9kJbyg7OB*0drv7g?Ed+AC?>21LBRDAwqQZLb z*S!xeQ}*R&QGvW9kA=;}?1#e95#HWr&O^iFY$lgJ+de^crKQSb%jPc?e^9@wLOzIH zQF>zL_8{JSN2ua!QMT)YciNnz)j^h?3CYjTG;r-6<1@vb8yK1nDnh#`H?JxQs@Kc^ z7#8R~w_>Lzj;;KHYHNG+T|Vb`8Kb`Kij<=vW=u-*R~FJ-9kOfF>~^^`P9rJ*AeO=N zxj%>|_6BVw`wrjWpYC@v6O#5f78gB%S($A1SJdMV#d9gs(*~p+v3 zE^c@!b+n3b+F?v15++wTI!W+IHG7^|HkHj(LAzKs(U5|N z>-#eejKzrwEU^Uc;d847Rf4~RA37J!zwUH+zw?bws^emv;|JpwSiio$K5v*SFXhBS zw@2fK{@>RB63r8kvG;NkT$A0j*7KV~KYA7!iOV*EUc3|?9F#vk2&7>@AskBqL#god zS}TQ}_06oUS4oF+F=!D!cN5-Rj4(o8u4@TouM*>q#V>r^p4B9MQhp^?+s97sFCc2C zV*VvfV*@C-3BHK$*u4n-Xk$Z?05~D|n+du2t*gc=ldbrtlYE6iO0ndp66YJFW`j+>i6p8NvE3-_iEBCwBzs&)cKn`=LV8cfs-^JCPs;(pBAZr>I5 zT=$vvOZ@LRUHYnn#td>~v9r3>8TEFtqTH19K)M{UqXY0v2rESXw-Ht-5zd;m#glWJ zJRqasj}a_l-1QlU-}u2sWuBIAH#EMKDSc4bGUnyUfFZe05X8f1LBUrv$x|zd z=N5E)@DH(x%^bupq4mSO#>O0~ueQ}O>VbkEM3uzqm#4L|%PnFASmU+By29ghdnr%K zEKEjSB%9w6>_RSX9US5T@s<`APjLF~Iz!8>OkW9NiekK5EO)&%wKW;|y)Mxr3QRk^ zn{tiqA5;;D!{koi9%F80_{yNE1%AD%*MzuMzH4Qlbilwb*ai7D08Bsvk`Q$)@?nZ- zZEe7J;9F&4XXEXZzp{n?-pc)GbnRF)_Q_x(&FTL#-o7_NpIFL_Hc9O1?^&7D%xTpd zRk|tq2yX7+@Hw9_JZ)t{kT3XRT4o1Td-%&r#BR`5qkImC>{Q`0+iS?4!B~(xq`mOT z6SL#S&uSw(#)%x(+9nckm}FXe)9f(fyY_3R(3ci@k0T>RJ;4k*wOozpI_DgtX)I?3 zE^6wdA3wa>N<<{%Yg}@M&=Cl!c(|R5GG}|gGyg>DB%Ch2d+t-A?EBGeHynSBH%8)| z-j#n7w5l4DeDgDnZh2x``ZI0i_w|yUOMqpNLXX{YGr3X-?~V!yq(V~@TGid9;@i*t ze(7XO0~!DR+Efxr3l?u*?OKQt0GgDLS|fIRn$^> znLz>59{F=+W%N8Zx;2qY?t?&DHA+N3LXsbX_@34$(646vSfpdrwqhuurv5NKWI7$z z6jf8*+v_qQ=)82KTa}lI7%bU$b^VG`*sQ2r)oX{<^v6ZQoOz9in%iIbk2FlBaqE?W zcTHfV=fZ0W^bC#gr3_6h{SqJ~)b)8%P6ZBQPp6LrsWt~VV!>f;m$8boGfUma&nC zcn5io=fj1;@bD!kvlZC|y}{WC1~diastWPnJ)n;nQybcNd^VX=}Xo$sP)#F z66ZXP=eFC33v-|d04PTQk36e}VwyG#htQ9EhZXcB{f?LWngfk64NK+59~tY;LeAV$ zNEQt%olg~7s>JG-?kq|yi|tunz$#4>BQ$YG05&l9QNm= z1s*DUKiLdKSdMJJ?UtkpG=>Oag?!5{0yF9hq{DEcl~{7<93^e6EKU3*$UudhL!a9rjN~1CnPmkoh84s%b z{HT~pl{!k&C?7n=Gb=!R8`s*yc*=S%CCU)Af z!zqeqc~m^eqK@v>*G9HlQ8&TG=R?gcUgq*arWU8B(=&jt3OB)7GgTZ{Q*+FNtAyer z$)RkNUVN0lA$shP7w^O~>S|y`yssf?LmjuEN?h0K z)aOkCuYUKBY$~8g*%N96T)5MfD7j=)J|DyIl>sL|w#THX{WtF(Xjokw5o5NUKfbG1 z!$$Gn`O^`NiH>!m|FwKz88~STnGp$^L#7Kr20cy0d_KnB8Q;hk74fpT0KUT*@tYMj zQK`hw0@E-k;u=+L{)wBPU&2d+0+!lSh;oP+fhK-YRiNs&yPTe`L=V<3^n;05WbKe| zo1a;uU(b8s*SNQQ27{Uj!%AeCB-pB)bX?^-a3`wrc=DQ}`L31M=vitq#s2G0OIa-V z*6vI4?#LU(n@xsLsaci#oMF;;p7z3|`?4^|`RH8zt9JDn_#SVQ_7M&b zy3+fkqw?6i5MsmJ!V`64#`}vI7R7>V);GAxJ3JZ(AK(*1a#z8{LpBQd)Sz^16Uz?F zaTEb^rb#f`;#sc=a0G2o$}UBbQY_paPL+wCa%P#qPa4}L8PRh{U(IHF#b+}w#Ul9GWL2-c$N0ZKtgecct_PPDVQl-FjIl4w30F&5d(6299vvqte*Sk@dSXoK z-i!A1FaqR$k-75p|WQpDsk{W*<6p`n8*F| zfG;surGL)!A8)XD5ix+i3(pjPt1Q8-({mnSn^1cKQH>+`#WlG~Ps@zy9eH=*iU04d z&&hTo8zjJqOjl0{#-Bj#MKBMyQnq5Md!Z*f|Cx9q5+2ag|vAD)bqebTiB#_(TCp$`c8rO{Ln6 zAD2zt5cOf@YaZJZ{oqz@kz?77& z>3KWRYO;mt^WG$2EBX#Uj3F(*sResLbysy$aK>x(fH`G~Kj2CJO!zDEDb>JR zw;}dMz_{5}1Z;k!MOJoY#ld}s8;-y0bB$oMRS-2J+HK&?B9~biLzem11FJ|CTO@s%c?*~R&Y|S zqeW~FgAXU2O}gkxreRV39_6C8FtZx=hO>8UQ4m;uLSv3HQhiGSN`bFC)ubAyZ61{M zbMGyb95Ftq(s$__gEc4s7w}>g0Sx4jkbykvM!0<93Zczb%P`=3y&JBl+$s6AN*(!pUB^TVa`o@r+u4Rj zF$fcPlJ|zl%VPqWJDY@>djfCuO_(GbEa|zRz07%$Kj*B8uOw z$VT@6j`37V-q$OnYLpSp7J#^;SUSB1;UYIbvG=>;96zNC=tIGC0tW3WN3K|Vs3$Oh zOl%kaiU4A;iC6kaT8Oe3{xaR0lmJNqfghHAc{#$7ufOzTvuP_zWjrpeLSVH0mTW-; zG`)O+z`Q8E>i5p+v9>cV#i;7q34G6b>ft<{a6`n)9saQ-Z3*NpqBAZrzR{Gb!Z_fe ztfg`k-&~%vfaL6p3d-Gmr%u^G3PYs00+QX`_Y9xW9%w|RhA|zHHd!ml3;JB84H>>q zdrokHS_97?|zOATDrP6e$>xFWg=IEs*0K90MqP=P9PIBp3U0W zFm_W{1f2wMFj6yimUjO^j$2O2#Rdxffn?QNasabP=W8kd6Bjr;Q|EbkGw(P;*q)j| z1%G<*`*Rbsoowif;avQNmB8|eo}d*VLaQ)J$?~5@eDp&VBaRULbTqxE$I%Vbr&Lapj4IL0W!PqML!&Q-D1~H)STDmxfn=H=3QN68Q75Wywb*pk{jFqE=NX0f)~h z4miDh2n9=TD?v%Q&Ei`&JS+tz`q>cYgK>O&^$AjNmVtA}vLU!YA6hz&f{2h-Pg$<; zIaopNNi5OA>uT0G%N<~;i5hgCFu~y!jB@aJt>?W=3TgX?u|rqz?f;)$Oj%RY$DMAI_es0Is1pkvYv%_N(LSaz-g-J|_$C5JO54Tc&IT0340>an`tfSME?+!GQXY6BXb8ExFxvRrPCT?`m81b%EXPhnL3_ zZEfml&w_bDwf=$2eCrgI(}2Hg4WSYtjFkR#Jj9*`COn`69z&=XN~l|SkFj>KFyCWw zqpzP;in2Y7aG@|o{n^rYbI990%4f%#rX5I{Ya&_AQqSBhqqNfvULtl_QD(O7xUq=T zpV4WGtD3Y$*4idK2!0u7elpwbEF&A8p18~| z6R^ZX?>s{r7KxG5g5x4Fp4#{3icHQTxm@~%wY9ZK#Z2wc1fr{bQAFETMpST42bO+6 zm>WFoS@an4SCa4|`S_Oc6Jp%_8Oof|Kn&8ra)D|X8;|UIyXg-H zeM{mA{AKrYyx6f~-tXcOuSKW+7n{#lnDfpSl{A`d1q{&QPqHOxO^1F6%t36aJ<%9ZO{4 z&*>|qx887=aov@;3Xq*`KURrfW}d8S?WNE6J;?8A`e%T27-J7ZYkP}PsM+aLzf)ma zLY&BRj4n5wF8Xi(M#Z1}kHLROapjn@VK%aXv*aEDvu7<1B=>RQJZzrRENm($y@jVc z0gbRoTL_7Sfel-i@z~c_*R@}F3FzLdC&+uu@)MW9nEo=c*Sp>@5&sQ7`|>CmMZJR> z<#u^7NRCTH*z!WrTEr!qT~NQSR}B;OTulQKJ&f=HSHPLT6l3<#R)7e3fA#8dUx>;opHOXPb?+)jurqW1J_Rr!as_63p)izwiC{XZPV2s`)@y>~> zmzG$O{kFoiHk}BU?OENs%e#E0_3rCW#r?ZMKi7h$_p0{f?|o`J(RKto?K?Yla35dg z)ewezZ8+wmDMGQQ$ilGgS3~cckZ&s}yJiM$K{$EVrKdvVuH^CChXM1>JB@#N#oI*XDgK=S-Yd3|cnf`-#RBpAcai~0CLn}Iv_P|wWk zQKqp_=L+&uE>9%xM`xr)&(J=FGdKBlOxAh+isI9`XaC|Du2;_Cz-_9ZV0;)QvOa3-6@R%F`SQex?Dv%^EjR8D!ROS|* zM!puiUP3A*9$*yB+T%71_T(25IwZ#Ur~Ig6^xOS!jSSf93Az~Q&gaRGho8jm%U?Kz&YxWJy%ifkwOMp64g7NW{ae96UWYfCT46Tb7X1qo&5I|M9TKfXHemk-47RbI5iD3VzmMn-HuzjX63zq-SawRrgcpY?gL5Rd^st ztphW$dP?7DqdcGXQ(}2(&SO1o%3+9UVkr;66o_|CO;fDfFGrazMD>L3iM){@2U$AM z9+Gopfk7bmOwHOR(XrH3;Y9%1eH1X2B^79WL`rGgVDJBaHU-ZBHW1-DX+a))ueK=~ z1NS{y8wW99vbGhLh(i$JL|XTO-UK`_LQNPgyD`yFQALkj7#SRZ&FYWjJ?3DY4PT_{ zzWR?8rAsKIKT}x+>01f!-o|vcKaaM)V15yy821JP=8n0 z8>b_fxv`Q*5~{Z=N;d`5d7lcNJ^;Va^L^VxJb35n#i*BlTpyK0ni2og*w{9a!i7?j zC*h|pz$b6u1UrS|I8b)Zg$52CMEgW*NA!2RX`0t#Zz}3w+224(yS$suGG<9)>-(e} z()7Sh=;_16M2^M*mR99~d;0t@@4veSzhPF&H(-PEqCCHoDKaotszSIH63|XV!^7iV zuBYvb)^JRTBpiy-L`y_J7bq@b0Ux)9gx*~LAr+{Ri!1!jand@#UJsHt2l$^IM+WEL zw5~8ij6%FeJe#CsLBbf7MFwQ=1ogsfAoIp(nIS2n{6r9g`p#v^LzH(KUF`cNBYSi1hEKg*wzZ8{^hijKL+^$vgF2LotW$%#Ho&mGzJ zdMFS_Az*~cAQq~~XxDt2U@gxXdwx>%5(;No;UY?_jq z6@y6M?`hd_6f9r>c?{x6ioV|;E1M~+&C{zCrKPXx-t zfw){xBYKTfc8gQ;d^k6oikq6AaaY)nG)W&}D93u2l<%4XtL510TXLiT|6ctJ>ga0v z{PvsYD~t=7*!!Q_$;sguGwS{BwB|s5NFIEjsG2%4Xr*6~(qDzLAI+TDwOe`6w$PkV z1Ed$=q;4<2UcIkswR2j(aBxZm-CA(|0uU^sJIBX<0+KGrzlD8v{GqMw-62(1D4i}P zoJ0IOI7sk7IYeA=sapaJJeQp zt{TWJzEjFe3Fuu4g(VbBZHY|(D&Y#5xpMv6Ulf|SPCodneM%Ez8IQPaXXAZdSj|g& z!oZyd%h?gQn@aZ56@x3|dAx`#gZ( zt~(p?G;#vxgYXZiM!Jt+{y49mY<#}Tz1``FeTmj2Fw9e&Z5#?^@opxT;yNotosq>z z=;9=R)s$ypkL`!f2^~a1G;f@^w9}1CnO!P3d{{`G+9N;qGlQD#7iWiOS#_5_q+rlS587=Q+AirxPuG++* z*XzcKlL=^+2-5teFG+w8`mMr<{w+yJ@=r`&Rw1OW{OveES149eOMSk_W8iUB8Ot=V zfNEjd@Qn0KfeAo{+CS}hO*)yOP(?9K-oyk0oNxI`kPs9m3AiJh3YJ|`hR8MrCcvKV zb^+QF1pKz49v*tmj>2!3a&Hb&O6k7n>Y*oMjCorJ4#3l0JTu^ni(10=&O2G|lWSgO z({;aEQ{BDHHL>N;{`C?qhxGJT)EeKTt29D5v#SR!B+w0nRyrtZ=r>@&H%Z(G$R zk8+Oy`T&feDKilQ*!VQlGOu&#>XmtayBV`SLaB@%`{hT&Jk7zTfYs|4%L+tX?jL?z ze)<@geW~w_Hyl*;{NGrqq4eMR>#r-G=V_y@J!a3>o17Xn1t#rAZGIIKolb`mCgD&qDk`iON5v!f!eCC8?W zBKmy9vaAvHx>_w^OZpH#{m*Cs}Tx@M}xjYn*}@2bo+w8*Bkxz zgGqw;Uhv8T1!w2V1%~@-8tL7GmSNqVz$ZTTF-+kQlXeqG)Xh68yhimnG;sJvi`k zmHqh&>$tKFJCK^iQ)pOe7UQe9etVJ&e7xWpkf_fz9UoF=F{+YPm%*Q?VlrpYpg~82 z_t?v6=pnk1a^d+&zyWtnU3YJ}P-|VClVBS_0pYS_R_Q&H+6t3A`=Vs^xv%e|xKZiV z8&RqsqpqB115F~aa5XY#-?1=3_*oayw1spxIO@6cwTG%-1%9w6k>fx*>wEU=>5Ow~CD ze3Kv#Iy$dtKHa%r5D=wdgMf_xMB#BZ3Wd>YzuPX0b6dg>P84?;^JM8?^=J}9TfCFw zM>H8CozLw{BGH-3F9&%_m^Evwqz|4_ZQA^OC$%@Gm!ymkn5Q`=WIaraTkqi5(M z0|gG4!~0q7_|Av`&bnXIyItuf@Xu#Lc($Y_~+`6lYI;$$~B7Mi`3 z8U0mA1WsoQymyL*i6K>DU{ERcuMbq75pkhEkXghZ>aM$fQ9>d{Mjp3V24yYWv|myA zqjxHzVJJ1Odo|R*u>=YbbFZnY>d+&@-Fp%}6lq}u4(Kp+b9KE4P;%lB^jpeTL%xVC zseb%47XF$_!id_k+UH1!S5S^Oun ztikBBp*LyrsnIdlt;YWy29FP+LSZQAL(}++s3GM-$2!fG9){Eem#kbr*V;N!M%-Z( zb}Yyk>WbmymrV8OMb?(*nIPW;`~2L*z4$c{bIBcq-r9`t*9{5u6vuzx7+Kde20RkXi|7V0$T0NeN5WPlV&SIGO3jU} zCKb9qxn=0ZJK_#rOS0;{n!$etJ~hP`7`ztEZzscrT(!e zfmYgy)W7jbv(=t`B==Y@SzkgxyJFL8Qc2;dFJHmx8}g5a2cye-wZmZAIg8?R3>2S$ zZ)2?}R6W;z&H8nkwt{{;6)Pdn3b5~V2mULC0v8MkFd+yc&iVOc7mx3G-`+ekO(3`q zR*r+!v`>LoS36611HUT_PH#i21GG)Z_c~w?YnKDm_2(od7Z$F5{+#VA=wu@NO?>kJ z(!bmj)Zkf1e$`*9wqcn}R66(f@7^?4GT$utbWK3_QeWMO5W+_ZfwkFY zLZ^s8VWkdb4QXE-fETJeyK0!1VtD6P&SlO(#pj2&e}kf8{|RSHoUW>@*q0oFQ3)51 zo8xK_T~%j0UC+h0euY2|v;AH1NY&jS<_X&04XqmbiHFEENw;vSfg^i+bB-!@pN3;+ zBIHAxf)5l&E|OS4?%HuJE)r@m5s&*qhtx?~97K;pZV$~c zYptPGu-1~qNR3WtFrs(%+Y0 zLDI6Q{2#>JTEC)iID*I^Hl8jcBe-8Abz8Es=AcV0yT}gj)Q1plPV`#c2d|q+URA)Q zsnHGu_J$EXG&GUNgu%B(qA0PsHZ0%+wkH!fwFnLh8%O~qRc4^UCZM}3&6 z#};a)ZchA;S7R&~my#z6RrlI+e3quIi63)0)%aEoZh-$bkpG6&`3<2WI{&T4MepgK z3h=v-zTMmw$4Zycuz7!V%tUX2`|Plrbk zK$w+@Nbb}3J;3S*EBza|OYt>-{!ZbC!Lq+PA%jA9o^7|kICOa8)oNRAeMlQlI`?G# z@SxKl^v7z^p3+%{0U0S8=khzfx>ghe04O{-6zn=yUnG1R-ARtI}nn zSn~|$J&TB?9zc{sdFUa^Z5&H}Q=CzYumR(%L^NPHTtWN`?jy@={&E4gnL}6F>oi4x zM3}9AWC9~phr~CM&8lc9>-8wnVgqhk|7vL?xMP9afOixO(ARU6!^K8y2UPuU9s^^troZ*0WI0)vDWtdptQdZ5+?j2{9x<{x z7FL8zA z?F!93g10XLrR~zMBxs$Nqrv>Tt;KQ^VLe3Ia>kpj&wv?dScCr4heCRA1J0;+HHFNt zYDo_e9ava`63u~llHTG4wprj@J}Uet5Hn1-!4czren{%?60C{@{BH$b^6~MRe0(aM zOuF!0r|)U~8-|jEDlKV{$+dLk!l#s)7t@nUYt!65qSQ#SMOoUcuFLH7KRKD8LRsi zE9(2w?A5w<18B;|DXit`^kRiT8z^xannY-p0DeKc+h@gLns=xD&ESx5ZpFZK7aWsl z6jj3$4GT-=fP{I!qzirIX~@yZz7%xSB}th87EaYO?AD>~0hYHws#`=0^e!i8hX@^k zg*BJ1`&DYxW%F#k25~hHNK)h^zZ8-284*L!Yoz4=g!CSz*{|#38TVsTj&0b^PNMTE zd>|$zxVMy^1=RZjwh;LWpc59^iz668Sqc1>&rmJrQY+t62LpVU6WOw6|}Y+zj|{1E*}MG4DYD6SmylRWb|I{Zt925Y}t~W%5dBiN&L9+;3`I zppFeIZb~1>OBXN%P$Nc{lL|6tbm`k#n}u7=4l*mY(oX`v0MFLQsi?xd;wuR0y%aeX z)5sW3qoe+bHJ*eT>CjKnhhjdZ5+56qQ&f~6K-^y;eTs$O2_@}VZvEIERd4sa0;j>L zh*Ac|ftVj~zmwfdFlnVytX^0NIim4%LeA>f9&RRD&1`7cFQMymVWudc6gWl34C_~P z8k9A^OoEwztJq?f3aS(3c&X=|LQ{6280;12u_8^0xW=Q&@ePBO)33)9%+eytJPYTu z69}AiS6Wc$ycPl!H*7Q`^t(dBj9n_0qm1T~cR_UuAs2?hqim%R?UN5vo7d%>apBpo ztkT<@oi(nk;1k9OXh1@077CDl8nGKeL^Pa8%XLD)@=p{;HaOgW`pH~RM|;Bh z8`GL!4!**6wVhw~ixi-80MqoR=c-{bJZw z{LCq)G%9D@>6WGwB;f`Vq=dU9p&CVfD=2Uf;vx47;itWBThWksoVALtR}$t#!#qRD z1W^?Kp5s7&=99hsudE31i!7qz((7QkK*}1l#cnPcO-H`g>eIW>FUSs_PQP9JtiSAe&0 z>@87bWMqftlaF5%4XxgZ4j35z$S~&n1SJp&CB)NP&kRU-@}Ydw)8fv8VrTSa{u3p@ zyKv6o%}xgyX*Z8X-BwDpm6A&{<-t$;5WcP;52I~4Xjw-ldV}y{(~9z2sRLH{GhJO) zxNnHm)XIv?*}DOoMFk!~qvl68uMDER%%0R|TsA9r59o~SE* zdi{6FjpX7iHZ>qHFh|7dej&Q|Q8Y{)nPgO?O2wU`&%m-xJ8UjUUPie9X9k6uR)=Dn zKq%3irZzo4SU|;u=vUcF04OZ?LX3z;b=oi^b}bJ4aG@Q=uH8<>k)%$4dmMH=6}vLE zM+a@QZ_5Hgx;q|Lqc`5C3uwX%o}3wtOOvO%WvrSiL3kAaJOb~HT3Hdt{ooW1?`M3( zWzGIxtF`%23ju0Y4c}-_T!mbjbI-`?_ko@Us&hthZed@64Q*bWMR*bfyC z-?(aNixtRE)#27yl1VIt??uS$nB*UfeEFY0Pg)eUAd39Shr|?-VHE02YxMQs(ZCc) zCb|n&?TAs1@7-MDGrXK&t`bO866)d!IRvYV>FdUIO~72>+UHrkZVayATkg0JV+?4 z21>$l+!q;sx(ntpYj%mR)RbrL(Cm{KoS-4x&k8HA-urhPu<#JrD|E;g_i6551Qa?u zIk((6gb1H?mnfQ1;M$=uM7?ohX9)IWrdVs|mul=y%E0j#SQQxGG_;O5I|PAF;C#oQ ziw(JUkH|LEzfiVP`SHk&Vc&geSk0JDECDN#!t+VE0y8PzWfWpH!SDLlZ0~4vL!KV= z?T@*E)={^6*=e!oNMn3-+~B*vl_YXug|MoX!^6Xm`T{%dXTZVVy5ARo1UNW8lZb>E z-Nk+!+L-VUh*q)Ncm9R+oD6~>&wJDpfFm=jy3Wa5%_;mnkq}n0C8O?i8K{;hp{ho7 z7R9gXbx2gvyxp6Uy=D2%u2-Qy!I;T%z*JgS90adUK(jtmk728>ch|;$T;Ssly4s^r z7l1YK=4LU%Skr;s4zEm1Uf+4n^3ygc$a4g|`DFM)0H**_2(Nsz?9M8T3B# ztyAz5{*=E*0$C@0zZU{ea2&ZcEfJKs4uPGh-A??ckQke*#1Co*PqKdN2g;#fGxhm^F2F?Fn8WyU#z-f zv_Aos@Wo>(gPNB5I>j{$UX@2s_4Kj7U3}yuH7j*xd7YLNRo9wcyl6+Vrc4l;-(0YS z#St>C;uBBze^`K`c<7LT-ZloyZ^Hf3--RdL_84r_LP{*0mDZ+sH@|$)KH56PU4N^5 zUO|fY_))m6z6NscO{Ns`HPr$&4z*qZ>{}!dE;h1Te13jD8MMna3C)EH{kkMi<-7fb z!{sfOOf@`BsuYu5)`gC1VvodT6Ndh|DO?S7<*t;&h0dcv%UfaQRy8p?@oPuupzs&>@Ho|oMsvepS$qI;WNN&&Wv82J8QrdFo=02Viw-IDm66&&?$&}B` zm=oZFzyee)ibS-MM0V_T^w|8y{DS1(FHA3=PN;oD@t;7l9~nR$|Hwin4(a1B8s&>S zH^IC}zbWA!G-*?j=)@G^;6)3t^+OhhtYf!HkX<#vkzK@u5i5ccX#$R;+^)!|x&GPG zenzxElWOTZ9gJuAH4pO3qi3*(Q!o^lL=Nn8`WW5jrjS<8#VUVn{zooyj4+jF?w~;4 z6lKnAS~0s_OWdOs)z>Fr$N{)-t+lfE_a1sV(wKK!8_)z3+SkF#H@0>nZV#@hbNJbR zuFMQ^*xt_7B6a5ZULe{1kodyGukrI0UA17I>k}J7^-q7;SRKU`3u(ThXKV9SFA<2x zEkHU;vG^KuWYp_F9uOxFa++5nhK>;Gx*~g{@=BZd!Tyb!@Bka=D`PYAj4kQH`XE|1 zY6Qm*8;W=b;+%qlf@4BUfIE!~iUniwd}(@K|KAxV0UwrPgt;UPKIIXZ>3TO%2 zIMn7V#{TgcAVw4(C6T;IIM_c$SoxTin|Ku*+@qmAc_RC3(7`R4Mn=s@|DN0&(6ji$ zX+^C!K#!w7x$z0P{~pJ*GX_Dvi6g_}QIUG3*d&_A>8F*XI&&9H=TtuG=Ynb00A|L*C^WK+%f z^xei8^*3<^mS6Pg9g_;1y{${;a4TsdY?Gj-Ee0$9t6MI3PQCwr#}jQY+$mNA@{Pg$`A(B0@Z0aqaS`$; zv4wKw#fQNvS~DTq_^D!?08ok~jOx+zx2oB?SptmHY_u7`@iUs_v++Iz`p0DUBfa%4 zZ=ydx`M*`y&!z)GUOHP7iC5A8TtbgMWs}?U@^5a|!}&q-$khni6mBaT)bf`{-mq^k z1T}qLr)VJm+^*f|pgOxwFPKxlSZ)SR6dX!vzfPeCd<&O4#FEQ0*1#~X%6SrmRWyj^HsM+pw4|Sc&~B8u}V)5~Z!o7Qi#x3?0Z9G1^Eqs0JY4 z&9;T8{2J6KXYbX1{T7b-%R>-bfy9N|4NzGP2UwSXe*Ni=LqlDi_yoUD&b|g5t{sj+ z_CC4#@#Q|`ZSbu8v;ywazrR?I^0IZVVrH?FLt<_*kFu@P@BuP>a8CPV09DQaeyIKe6TWgvf=YK#V_Go;E-)^^<8v0qDy&bV99h!R(wZ z78vnCgOm<2M_w7otvKruy~t@T()^k{TGR|ASLoEZ6qBx3_NI8XuYgUU?%2Lf@t-}9 z=wXELQ+|61Cj%R>+mGctAqCSQvrwmov9nB1PXs}H9#!pc8n z{E%m1$3|0<;dBcvJ94WnVCAV_zobV%+-8bNxr0@5KN-911M*hZJa=x{>>1W^eQ z5&7+Tp3nDp{RQ`_>s2vzDxgHJ?Wc474I!+5=rsU$THF(Y9>Aje@`L?}#be`jGnbYt>Clf?ylpZKI{t2*$fOyyhC!8ej*|z|>dNh4 z-!1rVM6t;SRD`s2jRFvxC3%l7L(Qp`aBx_)Z5O9;BiviPl90v-FyAzJr6Uq!j5tLdT+Yx~s~FrR5I$;lo9ts*x6c=3|jlev1Cx&H4*={s{j;(sO5L zoi6pMl#j@NgvAyEye}kueSMoqxQ@o*nz-MpNCkZy$8XvOFY~*(laBC7_8hV7kwuS4 z_uVVr2bI+4_0M$`gp>g2Y_UMd>^!* z5nepmg>-!W^fR#cL?Amwz1dy^)ZIScKCdPW`E~e``-mhr)+=K7Dz@--4C?DDsN1TI zd!`Gab4lOUk(XR6M^T-YeiSM-nvF0r{8asI>S}zMu%RX)-@#%>eBOkty7v4{lJ@IBkU3^maWTphf`7`+%xQU z^IQA)R!*h)B1TKL$!<5A^|EB)Ce2<3HC4}2&d8Nb;(xV^1Af%OpWCiOwtukNIIFL& zwPbasIV5?7eNWT|Zw^$xUa-gVpT4tSC_iMRN%-7(mRI=YXtUU*{ zCMK2KHaPE;%Qw#l>{;lg^oN;vmrf;M1n#xhv>03-zb;ZuHGa&1fe-x}uh z7=bVzY!|V!7-h{8tXG31_odK`hA@aVJF94scW{GoSm%JEnx^k(N=mJ7l8M=!a_A-# zO?6ZoIqXwlN{oYlKy2NfNkm;O2j0uU?`g2gb{O(;6E@dH+E(hY;vY2=*$7oGLT0wB z#KT(wRJj28vymXw@&VPc~0mC;G$UtTJV7ZEe3J zksBm!*0Ep&r9+GTBfA9_dY(1a)>3s#2UvMAudZtNdV70Eq3rPJNiKZJ=MI$J&P2qz zei&~#Jo0W?WBJ~$&jk~efwErdjUKc@!RW8wM6#vdt#)!9p@X*~+OKJ%>8m-CY&bNw zKez9BG2F@0oT$YZ6;+{1SMMSp-9{Ci2Bw-6D$K2wvZb8dPA(&%qgBlRh=@ZmQ|C$^ z2!gwy(~dx|@i1 zHk#E#+okBT#QU&*OWg3=$TODkK!Ft8zpCP21Dfk=dU}8FS>iVL!YEcvwg{5eZWOR3 z^=%rAxwW61l#@|wz)-&W@fGgd<%ph}GP07LhAGVbq2$mG8;T~PT-=YVX`Ai=j$(2X zZt##}3X%uTeKaYe15G?2wkvnXacO6!>q-WtqyJo*!5MJosTwQ)(%I;Lxu&SI-LHG( zDvj4+MAL@({u!x&^h55W2wS~Q${qlZj{!G*m@&+r5bo9pKhCCY2=!VX+v{ZINa_nc zf%z(igbIgjetTh{x3L-__J}L}e!^2ru(xr9oY)I4NE}6}*-O_`^5R>M`(8&Y7cxnv z%^zqMQ5yCTj*{Ax2xBytVRz6c+VFegj3#Dk;!jXIZhwtaPWDTK!l`>L(P_2n(-;x_ z1q-;bI;^ZT`JgstJd~7?%S%7W#@4Q8!6e#@@GW5i`m6*5N8e_>rGMVL%AEJV+1Vj` z@;M*zAYCJMs;j9XRoR{(1b@mako^vZy#pW^{)SfO)1$+easD%ukVn;NLi3KC-)H}D z5_UrCOIP2^$SEo+uF3$KblqKxOJB}&rDcNcqtJTUcxTwJ-LW}n@=TW_dE3q*>j13z7&KOtPslsz+ddkYpX!N}+e3W$RVJkG2yXhr_CRsvmAx%OJxA(b` zSg((C)_M~lPq`Gn4Ea|S3%trgd>jus_|e1~jqIH1%3=exA@HKRlW_&Dj|GLzQAnv5 zDNdhm2!Uv3Xot-n`S)m8;xtvHu1|76^z>B}yPL6;XmqZ2<;I3_t)!G$SlDY#+drAE zz}80z|L2ECAWR0rf29D$vtk6EeFA>{NV7X)jD%8izA@vkAQz<{SIKCs%qX5NP6*~`MdszY$^swCQ~#6=;YCZ zGbUJ6T!)4?j3@!Jk=&+Noa zapk;?8X(aE7p2GE0e%^Rg|N5MDk5taw2lck2YG*?R@wBwXEc&C(I>%F)o?}EGc;83 z9X;B@zE$5@@70zv<}+GC?ev;?wtPHV+Yl5btuILa)%a@U&qC7E?B0g>S9YF(QsITg z#r;{@D|F{SUibB73`m`1SV}CIxC#LzqaZn!gKls?h`%kCRJJHWsHt|R(-JIML%jVU z>GgUy*O5{&)ou>rU7P?N3E9&&SD-iM92VNCI8Y9o>tJI`5ges?<6(c0^^iPso3AKb zg#goZ_Qp|85uzLyVT3r#REd1PAwDKY>YRY@VaTDu4YAt#Fo7& zFT{XIct1VUasuK<9RLL(3vv-lD=;}u--~Gq++&l0__%vG|KA3f@%hj4GK1#&`j`;$ zsW21z!GoiBSF;J%91&iS7w*oZBaf`WyhgT7p3gm-sE1WFbG>FCOxP@_11zlIkq84M zG3Ej4>f0)Hw+^@O);`R=6&ar({QT|@a|Ss4dg6_+*%J4CA`7JBd-+q$*sTQvd*595>+dF7o4Ze&wW>iewY)eO7 zn7RPq*~ylu$pE~2faTOnD=yrP48-V*l*h*{Ey~=W73O2ae7`2P^izWoJiLBe_~*($ z8$9v0hXg>yTuj{M*b zX*Hje$p=qDS!gkM6XeEXu>9X{_Q~a**9<{}Q9~3Ze9Tp_aEPv&D@*7@*Un?6=7!L_8X&)~(i3d8 zRe8Gp@waoD!sm%#YRsV|M~+7r3^Wfgyk+VH^u03SY^#QqduV@vfU4_krFq7P!5;+{ z&XGMJ8H?}SO_q>wa{u~nzveJH8PONZ43S)SM|-K^v`r^_e-YCEdaJymAKS$=9c>2T z09MDq!h&NiU#>`29b3?s+9blr+<4n3j;BTx9;-_hBHv6ArD9EsSlsj448$LY$k%O% z{8{)At^oeK^_>rh+$UjYVapjFe(X|gYGzLmoh3W}ipby-Ds$(E%2CVJ%sf;)s*X$6 zh2y*WciQK#-5ps+uM#VY?Xk%~X&VDx3afB$IDN0#=*DAobFKod#Ly6-hHz00H{@;vwD z+|%O4;fFXX59_l+#s?_}`#0lb$vLAxqz(3NA>Iid!S-NqH_+Ey)_`E-O2X%(zkjC% z3l9#0n{BNqxQ>qGJ~utU46;8GbM-b5N9oztqQuoK$KIQMG6+*L)SXuoNX#tIT}_I+ zRTvSAT}T|Ee~ac23hk&qN3?PCga3B%-5u`~?ug&Q|K*5aAj4sDV{cRQ9KA*PI-nV< zW2Qj?s8-E11(QS+ZIHQ%3T~``3SVQ=kX6f}(QTJu?ihZO-;3J!@&4Dj^jG-B8e%6Z zYvNH1e<#QU1$X|>-~0xqOZq#aD?Pnwlazi__Ka>WxM4qS#I{1843gdE-(%}`(`Nnn z@bK`L-@BjjUsEO{r2Ymuxe&^IaTvjLBb+Z-sJmHdG2J4uXtM|VtgC-MeZ5w>uc0sb z=j;bB8(^<=0k_bVq9t-n;&e!A*XCYNy+IC_Q)lF zPd311DNzLY`KJ3Q*h}ygA}N3A2dBA3Ddq((S?F&eBD%G;HF`VkI*fcjDvJ==~kly(zo6@XBjypT7ZCX<8e@-4w&^i~W2!opDcbpd;cGBXb?fFA5#o z!fl2eAl!lAO$s4jCpXx&amkVNAuM*|N>%krSol}t`S08I49|Yje-!LK^_N%#iLC-I&Rr)S(>9J<B6Be(jh!QM58A%R*0Q^%Lg;lIBGsl7kbV=`P0+C<}D!N^guhg2>*93 z*^fLO>!LDKNybgrW{N`ArBgZnUYXv1JAL(|zXGb|xWUco(#0+~i)p-!X9L+3ZNKaz zUr9@z_mGU|R$YQ09Ipq?mPwD#Lu*ekV1Vzqe?C&-C z-mvh#-rj`!&PjcLV4)W_FAVOyVaKyJ8`v+AB~2)?Xw-hg4@mWKpacO$V*g4K;qPDs zjjtZI^CiCiWq9LrE|GRFo$WxNlN{5(Bnz>W$8EyciUBFBB0m2w?aJ$hmK7U{$=lpK z%#&@OXc{uo(9)k+RMyRJ_SwE~uAyUbH`2U@0Uz=MJ}ag;>phKZP{)-=qggIkuG~xi zg|Rr?1O*R-HSp(VNyyA>YF3`Aa{$@ziO$u(Xr_%}4IUhxEM5LqS=TIz;y#-BV7#-T z-BfO&|9WPt_e=>-M07PfzSwPERH2hujyzfyWP>UDJ-?n4X@KKRy^AOI9%~ehw-N6i z+`E;;sRtbClZ$883L4Kjs|N_^-7TL;-fKSVG;1t*@~f>J!wW5q?pEQn&mAm$ zWL7H16)=~0+vRy;y4;er%Z9ot?~wX~yoRA30??*76?E{C^eCo@GUy$|M}9eqMc-VD z+Y)ES-skgv%w>gr#|-}|WRRL1mTIBfSy?kKp&38inHkvWSiGdHThW~$wb9|5n3!^RN@M6a>o{zd`9?ONR&W2Fu+6-9n0-Ns}L+lyQj`8xL$6V5~ev@Ox_R)Hde(k5v zcEi6(DO2XQ%AH(1lYH*ND%2DTtEp7S^$Hy@X%_8tqsCK>o?1U1qIMS(lFbu{nF0h$ zeY-qFnK{g%&2@~M8m@e$8ly_Q=Xp|pPwSi5D4$XITCTJK` zA1&v4dBT0fmxlY->QlD#8O+kaF{#gGpV0s(KKbL<^jA=@6IUuubX(-?^z_-5U-IRh zj;ger7L@DT9%44OP@6RtB^C(N`zoIX*tk@u{(K_3wm^QZ)W`4j{2^14b1L~zp-Jae zyF+=~*F=FLpBhpe4TMhhSsLoc*w|ufjec0TdI*-RiY%B(lV(@wueyK`gl>s)MM4~Q z&GD+p5z}m8Ha#!(zoZkA{^z#*`ifVWdN4QSe0!kw0cxAG3`O-iWyuDdg8&}n+YCdb z-ZEUNkX=%$;w){v=*GWLT!2oi*5ijq4pfI;Jx+!UbiJIvAHHG&y4*aUPIVIsrTC%s{pvOVwvyP6{Wy9Z z@vZ-iUSz=|wl2)YP$4_`b1dgWAt$&LCjBWSar?}yp(Q955y#Od1}8|V_qaIvE&R@; z^UpiaPBS5y#jUqbgpUs25~c{|6njp#^E=`X0V*`)d|O(05a{VA@$W@b@3G$eSA0R7 zb&ao*BhE07EpSI^X;(o%zipHdU)zf%)yI=EM}4!39hyJ91)F1$9?s8;gpHH@Ay5C~ z^E8%uZPx$i)jCqT*OO#O|d`Ih?n2k8w&re-!WsMR8Pfy z<`GL${qR&5_o0LrZnWO=i|pU4c+tG6>Z7k$uI#y!7u4Ni($YV_%}==lU0Wkukn*S1 zfA5C%gQzWJn$g@%0bZw>bmx5!oK&){);Bi7q(82-hbfXAdoY-SxIq?aU-*C=Az5iD z8vmdwJ(gLpd;txtDo$N8y|8Psr>m*rSV?d$%6yeL#4`uvin5L zOk9(4g}uXC#vG1?1XVyD>WS(DI=Oy%#IGVMUqDM#EeCUP?}&rjY`RHJ62#JErV>w( zBp5C)pW*@Nb??w(#XjibPGO(!7Si*Emsl{+5}ExsmPHFk?G1OR>636H`UYNN@!@~} zgbIIwZGa)|Uc@d3R`XMKDYCY;k{Q28cS^pIG*m;%ke#Gq(sy&A$OR|rYFLuQS3sNQ zz}x@Bhft|(XZ5%-nBB_X9X|aD0%@}cU$+Jv9J~lMkYCNUm#}Z%9%sCWzEkE_TsHCq zlD9f%-5@JvZAg^j405OBuL|9O^T@RdHsq~()a*R(dQ6v9_YJ0}VdFwK8Vl9##PsxN z^~lQ@ln^GhE8`>=m)L$v|2Ia1f4{z@1vknk^aObXSahC6Wkuc&B^!>vO!-xQ;jl zwj~kvP+H!d`AkA;4H3_WQj&&TTF#uhH|&rqJZ#?3D&IfJA^;6ogm|^(Rl?qcSGboZmvgljD8J$*q)Hy&Jo!riH$kSc_I8GaZuc z<6pTw7>plKL9n;Boiw@!Jg0vBzm=BxKxBUk+w$P7bP)cRPT#9~^0n{@JMgy^p(~kK z=$gGSZ%w?LqEMWlZ#72jidhf%;=ttwJ5{h_VD@EM(oZ^bMpX3DY4-P zd_V#4t}u1q0l?Fr)zonJ7Y_{hi;WXw-FG+~!GPWF9!JvC_gJo%h>D7lM|9PmnQCri z+hfY`cFP^(VFJLN>082%Sdk;){pvAasB0WlU2Xf%R~tT$kFbdgNb*bmUo6}&>}=2a ztlndj8BkI--j_K`w_@wf`~7 zd&~cN<=NYG$^$(8EoLIKrgG@Zq+vH2x%42V!us(rSbswB^!DuQvuwmUjj#HPL0nDw za@TXN8S})?a{6$>GAj@N?-s$P-~k2<^qTh7+*1`>Q=Guvj5i&J0W6R*Tr|RM9!NH` z$JI5Old|~sgSmi0?zBGUZ$_>J+f^o|0M4}NUy%cWATawyHcM+ATW?Vcki=(@ERA}K z#UD81QMR%Y^6kU4zOJ92nD5e^Q#QFgPO)0A{7~{vc%whuy>^-#vVZ_9Na!cG-|j?e z0VZ-$0E1@H`)p_$Pre!>2+k96t<_Ro6+tsIcbtdZIcX9c&z$bP{e3rlH+3viZEpIu zY?YBWyv0)gGyI3)=U=2oaLy)O518~3@dLVQ>{?ODm`En8Q@gOHQ-!?Q(Idu`T6A*z zo(}jUoeFM3KIM<;`YJtl+E>G3#16%kog#F7d6lyIf78t&Dg5}8)&?0DXn7+KLjGJ_ zz7NbQnJK%p^!?HVhImOtDd-FA!B&LYyE~=qw;|5J^Iy;C5i=9D1EV|3N2VriE-}>f zlK0mwdZ}|Y1)@>;rc$XjXd}-3QNKGdM6lvCIq}W-EM=@@{B$1jPG18-2h|Vgx*>(V z;jv5V?CszV<(-exYRL}K<4UzAXPnpovufKWnqWG5`d|b)`-6kuy{BGFo9x!z+Xc>oh$-dC1c>$s{+JZ6xgpYfMZrih-|*WfM|ks2mn zC6TgWs^o2@k73mM%RavdnMT!*+ZKuMcTv52^+hB>nMSYo25#9qR=~4Z$V*74Vfoc} z)xeLHU*bU;^S>g!Q}(oNd-hv6ft?ARIfUori7gBfNJ2ZqX)@&{1}{`jT63We7VPfs z&d^Sxt@~GuK!!jmI#)#YQOhViyISh(&YxQQOP5<4A#*&h>FDT&Zmt&aPGoMbQWDAw z9C#4u!6#JfJN5iWnE~|r28-`&{_-X~%a?q1?qQNdK=B@4)k>5s;cJugaBf?O$=Wva zD*BzNn{N`cfN;>><=CPrw7vxD?efRREJd1IXX3+#o)3Tvi(XWHhhFUB)#Eko{RR|Z6 zDvsx~FL~n+Pft8Rp_m*>t^VxaO^uB~GpW7;^%bwiJQvVh-@~kY)m2EgIg(pn)GQn1 z_H}c0jmN7?Qjmf>Z7Z?HD0VZgX?+pDM&L3)JnW?vhyM?!BB34>k zEa!zX(to8E@->$3wE{~(2P!vNZ)>dk(z#cwVDZV{`}ME&uKCg@>IV3C^v<!YeqNfNDwCi`1?`Q3;7xf{z+z1c*@ZhSwF^-uISKeyfrdZ!KYB1{LUF0|ON8Wlf<_3a9N zFhQA8NRZNp5cZY*Hi_Rb{ACNzGV_hvKcjVGS$)Y%C<96R(!oBdgfQ8NLX0%_qbsyidZtp2ZW^HYk{tt zed>pm+)l7Zk687hp7K?rjMgn15=A;~D+@wa7c2?#)~(`ICs5U*Z-S;yYtZ?k7o~Gc zARm7?eS^eJcvkZGyo#a}ORfq2fK?%k=%@MBPcI%|u|Jl8w2GO~+iJ@|vxs8LFb55! zY~z~;+NEy8=uOoAoq3vPu;J6a<;IqB`Ki5n9?xH;IR`pu^E7Qkqf4dlrI3cb{{io1 zl@qO4{VMPF{^ar4r_l5RtOOBQ)P3g@6?D(uXkjP_?r zYgEICnwuZab8EG3^Z8DEtU>KNs2x;S#}E$X5m^{&m?UOK`FDjt?eyb$y1pdghQ)|o zpFQ>RxX0PP$KaW+C;7?gz`r_yC9#7aGBPLYu5Ja^EP4pHrW$}%XuU$-nfk;uO700f zVX?+B0sY-X$6Y^D<<^<_*85|5q->_!8t9#qCXwBeZ;Wgct{MJmHT>ztuYhwYP1^v) z!0WzmkB_=czG@Ro`W|gPf2)a$jIs87oO807+-t}qB*dWN4V2JtI5x7%zC>mBriTVy zep^(%h!?^W7Ui9~uZGflv^NM-o+@~Y!w=5D?dnB@&S@Ut2`oDxLb`)flJ!E-4Y{V# zIzO7#vP@dVq4;AfSU;X=)+g)4C<)NqtvKyKRg%N1b3%BM=V{T6y`okEU&5pdsdvirlpd)TTp_LqWx&wlMX z!w__-RU;yP2G7u3piSCBl8>-+{W{T8fegRAAV{*{559CHer6X-KI*d9daXrZFb0Z@l}BaIf$EsGLU9vZEB4?dV0{7zUn`rux*H)Xt+f;Nwc zbnUQKvZ-xW;=5=x)zU&I$HP2Jk>xeqGo@C9F)^`eD9z}SH0f?X84kr@tl z@9&6tDwlpdW;h(|YZ|3vIdQ+f#<;94yDr?ga};iHCbZW1P;I8ol0##qO3S%Kp`YHe zX|l?!+c;FN#nD*n=tA0gm zby^xNBWY&xSm=6mpg*q5+ANMsHwzK^W+zLiN$sGP`|s2LlH5)fB5guE3tBzHb;Q$& zSfE&X;=KMscZ;Fh?>fZAv&@K3S#W(S*HtP53Z+Q)hr%Scn$Ip#w~O_==Y{h{_3xf7 zWZE~kQ^6aJ84^l;I{28kzuB&BY($1*Q=TCZPy?Al z)_>nwzR&|4;UbnIzro{;k(wrW1ugM<{UN4KO=!k!N)2Z{B{b^}aHMU<>6OEDai+ge zJgwb}n{S5EXw$uK@(EewBP#7*%-ONA$#pSD>!C&s9ATZ&Z?npHA?;}H|E-QOb)NZ) za)V|oDtK1z`MG`96T0)GZwt7;3hcm^0`x=ru$!Y>^p8rWM*yko#vFNSst{qA$~%n` z!9&VrMw03E)w-nv;OTn0$P&JI6N&`1U z9|vhcga~BwfupU8cy52_7|Nj7^Mw|m6>a3Bn-znW>Ug)l2s;7q_XIPO$1fHxkJ-qY zU4Jz}L2!J^fN*Ae~= zIV|C*_lxewOSgAh=U-qEDGK&Wj&!?)Zv8VOrmP8_*5s$tFCs~Thz)XH+fKTC7SH|} zn$$;hw!ra-^u{X9?wpPN-Yqz(PztSSd#V4Eu+{~hBcA(A2{mgBf|=?Df|hhY`d1zX zh1HK;@Xg$~IXNUJV{tQ{c@)<0Hknr#Qiu^IQiU-z2F?%SVC$s3sx{EQr1ySFskoT68dd*U$>MIaAAE4TjLO$dKNh&6iZnAukLklJ0D z(!I|&Xym&+RM83W)-V4YsOSk)jnLhge{Y&^Sp?Ryoi^Y~7pAUtok;+m_nggMpdT^P zQUTE8`;tw&`H~88wD)+d*~Nw!qA{X3B@ zD1IRfCL_ka2VIMO{I`BEb^~G~mn08Nam4tu_`lzu2w*ltNDgqmhj5K+HU&iZ`4IET z*aTe_m#=y}i;rByZtu@S-L9i>6gEtB)sQ3!ueSOa7rND4c(0x89`$(~0&gjLfv>fhB@{J)RWQYJ{tsnt@elcxkzHZSS>%2Dk1fO3ijawp9px{(tk`|kXc2PnYE5A4J zCD&U>5Bx40@YD{!xBE_Xjpz^S&zY^xG|9AWL`yQ`<2YiRD6*c>Jebp0h)XO%R-tBP zXZ@1{VcXpbs|NKUaXN9rdv=_x*36Zn{&TDGpCtPLDjKM!|K~QFhDG!hfyD*1X<6>9 z%Vzyj;hX$#?AQ|NridC-TCAHl!>{iVCEred4Wy7&ckbraFcJHHlq<+FxtGR2Y-js6 z6?D}#&e)_UEiFCwd~Md{C#ytaIN{@U=MLOo2rB{qKT*3guNChI=H%ORlt(I7R>Xp0 z5wY6-U&mn{@)fTmfA6i!&amk1?lR(S+f>VMip_{*PgyFc&kiLXz|V`I5as-S#^k=< zf@i;pW!5S3H(83nQ|pg?S=o=Wqo5Wn~N-_ux9jz=LZa z;T~D=>&&R)Jtf)hlT|^G z&*ctMf0y#_-e5o!?C@2pw5HZSAzW7AMTYxg7KeDh^Zj_6Vv7KE$`Ik2nF9BSl4!k z7yAypoQ;0D{gG2ZG7VD-^!f{-U~Bxqbf0?_kZvQ5f?u)1QX? z=aN^;FUM#YZU6J?kd~#AM77vpR&27fLE#Y8H66=HHv<-XtMBG_04D(*15i?9V>CTn&?8aaYMt=Kf@Ra)OunSMUByBq9#k1dX^niSZofdiiKB(T~w4P9CVI*ptEW zkufr&*oXHWkki({HXXa0*6VR;He`RuHAgu@|9jzgEVYkZZ1^gU)D4^9u#>|;85{<@ zhxSq`1c!xv>E+&}*_DW@=+$SOP)z7Th%@;cnhCozG`TPLJov-+`hU5v(xiG=`M?`C zLYclFBKeytlN?T|A94IdshyypphbpZA9I0h8gbjZUuyGo0_|R?*op)^XL2Vz+^37m5T3&2+DDXK5C>gH1OM{6`yB#^cKjS-Fh&Srb_8C((|?F;Con$ zqqj;|bjQ1^u2Wuh*xe4K6q5(CSXy7j;I(HZaf8=f&Fo&5QXs9ph_eE1eO z{N1};8eZ;yqVrkZa^R&^=Dy^ zTbD?E9_hkO=3bl-qG=zgW#3Ie{yALqT>L;|_Ff2Sje>~^fS4vN+ zIH7dE!@gVF*JuCkv=Q}{YSDNou@5TOdn56wW5u$U{k+1@Y@cBzs>xuP@@(>Dn$d`! zt1Aur@m*!@f5LPBRScES8DFTVocx*#W%n(cZh_rdoET3jA_~<`Dhg2#v6`o*q)!Ro zjlhE|^eRzUb8z67-9al%*dQC^5aZEJcMGgPlCI0{OTqw3MTp3lc*)-Y7;`)FK3+@2 z9MFb80s$?UyL8&JE>q0gZz&ldTq=gNWbTd#2|vR}CILvxPsp866*JzXeQyM{D#EAO zvOU@`J7P!`V>+Ky_d2iSMi40nXH%Yb8~r_!U)JVS#&w?TPEcZi3N1xCUAKQwfTP4+ z_#kqQVz#K`tZdAYRsev3^$0qm3Pd+3!x*yJ3YyhBpf72 zS0E_an?OXErwqq7ET<2d21zU9YQQ-0dkOM{2|B)2nR>tCE*1itM;Jg_DO9#{c5gs( zz{gqH7C`3>Gg$kf_aN!5M5)_xv2@}DZ=u)HuV+V>-&w`Q8ibOTHgfTS7S|=>P8xeO z`7UoQ{c)lij%Y2I`=(}nvr(ROZo2KWKe^Ixn6iC(xikew0zu+ES`6}Gd(sX*X(fMR zPnM`Sl4F89hLD4RL|73Hic~y%zfMqovdad^O4?j8Ix2iHL89{C;McPIehZOg8v4Bu zd;^F80f%Su7J+YPdC~cOlxV_&t>NGUzc}DIe9;m<5$hH9_1lyo! z+7pvUx8WM0_OUpAL)%-F`b)A})5H&1%-Bh(W)^O{LRZdU=30aRy7fuHybFP3RT)Es z8AIFEvEyCfy1)`RWb%}kKl!Q&oSR25R_z;9P`vE*nPLYU7K!3&h}4U^u)Z(5WJ!U` zdm13cp5WP?EVlm^yi0*IVz}b{%I(GKlD9fdm45}<()&Z3K6f020ycQIGTFm5^?A`$ ziXSRC`+F*0T&8#2UMdH9y_mkO&X7|!V@oFl^S^Bd>w3gBlai$trkeymGbtVbSVmL%ye9D;0AxbxK8Z8Hp2)9N&GrcD3qS>nHiUl;&ex9dtJa zetx-iPLMOVFD|HMi1biR{tYXmau1JoCwOaSYhhPa{4^&%c=AfWv@ZMcY(*j7NyL;n zjafC(OHDbK+2cs+wlXPn<{P5e;RX{rg^xG38PF_7B25wfgzr*A@&p+t%I>|hXT6!p ziTMFt*<+|F#D!L}ppr&1r^iSr3o*daqy&qg9V0oZy=g@7Yj`VukkoJjiXN|hp;Dw( z-3e8%6q4DCDrEc(r1PX4hpaU>Ib|p5SycB{DGF{YU@8eoobIm=##IRI+WIw*FsA#j zcWX?gcv(8j5*w0BfF!mV?8%oVCn829|{@mTXxn;b>3kGT}Fyk z%jIrUj-vmGz{P;GFU5}v^cqineRH)bA`zDj8`>QftmqpeFA~xNQ-b$F4Cu{AA|N)gtefuIT!<-wR?z&P5WQE~u;- z?c({`!rsrOm>Xmo-gadd82BX#vrV{-?klWk1{LpQK#MjXGJChJ;&yjiO#6vi5Ttve znGo_%;H`Oq*P9pE?=v{3%J36|4dW-_yGQNrN#=c5e0QZqlTYquR#rI;EksknKU1C| zhE0GdKrsxOR%~*z#}>F!cN*6Jh*ZYSEJu+{nnr6hH|pa@w>Qo0X(jtwi8>T)>3XJG zQR!CIoF6Je=m5Jd86hJ{AyPx$7=$*-MsJK%jB_YUr1tD{k8&n=s8xPJNfh)q%cC4M zcaJ2ochm0!BqVWrw?vZIy5s8-@=Z(ov$F2}3R}r@L5v!0`>E0t-AOcAzH3IbnNArK zZDz#L)hLzCkFM%`>SZGqk6hS@59?2iu_>9foKt5`iCrn-g zyD+;ME7f0|-9o(ACAgn@a2CEy8snFAz-++w@3s{+Q{9w=Fn`Z1VDypuD7E?PyPKPAY|?xs+2 zs=fz<@5`4TYb05eDE|y8+BO~4D~C)QCExqfhgPq8{QSI0mr-B&BV81BqL1X3oO0p3#l-=zFloq|=A#o=Qggnf~n!tFAI~RA7lL~Vj^KmkZ zy?v=p%o{aDPHCrCUpdhik;>=I*2IwKEelF=fJ*he@GVqmeDfr(>f0*vE4g z2TaF405#cxgxt_XkhkRRJ8C+3Un>D`6T!vtKvOSoE6giS`7HzSBK_)`0`=J1 zSbl&IP^~g?(aP+ICfYS+(Hm!N$Jnvs`R-YHJP&O(LqQu%Dt5B1dHh}QAybsh8-xrM z$`L(g+2Tm)OPLs(;t+UaA|K0SRy04ng>fS5?mla=tdX%!a$@|;n}H)tRa6i%NnG>r zts}#J{`^i`E&g4;$iS!E|IHAqSVYS6(BoTkb(3sI`q!`hRuLW8FBhcp3{NasJJ4rp zT6mfHTq37BSzzWt6_XX9l@;o!Z1LFgbg}{Q_#ET3MUZ$9Bo{%-t}pzopR{?;ZG=uH zt`H%9f=`+<_K{b;3Dt)#-;VV}45_w-FlQSoUPX_hus1ea`1Rw?ZK2>D*<#<8@r zqD#e$b0Q;AJGXN|H8w%8pE_iJH0c%PCr8017IYg<)$$i3N}+e^KmFv0o3A^=J^U#c zh4|ff5xf(2B|Y7Q6Fs~5J5ZvXpHGRSmJNdVa%U-Zzxw=towM?x`t|dlFXri|64$H* zvhRbBp7j*mXq0ZU9W(*1HluKdF*Me|xK0-rIXh@cE>HSSJNZ6VA?w3kWaa5*7kCG_u@4xjGSGgd&0t7G-~@Vy@gGX;~LNrQ;EQcS@Gddl6mH z>dXp7)z&%DlyE_oD9|Hh1r2?wiESh)gK#7`Jt$eT4f%mIo$zC2M1V#eWX3qT0#c|? zb;LjkA}J(1P@q}r!i3p%*lEK$>>`JoDANESr}mcfzpPJL2m~;_ELiFPW#S?xC5N7m1aj zbJXu>5dX$Z&dl?_D_fDzC-6AfTGLgfby*bPS&s4Gg1lM0Z2ZYqS-?SLRG^YP>6NJv z2VI}eo~lm#GVCmnUw$&h7Kb2d-0HDIw&e)Y8nY+tn&k*1zarGQ$#9zk5tj-xLvnf+Uo=Wt8WFtv(8rbRk_r=QnT)&GeSU>den%xbGlvr108kjoq4JWmCIn zpZl2<>13ojD}6kuhW0^?@toGCin!Z}0BbDtk<;+^n36Y_EXMpqvT0-Kz6Dk3WEM5_ zcPNYY1(F%Xi+p|SoW$l68IG+y)KIiOMYp-=( zX~G-b;saFw?{z&uE>O0%f{7#LpttamNEQSenLLzudEi&KP9yvUx0o*;Ctwowqncam zg&QUcJ>Bd*W~MkbQpG#oa20Xgp8YO;5AWA&j-*~Xb$}MBnRx|2g6^-=ySwAW*L~Iz zs{|D|tJmb8ZE79(7>uZ&$*tBY-@dKeg?pAM_&9nd5UGpB{xOCGyYuQ(9Aem*xJpi z3x3}X-o6R;WGLACIbvk%$Y!E9mZ!Y@)V4CFmJszIeTbZ}ReGFRV%J&v z7&P3gRsUQ+mlfnmGXz5)_9stMUowK~j*8sWoc%4+K7tOk z$0!bH;*}(^Q$R~8O1q|iToRtP_aR9nW~m_4&*Y~BWLaIsaJz>2ZWRfXz9MrMhPf}l zaIb-t_MgYWZDij|3Ap4F_k&9|AJ|TGQniCaK5H}Sis5ghB&U3=A*QI~KR7Uyik|79 zn!NIq%(vY0a$7#rGm$qo^stzDFas;(NpD)w zBW13pPhOXA;&q#`RKed}Wq8xdpYpd!I3ubUS^xL=O%}ncs;Zv-J;`C-Sc_?MA>54^ zZUlvN*;oc&9Z|A?RH68zSScnl1`usVz|p(U($p!S^sX_5=S!IJF)uQMQ!0X&8C__@ zcJh)wr#=!VVk~UD#tc#V=~+)0x+d9|i%zhaV{`DAj-?HJkdc<|{csOtoDtml@`FQLh&)x@Yg$UACvlle)Oqpa(Q7Aa%do4$&;oQ zLRWXv#mD1;imUrbf~Muqmi=o$acOg*j<*!B%X8yXw& zJS(*sJCoVhS29j)v=*PYJ~dzbg^9`iGls7txdVS+(mqPJuWG_lD%6o^b~v(eA>dvK zO}&PGr`P_mk>19MY*9#<81DK1Ppkg>-}BBb@SwlrF&uhNKVS+p{j_)jH8K*}yEpU2 zLz~*1c#n%UHDU_A786y$=>b z8l*@YtP{>n~(T;@odPUMDBxqc}-qAz@O&EmW7P7~VTHqllJ@BEYqetA~tH&7t%9o3hP+oB7 zj_wIdA(`?$SA>6GA)f|Yh zQM20|?CUEYhhezA~q#r}ybX_wG!MnL!H2pVl+ANhAgMR>Ux zBhWi63jS(&ibi)F7qB-t%4hx9VULCb?b8Z2)|}H`OW)rVN@MXr40o=l;xVAlo5Opb zoJHj0UpZJ&ty85#z0i70Ddb`n_fp{pe z5Tj(l_+9<7E-&srksit&1LBW|7@rn0rU@760L8YC4HA>{BoUs^qA3%0V>qTN6;(`- zps%226tC9fqgyLg^RdaZ-HwCJVZ-)U9ZPNgSa??@uhEe^u1NxjJDk7jweKX z*q+9%*zbGUAQ%)f642*9P>rAh4#-ZBoVk9irf*O)V>&x?K^gwXGVXD@J*KupGROu! zBDwLX4wQ(47jODFBTaOs*hRd3PlEW+`jvJWoxUpP#QoLH)`rH>0^nTm!T z)x4tNe-Gz_Y=Ky!9p1$PG|s69%c7ljzFz{BpE{&Vqs_UH zYnC5vbW`5>Oy_8#H2-h7p0^*`O~KM}zm2h>wkPbW8;dhiaq!iodUibe8H7!pn<{iw zkat~JKneVU5koR(r@WssxS#kj3-`4KHuSWQ21WK+y#d}X*@RB%uFf9Zz0gT%HOyuD$e*o7Q!C3xN0mO7M9!^PMiXC~l_TK@-9 zmnV~A-H!<1eijd$yxX&Au@Wv&BkkQ|AFt);b&2N!%cV1veQbCF7WijwU_a}TL$INVGKA^B1M*Wgc+ zl!G!ib=nzG;-aa9k+cxyk9a11Lj-kK*tfHN6C=gN2^OEvVY%mz5#1%!HwZrO*%(TR z)z=Slp)Mq!RYT(K!x9Tg^o>pb?k!u*UWtvSJ=2`h-}5^cQIXbw z^Z391&CF{cSj^7OegAoQ!WhxLg4^3K5w!ZiIdECAV&aG|wxnN;=I`SJ&a(*~qMF=T zqKHO(qmz!Ci-9bvj_RN3CNJDJM{5bDb5P;KuDmVEVQyBjAiKATWLFQ`aV2 z!24c9n{UU2C}vZz4FAiWOm6yO&4LpsI0kDB)^r>n!oW$?``)vH||n^Y;17aJHOJ;_knEXHQCqFAn3`qmhV%n#f4L7f4UJpq!H79JpIY z-7-;}VUaihC5)XX_Om5mQqF7c$`GdiRFNf()3bitn+G2#nYhVcSR+fpdC<+L>h8<@ zIh;c2`jCJ;a3mS(>l6!@je{RgP9_wtNQm#qiy<38GG24zb{X73!XMN~8{nWgkeJ~R z+k#mHyR-7LjRvF~KiE_Axj{EB^tN1mn>SopP@AY^NbGd+B5*8y_6>&FI4g@UZO9vgl1yOv_wHeWvT*yviit=}%ie)+ zs~}T_Tm}Fe_22+SL8i_=1k-T{Oan;jtkIH;^l(w_7JAc zHOv#0WIv%!g-29545|AEZOSX?lG?EVn3@o#D9wqrkF4s+Mq z1qVC&UP9QOVm=rqY7t?U?tIpC6Qt1(Gh%I!wg$d}r(hp@z@Q{Ix4E<~BsIpvbe7OI zJETFWK8!Ym=`jO^5yj3^IU!(OmE0s1R~z~gh+unRu`J}QOvhYUZNF}kxN{qnfBWm=V&&jL7^u>v zCyOvhD!hoV-EYN#*1eQ}nHRKU%=EO&b6s=|2NOoZd`qatb*5$8qy~*<=`o1)wJMvl zjd{>R$>erJew8Qz|NFdXI>`2h!ZR=Tc*Tt=Z4o!5j&>M94UtE6el5XJoEtlZKvu)p zDolaR+0L9EJwUFC-B(01!=80pOq)&S@AHANa2a!`KStf^!dmHT%C3RPS14Hlz1+L% z$W?jTGb(eaq8*aW&yj!4i(KUqF@RLJ{Z6V1&}f`p1+9VqN)Fh!@(M5&Fc-68CF^4)* zpzwzDkGuB4d3Ed(Sr;uJ;Soo=jGpy)LN?+_Qk=ATPr>hk;c$LNxkaSn=VFlph# zgE7`PQ6=vnGf4`RXqllbm`zKRy%`moOj4uxPB3G5+gFV#$wVT2>a zik&mKX|>8t0g{|d-FSl$fA>wiZmBNYrmuK&Yo-Ym&Yb}IZ#|nNfO>a+J?H`qeE$5V zWNq#DRSYM>Q;(-W4f002ItmK?;gP{lW@MUTp19*cNpPw9#d0BK3&O2wbxyNs+GQfp zO`MEOsF~xP^QC_wmON>(ww`wE@a1FwZWA6U`nC1j`$-k=?>j}IePZZj2%f(;t)^Sl zE9RKR;jO-*DE+}Q5(!|IqPLQ<-P~cOKWH_6B(v(JCZva?48FEz{=@G?3#=@gr{dEK^$Y|DNOdBY^xy+lY&m^uXrY+AV4v z7onpac`O7DeOVjJ^^z6gLDe#hdmu1gr3`5(Co$vnW3l~ognsg=gXT$rb;$K&sdaj zb`C1>&%ln0yqS^=e;vgQT14X-oAKSh&dIg)PeBBgM|p0;`IX_TAPf^ZgSh9cxU2{R zU1>RDgN;yc+B2^Cjk`Cj&dJR(_6CFO*v`nEmoYRycE1P&V=RPweFqp5 zUp<-DFJVXnXqr}%nXP2yp7{S>SXg-0tMc(qXIC6taE^ffd#rsD*QL;=$koqfB!S;o zoc)S=p11Ukh0y0c+zD6km~ZG`1W)rKRcQb-CM%ZDF7L8x16GB>>X2o5t|lwquX^{m zDJRWyBE>TgIqTb{f0W#CkX$uQ)?&FjU}RYp5M`L1mBv#&V#M2&v@m| zqd-bK(CFN@62$fTo#NkNW;S-pb81dBQIs*x?lpeZdk2}OFNAGrRfOACY+5(OP=9OZ zbUchSx`Gaze$v1#ncq7J+3beE51pZH*TS`&c4#$2H@|`J4Q#3iWFQ1B;r^Tzxx+}x zTq`jbp;V(=MS8wfnUUkVfy6xvGjnl(&%!jq2#~{iwc-kv^D*)>oBCF3e(Wcja zAxjddlY4_iBU%KXe#9jwe>3V4%3MpS*N%uXMT=Y!%uod)q-zn9$~SQ(3f$u?o`3Ix zkcmGIx+fZ^_~p!_QKdi6HEa>bs2#Uc8OFgD_NW1f))k9T4f`atl5YDFc-rOJ3wEpEt6*rZ^_8TI>v9_pj*IIAdvA^e!qu(VxaM-b=O z997cpl2$I*m;4&xq*6IniB!QPqb45u?#(;SZb;;4jH?yTnTB!!^g%KZV$DsG-(M+q zOxr+BO@T37;O8`m%n_pQujxACZ*PZizHeE!q*lE}@LfY1cKvctUBTpuJ;LJIuuwVOk6P&Z3moqn3jhZda^AGRkc zVsnf$0YBIt8#@fA=sIMF7OEF57L^V}*uNAkmHLzqUux}X)?@=LyyE01GytpOq*jpS zt2({&!)D{BqOxfN1;2%8Y^Puld_e_=NOm;LU&Q!z%zr*Zw{0$i8hm~gB5=s4?G=DU zZlFmZ+J0g7H>_m_6m+q+nXIPv>77PDFcpuz4oXvw6@p zaF{8|pQ*p_Tc0t}C<_e}!Q`oWc&xRta*Pw6Z1wjfo0B&qc~}ZfxD+Yo$p4s8&8I0O zMa`7xqn(!O_9PcxDbb*bk{EL(OLn|k>@kp&i4~l&fF7N}9Nacx;Wx!fErjRamnTQ@ zRdJP}D;0lK{_EhW-E*i{%7%v)&-AreIXa3wE0z@6Xf}0rce*)z!=XSTT1&zGkj|=` za1j@ua<4$@|J;yJ<%18mJx_kykMIoTXwVeGzm*A~@fOkz4Ew&onhna-sp02+SMO^> zvEpejMt++b{EMkv-86Nui2E8efIu>~FJO>KlncTLHVlYDy19%asI?NkHHj=!Ov{GMD)Yk0FXni*HHfSRPRPKB&Pw z+Vj{qan6Bz?S-8N_a}l+=X?I6|7J_}WaH_~(N@5*&4F2d4_`C9#rM@=ytIq9QNwRnS34-({JsPd zip<%=_gZCJS@T>e-Ubp%yzo1LICxS0{ zT^XSl!kVmgluwkQv*+8dOW3Jav@*WJ5oxjzQ0txq9mAz*@`u|EU-DjAQU>4ckSX@ap$i{;J0L87^ul6jsZj4_WpObD!sc%`o#>pP>j zdAlT~kC)4or|W9;{tmx&9PCtJ^(L5T%9cs|Z_@mYUcMIpy>J-No8KdszCb4#xdn-~#gLa%}TKSxz%!=fd1#SgT z3ZHBa1I*rwzzXfwBd%Ckp~Q8vunKFan_}v(fzT35paoscN1@jI7-eW>uXYv;naWDk z+QQ;IR~x^=#-B5Uolipck{8lF)l!-T`IVct)Y3n1 zMZ>S(=6%LqCSZkKmV+p(Uy>(VDlUkkky)?2kA^w%b}0;X*cNKb0X!#JTox^!p_sd? zt0<3==ABoaRpzFSHe|!BP8hB%gE_jjp1d}o-+H4yZ()IkE1)xlLy$POeoHokK!LoK#_ z6Qhs{X25Q(xC{&L!1^;8Ru4bcm zve;%y-k~)88SHu(!cRM6U<1*v^ov@7!)HKs0*O6)L|J+>)i%grm1v zHRcs&9FiX60W;z5m3+FRU+bd~<9S)kSH?jbb6>XVjBm7n5$#Tk$1z%UdzX^DP)o){ z`U8PS{~En?dCXddJhQv_UqFk6rp_@8Hfpdg%Zyl39{@bn%pQ*F^H#Q z05h#6!!$;X%YGf`n=Gwp(4?U}$}hI^A%v6;f!9WYuwTMuhhkX^ct=>&8ZYg?LJ-Xo znYAFw)W2}aXga>Cu-a`NvQJOehfSiJtdd#GkF!=(9hn?Fg%^!e2kn$pUtp_c!B5|Z z^etnL96%+u{-W!q6+3b{?16mMs_R?1@d2TNix9|--96B?N+3yzTfIn^O?P4N%L}+( zI$v6j@je>wmdEfH*5r;26t37ewp8wDlqXR$<#m5x z^-B5s;QOyhIOO;B(?ug8hD4OqE+h2e*eXyqxW-PZ*2NqJqzCFQ{B(J()|1Gm3$Wby zlSdN3aK7qN$E4oWf4F`Vn!SAQF;9iFJnH3jpCbUP%+q8`liFCn->o$;5SZmNE^I4@wa?4S-M4*l&hE{4U~g|Z%xh)FIp(U-q{>ApmATnJna~zqT=uCOP-gq=OdbE6v-|{f+)k3ES3r`%b)$K(hA0$ zsBN0v;aAoXN&1Q7>r32>B%1wwRO=ghxKaVvr_w@i(o(N2V;R&`p8P}%-I-6wb!qZ7 zMMe=Ey{p_w$AtE6Nfh%u+y3&m+9p%S=)fv^QG1NMw0PZA3E!|xzA@))3i7{Y40%QHH}pit-YYHajq!=x zAXd9G-;$`#dZ*3;gPyf@2gf*lklG<-k;OfI&7y9Klg$kL}&G2&iR zm?!1<`{y!07z@mPqP_v)&Lz`3OoN9@t&jxFcvV%kQ|$ds%k>Nn9&vDB#*)d931nxo1IcgHo*&nHSh2%B@b+ei}}8pn-~ycx?gjSA}*f zi(yN&2C;pr=aykL1y-7VFc5!Xol5-c13-dgu7w>7vm8>ydwzO)dKMw^oTx-K!sal_ zawAY;yCMAZZF|ST9^{#ACun21VML;W38rl+PnfT(Meg|1E5@S|aq*6GUJwA_eJA+m zaX8d`kK{BE8?a z^Zn}Tcpd2g?KTY+`dJ<@V1%NoZVm$zePsZ`)?s(IC~ifp5xm_gGBbk>Fd!OU%EbEv+-aDKS>^EpXr?z)5*&Hg@-x6sw_+#KOy z(p^jVCyk5~nm2R7!h0Hoy2_7B^}g38B=ment86kftJSe-4GRlbH~R1WN0ydh>M8U{rCOVkYR&IkUydSxW3_iD!5^ss-n`xa;IX536aki4J;F%d48$_jT z82yOIG{ZD!jQ-?zuYbY4@m?N9L0e5b_tn|WH@uH6jD@|cf2+)A`ynEPTB~Rma=Ey( z)d>QQqx#=4TSY8KsaO6s4YjU+v4MZz=5JaAL-OJWcWmFn#BI<>QhxuN6luHg% zQx_VH2uh6s>TYS1rROHB8sPVu20`lc_?O(w;Ir)osBZ+W{i3 z_`%)1`niNf!hvRti^fK=d209>?f+Q#zy4U1SYRjAH|{*U5zuw&`ON2)v}km&CFxR) z(p50|mV8siJHpK=Jl1tiKQ0*#B|$o6=d$X*DPoyajkWP4YZ62Ex8q;kODU=YwdaWj zGO1w6sg!0(^m!f73VP8q#fl;+QNKo!B=QV(FL8AyUWn#fe;R-J=Lou$jq_uAnz?V5 zneSSDmqr>T94~?-a@{L^&8mfZE1#Wx`=Q2xz5|}}hsUk`MyphRTf843P0x-mB*Rhb zD*s@@ZU9~sxc;8>S$VhnU5Y5Bd(nJUjw$64)PUT(Frr1)2S5mYSym z&>!@tu6x36o+%lV8Cqv8VJ|F3c1WC^U6)H105TR#S-iJeJsxh{Uu;?DQ5k7XQby5H z1rqU|VJSlk4&I;cs|aCUE$T}${gR3|z{yd%p9>Whn>`MUB+r{h7vGqYMoDgRh0gi&3to)O_Qww$gQy{?9%FqL%TL z+ORx*S%b)ot}7BpGZlOp__tP8I1m`FGDkORPO+9i{xsVt+nve%Fy8>-V|5@9qRuG} zzKAW0e~@NL1RFmWgQ1ZpwPRhkBeR7XKyAO#i7qo!-pPW)YB-jO1Jo&U?wK*Y1<;~{ zJ)yFqVzp%Mz+D71hWZJ=Yxj=gm<+#(xEmyu=pvZe^{jzp=XwB@b_Sc7U1`3zs zpW5bIXAbc%WbZGS6;jb$PxFWN*6bI?oY&5m~C z6@sv@qMoF>)jdiuRQe#@KPU8Q&QJ3F=+KB)0hN($zaQ`{N^?W+3uN}I$eXG1#dp=Z zADhnsrdza=j!$99KIW(iB3N>onq=mRE2X_owX^dZdR%6z%Vj$&osZ6gWvNWB;shktg3{H2pn0U!f7KSFQ~i5e+x1H zf~(e2VQ&A0ns;V_f|?P~wX@XGnF?_U#{hWWbH!8Y_Jqx4z+H5;HvSCBU_z6PbP}{C zTYZ}qLS%SD+4!YAa_uK^uSHRAtEd;|hZ< zud=gOUK`?~!?c)}O2E~^Uy;`{H&v;k#9wgfz7fu9;+#c~_+js{Z?L}38jN~rfq$%j zn2cGDbXr_(zxr2b4?M`)_{>h+jgBu=W74tJ| z!o3+EhnPKzRI*eh81y*OKWkxu-mY0tu{8-l-=I$J-Dfp^MmS4b{&wLJrRO2*D&d#x zTw;4+G;(u7`8XE=i~mtN+e<{mf2kb8yb^f3Q#ycHV~+fL9=I(@wQ>L%8#}#n@A|1lwStiP1xeDPtCVX(P~G+hD?+oB#mUR5mO?go!(Niw;^PfPCPB+QmXA61Q?`b+o2?2fr8|BJis z5$M0TcZBuqJ8=RdRAA|IW5L|=&e?N1t2PMkY$W3Mpu$={ zQIIzjURz9AQf^ozQT(QTmX#_|B*m1G26y;b1=&GIAF{3OeUnB}wn3l&aq`YiLs>F5 z&+nC6)#2&Ha!E!C7o-NF{6?4&TIH20d*{OmhDct!B4VeXq`QEgo%@Tg<__BZ8!L9R|F{C<2BhqyJj^1hHtB4?85 z_Ymq2w%bOmi-RJ&ANUQSVLlVP!TSW1Dc@(Q+PWW!RnGD*vRD{1ueXc<(CgfbsMrm5O)QN0#z@R@F~ zB(HDP08gNr8=1;1mOp+>?68j>%%E$7%g;&6$x(AJc(^gkV?e(^DplC{yA*34K8qF? zV8hmXnV~evzO4L>3xFl9SD=j+Hg&~~=VeKS^odAj=(!Exn>9SJ`+eEXw~-Zbb>QjC zw?H7UsHC)Oz2>;)^!lr5#6=pb6sOQID_~0E(bIgy)*KcCo0sk!ZgffK z$Nx9-Pv;zCfeX2s(EXZ1dqGE4nn@v?dThCGnb;@^b$`Btk0EJC?=KBD z5RifY*Rk=|EPOmh$oVJKqPZ#;Sd=b~Kv05%B!MiU3|`g2_A4P1WO8vEN*0)4d;Tx? zxdDtQDFVthoG_f_>+0%idY_o}rpIGjZV1PthIa)2-0-9g>v;UVJ?=HJ$ZGPFXmG>x z10`#M*_Gnrjbk3`!;&yJRqN3{Ecv%0$1C-vP79O_to%g%;wKY+ zh9p?lOHHpo53m}Ljq-NsZ*aoKTJRJ_w)#SYCF71v@eX8A@C}#W6%~!=x4URx%jwnC z!gT4U9S`&}qO4*TCKRNlqJp#CsH%YaV2p|$pXhA*rcx>}N@ZhbQRvz%!}TYsa;{`C zQIq4>sJ{l?v6oMV7!w6u=--8b$S0{RLZ!F&=zi51vOy0L2Csv)#YGWNTOKZ2gmWSr zceyotFBEwWM^k5+$AJ@fpAQFw6*uj$;zW3`E}cPqjC4uY`Y&w-4!FG0BS}Q zOp-8VAMOCr0|idaWh8ZJN)Gc(PT*6KDaGmiGs zPW|#Nr#}@;lSI(>_ZReVcWNr-rDim!Ek>aW^PUf;EAG$T-$_wWT#N;)4-QrU{

D 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

eQUs!A$BL53pBx3J0vIw@`p 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 literal 0 HcmV?d00001 diff --git a/tests/phpunit/data/images/png-tests/test8.png b/tests/phpunit/data/images/png-tests/test8.png new file mode 100644 index 0000000000000000000000000000000000000000..49a513647147f0ffeff943c37810fa71719971ec GIT binary patch literal 45231 zcmaI6bwHER+doW72?!Dj(t^_6Azf0^h%g$-(LF#Uqy&`i?ye!o04eDh9n!)iMhpg{ z-tqlC&+~i#c%OIwY&-Wk*E#nUpL12Tj+P2BAq^o01_rU3s-i9i1}+E#1Dg*Y8$I&& zm0$n{2BCt3f`X2kf&!zP2hh&J*%kxCZz)I5*Z4b;aNLmQ{0W1Zr5gYD z6O+Ox-!Lr0pODM;M|>ePq@X0rRyF7gnju_&)5mFKh3<=t*eM6n0Sd^;kIE+vJj{LI6?Z?14 z#`gCM_Nsq#gINc}z`}5w<#|ayxN-lvU5CvGgE0wXotb=>2s2R^<2R4~Zwidx&oJus znrsL$k})ux{e$G0F)E2M4iIWGxEKo+-&d$H77AZf;A6yNVr0Bld5I<4fnj0rNtX+& z`xi!jwJb9aPIoP4s7b4U3RY+*E{4xn<3v(f3yjbVd9G0mMlmc51^TCB*o+$3`Fzt| z>lFaEh&EMBjP8+?v9!0-f)s5jlQh1k$LpI+o4=eJGiRq|u{>4X#nu>q zjDbOOHPv$`_9k)n@Ak%DyIp5EqQCIY=@`f?!*sHC_cIO)2jhv>1bhjwvonY7Hi%j8 z-Q`qaim_yf@p0|SOmLYX|2^Skz*Vfj*o`cGZh_8kDY_SgL_~+IRt24WTd^|tf*Zi~ z*x(EF)4Sz>V+{99*^HX*qR+SPmaaavx?gukaOC-2k-IE+gApOOU)iTNg&IC^QO2AY zN4M!PYYzJV&`nZg8cNwDhlL27Fr?lReD@{BsE*X`)@sFT8FB6oKElL`B{81%!H^9; ztO2T+zFC^fP#K8F8b(J8?iHR|mR=kCQ@pJFlhw@}yn z|L|$wjrx(rv)o_Lent}D$o9EWkVPdf|7H}3xrzCy!k_%9@g4RImbdJWat4~1fqc&?FCkL1 z(9}YwDVk<_>Co1~vZ=Rw-d-4>n6K8MQ~V@$af_B8;-Zu+qK#?T2C1xfjD-yogstg} zMSUn~yK^n!_%E?yL!Tbtn}&-fM@;lgxvb`|NS*?|tG*-|`nIh_$i$i`phl$Tq`IuiU949uGyTLN zTZ3&s(Pik*HhyDhHDg*5IFU3_``h(U?>3l1qW{aL20`IV-Qr|&bz$2#J2)kI0`eL8 zmG8zXa%b=>zewc0S98ht(c#sLs(32ooyj_uMWrxO%w04)ndxBffc(e{^J*tp{YPN{yeB^_4>Kf^T6k2&%n=lGc-zZp=lYv_4(!nXfy27Nz;J_ z#vB(ML6k|uU>XAU8Jm8}5cV#~Qnu z;2P1TfF;P1)uG2B)#3gU+}kZjHis+cT*5^H=}pis(*CYJqJ7zW;-3uEdfy*La6Wua z0$ZI@Id?%6om2mV&%vh{MEQj9MG~Jo^NU#@k0x60Ii)+aO&y1Cl#`8oY)|U@STv

rImxga&cdA|2BkuEZHg3u6?Q*>NPt0n`@}l-_Jaf*3sY~A`j*zGMq*3d+ zl*N>}<^_zT?9d#wPq#qNi?TYhR%#YqW>!a~`$1LLnmk#wLuS3wa5=;=(s*uH#?sh<#l+UY44P|YSKMD4bO_uR)Q497rtu%x2a2g z`*o(`~o$b2y#`jeHzw zOug0FG}bjZb@X33{i^$Ux}-#bGt5XRr6PG~#I+Xj{)aWCWr~df+%av|)G&mDIt5Ve zR$X3uS+Csochg7XQ2yi_AI@UZkJccc7DST);+FHGQS|Cz%5s(vNHez^NQw4@BvMtSZt@;L@k$k43 zl>7rvKKR+f>1X8BsRTNAojwX%O`x%&ZSVRUyxOMXtKFZQ5Lgn3ccBE|ck}`}uheyQ zH4?b!ip0~aO1SN0g#wqd4l{jQ+}?AL{F2-0d9_v=6u70cS1{hY(mS@65duEP-&ghL zoR;YFuI4Us$(JtZgzv=_<!e|8hhj(@r#n2}b?tl+mb(zVhm!EU!3 zs&%HoeOu(np^;Rr7eaGiataO&K{TV!QxBu`^r2j&i?;32oUDhuxx-BMpO-SJ+1W~zn$@kExjcJupm01>L zmiUAm1_oMUn$A<3@$VaDjb%?KhJy|7{r5eqcGqq-z*#xUBymx)%sVQdBCeG z>LdnP1{r>i`%9mc-qegQgWzrO_O-!IhK$!YvUfUXQz+}fvPo^E%x=)#4KFhM>^fAO zl??4wKKD{G_R<5|dHGs;*kZ`p0Ih5p)m$v?ZFOxeZT#JbY^Bf+D4T=6v6r!?hJ-cH zg~#$?4v(LU8+tVchSVEBH%n_LTQ5c{TYCprX=Zpw7c--SjWn~7uqL0Tn}Y2}2h{)% zTfG1+ed_=xYjGRqH!_S;eiCQ`F1B8ljD9Z8uAUNp(#-#%D}ny~FwD!$_@60WPSVW( z=TOF)I*bZH4_iiY9zJesK0ZE1QE?uAQGROyQ9Da3E=B=90RdhQy`uh6v_zLm>J?we;#l^*W`2=_c1h~;N zxIO({y)6B>T|HU;n}VXPr?rQJo0kL7mGOb1r4`WIOPU#d*#GkuE^hxr*46XBIECgJ zub-tGFFz08!(09LL`}{A|EVr6|1;auOV{@Qp7;Ngu&2Jin=P-dttZgi!x}9+JC=v7 z+$0n{Y%RTj9{NC_^M5l^=OfSy==l-o#wZ}f!^imA$idYH=+1F2Yi<7TT9N;C?SneFxS@AewDoZCv9(e50J<>#=ba@S{`a#8{;%}@Ypu=yeiots zbuBOYFuV_v{eMaNzlYH3^YHV3R2Ti{f0WHespwnc6NqBq0r+Z0m1C(X#`%nT6*Ze|M_6(Y5S35U=${+Daz^lEgj@U zg;nR1$g1J5--n#2>**ZWb`#gFxLAL3!)H?R>SsgUdsS`?9C~WHQM*;Wr-*o>j_FGZ zo)GRw>tlfHiWZbQLd-!YvGV?9RnN*Z$VyvIVV&FI zPx@u2o?mW2&uh6}xyUQkbkhz*XZbIV9z2hgU_5|Gn7dOlWOB8z^L-kA!H=~cowK3B z0N1g7$WaJV$cad#I@&F;Xo#_U<>|^&A)K*k35p!|6KO295K(js{M?P+`EXiv4+7q= zVq9PeTi%i%XG&kmEUCk}?zhgKiL-Fk9v0(-tk4t#g~$;Sl?S;>#pDNMJ%_#m#;yakY~WxUN)JHqtJo}XGd z(}}tk#WlTfcZ!3^53UpLrmyc^yQYVC@!GrW4xstuj*8*R#$w8){2m2Nf=m=mWrT@q zMK9w%w})*Qii2v*EQP@DN!6Z2Q+89-H1KB3G(QQujci-(?AjWrAsLz>{{}DrOy3cp z6O#fB#SD41Fn&2oLbj3)S&@02@gsoX1n(WJg|Pmn!2(-S@j;%~tu~e8|2kh5ubtzG zIhlO6p!NB({%{hrA$|HEIP9QLm1NF6|3!i$1G7ExA4Dg`A`tkvHlqivD~C?s*bgtv zUm_?QWqRhEqyDp2dWeE0sN);dh&3!ejO->cD5!fX0X9;jIfRq+_p;_4a*RHuGYptU z`XALQ0v0|Zs5Gm`%?g7%>w2A@J#d!@F-tm$#02B^e0nY_%qoHU8RxlWSYh)Qk%N+& zG0hQ64-@Cx;sBW-cLoma5heP_oR5_$z3~eaK^YK+ME48A-8l}>cRf+z5+KpC?pUeC z!(KJec@6JXyVertC^4`{#y#WKN}I4O0JCn33a(eTNaAia)i_w#4%1SgcX!RphhMk5 z9&b|qW9u~F3rpC8v=+U*N+E)9pjWlXt^pSOSwet9^ll$lf>CT4Dft$GR%ipcFhh+K zd{8|LMt$SLszL~_&bVY|j&KiJj~+fn+*bUxX2YMGpT}xd$bL%dSTXPCht{6FsW4su z+4G)P{k_fa;K?c%OE>F0<)M(u!XF}X_3hQTZ++Ax33&8CV17`YCh<`iK#eWlols|4 zZuT%0e@y*Y%}s6$|F3Y0_nMveTCE{U#wvRK=E?4?a!Fk6WK#INp6eJCY?Y?%E*Q4R zu=%UhOxG6Y5xuIbrWS7oU%5w$&X>T|=}W#N7B)R|XE0OU4JWwQ= zLLY0M&?Vm86Ad&l1gitCo}=1Dh;>Aa%sD<_-&gqwO;SM9OpBl+Ht2}vq@7$eau6h@ zMuRrCUH|e3$l8*fHi7f;@QZuqu*K5{IBSPH;X@j`_ary>(;*swQeLQNH*6Wf&1`Je zMRh}T^3lrKKT{CYB@4Jb)zKge>UDSlO@oafc6`3?Y@8|Z8-(%xJjVMlEh7i$g=WK+ z_Yf$1L?>;J3ujMWK5yELscZQd5;uSt;O ziAby5*N0ws=~Q}%pfE@rsp~8hT+O_f4Y_YjI6C|Cag1T}DPo5PwDK?4JeKkkF%RiE zU2~Kbq_$#P3+t$)lAEPDrtW5a-nH^R$DD<(dY%%w(8#pu4A+la({_7%d-iJvjScrW zJy_e(Z}~tBu8enPnli2o`S4J{9K!|6!i!rmD6-#jbJE(iMuYeClGs)EpdA7rvO^h4 zX>rx9{L3?6_@vc3I|#e(!jjgW)fPcZtwm%G99((*btjbaSSMTd*ltJ62IXOm5&-QI zQ>^M@U*@qGD|}9VxJ|_Gp|Fx9G=vqv$^f_mj1dD?1k;p8yrxvH{X0zXR-Xs2>d8pXg#@p~g+*Q9%r23Jqw zuI8`8G|v&NC)$s~vG*2FkKds<&<1VcqWAt*aFKT%tUG-B-Rhtk7cF{4fEvbJduaZn zDRc3C#;Qm6oEvHWQjefuDx9~*xu+%w7y`wS*(w#K$nMO)6z{-Shwr5m* zg+9%^6zEYj5-4=bjq{3)vJ`l(`RW_^=y`!rFAW++LgdzHDU-Ar#r*MFrG&yQYE(EE zBGa_=zXZ7dvQVs*c_{jkK`=uDb8E~R+g?>V1e|c)dCDLXD)oo0LytFEBcN zP*_l;CHtfvl_1(QeVa|NPNH1r*n&&ERjg30%M=)s&ke0q-V+&!MdcQzOJ=|VCrXu8 z4!!5Zf-@lT6WLQ9`OSRtPjWPrN%P}#Kfll=X*wf-BK?X)_m*2!0gj&_eF(GnQucpM zWu+$65%($NL?!mnK=+kLP-OS7+!a_u+gm7OaMmP<73wSFDkqr3+2gFW^SpMVIG6jB6 zm)crmOu#QjF11b9%Zf6tUX8W+J)$`VJKo1WL%KrJ>C%ZwYJ^YqRcuEc(eCv<0pdn zKkTD5Q%0?_fZPV_@0*QB9d_((j(j?dC5m0XeM*mMy}eWyk4;%Y3ASU4>WKQbCSA#s z5ri#DW@*~E6|YazTsKN>H{=MD%k~v=8u~XlO@)mO44C!>C_j0@%Q4>VYafk^Mr5!H z>T4l?|FOeaLNW%Smj=+G*|1pz)BQM`&w5)hRyL;{UTg5~sIbm_Et?;d0lANa3~3%U z5u193E50vL=hNoD*ibQ&FpOLKxryS;u>P(|m0M5v*wX$QP0DQ#O{8I9;8w zDMwZLy8GxF6Rt!{2HExX8mi}SO}DztmVdVFd_&{D^ol-H9!^k%KK{Mt0-->7$7-C# zyt}a#GR1>TDGRyu?P9L+jqs-X0ME7XlAH!4W&F!4S_ zV=a%wL>NJr$-bLx!F%Wf>+r>9B!wE~l)+O|eh7EeIVvD+M-;RGCKYWd{G;v1zOcZ@ zG^HJ?8I4=d1<)@EpQ3i87Ul9V_Wa#__vDAoA=I)#k^%~rMpgRs5qrr! z|9euM1DOa45TELGjppNIutP&FAivH*cV(}?ntY}9#1qNWzv9t>-4_O*G-}!@P(sBh z_j5Z_2rox;6uoI%X)-iqX;$w5S)mI@ql#C`|?BM~t(>)2Yx!0Nd z7JJd$$Ga4WRsl32pfI8&OFsUd1++W~67PAr52%#%Jd>Y@)APY zo5hlkp~yo!PJuiO93SrDQYzk%4;11Q)K#2AZ_**!s!*(7AMacrxApxje``pcPk zZqlx;-K)9!RilGoH&67eYEDV$=Q?Rzy#DvOGrgRX56q<^rBkJj+uH z1M9uiusYJ;r$*CNf}rIhUVad50q_$ApctM+#Dxcd2J^1fB~w|AC^%`BRiaVb5@n9` zFYhudt83edyyj(*kq69yOr0`9`9Tb&@D`WhkaCBElfd7O7PXDv(Y9=hj&Q;iR~wl2 zmu282ok6_%vLI9pWBv9-X_o@vtB`Bu&X4;H2&w1|9^9A!gdIFs#EV=7R!mPXtU(y)b8m=tF22D(bo@lIznhx2=VSJGZ--)vMt@N1FHohmO zv7_hT=LN(+iEvul69?2kw#EZDrK_pqM7F8#=oQ|8NokGk-9PVUJitt*nJ1m-vZIuw z&(pkuI>%q9XcurV%h6I}&1lcbfd5SHNJiqY<^4}um!7B561G1J`LC_z)(U`w59~1I zlUk6jF93FJcL>;I{JfrtYYt}#cX5`%fP!mg1-|oIpghpgsSms9g=J=&;P0zo1?qoB zzYSrr=ce=;DpE?17NLv2XfMxY%J=r`P(h=iM_s@&7l_qR8*p*Kt#0qj+(jVjY5?`s zD^{xTq7_jG6rx}wK2fY258>uBkf_blm)YKlxjmxuWzgagpN|rcxdtG$^Y7kUT3;dR zud`mJXL2HP0Gr2rX#HQy=XL(`?h9pFvjJ84z+Tn+da3#g+74z(ul;a~EVOfK-42g2 zoVxb|$=aAAl+3!0I8Bgr^FC-ztuE&W!Ce9dGas?uE#lQ^d zmwv?g4=h#xR}v9E_Y|dmlx)9?hxV<&Ppy|T{?>DQE7Ft#6%Yn|Nm@rwOX1Y8*!&c+ zB;(ea=Tl)vBQ6VZ4yEv}e0UY1N@qLpH<|O(yMLVwXpRSdfqZ8{<5ef3pA+X+0L0)8 zb#PKT8d{IEd!R`&iB3p}zX^>)XI9b zFeSAsT!sV2%)qn(Dw$GX6Bn9$KmM>r>E(G~x4yH%Rh#}ojAi_+RmyEEMjS00z2(vobuY&p@4=gR$WTE)%EWy#sSN*)uKsq#$w*)LzXsvpRDfW6xT;kaH-SV~oRy zAs^vK$9hoYw@uSxxWd%L4 z*CdGFt?FZ!kD04=y3SCj5C0k8R=X=D7w=G^#%0O3)7M`faOx3cl6%tkd4;G)_ZU1# zL=eR3nCz!!9AzQi>*ti@UwthAswx0p4*tBflE9lPW)p`Z3#5^n6g=faXcN^~J3Brc zoiNwXbS8H8FYi9BAAE_K3p;t`(ih2sj&V&#M%tdg#E84vh$Vx9f0VNIY%N6O{~p#m zs$WGvg^n!1u&;@}y!nHUVT6H6q3@7NdcK(=4{{NnqP|@;;$Eb@Q#d}^Exr9nMgLku zhc*1+KFZwNKL<#Zcn9FU^DJxi{G3NSV;;EI0X5e?T~sT7-1DF=+`KH0P`L#kqypSE zbHG;{(g>GV?8nHmPIdebDI{pO6g77$;Fb${9sv6Mea_lH8q(O=EVX&Bk+$n$mm9<^ z<86(aE6i`h20umgM`&mN%M(N>h50zq#)b%6m$U6-@1ifOxv65X)ZP}Nq@R%DRM91d zB^57}SAX^<1X@a^Erj_W2LZ?uC$0f_e^#@0nwz-)<`b?#n#}g&6L={|8q?hwO~kMW zzYi>dc>hvF#Mfw#^A(sJ(MgyUwmUXKAFjP>9OL*7=cko_9HjYtaFYx+2 zrBwyI%VQO{1l8|HQVqsNl!iWaiPeuRzco3ru1$6AZY0$)bKL4 zoHomGfE)Trf2lQ1Gu6_>W@a^VWy?<6p150py8R*fnq5dwk&<8HZ^ll{=ra$ zg`}sEVMmoL;&f86rhp6GJ-O(fn^lq6J7D$lq^78&R=E+b5 z0aN)>bT66%!SN7L`lSs6dJP%_{B8K8FO!DKj0ON5TB-xi3eutxDVtblT9j-7agcvp zo&aI05Syhf0e#ID#Eu?1Idxrf6XmX)*yfWYu@}o2l47>W0QI$;&Fml5S6KV%z2@^t z2@sGGxaYJCTE4b6`le1$;40>1jrw!V7KzSf?T(S4{&70RtUUG%2#2)N59Y9$4e2&p zr{wT>jx1&*a+K7)5Ppb#kVr&C<^j9YGyOk3SO5t3+a$o@-$gIOR2LI&P!ep}?mIf^ z!FfuQ{v6mtX7t`$eMzCkfs1lQ-ntY{GV5D<7qdz?jLufI^t^&OX}zbXCvZ9LCzs`_ z`fuKoSfISkh z*ax#PLrBB=xhS8#;go|!V3xvpDF&ua6OX>{wN)F)uBCz*@7rMs)5zaWa&rs=mO2#ROZTYCkq8kgO4aHrlFhKm0{sSKj8g_Nc$|L|$f3$A*k_`yz%& z0|y*J(!jJ(-yL@*)o4Ct3aVl0u^DT$M=SuMEd@rZG#cV1zus{O9pWZgg5_<_ztqk@ zQp@c}tOk9kSPv>g`*5^Su;SY1n4x0o?M?`3{io}U^R3)fVJPx)s}zxA?>|7ZhR!P@ zYT_U&q)+=BW0%;m`D$J5rGp$!fL?)g_eq2Oip;GdI{yJna!}5TN`*WwypQX|clJ#; zT$TB1J(Z55h)$&YEd8g2ZrC)R% z4zVWJAH0H`T#%N+xuv_#J}C_?Sfg|O>5wQ!*<8mr<9r!(bMYmBN0I`HC>{rU_2#(~ z;*n18)zuA%q^3t?ikI|*c@8drbZQXBX?-#Zuk;Dc*lXWr=dy~%;mUkjZ;~5bJC0=# zkhb1Y2bK&vjY-)~e26ahKjN$AdXWdCogj(eRWsm zBKSsM-21^99?sNnk)BM(X%n8vfFPw7zQNFaWK|zm<5h4Q8!8@5buOY^PbBJ@35VJR zF&RV4z9m_Y5XXeZTGWoIhB}eU6dLc)2`*Dt$!J#^+6+fnmQT_9v|#&y?j0ub|Hv-2 z03a(ppe?2P}BaK9R$<`=|@^9pNq=j-$ zxa^XOFvvCCOOjVX@HKT|7UjG}{&-LM!C_r|k&|q+>xfp!WV4)5qZyRELk$bTBasw< zl9}Z46f423^ct zdLC;>0gz&|bm|vIr|1tEphhV+4FlAt>^K)`96rOmtwL0qQafV~DozD;52CB`LvX-i zsX7?9qx#EFccCauJedbc0M8LE9BFrm(I*BY(bDO{NCvCMolj^?2p;Lxsl+;0=`UY; zr6BidxiIi zf`Ae_5kL!_7jgUw!4uS25+I6SH`3=^Nj_vitbmLtr2?j2Ex2!`Cu!*f>D1GrH$rCiR}Vs3mpbuvA7&KCSDKs6Ku0T<-EW1Q97bHM6(5mU@@2 zE0|Nc*Y!IaOMvhIl zq*D|})OANjZGwqy0tE8I1sN?a?Mkt%56(=Y{$t62A~<&ZsWgYn=s(%8xv0%Sgl1l4 zng=B-Na$L3CfM_=&-JENb?pxKO}1+|?0T8Kj`!1ghG6Z`Nxrs4t1uoqS>s5XD)j{0 zkR`Bx{am(qbnh0UiJ)LZ0Wr3cou;7kGQFU-+UmU^$XClhj1ZOucU!f2m*474sj-G` z8hrg%!m=(-qOPi$P??|z@9D|UfWN+b`_(4OZ?i1_q-GhY@h^E)$Qi%BAf`jBncN4S z4`d8S#4n7iEqZt5qF+&mhZJ0w>gLi{rHn$PKYQ1cmh=GIE<9Q$)4opnvTx(P!v#wa zj|jtysc6SAd{!>L<~Uw1!t=<7%JMSb505!4yk{*0V?&WVl-SZ9X*UF{i-#8!U5-k{ zG&7(Lo!X=Vr|s19Pp$dYpIUZK{rEsc4Ai7owE6dWy0p>^Xlu`;i(wE^4;;&y+{wS> zIg)redQz2UTd9dM*8x8nTI59Cn*@q?&%to<8)`W3tvdvuz86lldS8cd)GJ<8nKn6_8Q7ujR8Xjw z#uH1{A8D~W$M;nto1ML1I|@j8^}3saD{6-{VyXw##itr8!y$tQkT+zn7O~%(YA#fx zbh=Bgu$C)*FYotEd26fyrqBQ3YSs*q4Ui{lJ{xu9DoyK|XYbZ0WaBCC;?U+~r<(J! zLgh|N%hC>7THk9wtC6iGjeW1w=uADxeQllwtJ*KCOA!w2YZ{)F1yp!fDV!{qdX5>T zC@c=gh27j3L{!cgK+fOgMP*W{CeDTbd^E2F1HAjbT=9pMW^Rjm&$O%di#gIvG`|05 z<5IH(Mb{ib2a}bKY3QcwMQATD_owmPNn9^tDMNsF3no zTA7O(FezBd2ZA${#Ilz~$$Z|e3PwUNpP4-#oW#COb+bYVw?JBC)Bp`d11cRc8OFh5 zEMu=jce!XwZBbPGoIDZ)j8Y6kTk5ay8yd(+hI#ow+HVr~26&{3k#cqBJEeeg;Z>wq zH2o}n;Ew*cWWN+|#TkHOy3p=s*%Jh=m8rr-tqSE@5$~T*S}hd*{?PAlfdR&|B4M$T zEfy~-)#DyX^VAm3k^AXPzq;g(q7`yMa(n$wU)``Ms#K&%;+aNngJ7z7G^;{EBe}6y z+AjG)^;&F-i0q2r)6`%M(v5}qo1TxW_~^d!LhWCL&|jq|mQr06X^_7%C|8k+uO23E zo^s8=>8~S4E;6Xzs~GEJ2>>z^$LFOxV6AN zhrWc(gUW;7NpHNcgEB_DrWhLhY*9CiEQ1A}+1(DTvXUs~A{4pHWO2U}zR*eD&oU!I z{bs88ha~)Wj;9pzaT%U4zg7Dong0sU21OstmQfCQrO)>{W7)*AOt;@ufevAoa<5=9 z2PWJW4g0GoIO|RN!ll>r>C1BVC$Or{25V`CWUx6i6sb=ub>3$(osQ^qzWIU5JRByi~(UkDYyYxoh zh#hqD5@Z&+m7Y5q0HrDK=cXcIA1R@G2~tP8^a~s31ZmyoSKxjyP*G=P`0&ZIfi)}> z7HCMa`N%Mjbnifgy+%Tav%!P_gnXl;1>ly*E<2^m(E*KXHb4S#`~(Z&BwMH9?SP^D zxksRhJxK6OB3n#ZTWla-jZslbp>!IO0Q`7l;ObRlt0(A=IgvHUFs~3U)9=@IN336kD6!6^AuQ+NZLf_#hJhkh`O@U?6V&=N3gcBr2%`Pmndn-*iycUpI{#Xx zLtaryy~sQGxz3S<@wSo!MuZM00^CV6JBhXHwG1jA{TQ^BV?#yc@M}@d*_t8F4MfZ8 z{5lrNnS8N+5?>3uOb{GI7CM^44yl|K4fnH05+uOC^icdOuTptvltrIlzNZ6O=M_MT zMZO%Y*9?PYoRDT2;{k-)lyl6Mw`TK#Urjg^9=}W!ymmR-!A4R?XHBR51wyKR+`NIi z(OiTNv?L`&k&F@uj?H5>y`U#&yD=zxd?n^x7YgFcOc|vT(41EWNJBqqbEHBPk?meXVX4gadE?%%rfkCY$r z<7Rp;zHFS_x-C6#vDKfWxJ9+R-l9&_Xcf2b|Bm3#j#ii|Nwlj8NqL_1rw&30c}H1N zqx@z3$YK|3pxcR;Wh(Q6j{zIs25y@GS~J;>uaa@SsOT0KzpmCxSc*hF_ zWz%oE{hhROKJoO+)Twmyx1h|(P5Gjigo=Q~`)K$be@@}8;}Xsv+XJ`an>8~7ZnwAe zip9bfG&c<*)#&|KFSh_}ajs&Y;o3(m24O*xhns8B@;evnHKj|@zVD#8^ zkVSNc!I(N>QglT8Y4#A4F~$eSxoB}&Qu4J+0IGB+oAY>Gr1Yy`(6_-!j6!`DLX0 zXIidt&Gnn^z%tzo`9A+zQEj?{;ZLy@xvWKvJ5=fGkSGZB`=cc-_8hJp9<8A&-Ky`m5!EYtZC3*P$s{Pr4WCa@& z-wBz)Pk?H~3~Bgu`;<=}b>4Y+%Dt+*uM3O!dy@b8RLs+&wxh-dfgtNjbaIybvo^+kZcLnohqtXQFicgs+#-@>TkVB&nmcylZt3sevJP<~b7fr^P z`VkXL&L^QjlUW6FRbtuv(Lanj1G-XX1&`d*2ALKFlbQP1Wm2F0%0-Qdc!`I&rS_Oj z4QP3zvi1Y>iEAb*jIF`?sXut&;68XLUYJR#2{oWq1g6@DWwX(11@!#Fv;J znI;|@3Qqf?%5i`5>Zm(U8&#V;(_6yK$qho%pDOC9vmhcg!|19T7E0!V+*fx8%>OA; z$c~YO7)((gnKjL6ka9z*k!H7%gr-xLE^S3#@7xuKsp9a;meb26NZSPnZ4I z6wcx){^mVf=ECM&$B3>@$H&nn+k{u!^9hH22Dq~s;^ED2kS7uQh(rm#r3H&{msi(n ztXhhH41-h&$D4^7@D&9hAeHbn| zw(CeyVoE)PNFQ|i;^7#@>*GPO)7X!qiB(ChN9U40wnXyGgIj*DzG-A4Sc6i!yY@P% zPeuN7LQ)JKUcI&;{p0&Qv9Cf89o{F3cGlo3fiuzWDc5)eouc9$_Z#Q6%eoPK3;ooTE)sWv6 zv2P}Ieso>OGd6WY!BnwW74-pE|KP95W%QR;2O_5ZLi@NTXWwF6TSWifyVdL+Opy@K zlBVF&i|u}FK7UbzbcmYZa!!aFX0g_YBfu107Z!|Uh+PlDOY)@Pu=ML~J6hC83QK=u z?z7v?mmYdXrPfEu^_VH}&nJ`eG_6M7AJ@TOAYMZ%kcRR%r9e!>mt=kXheo`e7Q}V& zq)^d=>=IwCXJ)}4xW(>gWsS+F(>M?V+Q(YBJyw}@&%{E4Pl{jOQJD{>QWeakM=1*_ ztr-YlnR!mnAlH$c{iT(~aMWom&gyo1lQx+ zzho=U^4E2b&*U~gn;n}r!6@V5k_ZE8`?w!bd3YPdv#(m~2o&}ez87D~2z)3kcDy56 z_5DU;wI&$-5i`+s+}S|gr&P)zS88!VIBMYM(;>e>nIc=wfcNsMe+K@X)OS@{Ge{|j zBpO+t&CVU(mz|oDfkcb-m&E3_)NuZlzztT7N~M`b<`wsB_+%GgxO(6Xc1FV+*95KI zG^(BBm2aibV1|JptRL^oKVdVU>wf3Su;y8E*jjb<)?OoG}F|tdEcaNV?~d&X%b-DBpKkw%Hm^{*ZnbG#beG>J?G;&)|wmE!0Ne_)}NaknepnbK3oUOn!iSF`A^^Df+E~0X?))Z-&v!6r5LT&jlM6*46RkL%Yksbz$oNg z6y2xm`#4Qs!=e)xV7|#t5T@eQD$;oH+kgiEkdrZIDfdSkvFnTA_;+{{7&@KMsM#CZIbT5TBO*bS)o$v_7~QG>*!~_xi1`Okk+Co3ig7eR*8tA6zrV zfoG=8*|L$2?zzZ@yjsEnc{}yiD*>eVJ!xQ{>8x!N2#b~n2D86a&d1*7>f^5mJ7z!< zxIXF|X6Cn8E))VcB2*9PE#1kcFKrl(9sG9$zsHSb-2CIXC!2}AXBTU1u}s{BIeEes zR(>n|F+I+pcdk@Cd@(J*X*yJ1wnS27&?8~;rrgwsh834 zZ#Z{@sb9ZZiU8fc*m6C!j3|zS+-O*-nX->*)}P#fb_p_*i*X(4%_v0wS6@h1rq%F! z`q3&=ic;XyRrU$)U38&s-}>1NMjTaTl--SKiLzZ9H4E3|f`8_-Dv@6K=ZsUGN&t&V z!^kyrjz2A=Ae*{VZ`AY%GB63Eel#gEHUFa3cGjlM%mCkVWDUQjtYwxYo`P(u194sw z{C+y<-x5F?kIP6QlTB=}MGzJ|W$ zvHV;1zzYssbi3-D+SB;-k$<|AkQU3!M+a48HWYseDheXRk1=)u>H zKVi!E-+l95?_;A|M(9hV7VAom%#X#cNf9aRAkB`#1!n_3pOlUe$rEm32pcLjuyxO= z#gx;uur4E6b_Vi%85MFUF7G@{)ubJgcr(zlO=?}VFeyQ>PTb4*6%I6eK8>!TptFzq zd&h4kjn2btcNCdTRd`#0tos$=kOGX}U#UK9bEp-+PTuQ_uU~GfzeD_A2FkC=17`cB zUY!LlONPoQ0&WUgPO(6r^ydxi6OEa1)j6?lGyl|0cWUI@uraJo@`He7Gn7g`f*6u&#Z9F($&b=?0oA8LUOTl&eVEaB*>0wH4|sG64#=lM4SS zodJBTaH3iO@8qya$Gs89vU$ z+~guy(G`Vj#fe(!ICX0)>2PF(0sVzQmS>g2kt)OE(}Ocr-s+ za5@W{@-R2SC?dRw`w!?@+2w$iZw8^Nj8NYjzq2vTWdf9XLBC9VpYi<8d*LQJ(#XL3 zp)S`6fhNPez*v6#Lx5<>7QExfwupIT7L73^e<;&JKo92R~Sg3Z9Q6xt1g`fui zEN7Rx>zCEp+irBT1vp^O=_^a*6Qbcdl5EX^mHXMQ65w)!9J(10>MK``F}+|P_{fNh z&juFucK^)E+x(_m^%;=BGGeoSCJ*wP2?||t(rKsLgpr8439UbU4|RH2c^bwr6U^>>w!e= z+LJ~(d00IFDKE{xDMAVBdrGQWR7w+vd)^^YIfkW9-pl;J!bX*hNn~4!x$%L9KEQpe zbeG9dN^Xs(VdRpl3-ao*`Ws@cFRpK5$9{SibgZL0hwfPg-@ND#{M+We&{iJGBqYmO z;H|N!*t*?xufDquL1>*%QuDlKWWHB%cD7*peA0*S7aOXx^h0B9nQCvSHm&_LPq(>* zymH2K5a*x&2eUv-zxAA^?^<1B(%OB>7E%~k;{G?3lUH4mvoDKwUQAjjBFG(uaqL$0 zOZrY}m(mygyEyRnzi=-Nddx|H;-Lvrlcfvs@QYyH0aN@I3mjxt9P7a(Qx!_wvIm9Q zb*U!li)w0mkjF<%#Jy6oEebp8dg;4Iubuym&-4ZnEL+#mqdkU7M%H+-VKD>Vpg{=z8l!WPN6oHvqH#T_Z_P z*|(G-*wy7!YZLUeZRA)VSx`#XS2TT`VaJ4BnhMW8y>zRu=r;fgv(xvPl9x_zDXGVZ zU5zfhR7JaDdFDl2mS8y>UlMyXA{xXYj@DiB;kLv~-)Bq@X&DQ7bkIah))?)YIJ_g) z=$#_NhIj`Y#Z0_yCUmDyXk6?koa%?|$|)|ZP96tRmAx0vQV{ho_4!*H;0-ffsAQY8 zxmrd-$D>TTt0&0`Gt>8phsg#>99%Q|KlK~z;gA6b#i+U(7b;iNwop*EJc#_O74S4p z-;hz?o{Y`?df}LkZZow=% zvh^~##61~QPSO{Z()xD#!mA23B7joH^hj241g|Kiv^j62TnZA0i}I74-g;jf?W+i> zMf7$iRebID->Aj*UHUF5zj9YNf-?S8)-hbmp!&+hhS9L)H4rTW`(ug_-gz1Af<~ zM~-VRxnb9nJyUIl2k|O>Z5Emhp2;2Brp3Tpx^E@Z<1_RA&KFU^0I_&c66pb5#RJUr zoh!d-rnBI!yACT`?s&*(rIPm=m{Zj(lH#~0={axt|H_Bk*2s?>72P2VFqv^-ya=dY zl_4pLtuwEOp$FOYP(6L28*R0I%*F^uSkWUPN`p^i6;$7GGg`;gmY~fcH{awX@yv`P zYUi*6csjN;Kq34v*LY!hq8c9G+UZ*eu!sX}#~K&dn`U+Gl8lXYz!wQ%ay)Uo%+|Rm zdD+lWbA@W=S7P06+pKxC85_FU%gx>%(0+C^wEgCh#3T{>%A{_7qx8 zyf>|{kk+Rv9EvlcT<|J=FD`NQ=|(l=EUv3VmX6!3uxo8J<-L~-E_?enK;MG$EB#p< z1k_3!5=2yVbrD&(ocKX7xPz|s8xq>*`F8*BeTYEfB@&$K&3{H;&~&Ktv`Iz9{bNVT z=Xm(fUaA*I!>LM4+~(*D^K~;8Pe?ty4Ist**x4jA!=Q^-v?-KG(&a6T4)orMUTLtN z^zx?g(R1{LkY7`69=z;a7^IE=#xis9r}Mq^uo3~h*bwQSt=gwRblJN)=fpMfQMLQy zELo3WGL-BwVjI0(#gR@--}OflT^YYq|L*K~RdjhQx_XYk*7*vh^}ux4RjSu+mHk&a zE%$ztdfBanQn~%6-yX&uH84$(Yg4lOEr$(Twjs;IHYF17XY`GCwiV4| zwqxrAL(;f3#dgQ6gan_Rc&Nt_L4vO6h4l`fZIC}k-`zq9Vnv{QpDrx6a+s4++_Nk* zeP0xiLS{1*`44HV%`omECuwen)Zq70w{O(L6{X{@V=s6WS4#Pym|cGpk*-fT6NAy> z?%|YKa~xUqnDNtiLg$O!@95i$f-egwbieKi?*e|fk>-)yIAM9f2gv8rx2 z`s@w&5l){M4!Y7=Xeg{8NG?e!{a^a#SsW%(E;JVYD914g!3Kv0=^KzCX3~)SGX=H} zeoO~kj5IkT1?bHSJ#%~Rx>!#l%i3E~l)j|<#RaG$d_ekin(zhWe`kK5BW`7^;4+0qL%D zqUESN^3s1aytobe(%iYw)eEBOz(N>$NPWLWlGgXAr=fI(WvpG-YPZsAzOus~@1V|} zx<&eGbMSMeXD~+8Ooq&=O@ry$=77Kulmo$v?fcUjjoj^mIw)$Mh%=&~9dDoQ&gR`o3U8SlKSNbT znxt!=X?N)7p|EzTe%As~_YR?; z(7BLZm~Im%s-H-M-4Tj(n2OiU~(MtjXYOhBu4@_TfOy3uvLx(>Rzi_HA z{a^ax-Nn}AfIaM7_?x>&!4z>0=+Abb6@;S!h?SImDbm%@eVT@dzKCR6wb?Jdy zu&G{nMzOOJ(a{5WrZ2aDs{4l7i2J92bs`e!r&o~G+PspV2f=x3f-s$VBzZT}m)n1~ zJh&7nd#B1g?7ZnWZ~TE@?3zV?XY@WFWNWQztrFdLSqpZFl9;~S{`r)agX#;LL8I3H z!3WchQR!>P{7m0Z(N_vB7S&f9Hp%C7+;~bKYB7lxZbdJ~G%F!#f!Wqvn7*IF@A6;^ z1?)-umbw%g_ry1*wBG}w&lb7hz>t(2Dh0ePygBeteWvxwt*AGa?;qy+;+;l|Q+h#A zF(j3p6j2?1DCWe44V#_NJXCEN7dG}jQ1!Eyn_D@OJod&YV#Sf^`zs}8iM~1&WQZEi zEYMAjWrft{X0@@Qx^-G^DJKZ4pM^4H9u?HptE&o2=E|)}CQF+*&JxD-t#0?GD9kUt zl-Y}*Bc*~wt1ZvY_UL=Ba)-A5r~4w<>1@J4&@lm{-y5WgSV+z&f;HYHYwXuJ112Q% zxvzpJU{C*i0G~~6`RqncEULsG5>IZQ-p)!%YmN_OQ-zO-CwFWITN^5K<-@LwgH1x; zQ*2n7^5YTh)vpzG*#1sMcssm6CQEm9sp_sqmoz}%j~z>J`!s!f4GTy?St^xF_;5sG zZ=)}1vDMTaMuQU%>}}!}lseg;!x}DJ|H=h}gD}!0Yd}bajJMO*v?iJ-=({|eV9T?z z?#uM8O`JhNuK>%!9`5jqoDgpUWy*BjGIPM}bH`Pi6NTM`aj72kFwVkjudsLv06p$C zatb5Hqz=}77J6OU*cz20E%J4zRDPSjTYbfbU#4%30Je2vWcX4Cz0+hW+5<3)W!3L; z9VKnVof%(bX#t|qINt9WdKDP@o+4XTJtU)7hN#=?ory0?<)`VpEq#n%rti;e3`4Nz z5(&jvwCfZjjtKW7Gl9f0{ua}#d-R5H3q7WrJiqw}eQ9x$388KkP;N}$`}A8Uy9y2q z-~pT+xc17QA`wX`okEVg5@<=#=iG`4^zE`rcBL7uXT?c3o~{bN*^kh7@HoRW!dJcW zD^;om8SV085SPnqoW3JP^m8E*`(^v`EP%PCI2H#LR~|Ti+^trnOZCgb!D?wBIxuxe zW&89Ujw9tMiDKIW)Ay@Q?|t=v%VR|YXUA;i(&XYE4Sa2M2aR}_PSU^V(tTz+vA4e4 ze{Rxt;A8Y1UI)&NWZm?I1qUBvfCKj0r7tAAbn&3@?1%4ytHWl4Jy(C2zIgN#`}-Vn z6_4q=kG{JH5?T3W`o7(yj z&IcCOBgXIlKoI@kSN}2cgy?E{l;5`N^zG0%UDo-5gFPvg9h`B28tHrU0GF?5mH^E3 z{T~Q||NH7|^X7%aTP>t);3qq^_bCMMb^M1bUt z^i5pLHwtvnZApIf-=8^{UaTUtuFc3(o|i4Y(9^v zHsoerNo2bN)Av8ncXOxwqU`Uu6}>+~;Bp=H&1!5&w!;93%%~ftI^y+w7(3{@Qzxw| z(p8Gx!<_#C!-R z7Una>s`3+UmzFi*W->o1_--_r<`{|3jFG==2Y}Bpn z1U|KCrw61`tSN@ypJl}Go$tk1_pNP2B!R7GayNb7x4LaE2Z!GgMVs{z>dEhWQ>gJ7 z`Z8>1?Q8M4qcrHY9vtP>`cW0qcjJlVt^HTCRLY;z*G>ocC4IRuegCcH;TJmNhKt+c zDa>JSFI)dbDSdixTX;-csQxz7ud~72ve>w5z<8w)JQliZI7C!^Z|LxyGD*K&E3Sfb z`Z9hmG+L8DrZ3a?$wyMlA3I22_y6XKDuJ`_#eIF|lARy+EVIR;VO);ho5T@q`>}C4(}!}>%KI9GNv!Lf-t~;GxKkxoBGi+nW>BJj%R{R zk|rCQJFEj(0_KgnudP|MMBhEKY#-1RADCQh$&hfJXhY|a2Vcp~BAMymOkZx>5-a~( zdUaJHeNB%X80sqQEktg8_}8om{S~E|>SI^7(+i>kcZrbGIE#iBOG8?;%xDOok?UC9 zyUo+9TLd4LO?suMb%DOX(BU?hi~lATtD8#kBbNY~GF9wd5n#y`QVyDAQ_hl3<20t! zGpa;iX@4|?f5`dT6o{Mfyi~1ym;o;Bh0l*huC$u$;-a{t%?Ip-+zkg!BA~QZw%Hs? zK(bt%?eEPf`rPle-C{t1lOkr*-QY8v16>|rP(@l11xc0#s zt5l#b+&_r#9M~K?Ctz>ogY@MDzqNsGGS^Q$6ty%H#+YbFU&y^=jr9nNeSq7`sFc!D zSBK<6<6l#TS7WUDr@azL*r5%&Cej9OlrYgfJI&(D=tpM@)0gS{27N0@WIn;|Dt%?+ z^p$<5>x{l6W^@UJF-0|1XGpd%_2libZEPY2vk|UWGp!4(G2jdY>CoUjLd?1<7|&h}P|nTo@QKO3Vy;-(& zx;Wuv!J<27%Yg@H)tBk}Z|Ez9T5@{8+s%SKWn|!E2KS>g&K>o{`WT2xOz2xnd@hj! zwYZ!mDtWMs+7!x&WKZl$^gaGESx7yY{CtmONv!=xobG>H{Na%Y=To$xl4B9AC-=`p(S?p3P3)AMn)_P}pE zvMX>Qra_VJbgLf(?KZlbj0IRsk0dM8eRVe|_*Rd!3(D--cX^*pinXoc5D9eIu&p-a zqrC5Tw?j}@YtzHIQ2+u?mH7`W58}2DR7&6FxGUA`otukKtgT+y6=M>wi(CiO zfP#KPso>8gm38fkdYRVK1E5|()=FkZ(d7kok-kE~Kz2Rma*&IQ#0|@PFr!imQiyL_ z@?vwpOn$D*^mP^rNuc*^2sG}uOyz>zZ#=X+XvCP#?pib}bf+kagTFbqZ_ziDe?03Z zz67jlGNDXyd*ZodrxjSGS-5%>4kx}+&{5A<&oo;2?U*njC~m!$Nd1OnZ}t$aG{6dd zU3TN)2kyeUGlLrgq~<5J(i;bsV)a}6blaSBg~OVHH;O$f6RLzLPWF0GY= zwx?~WjloHPh*bXoIyIk^=vx@DvJ;v6oN*MAmdY5B?W%lqV^F<)07FWNyIP1J)A2Rw z_|#HxT0BPDK`IToCVJXa1TTbRvF+j0^u;qZbC#Ubo1-rVx}_5^m=0~6EXqP0tg8qz znmD|kbZ4+>w|*K5D(Pk!UT>McPP^8L3Baq^`67WrTX<2_IH&CrcoiC7%T4{Rn8Wqx1xaF75WMrK;XmkalW4oyV}D3 zQ6|dqqUvNL6|{yP#wbr_U)m9PC1-EDNZ;Y0pGL4H`<0$ZX zAFL5-@WFtQ!o^Ulej!(7x7H0mtLN!E(;^Wg>7ozAgVW4u3fg4L5*Ca@bM|3e%e+sY zgagkh3B(EQQ|={b(Uoob*Teu`qp$pOaJDK;tg`&pl*bX5zdieyeg~jz)I++f_g`&U z86p^Hq_CW>5AO6X9FS?h@6e0LRYXcA`5~XDFK#Y#kI+}DE;%M#+GeWBbJ_%Keuao5 z<64TA@1qi_Tt!VrTLr5d*BUhUU8{mB`>Dju614_Le zi^uH%eXBf}1b`eZi!ecSfus_|CO0cbv*4F+iTJCeD0&K(KmFjFviA} z1nJVLs&9XWYY8*QGM({)habYYGS3H8d&cU^^sUF?H*BMy6#)1EeHVHtwJT;v*2DC( zXH9W$X_GrHr7TaKWT(p@J>cK=9r}*Cf0QT*aojRHi`*ICHp=TJLe;z^p!>9P#`G=7-SfKd z;>@{O`PI)zJ0)fVt-;_v6D)wzHeA-ZS%FReS4dXSgILO+x_=Abb8m0C=+gYj*y|o% zQ&$44S11yPqDFxPo5YxoO z02Es--0H(&i|G@fqd)K8b~mV^nUm@OQNN(TWJxhLtIr-c?h`axtN;kMTLpFCvb^Dp zu+bjTuYu^FO_bv&v{6b;=chYDTQtoM_Tib(Sjm8)uR6*6W%|CX;cV1@y_voteimcG z!aLWG{Rd&UJ5xOxloI?$RVh(L4_Gz$58GPAJ5vMgI8(-p6KL8)!bhmd!qtadI-~vz zCDHRS3QG1EPfcRr^j1d`{rr!YIEMn5;L@sUfzV`8HxO#KjtLJ@M`Q5L4K0sfWxk~?f zBN+64TG@w-vO=hP*jjo#6Ap$l&2Vm>@wnJ=)sxxW)_Ozdou#64*>Y(+PfZykBc|{K zr$R*f5-63D-d1^Xdlxm_Ngcp1-hmT3KI53aU2w+#_waql!{y=Mia0pQxA*&RI+#_%O9Z3{{r zuwQ>Q;M9vWiiZKapT0ZyosH7>z~A1#S-Ukbfldl`k2<5lrRt_kAcdDKeGH+R< z;b*SI_%qp>j8=f^v?DweQ`@$Jg{!+Lwo%t&90$7 zMBfH_0cw26v2O8hO1r8lPR8L=Ti=|&1if}B8uB}=tA5f>7pzpTC zB>bg}Q!$l}EU+cm9DLlGDi{N#q14~5;CpvwGYi$a0e>wA?mRK4_|ChW1*)vS58V9t z8Gfz#g0=@k{GWm{+wwK?mr6@R|4UGD{gTnoFMcw=gU;@TIgxXYid}O)dz6Ze2471= zAr3LD-5GF9oEk7apf3Plt)bq<2K*yu{~aPTWH^#W&y_lyQdCBDckl!iLqQ^ca0y!q zqAbj2DFe)j;zMhizKG~jQ!%j5@LTjX&7QoiF#MmVvVCS#= z@Hy@YnHeqO20H6oCP2@$PX|>SNFL~$URa=w0~CXnD#Ko_$YPmYSjGqN2``6e!HIGy zlT#Et5{FLIal5`-Z*an(JzOWVxNt-<1+g#q(zLMwaM7ke!0*mmYB9is@jK-&`A}^L z!4=7%3j5#0%}gXk*{uFRlUo``NR?EL9f!#||6;6Y()oZpM_-t432CV4IgRny16Jk2 z!=++BhfDPBM6;_HEny&iO{uo)ayH~E1Mlzd_wrPENdl$*L+03>MTRq*Y9Z;P)gi@1 zk<98DlM{3zZ#wY$1WDtHNY8w|D1I9h-bmbu?yH1#p*UDK)2ThlX&`g=4*GuWw4@O2 zgVUe_Et{k-b}MPN9@V*b+9<>=^~hVn@4kg_fTJ8bMdw30Y~z(w(H+cDx0hr&su_wP zOSz7!8+~q_CArr-NW@aAeoNNWa)YZcp3 zeO}sh)Tz0l8Qs_6_wBvP5r-sg{*OwuyKei`Bie4-RnP#Wbj78^n8x%C?h|CguptB$ zYsbXVIn2g^4`osZJv^qj(_KhebitjW;E0yemn&o3MPFFZWJKL+F)a&@bw>xenvGC2 zi{Dzhd4Wm)hQIrBDg+1)#}UDG-D}W#T;W38gA&Sk(Y0QN{tVfPbyigxEVD=5H&26S z3!P|vZ7ft`#ghRav}*feBp;`5Da%wLKD;&%U33zMtai(du!1M^GvfPWa#+`Xc6pFw zOL6p1^?TVokk%_#LQP1KU|bLzdSigJSF`RB_Eb(=3xU^StvM%r*lI%vV^KbtrYpLA z)pHL-#<{@B4Z`~200sAiZon6v7Z(NygQE#i7WYq3@d@_%VU|Pv!zbu#^G-cn#O37; z$zd6I&NQMbtI}~Spnd#n@{gVc#7T;OphR~0P^+(-mqJYYK{^k6{A7tSB$(`-n~w1iQ%SH~`l_kim0L8+=CDkvZW1v!Rh~b0dNnT!U6HZ} z=$p1PMwmgzLeNgxuwo*;=@bc~gBB3_&CiuF&r@d>{fkdM1lmBM7W%q%&v~FR5!HvCWZ<28cq5j^#-kGR+@xVv@eZwNMxqtrqb6b^7jXsxVl$3|`5%SJh-?=jI^3;?<%vP93X z?Yx9KbK3?SUoRjlPksQyRK9*vk|i`q58-#ra5;>}tPqYnR+GDz(&^25qDyKe(srpD zMp?wnvV1RHCD>>DpxgX{2LxUxhYMJ6Ce8OFUVWnAf9F$aL5%VfLL5@OnZ7Tybmp05 zL(&bLnB=QhQNy~;xFTXH%v$LyZ$6lw#&V77^#q7GfZzf?sd+;=XiOdK|4uMw~E7!p5E=dwH;~oXPZ3livnh`sCC$QrRvD zIMt}TTw^Vm-*d^2DcsU{sTl01t4$mr4sF_gDM;6*uv{ptwSl!;v~0+qLd*{M?yzpa ziz0TEzSM2?{OnXF9(V~kR!vRUv03F@6IVNOuuQ<_$_LXu$gt}n9CsbF ztQPU-&?(h~?ptX^H)~6~P~{Kxyu>x_9S(JCym8nR5!@~eG(E_#ZRK1gw;dshS}3LC zrPGe0q8mD?iFsbdISYGYz;I$&KzD}e&*cXDuy#|uo7j8PkEO=s-+yxQf_Z6!a2%R%cKp1!zN-B0}YoL8@n!OLN z+)ZRRS|j59@?jUb7$kVj9dReR?>nkiNL;p0`MtDs&PSUTf{k%vU>jGsy&8l}T>@>L zQSY*1{E=v;LQ8E zB?@*i**a>!w%HC%1zs*JxT)&gO*Esh2N_Jd&`l!$!epN)Ng~=cWcY;}Tth9;H!6*< z`+E1Pi-OzurnXnvqJ61w(c6a2D=QC)ffI23(x}O8ut=|mNKx8DNatywW}wLB5qvR+ zG`f8{k5I z-w+b|xEd@ibuV>|)GKT3x=`i%aFN2zWCnLBU*DmxG(|-#t0*l7Eif7dhp~xMZ^+Uu z5@7Uy2DveDte#MI)Dy$&&lL0VAkuwqup)by8Y4xvI85`4j^E2EeKTujVwDWv;+}og z^4={;6_J@hRvh&Fw@Lu;0pT9K{)1*-z;kM#qnZd0ge4qi&1!-H>DyQ!Y_kmfG zB1AEnQ1+N33csPryi?w&2hpWqm`X}JXu*UkgTttgk&BMC@v`wwdev$<(QdQy3D zm^nNw^4A%1bzws!Vh4-4ad+a}+ocJPXZxy*zDm^X%C+O!5XzM&PZ=0sW-mH=x~B30 zxo)g5Wz&~=JA&-mILdd=+Px>K@18XJARL{Hsc!l`Bl+D;sH85^>7G0^La?9=zV{}L zOL4W(lgSnep2b`=Sn%T0!=H)q-VrycMijmiW6Xxg%o*_sbb8CFJ8)Ov)+tY5ShgEb z+2(Ly--0uF5eSly?(?=U#1l%oQS%OX;`M1rDd zY00$#6e;#`uso<%={r${#U18F0HX8Z@UknedsocGtykRj7<}nwR&~nGw@2G^n4U8$ z-=OknL2?=<8brdG4Phh~1}ky+R*pKf9Nj;`;Rc<2D>zPH0Hn-uD+9DA zkyWFGcUy+5aW}7shu}9#~ z?F^tKupm{szsuPqrqTtVLzgBZrttIB{q9Z%&*#8FY%;TERfhsh~MoqKLgn$cHw zGpB{I^UQ=UA`$@-jf1j7cVQ+5HJEUzaLj*LbM+N4P^)P20d0y!?Zko(yH1_a6u4r9 z>?Vcj*KtL=xeRmeg-qf{96r zYV`ew3msQ0eN#2&8TW`Xeeo&!PDSv6z~IN49+fzCQ*ReuorXzAS_Pd`WZV7;eS@kQ z&#b1iS}1oC4#PZ)=W%Lq8FSdNdY{cuG*+M-OoAZ>b+p#X{JCRy#1B$%3Y*y=v=m9+ z;F*2u_>KtY8ZhoqayJcldR$?r(1pjf3Cv->r31?yx+LYgum8^M)qRz_f|)SE;Go9h zB1{5pm4dV%LAFHSOc2b$sjm(QMP_n%>#VFDi?A4-()Dxv9sCOdjnw4Nv?xf|Kwm1~ z$Bgt%vbKn9hh=jJb}4fP%wmu(kxgHVSrC} z0KjXT7n%0PqMcd3V9gA<6!Zdt=ea#g<4(~93d~$>&FO2_=&N1Oz+~hhc7NDk6>&w= zzJfQMoSwkSk@(zn2e;=_T0CU-{Rn=i`41oB@A%UglUmln=bP^0W64DK&E^n_gg07b ze!EE^MmH`tv0_`c`sDNtkyK?PMYxJy3*a$pp$OiCk}@W$Ie=kxLT1TLVdZwJ+y1)) zO7&56AS7ALGXf*&i2-@GBSXq}1+r{V$mmPUc3&8zPC1K_+(jy%Swa2gv`75*s#&DU z9uEc(&zgM~5ma6FY^j&sF_)=%mcLM5H~XLW@YR!PW#-{uGv}|__9seC%wZ)xmHiYp zll+3i|7DwC=fyY+ZpLYpMFQ_~yp35vRY|9WNp#-4k0`z&Ogpdq5lzm2A*bowhP`Og zg`IW`yiYp9A;3_VIT9H1^Z^qSgbcBEP_#&yMA0=Hc3^2rBD9Um5A$xp=N_PT#Sl^dve;z)WSA-3Hm5x~WQkp+FOXa$+K-tE!{=_fNg* z%%o=a@~)yN*)S$LD1Jyih}aF8guX8g6z#xZU~4O7{e)@u)R3!OgV*1DJM2G_zv(r< z*0*ZZwnpDB3Auk2h;IgDWMhw}kTyC>C3UGvFiAmur^N&pkU&dyWn`ye?j~EhinZA# zV9c{RnAx$tw;@U?QWsGrx(S*xU$*?#VjNK$(Wq5wRE?yY?kup=y6BUL{Y94aCL7HQ z8Gtp;NV~S;&Bh!N#fnqM?>1sqc~qTDT(M1Jjmb)COrtak@zd@nqr0zi9)77c_w5Cy zCHk8ElRAACv-5$?%VysJD9;iX6HD17)IpUJ9wib@2_)$m{w|p^7Ji&)h-ut$=?u^2 ze2`=Es;DT2XE%uA>(JMw*x!whVAf#aB z&};KJOcjtnvq${CvYb~Jar$)Q*N_5OFCWk)Z=Ma{a!urR@mmvpcV!1pviZHd-an#W z497blCCt>V6D^+otJ{y?j`DXVV=JIZ9nBK@`Zd{zTyG7W!5p^Ex-mrm_pj~4o{~gn zFrjZ;A7boX7z&f>+X-r+6m^1IcHCT*JqO^ai86h%{5hf1b(C=^q{^`+O(84!tbMVU zb&ArE3$KxsE5E0&Jad28O<(hq-PUb4BsD)IiM7ajO=-boMHGr8l8x6!>2=EapBKyz zaOb2t@^d$*#CHG16FG>8m8#%Y-*YWXYv?@UU5|rLhu5F2Y5w5Y(r`?fz) zN^6@0?rGjXL$Ljc($CTNN4Bm@cf>@so!b#s?HZ;GP$}GIj%FX7A2Z!spRTm=oc%nW zdyM{vD|=%hr+u6#wgQY1siVT2z9^;{3+?ZWv+7QD-%*Xmd3MBUx3AlqXmZ|Fs+&yx z@+bq%$Lf|aji@>jwx9cu2r;Q@RE2+JW;T#2*N0(RhE6Se;W>+gGEcvhQ*9K$t4?Rn zypmLB?vJ(8_e`#JIb=V9gIt%Jl{zrZ36|D1jHme_AAlNd@tguu0^_)Rf^fc8{hE6`7jd6V@y|y9%(X;vZPR%uzfQ4mfUs$o5L(mpCy{ z`~tZUDsjXd7+v9bFe&RaC7p(1lJDm*jU**8#ZmsU^8ACT+4 zLo4RYjdN=wFcqK}%M^8^C)D3=$uZq5ctgc6P{(96ILVrg<18Ds+`L)@#VVUAeKVan z?@+&%CrRhMs);a7`XKgjuEg9`y*LkCT?Pv5xz{Rz6R1rX7q3k(RQ&5XCd|$NyOoZ4 zu%TCPwN@Z2Ij9pqzU*=O(hupotZ@5M20d+6*liw5U!3_j?Ej>c+Q9_S&Eo#HreJ>1 z&+r$P3=sJ*l5D@ur9&74qMO+S1W zQ>s}GFi3*yh?YjP%slOW+%H6QTHDU_frU&9lTvoi%ob9rmvp5;0~`!(ej$g|c#f@F zsj68!ef9g1ZmDfbF8*?6n!J+#=o>vbeY=;xu%x*J2Z0iOv%d-T zztK4>%)wC@VG;HL8BPPcaYA1gvMf87`D}^4*4F`&>g3+~-s{+M35vMG{$N8c7W zjzKu;@FJ2hn?)KQ#=9_gIYK3KYnOS`(1Qn8$Qp^-rsfCdeotyL2?k24v z3XY_6JX+Lh2H=7U?6%v4SEh|m>Cp>4$i<{WhuftR&FFVnZE;jYV6?t$+d z7PXIw*l()1&6>45AG^WZY)oQv>*L^x1Fu+&KJ(_B~~+)<$o_RFLopxZYV2r zH2%_bAqGn%>sKjjX;v!%6T5&<&Lu|+B23?dVCZ}S((cS@84ol_m9%No@TdhM7~LUN z8ZvWGpt;;7kZ1$=LhdV)N*SYQY9PDUc6)%pl;o6GtyMv2oxY~K-Rz4;1j-amvtDva z8@ng*yLx&M^Oa}nFFsKGVq;S&hcqbR=RMGDz%A0$Q(;~%K3C&b>Dx`{>&8$g$rUF0 z;QVf=U{~*?rF8={dsx!6Q=+HFT$nVKwprAzzWp9?C>8+Dl!{KSuE5%EO3)|O$7s^o zS@ife0#6h3m`vMg!=~_6`UdZPxccPsh_OmJheIRfks4M*+17Q^!CpF9g~%X$h6Tk5Xs7EB0bQF3#*7ZPL4vSxjRDVW>mmE)O_$wmyEncvtg z5V+b%hsJ)%b>$%F5`L`|9O_>svreNe=wSjU zd1BuL(9L~?LQZWw@u-saiMuLnUp>5Jtp6MRL9u)4^lcA+P3pFsDB-05wbCL|)_KJ| z9e4T-4pyQveG9oF51bcCF;DjbUdbH3wqXTB(NLmot0aX4jc`c=j_P;{(CJ%~^2fFQ z@BysS53_p3zp8The+c{^=sQW2a<_3l1~Q1$um>uu=(WR|Rm|YBCWG^1@#M6}dpl9) z?TbI)ubC}#;RqT_13VWR^_GCjpGf1*b7PiKHo^No(UC+f-G~5P#tj{Qu|+2S25=bc)Lh zGwB;O-11f((M*n)m+caJj37&3llwH^&gJ+s;H|+L(>sqz|AtNJy$<;MC#%!3NF-~P zp7m0`K$gQIq?nQ{3;Ua|?*&-9Ur7wHG4bYlEl|E6b3KMFE|u8T3k{tc|X&6ZpG-X69ppHB%k z_ilaC`S%Ea^Ma^a3=wjJVHze0aFR%6xvWS!4+9aZ5GR#v2V?Szs+`3@osb*-oDk=se(Jl817o;Cw}Z`Z9ihPG7TRhB#p-I$z!Xt|}|tmIqe(&YKxt zyA>nDWa86AV~Cv^4AJyk{=#5m&E7-IPV47N?zqaz{y#W7n@iNkM2k+UZDPhUDvuEP zg_4r0V#gazCxC@C4Rn+tBZIz3cU&^vP3N!jiCv&L2h36PLMn&pi^xMAWy9|X ze9i4=Pv3l>;2zsdbb~X-29Lq?Y)pyuGqxQknPL5rrB6edzJ^jmY590|O+`TIf-rDY zyJyv)viuf$sSA_kB2-xF#Ow+OwaD>PvQ7fik_o&f`r4VKwXy1+l&@j(q044&yH6Bq zllzTjS{yFWBGTGp-kBZcl5V;x?=H1^7+>uA5x(IF8f7lqL&Xd6Ab<6WZkA-ULEF(_ zrnNRf6!t(n{g zlVwQ|)w!{jgZ;sqH{{&;_kQz(dsw}p`dWK5(ku!YgxERfbZ+M@Z0~z5w0u0Li~*}* znrzg|b;Brg>&=D$$Gwv3$^ny$AwiRx52KsG;Hoo*io5J@dP=2}?9A4kD;2EnGE{A` z41T>rKr(Z>FCsEp%z5FKmlwYujYHtHH{o{=1#UkkbyydPrD zp$+=xhKPtj+#{MHx0a%5=OEfD_ocMniPG&Y^1d2}9HM^LdtpMTVbeL;qDWWzX;3n! zPm!La^=}HXm?)H@8+NA2JvS33mJsnHpsgGNnqRsdPfJ?E!VA<%-*csfDSQ6MArtik#Ubc&XF1RG1GX}@XD+YZ^uvjfl9i3UQ z7PEpA>jFAAxpbIEwHq%I?d#+SDUQP7vW{xlNGi6|e`CTG(}l>)7QU|Cp0 zK0cT3;vwGQsj`|+JdJ#*yLxS3ZINNzj=od$I~Qs6>v~Mp^}P2(H>*IDm!E(v!A?vF z1k$Ofn_GyDIul@RO{5MEs-J~D8T7c8)tc+YipW}DBMs(&n@7%#Eod-j%?%f06 zZGT<4q6j}{d_3&6@N~@VQ`)9J^#DIP-8|y9C-+@PEG?pe8n4*279C0{)9SKpEDt|L zPTy{x-fWDGkz4fLQj8M?HJLl;^sRU(Z1?_&J)oQBL!}4?{?3aK=uT32}Ue;fRMOJATm> z1Ad?2Z*EVeJhg8iVeap1L&(cLwQg>m)|3Ek((N^7HrZ}b_w6D#m0EK|CNc?FOa>uo z?%B;_*&#;Xr$OpcJvg;Ft{cWv`3iNRm@@9D+WNY;#lNEO73E-}J{4xis9XDEqZxgD zu!HKJ1YL&#v-W|rs#i29!8B78>0$M^GqVXO@-mac)uqf&;m6PI5-{pUPcH$9{ zg!RMCj2nfCri+=_gYWM6t=0hjsz6h_QgS?lW2ha##Q`mFMLmSFU5*g6%S+&~eA=s< zfRiR#^`5?47k%-`r@_0dHhx#8S1oa4RYMdm$Y91os8fFiUub=Lk=%$8C}hHP{ej_9znN$TN{KDEycFmOYe*NjMDu0nHc9+p z3bo(UmzuCVSRowNi4_OjKlaW;OInZ#qI8pd|0mut6BS(pYSsC}ej8>+glo|>jh+)} z=d*Mc?*G5oD`kHD)=ihCsKd$rf#eJ_<@n}vjewJ6;eONIlQ*y--{0Y&wr1^x|Flf)=6H$HL#+=x(JI!x;f#k z$!83u(9=>r<8#~fW=STz0eIGU;w0ong5;$s_Wc7Gt|&%end@u0cGYT|U_3!RlIeM3 z+){?2zieui$o11P;I-W8fh;J6YNkqb#edD-cmS94sMR6U_MR!t`?LK+=jEB4@`wp{ z(BC%p1{E5M8pPuZ7}w8&Z4bt22)xEPA9rpYymnxJQViFlZikwi=8qRy!3TAOy9RCy zjuK9&GzB=lVAsDimS7gyi3VO6vu%Qvo_^9omVJbfdjb(LiKblkpo;%^oZdPR`FEk#?s! z|5+YYG>OwQ5kDtLwOG3?`1L7dl!?%IRxw>=*9m2dvr2t}nC2iPS`n(EaxY31Zz5Z# z%jph|`SzHJ zB1zqme9yPZhS~kM^z!;C-sW&d=*L8aW7{t7#-RA{@+V=nLC9eAzF2J|q3%rA{v6PX<7umrE_NB4-jZJE264Ivw?g0l4oh0wk>84)KF5ZlhV?-X4(Z=E zuVP~9r1K;gdJT$y$t9{<_`-LqhKyG0>>OONdW$PgUqN#*>ty?evvG0VF&7b*6}hw# zroRtSOe1hVj;whyZ2oCElzjTGUZz+up%})AFcK$`<$5Cl>4k^O- zY%pp)u@^?;lz8%`dxTLsxSv|O!Okmr*UDZgJgR6E?4(;D2GCV?o!Q~BtVN^&t6xIb z(IuZt7tMRi5-KD6m~KvMYTuU4@WWp*7s$OGqY(Vz-jVt?r9Yx;V>5$3`QNvb1RkYk zR%REc3~dzu#OtmH3k)bph6&=aDv-RL{8gLdPFk2+fPFpU3a@w3Uz?GC6l<6#jg4xQ zEU%1^>BvvPYWlTYVQgQ4h{R`0*G{4s)aDVBpIV)1f#$FFzYaRZaLXN2h&Xto1S6mL zHC3W{x_BB$VO79$daFHyF};e$?L`>dS`H7)REpm+pzm0}(8Mpw4Ushb;q}7|_e3Ki zB(1n>n&;1ruX7DZF&13-S=7D&|3%M@rCp%1{H_UOrHII*n%I`f6H#7LZYZlq(66`C zMvZCFgc3K)G-tm>U}DKyJD?EH$xZ`oPrpvB-)V)b~jDpQOB2BVp)vK5?CKC4a zFKY6v3O^UQ1m6*a7HN-$dv4gxo`t3AfW#GEfv!8Jtuz%hNN3cmR0o3+39_kxcIfh-hioV#gw5+R7Mc#QFthOa1y4w949*NDj zh~m~naSw?7@Hj%8s3dXtsVpEMsw+q*JyyGxHh9yppB{ zJv75iC*P$8zl@i5kJWv(61~}`u$uti@WPe%AC8Hge6$a=y-#@=OLuK-k|-eKcN|P% z#5RLhsz@(12ugXRj~u@(R}qsG?jBYq@hA-XAbTP+fkE39-G!k?7yIsZyt1_CB&Xny zL!PJp9yPrOeUy}^@M3c`b52HXW%XoavSGGh`}_00{&fnNH5k?tZnn=~Af9GvR4@9* zWB#XO7r4{zgLF$VZyrSq*zMbol!tr0D4B;LgNbZ|prVZ=%cOdo2Z(GR1+3j%(@>il zQ@4D6kUUPJ5f$zte@xv#-nB9F^1I*B&yVr#)>$^<@)$eBptMs029ll#NmoB753zS5 zn`<@+Qh&zwL~KkaP2ItPou3}#id`bU;Vr3_PF38#|5=KPSoCdCx|98wS!7u(v_DO^ z6O3_7TQ`NCL8b_&KfEEbm1baX-TCryhU!GI8oThxz62lTXwKMWrRGwZmsm}uT@Ae` z4p$K0Ezz>XX7`i!NR9&3p0L^AQm6Hp@l__q!QHzE8pBnApbeEXQtfD(Jy*z0?VP#Y zafvFMiv(!-eT{ZJi?!yrCnU`T=Kf`91J?fcyHBL8DI-iG18AZomfex7Udu6&4&^_a zF+iGrX3hei_JzO`Bu4@rh*}NYOJ@^FLWT6!)n*$-a!lf%9i0PFm+%=WPcNK0LVchA zFwV#A@)sf9|Q%53nR_^rM zRrmf)`Elgy@8`f}N?p{>uYdd0zAx$QqBHKwg*?v4>rY7(4171-EWEgO_r6+*4B^7r zKIN?wncUT0?OCJowIr)=%qx+7YX2Y_r}05_E1QHaUdh9~6X%1KM#a9hlFRXoOtJ=j zJ4?(dYQkb2qaJkN_d3-cZlq90Af%&ynDT52u^SpQ(*})hZ^ZBwyyX?>UUAw^zRDI{ zFL916`SL+-{EpZpW#yn?$SI58N#fg@(^lx4dIQdzWz+wB_I{tH6bVi0SYfNb+wWJ) zd>d6q0GTpmrlkMi*h6o2O=_omjYb{BH6CM8hZ=fg2Dhp$?mIaxDiexo5<{)muBe~p z6%0tN8-wo@6lb#^UMiZZW#pWw4wb9BPk~)dL+KMgM8bkCwul7k@mse!R?a66%$%5J zJ?16Yo+|U_ozapD$9M^eVQ0rF>5<2*_W_Bumy(1|X?TkFAmox69Fuh+Rm z-j(My^I0=fZZpLu#jE>yYCBHh360%9|!OAVr{YN{?Di#&--v;Ihv;JXUwFz3M&qTFK#w^f^oNd z+%ertXMXvyrqom>nH3&z);8{rNRt;%>1f@(3&B~6-oyU}7reX>eY#|xl(>5qOks=N z0Un(bjc)lR*i@86*mjsCV}QkO;|81tn~&;o?%7zH)fbgKUz@mHVt&{lZc^prWgB?g z6oRZezCGS&<)XV$rQ%v92ngj({4&a`r^F~*8Y31hs#xWu1OH)8VU;Jv81Q9ydn||N zz3FB_s(rHMF!FX=ghO&lR(r$|UJRno2R6XTxZEuhe7fGAf!fjk-4ysTf@bP|mfXXK z@8cu-lf~m&X6cbE!`1w6d9Qf_BqX=zm*BFmb2YG@8x>zm+{_xRvHDs=7WYtF#O|X1 zJG`AdB)?Zg#EDLg)11^l=H(#nwjOGFEo=s-|FFQ1dVM3>A!Pp*pUH z^>nR-G<_r6eW7bc-a#%tS>3aHYR}!a{ZLzP4HEdQxOeEXLEFALJ}7n(DeqLFs5536 z98l77cD7LoEOZa?_JjFNzn1ow#-%LR=5Yv;?$v#b-lmL@MJspNd=LG)RGV3MemRZ( zti205=<467DdX{~Y8Qrv;bEG&u0m;s-K$;`&y}4L;c&4out8hlqypoIA~QLbs&(svQaI~WAm_d>R3mZ_u2^kY7Tj)N=)()zy$;`Ux)1Gq z??q?l4&m0}B+^bBY$~bTK<^LA_C1(daksVVd{_=dnkNg)gi3I0C?D|*X%yv0q^U;N z>rYZUb4jA@_K3iiW*vbNmXR7KuERTT>X~vpE~Tm4IHQN*$Nd@Mr%NAS*(RL5`I?3>DP(pKg!@D0mDOb97yK_l!no6&8|C zrexttx>esuA3sa8a1q=7(uMRZe!0^JYwt@w_4b|($QJ)X#|}9es?X4e<_z-m_zI8k zC@9;WNYfb!j>mlKw1F5Z_UszvLV`@MOVT=3G}A1M@n0|!c)s$FtEkT(NA(=RO=Il- z1k@AhxB#w7bG>Dyb$3`9;)`J_SZ@c1bgW`qt$(nEO|ULWSxUV>s1~VK&c3X@L&{E? z4zzwFePEWDU!#xW3a@!-SBftrQR+I<#L*;SEJ5WO+Ux}dX=?vi>@Te>opD1Hk8bOi zniN)X%PDE5@O#eiNX$-U-RyGfq53v;BQ-L*7CUL|w23jnzo+N(DKjI;&-iFx9&rNtjNvp(U^T-LYVSAhnhJ@y7gohD zh3!}DUGLwkR1TygnGZc5-;q8o!n3PUnD%O^?|YPXBY6Zy=oF#XFIU!L6Av|bGbRa2 zbtue{&(lqussaTQ8gvk$L3^6%_@%Z3HKeINJL&JG`n)V%{57&~njX#IpzdyNCpKYi zAq_pX*$9%jUotGW<#i)7O6>lsG!p-jA|8KLv;6>jW#l}mjyPq&pxJePf5uX#dx0&A z9-sE3%^3HkRsuD^%yd5BW`q8Xt>SMAH4!T%u{rGW;&eX>;aCS6_0iM*4(-H%)CQDI385fZQUe>*m3)ms)>1}T6mg>5o-BT*1_ zc2!PSxtUK^#j2CI_G+!pK7>cQIb=-6keD_*HWC-dw+00H>mbKI%`yRtku?fp&lNU} zz3d!fITyx*YeBsLUAqjP^tr*(0GnGLu;bj?PeMOM&Uu!KEXe5U_4t))ZiHMYZ#@g+ z)1{$Gn(#tX01-E@Rpu(3`Ms*2!UtJX^Vq+TSCP@c3x+3kaUBwV#R`J7rGkm!5jGMl+eMDD;U0OuETmTcO>jUfH(GgoNV1EC2Xo#ry2)Q5#@@q z1DX#w7B7u!h4)&S&fl4qk#H{@Y?J5}$hyC(mSGY7y*yiLlsjOw^?WqfbL57VcaurO zT8PFECW-rUGi-*!wT0&ax&I}-lDgB)r?ntHZ;Wjgf20+ix`2FV+c9!|qI3;o1ViNo z;`_#Rb7DogG)Nrsw`hZ6W3Kmi?lLag2Ng%|66cx#apT(i+doklp1B9084l{dxb?`f zdxo|7)G1bB^%=UIdMQ7#eLQ;rn}Sj;;_@@ni>kX;9K3;`*_`WT>HIzMnv5-A>VmtBl@N9+G(_KQyBMw zzNMm-h{i8}<(n9x#Zjo7Db3oB1Wqg@0*2g{69rT{_J3DlWsF zX%6otPS+mavX*fdbO+t`d{On+L1wNA-S0%CY1|sGVbBryvG-GMs+zJ`dWhAOoug4S zn2|H=JPqK0Yy-ogA zs~76$QZE%|+J3rE z`kz~L4!$(PlP@~3|0#dKo!e5`A^!>6oC~CGv0djRR0)oe!xzu>XeXHFB#}idU2%`8 zadz1^h+Lc(_@h$d=kW;%Yt-=<;(ku~Y9lJ{ z;d9MN-G z7XiWf3j#x=6sUHIr-V;)?lhS-p=i&mu`6o?N&wn!=mL7VPh52fDore{lmQ? z0cC+GDXpGuc) z{7W1k6s%e0ff)dypE(X|fD24IeC=NG`kHkiDe`F>@;wd-TeHNoS6ewp+DR?&oLh#J z;d`UrTA1StG#gfdF6fRu4%SI{7^ZI)8YWg-#pbUTVCxSauTN9{Xwkq?OOVs3mTqD+1D|@humKj?zI2Blgl3 z6~8Lfx{yp->Nm+t^c(cWyZ=qSX3XeV5r}6`e$#9%Pm2nYS+aR5a`xe3%fUHNs(t_79371Raqd_`nbvX+zOJ9k+|7Ow zGy6eldn}otgh>=oIwXIqrT=F#tA!N=diq*zb^ZR_@t|F+j`2IN`<9J6dH$=03GJo= z#i<-~sr(9BV8%b~-Z+S2jfGkN+F@O!=~eL->?``=#zAO(gJ41#xp!j)&wk>6J` zLnHef;dwImgVi-2%g@NgHdTWQdcX*=)^TAN=)-C(@AyIM88LL{R1ktJTH+vq4oDt8+ni+<2T3+n|?=Q3=7 zv=yd)cnx_CLRJ_SJ8v~L4odo)IKD3zIM{8Zs?Ay!GsAm;*b=Za_ngV+mVjUJsB1sx z`WBR|fUtZ0MRO1Qn+F~bxi}SzY{_0vio;dsYW4eiSfw?n*!rF4YOB?R%9jEm0y<%v zBBu2%B0j2btBJ;XUvy4I9_67qIZBaLY|@IY~p z+0#5(TDIa}5QR-=U;pOEB!@kt6u%vpC-qEr+@mUCtREE<_VJ|qXD<>?aT94Bs~>s~ zQ83}+i1G)yrnc|?iAR=+$ZEEU#Ma+}{$ zuw0Tab{oT@fGeshe`<&PNCKAWKczDy2nnRTw$&1;fo-%MGF@5aQ(r3YGB*1Zo-Nm4 zf^r~-MA+-nzD17#%*ZVpLD05*rv%GD=)h|aFvfF6)xtjgh(?i_9=mI6CBy6weDCua zDB)g+Yq<^!`6khAj~UrkprG9#B5p|{!c}f0 zmDRP1)x7L z%kEHNY&h+&W#NP-BkPo6c($nf3g=@@Rrb)k+D^wcm)?unFVMS!!RmHZB6Ng_;0rL1 zT$R0gC0Ew%_qkHMONT(U&XO@IQ0{I_s}D$!5R)2kF>X+CtHqB_BSa?a8Q1pg2{ltA zTWi?g!;<~!i`nAaz5o&;*jhB#_)Vp2xObM{)$yon>iDNiDko^?Alq`jJL}UQ;NxI3 zC39S;sc(i4cK%1$nh^DfoXHoRb@JU5<#oNhLGyMhbc6=in~UAFRvqQrx1*)_pT*A` z>ce`?rgu}9ps&rUef)wc8K#>v4#6MmJcj4Pp^F9DH-1m~y_J z?R+y_(QS;a>)rn&a`erlkkVJD;8nSt-7f3#i%^u} zArl+pphbtNA*#9OVl@Gx>9RkzGOUA*0SzJ@TtPo}#!d<@}{_Bn6>in>Z zRn_(*!?fLpV^XjHXJMFu|3FV4(PBkK;&Q!+!9H}kdieq$JM6ha-Wk#|$E}RUWpRC! z#Yz*bwP#LYXbBKe>r^70|0C>SWFlg1olJR594c%2`S2m}jn`F`^`9182kUrx>k7HN zGkxC13k(`RLZ$Cu#v&aaJ`r`<=~7t5QRhd2oZUu`Y!o5S&Aa2VKKr78b|SbO;-hy} zubU4=fwp)vaGd^E)m23Ve9TJ&h_G)DA2f&ONDaq7^Q zpp^Oh+zu0U8tw`?B3M@XHS}gtd!+kfbEj|RdZ#gP$B(wWSFRTr=_9@8Ev2!~cd2CC zdvrwCSRAj%2XBf%S*S2#-AL`v=7sU`FXjAOXxi(~crC#Ae906Oe-@t3JHk(WRa*w~ z&Jqyjlsx+_HyeK%^>d8y^!T+%r*RSTPpD^IM+z@$kgXcb9}Y?2A&>i>CtWoMyyb>M z`yRp8+%Vh+>s45=S2Os(o>Sk(wY=xDrm)-+4-cl7W~HmvBT@W(FkIRlFVR$on(ouI z+$C9{{SemSz4Xl1>6G_tjw!r@;a``6lZf+wHE8bnn1Zy^6st1!>%MqI+3qex@Rx_z z!f!P~`4%1Ipi8O;jw8=;N}CnBOa#x|r6}W2aH$SbGSRR;f|E$aEw#?Ps@nKZ{maN; z$Tv6Ur9pg4zA0uN`3a3C9<2qU{*b)0cBwP1Ed6+Hks$*kV8Ps{b{km3EkOrEQjJxN zj!H~c*paU&Y85&b&@-T5Amj%`%yC3^A`W+CUItU|K=!6?K_;W5 zItm+5t}`e}SrUtk<(Ri2p!3NWW8-s@BPJpcB1}k+>Yk6EbCsUM1m-wL0lLWAP3y>8 zfs+=V3ue}kxfCscFH>yqx?O1@jcy7fDCX6*EYLnAJ+Qg)bj0NC0GvcFjzrBX^eqM; zfoLqb&@;D}%%-zh|JZo}7dXeIl{XnFb)V;Yi{VZc1kq1=NfQd>x$w@xYU~g0qmt-W zhOE%*`LDmY(GfZ9F}--x#EFM7m#hGY^uY0p8eH1>w4G1PdVsQh9Kx8A{elUEI?o_t z{lIWRE%u1ZMQmf7z<;CRsJrX;oyrrza1kcG8@`6>%s(-*g$hvt354Wu+Q~m)!ggY> zzuv1>wgo`4B=BsxD&;nL-H3ew!%!s39OGE9NZ`2@n>hHAF%jmSl|R@3l}BsZfui?4 zX`xnj)1pX+#l?noC1XtNJ#xUvU`nD{n~Fw2h4pmD13G0l?(zWB_};-ysqyld*=%Jt z3Zzk{G(IQ*r}=45gZ-K=?b8`Mto6lF_%7Z@tE4cb7eaM*5C^RtH=DarT=Mf3x-VBD z3k+$DP_=5fn?T+2$gj8l*x+{0%D1I23?ASsukcHNM7~Q}4DR#I!`)l*eu{m!Cf*&+(KfY%H=^9*5G6(JP8#xvpy|WAobT52Y-$ z^vxH_*O)MQP79k)gcBp~BqA+}(>GqrDXM|((+jCLvW0e;#9hEcgrO^H4b#}ct4a$i zNLw9_5g-RWEUPGzkH%{=%lR=m!X}jd92;KMie%=&Y8$z<`@YJivVqc-=e)6_bQXMi z;N`e^o8j!g@g>iB0GP3T6nm-QGO(jfioog=mI^r&YS5JlL*UNvllfyDFDVmqf z<3l&*6hO_PKm{?v%%^-{1R~hLUz?3fyZkLL#%YQ`-sC!YgCddtL9*Kh6V-J5!`4qs z^G&5dF8+h4CTUL9FQf&$Es(dN-x7ZvE9t0{&;zQ2qL1H{qW_c~#>6Jg-ML&$3>g-%PoS=Nd*_(K8k zBf;(bspMENV76~M3L6uU;z>5)(Ins<#7hQUj<yqq|yUBIER*f4(KwO(*tH$Ry zcF^OAI27~!g#g0PzB6$Q8A#}(CK^RPkphPKomBUcsGwta&%;Iph=Pzjzr4@}R+dYr z60k$ff2cr5=ONA|Dx)Mjo((E6!nJ=h&v?aad}TKjR8YPeEtsgr36}@GE(j2~hQ;u> zKr9v_sf7cuHoZUp(E-J4O!oKV(~FgTdSEw4$Q!G@=o-vF(wp~AL;OIz%bWh^VOd#2 zh5sL4ln=wle=;CYfuz|2xtc)k(b}mt9J!z|P2t^MWiL1?yV8ELZ$-^!3lf6 zSaxO@ZYK`eJSH{vjx<3X()hLfn>;=^?FCgo)%D>o8XGB0fc(|5&5c&K{e!~c4)(L0 zNC4o?7*~w4NgvN=AY+2H?<~knMXj8)%Aq#=n@e-B$Lxoi*falWMK9~?>SvRNJ|%hB zGeChQP%*qQpHV@_OG3b<5k#ImS}vUfN?AdW=`f{Ls&RkkL^%?F$h4?+zasfQJ`@2{ z_}8R(`^FqUO?qz{9dKn~oeXk#@R(coffLY@ra>zTNo_hp4;TN)u#OH84IGXg!vBPK zA5}`7<%bdgnf@fj*IL#QoTC**SY7Vg-D`rf9Sk2&QQ?t4uw_U!g&@Vv(nR8exa-VIa(x`~Cvywi_=< zoeIOi5v+jy3;>N{@mkq=6;bWd7=MLgHY{z#U50VAD$#0qsTW-Baz{d}j)Ew7PN!zV zDhl0Att;CVj;hv*`=3ymF-h-z)*9Qnv*wj8Snf9&Ev5Y-Hh~nwPG*h6ZfFM8_93^t zuqZaqCt31}=Fi>VjCnEB0Mp)Wr^n^-VLlA>KBoZe>bWwTTd~fw#L9<8%k^FakmW?w zb@ci~f1d*j2msX%KKb*PEz@cp;Hy*jRaeHX8%!%S+3Pv+PZ3EJ}$F35ZrsEzJJ$z0W%DiywjK818SDkWX;Mt$q|5h;V5OZlI!5+*W+g-!QFssN^ic&_+vr>L!u8e!BG(M znq5H}O=kii;j5<*J8yRYMHd|V9NBySW{^w)XhevFf-b)sIfy_Mem9^Yp z=BBTZZT2k}j`F`aPf*bBhdVxn;dBVNA$g?OzW&R1ra6r$^A_oMm_cd(;adMJyKvLh zcOwQAG+6_geM;Q#lO9BNI2jIe4-ss@<7DeL(5coFQ zb{IC_JM0uEs=R1OMy|iHqLTN0ra~6VH=(wY8$0`#new(%<6Ap$#31*LGZ~94)cO5q zU2_AjMtE=VLgta%*G06%X08D+1}L`@UqMg_+TlT7CkN1i7n7J$x9NvVN!?$QJ*8{Q zSarh61E9zQAK7&jIH+%j%sU-U1-kSwRl{3DIQ`|EvH?^TOP}ua=cCBX>ZJKsH1f?? z8H4vv#Nj{x39I+(<#3nZ*yln1Ptj|yV92K`I|J#ekAA3lDB2%xBP(Z=i%@`{ijsz6 JwfvXB{{#6-^CtiR literal 0 HcmV?d00001 diff --git a/tests/phpunit/tests/image/editorImagick.php b/tests/phpunit/tests/image/editorImagick.php index cd424a8856cc5..eb71d9ff4715b 100644 --- a/tests/phpunit/tests/image/editorImagick.php +++ b/tests/phpunit/tests/image/editorImagick.php @@ -758,4 +758,57 @@ public function test_image_max_bit_depth() { public function __return_eight() { return 8; } + + /** + * Test that resizes are smaller for 16 bit PNG images. + * + * @ticket 36477 + * + * @dataProvider data_resizes_are_small_for_16bit_images + */ + public function test_resizes_are_small_for_16bit_images( $file ) { + + $temp_file = DIR_TESTDATA . '/images/test-temp.png'; + + $imagick_image_editor = new WP_Image_Editor_Imagick( $file ); + $imagick_image_editor->load(); + $size = $imagick_image_editor->get_size(); + + $org_filesize = filesize( $file ); + + $imagick_image_editor->resize( $size['width'] * .5, $size['height'] * .5 ); + + $saved = $imagick_image_editor->save( $temp_file ); + + $new_filesize = filesize( $temp_file ); + + unlink( $temp_file ); + + $this->assertLessThan( $org_filesize, $new_filesize, 'The resized image file size is not smaller than the original file size.' ); + } + + /** + * data_test_resizes_are_small_for_16bit + * + * @return array[] + */ + public static function data_resizes_are_small_for_16bit_images() { + return array( + 'cloudflare-status' => array( + DIR_TESTDATA . '/images/png-tests/cloudflare-status.png', + ), + 'deskcat8' => array( + DIR_TESTDATA . '/images/png-tests/deskcat8.png', + ), + '17-c3-duplicate-entries' => array( + DIR_TESTDATA . '/images/png-tests/Palette_icon-or8.png', + ), + 'rabbit-time-paletted' => array( + DIR_TESTDATA . '/images/png-tests/rabbit-time-paletted-or8.png', + ), + 'test8' => array( + DIR_TESTDATA . '/images/png-tests/test8.png', + ), + ); + } } From 09459f1e4b5eeb3604cfedfa12047ec03c7489b5 Mon Sep 17 00:00:00 2001 From: Adam Silverstein Date: Tue, 7 Jan 2025 22:51:51 +0000 Subject: [PATCH 13/31] Media: improve error messages for unsupported uploads. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Improve language explaining the reason for failure when uploading a modern image format like WebP or AVIF that the server doesn’t handle. Props adamsilverstein, Cybr. Fixes #61361. git-svn-id: https://develop.svn.wordpress.org/trunk@59590 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/script-loader.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index 6a5768a8a4b9b..19813615bd80e 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -983,7 +983,7 @@ function wp_default_scripts( $scripts ) { /* translators: %s: File name. */ 'file_exceeds_size_limit' => __( '%s exceeds the maximum upload size for this site.' ), 'zero_byte_file' => __( 'This file is empty. Please try another.' ), - 'invalid_filetype' => __( 'Sorry, you are not allowed to upload this file type.' ), + 'invalid_filetype' => __( 'This file cannot be processed by the web server.' ), 'not_an_image' => __( 'This file is not an image. Please try another.' ), 'image_memory_exceeded' => __( 'Memory exceeded. Please try another smaller file.' ), 'image_dimensions_exceeded' => __( 'This is larger than the maximum size. Please try another.' ), @@ -1007,7 +1007,7 @@ function wp_default_scripts( $scripts ) { /* translators: %s: File name. */ 'error_uploading' => __( '“%s” has failed to upload.' ), 'unsupported_image' => __( 'This image cannot be displayed in a web browser. For best results convert it to JPEG before uploading.' ), - 'noneditable_image' => __( 'This image cannot be processed by the web server. Convert it to JPEG or PNG before uploading.' ), + 'noneditable_image' => __( 'The web server cannot generate responsive image sizes for this image. Convert it to JPEG or PNG before uploading.' ), 'file_url_copied' => __( 'The file URL has been copied to your clipboard' ), ); From d5f8c9b3e6546856a1af66ce2fb1527481afc251 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Wed, 8 Jan 2025 12:34:17 +0000 Subject: [PATCH 14/31] I18N: Update `theme.json` i18n schema with latest changes from Gutenberg. Makes shadow, duotone and aspect ratio names properly translatable. Props dalleyne, audrasjb, oandregal, swissspidy. Fixes #62728. git-svn-id: https://develop.svn.wordpress.org/trunk@59591 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/theme-i18n.json | 69 +++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 25 deletions(-) diff --git a/src/wp-includes/theme-i18n.json b/src/wp-includes/theme-i18n.json index 1781b9356f4bf..1b7a8d0d31190 100644 --- a/src/wp-includes/theme-i18n.json +++ b/src/wp-includes/theme-i18n.json @@ -3,33 +3,33 @@ "description": "Style variation description", "settings": { "typography": { - "fontSizes": [ - { - "name": "Font size name" - } - ], - "fontFamilies": [ - { - "name": "Font family name" - } - ] + "fontSizes": [ + { + "name": "Font size name" + } + ], + "fontFamilies": [ + { + "name": "Font family name" + } + ] }, "color": { - "palette": [ - { - "name": "Color name" - } - ], - "gradients": [ - { - "name": "Gradient name" - } - ], - "duotone": [ - { - "name": "Duotone name" - } - ] + "palette": [ + { + "name": "Color name" + } + ], + "gradients": [ + { + "name": "Gradient name" + } + ], + "duotone": [ + { + "name": "Duotone name" + } + ] }, "spacing": { "spacingSizes": [ @@ -45,6 +45,13 @@ } ] }, + "shadow": { + "presets": [ + { + "name": "Shadow name" + } + ] + }, "blocks": { "*": { "typography": { @@ -69,6 +76,18 @@ { "name": "Gradient name" } + ], + "duotone": [ + { + "name": "Duotone name" + } + ] + }, + "dimensions": { + "aspectRatios": [ + { + "name": "Aspect ratio name" + } ] }, "spacing": { From 287b2f8c961e8a67b2a232d37273b6ddfa611c28 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Wed, 8 Jan 2025 12:52:04 +0000 Subject: [PATCH 15/31] I18N: Mail: Make PHPMailer messages translatable. Adds a new `WP_PHPMailer` class to leverage the WordPress i18n system with PHPMailer, so that any user-visible error messages can be properly translated. Props sukhendu2002, swissspidy, audrasjb, iandunn, nacin, mark-k. Fixes #23311. git-svn-id: https://develop.svn.wordpress.org/trunk@59592 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-locale-switcher.php | 7 +- src/wp-includes/class-wp-phpmailer.php | 93 ++++++++++++++++++ src/wp-includes/pluggable.php | 3 +- tests/phpunit/data/languages/de_DE.l10n.php | 2 +- tests/phpunit/data/languages/de_DE.mo | Bin 863 -> 965 bytes tests/phpunit/data/languages/de_DE.po | 4 + tests/phpunit/includes/bootstrap.php | 9 +- tests/phpunit/includes/mock-mailer.php | 16 ++- .../tests/l10n/phpmailerTranslations.php | 66 +++++++++++++ 9 files changed, 192 insertions(+), 8 deletions(-) create mode 100644 src/wp-includes/class-wp-phpmailer.php create mode 100644 tests/phpunit/tests/l10n/phpmailerTranslations.php diff --git a/src/wp-includes/class-wp-locale-switcher.php b/src/wp-includes/class-wp-locale-switcher.php index 9f1c4831ed446..db4ae298c69c0 100644 --- a/src/wp-includes/class-wp-locale-switcher.php +++ b/src/wp-includes/class-wp-locale-switcher.php @@ -273,11 +273,12 @@ private function load_translations( $locale ) { * @since 4.7.0 * * @global WP_Locale $wp_locale WordPress date and time locale object. + * @global PHPMailer\PHPMailer\PHPMailer $phpmailer * * @param string $locale The locale to change to. */ private function change_locale( $locale ) { - global $wp_locale; + global $wp_locale, $phpmailer; $this->load_translations( $locale ); @@ -285,6 +286,10 @@ private function change_locale( $locale ) { WP_Translation_Controller::get_instance()->set_locale( $locale ); + if ( $phpmailer instanceof WP_PHPMailer ) { + $phpmailer->SetLanguage(); + } + /** * Fires when the locale is switched to or restored. * diff --git a/src/wp-includes/class-wp-phpmailer.php b/src/wp-includes/class-wp-phpmailer.php new file mode 100644 index 0000000000000..b3c976d13d9a6 --- /dev/null +++ b/src/wp-includes/class-wp-phpmailer.php @@ -0,0 +1,93 @@ +SetLanguage(); + } + + /** + * Defines the error messages using WordPress' internationalization method. + * + * @since 6.8.0 + * + * @return true Always returns true. + */ + public function SetLanguage( $langcode = 'en', $lang_path = '' ) { + $error_strings = array( + 'authenticate' => __( 'SMTP Error: Could not authenticate.' ), + 'buggy_php' => sprintf( + /* translators: 1: mail.add_x_header. 2: php.ini */ + __( + 'Your version of PHP is affected by a bug that may result in corrupted messages. To fix it, switch to sending using SMTP, disable the %1$s option in your %2$s, or switch to MacOS or Linux, or upgrade your PHP version.' + ), + 'mail.add_x_header', + 'php.ini' + ), + 'connect_host' => __( 'SMTP Error: Could not connect to SMTP host.' ), + 'data_not_accepted' => __( 'SMTP Error: data not accepted.' ), + 'empty_message' => __( 'Message body empty' ), + /* translators: There is a space after the colon. */ + 'encoding' => __( 'Unknown encoding: ' ), + /* translators: There is a space after the colon. */ + 'execute' => __( 'Could not execute: ' ), + /* translators: There is a space after the colon. */ + 'extension_missing' => __( 'Extension missing: ' ), + /* translators: There is a space after the colon. */ + 'file_access' => __( 'Could not access file: ' ), + /* translators: There is a space after the colon. */ + 'file_open' => __( 'File Error: Could not open file: ' ), + /* translators: There is a space after the colon. */ + 'from_failed' => __( 'The following From address failed: ' ), + 'instantiate' => __( 'Could not instantiate mail function.' ), + /* translators: There is a space after the colon. */ + 'invalid_address' => __( 'Invalid address: ' ), + 'invalid_header' => __( 'Invalid header name or value' ), + /* translators: There is a space after the colon. */ + 'invalid_hostentry' => __( 'Invalid hostentry: ' ), + /* translators: There is a space after the colon. */ + 'invalid_host' => __( 'Invalid host: ' ), + /* translators: There is a space at the beginning. */ + 'mailer_not_supported' => __( ' mailer is not supported.' ), + 'provide_address' => __( 'You must provide at least one recipient email address.' ), + /* translators: There is a space after the colon. */ + 'recipients_failed' => __( 'SMTP Error: The following recipients failed: ' ), + /* translators: There is a space after the colon. */ + 'signing' => __( 'Signing Error: ' ), + /* translators: There is a space after the colon. */ + 'smtp_code' => __( 'SMTP code: ' ), + /* translators: There is a space after the colon. */ + 'smtp_code_ex' => __( 'Additional SMTP info: ' ), + 'smtp_connect_failed' => __( 'SMTP connect() failed.' ), + /* translators: There is a space after the colon. */ + 'smtp_detail' => __( 'Detail: ' ), + /* translators: There is a space after the colon. */ + 'smtp_error' => __( 'SMTP server error: ' ), + /* translators: There is a space after the colon. */ + 'variable_set' => __( 'Cannot set or reset variable: ' ), + ); + $this->language = $error_strings; + return true; + } +} diff --git a/src/wp-includes/pluggable.php b/src/wp-includes/pluggable.php index d0b2d3602a980..42a63fa63ddf7 100644 --- a/src/wp-includes/pluggable.php +++ b/src/wp-includes/pluggable.php @@ -251,7 +251,8 @@ function wp_mail( $to, $subject, $message, $headers = '', $attachments = array() require_once ABSPATH . WPINC . '/PHPMailer/PHPMailer.php'; require_once ABSPATH . WPINC . '/PHPMailer/SMTP.php'; require_once ABSPATH . WPINC . '/PHPMailer/Exception.php'; - $phpmailer = new PHPMailer\PHPMailer\PHPMailer( true ); + require_once ABSPATH . WPINC . '/class-wp-phpmailer.php'; + $phpmailer = new WP_PHPMailer( true ); $phpmailer::$validator = static function ( $email ) { return (bool) is_email( $email ); diff --git a/tests/phpunit/data/languages/de_DE.l10n.php b/tests/phpunit/data/languages/de_DE.l10n.php index 8eef01d79ce00..9190d3641ca68 100644 --- a/tests/phpunit/data/languages/de_DE.l10n.php +++ b/tests/phpunit/data/languages/de_DE.l10n.php @@ -1,2 +1,2 @@ NULL,'plural-forms'=>'nplurals=2; plural=n != 1;','messages'=>['html_lang_attribute'=>'de-DE','text directionltr'=>'ltr','number_format_decimal_point'=>',','number_format_thousands_sep'=>'.','Update %s now'=>'Jetzt %s aktualisieren','[%1$s] Confirm Action: %2$s'=>'[%1$s] Aktion bestätigen: %2$s','[%s] Erasure Request Fulfilled'=>'[%s] Löschauftrag ausgeführt','[%s] Personal Data Export'=>'[%s] Export personenbezogener Daten'],'language'=>'de_DE','x-generator'=>'Poedit 2.2.1']; \ No newline at end of file +return ['domain'=>NULL,'plural-forms'=>'nplurals=2; plural=n != 1;','messages'=>['html_lang_attribute'=>'de-DE','text directionltr'=>'ltr','number_format_decimal_point'=>',','number_format_thousands_sep'=>'.','Update %s now'=>'Jetzt %s aktualisieren','[%1$s] Confirm Action: %2$s'=>'[%1$s] Aktion bestätigen: %2$s','[%s] Erasure Request Fulfilled'=>'[%s] Löschauftrag ausgeführt','[%s] Personal Data Export'=>'[%s] Export personenbezogener Daten', 'You must provide at least one recipient email address.'=>'Du musst mindestens eine Empfänger-E-Mail-Adresse angeben.'],'language'=>'de_DE','x-generator'=>'Poedit 2.2.1']; diff --git a/tests/phpunit/data/languages/de_DE.mo b/tests/phpunit/data/languages/de_DE.mo index dcfef58f489228b3208aef0fbc17704d06c6fe8c..8254de97f2af35c7f3e97a518dce585162dcb2f3 100644 GIT binary patch delta 416 zcmXZWze>YE90%}A>K_n9XhjsI9%#`e9UT-0C0&YLv?Aglr}-Iv51IM-$9>1pTTcxk9_mF`-LRm@2St}?pJx@fnm)cD@arvuwMTeIg9-O*+PcM zGU7UnRbdq_!ChE^C$M;$rW`?KlmDAzss5B{%Fe$$6Y>!_zFemH}~Lctiq&L=n&EQl^rW;S>uQaS;R= zm9(zk|MsnPH|7s1O)}%PbSMLFKM%FnPVBQ=vqR_1KDrg#b2jG=gbH&J(l!t1+;7-* z*FR!SGPkB^Avz`(k<^khQp_LK!S7?K0@8+*<|I+25vNxlPb#F$Yj`b`@%GR~Yc$62 Kf>ho9xY-}a9${<% delta 295 zcmX@gexI%Wo)F7a1|Z-BVi_P#0b*VtUIWA+@BoNG{D(j+4aDz(SPqD}85tNPfwUHo z76#HTKpG?;0i{cTv=ER#0Z1DI@nRqr1M;skF)+vj>32XHXih!@A2S1kGEhJlNV5Xz zKp+iN%McEwBY`v!F+@Z8KqlC+AhjUC2E;(K7&t&2AYg$|U_I<0c4$FLVo9okYOz9I ze)(iZ#%+_^nA9hWGeu9{$K*758>0rlPhwtrX<~Y+l|o8tyo>AP0w&SPUm2AqF-uGi HVJ-v!bHXIt diff --git a/tests/phpunit/data/languages/de_DE.po b/tests/phpunit/data/languages/de_DE.po index aa97af62e9a0f..b68c53867d8bc 100644 --- a/tests/phpunit/data/languages/de_DE.po +++ b/tests/phpunit/data/languages/de_DE.po @@ -57,3 +57,7 @@ msgstr "[%s] Löschauftrag ausgeführt" #: wp-admin/includes/file.php:2415 msgid "[%s] Personal Data Export" msgstr "[%s] Export personenbezogener Daten" + +#: wp-includes/class-wp-phpmailer.php:71 +msgid "You must provide at least one recipient email address." +msgstr "Du musst mindestens eine Empfänger-E-Mail-Adresse angeben." diff --git a/tests/phpunit/includes/bootstrap.php b/tests/phpunit/includes/bootstrap.php index 5ee8f38b5753f..c28ddb6eb07b2 100644 --- a/tests/phpunit/includes/bootstrap.php +++ b/tests/phpunit/includes/bootstrap.php @@ -246,10 +246,6 @@ $multisite = $multisite || ( defined( 'WP_TESTS_MULTISITE' ) && WP_TESTS_MULTISITE ); $multisite = $multisite || ( defined( 'MULTISITE' ) && MULTISITE ); -// Override the PHPMailer. -require_once __DIR__ . '/mock-mailer.php'; -$phpmailer = new MockPHPMailer( true ); - if ( ! defined( 'WP_DEFAULT_THEME' ) ) { define( 'WP_DEFAULT_THEME', 'default' ); } @@ -305,6 +301,11 @@ function wp_tests_options( $value ) { // Load WordPress. require_once ABSPATH . 'wp-settings.php'; +// Override the PHPMailer. +require_once __DIR__ . '/mock-mailer.php'; + +$phpmailer = new MockPHPMailer( true ); + // Delete any default posts & related data. _delete_all_posts(); diff --git a/tests/phpunit/includes/mock-mailer.php b/tests/phpunit/includes/mock-mailer.php index f5172d62a6c59..aedeba4e40cd0 100644 --- a/tests/phpunit/includes/mock-mailer.php +++ b/tests/phpunit/includes/mock-mailer.php @@ -1,8 +1,22 @@ setFrom( 'invalid-email@example.com' ); + + try { + $phpmailer->send(); + $this->fail( 'Expected exception was not thrown' ); + } catch ( PHPMailer\PHPMailer\Exception $e ) { + $error_message = $e->getMessage(); + } finally { + if ( $is_switched ) { + restore_previous_locale(); + } + } + + $this->assertSame( + 'Du musst mindestens eine Empfänger-E-Mail-Adresse angeben.', + $error_message, + 'Error message is not translated as expected' + ); + } + + /** + * Test that PHPMailer error message keys are consistent across implementations. + * + * @ticket 23311 + */ + public function test_all_error_message_keys_should_be_translated() { + reset_phpmailer_instance(); + + $phpmailer = new PHPMailer\PHPMailer\PHPMailer(); + $wp_phpmailer = tests_retrieve_phpmailer_instance(); + + $this->assertEqualSets( array_keys( $phpmailer->GetTranslations() ), array_keys( $wp_phpmailer->GetTranslations() ) ); + } +} From 86f31c81668c0a680b6db275b41298f7e8513389 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Wed, 8 Jan 2025 17:46:54 +0000 Subject: [PATCH 16/31] Coding Standards: Use strict comparison in `wp_check_for_changed_dates()`. Follow-up to [42401]. Props aristath, poena, afercia, SergeyBiryukov. See #62279. git-svn-id: https://develop.svn.wordpress.org/trunk@59593 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/post.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php index 6d225470d2b4e..a0933f1ffdbf8 100644 --- a/src/wp-includes/post.php +++ b/src/wp-includes/post.php @@ -7255,12 +7255,14 @@ function wp_check_for_changed_dates( $post_id, $post, $post_before ) { $new_date = gmdate( 'Y-m-d', strtotime( $post->post_date ) ); // Don't bother if it hasn't changed. - if ( $new_date == $previous_date ) { + if ( $new_date === $previous_date ) { return; } // We're only concerned with published, non-hierarchical objects. - if ( ! ( 'publish' === $post->post_status || ( 'attachment' === get_post_type( $post ) && 'inherit' === $post->post_status ) ) || is_post_type_hierarchical( $post->post_type ) ) { + if ( ! ( 'publish' === $post->post_status || ( 'attachment' === $post->post_type && 'inherit' === $post->post_status ) ) + || is_post_type_hierarchical( $post->post_type ) + ) { return; } From c53397d1f852fd1f53d8ae9defc5907283a9e198 Mon Sep 17 00:00:00 2001 From: Carolina Nymark Date: Thu, 9 Jan 2025 09:21:33 +0000 Subject: [PATCH 17/31] Twenty Twenty: Correct the font weight of the quote block in the editor. This change removes the font weight of the paragraph inside the quote block, so that the design in the editor and the front looks the same. Props sainathpoojary, ankitkumarshah, sabernhardt, krupajnanda. Fixes #62753. git-svn-id: https://develop.svn.wordpress.org/trunk@59594 602fd350-edb4-49c9-b593-d223f7449a82 --- .../themes/twentytwenty/assets/css/editor-style-block-rtl.css | 1 - .../themes/twentytwenty/assets/css/editor-style-block.css | 1 - 2 files changed, 2 deletions(-) diff --git a/src/wp-content/themes/twentytwenty/assets/css/editor-style-block-rtl.css b/src/wp-content/themes/twentytwenty/assets/css/editor-style-block-rtl.css index 8a5f813502b72..141b9d9f86a4c 100644 --- a/src/wp-content/themes/twentytwenty/assets/css/editor-style-block-rtl.css +++ b/src/wp-content/themes/twentytwenty/assets/css/editor-style-block-rtl.css @@ -682,7 +682,6 @@ hr.wp-block-separator.is-style-dots::before { .editor-styles-wrapper .wp-block-quote p { color: inherit; - font-weight: 400; margin: 0 0 20px 0; letter-spacing: inherit; } diff --git a/src/wp-content/themes/twentytwenty/assets/css/editor-style-block.css b/src/wp-content/themes/twentytwenty/assets/css/editor-style-block.css index 7f18f4772441e..862a51cc2b8e1 100644 --- a/src/wp-content/themes/twentytwenty/assets/css/editor-style-block.css +++ b/src/wp-content/themes/twentytwenty/assets/css/editor-style-block.css @@ -686,7 +686,6 @@ hr.wp-block-separator.is-style-dots::before { .editor-styles-wrapper .wp-block-quote p { color: inherit; - font-weight: 400; margin: 0 0 20px 0; letter-spacing: inherit; } From a48e1806f767c550cbb8b66d672507f589a7be9a Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 9 Jan 2025 19:41:47 +0000 Subject: [PATCH 18/31] Login and Registration: Check that the `$_POST` values are strings in `wp_signon()`. This prevents a fatal error from `trim()` via `wp_authenticate()` if an array is passed instead. Follow-up to [6643], [58093]. Props leedxw, audrasjb, SergeyBiryukov. Fixes #62794. git-svn-id: https://develop.svn.wordpress.org/trunk@59595 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/user.php | 4 ++-- tests/phpunit/tests/auth.php | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/user.php b/src/wp-includes/user.php index f60dbe5d3fae2..6222e932a9015 100644 --- a/src/wp-includes/user.php +++ b/src/wp-includes/user.php @@ -48,10 +48,10 @@ function wp_signon( $credentials = array(), $secure_cookie = '' ) { 'remember' => false, ); - if ( ! empty( $_POST['log'] ) ) { + if ( ! empty( $_POST['log'] ) && is_string( $_POST['log'] ) ) { $credentials['user_login'] = wp_unslash( $_POST['log'] ); } - if ( ! empty( $_POST['pwd'] ) ) { + if ( ! empty( $_POST['pwd'] ) && is_string( $_POST['pwd'] ) ) { $credentials['user_password'] = $_POST['pwd']; } if ( ! empty( $_POST['rememberme'] ) ) { diff --git a/tests/phpunit/tests/auth.php b/tests/phpunit/tests/auth.php index 5c196b499fcce..f45071904e9c8 100644 --- a/tests/phpunit/tests/auth.php +++ b/tests/phpunit/tests/auth.php @@ -634,6 +634,28 @@ public function test_wp_signon_does_not_throw_deprecation_notices_with_default_p $this->assertContains( 'empty_password', $error_codes, 'The "empty_password" error code should be present.' ); } + /** + * Tests that a warning or a fatal error is not thrown when the login or password + * passed via `$_POST` is an array instead of a string. + * + * The messages that we should not see: + * `Warning: wp_strip_all_tags() expects parameter #1 ($text) to be a string, array given`. + * `TypeError: trim(): Argument #1 ($string) must be of type string, array given`. + * + * @ticket 62794 + */ + public function test_wp_signon_does_not_throw_fatal_errors_with_array_parameters() { + $_POST['log'] = array( 'example' ); + $_POST['pwd'] = array( 'example' ); + + $error = wp_signon(); + $this->assertWPError( $error, 'The result should be an instance of WP_Error.' ); + + $error_codes = $error->get_error_codes(); + $this->assertContains( 'empty_username', $error_codes, 'The "empty_username" error code should be present.' ); + $this->assertContains( 'empty_password', $error_codes, 'The "empty_password" error code should be present.' ); + } + /** * HTTP Auth headers are used to determine the current user. * From 1dd2f28680c98373468adb53aff18df00586c559 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Fri, 10 Jan 2025 18:12:08 +0000 Subject: [PATCH 19/31] Coding Standards: Use strict comparison in `get_posts_by_author_sql()`. Follow-up to [13576], [25669]. Props aristath, poena, afercia, SergeyBiryukov. See #62279. git-svn-id: https://develop.svn.wordpress.org/trunk@59596 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/post.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php index a0933f1ffdbf8..ebf7c7f3a9e40 100644 --- a/src/wp-includes/post.php +++ b/src/wp-includes/post.php @@ -7358,7 +7358,7 @@ function get_posts_by_author_sql( $post_type, $full = true, $post_author = null, $id = get_current_user_id(); if ( null === $post_author || ! $full ) { $post_status_sql .= " OR post_status = 'private' AND post_author = $id"; - } elseif ( $id == (int) $post_author ) { + } elseif ( $id === (int) $post_author ) { $post_status_sql .= " OR post_status = 'private'"; } // Else none. } // Else none. From 4051e31bec3a61ac6293387580cae7e655d26a52 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sat, 11 Jan 2025 00:35:45 +0000 Subject: [PATCH 20/31] Coding Standards: Use strict comparison in `wp_check_post_hierarchy_for_loops()`. Follow-up to [10129], [15806]. Props aristath, poena, afercia, SergeyBiryukov. See #62279. git-svn-id: https://develop.svn.wordpress.org/trunk@59597 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/post.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php index ebf7c7f3a9e40..74cedc40e1766 100644 --- a/src/wp-includes/post.php +++ b/src/wp-includes/post.php @@ -7934,7 +7934,7 @@ function wp_check_post_hierarchy_for_loops( $post_parent, $post_id ) { } // Can't be its own parent. - if ( $post_parent == $post_id ) { + if ( $post_parent === $post_id ) { return 0; } From c0d073d62d32d424d9149619a7fcae48ddb82c26 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Sat, 11 Jan 2025 13:42:46 +0000 Subject: [PATCH 21/31] Embeds: Add Canva to oEmbed provider allowlist. Props swissspidy. Fixes #58840. git-svn-id: https://develop.svn.wordpress.org/trunk@59598 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-oembed.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/wp-includes/class-wp-oembed.php b/src/wp-includes/class-wp-oembed.php index 5b699e9362c64..2d59c2217dc3e 100644 --- a/src/wp-includes/class-wp-oembed.php +++ b/src/wp-includes/class-wp-oembed.php @@ -110,6 +110,7 @@ public function __construct() { '#https?://pca\.st/.+#i' => array( 'https://pca.st/oembed.json', true ), '#https?://((play|www)\.)?anghami\.com/.*#i' => array( 'https://api.anghami.com/rest/v1/oembed.view', true ), '#https?://bsky.app/profile/.*/post/.*#i' => array( 'https://embed.bsky.app/oembed', true ), + '#https?://(www\.)?canva\.com/design/.*/view.*#i' => array( 'https://canva.com/_oembed', true ), ); if ( ! empty( self::$early_providers['add'] ) ) { @@ -190,6 +191,7 @@ public function __construct() { * | Crowdsignal | crowdsignal.net | 6.2.0 | * | Anghami | anghami.com | 6.3.0 | * | Bluesky | bsky.app | 6.6.0 | + * | Canva | canva.com | 6.8.0 | * * No longer supported providers: * From 88796678fd838ab0e790d22558f258c906262400 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sun, 12 Jan 2025 18:12:14 +0000 Subject: [PATCH 22/31] Coding Standards: Use strict comparison in `get_page_by_path()`. Follow-up to [3511], [18541], [19075], [21845]. Props aristath, poena, afercia, SergeyBiryukov. See #62279. git-svn-id: https://develop.svn.wordpress.org/trunk@59599 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/post.php | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php index 74cedc40e1766..8cb7287289b41 100644 --- a/src/wp-includes/post.php +++ b/src/wp-includes/post.php @@ -6061,9 +6061,9 @@ function get_page_by_path( $page_path, $output = OBJECT, $post_type = 'page' ) { $revparts = array_reverse( $parts ); - $foundid = 0; + $found_id = 0; foreach ( (array) $pages as $page ) { - if ( $page->post_name == $revparts[0] ) { + if ( $page->post_name === $revparts[0] ) { $count = 0; $p = $page; @@ -6071,18 +6071,21 @@ function get_page_by_path( $page_path, $output = OBJECT, $post_type = 'page' ) { * Loop through the given path parts from right to left, * ensuring each matches the post ancestry. */ - while ( 0 != $p->post_parent && isset( $pages[ $p->post_parent ] ) ) { + while ( 0 !== (int) $p->post_parent && isset( $pages[ $p->post_parent ] ) ) { ++$count; $parent = $pages[ $p->post_parent ]; - if ( ! isset( $revparts[ $count ] ) || $parent->post_name != $revparts[ $count ] ) { + if ( ! isset( $revparts[ $count ] ) || $parent->post_name !== $revparts[ $count ] ) { break; } $p = $parent; } - if ( 0 == $p->post_parent && count( $revparts ) === $count + 1 && $p->post_name == $revparts[ $count ] ) { - $foundid = $page->ID; - if ( $page->post_type == $post_type ) { + if ( 0 === (int) $p->post_parent + && count( $revparts ) === $count + 1 + && $p->post_name === $revparts[ $count ] + ) { + $found_id = $page->ID; + if ( $page->post_type === $post_type ) { break; } } @@ -6090,10 +6093,10 @@ function get_page_by_path( $page_path, $output = OBJECT, $post_type = 'page' ) { } // We cache misses as well as hits. - wp_cache_set( $cache_key, $foundid, 'post-queries' ); + wp_cache_set( $cache_key, $found_id, 'post-queries' ); - if ( $foundid ) { - return get_post( $foundid, $output ); + if ( $found_id ) { + return get_post( $found_id, $output ); } return null; From 062df4cd8825c3a44de4c05fe612bf3172ede84b Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Mon, 13 Jan 2025 14:55:09 +0000 Subject: [PATCH 23/31] Coding Standards: Add missing space for self-closing tags. Props laxman-prajapati, sabernhardt. Fixes #62799. git-svn-id: https://develop.svn.wordpress.org/trunk@59600 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/network/settings.php | 2 +- src/wp-admin/options-discussion.php | 2 +- src/wp-admin/options-media.php | 2 +- src/wp-admin/setup-config.php | 2 +- src/wp-includes/widgets.php | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/wp-admin/network/settings.php b/src/wp-admin/network/settings.php index c93d98a169849..82543f6219f85 100644 --- a/src/wp-admin/network/settings.php +++ b/src/wp-admin/network/settings.php @@ -405,7 +405,7 @@ -

  • - +
  • diff --git a/src/wp-admin/options-media.php b/src/wp-admin/options-media.php index ce814c9d3891e..b2eb47c4f402a 100644 --- a/src/wp-admin/options-media.php +++ b/src/wp-admin/options-media.php @@ -70,7 +70,7 @@ -/> + /> diff --git a/src/wp-admin/setup-config.php b/src/wp-admin/setup-config.php index 2d1ff715d3d23..d2fa4ae8ea7ee 100644 --- a/src/wp-admin/setup-config.php +++ b/src/wp-admin/setup-config.php @@ -227,7 +227,7 @@ function setup_config_display_header( $body_classes = array() ) { - diff --git a/src/wp-includes/widgets.php b/src/wp-includes/widgets.php index 32d8a95e1b984..aa17656507a4f 100644 --- a/src/wp-includes/widgets.php +++ b/src/wp-includes/widgets.php @@ -1746,7 +1746,7 @@ function wp_widget_rss_form( $args, $inputs = null ) { />
    - /> + />

    From 9d9d73cd9e5d243e4841fe9567ef388e3fb65932 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Mon, 13 Jan 2025 22:20:03 +0000 Subject: [PATCH 24/31] Docs: Correct `@return` value for `update_attached_file()`. Follow-up to [4612], [21967], [24490], [47611], [48214]. Props arnoutblueshell, karthickmurugan, SergeyBiryukov. Fixes #62803. git-svn-id: https://develop.svn.wordpress.org/trunk@59602 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/post.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php index 8cb7287289b41..98b9092f16f1f 100644 --- a/src/wp-includes/post.php +++ b/src/wp-includes/post.php @@ -852,13 +852,15 @@ function get_attached_file( $attachment_id, $unfiltered = false ) { * Updates attachment file path based on attachment ID. * * Used to update the file path of the attachment, which uses post meta name - * '_wp_attached_file' to store the path of the attachment. + * `_wp_attached_file` to store the path of the attachment. * * @since 2.1.0 * * @param int $attachment_id Attachment ID. * @param string $file File path for the attachment. - * @return bool True on success, false on failure. + * @return int|bool Meta ID if the `_wp_attached_file` key didn't exist for the attachment. + * True on successful update, false on failure or if the `$file` value passed + * to the function is the same as the one that is already in the database. */ function update_attached_file( $attachment_id, $file ) { if ( ! get_post( $attachment_id ) ) { From 47774776112815b1b997a68fc51cf3dabd3f44c2 Mon Sep 17 00:00:00 2001 From: John Blackbourn Date: Tue, 14 Jan 2025 11:37:00 +0000 Subject: [PATCH 25/31] Docs: Correct a translator comment that was added in [59578]. See #62005 git-svn-id: https://develop.svn.wordpress.org/trunk@59603 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/pluggable.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/pluggable.php b/src/wp-includes/pluggable.php index 42a63fa63ddf7..f4a8d8412e88c 100644 --- a/src/wp-includes/pluggable.php +++ b/src/wp-includes/pluggable.php @@ -2605,7 +2605,7 @@ function wp_hash( $data, $scheme = 'auth', $algo = 'md5' ) { if ( ! in_array( $algo, hash_hmac_algos(), true ) ) { throw new InvalidArgumentException( sprintf( - /** translators: 1: Name of a cryptographic hash algorithm. 2: List of supported algorithms. */ + /* translators: 1: Name of a cryptographic hash algorithm. 2: List of supported algorithms. */ __( 'Unsupported hashing algorithm: %1$s. Supported algorithms are: %2$s' ), $algo, implode( ', ', hash_hmac_algos() ) From 83718be6851597c68ba085b120c892616443698d Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Tue, 14 Jan 2025 15:35:18 +0000 Subject: [PATCH 26/31] Tests: Restore the environment before performing assertions in `download_url()` tests. This aims to avoid affecting other tests in case of failure. Follow-up to [42773], [51939]. See #62280. git-svn-id: https://develop.svn.wordpress.org/trunk@59604 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/admin/includesFile.php | 26 ++++++++++++++-------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/tests/phpunit/tests/admin/includesFile.php b/tests/phpunit/tests/admin/includesFile.php index 4bfe80db6fc5d..943cabb7c09c1 100644 --- a/tests/phpunit/tests/admin/includesFile.php +++ b/tests/phpunit/tests/admin/includesFile.php @@ -43,6 +43,7 @@ public function test_download_url_non_200_response_code() { add_filter( 'pre_http_request', array( $this, '_fake_download_url_non_200_response_code' ), 10, 3 ); $error = download_url( 'test_download_url_non_200' ); + $this->assertWPError( $error ); $this->assertSame( array( @@ -55,6 +56,10 @@ public function test_download_url_non_200_response_code() { add_filter( 'download_url_error_max_body_size', array( $this, '__return_5' ) ); $error = download_url( 'test_download_url_non_200' ); + + remove_filter( 'download_url_error_max_body_size', array( $this, '__return_5' ) ); + remove_filter( 'pre_http_request', array( $this, '_fake_download_url_non_200_response_code' ) ); + $this->assertWPError( $error ); $this->assertSame( array( @@ -63,9 +68,6 @@ public function test_download_url_non_200_response_code() { ), $error->get_error_data() ); - - remove_filter( 'download_url_error_max_body_size', array( $this, '__return_5' ) ); - remove_filter( 'pre_http_request', array( $this, '_fake_download_url_non_200_response_code' ) ); } public function _fake_download_url_non_200_response_code( $response, $parsed_args, $url ) { @@ -94,11 +96,13 @@ public function test_download_url_should_respect_filename_from_content_dispositi add_filter( 'pre_http_request', array( $this, $filter ), 10, 3 ); $filename = download_url( 'url_with_content_disposition_header' ); - $this->assertStringContainsString( 'filename-from-content-disposition-header', $filename ); + + remove_filter( 'pre_http_request', array( $this, $filter ) ); + $this->assertFileExists( $filename ); $this->unlink( $filename ); - remove_filter( 'pre_http_request', array( $this, $filter ) ); + $this->assertStringContainsString( 'filename-from-content-disposition-header', $filename ); } /** @@ -126,10 +130,12 @@ public function test_save_to_temp_directory_when_getting_filename_from_content_d add_filter( 'pre_http_request', array( $this, $filter ), 10, 3 ); $filename = download_url( 'url_with_content_disposition_header' ); - $this->assertStringContainsString( get_temp_dir(), $filename ); - $this->unlink( $filename ); remove_filter( 'pre_http_request', array( $this, $filter ) ); + + $this->unlink( $filename ); + + $this->assertStringContainsString( get_temp_dir(), $filename ); } /** @@ -209,10 +215,12 @@ public function test_download_url_should_reject_filename_from_invalid_content_di add_filter( 'pre_http_request', array( $this, $filter ), 10, 3 ); $filename = download_url( 'url_with_content_disposition_header' ); - $this->assertStringContainsString( 'url_with_content_disposition_header', $filename ); - $this->unlink( $filename ); remove_filter( 'pre_http_request', array( $this, $filter ) ); + + $this->unlink( $filename ); + + $this->assertStringContainsString( 'url_with_content_disposition_header', $filename ); } /** From 48ba7a364d581decc6ba7c2b84c3d72e84b0fe73 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Wed, 15 Jan 2025 12:44:43 +0000 Subject: [PATCH 27/31] REST API: Improve autosave and revision endpoints for templates and template parts. Fixes those endpoints for file-based templates and template parts, as templates based on theme files can't be revisioned or autosaved. Props antonvlasenko, swissspidy, spacedmonkey, kadamwhite. Fixes #61970. git-svn-id: https://develop.svn.wordpress.org/trunk@59605 602fd350-edb4-49c9-b593-d223f7449a82 --- ...-wp-rest-template-revisions-controller.php | 12 +- .../wpRestTemplateAutosavesController.php | 414 +++++++++-- .../wpRestTemplateRevisionsController.php | 688 +++++++++++++++--- 3 files changed, 973 insertions(+), 141 deletions(-) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php index 22cdc268fa8c6..c0bc7663e1f8b 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php @@ -170,7 +170,17 @@ protected function get_parent( $parent_template_id ) { return new WP_Error( 'rest_post_invalid_parent', __( 'Invalid template parent ID.' ), - array( 'status' => 404 ) + array( 'status' => WP_Http::NOT_FOUND ) + ); + } + + $parent_post_id = isset( $template->wp_id ) ? (int) $template->wp_id : 0; + + if ( $parent_post_id <= 0 ) { + return new WP_Error( + 'rest_invalid_template', + __( 'Templates based on theme files can\'t have revisions.' ), + array( 'status' => WP_Http::BAD_REQUEST ) ); } diff --git a/tests/phpunit/tests/rest-api/wpRestTemplateAutosavesController.php b/tests/phpunit/tests/rest-api/wpRestTemplateAutosavesController.php index 550eb8e5fe999..e2da442e7d874 100644 --- a/tests/phpunit/tests/rest-api/wpRestTemplateAutosavesController.php +++ b/tests/phpunit/tests/rest-api/wpRestTemplateAutosavesController.php @@ -22,7 +22,17 @@ class Tests_REST_wpRestTemplateAutosavesController extends WP_Test_REST_Controll /** * @var string */ - const PARENT_POST_TYPE = 'wp_template'; + const TEMPLATE_PART_NAME = 'my_template_part'; + + /** + * @var string + */ + const TEMPLATE_POST_TYPE = 'wp_template'; + + /** + * @var string + */ + const TEMPLATE_PART_POST_TYPE = 'wp_template_part'; /** * Admin user ID. @@ -52,7 +62,16 @@ class Tests_REST_wpRestTemplateAutosavesController extends WP_Test_REST_Controll private static $template_post; /** - * Create fake data before our tests run. + * Template part post. + * + * @since 6.7.0 + * + * @var WP_Post + */ + private static $template_part_post; + + /** + * Create fake data before the tests run. * * @param WP_UnitTest_Factory $factory Helper that lets us create fake data. */ @@ -73,9 +92,9 @@ public static function wpSetUpBeforeClass( WP_UnitTest_Factory $factory ) { // Set up template post. self::$template_post = $factory->post->create_and_get( array( - 'post_type' => self::PARENT_POST_TYPE, + 'post_type' => self::TEMPLATE_POST_TYPE, 'post_name' => self::TEMPLATE_NAME, - 'post_title' => 'My Template', + 'post_title' => 'My template', 'post_content' => 'Content', 'post_excerpt' => 'Description of my template', 'tax_input' => array( @@ -86,6 +105,27 @@ public static function wpSetUpBeforeClass( WP_UnitTest_Factory $factory ) { ) ); wp_set_post_terms( self::$template_post->ID, self::TEST_THEME, 'wp_theme' ); + + // Set up template part post. + self::$template_part_post = $factory->post->create_and_get( + array( + 'post_type' => self::TEMPLATE_PART_POST_TYPE, + 'post_name' => self::TEMPLATE_PART_NAME, + 'post_title' => 'My template part', + 'post_content' => 'Content', + 'post_excerpt' => 'Description of my template part', + 'tax_input' => array( + 'wp_theme' => array( + self::TEST_THEME, + ), + 'wp_template_part_area' => array( + WP_TEMPLATE_PART_AREA_HEADER, + ), + ), + ) + ); + wp_set_post_terms( self::$template_part_post->ID, self::TEST_THEME, 'wp_theme' ); + wp_set_post_terms( self::$template_part_post->ID, WP_TEMPLATE_PART_AREA_HEADER, 'wp_template_part_area' ); } /** @@ -117,12 +157,26 @@ public function test_register_routes() { } /** - * @covers WP_REST_Template_Autosaves_Controller::get_context_param + * @coversNothing * @ticket 56922 */ public function test_context_param() { + // A proper data provider cannot be used because this method's signature must match the parent method. + // Therefore, actual tests are performed in the test_context_param_with_data_provider method. + $this->assertTrue( true ); + } + + /** + * @dataProvider data_context_param_with_data_provider + * @covers WP_REST_Template_Autosaves_Controller::get_context_param + * @ticket 56922 + * + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. + */ + public function test_context_param_with_data_provider( $rest_base, $template_id ) { // Collection. - $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/autosaves' ); + $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves' ); $response = rest_get_server()->dispatch( $request ); $data = $response->get_data(); @@ -144,7 +198,7 @@ public function test_context_param() { ); // Single. - $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/autosaves/1' ); + $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves/1' ); $response = rest_get_server()->dispatch( $request ); $data = $response->get_data(); $this->assertCount( @@ -165,25 +219,55 @@ public function test_context_param() { } /** - * @covers WP_REST_Template_Autosaves_Controller::get_items + * Data provider for test_context_param_with_data_provider. + * + * @return array + */ + public function data_context_param_with_data_provider() { + return array( + 'templates' => array( 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), + 'template parts' => array( 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), + ); + } + + /** + * @coversNothing * @ticket 56922 */ public function test_get_items() { + // A proper data provider cannot be used because this method's signature must match the parent method. + // Therefore, actual tests are performed in the test_get_items_with_data_provider method. + $this->assertTrue( true ); + } + + /** + * @dataProvider data_get_items_with_data_provider + * @covers WP_REST_Template_Autosaves_Controller::get_items + * @ticket 56922 + * + * @param string $parent_post_property_name A class property name that contains the parent post object. + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. + */ + public function test_get_items_with_data_provider( $parent_post_property_name, $rest_base, $template_id ) { wp_set_current_user( self::$admin_id ); + // Cannot access this property in the data provider because it is not initialized at the time of execution. + $parent_post = self::$$parent_post_property_name; $autosave_post_id = wp_create_post_autosave( array( 'post_content' => 'Autosave content.', - 'post_ID' => self::$template_post->ID, - 'post_type' => self::PARENT_POST_TYPE, + 'post_ID' => $parent_post->ID, + 'post_type' => $parent_post->post_type, ) ); $request = new WP_REST_Request( 'GET', - '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/autosaves' + '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves' ); $response = rest_get_server()->dispatch( $request ); $autosaves = $response->get_data(); + $this->assertSame( WP_Http::OK, $response->get_status(), 'Response is expected to have a status code of 200.' ); $this->assertCount( 1, @@ -197,7 +281,7 @@ public function test_get_items() { 'Failed asserting that the ID of the autosave matches the expected autosave post ID.' ); $this->assertSame( - self::$template_post->ID, + $parent_post->ID, $autosaves[0]['parent'], 'Failed asserting that the parent ID of the autosave matches the template post ID.' ); @@ -209,22 +293,121 @@ public function test_get_items() { } /** - * @covers WP_REST_Template_Autosaves_Controller::get_item + * Data provider for test_get_items_with_data_provider. + * + * @return array + */ + public function data_get_items_with_data_provider() { + return array( + 'templates' => array( 'template_post', 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), + 'template parts' => array( 'template_part_post', 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), + ); + } + + /** + * @dataProvider data_get_items_for_templates_based_on_theme_files_should_return_bad_response_status + * @ticket 61970 + * + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. + */ + public function test_get_items_for_templates_based_on_theme_files_should_return_bad_response_status( $rest_base, $template_id ) { + wp_set_current_user( self::$admin_id ); + switch_theme( 'block-theme' ); + + $request = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves' ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertErrorResponse( + 'rest_invalid_template', + $response, + WP_Http::BAD_REQUEST, + sprintf( 'Response is expected to have a status code of %d.', WP_Http::BAD_REQUEST ) + ); + } + + /** + * Data provider for test_get_items_for_templates_based_on_theme_files_should_return_bad_response_status. + * + * @return array + */ + public function data_get_items_for_templates_based_on_theme_files_should_return_bad_response_status() { + return array( + 'templates' => array( 'templates', self::TEST_THEME . '//page-home' ), + 'template parts' => array( 'template-parts', self::TEST_THEME . '//small-header' ), + ); + } + + /** + * @dataProvider data_get_item_for_templates_based_on_theme_files_should_return_bad_response_status + * @ticket 56922 + * + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. + */ + public function test_get_item_for_templates_based_on_theme_files_should_return_bad_response_status( $rest_base, $template_id ) { + wp_set_current_user( self::$admin_id ); + switch_theme( 'block-theme' ); + + $request = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves/1' ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertErrorResponse( + 'rest_invalid_template', + $response, + WP_Http::BAD_REQUEST, + sprintf( 'Response is expected to have a status code of %d.', WP_Http::BAD_REQUEST ) + ); + } + + /** + * Data provider for test_get_item_for_templates_based_on_theme_files_should_return_bad_response_status. + * + * @return array + */ + public function data_get_item_for_templates_based_on_theme_files_should_return_bad_response_status() { + return array( + 'templates' => array( 'templates', self::TEST_THEME . '//page-home' ), + 'template parts' => array( 'template-parts', self::TEST_THEME . '//small-header' ), + ); + } + + /** + * @coversNothing * @ticket 56922 */ public function test_get_item() { + // A proper data provider cannot be used because this method's signature must match the parent method. + // Therefore, actual tests are performed in the test_get_item_with_data_provider method. + $this->assertTrue( true ); + } + + /** + * @dataProvider data_get_item_with_data_provider + * @covers WP_REST_Template_Autosaves_Controller::get_item + * @ticket 56922 + * + * @param string $parent_post_property_name A class property name that contains the parent post object. + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. + */ + public function test_get_item_with_data_provider( $parent_post_property_name, $rest_base, $template_id ) { wp_set_current_user( self::$admin_id ); + $parent_post = self::$$parent_post_property_name; + $autosave_post_id = wp_create_post_autosave( array( 'post_content' => 'Autosave content.', - 'post_ID' => self::$template_post->ID, - 'post_type' => self::PARENT_POST_TYPE, + 'post_ID' => $parent_post->ID, + 'post_type' => $parent_post->post_type, ) ); - $request = new WP_REST_Request( 'GET', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/autosaves/' . $autosave_post_id ); + $request = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves/' . $autosave_post_id ); $response = rest_get_server()->dispatch( $request ); + + $this->assertSame( WP_Http::OK, $response->get_status(), 'Response is expected to have a status code of 200.' ); $autosave = $response->get_data(); $this->assertIsArray( $autosave, 'Failed asserting that the autosave is an array.' ); @@ -234,32 +417,59 @@ public function test_get_item() { "Failed asserting that the autosave id is the same as $autosave_post_id." ); $this->assertSame( - self::$template_post->ID, + $parent_post->ID, $autosave['parent'], sprintf( 'Failed asserting that the parent id of the autosave is the same as %s.', - self::$template_post->ID + $parent_post->ID ) ); } /** - * @covers WP_REST_Template_Autosaves_Controller::prepare_item_for_response + * Data provider for test_get_item_with_data_provider. + * + * @return array + */ + public function data_get_item_with_data_provider() { + return array( + 'templates' => array( 'template_post', 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), + 'template parts' => array( 'template_part_post', 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), + ); + } + + /** + * @coversNothing * @ticket 56922 */ public function test_prepare_item() { + // A proper data provider cannot be used because this method's signature must match the parent method. + // Therefore, actual tests are performed in the test_prepare_item_with_data_provider method. + $this->assertTrue( true ); + } + + /** + * @dataProvider data_prepare_item_with_data_provider + * @covers WP_REST_Template_Autosaves_Controller::prepare_item_for_response + * @ticket 56922 + * + * @param string $parent_post_property_name A class property name that contains the parent post object. + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. + */ + public function test_prepare_item_with_data_provider( $parent_post_property_name, $rest_base, $template_id ) { wp_set_current_user( self::$admin_id ); + $parent_post = self::$$parent_post_property_name; $autosave_post_id = wp_create_post_autosave( array( 'post_content' => 'Autosave content.', - 'post_ID' => self::$template_post->ID, - 'post_type' => self::PARENT_POST_TYPE, + 'post_ID' => $parent_post->ID, + 'post_type' => $parent_post->post_type, ) ); $autosave_db_post = get_post( $autosave_post_id ); - $template_id = self::TEST_THEME . '//' . self::TEMPLATE_NAME; - $request = new WP_REST_Request( 'GET', '/wp/v2/templates/' . $template_id . '/autosaves/' . $autosave_db_post->ID ); - $controller = new WP_REST_Template_Autosaves_Controller( self::PARENT_POST_TYPE ); + $request = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves/' . $autosave_db_post->ID ); + $controller = new WP_REST_Template_Autosaves_Controller( $parent_post->post_type ); $response = $controller->prepare_item_for_response( $autosave_db_post, $request ); $this->assertInstanceOf( WP_REST_Response::class, @@ -275,11 +485,11 @@ public function test_prepare_item() { "Failed asserting that the autosave id is the same as $autosave_db_post->ID." ); $this->assertSame( - self::$template_post->ID, + $parent_post->ID, $autosave['parent'], sprintf( 'Failed asserting that the parent id of the autosave is the same as %s.', - self::$template_post->ID + $parent_post->ID ) ); @@ -300,17 +510,45 @@ public function test_prepare_item() { } /** - * @covers WP_REST_Template_Autosaves_Controller::get_item_schema + * Data provider for test_prepare_item_with_data_provider. + * + * @return array + */ + public function data_prepare_item_with_data_provider() { + return array( + 'templates' => array( 'template_post', 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), + 'template parts' => array( 'template_part_post', 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), + ); + } + + /** + * @coversNothing * @ticket 56922 */ public function test_get_item_schema() { - $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/autosaves' ); + // A proper data provider cannot be used because this method's signature must match the parent method. + // Therefore, actual tests are performed in the test_prepare_item_with_data_provider method. + $this->assertTrue( true ); + } + + /** + * @dataProvider data_get_item_schema_with_data_provider + * @covers WP_REST_Template_Autosaves_Controller::get_item_schema + * @ticket 56922 + * + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. + * @param int $properties_count Number of properties to check for in the schema. + * @param array $additional_properties Additional properties to check for in the schema. + */ + public function test_get_item_schema_with_data_provider( $rest_base, $template_id, $properties_count, $additional_properties = array() ) { + $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves' ); $response = rest_get_server()->dispatch( $request ); $data = $response->get_data(); $properties = $data['schema']['properties']; - $this->assertCount( 19, $properties ); + $this->assertCount( $properties_count, $properties ); $this->assertArrayHasKey( 'id', $properties, 'ID key should exist in properties.' ); $this->assertArrayHasKey( 'slug', $properties, 'Slug key should exist in properties.' ); $this->assertArrayHasKey( 'theme', $properties, 'Theme key should exist in properties.' ); @@ -324,22 +562,58 @@ public function test_get_item_schema() { $this->assertArrayHasKey( 'has_theme_file', $properties, 'has_theme_file key should exist in properties.' ); $this->assertArrayHasKey( 'author', $properties, 'author key should exist in properties.' ); $this->assertArrayHasKey( 'modified', $properties, 'modified key should exist in properties.' ); - $this->assertArrayHasKey( 'is_custom', $properties, 'is_custom key should exist in properties.' ); $this->assertArrayHasKey( 'parent', $properties, 'Parent key should exist in properties.' ); $this->assertArrayHasKey( 'author_text', $properties, 'author_text key should exist in properties.' ); $this->assertArrayHasKey( 'original_source', $properties, 'original_source key should exist in properties.' ); - $this->assertArrayHasKey( 'plugin', $properties, 'plugin key should exist in properties.' ); + foreach ( $additional_properties as $additional_property ) { + $this->assertArrayHasKey( $additional_property, $properties, $additional_property . ' key should exist in properties.' ); + } } /** - * @covers WP_REST_Template_Autosaves_Controller::create_item + * Data provider for test_get_item_schema_with_data_provider. + * + * @return array + */ + public function data_get_item_schema_with_data_provider() { + return array( + 'templates' => array( + 'templates', + self::TEST_THEME . '//' . self::TEMPLATE_NAME, + 19, + array( 'is_custom', 'plugin' ), + ), + 'template parts' => array( + 'template-parts', + self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME, + 18, + array( 'area' ), + ), + ); + } + + /** + * @coversNothing * @ticket 56922 */ public function test_create_item() { + // A proper data provider cannot be used because this method's signature must match the parent method. + // Therefore, actual tests are performed in the test_create_item_with_data_provider method. + $this->assertTrue( true ); + } + + /** + * @dataProvider data_create_item_with_data_provider + * @covers WP_REST_Template_Autosaves_Controller::create_item + * @ticket 56922 + * + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. + */ + public function test_create_item_with_data_provider( $rest_base, $template_id ) { wp_set_current_user( self::$admin_id ); - $template_id = self::TEST_THEME . '/' . self::TEMPLATE_NAME; - $request = new WP_REST_Request( 'POST', '/wp/v2/templates/' . $template_id . '/autosaves' ); + $request = new WP_REST_Request( 'POST', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves' ); $request->add_header( 'Content-Type', 'application/x-www-form-urlencoded' ); $request_parameters = array( @@ -353,41 +627,83 @@ public function test_create_item() { $request->set_body_params( $request_parameters ); $response = rest_get_server()->dispatch( $request ); - $this->assertNotWPError( $response, 'The response from this request should not return a WP_Error object' ); + $this->assertNotWPError( $response, 'The response from this request should not return a WP_Error object.' ); $response = rest_ensure_response( $response ); $data = $response->get_data(); - $this->assertArrayHasKey( 'content', $data, 'Response should contain a key called content' ); - $this->assertSame( $request_parameters['content'], $data['content']['raw'], 'Response data should match for field content' ); + $this->assertArrayHasKey( 'content', $data, 'Response should contain a key called content.' ); + $this->assertSame( $request_parameters['content'], $data['content']['raw'], 'Response data should match for field content.' ); - $this->assertArrayHasKey( 'title', $data, 'Response should contain a key called title' ); - $this->assertSame( $request_parameters['title'], $data['title']['raw'], 'Response data should match for field title' ); + $this->assertArrayHasKey( 'title', $data, 'Response should contain a key called title.' ); + $this->assertSame( $request_parameters['title'], $data['title']['raw'], 'Response data should match for field title.' ); } /** - * @covers WP_REST_Template_Autosaves_Controller::delete_item + * Data provider for test_create_item_with_data_provider. + * + * @return array + */ + public function data_create_item_with_data_provider() { + return array( + 'templates' => array( 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), + 'template part' => array( 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), + ); + } + + /** + * @dataProvider data_create_item_incorrect_permission + * @covers WP_REST_Template_Autosaves_Controller::create_item_permissions_check * @ticket 56922 + * + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. */ - public function test_create_item_incorrect_permission() { + public function test_create_item_incorrect_permission( $rest_base, $template_id ) { wp_set_current_user( self::$contributor_id ); - $template_id = self::TEST_THEME . '/' . self::TEMPLATE_NAME; - $request = new WP_REST_Request( 'POST', '/wp/v2/templates/' . $template_id . '/autosaves' ); - $response = rest_get_server()->dispatch( $request ); + $request = new WP_REST_Request( 'POST', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves' ); + $response = rest_get_server()->dispatch( $request ); $this->assertErrorResponse( 'rest_cannot_manage_templates', $response, WP_Http::FORBIDDEN ); } /** - * @covers WP_REST_Template_Autosaves_Controller::delete_item + * Data provider for test_create_item_incorrect_permission. + * + * @return array + */ + public function data_create_item_incorrect_permission() { + return array( + 'template' => array( 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), + 'template part' => array( 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), + ); + } + + /** + * @dataProvider data_create_item_no_permission + * @covers WP_REST_Template_Autosaves_Controller::create_item_permissions_check * @ticket 56922 + * + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. */ - public function test_create_item_no_permission() { + public function test_create_item_no_permission( $rest_base, $template_id ) { wp_set_current_user( 0 ); - $template_id = self::TEST_THEME . '/' . self::TEMPLATE_NAME; - $request = new WP_REST_Request( 'POST', '/wp/v2/templates/' . $template_id . '/autosaves' ); - $response = rest_get_server()->dispatch( $request ); + $request = new WP_REST_Request( 'POST', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves' ); + $response = rest_get_server()->dispatch( $request ); $this->assertErrorResponse( 'rest_cannot_manage_templates', $response, WP_Http::UNAUTHORIZED ); } + /** + * Data provider for test_create_item_no_permission. + * + * @return array + */ + public function data_create_item_no_permission() { + return array( + 'template' => array( 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), + 'template part' => array( 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), + ); + } + /** * @coversNothing * @ticket 56922 diff --git a/tests/phpunit/tests/rest-api/wpRestTemplateRevisionsController.php b/tests/phpunit/tests/rest-api/wpRestTemplateRevisionsController.php index 014a191f0a13f..2391a92478ede 100644 --- a/tests/phpunit/tests/rest-api/wpRestTemplateRevisionsController.php +++ b/tests/phpunit/tests/rest-api/wpRestTemplateRevisionsController.php @@ -27,7 +27,22 @@ class Tests_REST_wpRestTemplateRevisionsController extends WP_Test_REST_Controll /** * @var string */ - const PARENT_POST_TYPE = 'wp_template'; + const TEMPLATE_PART_NAME = 'my_template_part'; + + /** + * @var string + */ + const TEMPLATE_PART_NAME_2 = 'my_template_part_2'; + + /** + * @var string + */ + const TEMPLATE_POST_TYPE = 'wp_template'; + + /** + * @var string + */ + const TEMPLATE_PART_POST_TYPE = 'wp_template_part'; /** * Admin user ID. @@ -65,10 +80,33 @@ class Tests_REST_wpRestTemplateRevisionsController extends WP_Test_REST_Controll */ private static $template_post_2; + /** + * Template part post. + * + * @since 6.7.0 + * + * @var WP_Post + */ + private static $template_part_post; + + /** + * Template part post. + * + * @since 6.7.0 + * + * @var WP_Post + */ + private static $template_part_post_2; + /** * @var array */ - private static $revisions = array(); + private static $template_revisions = array(); + + /** + * @var array + */ + private static $template_part_revisions = array(); /** * Create fake data before our tests run. @@ -92,7 +130,7 @@ public static function wpSetUpBeforeClass( WP_UnitTest_Factory $factory ) { // Set up template post. self::$template_post = $factory->post->create_and_get( array( - 'post_type' => self::PARENT_POST_TYPE, + 'post_type' => self::TEMPLATE_POST_TYPE, 'post_name' => self::TEMPLATE_NAME, 'post_title' => 'My Template', 'post_content' => 'Content', @@ -106,54 +144,84 @@ public static function wpSetUpBeforeClass( WP_UnitTest_Factory $factory ) { ); wp_set_post_terms( self::$template_post->ID, self::TEST_THEME, 'wp_theme' ); - // Update post to create a new revisions. - self::$revisions[] = _wp_put_post_revision( - array( - 'ID' => self::$template_post->ID, - 'post_content' => 'Content revision #2', - ) - ); + // Update post to create new revisions. + foreach ( range( 2, 5 ) as $revision_index ) { + self::$template_revisions[] = _wp_put_post_revision( + array( + 'ID' => self::$template_post->ID, + 'post_content' => 'Content revision #' . $revision_index, + ) + ); + } - // Update post to create a new revisions. - self::$revisions[] = _wp_put_post_revision( + // Create a new template post to test the get_item method. + self::$template_post_2 = $factory->post->create_and_get( array( - 'ID' => self::$template_post->ID, - 'post_content' => 'Content revision #3', + 'post_type' => self::TEMPLATE_POST_TYPE, + 'post_name' => self::TEMPLATE_NAME_2, + 'post_title' => 'My Template 2', + 'post_content' => 'Content 2', + 'post_excerpt' => 'Description of my template 2', + 'tax_input' => array( + 'wp_theme' => array( + self::TEST_THEME, + ), + ), ) ); + wp_set_post_terms( self::$template_post_2->ID, self::TEST_THEME, 'wp_theme' ); - // Update post to create a new revisions. - self::$revisions[] = _wp_put_post_revision( + // Set up template part post. + self::$template_part_post = $factory->post->create_and_get( array( - 'ID' => self::$template_post->ID, - 'post_content' => 'Content revision #4', + 'post_type' => self::TEMPLATE_PART_POST_TYPE, + 'post_name' => self::TEMPLATE_PART_NAME, + 'post_title' => 'My template part', + 'post_content' => 'Content', + 'post_excerpt' => 'Description of my template part', + 'tax_input' => array( + 'wp_theme' => array( + self::TEST_THEME, + ), + 'wp_template_part_area' => array( + WP_TEMPLATE_PART_AREA_HEADER, + ), + ), ) ); + wp_set_post_terms( self::$template_part_post->ID, self::TEST_THEME, 'wp_theme' ); + wp_set_post_terms( self::$template_part_post->ID, WP_TEMPLATE_PART_AREA_HEADER, 'wp_template_part_area' ); - // Update post to create a new revisions. - self::$revisions[] = _wp_put_post_revision( - array( - 'ID' => self::$template_post->ID, - 'post_content' => 'Content revision #5', - ) - ); + // Update post to create new revisions. + foreach ( range( 2, 5 ) as $revision_index ) { + self::$template_part_revisions[] = _wp_put_post_revision( + array( + 'ID' => self::$template_part_post->ID, + 'post_content' => 'Content revision #' . $revision_index, + ) + ); + } - // Create a new template post to test the get_item method. - self::$template_post_2 = $factory->post->create_and_get( + // Set up template part post. + self::$template_part_post_2 = $factory->post->create_and_get( array( - 'post_type' => self::PARENT_POST_TYPE, - 'post_name' => self::TEMPLATE_NAME_2, - 'post_title' => 'My Template 2', + 'post_type' => self::TEMPLATE_PART_POST_TYPE, + 'post_name' => self::TEMPLATE_PART_NAME_2, + 'post_title' => 'My template part 2', 'post_content' => 'Content 2', - 'post_excerpt' => 'Description of my template 2', + 'post_excerpt' => 'Description of my template part 2', 'tax_input' => array( - 'wp_theme' => array( + 'wp_theme' => array( self::TEST_THEME, ), + 'wp_template_part_area' => array( + WP_TEMPLATE_PART_AREA_HEADER, + ), ), ) ); - wp_set_post_terms( self::$template_post_2->ID, self::TEST_THEME, 'wp_theme' ); + wp_set_post_terms( self::$template_part_post_2->ID, self::TEST_THEME, 'wp_theme' ); + wp_set_post_terms( self::$template_part_post_2->ID, WP_TEMPLATE_PART_AREA_HEADER, 'wp_template_part_area' ); } /** @@ -161,8 +229,12 @@ public static function wpSetUpBeforeClass( WP_UnitTest_Factory $factory ) { */ public static function wpTearDownAfterClass() { // Also deletes revisions. - foreach ( self::$revisions as $revision ) { - wp_delete_post( $revision, true ); + foreach ( self::$template_revisions as $template_revision ) { + wp_delete_post( $template_revision, true ); + } + + foreach ( self::$template_part_revisions as $template_part_revision ) { + wp_delete_post( $template_part_revision, true ); } } @@ -195,12 +267,26 @@ public function test_register_routes() { } /** - * @covers WP_REST_Template_Revisions_Controller::get_context_param + * @coversNothing * @ticket 56922 */ public function test_context_param() { + // A proper data provider cannot be used because this method's signature must match the parent method. + // Therefore, actual tests are performed in the test_context_param_with_data_provider method. + $this->assertTrue( true ); + } + + /** + * @dataProvider data_context_param_with_data_provider + * @covers WP_REST_Template_Revisions_Controller::get_context_param + * @ticket 56922 + * + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. + */ + public function test_context_param_with_data_provider( $rest_base, $template_id ) { // Collection. - $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/revisions' ); + $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/' . $rest_base . '/' . $template_id . '/revisions' ); $response = rest_get_server()->dispatch( $request ); $data = $response->get_data(); $this->assertSame( @@ -215,7 +301,7 @@ public function test_context_param() { ); // Single. - $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/revisions/1' ); + $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/' . $rest_base . '/' . $template_id . '/revisions/1' ); $response = rest_get_server()->dispatch( $request ); $data = $response->get_data(); $this->assertCount( @@ -236,17 +322,47 @@ public function test_context_param() { } /** - * @covers WP_REST_Template_Revisions_Controller::get_items + * Data provider for test_context_param. + * + * @return array + */ + public function data_context_param_with_data_provider() { + return array( + 'templates' => array( 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), + 'template parts' => array( 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), + ); + } + + /** + * @coversNothing * @ticket 56922 */ public function test_get_items() { + // A proper data provider cannot be used because this method's signature must match the parent method. + // Therefore, actual tests are performed in the test_get_items_with_data_provider method. + $this->assertTrue( true ); + } + + /** + * @dataProvider data_get_items_with_data_provider + * @covers WP_REST_Template_Revisions_Controller::get_items + * @ticket 56922 + * + * @param string $parent_post_property_name A class property name that contains the parent post object. + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. + */ + public function test_get_items_with_data_provider( $parent_post_property_name, $rest_base, $template_id ) { wp_set_current_user( self::$admin_id ); + $parent_post = self::$$parent_post_property_name; + $request = new WP_REST_Request( 'GET', - '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/revisions' + '/wp/v2/' . $rest_base . '/' . $template_id . '/revisions' ); $response = rest_get_server()->dispatch( $request ); $revisions = $response->get_data(); + $this->assertSame( WP_Http::OK, $response->get_status(), 'Response is expected to have a status code of 200.' ); $this->assertCount( 4, @@ -255,7 +371,7 @@ public function test_get_items() { ); $this->assertSame( - self::$template_post->ID, + $parent_post->ID, $revisions[0]['parent'], 'Failed asserting that the parent ID of the revision matches the template post ID.' ); @@ -266,7 +382,7 @@ public function test_get_items() { ); $this->assertSame( - self::$template_post->ID, + $parent_post->ID, $revisions[1]['parent'], 'Failed asserting that the parent ID of the revision matches the template post ID.' ); @@ -277,7 +393,7 @@ public function test_get_items() { ); $this->assertSame( - self::$template_post->ID, + $parent_post->ID, $revisions[2]['parent'], 'Failed asserting that the parent ID of the revision matches the template post ID.' ); @@ -288,7 +404,7 @@ public function test_get_items() { ); $this->assertSame( - self::$template_post->ID, + $parent_post->ID, $revisions[3]['parent'], 'Failed asserting that the parent ID of the revision matches the template post ID.' ); @@ -299,40 +415,168 @@ public function test_get_items() { ); } + /** + * Data provider for test_get_items_with_data_provider. + * + * @return array + */ + public function data_get_items_with_data_provider() { + return array( + 'templates' => array( 'template_post', 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), + 'template parts' => array( 'template_part_post', 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), + ); + } /** + * @dataProvider data_get_items_endpoint_should_return_unauthorized_https_status_code_for_unauthorized_request * @covers WP_REST_Template_Revisions_Controller::get_items_permissions_check * @ticket 56922 + * + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. */ - public function test_get_items_endpoint_should_return_unauthorized_https_status_code_for_unauthorized_request() { + public function test_get_items_endpoint_should_return_unauthorized_https_status_code_for_unauthorized_request( $rest_base, $template_id ) { wp_set_current_user( 0 ); - $request = new WP_REST_Request( 'GET', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/revisions' ); + $request = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/' . $template_id . '/revisions' ); $response = rest_get_server()->dispatch( $request ); $this->assertErrorResponse( 'rest_cannot_read', $response, WP_Http::UNAUTHORIZED ); } /** + * Data provider for test_get_items_endpoint_should_return_unauthorized_https_status_code_for_unauthorized_request. + * + * @return array + */ + public function data_get_items_endpoint_should_return_unauthorized_https_status_code_for_unauthorized_request() { + return array( + 'templates' => array( 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), + 'template parts' => array( 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), + ); + } + + /** + * @dataProvider data_get_items_endpoint_should_return_forbidden_https_status_code_for_users_with_insufficient_permissions * @covers WP_REST_Template_Revisions_Controller::get_items_permissions_check * @ticket 56922 + * + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. */ - public function test_get_items_endpoint_should_return_forbidden_https_status_code_for_users_with_insufficient_permissions() { + public function test_get_items_endpoint_should_return_forbidden_https_status_code_for_users_with_insufficient_permissions( $rest_base, string $template_id ) { wp_set_current_user( self::$contributor_id ); - $request = new WP_REST_Request( 'GET', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/revisions' ); + $request = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/' . $template_id . '/revisions' ); $response = rest_get_server()->dispatch( $request ); $this->assertErrorResponse( 'rest_cannot_read', $response, WP_Http::FORBIDDEN ); } /** - * @covers WP_REST_Template_Revisions_Controller::get_item + * Data provider for test_get_items_endpoint_should_return_unauthorized_https_status_code_for_unauthorized_request. + * + * @return array + */ + public function data_get_items_endpoint_should_return_forbidden_https_status_code_for_users_with_insufficient_permissions() { + return array( + 'templates' => array( 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), + 'template parts' => array( 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), + ); + } + + /** + * @dataProvider data_get_items_for_templates_based_on_theme_files_should_return_bad_response_status + * @ticket 61970 + * + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. + */ + public function test_get_items_for_templates_based_on_theme_files_should_return_bad_response_status( $rest_base, $template_id ) { + wp_set_current_user( self::$admin_id ); + switch_theme( 'block-theme' ); + + $request = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/' . $template_id . '/revisions' ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertErrorResponse( + 'rest_invalid_template', + $response, + WP_Http::BAD_REQUEST, + sprintf( 'Response is expected to have a status code of %d.', WP_Http::BAD_REQUEST ) + ); + } + + /** + * Data provider for test_get_items_for_templates_based_on_theme_files_should_return_bad_response_status. + * + * @return array + */ + public function data_get_items_for_templates_based_on_theme_files_should_return_bad_response_status() { + return array( + 'templates' => array( 'templates', self::TEST_THEME . '//page-home' ), + 'template parts' => array( 'template-parts', self::TEST_THEME . '//small-header' ), + ); + } + + /** + * @dataProvider data_get_item_for_templates_based_on_theme_files_should_return_bad_response_status + * @ticket 56922 + * + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. + */ + public function test_get_item_for_templates_based_on_theme_files_should_return_bad_response_status( $rest_base, $template_id ) { + wp_set_current_user( self::$admin_id ); + switch_theme( 'block-theme' ); + + $request = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/' . $template_id . '/revisions/1' ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertErrorResponse( + 'rest_invalid_template', + $response, + WP_Http::BAD_REQUEST, + sprintf( 'Response is expected to have a status code of %d.', WP_Http::BAD_REQUEST ) + ); + } + + /** + * Data provider for test_get_item_for_templates_based_on_theme_files_should_return_bad_response_status. + * + * @return array + */ + public function data_get_item_for_templates_based_on_theme_files_should_return_bad_response_status() { + return array( + 'templates' => array( 'templates', self::TEST_THEME . '//page-home' ), + 'template parts' => array( 'template-parts', self::TEST_THEME . '//small-header' ), + ); + } + + /** + * @coversNothing * @ticket 56922 */ public function test_get_item() { + // A proper data provider cannot be used because this method's signature must match the parent method. + // Therefore, actual tests are performed in the test_get_item_with_data_provider method. + $this->assertTrue( true ); + } + + /** + * @dataProvider data_get_item_with_data_provider + * @covers WP_REST_Template_Revisions_Controller::get_item + * @ticket 56922 + * + * @param string $parent_post_property_name A class property name that contains the parent post object. + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. + */ + public function test_get_item_with_data_provider( $parent_post_property_name, $rest_base, $template_id ) { wp_set_current_user( self::$admin_id ); - $revisions = wp_get_post_revisions( self::$template_post, array( 'fields' => 'ids' ) ); + $parent_post = self::$$parent_post_property_name; + + $revisions = wp_get_post_revisions( $parent_post, array( 'fields' => 'ids' ) ); $revision_id = array_shift( $revisions ); - $request = new WP_REST_Request( 'GET', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/revisions/' . $revision_id ); + $request = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/' . $template_id . '/revisions/' . $revision_id ); $response = rest_get_server()->dispatch( $request ); $revision = $response->get_data(); @@ -343,7 +587,7 @@ public function test_get_item() { "Failed asserting that the revision id is the same as $revision_id" ); $this->assertSame( - self::$template_post->ID, + $parent_post->ID, $revision['parent'], sprintf( 'Failed asserting that the parent id of the revision is the same as %s.', @@ -353,47 +597,125 @@ public function test_get_item() { } /** + * Data provider for test_get_item_with_data_provider. + * + * @return array + */ + public function data_get_item_with_data_provider() { + return array( + 'templates' => array( 'template_post', 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), + 'template parts' => array( 'template_part_post', 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), + ); + } + + /** + * @dataProvider data_get_item_not_found * @covers WP_REST_Template_Revisions_Controller::get_item * @ticket 56922 + * + * @param string $parent_post_property_name A class property name that contains the parent post object. + * @param string $rest_base Base part of the REST API endpoint to test. */ - public function test_get_item_not_found() { + public function test_get_item_not_found( $parent_post_property_name, $rest_base ) { wp_set_current_user( self::$admin_id ); - $revisions = wp_get_post_revisions( self::$template_post, array( 'fields' => 'ids' ) ); + $parent_post = self::$$parent_post_property_name; + + $revisions = wp_get_post_revisions( $parent_post, array( 'fields' => 'ids' ) ); $revision_id = array_shift( $revisions ); - $request = new WP_REST_Request( 'GET', '/wp/v2/templates/invalid//parent/revisions/' . $revision_id ); + $request = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/invalid//parent/revisions/' . $revision_id ); $response = rest_get_server()->dispatch( $request ); $this->assertErrorResponse( 'rest_post_invalid_parent', $response, WP_Http::NOT_FOUND ); } /** + * Data provider for test_get_item_not_found. + * + * @return array + */ + public function data_get_item_not_found() { + return array( + 'templates' => array( 'template_post', 'templates' ), + 'template parts' => array( 'template_part_post', 'template-parts' ), + ); + } + + /** + * @dataProvider data_get_item_invalid_parent_id + * @covers WP_REST_Template_Revisions_Controller::get_item * @ticket 59875 + * + * @param string $parent_post_property_name A class property name that contains the parent post object. + * @param string $actual_parent_post_property_name A class property name that contains the parent post object. + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. */ - public function test_get_item_invalid_parent_id() { + public function test_get_item_invalid_parent_id( $parent_post_property_name, $actual_parent_post_property_name, $rest_base, $template_id ) { wp_set_current_user( self::$admin_id ); - $revisions = wp_get_post_revisions( self::$template_post, array( 'fields' => 'ids' ) ); - $revision_id = array_shift( $revisions ); - $request = new WP_REST_Request( 'GET', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME_2 . '/revisions/' . $revision_id ); + $parent_post = self::$$parent_post_property_name; + $actual_parent_post = self::$$actual_parent_post_property_name; + $revisions = wp_get_post_revisions( $parent_post, array( 'fields' => 'ids' ) ); + $revision_id = array_shift( $revisions ); + + $request = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/' . $template_id . '/revisions/' . $revision_id ); $response = rest_get_server()->dispatch( $request ); $this->assertErrorResponse( 'rest_revision_parent_id_mismatch', $response, 404 ); - $expected_message = 'The revision does not belong to the specified parent with id of "' . self::$template_post_2->ID . '"'; + $expected_message = 'The revision does not belong to the specified parent with id of "' . $actual_parent_post->ID . '"'; $this->assertSame( $expected_message, $response->as_error()->get_error_messages()[0], 'The message must contain the correct parent ID.' ); } /** - * @covers WP_REST_Template_Revisions_Controller::prepare_item_for_response + * Data provider for test_get_item_invalid_parent_id. + * + * @return array + */ + public function data_get_item_invalid_parent_id() { + return array( + 'templates' => array( + 'template_post', + 'template_post_2', + 'templates', + self::TEST_THEME . '//' . self::TEMPLATE_NAME_2, + ), + 'template parts' => array( + 'template_part_post', + 'template_part_post_2', + 'template-parts', + self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME_2, + ), + ); + } + + /** + * @coversNothing * @ticket 56922 */ public function test_prepare_item() { - $revisions = wp_get_post_revisions( self::$template_post, array( 'fields' => 'ids' ) ); + // A proper data provider cannot be used because this method's signature must match the parent method. + // Therefore, actual tests are performed in the test_prepare_item_with_data_provider method. + $this->assertTrue( true ); + } + + /** + * @dataProvider data_prepare_item_with_data_provider + * @covers WP_REST_Template_Revisions_Controller::prepare_item_for_response + * @ticket 56922 + * + * @param string $parent_post_property_name A class property name that contains the parent post object. + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. + */ + public function test_prepare_item_with_data_provider( $parent_post_property_name, $rest_base, $template_id ) { + $parent_post = self::$$parent_post_property_name; + $revisions = wp_get_post_revisions( $parent_post, array( 'fields' => 'ids' ) ); $revision_id = array_shift( $revisions ); $post = get_post( $revision_id ); - $request = new WP_REST_Request( 'GET', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/revisions/' . $revision_id ); - $controller = new WP_REST_Template_Revisions_Controller( self::PARENT_POST_TYPE ); + $request = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/' . $template_id . '/revisions/' . $revision_id ); + $controller = new WP_REST_Template_Revisions_Controller( $parent_post->post_type ); $response = $controller->prepare_item_for_response( $post, $request ); $this->assertInstanceOf( WP_REST_Response::class, @@ -409,11 +731,11 @@ public function test_prepare_item() { "Failed asserting that the revision id is the same as $revision_id." ); $this->assertSame( - self::$template_post->ID, + $parent_post->ID, $revision['parent'], sprintf( 'Failed asserting that the parent id of the revision is the same as %s.', - self::$template_post->ID + $parent_post->ID ) ); @@ -421,35 +743,63 @@ public function test_prepare_item() { $this->assertIsArray( $links, 'Failed asserting that the links are an array.' ); $this->assertStringEndsWith( - self::TEST_THEME . '//' . self::TEMPLATE_NAME . '/revisions/' . $revision_id, + $template_id . '/revisions/' . $revision_id, $links['self'][0]['href'], sprintf( 'Failed asserting that the self link ends with %s.', - self::TEST_THEME . '//' . self::TEMPLATE_NAME . '/revisions/' . $revision_id + $template_id . '/revisions/' . $revision_id ) ); $this->assertStringEndsWith( - self::TEST_THEME . '//' . self::TEMPLATE_NAME, + $template_id, $links['parent'][0]['href'], sprintf( 'Failed asserting that the parent link ends with %s.', - self::TEST_THEME . '//' . self::TEMPLATE_NAME + $template_id ) ); } /** - * @covers WP_REST_Template_Revisions_Controller::get_item_schema + * Data provider for test_prepare_item_with_data_provider. + * + * @return array + */ + public function data_prepare_item_with_data_provider() { + return array( + 'templates' => array( 'template_post', 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), + 'template parts' => array( 'template_part_post', 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), + ); + } + + /** + * @coversNothing * @ticket 56922 */ public function test_get_item_schema() { - $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/revisions' ); + // A proper data provider cannot be used because this method's signature must match the parent method. + // Therefore, actual tests are performed in the test_prepare_item_with_data_provider method. + $this->assertTrue( true ); + } + + /** + * @dataProvider data_get_item_schema_with_data_provider + * @covers WP_REST_Template_Revisions_Controller::get_item_schema + * @ticket 56922 + * + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. + * @param int $properties_count Number of properties to check for in the schema. + * @param array $additional_properties Additional properties to check for in the schema. + */ + public function test_get_item_schema_with_data_provider( $rest_base, $template_id, $properties_count, $additional_properties = array() ) { + $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/' . $rest_base . '/' . $template_id . '/revisions' ); $response = rest_get_server()->dispatch( $request ); $data = $response->get_data(); $properties = $data['schema']['properties']; - $this->assertCount( 19, $properties ); + $this->assertCount( $properties_count, $properties ); $this->assertArrayHasKey( 'id', $properties, 'ID key should exist in properties.' ); $this->assertArrayHasKey( 'slug', $properties, 'Slug key should exist in properties.' ); $this->assertArrayHasKey( 'theme', $properties, 'Theme key should exist in properties.' ); @@ -463,11 +813,35 @@ public function test_get_item_schema() { $this->assertArrayHasKey( 'has_theme_file', $properties, 'has_theme_file key should exist in properties.' ); $this->assertArrayHasKey( 'author', $properties, 'author key should exist in properties.' ); $this->assertArrayHasKey( 'modified', $properties, 'modified key should exist in properties.' ); - $this->assertArrayHasKey( 'is_custom', $properties, 'is_custom key should exist in properties.' ); $this->assertArrayHasKey( 'parent', $properties, 'Parent key should exist in properties.' ); $this->assertArrayHasKey( 'author_text', $properties, 'author_text key should exist in properties.' ); $this->assertArrayHasKey( 'original_source', $properties, 'original_source key should exist in properties.' ); - $this->assertArrayHasKey( 'plugin', $properties, 'plugin key should exist in properties.' ); + + foreach ( $additional_properties as $additional_property ) { + $this->assertArrayHasKey( $additional_property, $properties, $additional_property . ' key should exist in properties.' ); + } + } + + /** + * Data provider for data_get_item_schema_with_data_provider. + * + * @return array + */ + public function data_get_item_schema_with_data_provider() { + return array( + 'templates' => array( + 'templates', + self::TEST_THEME . '//' . self::TEMPLATE_NAME, + 19, + array( 'is_custom', 'plugin' ), + ), + 'template parts' => array( + 'template-parts', + self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME, + 18, + array( 'area' ), + ), + ); } /** @@ -497,16 +871,35 @@ public function test_update_item() { } /** - * @covers WP_REST_Templates_Controller::delete_item + * @coversNothing * @ticket 56922 */ public function test_delete_item() { + // A proper data provider cannot be used because this method's signature must match the parent method. + // Therefore, actual tests are performed in the test_delete_item_with_data_provider method. + $this->assertTrue( true ); + } + + /** + * @dataProvider data_delete_item_with_data_provider + * @covers WP_REST_Templates_Controller::delete_item + * @ticket 56922 + * + * @param string $parent_post_property_name A class property name that contains the parent post object. + * @param string $revisions_property_name A class property name that contains the revisions array. + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. + */ + public function test_delete_item_with_data_provider( $parent_post_property_name, $revisions_property_name, $rest_base, $template_id ) { wp_set_current_user( self::$admin_id ); - $revision_id = _wp_put_post_revision( self::$template_post ); - self::$revisions[] = $revision_id; + $parent_post = self::$$parent_post_property_name; + $revisions = self::$$revisions_property_name; + + $revision_id = _wp_put_post_revision( $parent_post ); + $revisions[] = $revision_id; - $request = new WP_REST_Request( 'DELETE', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/revisions/' . $revision_id ); + $request = new WP_REST_Request( 'DELETE', '/wp/v2/' . $rest_base . '/' . $template_id . '/revisions/' . $revision_id ); $request->set_param( 'force', true ); $response = rest_get_server()->dispatch( $request ); @@ -515,48 +908,161 @@ public function test_delete_item() { } /** + * Data provider for test_delete_item_with_data_provider. + * + * @return array + */ + public function data_delete_item_with_data_provider() { + return array( + 'templates' => array( + 'template_post', + 'template_revisions', + 'templates', + self::TEST_THEME . '//' . self::TEMPLATE_NAME, + ), + 'template parts' => array( + 'template_part_post', + 'template_part_revisions', + 'template-parts', + self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME, + ), + ); + } + + /** + * @dataProvider data_delete_item_incorrect_permission * @covers WP_REST_Templates_Controller::delete_item * @ticket 56922 + * + * @param string $parent_post_property_name A class property name that contains the parent post object. + * @param string $revisions_property_name A class property name that contains the revisions array. + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. */ - public function test_delete_item_incorrect_permission() { + public function test_delete_item_incorrect_permission( $parent_post_property_name, $revisions_property_name, $rest_base, $template_id ) { wp_set_current_user( self::$contributor_id ); - $revision_id = _wp_put_post_revision( self::$template_post ); - self::$revisions[] = $revision_id; + $parent_post = self::$$parent_post_property_name; + $revisions = self::$$revisions_property_name; + + $revision_id = _wp_put_post_revision( $parent_post ); + $revisions[] = $revision_id; - $request = new WP_REST_Request( 'DELETE', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/revisions/' . $revision_id ); + $request = new WP_REST_Request( 'DELETE', '/wp/v2/' . $rest_base . '/' . $template_id . '/revisions/' . $revision_id ); $request->set_param( 'force', true ); $response = rest_get_server()->dispatch( $request ); $this->assertErrorResponse( 'rest_cannot_delete', $response, WP_Http::FORBIDDEN ); } /** + * Data provider for test_delete_item_with_data_provider. + * + * @return array + */ + public function data_delete_item_incorrect_permission() { + return array( + 'templates' => array( + 'template_post', + 'template_revisions', + 'templates', + self::TEST_THEME . '//' . self::TEMPLATE_NAME, + ), + 'template parts' => array( + 'template_part_post', + 'template_part_revisions', + 'template-parts', + self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME, + ), + ); + } + + /** + * @dataProvider data_delete_item_no_permission * @covers WP_REST_Templates_Controller::delete_item * @ticket 56922 + * + * @param string $parent_post_property_name A class property name that contains the parent post object. + * @param string $revisions_property_name A class property name that contains the revisions array. + * @param string $rest_base Base part of the REST API endpoint to test. + * @param string $template_id Template ID to use in the test. */ - public function test_delete_item_no_permission() { + public function test_delete_item_no_permission( $parent_post_property_name, $revisions_property_name, $rest_base, $template_id ) { wp_set_current_user( 0 ); - $revision_id = _wp_put_post_revision( self::$template_post ); - self::$revisions[] = $revision_id; - $request = new WP_REST_Request( 'DELETE', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/revisions/' . $revision_id ); + $parent_post = self::$$parent_post_property_name; + $revisions = self::$$revisions_property_name; + + $revision_id = _wp_put_post_revision( $parent_post ); + $revisions[] = $revision_id; + + $request = new WP_REST_Request( 'DELETE', '/wp/v2/' . $rest_base . '/' . $template_id . '/revisions/' . $revision_id ); $request->set_param( 'force', true ); $response = rest_get_server()->dispatch( $request ); $this->assertErrorResponse( 'rest_cannot_delete', $response, WP_Http::UNAUTHORIZED ); } /** + * Data provider for test_delete_item_no_permission. + * + * @return array + */ + public function data_delete_item_no_permission() { + return array( + 'templates' => array( + 'template_post', + 'template_revisions', + 'templates', + self::TEST_THEME . '//' . self::TEMPLATE_NAME, + ), + 'template parts' => array( + 'template_part_post', + 'template_part_revisions', + 'template-parts', + self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME, + ), + ); + } + + /** + * @dataProvider data_delete_item_not_found * @covers WP_REST_Template_Revisions_Controller::get_item * @ticket 56922 + * + * @param string $parent_post_property_name A class property name that contains the parent post object. + * @param string $revisions_property_name A class property name that contains the revisions array. + * @param string $rest_base Base part of the REST API endpoint to test. */ - public function test_delete_item_not_found() { + public function test_delete_item_not_found( $parent_post_property_name, $revisions_property_name, $rest_base ) { wp_set_current_user( self::$admin_id ); - $revision_id = _wp_put_post_revision( self::$template_post ); - self::$revisions[] = $revision_id; + $parent_post = self::$$parent_post_property_name; + $revisions = self::$$revisions_property_name; - $request = new WP_REST_Request( 'DELETE', '/wp/v2/templates/invalid//parent/revisions/' . $revision_id ); + $revision_id = _wp_put_post_revision( $parent_post ); + $revisions[] = $revision_id; + + $request = new WP_REST_Request( 'DELETE', '/wp/v2/' . $rest_base . '/invalid//parent/revisions/' . $revision_id ); $request->set_param( 'force', true ); $response = rest_get_server()->dispatch( $request ); $this->assertErrorResponse( 'rest_post_invalid_parent', $response, WP_Http::NOT_FOUND ); } + + /** + * Data provider for test_delete_item_not_found. + * + * @return array + */ + public function data_delete_item_not_found() { + return array( + 'templates' => array( + 'template_post', + 'template_revisions', + 'templates', + ), + 'template parts' => array( + 'template_part_post', + 'template_part_revisions', + 'template-parts', + ), + ); + } } From 9342553d5e403c651775be20d959d2779c4c3a2a Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Wed, 15 Jan 2025 12:50:48 +0000 Subject: [PATCH 28/31] Coding Standards: Use strict comparison in `paginate_links()`. Follow-up to [4275], [28785]. Props aristath, poena, afercia, SergeyBiryukov. See #62279. git-svn-id: https://develop.svn.wordpress.org/trunk@59606 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/general-template.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/wp-includes/general-template.php b/src/wp-includes/general-template.php index e96f0f7c37429..11dffac4b3270 100644 --- a/src/wp-includes/general-template.php +++ b/src/wp-includes/general-template.php @@ -4579,7 +4579,7 @@ function paginate_links( $args = '' ) { $dots = false; if ( $args['prev_next'] && $current && 1 < $current ) : - $link = str_replace( '%_%', 2 == $current ? '' : $args['format'], $args['base'] ); + $link = str_replace( '%_%', 2 === $current ? '' : $args['format'], $args['base'] ); $link = str_replace( '%#%', $current - 1, $link ); if ( $add_args ) { $link = add_query_arg( $add_args, $link ); @@ -4601,7 +4601,7 @@ function paginate_links( $args = '' ) { endif; for ( $n = 1; $n <= $total; $n++ ) : - if ( $n == $current ) : + if ( $n === $current ) : $page_links[] = sprintf( '%s', esc_attr( $args['aria_current'] ), @@ -4611,7 +4611,7 @@ function paginate_links( $args = '' ) { $dots = true; else : if ( $args['show_all'] || ( $n <= $end_size || ( $current && $n >= $current - $mid_size && $n <= $current + $mid_size ) || $n > $total - $end_size ) ) : - $link = str_replace( '%_%', 1 == $n ? '' : $args['format'], $args['base'] ); + $link = str_replace( '%_%', 1 === $n ? '' : $args['format'], $args['base'] ); $link = str_replace( '%#%', $n, $link ); if ( $add_args ) { $link = add_query_arg( $add_args, $link ); From aaf760cbdc5d1175b0a9adc9a2c9ca7beeeea068 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Wed, 15 Jan 2025 12:53:30 +0000 Subject: [PATCH 29/31] Undo accidental `svn:mergeinfo` property change in [59605]. See #61970. git-svn-id: https://develop.svn.wordpress.org/trunk@59607 602fd350-edb4-49c9-b593-d223f7449a82 From d2630e00cd6f2300bcd9f161051c255b1c60b3bb Mon Sep 17 00:00:00 2001 From: Felix Arntz Date: Wed, 15 Jan 2025 18:34:35 +0000 Subject: [PATCH 30/31] REST API: Fix PHP warning about undefined `paged` argument in various REST API endpoints. This bug could occur in `WP_REST_Posts_Controller`, `WP_REST_Global_Styles_Revisions_Controller`, `WP_REST_Revisions_Controller`, and any of their child classes. This changeset fixes it throughout. Props apermo, pbearne, hemant-ahir, flixos90. Fixes #62292. git-svn-id: https://develop.svn.wordpress.org/trunk@59630 602fd350-edb4-49c9-b593-d223f7449a82 --- ...est-global-styles-revisions-controller.php | 2 +- .../class-wp-rest-posts-controller.php | 2 +- .../class-wp-rest-revisions-controller.php | 2 +- ...est-global-styles-revisions-controller.php | 41 +++++++++++++++++++ .../tests/rest-api/rest-posts-controller.php | 39 ++++++++++++++++++ .../rest-api/rest-revisions-controller.php | 40 ++++++++++++++++++ .../wpRestTemplateRevisionsController.php | 40 ++++++++++++++++++ 7 files changed, 163 insertions(+), 3 deletions(-) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php index 54285fa560bee..4108f9711c8a7 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php @@ -189,7 +189,7 @@ public function get_items( $request ) { $revisions_query = new WP_Query(); $revisions = $revisions_query->query( $query_args ); $offset = isset( $query_args['offset'] ) ? (int) $query_args['offset'] : 0; - $page = (int) $query_args['paged']; + $page = isset( $query_args['paged'] ) ? (int) $query_args['paged'] : 0; $total_revisions = $revisions_query->found_posts; if ( $total_revisions < 1 ) { diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php index 95851199c6e4d..6f872be3dfd78 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php @@ -457,7 +457,7 @@ static function ( $format ) { remove_filter( 'post_password_required', array( $this, 'check_password_required' ) ); } - $page = (int) $query_args['paged']; + $page = isset( $query_args['paged'] ) ? (int) $query_args['paged'] : 0; $total_posts = $posts_query->found_posts; if ( $total_posts < 1 && $page > 1 ) { diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php index fb5fa29231a4f..1dbc611631b9b 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php @@ -294,7 +294,7 @@ public function get_items( $request ) { $revisions_query = new WP_Query(); $revisions = $revisions_query->query( $query_args ); $offset = isset( $query_args['offset'] ) ? (int) $query_args['offset'] : 0; - $page = (int) $query_args['paged']; + $page = isset( $query_args['paged'] ) ? (int) $query_args['paged'] : 0; $total_revisions = $revisions_query->found_posts; if ( $total_revisions < 1 ) { diff --git a/tests/phpunit/tests/rest-api/rest-global-styles-revisions-controller.php b/tests/phpunit/tests/rest-api/rest-global-styles-revisions-controller.php index b01ada9be28ff..5fd97a7a71abf 100644 --- a/tests/phpunit/tests/rest-api/rest-global-styles-revisions-controller.php +++ b/tests/phpunit/tests/rest-api/rest-global-styles-revisions-controller.php @@ -826,6 +826,47 @@ public function test_get_items_out_of_bounds_page_should_not_error_if_offset() { $this->assertCount( $expected_count, $response->get_data() ); } + + /** + * Tests for the pagination. + * + * @ticket 62292 + * + * @covers WP_REST_Global_Styles_Controller::get_items + */ + public function test_get_global_styles_revisions_pagination() { + wp_set_current_user( self::$admin_id ); + + // Test offset + $request = new WP_REST_Request( 'GET', '/wp/v2/global-styles/' . self::$global_styles_id . '/revisions' ); + $request->set_param( 'offset', 1 ); + $request->set_param( 'per_page', 1 ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 200, $response->get_status() ); + $data = $response->get_data(); + $this->assertCount( 1, $data ); + $this->assertEquals( 3, $response->get_headers()['X-WP-Total'] ); + $this->assertEquals( 3, $response->get_headers()['X-WP-TotalPages'] ); + + // Test paged + $request = new WP_REST_Request( 'GET', '/wp/v2/global-styles/' . self::$global_styles_id . '/revisions' ); + $request->set_param( 'page', 2 ); + $request->set_param( 'per_page', 2 ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 200, $response->get_status() ); + $data = $response->get_data(); + $this->assertCount( 1, $data ); + $this->assertEquals( 3, $response->get_headers()['X-WP-Total'] ); + $this->assertEquals( 2, $response->get_headers()['X-WP-TotalPages'] ); + + // Test out of bounds + $request = new WP_REST_Request( 'GET', '/wp/v2/global-styles/' . self::$global_styles_id . '/revisions' ); + $request->set_param( 'page', 4 ); + $request->set_param( 'per_page', 6 ); + $response = rest_get_server()->dispatch( $request ); + $this->assertErrorResponse( 'rest_revision_invalid_page_number', $response, 400 ); + } + /** * @doesNotPerformAssertions */ diff --git a/tests/phpunit/tests/rest-api/rest-posts-controller.php b/tests/phpunit/tests/rest-api/rest-posts-controller.php index e2fd7139f3f54..a1b8de0474359 100644 --- a/tests/phpunit/tests/rest-api/rest-posts-controller.php +++ b/tests/phpunit/tests/rest-api/rest-posts-controller.php @@ -5676,6 +5676,45 @@ public function test_multiple_post_format_support() { $this->assertCount( 2, $response->get_data(), 'Two posts are expected to be returned' ); } + /** + * Tests for the pagination. + * + * @ticket 62292 + * + * @covers WP_REST_Posts_Controller::get_items + */ + public function test_get_posts_with_pagination() { + + // Test offset + $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); + $request->set_param( 'offset', 1 ); + $request->set_param( 'per_page', 1 ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 200, $response->get_status() ); + $data = $response->get_data(); + $this->assertCount( 1, $data ); + $this->assertEquals( 30, $response->get_headers()['X-WP-Total'] ); + $this->assertEquals( 30, $response->get_headers()['X-WP-TotalPages'] ); + + // Test paged + $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); + $request->set_param( 'page', 2 ); + $request->set_param( 'per_page', 2 ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 200, $response->get_status() ); + $data = $response->get_data(); + $this->assertCount( 2, $data ); + $this->assertEquals( 30, $response->get_headers()['X-WP-Total'] ); + $this->assertEquals( 15, $response->get_headers()['X-WP-TotalPages'] ); + + // Test out of bounds + $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); + $request->set_param( 'page', 4 ); + $request->set_param( 'per_page', 10 ); + $response = rest_get_server()->dispatch( $request ); + $this->assertErrorResponse( 'rest_post_invalid_page_number', $response, 400 ); + } + /** * Internal function used to disable an insert query which * will trigger a wpdb error for testing purposes. diff --git a/tests/phpunit/tests/rest-api/rest-revisions-controller.php b/tests/phpunit/tests/rest-api/rest-revisions-controller.php index d2650d31fa852..cdb886c4e47e6 100644 --- a/tests/phpunit/tests/rest-api/rest-revisions-controller.php +++ b/tests/phpunit/tests/rest-api/rest-revisions-controller.php @@ -864,4 +864,44 @@ public function test_get_items_out_of_bounds_page_should_not_error_if_offset() { $response = rest_get_server()->dispatch( $request ); $this->assertCount( $expected_count, $response->get_data() ); } + + /** + * Tests for the pagination. + * + * @ticket 62292 + * + * @covers WP_REST_Revisions_Controller::get_items + */ + public function test_get_template_revisions_pagination() { + wp_set_current_user( self::$editor_id ); + + // Test offset + $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' ); + $request->set_param( 'offset', 1 ); + $request->set_param( 'per_page', 1 ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 200, $response->get_status() ); + $data = $response->get_data(); + $this->assertCount( 1, $data ); + $this->assertEquals( $this->total_revisions, $response->get_headers()['X-WP-Total'] ); + $this->assertEquals( $this->total_revisions, $response->get_headers()['X-WP-TotalPages'] ); + + // Test paged + $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' ); + $request->set_param( 'page', 2 ); + $request->set_param( 'per_page', 2 ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 200, $response->get_status() ); + $data = $response->get_data(); + $this->assertCount( 1, $data ); + $this->assertEquals( $this->total_revisions, $response->get_headers()['X-WP-Total'] ); + $this->assertEquals( (int) ceil( $this->total_revisions / 2 ), $response->get_headers()['X-WP-TotalPages'] ); + + // Test out of bounds + $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' ); + $request->set_param( 'page', $this->total_revisions + 1 ); + $request->set_param( 'per_page', 1 ); + $response = rest_get_server()->dispatch( $request ); + $this->assertErrorResponse( 'rest_revision_invalid_page_number', $response, 400 ); + } } diff --git a/tests/phpunit/tests/rest-api/wpRestTemplateRevisionsController.php b/tests/phpunit/tests/rest-api/wpRestTemplateRevisionsController.php index 2391a92478ede..23352879f3cfe 100644 --- a/tests/phpunit/tests/rest-api/wpRestTemplateRevisionsController.php +++ b/tests/phpunit/tests/rest-api/wpRestTemplateRevisionsController.php @@ -1065,4 +1065,44 @@ public function data_delete_item_not_found() { ), ); } + + /** + * Tests for the pagination. + * + * @ticket 62292 + * + * @covers WP_REST_Template_Revisions_Controller::get_items + */ + public function test_get_template_revisions_pagination() { + wp_set_current_user( self::$admin_id ); + + // Test offset + $request = new WP_REST_Request( 'GET', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/revisions' ); + $request->set_param( 'offset', 1 ); + $request->set_param( 'per_page', 1 ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 200, $response->get_status() ); + $data = $response->get_data(); + $this->assertCount( 1, $data ); + $this->assertEquals( 4, $response->get_headers()['X-WP-Total'] ); + $this->assertEquals( 4, $response->get_headers()['X-WP-TotalPages'] ); + + // Test paged + $request = new WP_REST_Request( 'GET', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/revisions' ); + $request->set_param( 'page', 2 ); + $request->set_param( 'per_page', 2 ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 200, $response->get_status() ); + $data = $response->get_data(); + $this->assertCount( 2, $data ); + $this->assertEquals( 4, $response->get_headers()['X-WP-Total'] ); + $this->assertEquals( 2, $response->get_headers()['X-WP-TotalPages'] ); + + // Test out of bounds + $request = new WP_REST_Request( 'GET', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/revisions' ); + $request->set_param( 'page', 4 ); + $request->set_param( 'per_page', 6 ); + $response = rest_get_server()->dispatch( $request ); + $this->assertErrorResponse( 'rest_revision_invalid_page_number', $response, 400 ); + } } From 5b01d24d8c5f2cfa4b96349967a9759e52888d03 Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Wed, 15 Jan 2025 22:11:15 +0000 Subject: [PATCH 31/31] Options/Meta APIs: Optimize cache hits for non-existent options. Optimize the order of checking the various options caches in `get_option()` to prevent hitting external caches each time it is called for a known non-existent option. The caches are checked in the following order when getting an option: 1. Check the `alloptions` cache first to prioritize existing loaded options. 2. Check the `notoptions` cache before a cache lookup or DB hit. 3. Check the `options` cache prior to a DB hit. Follow up to [56595]. Props adamsilverstein, flixos90, ivankristianto, joemcgill, rmccue, siliconforks, spacedmonkey. Fixes #62692. See #58277. git-svn-id: https://develop.svn.wordpress.org/trunk@59631 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/option.php | 59 ++++++++------ tests/phpunit/tests/option/option.php | 111 ++++++++++++++++++++------ 2 files changed, 122 insertions(+), 48 deletions(-) diff --git a/src/wp-includes/option.php b/src/wp-includes/option.php index c84f1660f931b..4b26504b76356 100644 --- a/src/wp-includes/option.php +++ b/src/wp-includes/option.php @@ -162,37 +162,46 @@ function get_option( $option, $default_value = false ) { if ( ! wp_installing() ) { $alloptions = wp_load_alloptions(); - + /* + * When getting an option value, we check in the following order for performance: + * + * 1. Check the 'alloptions' cache first to prioritize existing loaded options. + * 2. Check the 'notoptions' cache before a cache lookup or DB hit. + * 3. Check the 'options' cache prior to a DB hit. + * 4. Check the DB for the option and cache it in either the 'options' or 'notoptions' cache. + */ if ( isset( $alloptions[ $option ] ) ) { $value = $alloptions[ $option ]; } else { + // Check for non-existent options first to avoid unnecessary object cache lookups and DB hits. + $notoptions = wp_cache_get( 'notoptions', 'options' ); + + if ( ! is_array( $notoptions ) ) { + $notoptions = array(); + wp_cache_set( 'notoptions', $notoptions, 'options' ); + } + + if ( isset( $notoptions[ $option ] ) ) { + /** + * Filters the default value for an option. + * + * The dynamic portion of the hook name, `$option`, refers to the option name. + * + * @since 3.4.0 + * @since 4.4.0 The `$option` parameter was added. + * @since 4.7.0 The `$passed_default` parameter was added to distinguish between a `false` value and the default parameter value. + * + * @param mixed $default_value The default value to return if the option does not exist + * in the database. + * @param string $option Option name. + * @param bool $passed_default Was `get_option()` passed a default value? + */ + return apply_filters( "default_option_{$option}", $default_value, $option, $passed_default ); + } + $value = wp_cache_get( $option, 'options' ); if ( false === $value ) { - // Prevent non-existent options from triggering multiple queries. - $notoptions = wp_cache_get( 'notoptions', 'options' ); - - // Prevent non-existent `notoptions` key from triggering multiple key lookups. - if ( ! is_array( $notoptions ) ) { - $notoptions = array(); - wp_cache_set( 'notoptions', $notoptions, 'options' ); - } elseif ( isset( $notoptions[ $option ] ) ) { - /** - * Filters the default value for an option. - * - * The dynamic portion of the hook name, `$option`, refers to the option name. - * - * @since 3.4.0 - * @since 4.4.0 The `$option` parameter was added. - * @since 4.7.0 The `$passed_default` parameter was added to distinguish between a `false` value and the default parameter value. - * - * @param mixed $default_value The default value to return if the option does not exist - * in the database. - * @param string $option Option name. - * @param bool $passed_default Was `get_option()` passed a default value? - */ - return apply_filters( "default_option_{$option}", $default_value, $option, $passed_default ); - } $row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", $option ) ); diff --git a/tests/phpunit/tests/option/option.php b/tests/phpunit/tests/option/option.php index 36a40d9a2f495..9a2f061aa369c 100644 --- a/tests/phpunit/tests/option/option.php +++ b/tests/phpunit/tests/option/option.php @@ -112,8 +112,8 @@ public function test_get_option_notoptions_cache() { wp_cache_set( 'notoptions', $notoptions, 'options' ); $before = get_num_queries(); - $value = get_option( 'invalid' ); - $after = get_num_queries(); + get_option( 'invalid' ); + $after = get_num_queries(); $this->assertSame( 0, $after - $before ); } @@ -127,8 +127,8 @@ public function test_get_option_notoptions_set_cache() { get_option( 'invalid' ); $before = get_num_queries(); - $value = get_option( 'invalid' ); - $after = get_num_queries(); + get_option( 'invalid' ); + $after = get_num_queries(); $notoptions = wp_cache_get( 'notoptions', 'options' ); @@ -137,25 +137,6 @@ public function test_get_option_notoptions_set_cache() { $this->assertArrayHasKey( 'invalid', $notoptions, 'The "invalid" option should be in the notoptions cache.' ); } - /** - * @ticket 58277 - * - * @covers ::get_option - */ - public function test_get_option_notoptions_do_not_load_cache() { - add_option( 'foo', 'bar', '', false ); - wp_cache_delete( 'notoptions', 'options' ); - - $before = get_num_queries(); - $value = get_option( 'foo' ); - $after = get_num_queries(); - - $notoptions = wp_cache_get( 'notoptions', 'options' ); - - $this->assertSame( 0, $after - $before, 'The options cache was not hit on the second call to `get_option()`.' ); - $this->assertFalse( $notoptions, 'The notoptions cache should not be set.' ); - } - /** * @covers ::get_option * @covers ::add_option @@ -548,4 +529,88 @@ public function test_add_option_clears_the_notoptions_cache() { $updated_notoptions = wp_cache_get( 'notoptions', 'options' ); $this->assertArrayNotHasKey( $option_name, $updated_notoptions, 'The "foobar" option should not be in the notoptions cache after adding it.' ); } + + /** + * Test that get_option() does not hit the external cache multiple times for the same option. + * + * @ticket 62692 + * + * @covers ::get_option + * + * @dataProvider data_get_option_does_not_hit_the_external_cache_multiple_times_for_the_same_option + * + * @param int $expected_connections Expected number of connections to the memcached server. + * @param bool $option_exists Whether the option should be set. Default true. + * @param string $autoload Whether the option should be auto loaded. Default true. + */ + public function test_get_option_does_not_hit_the_external_cache_multiple_times_for_the_same_option( $expected_connections, $option_exists = true, $autoload = true ) { + if ( ! wp_using_ext_object_cache() ) { + $this->markTestSkipped( 'This test requires an external object cache.' ); + } + + if ( false === $this->helper_object_cache_stats_cmd_get() ) { + $this->markTestSkipped( 'This test requires access to the number of get requests to the external object cache.' ); + } + + if ( $option_exists ) { + add_option( 'ticket-62692', 'value', '', $autoload ); + } + + wp_cache_delete_multiple( array( 'ticket-62692', 'notoptions', 'alloptions' ), 'options' ); + + $connections_start = $this->helper_object_cache_stats_cmd_get(); + + $call_getter = 10; + while ( $call_getter-- ) { + get_option( 'ticket-62692' ); + } + + $connections_end = $this->helper_object_cache_stats_cmd_get(); + + $this->assertSame( $expected_connections, $connections_end - $connections_start ); + } + + /** + * Data provider. + * + * @return array[] + */ + public function data_get_option_does_not_hit_the_external_cache_multiple_times_for_the_same_option() { + return array( + 'exists, autoload' => array( 1, true, true ), + 'exists, not autoloaded' => array( 3, true, false ), + 'does not exist' => array( 3, false ), + ); + } + + /** + * Helper function to get the number of get commands from the external object cache. + * + * @return int|false Number of get command calls, false if unavailable. + */ + public function helper_object_cache_stats_cmd_get() { + if ( ! wp_using_ext_object_cache() || ! function_exists( 'wp_cache_get_stats' ) ) { + return false; + } + + $stats = wp_cache_get_stats(); + + // Check the shape of the stats. + if ( ! is_array( $stats ) ) { + return false; + } + + // Get the first server's stats. + $stats = array_shift( $stats ); + + if ( ! is_array( $stats ) ) { + return false; + } + + if ( ! array_key_exists( 'cmd_get', $stats ) ) { + return false; + } + + return $stats['cmd_get']; + } }