From 3de189a1df1335a2b2c24ccd3078c0178e5f17eb Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 25 Feb 2025 21:10:19 +0000 Subject: [PATCH] Minimize test resources and move remainder to appropriate packages Closes gh-44397 --- .../boot/BeanDefinitionLoaderTests.java | 36 +- .../springframework/boot/SimpleMainTests.java | 4 +- .../SpringApplicationBannerPrinterTests.java | 6 +- .../boot/SpringApplicationTests.java | 28 +- .../boot/WithSampleBeansXmlResource.java | 47 ++ .../SpringApplicationBuilderTests.java | 15 +- .../annotation/ImportCandidatesTests.java | 15 +- .../AnsiOutputApplicationListenerTests.java | 10 +- ...essorBootstrapContextIntegrationTests.java | 20 +- ...edWithProfileSpecificIntegrationTests.java | 21 +- ...ironmentPostProcessorIntegrationTests.java | 758 ++++++++++++++---- ...nfigDataEnvironmentPostProcessorTests.java | 5 +- .../config/ConfigDataEnvironmentTests.java | 59 +- .../ConfigDataLocationRuntimeHintsTests.java | 21 +- .../config/StandardConfigDataLoaderTests.java | 31 +- ...andardConfigDataLocationResolverTests.java | 80 +- .../LoggingApplicationListenerTests.java | 35 +- .../ConfigurationPropertiesTests.java | 21 +- .../convert/StringToFileConverterTests.java | 8 +- ...queBeanDefinitionFailureAnalyzerTests.java | 29 +- .../OriginTrackedPropertiesLoaderTests.java | 43 +- .../env/OriginTrackedYamlLoaderTests.java | 91 ++- .../PropertiesPropertySourceLoaderTests.java | 64 +- .../env/YamlPropertySourceLoaderTests.java | 11 +- ...aSourceScriptDatabaseInitializerTests.java | 3 +- .../boot/json/AbstractJsonParserTests.java | 23 +- .../boot/json/GsonJsonParserTests.java | 6 +- .../boot/json/JacksonJsonParserTests.java | 4 +- .../logging/java/JavaLoggingSystemTests.java | 7 +- .../log4j2/Log4J2LoggingSystemTests.java | 63 +- .../log4j2/SpringProfileArbiterTests.java | 66 +- .../logback/LogbackConfigurationTests.java | 45 +- .../logback/LogbackLoggingSystemTests.java | 131 ++- .../SpringBootJoranConfiguratorTests.java | 167 +++- .../netty/NettyRSocketServerFactoryTests.java | 62 +- ...bstractScriptDatabaseInitializerTests.java | 42 +- .../boot/ssl/jks/JksSslStoreBundleTests.java | 9 + .../boot/ssl/pem/LoadedPemSslStoreTests.java | 8 +- .../ssl/pem/PemCertificateParserTests.java | 5 +- .../boot/ssl/pem/PemContentTests.java | 23 +- .../ssl/pem/PemPrivateKeyParserTests.java | 67 +- .../boot/ssl/pem/PemSslStoreBundleTests.java | 12 +- ...stractClientHttpRequestFactoriesTests.java | 4 +- .../JettyServletWebServerFactoryTests.java | 27 +- .../jetty/SslServerCustomizerTests.java | 7 +- .../NettyReactiveWebServerFactoryTests.java | 9 +- .../tomcat/SslConnectorCustomizerTests.java | 11 +- .../TomcatServletWebServerFactoryTests.java | 6 +- .../UndertowServletWebServerFactoryTests.java | 24 +- .../view/MustacheViewResolverTests.java | 8 +- .../result/view/MustacheViewTests.java | 9 +- ...AbstractReactiveWebServerFactoryTests.java | 23 +- .../web/server/WebServerSslBundleTests.java | 11 +- .../ServletWebServerMvcIntegrationTests.java | 6 +- .../AbstractServletWebServerFactoryTests.java | 75 +- .../view/MustacheViewResolverTests.java | 9 +- .../web/servlet/view/MustacheViewTests.java | 9 +- .../test/resources/META-INF/spring.factories | 13 - ...portCandidatesTests$TestAnnotation.imports | 6 - .../spring-boot/src/test/resources/a-file | 0 .../src/test/resources/ansi.properties | 1 - ...e-in-profile-specific-file-test.properties | 4 - ...rofile-in-profile-specific-file.properties | 1 - ...trap-registry-integration-tests.properties | 6 - .../application-customdefault.properties | 1 - .../test/resources/application-dev.properties | 1 - ...mport-with-placeholder-imported.properties | 1 - ...rt-with-placeholder-in-document.properties | 3 - ...er-in-earlier-document-imported.properties | 1 - ...placeholder-in-earlier-document.properties | 6 - ...rlier-profile-document-imported.properties | 1 - ...der-in-earlier-profile-document.properties | 6 - ...placeholder-in-profile-document.properties | 6 - ...ication-import-with-placeholder.properties | 2 - ...t-and-direct-profile-import-dev.properties | 2 - ...riant-and-direct-profile-import.properties | 2 - ...import-with-profile-variant-dev.properties | 1 - ...th-profile-variant-imported-dev.properties | 1 - ...t-with-profile-variant-imported.properties | 1 - ...ion-import-with-profile-variant.properties | 2 - ...es-in-profile-specific-document.properties | 6 - ...s-in-profile-specific-file-test.properties | 1 - ...ofiles-in-profile-specific-file.properties | 1 - ...les-list-in-profile-specific-file-test.yml | 4 - ...clude-profiles-with-placeholder.properties | 9 - .../application-include-profiles.properties | 7 - .../application-includeprofile.properties | 1 - .../resources/application-node.properties | 1 - .../resources/application-other.properties | 1 - ...ic-import-with-custom-import-p1.properties | 1 - ...cific-import-with-custom-import.properties | 2 - ...ic-import-with-import-import-p1.properties | 1 - ...ic-import-with-import-import-p2.properties | 1 - ...cific-import-with-import-import.properties | 1 - ...-specific-import-with-import-p1.properties | 2 - ...ile-specific-import-with-import.properties | 2 - .../resources/application-props-no-extension | 1 - .../application-withwebapplicationtype.yml | 1 - .../src/test/resources/application.custom | 0 .../src/test/resources/application.properties | 6 - .../src/test/resources/application.yml | 1 - .../src/test/resources/banner-utf8.txt | 1 - .../resources/bindtoapplication.properties | 1 - .../config/..hidden/testproperties.properties | 1 - .../config/0-empty/testproperties.properties | 0 .../config/1-first/testproperties.properties | 1 - .../config/2-second/testproperties.properties | 1 - ...root-and-config-with-profile-p1.properties | 3 - ...root-and-config-with-profile-p2.properties | 3 - ...in-root-and-config-with-profile.properties | 3 - .../nested/3-third/testproperties.properties | 1 - .../test/resources/config/specific.properties | 1 - .../customprofile-customdefault.properties | 1 - .../profiles/customprofile.properties | 2 - .../profiles/testnegatedprofiles.yml | 17 - .../profiles/testprofileexpression.yml | 12 - .../configdata/profiles/testprofiles.yml | 18 - .../profiles/testprofilesdocument.yml | 12 - .../configdata/profiles/testprofilesempty.yml | 12 - .../configdata/profiles/testsetprofiles.yml | 10 - .../properties/application-dev.properties | 0 .../configdata/properties/application.other | 0 .../properties/application.properties | 1 - .../configdata/properties/other.properties | 0 .../resources/configdata/yaml/application.yml | 3 - ...gimportwithprofilespecific-prod.properties | 1 - ...configimportwithprofilespecific.properties | 2 - .../resources/custom-config/application.yml | 1 - .../resources/custom-console-log-pattern.xml | 4 - ...-file-log-pattern-with-fileNamePattern.xml | 4 - .../resources/custom-file-log-pattern.xml | 4 - .../src/test/resources/custom-location.yml | 1 - .../src/test/resources/customapplication.yml | 1 - .../customprofile-customdefault.properties | 2 - .../customprofile-specific.properties | 1 - .../test/resources/customprofile.properties | 2 - .../spring-boot/src/test/resources/data.sql | 1 - .../src/test/resources/dispatcher.properties | 1 - .../src/test/resources/enableother.properties | 3 - .../enableprofile-myprofile.properties | 2 - .../resources/enableprofile-other.properties | 1 - .../test/resources/enableprofile.properties | 4 - .../resources/enabletwoprofiles.properties | 2 - ...root-and-config-with-profile-p1.properties | 3 - ...root-and-config-with-profile-p2.properties | 3 - ...in-root-and-config-with-profile.properties | 3 - .../src/test/resources/gh17001.properties | 1 - .../test/resources/invalidproperty.properties | 1 - .../src/test/resources/log4j2-nondefault.xml | 17 - .../src/test/resources/log4j2-override.xml | 8 - .../src/test/resources/logback-broken.xml | 11 - .../test/resources/logback-include-base.xml | 4 - .../resources/logback-include-defaults.xml | 12 - .../test/resources/logback-invalid-format.txt | 0 .../src/test/resources/logback-nondefault.xml | 11 - .../logback-springprofile-in-root.xml | 13 - .../test/resources/logback-without-extension | 11 - .../resources/logging-nondefault.properties | 2 - .../test/resources/moreproperties.properties | 2 - .../org/springframework/boot/animated.gif | Bin 899314 -> 0 bytes .../springframework/boot/black-and-white.gif | Bin 44 -> 0 bytes .../org/springframework/boot/colors.gif | Bin 95 -> 0 bytes ...AddsImportedSourceToEnvironment.properties | 1 - ...sFromIgnoreProfilesContributors.properties | 1 - ...ontributorsWhenNoProfilesActive.properties | 1 - ...MovesDefaultProperySourceToLast.properties | 1 - ...ApplyOnlyAddsActiveContributors.properties | 4 - ...ocessAndApplySetsActiveProfiles.properties | 1 - ...sActiveProfilesAndProfileGroups.properties | 2 - ...cessAndApplySetsDefaultProfiles.properties | 1 - ...tenerCallsOnPropertySourceAdded.properties | 1 - ...enHasListenerCallsOnSetProfiles.properties | 1 - .../separate-class-loader-spring.factories | 2 - .../properties/bind/convert/resource.txt | 1 - .../context/properties/testProperties.xml | 12 - .../analyzer/nounique/consumer.xml | 8 - .../analyzer/nounique/producer.xml | 8 - .../org/springframework/boot/env/anchors.yml | 6 - .../existing-non-multi-document.properties | 32 - .../multi-document-properties-2.properties | 10 - ...multi-document-properties-empty.properties | 12 - .../env/multi-document-properties.properties | 10 - .../springframework/boot/env/recursive.yml | 7 - .../boot/env/test-empty-yaml.yml | 5 - ...st-properties-malformed-unicode.properties | 1 - .../org/springframework/boot/env/test-xml.xml | 5 - .../springframework/boot/env/test-yaml.yml | 38 - .../org/springframework/boot/foobar.txt | 1 - .../org/springframework/boot/gradient.gif | Bin 817 -> 0 bytes .../org/springframework/boot/large.gif | Bin 142 -> 0 bytes .../logging/log4j2/multi-profile-names.xml | 8 - .../logging/log4j2/production-profile.xml | 8 - .../logging/log4j2/profile-expression.xml | 8 - .../logging/logback/include-with-profile.xml | 5 - .../logging/logback/include-with-property.xml | 3 - .../logging/logback/multi-profile-names.xml | 7 - .../boot/logging/logback/nested.xml | 9 - .../logging/logback/production-profile.xml | 7 - .../logging/logback/profile-expression.xml | 7 - .../logging/logback/profile-in-include.xml | 5 - .../logback/property-default-value.xml | 6 - .../boot/logging/logback/property-in-if.xml | 10 - .../logging/logback/property-in-include.xml | 5 - .../boot/logging/logback/property.xml | 6 - .../boot/rsocket/netty}/test-cert.pem | 0 .../boot/rsocket/netty}/test-key.pem | 0 .../boot/rsocket/netty}/test.jks | Bin .../springframework/boot/sample-beans.groovy | 5 - .../org/springframework/boot/sample-beans.xml | 9 - .../boot/sample-namespace.groovy | 7 - .../org/springframework/boot/ssl/jks/test.jks | Bin 0 -> 6536 bytes .../springframework/boot/ssl/jks}/test.p12 | Bin .../org/springframework/boot/ssl/pem/dsa.key | 21 + .../org/springframework/boot/ssl/pem/file.txt | 1 + .../boot/ssl/pem/pkcs1/dsa.key | 12 + .../boot/ssl/pem/pkcs1/rsa-aes-256-cbc.key | 30 + .../boot/ssl/pem/pkcs1/rsa.key | 51 ++ .../boot/ssl/pem/pkcs8/brainpoolP256r1.key | 5 + .../boot/ssl/pem/pkcs8/brainpoolP256t1.key | 5 + .../boot/ssl/pem/pkcs8/brainpoolP320r1.key | 6 + .../boot/ssl/pem/pkcs8/brainpoolP320t1.key | 6 + .../boot/ssl/pem/pkcs8/brainpoolP384r1.key | 6 + .../boot/ssl/pem/pkcs8/brainpoolP384t1.key | 6 + .../boot/ssl/pem/pkcs8/brainpoolP512r1.key | 7 + .../boot/ssl/pem/pkcs8/brainpoolP512t1.key | 7 + .../boot/ssl/pem/pkcs8/dsa-aes-128-cbc.key | 23 + .../boot/ssl/pem/pkcs8/dsa.key | 21 + .../ssl/pem/pkcs8/ed25519-aes-256-cbc.key | 6 + .../boot/ssl/pem/pkcs8/ed25519.key | 3 + .../boot/ssl/pem/pkcs8/ed448.key | 4 + .../boot/ssl/pem}/pkcs8/key-rsa-encrypted.pem | 0 .../ssl/pem/pkcs8/prime256v1-aes-256-cbc.key | 7 + .../boot/ssl/pem/pkcs8/prime256v1.key | 5 + .../boot/ssl/pem/pkcs8/rsa-aes-256-cbc.key | 54 ++ .../boot/ssl/pem/pkcs8/rsa-des-ede3-cbc.key | 54 ++ .../boot/ssl/pem/pkcs8/rsa-pss.key | 28 + .../boot/ssl/pem/pkcs8/rsa-scrypt.key | 54 ++ .../boot/ssl/pem/pkcs8/rsa.key | 52 ++ .../boot/ssl/pem/pkcs8/secp224r1.key | 5 + .../boot/ssl/pem/pkcs8/secp256k1.key | 5 + .../boot/ssl/pem/pkcs8/secp256r1.key | 5 + .../boot/ssl/pem/pkcs8/secp384r1.key | 6 + .../boot/ssl/pem/pkcs8/secp521r1.key | 8 + .../boot/ssl/pem/pkcs8/x25519.key | 3 + .../boot/ssl/pem/pkcs8/x448-aes-256-cbc.key | 6 + .../boot/ssl/pem/pkcs8/x448.key | 4 + .../boot/ssl/pem/sec1/brainpoolP256r1.key | 5 + .../boot/ssl/pem/sec1/brainpoolP256t1.key | 5 + .../boot/ssl/pem/sec1/brainpoolP320r1.key | 6 + .../boot/ssl/pem/sec1/brainpoolP320t1.key | 6 + .../boot/ssl/pem/sec1/brainpoolP384r1.key | 6 + .../boot/ssl/pem/sec1/brainpoolP384t1.key | 6 + .../boot/ssl/pem/sec1/brainpoolP512r1.key | 7 + .../boot/ssl/pem/sec1/brainpoolP512t1.key | 7 + .../ssl/pem/sec1/prime256v1-aes-128-cbc.key | 8 + .../boot/ssl/pem/sec1/prime256v1.key | 5 + .../boot/ssl/pem/sec1/secp224r1.key | 5 + .../boot/ssl/pem/sec1/secp256k1.key | 5 + .../boot/ssl/pem/sec1/secp256r1.key | 5 + .../boot/ssl/pem/sec1/secp384r1.key | 6 + .../boot/ssl/pem/sec1/secp521r1.key | 8 + .../boot/ssl/pem}/test-cert-chain.pem | 0 .../boot/ssl/pem/test-cert.pem | 22 + .../springframework/boot/ssl/pem/test-key.pem | 59 ++ .../springframework/boot/web/client/test.jks | Bin 0 -> 6536 bytes .../boot/web/embedded/jetty/test.jks | Bin 0 -> 6536 bytes .../boot/web/embedded/netty/test.jks | Bin 0 -> 6536 bytes .../boot/web/embedded/tomcat/test.jks | Bin 0 -> 6536 bytes .../web/embedded/undertow}/restricted.jks | Bin .../web/reactive/result/view/template.html | 1 - .../boot/web/reactive/server/test-cert.pem | 22 + .../boot/web/reactive/server/test-key.pem | 59 ++ .../boot/web/reactive/server/test.jks | Bin 0 -> 6536 bytes .../boot/web/reactive/server/test.p12 | Bin 0 -> 7441 bytes .../boot/web/server/test-cert-chain.pem | 32 + .../boot/web/server/test-cert.pem | 22 + .../boot/web/server/test-key.pem | 59 ++ .../springframework/boot/web/server/test.jks | Bin 0 -> 6536 bytes .../springframework/boot/web/server/test.p12 | Bin 0 -> 7441 bytes .../boot/web/servlet/context/conf.properties | 1 - .../boot/web/servlet/server/test-cert.pem | 22 + .../boot/web/servlet/server/test-key.pem | 59 ++ .../boot/web/servlet/server/test.jks | Bin 0 -> 6536 bytes .../boot/web/servlet/server/test.p12 | Bin 0 -> 7441 bytes .../boot/web/servlet/view/template.html | 1 - .../spring-boot/src/test/resources/other.yml | 2 - .../src/test/resources/override.properties | 4 - .../spring-boot/src/test/resources/schema.sql | 4 - .../src/test/resources/some.properties | 4 - .../src/test/resources/specific.properties | 1 - .../resources/specificlocation.properties | 2 - ...lication-config-property-source.properties | 1 - .../test-banner-with-placeholder.txt | 3 - .../src/test/resources/test-banner.txt | 1 - .../resources/testactiveprofiles.properties | 1 - .../resources/testprofiles-default.properties | 1 - .../testprofiles-thedefault.properties | 2 - .../src/test/resources/testprofiles.yml | 12 - .../test/resources/testproperties.properties | 2 - .../test/resources/testsetmultiprofiles.yml | 4 - .../resources/testsetmultiprofileslist.yml | 6 - .../testsetmultiprofileswhitespace.yml | 4 - .../src/test/resources/testyaml.yml | 4 - 303 files changed, 2857 insertions(+), 1253 deletions(-) create mode 100644 spring-boot-project/spring-boot/src/test/java/org/springframework/boot/WithSampleBeansXmlResource.java delete mode 100644 spring-boot-project/spring-boot/src/test/resources/META-INF/spring.factories delete mode 100644 spring-boot-project/spring-boot/src/test/resources/META-INF/spring/org.springframework.boot.context.annotation.ImportCandidatesTests$TestAnnotation.imports delete mode 100644 spring-boot-project/spring-boot/src/test/resources/a-file delete mode 100644 spring-boot-project/spring-boot/src/test/resources/ansi.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-activate-on-profile-in-profile-specific-file-test.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-activate-on-profile-in-profile-specific-file.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-bootstrap-registry-integration-tests.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-customdefault.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-dev.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-imported.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-document.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-earlier-document-imported.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-earlier-document.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-earlier-profile-document-imported.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-earlier-profile-document.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-profile-document.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-and-direct-profile-import-dev.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-and-direct-profile-import.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-dev.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-imported-dev.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-imported.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-include-profiles-in-profile-specific-document.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-include-profiles-in-profile-specific-file-test.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-include-profiles-in-profile-specific-file.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-include-profiles-list-in-profile-specific-file-test.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-include-profiles-with-placeholder.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-include-profiles.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-includeprofile.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-node.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-other.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-custom-import-p1.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-custom-import.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import-import-p1.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import-import-p2.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import-import.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import-p1.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-props-no-extension delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application-withwebapplicationtype.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application.custom delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/application.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/banner-utf8.txt delete mode 100644 spring-boot-project/spring-boot/src/test/resources/bindtoapplication.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/config/..hidden/testproperties.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/config/0-empty/testproperties.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/config/1-first/testproperties.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/config/2-second/testproperties.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/config/file-in-root-and-config-with-profile-p1.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/config/file-in-root-and-config-with-profile-p2.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/config/file-in-root-and-config-with-profile.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/config/nested/3-third/testproperties.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/config/specific.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/configdata/profiles/customprofile-customdefault.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/configdata/profiles/customprofile.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testnegatedprofiles.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testprofileexpression.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testprofiles.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testprofilesdocument.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testprofilesempty.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testsetprofiles.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/configdata/properties/application-dev.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/configdata/properties/application.other delete mode 100644 spring-boot-project/spring-boot/src/test/resources/configdata/properties/application.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/configdata/properties/other.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/configdata/yaml/application.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/configimportwithprofilespecific-prod.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/configimportwithprofilespecific.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/custom-config/application.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/custom-console-log-pattern.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/custom-file-log-pattern-with-fileNamePattern.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/custom-file-log-pattern.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/custom-location.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/customapplication.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/customprofile-customdefault.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/customprofile-specific.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/customprofile.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/data.sql delete mode 100644 spring-boot-project/spring-boot/src/test/resources/dispatcher.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/enableother.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/enableprofile-myprofile.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/enableprofile-other.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/enableprofile.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/enabletwoprofiles.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/file-in-root-and-config-with-profile-p1.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/file-in-root-and-config-with-profile-p2.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/file-in-root-and-config-with-profile.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/gh17001.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/invalidproperty.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/log4j2-nondefault.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/log4j2-override.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/logback-broken.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/logback-include-base.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/logback-include-defaults.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/logback-invalid-format.txt delete mode 100644 spring-boot-project/spring-boot/src/test/resources/logback-nondefault.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/logback-springprofile-in-root.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/logback-without-extension delete mode 100644 spring-boot-project/spring-boot/src/test/resources/logging-nondefault.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/moreproperties.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/animated.gif delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/black-and-white.gif delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/colors.gif delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/context/config/ConfigDataEnvironmentTests-processAndApplyAddsImportedSourceToEnvironment.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/context/config/ConfigDataEnvironmentTests-processAndApplyDoesNotSetProfilesFromIgnoreProfilesContributors.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/context/config/ConfigDataEnvironmentTests-processAndApplyDoesNotSetProfilesFromIgnoreProfilesContributorsWhenNoProfilesActive.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/context/config/ConfigDataEnvironmentTests-processAndApplyMovesDefaultProperySourceToLast.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/context/config/ConfigDataEnvironmentTests-processAndApplyOnlyAddsActiveContributors.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/context/config/ConfigDataEnvironmentTests-processAndApplySetsActiveProfiles.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/context/config/ConfigDataEnvironmentTests-processAndApplySetsActiveProfilesAndProfileGroups.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/context/config/ConfigDataEnvironmentTests-processAndApplySetsDefaultProfiles.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/context/config/ConfigDataEnvironmentTests-processAndApplyWhenHasListenerCallsOnPropertySourceAdded.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/context/config/ConfigDataEnvironmentTests-processAndApplyWhenHasListenerCallsOnSetProfiles.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/context/config/separate-class-loader-spring.factories delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/context/properties/bind/convert/resource.txt delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/context/properties/testProperties.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/diagnostics/analyzer/nounique/consumer.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/diagnostics/analyzer/nounique/producer.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/anchors.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/existing-non-multi-document.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/multi-document-properties-2.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/multi-document-properties-empty.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/multi-document-properties.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/recursive.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-empty-yaml.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-properties-malformed-unicode.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-xml.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-yaml.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/foobar.txt delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/gradient.gif delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/large.gif delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/log4j2/multi-profile-names.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/log4j2/production-profile.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/log4j2/profile-expression.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/include-with-profile.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/include-with-property.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/multi-profile-names.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/nested.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/production-profile.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/profile-expression.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/profile-in-include.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/property-default-value.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/property-in-if.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/property-in-include.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/property.xml rename spring-boot-project/spring-boot/src/test/resources/{ => org/springframework/boot/rsocket/netty}/test-cert.pem (100%) rename spring-boot-project/spring-boot/src/test/resources/{ => org/springframework/boot/rsocket/netty}/test-key.pem (100%) rename spring-boot-project/spring-boot/src/test/resources/{ => org/springframework/boot/rsocket/netty}/test.jks (100%) delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/sample-beans.groovy delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/sample-beans.xml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/sample-namespace.groovy create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/jks/test.jks rename spring-boot-project/spring-boot/src/test/resources/{ => org/springframework/boot/ssl/jks}/test.p12 (100%) create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/dsa.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/file.txt create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs1/dsa.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs1/rsa-aes-256-cbc.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs1/rsa.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP256r1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP256t1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP320r1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP320t1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP384r1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP384t1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP512r1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP512t1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/dsa-aes-128-cbc.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/dsa.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/ed25519-aes-256-cbc.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/ed25519.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/ed448.key rename spring-boot-project/spring-boot/src/test/resources/{ssl => org/springframework/boot/ssl/pem}/pkcs8/key-rsa-encrypted.pem (100%) create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/prime256v1-aes-256-cbc.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/prime256v1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa-aes-256-cbc.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa-des-ede3-cbc.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa-pss.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa-scrypt.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp224r1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp256k1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp256r1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp384r1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp521r1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/x25519.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/x448-aes-256-cbc.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/x448.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP256r1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP256t1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP320r1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP320t1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP384r1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP384t1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP512r1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP512t1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/prime256v1-aes-128-cbc.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/prime256v1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp224r1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp256k1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp256r1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp384r1.key create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp521r1.key rename spring-boot-project/spring-boot/src/test/resources/{ => org/springframework/boot/ssl/pem}/test-cert-chain.pem (100%) create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/test-cert.pem create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/test-key.pem create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/client/test.jks create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/embedded/jetty/test.jks create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/embedded/netty/test.jks create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/embedded/tomcat/test.jks rename spring-boot-project/spring-boot/src/test/resources/{ => org/springframework/boot/web/embedded/undertow}/restricted.jks (100%) delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/reactive/result/view/template.html create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/reactive/server/test-cert.pem create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/reactive/server/test-key.pem create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/reactive/server/test.jks create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/reactive/server/test.p12 create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/server/test-cert-chain.pem create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/server/test-cert.pem create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/server/test-key.pem create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/server/test.jks create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/server/test.p12 delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/context/conf.properties create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/server/test-cert.pem create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/server/test-key.pem create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/server/test.jks create mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/server/test.p12 delete mode 100644 spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/view/template.html delete mode 100644 spring-boot-project/spring-boot/src/test/resources/other.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/override.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/schema.sql delete mode 100644 spring-boot-project/spring-boot/src/test/resources/some.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/specific.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/specificlocation.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/spring-application-config-property-source.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/test-banner-with-placeholder.txt delete mode 100644 spring-boot-project/spring-boot/src/test/resources/test-banner.txt delete mode 100644 spring-boot-project/spring-boot/src/test/resources/testactiveprofiles.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/testprofiles-default.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/testprofiles-thedefault.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/testprofiles.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/testproperties.properties delete mode 100644 spring-boot-project/spring-boot/src/test/resources/testsetmultiprofiles.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/testsetmultiprofileslist.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/testsetmultiprofileswhitespace.yml delete mode 100644 spring-boot-project/spring-boot/src/test/resources/testyaml.yml diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/BeanDefinitionLoaderTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/BeanDefinitionLoaderTests.java index 86c30311a7f..e4de8e40ba3 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/BeanDefinitionLoaderTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/BeanDefinitionLoaderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ import sampleconfig.MyComponentInPackageWithoutDot; import org.springframework.boot.sampleconfig.MyComponent; import org.springframework.boot.sampleconfig.MyNamedComponent; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.context.support.StaticApplicationContext; import org.springframework.core.io.ClassPathResource; @@ -72,8 +73,9 @@ class BeanDefinitionLoaderTests { } @Test + @WithSampleBeansXmlResource void loadXmlResource() { - ClassPathResource resource = new ClassPathResource("sample-beans.xml", getClass()); + ClassPathResource resource = new ClassPathResource("org/springframework/boot/sample-beans.xml"); BeanDefinitionLoader loader = new BeanDefinitionLoader(this.registry, resource); assertThat(load(loader)).isOne(); assertThat(this.registry.containsBean("myXmlComponent")).isTrue(); @@ -81,8 +83,15 @@ class BeanDefinitionLoaderTests { } @Test + @WithResource(name = "org/springframework/boot/sample-beans.groovy", content = """ + import org.springframework.boot.sampleconfig.MyComponent; + + beans { + myGroovyComponent(MyComponent) {} + } + """) void loadGroovyResource() { - ClassPathResource resource = new ClassPathResource("sample-beans.groovy", getClass()); + ClassPathResource resource = new ClassPathResource("org/springframework/boot/sample-beans.groovy"); BeanDefinitionLoader loader = new BeanDefinitionLoader(this.registry, resource); assertThat(load(loader)).isOne(); assertThat(this.registry.containsBean("myGroovyComponent")).isTrue(); @@ -90,8 +99,17 @@ class BeanDefinitionLoaderTests { } @Test + @WithResource(name = "org/springframework/boot/sample-namespace.groovy", content = """ + import org.springframework.boot.sampleconfig.MyComponent; + + beans { + xmlns([ctx:'http://www.springframework.org/schema/context']) + ctx.'component-scan'('base-package':'nonexistent') + myGroovyComponent(MyComponent) {} + } + """) void loadGroovyResourceWithNamespace() { - ClassPathResource resource = new ClassPathResource("sample-namespace.groovy", getClass()); + ClassPathResource resource = new ClassPathResource("org/springframework/boot/sample-namespace.groovy"); BeanDefinitionLoader loader = new BeanDefinitionLoader(this.registry, resource); assertThat(load(loader)).isOne(); assertThat(this.registry.containsBean("myGroovyComponent")).isTrue(); @@ -114,7 +132,8 @@ class BeanDefinitionLoaderTests { } @Test - void loadResourceName() { + @WithSampleBeansXmlResource + void loadXmlName() { BeanDefinitionLoader loader = new BeanDefinitionLoader(this.registry, "classpath:org/springframework/boot/sample-beans.xml"); assertThat(load(loader)).isOne(); @@ -122,6 +141,13 @@ class BeanDefinitionLoaderTests { } @Test + @WithResource(name = "org/springframework/boot/sample-beans.groovy", content = """ + import org.springframework.boot.sampleconfig.MyComponent; + + beans { + myGroovyComponent(MyComponent) {} + } + """) void loadGroovyName() { BeanDefinitionLoader loader = new BeanDefinitionLoader(this.registry, "classpath:org/springframework/boot/sample-beans.groovy"); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SimpleMainTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SimpleMainTests.java index 24b9f9f7301..0935aaf56c1 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SimpleMainTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SimpleMainTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -61,12 +61,14 @@ class SimpleMainTests { } @Test + @WithSampleBeansXmlResource void xmlContext(CapturedOutput output) throws Exception { SpringApplication.main(getArgs("org/springframework/boot/sample-beans.xml")); assertThat(output).contains(SPRING_STARTUP); } @Test + @WithSampleBeansXmlResource void mixedContext(CapturedOutput output) throws Exception { SpringApplication.main(getArgs(getClass().getName(), "org/springframework/boot/sample-beans.xml")); assertThat(output).contains(SPRING_STARTUP); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationBannerPrinterTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationBannerPrinterTests.java index 50250c8c0c0..1335c0aa690 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationBannerPrinterTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationBannerPrinterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,6 +22,7 @@ import org.mockito.ArgumentCaptor; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.context.support.GenericApplicationContext; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; @@ -47,9 +48,10 @@ class SpringApplicationBannerPrinterTests { } @Test + @WithResource(name = "banner.txt", content = "\uD83D\uDE0D Spring Boot! \uD83D\uDE0D") void shouldUseUtf8() { ResourceLoader resourceLoader = new GenericApplicationContext(); - Resource resource = resourceLoader.getResource("classpath:/banner-utf8.txt"); + Resource resource = resourceLoader.getResource("classpath:banner.txt"); SpringApplicationBannerPrinter printer = new SpringApplicationBannerPrinter(resourceLoader, new ResourceBanner(resource)); Log log = mock(Log.class); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java index 0bce832b570..57a47305264 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -74,6 +74,7 @@ import org.springframework.boot.context.event.ApplicationStartingEvent; import org.springframework.boot.context.event.SpringApplicationEvent; import org.springframework.boot.convert.ApplicationConversionService; import org.springframework.boot.testsupport.classpath.ForkedClassPath; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.boot.testsupport.system.CapturedOutput; import org.springframework.boot.testsupport.system.OutputCaptureExtension; import org.springframework.boot.web.embedded.netty.NettyReactiveWebServerFactory; @@ -226,19 +227,24 @@ class SpringApplicationTests { } @Test + @WithResource(name = "banner.txt", content = "Running a Test!") void customBanner(CapturedOutput output) { SpringApplication application = spy(new SpringApplication(ExampleConfig.class)); application.setWebApplicationType(WebApplicationType.NONE); - this.context = application.run("--spring.banner.location=classpath:test-banner.txt"); + this.context = application.run(); assertThat(output).startsWith("Running a Test!"); + } @Test + @WithResource(name = "banner.txt", content = """ + Running a Test! + + ${test.property}""") void customBannerWithProperties(CapturedOutput output) { SpringApplication application = spy(new SpringApplication(ExampleConfig.class)); application.setWebApplicationType(WebApplicationType.NONE); - this.context = application.run("--spring.banner.location=classpath:test-banner-with-placeholder.txt", - "--test.property=123456"); + this.context = application.run("--test.property=123456"); assertThat(output).containsPattern("Running a Test!\\s+123456"); } @@ -289,6 +295,7 @@ class SpringApplicationTests { } @Test + @WithResource(name = "bindtoapplication.properties", content = "spring.main.banner-mode=off") void triggersConfigFileApplicationListenerBeforeBinding() { SpringApplication application = new SpringApplication(ExampleConfig.class); application.setWebApplicationType(WebApplicationType.NONE); @@ -540,6 +547,7 @@ class SpringApplicationTests { } @Test + @WithResource(name = "application.properties", content = "foo=bucket") void propertiesFileEnhancesEnvironment() { SpringApplication application = new SpringApplication(ExampleConfig.class); application.setWebApplicationType(WebApplicationType.NONE); @@ -572,6 +580,8 @@ class SpringApplicationTests { } @Test + @WithResource(name = "application.properties", content = "my.property=fromapplicationproperties") + @WithResource(name = "application-other.properties", content = "my.property=fromotherpropertiesfile") void addProfilesOrderWithProperties() { SpringApplication application = new SpringApplication(ExampleConfig.class); application.setWebApplicationType(WebApplicationType.NONE); @@ -584,6 +594,7 @@ class SpringApplicationTests { } @Test + @WithResource(name = "application.properties", content = "foo=bucket") void emptyCommandLinePropertySourceNotAdded() { SpringApplication application = new SpringApplication(ExampleConfig.class); application.setWebApplicationType(WebApplicationType.NONE); @@ -814,11 +825,13 @@ class SpringApplicationTests { } @Test + @WithSampleBeansXmlResource + @WithResource(name = "application.properties", content = "sample.app.test.prop=*") void wildcardSources() { TestSpringApplication application = new TestSpringApplication(); application.getSources().add("classpath*:org/springframework/boot/sample-${sample.app.test.prop}.xml"); application.setWebApplicationType(WebApplicationType.NONE); - this.context = application.run(); + this.context = application.run("--spring.config.location=classpath:/"); } @Test @@ -1139,6 +1152,8 @@ class SpringApplicationTests { } @Test + @WithResource(name = "application-withwebapplicationtype.yml", + content = "spring.main.web-application-type: reactive") void environmentIsConvertedIfTypeDoesNotMatch() { ConfigurableApplicationContext context = new SpringApplication(ExampleReactiveWebConfig.class) .run("--spring.profiles.active=withwebapplicationtype"); @@ -1195,6 +1210,7 @@ class SpringApplicationTests { } @Test + @WithResource(name = "custom-config/application.yml", content = "hello: world") void relaxedBindingShouldWorkBeforeEnvironmentIsPrepared() { SpringApplication application = new SpringApplication(ExampleConfig.class); application.setWebApplicationType(WebApplicationType.NONE); @@ -1329,6 +1345,8 @@ class SpringApplicationTests { } @Test + @WithResource(name = "spring-application-config-property-source.properties", + content = "test.name=spring-application-config-property-source") void movesConfigClassPropertySourcesToEnd() { SpringApplication application = new SpringApplication(PropertySourceConfig.class); application.setWebApplicationType(WebApplicationType.NONE); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/WithSampleBeansXmlResource.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/WithSampleBeansXmlResource.java new file mode 100644 index 00000000000..91359f63bcf --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/WithSampleBeansXmlResource.java @@ -0,0 +1,47 @@ +/* + * Copyright 2012-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.boot.testsupport.classpath.resources.WithResource; + +/** + * Makes an {@code org/springframework/boot/sample-beans.xml} resource available from the + * thread context classloader. + * + * @author Andy Wilkinson + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +@WithResource(name = "org/springframework/boot/sample-beans.xml", + content = """ + + + + + """) +@interface WithSampleBeansXmlResource { + +} diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/builder/SpringApplicationBuilderTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/builder/SpringApplicationBuilderTests.java index 81897b33a21..3f4b5a4ed9f 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/builder/SpringApplicationBuilderTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/builder/SpringApplicationBuilderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,6 +29,7 @@ import org.springframework.boot.ApplicationContextFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplicationShutdownHookInstance; import org.springframework.boot.WebApplicationType; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; @@ -72,14 +73,21 @@ class SpringApplicationBuilderTests { } @Test + @WithResource(name = "application.properties", content = """ + b=file + c=file + """) + @WithResource(name = "application-foo.properties", content = "b=profile-specific-file") void profileAndProperties() { SpringApplicationBuilder application = new SpringApplicationBuilder().sources(ExampleConfig.class) .contextFactory(ApplicationContextFactory.ofContextClass(StaticApplicationContext.class)) .profiles("foo") - .properties("foo=bar"); + .properties("a=default"); this.context = application.run(); assertThat(this.context).isInstanceOf(StaticApplicationContext.class); - assertThat(this.context.getEnvironment().getProperty("foo")).isEqualTo("bucket"); + assertThat(this.context.getEnvironment().getProperty("a")).isEqualTo("default"); + assertThat(this.context.getEnvironment().getProperty("b")).isEqualTo("profile-specific-file"); + assertThat(this.context.getEnvironment().getProperty("c")).isEqualTo("file"); assertThat(this.context.getEnvironment().acceptsProfiles(Profiles.of("foo"))).isTrue(); } @@ -194,6 +202,7 @@ class SpringApplicationBuilderTests { } @Test + @WithResource(name = "application-node.properties", content = "bar=spam") void parentFirstCreationWithProfileAndDefaultArgs() { SpringApplicationBuilder application = new SpringApplicationBuilder(ExampleConfig.class).profiles("node") .properties("transport=redis") diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/annotation/ImportCandidatesTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/annotation/ImportCandidatesTests.java index 2d4551f00ed..8af49ee43a1 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/annotation/ImportCandidatesTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/annotation/ImportCandidatesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,8 @@ import java.lang.annotation.Target; import org.junit.jupiter.api.Test; +import org.springframework.boot.testsupport.classpath.resources.WithResource; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -32,7 +34,18 @@ import static org.assertj.core.api.Assertions.assertThat; */ class ImportCandidatesTests { + private static final String IMPORTS_FILE = "META-INF/spring/org.springframework.boot.context.annotation.ImportCandidatesTests$TestAnnotation.imports"; + @Test + @WithResource(name = IMPORTS_FILE, content = """ + # A comment spanning a complete line + class1 + + class2 # with comment at the end + # Comment with some whitespace in front + class3 + + """) void loadReadsFromClasspathFile() { ImportCandidates candidates = ImportCandidates.load(TestAnnotation.class, null); assertThat(candidates).containsExactly("class1", "class2", "class3"); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/AnsiOutputApplicationListenerTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/AnsiOutputApplicationListenerTests.java index 75c4b9bbcd6..cf198bf2c23 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/AnsiOutputApplicationListenerTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/AnsiOutputApplicationListenerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,11 +28,9 @@ import org.springframework.boot.WebApplicationType; import org.springframework.boot.ansi.AnsiOutput; import org.springframework.boot.ansi.AnsiOutput.Enabled; import org.springframework.boot.ansi.AnsiOutputEnabledValue; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Configuration; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.StandardEnvironment; -import org.springframework.test.context.support.TestPropertySourceUtils; import static org.assertj.core.api.Assertions.assertThat; @@ -81,11 +79,9 @@ class AnsiOutputApplicationListenerTests { } @Test + @WithResource(name = "application.properties", content = "spring.output.ansi.enabled=never") void disabledViaApplicationProperties() { - ConfigurableEnvironment environment = new StandardEnvironment(); - TestPropertySourceUtils.addInlinedPropertiesToEnvironment(environment, "spring.config.name=ansi"); SpringApplication application = new SpringApplication(Config.class); - application.setEnvironment(environment); application.setWebApplicationType(WebApplicationType.NONE); this.context = application.run(); assertThat(AnsiOutputEnabledValue.get()).isEqualTo(Enabled.NEVER); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorBootstrapContextIntegrationTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorBootstrapContextIntegrationTests.java index 45d8eec7715..93a3d39efac 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorBootstrapContextIntegrationTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorBootstrapContextIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ import org.springframework.boot.BootstrapRegistry; import org.springframework.boot.SpringApplication; import org.springframework.boot.WebApplicationType; import org.springframework.boot.context.config.TestConfigDataBootstrap.LoaderHelper; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Configuration; @@ -45,9 +46,24 @@ class ConfigDataEnvironmentPostProcessorBootstrapContextIntegrationTests { } @Test + @WithResource(name = "imported.properties", content = """ + spring.config.import=testbootstrap:test + spring.profiles.active=test + myprop=igotbound + #--- + spring.config.activate.on-profile=test + myprofileprop=igotprofilebound + + """) + @WithResource(name = "META-INF/spring.factories", content = """ + org.springframework.boot.context.config.ConfigDataLoader=\ + org.springframework.boot.context.config.TestConfigDataBootstrap.Loader + org.springframework.boot.context.config.ConfigDataLocationResolver=\ + org.springframework.boot.context.config.TestConfigDataBootstrap.LocationResolver + """) void bootstrapsApplicationContext() { try (ConfigurableApplicationContext context = this.application - .run("--spring.config.import=classpath:application-bootstrap-registry-integration-tests.properties")) { + .run("--spring.config.import=classpath:imported.properties")) { LoaderHelper bean = context.getBean(TestConfigDataBootstrap.LoaderHelper.class); assertThat(bean).isNotNull(); assertThat(bean.getBound()).isEqualTo("igotbound"); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorImportCombinedWithProfileSpecificIntegrationTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorImportCombinedWithProfileSpecificIntegrationTests.java index 0b9f5e58c62..c4e28c206d5 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorImportCombinedWithProfileSpecificIntegrationTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorImportCombinedWithProfileSpecificIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,6 +33,7 @@ import org.springframework.boot.WebApplicationType; import org.springframework.boot.context.config.ConfigData.Option; import org.springframework.boot.context.config.ConfigData.Options; import org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessorIntegrationTests.Config; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.MapPropertySource; import org.springframework.core.env.PropertySource; @@ -45,6 +46,18 @@ import static org.assertj.core.api.Assertions.assertThat; * * @author Phillip Webb */ +@WithResource(name = "application.properties", content = """ + spring.config.import=icwps: + prop=fromfile + """) +@WithResource(name = "application-prod.properties", content = "prop=fromprofilefile") +@WithResource(name = "META-INF/spring.factories", + content = """ + org.springframework.boot.context.config.ConfigDataLoader=\ + org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessorImportCombinedWithProfileSpecificIntegrationTests.Loader + org.springframework.boot.context.config.ConfigDataLocationResolver=\ + org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessorImportCombinedWithProfileSpecificIntegrationTests.LocationResolver + """) class ConfigDataEnvironmentPostProcessorImportCombinedWithProfileSpecificIntegrationTests { private SpringApplication application; @@ -60,16 +73,14 @@ class ConfigDataEnvironmentPostProcessorImportCombinedWithProfileSpecificIntegra @Test void testWithoutProfile() { - ConfigurableApplicationContext context = this.application - .run("--spring.config.name=configimportwithprofilespecific"); + ConfigurableApplicationContext context = this.application.run(); String value = context.getEnvironment().getProperty("prop"); assertThat(value).isEqualTo("fromicwps1"); } @Test void testWithProfile() { - ConfigurableApplicationContext context = this.application - .run("--spring.config.name=configimportwithprofilespecific", "--spring.profiles.active=prod"); + ConfigurableApplicationContext context = this.application.run("--spring.profiles.active=prod"); String value = context.getEnvironment().getProperty("prop"); assertThat(value).isEqualTo("fromicwps2"); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorIntegrationTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorIntegrationTests.java index 940db092ec4..12005f44db1 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorIntegrationTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,16 +20,17 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.UUID; -import org.apache.logging.log4j.util.Strings; import org.assertj.core.api.Condition; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -46,6 +47,9 @@ import org.springframework.boot.context.properties.bind.Binder; import org.springframework.boot.context.properties.source.ConfigurationProperty; import org.springframework.boot.context.properties.source.ConfigurationPropertyName; import org.springframework.boot.origin.Origin; +import org.springframework.boot.testsupport.BuildOutput; +import org.springframework.boot.testsupport.classpath.resources.WithResource; +import org.springframework.boot.testsupport.classpath.resources.WithResourceDirectory; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Configuration; @@ -59,6 +63,7 @@ import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.util.FileCopyUtils; +import org.springframework.util.FileSystemUtils; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; @@ -115,6 +120,7 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test + @WithResource(name = "application.properties", content = "foo=bucket") void runLoadsApplicationPropertiesOnClasspath() { ConfigurableApplicationContext context = this.application.run(); String property = context.getEnvironment().getProperty("foo"); @@ -122,13 +128,15 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test + @WithResource(name = "application.yaml", content = "yamlkey: yamlvalue") void runLoadsApplicationYamlOnClasspath() { - ConfigurableApplicationContext context = this.application.run("--spring.config.name=customapplication"); + ConfigurableApplicationContext context = this.application.run(); String property = context.getEnvironment().getProperty("yamlkey"); assertThat(property).isEqualTo("yamlvalue"); } @Test + @WithResource(name = "testproperties.properties", content = "the.property=frompropertiesfile") void runLoadsFileWithCustomName() { ConfigurableApplicationContext context = this.application.run("--spring.config.name=testproperties"); String property = context.getEnvironment().getProperty("the.property"); @@ -136,45 +144,84 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test + @WithResource(name = "application.properties", content = """ + duplicate=properties + only-properties = properties + """) + @WithResource(name = "application.yaml", content = """ + duplicate: yaml + only-yaml: yaml + """) void runWhenPropertiesAndYamlShouldPreferProperties() { ConfigurableApplicationContext context = this.application.run(); - String property = context.getEnvironment().getProperty("duplicate"); - assertThat(property).isEqualTo("properties"); + assertThat(context.getEnvironment().getProperty("duplicate")).isEqualTo("properties"); + assertThat(context.getEnvironment().getProperty("only-properties")).isEqualTo("properties"); + assertThat(context.getEnvironment().getProperty("only-yaml")).isEqualTo("yaml"); } @Test + @WithResource(name = "moreproperties.properties", content = """ + the.property=more + only.more=more + """) + @WithResource(name = "testproperties.properties", content = """ + the.property=test + only.test=test + """) void runWhenMultipleCustomNamesLoadsEachName() { ConfigurableApplicationContext context = this.application .run("--spring.config.name=moreproperties,testproperties"); - String property = context.getEnvironment().getProperty("the.property"); - assertThat(property).isEqualTo("frompropertiesfile"); + assertThat(context.getEnvironment().getProperty("the.property")).isEqualTo("test"); + assertThat(context.getEnvironment().getProperty("only.more")).isEqualTo("more"); + assertThat(context.getEnvironment().getProperty("only.test")).isEqualTo("test"); } @Test + @WithResource(name = "application-default.properties", content = "my.property=fromdefaultpropertiesfile") void runWhenNoActiveProfilesLoadsDefaultProfileFile() { - ConfigurableApplicationContext context = this.application.run("--spring.config.name=testprofiles"); + ConfigurableApplicationContext context = this.application.run(); String property = context.getEnvironment().getProperty("my.property"); assertThat(property).isEqualTo("fromdefaultpropertiesfile"); } @Test + @WithResource(name = "application.yaml", content = """ + --- + my: + property: fromyamlfile + other: notempty + --- + spring.config.activate.on-profile: default + my: + property: fromdefaultprofile + --- + spring.config.activate.on-profile: other + my: + property: fromotherprofile + """) void runWhenActiveProfilesDoesNotLoadDefault() { - ConfigurableApplicationContext context = this.application.run("--spring.config.name=testprofilesdocument", - "--spring.config.location=classpath:configdata/profiles/", "--spring.profiles.default=thedefault", - "--spring.profiles.active=other"); + ConfigurableApplicationContext context = this.application.run("--spring.profiles.active=other"); String property = context.getEnvironment().getProperty("my.property"); assertThat(property).isEqualTo("fromotherprofile"); } @Test + @WithResource(name = "application-thedefault.properties", content = "the.property=fromdefaultpropertiesfile") void runWhenHasCustomDefaultProfileLoadsDefaultProfileFile() { - ConfigurableApplicationContext context = this.application.run("--spring.config.name=testprofiles", - "--spring.profiles.default=thedefault"); + ConfigurableApplicationContext context = this.application.run("--spring.profiles.default=thedefault"); String property = context.getEnvironment().getProperty("the.property"); assertThat(property).isEqualTo("fromdefaultpropertiesfile"); } @Test + @WithResource(name = "application.properties", content = """ + foo=bucket + my.property=fromapplicationproperties + """) + @WithResource(name = "testproperties.properties", content = """ + my.property=frompropertiesfile + the.property=frompropertiesfile + """) void runWhenHasCustomSpringConfigLocationLoadsAllFromSpecifiedLocation() { ConfigurableApplicationContext context = this.application .run("--spring.config.location=classpath:application.properties,classpath:testproperties.properties"); @@ -187,29 +234,68 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test - void runWhenOneCustomLocationDoesNotExistLoadsOthers() { + @WithResource(name = "application.properties", content = """ + foo=bucket + my.property=fromapplicationproperties + """) + @WithResource(name = "testproperties.properties", content = """ + my.property=frompropertiesfile + the.property=frompropertiesfile + """) + void runWhenOneCustomOptionalLocationDoesNotExistLoadsOthers() { ConfigurableApplicationContext context = this.application.run( "--spring.config.location=classpath:application.properties,classpath:testproperties.properties,optional:classpath:nonexistent.properties"); - String property = context.getEnvironment().getProperty("the.property"); - assertThat(property).isEqualTo("frompropertiesfile"); + assertThat(context.getEnvironment().getProperty("my.property")).isEqualTo("frompropertiesfile"); + assertThat(context.getEnvironment().getProperty("foo")).isEqualTo("bucket"); } @Test + @WithResource(name = "application.yml", content = """ + --- + my: + property: fromyamlfile + --- + spring.config.activate.on-profile: prod + spring.config.import: file:./non-existent.yml + """) void runWhenProfileSpecificMandatoryLocationDoesNotExistShouldNotFail() { - ConfigurableApplicationContext context = this.application.run("--spring.config.name=testprofiles", - "--spring.config.location=classpath:configdata/profiles/"); + ConfigurableApplicationContext context = this.application.run(); String property = context.getEnvironment().getProperty("my.property"); assertThat(property).isEqualTo("fromyamlfile"); } @Test + @WithResource(name = "application.yml", content = """ + --- + my: + property: fromyamlfile + --- + spring.config.activate.on-profile: prod + spring.config.import: file:./non-existent.yml + """) void runWhenProfileSpecificMandatoryLocationDoesNotExistShouldFailWhenProfileActive() { this.application.setAdditionalProfiles("prod"); - assertThatExceptionOfType(ConfigDataResourceNotFoundException.class).isThrownBy(() -> this.application - .run("--spring.config.name=testprofiles", "--spring.config.location=classpath:configdata/profiles/")); + assertThatExceptionOfType(ConfigDataResourceNotFoundException.class).isThrownBy(() -> this.application.run()) + .withMessageContaining("non-existent.yml"); } @Test + @WithResource(name = "enableprofile.properties", content = """ + spring.profiles.active=myprofile + my.property=frompropertiesfile + the.property=frompropertiesfile + one.more=${my.property} + """) + @WithResource(name = "enableother.properties", content = """ + spring.profiles.active=other + my.property=fromenableotherpropertiesfile + one.more=${my.property} + """) + @WithResource(name = "enableprofile-other.properties", content = "other.property=fromotherpropertiesfile") + @WithResource(name = "enableprofile-myprofile.properties", content = """ + my.property=fromprofilepropertiesfile + the.property=fromprofilepropertiesfile + """) void runWhenHasActiveProfilesFromMultipleLocationsActivatesProfileFromOneLocation() { ConfigurableApplicationContext context = this.application .run("--spring.config.location=classpath:enableprofile.properties,classpath:enableother.properties"); @@ -220,13 +306,27 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test + @WithResource(name = "enableprofile.properties", content = """ + spring.profiles.active=myprofile + my.property=frompropertiesfile + """) + @WithResource(name = "enabletwoprofiles.properties", content = """ + spring.profiles.active=myprofile,another + my.property=fromtwopropertiesfile + """) + @WithResource(name = "enableprofile-myprofile.properties", content = """ + my.property=frommyprofilepropertiesfile + """) + @WithResource(name = "enableprofile-another.properties", content = """ + my.property=fromanotherprofilepropertiesfile + """) void runWhenHasActiveProfilesFromMultipleAdditionalLocationsWithOneSwitchedOffLoadsExpectedProperties() { ConfigurableApplicationContext context = this.application.run( "--spring.config.additional-location=classpath:enabletwoprofiles.properties,classpath:enableprofile.properties"); ConfigurableEnvironment environment = context.getEnvironment(); assertThat(environment.getActiveProfiles()).containsExactly("myprofile"); String property = environment.getProperty("my.property"); - assertThat(property).isEqualTo("fromprofilepropertiesfile"); + assertThat(property).isEqualTo("frommyprofilepropertiesfile"); } @Test @@ -249,14 +349,18 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test + @WithResource(name = "application.properties", content = """ + my.property=frompropertiesfile + the.property=frompropertiesfile + """) void runWhenHasCommandLinePropertiesLoadsWithCommandLineTakingPrecedence() { StandardEnvironment environment = new StandardEnvironment(); environment.getPropertySources() .addFirst(new SimpleCommandLinePropertySource("--the.property=fromcommandline")); this.application.setEnvironment(environment); - ConfigurableApplicationContext context = this.application.run("--spring.config.name=testproperties"); - String property = context.getEnvironment().getProperty("the.property"); - assertThat(property).isEqualTo("fromcommandline"); + ConfigurableApplicationContext context = this.application.run(); + assertThat(context.getEnvironment().getProperty("the.property")).isEqualTo("fromcommandline"); + assertThat(context.getEnvironment().getProperty("my.property")).isEqualTo("frompropertiesfile"); } @Test @@ -268,15 +372,17 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test + @WithResource(name = "application.properties", content = "my.property=fromapplicationproperties") void runWhenHasDefaultPropertiesIncludesDefaultPropertiesLast() { - this.application.setDefaultProperties(Collections.singletonMap("my.fallback", "foo")); + this.application.setDefaultProperties(Map.of("my.property", "fromdefaults", "my.fallback", "fromdefaults")); ConfigurableApplicationContext context = this.application.run(); - String property = context.getEnvironment().getProperty("my.fallback"); - assertThat(property).isEqualTo("foo"); + assertThat(context.getEnvironment().getProperty("my.fallback")).isEqualTo("fromdefaults"); + assertThat(context.getEnvironment().getProperty("my.property")).isEqualTo("fromapplicationproperties"); } @Test - void runWhenHasDefaultPropertiesWithConfigLocationConfigurationLoadsExpectedProperties() { + @WithResource(name = "testproperties.properties", content = "the.property=frompropertiesfile") + void runWhenHasDefaultPropertiesWithConfigNameLoadsExpectedProperties() { this.application.setDefaultProperties(Collections.singletonMap("spring.config.name", "testproperties")); ConfigurableApplicationContext context = this.application.run(); String property = context.getEnvironment().getProperty("the.property"); @@ -284,13 +390,15 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test - void runWhenHasActiveProfilesFromDefaultPropertiesAndFileLoadsWithFileTakingPrecedence() { + @WithResource(name = "application.properties", content = "spring.profiles.active=myprofile") + void runWhenHasActiveProfilesFromDefaultPropertiesAndFileLoadsWithActiveProfilesFromFileTakingPrecedence() { this.application.setDefaultProperties(Collections.singletonMap("spring.profiles.active", "dev")); - ConfigurableApplicationContext context = this.application.run("--spring.config.name=enableprofile"); + ConfigurableApplicationContext context = this.application.run(); assertThat(context.getEnvironment().getActiveProfiles()).containsExactly("myprofile"); } @Test + @WithResource(name = "application-other.properties", content = "my.property=fromotherpropertiesfile") void runWhenProgrammaticallySetProfilesLoadsWithSetProfilesTakePrecedenceOverDefaultProfile() { this.application.setAdditionalProfiles("other"); ConfigurableApplicationContext context = this.application.run(); @@ -299,6 +407,8 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test + @WithResource(name = "application-dev.properties", content = "my.property=fromdevpropertiesfile") + @WithResource(name = "application-other.properties", content = "my.property=fromotherpropertiesfile") void runWhenTwoProfilesSetProgrammaticallyLoadsWithPreservedProfileOrder() { this.application.setAdditionalProfiles("other", "dev"); ConfigurableApplicationContext context = this.application.run(); @@ -307,9 +417,12 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test + @WithResource(name = "application.properties", content = "spring.profiles.active=myprofile") + @WithResource(name = "application-myprofile.properties", content = "the.property=fromprofilepropertiesfile") + @WithResource(name = "application-other.properties", content = "other.property=fromotherpropertiesfile") void runWhenProfilesPresentBeforeConfigFileProcessingAugmentsProfileActivatedByConfigFile() { this.application.setAdditionalProfiles("other"); - ConfigurableApplicationContext context = this.application.run("--spring.config.name=enableprofile"); + ConfigurableApplicationContext context = this.application.run(); assertThat(context.getEnvironment().getActiveProfiles()).containsExactly("other", "myprofile"); String property = context.getEnvironment().getProperty("other.property"); assertThat(property).isEqualTo("fromotherpropertiesfile"); @@ -318,13 +431,19 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test + @WithResource(name = "application.properties", content = """ + spring.profiles.active=myprofile + one.more=${my.property} + """) + @WithResource(name = "application-myprofile.properties", content = "my.property=fromprofilepropertiesfile") void runWhenProfilePropertiesUsedInPlaceholdersLoadsWithResolvedPlaceholders() { - ConfigurableApplicationContext context = this.application.run("--spring.config.name=enableprofile"); - String property = context.getEnvironment().getProperty("one.more"); - assertThat(property).isEqualTo("fromprofilepropertiesfile"); + ConfigurableApplicationContext context = this.application.run(); + assertThat(context.getEnvironment().getProperty("one.more")).isEqualTo("fromprofilepropertiesfile"); } @Test + @WithResource(name = "application-dev.properties", content = "my.property=fromdevpropertiesfile") + @WithResource(name = "application-other.properties", content = "my.property=fromotherpropertiesfile") void runWhenDuplicateProfileSetProgrammaticallyAndViaPropertyLoadsWithProfiles() { this.application.setAdditionalProfiles("dev"); ConfigurableApplicationContext context = this.application.run("--spring.profiles.active=dev,other"); @@ -333,6 +452,8 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test + @WithResource(name = "application-dev.properties", content = "my.property=fromdevpropertiesfile") + @WithResource(name = "application-other.properties", content = "my.property=fromotherpropertiesfile") void runWhenProfilesActivatedViaBracketNotationSetsProfiles() { ConfigurableApplicationContext context = this.application.run("--spring.profiles.active[0]=dev", "--spring.profiles.active[1]=other"); @@ -341,21 +462,43 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test + @WithResource(name = "application.yaml", content = """ + --- + my: + property: fromyamlfile + other: notempty + --- + spring.config.activate.on-profile: dev + my: + property: fromdevprofile + """) void loadWhenProfileInMultiDocumentFilesLoadsExpectedProperties() { this.application.setAdditionalProfiles("dev"); - ConfigurableApplicationContext context = this.application.run("--spring.config.name=testprofiles", - "--spring.config.location=classpath:configdata/profiles/"); - String property = context.getEnvironment().getProperty("my.property"); - assertThat(property).isEqualTo("fromdevprofile"); - property = context.getEnvironment().getProperty("my.other"); - assertThat(property).isEqualTo("notempty"); + ConfigurableApplicationContext context = this.application.run(); + assertThat(context.getEnvironment().getProperty("my.property")).isEqualTo("fromdevprofile"); + assertThat(context.getEnvironment().getProperty("my.other")).isEqualTo("notempty"); } @Test + @WithResource(name = "application.yaml", content = """ + --- + my: + property: fromyamlfile + other: notempty + --- + spring.config.activate.on-profile: dev + my: + property: fromdevprofile + dev: + property: devproperty + --- + spring.config.activate.on-profile: other + my: + property: fromotherprofile + """) void runWhenMultipleActiveProfilesWithMultiDocumentFilesLoadsInOrderOfDocument() { this.application.setAdditionalProfiles("other", "dev"); - ConfigurableApplicationContext context = this.application.run("--spring.config.name=testprofiles", - "--spring.config.location=classpath:configdata/profiles/"); + ConfigurableApplicationContext context = this.application.run(); String property = context.getEnvironment().getProperty("my.property"); assertThat(property).isEqualTo("fromotherprofile"); property = context.getEnvironment().getProperty("my.other"); @@ -365,106 +508,223 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test + @WithResource(name = "application.yaml", content = """ + --- + my: + property: fromyamlfile + --- + spring.config.activate.on-profile: dev & other + my: + property: devandother + --- + spring.config.activate.on-profile: (dev | other) & another + my: + property: devorotherandanother + """) void runWhenHasAndProfileExpressionLoadsExpectedProperties() { - assertProfileExpression("devandother", "dev", "other"); + this.application.setAdditionalProfiles("dev", "other"); + ConfigurableApplicationContext context = this.application.run(); + assertThat(context.getEnvironment().getProperty("my.property")).isEqualTo("devandother"); } @Test + @WithResource(name = "application.yaml", content = """ + --- + my: + property: fromyamlfile + --- + spring.config.activate.on-profile: dev & other + my: + property: devandother + --- + spring.config.activate.on-profile: (dev | other) & another + my: + property: devorotherandanother + """) void runWhenHasComplexProfileExpressionsLoadsExpectedProperties() { - assertProfileExpression("devorotherandanother", "dev", "another"); + this.application.setAdditionalProfiles("dev", "another"); + ConfigurableApplicationContext context = this.application.run(); + assertThat(context.getEnvironment().getProperty("my.property")).isEqualTo("devorotherandanother"); } @Test + @WithResource(name = "application.yaml", content = """ + --- + my: + property: fromyamlfile + --- + spring.config.activate.on-profile: dev & other + my: + property: devandother + --- + spring.config.activate.on-profile: (dev | other) & another + my: + property: devorotherandanother + """) void runWhenProfileExpressionsDoNotMatchLoadsExpectedProperties() { - assertProfileExpression("fromyamlfile", "dev"); + this.application.setAdditionalProfiles("dev"); + ConfigurableApplicationContext context = this.application.run(); + assertThat(context.getEnvironment().getProperty("my.property")).isEqualTo("fromyamlfile"); } @Test + @WithResource(name = "application.yml", content = """ + --- + my: + property: fromyamlfile + other: notempty + --- + spring.config.activate.on-profile: other + my: + property: fromotherprofile + --- + spring.config.activate.on-profile: "!other" + my: + property: fromnototherprofile + notother: foo + + """) void runWhenHasNegatedProfilesLoadsExpectedProperties() { - ConfigurableApplicationContext context = this.application.run("--spring.config.name=testnegatedprofiles", - "--spring.config.location=classpath:configdata/profiles/"); - String property = context.getEnvironment().getProperty("my.property"); - assertThat(property).isEqualTo("fromnototherprofile"); - property = context.getEnvironment().getProperty("my.notother"); - assertThat(property).isEqualTo("foo"); + ConfigurableApplicationContext context = this.application.run(); + assertThat(context.getEnvironment().getProperty("my.property")).isEqualTo("fromnototherprofile"); + assertThat(context.getEnvironment().getProperty("my.notother")).isEqualTo("foo"); } @Test + @WithResource(name = "application.yml", content = """ + --- + my: + property: fromyamlfile + other: notempty + --- + spring.config.activate.on-profile: other + my: + property: fromotherprofile + --- + spring.config.activate.on-profile: "!other" + my: + property: fromnototherprofile + notother: foo + + """) void runWhenHasNegatedProfilesWithProfileActiveLoadsExpectedProperties() { this.application.setAdditionalProfiles("other"); - ConfigurableApplicationContext context = this.application.run("--spring.config.name=testnegatedprofiles", - "--spring.config.location=classpath:configdata/profiles/"); - String property = context.getEnvironment().getProperty("my.property"); - assertThat(property).isEqualTo("fromotherprofile"); - property = context.getEnvironment().getProperty("my.notother"); - assertThat(property).isNull(); + ConfigurableApplicationContext context = this.application.run(); + assertThat(context.getEnvironment().getProperty("my.property")).isEqualTo("fromotherprofile"); + assertThat(context.getEnvironment().getProperty("my.notother")).isNull(); } @Test + @WithResource(name = "application.yml", content = """ + --- + spring: + profiles: + active: dev + my: + property: fromyamlfile + --- + spring.config.activate.on-profile: dev + my: + property: fromdevprofile + """) void runWhenHasActiveProfileConfigurationInMultiDocumentFileLoadsInExpectedOrder() { - ConfigurableApplicationContext context = this.application.run("--spring.config.name=testsetprofiles", - "--spring.config.location=classpath:configdata/profiles/"); + ConfigurableApplicationContext context = this.application.run(); assertThat(context.getEnvironment().getActiveProfiles()).containsExactly("dev"); String property = context.getEnvironment().getProperty("my.property"); assertThat(context.getEnvironment().getActiveProfiles()).contains("dev"); assertThat(property).isEqualTo("fromdevprofile"); assertThat(context.getEnvironment().getPropertySources()).extracting("name") .contains( - "Config resource 'class path resource [configdata/profiles/testsetprofiles.yml]' via location 'classpath:configdata/profiles/' (document #0)", - "Config resource 'class path resource [configdata/profiles/testsetprofiles.yml]' via location 'classpath:configdata/profiles/' (document #1)"); + "Config resource 'class path resource [application.yml]' via location 'optional:classpath:/' (document #0)", + "Config resource 'class path resource [application.yml]' via location 'optional:classpath:/' (document #1)"); } @Test + @WithResource(name = "application.yml", content = """ + --- + spring: + profiles: + active: dev,healthcheck + """) void runWhenHasYamlWithCommaSeparatedMultipleProfilesLoadsExpectedProperties() { - ConfigurableApplicationContext context = this.application.run("--spring.config.name=testsetmultiprofiles"); + ConfigurableApplicationContext context = this.application.run(); assertThat(context.getEnvironment().getActiveProfiles()).containsExactly("dev", "healthcheck"); } @Test + @WithResource(name = "application.yml", content = """ + --- + spring: + profiles: + active: + - dev + - healthcheck + """) void runWhenHasYamlWithListProfilesLoadsExpectedProperties() { - ConfigurableApplicationContext context = this.application.run("--spring.config.name=testsetmultiprofileslist"); + ConfigurableApplicationContext context = this.application.run(); assertThat(context.getEnvironment().getActiveProfiles()).containsExactly("dev", "healthcheck"); } @Test + @WithResource(name = "application.yml", content = """ + --- + spring: + profiles: + active: dev , healthcheck + """) void loadWhenHasWhitespaceTrims() { - ConfigurableApplicationContext context = this.application - .run("--spring.config.name=testsetmultiprofileswhitespace"); + ConfigurableApplicationContext context = this.application.run(); assertThat(context.getEnvironment().getActiveProfiles()).containsExactly("dev", "healthcheck"); } @Test - void loadWhenHasConfigLocationAsFile() { - String location = "file:src/test/resources/specificlocation.properties"; + void loadWhenHasConfigLocationAsFile() throws IOException { + File properties = new File(this.temp, "specificlocation.properties"); + Files.write(properties.toPath(), + List.of("my.property=fromspecificlocation", "the.property=fromspecificlocation")); + String location = properties.toURI().toURL().toString(); ConfigurableApplicationContext context = this.application.run("--spring.config.location=" + location); - assertThat(context.getEnvironment()).has(matchingPropertySource("Config resource 'file [" + Strings - .join(Arrays.asList("src", "test", "resources", "specificlocation.properties"), File.separatorChar) - + "]' via location '" + location + "'")); + assertThat(context.getEnvironment()) + .has(matchingPropertySource("Config resource 'file [" + properties + "]' via location '" + location + "'")); } @Test - void loadWhenHasRelativeConfigLocationUsesFileLocation() { - String location = "src/test/resources/specificlocation.properties"; - ConfigurableApplicationContext context = this.application.run("--spring.config.location=" + location); - assertThat(context.getEnvironment()).has(matchingPropertySource("Config resource 'file [" + Strings - .join(Arrays.asList("src", "test", "resources", "specificlocation.properties"), File.separatorChar) - + "]' via location '" + location + "'")); + void loadWhenHasRelativeConfigLocationUsesFileLocation() throws IOException { + File buildOutput = new BuildOutput(getClass()).getRootLocation(); + File resources = new File(buildOutput, "resources-" + UUID.randomUUID()); + try { + resources.mkdirs(); + File properties = new File(resources, "specificlocation.properties").getAbsoluteFile(); + Files.write(properties.toPath(), + List.of("my.property=fromspecificlocation", "the.property=fromspecificlocation")); + Path relative = new File("").getAbsoluteFile().toPath().relativize(properties.toPath()); + ConfigurableApplicationContext context = this.application.run("--spring.config.location=" + relative); + assertThat(context.getEnvironment()).has(matchingPropertySource( + "Config resource 'file [" + relative + "]' via location '" + relative + "'")); + } + finally { + FileSystemUtils.deleteRecursively(resources); + } } @Test + @WithResource(name = "application-customdefault.properties", content = "customdefault=true") + @WithResource(name = "application-dev.properties", content = "my.property=fromdevpropertiesfile") void loadWhenCustomDefaultProfileAndActiveFromPreviousSourceDoesNotActivateDefault() { ConfigurableApplicationContext context = this.application.run("--spring.profiles.default=customdefault", "--spring.profiles.active=dev"); - String property = context.getEnvironment().getProperty("my.property"); - assertThat(property).isEqualTo("fromdevpropertiesfile"); + assertThat(context.getEnvironment().getProperty("my.property")).isEqualTo("fromdevpropertiesfile"); assertThat(context.getEnvironment().containsProperty("customdefault")).isFalse(); } @Test + @WithResource(name = "application.properties", content = """ + spring.profiles.active=customdefault + customprofile=true + """) + @WithResource(name = "application-customdefault.properties", content = "customprofile-customdefault=true") void runWhenCustomDefaultProfileSameAsActiveFromFileActivatesProfile() { - ConfigurableApplicationContext context = this.application.run( - "--spring.config.location=classpath:configdata/profiles/", "--spring.profiles.default=customdefault", - "--spring.config.name=customprofile"); + ConfigurableApplicationContext context = this.application.run("--spring.profiles.default=customdefault"); ConfigurableEnvironment environment = context.getEnvironment(); assertThat(environment.containsProperty("customprofile")).isTrue(); assertThat(environment.containsProperty("customprofile-customdefault")).isTrue(); @@ -472,13 +732,18 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test + @WithResource(name = "application.properties", content = "spring.profiles.active=${activeProfile:propertiesfile}") void runWhenActiveProfilesCanBeConfiguredUsingPlaceholdersResolvedAgainstTheEnvironmentLoadsExpectedProperties() { - ConfigurableApplicationContext context = this.application.run("--activeProfile=testPropertySource", - "--spring.config.name=testactiveprofiles"); + ConfigurableApplicationContext context = this.application.run("--activeProfile=testPropertySource"); assertThat(context.getEnvironment().getActiveProfiles()).containsExactly("testPropertySource"); } @Test + @WithResource(name = "application.properties", content = """ + foo=bucket + value=1234 + """) + @WithResource(name = "override.properties", content = "foo=bar") void runWhenHasAdditionalLocationLoadsWithAdditionalTakingPrecedenceOverDefaultLocation() { ConfigurableApplicationContext context = this.application .run("--spring.config.additional-location=classpath:override.properties"); @@ -487,6 +752,12 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test + @WithResource(name = "application.properties", content = """ + foo=bucket + value=1234 + """) + @WithResource(name = "override.properties", content = "foo=bar") + @WithResource(name = "some.properties", content = "foo=spam") void runWhenMultipleAdditionalLocationsLoadsWithLastWinning() { ConfigurableApplicationContext context = this.application .run("--spring.config.additional-location=classpath:override.properties,classpath:some.properties"); @@ -495,6 +766,9 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test + @WithResource(name = "application.properties", content = "value=1234") + @WithResource(name = "override.properties", content = "foo=bar") + @WithResource(name = "some.properties", content = "foo=spam") void runWhenAdditionalLocationAndLocationLoadsWithAdditionalTakingPrecedenceOverConfigured() { ConfigurableApplicationContext context = this.application.run( "--spring.config.location=classpath:some.properties", @@ -504,12 +778,19 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test + @WithResource(name = "application.custom", content = "") + @WithResource(name = "META-INF/spring.factories", content = """ + org.springframework.boot.env.PropertySourceLoader=\ + org.springframework.boot.context.config.TestPropertySourceLoader1,\ + org.springframework.boot.context.config.TestPropertySourceLoader2 + """) void runWhenPropertiesFromCustomPropertySourceLoaderShouldLoadFromCustomSource() { ConfigurableApplicationContext context = this.application.run(); assertThat(context.getEnvironment().getProperty("customloader1")).isEqualTo("true"); } @Test + @WithResource(name = "gh17001.properties", content = "gh17001loaded=true") void runWhenCustomDefaultPropertySourceLoadsWithoutReplacingCustomSource() { // gh-17011 Map source = new HashMap<>(); @@ -581,75 +862,123 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { void runWhenConfigLocationHasNonOptionalEmptyFileDoesNotThrowException() throws IOException { File location = new File(this.temp, "application.properties"); FileCopyUtils.copy(new byte[0], location); - assertThatNoException() - .isThrownBy(() -> this.application.run("--spring.config.location=classpath:/application.properties," - + StringUtils.cleanPath(location.getAbsolutePath()))); + assertThatNoException().isThrownBy(() -> this.application + .run("--spring.config.location=" + StringUtils.cleanPath(location.getAbsolutePath()))); } @Test + @WithResource(name = "META-INF/spring.factories", content = """ + org.springframework.boot.context.config.ConfigDataLocationResolver=\ + org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessorIntegrationTests$LocationResolver + + org.springframework.boot.context.config.ConfigDataLoader=\ + org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessorIntegrationTests$Loader + """) void runWhenResolvedIsOptionalDoesNotThrowException() { ApplicationContext context = this.application.run("--spring.config.location=test:optionalresult"); assertThat(context.getEnvironment().containsProperty("spring")).isFalse(); } @Test + @WithResource(name = "application.properties", content = "spring.profiles=a") void runWhenUsingInvalidPropertyThrowsException() { - assertThatExceptionOfType(InvalidConfigDataPropertyException.class) - .isThrownBy(() -> this.application.run("--spring.config.location=classpath:invalidproperty.properties")); + assertThatExceptionOfType(InvalidConfigDataPropertyException.class).isThrownBy(() -> this.application.run()); } @Test + @WithResource(name = "application.properties", content = """ + my.import=imported + spring.config.import=classpath:${my.import}.properties + """) + @WithResource(name = "imported.properties", content = "my.value=iwasimported") void runWhenImportUsesPlaceholder() { - ConfigurableApplicationContext context = this.application - .run("--spring.config.location=classpath:application-import-with-placeholder.properties"); + ConfigurableApplicationContext context = this.application.run(); assertThat(context.getEnvironment().getProperty("my.value")).isEqualTo("iwasimported"); } @Test + @WithResource(name = "application.properties", content = """ + my.import=imported + #--- + spring.config.import=classpath:${my.import}.properties + """) + @WithResource(name = "imported.properties", content = "my.value=iwasimported") void runWhenImportFromEarlierDocumentUsesPlaceholder() { - ConfigurableApplicationContext context = this.application - .run("--spring.config.location=classpath:application-import-with-placeholder-in-document.properties"); + ConfigurableApplicationContext context = this.application.run(); assertThat(context.getEnvironment().getProperty("my.value")).isEqualTo("iwasimported"); } @Test // gh-26858 + @WithResource(name = "application.properties", content = """ + spring.config.import=classpath:imported.properties + my.value=application.properties + """) + @WithResource(name = "imported.properties", content = "my.value=imported.properties") + @WithResource(name = "application-dev.properties", content = "my.value=application-dev.properties") void runWhenImportWithProfileVariantOrdersPropertySourcesCorrectly() { this.application.setAdditionalProfiles("dev"); - ConfigurableApplicationContext context = this.application - .run("--spring.config.location=classpath:application-import-with-profile-variant.properties"); - assertThat(context.getEnvironment().getProperty("my.value")) - .isEqualTo("application-import-with-profile-variant-imported-dev"); + ConfigurableApplicationContext context = this.application.run(); + assertThat(context.getEnvironment().getProperty("my.value")).isEqualTo("application-dev.properties"); } @Test + @WithResource(name = "application.properties", content = """ + spring.config.import=classpath:imported.properties + my.value=application.properties + """) + @WithResource(name = "imported.properties", content = "my.value=imported.properties") + @WithResource(name = "imported-dev.properties", content = "my.value=imported-dev.properties") + @WithResource(name = "application-dev.properties", content = """ + spring.config.import=imported-dev.properties + my.value=application-dev.properties""") void runWhenImportWithProfileVariantAndDirectProfileImportOrdersPropertySourcesCorrectly() { this.application.setAdditionalProfiles("dev"); - ConfigurableApplicationContext context = this.application.run( - "--spring.config.location=classpath:application-import-with-profile-variant-and-direct-profile-import.properties"); - assertThat(context.getEnvironment().getProperty("my.value")) - .isEqualTo("application-import-with-profile-variant-imported-dev"); + ConfigurableApplicationContext context = this.application.run(); + assertThat(context.getEnvironment().getProperty("my.value")).isEqualTo("imported-dev.properties"); } @Test + @WithResource(name = "application.properties", content = """ + my.import=application-import-with-placeholder-imported + #--- + spring.config.import=classpath:org/springframework/boot/context/config/${my.import}.properties + #--- + my.import=badbadbad + spring.config.activate.on-profile=missing + """) void runWhenHasPropertyInProfileDocumentThrowsException() { - assertThatExceptionOfType(BindException.class).isThrownBy(() -> this.application.run( - "--spring.config.location=classpath:application-import-with-placeholder-in-profile-document.properties")) + assertThatExceptionOfType(BindException.class).isThrownBy(() -> this.application.run()) .withCauseInstanceOf(InactiveConfigDataAccessException.class); } @Test // gh-29386 + @WithResource(name = "application.properties", content = """ + my.value=application + #--- + my.import=imported + spring.config.activate.on-profile=missing + #--- + spring.config.import=${my.import}.properties + """) + @WithResource(name = "imported.properties", content = "my.value=imported") void runWhenHasPropertyInEarlierProfileDocumentThrowsException() { - assertThatExceptionOfType(BindException.class).isThrownBy(() -> this.application.run( - "--spring.config.location=classpath:application-import-with-placeholder-in-earlier-profile-document.properties")) + assertThatExceptionOfType(BindException.class).isThrownBy(() -> this.application.run()) .withCauseInstanceOf(InactiveConfigDataAccessException.class); } @Test // gh-29386 + @WithResource(name = "application.properties", content = """ + my.import=imported + #--- + my.value=should-be-ignored + spring.config.activate.on-profile=missing + #--- + spring.config.import=classpath:${my.import}.properties + """) + @WithResource(name = "imported.properties", content = "my.value=imported") void runWhenHasPropertyInEarlierDocumentLoads() { - ConfigurableApplicationContext context = this.application.run( - "--spring.config.location=classpath:application-import-with-placeholder-in-earlier-document.properties"); - assertThat(context.getEnvironment().getProperty("my.value")) - .isEqualTo("application-import-with-placeholder-in-earlier-document-imported"); + ConfigurableApplicationContext context = this.application.run(); + assertThat(context.getEnvironment().getProperty("my.value")).isEqualTo("imported"); } @Test @@ -665,38 +994,69 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { } @Test + @WithResource(name = "application.properties", content = """ + spring.profiles.active=p1 + spring.profiles.include=p2 + #--- + spring.profiles.include=p3,p4 + #--- + spring.profiles.include=p5 + """) void runWhenHasIncludedProfilesActivatesProfiles() { - ConfigurableApplicationContext context = this.application - .run("--spring.config.location=classpath:application-include-profiles.properties"); + ConfigurableApplicationContext context = this.application.run(); assertThat(context.getEnvironment().getActiveProfiles()).containsExactlyInAnyOrder("p1", "p2", "p3", "p4", "p5"); } @Test + @WithResource(name = "application.properties", content = """ + spring.profiles.active=p1 + spring.profiles.include=p2 + #--- + myprofile=p4 + spring.profiles.include=p3,${myprofile} + #--- + myotherprofile=p5 + spring.profiles.include=${myotherprofile} + """) void runWhenHasIncludedProfilesWithPlaceholderActivatesProfiles() { - ConfigurableApplicationContext context = this.application - .run("--spring.config.location=classpath:application-include-profiles-with-placeholder.properties"); + ConfigurableApplicationContext context = this.application.run(); assertThat(context.getEnvironment().getActiveProfiles()).containsExactlyInAnyOrder("p1", "p2", "p3", "p4", "p5"); } @Test + @WithResource(name = "application.properties", content = """ + spring.profiles.active=p1 + spring.profiles.include=p2 + #--- + spring.config.activate.on-profile=p2 + spring.profiles.include=p3 + """) void runWhenHasIncludedProfilesWithProfileSpecificDocumentThrowsException() { - assertThatExceptionOfType(InactiveConfigDataAccessException.class).isThrownBy(() -> this.application.run( - "--spring.config.location=classpath:application-include-profiles-in-profile-specific-document.properties")); + assertThatExceptionOfType(InactiveConfigDataAccessException.class).isThrownBy(() -> this.application.run()); } @Test + @WithResource(name = "application-test.yaml", content = """ + spring: + profiles: + include: + - p + """) void runWhenHasIncludedProfilesWithListSyntaxWithProfileSpecificDocumentThrowsException() { - assertThatExceptionOfType(InvalidConfigDataPropertyException.class).isThrownBy(() -> this.application.run( - "--spring.config.name=application-include-profiles-list-in-profile-specific-file", - "--spring.profiles.active=test")); + assertThatExceptionOfType(InvalidConfigDataPropertyException.class) + .isThrownBy(() -> this.application.run("--spring.profiles.active=test")); } @Test + @WithResource(name = "application.properties", content = """ + my.import=imported + spring.config.import=classpath:${my.import}.properties + """) + @WithResource(name = "imported.properties", content = "my.value=imported") void runWhenImportingIncludesParentOrigin() { - ConfigurableApplicationContext context = this.application - .run("--spring.config.location=classpath:application-import-with-placeholder.properties"); + ConfigurableApplicationContext context = this.application.run(); Binder binder = Binder.get(context.getEnvironment()); List properties = new ArrayList<>(); BindHandler bindHandler = new BindHandler() { @@ -712,107 +1072,158 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { binder.bind("my.value", Bindable.of(String.class), bindHandler); assertThat(properties).hasSize(1); Origin origin = properties.get(0).getOrigin(); - assertThat(origin.toString()).contains("application-import-with-placeholder-imported"); - assertThat(origin.getParent().toString()).contains("application-import-with-placeholder"); + assertThat(origin.toString()).contains("imported.properties"); + assertThat(origin.getParent().toString()).contains("application.properties"); } @Test + @WithResource(name = "config/first/application.properties", content = "first.property=apple") + @WithResource(name = "config/second/application.properties", content = "second.property=ball") + @WithResource(name = "config/third/nested/application.properties", content = "third.property=three") void runWhenHasWildcardLocationLoadsFromAllMatchingLocations() { - ConfigurableApplicationContext context = this.application - .run("--spring.config.location=file:src/test/resources/config/*/", "--spring.config.name=testproperties"); + ConfigurableApplicationContext context = this.application.run("--spring.config.location=classpath:config/*/"); ConfigurableEnvironment environment = context.getEnvironment(); assertThat(environment.getProperty("first.property")).isEqualTo("apple"); assertThat(environment.getProperty("second.property")).isEqualTo("ball"); + assertThat(environment.getProperty("third.property")).isNull(); } @Test - void runWhenOptionalWildcardLocationDoesNotExistDoesNotThrowException() { + void runWhenOptionalWildcardFileDoesNotExistDoesNotThrowException() { assertThatNoException().isThrownBy(() -> this.application - .run("--spring.config.location=optional:file:src/test/resources/nonexistent/*/testproperties.properties")); + .run("--spring.config.location=optional:classpath:nonexistent/*/testproperties.properties")); } @Test - void runWhenMandatoryWildcardLocationDoesNotExistThrowsException() { + void runWhenMandatoryWildcardFileDoesNotExistThrowsException() { assertThatExceptionOfType(ConfigDataLocationNotFoundException.class).isThrownBy(() -> this.application - .run("--spring.config.location=file:src/test/resources/nonexistent/*/testproperties.properties")); + .run("--spring.config.location=classpath:nonexistent/*/testproperties.properties")); } @Test - void runWhenMandatoryWildcardLocationHasEmptyFileDirectory() { + @WithResourceDirectory("config/empty") + void runWhenMandatoryWildcardDirectoryHasEmptyDirectoryDoesNotThrowException() { + assertThatNoException().isThrownBy(() -> this.application.run("--spring.config.location=classpath:config/*/")); + } + + @Test + @WithResourceDirectory("config/empty") + void runWhenOptionalWildcardDirectoryHasNoSubdirectoriesDoesNotThrow() { assertThatNoException() - .isThrownBy(() -> this.application.run("--spring.config.location=file:src/test/resources/config/*/")); + .isThrownBy(() -> this.application.run("--spring.config.location=optional:classpath:config/*/")); } @Test - void runWhenMandatoryWildcardLocationHasNoSubdirectories() { + @WithResourceDirectory("config") + void runWhenMandatoryWildcardDirectoryHasNoSubdirectoriesThrows() { assertThatExceptionOfType(ConfigDataLocationNotFoundException.class) - .isThrownBy( - () -> this.application.run("--spring.config.location=file:src/test/resources/config/0-empty/*/")) - .withMessage("Config data location 'file:src/test/resources/config/0-empty/*/' contains no subdirectories"); + .isThrownBy(() -> this.application.run("--spring.config.location=classpath:config/*/")) + .withMessage("Config data location 'classpath:config/*/' contains no subdirectories"); } @Test - void runWhenHasMandatoryWildcardLocationThatDoesNotExist() { - assertThatExceptionOfType(ConfigDataLocationNotFoundException.class) - .isThrownBy(() -> this.application.run("--spring.config.location=file:invalid/*/")); - } - - @Test - void runWhenHasOptionalWildcardLocationThatDoesNotExistDoesNotThrow() { + void runWhenOptionalWildcardDirectoryDoesNotExistDoesNotThrowException() { assertThatNoException() .isThrownBy(() -> this.application.run("--spring.config.location=optional:file:invalid/*/")); } - @Test - void runWhenOptionalWildcardLocationHasNoSubdirectoriesDoesNotThrow() { - assertThatNoException().isThrownBy(() -> this.application - .run("--spring.config.location=optional:file:src/test/resources/config/0-empty/*/")); - } - @Test // gh-24990 + @WithResource(name = "application.properties", content = "spring.profiles.active=test,other") + @WithResource(name = "application-test.properties", content = """ + test1=test1 + #--- + spring.config.activate.on-profile=other + test2=test2 + """) void runWhenHasProfileSpecificFileWithActiveOnProfileProperty() { - ConfigurableApplicationContext context = this.application - .run("--spring.config.name=application-activate-on-profile-in-profile-specific-file"); + ConfigurableApplicationContext context = this.application.run(); ConfigurableEnvironment environment = context.getEnvironment(); assertThat(environment.getProperty("test1")).isEqualTo("test1"); assertThat(environment.getProperty("test2")).isEqualTo("test2"); } @Test // gh-26960 + @WithResource(name = "application.properties", content = """ + spring.profiles.active=p1,p2 + application=true + """) + @WithResource(name = "application-p1.properties", content = """ + application-p1=true + spring.config.import=import.properties + """) + @WithResource(name = "import.properties", content = "import=true") + @WithResource(name = "import-p1.properties", content = "import-p1=true") + @WithResource(name = "import-p2.properties", content = "import-p2=true") void runWhenHasProfileSpecificImportWithImportImportsSecondProfileSpecificFile() { - ConfigurableApplicationContext context = this.application - .run("--spring.config.name=application-profile-specific-import-with-import"); + ConfigurableApplicationContext context = this.application.run(); ConfigurableEnvironment environment = context.getEnvironment(); - assertThat(environment.containsProperty("application-profile-specific-import-with-import")).isTrue(); - assertThat(environment.containsProperty("application-profile-specific-import-with-import-p1")).isTrue(); - assertThat(environment.containsProperty("application-profile-specific-import-with-import-p2")).isFalse(); - assertThat(environment.containsProperty("application-profile-specific-import-with-import-import")).isTrue(); - assertThat(environment.containsProperty("application-profile-specific-import-with-import-import-p1")).isTrue(); - assertThat(environment.containsProperty("application-profile-specific-import-with-import-import-p2")).isTrue(); + assertThat(environment.containsProperty("application")).isTrue(); + assertThat(environment.containsProperty("application-p1")).isTrue(); + assertThat(environment.containsProperty("application-p2")).isFalse(); + assertThat(environment.containsProperty("import")).isTrue(); + assertThat(environment.containsProperty("import-p1")).isTrue(); + assertThat(environment.containsProperty("import-p2")).isTrue(); } @Test // gh-26960 + @WithResource(name = "application.properties", content = "spring.profiles.active=p1,p2") + @WithResource(name = "application-p1.properties", content = "spring.config.import:test:boot") + @WithResource(name = "META-INF/spring.factories", content = """ + org.springframework.boot.context.config.ConfigDataLocationResolver=\ + org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessorIntegrationTests$LocationResolver + + org.springframework.boot.context.config.ConfigDataLoader=\ + org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessorIntegrationTests$Loader + """) void runWhenHasProfileSpecificImportWithCustomImportResolvesProfileSpecific() { - ConfigurableApplicationContext context = this.application - .run("--spring.config.name=application-profile-specific-import-with-custom-import"); + ConfigurableApplicationContext context = this.application.run(); ConfigurableEnvironment environment = context.getEnvironment(); assertThat(environment.containsProperty("test:boot")).isTrue(); assertThat(environment.containsProperty("test:boot:ps")).isTrue(); } @Test // gh-26593 + @WithResource(name = "application.properties", content = """ + root=true + v1=root + v2=root + """) + @WithResource(name = "application-p1.properties", content = """ + root-p1=true + v1=root-p1 + v2=root-p1 + """) + @WithResource(name = "application-p2.properties", content = """ + root-p2=true + v1=root-p2 + v2=root-p2 + """) + @WithResource(name = "config/application.properties", content = """ + config=true + v1=config + v2=config + """) + @WithResource(name = "config/application-p1.properties", content = """ + config-p1=true + v1=config-p1 + #v2 intentionally missing + """) + @WithResource(name = "config/application-p2.properties", content = """ + config-p2=true + v1=config-p2 + #v2 intentionally missing + """) void runWhenHasFilesInRootAndConfigWithProfiles() { - ConfigurableApplicationContext context = this.application - .run("--spring.config.name=file-in-root-and-config-with-profile", "--spring.profiles.active=p1,p2"); + ConfigurableApplicationContext context = this.application.run("--spring.profiles.active=p1,p2"); ConfigurableEnvironment environment = context.getEnvironment(); - assertThat(environment.containsProperty("file-in-root-and-config-with-profile")).isTrue(); - assertThat(environment.containsProperty("file-in-root-and-config-with-profile-p1")).isTrue(); - assertThat(environment.containsProperty("file-in-root-and-config-with-profile-p2")).isTrue(); - assertThat(environment.containsProperty("config-file-in-root-and-config-with-profile")).isTrue(); - assertThat(environment.containsProperty("config-file-in-root-and-config-with-profile-p1")).isTrue(); - assertThat(environment.containsProperty("config-file-in-root-and-config-with-profile-p2")).isTrue(); - assertThat(environment.getProperty("v1")).isEqualTo("config-file-in-root-and-config-with-profile-p2"); - assertThat(environment.getProperty("v2")).isEqualTo("file-in-root-and-config-with-profile-p2"); + assertThat(environment.containsProperty("root")).isTrue(); + assertThat(environment.containsProperty("root-p1")).isTrue(); + assertThat(environment.containsProperty("root-p2")).isTrue(); + assertThat(environment.containsProperty("config")).isTrue(); + assertThat(environment.containsProperty("config-p1")).isTrue(); + assertThat(environment.containsProperty("config-p2")).isTrue(); + assertThat(environment.getProperty("v1")).isEqualTo("config-p2"); + assertThat(environment.getProperty("v2")).isEqualTo("root-p2"); } private Condition matchingPropertySource(final String sourceName) { @@ -820,21 +1231,12 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { @Override public boolean matches(ConfigurableEnvironment value) { - value.getPropertySources().forEach((ps) -> System.out.println(ps.getName())); return value.getPropertySources().contains(sourceName); } }; } - private void assertProfileExpression(String value, String... activeProfiles) { - this.application.setAdditionalProfiles(activeProfiles); - ConfigurableApplicationContext context = this.application.run("--spring.config.name=testprofileexpression", - "--spring.config.location=classpath:configdata/profiles/"); - String property = context.getEnvironment().getProperty("my.property"); - assertThat(property).isEqualTo(value); - } - @Configuration(proxyBeanMethods = false) static class Config { diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorTests.java index f7139ad750a..283b3be3a87 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,6 +27,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.boot.DefaultBootstrapContext; import org.springframework.boot.SpringApplication; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.core.env.StandardEnvironment; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.ResourceLoader; @@ -103,6 +104,8 @@ class ConfigDataEnvironmentPostProcessorTests { } @Test + @WithResource(name = "application.properties", content = "property=value") + @WithResource(name = "application-dev.properties", content = "property=dev-value") void applyToAppliesPostProcessing() { int before = this.environment.getPropertySources().size(); TestConfigDataEnvironmentUpdateListener listener = new TestConfigDataEnvironmentUpdateListener(); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentTests.java index d602bf21544..656e93c2670 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,6 @@ package org.springframework.boot.context.config; -import java.io.File; import java.io.IOException; import java.net.URL; import java.util.Collection; @@ -28,7 +27,6 @@ import java.util.Map; import java.util.function.Supplier; import org.assertj.core.api.InstanceOfAssertFactories; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInfo; import org.junit.jupiter.params.ParameterizedTest; @@ -42,6 +40,7 @@ import org.springframework.boot.context.config.ConfigDataEnvironmentContributor. import org.springframework.boot.context.config.TestConfigDataEnvironmentUpdateListener.AddedPropertySource; import org.springframework.boot.context.properties.bind.Binder; import org.springframework.boot.logging.DeferredLogFactory; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.core.env.ConfigurableEnvironment; @@ -149,8 +148,8 @@ class ConfigDataEnvironmentTests { } @Test - void processAndApplyAddsImportedSourceToEnvironment(TestInfo info) { - this.environment.setProperty("spring.config.location", getConfigLocation(info)); + @WithResource(name = "application.properties", content = "spring=boot") + void processAndApplyAddsImportedSourceToEnvironment() { ConfigDataEnvironment configDataEnvironment = new ConfigDataEnvironment(this.logFactory, this.bootstrapContext, this.environment, this.resourceLoader, this.additionalProfiles, null); configDataEnvironment.processAndApply(); @@ -158,8 +157,14 @@ class ConfigDataEnvironmentTests { } @Test - void processAndApplyOnlyAddsActiveContributors(TestInfo info) { - this.environment.setProperty("spring.config.location", getConfigLocation(info)); + @WithResource(name = "application.properties", content = """ + spring=boot + #--- + spring.config.activate.on-profile=missing + other=value + No newline at end of file + """) + void processAndApplyOnlyAddsActiveContributors() { ConfigDataEnvironment configDataEnvironment = new ConfigDataEnvironment(this.logFactory, this.bootstrapContext, this.environment, this.resourceLoader, this.additionalProfiles, null); configDataEnvironment.processAndApply(); @@ -180,8 +185,8 @@ class ConfigDataEnvironmentTests { } @Test + @WithResource(name = "application.properties", content = "spring.profiles.default=one,two,three") void processAndApplySetsDefaultProfiles(TestInfo info) { - this.environment.setProperty("spring.config.location", getConfigLocation(info)); ConfigDataEnvironment configDataEnvironment = new ConfigDataEnvironment(this.logFactory, this.bootstrapContext, this.environment, this.resourceLoader, this.additionalProfiles, null); configDataEnvironment.processAndApply(); @@ -189,8 +194,8 @@ class ConfigDataEnvironmentTests { } @Test - void processAndApplySetsActiveProfiles(TestInfo info) { - this.environment.setProperty("spring.config.location", getConfigLocation(info)); + @WithResource(name = "application.properties", content = "spring.profiles.active=one,two,three") + void processAndApplySetsActiveProfiles() { ConfigDataEnvironment configDataEnvironment = new ConfigDataEnvironment(this.logFactory, this.bootstrapContext, this.environment, this.resourceLoader, this.additionalProfiles, null); configDataEnvironment.processAndApply(); @@ -198,8 +203,11 @@ class ConfigDataEnvironmentTests { } @Test - void processAndApplySetsActiveProfilesAndProfileGroups(TestInfo info) { - this.environment.setProperty("spring.config.location", getConfigLocation(info)); + @WithResource(name = "application.properties", content = """ + spring.profiles.active=one,two,three + spring.profiles.group.one=four,five + """) + void processAndApplySetsActiveProfilesAndProfileGroups() { ConfigDataEnvironment configDataEnvironment = new ConfigDataEnvironment(this.logFactory, this.bootstrapContext, this.environment, this.resourceLoader, this.additionalProfiles, null); configDataEnvironment.processAndApply(); @@ -207,8 +215,8 @@ class ConfigDataEnvironmentTests { } @Test + @WithResource(name = "application.properties", content = "spring.profiles.active=test") void processAndApplyDoesNotSetProfilesFromIgnoreProfilesContributors(TestInfo info) { - this.environment.setProperty("spring.config.location", getConfigLocation(info)); ConfigDataEnvironment configDataEnvironment = new ConfigDataEnvironment(this.logFactory, this.bootstrapContext, this.environment, this.resourceLoader, this.additionalProfiles, null) { @@ -281,8 +289,8 @@ class ConfigDataEnvironmentTests { } @Test + @WithResource(name = "application.properties", content = "spring=boot") void processAndApplyDoesNotSetProfilesFromIgnoreProfilesContributorsWhenNoProfilesActive(TestInfo info) { - this.environment.setProperty("spring.config.location", getConfigLocation(info)); ConfigDataEnvironment configDataEnvironment = new ConfigDataEnvironment(this.logFactory, this.bootstrapContext, this.environment, this.resourceLoader, this.additionalProfiles, null) { @@ -307,9 +315,8 @@ class ConfigDataEnvironmentTests { } @Test - @Disabled("Disabled until spring.profiles support is dropped") void processAndApplyWhenHasInvalidPropertyThrowsException() { - this.environment.setProperty("spring.profile", "a"); + this.environment.setProperty("spring.profiles", "a"); ConfigDataEnvironment configDataEnvironment = new ConfigDataEnvironment(this.logFactory, this.bootstrapContext, this.environment, this.resourceLoader, this.additionalProfiles, null); assertThatExceptionOfType(InvalidConfigDataPropertyException.class) @@ -317,8 +324,9 @@ class ConfigDataEnvironmentTests { } @Test + @WithResource(name = "custom/config.properties", content = "spring=boot") void processAndApplyWhenHasListenerCallsOnPropertySourceAdded(TestInfo info) { - this.environment.setProperty("spring.config.location", getConfigLocation(info)); + this.environment.setProperty("spring.config.location", "classpath:custom/config.properties"); TestConfigDataEnvironmentUpdateListener listener = new TestConfigDataEnvironmentUpdateListener(); ConfigDataEnvironment configDataEnvironment = new ConfigDataEnvironment(this.logFactory, this.bootstrapContext, this.environment, this.resourceLoader, this.additionalProfiles, listener); @@ -326,14 +334,14 @@ class ConfigDataEnvironmentTests { assertThat(listener.getAddedPropertySources()).hasSize(1); AddedPropertySource addedPropertySource = listener.getAddedPropertySources().get(0); assertThat(addedPropertySource.getPropertySource().getProperty("spring")).isEqualTo("boot"); - assertThat(addedPropertySource.getLocation()).hasToString(getConfigLocation(info)); + assertThat(addedPropertySource.getLocation()).hasToString("classpath:custom/config.properties"); assertThat(addedPropertySource.getResource().toString()).contains("class path resource") - .contains(info.getTestMethod().get().getName()); + .contains("custom/config.properties"); } @Test + @WithResource(name = "application.properties", content = "spring.profiles.active=one,two,three") void processAndApplyWhenHasListenerCallsOnSetProfiles(TestInfo info) { - this.environment.setProperty("spring.config.location", getConfigLocation(info)); TestConfigDataEnvironmentUpdateListener listener = new TestConfigDataEnvironmentUpdateListener(); ConfigDataEnvironment configDataEnvironment = new ConfigDataEnvironment(this.logFactory, this.bootstrapContext, this.environment, this.resourceLoader, this.additionalProfiles, listener); @@ -343,17 +351,18 @@ class ConfigDataEnvironmentTests { @Test @SuppressWarnings("rawtypes") + @WithResource(name = "separate-class-loader-spring.factories", content = """ + org.springframework.boot.context.config.ConfigDataLoader=\ + org.springframework.boot.context.config.ConfigDataEnvironmentTests$SeparateClassLoaderConfigDataLoader + """) void configDataLoadersAreLoadedUsingClassLoaderFromResourceLoader() { ResourceLoader resourceLoader = mock(ResourceLoader.class); - ClassLoader classLoader = new ClassLoader() { + ClassLoader classLoader = new ClassLoader(Thread.currentThread().getContextClassLoader()) { @Override public Enumeration getResources(String name) throws IOException { if (SpringFactoriesLoader.FACTORIES_RESOURCE_LOCATION.equals(name)) { - return Collections.enumeration(List.of(new File( - "src/test/resources/org/springframework/boot/context/config/separate-class-loader-spring.factories") - .toURI() - .toURL())); + return super.getResources("separate-class-loader-spring.factories"); } return super.getResources(name); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataLocationRuntimeHintsTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataLocationRuntimeHintsTests.java index e4a822bd4db..7db561f8198 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataLocationRuntimeHintsTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataLocationRuntimeHintsTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,6 +28,7 @@ import org.springframework.aot.hint.RuntimeHints; import org.springframework.boot.env.PropertiesPropertySourceLoader; import org.springframework.boot.env.PropertySourceLoader; import org.springframework.boot.env.YamlPropertySourceLoader; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.core.io.support.SpringFactoriesLoader; import org.springframework.core.test.io.support.MockSpringFactoriesLoader; @@ -41,9 +42,11 @@ import static org.assertj.core.api.Assertions.assertThat; class ConfigDataLocationRuntimeHintsTests { @Test + @WithResource(name = "application.properties", content = "") + @WithResource(name = "config/application.properties", content = "") void registerWithDefaultSettings() { RuntimeHints hints = new RuntimeHints(); - new TestConfigDataLocationRuntimeHints().registerHints(hints, null); + new TestConfigDataLocationRuntimeHints().registerHints(hints, Thread.currentThread().getContextClassLoader()); assertThat(hints.resources().resourcePatternHints()).singleElement() .satisfies(includes("application*.properties", "application*.xml", "application*.yaml", "application*.yml", "config/application*.properties", "config/application*.xml", "config/application*.yaml", @@ -51,6 +54,8 @@ class ConfigDataLocationRuntimeHintsTests { } @Test + @WithResource(name = "test.properties") + @WithResource(name = "config/test.properties") void registerWithCustomName() { RuntimeHints hints = new RuntimeHints(); new TestConfigDataLocationRuntimeHints() { @@ -59,13 +64,15 @@ class ConfigDataLocationRuntimeHintsTests { return List.of("test"); } - }.registerHints(hints, null); + }.registerHints(hints, Thread.currentThread().getContextClassLoader()); assertThat(hints.resources().resourcePatternHints()).singleElement() .satisfies(includes("test*.properties", "test*.xml", "test*.yaml", "test*.yml", "config/test*.properties", "config/test*.xml", "config/test*.yaml", "config/test*.yml")); } @Test + @WithResource(name = "application.properties") + @WithResource(name = "config/application.properties") void registerWithCustomLocation() { RuntimeHints hints = new RuntimeHints(); new TestConfigDataLocationRuntimeHints() { @@ -73,13 +80,15 @@ class ConfigDataLocationRuntimeHintsTests { protected List getLocations(ClassLoader classLoader) { return List.of("config/"); } - }.registerHints(hints, null); + }.registerHints(hints, Thread.currentThread().getContextClassLoader()); assertThat(hints.resources().resourcePatternHints()).singleElement() .satisfies(includes("config/application*.properties", "config/application*.xml", "config/application*.yaml", "config/application*.yml")); } @Test + @WithResource(name = "application.conf") + @WithResource(name = "config/application.conf") void registerWithCustomExtension() { RuntimeHints hints = new RuntimeHints(); new ConfigDataLocationRuntimeHints() { @@ -87,7 +96,7 @@ class ConfigDataLocationRuntimeHintsTests { protected List getExtensions(ClassLoader classLoader) { return List.of(".conf"); } - }.registerHints(hints, null); + }.registerHints(hints, Thread.currentThread().getContextClassLoader()); assertThat(hints.resources().resourcePatternHints()).singleElement() .satisfies(includes("application*.conf", "config/application*.conf")); } @@ -100,7 +109,7 @@ class ConfigDataLocationRuntimeHintsTests { protected List getLocations(ClassLoader classLoader) { return List.of(UUID.randomUUID().toString()); } - }.registerHints(hints, null); + }.registerHints(hints, Thread.currentThread().getContextClassLoader()); assertThat(hints.resources().resourcePatternHints()).isEmpty(); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/StandardConfigDataLoaderTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/StandardConfigDataLoaderTests.java index 908c4a29c0f..ad06f8e77cb 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/StandardConfigDataLoaderTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/StandardConfigDataLoaderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,6 +22,7 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.env.PropertiesPropertySourceLoader; import org.springframework.boot.env.YamlPropertySourceLoader; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.core.env.PropertySource; import org.springframework.core.io.ClassPathResource; @@ -41,32 +42,36 @@ class StandardConfigDataLoaderTests { private final ConfigDataLoaderContext loaderContext = mock(ConfigDataLoaderContext.class); @Test + @WithResource(name = "application.yml", content = """ + foo: bar + --- + hello: world + """) void loadWhenLocationResultsInMultiplePropertySourcesAddsAllToConfigData() throws IOException { - ClassPathResource resource = new ClassPathResource("configdata/yaml/application.yml"); + ClassPathResource resource = new ClassPathResource("application.yml"); StandardConfigDataReference reference = new StandardConfigDataReference( - ConfigDataLocation.of("classpath:configdata/yaml/application.yml"), null, - "classpath:configdata/yaml/application", null, "yml", new YamlPropertySourceLoader()); + ConfigDataLocation.of("classpath:application.yml"), null, "classpath:application", null, "yml", + new YamlPropertySourceLoader()); StandardConfigDataResource location = new StandardConfigDataResource(reference, resource); ConfigData configData = this.loader.load(this.loaderContext, location); assertThat(configData.getPropertySources()).hasSize(2); PropertySource source1 = configData.getPropertySources().get(0); PropertySource source2 = configData.getPropertySources().get(1); - assertThat(source1.getName()) - .isEqualTo("Config resource 'class path resource [configdata/yaml/application.yml]' " - + "via location 'classpath:configdata/yaml/application.yml' (document #0)"); + assertThat(source1.getName()).isEqualTo("Config resource 'class path resource [application.yml]' " + + "via location 'classpath:application.yml' (document #0)"); assertThat(source1.getProperty("foo")).isEqualTo("bar"); - assertThat(source2.getName()) - .isEqualTo("Config resource 'class path resource [configdata/yaml/application.yml]' " - + "via location 'classpath:configdata/yaml/application.yml' (document #1)"); + assertThat(source2.getName()).isEqualTo("Config resource 'class path resource [application.yml]' " + + "via location 'classpath:application.yml' (document #1)"); assertThat(source2.getProperty("hello")).isEqualTo("world"); } @Test + @WithResource(name = "empty.properties") void loadWhenPropertySourceIsEmptyAddsNothingToConfigData() throws IOException { - ClassPathResource resource = new ClassPathResource("config/0-empty/testproperties.properties"); + ClassPathResource resource = new ClassPathResource("empty.properties"); StandardConfigDataReference reference = new StandardConfigDataReference( - ConfigDataLocation.of("classpath:config/0-empty/testproperties.properties"), null, - "config/0-empty/testproperties", null, "properties", new PropertiesPropertySourceLoader()); + ConfigDataLocation.of("empty.properties"), null, "empty", null, "properties", + new PropertiesPropertySourceLoader()); StandardConfigDataResource location = new StandardConfigDataResource(reference, resource); ConfigData configData = this.loader.load(this.loaderContext, location); assertThat(configData.getPropertySources()).isEmpty(); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/StandardConfigDataLocationResolverTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/StandardConfigDataLocationResolverTests.java index 6b221e15f2b..83291ff7f07 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/StandardConfigDataLocationResolverTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/StandardConfigDataLocationResolverTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ package org.springframework.boot.context.config; import java.io.File; +import java.nio.file.Path; import java.util.Collections; import java.util.List; @@ -26,6 +27,8 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.context.properties.bind.Binder; import org.springframework.boot.env.PropertiesPropertySourceLoader; import org.springframework.boot.logging.DeferredLogs; +import org.springframework.boot.testsupport.classpath.resources.ResourcesRoot; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.core.env.PropertySource; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.DefaultResourceLoader; @@ -71,23 +74,22 @@ class StandardConfigDataLocationResolverTests { } @Test + @WithResource(name = "configdata/application.properties") void resolveWhenLocationIsDirectoryResolvesAllMatchingFilesInDirectory() { - ConfigDataLocation location = ConfigDataLocation.of("classpath:/configdata/properties/"); + ConfigDataLocation location = ConfigDataLocation.of("classpath:/configdata/"); List locations = this.resolver.resolve(this.context, location); assertThat(locations).hasSize(1); assertThat(locations).extracting(Object::toString) - .containsExactly("class path resource [configdata/properties/application.properties]"); + .containsExactly("class path resource [configdata/application.properties]"); } @Test void resolveWhenLocationIsFileResolvesFile() { - ConfigDataLocation location = ConfigDataLocation - .of("file:src/test/resources/configdata/properties/application.properties"); + ConfigDataLocation location = ConfigDataLocation.of("file:configdata/application.properties"); List locations = this.resolver.resolve(this.context, location); assertThat(locations).hasSize(1); assertThat(locations).extracting(Object::toString) - .containsExactly( - filePath("src", "test", "resources", "configdata", "properties", "application.properties")); + .containsExactly(filePath("configdata", "application.properties")); } @Test @@ -143,49 +145,55 @@ class StandardConfigDataLocationResolverTests { } @Test - void resolveWhenLocationIsWildcardDirectoriesRestrictsToOneLevelDeep() { - ConfigDataLocation location = ConfigDataLocation.of("file:src/test/resources/config/*/"); + @WithResource(name = "config/0-empty/testproperties.properties") + @WithResource(name = "config/1-first/testproperties.properties", content = "first.property=apple") + @WithResource(name = "config/2-second/testproperties.properties", content = "second.property=ball") + @WithResource(name = "config/nested/3-third/testproperties.properties", content = "third.property=shouldnotbefound") + void resolveWhenLocationIsWildcardDirectoriesRestrictsToOneLevelDeep(@ResourcesRoot Path resourcesRoot) { + ConfigDataLocation location = ConfigDataLocation.of("file:" + resourcesRoot + "/config/*/"); this.environment.setProperty("spring.config.name", "testproperties"); this.resolver = new StandardConfigDataLocationResolver(new DeferredLogs(), this.environmentBinder, this.resourceLoader); List locations = this.resolver.resolve(this.context, location); assertThat(locations).hasSize(3); assertThat(locations).extracting(Object::toString) - .contains(filePath("src", "test", "resources", "config", "1-first", "testproperties.properties")) - .contains(filePath("src", "test", "resources", "config", "2-second", "testproperties.properties")) - .doesNotContain(filePath("src", "test", "resources", "config", "3-third", "testproperties.properties")); + .contains(filePath(resourcesRoot.resolve("config/1-first/testproperties.properties"))) + .contains(filePath(resourcesRoot.resolve("config/2-second/testproperties.properties"))) + .doesNotContain(filePath(resourcesRoot.resolve("config/nested/3-third/testproperties.properties"))); } @Test - void resolveWhenLocationIsWildcardDirectoriesSortsAlphabeticallyBasedOnAbsolutePath() { - ConfigDataLocation location = ConfigDataLocation.of("file:src/test/resources/config/*/"); + @WithResource(name = "config/0-empty/testproperties.properties") + @WithResource(name = "config/1-first/testproperties.properties", content = "first.property=apple") + @WithResource(name = "config/2-second/testproperties.properties", content = "second.property=ball") + @WithResource(name = "config/nested/3-third/testproperties.properties", content = "third.property=shouldnotbefound") + void resolveWhenLocationIsWildcardDirectoriesSortsAlphabeticallyBasedOnAbsolutePath( + @ResourcesRoot Path resourcesRoot) { + ConfigDataLocation location = ConfigDataLocation.of("file:" + resourcesRoot + "/config/*/"); this.environment.setProperty("spring.config.name", "testproperties"); this.resolver = new StandardConfigDataLocationResolver(new DeferredLogs(), this.environmentBinder, this.resourceLoader); List locations = this.resolver.resolve(this.context, location); assertThat(locations).extracting(Object::toString) - .containsExactly(filePath("src", "test", "resources", "config", "0-empty", "testproperties.properties"), - filePath("src", "test", "resources", "config", "1-first", "testproperties.properties"), - filePath("src", "test", "resources", "config", "2-second", "testproperties.properties")); + .containsExactly(filePath(resourcesRoot.resolve("config/0-empty/testproperties.properties")), + filePath(resourcesRoot.resolve("config/1-first/testproperties.properties")), + filePath(resourcesRoot.resolve("config/2-second/testproperties.properties"))); } @Test - void resolveWhenLocationIsWildcardAndMatchingFilePresentShouldNotFail() { - ConfigDataLocation location = ConfigDataLocation.of("optional:file:src/test/resources/a-file/*/"); - assertThatNoException().isThrownBy(() -> this.resolver.resolve(this.context, location)); - } - - @Test - void resolveWhenLocationIsWildcardFilesLoadsAllFilesThatMatch() { + @WithResource(name = "config/0-empty/testproperties.properties") + @WithResource(name = "config/1-first/testproperties.properties", content = "first.property=apple") + @WithResource(name = "config/2-second/testproperties.properties", content = "second.property=ball") + @WithResource(name = "config/nested/3-third/testproperties.properties", content = "third.property=shouldnotbefound") + void resolveWhenLocationIsWildcardFilesLoadsAllFilesThatMatch(@ResourcesRoot Path resourcesRoot) { ConfigDataLocation location = ConfigDataLocation - .of("file:src/test/resources/config/*/testproperties.properties"); + .of("file:" + resourcesRoot + "/config/*/testproperties.properties"); List locations = this.resolver.resolve(this.context, location); assertThat(locations).hasSize(3); assertThat(locations).extracting(Object::toString) - .contains(filePath("src", "test", "resources", "config", "1-first", "testproperties.properties")) - .contains(filePath("src", "test", "resources", "config", "2-second", "testproperties.properties")) - .doesNotContain( - filePath("src", "test", "resources", "config", "nested", "3-third", "testproperties.properties")); + .contains(filePath(resourcesRoot.resolve("config/1-first/testproperties.properties"))) + .contains(filePath(resourcesRoot.resolve("config/2-second/testproperties.properties"))) + .doesNotContain(filePath(resourcesRoot.resolve("config/nested/3-third/testproperties.properties"))); } @Test @@ -208,6 +216,8 @@ class StandardConfigDataLocationResolverTests { } @Test + @WithResource(name = "config/specific.properties") + @WithResource(name = "config/nested/3-third/testproperties.properties") void resolveWhenLocationIsRelativeAndDirectoryResolves() { this.environment.setProperty("spring.config.name", "testproperties"); ConfigDataLocation location = ConfigDataLocation.of("nested/3-third/"); @@ -240,6 +250,7 @@ class StandardConfigDataLocationResolverTests { } @Test + @WithResource(name = "application-props-no-extension", content = "withnoextension=test") void resolveWhenLocationUsesOptionalExtensionSyntaxResolves() throws Exception { ConfigDataLocation location = ConfigDataLocation.of("classpath:/application-props-no-extension[.properties]"); List locations = this.resolver.resolve(this.context, location); @@ -248,19 +259,20 @@ class StandardConfigDataLocationResolverTests { assertThat(resolved.getResource().getFilename()).endsWith("application-props-no-extension"); ConfigData loaded = new StandardConfigDataLoader().load(null, resolved); PropertySource propertySource = loaded.getPropertySources().get(0); - assertThat(propertySource.getProperty("withnotext")).isEqualTo("test"); + assertThat(propertySource.getProperty("withnoextension")).isEqualTo("test"); } @Test + @WithResource(name = "application-dev.properties") void resolveProfileSpecificReturnsProfileSpecificFiles() { - ConfigDataLocation location = ConfigDataLocation.of("classpath:/configdata/properties/"); + ConfigDataLocation location = ConfigDataLocation.of("classpath:/"); Profiles profiles = mock(Profiles.class); given(profiles.iterator()).willReturn(Collections.singletonList("dev").iterator()); List locations = this.resolver.resolveProfileSpecific(this.context, location, profiles); assertThat(locations).hasSize(1); assertThat(locations).extracting(Object::toString) - .containsExactly("class path resource [configdata/properties/application-dev.properties]"); + .containsExactly("class path resource [application-dev.properties]"); } @Test @@ -297,4 +309,8 @@ class StandardConfigDataLocationResolverTests { return "file [" + String.join(File.separator, components) + "]"; } + private String filePath(Path path) { + return "file [%s]".formatted(path); + } + } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/logging/LoggingApplicationListenerTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/logging/LoggingApplicationListenerTests.java index 1d8c729d22e..44191581879 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/logging/LoggingApplicationListenerTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/logging/LoggingApplicationListenerTests.java @@ -18,6 +18,10 @@ package org.springframework.boot.context.logging; import java.io.File; import java.io.IOException; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import java.nio.file.Path; import java.util.Collections; import java.util.HashMap; @@ -62,6 +66,7 @@ import org.springframework.boot.logging.LoggingSystemProperty; import org.springframework.boot.logging.java.JavaLoggingSystem; import org.springframework.boot.system.ApplicationPid; import org.springframework.boot.testsupport.classpath.ClassPathExclusions; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.boot.testsupport.system.CapturedOutput; import org.springframework.boot.testsupport.system.OutputCaptureExtension; import org.springframework.context.ApplicationEvent; @@ -160,8 +165,9 @@ class LoggingApplicationListenerTests { } @Test + @WithNonDefaultXmlResource void overrideConfigLocation() { - addPropertiesToEnvironment(this.context, "logging.config=classpath:logback-nondefault.xml"); + addPropertiesToEnvironment(this.context, "logging.config=classpath:nondefault.xml"); this.listener.initialize(this.context.getEnvironment(), this.context.getClassLoader()); this.logger.info("Hello world"); assertThat(this.output).contains("Hello world").doesNotContain("???").startsWith("null ").endsWith("BOOTBOOT"); @@ -178,8 +184,9 @@ class LoggingApplicationListenerTests { } @Test + @WithNonDefaultXmlResource void trailingWhitespaceInLoggingConfigShouldBeTrimmed() { - addPropertiesToEnvironment(this.context, "logging.config=classpath:logback-nondefault.xml "); + addPropertiesToEnvironment(this.context, "logging.config=classpath:nondefault.xml "); this.listener.initialize(this.context.getEnvironment(), this.context.getClassLoader()); this.logger.info("Hello world"); assertThat(this.output).contains("Hello world").doesNotContain("???").startsWith("null ").endsWith("BOOTBOOT"); @@ -226,8 +233,9 @@ class LoggingApplicationListenerTests { } @Test + @WithNonDefaultXmlResource void addLogFileProperty() { - addPropertiesToEnvironment(this.context, "logging.config=classpath:logback-nondefault.xml", + addPropertiesToEnvironment(this.context, "logging.config=classpath:nondefault.xml", "logging.file.name=" + this.logFile); this.listener.initialize(this.context.getEnvironment(), this.context.getClassLoader()); Log logger = LogFactory.getLog(LoggingApplicationListenerTests.class); @@ -248,8 +256,9 @@ class LoggingApplicationListenerTests { } @Test + @WithNonDefaultXmlResource void addLogPathProperty() { - addPropertiesToEnvironment(this.context, "logging.config=classpath:logback-nondefault.xml", + addPropertiesToEnvironment(this.context, "logging.config=classpath:nondefault.xml", "logging.file.path=" + this.tempDir); this.listener.initialize(this.context.getEnvironment(), this.context.getClassLoader()); Log logger = LogFactory.getLog(LoggingApplicationListenerTests.class); @@ -779,4 +788,22 @@ class LoggingApplicationListenerTests { } + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.RUNTIME) + @WithResource(name = "nondefault.xml", content = """ + + + + %property{LOG_FILE} [%t] ${PID:-????} %c{1}: %m%n BOOTBOOT + + + + + + + """) + private @interface WithNonDefaultXmlResource { + + } + } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/ConfigurationPropertiesTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/ConfigurationPropertiesTests.java index a290f0a4950..f666137e211 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/ConfigurationPropertiesTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/ConfigurationPropertiesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -69,6 +69,7 @@ import org.springframework.boot.convert.PeriodFormat; import org.springframework.boot.convert.PeriodStyle; import org.springframework.boot.convert.PeriodUnit; import org.springframework.boot.env.RandomValuePropertySource; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.boot.testsupport.system.CapturedOutput; import org.springframework.boot.testsupport.system.OutputCaptureExtension; import org.springframework.context.annotation.AnnotationConfigApplicationContext; @@ -260,6 +261,21 @@ class ConfigurationPropertiesTests { } @Test + @WithResource(name = "testProperties.xml", + content = """ + + + + + + + + + """) void loadWhenBindingWithDefaultsInXmlShouldBind() { removeSystemProperties(); load(new Class[] { DefaultsInXmlConfiguration.class }); @@ -633,6 +649,7 @@ class ConfigurationPropertiesTests { } @Test + @WithResource(name = "application.properties") void customProtocolResolver() { this.context = new AnnotationConfigApplicationContext(); TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.context, @@ -1356,7 +1373,7 @@ class ConfigurationPropertiesTests { @Configuration(proxyBeanMethods = false) @EnableConfigurationProperties - @ImportResource("org/springframework/boot/context/properties/testProperties.xml") + @ImportResource("testProperties.xml") static class DefaultsInXmlConfiguration { } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/StringToFileConverterTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/StringToFileConverterTests.java index a3cb2b37af0..015e6ab1cfa 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/StringToFileConverterTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/StringToFileConverterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ import java.util.stream.Stream; import org.junit.jupiter.api.io.TempDir; import org.junit.jupiter.params.provider.Arguments; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.core.convert.ConversionService; import org.springframework.core.io.ClassPathResource; @@ -52,9 +53,10 @@ class StringToFileConverterTests { } @ConversionServiceTest + @WithResource(name = "com/example/test-file.txt", content = "test content") void convertWhenClasspathPrefixedReturnsFile(ConversionService conversionService) throws IOException { - String resource = new ClassPathResource("test-banner.txt", this.getClass().getClassLoader()).getURL().getFile(); - assertThat(convert(conversionService, "classpath:test-banner.txt").getAbsoluteFile()) + String resource = new ClassPathResource("com/example/test-file.txt").getURL().getFile(); + assertThat(convert(conversionService, "classpath:com/example/test-file.txt").getAbsoluteFile()) .isEqualTo(new File(resource).getAbsoluteFile()); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/diagnostics/analyzer/NoUniqueBeanDefinitionFailureAnalyzerTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/diagnostics/analyzer/NoUniqueBeanDefinitionFailureAnalyzerTests.java index e8600faabe2..550b0deb657 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/diagnostics/analyzer/NoUniqueBeanDefinitionFailureAnalyzerTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/diagnostics/analyzer/NoUniqueBeanDefinitionFailureAnalyzerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.diagnostics.FailureAnalysis; import org.springframework.boot.diagnostics.analyzer.nounique.TestBean; import org.springframework.boot.diagnostics.analyzer.nounique.TestBeanConsumer; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -38,6 +39,17 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Andy Wilkinson * @author Scott Frederick */ +@WithResource(name = "producer.xml", + content = """ + + + + + + + """) class NoUniqueBeanDefinitionFailureAnalyzerTests { private final AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); @@ -78,6 +90,17 @@ class NoUniqueBeanDefinitionFailureAnalyzerTests { } @Test + @WithResource(name = "consumer.xml", + content = """ + + + + + + + """) void failureAnalysisForXmlConsumer() { FailureAnalysis failureAnalysis = analyzeFailure(createFailure(XmlConsumer.class)); assertThat(failureAnalysis.getDescription()).startsWith("Parameter 0 of constructor in " @@ -131,7 +154,7 @@ class NoUniqueBeanDefinitionFailureAnalyzerTests { @Configuration(proxyBeanMethods = false) @ComponentScan(basePackageClasses = TestBean.class) - @ImportResource("/org/springframework/boot/diagnostics/analyzer/nounique/producer.xml") + @ImportResource("classpath:producer.xml") static class DuplicateBeansProducer { @Bean @@ -200,7 +223,7 @@ class NoUniqueBeanDefinitionFailureAnalyzerTests { } @Configuration(proxyBeanMethods = false) - @ImportResource("/org/springframework/boot/diagnostics/analyzer/nounique/consumer.xml") + @ImportResource("classpath:consumer.xml") static class XmlConsumer { } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedPropertiesLoaderTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedPropertiesLoaderTests.java index 6fdb3e743bb..e5f3e7d399e 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedPropertiesLoaderTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedPropertiesLoaderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,6 +26,7 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.env.OriginTrackedPropertiesLoader.Document; import org.springframework.boot.origin.OriginTrackedValue; import org.springframework.boot.origin.TextResourceOrigin; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.support.PropertiesLoaderUtils; @@ -92,9 +93,10 @@ class OriginTrackedPropertiesLoaderTests { } @Test + @WithResource(name = "malformed-unicode.properties", content = "test-malformed-unicode=properties\\u(026test") void getMalformedUnicodeProperty() { // gh-12716 - ClassPathResource resource = new ClassPathResource("test-properties-malformed-unicode.properties", getClass()); + ClassPathResource resource = new ClassPathResource("malformed-unicode.properties"); assertThatIllegalStateException().isThrownBy(() -> new OriginTrackedPropertiesLoader(resource).load()) .withMessageContaining("Malformed \\uxxxx encoding"); } @@ -326,8 +328,43 @@ class OriginTrackedPropertiesLoaderTests { } @Test + @WithResource(name = "existing-non-multi-document.properties", content = """ + #--- + # Test + #--- + + spring=boot + + #--- + # Test + + boot=bar + + + # Test + #--- + + bar=ok + + !--- + ! Test + !--- + + ok=well + + !--- + ! Test + + well=hello + + ! Test + !--- + + hello=world + + """) void existingCommentsAreNotTreatedAsMultiDoc() throws Exception { - this.resource = new ClassPathResource("existing-non-multi-document.properties", getClass()); + this.resource = new ClassPathResource("existing-non-multi-document.properties"); this.documents = new OriginTrackedPropertiesLoader(this.resource).load(); assertThat(this.documents).hasSize(1); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedYamlLoaderTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedYamlLoaderTests.java index ce5fa86434b..ccabf50b370 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedYamlLoaderTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedYamlLoaderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,10 @@ package org.springframework.boot.env; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.List; @@ -27,6 +31,7 @@ import org.yaml.snakeyaml.composer.ComposerException; import org.springframework.boot.origin.OriginTrackedValue; import org.springframework.boot.origin.TextResourceOrigin; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; @@ -48,11 +53,12 @@ class OriginTrackedYamlLoaderTests { @BeforeEach void setUp() { - Resource resource = new ClassPathResource("test-yaml.yml", getClass()); + Resource resource = new ClassPathResource("test-yaml.yml"); this.loader = new OriginTrackedYamlLoader(resource); } @Test + @WithTestYamlResource void processSimpleKey() { OriginTrackedValue value = getValue("name"); assertThat(value).hasToString("Martin D'vloper"); @@ -60,6 +66,7 @@ class OriginTrackedYamlLoaderTests { } @Test + @WithTestYamlResource void processMap() { OriginTrackedValue perl = getValue("languages.perl"); OriginTrackedValue python = getValue("languages.python"); @@ -73,6 +80,7 @@ class OriginTrackedYamlLoaderTests { } @Test + @WithTestYamlResource void processCollection() { OriginTrackedValue apple = getValue("foods[0]"); OriginTrackedValue orange = getValue("foods[1]"); @@ -89,6 +97,7 @@ class OriginTrackedYamlLoaderTests { } @Test + @WithTestYamlResource void processMultiline() { OriginTrackedValue education = getValue("education"); assertThat(education).hasToString("4 GCSEs\n3 A-Levels\nBSc in the Internet of Things\n"); @@ -96,6 +105,7 @@ class OriginTrackedYamlLoaderTests { } @Test + @WithTestYamlResource void processListOfMaps() { OriginTrackedValue name = getValue("example.foo[0].name"); OriginTrackedValue url = getValue("example.foo[0].url"); @@ -112,6 +122,7 @@ class OriginTrackedYamlLoaderTests { } @Test + @WithTestYamlResource void processEmptyAndNullValues() { OriginTrackedValue empty = getValue("empty"); OriginTrackedValue nullValue = getValue("null-value"); @@ -122,6 +133,7 @@ class OriginTrackedYamlLoaderTests { } @Test + @WithTestYamlResource void processEmptyListAndMap() { OriginTrackedValue emptymap = getValue("emptymap"); OriginTrackedValue emptylist = getValue("emptylist"); @@ -138,8 +150,15 @@ class OriginTrackedYamlLoaderTests { } @Test + @WithResource(name = "test-empty-yaml.yml", content = """ + --- + --- + + --- + --- + """) void emptyDocuments() { - this.loader = new OriginTrackedYamlLoader(new ClassPathResource("test-empty-yaml.yml", getClass())); + this.loader = new OriginTrackedYamlLoader(new ClassPathResource("test-empty-yaml.yml")); List> loaded = this.loader.load(); assertThat(loaded).isEmpty(); } @@ -165,8 +184,17 @@ class OriginTrackedYamlLoaderTests { } @Test + @WithResource(name = "recursive.yml", content = """ + &def1 + *def1: a + test: + a: + spring: 'a' + b: + boot: 'b' + """) void loadWhenRecursiveLoadsYaml() { - Resource resource = new ClassPathResource("recursive.yml", getClass()); + Resource resource = new ClassPathResource("recursive.yml"); this.loader = new OriginTrackedYamlLoader(resource); Map loaded = this.loader.load().get(0); assertThat(loaded.get("test.a.spring")).hasToString("a"); @@ -174,8 +202,16 @@ class OriginTrackedYamlLoaderTests { } @Test + @WithResource(name = "anchors.yml", content = """ + some: + path: &anchor + config: + key: value + anotherpath: + <<: *anchor + """) void loadWhenUsingAnchors() { - Resource resource = new ClassPathResource("anchors.yml", getClass()); + Resource resource = new ClassPathResource("anchors.yml"); this.loader = new OriginTrackedYamlLoader(resource); Map loaded = this.loader.load().get(0); assertThat(loaded.get("some.path.config.key")).hasToString("value"); @@ -205,4 +241,49 @@ class OriginTrackedYamlLoaderTests { return ((TextResourceOrigin) value.getOrigin()).getLocation().toString(); } + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + @WithResource(name = "test-yaml.yml", content = """ + # https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html + + name: Martin D'vloper + job: Developer + skill: Elite + employed: True + foods: + - Apple + - Orange + - Strawberry + - Mango + languages: + perl: Elite + python: Elite + pascal: Lame + education: | + 4 GCSEs + 3 A-Levels + BSc in the Internet of Things + example: + foo: + - name: springboot + url: https://springboot.example.com/ + bar: + - bar1: baz + - bar2: bling + empty: "" + null-value: null + emptylist: [] + emptymap: {} + --- + + spring: + profiles: development + name: Test Name + + --- + """) + private @interface WithTestYamlResource { + + } + } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/PropertiesPropertySourceLoaderTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/PropertiesPropertySourceLoaderTests.java index 67b24310fab..f38cafabbe1 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/PropertiesPropertySourceLoaderTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/PropertiesPropertySourceLoaderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ import java.util.List; import org.junit.jupiter.api.Test; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.core.env.PropertySource; import org.springframework.core.io.ClassPathResource; @@ -41,17 +42,28 @@ class PropertiesPropertySourceLoaderTests { } @Test + @WithResource(name = "test.properties", content = "test=properties") void loadProperties() throws Exception { - List> loaded = this.loader.load("test.properties", - new ClassPathResource("test-properties.properties", getClass())); + List> loaded = this.loader.load("test.properties", new ClassPathResource("test.properties")); PropertySource source = loaded.get(0); assertThat(source.getProperty("test")).isEqualTo("properties"); } @Test + @WithResource(name = "test.properties", content = """ + #--- + #test + blah=hello world + bar=baz + hello=world + #--- + foo=bar + bling=biz + #comment1 + #comment2 + """) void loadMultiDocumentPropertiesWithSeparatorAtTheBeginningOfFile() throws Exception { - List> loaded = this.loader.load("test.properties", - new ClassPathResource("multi-document-properties-2.properties", getClass())); + List> loaded = this.loader.load("test.properties", new ClassPathResource("test.properties")); assertThat(loaded).hasSize(2); PropertySource source1 = loaded.get(0); PropertySource source2 = loaded.get(1); @@ -60,9 +72,20 @@ class PropertiesPropertySourceLoaderTests { } @Test + @WithResource(name = "test.properties", content = """ + #test + blah=hello world + bar=baz + hello=world + #--- + foo=bar + bling=biz + #comment1 + #comment2 + #--- + """) void loadMultiDocumentProperties() throws Exception { - List> loaded = this.loader.load("test.properties", - new ClassPathResource("multi-document-properties.properties", getClass())); + List> loaded = this.loader.load("test.properties", new ClassPathResource("test.properties")); assertThat(loaded).hasSize(2); PropertySource source1 = loaded.get(0); PropertySource source2 = loaded.get(1); @@ -71,9 +94,22 @@ class PropertiesPropertySourceLoaderTests { } @Test + @WithResource(name = "test.properties", content = """ + + #--- + #test + blah=hello world + bar=baz + hello=world + #--- + #--- + foo=bar + bling=biz + #comment1 + #comment2 + """) void loadMultiDocumentPropertiesWithEmptyDocument() throws Exception { - List> loaded = this.loader.load("test.properties", - new ClassPathResource("multi-document-properties-empty.properties", getClass())); + List> loaded = this.loader.load("test.properties", new ClassPathResource("test.properties")); assertThat(loaded).hasSize(2); PropertySource source1 = loaded.get(0); PropertySource source2 = loaded.get(1); @@ -82,9 +118,15 @@ class PropertiesPropertySourceLoaderTests { } @Test + @WithResource(name = "test.xml", content = """ + + + + xml + + """) void loadXml() throws Exception { - List> loaded = this.loader.load("test.xml", - new ClassPathResource("test-xml.xml", getClass())); + List> loaded = this.loader.load("test.xml", new ClassPathResource("test.xml")); PropertySource source = loaded.get(0); assertThat(source.getProperty("test")).isEqualTo("xml"); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/YamlPropertySourceLoaderTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/YamlPropertySourceLoaderTests.java index c5d076a55de..029c2b18585 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/YamlPropertySourceLoaderTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/YamlPropertySourceLoaderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,7 @@ import java.util.List; import org.junit.jupiter.api.Test; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.core.env.EnumerablePropertySource; import org.springframework.core.env.PropertySource; import org.springframework.core.io.ByteArrayResource; @@ -86,8 +87,14 @@ class YamlPropertySourceLoaderTests { } @Test + @WithResource(name = "test-yaml.yml", content = """ + a: b + --- + c: d + e: f + """) void loadOriginAware() throws Exception { - Resource resource = new ClassPathResource("test-yaml.yml", getClass()); + Resource resource = new ClassPathResource("test-yaml.yml"); List> loaded = this.loader.load("resource", resource); for (PropertySource source : loaded) { EnumerablePropertySource enumerableSource = (EnumerablePropertySource) source; diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/jdbc/init/DataSourceScriptDatabaseInitializerTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/jdbc/init/DataSourceScriptDatabaseInitializerTests.java index a723a3de518..508b9cbd05d 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/jdbc/init/DataSourceScriptDatabaseInitializerTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/jdbc/init/DataSourceScriptDatabaseInitializerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -70,6 +70,7 @@ class DataSourceScriptDatabaseInitializerTests } @Test + @WithDataSqlResource void whenCustomizeIsOverriddenThenDatabasePopulatorIsConfiguredAccordingly() { DatabaseInitializationSettings settings = new DatabaseInitializationSettings(); settings.setContinueOnError(true); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/AbstractJsonParserTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/AbstractJsonParserTests.java index fed13ff2b31..0fbef469064 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/AbstractJsonParserTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/AbstractJsonParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,15 +16,14 @@ package org.springframework.boot.json; -import java.io.IOException; -import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; import org.assertj.core.api.InstanceOfAssertFactories; import org.junit.jupiter.api.Test; -import org.springframework.util.StreamUtils; +import org.springframework.boot.testsupport.classpath.resources.ResourceContent; +import org.springframework.boot.testsupport.classpath.resources.WithPackageResources; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; @@ -192,26 +191,22 @@ abstract class AbstractJsonParserTests { } @Test // gh-31868 - void listWithRepeatedOpenArray() throws IOException { - String input = StreamUtils.copyToString( - AbstractJsonParserTests.class.getResourceAsStream("repeated-open-array.txt"), StandardCharsets.UTF_8); + @WithPackageResources("repeated-open-array.txt") + void listWithRepeatedOpenArray(@ResourceContent("repeated-open-array.txt") String input) { assertThatExceptionOfType(JsonParseException.class).isThrownBy(() -> this.parser.parseList(input)) .havingCause() .withMessageContaining("too deeply nested"); } @Test // gh-31869 - void largeMalformed() throws IOException { - String input = StreamUtils.copyToString( - AbstractJsonParserTests.class.getResourceAsStream("large-malformed-json.txt"), StandardCharsets.UTF_8); + @WithPackageResources("large-malformed-json.txt") + void largeMalformed(@ResourceContent("large-malformed-json.txt") String input) { assertThatExceptionOfType(JsonParseException.class).isThrownBy(() -> this.parser.parseList(input)); } @Test // gh-32029 - void deeplyNestedMap() throws IOException { - String input = StreamUtils.copyToString( - AbstractJsonParserTests.class.getResourceAsStream("deeply-nested-map-json.txt"), - StandardCharsets.UTF_8); + @WithPackageResources("deeply-nested-map-json.txt") + void deeplyNestedMap(@ResourceContent("deeply-nested-map-json.txt") String input) { assertThatExceptionOfType(JsonParseException.class).isThrownBy(() -> this.parser.parseList(input)); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/GsonJsonParserTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/GsonJsonParserTests.java index 3a7b7f04aa8..f597fd1902c 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/GsonJsonParserTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/GsonJsonParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2022 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,8 +16,6 @@ package org.springframework.boot.json; -import java.io.IOException; - /** * Tests for {@link GsonJsonParser}. * @@ -31,7 +29,7 @@ class GsonJsonParserTests extends AbstractJsonParserTests { } @Override - void listWithRepeatedOpenArray() throws IOException { + void listWithRepeatedOpenArray(String input) { // Gson does not protect against deeply nested JSON } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/JacksonJsonParserTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/JacksonJsonParserTests.java index 4e79ac56861..57f445c64dd 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/JacksonJsonParserTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/JacksonJsonParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2022 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -52,7 +52,7 @@ class JacksonJsonParserTests extends AbstractJsonParserTests { @Override @Disabled("Jackson's array handling is no longer stack bound so protection has been removed.") // https://github.com/FasterXML/jackson-databind/commit/8238ab41d0350fb915797c89d46777b4496b74fd - void listWithRepeatedOpenArray() throws IOException { + void listWithRepeatedOpenArray(String input) { } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/java/JavaLoggingSystemTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/java/JavaLoggingSystemTests.java index 495193de4bb..eccdef167ae 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/java/JavaLoggingSystemTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/java/JavaLoggingSystemTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,6 +34,7 @@ import org.springframework.boot.logging.LogLevel; import org.springframework.boot.logging.LoggerConfiguration; import org.springframework.boot.logging.LoggingSystem; import org.springframework.boot.logging.LoggingSystemProperty; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.boot.testsupport.system.CapturedOutput; import org.springframework.boot.testsupport.system.OutputCaptureExtension; import org.springframework.util.ClassUtils; @@ -123,6 +124,10 @@ class JavaLoggingSystemTests extends AbstractLoggingSystemTests { } @Test + @WithResource(name = "logging-nondefault.properties", content = """ + handlers = java.util.logging.ConsoleHandler + .level = INFO + """) void testNonDefaultConfigLocation(CapturedOutput output) { this.loggingSystem.beforeInitialize(); this.loggingSystem.initialize(null, "classpath:logging-nondefault.properties", null); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystemTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystemTests.java index 7d089c17508..fc14599eb5e 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystemTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystemTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,6 +19,10 @@ package org.springframework.boot.logging.log4j2; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import java.net.ProtocolException; import java.util.EnumSet; import java.util.LinkedHashMap; @@ -59,6 +63,7 @@ import org.springframework.boot.logging.LoggingSystem; import org.springframework.boot.logging.LoggingSystemProperties; import org.springframework.boot.logging.LoggingSystemProperty; import org.springframework.boot.testsupport.classpath.ClassPathExclusions; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.boot.testsupport.logging.ConfigureClasspathToPreferLog4j2; import org.springframework.boot.testsupport.system.CapturedOutput; import org.springframework.boot.testsupport.system.OutputCaptureExtension; @@ -158,16 +163,16 @@ class Log4J2LoggingSystemTests extends AbstractLoggingSystemTests { } @Test + @WithNonDefaultXmlResource void testNonDefaultConfigLocation(CapturedOutput output) { this.loggingSystem.beforeInitialize(); - this.loggingSystem.initialize(this.initializationContext, "classpath:log4j2-nondefault.xml", + this.loggingSystem.initialize(this.initializationContext, "classpath:nondefault.xml", getLogFile(tmpDir() + "/tmp.log", null)); this.logger.info("Hello world"); Configuration configuration = this.loggingSystem.getConfiguration(); assertThat(output).contains("Hello world").contains(tmpDir() + "/tmp.log"); assertThat(new File(tmpDir() + "/tmp.log")).doesNotExist(); - assertThat(configuration.getConfigurationSource().getFile().getAbsolutePath()) - .contains("log4j2-nondefault.xml"); + assertThat(configuration.getConfigurationSource().getFile().getAbsolutePath()).contains("nondefault.xml"); assertThat(configuration.getWatchManager().getIntervalSeconds()).isEqualTo(30); } @@ -461,15 +466,18 @@ class Log4J2LoggingSystemTests extends AbstractLoggingSystemTests { } @Test + @WithNonDefaultXmlResource + @WithOverrideXmlResource void compositeConfigurationWithCustomBaseConfiguration() { - this.environment.setProperty("logging.log4j2.config.override", "src/test/resources/log4j2-override.xml"); - this.loggingSystem.initialize(this.initializationContext, "src/test/resources/log4j2-nondefault.xml", null); + this.environment.setProperty("logging.log4j2.config.override", "classpath:override.xml"); + this.loggingSystem.initialize(this.initializationContext, "classpath:nondefault.xml", null); assertThat(this.loggingSystem.getConfiguration()).isInstanceOf(CompositeConfiguration.class); } @Test + @WithOverrideXmlResource void compositeConfigurationWithStandardConfigLocationConfiguration() { - this.environment.setProperty("logging.log4j2.config.override", "src/test/resources/log4j2-override.xml"); + this.environment.setProperty("logging.log4j2.config.override", "classpath:override.xml"); this.loggingSystem.initialize(this.initializationContext, null, null); assertThat(this.loggingSystem.getConfiguration()).isInstanceOf(CompositeConfiguration.class); } @@ -678,4 +686,45 @@ class Log4J2LoggingSystemTests extends AbstractLoggingSystemTests { } + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.RUNTIME) + @WithResource(name = "nondefault.xml", + content = """ + + + ???? + ${sys:LOG_FILE} %d{yyyy-MM-dd HH:mm:ss.SSS}] service%X{context} - ${sys:PID} %5p [%t] --- %c{1}: %m%n + + + + + + + + + + + + + """) + private @interface WithNonDefaultXmlResource { + + } + + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.RUNTIME) + @WithResource(name = "override.xml", content = """ + + + + + + + + + """) + private @interface WithOverrideXmlResource { + + } + } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/SpringProfileArbiterTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/SpringProfileArbiterTests.java index e27a1e4cdb8..f410ca55c54 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/SpringProfileArbiterTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/SpringProfileArbiterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2022 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,10 @@ package org.springframework.boot.logging.log4j2; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import java.util.Set; import org.apache.logging.log4j.LogManager; @@ -32,12 +36,12 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.boot.logging.LoggingInitializationContext; import org.springframework.boot.testsupport.classpath.ClassPathExclusions; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.boot.testsupport.logging.ConfigureClasspathToPreferLog4j2; import org.springframework.boot.testsupport.system.CapturedOutput; import org.springframework.boot.testsupport.system.OutputCaptureExtension; import org.springframework.mock.env.MockEnvironment; import org.springframework.test.util.ReflectionTestUtils; -import org.springframework.util.ClassUtils; import static org.assertj.core.api.Assertions.assertThat; @@ -93,6 +97,7 @@ class SpringProfileArbiterTests { } @Test + @WithProductionProfileXmlResource void profileActive() { this.environment.setActiveProfiles("production"); initialize("production-profile.xml"); @@ -101,6 +106,7 @@ class SpringProfileArbiterTests { } @Test + @WithMultiProfileNamesXmlResource void multipleNamesFirstProfileActive() { this.environment.setActiveProfiles("production"); initialize("multi-profile-names.xml"); @@ -109,6 +115,7 @@ class SpringProfileArbiterTests { } @Test + @WithMultiProfileNamesXmlResource void multipleNamesSecondProfileActive() { this.environment.setActiveProfiles("test"); initialize("multi-profile-names.xml"); @@ -117,6 +124,7 @@ class SpringProfileArbiterTests { } @Test + @WithProductionProfileXmlResource void profileNotActive() { initialize("production-profile.xml"); this.logger.trace("Hello"); @@ -124,6 +132,7 @@ class SpringProfileArbiterTests { } @Test + @WithProfileExpressionXmlResource void profileExpressionMatchFirst() { this.environment.setActiveProfiles("production"); initialize("profile-expression.xml"); @@ -132,6 +141,7 @@ class SpringProfileArbiterTests { } @Test + @WithProfileExpressionXmlResource void profileExpressionMatchSecond() { this.environment.setActiveProfiles("test"); initialize("profile-expression.xml"); @@ -140,6 +150,7 @@ class SpringProfileArbiterTests { } @Test + @WithProfileExpressionXmlResource void profileExpressionNoMatch() { this.environment.setActiveProfiles("development"); initialize("profile-expression.xml"); @@ -148,13 +159,56 @@ class SpringProfileArbiterTests { } private void initialize(String config) { - this.environment.setProperty("logging.log4j2.config.override", getPackageResource(config)); + this.environment.setProperty("logging.log4j2.config.override", "classpath:" + config); this.loggingSystem.initialize(this.initializationContext, null, null); } - private String getPackageResource(String fileName) { - String path = ClassUtils.getPackageName(getClass()); - return "src/test/resources/" + path.replace('.', '/') + "/" + fileName; + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.RUNTIME) + @WithResource(name = "multi-profile-names.xml", content = """ + + + + + + + + + """) + private @interface WithMultiProfileNamesXmlResource { + + } + + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.RUNTIME) + @WithResource(name = "profile-expression.xml", content = """ + + + + + + + + + """) + private @interface WithProfileExpressionXmlResource { + + } + + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.RUNTIME) + @WithResource(name = "production-profile.xml", content = """ + + + + + + + + + """) + private @interface WithProductionProfileXmlResource { + } } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackConfigurationTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackConfigurationTests.java index 0e6ad7bd18c..37382c9350b 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackConfigurationTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackConfigurationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2020 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,6 +32,9 @@ import ch.qos.logback.core.rolling.RollingPolicy; import ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy; import org.junit.jupiter.api.Test; +import org.springframework.boot.testsupport.classpath.resources.ResourcesRoot; +import org.springframework.boot.testsupport.classpath.resources.WithResource; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -43,11 +46,17 @@ import static org.assertj.core.api.Assertions.assertThat; class LogbackConfigurationTests { @Test - void consolePatternCanBeOverridden() throws JoranException { + @WithResource(name = "custom-console-log-pattern.xml", content = """ + + + + + """) + void consolePatternCanBeOverridden(@ResourcesRoot File resourcesRoot) throws JoranException { JoranConfigurator configurator = new JoranConfigurator(); LoggerContext context = new LoggerContext(); configurator.setContext(context); - configurator.doConfigure(new File("src/test/resources/custom-console-log-pattern.xml")); + configurator.doConfigure(new File(resourcesRoot, "custom-console-log-pattern.xml")); Appender appender = context.getLogger("ROOT").getAppender("CONSOLE"); assertThat(appender).isInstanceOf(ConsoleAppender.class); Encoder encoder = ((ConsoleAppender) appender).getEncoder(); @@ -56,11 +65,17 @@ class LogbackConfigurationTests { } @Test - void filePatternCanBeOverridden() throws JoranException { + @WithResource(name = "custom-file-log-pattern.xml", content = """ + + + + + """) + void filePatternCanBeOverridden(@ResourcesRoot File resourcesRoot) throws JoranException { JoranConfigurator configurator = new JoranConfigurator(); LoggerContext context = new LoggerContext(); configurator.setContext(context); - configurator.doConfigure(new File("src/test/resources/custom-file-log-pattern.xml")); + configurator.doConfigure(new File(resourcesRoot, "custom-file-log-pattern.xml")); Appender appender = context.getLogger("ROOT").getAppender("FILE"); assertThat(appender).isInstanceOf(FileAppender.class); Encoder encoder = ((FileAppender) appender).getEncoder(); @@ -69,11 +84,17 @@ class LogbackConfigurationTests { } @Test - void defaultRollingFileNamePattern() throws JoranException { + @WithResource(name = "custom-file-log-pattern.xml", content = """ + + + + + """) + void defaultRollingFileNamePattern(@ResourcesRoot File resourcesRoot) throws JoranException { JoranConfigurator configurator = new JoranConfigurator(); LoggerContext context = new LoggerContext(); configurator.setContext(context); - configurator.doConfigure(new File("src/test/resources/custom-file-log-pattern.xml")); + configurator.doConfigure(new File(resourcesRoot, "custom-file-log-pattern.xml")); Appender appender = context.getLogger("ROOT").getAppender("FILE"); assertThat(appender).isInstanceOf(RollingFileAppender.class); RollingPolicy rollingPolicy = ((RollingFileAppender) appender).getRollingPolicy(); @@ -82,11 +103,17 @@ class LogbackConfigurationTests { } @Test - void customRollingFileNamePattern() throws JoranException { + @WithResource(name = "custom-file-log-pattern-with-fileNamePattern.xml", content = """ + + + + + """) + void customRollingFileNamePattern(@ResourcesRoot File resourcesRoot) throws JoranException { JoranConfigurator configurator = new JoranConfigurator(); LoggerContext context = new LoggerContext(); configurator.setContext(context); - configurator.doConfigure(new File("src/test/resources/custom-file-log-pattern-with-fileNamePattern.xml")); + configurator.doConfigure(new File(resourcesRoot, "custom-file-log-pattern-with-fileNamePattern.xml")); Appender appender = context.getLogger("ROOT").getAppender("FILE"); assertThat(appender).isInstanceOf(RollingFileAppender.class); RollingPolicy rollingPolicy = ((RollingFileAppender) appender).getRollingPolicy(); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemTests.java index 83ae188abb4..14a46fddb61 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,10 @@ package org.springframework.boot.logging.logback; import java.io.File; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.nio.charset.Charset; @@ -62,6 +66,7 @@ import org.springframework.boot.logging.LoggingSystemProperties; import org.springframework.boot.logging.LoggingSystemProperty; import org.springframework.boot.testsupport.classpath.ClassPathExclusions; import org.springframework.boot.testsupport.classpath.ClassPathOverrides; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.boot.testsupport.system.CapturedOutput; import org.springframework.boot.testsupport.system.OutputCaptureExtension; import org.springframework.core.convert.ConversionService; @@ -132,16 +137,30 @@ class LogbackLoggingSystemTests extends AbstractLoggingSystemTests { } @Test + @WithResource(name = "include-defaults.xml", content = """ + + + + + [%p] - %m%n + + + + + + + """) void logbackDefaultsConfigurationDoesNotTriggerDeprecation(CapturedOutput output) { - initialize(this.initializationContext, "classpath:logback-include-defaults.xml", null); + initialize(this.initializationContext, "classpath:include-defaults.xml", null); this.logger.info("Hello world"); assertThat(getLineWithText(output, "Hello world")).isEqualTo("[INFO] - Hello world"); assertThat(output.toString()).doesNotContain("WARN").doesNotContain("deprecated"); } @Test + @WithIncludeBaseXmlResource void logbackBaseConfigurationDoesNotTriggerDeprecation(CapturedOutput output) { - initialize(this.initializationContext, "classpath:logback-include-base.xml", null); + initialize(this.initializationContext, "classpath:include-base.xml", null); this.logger.info("Hello world"); assertThat(getLineWithText(output, "Hello world")).contains(" INFO ").endsWith(": Hello world"); assertThat(output.toString()).doesNotContain("WARN").doesNotContain("deprecated"); @@ -199,10 +218,10 @@ class LogbackLoggingSystemTests extends AbstractLoggingSystemTests { } @Test + @WithNonDefaultXmlResource void testNonDefaultConfigLocation(CapturedOutput output) { this.loggingSystem.beforeInitialize(); - initialize(this.initializationContext, "classpath:logback-nondefault.xml", - getLogFile(tmpDir() + "/tmp.log", null)); + initialize(this.initializationContext, "classpath:nondefault.xml", getLogFile(tmpDir() + "/tmp.log", null)); this.logger.info("Hello world"); assertThat(output).doesNotContain("DEBUG") .contains("Hello world") @@ -406,12 +425,13 @@ class LogbackLoggingSystemTests extends AbstractLoggingSystemTests { } @Test + @WithIncludeBaseXmlResource void testCleanHistoryOnStartPropertyWithXmlConfiguration() { this.environment.setProperty("logging.file.clean-history-on-start", "true"); LoggingInitializationContext loggingInitializationContext = new LoggingInitializationContext(this.environment); File file = new File(tmpDir(), "logback-test.log"); LogFile logFile = getLogFile(file.getPath(), null); - initialize(loggingInitializationContext, "classpath:logback-include-base.xml", logFile); + initialize(loggingInitializationContext, "classpath:include-base.xml", logFile); this.logger.info("Hello world"); assertThat(getLineWithText(file, "Hello world")).contains("INFO"); assertThat(getRollingPolicy().isCleanHistoryOnStart()).isTrue(); @@ -444,12 +464,13 @@ class LogbackLoggingSystemTests extends AbstractLoggingSystemTests { } @Test + @WithIncludeBaseXmlResource void testMaxFileSizePropertyWithXmlConfiguration() { this.environment.setProperty("logging.file.max-size", "100MB"); LoggingInitializationContext loggingInitializationContext = new LoggingInitializationContext(this.environment); File file = new File(tmpDir(), "logback-test.log"); LogFile logFile = getLogFile(file.getPath(), null); - initialize(loggingInitializationContext, "classpath:logback-include-base.xml", logFile); + initialize(loggingInitializationContext, "classpath:include-base.xml", logFile); this.logger.info("Hello world"); assertThat(getLineWithText(file, "Hello world")).contains("INFO"); assertThat(ReflectionTestUtils.getField(getRollingPolicy(), "maxFileSize")).hasToString("100 MB"); @@ -468,12 +489,13 @@ class LogbackLoggingSystemTests extends AbstractLoggingSystemTests { } @Test + @WithIncludeBaseXmlResource void testMaxHistoryPropertyWithXmlConfiguration() { this.environment.setProperty("logging.file.max-history", "30"); LoggingInitializationContext loggingInitializationContext = new LoggingInitializationContext(this.environment); File file = new File(tmpDir(), "logback-test.log"); LogFile logFile = getLogFile(file.getPath(), null); - initialize(loggingInitializationContext, "classpath:logback-include-base.xml", logFile); + initialize(loggingInitializationContext, "classpath:include-base.xml", logFile); this.logger.info("Hello world"); assertThat(getLineWithText(file, "Hello world")).contains("INFO"); assertThat(getRollingPolicy().getMaxHistory()).isEqualTo(30); @@ -506,13 +528,14 @@ class LogbackLoggingSystemTests extends AbstractLoggingSystemTests { } @Test + @WithIncludeBaseXmlResource void testTotalSizeCapPropertyWithXmlConfiguration() { String expectedSize = "101 MB"; this.environment.setProperty("logging.file.total-size-cap", expectedSize); LoggingInitializationContext loggingInitializationContext = new LoggingInitializationContext(this.environment); File file = new File(tmpDir(), "logback-test.log"); LogFile logFile = getLogFile(file.getPath(), null); - initialize(loggingInitializationContext, "classpath:logback-include-base.xml", logFile); + initialize(loggingInitializationContext, "classpath:include-base.xml", logFile); this.logger.info("Hello world"); assertThat(getLineWithText(file, "Hello world")).contains("INFO"); assertThat(ReflectionTestUtils.getField(getRollingPolicy(), "totalSizeCap")).hasToString(expectedSize); @@ -546,12 +569,13 @@ class LogbackLoggingSystemTests extends AbstractLoggingSystemTests { } @Test + @WithNonDefaultXmlResource void initializeShouldSetSystemProperty() { // gh-5491 this.loggingSystem.beforeInitialize(); this.logger.info("Hidden"); LogFile logFile = getLogFile(tmpDir() + "/example.log", null, false); - initialize(this.initializationContext, "classpath:logback-nondefault.xml", logFile); + initialize(this.initializationContext, "classpath:nondefault.xml", logFile); assertThat(System.getProperty(LoggingSystemProperty.LOG_FILE.getEnvironmentVariableName())) .endsWith("example.log"); } @@ -698,9 +722,23 @@ class LogbackLoggingSystemTests extends AbstractLoggingSystemTests { } @Test // gh-33610 + @WithResource(name = "springprofile-in-root.xml", content = """ + + + + %property{LOG_FILE} [%t] ${PID:-????} %c{1}: %m%n BOOTBOOT + + + + + + + + + """) void springProfileIfNestedWithinSecondPhaseElementSanityChecker(CapturedOutput output) { this.loggingSystem.beforeInitialize(); - initialize(this.initializationContext, "classpath:logback-springprofile-in-root.xml", null); + initialize(this.initializationContext, "classpath:springprofile-in-root.xml", null); this.logger.info("Hello world"); assertThat(output).contains(" elements cannot be nested within an"); } @@ -756,9 +794,10 @@ class LogbackLoggingSystemTests extends AbstractLoggingSystemTests { } @Test + @WithIncludeBaseXmlResource void correlationLoggingToConsoleWhenUsingXmlConfiguration(CapturedOutput output) { this.environment.setProperty(LoggingSystem.EXPECT_CORRELATION_ID_PROPERTY, "true"); - initialize(this.initializationContext, "classpath:logback-include-base.xml", null); + initialize(this.initializationContext, "classpath:include-base.xml", null); MDC.setContextMap(Map.of("traceId", "01234567890123456789012345678901", "spanId", "0123456789012345")); this.logger.info("Hello world"); assertThat(getLineWithText(output, "Hello world")) @@ -766,11 +805,12 @@ class LogbackLoggingSystemTests extends AbstractLoggingSystemTests { } @Test + @WithIncludeBaseXmlResource void correlationLoggingToFileWhenUsingFileConfiguration() { this.environment.setProperty(LoggingSystem.EXPECT_CORRELATION_ID_PROPERTY, "true"); File file = new File(tmpDir(), "logback-test.log"); LogFile logFile = getLogFile(file.getPath(), null); - initialize(this.initializationContext, "classpath:logback-include-base.xml", logFile); + initialize(this.initializationContext, "classpath:include-base.xml", logFile); MDC.setContextMap(Map.of("traceId", "01234567890123456789012345678901", "spanId", "0123456789012345")); this.logger.info("Hello world"); assertThat(getLineWithText(file, "Hello world")) @@ -834,30 +874,55 @@ class LogbackLoggingSystemTests extends AbstractLoggingSystemTests { } @Test + @WithResource(name = "broken.xml", content = """ + + + + + ${LOG_FILE} [%t] ${PID:-????} %c{1}: %m%n BOOTBOOT + + + + + + + """) void whenConfigurationErrorIsDetectedUnderlyingCausesAreIncludedAsSuppressedExceptions() { this.loggingSystem.beforeInitialize(); assertThatIllegalStateException() - .isThrownBy(() -> initialize(this.initializationContext, "classpath:logback-broken.xml", + .isThrownBy(() -> initialize(this.initializationContext, "classpath:broken.xml", getLogFile(tmpDir() + "/tmp.log", null))) .satisfies((ex) -> assertThat(ex.getSuppressed()) .hasAtLeastOneElementOfType(DynamicClassLoadingException.class)); } @Test + @WithResource(name = "invalid-format.txt", content = "Not XML") void whenConfigLocationIsNotXmlThenIllegalArgumentExceptionShouldBeThrown() { this.loggingSystem.beforeInitialize(); assertThatIllegalStateException() - .isThrownBy(() -> initialize(this.initializationContext, "classpath:logback-invalid-format.txt", + .isThrownBy(() -> initialize(this.initializationContext, "classpath:invalid-format.txt", getLogFile(tmpDir() + "/tmp.log", null))) .satisfies((ex) -> assertThat(ex.getCause()).isInstanceOf(JoranException.class) .hasMessageStartingWith("Problem parsing XML document. See previously reported errors")); } @Test + @WithResource(name = "without-extension", content = """ + + + + %msg + + + + + + + """) void whenConfigLocationIsXmlFileWithoutExtensionShouldWork(CapturedOutput output) { this.loggingSystem.beforeInitialize(); - initialize(this.initializationContext, "classpath:logback-without-extension", - getLogFile(tmpDir() + "/tmp.log", null)); + initialize(this.initializationContext, "classpath:without-extension", getLogFile(tmpDir() + "/tmp.log", null)); this.logger.info("No extension and works!"); assertThat(output.toString()).contains("No extension and works!"); } @@ -895,11 +960,12 @@ class LogbackLoggingSystemTests extends AbstractLoggingSystemTests { } @Test + @WithNonDefaultXmlResource void applyingSystemPropertiesDoesNotCauseUnwantedStatusWarnings(CapturedOutput output) { this.loggingSystem.beforeInitialize(); this.environment.getPropertySources() .addFirst(new MapPropertySource("test", Map.of("logging.pattern.console", "[CONSOLE]%m"))); - this.loggingSystem.initialize(this.initializationContext, "classpath:logback-nondefault.xml", null); + this.loggingSystem.initialize(this.initializationContext, "classpath:nondefault.xml", null); assertThat(output).doesNotContain("WARN"); } @@ -935,4 +1001,33 @@ class LogbackLoggingSystemTests extends AbstractLoggingSystemTests { return (SizeAndTimeBasedRollingPolicy) getFileAppender().getRollingPolicy(); } + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.RUNTIME) + @WithResource(name = "include-base.xml", content = """ + + + + """) + private @interface WithIncludeBaseXmlResource { + + } + + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.RUNTIME) + @WithResource(name = "nondefault.xml", content = """ + + + + %property{LOG_FILE} [%t] ${PID:-????} %c{1}: %m%n BOOTBOOT + + + + + + + """) + private @interface WithNonDefaultXmlResource { + + } + } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/SpringBootJoranConfiguratorTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/SpringBootJoranConfiguratorTests.java index 4bcc73127c2..3779663c540 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/SpringBootJoranConfiguratorTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/SpringBootJoranConfiguratorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,11 @@ package org.springframework.boot.logging.logback; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + import ch.qos.logback.classic.BasicConfigurator; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.joran.JoranConfigurator; @@ -30,6 +35,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.aot.BeanFactoryInitializationAotContribution; import org.springframework.boot.context.properties.source.ConfigurationPropertySources; import org.springframework.boot.logging.LoggingInitializationContext; +import org.springframework.boot.testsupport.classpath.ClassPathExclusions; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.boot.testsupport.system.CapturedOutput; import org.springframework.boot.testsupport.system.OutputCaptureExtension; import org.springframework.mock.env.MockEnvironment; @@ -77,6 +84,7 @@ class SpringBootJoranConfiguratorTests { } @Test + @WithProductionProfileXmlResource void profileActive() throws Exception { this.environment.setActiveProfiles("production"); initialize("production-profile.xml"); @@ -85,6 +93,20 @@ class SpringBootJoranConfiguratorTests { } @Test + @WithResource(name = "profile-in-include.xml", content = """ + + + + + + """) + @WithResource(name = "include-with-profile.xml", content = """ + + + + + + """) void profileInIncludeActive() throws Exception { this.environment.setActiveProfiles("production"); initialize("profile-in-include.xml"); @@ -93,6 +115,7 @@ class SpringBootJoranConfiguratorTests { } @Test + @WithMultiProfileNamesXmlResource void multipleNamesFirstProfileActive() throws Exception { this.environment.setActiveProfiles("production"); initialize("multi-profile-names.xml"); @@ -101,6 +124,7 @@ class SpringBootJoranConfiguratorTests { } @Test + @WithMultiProfileNamesXmlResource void multipleNamesSecondProfileActive() throws Exception { this.environment.setActiveProfiles("test"); initialize("multi-profile-names.xml"); @@ -109,6 +133,7 @@ class SpringBootJoranConfiguratorTests { } @Test + @WithProductionProfileXmlResource void profileNotActive() throws Exception { initialize("production-profile.xml"); this.logger.trace("Hello"); @@ -116,6 +141,7 @@ class SpringBootJoranConfiguratorTests { } @Test + @WithProfileExpressionXmlResource void profileExpressionMatchFirst() throws Exception { this.environment.setActiveProfiles("production"); initialize("profile-expression.xml"); @@ -124,6 +150,7 @@ class SpringBootJoranConfiguratorTests { } @Test + @WithProfileExpressionXmlResource void profileExpressionMatchSecond() throws Exception { this.environment.setActiveProfiles("test"); initialize("profile-expression.xml"); @@ -132,6 +159,7 @@ class SpringBootJoranConfiguratorTests { } @Test + @WithProfileExpressionXmlResource void profileExpressionNoMatch() throws Exception { this.environment.setActiveProfiles("development"); initialize("profile-expression.xml"); @@ -140,26 +168,31 @@ class SpringBootJoranConfiguratorTests { } @Test + @WithNestedXmlResource void profileNestedActiveActive() throws Exception { doTestNestedProfile(true, "outer", "inner"); } @Test + @WithNestedXmlResource void profileNestedActiveNotActive() throws Exception { doTestNestedProfile(false, "outer"); } @Test + @WithNestedXmlResource void profileNestedNotActiveActive() throws Exception { doTestNestedProfile(false, "inner"); } @Test + @WithNestedXmlResource void profileNestedNotActiveNotActive() throws Exception { doTestNestedProfile(false); } @Test + @WithPropertyXmlResource void springProperty() throws Exception { TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.environment, "my.example-property=test"); initialize("property.xml"); @@ -167,6 +200,7 @@ class SpringBootJoranConfiguratorTests { } @Test + @WithPropertyXmlResource void relaxedSpringProperty() throws Exception { TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.environment, "my.EXAMPLE_PROPERTY=test"); ConfigurationPropertySources.attach(this.environment); @@ -175,30 +209,35 @@ class SpringBootJoranConfiguratorTests { } @Test + @WithPropertyXmlResource void springPropertyNoValue() throws Exception { initialize("property.xml"); assertThat(this.context.getProperty("SIMPLE")).isNull(); } @Test + @WithPropertyXmlResource void relaxedSpringPropertyNoValue() throws Exception { initialize("property.xml"); assertThat(this.context.getProperty("MINE")).isNull(); } @Test + @WithPropertyDefaultValueXmlResource void springPropertyWithDefaultValue() throws Exception { initialize("property-default-value.xml"); assertThat(this.context.getProperty("SIMPLE")).isEqualTo("foo"); } @Test + @WithPropertyDefaultValueXmlResource void relaxedSpringPropertyWithDefaultValue() throws Exception { initialize("property-default-value.xml"); assertThat(this.context.getProperty("MINE")).isEqualTo("bar"); } @Test + @WithPropertyInIfXmlResource void springPropertyInIfWhenTrue() throws Exception { TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.environment, "my.example-property=true"); initialize("property-in-if.xml"); @@ -206,6 +245,7 @@ class SpringBootJoranConfiguratorTests { } @Test + @WithPropertyInIfXmlResource void springPropertyInIfWhenFalse() throws Exception { TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.environment, "my.example-property=false"); initialize("property-in-if.xml"); @@ -213,6 +253,19 @@ class SpringBootJoranConfiguratorTests { } @Test + @WithResource(name = "property-in-include.xml", content = """ + + + + + + """) + @WithResource(name = "include-with-property.xml", content = """ + + + + """) + @ClassPathExclusions void springPropertyInInclude() throws Exception { TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.environment, "my.example-property=test"); initialize("property-in-include.xml"); @@ -220,6 +273,7 @@ class SpringBootJoranConfiguratorTests { } @Test + @WithPropertyXmlResource void addsAotContributionToContextDuringAotProcessing() throws Exception { withSystemProperty("spring.aot.processing", "true", () -> { initialize("property.xml"); @@ -253,7 +307,8 @@ class SpringBootJoranConfiguratorTests { private void initialize(String config) throws JoranException { this.configurator.setContext(this.context); - this.configurator.doConfigure(getClass().getResourceAsStream(config)); + ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); + this.configurator.doConfigure(contextClassLoader.getResource(config)); } private interface Action { @@ -262,4 +317,112 @@ class SpringBootJoranConfiguratorTests { } + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.RUNTIME) + @WithResource(name = "property-default-value.xml", content = """ + + + + + + + """) + private @interface WithPropertyDefaultValueXmlResource { + + } + + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.RUNTIME) + @WithResource(name = "property-in-if.xml", content = """ + + + + + + + + + + + """) + private @interface WithPropertyInIfXmlResource { + + } + + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.RUNTIME) + @WithResource(name = "property.xml", content = """ + + + + + + + """) + private @interface WithPropertyXmlResource { + + } + + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.RUNTIME) + @WithResource(name = "profile-expression.xml", content = """ + + + + + + + + """) + private @interface WithProfileExpressionXmlResource { + + } + + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.RUNTIME) + @WithResource(name = "production-profile.xml", content = """ + + + + + + + + """) + private @interface WithProductionProfileXmlResource { + + } + + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.RUNTIME) + @WithResource(name = "nested.xml", content = """ + + + + + + + + + + """) + private @interface WithNestedXmlResource { + + } + + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.RUNTIME) + @WithResource(name = "multi-profile-names.xml", content = """ + + + + + + + + """) + private @interface WithMultiProfileNamesXmlResource { + + } + } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/rsocket/netty/NettyRSocketServerFactoryTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/rsocket/netty/NettyRSocketServerFactoryTests.java index 0c1f8196b20..a1d1d41e39a 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/rsocket/netty/NettyRSocketServerFactoryTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/rsocket/netty/NettyRSocketServerFactoryTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -52,6 +52,8 @@ import org.springframework.boot.ssl.jks.JksSslStoreBundle; import org.springframework.boot.ssl.jks.JksSslStoreDetails; import org.springframework.boot.ssl.pem.PemSslStoreBundle; import org.springframework.boot.ssl.pem.PemSslStoreDetails; +import org.springframework.boot.testsupport.classpath.resources.ResourcePath; +import org.springframework.boot.testsupport.classpath.resources.WithPackageResources; import org.springframework.boot.web.server.Ssl; import org.springframework.core.codec.CharSequenceEncoder; import org.springframework.core.codec.StringDecoder; @@ -156,91 +158,107 @@ class NettyRSocketServerFactoryTests { } @Test + @WithPackageResources("test.jks") void tcpTransportBasicSslFromClassPath() { testBasicSslWithKeyStore("classpath:test.jks", "password", Transport.TCP); } @Test - void tcpTransportBasicSslFromFileSystem() { - testBasicSslWithKeyStore("src/test/resources/test.jks", "password", Transport.TCP); + @WithPackageResources("test.jks") + void tcpTransportBasicSslFromFileSystem(@ResourcePath("test.jks") String keyStore) { + testBasicSslWithKeyStore(keyStore, "password", Transport.TCP); } @Test + @WithPackageResources("test.jks") void websocketTransportBasicSslFromClassPath() { testBasicSslWithKeyStore("classpath:test.jks", "password", Transport.WEBSOCKET); } @Test - void websocketTransportBasicSslFromFileSystem() { - testBasicSslWithKeyStore("src/test/resources/test.jks", "password", Transport.WEBSOCKET); + @WithPackageResources("test.jks") + void websocketTransportBasicSslFromFileSystem(@ResourcePath("test.jks") String keyStore) { + testBasicSslWithKeyStore(keyStore, "password", Transport.WEBSOCKET); } @Test + @WithPackageResources({ "test-cert.pem", "test-key.pem" }) void tcpTransportBasicSslCertificateFromClassPath() { testBasicSslWithPemCertificate("classpath:test-cert.pem", "classpath:test-key.pem", "classpath:test-cert.pem", Transport.TCP); } @Test - void tcpTransportBasicSslCertificateFromFileSystem() { - testBasicSslWithPemCertificate("src/test/resources/test-cert.pem", "src/test/resources/test-key.pem", - "src/test/resources/test-cert.pem", Transport.TCP); + @WithPackageResources({ "test-cert.pem", "test-key.pem" }) + void tcpTransportBasicSslCertificateFromFileSystem(@ResourcePath("test-cert.pem") String testCert, + @ResourcePath("test-key.pem") String testKey) { + testBasicSslWithPemCertificate(testCert, testKey, testCert, Transport.TCP); } @Test + @WithPackageResources({ "test-cert.pem", "test-key.pem" }) void websocketTransportBasicSslCertificateFromClassPath() { testBasicSslWithPemCertificate("classpath:test-cert.pem", "classpath:test-key.pem", "classpath:test-cert.pem", Transport.WEBSOCKET); } @Test - void websocketTransportBasicSslCertificateFromFileSystem() { - testBasicSslWithPemCertificate("src/test/resources/test-cert.pem", "src/test/resources/test-key.pem", - "src/test/resources/test-cert.pem", Transport.WEBSOCKET); + @WithPackageResources({ "test-cert.pem", "test-key.pem" }) + void websocketTransportBasicSslCertificateFromFileSystem(@ResourcePath("test-cert.pem") String testCert, + @ResourcePath("test-key.pem") String testKey) { + testBasicSslWithPemCertificate(testCert, testKey, testCert, Transport.WEBSOCKET); } @Test + @WithPackageResources("test.jks") void tcpTransportBasicSslFromClassPathWithBundle() { testBasicSslWithKeyStoreFromBundle("classpath:test.jks", "password", Transport.TCP); } @Test - void tcpTransportBasicSslFromFileSystemWithBundle() { - testBasicSslWithKeyStoreFromBundle("src/test/resources/test.jks", "password", Transport.TCP); + @WithPackageResources("test.jks") + void tcpTransportBasicSslFromFileSystemWithBundle(@ResourcePath("test.jks") String keyStore) { + testBasicSslWithKeyStoreFromBundle(keyStore, "password", Transport.TCP); } @Test + @WithPackageResources("test.jks") void websocketTransportBasicSslFromClassPathWithBundle() { testBasicSslWithKeyStoreFromBundle("classpath:test.jks", "password", Transport.WEBSOCKET); } @Test - void websocketTransportBasicSslFromFileSystemWithBundle() { - testBasicSslWithKeyStoreFromBundle("src/test/resources/test.jks", "password", Transport.WEBSOCKET); + @WithPackageResources("test.jks") + void websocketTransportBasicSslFromFileSystemWithBundle(@ResourcePath("test.jks") String keyStore) { + testBasicSslWithKeyStoreFromBundle(keyStore, "password", Transport.WEBSOCKET); } @Test + @WithPackageResources({ "test-cert.pem", "test-key.pem" }) void tcpTransportBasicSslCertificateFromClassPathWithBundle() { testBasicSslWithPemCertificateFromBundle("classpath:test-cert.pem", "classpath:test-key.pem", "classpath:test-cert.pem", Transport.TCP); } @Test - void tcpTransportBasicSslCertificateFromFileSystemWithBundle() { - testBasicSslWithPemCertificateFromBundle("src/test/resources/test-cert.pem", "src/test/resources/test-key.pem", - "src/test/resources/test-cert.pem", Transport.TCP); + @WithPackageResources({ "test-cert.pem", "test-key.pem" }) + void tcpTransportBasicSslCertificateFromFileSystemWithBundle(@ResourcePath("test-cert.pem") String testCert, + @ResourcePath("test-key.pem") String testKey) { + testBasicSslWithPemCertificateFromBundle(testCert, testKey, testCert, Transport.TCP); } @Test + @WithPackageResources({ "test-cert.pem", "test-key.pem" }) void websocketTransportBasicSslCertificateFromClassPathWithBundle() { testBasicSslWithPemCertificateFromBundle("classpath:test-cert.pem", "classpath:test-key.pem", "classpath:test-cert.pem", Transport.WEBSOCKET); } @Test - void websocketTransportBasicSslCertificateFromFileSystemWithBundle() { - testBasicSslWithPemCertificateFromBundle("src/test/resources/test-cert.pem", "src/test/resources/test-key.pem", - "src/test/resources/test-cert.pem", Transport.WEBSOCKET); + @WithPackageResources({ "test-cert.pem", "test-key.pem" }) + void websocketTransportBasicSslCertificateFromFileSystemWithBundle(@ResourcePath("test-cert.pem") String testCert, + @ResourcePath("test-key.pem") String testKey) { + testBasicSslWithPemCertificateFromBundle(testCert, testKey, testCert, Transport.WEBSOCKET); } private void checkEchoRequest() { @@ -318,7 +336,7 @@ class NettyRSocketServerFactoryTests { NettyRSocketServerFactory factory = getFactory(); factory.setTransport(Transport.TCP); Ssl ssl = new Ssl(); - ssl.setKeyStore("classpath:test.jks"); + ssl.setKeyStore("classpath:org/springframework/boot/rsocket/netty/test.jks"); ssl.setKeyPassword("password"); factory.setSsl(ssl); this.server = factory.create(new EchoRequestResponseAcceptor()); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/sql/init/AbstractScriptDatabaseInitializerTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/sql/init/AbstractScriptDatabaseInitializerTests.java index 84b250e4561..efd5886d77f 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/sql/init/AbstractScriptDatabaseInitializerTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/sql/init/AbstractScriptDatabaseInitializerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,10 +16,15 @@ package org.springframework.boot.sql.init; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import java.util.Arrays; import org.junit.jupiter.api.Test; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.dao.DataAccessException; import static org.assertj.core.api.Assertions.assertThat; @@ -35,6 +40,8 @@ import static org.assertj.core.api.Assertions.assertThatIllegalStateException; public abstract class AbstractScriptDatabaseInitializerTests { @Test + @WithSchemaSqlResource + @WithDataSqlResource void whenDatabaseIsInitializedThenSchemaAndDataScriptsAreApplied() { DatabaseInitializationSettings settings = new DatabaseInitializationSettings(); settings.setSchemaLocations(Arrays.asList("schema.sql")); @@ -55,6 +62,7 @@ public abstract class AbstractScriptDatabaseInitializerTests certificates = PemCertificateParser.parse(read("test-cert.pem")); assertThat(certificates).isNotNull(); @@ -43,6 +45,7 @@ class PemCertificateParserTests { } @Test + @WithPackageResources("test-cert-chain.pem") void parseCertificateChain() throws Exception { List certificates = PemCertificateParser.parse(read("test-cert-chain.pem")); assertThat(certificates).isNotNull(); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/ssl/pem/PemContentTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/ssl/pem/PemContentTests.java index 9387362aa7c..147148d1208 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/ssl/pem/PemContentTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/ssl/pem/PemContentTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,6 +26,8 @@ import java.util.List; import org.junit.jupiter.api.Test; import org.springframework.boot.io.ApplicationResourceLoader; +import org.springframework.boot.testsupport.classpath.resources.ResourcePath; +import org.springframework.boot.testsupport.classpath.resources.WithPackageResources; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.ResourceLoader; @@ -51,6 +53,7 @@ class PemContentTests { } @Test + @WithPackageResources("test-cert-chain.pem") void getCertificateReturnsCertificates() throws Exception { PemContent content = PemContent.load(contentFromClasspath("/test-cert-chain.pem"), new ApplicationResourceLoader()); @@ -69,9 +72,9 @@ class PemContentTests { } @Test + @WithPackageResources("dsa.key") void getPrivateKeyReturnsPrivateKey() throws Exception { - PemContent content = PemContent.load(contentFromClasspath("/org/springframework/boot/web/server/pkcs8/dsa.key"), - new ApplicationResourceLoader()); + PemContent content = PemContent.load(contentFromClasspath("dsa.key"), new ApplicationResourceLoader()); PrivateKey privateKey = content.getPrivateKey(); assertThat(privateKey).isNotNull(); assertThat(privateKey.getFormat()).isEqualTo("PKCS#8"); @@ -122,6 +125,7 @@ class PemContentTests { } @Test + @WithPackageResources("test-cert.pem") void loadWithStringWhenClasspathLocationReturnsContent() throws IOException { String actual = PemContent.load("classpath:test-cert.pem", new ApplicationResourceLoader()).toString(); String expected = contentFromClasspath("test-cert.pem"); @@ -129,21 +133,24 @@ class PemContentTests { } @Test - void loadWithStringWhenFileLocationReturnsContent() throws IOException { - String actual = PemContent.load("src/test/resources/test-cert.pem", new ApplicationResourceLoader()).toString(); + @WithPackageResources("test-cert.pem") + void loadWithStringWhenFileLocationReturnsContent(@ResourcePath("test-cert.pem") String testCert) + throws IOException { + String actual = PemContent.load(testCert, new ApplicationResourceLoader()).toString(); String expected = contentFromClasspath("test-cert.pem"); assertThat(actual).isEqualTo(expected); } @Test - void loadWithPathReturnsContent() throws IOException { - Path path = Path.of("src/test/resources/test-cert.pem"); - String actual = PemContent.load(path).toString(); + @WithPackageResources("test-cert.pem") + void loadWithPathReturnsContent(@ResourcePath("test-cert.pem") Path testCert) throws IOException { + String actual = PemContent.load(testCert).toString(); String expected = contentFromClasspath("test-cert.pem"); assertThat(actual).isEqualTo(expected); } @Test + @WithPackageResources("test-cert.pem") void loadWithResourceLoaderUsesResourceLoader() throws IOException { ResourceLoader resourceLoader = spy(new DefaultResourceLoader()); PemContent.load("classpath:test-cert.pem", resourceLoader); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/ssl/pem/PemPrivateKeyParserTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/ssl/pem/PemPrivateKeyParserTests.java index 22ceb5455b4..b337dfb28c3 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/ssl/pem/PemPrivateKeyParserTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/ssl/pem/PemPrivateKeyParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -47,36 +47,25 @@ class PemPrivateKeyParserTests { "rsa.key, RSA", "rsa-pss.key, RSASSA-PSS" }) - // @formatter:on + // @formatter:on void shouldParseTraditionalPkcs8(String file, String algorithm) throws IOException { - PrivateKey privateKey = PemPrivateKeyParser.parse(read("org/springframework/boot/web/server/pkcs8/" + file)); + PrivateKey privateKey = PemPrivateKeyParser.parse(read("pkcs8/" + file)); assertThat(privateKey).isNotNull(); assertThat(privateKey.getFormat()).isEqualTo("PKCS#8"); assertThat(privateKey.getAlgorithm()).isEqualTo(algorithm); } - @ParameterizedTest - // @formatter:off - @CsvSource({ - "rsa.key, RSA" - }) - // @formatter:on - void shouldParseTraditionalPkcs1(String file, String algorithm) throws IOException { - PrivateKey privateKey = PemPrivateKeyParser.parse(read("org/springframework/boot/web/server/pkcs1/" + file)); + @Test + void shouldParseTraditionalPkcs1() throws IOException { + PrivateKey privateKey = PemPrivateKeyParser.parse(read("pkcs1/rsa.key")); assertThat(privateKey).isNotNull(); assertThat(privateKey.getFormat()).isEqualTo("PKCS#8"); - assertThat(privateKey.getAlgorithm()).isEqualTo(algorithm); + assertThat(privateKey.getAlgorithm()).isEqualTo("RSA"); } - @ParameterizedTest - // @formatter:off - @ValueSource(strings = { - "dsa.key" - }) - // @formatter:on - void shouldNotParseUnsupportedTraditionalPkcs1(String file) { - assertThatIllegalStateException() - .isThrownBy(() -> PemPrivateKeyParser.parse(read("org/springframework/boot/web/server/pkcs1/" + file))) + @Test + void shouldNotParseUnsupportedTraditionalPkcs1() { + assertThatIllegalStateException().isThrownBy(() -> PemPrivateKeyParser.parse(read("pkcs1/dsa.key"))) .withMessageContaining("Missing private key or unrecognized format"); } @@ -94,9 +83,9 @@ class PemPrivateKeyParserTests { "secp384r1.key, secp384r1, 1.3.132.0.34", "secp521r1.key, secp521r1, 1.3.132.0.35" }) - // @formatter:on + // @formatter:on void shouldParseEcPkcs8(String file, String curveName, String oid) throws IOException { - PrivateKey privateKey = PemPrivateKeyParser.parse(read("org/springframework/boot/web/server/pkcs8/" + file)); + PrivateKey privateKey = PemPrivateKeyParser.parse(read("pkcs8/" + file)); assertThat(privateKey).isNotNull(); assertThat(privateKey.getFormat()).isEqualTo("PKCS#8"); assertThat(privateKey.getAlgorithm()).isEqualTo("EC"); @@ -115,8 +104,7 @@ class PemPrivateKeyParserTests { }) // @formatter:on void shouldNotParseUnsupportedEcPkcs8(String file) { - assertThatIllegalStateException() - .isThrownBy(() -> PemPrivateKeyParser.parse(read("org/springframework/boot/web/server/pkcs8/" + file))) + assertThatIllegalStateException().isThrownBy(() -> PemPrivateKeyParser.parse(read("pkcs8/" + file))) .withMessageContaining("Missing private key or unrecognized format"); } @@ -128,7 +116,7 @@ class PemPrivateKeyParserTests { }) // @formatter:on void shouldParseEdDsaPkcs8(String file) throws IOException { - PrivateKey privateKey = PemPrivateKeyParser.parse(read("org/springframework/boot/web/server/pkcs8/" + file)); + PrivateKey privateKey = PemPrivateKeyParser.parse(read("pkcs8/" + file)); assertThat(privateKey).isNotNull(); assertThat(privateKey.getFormat()).isEqualTo("PKCS#8"); assertThat(privateKey.getAlgorithm()).isEqualTo("EdDSA"); @@ -142,7 +130,7 @@ class PemPrivateKeyParserTests { }) // @formatter:on void shouldParseXdhPkcs8(String file) throws IOException { - PrivateKey privateKey = PemPrivateKeyParser.parse(read("org/springframework/boot/web/server/pkcs8/" + file)); + PrivateKey privateKey = PemPrivateKeyParser.parse(read("pkcs8/" + file)); assertThat(privateKey).isNotNull(); assertThat(privateKey.getFormat()).isEqualTo("PKCS#8"); assertThat(privateKey.getAlgorithm()).isEqualTo("XDH"); @@ -164,7 +152,7 @@ class PemPrivateKeyParserTests { }) // @formatter:on void shouldParseEcSec1(String file, String curveName, String oid) throws IOException { - PrivateKey privateKey = PemPrivateKeyParser.parse(read("org/springframework/boot/web/server/sec1/" + file)); + PrivateKey privateKey = PemPrivateKeyParser.parse(read("sec1/" + file)); assertThat(privateKey).isNotNull(); assertThat(privateKey.getFormat()).isEqualTo("PKCS#8"); assertThat(privateKey.getAlgorithm()).isEqualTo("EC"); @@ -183,14 +171,13 @@ class PemPrivateKeyParserTests { }) // @formatter:on void shouldNotParseUnsupportedEcSec1(String file) { - assertThatIllegalStateException() - .isThrownBy(() -> PemPrivateKeyParser.parse(read("org/springframework/boot/web/server/sec1/" + file))) + assertThatIllegalStateException().isThrownBy(() -> PemPrivateKeyParser.parse(read("sec1/" + file))) .withMessageContaining("Missing private key or unrecognized format"); } @Test void parseWithNonKeyTextWillThrowException() { - assertThatIllegalStateException().isThrownBy(() -> PemPrivateKeyParser.parse(read("test-banner.txt"))); + assertThatIllegalStateException().isThrownBy(() -> PemPrivateKeyParser.parse(read("file.txt"))); } @ParameterizedTest @@ -208,8 +195,7 @@ class PemPrivateKeyParserTests { // openssl pkcs8 -topk8 -in -out -v2 // -passout pass:test // where is aes128 or aes256 - PrivateKey privateKey = PemPrivateKeyParser.parse(read("org/springframework/boot/web/server/pkcs8/" + file), - "test"); + PrivateKey privateKey = PemPrivateKeyParser.parse(read("pkcs8/" + file), "test"); assertThat(privateKey).isNotNull(); assertThat(privateKey.getFormat()).isEqualTo("PKCS#8"); assertThat(privateKey.getAlgorithm()).isEqualTo(algorithm); @@ -221,8 +207,7 @@ class PemPrivateKeyParserTests { // openssl pkcs8 -topk8 -in rsa.key -out rsa-des-ede3-cbc.key -v2 des3 -passout // pass:test assertThatIllegalStateException() - .isThrownBy(() -> PemPrivateKeyParser - .parse(read("org/springframework/boot/web/server/pkcs8/rsa-des-ede3-cbc.key"), "test")) + .isThrownBy(() -> PemPrivateKeyParser.parse(read("pkcs8/rsa-des-ede3-cbc.key"), "test")) .isInstanceOf(IllegalStateException.class) .withMessageContaining("Error decrypting private key"); } @@ -233,8 +218,7 @@ class PemPrivateKeyParserTests { // openssl pkcs8 -topk8 -in rsa.key -out rsa-des-ede3-cbc.key -scrypt -passout // pass:test assertThatIllegalStateException() - .isThrownBy(() -> PemPrivateKeyParser - .parse(read("org/springframework/boot/web/server/pkcs8/rsa-scrypt.key"), "test")) + .isThrownBy(() -> PemPrivateKeyParser.parse(read("pkcs8/rsa-scrypt.key"), "test")) .withMessageContaining("Error decrypting private key"); } @@ -244,8 +228,7 @@ class PemPrivateKeyParserTests { // openssl ecparam -genkey -name prime256v1 | openssl ec -aes-128-cbc -out // prime256v1-aes-128-cbc.key assertThatIllegalStateException() - .isThrownBy(() -> PemPrivateKeyParser - .parse(read("org/springframework/boot/web/server/sec1/prime256v1-aes-128-cbc.key"), "test")) + .isThrownBy(() -> PemPrivateKeyParser.parse(read("sec1/prime256v1-aes-128-cbc.key"), "test")) .withMessageContaining("Missing private key or unrecognized format"); } @@ -254,13 +237,13 @@ class PemPrivateKeyParserTests { // created with: // openssl genrsa -aes-256-cbc -out rsa-aes-256-cbc.key assertThatIllegalStateException() - .isThrownBy(() -> PemPrivateKeyParser - .parse(read("org/springframework/boot/web/server/pkcs1/rsa-aes-256-cbc.key"), "test")) + .isThrownBy(() -> PemPrivateKeyParser.parse(read("pkcs1/rsa-aes-256-cbc.key"), "test")) .withMessageContaining("Missing private key or unrecognized format"); } private String read(String path) throws IOException { - return new ClassPathResource(path).getContentAsString(StandardCharsets.UTF_8); + return new ClassPathResource("org/springframework/boot/ssl/pem/" + path) + .getContentAsString(StandardCharsets.UTF_8); } } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/ssl/pem/PemSslStoreBundleTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/ssl/pem/PemSslStoreBundleTests.java index fd78a1e711e..77e7e131102 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/ssl/pem/PemSslStoreBundleTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/ssl/pem/PemSslStoreBundleTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,6 +24,7 @@ import java.util.function.Consumer; import org.junit.jupiter.api.Test; +import org.springframework.boot.testsupport.classpath.resources.WithPackageResources; import org.springframework.util.function.ThrowingConsumer; import static org.assertj.core.api.Assertions.assertThat; @@ -120,6 +121,7 @@ class PemSslStoreBundleTests { } @Test + @WithPackageResources({ "test-cert.pem", "test-key.pem" }) void createWithDetailsWhenHasKeyStoreDetailsCertAndKey() { PemSslStoreDetails keyStoreDetails = PemSslStoreDetails.forCertificate("classpath:test-cert.pem") .withPrivateKey("classpath:test-key.pem"); @@ -130,9 +132,10 @@ class PemSslStoreBundleTests { } @Test + @WithPackageResources({ "test-cert.pem", "pkcs8/key-rsa-encrypted.pem" }) void createWithDetailsWhenHasKeyStoreDetailsCertAndEncryptedKey() { PemSslStoreDetails keyStoreDetails = PemSslStoreDetails.forCertificate("classpath:test-cert.pem") - .withPrivateKey("classpath:ssl/pkcs8/key-rsa-encrypted.pem") + .withPrivateKey("classpath:pkcs8/key-rsa-encrypted.pem") .withPrivateKeyPassword("test"); PemSslStoreDetails trustStoreDetails = null; PemSslStoreBundle bundle = new PemSslStoreBundle(keyStoreDetails, trustStoreDetails); @@ -141,6 +144,7 @@ class PemSslStoreBundleTests { } @Test + @WithPackageResources({ "test-cert.pem", "test-key.pem" }) void createWithDetailsWhenHasKeyStoreDetailsAndTrustStoreDetailsWithoutKey() { PemSslStoreDetails keyStoreDetails = PemSslStoreDetails.forCertificate("classpath:test-cert.pem") .withPrivateKey("classpath:test-key.pem"); @@ -151,6 +155,7 @@ class PemSslStoreBundleTests { } @Test + @WithPackageResources({ "test-cert.pem", "test-key.pem" }) void createWithDetailsWhenHasKeyStoreDetailsAndTrustStoreDetails() { PemSslStoreDetails keyStoreDetails = PemSslStoreDetails.forCertificate("classpath:test-cert.pem") .withPrivateKey("classpath:test-key.pem"); @@ -173,6 +178,7 @@ class PemSslStoreBundleTests { @Test @SuppressWarnings("removal") + @WithPackageResources({ "test-cert.pem", "test-key.pem" }) void createWithDetailsWhenHasKeyStoreDetailsAndTrustStoreDetailsAndAlias() { PemSslStoreDetails keyStoreDetails = PemSslStoreDetails.forCertificate("classpath:test-cert.pem") .withPrivateKey("classpath:test-key.pem"); @@ -184,6 +190,7 @@ class PemSslStoreBundleTests { } @Test + @WithPackageResources({ "test-cert.pem", "test-key.pem" }) void createWithDetailsWhenHasStoreType() { PemSslStoreDetails keyStoreDetails = new PemSslStoreDetails("PKCS12", "classpath:test-cert.pem", "classpath:test-key.pem"); @@ -195,6 +202,7 @@ class PemSslStoreBundleTests { } @Test + @WithPackageResources({ "test-cert.pem", "test-key.pem" }) void createWithDetailsWhenHasKeyStoreDetailsAndTrustStoreDetailsAndKeyPassword() { PemSslStoreDetails keyStoreDetails = PemSslStoreDetails.forCertificate("classpath:test-cert.pem") .withPrivateKey("classpath:test-key.pem") diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/AbstractClientHttpRequestFactoriesTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/AbstractClientHttpRequestFactoriesTests.java index 3e7e24def71..1c276a6b541 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/AbstractClientHttpRequestFactoriesTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/AbstractClientHttpRequestFactoriesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -36,6 +36,7 @@ import org.springframework.boot.ssl.SslBundle; import org.springframework.boot.ssl.SslBundleKey; import org.springframework.boot.ssl.jks.JksSslStoreBundle; import org.springframework.boot.ssl.jks.JksSslStoreDetails; +import org.springframework.boot.testsupport.classpath.resources.WithPackageResources; import org.springframework.boot.testsupport.web.servlet.DirtiesUrlFactories; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.server.Ssl; @@ -124,6 +125,7 @@ abstract class AbstractClientHttpRequestFactoriesTests { SslServerCustomizer customizer = new SslServerCustomizer(null, null, null, WebServerSslBundle.get(ssl)); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/netty/NettyReactiveWebServerFactoryTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/netty/NettyReactiveWebServerFactoryTests.java index d6700818710..fdd41b0f9af 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/netty/NettyReactiveWebServerFactoryTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/netty/NettyReactiveWebServerFactoryTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,6 +39,7 @@ import org.springframework.boot.ssl.SslBundle; import org.springframework.boot.ssl.SslBundles; import org.springframework.boot.ssl.pem.PemSslStoreBundle; import org.springframework.boot.ssl.pem.PemSslStoreDetails; +import org.springframework.boot.testsupport.classpath.resources.WithPackageResources; import org.springframework.boot.web.reactive.server.AbstractReactiveWebServerFactory; import org.springframework.boot.web.reactive.server.AbstractReactiveWebServerFactoryTests; import org.springframework.boot.web.server.PortInUseException; @@ -133,12 +134,14 @@ class NettyReactiveWebServerFactoryTests extends AbstractReactiveWebServerFactor } @Test + @WithPackageResources("test.jks") void whenSslIsConfiguredWithAValidAliasARequestSucceeds() { Mono result = testSslWithAlias("test-alias"); StepVerifier.create(result).expectNext("Hello World").expectComplete().verify(Duration.ofSeconds(30)); } @Test + @WithPackageResources({ "1.key", "1.crt", "2.key", "2.crt" }) void whenSslBundleIsUpdatedThenSslIsReloaded() { DefaultSslBundleRegistry bundles = new DefaultSslBundleRegistry("bundle1", createSslBundle("1.key", "1.crt")); Mono result = testSslWithBundle(bundles, "bundle1"); @@ -231,9 +234,7 @@ class NettyReactiveWebServerFactoryTests extends AbstractReactiveWebServerFactor private static SslBundle createSslBundle(String key, String certificate) { return SslBundle.of(new PemSslStoreBundle( - new PemSslStoreDetails(null, "classpath:org/springframework/boot/web/embedded/netty/" + certificate, - "classpath:org/springframework/boot/web/embedded/netty/" + key), - null)); + new PemSslStoreDetails(null, "classpath:" + certificate, "classpath:" + key), null)); } static class NoPortNettyReactiveWebServerFactory extends NettyReactiveWebServerFactory { diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/tomcat/SslConnectorCustomizerTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/tomcat/SslConnectorCustomizerTests.java index 09444ef595c..f8ff57396d4 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/tomcat/SslConnectorCustomizerTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/tomcat/SslConnectorCustomizerTests.java @@ -28,6 +28,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.boot.testsupport.classpath.resources.WithPackageResources; import org.springframework.boot.testsupport.ssl.MockPkcs11Security; import org.springframework.boot.testsupport.ssl.MockPkcs11SecurityProvider; import org.springframework.boot.testsupport.system.OutputCaptureExtension; @@ -71,6 +72,7 @@ class SslConnectorCustomizerTests { } @Test + @WithPackageResources("test.jks") void sslCiphersConfiguration() throws Exception { Ssl ssl = new Ssl(); ssl.setKeyStore("classpath:test.jks"); @@ -85,10 +87,11 @@ class SslConnectorCustomizerTests { } @Test + @WithPackageResources("test.jks") void sslEnabledMultipleProtocolsConfiguration() throws Exception { Ssl ssl = new Ssl(); ssl.setKeyPassword("password"); - ssl.setKeyStore("src/test/resources/test.jks"); + ssl.setKeyStore("classpath:test.jks"); ssl.setEnabledProtocols(new String[] { "TLSv1.1", "TLSv1.2" }); ssl.setCiphers(new String[] { "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", "BRAVO" }); Connector connector = this.tomcat.getConnector(); @@ -101,10 +104,11 @@ class SslConnectorCustomizerTests { } @Test + @WithPackageResources("test.jks") void sslEnabledProtocolsConfiguration() throws Exception { Ssl ssl = new Ssl(); ssl.setKeyPassword("password"); - ssl.setKeyStore("src/test/resources/test.jks"); + ssl.setKeyStore("classpath:test.jks"); ssl.setEnabledProtocols(new String[] { "TLSv1.2" }); ssl.setCiphers(new String[] { "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", "BRAVO" }); Connector connector = this.tomcat.getConnector(); @@ -126,11 +130,12 @@ class SslConnectorCustomizerTests { } @Test + @WithPackageResources("test.jks") void customizeWhenSslIsEnabledWithPkcs11AndKeyStoreThrowsException() { Ssl ssl = new Ssl(); ssl.setKeyStoreType("PKCS11"); ssl.setKeyStoreProvider(MockPkcs11SecurityProvider.NAME); - ssl.setKeyStore("src/test/resources/test.jks"); + ssl.setKeyStore("classpath:test.jks"); ssl.setKeyPassword("password"); assertThatIllegalStateException().isThrownBy(() -> { SslConnectorCustomizer customizer = new SslConnectorCustomizer(this.logger, this.tomcat.getConnector(), diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/tomcat/TomcatServletWebServerFactoryTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/tomcat/TomcatServletWebServerFactoryTests.java index 1b684e98184..3bad808a85f 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/tomcat/TomcatServletWebServerFactoryTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/tomcat/TomcatServletWebServerFactoryTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -80,6 +80,7 @@ import org.junit.jupiter.api.Test; import org.mockito.InOrder; import org.springframework.boot.ssl.DefaultSslBundleRegistry; +import org.springframework.boot.testsupport.classpath.resources.WithPackageResources; import org.springframework.boot.testsupport.system.CapturedOutput; import org.springframework.boot.web.server.PortInUseException; import org.springframework.boot.web.server.Shutdown; @@ -683,11 +684,12 @@ class TomcatServletWebServerFactoryTests extends AbstractServletWebServerFactory } @Test + @WithPackageResources("test.jks") void sslWithHttp11Nio2Protocol() throws Exception { TomcatServletWebServerFactory factory = getFactory(); addTestTxtFile(factory); factory.setProtocol(Http11Nio2Protocol.class.getName()); - factory.setSsl(getSsl(null, "password", "src/test/resources/test.jks")); + factory.setSsl(getSsl(null, "password", "classpath:test.jks")); this.webServer = factory.getWebServer(); this.webServer.start(); SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/undertow/UndertowServletWebServerFactoryTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/undertow/UndertowServletWebServerFactoryTests.java index ec7812ee82d..52d9bf1c26a 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/undertow/UndertowServletWebServerFactoryTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/undertow/UndertowServletWebServerFactoryTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -38,7 +38,9 @@ import io.undertow.servlet.api.ServletContainer; import jakarta.servlet.ServletRegistration.Dynamic; import org.apache.hc.client5.http.classic.HttpClient; import org.apache.hc.client5.http.impl.classic.HttpClients; +import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory; import org.apache.hc.core5.http.HttpResponse; +import org.apache.hc.core5.ssl.SSLContextBuilder; import org.apache.jasper.servlet.JspServlet; import org.awaitility.Awaitility; import org.junit.jupiter.api.AfterEach; @@ -46,6 +48,7 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.mockito.InOrder; +import org.springframework.boot.testsupport.classpath.resources.WithPackageResources; import org.springframework.boot.testsupport.web.servlet.ExampleServlet; import org.springframework.boot.web.server.ErrorPage; import org.springframework.boot.web.server.GracefulShutdownResult; @@ -55,6 +58,7 @@ import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.boot.web.servlet.server.AbstractServletWebServerFactory; import org.springframework.boot.web.servlet.server.AbstractServletWebServerFactoryTests; import org.springframework.http.HttpStatus; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.test.util.ReflectionTestUtils; import static org.assertj.core.api.Assertions.assertThat; @@ -155,7 +159,7 @@ class UndertowServletWebServerFactoryTests extends AbstractServletWebServerFacto @Test void basicSslClasspathKeyStore() throws Exception { - testBasicSslWithKeyStore("classpath:test.jks"); + testBasicSslWithKeyStore("classpath:org/springframework/boot/web/server/test.jks"); } @Test @@ -286,6 +290,7 @@ class UndertowServletWebServerFactoryTests extends AbstractServletWebServerFacto } @Test + @WithPackageResources("restricted.jks") void sslRestrictedProtocolsEmptyCipherFailure() { assertThatIOException() .isThrownBy(() -> testRestrictedSSLProtocolsAndCipherSuites(new String[] { "TLSv1.2" }, @@ -294,6 +299,7 @@ class UndertowServletWebServerFactoryTests extends AbstractServletWebServerFacto } @Test + @WithPackageResources("restricted.jks") void sslRestrictedProtocolsECDHETLS1Failure() { assertThatIOException() .isThrownBy(() -> testRestrictedSSLProtocolsAndCipherSuites(new String[] { "TLSv1" }, @@ -302,18 +308,21 @@ class UndertowServletWebServerFactoryTests extends AbstractServletWebServerFacto } @Test + @WithPackageResources("restricted.jks") void sslRestrictedProtocolsECDHESuccess() throws Exception { testRestrictedSSLProtocolsAndCipherSuites(new String[] { "TLSv1.2" }, new String[] { "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" }); } @Test + @WithPackageResources("restricted.jks") void sslRestrictedProtocolsRSATLS12Success() throws Exception { testRestrictedSSLProtocolsAndCipherSuites(new String[] { "TLSv1.2" }, new String[] { "TLS_RSA_WITH_AES_128_CBC_SHA256" }); } @Test + @WithPackageResources("restricted.jks") void sslRestrictedProtocolsRSATLS11Failure() { assertThatIOException() .isThrownBy(() -> testRestrictedSSLProtocolsAndCipherSuites(new String[] { "TLSv1.1" }, @@ -374,4 +383,15 @@ class UndertowServletWebServerFactoryTests extends AbstractServletWebServerFacto return ((UndertowServletWebServer) this.webServer).getStartLogMessage(); } + private void testRestrictedSSLProtocolsAndCipherSuites(String[] protocols, String[] ciphers) throws Exception { + AbstractServletWebServerFactory factory = getFactory(); + factory.setSsl(getSsl(null, "password", "classpath:restricted.jks", null, protocols, ciphers)); + this.webServer = factory.getWebServer(new ServletRegistrationBean<>(new ExampleServlet(true, false), "/hello")); + this.webServer.start(); + SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( + new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build()); + HttpComponentsClientHttpRequestFactory requestFactory = createHttpComponentsRequestFactory(socketFactory); + assertThat(getResponse(getLocalUrl("https", "/hello"), requestFactory)).contains("scheme=https"); + } + } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/result/view/MustacheViewResolverTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/result/view/MustacheViewResolverTests.java index a64f17b0014..0868b81a33b 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/result/view/MustacheViewResolverTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/result/view/MustacheViewResolverTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2022 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,7 @@ import java.time.Duration; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.context.support.GenericApplicationContext; import static org.assertj.core.api.Assertions.assertThat; @@ -32,8 +33,6 @@ import static org.assertj.core.api.Assertions.assertThat; */ class MustacheViewResolverTests { - private final String prefix = "classpath:/" + getClass().getPackage().getName().replace(".", "/") + "/"; - private final MustacheViewResolver resolver = new MustacheViewResolver(); @BeforeEach @@ -41,7 +40,7 @@ class MustacheViewResolverTests { GenericApplicationContext applicationContext = new GenericApplicationContext(); applicationContext.refresh(); this.resolver.setApplicationContext(applicationContext); - this.resolver.setPrefix(this.prefix); + this.resolver.setPrefix("classpath:"); this.resolver.setSuffix(".html"); } @@ -51,6 +50,7 @@ class MustacheViewResolverTests { } @Test + @WithResource(name = "template.html", content = "Hello {{World}}") void resolveExisting() { assertThat(this.resolver.resolveViewName("template", null).block(Duration.ofSeconds(30))).isNotNull(); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/result/view/MustacheViewTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/result/view/MustacheViewTests.java index 2431bf79bc3..485f2403fca 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/result/view/MustacheViewTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/result/view/MustacheViewTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,6 +24,7 @@ import com.samskivert.mustache.Mustache; import org.junit.jupiter.api.Test; import reactor.test.StepVerifier; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.context.support.StaticApplicationContext; import org.springframework.http.MediaType; import org.springframework.mock.http.server.reactive.MockServerHttpRequest; @@ -38,17 +39,15 @@ import static org.assertj.core.api.Assertions.assertThat; */ class MustacheViewTests { - private final String templateUrl = "classpath:/" + getClass().getPackage().getName().replace(".", "/") - + "/template.html"; - private final StaticApplicationContext context = new StaticApplicationContext(); @Test + @WithResource(name = "template.html", content = "Hello {{World}}") void viewResolvesHandlebars() { MockServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/test").build()); MustacheView view = new MustacheView(); view.setCompiler(Mustache.compiler()); - view.setUrl(this.templateUrl); + view.setUrl("classpath:template.html"); view.setCharset(StandardCharsets.UTF_8.displayName()); view.setApplicationContext(this.context); view.render(Collections.singletonMap("World", "Spring"), MediaType.TEXT_HTML, exchange) diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/server/AbstractReactiveWebServerFactoryTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/server/AbstractReactiveWebServerFactoryTests.java index c1d20a9be10..40ebd773a54 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/server/AbstractReactiveWebServerFactoryTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/server/AbstractReactiveWebServerFactoryTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,6 @@ package org.springframework.boot.web.reactive.server; -import java.io.FileInputStream; import java.io.InputStream; import java.net.InetSocketAddress; import java.net.ServerSocket; @@ -54,12 +53,15 @@ import reactor.netty.http.Http11SslContextSpec; import reactor.netty.http.client.HttpClient; import reactor.test.StepVerifier; +import org.springframework.boot.testsupport.classpath.resources.ResourcePath; +import org.springframework.boot.testsupport.classpath.resources.WithPackageResources; import org.springframework.boot.web.server.Compression; import org.springframework.boot.web.server.GracefulShutdownResult; import org.springframework.boot.web.server.Http2; import org.springframework.boot.web.server.Shutdown; import org.springframework.boot.web.server.Ssl; import org.springframework.boot.web.server.WebServer; +import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DefaultDataBufferFactory; @@ -165,13 +167,15 @@ public abstract class AbstractReactiveWebServerFactoryTests { } @Test + @WithPackageResources("test.jks") void basicSslFromClassPath() { testBasicSslWithKeyStore("classpath:test.jks", "password"); } @Test - void basicSslFromFileSystem() { - testBasicSslWithKeyStore("src/test/resources/test.jks", "password"); + @WithPackageResources("test.jks") + void basicSslFromFileSystem(@ResourcePath("test.jks") String keyStore) { + testBasicSslWithKeyStore(keyStore, "password"); } @@ -199,6 +203,7 @@ public abstract class AbstractReactiveWebServerFactoryTests { } @Test + @WithPackageResources("test.jks") void sslWithValidAlias() { String keyStore = "classpath:test.jks"; String keyPassword = "password"; @@ -228,6 +233,7 @@ public abstract class AbstractReactiveWebServerFactoryTests { } @Test + @WithPackageResources("test.jks") void sslWithInvalidAliasFailsDuringStartup() { String keyStore = "classpath:test.jks"; String keyPassword = "password"; @@ -254,6 +260,7 @@ public abstract class AbstractReactiveWebServerFactoryTests { } @Test + @WithPackageResources("test.jks") void sslWantsClientAuthenticationSucceedsWithClientCertificate() throws Exception { Ssl ssl = new Ssl(); ssl.setClientAuth(Ssl.ClientAuth.WANT); @@ -265,6 +272,7 @@ public abstract class AbstractReactiveWebServerFactoryTests { } @Test + @WithPackageResources("test.jks") void sslWantsClientAuthenticationSucceedsWithoutClientCertificate() { Ssl ssl = new Ssl(); ssl.setClientAuth(Ssl.ClientAuth.WANT); @@ -275,10 +283,10 @@ public abstract class AbstractReactiveWebServerFactoryTests { testClientAuthSuccess(ssl, buildTrustAllSslConnector()); } - protected ReactorClientHttpConnector buildTrustAllSslWithClientKeyConnector(String keyStoreFile, + protected ReactorClientHttpConnector buildTrustAllSslWithClientKeyConnector(String keyStore, String keyStorePassword) throws Exception { KeyStore clientKeyStore = KeyStore.getInstance(KeyStore.getDefaultType()); - try (InputStream stream = new FileInputStream("src/test/resources/" + keyStoreFile)) { + try (InputStream stream = new ClassPathResource(keyStore).getInputStream()) { clientKeyStore.load(stream, "secret".toCharArray()); } KeyManagerFactory clientKeyManagerFactory = KeyManagerFactory @@ -312,6 +320,7 @@ public abstract class AbstractReactiveWebServerFactoryTests { } @Test + @WithPackageResources("test.jks") void sslNeedsClientAuthenticationSucceedsWithClientCertificate() throws Exception { Ssl ssl = new Ssl(); ssl.setClientAuth(Ssl.ClientAuth.NEED); @@ -323,6 +332,7 @@ public abstract class AbstractReactiveWebServerFactoryTests { } @Test + @WithPackageResources("test.jks") void sslNeedsClientAuthenticationFailsWithoutClientCertificate() { Ssl ssl = new Ssl(); ssl.setClientAuth(Ssl.ClientAuth.NEED); @@ -334,6 +344,7 @@ public abstract class AbstractReactiveWebServerFactoryTests { } @Test + @WithPackageResources({ "test-cert.pem", "test-key.pem", "test.p12" }) void sslWithPemCertificates() throws Exception { Ssl ssl = new Ssl(); ssl.setClientAuth(Ssl.ClientAuth.NEED); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/server/WebServerSslBundleTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/server/WebServerSslBundleTests.java index 5ed64b09109..d8efdb30f84 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/server/WebServerSslBundleTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/server/WebServerSslBundleTests.java @@ -22,6 +22,8 @@ import org.springframework.boot.ssl.SslBundle; import org.springframework.boot.ssl.SslBundleKey; import org.springframework.boot.ssl.SslOptions; import org.springframework.boot.ssl.SslStoreBundle; +import org.springframework.boot.testsupport.classpath.resources.ResourcePath; +import org.springframework.boot.testsupport.classpath.resources.WithPackageResources; import org.springframework.boot.testsupport.ssl.MockPkcs11Security; import org.springframework.boot.testsupport.ssl.MockPkcs11SecurityProvider; @@ -47,6 +49,7 @@ class WebServerSslBundleTests { } @Test + @WithPackageResources("test.p12") void whenFromJksProperties() { Ssl ssl = new Ssl(); ssl.setKeyStore("classpath:test.p12"); @@ -77,11 +80,12 @@ class WebServerSslBundleTests { } @Test - void whenFromJksPropertiesWithPkcs11StoreType() { + @WithPackageResources("test.jks") + void whenFromJksPropertiesWithPkcs11StoreType(@ResourcePath("test.jks") String keyStorePath) { Ssl ssl = new Ssl(); ssl.setKeyStoreType("PKCS11"); ssl.setKeyStoreProvider(MockPkcs11SecurityProvider.NAME); - ssl.setKeyStore("src/test/resources/test.jks"); + ssl.setKeyStore(keyStorePath); ssl.setKeyPassword("password"); ssl.setClientAuth(Ssl.ClientAuth.NONE); assertThatIllegalStateException().isThrownBy(() -> WebServerSslBundle.get(ssl)) @@ -108,6 +112,7 @@ class WebServerSslBundleTests { } @Test + @WithPackageResources({ "test-cert.pem", "test-key.pem", "test-cert-chain.pem" }) void whenFromPemProperties() { Ssl ssl = new Ssl(); ssl.setCertificate("classpath:test-cert.pem"); @@ -135,6 +140,7 @@ class WebServerSslBundleTests { } @Test + @WithPackageResources({ "test-cert.pem", "test-key.pem", "test.p12" }) void whenPemKeyStoreAndJksTrustStoreProperties() { Ssl ssl = new Ssl(); ssl.setCertificate("classpath:test-cert.pem"); @@ -163,6 +169,7 @@ class WebServerSslBundleTests { } @Test + @WithPackageResources({ "test.p12", "test-cert-chain.pem" }) void whenJksKeyStoreAndPemTrustStoreProperties() { Ssl ssl = new Ssl(); ssl.setKeyStore("classpath:test.p12"); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/context/ServletWebServerMvcIntegrationTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/context/ServletWebServerMvcIntegrationTests.java index 24d04bdb3be..ac717b24fa8 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/context/ServletWebServerMvcIntegrationTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/context/ServletWebServerMvcIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,7 @@ import java.net.URI; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.boot.testsupport.web.servlet.DirtiesUrlFactories; import org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; @@ -86,6 +87,7 @@ class ServletWebServerMvcIntegrationTests { } @Test + @WithResource(name = "conf.properties", content = "context=/example") void advancedConfig() throws Exception { this.context = new AnnotationConfigServletWebServerApplicationContext(AdvancedConfig.class); doTest(this.context, "/example/spring/hello"); @@ -161,7 +163,7 @@ class ServletWebServerMvcIntegrationTests { @Configuration(proxyBeanMethods = false) @EnableWebMvc - @PropertySource("classpath:/org/springframework/boot/web/servlet/context/conf.properties") + @PropertySource("classpath:conf.properties") static class AdvancedConfig { private final Environment env; diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java index bafcd060dc8..0b3329fd732 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -121,6 +121,8 @@ import org.springframework.boot.ssl.pem.PemSslStoreBundle; import org.springframework.boot.ssl.pem.PemSslStoreDetails; import org.springframework.boot.system.ApplicationHome; import org.springframework.boot.system.ApplicationTemp; +import org.springframework.boot.testsupport.classpath.resources.ResourcePath; +import org.springframework.boot.testsupport.classpath.resources.WithPackageResources; import org.springframework.boot.testsupport.system.CapturedOutput; import org.springframework.boot.testsupport.system.OutputCaptureExtension; import org.springframework.boot.testsupport.web.servlet.DirtiesUrlFactories; @@ -426,16 +428,19 @@ public abstract class AbstractServletWebServerFactoryTests { } @Test + @WithPackageResources("test.jks") void basicSslFromClassPath() throws Exception { testBasicSslWithKeyStore("classpath:test.jks"); } @Test - void basicSslFromFileSystem() throws Exception { - testBasicSslWithKeyStore("src/test/resources/test.jks"); + @WithPackageResources("test.jks") + void basicSslFromFileSystem(@ResourcePath("test.jks") String keyStore) throws Exception { + testBasicSslWithKeyStore(keyStore); } @Test + @WithPackageResources("test.jks") void sslDisabled() throws Exception { AbstractServletWebServerFactory factory = getFactory(); Ssl ssl = getSsl(null, "password", "classpath:test.jks"); @@ -451,9 +456,10 @@ public abstract class AbstractServletWebServerFactoryTests { } @Test + @WithPackageResources("test.jks") void sslGetScheme() throws Exception { // gh-2232 AbstractServletWebServerFactory factory = getFactory(); - factory.setSsl(getSsl(null, "password", "src/test/resources/test.jks")); + factory.setSsl(getSsl(null, "password", "classpath:test.jks")); this.webServer = factory.getWebServer(new ServletRegistrationBean<>(new ExampleServlet(true, false), "/hello")); this.webServer.start(); SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( @@ -463,9 +469,10 @@ public abstract class AbstractServletWebServerFactoryTests { } @Test + @WithPackageResources("test.jks") void sslKeyAlias() throws Exception { AbstractServletWebServerFactory factory = getFactory(); - Ssl ssl = getSsl(null, "password", "test-alias", "src/test/resources/test.jks"); + Ssl ssl = getSsl(null, "password", "test-alias", "classpath:test.jks"); factory.setSsl(ssl); ServletRegistrationBean registration = new ServletRegistrationBean<>( new ExampleServlet(true, false), "/hello"); @@ -483,9 +490,10 @@ public abstract class AbstractServletWebServerFactoryTests { } @Test + @WithPackageResources("test.jks") void sslWithInvalidAliasFailsDuringStartup() { AbstractServletWebServerFactory factory = getFactory(); - Ssl ssl = getSsl(null, "password", "test-alias-404", "src/test/resources/test.jks"); + Ssl ssl = getSsl(null, "password", "test-alias-404", "classpath:test.jks"); factory.setSsl(ssl); ServletRegistrationBean registration = new ServletRegistrationBean<>( new ExampleServlet(true, false), "/hello"); @@ -499,9 +507,10 @@ public abstract class AbstractServletWebServerFactoryTests { } @Test + @WithPackageResources("test.jks") void serverHeaderIsDisabledByDefaultWhenUsingSsl() throws Exception { AbstractServletWebServerFactory factory = getFactory(); - factory.setSsl(getSsl(null, "password", "src/test/resources/test.jks")); + factory.setSsl(getSsl(null, "password", "classpath:test.jks")); this.webServer = factory.getWebServer(new ServletRegistrationBean<>(new ExampleServlet(true, false), "/hello")); this.webServer.start(); SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( @@ -516,10 +525,11 @@ public abstract class AbstractServletWebServerFactoryTests { } @Test + @WithPackageResources("test.jks") void serverHeaderCanBeCustomizedWhenUsingSsl() throws Exception { AbstractServletWebServerFactory factory = getFactory(); factory.setServerHeader("MyServer"); - factory.setSsl(getSsl(null, "password", "src/test/resources/test.jks")); + factory.setSsl(getSsl(null, "password", "classpath:test.jks")); this.webServer = factory.getWebServer(new ServletRegistrationBean<>(new ExampleServlet(true, false), "/hello")); this.webServer.start(); SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( @@ -546,14 +556,15 @@ public abstract class AbstractServletWebServerFactoryTests { } @Test - void pkcs12KeyStoreAndTrustStore() throws Exception { + @WithPackageResources("test.p12") + void pkcs12KeyStoreAndTrustStore(@ResourcePath("test.p12") File keyStoreFile) throws Exception { AbstractServletWebServerFactory factory = getFactory(); addTestTxtFile(factory); factory.setSsl(getSsl(ClientAuth.NEED, null, "classpath:test.p12", "classpath:test.p12", null, null)); this.webServer = factory.getWebServer(); this.webServer.start(); KeyStore keyStore = KeyStore.getInstance("pkcs12"); - loadStore(keyStore, new FileSystemResource("src/test/resources/test.p12")); + loadStore(keyStore, new FileSystemResource(keyStoreFile)); SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()) .loadKeyMaterial(keyStore, "secret".toCharArray()) @@ -563,14 +574,15 @@ public abstract class AbstractServletWebServerFactoryTests { } @Test - void pemKeyStoreAndTrustStore() throws Exception { + @WithPackageResources({ "test.p12", "test-cert.pem", "test-key.pem" }) + void pemKeyStoreAndTrustStore(@ResourcePath("test.p12") File keyStoreFile) throws Exception { AbstractServletWebServerFactory factory = getFactory(); addTestTxtFile(factory); factory.setSsl(getSsl("classpath:test-cert.pem", "classpath:test-key.pem")); this.webServer = factory.getWebServer(); this.webServer.start(); KeyStore keyStore = KeyStore.getInstance("pkcs12"); - loadStore(keyStore, new FileSystemResource("src/test/resources/test.p12")); + loadStore(keyStore, new FileSystemResource(keyStoreFile)); SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()) .loadKeyMaterial(keyStore, "secret".toCharArray()) @@ -580,7 +592,8 @@ public abstract class AbstractServletWebServerFactoryTests { } @Test - void pkcs12KeyStoreAndTrustStoreFromBundle() throws Exception { + @WithPackageResources("test.p12") + void pkcs12KeyStoreAndTrustStoreFromBundle(@ResourcePath("test.p12") File keyStoreFile) throws Exception { AbstractServletWebServerFactory factory = getFactory(); addTestTxtFile(factory); factory.setSsl(Ssl.forBundle("test")); @@ -589,7 +602,7 @@ public abstract class AbstractServletWebServerFactoryTests { this.webServer = factory.getWebServer(); this.webServer.start(); KeyStore keyStore = KeyStore.getInstance("pkcs12"); - loadStore(keyStore, new FileSystemResource("src/test/resources/test.p12")); + loadStore(keyStore, new FileSystemResource(keyStoreFile)); SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()) .loadKeyMaterial(keyStore, "secret".toCharArray()) @@ -599,7 +612,8 @@ public abstract class AbstractServletWebServerFactoryTests { } @Test - void pemKeyStoreAndTrustStoreFromBundle() throws Exception { + @WithPackageResources({ "test.p12", "test-cert.pem", "test-key.pem" }) + void pemKeyStoreAndTrustStoreFromBundle(@ResourcePath("test.p12") File keyStoreFile) throws Exception { AbstractServletWebServerFactory factory = getFactory(); addTestTxtFile(factory); factory.setSsl(Ssl.forBundle("test")); @@ -608,7 +622,7 @@ public abstract class AbstractServletWebServerFactoryTests { this.webServer = factory.getWebServer(); this.webServer.start(); KeyStore keyStore = KeyStore.getInstance("pkcs12"); - loadStore(keyStore, new FileSystemResource("src/test/resources/test.p12")); + loadStore(keyStore, new FileSystemResource(keyStoreFile)); SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()) .loadKeyMaterial(keyStore, "secret".toCharArray()) @@ -618,7 +632,9 @@ public abstract class AbstractServletWebServerFactoryTests { } @Test - void sslNeedsClientAuthenticationSucceedsWithClientCertificate() throws Exception { + @WithPackageResources("test.jks") + void sslNeedsClientAuthenticationSucceedsWithClientCertificate(@ResourcePath("test.jks") File keyStoreFile) + throws Exception { AbstractServletWebServerFactory factory = getFactory(); factory.setRegisterDefaultServlet(true); addTestTxtFile(factory); @@ -626,7 +642,7 @@ public abstract class AbstractServletWebServerFactoryTests { this.webServer = factory.getWebServer(); this.webServer.start(); KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); - loadStore(keyStore, new FileSystemResource("src/test/resources/test.jks")); + loadStore(keyStore, new FileSystemResource(keyStoreFile)); SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()) .loadKeyMaterial(keyStore, "password".toCharArray()) @@ -636,6 +652,7 @@ public abstract class AbstractServletWebServerFactoryTests { } @Test + @WithPackageResources("test.jks") void sslNeedsClientAuthenticationFailsWithoutClientCertificate() throws Exception { AbstractServletWebServerFactory factory = getFactory(); addTestTxtFile(factory); @@ -650,7 +667,9 @@ public abstract class AbstractServletWebServerFactoryTests { } @Test - void sslWantsClientAuthenticationSucceedsWithClientCertificate() throws Exception { + @WithPackageResources("test.jks") + void sslWantsClientAuthenticationSucceedsWithClientCertificate(@ResourcePath("test.jks") File keyStoreFile) + throws Exception { AbstractServletWebServerFactory factory = getFactory(); addTestTxtFile(factory); factory @@ -658,7 +677,7 @@ public abstract class AbstractServletWebServerFactoryTests { this.webServer = factory.getWebServer(); this.webServer.start(); KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); - loadStore(keyStore, new FileSystemResource("src/test/resources/test.jks")); + loadStore(keyStore, new FileSystemResource(keyStoreFile)); SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()) .loadKeyMaterial(keyStore, "password".toCharArray()) @@ -668,6 +687,7 @@ public abstract class AbstractServletWebServerFactoryTests { } @Test + @WithPackageResources("test.jks") void sslWantsClientAuthenticationSucceedsWithoutClientCertificate() throws Exception { AbstractServletWebServerFactory factory = getFactory(); addTestTxtFile(factory); @@ -706,7 +726,7 @@ public abstract class AbstractServletWebServerFactoryTests { return getSsl(clientAuth, keyPassword, keyAlias, keyStore, null, null, null); } - private Ssl getSsl(ClientAuth clientAuth, String keyPassword, String keyStore, String trustStore, + protected Ssl getSsl(ClientAuth clientAuth, String keyPassword, String keyStore, String trustStore, String[] supportedProtocols, String[] ciphers) { return getSsl(clientAuth, keyPassword, null, keyStore, trustStore, supportedProtocols, ciphers); } @@ -767,17 +787,6 @@ public abstract class AbstractServletWebServerFactoryTests { return SslBundle.of(stores); } - protected void testRestrictedSSLProtocolsAndCipherSuites(String[] protocols, String[] ciphers) throws Exception { - AbstractServletWebServerFactory factory = getFactory(); - factory.setSsl(getSsl(null, "password", "src/test/resources/restricted.jks", null, protocols, ciphers)); - this.webServer = factory.getWebServer(new ServletRegistrationBean<>(new ExampleServlet(true, false), "/hello")); - this.webServer.start(); - SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( - new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build()); - HttpComponentsClientHttpRequestFactory requestFactory = createHttpComponentsRequestFactory(socketFactory); - assertThat(getResponse(getLocalUrl("https", "/hello"), requestFactory)).contains("scheme=https"); - } - protected HttpComponentsClientHttpRequestFactory createHttpComponentsRequestFactory( SSLConnectionSocketFactory socketFactory) { PoolingHttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create() @@ -949,7 +958,7 @@ public abstract class AbstractServletWebServerFactoryTests { AbstractServletWebServerFactory factory = getFactory(); Ssl ssl = new Ssl(); ssl.setEnabled(true); - ssl.setKeyStore("src/test/resources/test.jks"); + ssl.setKeyStore("src/test/resources/org/springframework/boot/web/server/test.jks"); ssl.setKeyPassword("password"); factory.setSsl(ssl); factory.getSession().setTrackingModes(EnumSet.of(SessionTrackingMode.SSL)); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/view/MustacheViewResolverTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/view/MustacheViewResolverTests.java index ba3e9c8d40f..050de81ad36 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/view/MustacheViewResolverTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/view/MustacheViewResolverTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2022 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,6 +19,7 @@ package org.springframework.boot.web.servlet.view; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.context.support.GenericApplicationContext; import org.springframework.mock.web.MockServletContext; import org.springframework.web.servlet.View; @@ -33,8 +34,6 @@ import static org.assertj.core.api.Assertions.assertThat; */ class MustacheViewResolverTests { - private final String prefix = "classpath:/" + getClass().getPackage().getName().replace(".", "/") + "/"; - private final MustacheViewResolver resolver = new MustacheViewResolver(); @BeforeEach @@ -43,7 +42,7 @@ class MustacheViewResolverTests { applicationContext.refresh(); this.resolver.setApplicationContext(applicationContext); this.resolver.setServletContext(new MockServletContext()); - this.resolver.setPrefix(this.prefix); + this.resolver.setPrefix("classpath:"); this.resolver.setSuffix(".html"); } @@ -53,11 +52,13 @@ class MustacheViewResolverTests { } @Test + @WithResource(name = "template.html", content = "Hello {{World}}") void resolveExisting() throws Exception { assertThat(this.resolver.resolveViewName("template", null)).isNotNull(); } @Test + @WithResource(name = "template.html", content = "Hello {{World}}") void setsContentType() throws Exception { this.resolver.setContentType("application/octet-stream"); View view = this.resolver.resolveViewName("template", null); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/view/MustacheViewTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/view/MustacheViewTests.java index ee266a60f84..e5acdd254a5 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/view/MustacheViewTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/view/MustacheViewTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2022 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,6 +22,7 @@ import com.samskivert.mustache.Mustache; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebApplicationContext; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; @@ -37,9 +38,6 @@ import static org.assertj.core.api.Assertions.assertThat; */ class MustacheViewTests { - private final String templateUrl = "classpath:/" + getClass().getPackage().getName().replace(".", "/") - + "/template.html"; - private final MockHttpServletRequest request = new MockHttpServletRequest(); private final MockHttpServletResponse response = new MockHttpServletResponse(); @@ -55,10 +53,11 @@ class MustacheViewTests { } @Test + @WithResource(name = "template.html", content = "Hello {{World}}") void viewResolvesHandlebars() throws Exception { MustacheView view = new MustacheView(); view.setCompiler(Mustache.compiler()); - view.setUrl(this.templateUrl); + view.setUrl("classpath:template.html"); view.setApplicationContext(this.context); view.render(Collections.singletonMap("World", "Spring"), this.request, this.response); assertThat(this.response.getContentAsString().trim()).isEqualTo("Hello Spring"); diff --git a/spring-boot-project/spring-boot/src/test/resources/META-INF/spring.factories b/spring-boot-project/spring-boot/src/test/resources/META-INF/spring.factories deleted file mode 100644 index 0ab92a3d7b8..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/META-INF/spring.factories +++ /dev/null @@ -1,13 +0,0 @@ -org.springframework.boot.env.PropertySourceLoader=\ -org.springframework.boot.context.config.TestPropertySourceLoader1,\ -org.springframework.boot.context.config.TestPropertySourceLoader2 - -org.springframework.boot.context.config.ConfigDataLocationResolver=\ -org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessorIntegrationTests.LocationResolver,\ -org.springframework.boot.context.config.TestConfigDataBootstrap.LocationResolver,\ -org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessorImportCombinedWithProfileSpecificIntegrationTests.LocationResolver - -org.springframework.boot.context.config.ConfigDataLoader=\ -org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessorIntegrationTests.Loader,\ -org.springframework.boot.context.config.TestConfigDataBootstrap.Loader,\ -org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessorImportCombinedWithProfileSpecificIntegrationTests.Loader diff --git a/spring-boot-project/spring-boot/src/test/resources/META-INF/spring/org.springframework.boot.context.annotation.ImportCandidatesTests$TestAnnotation.imports b/spring-boot-project/spring-boot/src/test/resources/META-INF/spring/org.springframework.boot.context.annotation.ImportCandidatesTests$TestAnnotation.imports deleted file mode 100644 index 8274f7c72c5..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/META-INF/spring/org.springframework.boot.context.annotation.ImportCandidatesTests$TestAnnotation.imports +++ /dev/null @@ -1,6 +0,0 @@ -# A comment spanning a complete line -class1 - -class2 # with comment at the end - # Comment with some whitespace in front -class3 diff --git a/spring-boot-project/spring-boot/src/test/resources/a-file b/spring-boot-project/spring-boot/src/test/resources/a-file deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/spring-boot-project/spring-boot/src/test/resources/ansi.properties b/spring-boot-project/spring-boot/src/test/resources/ansi.properties deleted file mode 100644 index d99e75a60b9..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/ansi.properties +++ /dev/null @@ -1 +0,0 @@ -spring.output.ansi.enabled=never diff --git a/spring-boot-project/spring-boot/src/test/resources/application-activate-on-profile-in-profile-specific-file-test.properties b/spring-boot-project/spring-boot/src/test/resources/application-activate-on-profile-in-profile-specific-file-test.properties deleted file mode 100644 index 36e382cb6cd..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-activate-on-profile-in-profile-specific-file-test.properties +++ /dev/null @@ -1,4 +0,0 @@ -test1=test1 -#--- -spring.config.activate.on-profile=other -test2=test2 diff --git a/spring-boot-project/spring-boot/src/test/resources/application-activate-on-profile-in-profile-specific-file.properties b/spring-boot-project/spring-boot/src/test/resources/application-activate-on-profile-in-profile-specific-file.properties deleted file mode 100644 index d7ec8875c8c..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-activate-on-profile-in-profile-specific-file.properties +++ /dev/null @@ -1 +0,0 @@ -spring.profiles.active=test,other diff --git a/spring-boot-project/spring-boot/src/test/resources/application-bootstrap-registry-integration-tests.properties b/spring-boot-project/spring-boot/src/test/resources/application-bootstrap-registry-integration-tests.properties deleted file mode 100644 index 6fe0d5673ad..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-bootstrap-registry-integration-tests.properties +++ /dev/null @@ -1,6 +0,0 @@ -spring.config.import=testbootstrap:test -spring.profiles.active=test -myprop=igotbound -#--- -spring.config.activate.on-profile=test -myprofileprop=igotprofilebound diff --git a/spring-boot-project/spring-boot/src/test/resources/application-customdefault.properties b/spring-boot-project/spring-boot/src/test/resources/application-customdefault.properties deleted file mode 100644 index 899e25633bb..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-customdefault.properties +++ /dev/null @@ -1 +0,0 @@ -customdefault=true diff --git a/spring-boot-project/spring-boot/src/test/resources/application-dev.properties b/spring-boot-project/spring-boot/src/test/resources/application-dev.properties deleted file mode 100644 index 14634a49e75..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-dev.properties +++ /dev/null @@ -1 +0,0 @@ -my.property=fromdevpropertiesfile diff --git a/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-imported.properties b/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-imported.properties deleted file mode 100644 index e80c76a4399..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-imported.properties +++ /dev/null @@ -1 +0,0 @@ -my.value=iwasimported \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-document.properties b/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-document.properties deleted file mode 100644 index 556143a7720..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-document.properties +++ /dev/null @@ -1,3 +0,0 @@ -my.import=application-import-with-placeholder-imported -#--- -spring.config.import=classpath:${my.import}.properties diff --git a/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-earlier-document-imported.properties b/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-earlier-document-imported.properties deleted file mode 100644 index 3864e4a4533..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-earlier-document-imported.properties +++ /dev/null @@ -1 +0,0 @@ -my.value=application-import-with-placeholder-in-earlier-document-imported diff --git a/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-earlier-document.properties b/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-earlier-document.properties deleted file mode 100644 index feee42ed720..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-earlier-document.properties +++ /dev/null @@ -1,6 +0,0 @@ -my.import=application-import-with-placeholder-in-earlier-document-imported -#--- -my.value=should-be-ignored -spring.config.activate.on-profile=missing -#--- -spring.config.import=classpath:${my.import}.properties diff --git a/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-earlier-profile-document-imported.properties b/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-earlier-profile-document-imported.properties deleted file mode 100644 index 96b8574a861..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-earlier-profile-document-imported.properties +++ /dev/null @@ -1 +0,0 @@ -my.value=application-import-with-placeholder-in-earlier-profile-document-imported diff --git a/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-earlier-profile-document.properties b/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-earlier-profile-document.properties deleted file mode 100644 index ced93c8d9f7..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-earlier-profile-document.properties +++ /dev/null @@ -1,6 +0,0 @@ -my.value=application-import-with-placeholder-in-earlier-profile-document -#--- -my.import=application-import-with-placeholder-in-earlier-profile-document-imported -spring.config.activate.on-profile=missing -#--- -spring.config.import=classpath:${my.import}.properties diff --git a/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-profile-document.properties b/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-profile-document.properties deleted file mode 100644 index 890f961e5f1..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder-in-profile-document.properties +++ /dev/null @@ -1,6 +0,0 @@ -my.import=application-import-with-placeholder-imported -#--- -spring.config.import=classpath:${my.import}.properties -#--- -my.import=badbadbad -spring.config.activate.on-profile=missing \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder.properties b/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder.properties deleted file mode 100644 index de35cff6240..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-import-with-placeholder.properties +++ /dev/null @@ -1,2 +0,0 @@ -my.import=application-import-with-placeholder-imported -spring.config.import=classpath:${my.import}.properties \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-and-direct-profile-import-dev.properties b/spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-and-direct-profile-import-dev.properties deleted file mode 100644 index 0ee51673fac..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-and-direct-profile-import-dev.properties +++ /dev/null @@ -1,2 +0,0 @@ -spring.config.import=classpath:application-import-with-profile-variant-imported-dev.properties -my.value=application-import-with-profile-variant-and-direct-profile-import-dev diff --git a/spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-and-direct-profile-import.properties b/spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-and-direct-profile-import.properties deleted file mode 100644 index 3bde4a37706..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-and-direct-profile-import.properties +++ /dev/null @@ -1,2 +0,0 @@ -spring.config.import=classpath:application-import-with-profile-variant-imported.properties -my.value=application-import-with-profile-variant-and-direct-profile-import diff --git a/spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-dev.properties b/spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-dev.properties deleted file mode 100644 index 2fab0529571..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-dev.properties +++ /dev/null @@ -1 +0,0 @@ -my.value=application-import-with-profile-variant-dev diff --git a/spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-imported-dev.properties b/spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-imported-dev.properties deleted file mode 100644 index 358d119e620..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-imported-dev.properties +++ /dev/null @@ -1 +0,0 @@ -my.value=application-import-with-profile-variant-imported-dev diff --git a/spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-imported.properties b/spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-imported.properties deleted file mode 100644 index 7627d37b4b5..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant-imported.properties +++ /dev/null @@ -1 +0,0 @@ -my.value=application-import-with-profile-variant-imported diff --git a/spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant.properties b/spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant.properties deleted file mode 100644 index d2354c3974e..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-import-with-profile-variant.properties +++ /dev/null @@ -1,2 +0,0 @@ -spring.config.import=classpath:application-import-with-profile-variant-imported.properties -my.value=application-import-with-profile-variant diff --git a/spring-boot-project/spring-boot/src/test/resources/application-include-profiles-in-profile-specific-document.properties b/spring-boot-project/spring-boot/src/test/resources/application-include-profiles-in-profile-specific-document.properties deleted file mode 100644 index 646513a9ce6..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-include-profiles-in-profile-specific-document.properties +++ /dev/null @@ -1,6 +0,0 @@ -spring.profiles.active=p1 -spring.profiles.include=p2 -#--- -spring.config.activate.on-profile=p2 -spring.profiles.include=p3 - diff --git a/spring-boot-project/spring-boot/src/test/resources/application-include-profiles-in-profile-specific-file-test.properties b/spring-boot-project/spring-boot/src/test/resources/application-include-profiles-in-profile-specific-file-test.properties deleted file mode 100644 index 70251f9e7f0..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-include-profiles-in-profile-specific-file-test.properties +++ /dev/null @@ -1 +0,0 @@ -spring.profiles.include=p2 diff --git a/spring-boot-project/spring-boot/src/test/resources/application-include-profiles-in-profile-specific-file.properties b/spring-boot-project/spring-boot/src/test/resources/application-include-profiles-in-profile-specific-file.properties deleted file mode 100644 index f841722a2f1..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-include-profiles-in-profile-specific-file.properties +++ /dev/null @@ -1 +0,0 @@ -spring.profiles.active=test diff --git a/spring-boot-project/spring-boot/src/test/resources/application-include-profiles-list-in-profile-specific-file-test.yml b/spring-boot-project/spring-boot/src/test/resources/application-include-profiles-list-in-profile-specific-file-test.yml deleted file mode 100644 index b6f2fc55580..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-include-profiles-list-in-profile-specific-file-test.yml +++ /dev/null @@ -1,4 +0,0 @@ -spring: - profiles: - include: - - p diff --git a/spring-boot-project/spring-boot/src/test/resources/application-include-profiles-with-placeholder.properties b/spring-boot-project/spring-boot/src/test/resources/application-include-profiles-with-placeholder.properties deleted file mode 100644 index e1baa5d408a..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-include-profiles-with-placeholder.properties +++ /dev/null @@ -1,9 +0,0 @@ -spring.profiles.active=p1 -spring.profiles.include=p2 -#--- -myprofile=p4 -spring.profiles.include=p3,${myprofile} -#--- -myotherprofile=p5 -spring.profiles.include=${myotherprofile} - diff --git a/spring-boot-project/spring-boot/src/test/resources/application-include-profiles.properties b/spring-boot-project/spring-boot/src/test/resources/application-include-profiles.properties deleted file mode 100644 index c20ed9ad301..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-include-profiles.properties +++ /dev/null @@ -1,7 +0,0 @@ -spring.profiles.active=p1 -spring.profiles.include=p2 -#--- -spring.profiles.include=p3,p4 -#--- -spring.profiles.include=p5 - diff --git a/spring-boot-project/spring-boot/src/test/resources/application-includeprofile.properties b/spring-boot-project/spring-boot/src/test/resources/application-includeprofile.properties deleted file mode 100644 index 213a72823c1..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-includeprofile.properties +++ /dev/null @@ -1 +0,0 @@ -spring.profiles.include=specific diff --git a/spring-boot-project/spring-boot/src/test/resources/application-node.properties b/spring-boot-project/spring-boot/src/test/resources/application-node.properties deleted file mode 100644 index 292bb08658c..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-node.properties +++ /dev/null @@ -1 +0,0 @@ -bar: spam diff --git a/spring-boot-project/spring-boot/src/test/resources/application-other.properties b/spring-boot-project/spring-boot/src/test/resources/application-other.properties deleted file mode 100644 index 34cfee2a78b..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-other.properties +++ /dev/null @@ -1 +0,0 @@ -my.property=fromotherpropertiesfile diff --git a/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-custom-import-p1.properties b/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-custom-import-p1.properties deleted file mode 100644 index 0457702de8d..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-custom-import-p1.properties +++ /dev/null @@ -1 +0,0 @@ -spring.config.import:test:boot \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-custom-import.properties b/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-custom-import.properties deleted file mode 100644 index 692617a8946..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-custom-import.properties +++ /dev/null @@ -1,2 +0,0 @@ -spring.profiles.active=p1,p2 - diff --git a/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import-import-p1.properties b/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import-import-p1.properties deleted file mode 100644 index c9ad018fd9f..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import-import-p1.properties +++ /dev/null @@ -1 +0,0 @@ -application-profile-specific-import-with-import-import-p1=true diff --git a/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import-import-p2.properties b/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import-import-p2.properties deleted file mode 100644 index e72f2f191d5..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import-import-p2.properties +++ /dev/null @@ -1 +0,0 @@ -application-profile-specific-import-with-import-import-p2=true diff --git a/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import-import.properties b/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import-import.properties deleted file mode 100644 index e92241ad1ed..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import-import.properties +++ /dev/null @@ -1 +0,0 @@ -application-profile-specific-import-with-import-import=true diff --git a/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import-p1.properties b/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import-p1.properties deleted file mode 100644 index 836dcc3f5ee..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import-p1.properties +++ /dev/null @@ -1,2 +0,0 @@ -application-profile-specific-import-with-import-p1=true -spring.config.import=application-profile-specific-import-with-import-import.properties diff --git a/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import.properties b/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import.properties deleted file mode 100644 index 4b94ad9212a..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-profile-specific-import-with-import.properties +++ /dev/null @@ -1,2 +0,0 @@ -spring.profiles.active=p1,p2 -application-profile-specific-import-with-import=true diff --git a/spring-boot-project/spring-boot/src/test/resources/application-props-no-extension b/spring-boot-project/spring-boot/src/test/resources/application-props-no-extension deleted file mode 100644 index b3efe414930..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-props-no-extension +++ /dev/null @@ -1 +0,0 @@ -withnotext=test \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/application-withwebapplicationtype.yml b/spring-boot-project/spring-boot/src/test/resources/application-withwebapplicationtype.yml deleted file mode 100644 index 1556b9eca16..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application-withwebapplicationtype.yml +++ /dev/null @@ -1 +0,0 @@ -spring.main.web-application-type: reactive diff --git a/spring-boot-project/spring-boot/src/test/resources/application.custom b/spring-boot-project/spring-boot/src/test/resources/application.custom deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/spring-boot-project/spring-boot/src/test/resources/application.properties b/spring-boot-project/spring-boot/src/test/resources/application.properties deleted file mode 100644 index 2325ace1206..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application.properties +++ /dev/null @@ -1,6 +0,0 @@ -foo: bucket -value: 1234 -my.property: fromapplicationproperties -sample.app.test.prop: * -my.placeholder: ${my.fallback} -duplicate=properties diff --git a/spring-boot-project/spring-boot/src/test/resources/application.yml b/spring-boot-project/spring-boot/src/test/resources/application.yml deleted file mode 100644 index 74fe76ca7ce..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/application.yml +++ /dev/null @@ -1 +0,0 @@ -duplicate: yaml \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/banner-utf8.txt b/spring-boot-project/spring-boot/src/test/resources/banner-utf8.txt deleted file mode 100644 index f3077be2fc5..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/banner-utf8.txt +++ /dev/null @@ -1 +0,0 @@ -😍 Spring Boot! 😍 diff --git a/spring-boot-project/spring-boot/src/test/resources/bindtoapplication.properties b/spring-boot-project/spring-boot/src/test/resources/bindtoapplication.properties deleted file mode 100644 index 33406d213f8..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/bindtoapplication.properties +++ /dev/null @@ -1 +0,0 @@ -spring.main.banner-mode=off diff --git a/spring-boot-project/spring-boot/src/test/resources/config/..hidden/testproperties.properties b/spring-boot-project/spring-boot/src/test/resources/config/..hidden/testproperties.properties deleted file mode 100644 index 1537a17cf26..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/config/..hidden/testproperties.properties +++ /dev/null @@ -1 +0,0 @@ -fourth.property=shouldbehidden \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/config/0-empty/testproperties.properties b/spring-boot-project/spring-boot/src/test/resources/config/0-empty/testproperties.properties deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/spring-boot-project/spring-boot/src/test/resources/config/1-first/testproperties.properties b/spring-boot-project/spring-boot/src/test/resources/config/1-first/testproperties.properties deleted file mode 100644 index 1c97e4c4126..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/config/1-first/testproperties.properties +++ /dev/null @@ -1 +0,0 @@ -first.property=apple \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/config/2-second/testproperties.properties b/spring-boot-project/spring-boot/src/test/resources/config/2-second/testproperties.properties deleted file mode 100644 index a568eac54e0..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/config/2-second/testproperties.properties +++ /dev/null @@ -1 +0,0 @@ -second.property=ball \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/config/file-in-root-and-config-with-profile-p1.properties b/spring-boot-project/spring-boot/src/test/resources/config/file-in-root-and-config-with-profile-p1.properties deleted file mode 100644 index ffbd719314e..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/config/file-in-root-and-config-with-profile-p1.properties +++ /dev/null @@ -1,3 +0,0 @@ -config-file-in-root-and-config-with-profile-p1=true -v1=config-file-in-root-and-config-with-profile-p1 -#v2 intentionally missing \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/config/file-in-root-and-config-with-profile-p2.properties b/spring-boot-project/spring-boot/src/test/resources/config/file-in-root-and-config-with-profile-p2.properties deleted file mode 100644 index 5ead8d0cd90..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/config/file-in-root-and-config-with-profile-p2.properties +++ /dev/null @@ -1,3 +0,0 @@ -config-file-in-root-and-config-with-profile-p2=true -v1=config-file-in-root-and-config-with-profile-p2 -#v2 intentionally missing \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/config/file-in-root-and-config-with-profile.properties b/spring-boot-project/spring-boot/src/test/resources/config/file-in-root-and-config-with-profile.properties deleted file mode 100644 index 556c851a5f2..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/config/file-in-root-and-config-with-profile.properties +++ /dev/null @@ -1,3 +0,0 @@ -config-file-in-root-and-config-with-profile=true -v1=config-file-in-root-and-config-with-profile -v2=config-file-in-root-and-config-with-profile \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/config/nested/3-third/testproperties.properties b/spring-boot-project/spring-boot/src/test/resources/config/nested/3-third/testproperties.properties deleted file mode 100644 index d00e7f0a62f..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/config/nested/3-third/testproperties.properties +++ /dev/null @@ -1 +0,0 @@ -third.property=shouldnotbefound diff --git a/spring-boot-project/spring-boot/src/test/resources/config/specific.properties b/spring-boot-project/spring-boot/src/test/resources/config/specific.properties deleted file mode 100644 index 744e563a5af..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/config/specific.properties +++ /dev/null @@ -1 +0,0 @@ -my.property=specific diff --git a/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/customprofile-customdefault.properties b/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/customprofile-customdefault.properties deleted file mode 100644 index 0888bcc4591..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/customprofile-customdefault.properties +++ /dev/null @@ -1 +0,0 @@ -customprofile-customdefault=true diff --git a/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/customprofile.properties b/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/customprofile.properties deleted file mode 100644 index 4e265209995..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/customprofile.properties +++ /dev/null @@ -1,2 +0,0 @@ -spring.profiles.active=customdefault -customprofile=true diff --git a/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testnegatedprofiles.yml b/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testnegatedprofiles.yml deleted file mode 100644 index bf25b22a21f..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testnegatedprofiles.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -my: - property: fromyamlfile - other: notempty ---- -spring.config.activate.on-profile: dev -my: - property: fromdevprofile ---- -spring.config.activate.on-profile: other -my: - property: fromotherprofile ---- -spring.config.activate.on-profile: "!other" -my: - property: fromnototherprofile - notother: foo diff --git a/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testprofileexpression.yml b/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testprofileexpression.yml deleted file mode 100644 index c212cc0c9b5..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testprofileexpression.yml +++ /dev/null @@ -1,12 +0,0 @@ ---- -my: - property: fromyamlfile ---- -spring.config.activate.on-profile: dev & other -my: - property: devandother ---- -spring.config.activate.on-profile: (dev | other) & another -my: - property: devorotherandanother ---- diff --git a/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testprofiles.yml b/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testprofiles.yml deleted file mode 100644 index 98a993ef765..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testprofiles.yml +++ /dev/null @@ -1,18 +0,0 @@ ---- -my: - property: fromyamlfile - other: notempty ---- -spring.config.activate.on-profile: dev -my: - property: fromdevprofile -dev: - property: devproperty ---- -spring.config.activate.on-profile: other -my: - property: fromotherprofile ---- -spring.config.activate.on-profile: prod -spring.config.import: file:./non-existent.yml - diff --git a/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testprofilesdocument.yml b/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testprofilesdocument.yml deleted file mode 100644 index 159f728f9b3..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testprofilesdocument.yml +++ /dev/null @@ -1,12 +0,0 @@ ---- -my: - property: fromyamlfile - other: notempty ---- -spring.config.activate.on-profile: thedefault -my: - property: fromdefaultprofile ---- -spring.config.activate.on-profile: other -my: - property: fromotherprofile diff --git a/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testprofilesempty.yml b/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testprofilesempty.yml deleted file mode 100644 index be357f780e7..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testprofilesempty.yml +++ /dev/null @@ -1,12 +0,0 @@ ---- -my: - property: fromyamlfile - other: notempty ---- -spring.config.activate.on-profile: -my: - property: fromemptyprofile ---- -spring.config.activate.on-profile: other -my: - property: fromotherprofile diff --git a/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testsetprofiles.yml b/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testsetprofiles.yml deleted file mode 100644 index 260670becfe..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/configdata/profiles/testsetprofiles.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- -spring: - profiles: - active: dev -my: - property: fromyamlfile ---- -spring.config.activate.on-profile: dev -my: - property: fromdevprofile diff --git a/spring-boot-project/spring-boot/src/test/resources/configdata/properties/application-dev.properties b/spring-boot-project/spring-boot/src/test/resources/configdata/properties/application-dev.properties deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/spring-boot-project/spring-boot/src/test/resources/configdata/properties/application.other b/spring-boot-project/spring-boot/src/test/resources/configdata/properties/application.other deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/spring-boot-project/spring-boot/src/test/resources/configdata/properties/application.properties b/spring-boot-project/spring-boot/src/test/resources/configdata/properties/application.properties deleted file mode 100644 index c9f0304f65e..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/configdata/properties/application.properties +++ /dev/null @@ -1 +0,0 @@ -foo=bar \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/configdata/properties/other.properties b/spring-boot-project/spring-boot/src/test/resources/configdata/properties/other.properties deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/spring-boot-project/spring-boot/src/test/resources/configdata/yaml/application.yml b/spring-boot-project/spring-boot/src/test/resources/configdata/yaml/application.yml deleted file mode 100644 index b93638efd6c..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/configdata/yaml/application.yml +++ /dev/null @@ -1,3 +0,0 @@ -foo: bar ---- -hello: world \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/configimportwithprofilespecific-prod.properties b/spring-boot-project/spring-boot/src/test/resources/configimportwithprofilespecific-prod.properties deleted file mode 100644 index 6b16e80391c..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/configimportwithprofilespecific-prod.properties +++ /dev/null @@ -1 +0,0 @@ -prop=fromprofilefile \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/configimportwithprofilespecific.properties b/spring-boot-project/spring-boot/src/test/resources/configimportwithprofilespecific.properties deleted file mode 100644 index de523ae42dd..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/configimportwithprofilespecific.properties +++ /dev/null @@ -1,2 +0,0 @@ -spring.config.import=icwps: -prop=fromfile \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/custom-config/application.yml b/spring-boot-project/spring-boot/src/test/resources/custom-config/application.yml deleted file mode 100644 index bb56b055142..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/custom-config/application.yml +++ /dev/null @@ -1 +0,0 @@ -hello: world diff --git a/spring-boot-project/spring-boot/src/test/resources/custom-console-log-pattern.xml b/spring-boot-project/spring-boot/src/test/resources/custom-console-log-pattern.xml deleted file mode 100644 index 60fd81a4646..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/custom-console-log-pattern.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/custom-file-log-pattern-with-fileNamePattern.xml b/spring-boot-project/spring-boot/src/test/resources/custom-file-log-pattern-with-fileNamePattern.xml deleted file mode 100644 index 1ae820bc92d..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/custom-file-log-pattern-with-fileNamePattern.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/custom-file-log-pattern.xml b/spring-boot-project/spring-boot/src/test/resources/custom-file-log-pattern.xml deleted file mode 100644 index b94a60abfdf..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/custom-file-log-pattern.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/custom-location.yml b/spring-boot-project/spring-boot/src/test/resources/custom-location.yml deleted file mode 100644 index 69a69615994..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/custom-location.yml +++ /dev/null @@ -1 +0,0 @@ -foo: ${fooValue} diff --git a/spring-boot-project/spring-boot/src/test/resources/customapplication.yml b/spring-boot-project/spring-boot/src/test/resources/customapplication.yml deleted file mode 100644 index 9bda1a4411a..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/customapplication.yml +++ /dev/null @@ -1 +0,0 @@ -yamlkey: yamlvalue \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/customprofile-customdefault.properties b/spring-boot-project/spring-boot/src/test/resources/customprofile-customdefault.properties deleted file mode 100644 index 4770be45e42..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/customprofile-customdefault.properties +++ /dev/null @@ -1,2 +0,0 @@ -spring.profiles.include=specific -customprofile-customdefault=true diff --git a/spring-boot-project/spring-boot/src/test/resources/customprofile-specific.properties b/spring-boot-project/spring-boot/src/test/resources/customprofile-specific.properties deleted file mode 100644 index cc4c955469b..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/customprofile-specific.properties +++ /dev/null @@ -1 +0,0 @@ -customprofile-specific=true diff --git a/spring-boot-project/spring-boot/src/test/resources/customprofile.properties b/spring-boot-project/spring-boot/src/test/resources/customprofile.properties deleted file mode 100644 index 4e265209995..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/customprofile.properties +++ /dev/null @@ -1,2 +0,0 @@ -spring.profiles.active=customdefault -customprofile=true diff --git a/spring-boot-project/spring-boot/src/test/resources/data.sql b/spring-boot-project/spring-boot/src/test/resources/data.sql deleted file mode 100644 index 06acad8464b..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/data.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO EXAMPLE VALUES (1, 'Andy'); \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/dispatcher.properties b/spring-boot-project/spring-boot/src/test/resources/dispatcher.properties deleted file mode 100644 index 0ffbf1791fa..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/dispatcher.properties +++ /dev/null @@ -1 +0,0 @@ -main.sources: org.springframework.boot.main.DispatcherMainTests diff --git a/spring-boot-project/spring-boot/src/test/resources/enableother.properties b/spring-boot-project/spring-boot/src/test/resources/enableother.properties deleted file mode 100644 index f21b4e99898..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/enableother.properties +++ /dev/null @@ -1,3 +0,0 @@ -spring.profiles.active=other -my.property=fromenableotherpropertiesfile -one.more=${my.property} diff --git a/spring-boot-project/spring-boot/src/test/resources/enableprofile-myprofile.properties b/spring-boot-project/spring-boot/src/test/resources/enableprofile-myprofile.properties deleted file mode 100644 index 88ee464f675..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/enableprofile-myprofile.properties +++ /dev/null @@ -1,2 +0,0 @@ -my.property=fromprofilepropertiesfile -the.property=fromprofilepropertiesfile diff --git a/spring-boot-project/spring-boot/src/test/resources/enableprofile-other.properties b/spring-boot-project/spring-boot/src/test/resources/enableprofile-other.properties deleted file mode 100644 index 04e2d9608b5..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/enableprofile-other.properties +++ /dev/null @@ -1 +0,0 @@ -other.property=fromotherpropertiesfile diff --git a/spring-boot-project/spring-boot/src/test/resources/enableprofile.properties b/spring-boot-project/spring-boot/src/test/resources/enableprofile.properties deleted file mode 100644 index 88528522624..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/enableprofile.properties +++ /dev/null @@ -1,4 +0,0 @@ -spring.profiles.active=myprofile -my.property=frompropertiesfile -the.property=frompropertiesfile -one.more=${my.property} diff --git a/spring-boot-project/spring-boot/src/test/resources/enabletwoprofiles.properties b/spring-boot-project/spring-boot/src/test/resources/enabletwoprofiles.properties deleted file mode 100644 index 90d74d0f417..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/enabletwoprofiles.properties +++ /dev/null @@ -1,2 +0,0 @@ -spring.profiles.active=myprofile,another -my.property=fromtwopropertiesfile diff --git a/spring-boot-project/spring-boot/src/test/resources/file-in-root-and-config-with-profile-p1.properties b/spring-boot-project/spring-boot/src/test/resources/file-in-root-and-config-with-profile-p1.properties deleted file mode 100644 index c4de4d2a978..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/file-in-root-and-config-with-profile-p1.properties +++ /dev/null @@ -1,3 +0,0 @@ -file-in-root-and-config-with-profile-p1=true -v1=file-in-root-and-config-with-profile-p1 -v2=file-in-root-and-config-with-profile-p1 diff --git a/spring-boot-project/spring-boot/src/test/resources/file-in-root-and-config-with-profile-p2.properties b/spring-boot-project/spring-boot/src/test/resources/file-in-root-and-config-with-profile-p2.properties deleted file mode 100644 index c60d2dafc39..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/file-in-root-and-config-with-profile-p2.properties +++ /dev/null @@ -1,3 +0,0 @@ -file-in-root-and-config-with-profile-p2=true -v1=file-in-root-and-config-with-profile-p2 -v2=file-in-root-and-config-with-profile-p2 diff --git a/spring-boot-project/spring-boot/src/test/resources/file-in-root-and-config-with-profile.properties b/spring-boot-project/spring-boot/src/test/resources/file-in-root-and-config-with-profile.properties deleted file mode 100644 index b34ddf5169b..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/file-in-root-and-config-with-profile.properties +++ /dev/null @@ -1,3 +0,0 @@ -file-in-root-and-config-with-profile=true -v1=file-in-root-and-config-with-profile -v2=file-in-root-and-config-with-profile diff --git a/spring-boot-project/spring-boot/src/test/resources/gh17001.properties b/spring-boot-project/spring-boot/src/test/resources/gh17001.properties deleted file mode 100644 index b61799d2cde..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/gh17001.properties +++ /dev/null @@ -1 +0,0 @@ -gh17001loaded=true diff --git a/spring-boot-project/spring-boot/src/test/resources/invalidproperty.properties b/spring-boot-project/spring-boot/src/test/resources/invalidproperty.properties deleted file mode 100644 index 4729d6f015f..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/invalidproperty.properties +++ /dev/null @@ -1 +0,0 @@ -spring.profiles=a \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/log4j2-nondefault.xml b/spring-boot-project/spring-boot/src/test/resources/log4j2-nondefault.xml deleted file mode 100644 index ecaa4dc5eff..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/log4j2-nondefault.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - ???? - ${sys:LOG_FILE} %d{yyyy-MM-dd HH:mm:ss.SSS}] service%X{context} - ${sys:PID} %5p [%t] --- %c{1}: %m%n - - - - - - - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/log4j2-override.xml b/spring-boot-project/spring-boot/src/test/resources/log4j2-override.xml deleted file mode 100644 index f0cdfa02d2b..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/log4j2-override.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/logback-broken.xml b/spring-boot-project/spring-boot/src/test/resources/logback-broken.xml deleted file mode 100644 index 7f8454941cf..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/logback-broken.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - ${LOG_FILE} [%t] ${PID:-????} %c{1}: %m%n BOOTBOOT - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/logback-include-base.xml b/spring-boot-project/spring-boot/src/test/resources/logback-include-base.xml deleted file mode 100644 index b8a41480d7d..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/logback-include-base.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/logback-include-defaults.xml b/spring-boot-project/spring-boot/src/test/resources/logback-include-defaults.xml deleted file mode 100644 index 0124d8a7e35..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/logback-include-defaults.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - [%p] - %m%n - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/logback-invalid-format.txt b/spring-boot-project/spring-boot/src/test/resources/logback-invalid-format.txt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/spring-boot-project/spring-boot/src/test/resources/logback-nondefault.xml b/spring-boot-project/spring-boot/src/test/resources/logback-nondefault.xml deleted file mode 100644 index 5d1622c5184..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/logback-nondefault.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - %property{LOG_FILE} [%t] ${PID:-????} %c{1}: %m%n BOOTBOOT - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/logback-springprofile-in-root.xml b/spring-boot-project/spring-boot/src/test/resources/logback-springprofile-in-root.xml deleted file mode 100644 index 284c547a0b3..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/logback-springprofile-in-root.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %property{LOG_FILE} [%t] ${PID:-????} %c{1}: %m%n BOOTBOOT - - - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/logback-without-extension b/spring-boot-project/spring-boot/src/test/resources/logback-without-extension deleted file mode 100644 index 1d55bbaf83f..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/logback-without-extension +++ /dev/null @@ -1,11 +0,0 @@ - - - - - %msg - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/logging-nondefault.properties b/spring-boot-project/spring-boot/src/test/resources/logging-nondefault.properties deleted file mode 100644 index d4f6d6970b5..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/logging-nondefault.properties +++ /dev/null @@ -1,2 +0,0 @@ -handlers = java.util.logging.ConsoleHandler -.level = INFO diff --git a/spring-boot-project/spring-boot/src/test/resources/moreproperties.properties b/spring-boot-project/spring-boot/src/test/resources/moreproperties.properties deleted file mode 100644 index d72233548bd..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/moreproperties.properties +++ /dev/null @@ -1,2 +0,0 @@ -my.property=frommorepropertiesfile -the.property=frommorepropertiesfile diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/animated.gif b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/animated.gif deleted file mode 100644 index 104a96af516833b7a0bbaab900667a46804303f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 899314 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 DF6)BgT~PngooTze@p7b2 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 yA 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%0A5|5p1fUO?Sxu3x`gyA|_1^Np^*n0DsN%9H6DIX{ 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

@?6 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

  • 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

    vwTQj=E@mQ<&ie!O&pXp z9kY*zix87a;$idF9JhqYjAiWFhd!)G!`X4S`3P}m$aorTsUnOOuftggvb3L%S+OQAXk(lInXWWhw0FM-kmzkg2B&aNuTk(vixJnyOLM0}#?3}9pC zWfQ3fuQr>U@eEL)LhEr@j0feQ1+Pm%07?s$50AXWaFz!=ff3JhT$_wuQ0d8mo_8++ zDW1P`7Ia`RFo=g^Zr_l+ujgYZE#iti#S}4=XpAoGwJm;qKqY$~ME%hQU7tgn-04ZD zsB)>J83^BJ1gdK;%|0>iq$xH%AZL~=%+nxqq|RT1Nx6+XO(C2RJZ=twtN6HWj7<<3 zFw@!cC>{{9U+2{;s|rC(8e~nsbiMX*232+D*hl%IqwoK6{MF#8%s&t`ox2rA`%;@f z?fCeWJ@NU9R2_$aKfQvvyCU{tMdF_oSanru+bSt&RrdI*+__bSyQ@ksR#pC4C98f` z-}YHENcFS!@z1*FKI`B8Z1Cc<(LbLls$WdDeK8ICVt)J!g$Vzjn;*H1%SNHRO%Yek zBClBPzhV=~vp^E42p^BRwl(gG{lOMjgpV^DcO+bPk8Arc0f1BTe?#PnO`eDYAm#Gz zv`Ybp+dNa-ebT$Vk0Qg)-M&YgLylbxKHiIf^4-59s^_EfF308cgy!Fk$ZbE6-w{*T z9aC^Q;nbBQoU3W4I+IS_NI+7m#U1IDcaCTE2jmR~A(Z^zRp$ez$D%m*VvFx1lsusv zq2&MSv8wN=mvyi!JF}{8XI6I=a(hlS_LQ8zQ(4oW^{*r#|FGj2`TQ6&`_SatruaAD{7<<|M z;QcKGk>6kGc(`(N^7Frx{CBW*MDXn1)U*3D&k&2i^aEkP;N@>hKK<`n$>VpUv!Cui z`rJ4BZD{Vtz4^8K&wt&YTbh3M{$Ei3cJ}#~3E^K4gn!H+pnT!o{NmR~FMm$G`ug(*qJIFAFYaTl>v_J6}9OAC_ zV$(LQVj``56-1#2j=?lkwz!nax=r4*o8My5#`mdvX7k6h&@++IhXlPjU={A?;@DS$XPN5Zg!{Ox0p9?n8C%-(v@-IG9h6W5j$}>}zT%eHmiMlH62CWF19N zg2lyx`Sa#K04(M0~TR zh$3;>WeJz8+d)uJViC1TviHpaeBppko{W>akOjrWWYCojO@XYFRX)U^7=MP{)CSGG z*DR3q7Yi;~UyGLt!Aba}+R0lSwL`ROCc*l&!YGaoK9z-fre#k$1Bf>+`4lKrC@}Zq z7;#>XF%=i~~heOb+(r<1rWaFg|li9mwB(hxLUA48RSD%*s^T(See zq6v{_Ic-Nj^4~X+$&a#cPTW!IxU(y8vO?vO-CwfLZn{LL2J z`iz4io6T0q72k}MLvL+pz&Z&JAa}5JNx&NgAYzpf3R zdyNrM&~-~Q^Yo|&0mg)4;x{6$)7g)m-X-RbCIjExh?5v&gu(IGRe2Kq2XT2GZL&c zX$mTI|Hp-ukb!eKm7=!u$y^Zb5I5J2za)K5IG{;x!`Te0iTSRuB^;<^^%l>Z=p?F4 zG^T9?^h|NMMSaU(G{;ZtAF`tRxLLL3S!C7WEV(qCHs1}lngnWFrWL~F24`cK3BDa9 zcn@aF{=EzwX<9_WNNBZRkDaU4hE`6YXXJ(B!0@Uj(*|GnxoQ2=yTuk2H$7rW{FvBy zh-~-VG!indUXu1s0b>?R_>1GOOGen|t*_p!Iecon|BdymP~m~fde@Y2BE3)%$7L2f zJ|RO51>@6KTz4LxDKUT9(%hu-Q=qHBiK>bYHS%`I{U^97@RvOif5)}h0ZC&{l)iRQ zyf|4tgKd!e5>~)?vo(fI4fm&EY86s*f=(_Gb!sFvFYDRo_+PB*ymleJ)Xg(z^iwVI zufTtzU7XDR{I!bM)JnRi zKeOvAS0V_iSfcuRyR*sS#hg(IBf!K~V5UinS|@q-`umLk>@+X=7#*Vyu%F*B49gj8 zdL8EC;L@{OkIR~A!UMBKzA?b((ug>W^_c(Up?23;{f}iQ4>enj3$oaL=F558avE zbpgUV!g}fC;f{rQDzzwgwO&roovgi%QV{fUOpT7+GJJlr&GAK!dU6+|eC9dcEA#v4 zcP}g7R=HBfl!r`H=rv-yOY_Qg%PVc=9w)z8YZ;!!FL5Q@Qb3v>jg6;osttU-Q@uw< zQ7g(*_X1V<1fGleb|{NB!65vdMSZmkp19f10uF22E6}JWC1adOtF*J&k4e zSBP`jifc}~qJ`U0NLH~(^LrLa!sO(ex0Aet8%;3FL4Tfu_3)`1ARN=%otyqH!xA5Y zw!FOa_+mIZoKd1??C|Ldp)GbQ<>?Fa2i3_(_gXbCiaT=bBu9ZTo3RU+Lgir{4_QU! z%FVjUzRzDXJ{0Mt3q$cNC5QF%Hj01E$raB^Um6MUXPGiCODFmkk*Y{LTe1FXTBpQu zhgR@h1H^{e-Pc2#1VwH}U2UF6OY5OtU- zA`y%PTlJ1PJ9XG;uGvfN$C{LAB%Ia`_u9SPATL1Yx;%ky#o^)$`PMc9-I=M54AQ$IHQLZ87mxmZC`|*W@w&|q+;a?1IfRrDs)(Qo9WF}Q9^>qn zuK{)S!{t0|jXB-A2xlS#hB`}q`nn@iI`T|-ZoI{@_IMN&ic^8HImme_7r!x)(D-9V ztg~VPL_EjA{nH0hS7I!CQ|v+mZ~d^yl`)}~D&9qFQ<)nHWdfdY1_HzC|SjT#hIjXa+idjJ&W56GNXdD!R zsW8Kd9v+Q`%m~EOJhT#d^AU2f$--%^EgWT9d>e==S;{xlE_)Q7?CV&FTE!zo9~FGU zWg1di(fGXVwHA)?eF97GDK#PET;!!kb`@)>A*o@#_%A6{H%Ex(E(B6DcdXjLEG=VXs#3rsY)GT^W!n~4eZ!GcX1eu}Y*Ei(JXW+9G z^uzrym%^}5_H)ou)S+uguT~aq!MRyV7YJR;?ef*xBBM>F#YxqyID6<`&f5K}FxE5o=)v&m=*=)v+}(=p!O zm}ez~4_oR`s{yj9$0T@_u{Ys!!tkPz@-4*rlZ(JE${7t1RY|jdDHHT5Dbn9d5kpqc z7D5+-VNV7K(t+Iq+u_Mts25|pC;Voof#gqkzux8(`O-eQEHe6r_yyug9Ll3nKDZ%QQ!2ZGi1&~dy{b~{3_T}#D$Jba-aiYrKt$`(dha< zHn~>G$L#MirQ}eeY@_+53hA>%STNM^@ejHN=UM^RZm|2y7vrCtbtAO&0+q2As=9iSk@yIEbb-5<_iQ5eM3WT3weUeS;;M+o<#>kgcW&F9*8(IG=+N5Y8T8+ znJxfL_2Ep8L6WSuTc-OfOYks5WCMGLN?w?4aLb*ws|eq8tcW$_XktK&3c!P2qn zif-3LZpD79h<{wnq#DoMELGAWcXwWdHc(Ylxs6t8IF)s#(X^M;AuehUNp&m)J}1CS zp8@W=!x{XpzOw)k_E2unh}ST`C0*v-1r|^)i(BJ5>cL+>q-Peb00pTNUK`VjGNa+Pa{!1}w;chhPO_5+mUq&8zfp0A^1 zOb}Sd1~AKQJ#i{R3e3Gk?j@|#H=l&q_?uG+7Xx796Tqtgc)Jj#Mn-8-p%qKK3;EL6 zVb2PafhxZOGXY-Nldzw~cy$ZE?P9y1kb)bA1`x9F1U$3ftu&Sd{;`- ze%XU$E;g@_ScZteI1FVn&f~3gInY<-ZK>Kjdga8yD{g#y4#_!PCY?y=v7 zaPl4pP>%=gr|akh6Jh}4sT>UbBngx=Ea)Qc@lZv3Vl`pKG$#CTGiE;(E@EQo(!g!> zHnN5p89a>iHv*w7cq1N6o)`%{t0)sIS#F-?8%ehA)iJ6nW*>v7tH>xiopbM zum^>52~=Dr@5U)Q!Pr)saFWsVt<$yl(yuSRV}ZofY9s?9UsVLe%F3K#LJCX(CrFN= zkH&hR!6sp~6o>~~+}q>PDIZ9IE8!xq^1O%`h4Y(~`IFK_LMj!Pw9e^2$uILRN~|me zmASYv1(_p2xXujtO?QJ97KNj07KF`~vBFO# zy8)Q;qYKUt77lU|QPJX70c6F6Oc^MS0cu@Qu)p}no>Qpp2WBx zwUe^pHBYv?bMP%~j&Afhy=C8kJFooLJ*qFr*Aq3q9Pt(4?V2TQyh(;HeLVC{fvPyg zVGw+E3mwN41ow7IF10KSFQ1e!x;2<&*Y(y^^8*tCH%g#(#VuO%&~5@m0D;*{pH(=8 z%jDwAs06W3vRn?{N;uhMXzTIarJgoaQzu`0ML7uzO2Z&Bkf%jgH3wd4JV2{H$Chu$ z6=MVtEylR3b15rd>TL~p%AF= z|4^feoC64%+y%{`T^~6s__7szLB&Uv|AUWPp8H~T_lwPoFI)flLRDR}+qUKqwB~et z&E?#h+ub#f7i&BISwozIUfaI<1by9o{HyP|ul{$xZvFqF>c5fteN+KNy8Xwd+q5V7qSukuJ*npd(=P=c=6R-edLQlfKGqh9q|T3>4?W%z z`a5`j8wsBO9+zO9kH|b9op&`Z^BO|c!*bjA=Xb`OxE)<^IjOKU`6QA+?}Je<8dVeiRGh-mE+037bgbOD+CGuBK5SonWJUb z*k?L(%5So&y0fY~3v0Ry>h7Lw>@Gcj`%KH7DkOwnJIb!*=W*|6)%6uNjTiiOLQG{g z&aztObIwl{T%0+9;Pndw<*frXS4OLOqvsF-@0F)TS0^glp8clkh=8|q{_G`T?&XET zj+bRf0{!Mv&8_8{E4_8?gUtwD?;N_=HP&+L{$&KO-<)Z_K3jKdzVY^x*4yL%H(P&K zcX#o^@1gI9UA+%)AUX8GN8SGkp(C9AT~puErNQ@?`d6Fot+w7<=KY7Wzv~|V+$s2a zeRA!;qUik(p9~|A9htUx{Cwge;^}=kH1)p!(c=Bt5BF!j^dSlK$3J>!|LmV%8+-QW z7_tri^uGxEtJxRJvoF>rgufpC_DQ^(U-&xx^5^t#y#DilY9#!BKT<~?Awt#t{47jIXmiiHlP*9rO%IG@nRBUWGa{S=HWTpDDK273EdGJ=;kaZmL zLdLf8x#l0|FeV$A<9w*p=0fz2)XCoVkF&#vC7IjPs2{-2noXNnY%G`F8xV5sC7br? zNoT|Q2H^*#zD%5oNs8s^Uz=mc#Tq43c$k!LC8gI=e#}4p0=`s?A?GNu0~1DR4Iah0 zirc4GSck7}`92@LqcQ%4OF07!j{7LXrAZ%R*i9gb$%QQ3mD}1+NDF<1hfSn@b5# z0l){w3@R=`yJJ)lpTY<~#L=WbEy4x@=?<3-PaMCt8Jppr7NOOi!HfIWv)L4Ijo}MEa2MLLsdJ&Njl37hw)(;%nM~6Ad@k{V-;Xr z_=ZCavk*@PhRWA zh{FocBVWx;=m#YWzRjVwlFMAVHy;JI-K-6-BLp2zf}f`NY6g&W;iz|KMwDcQed=lX z#l2k^O>(AJO&HDSrqhcLv3HL&)wjhMFwRbkiA;MKWxci<<*#GVZ;~;sZDveYFS4p% z(u9~PuBWxoo2_YNg9FK;Geo~!*d)*@Goer@yK z!<8zE=nAR9VR&e6ukrKzhj~vG8=p94q6&A!mFlNQ6$C75f4|Zl`Ao~eEbz3=c9v*0 z$!r8W_QLk%vq;757iJR1$_j`BL*+)EK2h+#cab_OcmKLEF#|r0Ye5yLCjG@X0r64u z^hWNcKe#)R&D?7~)ykg5bJ&J;DGt*9tTT?|Lnxt00m*cw>JNZ?@VT|(kIysbo&=Jk zqKJ+g0tKvb7}&BijrJ{Fy+E6^VtpIrzmAEhUOl?WW_`ovLVYD#CJs+NN=f$ze)2?W z1N$TtQ>d*r0IRjl$Y$&N2d|=*x*wd>A|(&A`rkdewm}6c)Z&pQfJuQ7CD`6#N)5W0 zve_@ZIc;cmXKTVsE8c~A$&kj!X|j$iY#0}}XT@IqVpfT}WxeQjU9Z-6Zw`Xkw#WmWx&;H%sXneM~-vjCy|rj`KoSz3L^V4&B@y5ohoC z;`Zw_^IvswPS?w5JRlzj1GU&(DaWkda>?~~vgccuyR8mMp1N@}(CFTurhqWM|vnk zi~~_YgtZVRv$3(wh<#~n`&z;~`<)^s7nE*=*&W&c;9(SSeAk)Yu1dcQmm*DR-zP0| zKDavNeJ2ym-U;ZxsyeNAe+CY0zhq%?-RFfNa?!&-_pu5_(^R-#Et(^oo}Ulp&8~)- zn#}F|bE>vvpF|zTGS>BNrJ0q=T7z!!`XfavH5o+%mTyKvpSBxHL^4oVfPbVB)ctO1 z9Y0fTHrXKK_g$s`*u99wd4c9X?TV6ug-U0?L0(u1pjfFXhFNR&wGB9Xzbrc0S2QMJ z(0cbZDUqC41^|f^pDWW?a@*8@$3fIYslG4O9LqTG;?tI6kvw@L=?$DTcePBt5&`KtOo2+~8Q{BDk~(8)H(s~IwzPbVI$^EgML6eO zf)k#l`UK~$e!N!beE~eUxEZ0umvpOOJKTt~l#fAhD17LkqbF5o9MU?g z#3#+1pBQe;G7B3(QO#drQt(y90trp{29{o`xzT?AiO6|d!}@Rh*IC9^ zxi`Ie^(XDy*%DgVkbDis=lzFm&f`7}iYWfP7m%m!mX~bL_9zUKNnS2;&QJB<>9*(g zA=68lI{94%*^=o?qlmG&ICpWr`DS}CAJQEcajllMisu;6ZP?xS(Q@5NH#6}OQ_q`! zCKd!{G5r)TncL-;kKGS20s1^R8-0Y^Zm2YBy&Z`%sBQ;jmlf%wd~k)zPgL)vE`Q&3`8__7U2z$4O{RUi;#fuwpqD|^e7oh!pn8ueN747IgWb)jl zBYO6H%W&j+ug1ys^F1?Jc6ek%&Y;zAp7pmcUn~@nG_>*yJZMTf^c3-Z9(%`Ikaa&Ts`OW*U2lS`IuHZQk-GLA-{51Qi)b;HdMd>w@T zO=ksY6=9ua>OhFA>J^Un{rj60$f-LR@6HfXtTf}?RcSK0lh0X!k6N{(-NbG0tbKYQ zSlsN7)?JS!m|y6X^1eZ3sGe3zGt`vam^U7JM2a0jB*$sevP8;V|M>jSxHDXNTgKC$ z<6mSq#O{+}ecqgeuLJLv?NF(pmvq4wVO%8*P+{QuBBW1|w;4g3HC8Po_IMSUC&YF} z?s7^+e?M@0Dm*WfS|%W{7`S38e4MpABG(s;q{m)|RhSeEAMNZUJ@-}HOiRj)Z$fFb zbP136u_xKr!oxDtLS)EQdzhg<03N3LEyshU{UWstv`dN-s6kN_!ihptm4tNDqOhT2 zAjnrrlCsA&%r#Xz^j1>pUo!^`%tL<_Z5ed56BpuJIXETQ&w!6c8DpF6{f%Ad>lofK z@d-km21SMAXXY7Qy9!v+rB1U#hI`Y0I{652JG39~Q};3I-fWlBU^UbS%1@hi^r4N& z@cfkO`Q*^<>pjC@!Opfo7<48^W=mi zbtB3%x|}cKK}BDL@r#kkw;kwPzUfJ}f!7^@0G_E?o5`kWFdIJcRL1gJou$uowpR9W z@i!;GEiM_M?>XP)HzLjxt(U!(69Bo%cW4d)KSL7g!Qe&YD;PoP%+0$)msFg`LcLh}o zq7Io!d#9}#I@0Uwzt{`DjW zvvL~l&C_0k%#1}~hJ`=5R6aQ8x$p5Uk4v@wOyB3X>CfeIvHZ9_z7Wm@l|hH28N~(t zr|<6p90ho|P9%-#MBo&gf+C!D-53^Iy@;R|3haG*>ieOH?hO@m*JAN|oQnNA^3)(PojWfTi^@|O5|;6dmW|;CKd}Qd5q!m5Ck(`w?4)+fu zdS2olUW}Js10p?odjvSjkoq{x`M=0}uc)RLe{FZp^n^B(&_fBmilImoH58?5C{m=X zfS{nFp-4v)nt+G_0qKTbL%aFn=ZtTh>pjNif?F;~ zecs>uydHy`hb5Y2sZ2GEd@YAfVpc4squjb@Acjacm#-&2KImRUn9E% zpg}DV2jdQhX;$RQKHWHG3)Q$~ZYKL;@m?kU)+e$t;xB3tRbQD zpJj{)PfQRsV;QKHSEM_k`}R>!Q*GCTCf72YtAhNhF8Lq0S7L&VCWtZGvBnruQqkN@ zNkrUkax_*`q_CNqV$zv?S)Hjt%&b#98P;QUy|s84n~Y+@e*$@&rNpy+@)qYxQ# zR%)U`liHS^+jLD0F{VRAe{asClO>-h=<_>O)eh^oSt4G$TE2h-9)LnabJ)sgTO7R3 z1RwFfc7h80yW45_2gya!Kh6ATl`?84@K39ZjnRho%4z;2iu2leMa$Bc8zcmJn11!) zWnkSBs(^kLH;?mWgUU=Cdf8H5WR<`|XeRZ0TK8d>0Gtca13+|m6qu=Dl!Xdp7Fs7d zH#TKUslQP+awCSp?*Ks+A?hzG-upF_NkzO$93U?N>p$||<&|3-P~`X(vT!N_QT7RW zrW~C5k{vaV6w{m3AKjm)VRBjB1U`hdqM_qg1b<qHo*I zGKe#1)EKTJNA^gC5R#L&JhviOQ&DR(0f zrXohqZf9bYc)*I3m7X=B17V9(f-V>7Xc$zS-&zi+G6@Q`I4AxIGhc&|7=Xaa(lN%z zL0A?`o<+y9*Fy)`Ludw=nu?JIt~R()Ah}_6<^Tf3hdLPEoN%*AzWmGYw7~~Nd}^l- z3xJ{QfxYA$8sg|}if%1ZiVh%_CT~pun{=U5>})ASK6-RNd5PP;gb{M$xmO93?Wym| z=yhUcbC=2#;qHY<(MfcE?Y#M}Fd&+JM#Td={C(2V!4M-r>~%ZePP4hZ8`@0;+iiH( z4=y638z;r=Oa1#Dlp2RQ=shV!MYpzO!O=mzI0dWP#aMVS866E_Lj|bIcJRB{%D5O! zh$gQ0w}JLh0V&`BG8zjTp*Ja(4gFF)`BDJ{5Wxas3!Qh=`Km>9A!g~eMxlQ5QFPIF ze6KOMBM`!j-$r%f^ci}&B5XJdVYv^=<)Y?7i!PVarJ`ynQ--!IwyTllh@f?a~6 z84hJ07czmqI825^K&%Fh^^5p3WoX11x>#+1^SGPZ4t1>j1~xn?9;&4~p1fx)#Ew2B z7X4Bz*f(YEf%)f>R=jX#t3B}I#vGolgR`~p8G%Z8XmO_h!w1u4dYcj`BUAw8s!pP5 zO;UN+Hq4u+I{@3zr2ZGW6C0q5Zyz=O2H-E7Ng@>CJ-rj7ndlB^KXQ+-A-Tk1* zSo(X@^14ba_@tUx;rO@cJ5@H|0YStisG;=)^Vu4Ck>pK*PZZQ+jol$ky&)->g&-&( z|528Xsowb8u$vNcuBsMeVQoyH-9@SSiV1EYIrzggI0kiOAE5|OZxiPN@RtT_2ty4f z9Tpz?CmLbvE-mA?7J`yw3-N{mg(`Q#N<2%mISBgo(G51-I|u-{*6}b@v#QPl&sL%E z9#}Ea#|m*~XGlzL=h*B+yJh_~^`|Jd1b=}RnCgDR6VRbfNETxEK$s8!3uhnvck)Rh zTrQ*J6m7vIn&9xk>_D}2&Z}dSL&Tw%7cP$}9N?91Mo#269c z4h4MG39ebv@>jzd^3@OQYu{}A0`NgZpOwqwqBK-20~xoR3$ddLl&VqGhV^oJJhYT3 zk!2(kvyPHcml0=-WeDxMJIhp*WZD?mbcK;M5N1CS7sobu|&xTRxQ zeEjFY%465MMAM$mC6d9=&4B*aZEv{mFKqp$P;y~yL8uv?Y2@+?AhJQ?5@__YNSlj* zJ2vZ=&^uYbqCf(RsUXGpe(bOBzyA5w{?A6>78OL{i0U?1`L^@o*`_fz3$?2&mmWi@ z-$|GPC2Qs1nm?RcZ#%i2qF38pb9v@cx+ds+rh?aVw~BR9j~dE#3yQU+C?=_8^|=>w zeHxrbTMFy1IOOW)wtIgdH+j^vf-hBUf9-QNXyg!@;`7F@EBr>y=1QNpJNlv?p3kEA zz6%^W`1aAIO5gXv=hJ?#pq2cVm}6NIs#~i3mP0QeQ{I%VDW(6 z-2bJ65OUUNSBH6IhfPG+pXx#PYV{zh*@<=b->Agx-|fNJfz_zwzwA8j3C%tSTfLIn zeG=+-BsT}8v;`#fc%}CHtQHV@{nMI44xbJ=EbxM-xH&z49NEpgIql(@r}t)b!;b9m zBb{&uA?nzI3_FR%-}X!(my^A5+i1 z)xcyTrfhO`nXv3i58JI?D|tt8a-Ty7b-a;AUcKdl6K(y)Jq zx2o8N-90m>&rNp1t%MP{mGH6_9{d)}b_j0tuO=sVV1rNhrQ5?-?_RhvJ9vF=MDV!+(W7 zkNylEK7|Jl$EROS&b<9kkn-Ti#fP6KAN^QOQU3H4rXDV=rYMg-2>;Vlc=ku=^KX#y z@qa~-0;eT=|Hq{zX?I&0)y97{=&pRo60g~M3PpLF`NA;|Cr-doAu0eOkQ+0M7@|?E zs;_uf(YcQ&l$0ohOl|s5-`m+<3o^tIT$FM<>-YCUoYrQ}-vcKmd~ObZd57`%f;;e1 zACf?W#i~*?9vg|3S6@lJ%AE%@ChOKcT@gp%+Ft6|_C^bT#V;b{_c$r+TqNuJVMad? zG&!l@W}N)hEwfQ5U3!LEw?OW;P9Tk;8i@$Q+DUTgp@kazr`TXjp9E7No_SGS&5`Fl z9h8d><7a88%n&yt5$BvLa!r|C>RUR0adze+nJ_=oXf(MhPB0v(N31*dRj7CJmo8UZ zjmp~@p~Wn`t-YSX+X>%V(X#B@FNS35ZNk`c(sX&ZZX4L-_y@2jN)jynT62& zLUhpO1{X=fQlFqsY+y9c&dZI)QCNBzQX4A|c%0Byjj$2`VpML1ouWLGEpcaaTRmX9 zFUHGoC5c97gQq09={4vZBy5XVB0n#z9`Sq{?vH}o~aTM z`3eYB5}VRUzc(~0?dLS{x|t%net+n3C_T&Lz7g|D^JkN`PK52Z?MOsdWIJ}vmhz&k zT*Z_(U0$G4+#V35V{GZzx)X`Ec+wd-&r4IAEaR_-e% zP>q8!ydQ!ZF6dhN9kJrc_v3`Xz>~TLQ+ov0oHm3yB&bO76Nc9&oDsAfL>nixSZX$2 zL4NKU`F4NPtbu7zGgb6baDo9dvfpd*_62t&5L6P^K`5xqt-RrYpG`xY@5jb_WWpk@b6~hoH|*! zzj`YZ+ZfZ{DfUGyPdSXrejau?eB;Dy|Ik;x3$@|m?!1#TCcD||r8{(d>7!-SK5PtY z$voG!Dn3jDv^o|pdy>z=Z2V~Il_udWo+!O7FdDDKq^{SP42ZG0+9GxD`JR=~kSrw| zy1~WrV>>a^z`dAsf{6poet=jT)!;|bPZyfwbRYU=I(5vg$@4)iZkOV*k8Df~jW7q% z+MiBxCPhN?^42;jtHsfUu)PH%Kdx)#w4B>!%)>G*H@h*xquvp9n>_^HyzY_@mYCCu}miimwYtU{fpOgYb9{*VAk&J-b~SahX?i`6%$ zmrJ|7w`zA-UXn6;m9Rt29!vkYPJDq*){Ayf+7BQ?({=$?Lk!7YFK5>;F(;L)Lbb>` z!1W-wlg``z4#VRpwLH;0OGQc2sTH=*_!SSP)Ucga&WU?G3)EJA6;r}EC5lS>cQlh4 zoRvn=N`t0Hx+lXy>EwyXbZ*|=InU|#4>?`Ndp&L$xVOuR^= z)h!))F-~sL>9+c3%TLWZcN^{NTkaa{BGv8t={@Q4y?A>B8(b5Id|+pngLN`J&Dy?I zY14JvqJrYn2_?IgQ*wPz#t0o0sjoeCzjRCRj%(VKQIwwLQQDtxKdWA%?xVxc@Qw?` zKm#w#0~R?=+Gvk+6@ktUA(N{;;Kcx&ZsCz{#^lN7o#_s)g1J^sbD7D=i zD4L1`4;(wa^XZV^wI5LX=4atCZQGBUUG3{t3}};a5t#=#H|wUbrYELcNSlk-MEfZl z?R;PETBvw8FXA^Zm$8nk>c%^{wp#+jHxFXpo2ay#VIz`vj}%TzdmmSRzXyBH?|jp} zn(JENJcgA1^(Il!6;0odEkcTyx#!wnv%i87A*%B(O5^KG;yqpN6HChk9~@|br}fx$ zX(^eOb*w0eHqQx62d67!6AstmBn`JoX@OB!7^x46weMEkZGUcf=G$PpxZUN$TGh4= z%bDQ{ba3|%d_?08(gyK;{=VT+9Is)4F>2luIUr5)Gr$_OP_QfGS3_fjx|Iaw$X-3je79jJSAB!%}D> zQM@4iV)+rq!+n?Ldhg69%4|x+Xr5Xsg5;o^wW&3df{h@mnf;U{-rGU83Rp9tUW=y0 zOm&vxPYz^lX*uVScVGLyx~wBRot)3ZVRh+)+vD!{le<81ApyB~{@US>Zbi*|j!%8u z5}kC#O;n^_mIu!RoGi178 zzg_&O6fL;vL}lYsx{=>`~NCwp7CtGT|z) z%Z7r$imYD{3~z_X-NvfEexRMgvVok7jvR>If4B9~Pmj0z=Wln z;n}i&2Y_Aa<5naSUYdZ|&ZIL_C$#N7(JO-m5ZV-sG4 zL4`cT+H~*hwzOX;Vv>M@fxsGRGUv{Eff;EJ103!)45&})_XyqIyhA-s{Y4K}Hz5=t-K9G!OX`!|US1!nl(Sj4)H0{rkGb=t{g*9}7AwD(in%VI zCmDZmAi97UZF35N+=C&{M5s$KN!#QL9zQ+$w3!{|w7L2qbXgaAQ-&(OA;c<>8D+F+2|oE#jJ<4<=Gi9e2iusx}@;Y79jR0T$Ih+X1p*f?V1P;av&7 zmy1(R^pwN;BI$@@bYdPg`C2^%<`7d2}@!r4HXe-x0Z;#h}x&cIW}vbFwuA9IXZj?yATbEwJ?wv zHdf97s*6v^xdI$reN zEOdbCUVYM=z|)f%t$0`nTEpwo_6D%0LZg;o*>p5`<;3= zB(iG|YS_=U3FV1KVK1RNAtIt2V-oEHA9(sRYL%nW8$ND0cz<8PXEzA|>BGa1dO*eO z7&1_anBR7|ye8y+@uHTNOi1a&PH>L`87=2!x{idoN_Q!>uezlyDL{I1@wDC0NqDpm zs>ehlv2+_mbY$DXtOm8?8*^i{sKtiM$StOTq*=M*%>HwBfd@Y8waO#b3DDtOLfZ_) zH3dIeK^i+V)^n+Ta#2V&VnY&fWu`YRgFt?SGd^lT>U_GnJBc#1tk9YRngOs+0~Zwm z?S#;qpjH3Qw{_6kyk^WYe!Hhw9UBGt6r7LP)yKgqM5Dvo4w~5F3w$GW3XwJHie6U% z`6bYD2^q}9mUCP2YGSUd-GTNAYfwwK&4Av9t0gG#jE^`S_~hf9UPesQr%Zn(HL9{_=Yj-fs9M$|JH4#t0Q&mkHAFCIX88}Y|y zJ(h^Kwl-vqhM)C3HV(pV+ryDHg7EIwj5T6h?Vr~DsVeZ z3*#aCe63~tegN(B8pVLniF`#gQOp?t#?=w)))r(B%mIsOU!6Hr*N9 zUhd#|x42B6cy^2Bc2kd*cZdY_=$*A7@HfhxC_0N+#>zv8hUFTJF?!e0zFweKjNi2| z(;dM=6ggyv^zJ)2tRYJsRG9BS?MvpD+C=M;GJB0Nd@4$SJ_Awtf*dNX4-tYU)4_u8 zn4&T$O<2+DRWRLP^(~XK*RK)|Pr@IBSa{$b*rV?0lEyyiZDnq$S>c(_CLG5s131wD zx)3AF1CCrm{q(Fn#Y5j4QgY5dh@_zHD~OeB(4u#zc{E?7ZlnRCL%RTXUon@BgjY$6Hr9gy2S7BQEUbemzF>u2G%W{_I(E zm`;hzg|c^peJKb2q9}qu--(lraI&!ZQ*p(?Gh1B2$(O`K!`{}nB0WB%sCh(Q7$DB5 zY4HPwQlJh&4(JATEFoz?vo-^n#5HQ=VIh9CVV3)s7xpNooBAYCLxZBl3bLvt%>6XR zzaVCoIijNR=fHkX8^KY4Sj!lHIkEP0aq>zk)(egV?3M`XYNKE8qcdMt4Dxhc+w?;ZEuG~ww7mnP>HkpWnd!%qrXTSdD3GI&x$~~d$FWv85a+3 z!8LdcVdeph08E-pbfWHj{d&WudYYApuO5;HWn8l+(s(4(t0~0pb3nEYlp$1>ruL$0 zC(czt9W=DA&|_)Q(=kk)!ba|2!s*)jDUM@~x{=f98)kKyvaE0d6QcG# zu#Lq)N>ZHzwBqRXpo$2|;9*BwNg5hHPT$BUMaG|R_fcvw;ce(sJVF~6H+5ncj^k7z z%;5tC?B=k^Tb z9F>{gX|7BiaxfkNo`Jzp#1tOdij7>)N7{&xF-wzPoMXY`Ky#jSg}{-5G&#hv`~A^W zM{vh}8GpSiq&yy-(&<<)tFOYi?5q~6Hb{#fB_y%dD0vw?ejuIoR`0KmRwtJlB5Mgd zMX1zIo~Mcsdz54X7g`RyK!x#UTtMn+K0)yYLGcX1M}knXgg+(1SM%qpML2f}^alRA z>nkp9iby~{Ugp`4@U@@%tpIei5X<$LYi7?~`;DJ`IG5WX*!FfR4#w#;>`v(MUqbX> zd~{y);~&{)PrX8}=fNsBSc`+y<094xBYc$*YD@%01d7#wic2CzHazd~E6zo%$ACE9npcj1YGrz?{BbgocM?|1dBg{Iyj zjV`s&^&4%^*gqV4YWC>P{>{aaUceKdQ9?3nz2Vdb$E|f|kcR-d)C&X7CEiDZOh?s* z*Ux{wMtKSD5Msk?2}~ifp9?v zD%cjQqQFFY@@Mys5^8vxetisox^Jydwi?u%GJGF+JP$~}1JWH;Dr!JeuE0~@(_Z%kzfKln z`&Q%&0DLwZe~LL*AS`fiAogF!&WYi~tnq*&qak_Yt0wy6SNCu)MHO9Nh1(^6;P%POiRG75DkoC@ zh1L zplNm$Zm-IA?j1c1E9w8pcA8)%{mmkHB=XGliq0D~uxtnJ1a!@nz=eQ;$JJ-&^ZE0~ zyPuxue_7f;Upcr?wFeFIx}R@(rVm)fpFxKAvKMree zD9J6VHt}w$8=&H8eoLf&Nq;UdXc8&L}dwhk)JP`R3{Y{%A;gw^Yquru3MKGxF z_RN;E+Q$t55j19P6v7O+%=*rma#kXm^;aIChk?u) z{R$v5lac8X%I7tJ*i>$={h37CmO_6fu&@is<7K(-5u=8bO~ka^oxfR z_p`Iy!oJ}b0fRTST+KE6nv|nUY*>OQ_Xn9-)weG#6YT66f^wBkel{At!Y1%WwJfVc z#}PyGEQX%cf;m9)$CSE|*BHrV>spW2ImRs9qBqc6HPvbowQba=&wPl^wxeuRj>$Z@ zZ;Rj>-OroOE|abT%XA!j5_OB|pLwr#!DD`FwB;W3vCkg9E35(oP-4=CNxy!wWp(p+ zE1pZ~{22&Ji-!~|Xab6=ahX@g?n|`gSpcUUgPyd;{d4~7rPicTJHwin`r$ZnjGx=X zGE=uY-@ye=Rk49-xr1I7ub+6c6fGCB+w0Q) zC>GDq7m{(4=<_J$xyL*Ty5b1%V@qN}KyA(R;&cD}wh6vJT%BU488gy_=A!3r?ePfX zK|_D{Zx0><Cmz`R~A(w@=>= z-_uKE7upll9{32vdALhgKHb``@_6#q@dP#|0*%06rBKsPqBvhQw}{KiNxoWsl_F@m zn4YV~W1G)hmy1;wk-ZpoSdstZg(IH)#=ZZU;YDzV3U;M~z@8ju6s;X}r1EgMy z0xr}ek1#^>TtsT(+rEuTc=AA;jflHYzOCe5oTbeEExB$15B9q>Blde5bM8jxYxs4FO_|moeZj}*%8)&(b%+DT`Dz~aX#lcB@E8Z(21bI)o zH5MUAU#FW@&{Ie$b-JCSAa9(zd@FyHzRr{7a`()g^42(QE{1bX9ls|)H`3gfy(aOA zZtn{^D@LNB?b^!Eby=Nt^H4{qT8OVk@o@z%c^PYz&98n@m}wt2elQ`6~VT3`W0NWW?@ z@{c0>HSTscc`owQrsYiH*beqD4$4j6!9Yw3d+Wnx^Nso2Rgow^NJ3Lk7@PQz?&pz# zeR^%rhSsrj*8W8{!WW07%L769@ASv?^?CvcnlZVNwtaTXi0PRz{lXlU#Y0 zojHAx?swd*u8(!@>dryR1xIJn-^?R0r3I-n30#$kY(QMdp50@TEh)_gr05Tv>h7wW z$theb$ZkxMx}lAC+9i9~&sK2B@VGno^#-;)=l9&MerLavmA%{(*lDAzr6RifAHy3}OtZOxI8Bw>K~X71A@u z&|Mp=eykV`aQ#w2rw=78x9bW%c*t7QA$DEQvsWIXv;Jw(8Yn|g28fpziM2sFvS*b( zT#J07Mp}{)H`F_EbK{3-YVIY;|Awhh{_x3hg`i` z8mjcXBU3N03{+oJgtoH9TlU_4n-|t=pK6(>;a4_5JV`eiePdNdCk>osjChVq#C zcIbbR2R?Bu${~iW>&Sik>k(PPwd(qhAe0^&lg`8`aMy~JeOW|8Xrhk|^I-rk+09`E zYC`DR{#38^i$$)yQYSO!&H=r&t5t*Yhn#P#2 zEevA#F2hd@0(twL(p?HvyJiNVodxON2^34D$nbTDw=i)>z_-syja1;&7M5l-T9&G< z;S;-JA1ixAjYKziqpm8&12>w9MJ?@9R{H=65sS z)y8Le0cvaxf`}sXl#enHGdj@OB}{&%)0DXiiifJb3nekr3z|tQ=|Fnpt$58^bYzap z?aP^$H>V1&DD90!5}lxp3^3jg;lkM1&0>v*?Xxku z)`re72;v!NG7DQr$H+mL4iVwR=CHnKUD-l~Fca*H>>TskdFr*eH7uib_cP5lGjE0f z47z5)5_(-|P`6-x=orvLLVbL)g%HNBkr`}N zq;Uqq7)21FldN{Y`zrllid-%7dHPA38UoKU^6@9BvAEB$p~e|5BoS&C9eT(?!XaIZ zC6s>+9hHk$ZY@l^Vis*t5)yMLsg-2OI=PmgqUnK>VW+?I@CtiEk)R^|SoqUSs0;!8 zt>KMSL+x{hvRQ~{jsSNhp2&_D7I*Wo4DvwVHLp^ zAI3wFsnxMLfQuefO7(J2gzEb+Oynv zTpCnoA>aFBIlN=y%LG?I5fCwUQL|6b)qcb)HyJ zH`d5k!-O-iYzDrHO*k?Q9TBCdisbzuM6ojz>HfapsAx6!XBZ?W=*9Ih))WGUS zK5E#Xe2|V!Vjo4-qUC@MT|$(MNyg*G)|Qt=9II606NeRU;n#}loY#>bTGd#E;Ma3O zp)+Ek^$@I+SR)%g?g#Nih#`HbuP$p0x7P=8TrLE6%MVP@A=~Sy5a=k~Ti75T(gub{ zLZl6V{mUGxW1^z;Rd4QrHq$|Q9tL51rbLt<(+1qO(vQzPe*VWM6b~^}Pqb&GqgaT) z70Hh;?UGz-Q6XX{mK*;{E-jG5YIP}8?}Yb!KpB9K812OHSN!3sLKUz!g^I+_ZjsRP zMNmNn7hdJdw9^kr(SYX4{Q{LvoDR!~stX7#0VchtMQETYh+80?(GSqAw9QA~!ntsL z>+Uqj#aek*5)V^1vRUN&2}YU>3yt|4V=|_IMQCQ>%1Mrb?_D)r9cZ=FJ$XCDdG+XJ zwF7!-ZeHNEOT=0lvbPY}kxcH0F^bwkiXT*9>x&%_D%_2Mnwe@^0Z^6@JVL^87^nUY zgIc**&aC&QjBa(hfr>Ha)>W=W?O$vYp6abi%dW;wQHXWUAS0j?q2^y}tO(HjQ1gT& z9=MRe?#We?pketBi0Z79(v{>e%ZkVq1JW%6fXZka`nelZYlUUQl6QhFb(Pe?yzb`F zW9d{YR%6Y9vThdl5G8=JNfy)ROLmnp4aphVfk&WkjYw6dR=ge-vkmw?f9B@hjrZ-< z)LGbSD(Q*KaVoFVWFAMOtwA$SPzy(9T_MEeusHQRY)E23AlzO$y8Y-U&x8$3eB%!y zpNfEePqAaQR6Mq2bnx&51GN zdekWqd2V`l!!)sPcmPT4L9)R;0niphKr;|(#7v4u@}`k^r<4 zBDYa7$xK`mb5z>{t!1hG7x#kAs8Rmy3zS>_y`3eSz9>~rdeJbU3~K0-b1?kXM`ZNTO*)@!K;qY>&Es5|8k;bcu4=dg&OnIM3QlMvcM8Hv zLdq{fwPA_ABTv&M0Lf;T#ns~eTDoms)NS-y+Mka2YEK~v(Hbvh8)=yFdd(MIsDnSH z;g$En^01$QfI7T!rZnygx|GXv_yR&m6duku=)7{Dx!q_8xsN4NCag4dSQ`)tKvaYc zgbIZ)2Zh+&9oT~m3|o0ReGMj1NDti{9@4D`h-CwI@ zz#4~}wHqKrbGGp2eCPEb%7lbny)A{etkAVGuRvW;sIsL@9een}Sal$ues0owvU-B~ zV0KeqNwd!*=`N*L4>z?IkD1UhfIG(B{rK&|bLqK$rHR|H@)p-;ZNCS3osYWfv+s`6 zuo9Ju$)n4b)FK6+I=|W<^1Q73)p)LaOqB~ObUH+{-Chq`Amebo1#TUd3A`etxt2mqmM^hJQj~={8 zId4vLI`w*zzr zy5o*_Cl+<5mJFrB^cY?<%^M3pdMO;fjy^U91LXaGc1&YSu1A+o#{U7xss9C#lj~*< zm2{`C-bMEvg#mKy`2t=)w|;mPAfLTZUp)qU+Bv6$?7Ff1`fIrjlX>uI^y*zSjE?Ug zZJ%33$M9Wr^VLFl%9KA@(>_%MLu3B^l1`W#PgTJdnN@E5srCw*|AlHOwSk$ji-jM z-oLPFYoGmd2>qt%k4UEd>f4Sh%crk>fVJ)26K`Q>JA4Q|bnD&7%M%`ji#D`HwR)Z zuHG1iuYRGhFyl`Z+GT2zmU5zVl@{+nWR>eCs^UdSr?$NA;!F)BXZALJ1w~`;u)~N` z>4^eb$Vc!oqRv&7X6vs0R@?R2D4U+Vh#XzhxmmTuDI3x)71U-)YFX0Q5jU&*E~Z;ZWyOiaUdC5Ts6iDC%m3$@~=1i+EOHCTIP zlKVY%+vAD6+8B^dA6Kc*4|9>$#qsCCt#eJxnz1x*+9m#6$ z7&kbFrMMp*M$K~NNOuPA$6W*n_Q%acf|>_OMVa}iKp@kNBhCp0(SfwxcBgR5K}x5k zE%1j2t>_tg>o^=lJxlTy4z{Dx9zdtg`Jk~PW%?=A6|3(o+x?$HVjv8Grf;W~-deQf z^h8kYwXH==wmPVkZ!6S~=y9=?NqKq_IVj&2t@5B*4tG+EGL}(;;7Hx^k?>jxEy~XXwgBZE0+LLlhqAhGiC7p1Syc^4x z1+|GB#OQuBjg9oOj#DtcxM4kn46ek1`k;MWmkG(p^hhQ0(}Uje9;_Lg!*%jV-+S+z z1lO@K&N-bPt2ABfU1_BAA`tXlF!WuSdPWjpMjemEpsyOeFAa=ApA+GNJj!+e2oufi z`!3v6zFGc|B}+x9#g-#Dx7C64DM^{DN30HPc=|;UBb}pmU;jc(eD@>!B>nJLC-<(Y zeki_3y|1o6XT|a02!sj;THSYByyH$hL!$LI=@+YQRyrR4&j07k!5ujl=j{mv2r_LeLqE$eWCL2zI?+#_UQhl zBi2~1yAFI5p0J{$JV)fmyd6JA*2R=EzKM{J@y8=gO8M37Czew3Kw|Pewk*jgZJ?8R zfV6vEN2VQCCedrZ-~>m(CPZu{MwoGCpPjtEA&8VrEPF>QrD%6;OG8`?zPN>t>-a`R zx)eVI>AVb^Ky~eA0IjP(kF~m3E9N&nDgi&keDOe9)u>;r=Y2M!hZ`w(PNhEdvJ9;U zup1x>knIqzB*%^v^KFcr%*Y_M??xasZ{QA+$N3L)v)a5=w2XK6-|?U)`(Be>!LT`& zVF;}phP@jZ=wOIVJjS*vEwKspM;H`=2wb+R?K?#HXE4!iF~CmcNb z0+beUPV+eym=$@%HJ73m8`=Hrc!wb6y@S?Ym!E_09BRH9<_rSXeEq*uwp})YFeg5F zogADDHj2_4f7oLhYEry=zb75N)fOF}SOjQ4kt=cyw5=N&e+aX|D-rtG+P?!AL7#*x z&r#C#o>i@bDEQO0(-S=pAmB2SvAO6?NR|9#^}LDxC9UV)6_gv1m`ItmJAPmT9fJre zjCi(9`Nhy7;;VN>8N=!NS4veIBY*5^V@z2Bq?T_;e9sQw92o%N=<1^E!0c9MrEBIw zb^<%X)U!*Unvf;Bx8exnoTKuXB3TsK#w2A0KWv z`mihc@!dLikRx+dZHvH7PnL;O+IPw8xC5JfRYJEZ2S8o@Xjo*Hj$Rzs67NWGy!*~1 zd(*nb+tzrUS<=N3kGF-;9$m<`w=IkN4d4A^SC;p&igi^ zrq79XetUaE%+H3aKS{7q;`(nx8K-|WgD>b6uPJrK8}I4$%rnvKv}s)LHG!$6Hs{b+ z3VxRle2{SrAu>Oud5yic_0GK?*S4W+jMh|=H~(`;e(Tl<2g1H3gl*3g zB4eRTY%UP8?*Rs3xoSrof*_~;j&HH$K;S`pU;6{!gju`J#4Y9$HW?1${FzxYWw{Sk z+^yAWh2r%UC&{};54m(XJeTMA?K^N!}ImikI6j2YqDSL8ZB_vRRTD-7LI8u_{G`< zT)iXRESnOBc^{__ta1Lvd5*9}-)l-5no?7Pk9qDR9QiNHCqsaQ%*RgZ#_Y2xC2bnA zkv}qjEX^%&WUN{QD9NQ|AJ|_0sxR`@`L|qMKhcJh$8ztTTF-ftlPR-TSR2^8Yht38 zQd8C(c06RIMoj(}!kfNX$($dltWTQ1GCSFI=1~cUulnUSZ7OG!ALOBO-zcoef5ezQtSbL! zsmpY2I<|jIT7BT2h8+WUrhal;#i@b^s&#u2x?8n_S##(~)gpM7>|%!OVe$J8rDklg z@V`#n4}X~f$P0oIg`gD`=So8qFt8LBV}5hM>nWfaMa+Jo0O*imr*eKe;-@AlLo3Ys znNMs3`|_5g)V{54cf8gvYz^81Z04>-b;9CoP@a!D#fYJmZC`&$NuEl~=ONw~0t7PI z^0Kb$7Si{VEaZaQ@9-?3%=)HWaQBoKOjtK*Ky_4t|1KyNa4gnwKe29`DV2Ci6dU5T z-`E4W*%zQVkiKQ_`@So@c(;4mf(Q04OMMq01?{Y1p;oFukR)QCVMRquyW#F+5~H&R z)c!J>2epq_h@KO@S&2gp*^>)tAME_AEPQ*t0SpBE(1dm}!Sga`F`6+dB)RzR)-H4q zT4+sHi*FfNv$l5ERBf_G;gR7>N_#Bx{62dD)4NMP0q!q+S{8Ltw@|Xs&SQK;S~D}^ z#m0$R_#I$Pl_^n?88g-!Ye)V+K&x z879tUnxeQX>y`aFo;LCJ2NfENYgo9eIF_yvf?@kIB@Q081j#-R>h`R2DH+_v8sMK^&OO%xecP!sI93{D(J)1!i6Mm=0_ojgkNJP5dLg83q|YQ#C$&D zAB}2SG*Y1c9uM%ytlWr>P#W~Y`6Zd#10)90%?_Hihiqw8(=&v;C4_NHQcRdF zxbCoYVWysG^%^2dMxg5*MpD^XdU;@Dueam-s~+-tDiT!CbqRy2C2;9T1@3ON8d_F_ znvNvY$#@y|H8Jk=$)ivVjw$+i}YgS3ml;eAp)QS zcy8Jm;OIsdNL)iTID)63WiQ7wgaK{lOa(1EZL@t7)#D_mzs_KYv-aDje~|DK4YjhJ zjh9M>j*HMbd|khbR7PAG%LAwf8PbN2Vu|d{Q`;`_bB!}Cj)>9gXp!XFC3KL;9Wx*HZH91~hl;wA zQ$a=bCPRs|FgvTH>$V;gB0eDu7?&fDR~${$CtE0jAw!_YEJ_+m-|>Igd(WUI7rtNj zzSBcZq1VuhfT4qeB!CbQG)R$dK%@y6niN~;9TNoU7&<6msA3OQ6iYw^L_k1n3tbDa zEGz3o*Zb^e&zW=1d-jJt^Ui+Pm&{})U+;Xl?(2X3jvF8uJqIfR(op%QKxf2kR`DGK z`2f~1lPbz-(~B-xkSbFLkv24_F%4qEyy8VqUDbvKT$R(n^nSQ-xt)uc7^rRMp|_Jd zVH4^*rkc;969kJZWHx$hQh-P^y!xSpoNw4Lx=g-ud%HF$FpiL6Lq%zT+HWmMYZYb2 z0E&AF3JR1FR7bX;2A0QI&7WhCOL;Ob2sw#5ZGi5@ssK!69- z9>F-%!Q^WKM;OPpWnlC&OzKV28fK+Gyu=1lS_ zk1N<6sQ`YRbc6&TxK+sIAz{XVt_SSd1P5RMDNhA1aFC;24*nTC8;{ApK;x<_ZeGd5 zZ*jgTNMJ6@xIhJYz>p0lmM(iD2vdi-Me@beEkX5&P=5EugoiLUyiLwE36iDUd~=Qf zLUtzr1^IX!+Vva;cd%*mG@aPa1E;L(bCK{L!fb4LyHGH$sU}O?D>OLV4<{y7GW#>wtG^H ze5q=gabR6ugL}nt-tj{f%8LyOkVff$W=Ox6Ke`D>QK3`-F?SWm9g)tH5^LOy)g;`N zp3ohifYLC?XbgOj3|JGp0>yYvbjZrYXf@b!`|QI@8lV)Fvuhm|ML;^d!_{y{L)Na7 z20B{1k+RVRTGsOY0YDt@8hQemjIkxV4QCh3o@Ai-p|UbSpl+$(FhIb7)6@K#?ZUfbf2XrwH#gzn3(7Q925p?gS{Qg= zwL~cw@hZa#BYT^=Y;RGd3^K;{aN*I;63q-$90#hkLh%p^ny6rjtOw26mIe(Ye5P-ZR%eTm69Vd2pfQZrecCvN~tx~{B zfJ~&t^xnl$m#x*H?^cJLNB2d&2zFLz##+1iPdolT6QHN|mr^@>Vx}3p=daESUXKgf}L7DTv&nOvL`)$4P^MBEVmEYZt7_OCI(~(h2 zP;)9IA{~5{0$#njcKzm>3>%bMUy}hKgIjBFSPFe2keyL$J3HQ5=q;)7D5n0tagE+-p{MRb!6}!0qX_Yj-b^kBs?UmH*`_rE8-OnfAC%e2) zU*&f}0#CIDo*r=Juac(xN~ou_1*JBJWwiYYsdoov-VFE&zq`V6IwSvWPj{Rs=!#=q zi$B|avgFzceiwwFQ|GtTa|ihgrNIUKoci5R)+nEUM--35{f9t3!WXEM`TV<-7yZ+r zp5hnPPt`s-ajrY{XH>nPQE{Em!t?ncyzXkzFO9mIUsOLop28l@ti6}sFjCk!p5HK) z*2E8lJk7lDxUg+L@25aLdaiZ+Y};^U$KA@#do}G-zl!Qpzv>`UReg&;L3qz<$xjNt zTyf=j_0>03T_a6h{4U5y>)+~h@1xrO$BozK`9+Y6H=nj$|Fu(kW3~R)THUQBei4Lk zPyZ@{O#Lc?@ImHNK!#mU8I^AA=ACSQy`dOI|=JpTC2*puHLOurwR`!+oP@!re| zZ(;3M3*^o0Gd>0X_Ah&S?J3`$e*W#zi}!qcdhWj!1?OY$!~f;5_eb08!YUp2CMSpa z#(a5F(_XZ?qa#yXnm~|}B9Ry&538;4p*#RqsDHx4dAc=sKSrz)9%n+j_OlB@F6|f$ zF?QbJBqK#20hiycTq&4Qppi^a@~Pfmg3Iq9v!9HTWkc5iYXoMAyhULUEP5Dkp~`eG zqXpGA5kgF)AN_<#N!<+}`&Z7hAcp0sO zi7hMcDKHyYjlp>iV$_jxG_=m6UgcNOn9scWJ$XcZAg{-nm~P!lbm5=t_OCqEBA^^( zS>BUwV}hWZMw&9JH5!c8r*u_FE6)mElBMuW3K}n9%?6w5LoV0k; zZ$Sbm}tIt;V$R zzevKwKun1*Y{pa`nZ!VGOU8F`Z$&iH${Y$NhllTOTz{h0F@1OhHln}I2y!^Qzjd-d zERrZ!G`ZUmIwC^{WgJ;b)^m3sAJgCRYoR##fRR0sQ<^g`Z!9dE;@A+?xSW6iIx>+d zrY=1k*&p5in`UYI$ctRJk}PF^p8*Gr8zgM(Nc8jjb}Sd`Xova&vl|v?t^>j`4ujTH zB1}s$WqsPV%@^T@KVJHHOi{S77SVW0>EJvI$!s8tO$Q>FN?YGzY-SoW<7$y?A$& zHByR${hApfYwP@ni9XlUvx^ORps4|XiBk}Tb9j$3Wg&xX;0rH!m!M2X+^`nda?=2g z5u;ge8UhFskgjttMRcpwY|+V#oUIMi?l&v0!EJwar6WiQ{;bX!fH6VYsah;CAVZr% z&gCyRiN>OA#7_We_jm|$l5F`pq> z_+A=J

    zpJ|EXiB+v0HxZX){xv4&BB%>Cu83vPEG9Ba5Ud3b!HNLjHQa(}g(9Cu+ zSJ*n3h#U^^QFGa?*7iuwIAuR;yV#4rv}Y--j5Y0y*@g7Mpdz~yWXQJSg)dR%fP{7z z>w|W+Y;!3CiE_~{rg#H1nn97pCG#KG8uenYP@=n7rF~>c_c5yBYRf&1y#Z+a>C12C^J_ULeti|YO@y%1a`3~)`6r*Oz;%!hTMZeoM9?#^I<917~YZ;AGo4xjO<mu+rDitq{ora-Y?Tfk#vO&a}QO_4!}4j6MMc#!NxYW-jXeG zM)%bxi}$z%n;*D(U|5ZdfK61FCOa@BKM3L}ZNhLq(!sCh0e{FjXcltpSPt*|tVg1h zZ-tvl$u5@2AG@=ZvXKuUt&Ng&diOjUA z^ZxPmSa+X;79gFZrRi!2Z4XTsR3*dpxPyY!4rhUL5lnZH5CD^Xam)EDd%NkyU%_JZPB zRoeI7+|bf-=B_ecnE(|UBxT-SNVpDqP$F{-L6xNjpW!4`2MPUD^fQkNkzP7~k?t~1 zI98Y)n>7ej|CU6 zF}b7X(D^kE2nAA=YJ;rmM!Be(``ohDxY47s-up59{S9kcG@&yQ;@!E^;L**UN*g8s zJl_IuF_8yEYwA-B^m&3lVx@gIqB?|Uv#9@KtrhdJS$f$HLf2)>;aLoXR=q3O4>%IZK|*X)2-DoyMxRkfB*UPQ^f zV6VtEeje#YN$DNyIvDsGEN!+tEQn=d?P0cA4$5WDfWTP9h^nHq`6a=-sbR+!y_*YQ zfFtvjPO5-Xwyly!$K%~G!phnqAMet-B33*}2UPTJFI?Tb@6uw?d&$-Ek*~%~B8LRQ z0XEyHG_~Uu51)vHjbN=;H%nEwX9jIi-hSMwJentv_1^2^rFR~Extj-F2@wxWPLb(b z8N+pLz02vtUi)D$q)SyB3sY+wJ>0Y{;IG%U8o3p@If9ga;LLW5n!Y15fP&#=AYR*rPBm z%<(eL1QThJefms&lFi8JxpPNjKbeZr;4oIIr?o8t% z-P258V}rO6C$k*;8)D~=1sf7#p{&&JY65!1D98Xxjp{caoFP^VUoHvB0r31c(-0y_ zwG)vrv@dYX?#nT^?XJj47tB_ureMVw=3q(v16{Ir-&W5CMcnGLu;;}yUMRhETM8k7^^;l`;{TcEbs8mG2Ngf}Q0Y{oaH4lN~0y{MY&x$KUmXMvijJb2MX*g`{I;2xQO(z99!-ZD)k?8Uytvpc4`?s-WOOBAxa)!2MH3 zsjHkLrx4CU+c1G8Pt3zHudP_}IZtfuV`9P#PR2%VJ3T{bBfUZ`^LmJ!2uDF+!`O*r z3|9)QN!(I_w6YFB{jA>Onm;EdP;eK41j%MEQ^~v!0g5K;NXz&FNB~@b$bv+>qgt5b zQ*x(?DHxW3=L9+35SZ?hu&0Iv=s{FqWHiPt9WhYkh&;R9b64kCz&RGX zB6VbI7MH_>j7)^9vrboL9S{oyumIGHi+Bb96?DM47zY%?l99@?jUZpavlVnf?~B`U#2j=3_H+>sq`|^o_8<3_E>iHD9D-0{3&ju#UF;xs?jRZ=F z4pc~nRom}FGtWrZmcXc>?-Sh787C-!aQlKKvw`<2vabdJVFu_v40XpK7(CRw5KJxH z8erA|v~qauc@*zF0@MwNRcTl~ao+{v9*@0aD0fI5zo9Q@XwFQbBCLjy-GK~Io1rrJo5&pMUj(ao0~-o9Ol94^lTV8 zOOO_nGXsR1_@RONE{CWADfEBX&?xDgY25Pf9JM zpXA<4LBo{<^w;YU*n^4CvXJ2{85eYxA<+F9*Up8FO#nPooF)un#2?6`LrggELK>zJ z0hk5>%7mgWAacJZrW1%g$KCa)v9*Z;d9}>%jfWuE#vf8i98{X;6)a~R27{hAP(o$d z0RAS-4vO6QXd8TEa2Fk^#e>FtvP8JR1lBJ?lsuv9$*=%{Qj$p?8}>D%awvr)1nfLE zEq#!iC$^k7%yKl|s89OD7l^C<4HQ-<{Mp`^W@d-EHs+%}7zTJA<@!HP!>~zuUJ0`I zuG-cFK;8`V%P*t_m2rw!ESSak+9z^26mBsTz!7XubM-=!F-H>s z-!%+-YYE9$rcg=yd(v#WmEb$oapmiPFiB2p>9VoXg(F2Q1y<6+P0v zvV^HNO$_YxI$9GHq;ZvDOi0!>d{h`9%0nqxV0Y7d5la!Esg;Qirg)^x3a*FgWsakrg8$bnn8{-gi?L%qi-RseOKr zy%(VF_aA%zcuc$T*nkJ+PhbWMLqj5`Eg93H3s5tF5@JN}9)Rm5i5GI=Y3X)XK$%Q8 zN=>w8hT9$pV@%0t_H|el9Ao`<^LF-+p|{qfg?{&n{D4;}v!hS6vQOSC{xOqbYgHYo zAZjOv1rX4A@x~>j8E2v|&ivcO9{tu+9Y5w2f+-T4NJ)8#^)a~OI#_dGx@tKtD@Kzy zEB6*>Jkq}X$)@S;YTfbb`TfKCPYm>nuUKk~M9$y4ulfp}&P2PdA=@iG&&xF20Y1e%8GP z6S=r1|Ey`*{%8U8(%h2p%|$aFluU%508l^l)nsli%PlS|Y%LQMR+M+G@Ugf0sTIwd z744fVI*UKCH&Nla!LH{<{?AQLJvXa)zT@U|i^b==ww{v|R;_of+WN2Bom!>TtUBIY z)&2jaEO(hk{9?C9FaDi%{^cuok^f%6{K;;6_9b0)j&J-|`J%x)`F~_DdcFC+^687e zsO{g#_NS@LN4DWj?CX+h&)QS0!z3**IY zL)H9_^Uu!3qvA_XS-*Vc%HD;FzdIK_tN-?uufD0gG+5U)+W2o+d%vxBl0SUOhqaCT zeDlruzkTJd8>@9UU)A%g&4Z8sgVEl3dXxLAY4Bas@Y=<{1?90<-TbjjK9}Xa`^jbb zcJfa&`{DYX#{=V!hwsnxM{CEQJe&GSWLHNY{Zf->UfqB4adi3%ckbKB(~ske-^PCi znqN*Y^11ADexP|`>FdKK{>7_F{&$I4{NIe^|MV-L-P-?`W4G~BW6rV~ z&c&J@F(Y}hq*5YUU0ds+n7o{_loXZS{pukcL8LKK>?C%Ss;}K^2+a~eKmj2s8v7Fi z(HlE7?YEQk8Yxx5b8$ZVpa|6+Vk%XAJT_*oyK+Y1KKEFtknv`O@`EB55urQrTN5_gxU>pkc(WUrb307 zx8)e7iL8SZ_Pvw=uv(fS8v^$wq)C2uPtQ?tZQ+p;A4~JR&@|s!tg_VGOxYx?s=lv1 zYn5z+s5QRrg$|&sI)odD#G!?LOh_yP=rN+bs!IIei133*yMu!9qz?$ZgFrD9ws!{- z6s6R_#&FJqcF)8!%-pOI4wEeFxZq8u!=5vq%fazbIc|!w5P6Ub=B5uWsE54u@B=Zc z91W*bozBWw!F4uI-7d~!~j+!{*ZRN@6r0 zMyzHsUR+v^^fXv_b$J_EN@uAK9_XZ=#f0kw9NAksOu7(>w;)qB!(V&LLMjlWL$G!c z8YsRiga3a}=@pPeii;q&fk^&BkEUmKuq-kUw)-|pUW7pst`C9?^xprtCMhaNIzSS9 z1c}c`sIo48=S%8`dQcMkaF z3E2|E{LWR)hYMzD9*%j??{dSd?wCtTcPN&SJ+-Cg?RsN=;znb1n{TNFuMU1lQ_Zd; zX55baH4WI0J1y2Xoe0@FHjW;N|lL@m|Miv5NC75JM1U@}D zMVe9|Xu4JqvZGY4dHpM1W#d&$A~ zSb_<;e|kICJN-KJ_bXY9p{8uj@Q<^$xYzooBvd-8@wZT6G2-$o%JUlLEW^Aj2!b`o zkT0eNb?Vp_XjIRp3Iw|{w!El^`n?qY1k^0Lq+WqltjbU+l3IAE%UoQjh2vBK=JvxNwGjU5~(kYavZ1m@39 z)96tW$!n=`k_#wTrPFrTzHyrWJ_9Iw5Yr$*2jkC4?Yu+}fPrQTAp~NY5kJjXJ~pf- zGm&l9KY%_k1`3@eg)0(-zr{xr8p;2sz@X? zRfL#XgQ8|xh|Sl==(NZcFSO)W$11G_p=@L>+>5okC!o2yq@Jfw5IjT5ALy33stO7;=oH%*SQ=a0yK~Qt1odzApaBlh&}+ySy} za<<7f?fR@ZaZ`^^XHExgRVht&XqisZ8bv4HAB?*|d{AVhEI4+@f9>;~n_DjstnniY zk#k9-yZbPiM}*j4KbXrSUq@=^5$AUz*{OOZFpMo*)WrPqewoG0^Af7hW0a?^sNDRW z6=or$dchje+^Y?)$~q`!V+Mig*n}`!Rbxr*(XzhSibAJ4-O@K#W)3ru`Ah-jtr>RC92_iA= zi>1=mwvhzp)G>C~X`rTS1vQk>4Iz+1Rmx$Qmm}5^U6(sUjM^hg%xqpb#B*N6yPUAs zVAkAii>@9}+#-_(5C!pXHGEF)7Z4&BRW{!1Z+4DMJxI|Z-a1?RW}BYX#j{zd`F9>3 z5+)xN3~WxaWFvPCw4atDwXnWB4F*R9lxY3duLjvMWEv&cFO-@Bn>VVzw2gs!d4%a= z87Bjp`-ZDd$GTd8ofUJ5|ka3*psRhMNbopL*vjbQZ1(H zsk>zxa2m%e;JH0`5w|u#mJmzf=XiWZH%F#=G|!*i=^`jmIc{=_bN)qIin9>}p4o3L zPWm+2^4nYJib=NVjSVS!7WQ33)bKqU-r+q%U@MBO+}6w)VqH37QD% z%COJ7Z@h)cB&Awlag;%~sYtB!s1`*d6adnp?L|#TGMd7DEM!T~?$NKuENOK+P*{M3OQE)Q>CBrnCUi}E#2{bwC>SThx5=t%8Z_WUhL5Cz| z(sE0};9L;4WNq{!aJxy?l+vNpm!?-^__ICpl-gjvrZW1Sj=O|23PtAg=mLip#+rOuM z(Ik}Blb|m~cix$igOgxIZ!m?FoPpaoV}>EXfi-@?p5}nfQ%4k9%i}e(;`=FE@AL72 zCk@qP+=;p^D|um5w5xq(JsV-Zb@-%&YXD9Oeb@}##XQ?<2<)L!l{Zk6u~FrT$rYi8 z>piQ+p5zZU8g{c_>T2jvYPh_SKn4S{*8qqi3LIqQ$hgb>^G^>#(;Oy}|9^ zFD~-VD!8C8rp6wg@_j%7@*AtR9m=}%+Uh!9#@8Bia6OM{Zc(<5h#(?AWA`I@a_Fm; zrWt?{4O>El@ekWcv$&f0LW$q7VMObSX*b8u=XN`s*&N9K__;fy=~r@VGsRwCipiT9-Z$dfD>die~;Z47~5?8*z?|#+IoHK zKRp4EWFNck;;o9=#|FZ~FqW^6%J*huIFcl=0zp>+^c!3}=?H=j`q6MsFWtsX>wXVw zz9R*IT-J{L7|l3Pf}RPhEwbgLL2HdadbQ+?0ix@c68cSihp^zT#?M#g4mej%!rRvT z+hJ9;v(hknu`nIFpNG0-j@ANzS@8}iXxO>~W0`2t?dcKI4eW`7k>no4tuu=6A7*WItKE8@g?S`lLDCA+za9|@99rUYvGq$u<6G*+1`n5W;_)y23 z`E&TPCHP)0Ld6FYKm@}~F-kVpaD8;+&KiEWS@A-Sy@QFMfOjw0EydE&8!R$NIZ};P zGuKBN@Z})@kY%3q95ck+D!Eq%;pYPKFF>Vnofseie+BZx}!2Tu8M( zNz8~Fzk-~XAb$ds)1^APHmFRJ7K4PQ4L~3AL z+l4TCvP1H%novMr%lDBZxH*muByKAb;~0_4;T%AYg!5+~jG$7_Fl%+WT=($spa@Lp z4siMDO+{l&B>{=$HI-g1A1g1X%JSa>VU^iBwXUQ3`sUcz)r$Ih;&CPz3t1Tq-Myk; zoqKO|9E>LNYcJPZBlzYth@`e1%Wrn{YEEg|=EVfF_aXmp$>VvPvyF zI8*jjEVC1W<((+q8il8z58ZoM&xV;2pn6Ww7(koNM(w*=tX%OR!6_ZVf$aZ`J@d5Q zDja`u-ZNhi=j34mPnk?>Q|);>iJBO{yA~MRT5P!c%zgLbuHxHz92F%OGed6xxQu7= zeAm8V7l)@{8-_3ICSeokoV79G4OAGLb}hIguB_a1w0H{-dQ*p#J1_MqnOSVykVyBE z@2orw<<)h9bm7Nn&X8b$oDjxdPV;=M!;Q_`fbu#_UKh7r%i&oWz6zo|F8f4!*{j~g z@{a?645qc5C{uhA!(?7BwXAC{3AtjKg&${`5s_zoaUUN`OS9*8V4(-staID3$um|h zI0N_=b)0`3k#h~~+9?ptM6h4W3emz7cUW&d@2=MGT+}5v65$2JkrnN`y&J(+6P!EI z;9t$yrZ$Kh58=;)N;1!_J7JQBhe!sUVm%bKD!D0_PDv&xM}(TQVcsOXG>8+J;c> zSz8yB6~jR8&LS4;pS#u#BLaf-t6nZ>3UNEX@G|Qy<`gLZ@FG@lk`I8#eFjVouj=bC z7pyzcT2A|FYawIRlF13d@!~Hi1Mtm3x$0VI$X>~VObAG*bmA@BN29mo7(jrnqBb`* zVF0d8INmTX#^xZqD{=uQ@&{hEM*0(=+NyoeYc~UWHkG1& zU*6kR>a1X3B|D=1o>2HZ*6R1ony0rc*N}yM`haM!X1`O=>C&H%+_4V2m z^ejF~Qz3HHzQdJZTF=K=1B%zJkKSiK8u30J5dCDhu42etvMK^Y{`weo<`Yd3Dvg2e zxB3{b_%YFHO>_})oc$qS^G}B2=TxiD=?6b&p8lMD{&ViF&-u?j7yk8`sraSH>Pzv# zFXv8wDLenA;?|d{XJ2am`odQHT4(jO;o#S%(_dT8f4y+)YumH09e;i0SpDZl_TN?O zf2jUHRR2GP;s3|{;2*0057qyN>i)n zU#WEaRagmN-0)y@`~R!3ayYFyoL^Ys>-yQZ4*fLtyQBEVeqMWgVSDn=uy|Me&$dd> zNq$(o?B?mTA+L-f-yD8hWh|I4>a%`@#Y^t~67~6;l=qTLc`<*_Qr1qNvsk}6rh z+T!_jHw){pp1p9hx^A$bX}pkc<~L2|UYO3mxRBR0be10w=R5fwV^#cyc>AND>6Fg- zV*c!tbV3cK;nsx%0Cd-apmEZ-xJ=q||cfF7Xp7gAcC^ z{7j_u{A`6!-Mans>Ycfp18a@^jY)nVg&zvP`~K3{>#lpN*Cu|y`P0B(|7GC+ilf|{ z8Q~lFy!qRc^W)Qt6LZg||Bi#ty?rpfIrQY?$lTZAg-`buzuo<5;Q!L^pS}5I;D39t z{4WFlR}*FazgrXKf5)o?KGoO#ujcCS%W!LUF4uI#z2eobI+Pe3#tGw`j9g^Z%*~95 zG#VFxz;>jmFO_$LA|^GyNw!`Z4JMX*vlVDp``$h1wS066fI5^rw1@aBb(I^1%w68O z=27Eo9w}ltWh?MtbKe;e7(`VOLm<6I2%Bxu*O$l^NK}=ej%oYT*mU*imdgAo#3=N6 zll}RZ%%KE%5>v|Pj%p5Szn%Ebv0&iT+pyc#5}O&Y92q$|j7*H61eYx2(tsuGW`3xJ z30A`ywV`S>tdjlNwgE8qwlIb)asaqJK?uLcOUdbjb0Ok5^59%96kHjAj!l@5pu`sa zatf0=U>$a)lYb27Zboh(?R?uJ9|DV`*(ht>n1Dq!g&}tOHEk$s`vMtu9;&mRW?hJ3$%_@kkSL@mCxj#vG`X57 zaPZt%syxbNg3KRvWZNIv^3J9L$Ax?J7o2y!rD)W`qaA&az9@+tX(n#t!rn767kn z+TbwWU?;`hJ1(~7-H}qMv+m;E!{*ipvK=qaurV}eSBLxK=exM(f^Ptq+t4KU!IP>#zxdp`yFL_$8@LZ z!qjJ`Gh=;ZD6*m4|HjtLw^KfX(ojLwVk$&UEyM_xNO~BviPT;toI(uOJmp=!`QiJ! zZOpNf>*0s0HdaaK08Ja&8l$rgs8r#y<*C%dQsVRSj<_G)&d9N)618H&iSsFY#b0w< zN=VAMt+R>4ieG7E29#Q~d4EbGO_jX%SUsZuqBAJK0eTO=5Z0X~#D-1{6_Hj%k&|SR zI8}x9*-Ur#M!tksw%qfS_JSJ62V+f*B@{-=zUnZN*l!Hnje1z*=yTzt-{j{ zHmaYF9RqMdaGb*WOtdn9__F|pI}WHuO?y%_etTGu*~T8PNfS3^)6#lUAX9eMNKHav z;`ie|_zlnNYF-_2&o&$WFymZnd7A?EVgbQ9eDFPM^=h=Ni&H*C?>#3eVsAvQsvfaGvsCQ z(SgePAcML)oFj+GKqu~IrQ8xBr1&SVhLpT-&>aYqHA^kHct;;pfElz6zl#8dzWZ04 z5L2u>p=2e?UZ$)tA$1iOPvc8k9Hhe!P%8?7;QkWTOpe01FdM!CvAv}o3>0py3M-W< zhfI=+f&z@rH|?1(^3Q(Qs%BU$imD)O5}WHBnQ*Y%R?#iAq6e*p*z(>Yne1N4mdO9T zMf>rKoT5AKkILEYkSEqxhP?oM!!&N;?g44YUA(>!PzIw9XpD!Yk;5s0xLmLoC6>k~8+6G8k zP~@}O)n4&5L5nahq)93javBz-^R`Ln4{d{UE2ie?B`)DNCdAUH7F{wcdoa?5mXSyZ z+R^=+(=el5Z%J1*b+*&*(C5C|-)0)lM;4+wrjP`RvcO(m+7>$INQJtFt*8$3ZGf)B zSsPf2AwMFZVz-j5oY;5qZoXoOp!7@KN2B2ksg&Y#jErSFqmXXgnzh0NquW?e;}DOr z7PP0xEPZL>o>Q4wE&65f&FE;4Hi+1DDhfwR8n4pVvl;6pCp>{6XSBHpj5bc*lXj;8 zaYW(0)>P5UQK6?QV~Vg5YVy@wC7yu@f9R7`5yS@Da1domOhc3haVSFWL+N3&R;!*` zVR~J9QT1zS37)xE>yGEy9_k0#!cZx?>lym*53Ni}&u!WGKYL#N2zM4p5z$P^EJCmDSWqS5 zJFYV+R43C&Ucw$kUWgR4;o<1?+Kib{xVg8HDS}ye!~J#e)Z~eTRLH-%UD7VX)tv1VB0MXw5D~>VRnZz)2JUxiUB` ztXQTDZ$lOBEF*PA7!~9UsK?h{+Q%#W!*vH70@wlgC#N6;TPrG@2DO?^mf{} ztb;QzW}gNqd^u+xiKcj3g*ocBzE#}ff^Q8QaGLL(plzRu6z}!-zx;uE|8YJfN>Z+hrLKFMNHFo1ESQidl>RiB1HW;?q&!8veQ*vqQAaM*+6F0^{57~N1279cYKaG$H{yy z5v)mx#ej(o6Ci05xAoVEv@Ic9aXD=CrJenOm_ha32p$Z?+a?w<{FhKi`R%mVx{K#z z!-x!gG?KM@clu?VDm_)p442G+{C=CUB9V8wR$)8MAQc0@JDKaRxt(zs?Tk8oSM`Jt z7~&ciw!JeG#)R$}!Px08>>ge;nCu-1d01ZQ8vJ$P-P>S(-eOR{+N%ceoo#*=7A0GLvvY zrN5xjZsVr+rymkOxXUEx)C-27vI>QS6kw%5%rQ)^Hwv0Aygx`{8I>-sC3*#S*le3J z0jajJg%af?8hI83-;Uzj&=X|qPb(*Pk-*VFOgsRqQq8}N1rkEB1w7`f*ElZ#;`$*_ zeK}m(J(MGnk~#?5Q&nISNW=Amjx>zb7uGqt>am$qk7iFwrWAG8k%(BN8m7d=47X=J z{PW@BF9Xt8E@Tf6;TMFCXFz}@8Z|ymjBp0ZLh1sUue*VOBy2n;q`}ljSLs*}3)qIn zwc&FSZ{(I)Q2sRBX)jD9`#6$V3R#BY8D-}D8DraQWW^X2+sJ6KSiQwR zu_a6JPqU^_Dz#w-(4axx*Aev&TH0)&{|ywyD2t+c_k_mv>7SMYy;8UAkLrS_q+(7} zaXE6fvb6zn%h3?Cb*WSy3bg^V|2dBawPeS^qfy%Q3hOY$aRMfsm#CrU81No2Vq;Sc zckh$Ldo`(k3C2m6*}35qDc8~j4C`+I8;U} z6Fa7ndG|6-fexJSgy1!BAEMz*7eoXJnZu|RpU8m$P;O<6% zG~#SbwF;_O0Q4&M!z_8Y1sBe7-OJ5Zn9%J=Bh}jj!o28Uf_mlhg;wc{AI?R84a6{b z$bErMVjrycWved@`bv?J>NL3@l6ZrM4*TDN8=~8x(fOY5iLyPiF7EZV>|(L4MJoQFv*;dQk0xwo!cXGo3WxyA7N4I$%h&NtNqZk0{ygHcxs5nQp^AKXLGZ{$^gHj=>;SIYn zKpO;DjK1hJ-lURrtof0fIroS>*}Lc?P@|21+}Mn}hBXFgd$wVMF*04=nBq^JM`U|; za3QJ$Xt5yTvH@DG2)Gnm5`mD>0S+m#pcm_!-(}+)#8q5Kz2YwY{4_nB)sI->z*(qo zzx5(PbTGqgYuce_1Csm=dy3r*4ZfzooaU&^H?~vx@q7pTDKXv|2#9*@cpd73blJjy z86Qu$^vKC^>{V-#+n5Gpqj=Q}+4H4XLsH{)TMQ@fI>MyqOdjSi6S`0EM7?I$ z>rmP#Y|`&HQ8FIWhqN_gRS!48HsG~N335Ky&>P4dbem6_5$Bb*D{!D;Tzd`jnKv1M zVPkluCt8hQx8%mzs@j%wygtpQ6FpCX?~cfQ>&gQT#zQV_q z7;jD;xC6i%`p24$~Zp}Po~F8B#7M^BrEXvyG`hm#M_}5e)rDo!E!*imKZ+GF%*6y zX`{uqJ`u1G+XX;AlVx?-cjE(WykUA5WW@?BjCB}r#=OK?nvI|F@Lm_x@TRW!A!r0= z=tzo#2^YLJC#}F4bLb3Av{lntf`(I(1M}iJROB8eboQcZToK~#SFvcWvqh%tiayj7 zIKL@({=LpaOX|Z7i-&(!*?!k~xN+j)h8*w1{KGHz9s>6tLaJ?dVtD+0Q5_yn^d!^- zm;it9u)-4uzbK#YywbM;yEZQtw*dOo%UgYIEApt}$*9W7`VDEKuuN2? ze1ppX%1B19`q5&_qq*hDy4pv#S&#H1CqEvMS$ryvuTy!#+OD2F_3o{+SdhM3^`5~y z3d1U=CI)W#>7x$=aD686Jj7BsZlIz8_)a`c_nX1$%e?+hYtW+X&U za&t#S$CZk zD?dMIIX~<-KYDV0ta|?Ljrn^E^ACQ^^W+yM^(_~s{1&E9F3eUh%-vX+UszcDv9Kh+ zxMI1u>bLmv9N+97f5A1W-6Of#C!xjj_(h+DPHJ+G>xpZwC%b%3U-3NI9LV2h zJk53exy|^m+)2j8i0rnbY2Al1uLtJb49@9^$iMb;m@$`MJn2Ycwx9UF*n6+2CicJo zcP5ieCe#VN6FLZJKsu9_59B|H@V8n#jH%`oA>+kdA%z8Q;!Vp{|!CqKTtc6U3cxk zZ%FlMNa@6$k`bDadm@xHR*fbenU1fXNEUh;>&DWK&g`$B$v8He-7tQj>2_}8T>6Q7 zxor;)3h5`uF6Gzv7ahOGXzDNjO+UF&*)ddm_C{0JP4<7Q8b?amlf~^bMIB?6r)J8} z+&Ll?Hg+x+o_SK#DReeIC_n#)FmJ6nGj{acOx^ka(5g8zEnWBOdLCC_xL4ozof@9S7U*Q?9=UF%oH9rq1@Z z9epzqRHO40hbj4hQeYUoJ*Nv`ZR4a`-C9{b>id5l7C5R^`-)ODs#G}s-e$%mWTf0i#Ro}UX9$? zT*{`TVwwRLkES0SpuqS9quB9`lfA34t(uR0f!H~|i)YI(&Z``p*BatjUdMIPk=|-L zS|b)SpySoDDp&!0SMZ{j7bif4-85>GSoshCGAW!oWmwKR8I_*JGMIA z>qEls>33>V#huZ7P$nT6rLr5cM9w^tm!EQ>OnD63=g*c!M0kcZnX%$P(WrAWdiArf z{+x|{?tfSmJLUq&oyCUc&rfQ~yBK8QdKt+GgY9RWOJ-cS>3g5Y2|cb7NFhAZJ!-tZ zUxLxSM%cIDe@pZom^ZKG5%uB9tSl*9UP{{PJhbzJDZ^yHeu?TI(3bfJw;+)P7Y9w( z?smu3zBW7a_SMHgYe+wYFvxLXz(q}+4w!hW!zf}zS4sV!4nKqj;6tU2G^E__@km&XKt zlv%4ctN#%A0}@$=Mi+!x!q$H7*DsPjvglFofZ<|;dA&lX-A_IRWHNl2Iz{VJt1?Z9 zQ0U?YAbwM$BnM)5lh>bOz6%rx!`01=E=~{hdh)3>fFbgOZ+JW?eCT1p84b3*>_pjMruUN9{&Bdsg1j5Ug>q{A%Q8N=mx<2zX|0q-ajHXT{+cDAfv*N#p zS=RJxiW~pdZ<74WFl^1?m|j)J(ZCsv`uEcm$>5ZlU1+;`quCu}NrrnuzVY#a<`{rN zr_2n@CQGe4cJ$Oh^W!d{wUv%L$sR`BQX3z1#ptCE+}`ntb>!2!t(@9mfUL(5*HOij1jrMlgH8g1kwDz2=4ahJWdAa%pJ1@1Kw7s#dFiKqj~n18r`?S+1w z1+l-=JofAK&vf7NN7y|>Hr%2|&MU-!L#i+~fi*r(Oy?QvH@{xKxljlDw_hzdD`EJ< zK>P<^3LAaP$jrmzaj2j6aU{ZV%g@G{sf(bK^I7!)CEv5S&uw_X9&kHrVy{$b&>4gw zi?W#Y)lNvN$EsP$t=q5S@0__f4af$~;n9~8doTW_8yY$w<9J7CTmx~^U#xQ6O z6UwfT)rQ%nPEbq19x}2EQ26L4L&@D98Fh7oo90@6SJAt^hx3(s{e}UTGOqN^`ZDfg zM+*GEW+bR0OB*V<;OktG7ClW5>m#Qw*G$O`U97Bh?=5$3`fAKk%FM&K`-FRr`$8@4!454{?gMX}Rk(6MtS@DDnv zi#=K2ddJ&yCxV@Mo9#TY*Us}7)yq3M(>L|by3CXXYo`^+4u?)AnUSKIXB_b7H!v`J zX-LFJC)u)DvU^XA=k4~y8Q0lOlJfOuULOqtm9v}_cd`pSUq;X(f9WJ|q{cGsMhHnQ z7*dwhwZ%m+i)502`P0wPKHa}!u0*efH~2Cnerfa^p*p5rp#&4<7gYVAGoY34bbIytO>LXH#y5 z$@ALM=Z)g(_+VdQUqHo(g2kvnIyhx$y_5@@8 zHvNuWeJP>2>B(9p$)bEKC`E`W!z2iB+9*=P0ZZ=X&S=1YKSy^{FqiGI9lFx3sTOz& zy!x70PRFQ6W_-%b(vVADuuv{!h~hLvZAlnC61I~9e?1+jFKdLh;muIx4L~Y+m~isT z<}C}vwnrqpG3IgEn7r4a?y3muzK9+q< zLiSZ6ooBQjX<2x}Z+Aq093jKIpiVS}hPl%V*waw8RKNZeTVjf~;WxmRoV#flA6BgY zRz@m;O>S^0+=yfxI~s$h+HT;1IXuLM3bs?w&dE}Pe!!BRDsCcL#L||eLq+^pVR?Mw4xu8)=~FO)r6DHQ_>FyPLw)rA-)EKgI;|5A){nO&KM;uJin zMT})*uzbLujhOi0*Rt$&m?GP$!LAEs4*pTQE*^z^u+_dmHd-~nBNPd*>?iUke4P}V zP_IZ#0H9tIT;ZFlPJHwQnSD{DV?Tpm;BYgRXdCF zAlpSWiPnfGC7Adi@^Z=s)6sXQbK@84s~S`!X>iRt8?|8pS#hZGi}3oB!7^>|uB*+9 zt5Wr3VBQocCO2xVS-!xl6}|paE)T-k zmp~BNl3WdC%RwJ~rR0!9vHA`_<`kd$K=ywri=+?|=oo3n$pQAs<$96*jJ5}zCfXd9 zoC)PlEl%{7)VUFo8tI@g`C7j{>D)|I*5p7DT)3H0A?8C6N>TR-i6ktb7{W?YiWL(! z2XI>C=0se%;GO#n(_wfPvmu!-)tYLZE29+Is4h;zX!6wmWul2RoD<32iE|PQo~=nh zThTq$JZ$42rSu_HnAfdE6Pr=2A{Tf&5ks~oV10!QXGq^3D?)L?al04ow|6W<&NMhj zKv>^}UO{m!An;xU5T(Y-xq-DgXcOE2pUxvQb5@E>LU5VUb8YFf0Iuu>zz~M2Bs_(J z^`qb-Sum61^!gS$k_t$1;3Pgyn*k`(&^4P2xM7?KRMTDTE)0)Mf{0xl14IB=^VVZG z595n`OHJ*O10ta1f=ku(wr@jOod zkm}(?+%bXLilkfUSS11=N3p@J;pAvwZJB5)J^XYWQq=+4&;iw2~uK${}_O>&5KMHwMyY0FyqjN_&m`etpeAjH8V~VGa%Lqlsq5UxSx% za-3@z4P2W^Kh%bpQS3#&?_-<-Y|&n6Cc&&WfS4^^#I=#C@7FXbPR9r(XoRtRWnBsZ z=_OU}Mw98F9QWeRg$ld|fyybausGUlkMH0Ty_KC-osd91X?=#xBS)#>uLigBMROU- zqC?rkci#w^Qji|CLeF6e+h>&hbrf8$wb8+T-59h15;Ni)`#46e)Jhj4dLYgK> z$5RoFwu9--E)A%XV?9>1~7j(A!qksXs8rszm&Uqlaoa zBHcX1oUelKDk)+S;=kZbD1e%i)2>?cJIgm{I-nGJ%8`mqWZ+MO(n*3Hdp`qF)M>k6 zqpbzt*+Jqd0k}6cyf9Ol%DXOUf@HDr*&O@<9{vDr)FKHf7N~o@6xsSj>PrRfW(@Wp zJDDPGK(9Ugp`Mt>R(Zdy0s)}cdD$KcPL)cQV%&90DV3?SIFd&^h{ASUh$49G$hx^3 zM11L{I`h!kP?-i2s4cVMASkk*<1pzk?PYKJc&=NOJ(*4v$)aR)#{e^&tm`@hlzFLw zkCbPS@Fa3;YYj-^;Xl2XX`t`%^mW+AC+zDLIl;kENX_!FcfY&r1q%LhchFNJoI|)I0xTg?!s6!v3)xiI0f6d>;i;+}dQq}$+LeK|?P45790^pS z-~#!N+Snrhit{01P;SR%14t34K{&a^{U65%jYK8!WFyWTDakZ&_@vsx z`QbQ`AClq?g@@E6Qp60!NFj?4GfD8@sY{cXnm-3Y0~v zj%pJL<3g>N`$0EWJ9}1|J(HF0s|0uKq17mhJvR)IxF4VjG?~25@doNE-!`;_Jo8(T zWP?gv$d7?P#C}E-vf24KUjU;>YHqx)c&k@Yj3%^RXCz7lNb-Q48&_0GpfdNRDi7={ z!&p=Pv|~dX1W?ZwEWs1&OvQ>Gz~%pq3!=lZv={LVyvW^0rgxr~0EiIqq}L;&CBbK% zkh>@#lyLBwTsWKZBG32*GkLU%7ljlt2(5r(E7$2fN#rDL?IL3VvwzKZ=VyyUpRHOy z+uZzY_w4i5e?L>yzc_6B;Zg*(40v6MF1oIhJvp-ywUlkR#sh^jiSg zxqW}n{~fZYUGmJjydz`4BYV(0?exy{E}!h~zym$O|B2WAa)*5LE(IUD8hogmc8Kfu zJ6rD$`yH=$M-*I)D!LX?dOfD(QheEEAxb={^78(wK_Njrt?u%{qeHn&ZlDk!{@+RZ zn9%qbT{V^%ohKXzrgY2djqKxg-k zcU+o1dFA%mf!XfM_d0~G$19K928FuEd7$?x%+**7;`*3aa@wbU5-)5ivxbyhM{FC?he+T8l5$3gf z{ErWRr{wQ{L&Tr|xWDpg>DAB2|Ni^$|Bk`l|IyKT(d4p1L_w;K+;`Jaj zEJFa15~5N@k($o@6Q;`pqfxHK@Z@*^7uvK$RLs#acs_!;Fo549k?Evatyj)4DTIV- zuqDXkJ(G~H5gh^H8fJCvr3a%6r`62k*cwUl3#`&q(thnCL}~9shG-`J)0`%?nHmv? zXK_O+6>+A8^a*heL#(Xs<@mlnYr2!7M7D!g4OA3?#}cLr@C*2*;r{8nYOQVwE&(h#o0G`k1Uyom{1th%1b= zJlnH2;cD0RGwk1ptDn{2zh&OXNW{Hj01}**UB!RtUjGsn;%3BnGWU7@5|&^^-BN6Q zWisQ5$NLn+u(BnN{T)}T#Jr{%PkiaGg}<9q$}$)d^L%7KLpiMR^0kOId*+tI`AB^l z>W8XJR3!@zyTUd}%9UIDBNs2B0;m&~tnsB#jlM3othaxM6hD?9hp6@`L)H0&u)<~_X|9|@cqBC71-gZPzVRmPN&_+w4eJ}D8F2Rx0>JVX|9A+ z`7;a~4*cxsNeRDF#%8?@b8+5Z+D8qlxbKUp9Ix(#mN#5!zLk{OTx#RS^f%f?9@=dY z#f=x7ynAD)hDbuu?&ip6=BId*EVnjnT2#Dqhr3_*x9)OGLX*@2f4+;WA*vd;9o)bH zt&R3;ht+okY8lK9c-JtL>`pv(cyw8u%{;x!XG~7}*hL8nvqB3TLu(iOuT6A%?iVedXRe=L6LwCQq=j8?4|+_t3poZS-qV2JPazga;rV zmE2MIe0KFMaLLI5zu~>PMZ504z-tL_<^M>njE~8RUti+kROqC`t)B9-B3oIGQ}zVc zAAd-Xa7$;uy_5?3VO;v+IPXZ|rb%h>gu2&{{p+9alc=C!M;}peihiQ~;~N-iL{HR9 zB|@BPH3GJ>DD8z9;;uuKZLK_{Dbk5(c|ZEZsib`kcU{fM^G)lBcAVDWdN6l7X z-7Ry1I|FMtTGV<2bUSbg^({~T-HpS)gQq`7m1~mI3Gb4Y~G^|B* zrN7yaZ_Z(bR;dDW6o4fC2*o5QAv$d#H7=M76P5{;->{x&yjX081vB+2Hev@QNn?(1 zwQ$ReK;?I_+3XCT#ef|S_OX!8iSP2=0Lvf0lQoZB4U8*uQ2wxx{J{iU6aagemUR3+PXhh@TO&6aEWDz;XBh5;(_EU1}BnEIyVNvUW-ak`wOyx+sP*lb=I zJd7OR7VqF=6ZvohPdc9qTkuV-C;^&tNW4J(LPnJ&qOA9=yk^YbdzZ?qO#JI!WCIsE z$io={FlLUBBf!WDb`sf;4+8;Dq17}bk%!ws!^QF8eg5OO%!FcQjO;jaJKsYu7}q^61y2^Bmzk&D|wRVo$KSlQ#_ z=!si+=@yE3+o(evvzkOp_Z{u5Jtd9JoW^cNkuae!O-@;IodtSxaiP;_Jp&nB#0AiW z>Ntd(EuHV$U?$t3rctd*a=&Ylc4MlFxEfIteK3Jy(SeHOl3EUMurzYZ5x*VuOyvL` z{A>Vi6gm^e>JulBUy9Aalm-AB(Jj*>pfIdPrecbPxcMu}l(L&BbSRAbMQP zPA=q(!UaInPb5Kz7~KWnCE5tb`EU|X7_!6^Q;wQ59kFqi8H@(SlyYx9+oXXi`Nf^j zH82q*w1|e~RKs;7bejN_Ac3J&e4J@o^$H-g*U?FpggHV5fZukjIFx+S&L>foXXL@f ze|$q!udm%bR@>WKwdh-nA=j;Ai3o)UNU-2v*-D0(`fq**CFmGC2Hq(FwG+W7GmeIm zkfS!z`#JDt>gk%!lZtDIrGRFVR@GiyrC@n@I0!&Vke?z>T{vh$Ll1I-7Ol5SFt!&D zbhJ*w;oSPyi)T$Wn(NMj)&dKyIf4gc^XYFV|IBJ_0MA=c&t4jYr4#DZIUc@nrUW0{ ztx$UGuWW7n=>xPbley@+!=N<_uKPv|rEfcR-078GjnpX*i~!umW>vG1IW3$9?L1b4 z5QH{`;e-jj-UZ}|Df~{7ThAUF&PL_Uyf6*Ge;7Q583z_`2kui zD2HATF(DB^IhTrFI(G&$Ovq$xtBU#E7!`pk=HI1HNJ-62hxH5U@iyUu;XlMen?bKYo_tkxKKFZlWP> zK$6V^x>h(cU*rFyOeGnsZU(>!=TH+Wcz`5=9meSZcs5^0iWZh)s4U6D;1@Y!8iZmV z9L%kc1rEH4m%i1G<$ePWIQ1wG8#P{W)_ee{QIEVyK#LeSFAi3iPG+uCJ+(Pk2q{`h zJF}TPO**cjSIgmKwn8X3rXNw=LB~qbbbJAh_A-3i((FU;rMFW6VZ&+H#EFN(*tl~)0v&Rt z+qm#gopLu;o3;kwhyW?986zx}9i?FjJPecq6G-4zM~n=E3lR|~-au-4=eiY9KPa){ zXU=}s4U@IA={a#x@zS2wt`KDcV^45q0qbUDlq?3$IbuXucx*V*DSJ)9Kv#m_UT#P{ z4&do*1wRUT?VR*E*M|DhjmASn?mS_*5Y1y?E@-IautqT^1Vb`lN^Oj%9URw1%>|&p zA(}BVP+?SO!p1Qu#9yb&%E3dFWx@e|r6eCvjT}<)N%_OazJBv za0`=y7beL8@9~C=gYx|aBbSlZB=qX;;T=@mA%y{}6pP~%zzBR((`Q?zlym9HI{0h1BhU&$IX_;Av)N9l0=|%Zk*_yx#k+Mgf{Tv z%0Qe4xyVt&VZ+7E$tXj87%3VB+}PV%+3@u&%wLXZGlvJ!XCVy{7uvxr5)#h95U8Uz zUY3Ji-AUP)Z7k%Xokjx%AI~oH6kwC+w;if4*BRJ&P|}}SK8U3vr_SPk#9{W(P;wqX z03Je2#0U%EQ2-=^!l&Qw8rnQm7cd%+C1pyAhDi}>}BB| z9Jix$AGw4hCYB~1w7V+d{L(V`HKts(At$L15!=Yq zo;~Tsu6VyQG9H1an>CWw#fkfQSXT5O{~TU`D46v~_EQ&BC6gw+qD!BSIW-g2+KCWl ztCsc}lFPw)QnJ>ujO{6e9Z~jDryrxsh(EB)pH0bN{Grd-fL%+sb`@3j^SEE#%kF3O|wi~$>s}0 z;S!DT$M!%}3ZYi)`NjhKI}T*S3o>c+O&>pN8>Gnw?&3M#IO7DLC#I#jb%aqTuPn-RA^^kF*y{%&GxE~AFTjV}TbF7DCx!u-?KwNL zCl~$f8-6ZR({^hi)_$WDSKF(SfsFg%QzYSAQ;;nkGDo2eA3%8kl%)H;MO1uVDlLOb zUhSS}x^-*a=9%cA-E>4@N%loO8HGJCsI_WsTJX+fyA1?)`9u3DKWRK1yz6@7-Jc{r z_+%Mit^1pyUlm)ySASOf&umc{OtU(r?rc;W6HI@nwMlNNzVPCyyW^UmB5NHLoLbrQ z=SfMQlSeKke@NLA*8RX{NB5z1SC74JoTFDi$^jbg-X$<7LZ;EtWd~49Ni%nqvkaEW z8i$S5uSI~uDZBkI<9h8OM3KTE5nsSnT3%gr@C7WPYF#1YUXvE@cc!HycO9$bw@Phy zu2gew^gFxL*~7xhNWf!`6!o}Dl0c~r1jGd0M`P+pt72?h$J}?p`DO{huno@AM)-dE@*O}qS zD|5neTsv`>mf)`m54&{M);>8+S8G|bNIsb8a(T-{{`+OeIG>Z=Em@acPK5m2|7x~n zTZvleUukb2bnlrw5&Cz=$0yeh;nl-_Wqn$iZFOx8`zPnyhbK2n)c36C{`K|4v&q&y z{~lcb=bwM^WD1Da=1?F>C$c?GK8jWh{69rZRmZ)elMDHsbLD66RsG&%n5aH|ncYdpsYf>^mIiJ;xjwSoJ^r?P>c!>BRnG0@p?e>1-uZfIPH_FN& zaEtlN+aC`@h=iON8Rc6fZn=qb{ zMngwW;pJ2D6U*u(4R2ejiL=*%W~3gGa;^K zL<>edLei%4#ZBsoHNY@Bu+t6`_jmq|s-LN2As zl0v8<#RK*uI78IlS-n(j4ADHKw9~CF-X^V7emjQ(LcjV=?rB8W4d>&Hmr$1@RVw)i zsqoj@r0OA=$7qWakEWKmzv_#t(y7ZRB)xuM|6h3Ztg&HO*|qE(sudTfF^X?A*O<`M zO%qLVwT;5zmTuyqMY2hSN}H~F z{NkC*M95$=79!HtMsQZ90*a_9+7|Sr$kY^8aQH6><$w+ zQcoV^B2Pi)u(Gk78~2pME*Z26Pu~nCeiKR@7vz;az98#`+K)+xa<13h3ncq|ju#eD z`JyYP=jm;E3--=GJc2Y_o*Oe0wW{7n0;d?%LULF5!T7hM3Z2|ST|1^1;z!Wv;uMN{ z-L()~U68Ed7n#%ErOm!!28x*Cf?&ecC_4Cu-5rWz$gp?~YokNj4x0-8sB+A! zd{Hxg%DTc2dl?>O=;$xu1lSLay`3eekDNL$8JJjcZ-S2_@c^i%p(5jx3@)VCNz9we z$TfRO5_^6)WHrA%7G1-e`mNy&IV444&nSA8PtRNkESjJ*<(|h>of-h(C;)5BV2bOB zh-o4A8)!87Ua z;Z>=z+tiU#TQ2vA(#V|3G%|$`;Ya%Fx32v9gtujc$C#DAfV^K@lD~u>GXS+<8A_vf zMqj4FYUIEmqj=}XarBUaqk?ItspJ%k7Ma!Qrl4_V+n9#LTL;W6neT4%_FmDIb;UUx zgJWlrwRuwse^jYQxUKt5yq?A%Ews6JUilImGwJRf?^i3d%<0xxol{e_92`sfR4Wo! z|Il)j0K1BaMU}jG>H?&|ic~IeE?#2qEvx(YWB@3*>uf>3e!)sn+9oj6ahRfe!{E#Z z@!Wfe`X#!~+c}xm9hDotM&-~SA4YG)7bD(z3xEbv2R+l5S@$I5bXJ+yXDu?+sGxM5$(hF^TJ(RjTwrrY{{$m54O z`!KXW#nSwbBz4yFm7+Rq45G`@&3eYs$iIJqe3wXEnSl@$-Pt&y$@8ZtrHnnUy zu7DvrUn$KH3m|vp9GBhc8Fn(zWPy?wZM*#V?LE_4MIVSn0THW@?d&DJuFG$&ucGae z5ePKMDleA1FzhSW<|A{E1LFO%`cAi>v-b?UqH8y$ojX*Uw{) zzrw}a{!lEKKv(jy}U9hD5M_^xcp&{dN8CEldA1}^jKpUydtx_OihZ{!$xFScFg9joh zqY7_-!FEXdEFt{;AEvy3+%UoIeq7piE#4waWB82uZtmc>2*t?HIxJ@&rihISKvyB}Cwav3?_P1a z_8k#rSKDH*Z6QxYDu3Ezs*ClP81qU;K2~n}k#ygQ+c6D|NFry)nyTH9B3VfJIS00w zZxD|padz4C7dLMEC1Iua&8fn;P&$f#`_spk*2KrI!P4O|=BttS<6G=9PJNfiyE>}6 zS0}xfy}f6+_k8rQ{XftJ?{`d%yKa@Q2Ur(U<2{p^-+?MzXv*h>XU|9C#T@O}J* z)Yi4{A5B*ib(Wi-n%(g=%%%8fqY0%WQWn6I^9j%Xt=TX;yUCi ztUtoo&kf!j&m4Q58QNyX>x&=h+&gk5M|wDQ-$hWtGW?T$XnA1h`xkM0czA&}>?VK| zP*7rI*Y)qXTVL@E0FhG29f_rnev##4jrWlY!!484{gPrSSW6Cg>R8_1Q@eU`fx4~- zw~??ooas?{@P0we--XzzulOQXf$f=tZ%cARHIOV8GlOrG%L*Rt3_^zyp}y6D0#Uvn z$_i5I`W6Sv*!XhNW#?h@uRw7voWjQc-G@wMKssFD zc8dRLX(;E@t|z13kK&NS=`1V#9B&XAn`DU}W(8OfD>(QP6G)v`xL2p{>#1ELJj|<| z8Ny~Ko?Jo|VASZ!5>)VvFV>ghWZ;Js1vn%cXseP#MRP8cH6$ zRtb$t@}|P6rB$A6{hVE3^(Z!wqkz?@&!0BvtHEdUX`vu;WoNo<9Gy%k4sk~h(G|>u zsav3u{6Gf60(X<}UslP{C_W6p`JmWX`Oxk6ENkx@W9MqZ>w^lZ_2+jrc@86tb(&$h zLDL}=DQC1)aS&;OVtlr8)%WPyT@9T+fEpV+)`uLRG$*3CeYHtfeZaOf$nbl_TzsST zl!4y27Gkz+Io%^Y#<1_~!DZbORn!v$KWiUP+FoDGQsmiTOqzF7;b;oho(yTlDa&#| z-}~xMhsgz|EzJ?R*}w^j9GS;I8)J%Uk+Zcj_DC3@r~!a=11IJ`pC}{cWuy26HddcR zHlsir*vDG4ylo@R^*87*UoJSr!fz7kDCENFgr=4f7Va-p`X~10YR4)2&a2g60t<=e zK`J%)gY;%0QNq0u3@g?%r(kys1{YCSo$>YlBBw$$T9*hp>k`&YLTaJ-aP3X23PtO1 zoNxh-geG#ZdO)i%?~dW=Hm`z40M?yqTlEI%(bw;cXPuBb5i*RF5t?LIPsz=ZgKLw9 zuQpYA)Zwb}lLL6D7v3$vXx!Q=$p<&mie^5A89Y9nZ@@e=DErtwU2L(~`X|1GaYn2c zNi9ukunL#WQNCRbX3)?qJ}!WLzKV9tlhy5+X0x~%7t6)R-75nU>N`EUedoIJCz*C< zT;zPu<`lDKVgWBpv z9-kTxM7|87QQuR&21BcY0f-0eAmK4<>#!~xup*-eSm&!yd@MbM5)VkSK%K&kbuPj? zx$997Vw-i!h1elP#pE(FbMUn#2}F_tR`Y7cP(dFIfC@HfAQzNoL-2uSYyfOet+}d^ zABTk*x5y_q)OY6eY8c9v2#$If9#$2C+vM4xG1}`N5JKQ0EO1E%d%!!Pa zuwWG>+=;Wk;*2d=Gds77mp3+4j(k@QTdp)$Je($qR4NcZD++hAbIharVKzvn!$!8k zG#_h2ho0RUEMDJ@meX+h+|c)gqv||gKUx4Hyuln=2FvSr6A^t~n2!mn(I1iz&nk_r zw(!3x&H|0exM;LGRv4fI0LTMVY1d0^(Lzz^pFrOOiV)|eS6w|FXbd91xkMu(+0@tu z<&3*#L&V-X4NjHrBS4)DQ8_mW%Xm8$V9bWpNnj8eEvI76+oI7N?3Z@|jdSL2`pV1c zjh#xlCu-cn>=F5y8#_-A2xsP%l!>jo;V=?5AP$!z*g^P>8N#IVkr+0hs)-(;VsIfn zmMpG9l#;mM%Glc;{4iqF&|Y4DIW!!R|K%US&2Kz^@ERhuAHWIM>I|^>^}y!w1Qrl> zt>)40i{66s=N{Thl1xe>nV8{;2L$hZNmq63FJ*5yJ4 ze54>`>cs#yfMpOFvfZ%(W5zd+ z4)Q1UD^nC97U)UG8Pp-MD8`aBw(*a<=ZwJ6r9L~>dcqYS(1>KYt>5s$Pkg6GaZ8u% zE|KVwq}r`h!xF=(-xRSa9+0vCw5Q@u+HE3jzqOx+QDxwgInYKsA({#N_pjJaEfbxJ z+Xvfu6>oL~C*RNJ(6IQNb-(+X2Vg42eY^qo=U}%}aXIv}>Uq$qI%F$F@n1tO#s^2@ z?v_3V8nN}BkE11|;kS>nkB;8o-DVba#b`yY>Tc8wHvD4zY}@5~4?R&FPXlFgaO!mE z`m1q8?jdD1T*X5|$b%IskPFFp$m;%fpRFm__ z*}NI|>!=Z5v*Bxygb?=w5e;t@yj^#h8QP+72o0i9CXXc3+eC;HFpf%x#})B1C-riG zO)aVzGs-P^4%Xs7+Hn;$rQ!C`X7pT&ld}xB?UrLQ(rK(GuVZUX4TuvlxG>scf^Zj% zW0%cSt^$w{lF9om=wTM_hE8aP z-XU~Qz=Ym}P^2TFO4Wd%pr}a*2nZ4okZwRgq!~auVkja_4TuVg2nvclU;!-n#{2$1 z^X@ad-*#tqXY%>_keSSt^C-VV_8q+$6%nN*@dg;J?T&Su54@|LNs;g(*&k67?=**H zQXqtr+JQu`rTeJZSdDO;apRy+HWNPO4i(5tKiwI%At3(y%&wUw7UHG4{#I}Kz|ff3 zhtXggaCzbB101kDIffB(GZ1)=Z}0xSq3NC+Utt~L#45OpGbCxfsdg+6mf-RD>cK(p zBr6?pr67VXHjFT!@BCOuCkW<N?QubT?LvqJ{Vs5R8D@Z;%IJ8Ghp*8aqq; zni>QSKJXoyfTjcmN9g$1f9X#DQW1~cJln=O$b@nF52XJ#-`%Oh1JR5nYXbCx;fGf*P}ZlN z0l->l1{}sG8^B}%($e_%2&kgk$P^$<)@+{h@_d0-_%D$J5%*R50;Pjh)}`)ij>TGm zgEVwUn4GR3Ie>)$j0}N6vR($*8F^bV1Df^5@Yn5_-uc^0Pc63_`NmXLRLys=VyQr90)`pAQfImrXOA&cD~T!e=97ELY}0 zhP3Zy*kqAb&{&1Ey>M?PIeMfy4<;l{c~OZXZw8rTCmBcki3c62GN4#l6ff-y| zWH{pDaBTkAvBK$Nc`VYU(Zu43ByLxwbnHyoy!RL3bmQqi#>eB!T!d4{d>NP4)IHVMJN*~c)bo$u z(YsLB|JUzmzWtbad!ET!Y#n;c?U>vgd)7Pgd|+g)d2G3Je64e8<<=CZo$G6`U)-Ht z;+h)le@u-ruBq`Cz4ZFQllPMg@9!;sxyLm%o~_OOH8ox@yjWjY;>@nRdH(Y4^VeI8 z|ND*xe3u+eO{1k}oX^b4zL1l9F^`^KaH+7U_;N{US$Rce)fGl{&DGkv`fCl>8=IP2 zT5mAh+Be3S8E9U#meqZ5)Xb zQpYWVtf>%DgZ9D&hny)vSw-9BOv{E$ULlRbuweD(3k6)IUF3RuB3n$!?68P$&84Or zn!AxHs=k(E>>_2WWInfdUE*jZi;L0|1$7@WdWR~$rq6@TdcN*HqTlj435 z)hnqv(hYKvzMR*=YF+Vel9Y>cmrI15$Qicj8VR!jvEixs5QVnV?~q)^?~+i}pwZpp zrA!kcciR+8+v?Gnw=!yuDZydAo|jyTi&uo*>&NSgio zox?mv^K~WR4K|&bq!sHuI&=UC zsjgVwl>NfUU8>4@8|8D;(DLLbc@Jsbw0=?6>Gy@cIbJsu4y(u022Z(smyDg@&yB2@<1BZ5wf10)6dN``!@aLvTH=zjV#86*@tK)rjs&SX>m7HG;QF^u7RL=2bA zU;(kmDyVlcBPTlK9o(hEQo>k02sB}Pc?b;VBe6iTv5Omb<-7;J%HhXs8K>?T`i}DG zBN<5mzhg2T2>mbguV+KW6G9hU#qPdfW@_e-*z6j@*BEEr6yf?*Nh1e`PgNA4gk)+ zf(7$gZCBkvH@uJ-TX=q{IGv@Q%p$Mc+gm00Ne$ujQ-o%2TbIjsWZ5+>(}sqwAc6$8 zrT^$93?j+oqnhjs!t5`N7HzG3NX;s_#V<_ZFlQhGT=@oDkPo*9Kooq2_`cTAlruGt zUHKuR;O7Bp$N_M(cf>^jGPx#~9KUaS2$ji%jAe5Ce;mSqm-7?2OQ7vaJL$*RU9W*VttIlG=Z(2yJZog{{NQD{5J^vpTmFf!Z% z=WvT}1#WoN1L!Sczuc=*SPq_)?|e+(jpIKfi=gmCU}+)m)WXQ`mb2g8MLbx2uO!OB zId7lr(Qzy|`eDDN?wgu)W3`7?Rf)7SnXEL?RaemJGx-_$o#D_82K-r$rSW;gsc;KR z&mun{(v0k~Z%hloLm>0wQJ`-dtRg9QA4$0lO;+KTinr4U-g9q(60O8Mc&>!FK>JO# zizXl~(Jn(JZsN)lxQJ4;v)dZM&Nv$O|)+whf!KE1hkN`*Nj|dLP zLk2*x>>*x1qQ+i{6{IU_MB;0)A3op$!kUTi#{%%@s272sqlftDO<<`H_q$z7s1imV z4Dd~Hht7_@iin})>!yHRD2@zKW#W@s%6+~I%Js|BZZr;-2MoB7+pc)v;4W-xPw``D zuEOxKP7DzwP8~7u`9wXi1wajub1WjI&jn$hD_2cnCA}WSpGSp?5^*3wGilIGFQD*E z-g$ASng}&yQv`DWl^7l8LI0za{POp` zyK*?N?)b*^#ZHjO96-g1U0eQM>4n027X-ujvVvd%q^yH^teE)2hv|3G>qI@dm#r6g z16O|(ivVSkhq;y>#AApIO)f^Amvlek`XJFA`OVv0PayXOx7{%+LTBE=(7Zztm%)7zsI^ znp7Zkupp@&8KFd@GUErnZ`({Jy8$>a9Q^5s45w^oY-HA3*nqp6VOsb`zn zCQC7mevj_F0zkAY0R2Ij%W45)-_EOoyI>=y8eDKY^2iD?t)))z@)5$bRksnvaI|~S(y0v_`~xHOPZv)Yi_AD{mYq< z4TT|dvz{TMHJjY>wi2q(jP4dUl`Zm>NZ9+`4Qj{K4B(14Y>UVwZsz-xfj%_aPMKn@ z7sys~^oBlZCkJC;Ms%P%6XmaPT8$xoh>%iph)nLLd~!?X+09fB2SNquhIV((I$_Bf zBubN;%#8$?H;eLl#n}xjr9ie65cDf>#B-L@rt*z8E+g&%xzKc?BSX>#1>~0ls#X(B ztj;H88hHpSI>M#4Iy4=zK<>rnh|3gvrS4>Pz`pF?D#c0>qIjRv36UbipuCI$yW$ysE$cuxZ)eM_CW z4Xq53Ox8DA)rGmv3XWPK{5j|cLkbs23cC*N(C!Vi2Z8n(p6jaz8(DWq6N9-^Rr|jj zv0$h;3LlU&$#YLUpHG107u)M3TIULT<>I|V=}H@JFrY(jK8c&20CtQ31aZddM73VM zi}@Z>Z8K2eVNBF4!deb!FyoXZ3{vDADT&B5b(g`=t3|Gvujnx85 z5eqhoN_i)zW{uStvvd?@`uK`m0xf445+Toz$h8T&JADOd{ahv3wvIz>5k7X%L`7y_eI-u*%ug+5}BG07#aTD2F~@-B5BWO@{(?wPrwW zCzO_;%W6!^YJJPRbuTJ}Y>8FCYHu`T%c7RRF<`1qUuUV4syvvEC+$-OQon%z_T zJkNIdo$KSK;yk%|xU|mDzue!B*b9Tvxy+=(t}~bW&;11x{O8OI=bm|agDm|vdPqn*^~d?d(~4JH6yvT|A2dIAEwvOUT9$FHQq05 zz4tfV);#+cG4L1AyHI&!=xW5ZltkDv`UtSfMHa6u374l<~K(>)sy~7!E61wu|MJz)jFA`@g$MYFpXUyZNU~af| z*9Rq}XEkbjLF~XSXXpN=9AP=b42&r?@`A98Ve~qwJ^evfOWQN*`j2)Z{G%3U?q;H2W(`#a`=qYCP>Zlm&WN;?9!eKJT=DpYyx`dtIq{j& z;-$2jLbr_M3?*;$$?);6adbq*xXcMxtew1Cc_&;|Wf@fp%3@i88Nsm=VJB=#!lhC*_YKQZ ztrMOQPe&gOsXgJc8u2t0H;D|TZOvT6RHa0;UlVlU^S*jG)Zp591!BpYQJdwJka5vP z1aF;C_d82X9%18iJ=r6oY@&WmRF{Uj@}sm-q25+CLqhgby}EKU>{^<@rJ^n_qm}xm z>U#0Jz9uE%kQs%L+d_EjE2qps3X(LjojVy*?z7Dz*2@Gg&46#?ouIF!dtgiYsV7=W zrXj)Bf-jd2SqU)r0fiMqts~{pVHFwc{bBC*$M_99F;)Wme6}-_AJ_zx#`)}$@Fc}> ziA6EqfKJ@eysKhVSlENO_|XYF`?1J7;Gk6d4qL>G*FlUu&eGRDX96){E8$fg_S)q= zq*YskYKwN^$p`akE=mtQH07f}yR)Q!m#5fa@S_n%eDUptT4HC$XKFfo6L}TQwD1tM zai;YlxCJ~QqLqK<+vOaz>IpezcU1_#^8p!(OAN1VOeI>@6w?s@$$Y%t0etx3Lmmu< z`*XO-rb*_qB5R8D6W~F2zIHk@vpC3&k!h-Ts}Rt2tG7iSaO$vPpS1F;xaC} z#%iTJ6~vHP?}3UB1fBGqIs2|wS9h#2r4Icuq=6Y1?`z0j?yiK?p)j% zc0|~b2V~y0D^%Ka{#55@y?0mN0!+4}_x{xs=8Zc$UH*n?$7&;c&w<>10%_sOoCC%Lx18F zl?cHUzG?aE;C4HTZeJjMwEouZ^#@dHOeTL^GPyGg2e)nzLmpi3mGFIQZNuw&qJr4U zvy`47%clT;G6s@ZXBjA^Rv`s5wcef)I9)nfB7PAE8O3ZwN%Dol|J)T4wzol4xd~N) zMyvFDW~@om9=xH&U|Jgnq)BIii@mKZgm9p+ilJ*RyRR$^#q=mw^sPY1@9A1Rc({>I z8Po<~i`1M+l}Z69`ePyTnCs@5>WZLOPvjrQWyQvpF$7c*U_mqYw3pAaB>t#OP202> zL`E(AM9tQmRob)_+#D8N?kJT`en`#pdL=%B9yZ8?3?K9UpnhFY z^64GkjL&rw1J&+_hVxTTH5Wf~y9Rs%+QlR{-nG%qzVC3HJS#m{TjzQqYNz&v zz_V|DxY1D?u}KxRet$2hs0*rnMomeptbp^J4}MtRvQJ*nJN@Vij}u9BgdqWuEcxCb zlc;5z`wVpFtEyGL&yypazBKv8FWy^WPvI_7gW+DqN=9EKjugI!-WLLOL-a?EUwt+% zJr|SEQm&?1UN-nih|n9z{5-W34%>~h-KsKV3290Md7w?^7$qY3sFgF z#0jb|b!M#)fNEX$_D>8*&pjbBICH~Hq`KFl-#rixAKj3Uq!Kd@l3 zJ^<4_^g=bhCFbfc51OP(BT;2*<_dIx0J=$?0?RNDT z5vG#ai}b{%sS5|gl^86cBJ`kO;qp>PUC*FG-6PB>2Bv$>wCgxgQijQRwi=pj;X&Gz zUyoV4drExf3QAvk05erzPvMVcf^`^je7GL0udiNG_jJtSkEJbIkG6j8@ru`WFYp1* zsvx-ZF0oT1DjH%>q&6P$ThEOA)XK(gDT)NoD4XCBX023l>@8kA6$FDZ2Usd=5t+)= zM{&|y4p9#`F5KUQS`wqhGYLG#Y`jE0?gO8cF*H-`{z_%;x0lT9+Y9yjh>(la>n3tD zk7j@n7|Zjx&|tvY8JD+E%B>CSt>xppTs;W`@==jPI+hG$O4#HN7G$s@0srYLGr)ed zbE~6md#LF*g@?cbE7I{owQ+5DK0Npp_po3C+v>nJth3a$SaC4gl>zy39wf&B3gdux zRN_Y6U`8ltC<&@g1Ri_@RAGabJRyb!Y%mk4oSLjve9 zM*u(?1&csI@dOaJX)nX!w*B`yc^x(RjF5yWSTh&+HQo{azk_E;=GyA;83l( z^Hg~^Zju=4fPrMx$6fypIP@CqL5C%o=$JKFmZQ7}SNG1R#n6gR`F)Q>pg_tTaNaoh zggx4yaQNk2jh>>6Js?vjvZEFqw3iLkg#zVS5aAVYodonmPb_uYq;GZqOt7)oSD*+h z4$cHx;GogCY*8T@JVU~j$qg<^+c2Uo71&038tgtb@YE+8iL>I=hCucVSYHV`m?H)8 zgd{?29?Buv9l6>MiN6kk)v%yF3=#wf6j}lIio=v&fvs4fLGwo*Zl6!HvB4Ioal&A1 z=mkY4P{9rWV*x!05GV@hg@OgL6(&Vx?3np=G`d-x)8$ARuTIL+I7o&QsSywMBm&h? zuplG3neAkP~thXY#M0>DHdfn#!;a_NB}wBKs)y)i_N zoef}^9y^K%CP8f(;HSzLMbtnvc0L{jEeeLZlA!ci9osaVk6K=eo+F0_tHFb{u|VNc zA@6027%zxBQ{k%BrMl5wUqrC|$HJn<1g*s0V+6-lmJty8AH{oJlLO{vpBlwO5HooV}(aQa2xVTS4g z@$gPEb~!_sV5Y7M051z#a72G9*LwBg1iwhb{Z1VrxLYy6kt4u8oCBvE0iq1<6x=zA zn5?p1!GmCPcDy8M-{qQounr4&dglNy3n(vfB~DTiE7WkqRAFX=QDbl>8w<6gA6FYn zz0tvqS)COfJtVeXRdPK>%deq*5@E{$A(_HGWkLu#U}qa3%si|@2-j!(TM;2eP5`4y zb)!%sR0$jFL<8_+fzlkHA{nGbcbpQt;_KIZi3H1BkK`kn$;6-C_73O03ZCaNYF=-J z&5;dQpl^0S8Ri+FN=Dbs)4P)zBJzye!`P|f>iHg~h<}^d={AY-Hp%`r>1S=SKie=; z?ehEE75&?lPq(Xd@QYVc_3kbh^Xj=N`)cqC=NKY}Mj+=%R0M zIfq7E&LLMGICjm6RPUV7;`~=3=(ORs=aT-1_S}gk&y#I#r@H>x4Z7+3pZ45sZ)$fC zWxy}(T1?u_P_8x1RSWWNk@9aP7Wb!;|G^mkHHAmQbBF&<0nz`{l}jv|IR1AE=&w|8 z=3l9xY&MBIrCxKJ{;y!b?Z^F93m$NrakTn*t~LC(8TW4|uK7+`>-~RagTlXsxW|{< z7B6wdgPTt)I_}l<+-vH3_)iaR{{Qd6-G0<|dx1HyRz0}f@Q-rvPZe&ipKB0vdvL5b zb;B>YRk-Hy_pNtUZce}N=C zxjne&U+;6lgIpouZx!y{KUKK5^UI$f|J4%SFRpGZzWMp|-Jk#F9dosT)c@PsfXf9i z)UiMg&U;_5r`btZR9Zv?gTvss=vAZ$frW>P8uF#h=w5x5Hkt)>SGJ#MuOk<7yWhxO zjeEi(Xuo%h6USKq9_3ceT8HGzd5`fgG=-wd8(u z6mmU(rIrfU%vro{V3(8K6O3jez69Doi1w^EV%)LQhrsEb9y3{hH%Zdh*Udgkil(1^wF zLIn*A=MoagPSl{bPddwoTc;OsNTeK=k13J6OL_MkFSR$yQx}btPK3~e$BX383+iL( zIIuXAX@y?oR~?s$N!7KLjF3pioQ^O7TBk}E60K0)VM&vcUIQpWJ5_-0ofP>c-7!(< znIW<4h{RpI4QjZOPUSzC2&`2*>AYbD<6rk0K^bO`!(|gvx%(JSB9QcwgNpf(AkAh{ znqUYm(=lv+$s7x*q3D)=nJDIIE$9U4v)*Go&w9dRw2oS%HnF+2E157l5NV8R%a8%z z#}kCP#X4}ce(ka)kL&#sngs1u!I-FV1APd(cb+jS4xS8#i8wA|M_N@qF%;;Z=ghRK z<0apDN<6knAQ%NW2|E?r47?*~#3oom1yt$eb825%YsWhR+QhA;=_l`WT+2^R7qVev zt!^MAWAHp0d@D3`!eF~C+J-~2gsZU$^ka&aZKHcW`4K1sit|jcXdqUSSN6~@XoJe5 z)WfzCi6CZQ?mIWTOdWpa#n|ZXA>;4x8#3siJ^KUN#zKQF-K_WM=L8IO@%SubMI)Wn zE=d2{rGMcw;%gQy2@#7=KkQ3Q={Yg4ekf<&N!I_etbn({rO-uZSX?ZvPRpgDbII#7pG`~N!tj&0h^N~ zZP0>;2|NBe(+h$yW%@s;&BH%wp3K})yEL#OHQVTag5_3;9;&h3J4M-r7d93hR_6l#1 zy(Mbh*kmn^rUD%&+f{94NA|8kl_GhbmAO-d*f{u+XpF@wIpgcfG}K*qrK|X^@aqAF zE|Xy;UBQM(*5cwsbG(s3#56?{If2GBI4?i7L!^*(cDw@vODdpm)GDLm8L#U7l+lQ4GTB}ww zzzxMlFJ9d=dD5%aZhai;L*_{&zyLL%Ggi#U!`i!{6rlkOV!x_=`jXpSDueFS}4#&GX7WqZhAF~DB__YQ8^Jd8N;ZHky#^@v#G z4T63$kUzTzVvy+~6N9aV1RkNlr?F*o6)%Hc?}%qj-&A7u4v8pcWKHb2BZL#ZQ3T`h z#M;6N|HPW#g_q6ZTH9+xZbbnTU+pTmu!9A(5-q=AV_)Rn_V^}%fv%a79 z6+m#EcQN@yg6ZBn23x#D1|OEZ5tO3ilpe(*)E?)8ksjWy+EOC22ClIl6G$G z*}cScs!CsB&mL~&aM2LFE7pL4%Ghfk6g}!8h@r0*|H7tYCndF44lb1S=#z54!hlFgSvf8Rw#$8qIg$r4$ z)aKwTPXNs&IX(-Dzl3PqX&{;jAQZ_U!{!Y=`2&gy*W63)?)RPOQpSSr=E@zqTrv`S z=j+O@UNC<&=e?f2V*M|#t;+^P;PtA~7D!?OY)P-2KblC@do`CUoY7bozYi$Zqg{KQPtp5>)*#BX*e3^bLdxiHQ@%0rzBM)73mT}I=A zAG=FvPL(Hu9M^kvSf%<2vS7(U;&@0ok|(x$Ooqubq%yxXuB?@b!b+{jh@N_WRuj+5 zm(=F{eBYB;!;@tx1L&C_%%u^Yq}aud&L9R@XCd7b$f=fI$; z`XpcTBfpv?a_Xm_w<+8ZW-8WdKa8bRWSKpuZJhyX%@UO-!ZR{-`TDJYbhh{V+#CB` zgn4Z|uQL_>@p9(-0F}3}{a{B1NLDkLf3g;$@3Bu2QHERylGxDSHmg;*_VtsJdehKZ zJ*yMZ7jlOf)-1ezR&HRRK0T6S{jN>-C1Pyq|%r*U3axjcF6^ycfWHO7a~X}rLQ zMeoCfVX-|<&!Mmj^2rUSbA7vjc@ww;CCtbxAKhJ>90wG!`HPluTUD;JF9#>qC8#;lk zJ))@i=7i1W+53zrP?-DFU0Bj6<>8vE15+b1$>-T7K$J-`{C?1i0G2_iT^#eljvv0b zyBe*=0Z|QtqVI}%vlH(>iL#->jx&x7GLOYxqr?t5$8(oHyzRkX!RJQI-P%kQ!hq@w zkiR>`0i&Ja9m7jLy;dLd<)+ZYakLr(bUWk3aD@AbBS97={t3&vlbn?3h77wBnxhHa zI~}I{*ieyaI~opDW&>NdzyX#C9?VG746=}Me9%{bGzS#X9azFVv8jA)_=s{O!86_@ z&^DPSJx;l5-~xaKMCu1z7!{NW2Df`c1DQH`H6RHRx#uKVcYbf^c@Q28NlrtS4WCew zm-!y9>^RORQ%^|>JI^qI^U9r5er-_w66j=TGV$=BG%6GC1<_NG!LvZSZrkbE#;(ur z3W<|}+F#ae(Yn3@Q51?l!C!n~;!V56&x}5dLbHkPfwotv$e0bn>L92Q7e6 z3fiU%BH8vA65@e>s`M*DmoTWBkz$wp-WKD(c#YyXo?K&e8y?wYB_vcmgnu@Hwd?K(v%{xK|5^yUsK;QgX`6Irk(WcCG~axMdN4-g>{99X;>{7Nb8VM<-y!o?Lo-sI)Fs^r!i zY9;9;xZ!dApYVhGo(hTM_V53u6b69!+B1Vdr!H1Qbx8-!CffF5lRZc3N;Hm?v#YVNBUDa(dXZ1Q7$4PJoUH!MLf#vMi9Yws;EK)>k;m>{wH8gC`uaw2}{HL!5|ayb3n^rJ(lT`+09@ent&g=-w|JuVprw&5HoCAKNam#IZ}wf%tZN#?uWOJPJZlIXJC zFCh?^Tg)qaUJPiTXx=$0)I|y`i-lyR!L0zGml-_-B{g1SXyebG%s$vB?>a8rsm>R= zm0W37Ug;3Y5IK$Tg+T9rwW=R?-1q_VU_hRG!Nx!^T>vP6g*ZlpqU6MVoLr}S!LC1g zj7ni%e%w#lk(icIoUUSTFM^tQ9tW3AcT5*`4KEdn*#Yl$LIh*LPyG?$WU4WsgGPpW zaBgi`_rDqgs<5s-YD8|HA6%cxA9Bi5EaywT-mB+$JA>r8X5e>h)qXD>Tx5-K-Q@*I z86pB0Kmck4%m8w^pX#At?*8z~{zHH!2;x@{!x!e+HyGgrJ%r2S81tdt4^fcA2uC9q zEM7x7IDge%kPgH#Rnj;&_cEb01{lSZFhv8gEQIw4Wc&>l8e>jM<@;Z7PE1j9i~ zEMYusAhHPVO^C5r?r8!jtA*SRC*OS@;Z)wocjZkYx-@TBs2>3t8qi7s>Wf}%Ndo0o z!z?i1<4Oo+=2U?*%sW-~BoS)r)#re{e~l^jVf*5APXFd3KJY20GqJ7YW`tT1#5PSt z$KDl#gJd$M2BzWb6~H(7XG|kREdUR~x$(ZoARQvaX1P4x3?ZV>%Sj$xk|e8i@>!R{ zu69!xPab5`ZDwt`ui^_Al7JqZqf|2c6bl}X0?M=5FDO7w93)pAkwAj(V*@vQue2Ks zm6E6DQtCG6<38>`S$7#$IsU*U2N8pTEm$4D0XhUC1JyCnSmu=R8K@u*#D5U_r#+a; z(9>W6Ys-N0oP*`pk;y3dFVixYk1f8byHNaZzPdMwk<15-h9i+g=p0Zmusc(81L%uG zn34c{QP4mZ7)Aoo=x6>EK*T2CCOg2_JIb_e@P2|*{D)F|WYarzlMiS5KHwB+_3Rnv zQ}9hh!g7l-8&ojs!;6KIFbJJkK~V}Ye0nDOIk4g&;^|$z3~=5}PlzqxZhY30ngHlc zgIhg6p;B6m1T3sZ<(Vo!a^Rb)5eFC(;O4CX5|xKZlY!#P06i3}^tX%*86sACCdM7S z%bVBc2cdaGKk*_pYib^w-+EyL9g*VaXyBIOW+8p4QFjr^L|C3XSsZ)xiy}aZu$axh zrB$*RO}X^i1RBO*E$wE^0G3L9zg~2WTi!HbK4e5GCxmUnmh4QBV*XIbJn(7G5@;FN zlf!)wRLdT^*&=p`05Mu_kHAho{0a7zUhaDC??Z&jI^6ozS=uVYADU)iXL~Hs{?uhD z?$?~Rb_VFxKQieHFej~MU{_^0K*#0RsfSuH^c!T8J9+LaPm#=qYrr@=k%bG zar|iURJ*RU$@3Y-ba)H{a)2GV-1K_ihL8j94Rv`%hSMS)2z4NVwf*IvE63Q8Op0*2 zlus=W;vl;k1MULz_v+89z)7X!fhI01=70-o@ts+ePVasI4)^8+ZgpI%Fi8NCPJI)^ zj$@lw@3svh6nr1N5M!3_jAY(-c2HIxr#Y*ID=OSW#*v{eSI5K;zb(@T=nR3iD&RhZ zP%q|?Rh5Rq;KkYxFNEK{$->D`#dbx5o*T2`I6co%zJW9`?k7By zm#dt}XJ8RAMmoe$biIck>A@PK)qTrFYYf1{-K5|EgfWH|Q6O}Ec3^*Ly!h4tPS@LS z>(I8&BQa)Uw!nA`RJYOq&VLq5m<6@vR zsd3m6>b?B)H6xL6=Op(&+=Bu}E1%Wg5c=*aDn{vy`*TB?IHOv1nM^)^*Ul$0IkTjp z$E$em_%MEk9zPr6VQ}cgwef|wJ4i|OeW&ct8@-+r3Hvha?!LhxFn0+Ae+=nDO#f7j z1_npkPrzb1O-)RCes#@e$d^#hL+Rg?x{HnN%T9ET6wELP^!VywJ`h!nD?F#I5 zwY%Guk?|dB2u%!qxEV}cOo!eiq4z)5sJ09QCj4%+;S8tqDO%i2j(=q*sP564sCG$t zwNTN>Js^_VGz1k;Kf1`6O%EI>HHdloi}vPXg}x8dvs7=@mRD2}@=4vx`H5D#bCGsZ z<6r5Pe^?EJVXTaR+|{1W=dVuImxoQ2nO{IWaKU*}$_pq%F*f=hPksLa4fj za5L_9rIEZ+7S3MmN<*J|)rI)0zHV8(qiT=Ro!%clEN`_C@pl z?;jWYPyZ3H7}(xeohm<&XL0Mtw-3+y&+R!d_-p6u`)9ZF4&2`T{p;t?KYNH|kbpgr z0+Y=oQhBt;iD?2BT-=zDi+ymq*x}6J49TNhw!iFIL`bImMf;E}<*Lk(Z1vXU!qbZIXy3F`z87iYADy!ot zcNywJb7D^W@r(WOd2PuBw~{V(r55$4mJFUF5B=p3X59@sKSca%uZ&0Jjzs5;M{#L{ z1(UJdiKybKe;k(KQ{|JVFSFyh_DUspBI?n(nuRmP9n{k9^s)h3)vavqL{!~i(e=Ty z%28U?6ooPN&py;hPTfDfysHms^-t64XS1(A%58p@Q$KR)`kmryGa={_)3y zV^6tTQG=|tYeOIEhF>+0f4nil;f_YNPpo!Nee9T8?Z5w)yBIb2;CttNPS5OC@9dX> zf7YW$XI|WW_C0s&4?8Z_@L(R zAXIrrq@V>L-BHWKt6p78nq8$u?%22w%6MYLq2_2TY3~1R+Q#@onukf7poRh=2-H*K zT?JQ*etm>&aTwlsVw@MTc88xfzjDX9+NE_)Jn>s2p<2&_v?U2#&3fz$lK(|{dJ3~M zlum+Zt5~8aW+85JXDd*asqN`73YAa3aMC&_76^=k#CpRNWKFjZr$ERYxQ3iqtsMrH zv$h1$;tb8&i9OP6F)&)I*B!zGoD;JYlk-Zj0;_SV>1f^UZIGnyLhni}x4`gR z{a7L!2e!mOCZ(jLG5!dzM74)%`w0XFP(FFsU&TKa;|G2#`n4Xu+a^e-2$a}IJ;dlp z`hcz!EaXFI+&mx>e@1Z#0B$?Ouv6QYG&`DbY*b!COl{n22n9YAQWuN+y5b?GK)1s| zi$KMbdzklO2+aryBpbKuy9yvh!tC0RD^6mzVw~YysHJ&I@ zOcYuAwBV@^vGT%nYemPQ*^F3)+G=qTtrK zZ_n40P^q+{>V9;*%lhf@B2~)h1W=m`!bg8}>Mvq_uWky6`_ zx|Wgd4`sd4y3UT}fIJOxOF`AsZVc(!G0{87cBt#|*kdQ_L1R{RAUvpY2xkxwa9ZZ) z)(Da_ENgv87k@-jV(5i`$%kdh4-f9{>D`|DGdIrDj%VTp@NCLeKk_&QcJ{kAlfr*? zA?skgiA`ta_{+#P#{wXio?^;u&}^co@mD+<*p4SqK&T;P;zQwszdoE609cB>78N7( zRD;U|4+7O-7GP;?Y6uTV(xtk;oWlU^-axV%B11u#bm$?J$uj?bAFFLeI7E**jNvHM zmNbBbX^2q?20cvx6O&oP zupbfDnj;5ODSQ#jcx?OBWHbMXgFvLUFi4iYLRFp-~(j5rZ=lNr&GhzoQi_A@kDAPUHi0_(7X|Hp*x=N|6bJ(`!D}c^& zg5u?D7LaiQq#K|l>bgr@A}JQzTHjYL&54cBPZO6!V}=zo?Jb)nnH1x74fX3Ru($;s zNNN01Q-eS9!GOp3f-=@YPr~1UxokeeUDI%zfrybw<5xNpDjKB)?BLlmm$Q{k50_Nf zA9l-fp5TCwCO5cyN~T%unM$zLsyBbR>}=Rlh6yDgcVXJ_^AQFPn!TLkXxz$~+z(_5~ni77UllWW5Nv1R*}I5jkwH5jR=t zLpk;7x<}paJ)jYTryz0|RwhS=B@%gRB5QbbuL5d?A7;??sayFwmr^`IxFKX z3mz>}tRz|L+{VmR_`F1F;a@ZI5;MHTLPaebUw4 zvq!8l^T&sUWJ<09Lx>BNs9|2?`DUOC9qPQ@Eyjoh^LeM&IyjgZ9R=8^4A9f0HEZ~; zuQq4w-zO#Tgg)+^Bg2c)5Yn7~1UWG8;7uVI!%~R?pB2aJ-bFATXyr_`XW znzGJH`FW<Xh?j7taj<2dg z%j(yvPXCO|T6kA5zpY}n0tqM*+S(|?xhDNciuld&(au)It{njHxuH8^kUsYL4vkUQI^~EXe1V@}5(C0^nO^ciHG9744f?xmt$a}A_ruz3^Gi{{-5<>5xcMQE_=ta>`rAlZ@5e&Uc zLhpp$L<1s45rZHIqJ|D)3D^Kp1EM09H`uV^#NYehd-k50gPDUV*EMH3Tvw8Ht?zn1 z&*#27Fb!PX8T$n3OJtsi28;tKV`ZGc^JFr!1{aZdP|DG-ZWlirhudI1F)Dl*=p8^X zi33P8z|uHaHZG1Y7JZ0*OwB0E|J4aFUER$g2fmZowkC^DCfkY*J4d14qWm~TpE z;LuU|7ePfzpj}lmQgIEDclp>PRIq^z9AxFV6A=w;Cw?lhmu&41&mJ7|9~1@oQ%ry$ zbSF!RjV-MG>S~qmLE5p9W5N{|kh)|^D|Uif5b7`+oIZQf(JthwT~UZS z5p#(kEw%1iaLoPXh9eXwo2ZO!0U`KNshU&-30HFnhdhNBNad)&k=eSTMpdC1yg2Sp zVcd_e-Ka*%F{eituOI9i#wtBs?|A4}fSi+N-N-|AK9&ZfoLq4y|(D`mk z+9`Iz!qBSNQv`$s79!8C*0e(SGYZVur#a#R<#etwDOcSgF;}@_TTnudQVj+3kSHKC zGD^iAQ^L{oTS}CkbZrI0b=0wW9DsirwU^o|%>-M}^94`>u?6-I45N>4Q1{nJc{yVG zS#7O#m=+M++)b+gO-p}JbH6KcfPhuPmS0W59;LO~Zk={O3pBq0`+kjVajcL0V(%1! zVSo@wTmwvw=Y^x9IR;{F+g#WP+QrZL?4cA@eu;(?Ayy0rHCIF+8(R0~^pual%$p)d zv8J!$2N5txJy(CkY7;iZgyJE47>X7Hi2Y>wM?vuqRY6D=UTF=Xi;++#!k!~e#WM=* zni_=`5C<`BxTT_&S$lR)VVN4{VPhwp3Kt}SKorQ6{?2*=u$OsW0BioxvnaT_=FZw#4EF zPbh+*T%I2VRN;s{jYDDyU3vtB*$VdUS08Bx^zG≤@VhIbSJB_m)bCi8to1GsH~; z1JQukf#3-^h8(?6Xbs&$MxDeU!-#MnJe*2PuY5^skAvpmM>fLC)0e;@-1@)^Z-I1< z=hVjG6;X)<##P8#j~4k_FH6CXq!CUAqsegi0-8HO4Q+T)YIrFg?ySUjKZwYH7U&qryd)kf9P33I}S_II2JcHJf3|2uC5L zt4`c~zip%+18T;Cm~$rG*$CyeOI`|KA_<{aiH@hWO4FdObVPfhKrN$yp9uPGTMamZ z)ERKd+NG>~6dej53`Sa+PeNQL+o({~_@zb=c=wbQj(SS!B<{NG80vI7cYhh`2Wr=A zt+U$%?;|5B`vg*OfJ2GnA@_mXlj8d+$?!Fl#eo@!>lhDZ%=UnH!H;8oI9iR6O!GEV zfr>010kh^W?d?M)5OW9p;h7kwa3%U$p$l^L5M{z~4h(;Fn5P$qf1`onGS7wBH-Ofe zf;3DE1JV+k+{;E+Z~&f~9$Y0_(N0H&Tw>r_&K2%SGQfw3@CMp-Q8}J$eEYz*O94uD z4*{Wde6JD(o`*r|(?FuQyO1$t@MeOrYk@^gsJs23qPf*>UND>5V zK;0HuK*i$2vwdUw6hK(qE}|p~5Tp!OA!NZVS1u%-lsfazuE zgkiB8ryx8~{7k+e;XBlXzR#V6=wOaY^`T-pU`f)T{ulG9HBcPmHmY?7&Ou-GKi?v7 zu9ue9hsL&okisrHcIO3cvA|dpSg{9T#e>}%?R%!CyI0Bd2y1{h=#GKQd4etI&qS$( z)&=P`^bKpB65b)xR#ZG~-0d+qiGujBBhXDmxZxmDMRXut8V&;bOE9^aE9Wx6EpnHj zt!VyT4hTWIBu+)wQ~KN2p*K?nsThP(UAZd`jz5Zx(tv~06(_a2zw3?{sFhL4?) zv?|_yHe|*cJk}v_k^%gK1@pWTyhuWM3Xan=|2Zh0zZHYnGY8VAaqESD- zPe48u4y2y~KAE79}Gq{pU}XtS#Y;vDcn!n5OD*xesjE7KvXR>Q)AvvBNe z3m62$LH-zH8rdk03+5~c+R~?yMn{BkxZg4u9xc$zMiA*9d<>{3eZb!NUmc5aNK!;b-dN$&;UUxUSRv3}+!A&H1=ZA%B>3;z@d>HCgH?;Q zSx|bLuM0nLZDkB-*tX|*9w&cq0h`F-#S!w3UI_9d^_R*R2(GWabq*>rR z385n>Irs}MY9`c4ev)pimTrtl0WHR_p|OQtLJDAAdYdhE_ILUbX$~xzh4}naqy&%9 z2dyZxp?S0m_Ed!B6L5hLc%SOq4(6NVmFP@1d`?M1f&dlX6>4NnrKh;_a;5@^@X0qK ztt3=1_eNMYmjnUgzlG=oB)4QFjVBE5a8DE5^anUfM>Mk%f_BlTbKiS`(RFx40Fz3Y z0AVmNZ_dkuV01Pfkov7RH)b!u&Jn7CrYhH1cki|aW{h<5460{AG_oMBJ&=R%Ch`2A zbZ$Z|KrjpPCvy6lagDheif=#VOZfpB_+=2;1XmdOi%96 z<#uLtc4ANLr2o;@=y%p1h@0fKkY>Yz7@MBksAeMk?Q)KCeZ8TFRQH4Hy(3G311>0Q^>&8-(UfH9HK_*_!%jVFDNc+2fDbEBej$E{QPu~WXj(C zM!+vqn;ijtr=$j@*{omH5U@0Rfx1haI~I#>CLogth%l~wk_>R0GWLI9&;I;o|AAS7 zU>pBHH)KDV1b#BZe=;XS)LFYmWQYppkG{6`)7U@X&iwgN@#l8nb!l2TXu*ojlr%c| zYg0F$)#1x0ZJ8_Px^DZg5X$w1eYv#3jVjN1Pc5Hb|LeNnogX^awH|CihpBtqu9b;? zHreR@`rv7c%>PLU^~SB^zmW#ddtN*;)#Ulst2f~KNkG!;o%iLiJE!fM|3eyldLvKr z@CW~q#P|Q#NP}=LX;A+q<$oW7!X*Anv^4l% zqNVsw*W@1e%u4}(Bai>^12eDqaKRFkn}@ko5o%{d&Oq3|qNV(S@RI9M6*vDDMryC8 z|1FG+`E%op(pfHEB8nSl{HHK-{J((&6SyG3`v3Tq>i*&-(oZjB&=<3~LZvhF*=H6g ze~E(ACI3PuxI(4B$;CoR*JAnkm6CIlw65uz^LJ`4OgH{_u3+zS^`*tX{Sn4e-QWJm za?9|G(*t+fhwq*Li=BAb!SyIzdwBjYSMVX@`r5ghYu$g#BloV3J^tGtnS40>*Q4}o zl)2H#?T<{p>6v~pF#mRNhJAH@ee|zB>B%hX+06ZC^N*h{EOI>EGqFo;p4gC=NdY05utVK=Cdav=EDDJS<15LnzJ z!>N1Gt3_5$=)tLFS0?2w)N+q7os?UtYZ2BxCJ?;oz&*RxkOa==^NDL(hGI-{ggaIC zXh)r7SLUlI zT12H}fHbSK(P~6Khqg~0pCyeGHu3iQN{(=}{_FF1CKq2mhoCKIH?a<%&l(=du8*+! zb+=XbkVgjQM_*{=_^Df%G3ID{scfX?&x0FN#Wm{e>jSPXUFD*(d*xsB;$c5Jb?tQV zh23A;zrN4g@~Es*bgKTx^OWJNv>UH$HlU+Mr0#LwuyU5U_{Eb6m1DE=#J`DGA*4OU zf^zoQ@K)vu9T}B#6!%zSj6+e13=l7Y8GA-G@)rmSg%AmlJuV(~YdA7}>9rg%k1@sYtn&}2R-0-ihKYNL$|_Dvi{T7@)Ni9twZCk!);fLCXp~GU(bFMX z4@WbD_R}0Tnb~NAUktl&*R}0@A(@dV@aQ3BVm7b62N*HZ|DbY8(0G^0%;r6Cz-ngT z4|4&YWxyb+k88zI#v7v#q?SkqY-m7v2h)O196FKGnu`hcrK`H|;L~huG4pK&l5Rp& z=pKVjjKIwA(I7jl%_O(R!ifI40jLVe0TOzT;|fGQr1~Zn><_fsvwo9*=yypMO1MMJ zD{waa^kL@`$w0hL?jGY!X6|jlHSjZxVLOWo{lxdM4Nz%r*3e3Ik(=r?l@h2t1$wyl zl+Pe{B^Ux>x>T2lRu`sDlJv%M_n12Bp2PygEiM|0L`(j{%1<(9> z+3h!vDt1B;67L=n$AJ~gxoexc+`+W?V*}tl%zDb`4A$Z_%bWDJuTnx!F9~#t5k6M0eJG|}a)tar_pYwP?;IPZXyGZj@u(79@Qd22QR=?rLlM4HI{2h=^$gb5|JsAcs5 zxvo__ztqD4NDC@T4Mk!?>^i)aDXD@x}^^e*#h(le; zhSOYHqc+yv$nAxX2yjJ0Z`_%cM^i}xP-Tuvs0tWSA>d&C==$4~f&FEz*q$U6V+`Ow za9c#qAV{fjOrVX^y;~(Sdwt&J-GNhSbqN1=fd$>r*kGPh%O4VXPi($5Fx{VbV47X5 z=4eGZQ_uxcKi`I8N>m{YbEQ<>z?h?#a-*sQvyL9aLeeMlpAhrs+y;5cOULyo6S8-U zK9%Nva^?-D2lFDy$|86wrVW2fRkbz#LD2bfo~1|J(>g@AQ1&~H+O$X(Gk(Z-5Y=5= zI!cK?p-ThTIE2FbTDB*>>@}c{Bq+{f%xtE|3a*Sj}5SAHwA*hL_%W|7xhiNXyU9@J|{ z!ecWqHA3d4BjG!g5$F}69?q13xHf9gEl1UZ%Hzkf;w}coJJ>Xg-%B6>+S9q}$m^KY zE}J8(EfMSVwI!KD_R#)RS5Fo0F z_*hiiy_p8TC7^AAy>*B$;@Q*uy|}1n*C<9t?aAYPCz9elJ@sLlEI%J3QyvP@jRee9 z{T+zmDPSZqN}w)euTTWaOZ&PqDw&b->P5`VEBH)O)(j}ljhL1!EEPyPcy9MIqUEES zE)gP<8>Ll6f+tHfU52|bpuuuS2fwDgpRlwXidq*8C?g}@=SzHer4z%3hq2-6-n=be zEL5%>w)28-SRv~?64f{S)@#Ff?D6}UM#6$3>q+r@ULVOB0!6A=Mm<7$*(D?}4bH8> zBM5n3g}gSkp4wtEmp!Fc04X&Ot7UsaYd=U46F(il&yES(aVM522bmtujhVH~#m2v^ zar1ncTR)hQjzp+7!1WwY+|E&U$H=_M2_=JyTY_Qg`Uc?!777@sk^$@pd7m2z9z#?) z9Ov8QSX$u)-m?ZJCZyIG7W2CYvW)Wrlu7|I8l-$+9O7U=)@v1}48XYVcNd&eDqi0U1HIl!?FvgeMg@yuAQ!8F86&O> zWM2};mnEhcw*xP+;x(PJ?G=;>WYE+EGxITshsmlUTx5flt!W%Y1t+qet5#8kIKUK@ zDvamf@%RCQ>at)y_`nKIQdexmp>HwzC<@Ic)9^v@BTxA0*VTCpw?Lgr>2H>XG@S?> zqDB!B0IKTnEaeP&E2mb}T!n*{s!Wy4QrC7XVw6Mq73%sig%4g8+u2Kz@w6<01m>l- z6eIHN*=Qv^RPkdDe8I?v2Bf=!#gXnMweg|`U@_dm%I(f*H?9s; z<^4S*+bfns8@4DQJ3so^EX4uMD)}CB1sijqALD6e-9~gl!! zMm4Vtw~S8{CrD+_sm;TvM)~RH)92))&mKt<^3(;{eK9#>M*~7Y4cTOvr(DI=>G}&! zP;aNx<+Kc_IwFpi>Uh|?YPXxm9cFmc#4?;g<>yil_<}1Pfsco2usLoScF%CUkh`hEKAWKkdM7bj=;D1bD zc6dt{TI&&VOEw#Rhyy}WgmEigJlmK9Z;})mvXWR8vB`dsgt8GLEszGBZKppL@|#_c zxZPnC{83`avEpiwnlTOP0EOTfuuD*cI|;U|fIN(Y;L!V1ol{*uMedXBe@YRa%Y~!vK;e1sbMG#al3)%vK~Bu0JIKQS9D+SFv#>|!mPzlc|i~H;h>4J zvd0;scm`~|8lg=B<6G-#_27R8L1FZU!q%3orqnw-@FYBM%M@W{w)%@(bt&G=lw`)# zP4S1>Xft9+-Y^>i5L6?pjRS-I&ht3uO=ZArxUQNDa^?)MgmBwJcfBkHVn){J_3^xXR-zZ(8;$83 zr{(FL@1+&>m4c+ckDuN0>@WaB^f|zduZUE_WoZNCejLPv3vR{0O(?q|M%yV$YhW!< z_S`3A$u=GzArVQ7h@teG?6>KB4P2f|jiC>gaFp!axdBZ#Rz)zU&Z22?z=~6nOM!}m zun|OLIvuVLg0O63U?n=2`m3I*nALj)R+v>=Y77tJ%shmmkC5SuA{VSQkXws#)~TeL zTV8S;?s7wq%Qa}18Pb>m#^Ip3>fFGJ%tJc#Rfv&fD#UI1czu_?I$!1S<05JK$~8<{ z3pUydC)1b**KZunCdmwhnC;u>yO(ey>k}f82%_)uOr_0DJCBSwZeCDTfKn+-*UYo;&%Frfq30&qJm_P=oCE$B2XrNIv zfi)u|s5n&XlZfxVM)nM&D0?yUP8rF(jdJn;k?P-^WhjEgFfbAcsmlO2m?M?RAbU0< ziwPH`fj2M1wb|gueK)FU8M|GT5=!2CCtEYK5Ac54f74buI&cMP6&zdw8-hrVaT8Zn zCa}^99q*aWrh$4Ltz zo6Ke&Yxrq@RT+oJW7T*wTlsF<=zP{Tcpphzp8>W9-OHkZF$`d~=Qaj&<%hY5I1$!w zWn&J4?zNItryD4zwJC;6d^5|l9Xv6M3;munzMbTkD2a+@>29iBY7m137;9}8ss6}+9OQS=0P=}YdbYTX$2Igi^s?bO4QexrTD zjqkhw#MmyRBe-3WX4aWWJrP~VW9n9HYyT9lu(1LOk|1>N+cT$bmpr}Q?*?CI1$m7Qx{8DVGsY=yZ|fUbhs z0RPkBG$-`7NQDDPjy;sahDqQ-F}$EEe`F+R`Fixw=_}A>L8*@}&&9qX^LBj#`!j}h zx*p$Rs*$YmD79l(?NG5Sz?1_KAsQIHK7wWjJMZ=qque74gMHN~u7 zH-1heJ&!+LtYRG6e@I63IeQe-3rV@t4{`VGa& zJa6@R9zDbD_GRrDSbiyad6(q$Fd3$>SnMx$w~?qI&s`mGy|H`jFu};`nc9~{Yt~v8 zMkAyjx|`kX!-Ba!TdITmH9t~oxvViLi~#N7wF^E^UEa9R!shhsp4y zBE+RoCpZ8B2MMWng;EaLEeJ>k3FT-A_6J0q;9PIs79HM(NX)Gl(lV??q`X*aBK$H_ zR(v|=VNPU4_-oG)`n$8Nx7WQ@2Jf2oge*H#YGY$qCs>t!jlcoA6pqeK(qW{5i?8Cx z(-Xs|bCttQUMw(N2Evuw?SZ;$_t`izZ{g2|w!2RiAHY)>AEpS15SlVEAJ(fNllqQt zED2sW8~d=R~-t{7n8o0>wfU*$Evc|V*X6S9{M zwWQc|JmcdxFp-OcD&>8q%e`9#skT6!dn(k(j7JZMfn0*yDX0iA741NWvB$oyFh=b` zBw6Oqgp_YnthZ5&>W>#w%xKWSSi8bDJrO*lKUqgl1n0AFPoblgCKIEMhy8f~m&-z5 zj)WJC0M0~Mi&q(Ip~@sqV%AB{-_PrMLTIbDy~`TAw5_L@h#!u@erK8deb zn2?WO?hn7)Zjw9wjtl&KuU=yu^uoSM)pLdUMp?Ukwvx?GFloz~LU}B#_A#uK_DfcT zk1qABZ_Z*Q4Sj#1MQ+peASeNQK^A9iB6J>RtMG{64Hwipvc!qabrNole&;BUGVJko zi5~gZ6)O)lD+D0Mo@{#dDteC;=4{FVqTY4>YW3RLnl94OsoYHb_Ih5qv`bUycGau- z=Cssl-y5YS?mn`3XO1_K##|$YLwAeoyoBCd&PU52&#LFx3n=*wX6V?wJ@oSSX!_4b z9*8>?65{F&URy$I;o)fXp4+swJRWhgI`gmN(L4YAt%|7I*i9DzJdG;2X(kvLX1V01 z$k{klD!Iw*?}g4^<5oq&#?*|s^EoypXOBuN3@JDLFdI@~xr+>?S?_TQt+baZ3axV1o(ru$Xo(7|aXaV~R_k@7D6GymW-hG$ z$Vt@EhTw9iS2&IGl0O?=O{W#N&SrSqA?ix$>_E7u^Ue9E##1xylC;%7prWyV!Cc|A$r#$~@xKi3xdbkltA6Ug7~aiu87+%x^oJRzZxnUjto_U8 zn#-oo_Tq)67^qsQ_s`V_6gegnflJTzZR#zoUS{k|0Y;z=dmcdNw+?)-%1^0Z!wDkPb0{frGYp++if~U354_a{VNmhtlI(9*U;N8kH7c%MDY4MO_jYD6UFO@a3P6dV z3dOeX#o%6B^8}`Uk!~o0Pe4djRjhUWmgG&E@Q)%v(f2eNLL^H}&UzAw^G2`tO(Y)* z9ZLInRc(I6U`;~X`vF@+^&lFp==QB}J^${TOG&DMv7e@0PMIfMt?FpofEB4FFvwy! zf)yZYP;;Q~#g}ByeOI3D7OJ$Ix^|kH`sf{p8C;MJg`9UcUJG`t(LKRTKcoIAManFp z^yLf%icJ6n&_ZM;_`O=|q~IQPt1026Q$v9ssWb%cFl@_#CKFyr1Oa%;YX{k}VOM*f za8^>Q`$?L;@8L9|6q<~uK9LJoa#lj-P zHL_{sV>1=0m_nMgSvwBGEBKDcqRf`rovw9uS`I5fzI4swkvyP-;FF}sD%XdUO&xU$ zSX*eVhX*Xc_{=!MdAx@hFBPb6Bi~e9se67X1zF}Q&q`W>z%Nf5s2fGN`u~vYDvBM^ znZ!)+c>sL7&KM^QwfkKDOqWfqv#Rw4H32~41}fBn-)1v{Sm3`VAynVlmPV90>Y~~$ z>(2PG)R;{;uSvXeqnjub>#wsW96q_$>f>Iswsw{r^Q1cOM6VxBIvg_y<>6ChfKVC2 z4uEjg-CO6bnYS$Ulzsf#YA3LFfMf-OVK8R^^BPyUsBc&7+n(jY{rH0_Ut2ettM4CG3`pH+c+@8)ez>%istEK!JA+DjHl^ih1Zc|6t~6a>$*6 z-Px0?;CvCI0kSn*nSBL(M3X@o1CahK>pjHqzWkGSll+HV;PcdiS1CISUj(gA(8k!J znsh@jl$QX42;=ak0?swD7y4@g58kJoo^Sp6H16}l^mBVk%SQksD}82O*n?v%dbG#y z+Izh)83(Djp1xG6FiopmR!R|W5XR$A{DxBQ(qe82lgQQrzO!kXpLO$AuSkp}Kb;aZ zL7vRsOu53c7Tj9om$^ZLOnWjR;_G)?1OYn-d@Vn``n6@nmV;mD}~BGsJd6#uu@SsBS*-p zGeMAxHa*^A8if7sXVsfA?vHN4$_+hl=!tA z>vguB^eP+h@gEoc_(D!^kFH{J`UIa=krRLLN4OErn!9OeVyOz_&p!?kC?q>cYqs(P zZnmiGQ^Q)WTJe!sr@4!LGy9)0D;e=C(*BJ!%PyeImj8B2sd&+o@R8$4@Qxj-m3>Cb{xlj23=kqsTsopKq;<+<-iCbg#btE#Gg0{rSXo36ytBj`;Lazs62P=5ns(+*!oFSYPq)&imjjfp zg&-de6e_8XA@Mjc3eN`da%sA0Bo_q=2#hEcgJ8+oqN-MCthBlqL1U^W&G%aCjace0 z=30r!+Jhp!f7boWKwv2lRD+D+HDu81lyFcDmOS4XwYB71Damt5g=NJnceCvD5c;Yo z;NDtb|F=zG4RbI&?)_!nE&{@y1~KK=s8`xZSkiPcvguGpTBan=q~s>GzJ9uOSdj7@ zaHPO+)Bh9(uwe(o&Kc~6-6Gzxym$d!e?aB8hL@7q8r(oN812T`Do!2^(|WN3mOy-z z`SpYG&*#ph0m8kyj$fIsAwxoqHuL*Md>@K3QYT}|KXnI^V1^u%h3KV&QQ67pFF=k( zMfqoVv0INL-g*z|Q$q1IU-0Ys?{~gSg9QfYh@Jy#z#qx4z5PNDeqKIQGF0b}R5TBoY=ah$rEAx-xv5X~^`c7hsQAZlgwSsc}@Z)ce zm$boK3fV%7AcPrHf6w`s=6nS|k}n_n(uniSu8+bE2z5z7h3JMaB>zbXP+@Nw;H^cU z5t>?^4R-_|s0U>3RxsL%vFni)!z{P!S2z4dw|Zy3gY~r`%id#rgR)x*W2DrJcdty( z?N*+-PH~mT>|0SHKtyR7DAEbeScbb%B9axUvEg7RoW-=w@>e?SypigVr@oY!dPFF; zK}fPl52A!O?CroIh@hV2Y|kMa4-TwEhuDJf+x3~)F0+z{W-YZb%5jLn$BBEaoi!=a zMegB{tFgSqTwc22o7X8NqETXWNU6P4h+Nhwhn&-O0XGT|;%-vXk8(_iw&!4!+1HWw zOGlB$i40}1A_ZbXfdvqxu@Sb#TSdo$?<(!`QYN`a~$@Tf%)2aL7^` zDkXN87nH6v&5AkVV#ZAQZ7eL6vMi8khPYbH^dEu&Z#v z0ciHfv@wv8Z%1^G$*CFP#)8rZU&AACqHB+fVsj&vDBz$a5D%ePEv1mBkjs~ga>v0Z z$BL(2<-DyG5(^LM=z0u#OAUX6U7Ib66)FUKpX9+8mn6q_Ts?Wu2$H-5^B_sNdP|)k zAPlf&b3t<73#1-6WP-9wjN$JWYX2t5AfvPeB^U-o4Zr86`@D@Hqh__AcD+oN_Fv z1nQ>Xlbv<5RtZ#9Y3eBcODLAIRI!&0*_essBj%!LQ3rg=HBBIz?07d;zQlKmgm{H_ zu$)Ll$Ue6ckX!BgSePTtL3X(a)XfD`fyW#6mUYG-m;;FtAev;TBfeI5*jq1K^NMa+ zPL0H$R%Orc@S4eliN_VOLXsQx87gxi=Ryi2UoyT3_F6ylS*NmJNc9_K1-5%z4xsm@Jd4z3tDCw(i(ie3b> zl87i7g4eun;D|4lifA2^QsLeQi6;p0i|h_O&&))=7zvpXrusI3wO0C!b=cc9e=d-HCU}9EQB!Ls*jb@Sa+E~6`t~L%FE9vbOrBsDnDwRh~{L7v)lH} zrQ1Gq^An8Jsgffso*ARU53^nVs7f9kP6DT%Dr{|=f0Hqb+jcCf z%vvcVP%M0$>!_QMlwzmY&*#L+r_@*Kjv~{EP6u|66(2kpdB**P*7pKL2@sG%llUWk z>ggucY7?SQ5Y@(4iP83!h$g@7E=)ngoG^eZL*!twl&ku=O!wMvwFp`m0u3&h8u?{n0=Ausmms+?c-nIm>3B~yX^Z8_c&P24A5QYB<*&G6ax z0O-d1<@Re_sg{e)6l9C3@@T`28J^?c4lxSCIP0mer7q8aq zFoRuoH*U}pdBv#u+31dII$hY*oz!H|40R_1ZUmSTy$v;YqR4S1_eWF!MOM>upZo(v zfNn{zpT{rHN-{XS->k21w-SO*t5G6`yP_@?_qV~Axj7PXuesT}$>I4YqsE11DdNND zt*(a*LruuTij3<^ItLx`!2K7)Y_riP`@0U|$inJ}QANY1&8n5Jw1LI4ccHDQ#$nG8D+oxi^wAi1{ZSE0Z^pnO$E~5kFK#`EMsd zioj1Uh@TxU^^`~M2Z75(qi|wpQdHvflv~bpjK};??YSjvXD}SdyvDzpw=fuKDAlXa zfgL7@M-Zz6h}kBHN$u|tdCjEB@%1gNgV$ylE&1{B!a z6u^c8dtC|a@^qN4X@GIFMHY&ezim@u@gZtIQ?v0BTBU)BQSk(6RmyeKJh*qgWaUV#;<_fwIxAV_B9hm$WiZmr-~kGT$~;P%VQFS7}qZk$zSh7cws=IL^wRw=toUv zwp!)%$laJ?VieE4`eRqwwMjpG?~R2|eC?Bu!XVOFu%n*<3X1@E1z*JOS!N5(($P)0wbfIsi)0>CyLyBxjz#A}6hmyHT&@ z@QCoE-E684&dWPxWEP*qYst$3sWG_!I$4Q3Fqdj=o)BoJ;t{^EyGl=*pT;J*M4M39 zh)qAK^;oMa=XtPLVlet@+Z!>90Jtxk3l;=iNYD!XBc_z(s{7>+I&butbMJ@DHV=^i z3;N?Hoke5ahMC>Q+ zAqFIXElGN+ACGf35f117IOjoxPfJ(MT^x*mVG{R#WgI;9`M^_Qx)?e62_FjS|;Y%vD6y5Yw=@;yBfhkw}#w@zzz(AJBan=GyGR) z`ET3P{JMh?z8(x!Ji4Bp{xScevBeoDfZb@USKl-~djiS^DUzfNF>vU5BftC+al6x7 zDWjWZU2gH~-(Dl?MP2XPh-=87THKNnBD6n6%Ni3A?_R>iJ|C=&g6(y#{kl9YbN2S_ zGR%+9E4$z)yNDMbrHe}(r1yZJFjx3*p#*jfRPYB(;LEt8cI0lqw+Z0N@;5qe0DHj6 zkL+>)^OCYXj{#I1CT@>e$0LuuKgth`dM~$=SLBgVcaHc8+kHx~@~0>93AT&kipvn- zeK-t>4NKDA(!xjec+{RM>N55zdX$P8wuvdUOZc#n72^?K>Xe8g!j9tn#cFMCdBfAn z1BKqC-+3$Ce0TMSVnEh?SkH$3h~xgQ{EXoaQz%!Li38gbr=L$1$eK6^7`)Y-aua^@ zE}->ImiFNiDPP}S;PP?UvyGPY;-yqKm2n2zF9Q0@)-C;_fgt5mAkJA;_iEYn0(1EpK$hKad0PVG_+`SEHK@D zU%)>mDW4Q}v-jz9&ut^Pf)gNR%E1pFwyzB!#5spj;{-Lk@89&5Jm<_vo)%5_OeE6A zj|H9X{(ec40iCFW>9Qk79)ZL;HmCS%v+@n*49>UkIVg{zDBdHFMS-#@-Y*VdUtjvk;>mmLz;R1;Z=D%KUzt?0@wjK5@s*jJr1aKCVNEnhN{L4(WY6Rgo{ zBV-%?eYYCg;1as~H&OCe=}@bEpDC^t*)r{Y(|2p)6)x>%vio?ARtptojW=HqO0{du8Uu8~R>G7fS{04Q17B@}Uy5az$$GENdS1?CbCN zzJ%I&?cev&yO)00D!PzYJf@hC%X^T%2A8k-rglH{=9Dgf1+s0TTR6$U$$3#CNw{iQAk*<}9G5A3lC#I`q>%2O_#l5I zj|A?UTq`HLY-^7tPI=kN!W$59G`scwW0{5rm%(oA+~G4{^ykxi^xl)B!Nt;%Sr{vr zk@CgiO~m$9pCY+5vC=%WDv?0ttHO_LNvK$sz4_I~-BMNFGhljr=T}2Ru_A@M1`|*v zwIYl-7_*q2ceoeDs%^yJVvSYWwG%i0z|FZk@+za`34RCj*eTItqp>rx1?F*cDxITo z^LuB^x4@O{|0aWap9y49ZVW_ zPQ7+8vD-D}f)}^ibaIeeYVzj3`%{MkD5E}kJ;w`sPUQ55=8c3DUO!sgA5(hcc*Q^> zm)%x%Bcb~8$+{a{BaUa@_}}1-+i~I+oGPceu(oI}tgZIn)a^gjrc<{wTJL9_zFEZW zHT@;B%@nlV$!i@iX`kona4Omsayp;nbaHh#_se=#OFO12yQgcpVcXxN?QYA(`!$!A z|4MQC9@qChsr?(aaiuuZ9o(>O=yvzjyMKF4S08r#&D&Pa{mt9{Q*FAj(awC*JO1d( zf6v&sQk=1^a}yiA(_0s(Ui^o!w)I!4dw1&^>z`|PKMio%YX639i_dP|WsfhcO)vf{ z)#b))Z~j)BmUpIBxBnV({)eP(`S}+Xn;WxjJ$>=@(aTRyxD2)bP0Yq^I;H>L({!py ziVXCQU3%W0?CnV~wzPZ3-fD^TCTIuzTK%$j&-+I6+@xr6~B=t%W<(UI#eGl z+Hu30Z}Qm4*Jr2ELbBf9nrUs4b`lc!+kW8o*&5v_Mf(BwyfgfA%ECXG_^|?OIVDBj zLZfVe2WQj%**3XQ*m_xyYtEdLL2~KI7hW&X_l@BQ zmt~#S_qqIB?#2V6_qmrsmppGws;LjINXK~JG9G}&vLrS1Rp|JL>AR;)q8`xIa>ArU z^woa4mAJp!-)Ky~kJS~dQfzEXe%CeF-;vljmu(ky@~8u&X)I|Rdn-faDo(|+Ws z@13T(^kX(Jcufaltb@!$&w)3Jo2-&KJ%fUsiBWoQYV__8Dkq#ayNBpwFuB1 z_Ln3QqF7^73iA^q<}0h;-v<@Iun$5W3&jiN%cQNe=6OZEd2@_6x%Fbcj9l6;CV}Ty zW{{{zu7K{T$lZ&rO}VqgLa)fz!k6s;;X*loGc@qk-}`)ogMXZ=grKh!Ph0(SG}dG6 zu|!zS?$n*UYtaP`$(O&VmZpl@hr{7m47NbLw$Z>LS0PTNqh_-Gt8A9Q4J!aJ#eB4v zTJ?|36VC`zVP|}?b2_>=`0h-*ul7|uTyC{{q0y(YNR^$Mw0ZRy{>e*`M`bn{1iO~> z4V?n<8c+BmtEBZJFG|I$aoH?6w1cC#eh|Upu6SN5;oZUoxoD!5 zjX(i$7A{^p=lZt&b4%A-?Sxe;hf6oH9|7$C15{-AQK=F@GEQpzUF1D$NiF&K1AUWN zB5h4u;@%wrgw*j-+v^oH5SWmwR9BT<0n?V`Sug-{14V z<(RVZLVCMdK&6gRXGWR%k z{gIjb^{Zufb~^hd@Z72ReRyJ~=nmQsrmC`oI|XOLU$B$(t1Zs8xmML_sQBG>3dFn2 zk~6S-IfKVmLT5)up4ciL&R)&w)4r)UJ-y!^zeS@M?xf}1W&a_rH^fn;y!72iB=*v6 zr~>4o<3Ha!_=Y(*UcbJd_1T4+e!y8P*X<|qS*U zp!nMtwCqL-U3^)#ABBd>`}%I!-`BiBU&Fy;-HTbixwiNLdbTN=)+QFV5h>D#jNq_A<1UnOifod=3$5grPhq%(IlStz^Os%i+#5F zh(1o@^s5)mcQdb(!o-d)1Q~`1t5$|JQfvi zIqop;tG9^drTY^Q>JFB=aIq&w4Hm-Y9bgdW~+l%Z4VCwGjU zQ$Fe(Y}UzWC7AonpMsC#*M|%XZ-GB(3tLQqYqvm1K?{}>IGbgrWH^0CZThMw`f+XQxyG* zcD{DqR3W3XRgpuy#@3>3SsCfH!^8TU-zz^n?_=Cna8C1qFTT7{)x?+w!(WvdzEyiDaXI<&>WpBzc!oVoYWY~>a` zVOK%P&y7vo8OHD)ZymQ?&xj=hYV5tv(tRBrbW|9&*#9c!z~L9Nw>F)Y%jFhj_ugvW z&qeDcUHi^LT{VX`J3S()B@8|UH4CDFqVp@R@6@HM&nJ&Sr8Zr|XLadtGjp-}>X6#? zUA44Bllj=t$33RTD$Z>@j}c+Vg?QW;Yiq*nZ+?dO#h>|4?_c6 zKftygT|(@rBzL%f4953yF;Tp4^3lSG_~gpKB0jiPA@yCt5{@H8SBf3Lrq5{3kAChJ zPtx9BduVpkY))L+?5e@#!)pQ8<66=sm|f5?t@%(z`XHXq8v2|(H)FE<%XE6*Axfac zt}S;lLOUxnZXXW<6MXG36uy1<7&pFi5ZG62LqsNUN0eb?yx{N}rkZSP2jSHGV4 zc}Ez3h&7S5Gx-ls1RNjSr}A{7RP|eVee0h3yKNZPg+NgFZ>vD-JD}(|i0=}tE#bGG z8EZgGA6Y%Ay_**0@$-z;E=_BRtbX*K1R8`l^EHu8(dRYB07E_?;b6c zgRAv?ilOEA3CcH75JgVgplye9`{NH_`O1@~pcd^qCY zVe!Ai4m{TKZz@S~GJBU9YhbJ|xhXXZ%kyfF?_Xa|y$SVcFB-FKA&3j;wF}Cur*`jtsaxAEwSXKA8lt z!oe7h%3I0-`X=@G5Zf_KbHl^gYNyK0Fp`6`iMk{ZFaUGQw%uSyh8_#iTtC@$EdE=4 z*qFQ5i$Oy80=Sz7J)#jqAjvFw_}4!X&z4Z0yPJdWaW@TBO~rW#8T49A$oDWKI2LM8 zgP(3uEq#X_xw<1G2gxMFz8Z909Ff>3pr6xbsC6Zds%maW(Qg>)fUAUBwp{su&vkZ? z5g&r&2SKoa1PkiR(s}cmzSZ2%uQ{VU5Os&y@+7QYN%K;+!y5=|27bfqMD<8zHA2mq9?12 zlet9X&0v&87X(TW?tx&RSNH0!``-;lypYWkLnbCJlp-T{+gPBE(uH~#h!>~$Xyo3` zL>nN>P|sp7D>OM`oXq5MB0`s%Zh)h)@Ci zLtmlzvGNA5qpztu>Mrb$M#nzzP_}uzLC8PLW;t z`Mo*M5pJ*hHR?uViXa}qHI0CNw>ya`w*JwzKQ*-B0VxQNw<9_NFFEtaHqXq;6x0lw zoKmaKvaXrPMbO-AEA(!zCS1`{Y%R@*G~^UB_uZgWg<)%Ny-}fi)S8Z)$EkVLd(%_A zDtr3^IZmAK+6GUPk9fZGJa{4OsLq}?v+Q?r!6|s3HDu*KhUoGvr_x22EgLQOhOeHM{Cps6I)4U*!~I2I2f?>HN=S_Nyf)ZFUu2 zm+)d*XWUCwURx(|p-DL!xj!4xQ|3ChhTzcl+J?zl{ZR5btB}B~7&1BJeBHsMB64N` z)jB2r(_hB_Sw45oEQzbndRFLIqV6I*y9#&u!)`virhd|w_>b@m@4~jSdVK0eR5aE* zpO6%T-RI4W2)MqtEslQJnRAS3gK<}Dv1BD?y97dAv>7V@Bvu!#wM0}Yx3X<84CyRq ztutLNP7U}=es=q$sPF7pTet?D5(+%L+kJ8tg@-nJk>RP!O0$-7=3yPB7`ASAYz^GVw%R8HR0C~^Ee%sgD+IaUc zlP=>Jl;j57oolQIz$P27z!NFTL)#yJvn^#i8{W8LyqPd!hoG@QqNJHGpRAnelrX&A zU|3^n#%W=3tG|GRyyJ!NA%Ip15EU#KsKCw4?H_M&GHsAqyw-Wm$n>G4lQRdZNHE_` zDz1WSl~Q4!)~!E!fbw4O2!RvT%ICt@(uF~U>jFoV1rP-w_=6Hg4$vb@kOepHq*@)F zqNFQOatSrD0@=IiLc}is5ddm@n57-8#vGz5gAd=`1)#7%QUrja-_qkiZTaA~ z;l?EHp3&1OS6jDz%5!+X2%0bbG4=^*`Bg=or??vh9jJ31&iopTw*8 zhYi)Y>o0vYC<_hLVnSU6eX2$ylJ=uW#-OcMYB;uQB^T+ygy@hFLeas-kGi|^RFOPO zW*6ljukKU=9M6SVEHJM&s2>YUV-3W)#0gu^Cn z^J70V0Nzv%)uIQezaP8(`@to{@tIv?2{SN55>$e0w2clO{dP~+c1OzQ!(Z{yF&m%@ zZRb83GR1%IHT=NVC*f8QX3U4DScC;=x{G{9MRGwE02Fs1hFEl$xE7|65#?|0)jVPR zGwc5)a0>5VYL7(>JYk%(4GC+T_7p%=xUhyb!li1gcKtL*fN<(6crvJBYJWMgzHRp{ zRG0uFD}dN>u~{3+Ln1qzl+fi8+cbC(4Hi_NE}j~3(OV3i^;lZN7$Us-O)!KnDn7}e zBiwNi9Ou|O8lwFElhXqDRbL6M?k7pN6is)ED$M2*2B?YukyIb+{;yrZ^TfYyYQIxFZ}v_9%)U?|XDH`N zR9=6qFoydtWavKuTyXwy=>I^5{$r&Ujv)SBzCSoxF`QB}k#>%sT6LRMcPsDQXlC66 z`}|;@FoydVFEo1ke>U$zEA>=<>&%(&2uRd(~Zvc1g@rC~{fSd2Q^{DIiO!uwDraNz1MxR{!S4sWqmT=xazTAIz zwOcrEpLjC-;N{SxXa99j-+%gA=rNcPZrdNN@}`zXXFmv42KWCB-99{gA{hA}p3wj6 zpnknR{V!7J)Bhe*fiRwn`rjDOwFLW9$d-1L{Xq}ru242kbbDITe(MhToB7LLEfX%K1ZL=!LAjqVEEWU+JNC>1^@9FM-F$ z$Hhd^SQDCj>-}v=(~sw5?**?ym6E{V zBT2!hD@`IsVyl8P$BUG$TjXrkFC2c(*q=6bg+ZA)t0snb{j?D5xJ^>aGBJ`>&(1)! z7$%!D)SP65b86zxHO4Sf7GohstoQwE4uKK{KDoWPnjxv%%q%?TGKrN}+WmqQpIs`e zX3UzYiCkd8U?E~@CM_~#2vWt1;Qz2z+FeR(?@ju8SgEY4$%5r-A&(uoY}Q8~###y2 z!>E?`-W>CB^y63h5tGsfW4?tgDelC5Ykq>*>7|w}8&XRQrazLcPe%{Fx0m0WXpOor z7bH5Bj?qQ2DVh=7=WFJy!28jSxQ@FxYyFP!De|s*QufUTX{3eT9kc6r@Cx%;f<`S;I^* zlPB{_!{6Q5vRKN1oD=?)^fDPocQissF%AJx><;T``&tk)U?<%*HwQuTt__DEHJ4cw=@R`mTU5K;)CMsuw73Un z`w5$g-JjWQt`Y27d}-D-mZ&YapHvS^tnI$xHM{9YE zN$)qQAHiM{nHqV&)vLD-m)zrc%TIc4$MZpij>KPER)S$qtRwVKWV(Mo|9M7ln8B%W z887nChfI2-HkX)IJO`DKcvB^MW+w5pag~Wn%N0IEhpr54Y6>XdaUa75I&Kf zE;ju}NwNyEg)-EWR~&~^wdK`Du-W=15VSLaFh9g3%NwbRQnjIJid;ZozF?vfIXFEq z4VPISg&6afR2!HXq9(w}QDYX8&TPy5^ANOae1+-NBKM#N6UB|+5QfO@&kEj}tmo|~ zZf@n4BU-q}3whgoaxcnUON7vWyl0E-CD{KXwRGH#KlC9VYd7lTfej;v;QW}-fj;Lm zA6x6B1o3ss1)L;LSvCl?%Ag16m<;zfdD%j|p!kyL!SOngd*5$4stWX|C{FJ#VLUR4 zD@&VXLF5JLJjRmfmh7Y76-}`7EdZhb7btt1pSh#il@)bEgD9;5hJTBPX>wi3+YCF; zn{bhNOW-X+Fi>O8Gt(lm(FNEkp|#dR8JTb|p@xV27| z#2)F#j~<5^ifWYm%8os`e!PwgQKm!0K~#I=w~`&6q)|C#qY3Cnj=j+XjqjnY)+BLn zk4O}3F+e7h&_{reqiv;o2|L{%0NcYBb+l_UpdG)pFDiyn=-p@G{umPG;O58D@N%K% zmyM!YLd3`Wv$DihkLn7@_hMH>b#L-uLyObm2O3c(sFjP`1B)V`OU~_(wn44f*|HM} zpr#4rM0AbYp}k!~;EY=p$Q?&wWt?6IUv4K#9p1c6&l=?v)^wzXik`m#x8>#L^|w~) zjdAr4Q$``$6x&C(ra!$&Ki2*7F(6r7;7n~H^KtXw1l2h z;z=J7GemrHV_*#MgvZh{+3QA-L6xnRl)vS&O7n>@LE?88G)lN;QnZ$_7FdwXosyjW)b+Dv4`As~5az4HaO;g0)wI+YT8 ze<$2W#LavS-_y0SJ&h4hHII{Q;DdUiX!*7G)43sr?d4G%leQ_H+aR%Fd!O_;y|#A7 z*>%9;^3T+Z`fau4lO{OR!w3W8AzT=Q7kQJA(crK0Zo#y~m@~-tq^FCV|74=pTN&l5 z36tm3gTb0c5m!MTtC=byD>ddw7;i!E=0mn^4FCalP~%*PK7%J+K05yqI>W2Z&ULfI zxN7F(6f0$=Y*#I(TV`1ut8DSaD9iz@d(2bCVD(Qa0UMt$mUQ1;-ag6f&`JH0&TR`EEoKQ29s zIqfA!L|Jz|4fbdzVeyKG_9QXzEt>OlwNCf4U!_aE_?>0c%x-tC{3>HDNr*PF3Odj= zW@uG^J#U`n#OM#&=GEma{Z*1{nJQ)3 z=3=X?43qAb$W@lp*sme#T)Det{g#2qJ}mbJGO(ny)8Ar#3wi~~{@Bz0<(PQi<9E>q zP->!Ud0(+C7>gF?%1H{QA*bkAyGHsO%2LZyThqlqQ^zB$L__$|^2c+2smiVf%^OuT z9On=xW3+)is=xnfA@?iGDjvLNG_-9bZ%SF4IKmav^L!XusPpN?1FdpX;;z(XVyMaI z!PrbGOJ4U6HmC^Uki|(;i%TDYd6pb(w#n5f!E>dz{p@V(Ro3V2ev1#Z;0o*EAbcI- z_swGZseuYRWet#c9Sok^iDnbYk~1(eR-0ugn+=h_6b!vP=H8~2_BRc2$Nq@cm3^}2 zs8GQ{9hgeHjo3A{lPX)ZlPeC+tPL?-*U1Vj;-ETc!wcNuiFg~9sh916w;=xC!n9a$yN4@qtFORc+Wf4Ki)?In{o(tj73mBt`GJlT+PJ3KHCn z3}%K|W-^5$6@s8XPtF~&`(2*JI~kg6Ru&ndzcXxQ#H3&W?{BnC0*9@-%K|x&U1n%q zA8^Z|9G69QawU_k1XeL&LN&!y=jU`e%OS94iyF@m3AK1+A-V_sO!v2=B zbfB_q{^d_Nmn8(g8HjNt=j?;3aaU!Igo}6K5R62F8M;~!Ic2yHBEPgd*RSwbOK#zS zskcqiB^dQgob}>r#XmnzE+x+e_NnhF7|7k=$qe~= zg$@_yYoy*B22scS^hsJaJkYKm|M%U{dnIR7JW#>31MjXJU9UtqGGWhbwzeJA&K^zJ zCE5ZglH-fXF>zG#_ytZRzXC3$GEQ{po6Re#KWwN|+Qo?Mko0=hjM`+Y+oDTsE%t1X z0a<`qB!_V2fdjIfAR4uN-pZCvsMK*Vc)xdYZU5n<0{2{+05K9++wPz zdBtd>%pNHCXA?E*E&Eb3Geqi)M}=pcHt2pW@!UKkz4&asDS}sph>+bo`OUGw-Gf00 zdo<5#Z#8av&q{7`DC$b@O9`|k!GDBDx-Dd2sXC z$%Hf9i}qZrZ%1b*&$@HyrMKn+r96VewZOGvsD4##(JWZAC9M#_XUwUUsu&@T8u~bK zVF@10zLDB|lB+Ud*Co{H4HA}azKfm=7y}J|s>0O*^1?W7Wc$qOlmmT<~2A8xFkZb=FLxmz5#SmkVH$Mvh# zKGl!%LOX+hOlnRKmUqXUO|Hy2h*jNqoM_Fd+OonXp2}G z^Z|-lRyodfEd1cIBgTw%O6SDiz$KG_#`zI2a|&i`MA(l_KTU`45SC~__Rq@7rGQ>vo3jo>^ek${=sXD(^G*d z%f6;mbL<>vp-b1(uW#A@A&6nBtus~CsqTZpF zoZU4a$Og_mkCN5>yRZHtM#<(Oee7g8;psnId(iI(R%+izYWw1J{xU^%I~! zKRPxacfB}vMEb^ojcW0^ty$i;u_KbDxZ1ZBX6xX!gtq-AT_0*H-#xYIs>HM98#daF zZsr+KXrS*z_P3;tD5?iZS5_rl?2Lv) zk0MCSTnYEWk5=bcG3fOAvYQlVM$w*C%b(9%yUup@-aF#o zRaZbqICQDW89e%m1w^s1C-wS!uqp}*kiR5OI%f9ggd3g@;df8LCq+1Z?RV-hZE<7Z z-mdV8Sk#T~=KK`p`4;r1sQi?>p15n|AGq5&jX39p60jmVED1hB5Z^dIMDU zfen-(z7yyTy#>!6-0qbP-XG>*W#D!2r(ja(0n?gC8Zq5Z2inZwseb4a;d(q(%#~rw zy?Oafm!4=T#W@N<|E_yxcf%c50vX{)qOgAdXiUu^=4+|4duW8M*&7NET@)Ul zw2X?O<}en(!k7uYml%f-J&1=^*XILUKSBbyFK+){3^uFoZxhK~JM7k}E>#mj|tt%Qe(_Lm%y!BO6 z#k9kc^)PGAx?2YRN%1950Qc`QA_yQ_Web$xNcFlGFEf|=OG)PRy<$RLbm9Ryh+EJf zRg8MrB`DN)6YQj%;Nt^d8$T?HyQh^66VHTodM-|{TqInuxW)-+fc+xkjW?vLHyI-2#g)00>DBLw%}&y!Lk(E4iB?=xQ+ci1f;=(o z0xp;KerzcrlF=W(4|x39Fe`Q}6ds_nR!zMu8S%S$;R<2?{GcxC3T$f+r?&ITLc*5C zKYhx6ucX-;hdPg4i~a4WHC9%9*ifcbq){vEVLY@ySk^lm6{Z)?&?Ng6ycBh>`aSm9 zbqsVE4U8KqY~SmGa{bVXm3*Gu>sp&a3-EA6s4=Eo27@M6To6t>(0uZ&25-*L%EV-+nbZX!dR;Y`5dS&6I)@x}Rm`*|3OFT@^m8 z)9^<<*6>j;q-HmG3ZmA77Zcol;9g5L$uJAOye-5O?!9mdK-HIq!p&#(ryxIW6k)U= zP=$q^*DDeCY}wW<^H1G^^R))Eq?B#Fr!p-qCeI-bf-n|yX{|nZc(%NvWng@6brW?> zn`+YA&FIOf+_cXM1x+?W)W@_nE8aTI&ZtrPzDddHS#7!OkBM>VH!U}P{Pu4t=_k42 zrufA5xOi1e>PN-DH7@i_@oh5u=1j9Po1&X2*Eg@c)lqMn3CUD9`~FGjtUjOH9P~O2 z9{7DOYc{@TZIB|O{$Tl<-89TDW804AOqV7%bcy==hFbSTp(tCGlE_sk3A=Bfq3%-c zYFG5sI_==?z67tae2#O4$sD2KeN%^VP=FV?i$N_Z&U?7JZW4+rsg1fVFrFUH7L&Cr zxH+9?+HO#{|9aBVXZCZAM%0tP6M&6OY;1r^*xD3#FdOGMY4TyZ$+4JVQ=zLnW1r6< zSOxUWF`DvZO%5qoh0k92Sk`$v{e40VB`Xhs!fX*XIT?8`??#P$+I-I&;pCiZTsCM3 zaVQNByDe)NJj@hPvh6I{dTHira(VN58beGjuP~|>XTszJqdYGK<;Oa9VYMc;9kWsM zQ#XRD3|x~|Y4tLH0 zQTA=E8pY4B{DRzZ1Ju+=;$Mff_oexhrYMfL9Z^m)Z5!MS^f)c!9Ab}l@nacB6P6P4 znT74-p^UYDdzlwM8w)Tb{1lj~sO;n+TblAXWH%?*y+YiMiGPd~!_#=S_L227QK0O? zU^=IOk!88ER#A!FN?sU5%N$;Wm&9*Pl#1kj%^F-#^nx35;oUMTv*LIZ+cRQTzxfI}3{+ft12pvB zV7;JrY6$c@&atbTUxv364jm`E)!4`~mM>0NO8QF%#7<@U1|6d;(8{_msbqpms`C(AJx3>5!Mp>Hs6LFeKZOsk-0R5x_I?WUejFU0v_!f`(Z=<*~Qt zlRCA{x6RSgUo34YXpu+JNr24_|7f}37M>8`kya6r_G0|L|Etrwm!y00L>?Yjd&3O5 z((C35F;|Pg+u0GRWeR!HWOFhZsC(p`G<^=IvU14sJ3k$*GI^Ty-mKB!>{IB~GuCRF z#*29~0p>CGwM85ohKM!6#!KJ2ip&Fs&pr@rASUW>T<3jHX_+{I3%BcbU*FY&Vgch zg|)4yXXGnJwO}Bi)&?%NDLuTJb3yU=eGBn9;TI;prVY(NnF|QG&YiZnx~0xSC! zqv`KsQM`*P=NLP~cw~$WT>Ja-e9@_q(LEKBrA8~>cYZJKJ7P&n-+d%3Qz4B9GjW7U zSXWPYj(h}_w1dP?VZ8Lc6Jc7~w$ev~vy>{iFqKWnekO)rz;QrTq#xK=UooiP{s3V& zXY25qsKzigD5Gh-Gjum|km8f&v<^K)j?7A{@hOLH>+0<_4$gnGwL0q@FBjmG9M6re zebkwGE(`0yyCb zsgGH57w!Yv$wOA@sTxZ{mq5EPEzBXOE1Cgi0fB6q5-wyTHaS8LzSna)!q>k;`w zuMu9%nQyy&MRuCMN=?OPIbs*V6yf!nZZx>|{@7p?@YhhYueLn1yj*jR{BFsYB`M1u zRNM>79Uws_3|*7M+h647)ntgb4`>gSbHN>cEYb;!qoc3vZ8bW9z=dC|ApE-4dUojv833*PE0SYZDbEVq9P>+YSAJ;Kh~ z`tW5t=4FS3PM80(+=R{bQDJlauQSIb<@(;F4v&;eK4~3+$GY8*_j#q=5Ej`1r>^;* zY-gO}d9iN$vaTEuLfz6Yg=Jrg`M1};@$ZpIPH$A+mDtlaV+%SH3p^+l3czSGL}%J~xt4H<5mR=s#`vgUp7J zf(sJ`jnkPI<}zEJF!%^8gIX^|F4rrh=>~!YI$a_jLu#ke{$#E^IL-- zn}*(WjDGAG|8jYBspsC?{=4tHCqDK~F5eU$u}posJ-OC9vvKpjuv>pV{Ahlh|MKqi z%ll7X3A^>#M{fqF-j2+C9De*}a&G0(lMnaiKR$S}K0LoMHorOYeEt6GpAY`++272* z{5bP!`Co6(tF`HW8FDMHgjM^}&l%xy%j)LK|KD*7@PFS+$a3@kKf!X_XlmV8(lFMV z*jm=w>=!W>71B5a1(8GfK}=$Hu|-)=n{`Um!vYKvIxa>?Vg&(l@0443P1DcrD1UbJ z=lI6H5Y2=ddjOT`yvDPD!)yCMsI4Ar_% zp55AWolD>WH|@tme~&algRjBqxtN33PQyVMmY^McF+@jG+C-WKXYj8|Yk6t|tRQJ~ zoQJwGg#bh#0}ZR#E?Eudf-qiKj8mHEMcL4=jLI@42SOJC8W|W|qVADvN>|cUmU4pQ zNZQ%Xd;Lg6=&Q$$_5!i& z*XEmqMHW2iny17zQ7jAXJ*1u|5v)D$-gmIv@E>_k{;^c;#!9jNp*6zUmB6+?)pl`E5Z17v@FnC+V3u zZ?7qYVp(>{yXI|6ev0z7wO$kIX{@+_=mRI<6^!J(3#=eGfy;x--1N@G9p+8lRp+If zU=;ZF0#nqz{M}h#KzN6c_SP^Jm02x*nM7RvatlqucA;Y4+zq}Ys$%ZFM*@QUW zxfN$Gdf>6W4D_py04h#ZF9z}cWSm_HT73$RcX<(z86idXRS%WIFJ>!MOUF(X;s?Gf zIaW*#Qbf@m(oaHA$=NVTf0p50uW~T6)&U|+jr8uAXzd8csK`@iZom1mQ9k^qEtk#60jUWtBgi#ix$RH z{gf)qu{!7H409ANUI--n>6}tBqwG7uuu0TWD2|^9`*`+X+$j1a?@ry~uPn8SN)I&N zp1}2w34P2NQ7p+#&!-6E24$&HRj<5d>g2+^i!xn|@fCE|dLA($*#@4HbV*s}q=@so zKS2wZSHn*}{a)i2hxQ_8$i$7f7Ax(kd`hsh(5kRg#>cz$GXS$!ewwt}h6u9yo>NNWgb4({A@* z&c(35Ol6*VY3oiQcZzm7K6RFZhJyM`oxmyT=Of@jxSAG$#nCNq~DAquND8GoIA z%}Uz9x^zGsa`RYXicc>XJY#6tI<44ZRSPOJ_uTeVSLQLL1yml*b9s(n2|mjgOOhQ)Kw%+jP423NG_i$-aM&GL zP_l5GjWjbRhGV#A3W0qTReXi1qogWev@gvomnc0{j|#Z&i>o8+un7$qI6ywG>4E;t z(~Y*urP!%=XUjN}xBs=3_&`n^g0m_kZ`bsbrH~DCj*r@-CkFZI-^o_~DcP9)o6Z1W*!K%1apM~P#j6bX>A0+jBupaV8ZEa@?{ z*Z%dr;)yk5TZmDv+RY)4AD28Z^y2%_1BATSQJ{pyDxh7Z1JwqP5@>>Apoz9CPu3>c zT{1GPtv^%dBtkq}&_X6nX+iy1MWVzO-20_-F-c7#d%6l0;Xu09Ksg~71#Q&l`sEfZ zp%UG<0MT&CJoC*5#wIPciW}KjJKj;iadn&BZXA*0pQ|268|o$hWNQ)Br4j~euj#7h z!vnViF)fp}M>OEv8FP>itYJ7ZDJgPQFvs+j?mWmUYg8O8EGY)@Ed|ku+GW@DViBfW(*;rcb{kuMQTl}(OGb? zInpB$ep30+8G4O|pqJ1zmvOtgDP!hglP8Mz4i?EoyUQ}HP`ShDK`~iyZ=ly1ZLiqO zw=~!_G>go$v#;^><4H3D$kle;aZq>zl@BsDp(qc7ELX2k9Ex`YUcHWbmO{OXeea$_ zaKgHnSY%`V&eJ+fhHzeT5v_>9<3tZ{Adqm$>0Z@pe;9I?kvhIX?LHFefu5QVgP8EH z?xS?0WCEX>{z_rtW)%s4OQ}P;Nc@Z$&x=ZSAc6f}E9e+olIoAD=Vbl)t;S!<=h7A>#!|pFQ|3T++tfFJJJ! zG4bzEDodZDegECjwk0Foui}~|&^)iN9xZJWy+7LbGt(&&>lRA zPxSmN+gaP~lVP6J?(9WTV8z6-$8HQEEfPAQojdJwch5r(<>N(65uYY6n z4GWJV;&!i9L2+izulM$6?gXreM;wcxglFYIApNgsrz}PKQ5K5ty@qibRUQ8-ckV6& zU6(gpuhak^7>`C&wX($I7gHKDp$<4vKzwWqTkNo~YFw66BGa`yr)|$N`us;eBu+)b zJ-6YP+SFi!s3+U}ray6KK5rhex6FBf_A7yo#zB~<49la)Q&=1(hzV|AklT!hm~xKl z?v$vLly;2=Q~>xkT>LLzSNo}Bc_uJdJ~9M}`|Jhr9XTmKCB2>RwW&_nECWmdI1ecy zu#+*R!_FoMAy9~|3TzP_wvENa$l#lJ$nl+f&tOlAETVp`>rlJ)$Qxp!`G6!|ld%>b z_gMZx7E1;a9LInL^A5+aL88X6971MmA)Yj2%lT3fGf4aTBT^jjAn%m;p!1V*h0|TJQiI_0 zHRGw`=pA=+eiDHsw#u<$z>kwam_msFKx8xKd>3rD1fa~!CZqDq1Spwzl0^WrAp<;y zz!i7Fuk_071rj9&(T27%lBLlQu1d|CKD}7w<*@ZOI_!Wsu9yoE&gE>V3`TcuojF#q zW%q4IdNzkh ziAcoiA{m&|T&45fXY7dRSl;o@AMST^tdU({bvUk(4o_`Si7$(;WoNk^vxMp>3EO|w z?k$)c*13>`Eu+H?6CtV0Qxg6@R91)$5gkQ>nbLFCHqFoQKq(DrnJnDpaE5P-GIiWR2b;}D)Zu(( zIPo%5DC-2sb{WlpIoCbYMN>qjmtU+<4v_4 z$4b%$N_>7=x1j)N7xd0OTnh)W<0<46H9VCBc{~l!B9NYh9c}QtP)lMryF@^4qHiwOD93>zn%4PBD(qJ|75F#KP#CHhN&!~(!K+`SlBW$ zSYQV$7oZ#S47{-=c5HMS!P0aAj5Ws!x9(dyo?rmqjt1CCkq^6T`58KU{D~~VdlW)a zDqnd5vb+LmcZ@9dj0p$J5kSult9E#SU!h2MAN&bAXitainE*GI|E1ehtvg7gR z7Y;?RtFy^2b!%WbhuWvsDaAgKI4*afn)^Jjv*-P}KK~jh2_AS4XC(kod|;n5Rvv0+ zW4z-;G5#PcO$tEDN^PMJb9)xdu=_}sXZT%GB-bgNgU?QEo=ba!(-M<)BqiNpS%rHu}f|}|0?{b1wamUV${~TgTdGkp~XA%nbAFe z>|PqI@;$1c9eaTbDcaxBrhV3nvps>pP|PYO4}63`)BRT!+4OouC^V&@j6;u8Ix zyDJj6o`O-|(0Gj#SDdlzayq{FM$t#>J9+`5AGspO^9Mz4z7sxy_Y6gMRC`LoJ9BIU zUn`Rc;JBw9*H8^15Go%TnRrDj1eQc#!53}kj5;OUF*_Cj&i&4S$b8xMtQ`)3d9=)} zpEu>>Q0*3e6EWBlCSs%HkW5#VBMt+#LS_(z!kZ&5H1x%+lUHuELv3J(;u|H?2cb+w zsDHmt-fhXH;pJ5L*9lx1HvozSiIY2Z6%3I8@`nTd2)D;efarfKM@_*hBpDRw;*4~Z z(7ckzkvAhwm**fWL0<2d>jbF4TX_&|OOV;aLZR2t{`9tKA*P&Oyn2 zsP43e-k7tz8VufGV;fV{t(Fs0&ojG%{umw4^jiGu2O!M#ZMk6yE)7!rf+IztzXYvHPyu7V1=BwfhJ-w=h)d%e-;M5;iXA+mEe+*E zP7=09lV#S@uslZFRjt6^Z#54rJg{XTt$*zB6|Fw#yJaNF*mQ=0n?J6W z1m;9FAE_C<_|*w_DIZP_CKO|0ureKC*t_qfxa_<_x)nyy>a>VXrNg9I2A3{kOS`~7 z9`Kc&I1UT)=I?W1?f0WxJN7`IRL9&^?VbyJ8Bk2J4UL1}*TRqz)hF&rCW^^K{QzOs z*it4U>`jzx+~eib&BqppZ>4fOf_7+ZX*}^9K-5mn!E9*eyh+kR#;$TT6pu$`poUr; zr?s+>4B=0p;>lQ?WOdf<=)p;_LkM|qnb9tikvOdc*jQuJ=?EDF2HOlOGh!KLXXbbB`?#Ou*f00-yx9B)yhyUv zb$+hzc^b{cWdPpVN!3~)ZWr6k+WJgACeSv#;tf^j%1&ao&KlEYkb2|e>$g$0tDqD+ zow79Y$$8Y#9f+X$q4>c*gdFX0{)Nss(o*rHIKwbgDF3r)gAU`F(agQ5@mDSLFLY#p zgYO_@1i=efqz-7lNiMi?r88$$0Ny=Q(D#=pdyNgQ7|&%sr4F|WQ>aa zbXkYC8E}*#`1#PI^1yxJJt^T(w~L_`fc%+9d%&_ov9K0Wy_gyO5C{$NPl&1KS)B6Z zw`bve>=DYjVn@AGyizn2i3&!uvsTb0yCDMn>wUo0j+CW{@e}`v;n(1}O(wJ0SDzO> zml>R2u6nT0*FFY0ByHE>{_a`4$TL8%b;s^zgXH8n|~j9j}4(#0xl_n;Hw;oNO{ znThFYvPI%2tb59t5l!-8#=vsvkLnede>%Z~0Fe%T`WQ#?7^RoVb0>1J+a0&weG&7k z$zO<>D*z`-E>P35AvY=F%545;%PkPm6@NBvOAkU6#}`M8}sBr_#dH@z}+=Tg-^~*|6!ZCJJ0cXC}P@R|CgowNYW6Z3yCC0k!sKRZxLSB#^ z1Ckga{mhRG?tlby_trV1^-F>sbps`CTYa}Z*+>-xtNE=xoV$)duF@j_6ds2P@Q9-9 z>(&G%Lu-Bes_m689}bs4q}?E|U?>N2R;U$iKe%Z4NuU>Qr&`DBQ_8l;ZH~BoUT4yH zT5>-_aWvlbi{^6-?eWCq(IBAgl;vAkbzcP<#VUlOx>wQbM2N6Z(OM?LLyid%y+a8 zxEI!LY36>JDmZV44J6vsT$U72Cch){D@rQhO^Xvf5?-C8LneCDKyD!#qy~+lHt6Ga zF{`iBXSz*Ce3ss8nAudwHM|8|%{toJXJ@FW6>jZy$}&159P?4}a&^|M z+RrUEZBzE$P?KqvJ~QW`DA1858)>@QUd?IKonK~n!d=4CKbv&QX6?NDv@T$GC{MDY#ooQizeU&#Ta`6yYKNS&K zEbUYZ*E?t-(a#WoQV?j~A?J@6hg+BZ3Na)w%iN-HtCbB9Ml`VncQY3qc&@HGc`KX2 zD=?^FaXe;Jn=5A4E=JQr@HPj`gGve{Q`Win`pkor5;?{4UhG@7FCU;bYQR{966n&b zP^w>9Rp*oM08eM+1zRN!nIY4!Ta~#r#XHaVGO(Fe8;!#UDD`)Cz7<>dd)7GR&58x! zh{JWBMxd%o!-r+R$KDiOj9vFN-{SGhvEYKa*)I=7PiPHl{sxmZ$;b}IOW`z|nexT< zhGBOgH%y}iD6<-(1q#$8!eh4IhYD!g6kvmU{Eg@AMH=*Dp*q>7Ih(nZF(ehnRA=6J zKcY2pyW;cE9)?LpsP9?TRcjeFmedZ{$5|Sgx-++dW;korVIocvwZYDM?Zg`~HlHC! zyxAC`0P?hNYFJqlBz&uono1ajcYw?{CQ&xJ=*yTytIm9bd}*nkCzxofhq!{LH|593 z5jq>sBqahlJI^82ZRVqZz%JoQ=NbUV1~jZbV*}EuX-WMI>3WQB3-1;Mr<%BKvmyqM zRddL|L*IT0tPUH;z_$A6b=`9Kf~0`E=7s`;qmZTHTt~v8tqng@0OXVmb6D5d!7|?m3`7}*x43#1oB!by9-O^&IXmQ{8N=eTi4Wrw#ywr`faB8i zXC?yWZFWM2Yy;-9kFw)Z)i%cp z#@{&sEmU4VG9XNAT9KDM`@p?en#jaNi_I8vd~W*gLy{C!cgqm@lroFdAS8dWcLBHQ zLu>eb%0UVRgeNevZJ`;IdUj&fsQlZ3FqSTXskT*Ktvl$Rxx7bF}Y*Z5yBH=~L^9A(~ip%3$;v|c}s zrXD3&`cL~z z3pg@Vc*Ouw!bO-W8MdUoWy|(mmUs$gRJCYdYafni#rA_5`;xp3o=Z{Vfdb6~N*#dA zg|EH+fs`dpyqm^yk!|CF>TDaBRofh5ZlV~SPCqXgd;Z=Tgu&m*-Od;-4_aD?f|9~u ztptrVsI?irb+Cgl!>xRsDIPXF?9!>CFG4j_2GJz);23L0Hw^;y$ zB(SwK388AOjg~ZJL#xV!#uaNp>wq2`@Ajl^ZUgv``K=qITy#*#EU8LnRk&=P2O?*V zTD$FzDiJWZ9jH;?aGf{IKmL@{RQ(hgFQchDn_IY3B0fd-Mb-W>+*h1H-WB$nA$0zL zG;Kir8OqI~vGb3D+Or=jo__~D(6#H&GRt=kzk2HU*B|hpi_H(4@A7D}-PbH5lLM~- zCJoO|vlf6upzQDr>3qIlYQP?by44PU;`{EPqi;(THBahhPd`ch)hBny*UZajxVm5e z0^W!Ajzplips3#K{mJdJD+P)_T6Ry_gTmU6YO8VXlvuX`>}0ZUbSVz;<#xW#^;afq zl)yqBWt+^_XI6pYGfwwoDp-!S4u@7og5bxWB@r1zpH@6#LLX0fYoD4IS~968#NY}yEZ>mGyfs=cK@OZy*l1vo(S^8o#qlq$&p=`~Y^+b#6s!EgBUmKM9; zow;Bq%sP8nMu@?1C{BiVmN79ah%s{QRJl&JT(?ZFS0~r+lp74m4X5NrujIxHaudV= zg*-qt8@Pq}KjaAV;x4(WfQL$V#7W)%0Uj59k}j@Ex$s}WBlSPPSlpjh+Ld|oYG%c?V|@8P%tLr<`#*Kjp&dmdvB!rJ zPmIQ^q(|wUe;T8wRMO*KnyPPbdgy5RaQfN1|K&X-_m9>*I(q7|;B;4Rc@OW*718;t z1(It;wf&_{*H51tR0R+ORWebPf~Q*gS3Rf-AQU#;J5f8C-SAkYK5`o-Ma}mMTb~sC zm--kLtJFu^(AkTlXQX%jqdtl+DgIgg_mBFRI@>j^QXf^9ltt2+6P>dsyJsqUU!Cip zt5VsIj+-j@QKy0*-J{LDcU!wBYkO6#QWgA|uDd$fcI`<^|5(S3f8a;mjn@sb=?k)Z zR|bCR9k~BbxAZ^opRL4>)$rsLE^g5NM6H`JR+qa-p7tlI3i1Ur16@-t;lC>IxR^#hE4X@!9E{%{b*_ zTs{C}&wJ-s>k)5n#>OiU`fZUb$i{xJUNa2qI_m;;*O{?pWtqB-Z#JA9ql4vUF^*e< zB=ejsB+{93Q!nASkx~Lnp2YZ(D{*Nit&Uw2`Bs_3bY_^D5Dc_x*T8M8c5$ZE>6y${23twg2X5;|`%`l? zNELZJ)QSb@K51jNBg!a!ejM9w-%do4uE`%YU8WsS4fnP#h_lqGnXefoZ_a(yh2eEo z#}6ee{vLifS;PZz zA!+m6z1LPwSZt0_hU*^X_H(K?O#RV%EMCKqg;_DCWMpH+^Mj-?=W!oR&uO+d7hk8X zU0%ACKFH1JM;6;O&&h8a?M#yAbgf@=(^ofnnvhE->q3%yI!sm`f6d>a{3UhI5AItZJHAZ8n<;ETKuNd+hH>{g^l9phoHLo?2n>3iBkFa;w_& z<#FnZxeSdB{eB01&h=B_VVe!uV0`K#h_iy-Es5>MO;tCtI^xyyjeA_8Bpt`F;e(oo zQukoaZQr9EzTN7_>s6x-t;hSecqVa1ZeBJp8#TP1c8ssFW3GDC24(##0Fso-UY`#7 zy)}=Q_wYK52X(ItePg3$3b#QDgE8@M{PS;%_VvW{-EL}IyB0IJG~p%=| z9&$X(3$nM;@{0j+-kyB)rXP1kY!31bRlDkv=d*g9i*ccgQrD&CxoqE#|H+A#%ck2CXBXn?gXqK@Dr^Ck@-^(!Yx8X zFExfp*$O6xR%fr_&m`>5gza+{=j|fKkiwQI)8T6yasrwXG~<(B>(f$1I8|hV-ZW%K z>%bb(OV7nM^K`W3PG6rg zgh8zHD_Fj3jMia=?Cttdgx02Pt>}2UF_sOW)0sr5*w=g+z=ta(BsD@7W~r76Rs7+8 zR2M8)r^E9Dmd}uC4|6yBmh}-5JCPzMJ1NrK2|yx&^G?C2e_7pq8nkg{gT32>)ojN30qN9O7R8?vlzw@SVNO& z_4!T>G6$jNJO$$zoAst+d7^tkCDxxq0mI?nSX-hnA`S!X6fuma(Zlp9Z#<$7WhGd$ zkeU^i_)2@BMM`BKcsYjT=D+907M?JtiG|j-Dy7a(io=1Bm@SW_oBovQXq*j2p)WAZ z@ilOa;UeHlkp|+%LHOc?8r92RclRlt+t6ETm{>Kk2C^@R1<1&J8N-?-WX@8wk%X)z z?k`ypdXdoUsIn~3zeTFmF37{u^Kw!?0ilJg)mES7C3P0%&VU zJZLC$0GMT{)%Fai{Y|*+yB7dq?lRJ4N)}rABT&*4jX$IZAdYgOguq;tGkV>RRDzd? z=0qPQ5tnLDSce$9nD0LjYbnXf`!=L$Jr@+7vJTo*lcT17aM*6?)qLDl{TvPWS6B_z zNo@s5DPMQ17@oVkOy7{}fWus}?1Qwm7Imf-e!$&4;=3;pOF^RM5SP~W*(8Fk{xezI zP!MQ~iRrHF1+=Y#bJgRAv0sb=b?PGszPs-iQicaM(eL?aJdGw1&oIhMk0O@wmA|fz z@^##hK(MoWT1LlQ+7tu6lHa2oT2Ud}cT#mbq$2N*ckj@+G5uhEHt^)H&jTl4I^o{e zjA068Fch!}TNgAW0e1AS$5iX#!j8}`^9EyA%zvNYMg=iTe+?g#Jk2wF;K@hj7mb&I zYu04rgf1IkIMBG|T}~k;Y2b}%4MtOqt2X&-z#Y>iGg!Y{3_0mhEkNN;{zPobg|WdZ zli>X9#?`M@Ci@!FQej!E>xM%O`G4IQ%OrDF|nGMu zl-0?&pm`o89jcNb-f#dM9j+k`%i(5-iqY$2@Z}K9i2`5F_BtrZFyr8U@6yR+WJ4ev zodnPUa-$MS_{_)ikAaNC?uxxwO1dF`lYNr&i(2X%4!B%~E;H954sHY&A@_OUDJ;ij zJm<3{ujGjNc+_7LKn0zU zcYjmW9H|vR6FOl0CTO(`jAR||mf$qwqKu+g=}~_E-XaYv6OaoSK#^9-sKc?w@FZCC zA~d`Pz$IZ;kEb*&hb^9j>>KSwNOWO6R&)S(-AJgCBJ>X!pYj)dm?|nqf+sf<3%D@2 z!l7Td6Ph_VJe=tjwF3tMG;XGO*G{syh&LZclx@@J>@iO-=&=%CFAFPw4J+mnODM@G zRTu;~fGya$;StJeNC&RB`kZ^!t|`G<(gqmhv>O5j@3LGO<9|W6ALZ^!S z;fBb!Cd+_gDyWt;A7@BMCSK*_CxW*{ar74`W+zH|yAo(|jjmb3>8q9FLM2XHA0gM1vr9L-Bx(L*>bvD0K9wQe|#UFwC{ys+gumdV5{Xih0PJH^SNc-;TsuHTmxUxWFMN32KMUzi(@BG|Lbe^W73Q5I! z4!4GVC&e(f;gVLTX+^b<8lFfX{fwiKnt-8`zS;%V z>9-&BJ=T~bJ;$2C__LRM>pGxzDS%A^9NY>$MfZZ;I0Ut5Hua3UEGuDduez}m7zz=E@WqDUAF-fwapU97DFeJ$`Ewe zQK))y>2QUQYW=UX=&vrQQW^6qj<831zPfKsjb8WH(^bl*%R3CHK4%EB_x*|<^l_i# zTVjn}w~*T?bx%{AJKtZEjbGJfo|W9Wp6b!a4C<+WTy9`M+$HJBl0ZKSjEt1*Vco9% zK^P~igRCvU^9JaF`(>5isb|A>?5b*L=44p+9PGO;>dK)O_vq6whhBr~A>i^eY~Sj5 zf)i}FWOH2gRdhA>7z(@|LAVS_kt1!xEd#jzv*86jLKmQU7v#Lf_wNYuQKe)(gmwOI z;!ps+2m)Zc2}d7v-OYEt`?#q7u*ssOtC2JyP zO;!x{)3xP?hqS73n-BNJtn3+Xx<0IS?(R1eOGTq^YtQJ_UFmj!z2qbdykMM(U5&g@ z!aR?VWBbn(Y039)9vL9M9|#fk7w(0xd@}#bmaB?LtCwpPp!6X(;30oTk z<$GT4IurWEuZMJJ{i>iU%Qk!Uh3ooE6lXTAO;GIGY(%1=}_wFg@i`Q5bym!hQ}sQOB*L0 zGik2}Y9YHj@gWq%N7wVGuaaVwxARXnz^k!iGkbR$)Nk~lT-YL0d&DaTbtHKCIe3@&i% z*jH@l3s)1=tpBWF54SMO(W_&B@%=uj=_us?xN>Bv*JrT0*`yj9pA0a0kg3%k`DJv& zAee|IU%Xo%*9{@>m;+W&{FxCQKH47YQTOTIou;iphi}_Y%;Oqs(w`#;{*}zQ8czu6 z;<)J?X?V}(2lgfVl@9u1i+2geYtY1KhI@RbG0_%4Tt;`M5f5{XiQE(2^ABMFtjiKQ zBdu4pXYLu1DwV~kCs4~Oz@Lpf${j?A(NY{SMv166*SK42mwGC=n(JuCQQM~sKw3tx z^Sfhoe7yY+(rKCDt2veZJX-b;ebf%v>qe9?F!zI)uDOQyJ#`Ec(4Q zZ~$n%9X4xF0exG0=U@@ZVK3l_C#<5^9WkFyEJ42d(SJdT4iISXQ_LX8F@EzV8xEc_ z4)|rN9`VBmASz!ZvPN+d++{_nd5RML33Kzw!}D#VHV7V^I6)}hsQ(#oRa%D~0jtF5 zpTSR0FN2K#y8HJwQpER&Q=?EB<(eooBe4eO)H8c!^IKPm)FZz9Mdq02r*3TG-H5WY z@Ai~z?zn@LPU?x4Zs=A)RqR@ur=;5zz=03YO7Y#N1D}LZJA7PT#2EgHC(JLS&pRih z9=M@b8WUvcTs__g)Rac z&k6Ini;!^sOqV*jGO5dU8zDylfMRe1a50V}ENTFCEDxS7SM&v30z? z@dQAUr~9DQzGy39_-h7pv=s03Crj^uV?>}0Fp zGUN?B`Duj{JnP2J-=Rve8G7AwxX*VWDoDu?Akl%r0tSz;8Xh}Bmq2_J8)d(3sDks- zui&IJg&og;Luv@j5cB5vY}*P8Y79qj>dKEI)L1tow>9p1=ef#mZFpURLO z$IosCs3=04;o5b5D#M}YRaO6mg3O@oR0oy;`GFuL7 zWI^=Mt#m2R?`hppPo+=E=ig>emt)M*Ba+22JncxOVNfI5>rbbWaOsU zRxJ|*!jAnm<0U_U+2!-%K~rrrk8~i;i{HvUVVmWtI(JBtp=_tq)?8b0d|EZ=?DjI3 zi)x~R*JIUnlNdeU(gjt*!fR_MHA&(~!>u1mqwPT8$cX95*tyz(p-6Ox9v?t-TA5pK zDU-bgslV-DQ$n@l*8%qa#UrKeWCjoIN-y!f@(n{DxPfx{Jj|=^B&tT2G=>cH+U?y^ zG?>04#s@W0@d+@D*>abUC?sC0#o_30+ugm|$7|N@bXN}5@T8avzjOWVoAG$YUi_Al zeoY80K0|K^Ns%addLGyb3a3B*t{K7xs_QdzYhIe+fw}sCOF^NxQeab7VhX_2n|OCn z&0=mF!kN3?Txn6`y}ocEzSx+P8&z)UZJX3O=)s zr{?-10xk5slsoR}H&YDhYA@;TvLYS@V!5Y>m3%8PDr^cWc1%QIOWBgph7HG|sXA8J zo0RZIn5<`KmV&zhT$UPY{Txr3eh;JA%&cg*KWxa0@HD7kPF0-J63b49@Z;M$dR(1P z>Q}PD9$16ah0ljeS1gM!Q9Yt62TP0Q6|Ah4t52%Ew24(+WDzZF5*3oX z&hFSaP&#%(P?20CL9u4Fg|l$VF#nI!p2ZKr3F``Zq3^^(wx)pDM)@5vIEUw3y4iBiGy}%b-E18sFofefZvE-VA`Tk>4 zdcBy5w3q>(EYW9itYNO3J#A>Qrvc}+`6-g zAna-vzFI0XZ!6)Zu^|tTpZ$&2+Ju07xYi#45m~}hdqq({it)9r%tIQ- za|<}ruaOz^2&ctr(m8*mnF}p{#qMO#709uTk>l7QEX@P)EW8bu<`&98?dzF!Hn)LR zXCDWU3K`N_IXc%9P;Q?hGu%I)y-W#`^)LI|TDj*MPRT&Rw|M`8M~J^pgW}AdI7?3u zw;@$vHmnC~FNo2O@zv<%Ju(E%jDk$%qLR~p@u^P~FV~d=B(6XgGmd4c(=^c+;KuW^ z)&8k8a&@cp6cDMNEs@pQ8vF9fkPUvsj5Jb*mb!1JtWUDrTaVidbjcNU?8AO`Ndazc%CHM3^QOjnaJm;7?w-}gP6A$`e zy;)?Uj7MNo!!DNO*!*VgzkK&8HRnAr5!i753eIZU!;Q+(3_$X zUzXlvgcj%1e{KLsQjqFXJ@mu%5v{EUb{I;6+aXGKz5cSv@yJUqJ_6C<_3dt`|J8OuP z^%bba`A*;E;aa)#CjNK{pRTM{r1c`84{IDO;(I68{^@NvJY~NvO|H58yvQzi96tBa z9I?UukJhht1)kYaQc42v`>^`_){i$QO09M$K4m?O;R;ZAh=^{YYaYkY*Mu-# zeX9J;GL>7qnxEldXWjTcFET4|x9JbgHAFYoo@I5fOT9r&HAU-sEpKAfLm)b;P6dr2FKO0D<^F6ekic{jpqsm7JtH-ic zn-pqC^Z!uSewd3E*P`>QG{@XM#3@y}PM7XKRz z468~J|CH!mB_dJ{yV zI$JdrNf>h86*%5dS3(hpj573do*4ue8#!!AtgBaUk|9+cRE(}P{SyF)LBk$)w)%@Z zdfzI>qw7#PYKZCe*CnS|TZr|~SbNpK0UC}KJJ$Tn^26e%QnbX|_@M=-91bk~Y~L{~ zHgb(htzb(t_5y(O_2Kj9=YP?AnsA`>);r{)iH`=jbS`|H;W!PtKWA^(4B!|!tn=K? zV?-hGW>Jqa>mLmXW^W=QpY(YcyJ_c zj#)z6-1EmNq!bJ%({`sY4!9fUHeNxh|Bw4ZQ^yq5kjvGqdFEC@4`^0v5A(MMmPnvJzI+W;BQk}Db(CsEq=Xr6 zdeO3RQmUlr4QnJ@1EpSksga6(b#q^AVY>jVQ$`gxlG+o z99!Z$siBpUt7*~Xg3#F-6oWBJSoNoNjCvcxidEzsEu`Jl%3EpHWomYD*U{~J#T_nd zWu}wR>7q)kOXm0`--9|2D)vUwz9MzbeHVLc2$El1!>_;;XK6>KZbqAI|HRCWB+pYk zS%vXYSrOnY^pjOIJ)W(xhQ>+p+fJ!0r7Z`#oSW=ZLLL?+RW=18!qyM~QNm3m$ApoVVyIfDU3HdTp=c{mUXCc0cmG~(v^M-bpzQXZc} zfh{f6$aS5pAa4pERmf4(*Cr7BGO6pxO?> z%n`Z6xdc2{=f0c&1{S%*0Q6Fc?#eA1its6+^*B_$Rjw~O@-1+C~te9n+=F~TmuQBcvh-Z+06Br-NYJ_%UIWT`nXnb9K zYDl^P?Xy)?AdLl$e|Az2v0uljmSSXQGC5FKG2EJ)Wue+7uRkt_&mZ_D&z*H1$&+FC zHlUYJg*wp+-e+tH%u-DQPH1q3^ibY>dgMmR=Q~RVkyES(#Y#SG0Re!h1<0Gt154j} zGq3vzj6m)_*6{n-j`05Pktb<;-Ji;aMuuoD9rP1#&*I;)Zx(kR$n6ORuoS0>k+aoT zQ|=FBl1U)Z>Y&5kd03Qg9NNj{lN9RVX+(QKp@QJN-L?+{ZvkD0kusR~?%_#jN4D4) z!B%5eV9!El2K^{7^A`UgdxnX9Qy!tk5U^79e)QRk=4M>k!Wj2Ob`KwATO;3v9l#hh zVH|bb9k#dlWz{EuUFx5*^a7jU&cN*6Idz~tiDGn`$1lP)f!<_h&JZPxDpD%@5L~|1 zhu9O=l??0v?|z!$uZ(K40j_6H~`vRRM1sZ?#B0WHU1wd_b>z-w+NeMg=% zAKnvKgD+&EG^gJIQSQUKo|L<`lFiheJu}Y(kB~iM+Pz|SzSq*#1JIwoTNYMWcIwX~ zvgYK-o&h;!iBdAFh2=xcmMnZ?M(#VWSKT((sju1R$zJ`8N@2oh27;fZb&Z0D98X5u zQIK`?D+>Fa{#Ok~dbXJ6z#!RuxQ7>Har(z39?XjI$SYf25%pSo9yBgF4>8&<6<28{m+cg~QA{AD0T1`|EXTpxBRQ`_f4T26Mg z>b_m!_57! zUudgt>N9=T^lmGg+s1{t0e><95Rr)GVFUm|i_8E>ciwdOUWqddl<}@b-Jn`Oh(Fp$ zdYx)!nFh%lqZ4n&`5gcl?DQZeN=r(s)PixY0Ds?xyriZu2o>`yX*V0WMz9+Zwg2x_ zAdU`gB2mH_`#YHELk}2V%nrh>l1RG1a;1PNNBPa`{Wt&>QY--mShZ82b-`fK1z2=D0$EIFf|1 zW5(vC0)M#1E(h!l0JM)B6$071%5ua!jJ^(F&pU7&KrQt-FE@!okIo!TfZLZw!P^fK zY0!a(f`jVS$cY7@bdHokKYY&(%4Bm7@6UzF(V=hj&&3l`d9Hi1?F)-tY$w2)9O543 zzDZ&dDGD_)1Z;C9XHvEk6s`!WC2Ss+5eD&SI;{-^%gd(iVcuA09SYq3{3&9pLfbYP ziN2DMA_qb&$(c!q2CcZ+6nKXBF7ymyiDMV*M;Ps8=U)*+@5_>IM)8i-_hCOZwvb@kv*!nLZ7ZvaR^-h z4JtkaD8tD1Ir|!P09Vy4$2E zwp+-CaL9*lxu2VUD*ha{9saQ*n>?QA4==+_`3eIne0qx;4*{0eC1xU2eiDMd9|+-z zLUrI?YYs7rlNNm7T@}#JD{d}As8-h-S62D=DHlD_iRBrm&_Iqc0U2Zs1Uy1H@@$Qy z2z5Ey4TE^|n3T*Y>5BnZDpQe6-4}6$Xz6Ytp?>Ufd~Qf>){4A^StON@Ftd(a$_G#_ zjo~f{P%xteZ9}%swH1ZISB67JDBx+AauO4+K3|&GDajdWY__iNJKdn$4#!h;8p}*C zzdQ=M`%E{OL`)zB4MS)R*uBCf@-gtIG*2QmO zU{wMEZ+$SX3H|XP&{+ZHDzlYt`5n<%WB|>!s-^ z&%b*s9G?KR-w~+vT?kIom%8v$8)(a#GuLqBY^q+}Eb7bVrDHs+{HHkh9S_10-r*@) z8zI8JD6PKArY!q0F#m?YZZtp^n`&~m^&dL!?RMF>&lN{Mnd7m2Uk1cybK|!VQYp3J zq!xn5sr&wIwgW)v2*K$4B?KQ~Kso3`-=Q1mU};HyqHnJ)E);XoR+E6Gq#mAJ(9no9 z8HFxe0~ku%CL4PVo1z8x+96nT5gCY9BNA=_mRu-?2k(tLh6Inm!~#}((*g?_nvHSo zc8gN9ARJ3v}W+1oROypp%w&R;F?Jr~f>xxabAEfHtCA}$&b4uUcfx)|d!5A+dG&R^>y zZ*{I7uYxIn{LPSo%LY!!u3sz;9(xL-o{yDBE7@~0STfqWVb>uhWZmtiJ0t%4P4mux_HCV#++x??-U>haJ6wHB z$OaHzYpx*q%Tl6_2>~!-s?LSV?}7DUINPvX#6z=PtV}}WmfFpMSA_-Fh>4X)-xCBp zmH2=k7)Eb~K!gI^z%5?V7`nRpQ%jFPw4DnVMb)T&=MakPWCCXE=#3arec6XD|3yLr z@m4|xW+!lD1&JxwHlvAx{i_F)c|f8&=CN(co!&aUi7t0dk`s_JpdufN z5nn1TZCcI5&>1;C8BmMIiuDXs&*n1*stp0XcXPul)u!&tz7bNPsKd9Q7^Mj)IX%-$ z3jJZnlFH#T2t%H(>6ao>8^N_v_sM&S(PPQO4n}e^_{(F$aUSx+mktzXPh>ZI?MKos zoc(@7qi(giJbo0S0H3L-}-gww~`1>4O#W3Iz-W z5iH*ePT-*@>Ca#pMaA1<+9rwh>OOQ+ChE>%fW^*(F>eTq0j$I!joZgee$cRVyH}HN z;(qjF6HdylmY|0}pEljnwZIWgt#xMdm$zyhu$1&MsLw#j4ox|l!MOJ5FG6NGU}>c{ z{&~Z(YmDP&!<1^(+oRjm9%zSz)~W;ZXN#yxWY%9KU7K~|yP$*YBRx(pYR=_HKfZsp zQ&-=q!-S9d*|_V^2p_8)TLy&opNCa3_xW&?4VyP<&fHVyPEs6?e*x{ew&{g0XDG?& zceIm9-|O6bKo~!ML5?6CCB4ItWsDFv~ik)>xnyk9TVr zyp#A!hl{xHK_)IXo{$!Bt#r09TBv+X3ck^jpTD0VMsaRuT-&t-PYyd{W8*_byQL$O z?p@MIbfvTW>068Dwui|BE^wvzxCgX2RdK8`nGq4wK^GGZF8dvU@bJ+Zjj#1!Tw+ z?(GwiZzk}B%mp|56TQZ1cK~%BtQB@kxB1;{03xUqZk0(&){!4HB4iUNU$S+r?G5r6 zYqzJ0cbxMsxmf5+7x*&8r(JsAv>5PvX&UVDb^LsSA6&bVCLaDZ*Vj3-cE2~Z(cGS3 zB`zh)&_I?w{GJYv1>E|$+-KedRQ?iMx{Rb)+T+W)gciR#eFp$PYd!f35I!SYJLyF+ zj)>}AMlzwiSdW)SNgN3coPR*9-d#d?$D_bYoD_C3hg|uiTa$D9 zR_>m^-lXOILbfJuO3EqOJPus=<2Z9BC*?;0zWB*k+9+ZiZ4|rr#4jbnFx_*cchEQ{ zO{u5P@(q~T3|z6H+?P?wDrEk4{2?p7Ws?lu4f$sd0z(Eh`I=hM?KErZG686m^5WF9z`ox%nUp zrKu~Ix@&S)>m0+|h*Ka_k7}3nt*P*!iY}RScdZROoiB<301J_aZu9Q_$NJ*rio2k( z*`n+N&6ldJ!J;vDZT@RV))5ga@^Bw%w18(xg66Y!sUVRkAP_41YbGNs%aX;o&p;D2 z%$d@*_VA9qpK~QdEbu*mgT$+8 zLw~+Wyo$>w-&r|lNvLsd(y0;WH@q0m%-EnKc5-ZCd}xA{Pxcj2)R?v-NV_V{R{vDn zY<61y)xQ3f1c}_u`U`n}7*aEow20N`BHfMFHERMQ!i~jYh(L2tv=iA}d-_2pPl=<`HpHz~KZAeCbf3&sOu~DV1W( zD>*`X{jBy&M5dN+TC^RJCY9sttBgM|4ahnS04-cJG;*@1nR6?T2$wh_GAOO>MXIlc z*KPA9*`gW0nBfB54eX7%*42K4dFm!G$;@_%b;*yHGQYtjtwVIDR$ZH=NYPl^ziaq3 z!}b+tRYxG4O0JOgd1Nl(Qc-839p1KRt}*JvI$5IWDuz}HU$f;;VsP06-YDWqB~UTl zbknd4pgh!Wcf)HN@&P_bmx^+H44zyzM4TQq@=g;<)C1SQ^%IEzgklUgJFNK^po_82 z$t9Ga6z6(Lt^>L1_8;H2BU!jUqO<*+k@x))&LfuFm|{Z<`uC;yseo zSS^|ri=aszk+y5R`fF$Nm)LH2U59I&nbTzUa;%k7Qfy?Cq1do`&6DdRh2L2W1%he5 zd2IjEr5le54oiAwF6N^%{@8^Wh<6|*%3_`RrbmGLHoPNyx@tEk?IL0rFnVo0Icw83NxQFpd)$Q2F$UF_64QpS|GfsUrGn&CXkorbl%D9uJ z=qJy|zC`BH9JYn*YMLKcwKfRC{>pR<-SEQwhAMEyQ7>cs<>U&J$41A#zE*v8=(6tL zBX(%u9h?XRXJnp}FwZdzizef4UE?~U)pQ&_P zLn(lF2N3Z4ZAh4f&zpcrI^f4y9jVX^Ah~85m5UGz2I9Avx-6T?*5$Bk@h=kxcWy9f zEAZYC!82UmI(8?!w^o(5WwNw0Z5+2#HejG;s=GY+1j2G$-{(F5QqAN#qMGhY)E>6D zCwZFa!{XkK7Jzqz;UH1OL8!@V|6#g=4_bFc;5f@tjhnXbj&e8X0#J7*0sJusB02T| znAq$*CqhH+ENSN209VXAwVJk8h`{wEEjsAfn~nTt{!FLI~mBtLU4Ek&i%aCj?5 zS-SHiI`Uhs9N)Dh9VqDP!|8k*d4t*S70yk8-4Jwig0j$qQAZ&?}=UH5*x4E-V94W>5Si<8qVmdDQ!1BP>O(aQA9y{K)Oj-2ptKLdTu zx*FA9V=a-CF4n`v(8@XcChPRm0Bh1A8i%8W7!}L330Ja z;SpAe)&{R0Tw)U%L>OaUO%xAEGm*Kf?!+Peinr9sW-ht79*GXVvKr9sy5E>ME=Kd} zmW(;wa}K}P-v!@1tdu3?GVC0~f(>%`m)%FD%+?({E}Ky0m;-w@^_y;bvs=U9K}cdw z{#iXqhURh_Ixt%{U|8(gwyf1N>;sG(n|Q-DD4%YZZkn$MQ>(nL)sGjRef1zirfVb= z6GL#Re+sWXJ0B3j!@WImZBl{OTg*lkJQ&zpacz6PW@!Gkf5c~Eg1S{73Ci;nv4Jv&`LQt%ty8Fzj|Aj{S1>BlHZPYo6>A@e@vqu;kxSTe@)ZXo(Kt6d3?W{EBEOg& z<{+u%(6II*gA^%@lh~%9$bh+kHE9^2Dc)tmU`t#a=*Hl@W#pQGP}l2 ze@N_B;Eu1^o%>6ISrp+JFuJqrPHSQ{r9=28eDz^%?gsxoOulx;?DNEnD^qYQZdzmS zZbneAi{3d;22MTB;B9K}-5Y!G>C@jZ2fK!xW8=%7KKtF{;MIq{u?GlOo<9F8<6zGP zz5h4oM8t(v|1AOh2TTB)C(e8P2TX9;{bvsVHc$Bc025r@2)6-}+cqaRZ9M|F0c5az z!v8;Dg6^QBO(DlxLypV+VgH1lK-PuW)JtI*J-f1d!+#PAV)A!^nY9wxAvBf?<*OE zAqD%(ZzukQ6dZ+(6mXfKVj`jD{$c6;WA&5AOFMo-3cAJBoq4dALVEoNq@bzyC!}B` zrKT_I2c!V*77XS!jKZ9P-1_^ejZ>*DPcxeyWVJlVYkQh^rvHD`6r&~QhN@sSg>396 zq~OU9NWsNtr5Er2n@~`5{@;XxS0}H${7EQyTYY{2R#TjT>jfP*eyS;Mx50#ht_O`* zrli-No$0xE?)vlA-rGOx1v7BH09I2p_q{j=t10?^s3|%Io?RNce{J~TuQw-qMxOi> zRJ=YrIM@1bLIK=4xcOH0qjvD>+MW5Uu%P1h!sYv4uHF04Gy20(G5Et#@#4RZiu*qt z75{}4yuSPB-SCq?Za-RpAq7K^zsjF{9eVch|Hdi!p{e-o{XNCscNBj;`oSr9_iXy( zgIC{v$SU4^o%%mURslBv4*&nr0O)AB-^8!?uJ*qCw(V@-+34lTt+dll0Vy-X;@X%g z9lxvWoXeO081k?GoHiw{?GvMt@W$h3ufV%Yq?$l#GkR`1qw70hUQ`bvuOI%PmeliQ z#S0YjV=T*UP8N|OTO4B^4*Dwvs}nyjDe5HdX{SSBn5r$}@;j%WUoYCW>SD@8zcD~9 z(VThS|M2;kq_%?>QXISX|B`eE5tt_1o{&k3Q#s`;nwA z5Asf>x94X3O27q5UphPAcilh9aTU-fVJy_gxRN0>iUv*6QWwigSfW`GxPv~!@L>Ft z{E>j6llXFkCe4KDdr4@BCM2yE^<`Yivm@#g6)QPJan)jxS)S4tL-)fm(^Oq>)@ih0 zX*<@iuKZ$_7S}=a80p^t-ts!!!Kq1hYz*+yY#kQpQp>nV`xdn!s^@6=3UT6&antmgo|?}FiFsw1Hp zr73SY7=!r2aHBf8>^gK^I|;%&bi`f`?B7bNiFK6-W;Ujz~8{V6-{;~&|)*^>~#A}J*uB^TpIwRow?Kuy1eg_`t!PUDVj4+ zF_>C43Xp3i>k2irjb$9YR*pX8C~Bs1`VE^|?#*-sI2koa?_{Bk$i5kR2?}2lDy2{+ zL|ZnCRWdm!Bkwr%3}clQer&C0WZ&jb+u^T;e4^hLihetj#DT94N0~_9Wi(_d!~3@^ zj}8$ziL)|&5mKKe##&7_qlKK}HS-|@?+q(ZECEt;xK9_ckmE~YBCuVc>DC*$+;Ti( zZP)N}_zlTc3{nYS{nh*5XmGtQy4Dzjsxk(K%jl=p3m49pj5Uvm z+Z_Z{Xwz20qz>$+;S{`@QsjbC1{Vv#x*bA!&R~ki>!m)B1sUerjY&fSV*&u6UWDxs z;1U@q*2mu^+rEp6=XRyJhJ$4ncucHLB(URqN-b7kLNK3y0Iaj)<+L#~RQIR3n)_l@ z*}rcL#VDhmq}Bgo6}QHyK>!(kBKYbK~$MCRPkD(BOyDlJ ze2HF67pt8F1`wfhWthuyVxwruoR{R9$)$*DC|^@OSJ<9K&Ch$kUCmvgA_d`l-l{C4CKv#fmEG6S?GHL^Cs zDkQB9N)$VA21%y;VEr*k>SxpqFf?m0f;J%|$A~+aT_zz&DPYl@V6xDVk1(E-a0VGZ zM;Ym?Sy`1lOaiPlsiYQ@j`NgCJ3G*}a*E7PO^ffePJ30$__ zc$d1ikFzw4VeHCiu2Vfo;qngq=I8|jzF%%xZR!|bPnK#KZf~~242=~BSWepz*}mM! z+NVgV;0AK_kZwa*jG@?=7k9p;V*vdsc~vCZO| zT14*5W(AIHHd9X%Hflwtuv&QB{dC1(>a(|ih69`Hupqid65!<}-lnIXgXUHOo?i{|ovfmD`A8;rm2(5{WlrxU zSMH8DWT$!vvyxGh`bI%$9!IDWaB`B>QD}J@LrMhPmd#|asCI^Cryb&5H zvuFjkc~A7_wP)1#vy0X1di~r^;W3~87}7qpT4bGPZ+5tA9$>KNQc14&9h64g198|M zT?II_gJ5<%Y5Ud1YjK!8ks6d|O+(h(Vz`YN!ID8RyB`^$t zD9s6shNt;jn(f*Wtz+xdPRS5!XVIQQS3AiOQX!#rF{VvQi;{xm6ksJkjZjGN7O`yD zv6|NSuw^+a_0DMarsJ~=kiBnNA1*2d(B+`?AwVBEMye(970F(4M91+1Xf{}r1jWe@ zqxiV!KuQKD=N8WF+M5Dl0A?jl&56C~@nrzVK}-%qXSV=N88lT-6S5)l^g(E?avec- zLT$mjZnEH3*A69XwRbbcIcXzKh@@si)dCZWBHp7AW5^FcL+C9{5J?D}N}==!wybS% zwtkiVbYN-E9}avU!NE&I+=vult)vi3ArK@0j-RkDFaZZ0-149)FI8Y*U_qWGA%nv~MT z0#$r?L*U7$A1d@TDzxKVCMHi(eanp2pm*yRs zVp;DmJFaQl+0AE(B-NHgc*L3(hu z0GN|J#He-iF)^q#2qcDa6Sx$7-73JB6Boq}hGSjCL}`{95)1d`7@)MVVg_HeU#sRs zJg`h&XJ3}L3ZhhVOsI;&wS^93#%aVf&U&1Y2poi&)-Dd&>SE%^vXhztb$iUEhrU*i zbOAa!lrqj{H#n-AJ_xcA@er+A24dmACTaXquY>?U9c<(mAs5QhUhh={35$~rNbi$o z=EXH%S$V<=%>|s9z{E-JRrea|=7d^u;+$#;`$Zbd6-j98)^NX8jBkTce-&O_)6?i& zdezzcTP6_QGV_+Po0F}#Q1+q>!yb=oJOwoaB@7IL;p?GwsYp(}|)$Q);jeusyqN1aU@om|n%ZZLrd)yfi!{2`Yh020Bw zd*Ya5%Zyju%j~k4Xc>}?{7_D*Xmsg>h$HEMom7IJ-hC-_lgk2L6KZyrLiuL^U8OT3 z1gB4^gIrHt|5{P@WT}8Csbg);dHIGif(9E``=KQ*q&O5+>ahP1wPQR1FIYuruNRc! z_6-pEfF>rI(yq)skS#m-r196*#$`DyGj@Xpg)pz3lm-axx*!=}X!e!bpeV(&(K*pj zfh-mYU@iwX|H=bidsBX|ukbzGG%!_w-gEhO^W|XoK)vy%ULhW<3784RxI$dP>dL$3 zh$ImAek*id)`3F}%uHQ;8C3OTAXkTZ_O~sN zb)?B|VQ;U52yFq31XgQZi7k!*?=6%O&4P!7+iqUdu5}`Z4xn=Lu0@;NYnGGS`=4%w z%EptC<0v<8oHfJHUsB={(j2?08^3_Pl7>{NU#A_1$?Lj)^;B79ONGl!!IFw?!uJYF zBiry_(NH%V6CRH+*aFXqYRS@em%b!C=ZMPX#Dmd@5pPO4lvy0zV%2i<%o-MBd|2Ce zedhaGEVvI1Ab3ttjsOfDKpON=#p5k#5zgf*^l@}K9zyQfM(IHJ%@Lb~2vfM(ZphUy z|I{fArkq!lA|d2iA#@tjf%vt(f@GFtKL^D2HUP0mO5V-o{)%JTaYSg@=zQBv!yuD# zUyD6OhtwDLWpOe6(eQozv|bVVus@bNMhzF`5|sFBZIJg7E!Oujn)qhYngL3%#d{|U zF}_we1cM3&)~=D`IY_zsEsQkRkwk+XwnpzSA+IcLLkdRfwa)zc>`w41fN*eZT{>$$ z|F&NHk@*JbGu&4jyj|B#4Q7KNqlsE5Mkx$YzcXI;23Ua=x%o{^WLD%h+vt$~3wYDFl3w!(9re4H>#X%Dx8+&)ajy6c5P+8>^@aO0 zY-!TpKTjEf;jY?Qp`w56pkZ9ME*s9midSq1>5BS zWV0y&jD)OE^z0FbPqQo^l@s<$DO&bw>%VkUo~CQ09)-?Jhx6}&K_Z%U7VD_wuIhsK z{f&>Ag}7R^zC9P0Z_^Idvv$D?tB91_ej72Tw$M&V5t)nVH-A90z2HhUGeZiI(BTww z?&j0?JNGMnn9LMB0A8qqjxbWu0zki-c3y@80Kgi$0>#B+rATxp%km%i;>VqC^|%zr z8mdPIYpY>+Nqxakqx=B*;-q&w@#*Af&O0c79q7)+alf2c7KhIi!G{*cdNbJYEo!fv zfyFkMjI%2rfrypSvK3P_D@uMkutq^J%*#CAr0$ui5uis{#jse~HK=}!*2OWwNHZz5 zNSqKbcuHI{y?*cgKeV06K;n7$yF|{^nzc`XamQ%J{1T$WyY_o3zj3d<`nB;B zRCz0=ofvJq2@j!Tph^wdtcULtvL6;a4_%QUahw_C0ygWw^9{^gd%f{qIXcA#pp7G& zWVnXdx$oN>E%_2WlbA$)hwM9wVgSEes&D7WkcjWlp+sgcZgB}@8w}~_!HOF|u|L%7^f>AqEhB?vC0I&oU`GiJ zk$BC1KW@iHSN!hQ7o=%EMFga7g=!G13x@v41=WTU%$AP-TkgW{vd`MpnKXxBto zLp5;Q3*r$d`GIpaF658f+V9u9;>&p8-s8|x46u^jWLTvklF*9Txf>*eM}Nlbzdd<& zfAePHD{tR3LbXN$GfmI=4tC-eiUTe#QD>`x!|XYX>|mYzDFQsq3I6O=`$U8N7p@Rv zB0Tat^V&|fXSW&cQvs}Ui@h}u0E5sRz55YWy+eTA)E&95|j{RJ*BqF z+j`bL_g4x?*5fX>zpbBmNcIEW`L_x<@LuFoZN?;l`dy+Y30pk~P^j#h9p=p>S+)D?2eQU5_DSO_)5;0Z_a%GVjW1=&OFaq*rR z@6zSlqi1Yh?m}p11}|^0GjUB>QDT=9?(9YT4{;-*;^4;q>n4pPx1ty~Cy_bj)=z9QjUAxQT3jCwv5We9EWPhasZ zs7}zRYHJ?x&lE>6Qgbr36t`R^Dh#>W^rzF31F*0QL}$h`dk1HBQ8!j?-=DDw?Is3M z_QBIs;y4DS+0!wjLUFHr%tHoERS4vFPEZQM@~JO(>1`i6cefgib3@h=?6am*#RyEH zrPp%tY{|F8d|7k3CdBy~4{z)pM@rOrX$aN4i&(aq?;AxvfY6i+)}Rt*bC(4RMIw9D zF`UHEcW#nlmsPS}jx}di+u|~h)pIPQ7#fdtBDtSXc z|00Je21;KkMJtS%=)7vjNyD?jv$*x=)teId`77-CB4CIR$-#2mqoUSMI4%BldE27w zr8u*6{XUSi6uC~i+)lKF%Ugdj-Wb!=7Mbt8*0Xp3?o&6lWDB)Pe^ui-P1BX&RV)pk?9u;pb+g}_~aBpqWJss2Lm%{oEN z_@0%wrugCzb!D4UaZcCMRw&k)W2772DqZ6`+TfT?ffvt1_Vs~pvaI`5EQiL{kdAcq zlQ`zq>&~Rdw16N!isf(Q?=)RcGT`y&?@dI%`z32-Lu+KI9?JnIaVT~?gU|BFGTN4D z@#IYLA8cuVo<-++g&%TP3}>@Jn!Ju=4~3+un(8l?rW(0qqv`%{cB2ZN9>}@yJ5*LX zu!E?+7i3;tT6Eu@>sPT$44dV-^mCv8jx4Cu&p5>J7fGd8e8aVN7g{t--Vt448jQ|?7(5HXu5MAJ|*Tio*O?JGQ%L)rtB~ysvI~K3Z0|*!l%>GuwHB6{1wFgFDslYH>hf^W{m=W`Q%@Q})tqrl$KpW!EW~&1OUKRCX z^5eh}dXQ!ISBN{xssD#9oRy9fgv0e}fxLHRVRDibVPLhN&>+W55li-I_zH8Ucb`dbF3??jq1G{XGDYt=;p=U#i+O z%8}y?d_zD#o}nd2T@UnvfrST9k>Ku}`(9)gu%FZnCJB~!YPO34Q)4MYd#6qImXsO5 zF4A~;uSTw8*BQ`3QJ-k;n-N+V2eS$gOpkWR3(7i9A4ZyOiO;ng7V&+2IeO8|jccwO z;%MVVnh(Be2k3@k7m9U|PHdEw)RnZld}C%0G?bTDr@E$De&_Q?i$hN)O10_(MKKH6 zR>M-GbniPEEJ5n(#cB0R0+#oBUxJHtddIel!C)IdJIC90O-~31xwM7p{(yMgii8nw})HJ$jtB-K9$7EQ@7kKT?j)yetg z(DtA)pG{j`g0tV`BQT7LR+Hy#tS{tsi) z6^jDP?~DxXga)^OSyXH2nr978n-Q3c77RYiY^|gZqrNzdJ_ckxR(pJv7lqc(v*+jz zuD9qCp_zlqXD0#}*kr-$#D}>h&VcV~>^Jejooa0%o92vY&7c;dPyXri<7Jm-L6_fO zHLjh%c;ZdT_N?)Z4> z&cPe|Yd-ZvxO|zqdmNJ>MLS1wHJ*%TdL-1T_eOfGdNOe$BcWlLbCma%t>f^~6Z7kj zM?wIw{PF1-a2?2mBY0R0@MDL6>3`e+KO*@5;WhpN*a~pj z{|G$Ahphlt1AkZn+Tid#;79o0`O^x}7M6B48Wsbj{Yc(Jv#AvjRvGlru zyfe4*U_C&?{j@Vvsm)I_ntr+g;Ml#fzqn|Xv; z3{VM+0Xm;nUzk2|>DA9kKWqhfTXVkuhZW%8lm4GpfVR#Dbw8{CKPUaL72x{Qe^2@^ z_P(mW{`ySc^YijMov;<)N8tYS($Irz!;h}t_^%bB{|&KX(3i{zbd@BD8}eI10O z_UGS5A5Tv_oq6#5-Gdi1Pktx?7GNd7-Tx>7;Hdo*9JN1q{qaZCKKu3g|1oL%k8A$_ z@c~Eh|KE!N;1T}+ir`xxo(;Sd{e1M3QS*iZ(!+}VnRluk59`)?KfHWyU`zGq^4gc~ znd#SPbiPm~2h*?lv^vbqbSmXOCwmh5LYM<7C_Ij5#pr%NgFvf=32ok-oIZEqeOg>f zDgrr-V%W}BPM=RFBx?vvILQ~$`b{p|oOg#4RfrPX6_LG01a;el&kcz)%}~vnfSN!l zv^p^ivpW7=P4`@h)G4fIDXEW}o}*!tq#5^Zkp0kfg^!Ix7U}Ef1?TD=-Jy#)SBk&3 zc$t8zPrE;k=&vmiY!w26H-d0HABOKZjThcDI}3FXOcNGPp4#an5TA~qCE9pmKKh1( zI_MhIdXu1LsXSHHz8uK6dlZqXaX@%6lfEz!0jlhH7B_lKtJ?;bgXEL~x{V#IB8%h0 zLICKP7#1PvLiRwJ?)TU7BdgxP6~IWxC|9y@#x>NlZGPGqBuz42d)CVPID64{fgGHJ zvg?I;8a-#!tSSJZuWD`?_$GDF%W0g~2}Xz>=xG<<(&s(Rsu^Q2B;Hj7-{r{9+Jz;mew6~MSM z)rqQ;gXL(y^&YJP>;8N-g>b}@w)*0_uyS9?cF*?jUUWN@V@{Th23=#P^|&{w0>*aLueSg7$%%VjN>btmIT>ckoMar(Z$e8dv`%2y z3L+<~J0M4PlF~4fj|evrrKU1bR_VhjG$8|Ve~f1X-$e+?WgahXzjLJ=9>>H(7+cML z3Uq{L6ubp6)(!Q)AOR6%IrwQ)7}ai)N;>B$@qrA9RtkBIEI~_mA}gO2R&!eT@dhSF zgrubm=(!Z$OiO#IQm)na+g9UDtwhmYjkq*A3{KExPtcFykYszMqtE7yWOO8ew3CZN z<2fip8ECVPzdOUm_-zeW|Qm9k3ev{{EhNBm2=x?)E$NmNUGDB zD~3fN$a|HF5NcsWMc5s1- zTg0qcaMNN;}IsNQTTCoHij0eKp15?nRz z(>MT(xF8<@wCJqRHId~t2*kofdIEy{*E8dANQAsQ?M^W%*FZcuDG8{0N!perMrFJK zHoF4HPE!!5u<+qD2SbuJBe+z55N-A{j2dPL&~%SLn`S_g9lIs;*Oi%2MnaOBqN>? z{`xy=L@h=&c@NKEk=LhL?wYZE2zPzcd3NZL>f{ zwFPBoo2o^g7eG2ggz!%q+rgsu#2dAAPV)|j_=%#57G)L*QYSO_?_rK~Ky0-2Szps_em{Ji+CGb4{q1^5EWB?AY}F^h zrqc+VT}U{RJDKbnxsZWj0>i)5iY7;5CH;pj{=m4dW7^1?(4@c3G9y86jqsp!UBkVA z(Dk>9{!Ai{0~l!@adlrh4G!w0k&NUU@QV2o@33-v+s9X3t#T@e9z!bD=RxlGKbA+S z4pIf>6vUR(C70Jm9#*BA6GTYE34Df-o+!W^6W~ruk1;3*%6;)z*X6)XOBm=pZyH0} zOgqcQZOrtCkE1usp?VRb$QqHQpfq!E`1nwk`o^IL=z~Cl?lj!HM_llL9`uLWMG_+f zh{q=pPa>xBBUgF42p11`#An*0CmhvIlg4_1R^} z)CA8p{)?9O%vi7I;!tk=Tdf=m7)&~b314o zmfAxDND}w-Na860h?A}OjHMlvdol#<)535yc?O<|jsBRZU5NiZ)yRh%ao-MDp}-mz zBK6n+3>a9}K!_-HCr|Ht{0XhINUabeLtg z?kWAq(1mcmZzx4V1S>5CS-6G-fw?!Je0C5*f+*zBiuN1vW_Mg*XR1l|;;m5>j#h@0 zvQKt|jL15XvMa|pOGlZn4`Q=D7zkhdy$%rQgf1zP(E!+GO5^fDPy%d&w%aQKoCJwq zAdol?Hd2Z*=|sX8XH^>`qIy268 z-lH*GT*EO~AWV^QH9(xn>LQ)ulD;%8RtFdasEtxN8yUn-CAPd4u@|81&$9e}liHZ6 zWeFuB+EZb&eTfiJRG6n3hr3@KqjTSU(?E%8$}VliF+C8^5^+r+d>g~hieI4Wi(Uu> zJ}gpOMMzcIikM9hVl!a79|}~a!9@f=9;MhbXT4X1u~$(h&-MOHw7xa*xO|PO9Jzz1 zRreJ-Dg+;+v1Jw1{5QZB&pgzE&0iUKZ0%vJ6x8%3`qYPW-0o1hK_M&&)2(oIbjI#xDA(>xuL8@wGl*5zrILMTVbz5WIK=IyBCJBq?jA@s}D9VL?z$hL#^xjX0%MjH8?s z0Q-|oPL0%yn`=#`z?sLC3U&li2-uHj!LE4#O4-&;jXbF(N>JTJ$975>#a%k2wyRW3nmr z9G}XOnwqHEd9#gPEhqH8Qj))vSQ=3(AoF$I)RRihfk_DR2kI{+e!>72>;^g$Z!8o1 z^|s=MO;uP3FwVEgjW3T&P-1`^iLr_)L(MWb_!52H1Q zbjIFhx30zuK@04FU7X zS?b%`lY%%2o|T~N6q$lQlA61^7Hf=@sZfXo^bM!)t$D5P`p37nKi||)zto(*RYJN& zY3H99&p}c>5%EtUY>w7psM5x_t~{hO_*)E1eXq_0Ztv2q`a`+B@1xq61x3UXC?z69 z`80B?$b^KaXde`ABT(BUsK*CUCoQ6iJpr5?{LP};iy`_eyZhAB*3v3+a6{cU8NvV(ie+_rp~;T6oBD#6m8G*DbNIlfT+@4ZDC-edY;lrTSO` zyG-GG?WX!Cl=mOnY*YLaGH(WMxS${GFt&}d^wC6Xz#NM8(%C1h$4vMV7}(>M)Epsr ze(?q+?tC@|r4Qnl%LL~S4pm!Z=T7|x+u2S<9U=diU z)+Zc!19)ts)IRz3(9??SA#+Ke`2$q`WBaqZeaPGvAnT?}=u`ySns`V77ka_YWNH!P z777@mER>T|u*c6*@XM;Ib6YoZH*Pc>>+4(N0}Rlt4RCCvw%RpCE4(^i|6+(bZJ`w` z8YadCkhy?|?8e^Y-qMC^f8e!{z*uC__{_y0^ZvskEmirs_#)u1ddM@PXJWvQPD@)&=6K1N(Yh)j31&UR^(hmYP)o>ikTsFJ7w{SSf39 z=u5o(URrXsP?0boo};X=Z670yMflzMwT+#wq&)m`sw|n%*xrwx#&1)&V7saN_!c_K z0n!3CvW`0)41_$TG-!F+RQBb(zQ_LKg6VC_c~TUHlBb!7#1*0$GV1_Fw391t!;>x& zrKj>KA|G%pVxqt2QKnx%Fz#N%|HJs9vDhFE-<-M^=Ue!fQ|Ki&PFLh;%{k;U9fK7D z$Nqu1nOf@sJjq;3k8@wA9sl;huMD$?J*iwD#hCWQ^+y>XcMpV!2CO9!dF=H=MzrGJ zfru`sW(fm;5XpT`)joR)aTLlF z#&%dhyP*@sFrCjgMq=!>>d4-K5M+qrC^L?*YU)W^L=st)vocZ`9n61+6(BLoZfs8|3gZb9=N|(ZoZpZW548D$c~4;J(D?91 zFk5FJ9oC)XUIGrlS9KAX1QB@5f#Pk?@Yabol87S`dxWTNlP~_=>jFYM#z+8=`Di-h zSfG?v&rU#%pCE;lem5oV6zs+EZ~Isi9&QGVC3SfCKI~&c1F*`yv^TFfaKyiwEwC3l zX=g`$aa3n`Y8@Pfwo0w~Y7rsTv{5&m^@2y)k1u;Q1f+QZ2swgULu-<*kluv${INWL zgqEj_YX37-CgE$eB$A@{stWqNLkJt$D{;8NPV`e!~KR3r)fm zoFJL6M>=3~0kRJ=@rSwPc?v9Hxeu!2%Jjg$9(O)i7xMA(jko9! zj1R})mxvWj&>ph%Yrq6vAaqe-pu^e33le1EX=HvEo+JRi{PDXW>L`qNoA85@8E6() zhpt3Dncm3E`nah**1~hWE`P>p986p?Ja_!y(SLT(EEy&1FdH3g}Ly7Fjv&)F)NT|2VaF8@3Gml?R;xuoC90|A+xp^xez( z)7%V|y|6Gy-aT%%s`ik7tpv-ljmnYf_GLCIo>kt+_94m>Hk z=XJWs`RGytZjV2WZe~h%0Gdt?c$lIX=fHs0yWTi8W2r29lfD_zX~*{Q^xykjya>jM z(CE3XozDK?lXm8AZ)od|zUXo<*OU`GA9SK)l)i-^(mZ(j)lBp#iU@l`hp}!5bW$Mt zM%9$m$bsZXUTW?_-`<|Fn*p(uqO9;S2Tc;6y$iGRM!`+7dEka;jE(Q|LC~u}V z>D`ljdFu$ycM}Big|K>WT^@j7D&3S#{Ob;TG7TKcrJZWW@b&#zP7qVi0k{W`wdB3=X zy5(EK+1pEAyWxzQ`Jq73=uo4v2t9nv9GUiMwu`jElQ;^$oR~NWr9OycSo+{Z1lC}5 zWz$&ppNhev0s;d-EFXS_Qq>pYN&qu09nl4p=46Puu0Bqb@{2zD0Ao|n8W@a^<-Vrc zHcQ2+y%~Sop>&cYdwLNHP4uPBy+XL9OPJ()KL}eUM`+t*`4M~@wAmouT*ZFUoWYiZ z>%(1#3psVOeJQx3^LL+oa*+0uoW9E&iXHvEhUg2Jd*&zo9j1*{oqEa*>S$v|sV08f)8k2E=hU=MGmAuKU_c1!gz2Frk#fo@bK5T<+GRKV zOS2R>B8e>i6EP>#Nb#!sytaJsljY=e!P6K#BIT@f@rkLO3-4`iOa!KsV(eFBSS007 zl;xR5LgHO@UrbJQs(tae9o=Rl;^ulgT4zyL$ww6>mm_7PpwA@vKwk+jtGy{qrLUf# zW^Xq)TOV`#DqHA!VPgtOsHheAKwD-{>ais8O)cf`3jIc3>D>pAQ>}HW-MS9v$+jIz z!(>*`;}nvOva4Rg^$AICaOPhhP1)JxIG9!v$PfD>*d%@?($w9#M~>wG{rrl5yhLIC z)Zj~`m=i|Xxnr6ts`vf#Ze=d9zpTQEl>w~3HMn&t6wD}L0NAg&8b)`JMIJx~w#h3S zsg!kg2E2@lNaju*D@rF1=b+Wo7_vYxvt)ymAj(eH#iePZCV``SC~o+$b)fz;zIhs- z0~BOr({5N$>B_tdi2YetZlh6~%e_teMdy+IeUzB#0j$$z@g{Za9Ur_$=nj)~CT^cq z#y2mMtBG`Cfa~hF{_r6VBC{%a!MA|b@7Yye;VqOKc}(>Kp7GcrneV!o2`(P56fq{_ z!b3wjFek2SEUC`6qas^Fe;V=`1Gh6uDgr{MGp4(03kpz=$P7ihRn!~ETXtuITsD%{ zR;Tv7s0f{+aFa?6G4Iwtg!oHd-5xX6EAzu{YvsH&YU49iv8&THr0xJFP(YSddMh*N zxUHn(_>);Py1!_ZTQK3cO=t_KLPp(klX&0AcATMM_$kj=xk*PR=(aA207i% zs0VaWAi-x?zC{S3cYK>6ud}8g^|O9ixE$%QO*29e;EJIKHq|uu5mZ0(2`xQ_MC0ZN z%wacQ+@B&BH2b%KW4o{{zTA9EUkkcQi1iHEXIv#pC230h5O$&h%Z*Hn7mSe;c^t1_ zqaKozX0BW^20)^WquR*MaGnQgwSq~D9pap@)hVhwhQ;W`mqrgXS8{lt4C$L!mu(Ks zh!6^j&(UQ|0D8mTwT$P#VCWpMQQaO%lNG#eMgjjq{a@_8S5#ALKyUQJx%a+O}7HM*U2*W7b7LLjqFn z&*e^=m}ySk6X}+DqrV^NA*RkEt)GYg_Aa^#u}+tc4w*y#h3QonLgHIP$}IXfc%YRE zbvB#W+D}e}|G35Dc60CF5PS?HN)=}fl>BSlB#X#Kgpom29`SPc@&dpUGo7ZDI5vOY z?op+d&IewuO4s-u!Nyybx4V$~4AlhAMgFd{=q%^N=mV>>+fvf+;#m}vp3$0e>k0ks zOVgg--HJ&rzvZ^W{@Bx@SfAvIN8LLdFF(DvH#@oVm0Rq8kKkYYx4HY+3r_zb?QQ=> z+MB(27hu_a&7L+^V!L-rr%y_|fBNNrWcS7Nea5-S1C4O^9yZ-W4qc4+hqNDRTqNzV z;GW&IThhHFzkBDA^BFKphr9REOKGxesd;_>qkI29uz3oM&5!@;-Y-h(qnU8@{&+`r zS?6N(zOp0#R9C*dyAbB&u%TXet)db}<#!iRx%^Ic)xE4mN&Rkq-TkArV=yfj!nFMC z=sykog0nY&N$Pi{4MW9?wEQ1Q{ox`lZ+UVImeenfRsIvezc5wU@(Y+>f+h8rr@G&s zywF$Gc6$++cfgYRK*N=LO}`BFDmZ}O^|0~!vxe*UE?ysPy*3RS>eY*e`l6fOvB=5C zZrq-@GVtsg48{j$F8yNT-S^&I{l&&R9?V^N__h1)KPLK5 zui1CRV0Doh$@9$6iPeSlu8@nKEIxSpYtmYd;zIJP+SQgE29+-~2&S}!CHwdnJ=3yT z2$4$#Ao7N;ffLo(J?DsJ@N<;LDSLn7wE;A}U+G>@ak&6h7pDKblnblyj154%CVXVh zDkgeR$>%y7`0k>tG!A6Ll@~+ zXE$J`gC4~|&f63QhrLk88oUw=q9Q?Es=&7?Q&J&Fe)ZH}KrmQ=xTEe&AFf0P)+O3_ zWo~2i#OioWk)o?%U0fb54nkr2ZR1!Z1I^y-&8I`7P{Jk{`5NYOhK& zUg^T}kr);CuGCY{U}QcEO@O35>eHA?h-N->hN+>G?BLh7!^NOaH(C#sizZ9XGW88s zA-pf+9nxF+(e+cJ%bM+qw?2ZB{mt=ovE6A8p7QHckj~qN)8}hR`RWf4s~}TbHpIMW zx6@0azb`OWK-lUvIZX8xU*h7dc6y=nQCvv8@C2dyDGLe0tlw0h<|9UD$h4ci)j~1(F_SWhsm89kM&=A96T=%S zAE9#1zDJV|M~eGNmA|LQ!+J*`tVDig7Uu; z6n_}XndSTbrKp@T;{!QC7JS&Gg1LksTA*h`P0W|RbKkmq}i zVbjsgW*VCSLrjy@`Yr?^zxCowU*9^u1ij2`D&Lqm>r3)bz5=v()Ps^_06Rl4O>sgb zZ#m;CUkT^{{ZF8{0%NzK%yod3S9#KcdBhPvQ! z%KIBnh$m8!I&nSZ>z`=^26dTyKo&Pz0;s0WqAb6$NWDyq3ra}JiSl}kl8Sz8_EOc> zQ2?1r`qVcNO@SuKOOm`_cis;`QJL3vebq&bH>96>JG5hNxgnNXzd9k^<2_;S8rFy< zHB?qc5~DCGR3*x%ynnD_*n7s!o>k?1U+7fR;kbwHHgiRqF&1NVgKu%{${NM*M6ZSi zKlox&A`<>A37F~!@nnwTHMKh1K8U-#YGf$ZarsF?cRXPM?`5h7;{Aa+o3vn};q0i` z?1vI%wE&z&{t&KlXvjrfk9y-}#!>_a?;yZCTRMb`(A`Rab8^4gtOiq{!Jb-O{1#_6 zrjczmb{3^WKYH0B)tuUA2^C3j1e4)j@3J!_FZk{+yCtVacZL-7Z8FK@rS=n5rN6ba zN=zS5Y%o&{j&5Y;_HnXT%NuCnalZj3mfG%3e1uMT&jXzBoCaGCJR;ruJwbG=RZx{} zlM5NtNm1Xf9063gVScw@Y1P(C)d<=~9=6u=Ak1J4yY zPMu1b9J@XDLy14q8qb1QNY+Pw)i$d>?V)n`x`!F@mh4$9$~U|1N>!6CV?m@9-zL%b z8clVX6{Krv8W}<~VhYcSb&1Lcx$>RcoRJ!1BC!k3?A&D=O_fS+lb|3FDgl8H$h#eCnP2ro##mnPQL zA;0yf7CBYD>o>{W|9egdZ7J)c#wcz>!g+k&T&@~*PS=>fZ+k0ELxT8>ykp>VBV5v^NPDgG^;#; zA7?$y?9KW7A-0iG=2`S_vCxbIaxiEWD$uC=Bx|akAQ0aW5 z>(bnr)z_xQ>SlBnrQFVwLhpwr|Fjg1gW-1NQp!pe_OCURi{eJj*;T=yDu=JO5}Uba9Qg*791(kQ_QRNVQuda6ZgMua;~?gBOb zN4U8URTyw5@4tx#nr(NYoth%8TqI00JNcj;^JLI^Ux@>m&)4Afky1DyrlNi#a_Kv4 z2#{-HQVtN^1hk@iFnFEg{8`!a!ndkVd#)JlQrkx0Tvq5hu7c1-7N|pgY_rFTR=+b= zfmcv5Vpk6w;`xy$=qgAS+A-|Khsw8FGGUK;b ziIgWq}VaoQk@HO?(CZSSzt(RDJT2u3N8XlYkZfrg70k_CP%vGn~57bdo&7 zuD`IN#W4d6wO}J#fX&PdEf(){M<6`neV>erm7)%7?A>cg5e*-_oyEk`&{o5yu3?Y} zVk03$e<+DZ4!SmWcmO^I>lBWh(Is*aWF3-BiEb|5jJ3n33xMTijA#Hg`vz0CgK`du z!IRK5rimdN>ZsBEJ%+UL;bDTwLGFsJ?x9&@=X70pSbY|bpL77%gR9O4F2>>y*qd8Z zF(E0G9ZKz>GU%d*(Pv+X$347dA1MbwTF?(x1T8yKLJead{Qf3Qzvp0#=_V|E$ErC7 zY(?S^GL{(kB7-22TTcRPBEnw;eKRFs)e{jG*sNfQ#gUY((AgY(3s50I zN&oQuQwI1-Gf+{O%0wP|BtDR7=FCLxhQut{3UKZaiiWmhn(W|*d9-BWxfq>R%!Lis zyF#o-&*c@C<(+c`NF4OQMf7bFg2RLQ%mE{2#&vshi)o$*SXf(|fKOa`3bh2$gPU8P zK%N(5_8Z(XH~cZn2EHABBFP){D$tnE#4Uo2vI}N+FH9p*mv|$zmTsZZTq$$rOe}^9-0Qm;dT73BS+GO9D1qkUu^3--QG6cbJ;+u zgp|NQHWwosDCoWoKx#Z*s=#_N&9sIcSyPzPcHmJ7JT^ry};tNuNhecW|Be@GUw!p(A`p9iI8W zUy{ukU_OE*<6>SVB9ZHCL@Q?Q+TKqkTmg;nj%x zQd}@xNyxsR#`55W>jKQi>_E!!UN-?QKxyvG5UP&g;%}ziFD4ahNxA5A=hB4-J8PS) z4ytE2Y4zaJESyl=fZrydBnA52{2DiK<>^G!_#jloLf=6qPz% zQn$mg`5_rS4Jsu3ZuwTLmWxh39#Ma{;zn>VA!)AR>m?$tItOhH$vW)ZL|np7%{zHu z776&1YV$%|^+=E}lO|1fmDvy&ounv?WXV<&-U)pcin6}CA$)_77r7fIH zAgY3t2Ouv88!3y@)OyN|*7vp!Vp*IT7x@65gg@tSIVOYkF7IZ|YzAF&Bk@+%Pi^4z zD^fThq_@Ba!N3}2q`K?`h6_FmAnQ}M(0Q0x1BI|14ezAvevPW6egdWsEHkif7Vgs zqrrOyBw4}PG-`yZ0&tZdB=#&wkxH=t1UW^4HmJU+5#dVrf>w2{usujBmLg3uh0pB` z8{8fkC2XV08iXmBQiXqWNW>mIyk>wd&Lfxg9MpnPyQP_!s;y!_C`(xgLP)5Kl&`E= z{WIf$^TAv1(oI16i^L(Cjcr-eei?s+!I?#%(#9;ZiKySGePik{He#JG&)P+lR0qihAo2puo z_VpMCMwvU%Ynb@Vv?{TdazV;;6?mgw7eZ?C69gVbOtq%3#PoLH(3Zd^YO#12eLG6D zJ~1cK8M=NCnAxmUUfK?4UMABizqLp5k*6IlmVabwnwbg+?+)HPUO4LR~8KAs_P|xE`Jli!Y*8XylH_3g;T+Y z^W`}_xJ7=I6NFk}3Pj3JWpEMU-bzf=E{hXD(IBNjiD`@47%az@$Y-}SLzs<0KME-Y zJP%#Pi=!?GFD{hIOD0k-1c3OcVH74fMbr}fNB_*$EZ6Z&iiEo7_Nxvo3%>{2V#r0I zpU1>~LGBr%Xncyd01BqVOJ(_DwXeksQ* zUvq^9+L!-sAxcINV6_UtzCDzDCHnQlY(fw&itFRTNAtJy@EMv*lE0|IMurr{sDYp~ zA2lZ8#saz8jLl%?`;Vb>w^0vWncO7M;ulFQrKmuz7lD>ni@TI(5rh6&z7cT3%0)Jq7u#KuNhsKjlFKAZRuCNzc{*LjXP8(@| z#nu+5m_GW;xi!0XbfT&WOXpF)w;HQKKB{{)Hxt8tf60Hb&ivTXpfV;N2r}^i5s{RQ z9{-SbLwDF)C1it0Ms1?bz)&t8iNLYBteiZ&me?V$Jowe3>~68g2>@vgFw*m$q@|f|vl&8*{Q%K^2#t-G1*>;Qm?f zTekT+n8D*_A~ZTVz|7D7m9GGWw*SG>FQ;h|5hyOTkyBJ+Ku|LquaJ9^#93Eie@T?b zy?=7+(uD>Rm3hQd)e@cXaK;x;)YV|LNME9mXq4XppGM1@FNxbUG!klhJ%ra$-(Ir| zIECsMVtHMU;pPm_We9>;@eTS)v2d~JTq_myj=->%S#dptkX@rw;APV1gxr7q&_U)_ zCkyN@JJIOBkKQi?2vTKUi4M)H&?2S32SMn4|Gv&3j~@g1&_T$=$(}<6(IIieAfmt& z{t;pi+`N%3oV5};8VoRQE2sj3P%Errn}*B%^l7Y0Z^LfIm9@jPT*iH_nT9UO8X*EC z?->G61qu|9CCs-p_mFRXSdTK)MH`jsL8ZBelEcXPc|?yRxO&LU9&a@!UwG;905TBa zDK_$>oyU(^fdfSw_4DHPgIQ%!0FK7Iea?c#!f%j5(bY`1eJf2r#LUcjW z#E_4L^NKru22rRU<}Amw;GKXRhsNGuNu zvSEai0`y?C*M_W^j^;HR8^(R)CnM{2Pa-B~9t+7K(uZ9WYZt^fZTuhi%Mpa`F{ig# z)TgSBCHJgB@Ft_*#C-jfJmppRP33o@%UkNB`(g(~FlhE=H$mMZ?kly9AH$aevmS3c>LD}wYVm!xjjxHqz;pR?)GURC_fLMFsZLb z`a?si`G2>`(e6iL^Xw4zoy*euPSczC2711CRaT=V;El67@lRT>_Da4qx!csqn;lEW z7Jg?PaY{fKnvn|r&db~Dx&Ag!JU{#a8wE{nT$oWJpKz(TujJqUwt!Aqlvpq_;nOMi zUcUYnv#?~^+6~vu%Kc{Lh(r6;P~O-q$czts+%M*0>_q1?QLan=8pJcCz~>Uan(2_C zc4UkZwP9|z?3-}s4-bqc`gU;j{$R4&Cn>AFCl-$j(fQ-C?hSK(xDWBUsiftm6apDS z8Y*PRwDT&5nI)>5%jc*rj+o

    z<@BtOU486fD$ps`sh z8t$v+9-?M>?|ZFIm-ADTxK#H9b&YlMfPdL2-0wrL!w_1 zptZHW_q}>m|4j+jA&jhb*AS{cKMt_6`;gT1-;ar@rS*^(&P72W`m==JvOnd+%4e;|(SC$^ zTERLWIbtK#CSJ=Q4Xd+MZATeR=sZ#w!_t1?*e(1Ja6EIPSg zXCE+dbdBEfRspDsPQ_OGnHnXg>8et-Pr`k%M<9{Sp~b>WXEH~x+0@zHKvg!Z@s>%$Xj zc5^W+$9vSXd17<7D8h#EUhUhw>=oTnYRjys|E)yswAgWP`R~TuI~KWiYDYl&<#qq; zx$i%}XppD1F6P@|gZ$txu6+t^TaJ#(NA*$H(j5A4e~`M-u<%r#_L+eWV7PI~7z`1JQ7SS5e@_4dT~f2!?66EFYEBZqPM=U*QAzn=U9&8HVV@`ta#O#Xk~ zBZtxU-v3w7c1CDv!`fpmxxdd0tZ(47bT*XM5klmy+plwve-eMBSclvm8o5|Ut_#_T zG|i;Y3rY-EcBf{R&Ulvb>m!1MjV6Hr?xb8>He#`JJwg~l5j*OgLUVq zUFw$wRFPUk<~d*Smr31+uX2y-p4Vm{GO@7vTGxttDrNE&2;w?1i*0$ruGZf=f7TA8 zExF?OLgyGi>Gb;0l3`ny2#T#cFr`ZliTiQJkiNWHuu&_PI-|@_g!N z?Q#wfsnn<1=|i2-L6t*1{yu6581CDoOsr8;)#3E0CEEmZtWVN)Zj-~Kozdwh#h+dV zNIK;wK?XGH&u$s-6ya2CDHJH$ z5W^GKXnW@zfbeSA4B&ZFk~-=w?kupW#3PuV9MS@unTWS;RF6)dHuq>r_voj%JMfto zeu8{}k_&aoYy-cfDTroMp!eQ#6Uak#T$cfA2Yb{GP-rNC*@@c4%DbWy4}zzCIVKvq zRq&KheVg4Yi@q4{_d6(drvspq$%hEs<%lnz*0D zIGmZXPj|U5Dpwmvk^cs|me|Ow*f<7&O5l&#pI+uTcdG?&JAJzb<7M#9E8mRu7O>^) zPVo$9$~PNaOs8P*9CZ$W$%yRYSclg!E7YRH%`gkt9Iau6EM^JnE&@*hM826#@{?yU zeT@F&>UQ}(h{E@Y{@x9{IKXLB1C4Z#Hiw>AY~bE65{(fxE`T{UY#(G3HEzgM*%mGy z)KJ<}|9pd5F%6#H)LBik-S5!y*FG|FI>Wnavb8794rh|@?dqghf-j!i0;#Ee`7_Vw zL?0J8edvxL&nNZIKM}@SS4PF7n11 z`G-N25X5l>xcNae*&)YST&1#bdmfDTd1-Cm|YVEcX$G+xNzBD_F(1=@);5_be@o8M&YH|;u*8)Cu zi&8sCkMeX9i0rMEY7ZN6S}t(GU>JUqpTWX67b#G9XeLy8>YjzN^h@N3YFZ>hPf>}d zG)p?Hd(LZ-Pdg?yte>!oMwppqEsu=ej$!qYzAr~OhI>&u$$Tu4ee3<`Z zIY{TS$k7XC5_7YsPIy>#5C5Tr*AKD*NRHYDcxq?zM5?H3A$R}TbH;g;VN#9za+d5y0M;WhDPUect_zU zkZv5x7j*%jG^+aFFz;V=Sdxj-Dy#qxqvkGzTQfc5DtiL;8HRbCN7s#$A1!el$yvG$ z2uAVZ)WtxyGo_c@B7M)K3dGkPxll*k25m2-t$REl>!HIstPw^E;Ld{)-xh*xf z4`#>DjePYM;1(xy9j&1pti?zXe^hNFCnwZ4q8N7;+m9GB$j;h!eBHU}f#)u`Cfjx%O~__00PafXjy?~v_PzpKIs@y2Lp3e@ z73X2UvX-y9%d#yl!SJU~PVQghD-78;BM?E^KiN#oW+&vGenmf#H&0#WHiqz@B!~Br zKtj4DsE3ujus~_)J1LOaiqddy^&Situ6IfC>tA@_)Fr2P;1T)y1_5~EkA9j%*?g-X zT<}h@Lhb%0NZ&vSI4k}4eA$U~aqFe7DqpHb5$2t5-uc9Z=1uxGh6tY3$p2}@daltc zioCmSNq;D-sXjGc!2a_Jfz;cBnG-JmdmAK6V(!{Y!c10cZpG>DLqr1~>%uKDD&q=O zfR-ncPXKzr9P0<)`+(guOOH>_m^=Q;Qhba=&>#QeIKETO>ivgfoYM901wAY3a)csOnR%9d`KZ}Rmi?0#D8OX5 z_wg)^Z+$}U>S&c3yV*Q^FXr4z=7aSc`|dy-q0QK)(?89@BK)UZa|6N)KRZ0=w>-K?$FV{k?!;zkGQ&{yskDx&v1+MNeDWntJ zb{(OsHGgzZ(nTlJIwlGiL%`XgJ44O3F%X~}IL^_Gl}F&_(3@(Yb^r@PfWimDiNiAF z2eqT{%*U*6Z4KIO)F*rLy8juJ#;3^&hs%*^_Fo{tHsRjvhicp7r zRFdR7)LVAz+U-ge?=h8xt%>sm0c4sbsW}SpkwCFLR02kSov&t@(l%lSYU2tHSwIJe z87Rn6XN0h2c*Af`SirdPZ1$dss#NWfJt#S#>Z>A@Z^-$i_b*M&ggQfOeS3Z&=UyCqJVwN4!0j0aNHr(8YX2(VGu@bc(L3r&X<`W~rJB}#&V zfK7Zt-^)lApVXnm>?#)zV{PKH@~s}T5L|>t2wdt-Ln;xaiv6>J%nQZ(1m4Avzs7RIIKHcGseo%!?0Bq5h$s1&Nm5+-Pf2*7ErOyr6qHLwAj zkX0rRCE7BAR|?HEJooqQx%*H@noY3YzNBW-4wXdY$`uI=z?#Ey#zOh(r0kz8+kOl9 zKZ$fvfhzfw9at`Yj+3rQryI1Sk$aH8Jp_m}vl<6q&RlY!U;$q{B7|5fi5vjUT{0)m z*6xAxaWtltRK^xwnmyVql&akZ8_N&kWrTVQ&}pv3NscF1B6g!XhxczZstE|*B+J5pkB^D#Q-&>jH7q-Ot`AeDbD2fUelXbO8lT%si- zTnH)SeaoILi$124vykq|T}k2rthGC!!wg?59*_45p(<01u4Oe#K?t3}~2I2>-n zVNGy3MRgU1W09S4R=meehpf(R5)J%iMki6S6yKpdIWoVAB8 zA?@+YWyY6JI+e9<^mW)sDl#ia1ratal-eLh?9;xXFQidm`8^YXLpxX0POTiGla46C z;dtNkNoD_z%Qt?@Y6>H*mKJrr#(8r&NmBM|PrbM2C{iwBf`xlC0CiBa&CZfo*n{_8 z$-ZkBCA>a5>v%-72jlMtR48*1J(#PTy(=K7D4U@cnm`4=P>81fq`?RNu=%l zfuq{JymQ+o4ddhf8*Mu>17TR76kh$^aVo;I5pzbl zqSGaeGIFXFRrTO){iV9H;<}|8@uU)tHAuylnISRI`Q#Ynjg1aIGQ#xdz};4H-b!5i zoI6U6+8#jy<8mVg4|@(2`a3lx_yLdN;Y>h*U3MlFD8}3Eat&{G4O(>qbM}aQdm>}i z@4mqH9MUDOAa7&MVU^b1?8tU!lA~W{snWf1#Z^oq#)?lfi-EUxMYizJwgNO+A8zjl z7!2>wt|AndRLtj=uNgn;On?a{9EBnQzJS#*PQsOU5}XNkS7i3s%?pl{OsWO!PLCdd zJ`KiyhsPS^ak@0K2>p^x)g4njWz6D%2NaWg{>3hM#Jotn2aaC6ry; zs3`MQ7xu|)=iR+o0dp(GZ zwgDsu{}MI*Tj46Fa~_gZ^sVp=T-dI9cmkW6e{I26xpJ%G1bSqjj(yihyzJ7f47emzB?xK>wYT(-1b<%N0|_BW{4yQs}mv0{tq9 zVCTT$O?NkR@elWt^xg&Py@BRkJAJC~p542iB?E}p@3 z{t+Wt-?l$*sU+ItfFYm6{kCaXt2)AM5765cYUR4AQ5E{K)4hX-PrpBBa=6?`NOB%NU9l#WLA3&f$qrze?U*X-vEvN-KqjRHxUUMJR!I8Mf(En_xMrhy5bNUv zIrwv*PH&eZnd5j0Ca4^XlM^xU4cEW)36!S_Bg)Z7czk(8eTb_mUENVW$K`wg;z z+kq4|8`vsM`mEFPy-89Spjo#MAS#fzqg%Pme#|^RsssIMGv(Ou!TFnZ4RoMaHS(4S z*b^{w`_tCgmKa$U@&q5+E44C$C$R0Vxcfp?>z@*Puw7z$!hMSOQZPohTW9lpMj^8|ASWJ;^u>kX4R^&WORxG(qGCec&4kKjCuE#LmVNYg}~ zaP0>^Y1l0874nPazRaRh-^BLtZ6Yko`lk$geJRvH#W_(y*K}-v-pdAy8e|mKpxux- zd;uZAgHJj`Y+@lO3mep> zbz*%B4-?GwrvRv9!`H&9cxH#7oq7Rw%L$u!bcrp+l`|JJID=*R$Wr4^DX}{1TGr16 zZ;CoNa~0b8P_|cS?}elYaO(!oLG;S{3sStcW1tCu5-ZArY5UX4@8VkVu1s)r+Sd6Y z{?Z|`iYs6vhh6hGch=bP0n7@m#LdIlol`hEm$R$;&@sNDVZ9-KpOX@lg{-(I^v-dam02$^X27EnzNI&m-p zs!kh#87u#d2r^Zn!^<>!S4K%D#sSj>m%8p+%nl~nM5(iKALfLzDKh9dj`M{CGW*Li zP#m-Rj~ajZnbjDag>M9T@Q`{6K%cXHgOB0&@q2MhQlMsiL}ZN zdu|Yavxg6wek%|^%H_`+zueN@BZMB#^FO)v(6SrZ*V;-oPI=K;fgMu-LPx%5)u&Nz z@*3D8=hYYIY3{PqPG4Fcb)447IXPEwXtc%$jUii)c|$ep>&9Q*JK7!sAu8&&xzz?v zv!j{X165!cp1-?v?054I!X<;F6XEavL;zapIDdmDLjCFZcyM)Sq z>88H=LmdK}uFp{GG6RIBKF=jA#HlTl4*<-LS%HfE7oBC4a1_x>vl_!z@bwUHz0}=a z>xlBLQsh!sjE+K%G3eBJS)ldN+JpsN{?T$p@{#eOK4cG%YvCO6mR;&{shoyD;z!j5 zC>_N@3&!%4Qb=IDlZ({c<`^2oHa_ft)g)oMNtfXcr$PZrFWp|Ocd9)4L4e29%WL3k zTyem<7}GPjQ(+u4Yp+Ol0D476(@PZt4`}U;uF;8QY__=q@FeP|QCp9fRDz6GF}(4ihbP0lnz)c(PulJ=7D z@=;ihVMga?y!Gwzhy4LbKiKL*YIq0t*xjTV)G4oT_=a`ev;IQE$mBfDcg%%&PMr~* zDzP*i9jHVk*P0-*%Pbzf)0m z(d3zV!Nr^#RqH4D$$ZM=bpKM;F5X3fRl*-^%Sn#5P8L6T8NXA!PfE7XAbE7=88{%*%hado^?_f(ltYFp(Ee zC;( z^IbS^g;_O&vUe`(CxOq`ol~mibFx0{0aZdHO^EJX1;V7LY?W3bCPS&*A2FXj=D>H` zZu8RW6IF2UgYRnD)F8@{G2rLO=YhafyO9W(-+#|@WO@KS!Dk0sqsVKa9@D?R>0Ica zu{$U(zI3G606J;A0^hmCDs_MU+L<1Fe*ge77LL1sl#AsgS*>~tKgX3@h3>5f)NV7e zifh^X3cHy(`>x#ktF9Unl;1SC3T4}uOsO607w^>@&2{}jMPW!iYGuLq+GwlB=2(y6U`K* z2i{5{3iTSRb;6@9ZZon7ENhf@k5Kmg)}^Dh9`xEC1tQ(vbXDba?dofO^rbR0{meHW z4g^H$YxvmGrkA|#E9&9&Xv63l<~dyXh;}(Pq`BFvE?Fs5^HT6}ohcaiSyuH~2HMzM%%_)2ld|K<9w|!TfCnBGdZW5m=vC*t!WO>y)61j8hZ+N*rJ2%|wvL

    q+Mw?>$MSU6HRHpImv6wI}6_>*jZ1Pp&?>wP#;P*XED= zo^-uH?@hm@U&;smTNds3AJh65j{eWAc=P|%G>3^atXcnGaP%+Dx|Or&ST9bAM<1$> zUaXmSZ_K^0H>ZJ@*OYRkd4J)>lq20RYThrsv`^NZ@*mCm=1!O@!(DP1DVM{7bx%g+ zy~Qo?ibc)(0K5Wz;<5y0$hF6*pO@9Dap`RWfqm+!=o5(d9+ulCp^tWNJ^(&O-*Ru~KnGuig6jITV60%?Fr1|xFihJZ+N>Jf1D2cfSv;e+f^7A9TP6$b zlZlO9zqecd1XPJjWV0o5@V1(@Qevc&F;rI~!9q+Xnp5J?uM<(pVIeigrCx@A>N zE*ooVt!m<{(J5=-BQjW*o-}vk8BB2hWB&F=%c=QZ0L5fZ`NjMpM_{mDULCv8{VtRb zpi{b@TDkU@C=weCf+%ugdK4=`vGNVaYS+h}Z+Odoi6)oh5Jf3&tr?ei5 z$=j-|%!3Ex`JJl6N|AxFMhRBOf+^QZCTQBXpcM>a=NZQtT;ZqF1PT6JJ$+?hvE` zeaOJjvgf8=hIkR9ZmQDjV2#V=72q0_`FxcEl`s;x9Y8ic%G|l(m|x%}y40eRyVPW#B9tpspmWWpiJEL? z!q`5Ah#p|C$`zEP)G)zu;_|P9QP+rk!LH3M8y0E?RaJ|qIVPbfRY|pm`s=wKak>Dr zH9F8Rf-XH*4x-7!cTwgw740Ql#>%=LNFqg9n6dCv0SNUXjLiUtx1nxIb^GIKqyvL) zf@ok7?4)Q@pIWu`)f=GKC0Ff6Fs>>b+BL+(WltcMbu81<@QWgcMG?Zz$$j&e9I*cb zVO0ptLw!g2F{dP%4J*8tS`iN4w5Q=>TUiu(wBwczi#0fX)Nu*WgWeXfV(#-=v%k2w z8O=WI&1WiTHAktxrUw)=th2{D=B7&91(lt+NUdPWDXR*p+SRv(npgMLdnj4>Rf+)Z zv=wv{&EE2*k!4$OEqtw(Hj-q46C~L8*>)(!0zbFQ%jC5Jd6BDBX zjtHx>mM9ciTdqn_UU43VI1*Zg{hHXG(XZpeU?RTdNcFA6T3cM~j4)tIt{m=}GC*>9 z6p5T@u1fdxFrA-L$q11riJ`1ja4&sjx?&%~Us`Alt;NT&hMZgkAXf>evvpa79`V&E z=3dIkf@k2yo5=h3w?lp{U_FB&rVmZEA$5ZgYXFi~ckTuqiD#s5aE@LiJP+7WMW}Fq z=qKYPl#M8(wSWLqPF0g=KBzjI!ms=bP>(oyvza<4R@erB{?(vSun-sd+fW3C!+JJN(YRbI!O{^5j|f@4nUlz+qC?h*VZF zrnX#uo=fF)%J1#;q{abedSpi$C$l?bO4d{(`PJc|j^eMV3&(DcWo*T_u{3_Gtt7?0 zvU5F)e5vFK+CEWeh2z4l3M;d^g$7)BcEC>8?QW)eqGj8t;1bGQmUE`XO{&jjCwDa^({iU+uJwLN;rmGCOA)0Kz=9`8=-=fs5d)RRfPjZ(SJ6KY9>f zy6~xASY}giwsGaW#DbY&tRdB3XU+N=w+Ik6Qs2-HNEQ>^xE$*j-C$kS+;QG8@?()I zro^r6e#R|%8Vf;Qt2&wIpa7O-R-_g2i!xcb5PC-Vg0%YAG*%aG zHV3g>Igo=|@2d@ra0syouQ*d2J{PB3$+Of;j_Y^++L~A2V5=>E!~6z`E-A)U zZ)g&9j;}~gvrSm`s9D|&s*&erd1Gp^o|;S2KZOTWP(j<){sx zp|#dKfl%}G@bIU*oAnW@?`eh@UWeFoly&4uvY(z%X`3=A9fOA z&us-R>{$~oEi+|OAI~RfxX5%r9%keWS&>FAa$eDe%4#@hL82MKb<2-wT(Y= z3LaCzo;9O}K1x1_p?xs4!>wVg7&H0!jDLIRZ z%woA~q=eu&;6W;C=sjR8(=<$B??%K_++F?)BIXqMlghB~a`Rp3@O{|bL`*E!m7`_N z#Z+aG<2g=97%M*s8HoWb6R~sD%6gutXa**N)?YwaUkJ>-HnmHiwI@Fu{LDHC%>aGp z4mF%ia%&}z1OpTRbL}d$`;MOM{)VA_#7{3xf^pXA=I)^df%YxLhHZ4rbij5eKwF7H z_h8*Q$fcrc%-STfBLrUT!IEgpI|MqUXT*4_OIjQ2&dS{VGliH*REjw<7D7ZCIieb@ zF+S$-U8&Jl*F*`KMWQ%`Luyi=)=-qzHe#BTS)Unov>+e(!2=_PZySkOV&qUca`6Gq zqS@Gx5sL`KjwiUL$_l(y}iLbE(TItB4t5mLcaS-B>K1zoNZIc=D5f=#2Qd1c*o? znte>xNSNFi^4&4Up1xm?KMwH=;C6D3p!oWT& zE}uw$50Lo>ZKgp#c8Q3O*_dmH-bc=6I=?j`9%P~~lmo`fQtjC23#?of7eG0-d|Wg1 zFLH_Bdr(BFA~VeIn?pIw6ok^}PY(*mg*?;-XfR`-DO5}xaO(~+T}jzL6Bt~WuWTvQ z^#s%+^HF?YG@V%fK<}&&nj2sKv}MiBYVxkH)x;jy>jr)&f*mdJk~3br`S417N&SM@ zanOpu6>1VOX)VC{8fc4>5_ez6pO5nsVC!hL%UHqFjoKRGTAit|{m!|qRk{YbRVOSe zhW_xMwGa7q9Lj=_N)yx#A7}yL+1^V|moocbL(xmJ2xB%dbdAVrstO-0-2A@y*#4D2 z7Y6R&5=C-nf)cT%5IO)LcRM88ts*1a0pHh9F24XP2hLwRsx83jOxHBHFkbjp-0`S) zpD)iU1MaLMs`xnL&q2s`HVQ~x`m$=7V!ujCMsTBkyP#H&h^@m(uvz&I`wy!vitP&l zV;(V^TSj^9cm*xd>>xiHU=ll^c!n#1Yxf3SqfJY7JiAlHx6a3}?xGzNvsixos}JN;SVvJwNh{&T@E)FR=KBDrC#?K9jqCC z?V)S|lAVaAyq$I(P=<6}sHAwwW9sDR0cfurVcd!}j%>2NYl816ls6i`jHsvZtH!@t z5#;-{1P(c8su7OqgRH~0((-j>k;DOL;47dBpz;)}Chs?CrtE)a(f&NC(_6na;B=P!bdUAW?isQGsG2Tm8s^5GZL#yGh2HNj+noA%8B&kA!VLm@t>K zenruvwTD$6ZWO7+)Rz%gN7bMOaUpcnPNP&q@5Xh*CX-{AP_#|Q=G_k3%PtvX-|S$Y z^R7s*(=~09%|1JWe|Sa(zw?G4v4Fc19E|c%f`_Wn^9k5G0bsF-yi6;W;Djli0(7Hd zZq{|vtceG|{rq@Sek5N0IP0Qso%Ct#5V?$voxCg-b?gAFH^)djHq$cz1(3djj zAyRKgeW|#O%mdvxL!}DrO8N4Z^Tcea&T&dN$E{_9Tb0`c(GdW1QkMrp#uUzebPCRe znd+}X&SxN*0k{NZcWAzAX|aw2cTBSkQB*n7P&;BCJ&++8(6~ZeqXZ)3g&C8fhx+@w zEOa!ew^*=sm`JhD@k97Qgm}QEgBVS3v0YtJb6)lucl`n)Tt7uZfb`8A=%m!2u|3!$ zcHq8kh7e7vqf!x)HleJ4>`2a)mHp`DewweI9%-x_OWmvaXE{9}Cs z%09i+Uh(V9ql_wT#t}I25$X+?^AUer_^aF9#VGUPikBT#$5eyEGSO+)(n#UPK3tvq z2ff12o_5xUc;-~!?WI2^?nOg2SFJLE+10d77t8^tcF3_&+mClmFL26aZ~cWhC!Z+L zM)}zKvUk$r*s@`ao>Y5_j2zy=MgTDTC_EU8Wc@|VgHz`m9ba_J5dpt5StCH8TGWUe;3+JCmk9W zNtRM>kzXEMx#uku3@iFe$+--ar6OjV%xDW^sBt~?v$t&|^Xc9|$BL*0$S#{Ae&Rb^ zWGPJwS^-%oO_3Z>_5_#7MM_}7#~STCMh5ckqRJdnLs>wdEi#q4BS7=JH-Pzh?3H)1 zC)a3;#OTArg{>=y)=>4yV)9Kdq;&I+gM>XF#&NJb{IHRJp#1dT*EZyqLb=q-dWXp0 zGC>j>dsD?6ly3kAu)zp$1^*e_4%=V-U{^$)Mqnl$+IxS$*@ECVOd!I?q#!XL7o$nZ zo_yuifL$fCf;|jZ?&)nk1ie4WBtw&4Q_+4)W60q*vvKo*Jn+)G*T;&N+}mT3dl-xP z-=Hnkt3F$h??h-hF|jEHHb{rdNnA%2`Qqqq{jkB;CEPYmDsf}8w%6n((Ssr<`Rld& z4so1;Q_^!`5pKV!5wqNy^Zbcz19l(Q&!Z3t;S@e5UcTOI7rBIy(o>#i zira}7BZw(j3IK|3lHYFo&61O`zI9w>M)VQs6#s`p?5zJ|KX9=N>QHP~SKckrGeQyqai z+0k6*&CwxX&I|)0JP?lX%sO_2?Q2PqLkSb?f1BcgP2LPY%MeIo>vOhug03}#3t#iO z8pT`^4KgNjK_r<=2}zki3nMAp^%F22LbT?jeo<}6>mX6q8EzY=$+w}|-=;ahMc_qm zjfuB+-J1$v^hj3TJyJe!yfivl+BKQe8Gb%p`~6pTBOAXwB!00+2qsp!0ffvZOjpltfy}!{j{{X&ipKj;PywvA>WfDTqJ=^Zj+&UpLm2v>ruHm zzj~=cySG}CO|QaTt$@);hfVt@T-_}ln6&(jcUVrARJoMN-&yI9V7p}p0x^s-{T^jK ztzZiEDCpX$19w+velsEx8|=UwZFj%g$q25Hw1fKFDr6GWeyL2E84FaYnm?nKEQ}M1 ziV3sNPE|30cvtk=-tl6pZW0rJn>+FxrwT!_g^ndu8xs&EjU_;~9mpKy4j~^~N@-^U zNE@h$?x~bD3g3=LA^P-AL_aUMcfrHB-RoH!A3=zKn#&x89AAE&s#0EPdBQWv4xvhU zquOl$9+?NGW-kTPShsjMK_h1YTEA9r?sAE>#X`f4=DJRJmxU=ctUd=%!~v((pKM}q~ADd&SVuk_CNU}FeEhMS%5^NJ${lf(dI~V@0cW7 zRgtB%Lbvjm9csFwv{HoLmNQKcP*I8|bz8SaAha!Q=9!!DFJsTiR{>(9L5XfwLlkMn z(lew#!P-X7$5;a4b1mZq({^bwaq~sL+5jUeMgf@%tpxk-oaeQyfqKnFg%X1FKkG{;`I|M#%nYzJddmlSkR|$wUbok8BQjp zy{jeBkVrz&;>y<5_5J|z%(|@Gt{KY%eDCS*m=yjD8v}Q>W@JyB6KAmSCc&n+O^}Dg z_7wFfI)Omw#cZL@x*kOV(jz2j-RR zW%{V)A30bD38=c+2XSZvP_qbwmFzu<+h&TL)izy{Xm)@i29OWpe*q5#pi>N$? zcU+O-90uux4pCqNU{$3U4k~KUaP9-3+6I2#Jy~94jtl%_QIX4n|LxtvdmdpLxgIXY z`;Wz5r_RG$FR3EfEVgtksPVGd)5DRj(;*$I(vFdXqbM~XTG&0XZXIh8xOZLnr+wVd z=r%bv<^$pK6-6%T!unvh@4pzi=WDKS5Jeh)^FeQru0GQs-Ani~vhmCKy46y?-Cob( zyWT-Kd*@`;i*K$|o+6x7fg30X&NGd*cYL~zG0~eI&8uZCO(IPh!z%G@$mJS6`50rl zU6}rhiH{uA{Sbb!t;^;^^k=!_uYX^=Q}hU3u9SPKvZ4LsNZmC>()Fn{?vf#2~89q8v!M>0Ar7Ks=`I)y5Z(Q%g}`== z7bCyi_mq6Rr;vn3`_RO^j>g9dNpafK5)5O>NavFhlRi0{>gLjP@z|%X(%>ZEl`~U! znk#WsZZRf7R~6a$!w&~tKnv9#aO^?QMOHGkY}ZWklBWml@6pukZwTp%9fD;qnFhuwM*tGSh( zN+we1>^=C)DO~t~(A|?VvLnK%jX3c2WP_VSqaxSV+w*zODJ}Gn+r_fwLWR{<7pqHu zU&QJ5N_9es!Rnu))#;X0V?;EwAIOujDOW_)uGT~!Y2(h?XHNH50BS2rc?HCB?8<3w z&Y@2T-SgYESJpSD!)L$}Qlra~#jdTpot20~YjcDs@~NnyvJ^3iRbh(EZ{u?Kgpk<@oG(hZOHr@+`dZJ`38YX^ zfm){UZcB3Bdt5INXR8mMAN@)tRZir;(P<|papx=iEsYBoW~Xu|g~ZkxgWs5m%rzW@ zcIyIq1snmr{q=cZ@?eR?JWy*cVC5y&6`E+;2z?l2) z)S5?+UwOm&;)}a8G|xSH@_XLC3oqRFWIcHF^z)T{mxf8u{}u-LZ{7TVb*}$^>*i@^ z{WJUjajp-+&h_BTQ=$K8*Q55qjq~1+gBRe&IZOpa96TBOKMVE#7u8zoz!_G8ii89Ig9dYKNhMd;c-D z|I;f|Y4d@*C;!tmzteT` zar?!aXMU{GpEdrx(DcL9{`8dm*13@%XaVeNKM&IdS7y&&dvs~!ZOh2>uF=H~7&Ev6 zPtsrfAPug=ll1u^m^YYwd+FAPzPleT-urUtAAS2}m^b*LZ~q55fV<|8ewn#F|4-Wd zAL?M{*U|rxxWB#oPu+a>>H8_gpSR}zyGoz?c<)Eu{KNkh zLU$Mj*!h1P253Ey{%SpBKxg=rb|8JU?d#bVPh2ZDYO9hlkPkzej5ve3Ufm*#y{5UL zbKtsHVPPTW4D#0Tn@7W}BQO4>%^i>3cK7k+V zM_}v^K*d*l+A*lUt#%4Yh52u+(4)UGreeY2c#Ph8k>SlhX_khiDq=5L?2X+8N8irN zx!Fv?_?E+;kMCv#5MH4%3`yC#onxU@T}y8#t-p_yx*colJpID_+U8$ZVtO7HEMC{R z37^@yZ2bMKrxjc|GjjAr+4Xfb5e-5F!9fO+62E-@B{sH15sgqun=9~X3m8FR2&$Z6 zOh&WQTv+?)FcUFb#mMuO&I^XoUt<|#CT5nJp79Uo_TUr1Ah)y>SHvGWgvMg7e8&jdm)!^&~%}>h~jU~NL&_HH(Q}e zt4s$q?GKh?)niuyxrP~w4#iYe3O`o=!_5%ydVJC((j@m;!Z=|zkSbc=hC;L<^!Tv} zEsSM;+)GlIr0vdGxjc_M(4NTA3x%q3w=_16d-0{O{8y&$|=h$tAsTFUFG@Yvw~S5CkriQ0{g-0@FBdpoF4+~Ke1*H ziz*AzSh9?1xQj4<-Rksoqt&|8%Gj&PdJfX?NYL{@_2|1iNlhibi?RX$czJrHFeyFu zlCDLNXNTrI6QjdTCVE|TpWgJlR*=~4s=>bGXN5b}#>Pk0HAUl*k!W+7ynwPG_qZ75 z!|GOlQ#5!YM6YXMW+&d zS5E%%G#e{k%$-Rz)8End*9$({0hseLD0{;jj?8}5^2?#PdGPuX^{<00bP&;Ag(ZdP zV;UYW_r1eJCtVt}YIC@URM}<4{Pt8eLNTnma$1T=bcHQXYV-+e=q~>?S7x&hAJeQQ z$MF!~J!>Nxz_tX&$bS8x{SScY7iiM1Zmkm%6s20a=8j!b8k#9r+l|4oIYQELCCYNm z@Njraqecz|W$;p#J39#=`}Qy6F0oC1*)Cefp_F5~s9mDyID&4{1Hg$TW42(c8|#gLx1Bo%W3giB!*H$Pj(r5`t;yf3m$;_g8( znd%zh?dyRajFqmQ;w@0H9*Fb8NI`G%-r8RiyOJLo9XoF*&s`I3Oo|w|f%*0d8p2US z5u9N|OPEOf$VAWAYN!n`^43QeYWkWNW9}$DS#stcw7488m19Gi*|0m2g{2O<69eW* znsb-6C{n#W56W+-bSlPT2X`nR9v6*u1Rj4w5#$1LTZ_Yz&4v{(A5ctM-R4uKDKU}24J1vKU;27;d-}68lbj)RC`1OTD#q)HF1QS zwRk~`lXGjf?Prn~mcCi8eA_T{~`I7f%%o8gYcC(q0T99W1t*t=tv>u5*+%XE783C`)%hwC#agd&JqSU+` zdy~q=d@1)g39+g-{dkUA?EDs};}UWM8aBalFuc!K4a#a~;DA^AvjnSFH_s6IX<%f# z{k&&Oa-+)D&fz7~LyyE36a9ct_A845KE2DL;v94?r^{Bh^r|PQ`i?y=BaY~H12f)+c82AiUzWk|G8rj&tWL$BqK;SeGyyILbj%M&uzQyf zOaOz5RbB1FM4ngtTo{n)<%+u;_+A`XoFT)kRW_d8xn*GTkI2E0j zAE_*VZuHt=obD=s!y%A|F*=NBi=52m0zxH#36vonIY|Cqw1~gK#10o*z6z?R;e5l6GbcyS$}cvt-jOA`iKe};IHiwq$rO0YyJgk8x5 zVe@M8G%1$njpl43(-6nPL3f!*&kjvfa0Q;3%|>(=W}c3Kuv|!6b{D<={>lta?rLs0 zYi{dE&mrPFuL~g#QIkIzf*2#I>r(hAeY?57*IqAxnnw>z3tAbamcG+H2OGM8bRd)6 zWS%ODJiHyoR&0r#+ypQ5*2$a-eOx=o3kHo6zhH^|`Lu8@I*SGDQVP)^AwwEv$w3F# zkf0i1nQ{+7z;Wb&f0=S|BYU#X0_})WuV4rDRi&ZRdkxEQW)(oR5*IApOB8KWAsW^6 zAj5&8RVkM6u5(QlIpSVUWZ%H(mA)PB|jB5s_*ftrb+fVOes=LXoznZF?No zx7Kg({zNry30V+~<$x0rDp0rx#te63l7$3A%eL%XaI;5 zr|8Y$B=4)O>816vIfnZKuhv>FS5%Ux3e~+b`pOK}acfa2*cgUeBr}4wG=(hd2eMos zqAy~p9G%C(4WfZ9JaOWHXV_@L9~7TI3yxfgtZz0)>d$SB3*w++kKZEZqFLBY4ElK* z`4@@hp#mtFf>fQ%gc6SrSzs4yiKn4sq2v=EQ77IH9(gzD6xmLU;N__^_g8smRxrv> zOE-FZVxl$4vC6IPRZ!X_%4!7R5P@~V0rYlae(DiDzZ3qmP4@=eqZCIeb{JEIZE_s+ zON5pYABPkWf)q$H1G$%*wRRY*;|xb>8{mX_n8^V1I z%gJ7Aim+SkSKbU!c)+${R48>xGp7BNn*d*9b{G|iQbJb?E$r9KE+(J+fm@q7rao6)Z~IL95eJ3lE~=) zMTdxNX}ym-!K$mQbuA5VKIpuTSV1+@R+O&~)w>l4uHsO<8!(YO#E3H7ZibgDWRIOH z)VVhRfhkwoZG@gDbS=C5wzqGO2hY5Ls$_JMm`|W>+Rp;r8Tg;g$c+ra3WX>CzWXLl zA9||Lcj?a|^(o}_nVj+Ve(xJSJ9fB^*7oTM@LH2PKNUjRylfm7sohCh+Of-HpNFx` zAcN6ivA<%O@+>hHefEX^lhuPyA07YQT>pdL>8xgA8}HKiIq1M7>epw$@13OMy!|c; z{KW_`a2>vOlZrdPPm3|E8i-jgZT-;UzP+gOkEEeTIY2`zu|uxkG6F56+%_<3KB6MPIpO4kdM7BZU1J@sBV^;VJbvJ6D6ZCm%K@0xmu1K zy?hYgFo0G9o?Xx>X_t7&y?N`r@$J+mZo%;Y2jHvlbz@Cd|AjXb%Tp|Ie9$5CvOgctlA}Ub<7=)Wy}>GXDx#UxjvvN8 z2n6;jQ}kf$$h^z+d*?8LJNk&Y{H6rmL#XF!t1!pIuG_{%k|`IE+Pq7%!&8K^*notS zu9i6K3s(#uJy=S;o!x{^Um$MNzJn;!hl)X#3}1N#*;ECbai0v-|n7}CdT^ka@=6xg0yaKf#G*>n> z8UP*TCZT|bhI3fFxc|^WEfv7_?m1WFB-&u<6ft}!u*wTE3`L9%qq(c0oH_#zV}@mi z;c!4ZSzs_v7b!zwc0os#(SK@QrN-v4$L?0g-^@$_!fVJX(D`fDbiIV)C_$NoB~l_-3nl+Z}V9!tX?a*BCPP?6qEG_fF_BA?*7i z$teV3IEfVU{Uy9rzwd*(Andj>!~r*r8Xylry=m2}Lu)BEXdtM|qya0Sxk%4V+z>1c zw_g`bqLSMg_^|ZrmCD2=D=jnXFQ}<_JP%y7){wxT<*&J2D}mr|nI-~)l@LI@#AiyS zhb(a&$xsbdAM}2)^b_}`@4_Yo=yzoL(#AuVG@<*ZAZ`mEN#}yEv~?V0=(Ne)hcbYZrt*dZ-D`1ngEKLiI3Tfzf7l|s@vEz1BGa7XX zMS5IF3A$n%h>cXZZ&u7dsXX&x>*U!sU=RPn-^9+}%(e#tA5>{uM;hMS#GbYJk@+K>W?&#~IY87vG`6`*3c& zc%D*6=WfFw4I)DDH}6teLIi$Q{rS4EUF?9BkSYa2s4Rzg6%vgoq!7eb-(MP&_(5s} zx*{u*qjj!~-i5kdAnp?V%Km&!k-KHlt_!M466WpEg2NS(6 zM^qtk%-5o*&!dr<`eFkPy=2%BT9Y+Wd;R8Bm57WtSEl1V5xO~Hc+KZ=Z-qT;oRYH) zFJWIDw=*~R$fpX>a3M}RDbW7=e0WfZ?1Xh(`eafvEP<5#-s^dI;dPUVmJ6;5 zr3&AZnl)#|S0c=wHx*9xi=J|(JCX;Lr1<#o_U}mKPLYDIjk}gE$pG2J*R~v8OE4l!rmMlk86v5&F5F~g_ zTp>9+;wO)|7LP<_i^JQx(K{-b_-sB2L$I zb36ESSF*#3fK-W`zq)h8x8zUVFO7a{s&Uc~gn9uu=(i#Yz3ev(L~RT=?VuwE-hY{B zjx_bP6=2^h((d(kQyQ#o^@&Bx%&)|;mx+9=KQ$4APzF6D$ys_59Qc?@PbNhGb~UOj zVV8=q;OxUrjVT$QSn?54zv3V#(n5J$F8>H_fVw_?Cwx!43(FafEaC+I4(M(!`VE0r z`|7kJObL~Ox}ygzs#r-KeC%IP=Ut-{88DGAV$s@pEZDuh;o6~Z$~s+-W`jhjloBt1X(>1kW) z+s>du4{*iuFPW38zOSyOdx@obHX8O1e${X))0OACJB*}tUAOv{P_D0UBNbWPNq0M? zU!upSO1RgMIVgC?y{=fpqLB~OYsD75G4=4uKgaLn<0~M;T{$HjVm$tnM!}p~!p<#L zM7nr{d%tGG>xP9UJNxD@&);-Y^ZgK^{+a=Q8Umnx_3eVH8j^%RVVRomluX@%=L*7M z2#{iMalwqYw~&${=3{uEP}|p2i>zETK;jG z$lwW%M*!G2o2c9?fDl%tY&?;PUw&S3!gBIAdXaJj(|NxF%@C+N2Tq^@LL8gsM0icU zroL(o#F+lTAb@TuXL#3$dAMJMu!1o&5NB(^lm2p+xB@f3YOc1wv79tg=*D27AA>dO9ZKDm$Gw-Goec*1xwO*yID%KUhY|No5i_o5 zkL5cm=?d2~=Ky`#?x~te+%;cGz*{36#Aa`XtssmBl!|OU!fy!>v8boY+onb_-x8`n zBzZ35BproaTm*|G>`&h;0n83&-fAgZlTB7zh2;V&3PClzh#;V-fM$KSR-3}pKrV&V zl=dK9Auu4POuR}%z%wr9(hhN9NgBLLk;uubK$S*^5taSM{!gwv1290vZgPPjy&Hj& z_6dj=dPg)Ea>=DwDt50AYORVV{gN8jcjPS2Bug>0tmuwqbFWZEpU*$TSm}kQ1RNWCdX3VD|9)9dy?XFgc z+aX6;O$gNY&3KwP3kc`$d?K9y&}No)O9iaQ!|I(Zf|npz3;w~54IcNvwdfv?On$q6 zP48Vjn*xY^fK~g~dC#ydX9yc7V^vlTFeAfTuL>N~t>Z>vPX-fte^K7oo%pLN11@bY zO~bAfe$*g*gKeJL6P9JP{`}nvwInHFpThGzx1nw_PN8;$am~`%4sXwFz%<0vdiH(I zTm4v|x}_IDQ)h$TFQ)W1xhF=F#gF>n>zX3&i#_)~UQy$wY(y+H9LtcScCQjb3EZQM zQ+&eB?l{e~C!^GtOpNJUZhuHcQsgR`h#_q}j4A8hcTR>hDB$+5{&hn^C&q?XScdQk zWRm3o&Pyt6dmpN8Z8MBo`sLU5J-`AU8B`3KCNon%zZH<1pM+f~ zGS6^2f+L}g%agv2&`IH#oTlv)cM;|akPfl%JETZM292cL z=kV!}SZDxqIu5&Kz7|kDdQ@J9WR`7FD_6B6_n*cmN_fF>sildylTLPEsI$ z_RxxM1}K@d79k;L_We3!sQcrm3%?0)Yv>3Xhpx%2oB0F75naoA{Ftv4GRx11LN_mH z8jEg#Tlrcw+26@w5-uVw0OLK8ziiCIk5u$@Z_S6)=J>gI!$md8#?jbo=mp78?e5>g zD_PHif`%zUA(AtL1SOq2jjw&lihbjLHf*h}IB&GEBPoyI~DpZDf|DItjGATN4Ze_^RO2-GDH4t?v>-DnFmT$Z0>?g*75 z?I*$b#j8Ipefs&QrO&_o{WrWIA^!wpv=nDEL6%c)(>qjl%;J>MW!N`9i z0b&0}0^mYGZs*RNv+)Jzw&h)jE4a8d@67hXzFox^cEZkvl2hqr-3Lp1_Z}Whfk6y$ z-@dY;^oqXhs-XjtOF!|4!~Xv)#^{bC*S7!L34kL3RsR?r{)q$}sGm3hOC4%qsl$&> zz#+I3P<2))>C62ukx|re@o>|Hiq;E~_De^Pjs6n}7%phIk^3VO@Wb(t)AlgG^-fX8 zy^>B?@Bp(I{}uu!{t-M}KPsCz-Zfp`{jmJ>9m#)LjHCUJ>;EYP9O->l1%ntv3-$kF zcevI8+a3DvHVsU-!fk*HcTWAs?r^u~;`64TU$*>c1N_(SFbX3W(?4IG8M^l9A{+)7 zdD}WN-!-<_d1e00wI2vZ&kqFS`OvNZwF>aZ`8)p+KfqOhe<+M66aQ2Jrf)qP`KJo- zL;L_E7_-0r%U@iD`HR`FqmMsKJpFe4f6+fY{N?q`zX*on_xt~b0sezve0=os>;GLI z2pGqR|38jnTu*=V;dHpCL~gwtGH;R#CkWCGNTGTkjcqw|{i>RWV6N zi%enixlAFDiB&u)mJ8KZ*H06)t`%+2*EiHKp1e^5Y`&Te9|Ry5L9u<#%AF3H>xxSV z``%e@<;G&v%{Fv|uwt4pxfl@e+3dz-VlC_T`a77cyOE2pL>hCMm#=BNN;a%_&nzMz zx6wAl;h0ia!K3qMZJTqvFue0>JK$rvRf?uW7X?HtXRu5D_>3g=)CPj51uE<1(d=A1 zV)f8HH3pMhAV2xY^x%Smm5z&6peS|LCj(8RfrSX$>@dQzL}jXjA58OTFMxf(cusn8~`A z$nYSCzXfrolIR9@x?^;#k=4!E)I$Au=fKNoRn+I-9{sLcIL~I9#pUbsM8v!$a**`p zInqJ@z%i{&V(_Z!K@A9Pw0@m&p}J<9KNI7SS(b0wK{hVLq{c$)xN67j2?p^BE(@{y zLkqAh$;YS2G-EUtO?I7DohhI7H}wgDMOR)7qmSU_AXk>pVa#hT9h#Jb(ddGJL=m}M!d3|~ zb$LUPC%7*Nv_=_uZu1}%F^Zy^3JQIVq^>2Ir{PDjwVH#xzVE{GqJVdeivbF(Mx^IwoK(Q_6KQb7 zy7zEWfb2#h5qw43OM}`#03TD;RzNF~HIdDCP^0vb^eHbsiVI{{F&Z>BaTXu>f|(F3K#&RCmLrOtq`v{b(8sMT%kpjb)M}6c zV0w8sKa;2Z`9%dLmk3wgjYDY?F7i@x)G^HfS}Pf(V^pD9RRw=L@%6oGeQ9CN1@?)} zl3`R^FxX_nc4}}&jA#HBg%{Y%ELQW?fFZ~uX_#$!8PGaZR2HrTk$5E2!z3s-OM|a= z(qU;l_JcI{;%`ZZH{O|0uQmqo&5m@Fkz(ATVlj&ny93-ISN(%}z4SukvbL5DSsdo$ zTVdsZCG}LSBMqa?2m}M=6I?2579k_yzR z%s>@ek!B)Kke=DbZSi5-typ30rSK3$5IMWI`9iZiNOs!Meg^NV_V#P59lyk0e z_udCy=k_H95_wu&&awL5XKDeeZ&X`dAwLH>fRzh85yPjz%s1xM5quC{^%YBn zDo;tWv1C_}_C*94A6%?aA0g;k=vqK5*(}sri|_n9yHN z;8+Mmhq|^~EaZ)4F0M93}bS!7dXStmk4qdj|RCy!ev>1&CQlnCQ&OWs!1kykQAy9$dE8xLgdPUJH z>nA6JIJV$7PT7+y7-;FYYkC)!!k^^H5Y?|Adi>!(QWW0x?6PS)8@FoWCL;W*%D$g` zbZszv^U>vIZ4pU0xqcb_Wao@&87_Mg=_CayJe%W{?yXmeCo|Tzc>%tYn@MwcQz}(o znc`YT2#^_7VTh;tBkq@h!3>RRh2!=4kVU%Q1ZtBp4ZFo7+?=0IoFn)vxR+j#8f1bQ zuT+&XEY>Ur1tHu9h}BZR@!ahjj9sD?X;eErT-6R*$S_LHw4QAi{5J@l0@J8!5WqXy^}*lbUqtRG$r2z;K>dQ$6%8LlJRz6WJbOUW+yYF`wp>M zymRqcNt>kTHs#1EbB+Ipy!U)-D(xF~*IMbJtrRe!na~6T3`LrNNdN&w42Xa|ASz7_ zs0fIdK!8vUy@(nRA%JMWh7M|I3fK_AiW(3dEaOB66`i@6y`1}gpW}Jpf%y|qpIY&3P z#9y8dD6y|@k}P%_!7#d}8s;+&r76l>CbzzF+Jm#liyAj+JtD3GQc=iGy-UfblnQl> ziNWz6nrgp-j<7_n43y~$H{eIR4%b`;2XDwTVhQa)81jAyZw~-c*#-8KxH$;i?GICv7Mz*Ft+Rk7O7KDn`kM=B zJ0sZXNmbMLs&}Q)#vOPwsqtb4I&sFjb*Ng9T)9jXk7a>uM#@?kT4oZBwLc6sl<5Z_ zdDdlQ*9Qm zV=25=nTTeU9!c5N99weB>PTDH{@boW07GnyOw?5TWCDH#3ux6v-%NoG763;+Q(~V1rD`m#U&Ec$3;9?EDT$!lNI_d$I z;%oUGs>+MGnA8Z^QDLS9m%}}TRqA3Aq3E{N5q3u-Cb)k_sO2z4V^$1*Rw4X~X>nErjdox;@E-J!6&serb3mCKPRObw|Avuv~? z^d_1Gt--j%2a|wh=bK#;WAnZ7^Oyi5Yh@+Aq&NwW(vRF*T2@zTdgA8gLjBr(;c29J znQ@3K{1lz7t;AAu;dQCVjkNTYS+vH}5E}_x&POUf0KS5>T~$-|)aUk4li_gvnK%g& z5#J+gSxeK1Vgzruh);ua^#$o3^~62GC3H3F(L-Q4qX+^CProSxhh?ACtZZK5PyZKYmPUUMMpceG8Hcrf$F69M}X0iKgp>t3-ygcaQIsZ6P8ep1I-*=hS4 zXWWDP^=T&taaTX#bq}$l=(X-0i4fGLd7o%H+;}E}lmzTtv8=^AuGS)6GA|*m^GC*A z@(mZ{u>>gV;3#9DXWo#Bq<*N=SyhOH5B zqj9_kE&ECoD#Gyuxf}Bm_Di@%3DH7zqF5!hlNrCu-H^&)cm~jEC%#9 z(1Rqk>1B?YoE}2Fa0wC4t!svl@I(hB7f7FofwDp_u_&k#;4~O8(fCw>xpUV zHMjw%RM_8+amv#kX<$^(lmc6%g#JHMASt@OmUKvJ*LJXT*VDpbLiHb(px_n>`~Kqj zjj+>|B+q@A>>40~)#Y{nr~r-eUE9oOk2 z*D>~|$4MBG5*7H+FKsbJnsSLH#cdHT(Ph*V?$=C5A294dkz|FR+L~t9UtHxt6QV$3O!9sS2vfMA>ESiH~fTY3sg|S99)Gx5-TkAK5l)hx( znL#gEw+hRtHuyTkDDjW^rG7raC|G*aXp-=*4U(y&UEozieV1K&PXBF|iA}5loY9%N z_aZ*rq=5S`5U*#X)){X|&@3Vq2_T5kL#z)Enx2<&I`Cj>GIsK^O|BorslHG$z=+%< zN|4y!H21i}O=!gAv&nk99^iuU!6Oz^$;XdAq0Hk%wSbdR|O6XZ*;YBBGO+uOc) zrCe^(?-Fsz6#(l}a99pDWZN}b0VU}8(T;a;=DQo~%C1LFU2yLNpI*TKeLsYyn!?%- z1wOjwZcms``ULEJ0jI5#=%_9UMhVY%RG~VE!&gn2Ditmg54O5OhbU$2gu@?UNK<@; zZk??GtYi?O5`s(df)nm3Vwh3iMUBIAE+a5 zZTfg-=0@Yk-IThp(Jkt`&}53wIH0Ao@Hh{B`&oiEiTKh#_Dmq9Pzizzz)mni>Djxi z*C%lJ&67zvD%$hr2e@WrFG>kppt8Y96KRywidswoQ#EjK`1Kmoe z%(>6duAJfW4!$b^cQqM3#G0a1)(3GUtY1*T2w{07VNn678%#Jf^=s06C|ZUoJFXYY zZZrLBPLqi{{|*y)jp8H#9{uXXo%Lx|5IJz^K^@dcI#sU1>V>c!mcZ@njQ)hE!X2YX z28t&K0-A`sls@0rt5-x4B$Vv9x}u4IN!Jd%h0K)B`b!(Uy>tG1CtL$u4Af<{+6Akg zYnS|1xS0Aze_EeS5(yyT@|}HQ#qN430X>%C-?8lrHOk?mWi;wpMR;-IA38nTApkIa zv@MMQJdCCSU|Uco5(=OS085Fi(NtxVru z!p5@5>wgpSrR+@4_MjL2HET`GwXo4-A=!c>!np2RF&i4K6l!G_du6xUmy-cdn>KD0 z0E!69EiR6pRQ@V#Yil@u=-sQHdvGi_(!Q(Se9XZFXZA@P_WRnEwCIZg6=fAUDD)O- z15GjjWC1?1CkCme)i8#DcU3KYD5I|0%$U!2KdBaamaaab86bSSsg7fI`#fsZNgaG8 zAv$&6hR?^SK(xM+MQDIa(2vn?;@Ou`VONgD`waM4VA*E{!;^ybtD1|_^dq!|lSjV% zx&}w@&|>!_N-9`1e_=g&EHt3fm=?0-aQ`|d3q%%|?I7sw$Afqps8g&Lz_kF*#O=Ob zMogVrbOTX?HI$Q8ak=tg3BQG^U&7;h>uUn8UOcxUT^GAyx#{A3Q$VP7+Op&%S338W zy#T72@fm-bnXgN{QETc)uo6W=Sv=WPd6`op;6=OrE=Cu&u(Sk#4gTIk5_L=_vYrkD z*(|HtDAddIgX$LZbjNuBYj1x0BqxhCGbJtC9kE#CHTY^q*XyE#TxRKiJGfZyc3`Lw zW;_@q|Bc{?u)H6i2oT1))^Y=Ok0@O<_Nh=E#r-N_hvnxVc#0h(yS#um>v$?32Gm-k zq==LF3YUxTh^vlS2k>o{Y$B}VvK1*v9UxAgNq*wILF@-fy7S-#X<7{77in2xMZi9} z@S(sD?la|Z0!g&D78Yrkk-vidbWba-cNUSt}WzhZ<6+OF5o#=~K1mj&@nK*qp`z?7y zsH@)(78hh0&MA?Rwh2k7>^Ea|tZ=MM)cK3jrzac9GT6swo;qp(ky#LPPDClG7teL8 zeTu5zW8oA&wh8cEabt>{j?bbd@ld!>&F zqbMx~##qWgeV|9{4L*w)vwOF`5;V{RE7oo5k)R`bx-C12ZhR3^^57qf3kgi)Hd4z~ zeZ~TX9ux{-9o0gtB~pG3U5hNP$T@_3aNVd1yG)u%eJsrlz>`e2`S*?()6Sq{WZ2Ep ztVcmfME@~O)E?oucLay%r9j5R49RxH=1BX1{GRm3`Z)At{|FXpCaEF%HAc3jPbl&P z1_fVNXWL17G*T_MnLG95GlRsGLxUomodxBVs}OQiixy17gh1)k9-YhH6nulo$PA(g z)hN0`uoBl_-lkhETD|wme0ZLUVL?M_E#`F)L!?|vwmBwpYe#58M z^Y9xxv6~08;?^&lh)DUBPpr;b&8?7l`q$(16+%dj7gk_Yr38LpSLgdOj4Ob4eVl1% z$=ozm>5|}Wz3EyQQQ|3$)Cf|6+HtJq7(*N2Q$0vbV~A~~BAq-|d@9DK) zep&$?wpU`EJ>Lt>JxFWk_5jvuL#hi2r(>hc*dXf@`%aJ^={E-TpMGw6Mwlr$Hr!yE zWADr0h~}X&IY!pH*+j(_RcvMuiTR1rMIkwNKjbCfiOM#sQ;9M|Rk%{#G3lwlVE;Ma zr8f38h7F3|EBnF0wb;Ej!|coxDfQ{*SNaVS6w7qb9C4)fxr0P+A! zTR1CN*};YwO1d1W)=c>3oTIZ0 zO_S%z-3y@{YQ$|$cRX7wL4~#oWj3s?Hq&(9_0nsrlJI-6qWjXJTuayo@TzONx?~3( z9l^)G3hL^8eQ2H0J{7;Rct_UtcW8GW@71DT2hBeKTj}_8h^n^M^x$PJim0CkSESxu z6Otdo=Teq0_r0;-YhS~H=QDnOX`>a__BFXYf4e3(ZS0iS{?_p4@4|1UJ-qO- zShlmnIp)6`BK}P!bZ`>S`|kbOiuj2nB)5g6HE%xHhQJ7j7-H>D9-(vN;VTgt&D;Ky zi?|jpJikTMy+PQ#BeQ+GxGhd{W_Q-PXar2i{kI;XJN}=T#NLv#89((9R}!Tc50rH8 zFGY|9L=W)~k|6%K9-^0@-xpmpw7s}59zhcRt%pFw5I+F!DcT`WA_jp!kY5E!BLT3ub={~{3(H$-3I$)S9tHqrD{+%oZx7-9?& zLlmCsE0qsaG!IK#@09&ho2W&^5N8n*;eNH^Q58~~xG-@Pu|g;&5hcVw7{c4SGySr2 zw-6bG{L-zT7{Y}I4VTB8Ek2dA$+ZTsnic!2mIe##(}&(0|CUF;pd(D&@z zz}PSUm6||Egr0Xzh!0}mUHeV-=^L;910&pe)s2t{Bfnj}^ZB3t#B4X>gBX6;duIai zK@5$&xbfg065+{9ghc4MKRqz^q5mHe;qIdkLr)PH;g84B?Oe-(d*I=;yy)2$Hbze>;+3y?OY2%Y$a#$(7lXII4B%+H z$e!wJx>aUqX3dL{F+{I#VH`Gw!I9h|!!1*V+(7+$xnJT%o1qR4Hw&$yA1H@2(J!bj zabmg39R#6D^HAO>CiLwqnc<-!$c>xzD|5$(h|E*Bo}5qYyqWlFdw!|DuFX8fQYI4> zTh$j|_cX#5e0)S=%|vt#+%fd7vb)fm#u_vC-Wyoohj^W;*eKi3o)c-jlFt%@kL!3_ zFiTnYF^1wzCiy;cA^E1R0X0TO-p`r~wQPBttimph{^Yx`;(T@qGe$WAAT!hvKtHEO zPTeNuJZdl~o*g8a#{}{bEw>ZPJIzaff1WY#wAv8ksQG3vhe?X^g=$Dbh#pMdKeQky zR6T*!+Z`LSz!Wd7f%cvbvEZf4I4I2PV>fd%ECWms>4T<9sdM0~S-$bAF&>@Zri{d| zs*NdGzhjfU)N-Y~t~b|c-&;gWZQ(@Hi9rK#T7ae0THa?kB48XN5Vq{funwww5Yd_7rC)77MX!wbS3++Lijp>MP~ z_p0>hE)dk@87G#E<%j5Yy>nl2iC)v`r>PA~ZGO4F{RSIrCfASH?0#Fp+5YoccWzIq<`HlWOPhXsI4 zz!_F6yKJRYhC9JO|qqwqbHvupW~43_m5- zmwI2%Cd)v0|MJEmBNu;xa(w+V>M+&J!{!q@#?XY!Fs2?9(WR!*xx~x*8X!!)n%I9w zUk&8F)L2(K4T@1WeHhH4k~Walzk9?;i@HGxIz|VLo4Umyi{fh^CkC6j31LAs_wrPJMW&TFQiC0{y4fMyh%>o!Dn~ zZfBtM=cbg`z9H3g za-b-IY@f|kGx`i0`6xOq4E6adtE42?!{s2|V$at)Y_u{|It3cEqi_uTF2DyiyZMfv z8RZ7x7L@pWm0idV@I~tu#G>F0K)|qK)uvZg_h?qBEvN*9gGj8<_F38*vWtx()AXQ* z%OLGEyPPpth!QgTcNale{M<m*QVvz7Kkf%8g_%iX2=bwSgJ*kYQ2bHw+c8{Q6S-fjVRr(~G|>zYC$;?nGC zMZUd?OyIbbSy7FOcKUugy220TsOs^0HiGkEu`)HR`$>bZg|rW%49H%l>j>s~rJvHe z6$|Mk{c-!KZYl1|WEK-ntz(@(0~lF)+w4>cfoP#tjby^Cbp+bF#kyKc7^?SFksIhU z!n8VV1iAxgl@_w9ClPZf!@Nt|S2#;si;aG;+eho7uqn}~WmZvlXReM?mELH5e+KwA z`|WmVT$T}wvrZCPj~cKZBO-C+&=?c)ihq5mvv3z_O~?pqh4ZL|SMq4_>#(4sqRqQ^ z1WLUq)W&@e)0nEUDY>ktl|5sF-_JOIJqaX{JJ9+LdxbRDB&fY8RyR7{v)!;4e;Mle zZf%lh%U!J1YB*>rV1ts9RUjp$*MRuG#Ivh?^LTc@kA+b9+Y>3yZBU4Ih95ls%DKGe zEf?poE!#IDdT;Rn=Zz0DH=AS^ZvP%t<)4YSo%nD>UzoXD2g=4pH)&-nQ2NIe5V%T+ zUL%K$XR9mLs$^|iGksBuqHqh&$D@_Id~;tt8Nl*;4lX8mFJAImtm8EeFSL9}a!<_n ze_XG%I)-Dm`TYu)fKw!j>rW%YRJIJlKaB_G4O}B7$MS8$5n9Gr-c{Nc#|S4rR<1FM zx)^l`$ojLR(?G~K$4UU)#_Bzx9ygX*ZHm@0a249O&A#ErDsg4iLvJR+Y)GoR%(RqB zl;NT9#V318G^GYQ8DGo2Kb!|_)ZT7o>PIsHYmS@Ap&B&7`y|yn8#=)3w-;9nYp^`AY03lpcN&abCY4$H7|=$gRfiyKTK+@k+ad(e3Vnn zQLA+@NSKs%dI@F` zf2MFrSwx4Erc2YKGTTu?z4@;F@Y*p@YpH~dj#gy5+H5DgoUya89F<^g-iAD}TbWAd z*}xK4CgR5Fh!`PcOL|G6mhq@K1={aJmt_gt29+jMi3_J*Og9M69LdC+xvm2@3O{nf zL^+%Gt8_H&#rkooTCD^T91z>D0W0pbF7)a7+eF83u8PWt-V2Zi!9%!FeDIz_%+i@m z?Jbp%CGDnV`o5!B|KFs}eMdIogrHTW32|w6j>l@RK}#y*jj^kk97hX9MFTi@+yM2s zju3x^x54vqt;fY2Hnr|^Hc5|h_{fq$Bhz^}KpNy{;goOrkTpaV)-#){C%R}r&88M$ z#F!&Co|zxLP2W_el^x^k8&aS9r=F5fZ#p}|+#pqar2q=4+@k#nFR1`ns(oK_v1QY_SSEqR+KrNdX_l~L1RCgsR%DTa zU3PDG%?a`isHIwfN?F=PgEnpo1?_)2!+zX_r zvf3F~*-{{EM4$`et)q9TMC-D`D7zV^s5)xR(M!+&sF!8}U zfFVek!~5b`P>v;h^`?(KYcD2|xEr;VCYs0l@dGaVM^DQorC-B8bgnk;h}HTIMJX^f z_24TE>4?m1n+3Irmyw3Tpb~L2<#az)JQCV)$pX5QNFMA0{wqn%?0$`a;wrAx7{q)I z1FQh_Q=e2)FzQtfIQxhqS1iE^+;$;44(Z|}`{C0v%&SDu*Ns%91Y8zW<`A5tTFNx! zP`(OrKrDYiF}d6UY! z0w5bD2KH5daW^9qlv4ssk^}VTSBhMah2zKTKF+{!An_=Wg(FGfiq8Sj;1^c0YrsJC zE>H>GoFQF3U`6L0Lw8_bfuQIKg_&mMCrly;2=Rkasp>Z+WIwF6G%M*xQG zY{SSP!V>_dk&1-2+KPjm`v-IEF0BOJRnA_R zP_tz5$5_&b)RWqT%84JWjv5!H<9e~3KiQ8&= zN_FiqUy@F`wMs9=?Al!0ym5|Xz}k%f5qjguYT!aV7bxKN)JN^QwH;5d)L-6kLYtMq6a~ea!cj7=9V1?& zhfutswnI)Cj>Ej&Pu%fV0dIsYHUKctxNcq_o!VSovGPRTWo{XrtV{;3KO?>oXI430 zMuE8lT(n}t1qsI1$r%=#oeo+7x2lUH_MfBl5XFO6pB>FAZ@lPxly1amM!Y1AJCCCq zYsSvuW}Xr6xB)T3B9{(aS>sVmB>r1j=3oBs2_72a)lRJ^9Z|M@%a_j8{?hfQpD~qO z&GN*vYveqPDGX@JFz-^~rgHir;H+~n@%#>sRVyJ4j;-?ES|`kd80g;)l1eJGw$@0W z>7TEz&DsQ)7=FUnh=2qF{_%RRtx~v|l?Pv;WV4sOcI<_igx^{LmIC*<8sBaP1Oauo zFL!-;a@A$!FR6i>>FkdAg`~KzT-ew&wK@x4+PwH#3nj$``I7gbXE6phf#{X6h<6c^ zTIrYc^Af5<6Poh_j)wjq#i?x!*25)yl=jG4K?2+&!!*@ha%b)yNji_Q$A<|V|3u0g ze9-%xtwH?&c=~MQlUoGc3xO82{kfV?=>AnOy_&v3IIxs?;X)1EISmkD z)FVrHd;?HCLaGs7O?f)h)h5X$%Sk2u-rwp`C4>Yv-GqUOrVzD>wx{DMrwjqiZJ4is zrX%Mu*Dm&9;HvN3dfDl__uX>*7HDh9*VVzk)1%<6P`GZV4f3m+33p-5H^rfr-TMZA-y7a zRjOZ8>(;Vu$a}4)+Y{-$YR!O__jU9LUX#gv%#;T(T?kWZWcSSB@97ywm6UhO0Du0? z-Ote`3eOlm!R1CR`8U{s9$5KK(%}XizxagGGs?7ug(~!PBD(XTvkozTS>n*6i{skC zxD|Z*n+JJgZe(I|s`Q}M`%yCo8Lq*a{CEB}3%moe{wd*Ou2)xh+`sj5{<4==Jt0YE zMjk;K@Xt_qh~>5Uoz(L|nl&kbu5LgQL;DHnPdg5M>!w7?M34~YbsFyU0SRmd zQD(X*k{FO%J@DD)UMXN8MXfzgu2(zY1d3CxZo0J2>3XcRkdo=?^v4f)4;x(-Nq>Hf zTqDDYldX67K<*<+$-Br08F2;HH`b1TC-zo2v!7ZgPGXd}Z|%rO(zW)}q-~A8!(*8sh(7)MYp0DshOHXJ-6944}H0e)U_Z)p0 z@Qh3%{#8M*h_KjLLnpMug!mjXfKJ{?5zHNP_arH;0fz8xaFQRvJ&FwrmrzoI?ogi7 zdu?Smv`J1HEWpGS_g6Yi2A_;8gHyabgQoPI)OgPQou@X+1|^G!qP#3J?N4F_le^s5 zf_LNN!^=B}aZ)4bsk2z;#bVA4!qwNuF+sQ_n@3@+HOrVGYurO39xqG9f|9DypV<)Eoee?0FNl#s zXlN9e-GM}g_7hd;AI~WDs>(l$T;UGl2BE1j5K}3@I$wHu@wl!K-Y#!k`PDD_)cXtQ zV0`Pbxo-#ukZBtP9Dtd)dzlR=d*Z5*Eoe5x)6iwZum3QWE3af32%fg{@mmgLwERtx zbO8wd$zyyY&QIQ3vE-rgo5`a(y4wnY*Y|t8T+S`dQ4b7swrbR`y_fVmaDOFIO2B9#h6vtdujr(#&|jts zFv>wMGGqaLDyFR#*(^rc6zW@QzWTUf^;>@tq@NM(%Htyo9a3w^q=79e^R_%R-yM5O z1XUFWmYfzTm6<%O-zOPc24EQM_AT2ZZlZ2sh>*gDk0AvtvxO`bo%r_~Wb)Ywp-hEY zz%{FP<-eVgopLnRuzB2>_nWHCO`WO5W}|6kQK3|x(wq`GY_?|qJSy;UAJM#Ao2ah}IJNmuqqTcZ(#NcT$!1d&HXUwM+`_jI_~P(; zOIMxu7hZ%$RQ=6slca2srapn^=`|u3L0IR(sUjXPz`qDYV(yyR6Pch0Lc{e1c-%R( z*4Y^ENgbI*O%I6KA>HGv;zb^jVD%YHoU3MlB^eX<2XnEBGC#q==rr$OR;kY{b_R*I(|U5gEQtM z+3UC}G84}oj4W`mOWh}9FEKO9~@0lMttxEN~U*#*|SIZ~}9|zqD}$gy-|I0TG*Dml#^Y>{bY(G1ji0 z9h3=C)7?a5)q)cH>}AS6(*i@T6sgBm3QUXr{jGd8KsL3*%;!wkn3q=Q^eF6P?XTKa zS?L)y9)?}tvc6nY8jV657WPkmu$xcpFIW^OOUa}T8(34q~FU z=q4;yDE*Ck7bEoRWA?ef`%!UHy$=SQH|H!pdoGgwXOVuJOBO=prxf%Go&+4dbvuWj{o& zW+URPYy(tET7D({7i;Jkq9De6@U-derFAVe3f zTQ5bMZFrPp?Je%iJlF=xN3`_`t_`PBSIr%gC$lhMaMhF%Pd+^=SD^L3L~iK=)XM>UPB} zOOTtL1TwJ^>yXUdk2+#p&~ zf0eQ8%i7m*DeQAum#&Ru+u)@*_Zf4-yDpJt47+O4^X*tNK@Z!{*Vrn|GO`xsWkcE2 zqCs%7>&?;=;t-3(e0g7rZ~+)G84l5XEv+XdUg}8ct{87xml|W2AR=yl4C!5zW>?*1 zVKz=o5gGn8E`9)@cY$X3xY9tz{EYz#Ju=*%t zCD1Irx`XZgJrt;{7&%_z<67jX)VRi&n2<9r+K4#CvR|H@^=VwH^9+>;sI4k3`B0Gj zG}j_HThEdKnniFA1UL{F5>@xk*vDy0aP5=}s?ASgUlWx-I>Ffo1bq|v@XBeKjX05+ z&Ca@ecd@PwmD}@WWB(Pb5YRt82yYVR-BLO{oky`4m7$obpss^Yv#Pn|WaL)gLFU^} z6_zi`m^Ay#1h8fA^evm?9@YYc+nH~=zqBhgQ)FU`ecw;I$xjBo(OveZI!9w0=d*Pm zqgMBCVNjD${4K{}2`Y6_)-CdWN#1bae99Mq5+9Z{137 ze{r_~G&nEn7HV5ljn($(SyjX#UZ0ke;sShIh2^ImwKZUgHm3#S*3NO$S%;?9$tMpl za);K0pLhQKZ8VB|W%hJ-k<_aD?bfCDgDnj^+^&3~XhiZpDo!1fuA33LJKP7TQ2$Bi zXp!rip&rT))zjFjXAI>3$f2Witibthkp}-^qV^a+YVV^z87KK_MJIbtuh@hvNO2+j zb@ZlP%-{>0i@#MhIB7&Fj^)RBa^;@(K1Q zsCQ1iklLMRK#Nxcm>mi+xWh)aT(AcW#d-m#Dib&m~;pQ*u(vvoG{yxiIm^awElZP_r zf6yvc7`^gc1Fv@7p7~+n>p!v3)|+s-JIsP^84kq$a3%4GB1L*Jxuknv>G^}@zaS-!L!zFrpQyzRq{PAhPl@BF{UN60=FbvG zS>I3lL(T2vn*Kva?;x~A(toKRD$i$Dpa1E7IC>%fcz3?+YLV=c6p3*(U#)JvUUv)u zE`~%WdL{KpkK=CE$^N3oTLq0{;-)8J`Lo<+B*rmTc>1RRqDB{q;5wf6NDguobEQ z2ib~aD=)N;w?&+bdp>-j?a^8O$s5+|@b_w1A)_lNdtV0{2Q~K&+eQ$BYph)C7;HA5 z{SrjMb6R!EJ{`}7H_6AotSr*i*PVloPlSKw4;?1Sl%H3A8V@bcIM~haf6HVE*#s z5&+0?D9LM}4mjLA9Y|#NXvKPrZujW~9ByDVs`VoH_)UsFBWZPG4*nyZjS_Wn`vWkT z?n@Sg_2p5)mcB9SE#>ZNS=N?QwhB(FD91?yhcl}Yn?G?!_oH&IO7O-q00mNH1}Bc?H;U>orWvXg6DF0$oxPETS8l)oz28WH8( zCciEf>+^!vP3b(#iI8rT9X&R&_aJ3jag=+#{Z`fWb<=afH$Hmu#dk5^nY}jvGyb3* z?U=(&bh;IM!&JNFTh`@_*oRL3GQ$8ilqXpIWsxS8Z>dobZB{T3n|8Z!NuQjZG#2?v zc~1e$7|`A?PRx(dEaKS)Xnq`6uxdqxgkuEh-o8)t^@bw3MVb4JOyt&cE4B&%AK%$ixX^ZYU$2CGF$ zs}ML{u3s`;v{=7bgWqdFe;)PA^_Z0CTTEk?!X7lln;ck?X(m;o@~qtpa9_w}cC5_& z6~3(yvJ>MU!^CUTgaGKO)ZuoJj1Ad`>ntg@?-W&-4{Xy2n&@DV^p}E(2I@(FA0{Nq zWsgN_r6|2gfkHE=8Y%3$uJ=7%X||-%#D88W6&;LF;R>gtVC|Vo)CaX&?t}?RY}u!q zB80SA?87gJLOoF7YvCyk&{P4$40g5yx&c1Xg?Xo6s^K=*uEqI52B|8y!nq#I$G6Hc zYLbSJii5Wl2qA{t_uJ{b)sopTlbXgR@4F;lj;xoybFw>A*b8D^mAJQm5K7kHiq%cc zzVo8bGwX3LWjj8z1wAt0ofKRE%Ek|pky{3q5;T+n`8>pcHa1#vByRd(+Rk`@(4X_W*)QrWWO+0$6mbQ`> zs5J*{qeum7QXnnXJVVK(^HJ2Iz!QP_<+wCyUC8N@1%(lut=-D}7lFMRzn5@GOENL| zu0@1Y4PSb+pf!v;;z_Usb%y(b;7tBDoQlmr7I+=-Al6vL*4p_Npy4?>WelEO|Hy*w zFFUmCU02gGVo2U&MSC}>GjUI|2AA3^QDG5%ixNnsYh0xjM#7V9K_ZdkAMC6lyUSe6 zMzN+N$zoSswB2-#Z6UDq5RdO`Od7l7CJdJ}0@|ZWNmg+qd9_j>9OP+aY1(OpON-{& z8`j!P@WIy4@57@%q3|>Y?vECUjezIje0eA6gh!d~t0psr?A5iQ{+rLh;!O@#VAIq2 z0%Pf~6+s@Akaxr;pNC55x`F@_@mzXo3)x$+7yJD zdF&G%oTF#f2`!sJStT?`sQslG;~NJp;rn+yj$uIqSJabh{|-~vT!2y*2dhzgyg1o<3;@tjf|nYy%%g`FFi2k#bU$~YR5<86hu(E;bn~2r zl+nRLYuTjf>(78g-8A!w)0gs0WXQ_2#~%M|C4s+3taEaOP(m5K@lBy5p{@FnoUt`7 z1%yN2?oKaukuno#))Pem^Yp|f|*)_Y8A=^@S z$A3i)Vbqy}+r@foB&RM=xpGXG_6IJ@5K3o1Z$3SVdAQQNM^E-Ci#Fxi-Zr?XG$pO| zq*sY(4||8B!%EOYB*!vee4xxjd7DjTF|w`0zqbzvCaipPSK&CBrkxThutjZtV!PIf z6K3f6MzTL^3^d*fKdawyM|Tlgp9K*37`=zoR3J8j3&?acupQXG9hmH;Bwh8IRcrS< z`X1KtIh+}8I-g8BH0qHk1j;Jt=k)XFCliOjsCJIBUg!N{fQ8?1W zuN&3h4v2F7IW!mf?Y28utkwNU>fAsBZoMmXC746Mw7)oY|z! z3~=O|b9`pn_PLCN&+M#zGm^q@?v9BNlfC%f|XXYrw zYnBie3taMXB=OvaBZHDcvB>;VP8PBt#>=FAip()tioTx_Fp8_|O38KcOJjulCgO{l zmmgS)@~?tp7+{VA?#dioqsq9mDD2)%QG934UU7CF6>7&bXFogVAx29nloN#;m%|yn zaN2fiA=?ePk@5uCtPw8_=AOoHaAcPx#k}CGZ_c{r9R07x*Sbg#Ag?o3#R1$R?cl9r z_N#q6)(?1N;`ojhDtn^61|q${2vO8Y@EGP0omNmV%WlohHdc}@Gvd(F`Sfl!!CEc- z?QzL_y@d`bly>D>`#hA@7)oaZ6rP0lD=dyXlg=ps)3T*bZ~T=`(sh?|3|yuDA*&7? zAcd!RR4DQx78c2vM@T*Ktc_e|LcnK8?y5n%0eG?wVS_bR9e`fV!MW0<9M}C3PK$%` zsyXlvM6)neFxBH^&YnduxfF0#5MJHTC{ly)G$wrk zNu1*E?|{e*tIWeI0y7H=14!S?fcA6vMM~eOky>oM$M2EQ>R&0X%Gh{c_(+(kSV+W+ zFi|w%lpg7d8eJ?l+c{Hy@NN22$NjB&{-6p?86;)QR{_k%HGDdfGzt6bCZ#ty_?0~R zhc|Y3JFIZ@1G?aLmi;zK&T8|D2UZnXW`Mo)m;s4kudoP1b6`5jBnw!ord(pA5#Wpl znHy#%4KrDS2EINq{>F^SSqT70l1?T~_y6p%<8mIf0z z=D;FF22`SPl#jvz{EQ2ApehO0C$&ls$Ka2p5h|dX(j#P4EkMqf=6Z7RA+7Kcwk?V! zb0_V9WX)(2@y}8Bf60mSZ8X4fghvV1SS_nMFKOzer7Wf&29)T(hDaBAxCk_`&zjVt zf`nkLN3clF*;EyP%4Ip`tHIOd1=Nn%;PpvMr_0X|%EO<8ZsD~Uep=pfu8~AKAuQRo zEHVA1%kg!ls3>RLfb*Qvf-ZLkU1;KVAQzqzn3ZQ%luM*f`q$N73E?%AzAhYcSCzt@tygehGW6-15%S^uAsQ#LD4 zqZox6J@W)-N+$#o4<-U^A<0A9_?5mnzO`dE-@j!kdHjG;^Sk^+xM|T*$_MKm&<^tKkV9j@AQPS(;!qsFM-lQL&A|ie<)N8=b-Gg?|R=)=fmN17GEH{{Opb2e;RYte3P_Ey_*svwM*)x(}8jaCEUO7WQ`XguN;i1@A%A0 zT|VCN+3HNw%i|`Al;~VtbSh}UIY;b{j~<6=#q=|rvqMF&O?C2N2_ez^Bc6gh(6*6xI4v6R&LlJAfSFX#+f4UnW2?xXQgT}?`{zfT;kSkeXZ zj`YK1l&eA!V{Fr5;PXM3#KGy~gRtm|Nj91|4LsXkW#)cj^tVJa>Y)HyTlLsAVonK> zN*1lRbDbnRH(+o70dEel+x`djB0>NhkIv8K`{(4+h6@1Esw5HzU&-lFxF+v)w*z6! zx_)^8uz*RXrLvC87hZLIVR9v(hDM-RaG7YKoWw z1sk;=on6-AXYdEL2OhDSpjB(0Ty;FBGoX z+MfDmXPdc8Fg%EzBe_TcI)WYAvLteIzEd|PS!(xoDfOr%eIxt4v51(2B8GWEo?U>U z5K0knzU<$L{vaW zlnyXlsWnG#>=T|?N8O4Ml;Z88<9{pZXH&@IBrSLPAI4jeV0dI3K$d|QzmIJ|hu`9? z?RjK}BES~lU?$0l!VGzE(*rMH^Rpsn-3m|fw#exltGfGe@Nn*SV%#z)QtG<}h60|g zUOrPB&YMy*BC6iw4}3L@QC^Serer9!7hPHM-VR(YHaQ~zzmx-Mf6-4N_z#KDyz7Hs zqpu3jnZF)n&c$1ri?2c5OSP2TMj7Rv_kFK!Qd%9@1|z+V*^D}<+r+!Wy~8>+UyMYTsRod!?$PY zYJ8)&elv{z10Gp>bwvtUs7j*@|dFN84++)sZ{wp^*|sg~AfxAAZ#c14+Q9 zR5(fnuB(JLk29(S*gRwC%&j}s=e0Ftf`ZID-XQtP5?WKtlx|&r-E?@Ku}-lk zI|E*#tCJa;;sSu_L+`xh#7%IYmICt~)qL<4>kBVgid*y6UGz_!>U9|I2gnU6iymzt zI&B7h-Y_oT!CXBCgeu|)B3w9SH%gRPf!K9kWdPb0`L zS)WN?|Fp+;=3CPHl5rx+5yVoP^J=w-oF~H=h#k%N*dxfAETy55>^W(Uw4DX;R9{?X z2<9s1Z}yZYB%bxP-g{>D)`yw7FkZtOQ0HLQaY$Jle@&DyP9>IN0G=TuAPBJX#kGAi zY;A)3B)jlp=g4_G$`%>6|8n%eO9at;b@T%^WrFTE#dSbFEu(EOWEbM7DP?o_)=?=< zLYzBdpoU;H9PYh%`p1El0Ol!O=eagXXqL|y9vp)KZeS?}YyVi~iFPYI^VAJIe&8Ow zH@0CxJ1(*rf}pokEu)l5!XYpwf?T)C%*OzBN-&iI1fwv9RUuc%E;?GZEOS2Cr4SZt zaBxCS`K;Ek{~{png^DyAR+JVivk8dadJ`p;z4+`|_%@*M2J7Jba-HFU#6ki&uClHy+iT0sokK$wjJtkB5_a;B!6cyx z;H|b z8Oj(i#(>yVF11UMdPv9_8b5o#(8K7>iu@hlO=0^i%dk`JO%BY307D=IHJrt_F$rE< zkg!_+m*a21O9x1nVx@^`P|0gN!!qmIa0i%d&!9Bpl6ioH*e5 zbKozBT(=!@bhZb9+NvomO(o3de6%#Xm3NQNy`&*!y@L&(R<>;{GZ;6)9;)S=wXOHy z=7>2`#3?L0^xgSm&z)jqpij00I*fSC8ewkp4HU!|a?!izRej*>4l25H_1au0YoQqkA5_z_(CU z+>gfxFwgbd)ZZO>Vmi;>yWG~nSBuXF!`<0A-o(YGaj7C-EkX7No)0rHJK!?xe0hZm z^=xgPuqaV#A4)7Gkm*7>Yo+qJ1b$NnPLQGkdCx;e6U|?fPbHA}8P9 z8_V!yiF_>;**x(X$3++GjHa}`Z`}1v;FSf&ozBBCBzeH?o&nvhlULkLjljP`Wvo;j z!`DV?!cN6#`w`KedI8Rt@!X=9osG4*;pzc<8u^OgRnu||rS=w43fsGGU2IR1h=xBq zUk-GRj?_nH3P195$&8*Qq**{CLy6H0MzUQvId8)E6gy5x__(v#%%!AdQSTAkWGi0k zu6ZiSUMa!+?XtRLYPup6ento_3Ep;+GqRzS!)$u54k%NOt}=Z__CO^CVv-4MmQ9Rc zc^Q(y!c~>enBA$v3ptKO-Y=qgxq-q9d>YO->}-9l2@`aOedo~Sk3&R*e9tq05GBL7 z3gf)FYd~^;nJXYHW4?d>Q^K$I|9cHWjS^=)fLZDNgzRxx5UQ~CyVZt*_l*=MZK6e))+ zeaZJ44h-N41;?ReKCy3N70<&`K3KZB(efmCI%jxCq*G!g)$Ixn~hb(*(io!2c?*Dch^!gBhqA7X>c zA!yS5kJ#W}mOv=V63F;B>An<^(at}3BKqH$`yZCTKQZ@7H0Iu3aC&!kZ){=z)_++7 zCH*@}PoGuCiwEeHxU`NGJ5(*Niy_sA+kcOt)4HNt8 zCigYn-rqcRp!$c>Am=|6fy@6<8gyK(`#}*vLv7S&a5J}M2&D)Vw%sU3K>}?LvQd!0 zKcV&^)N0T+@DE5}Ox$(jKURZoG}OLRdHO-wKP-Xj{}vnc{oHg$St^|={UJ7Z(b)f{ z@$_JG_i$_PMC-ZhT^DY2{^K_I7b+n6p*KLG0+0WRwr`_)gVw8WTF_`){^Xx%d+G;Q zVCc?2hJ!~J#~xpizis?@y|WiZ2&#|AQ77 zxg)!AZ}8@$e>?|huKnZ&>N)s_E-*0pV(7o<0zdteYfs$!IEd!jXsG?@(~bYo1<+9Y zU%J4X>8GD2mA~Io{s%DdWai7%^Y2qHe*gv^%zl6J_uqe`H`)JNf6%ad=l{X5d&}u{ zZ3*wY4xewv44qb3an&o@G3^52lJ@7SZpEb|GS#T+qYU8V>?~?Qu`>?W*IUJJm z*qj4MJ_^S{YYdA6a3P9T!zj0E?cx<{_Dy}8=9*yRC=7mfDR=O?hFKu_{@n97bg#A5 zwGk1B3+f5LLZ*lya!D2d68&pRWuB#OjltJ~9XtKVWC~-RZ6WLbH23MX4v%Q`+==O& zqSd@=i-6joMgqJKHl-n1KWPoMWz(D#d^z@Sbyx;Wtq_CS>2d8e%UykJd8!&s24IYa z_}S{t?-hgj4nwdfo@Oc#roW%T`x!KR!x!rZn8F5Wq@=A}b;0ah;bu}M&0jlE(xIQN z;b|Eiz*vQ@4|NvF0F8_CvVsMoFxseb<+pt(e4jTrRIn&QCIcC<;w+7o!FGe#p8^Od z_v|`##@o|6TE6Fn2tQ&Rl=nFwUBvLf!-bMP_dH|MdIAh~XO#J9I_vi#_>siqjgWJy zsK~cNSmupaQ286!&DilWYkPf}5}1cdfLx2V71$dVO;e%ytd+9skJEHajYbw4b{b#r zsKdR(Wp>3lTqi&rmW&w6IZL3bi`owtXKs8 zZaw3}zPc}LER&8EbLlC%kKu*uScEO~mOr--V(ZPNKFN^0XG|}wv%NUzRVK(N(M zY#9b8K%q!mjXRE=SN}Uw;HAGW;zXI@ia&RNjJnoLvGxMz4L*L=Lu_yxZAw|_g^so` zc)Tf+O`CRc|B9^{kQY3|MtjQ7>;gKeEECS`13f#hRV0Q#$d^;hfMV3x4i~1VYjY$ zdnPQa+t<9klEh$zjSRnu-#j3PaB+y)*5)!F7T0w=deG8gfav;|k8P5J%tc&T$y77R z`ZmbocRTRnKo=%3;OhWpV~}|4;di6@J<2Sc4T6cB#&rD3!H^;(gqqb4^m*(?BU4Y4 z`5e9|31SsQqz*A_Q#~m=hCqYQAVX&?hh{Ans`Z20-rVNm9Ht17u~@pU;4V6nBa|f# zXgE!`K;;~KOf**WQ;dv0Ub`qTXAW>oedZ^z^ zsBBWMjA)$WFT{+p;hJfTz9kcbHRHREm4$aI1Aa_j_^RfhRNSG{5kdb0*k9(`c zIiih54MFKXn$|)l#OeIFV+PEt09_96dj27C4X%U$IcJ&(@31}>p z(`5>RZ$?%*BN1mE7l5-6@S!_zthRQ2!}VI_Fq3QLV8=PjI}~m*#;%4FjMcsN=MksAO;Av zk=-}{m}!Z!+44iKH~W6l2fkW%TdqF6h?F!HgwXk`v-@K-R&ahz3{+wQ|MXXX(HWnx z8_Ht}UhTrq{XBm?)~`v82klBOm?o-@Yu9;%;V+pHtF6Q)FCBygK4Qmmm(@|#vMf$3 zy)dqRyoVY?^!q3817tC{VNwY)3m_|b3n|BdO}O)U&}`@D3B1JNTs>b1w%*AC7TU#VZT1ybkX~S>*GR?QJ@>-AU&Fyuq6Tn+7@{8HYQ@~jb!B3h|z@!8x~_Z zN)6_pWVSP3sE#xfNSWrC22OqsKg;>2iM>2lBKB4=LQ)U)(bQ+h(?%aIJj?n9%{v2_ zRTdH)pS6VR%f;e1M3|iJz%o z0FG88^%N2GM;@D0@;;haF&Vt41=9%H$Z$K58s7l~x+PIQr^qqnhV~b_9e-LM;&`rH zp-+_2Oz)lu0g9|3Jo+bS|DwM#i6PGY7!%9f>0F9R+LCf?o@LMKAY?@;lkKi-kBY;3 z#mwx0yn#W6k@pSCmxM znYz;{F?a8A+?u2QHa{b86|R3bs<6L6vB0lI3}a$LC!)ieHzqH2SV`g&MGGHk=blhp z8n~?^XX)P#d=u4T?An*{<|!%j&XKDvU%WxVVo%Z~9P1=rPEL`cLk>cV5c^UDMDTf` zMvH&B3lyJ+-XDk0sqlM^GY*TepTbstA*^d(d(caZs3Th5Ali*01X2X%3)$Phoz-(Uz|e1S902J%8;pWkhH;^W zak!7k)HNuCnV&@zMVd&m&+|zXr8OYH^{izyO7KNB;1PkAP!VVb;K@`9b19%H&7{qd zJ)I8j!)5srGkyF~oQr2*U$KU=n7}2ei6d`0!)ZJZfDOL9z<79FXOkt$hzBbi58>^I z22vecVXlT9B`#tmC;=2RrLC_@J=%cl#8h?%psz}%ib#8zfI1K%1&GB?&^7^F%?GZ1 z+!_!~u+BnHlnAGv?wNSusHak2vnY4hEn&eZWnkwC;AhYDy7$UG< z>4P^CW083=5p6}xCZY&J8*wHxo>D8@%v44b<%jiNLJTg>kZrJH?ZKP(OZTAzBsU85aJnv6zQzE#EH(D4Y^o(+;YK(`;`gbF`0mv!g@`Se{b-Lp!4r;qntsO{^3n+6Jizd2mK?<6@@jz zZHK>V1G;RY?j(Ni$32+Ih7YX}y%u&-0u!MG&pATUoeig4VCnPSSD~UPvxUQP^`=tk9fp(%fCx4~!O( z%ZQ$AgB`MTNQBpx9Ennv)9i@WJnPSE>*rXFHV>2LzqO)|%x&w1rA#}rg-mCGfQV+l zf&jovQAhzPG<2neW0XJF`4S0ptx>&8=Xn@&W?MciZ}%&xG>ly9(bo7^WH~7A&;yCu z1<{R)G|qF_11QoNqgQiuSbZ?RPTy7;(7@f-tfP?`MgZd}qOxI_qEipM>6rJt1GAGBAgB{tQaJGfi9r)%hB=8L1h5A74y zRGuQAi0A^MWNl~efI7ptUNP~2AFxZ(K9qpl_KN5(Cvtf@p2|8(vnyT&Jcu9%TLYG= zR)&aZi=?xsO9LXU6`>tFi1Q~vK{?7pF>?b#E)gng(SN5rbuKCXQpHmF@d@ft^*Qn) z0YDL8GNzp&=_#$~mY>=ygX3$K`IIbL7dj&+*w<4t00RPm-6E(Y3s$R%I`KR}*g(C24mb?Os=Nd}LovLL)J!t*a2xRUI&-`uWQ?zH=cIE*%q>^ffgJt?h zT~Stt{@`0U2c;*;aM^sIpOUT>O40?&{|v0ZA74KmkQ4Ukr~*$r%!gEAmo+Ezr62LG z+v(Nw;^WWy;EUD<&JxV+vML=a#TW?ncWJb|Q4?C&5=2_5_7N05p!O z76wUAFP_9Va3L|7TE)>(RbJC+CfZ2Wv_1%3<sAyaxpPsP!5}Vl9R4o zOg{4j|<{J)3Xvuf)iW#)Wu)D6Wk`N_D)a4&nvgFF<@ z)8PuccPu=JR{#-z7C%2x|LR1Kk;|p8ufYfJsHuuq6KWAHcqX3 z*Trc_KM|Fa5m1}|h{}^CYE>VCsn;@XdK~5C&F;W*ed;MRs+t2#A5!1$tt6TcSCp&_ zeRSb=C`7fU8HqW1`_6054O0f7gFEP=44o|#g9Gls1`4fFid(q7Mu9u*9kFVj*k>vt z%lv?P-OHrO!DZIt?~AZUxI@%Q;)_^GO)*spU`O>&e9E~H5*hlX{h0Y2VF4~PmPkD= zm0vCSX^9-~)it7NM||dD5THh@I|05{Yh)LmGK&Z7rSsSIxfG_~5C3UHH#Ytvd{|ro zNlyR1JyAuzSYTs-;bXCXptlgjV%^od>&nRr0(S+i7zuG!Vn#&JqI+>ao5; z1F=+KrP7Ud>)bwzhh5|Wpst<9SM37XguUpU3MqqUaN08Vf^@o6T%>phpI#dKAr|mo zPpfA1E1E+WuGdjhLMw-8OI5%KNNz&HZ~OrhvjMWO%aJR$+n(nun(9D&dB36l{;j8VeqTs*>k z0w}Q88@Cd?fn%=lx1GT6hnP=nel~H3tCgmLMz|PwY9bzUHlld;D@ilG;WDA-8h|Ky zzAE(4yfg-PoCmk_LA2%>)C32!53b{#UM3>x;S>~Z&)y!KnlpayFHhG|4<3rV56zM3 zMRmkbQkNEz-b8nW!3H@lFdf#jYJWLS_7QA#+sUkxT|SZkZ;5PJBJpcfy*(GqDB&sh z?1J&;29z~$lR&?+nz@c+k??SrLlt}54LI_cXN$#~>)=$5BZ=LMx*6Pk$CfOcXVk(!3B>2l zt5mwia|9}e7y#7&%J?N+MA{9f%An80k56LP+Dk}5T>P?Ga2U;~6nM-}lt7So~3C2#?VDCq~ zgAtDXanDMk3prTgb==&~lIYG@ zCnaN}5~$*isx{|+;~K7xV7{(1S$>mPz)o>GmPVP6?!pLuzPq2%B@9^a{1$2^=rvd! z{7gvwo52U5Bcdq268k0(7c(-qZ2DCoSiLA>R?QCQu*EPyykRxyyVnub@nMb>f2Bs^Ozo~iWy0TS@;6qHfX`$xYiKb9AurwOa| z8C$;$X)?EEA%L>fJ2=oK@)oAcB(=NRo%a0dX7@4`LF7TjbfJDm$9P`$;RxM*Ddg*) z07eUaPZr&4zz<8R9OV+#)U+tEZr?O2XR8dIoe{i_dEZ0}IfFIU?5cP;PQa#lwjC4Y zt?DR!P5Z+V)bB@rsDh5HxCM#!apT`daBM0+OTTpRlmD`64qs&Z+2684*HF1~ zA-0m})x73s#rAHuz`{x+H<-=uc74lh$q_B`5{e8ismhIlqAd9XVb`K!i*Z_U(Ba&$ zXb1yT-$@XXw)SmyvkqiC;5Y|X_-m+bESKc5%-Ltwkjq(^Re3QpUW?tjbL}eKT6>it zc`sx}9U)9k8QHl*kH)o_rCU(XqJ#eejKun30>m4F{LZ*R!(&qY6jq z3#|7P-t8p%3$tu#E-*9X)i=+4U03^vH#mD9q_#5Lg`}x9^vJWlX=y8zed?Wah3T>; z%vvBjdR-}`T|PT-c!l#;a`hV58PihRN(DFY8H8kXfxfC44d2wPm>i>H%l3P@S5IFe z1+QG?Q)+G*Ap~lwwfIR({c5>|R#%13@2=SRdZ=Q0)6*BFYiH0GRWpIO86ule517^Jy*g5llidLs2=H{iz~tb)4+Kkg z29{=_AtKpWX0YwKvDS;R=Ga}oV>WyrTxlc833kY(Cn%BG`C4=P;)qtD=(|7GsN-r# zrl!^Uvxr6qkcVIgEZ21k*VIE~M`;&!qv~nifv**6j1H?V$p9H2BhpRcY6$u~H3ecj zGEWJ-`D0X*5Yvxw*a?0*CRZ!xISi;ck;*vo!XM|L zU`-8)l(g~yj;S;KQ+S7xNxSO3xh5PDW?!C%25n1FcS7bmbB&@0)qAjO3Vs}aJ z91n{Daj>RAjNKjeea|!wkscbjPF6qsBEt`L3f0$L@GE3*7cWj*{iwf%z=(PUtZ3=_ zse|3NE3eB|+L5ih1D?+^9+wezM_?ljvIxC0EaBHb1I<~oE|4)pP0XblPw_?A2zLGY zoj0srAh|!!ZISHm$mY{;7dqO=fR~Y7>lG^SB2$KI$$c-fZpKn<+RIG0j9X-MVWU2_ z5qJXq*6_r;cS7vy&+Qnu33t>6B{FLFU#r+XvRko>p4m1@(1W$05b`WS5+uUSoCGoR_;X?LXQWf;TZS_>eLK+Hfi9~yl4S}jSEZINN5VROQZ0BRFM zl6acCYdsH)4IVY;@4dkow6MPM$QrLErBrcdz4+9PX01v<3pFmg$jMKB=8<~aPGZ&A zA`+WQ$Qk_5z7N6Z+C;=JKo5jZ0_VI|YEq-n9T4k8ZEda)eHM|o&u!19DnFVR6idPx z=s?ZZ`;ZN0kWQ?5cimJ{a(&5z8F;C7w&NxIF8^((R>$4FV$FW=4kd}0PIqqY3E<;* zNF%*HZk1Y|ZUr}w|wn7C3?t4WO6eIu^y%M;UBr5=E@SLL{J z=w^i9usNH|@)pO6$Pf3;jjSiU$r?#!*1}~Po7rY$>?z1T!kBM6&xnvg%ns*ai;zU} znv>6%OBSaoa{oWw23Pl;PI>Zf6Jh`Kut#!F&6D@r{PsV*do?*9i~axERPft#Dri^F z58uH*O@+YJ^FNda|CSX}Plczquit<2U-3a$=6`1Sk*N6KU>90eSS`F7{%=_U9pt0d zgWMC_vwLFmF2@vJ-J0K%Py% zp>w#peXOi&0#zX#IW=A{ooG7!&n91b?}rNE-&ua&lcPWC3(tNm^Upu4yZF5E@@(Vj z0ZGqr>klo$_09_uofjugp1*@G^V=^xX#Sx^xcyIqVWQ{ie;N!w#`*G}Ps?sykfRNT zAItnpqxY_jJh(LW=!*RPj|Rign-jzDPL9r<9{$&iFe^ou`Tv#}6z{K0pmKz{i+8?W z{$WP=-?|GwJsX&OIdtb8YDTy@{pzQC@5Ua!|6xY>XOk~~`1|$$sxM6b*yR709N|ZO z;gA2WFFZ!;3(vmadHMO#>+cW$Z|W|fO@;q6vwYnzYb=&+ZUw%}pZmd9YgO-!_7$CY zlrMF_*_8=p0Eod)-*f{+PjT9*yzfiio|?(ZJnldQkj0{r!x;aci-l;1IJ8e(zpwV4 zmR7P6J+6c;&($#AF$E{i3}oRBd?dTj9aaMO~o)^AGDvCP7+?x~W$?u>-b)n=A^ zA1F~0>LaL6K8_o1n&NXerP)eE%q%$e#=^2csdK?mSvq?8jAYvSRk$g1p z*u*3P{^`Q;HDfilkeD{IYBp|FL+H;s;pm_q_gEd>z>@^OJ%qT|^MHeG@jM*cq-m&7 zgF!?9NL?Jt@;lQ&#o?Y9NhI5=R@4dcTGNVbMpzWpm$j`SahUmbh7YE+toS~lv!b-u zS50ij%S~lJ=*ed?MyH>oxPOzqT2Ll!E4KZr9(&{1Y4L4>j%$RnCQhfXtldw_=n;X3 z%M`i(J$)?%mad?1CS^Wswt37_9P*j08)_qo5@Uny#@h87L0ypYSQ_BpUq!{$>V2$2 zNRj>JRMVI^_RGyA{T_-`EB7JTNlu-6=hq`{+0vZ3fsd(on|QDmTJ2C9YPwPX`!wh# zSU=fxI8lKSF1XmT1xIPUj4{Z9M~W>x;@-C5Go&qLY(K;tq1DV%CT$z10T3i-M34D( z&(7fFnGf>(GI3)c^S7r(!a2RV0dv9~x|S#Hyecz7QIW9Xap;20z4gDUr+CxeaF_j7 zAY^>p$_RwU)s>!Xx5W&KmJzJ9FflCLGosFT;lovrMQ)32qbhlIS@nYIGPdoX1<0*P zlcXE-MoU;c8{<9!qegQBUG;<&y0o>}TwCBG#6|5eEyh=YFwQzn4_m0cuTJXY*R7u) zjR~LacJTf@Uj-P_ws{AT0aze}>*$OdTBcZ~kY%!aXmrfaT!zs;9l;2KX+!!$Z?w|( z7(oZ8Zr!jwGOb#tab&iIYLh>$l5IBrEG4_s^Y@ zR~nm)q^V(c@CweWz0l(I=h{jNs38I|u*o0iyOok~U! z=n>Wo5s>mLKl=&Crp79;FaSOs8N=<6U=W$7k*Qs078~8|i^~n-L}hH}_nM}ER@&Z@ zLeLJG#&My4nx%K^uUMG4`};K;~Ui>0}z7F2Sn zEfQm&9ic@bYFTPrCFp6g_tc1gA*eTvY``K=z&dZbG*Si&hsmBhlz@%pF|HaHpYzqB za&^pR+}l0N9ZQC^@+`5;7`9)iwO<>4T4-StL($hqxPr=Unr`tx{ zc%JYY=T+cVflcMq06kviNpOM#c{C;DMZ|qK^~8}-rAG6&DRu*Ll1XaSDwqWc-X><` zX`xzPYRhl$X&Cc!-r7wO^V!)P*$jc7Eg_hPDmaPg48`XXn9yds+HnIr_4<(k5` zRAlbQ7FuxX1mDe$zCH<}Tsc{h)uK9@UlK#Anj5gLkENV85aP4_y$C1_7dSqc495QM(#C}5NXOQ7f^U2~bqU^!0J<3X<59;lSgZ0nLX@ zJPIrpCg+WTbcfZb+cULVa{J4YCdE^?z9-g6e~5Qi+^EBdUeUP0?s-c>kb%6)f! z=WyNbd2=KB8VhZ2^#w9}y#vqktqhb9M8(xChIJ=)fHI8E00y1rKRYSMwYUHpk2CJ$ za`H4Uz8}Mx!{f6rziT=vKb8IY4v(z;x=VPk$ZAv>H#r3CQ18wme;fdfiMhKV1yW7w zd3mp7Yw#xjC>?vDkaF^_ZBv9Dc>DKyyU(RY=A*4Zm$$gZ8plW0!FqHZ^JJ+B3JHjdL2N`6|C?hXH%ebjm$?#Z{F z?Q#gU95l4{6)ykw)q1p|-1V2iGwN_wHTliZ>IJKbX@m~?whm9jw7UTb>4&gBeNx|7 z!Ws<7pOEDEcSRG}VhcK3}|F*L$Abwe?(>1+;Fm z$?@05*BM7=1M;JyhUjgDPF@LEMTo{4O3{ge5GyB@b%P%F z;T{Re6#y%uGaA=wI~QbMHcs*I!INv(vlL#>&%um47Fq~)_!Hv{4{Xf>a)t1D9`=nl z=2|#BvlK8CXIy)Y8y?DjW0A7SKWQHXmiSS5up5kIk>@sS9NfHl4}QTYqf?5FZ-;$g zp@aA!6fI1i!~N<3usRyDQ!vd5726xlpG7-U! z#8I*0#d!DRrAYwdKSQD*))Yy;MoS@HfRXUvULiKMELW@BC23#*Ej8G=@4zPiJgpg` zQ<9xm0bHVhHm)Wf6W|vqw9U}-fYN}m3#cD#3Q5FzvEzlRkUW5a$W+| z^_FPOkqQYqxWakyzR9Ad`-d7U53G!!-l_obVhmY?XLbVGU&&!gCl}vLFF7A8Dfs(0 z&^!R%$2QYcB{7@12C_AFIw@pCocU2GuqY-600GKE#>}$u=EHdTVXPAHq?2M~2Iu7^ z%jH=;ULv(g+=hxQjGSm8&|ZjC(-X;iB>*u}e7eAtJhqVNlH%n9mJTDH{OmJ6dFG4mWa^eD&$0klWp&4%>tu7nckB5s`lZ1>_86)#UtE{#x zF0K>15OvP(rH1+fFy{c4iy;UX#Ss2B2^WO8jTQmmS;C38qLrm)lv#Os5bFu6=~V1fFW^l$+z9B=Bzc1mN{KMe|02EL56~3)Yjz6` z+Xan%Wx1qNBlwYLIvTO**&D2M!+&SRuQ?jvS{kd$$8d@1e$c23d`#g}#d28=Zb_d3 zZ(V>DUszF6yn8(0Dxp>lAA(#mqOI~aIq%SrwP|!8nTHh6RTsFAO*jltp{fwhlwdRMaI{`JiehN?Ch{M`y$F%;x>c_mw<h<2Kv@@&%{tqBC(y09j}i7(gt`qxQ1*XMbz|jhq*0txLK<4b=h+l~(nV z6zUuJSq`vSaKf3p30z3MB=9+1NG%W)xU-7ef6wIaBY4CG~)ShUA*s?04E74i9!u60yKm;jyLe^#4a;m zKu2}dCHjJfa({L@wp8RZ9!RYQFk@!sIValN$a(Ly0V5tZ?Ge12S4KiGVViqkImzOq zj~n;uC6jZ6Zv0!aPRZ}oQ1ia8m%7y(YQum!y-?CM%cgxuSbfF0NkWLc8#s}*819nt}FO|_t#2e0jh8x5IJ1=j1^gFc?Nt$o(I&?5So1_Gy z1*Z)}VXavw&k(4-`vFH8y&B#CDRGrY;7dG0y4_IA%OJWMwY;-k@~EYYtTS_mw0_6J zT1Mb+=G4H22i@i_G%_&lm*KO&do;4LH1%kWl1l}BXL8q%MgxPUn}^$s28c7^M9zp? zC?$udZ6v!!ZfuAkss1ox`vO>+VdSjc`zup?XXTJqcJ z34kt9g+*{8r)K!o(gdS#``{X&iI~K@PTyV1^3swN;JUnVn zzfigFL7-XqDdqtM3l_xIBQDyK+yFgKqGHIs+j)t!36lz64%eN(N%?))VDmC2YHCX> zgK9r@2%C>@KkGlI&Ja-SuWyCJU@+xQF9!TMIhruCjJXPl2l(+40jMqj{a(R;<^u#| zh6|FqQSl3VIItL4B6xgKjE(SpwAP4XvF+}{dEMB{aEAbU>vN5Fbk!LyW^WLj*bi_r z;e#rZi=_PYsWP}UAJH}0eQtM@VJu4bo=ZPz$@($ zW9BubfTvW61eVnif{W&-lu(%XnrLqI0_t!)pOyB92we_WN5u5_MB{ne{ zRGuG$2quFh3NLn5Ff4*|s_%@hvU}3A_a)T)F!L&=ZV{2|44A8~`!?f$pQ&BXCl~VG zYAKHqnmdRppy&z%$lo$$L8&=_sk<5j$OvYO7(aWOGU1Z85GYX!t6pn6>N8z<9L453 z8qbE}K}qH>otR*xeL+_c*vDK*atU_Z_$D+o=D(Hcj-N7rpEN z_Zi(fPLqwDup~k5z;hjDt3X9!R|Pb|Jwl^DZ!z+fTeNq%E#rd+PUm;?FiTAy<^9E& z2n0@^BHs0YU3r^MoqTW9{*gFG4m=U|eJ$yRpN+Oa84^vh`Hi)hhZpXI(PrjCpx!SL z)IwZRdA~^5SWN^x7y?V+k(9D4;oX$I>`^8MpKuILmS|J{2Y2rk*TlZCZO=?5oiYib zw*=|UAc~-f3C#eCL69bDKt!4vtf;6HdQ(FYDV9(LL<~(4QA1NebOl5NYrwLwEEm`o zmc{Tac>ym%+v?Fpyrl_>ns!T9gf-Q?)`mX~o#;X6g zt*?&FaJbls5-DmSLfWWP@7 zg5Tx>jK(pV<-pG~U&vjKs`Ee;#Ko5`GO_2}Tbn?Vzb6#!8KWThSozmZ!Q%t7uRQH2 zUXs<`X*YG`fYl5kS%BAqfY%-ByfolUH}zrP$}&Sj*3lrXb)SJQpZ_Wk!d>-M0U)zE zmbEbC=wf4;=v6lk0u121C4Mh?SW`jceE=v*wT9N{H;0$MNY+j?(teMP>VZWUedl59 zJW3xXV@+X`e06>0Rk{ohxkUAXWc|fW`lQ$%5z(FGnSVbV6oJaNpS3-Nqci}wNY+x{uZ;X>LDY#v*YEHaP$B8RnhUd8%BMH0rspyOwqANs znYE6Xar|UvYGotR@u+(N7@~aTt~%L%8V9R$&0n@O zwBqPii^}~zH?PL|sx0$RGmIP=?lvEt?t&<((njwk)KEMHCInB?@*^hZD=EsiBJSC# zNvGkWCHU;EnZ&UTT`tMr=cXXs3JiG9hDEQ$IvOMvmGrNlpH5u2O?+YO@xC2R9`W8H zAXtqhzA7?u`SZO`X~=clB(fldArtdiPwsMrOA>{9*4T3NKFlV0O{@ z(3l-a3Krm)m*=)H;2@t5y_LJ#70G%#w|~yC8L{S_Ft5<5%-?TU9kCLgmk!d@zpjyq zE`GhcABAn@918kF_^R+zxxP9v$wCrJ=Rh<6b z&p%nsO0Ru(pI_3h@XItS^%%ihGpA0<{xxbWg2mSeEA_wxWyDR49moJ3jHRC$;9m7cE_r4||y}WNnD2nb20;5>FBJ zhB_bbt9<`FPDI$D1`>4{E`HFXy(e9a%gr|ldjFcAPfb@6<70xn`t%w!7P%`R^Ja0M z#U?IgUE&nOriYmv)s@BKq1Kw>?q^5nIX0;Zj1+JRdeBQ**lGg3x#q1pWQHP=@FgvF z#e^A@(hxsISlPifN6mUHW2P`hs<(|af@0=q8kr`Q2wb}go0v?BOYflh2kCWsaCX*F z9oL<}Od9eEfpVy#7cY%++}?AbWfd|N2Fs&idXjjkq5vpI(OjLeY7q0^;%`1VA_k?gTQf1^8Q)Dq1TG zU2QioMO&itGflFM8A;kh?Fr3Gev4 zFxA&%Pw>}(-+)|up9{SetEWzP8DfnvJ~|3}T2NGLITZCxY3lpi)#Ur$j;w5pATvy; zssK&Xf36(D2cN(vE3#MR^#H)U*B{2IQAeGpr8+?#`ay{r4j=$+JL9L$G49>@4` zUFwbEd0&YUK;+J)+*!0cd%1abM6obVp)w3yaPq`$nZ^Z1aMS4Vw*x(67%Ei=`$4Y} z>8+kD#gZ3C`g#YFl(>LdII`8{E3>E7NLs+LHl zR)$|x1*#sFx#+fP@sxwM z`wzel3a)B{H0`e)-35duJhKz+9NPW|w1VWe!rljt&Io`rG zFVltbUG*^Lnk0tNtscrC>-1;y)+p}M--_*y63#`JprtN9Chm)zJdCQ)l$`iSuEqXm zKQ*W0Y#Tn_zjTW-^g)(FcN`C#f;NsN9>OgOqmSJ*$hC1fNU(a35Y}|10mO zV97tmE~pvF{srWJl3UYVfF=Jm{o?u|j9pOHICxrm_sqr7!e2oC;gWyA1!b*|OWPio zVafmh#{O?kH+Gj_>c^7*>XxC(%eU*V-o5Y($p4_`$~YGL{{t>~d;w$f-~1K(SKfH@ z50n4tMcKW}UB9(s$$#&Y*1pkexBiL!Wv^ppwT)+46GKMc0`P4c3SLZ+Af}YDS!0xf5QL&vJ3uvIQjbN)Vrrs|7I6_#@Ge_SB3w;|M7)Le{A4A9C#0dKQ;mblCYa^C=CG#jD7&`);-F#Q#`o=y0N9ese0U1pTSDB#);dJ7e1CnsBrs!QBs<{-;V8J{&0KjYQ z9;NY^sm@Dz#~hP~dzBYBV;Xbv=RQDbr(84EvjnSq8D0^;Br}(?>$I!v-}52d4|UWv zQR!~QpvfMgUk|=d=R%k6IqNt-V~?sdjr}1S<0eC{R|Ux z@duDi`j~x9jXcQ(AY(9xm%pT=ByP8LcNn*Mnhl1tQtkY#!nN{tfEvIsr56bqnI;$> zjr3GC-ciFL`$v8}&#jd;ahj+vMOE(RE#gMNb{gF6mS@ZjE@hsagan73kTmTj_K_Y0 z;}o8sm2WUGj!SmFE>=$>%lrEDzYOhyb*W?}A`&GUkJTL= zBp8o8p&1v@I=VCm*DaO+P^!?5~FE4SJ4xeuJu&YL3OMEWx_&AidyS5+z@ zyYkd%pFOzh6{@M3lzMgUfM;?5XFoQC^E=>4|M3bk(zu?Saj)p}aVkTv)`8~{F*rhD zE#*jK=nMCKrl^(em49(>*Yr#_s@Of!1rmFuF8vLy`DE78V7>N$E0mrJ4ajo| z%*;K~kb zE~TYfDustlpBk<81a$=>b%@5zu(sWn!mMyNO@M~B3RKtH<4E5>rt^>pWNkps4oiRS zm*HMECdJ^X)M|ST5=dF05UIqn>nMveBOvp8)SKfX{h#Tq*g4r&9 zZ$&oDh1)Mg{5?EJPc62+qj4&Fl)4N!cT?Joa~>CI4RT0p(Q0NXvkEW*;Oxv~M3C9N z$9eYN)?{3v@M2t2D1dcnKb^h zNUoO4W%5%k1-S6VS*eOpgbY-uZXT!Rh+hyrpDbjVF!KOJelP#Ch^i~tcxGJ>sE-(F z1Txoy&4@f(aSxyX9)||$>rFS-+k5d~cfBTP=nEdPXgZ<3PG+>6#Uuoqb2l?3BUy{P zVVrQo29{f<)3nSPuiy}c^7hpncQqyR(*O^!En;_5>y@yLD*imNy~3!DKM#ekW0L#( zT`@#t!_!U7v_)7OhbRHv$2iQJ@yxn~S!v9q!M--%K%*j3HD1T6XboCUw9kRGo%6C( zn34=t8vOUNg8QZBnfTKo@ko_+-g*)hT-ol!yum(0oKa9pYJD82oVN5-5htBy>l^8p zVeE|QyS+JTpJmT7eqIK28B{B4znWr8dj^ycwRxRs z=z$a+YD7BoPt=^v;l$nF3+gIWQ9y3M6F$Z5kAFA zl5izk)F0H4!;3mKSR+<}RE3%P>LJ01>P+`XrTj6R;|FGQ@#gRfes-mxBDm`o-n^8Z z9APKeIKj^tY&b z=fvxvt?MjwKc1D7(w_kBkVC)nyb&_+(X@IXZPwKW?#^_G76eliTrKf(@g5yP2fxW< zmd?NFv-o8-X|9E)CeLkqONwF zge19hCI+U6Z>KY^7Q>#JqRtDY8LVbuAUy3MuGmLK4&BN$xAh~~erBGucv%Fsf4Qw9 ziz?A6>B`!;LA+MR#WB!#YNt)b>%*{GwBn4vLwF}FlRc+Sx<@ZyCW&M@Y{ehE`q#2F z-S~HTcRilryyuxPcl4D}qzrh?AvRywQV-hq_m~SO=diZ^H=hF@Z-NQ`N@KJwsa;_5 zI-kGexbyl-mIRnBx3_6^4Kno%!qd)kVC;>0JP>IVke3O;wYP9vq!ft+BncgThe_r@ zT=OlY1PL`@6Dsd>`#){hwX@-i*@SjOh?GL=^-vMRX+qk4f50LQ*)PZIAl^D0;{KUK zdgF|Ozk*iXM@})(zxR@4_Mv5!w2K^q-wa?C88xv#%BB@uERSQbs5131aueAV4OuF{ zf7${@U12=i3Jf#s&qi57vl~)p307B<6WH7!cl2q6UC@}Tjv8PsOu29Dg6Aa6LtXw0 z_W}#0AVuP|MnwJrg0X)gMN-2Z8Po*1X2kT-D1MriamwN1H0uhxg=i8@6mzD08+n)# zB-s$TY9r6?sDXe)oAvs+o|Fba#Vt@#I&E-$_=F}vn9d08_W;GP7v>A#3sUDTBF6zX@fOIHkiE)rh%i7c;pnYhID;lq zsKn6SE7v|T*Sn^O<5?2>g>#xe zXoi%!{G;jzF^uz37UIFlPmKoNbGSpTLt(ry=;aD3a<4D0UV z)`FsAi?B0teANWf%vt$95viJIgf%cJYlNkj)RudMJEv&Us%3Dh-%3N)O16pC1&fsW zZyAj-g*XK?WkJ)&eiY;&nMF++z=8{GQp4>K>15FZ5Ve zVe~+8nH^v(2~rEk)8(2+S0Sg^E6*=Lnr4XigTa;PNq6p9CnnA0>UxJ6+EFC*ZuRND z=)z@hT@7dUA$}x7)akGgG3zk2;)gaPFiRY2@8+No4?U-_VXSOX&xTE?`!> znB2cjXjKY`1nk34;?yL7oj8t=fPdWtBq*x533zRB#I6TODSM@B5ut>z)nGVp z&?zO-sl2K*%|cO0o8xe#RMU=~T0518P#??9RijTpz}P(8?3YMLj_uEPo}r19~s z4-U|twVi)+vU+x~A&k+YffW)sx&7*tjY9Y214t)k#mz*3$jJf4S7AFl><5575eOyg+;!FZ@e^mOM0#|8+ zQ9rkmGK4-m<2p|}#0;4+D&+Vd!;48QJ5UbxTEd2d!2U-avIR{^(~WdXSy(_|DtePP z97AA(!NOEk4(Z$>~6fc-*`D+tO$!^;smfj&@7!Y-^P8@&|HJ z;H)%*3tNp_a|lVQ>vS8Y%wx;zv5q_=olrgIEohQtCe~?~qq%l!XV|5{&et*~Tr=?N zbSF1v(wbRO=qD*y&9pPOtNc9rysKfMgGPotDLG{h8Z5lcyK%ZLI zsYB85P_)g>4kKaB309QDX)-e~Z`_2o&u{ia7vTn!@5zHX-G_(}KQcL$ZSw z?=>tCl06z|{(`Nl7Pz5nNH}u5c1|sF3)r-axU~>l3`ZOg=A~WUk zZY`s}GJK?vyu5^_DYoA(xTho{OwP$ymQ&UUhSk}`B>q+e*-RcLd71({qv-e7>5lCO zH6@_Wnh8w>?5h~vw}PI+;St0{sTeUXn%*EG?`7`~ z6X2V=@V?uLDH6*5i?jmvzQq&d%45i619<4Y+9l3bA_rWosMVftMt)n~aj=YjK|)z% zwBQ2r#O7&R-^ehXg(I>@J%=fQ9LOTj+Cuo0h)vE@0bhaUn}BC!tVi_OLqv9^S3+p< zh^F~W4smuD&q1SHI`rq5=9Dt+f-r)_#``3YJDmZ?E6C3Ez>95fyV8O&1KI5u+ln{;!N%aidVcw?2IgG?ycq$c7Fy+ zymlJNcalZ+-@(`3T~SAAU_=kmjCm$;<~1+p%+Kr7Z~q4NB18u?*7DW}+(h*KIwd*F z(3HtH$^(<+QDpWjm05~v*yL&v;n)#!Er)1n-;u8I;*vDl+dy3im{BE9a0%~lV&M6E zWUsFlkJIBtBk2AOxM+%&%?KCmUn#(}iu~)|G=estztbHtKLx~gA_dvb_{WSb0*7Y? zjwbsAO8zeiO#!qqM(IpSZ*vT;oG@7mL|;cPi;1jj&+lwxL~nTykr-jvT-A0QI*EDUmLWOLDw$1pEDy zx2Hr}*&^p;gyVyNgWyf5OWx>>ZH*|ID{#Q`!8e-R7S2i{zs_qCp0Wr2ID(u{2jq>& z`WX>k2DMEvl9)XSvWM+*aw7ZP4+6|lhBs2Ly5(WdbA|xAlN2{ec32{{{eb+l4@mBL zOjzzjO_Jh?gdo>yqQD<;SA22>31*EcXRVQD@xxaKkQOFk+N3!^_-IXe^oTaTV}2)6 z4-hN>vlmZrOQgXYpR0WewBD}r)?t4Skw!^m##p@m)4%Io8ZC|xM_wWLiy{I0BA#)| zKR|4N2uxB~_Dfg2E@k7F@U4M_t}M$iyt0A&|M2<4w9a!t`XS~N{p2=68bmSmP1^l# z3M&FAQ@q83h*Lo-v)J7oE&Qylj*78du{F=@?25yST3^~hI{D&9<3EF$-6iMN9LR5C zOR!Ca>gJ{rUhim^-vKm?Cz0IZoZouaHSCK5yN)ycbJTeTLq51{`@?jopjn36)*0lx zuH(px*5NmAgnClA5J7W_)1e!(OBp6d&7AK0-D@3AwRChoFKHho9mLgcdfDQNf=)I; zcPA>w0G!#Dz_eT2$GlRdlB5q~%M(DV^~GJElD>Fyyl+TtYX%U9wY5$g9W;1sqkhTb z+t>dZEeMa$%j<8_;Vqj@KJH_4b7d!3zBrj_oH8>eS(ST?`gVKoftM>lAEPwv0Ej)s zI2Yw-RZR&fB>{xR(FHYL2FV<75@p(LPS(5UXx-v&41OSaXx@|vQTAi^8AKECf2b{ zP27s;Tk|df6!Z9(*V&5@0VV;Tjx^>IO6HSSzo!&Sv)G)FJnxm7^^>Of;BR#&sZ*g$ z->^`yCk^fxolVxOq1rf+@X@X{=}|G&$DIz!!w0eo<0F*#9Y5^Xr$#d*m(F#oDW!R- zM7%UVo=+Dzi9Ya08>r^uLG+H+RH1lzV{}C-{eBCY?Y}-vgN5m;)_b1Yl(5AJ-oYoS zS*_#0k-AD&xB2N(8=zXz6%gpZXf;YEQOlEE3-2XE=?5?;kNuLQ_O|C$$8K?Nff+rcZ5~%$uGX+^oaZSt0vK;*JyJLql2X{WX zpVk%PQ|fWjsaIZ3P}Z<#qG9-PG9>Zv%TumnjgcHAq@oXZPdKD zs+Geg%F5Qxhk_~X3`}0r;$!|y4&286T^&i!g21Ni5NUA9v`W2F-hSH+U+|Nx;nyMY>);Q;yobNYjw&XMy_Z2EIdTQdLMozV9FTP@zNnEbe zp1L-EvhQwRd6vo>Z$^nfKpmQ~z0C0f5sbILX4)M@75hZ)l+q$z82|nEU?OJf9k{ zX|2WzDd!bKmcm}0ZyZ-j!XJ^FrRv=yFOf{t+OqL{gO4Wu2fD0s-n0Y-yW*}q%2T%; zUX#)3ig=&qsg0!OtVc0$a=Q#WY&n~Sou5VuYa&Mgs4G#R{DM)@-|bKjXUYf>wK!7} zKF>}IS+3g7Rofw6OA@WcZBV#zOj@!iGxjRI?zKo<+qEjTB5aug()u9HtXOZTJm|J4)kCvnUBEs_<>#B}n{v}+?NJHAL~)8F{|XS2>^6mW zm7bk5mIUrm09O}5CdHwv{ertG&Wh-Dk32guCEwnN@qsiwaK7hw0H-SM%oZyGhKs)| z*`2**Xiec~lo-Z=mriq4JrO-B(6#E%;nYz0#ZnnmlypYwZtzyIgk7ki6rts&_nJ-e ztc|EhV!L)y*vXcB`=vp}XuHA8!+T!?Qv;b>Kqcww#hIV1&yD8_U^!&>ee9~V)m?c< zH9#mFyu7t897?o6t6d&mGacx6N~uS614L@KY`m0HdVMxMn>_J6ZJ}Fib;zU+hk0Pm zeXa8>L3wV+LP*&4d}_HMA3L~JN5)ra0k{=3SB7fS!z%_~Xu#qenWpW)f=5Dq{q=$s zE{@yv-4A6rwKu>s4X3ZNv%)pp+#`%KV?mN^ZQ_tR0BohB$0CO#3<@GO$|PzWekm=WWX#PTbpnYxmhNo!eagn)vM~VUGmABHC5+kvzk*^)yz8V||1F z2^+0{Jw5?$02!DgAm-nWfaazDr0s6POaEEk|BBjMeEt))cl_585VpVRSI&O8CG_ak ze+Kt;5$KH|QR}ae9X%fE(A*EBbP(2mguM zAN`Le;Md4Lr>^hhdCU=jiSMzT{Z3ia5atLdxHR!gd@p_Y%MsA>;B@Qbvi9d^F+o7f zRKb<0Qfy)W%Ms9B-qc%#QDUUZLO@%p=e`|j_Jy&b@O_rJFFpKm?4F6Yl|Lo(x zhxM53{@K*KCojI=fA#SRCIxu&f4dampZEX&K45`6wx#AtC0!{bHOsJmDW;c47GU47 zP1u`7%Rcr=e^ce{6HK>kJ+J1ffdX^?`mllK>N}^{TLw>iwba}#bKL#*$w15b-_CJT zDEi*5wZoOX0?Unqt#$X$^DA9e>?I>-oP-K_IgVFg5xB0W$QoalO~;DDh?Z<02JlzX zkxBAARI1iReA-b}VB!`E#NyOA7_cl9CTsP#m!B+rcAMt4cc2`Vh63A(3y%D_EDePj z5ghGG^1_$*i57n0ejyjb@yhY;C0lrEX6s6AxfQsKRVoyQwOXbk!t2zv+JZ8u#T|lr zgxmSUd+H}G-1eP*DVA_-5?=Hd%)hJNotB*Z(6(8tA~7~!&)P0oO{|D$HI+_PZfdqq zNe;!^N}CKkYvf&hN(P-vx|BA{!@ZBJtxNCTKnaufp}Oj%3?*$Q0a9({_A?G>2HXPF zwgvp$HwL=9VW zHdh(y9#Au0Ih{DAZ=3Luq;6?0L*w^TvI|)8?E)FR)cq0Ns$QGgle^M=ikVh;k@n>xK_iWc0>G}WS1pIaSzOREz-}P8lr*qC4u`$O5nahS zDAE3 z+lNC-Vc$cnj*en?K}$##SGWzQcX?Y>6;>RwZr5v=h zh(Jg(?b54lKg&1T5hg$>fzDbjhKKiv`c$0yfu2h;FW|`_yPw(99};~B>Q3PvOVK|Q zROMy36pO1Ok&2AM3YBz!>Tg3eD@2)GA~9G-uUEhtVH{|wRnWabb+kLlI=fsnFM;3s&+d7(#2?xvLt1mtfnhaa&u2;N(=h|X@U%C zgOb)Ne+|1{jU!8v%{fK~X$jrL{4c2Pkk6soX*VS{+PiZ}f}M{5(&&(;Eo^V1hM*8* zw2*t|4VA55$cn;<{k+K-qjUGWhzw@R(uNDH+FBf8f33l-H(ewu8*S=8Y0`mRVHM9& z+-?}BkYQ7wrD!)jQh{;nnLyvJyQ-7)$`SWo#+G2HjPFikpXP{G^3PUT(o)ra^7qCj zaFo8I4D&b!^!Xq#5Dz!|}BT$ak%m6&|My1obpPmA#(9@hF_VD~kt zYC9$Ol?-O@{sg*k>Ra!Cwo;<6BtrF>S{Ea9TI>@q0#mhtKNb)BX8~D$D;T-W#dU~# zfH%0<+`_{$&lg%OpuQgZP0L-p3JhZslINnW>E&s#mV|r|?YA<>6XB%QSjnX458FkZ zqe1nJh?*Z`yiR`5*{o)N@8BxAmnYm}Kiwabz+g(g1DIvix9a0gay~@;h z?|f4`AoE{YTrM#p)2jB^c6HV}=0-NL>rEO(w_izfSpu@|vjU_}cNxE|7YB{AM7X&> zTs+n}{k)hKDw0K5yhl<ykzMDWV1&POn%ku? z41Mh>sHnkg1ME;owe&+dHyq_153BFDTy!B>@vTR7=OQnSQdzj*WpHl`oG%Ry9{ zDf-QQxUEcY(^jV5YtvvO+=qmofZLs)Kc`e^3v1Yi3nPDzqb}H%Y4~ytU{lpS z{pZj_iqUn3Z-ZzDB;^b~_&f9w+2~J?7!*`Qtj>7C#p^%mdA@~9qD{X8w1tCKbMlAx z;3#Zb%~R(qCRQr#Ge5*00#Rljdk=GL_<}p6BCuY7+^{IjT!fyk)WG%1SR129*_#a+ zek75NesHQg%DF}5M>JX>v4rXQcZKFjfOHG$DgcDZu54JTAxorhe5i1FG;{NjQ~mB_ zMe=%S#ief%;DRbw;;IFxas`|4=A<ge@BW%?K1d8a0?fOkTE=UvuoGZ?n3VjG{GEHQ@+s}CE z38?aS)9lE3uscox=G>w;NGUb)tl-^N6+|4A2%?Uz;ctk;L{7mzcf&?L$;DIRfg#H2y@(YcAB#McQIu3lu z96rvb9Tos&WOZu>y#^rdmgD&XoC6zT%5pwd;{3$;h#6wBf)*(YBufs!vy?cFJ1i%< znInUElM@n(XE|wu88E9!lS+xviEvpEy+%P4&fpvrF3!Df%Tu*5VSxdHQ*+PNOCY(* zxuJqkya>l~z&?=aHHyQnJ^r3~Bz>924q-Mm58EX!B*>vBOX<3BUycA<+M>CaU_GIC6%iIUf=VJ6QuX8C(? zlFsEheXF$AuW}c$Ks&y#HjSM38KCY*C<9_`j)u=SP=6mIntw8gOsf#U-(H_IY9dE4 zEWO>e2D=N+aEo52Lw@pnwI+(rYrtNNT;QyDU4h#s-(n;X9;^fPjmg0SNPr~1(GO16 zrcYmS`!Q7zdB8iCn|JY>AstI|f@sZdM`O(p=&u9ziWR5Q7y)$}huvZ@!7&jB8^xRIss=z2y#jFt#Fi`lfP zF=t;#z>{;dg~nwWZ%P}q-3kNphf4r$LAHj7aOJPuC{Lu?;!LP4%7sf}TNEhy;dLY$ zb^vre=$w8N#iFkGyVsf5W95xmMHd$2GxA6`76V~ud8@{`!EVB*J&bI&5GNEX`;i#} zfFK1@q|i$EICGM66iNP3;{L9`bRc3!q*EDXaSmgaOtk<8uOcTUzyo_AM0_yh%3hrG z7$q;`_m6;|n6lCwSSzW}$s?l!1;bhH^H+VdVv5wAv}^>ZYF@^zUC@s!$Rb%Gj-SHI zi;ee#?_5RZBY}bj$5Z^+8f|U?FY-)xf_LVI#BBnsL^6n6Hi3w>2^-hDnVbJi=f z?zrcpbv8Vj&aE(${y-{1Ocey-v8y*O?!_pu%N+4-ZyH;Q7+C=p;!+(N#g!=~m91}OIa<;)-q%77m!8+7 zRmxJ&H6QTq&}lhPb&ln2D^{FUp2Z;upd>hkQ9HER%N=Lf88Yy7H{`3!fQUyeW3lI> z!SX_$2K%Lt)6!(%lxyDo0pBx|&2itGT|#yYzv=jG`m#zmKK`8_p`5Z4$uX2}xg;T= zv%qps#%?D-AH9OZWFKwR>C2>t0%2FItP^r5Z6Cuw(t)&z^|SH*^)v%W*j}tdpZFZp6{Zr@hm4?M`dF>9{)BJYT}Cd)NG| z!k*?#gJW!W@Yi2pwkl`sJyfzVZ07okrt-mMsU>JLEP*y{Lr!u4q5?=5phexT5#<%n zed{2cZhM?ltZYp?XazW}Mj8tfejO41H4v9@WpsZ%#oln~A%pTO z%Oj;z%VcA5ZQs6?hv)(?mea}w(ERV+)#16#p!gDglCne2Rpm5bG5q-s@Gb$SCV^l& zGP(uej?wtKu5eDw?kI!+6{U+s?0m&F5J{MuLP3INOK+;S0){I_d*o03em8se&cYS(pIHYPXqYlPRw`~3z@rtG)8ju#O$1h(s+ z^p~}{Da+h~h4W=tlBgDY(r~toAJ%;^_rl0T?La5wz@tfp^^tni>1vI5Nl%Ftkhq_5 z0ReB033e(jHL*$fSRy%|wuN(b!O(SPXxsYjRX{XND$m7>RVo()>DaVY#!@DDj&$=gYF3!(3 zrj$OC>H{pHT%Su)+u*q_>A^s}wz7ppbCR-M&eh`M@K~itF+sujPx0Jb>xnu)z=^{ zC8-AZu0)^Cxc&TNDTR9GoG}=Wp3v&bEetrlBsNHuKkmULy2)1AO91sRpuw>;-N#K# z+G5~jbF9v_b*F*#qiu@FIFVgFt^5!{2zZ4tj*<>eY65t6=u17S%M6f|`ceb*@y(aI z-z)ag(TSI@)MAY*HA35m5MP5AtHLP(ObCETwbH_G-PvL7vU&0h(eDgx^E&(0n5mxL zm)8PENH>2>f)DK3LAN8HZ%y+I$3O-=J9)(Uq%H!N6xaCxaU#;|9G+cltC+%EW_Z1; zw36k(^fKDac0gl0WBN1D`pM&hu(C7`$(CP*XW;EOjFMjH-rO~Ly6J|J7+l2WZUpH| zW#Bj6*;SJtcOwad^3{yH z+Bk}Aff9rCid_BRI>j$4V^bsJ7$4G2)jBMgC5Dsq1=gW6zdM&xj>@+z;Nv}f2uteT zxNHYWa%f+pX8$rk8Sx@3rc^;feB4*pgb1RXO%`S52R!cBN3@vHh-Xf$D;F;s6?0~Q zB8Sa%Kb+wyK<~;||8t*6N0AiaKJ`A}Q$8sOGf~=TI56+sT24BAGs|r)azW;PD}zzZ z^i+|vvkj;YZ{2kHgxVPbd>H!sZ^lIlzWyZ8w+E*xNU}YF{H6=!?_ijv&t3g9Wr_|| zg195e&-o%;(sy8~SBCDq&&MO*k|1`+jeil{D$k@HMO<~YY$R(aY@F>w2H95Yu*I0F z;u(fu`mubb`a4N~A%4>{$`1BaQY5jZhGF3)B>jt&p8;n5iNOM~u`N^@q5t2&J+)u_ zpi)=O`6pAI#wu39k?0&T;A3>`mm@&?!pTy=@P};KT)i&@8ObF--DYIDg)0u%obG)A z5)2E%N{sP601t+PpM29^|F%aLft3>3CX+Qw$dJ^0&xl$Uh;vXXEe*7(Ha9dMMSI^G zTP}eKOf8AvmPOm)!|BVW@)UZ-B=zu^Z|=hb^*A^_=2g%xZ~yh~dYQv!i@crm$&`6M zxc6gp#sz1k-q0u(O9Q?dzv$a}lVn2G_PF;IMxq?2l7oTClc?gU)!7}-U0S=hpm4HQ zGL4IhUgxJduVn8ITkhuMp~6$RHk+Mck%m$t1;hvYZi+P+(jSwiJ?6UfFmz8qWok9h zS{1QShC%!>wD(zN?|Gl`Xi43qQah6lR)6evK zgDsCkWGA`4I-$(~vY4Gl#jFL4-|O$#p4Uhq(KS{2fz0)b2Nl3=cVO45KfIe35b&H# z*V~1>ZixNxl4_VJW`|Q>rmKL?~_9yvu@gk zw`n#;Nkb{RoZ_@2QDO}NiE;VPSC@0y@Hq0Se03{N0%*t&X404b@rZeBRhzvDg?9P< zT{E}K0vVtoGxt!_)&o$cXPj`)=(=&oohZ_rl8G!Rz8_(iAsd(3zTTz(#nG;a!x334 z&DIqztE!R_$y*M%OF}i*GYPx^?E<=Xw6OxvbVwyBsZ*jA$Go*4x#ygK5z+mq6ZY;@ zGQ#i5IcJ*CokEI`rW6!I+8--B6a5oi7rKfW)aOP`X51;#q zOUIeEi=GzB_{k2|ANkWX`wbuSKpXm#dx-VWyp>g|qffGXI?h~Ho}b3M%56Wh24W*{!#NvoFI=Ec)>Or?3CL+e=Wb2v=hrfB_zWLr%5*@U&qIoH*-XKof24H>svmRa01aX+EdUkV2KFr!SQrG1BI^J z&!n|0WIW4?W5;s*D{wgk#`sf4=J%5_pA2%QEY0R4veLvU7-NL0R|yg8&xOvsyHhahzs!`Lk#LEb)Cw52~sKM=qlmo z^M%r6RXay)BS&;n>WkY1y8D?vQ`9^K5R*%Z?hH?(*B17ZJd4vaA^-;P(7PE)_hZ{eiTX#&+|6j;&rFSvETW(q^M)XBdebr&SBcnl-AHCfKB|)Q)cfpb;-@C zk4hrdR|cTU4X7tRh7SMU))NGQ@oO%Q3efGDV_ zNeCS=6afJ>6cGU-C;|d%sM2(T6?;HbEaL>*prgz`GvD+5{VvWr7w6*K9PU|Ug|*(b z_xpK1&vP*dBlhG8bv?(t5o*l@Tw3C`AbfDHc81VQ*MY9T1DrlOvI)=kEfqS?uB9hX%YK1eaZd2zeY(2?$;(D65TCW^;J*9+)#y zF6vAtBt|>2P$W|hY;E31%p+`Xcch)iFKkzcHb9M^tsRUpcgDw*-gizNFFuVv<)9)9A=BX=gpbcV;Mma>8SSj^$VbqI* zT&wcX?#Nm`UU;+Tpgyf-696|>KAi9Tlnkk|LDdDpCi-$6jv)fk*VpI_`T|G>X*hB( zG||6Nh!QZL?oW?mSV!**zTz+TPhw^n(FOpqR#dljy&ctDQK3h^6uKJNiw`MdY|b zWqB?c;hbnL6j_gRRh$9}lu^D)o0lJY$%P4>zCJ<8-|I9QzzXYdr1w;z&P$Uc~09 zm9U4_YK!@`sgG`>oJRvT&jwI*{xQ)-sU^G7pEHgN4YD%Xld zS9E?5YM6IwMz-$pT?I3Q*Zbxf?P&pukWkxyt2muJ z3SVHJ?m%|C`+_J-bU3IX{=?AFLNhdjj@nux#!Dsdm=T**jtO~QtDUl}q_d8{>H)O; z5@>bU)yHpicZc38<7%%wb?OYA;IE3KfxHYU@>uV})vv$5vJ`WkqeW|Uz6kC$vw1f) z$>SB5#CAv4=uqlD4yk;^mU<DSK754TXN08fo- z@?$>xuX_WBw`UMEojW1&Ya{rvs`h$}Z&p%b(%zW)|Sczz%`-MG4X%B19B4Lf4l?#Z4msAcc3jq zE*;4HPk`WZ=)c~9|L_p8$6EgrAc){x`LB1NEjjPvUO5kuJrFDBA^r&v{Hq=)XxmqO zQNBCzZ+)OY^+abzN&o(Tc!>VPRo9R4|K%a%FofJY@GlRM^e+#wt894R|K%MR{x1(P z{SOauY9{T>ox^qa<=p|^sqP#(4^jPZci1GVjwHKLnm<=ugc_sagU5B!&kxOBJn z%F~+O=l`S!{#QV-c)DY_u5+}pYr0Y19q69?w>uyg5d2F;$OQ!d3r76g9k}tf{)Y5| z_}Rt(*awFHwGYUth?|f9=?;irHw}F_H~PNyU;9A&*vrckudm!(?3|XX2j2gq9=P@S zid;Q#_s@R0ec->{feFd;f7JueX8wam+@2enc{zGdo*sBP{ZD#8jz|1HEyp7sE)PBa z{y*IT$v@qJ4|kt0JbtnG=()T*@Z&e>@BdK`{L>xyhmiRE|6BEd9D~^R{~ZS5f7;*S zP20w^%YwT3k^JJ0pk{%MXG=@eiPkT(Gr=CiJU9l4M^h_5K80&o&wfwq{=+jQv&Csf zLZ$=#DR0ennY}dbRjhRw>s8OCp`b%&;xcxUKJt(n_Ayng2Jfv3*hO{DUl{;GJI8WL zecVS$fMd@&N`wXly6alEu8KSNU@ZG40_M~toKv~@C}I7pM_DzI0V0$yE<|y?YUW7;1;LBQ^<`)lmfQa4qg^w zQjJE|{bl7)sJkVRO@qN>L4OO~EAHb6bu^g+Y0U=v^L=)l8%AI)1s-ZS;~L6l`x2Sr zj38O=JfntvMGR_u5Tmvk&CPkjijzd6dTWsm;~E$f zE~=(-As`XR*5y9%WI?nQF)G*Q*&IJreU=k{jyhACPcYP>?a;HoHgAepQ9J~iT(ELh z_CcJAh2a9)+T16N&#LN=l^~oLgPOT*m#`MKccPU|BH9Eri1DQ}(f_ibK3_MpcE(F} zqw5k}(OF8+Dg^}@pyJ$~lpNg&{l#5A!Vkn@utW3C2j4DH>3z-3t|bwP3Qj@}c)YIA zFa~bOk#(sq80{g6Z}pdGZq$)-RN@8qIw*%2OZ*hX+9K8-tdkVjrzU+J2|m0qtu<6^ zBy3mXb7E7xx|sD@2>dj|$Dkqa4to5C(Jdc?vw}~PSCnpj%BSeR*&$=0cak3?Ub+zx zYO%E`Ijast(%WEao?I_g*h>bTg&;_)V8p%jx3`I>mUt_$yEz92Ph1@wC7rr@#4&pB zfkm6ic0?y^QZsDf9PpymOr-sA+usMqSOAtfikAAwq2m*JA)#-|&9U7|w|eB=kc{1AqPT$Lg)1!YoJeC<8@f zoX|fdEC%i6DKT=R+F81dC=(FjuKm)gtQe6*Ktc38G*7-EL=Nl%Cg!$*rW}aAFri-poPaDDh}=awmSri1?_yk_v+3YR6%I^S z0@=~r2~Hdu#OCA|+Q%x|NkVR!6Ch%mFfjF?CIARH>UnefR1c~__G~oG0j{7a)B%f_ z=T@1yV|3E+Bxg~UJG(%Y&E&uWIEcdO3x$v{4i+HGqUX7jFN!_oC9i5%7#sPc9<6Rm z0L-&t`fG)p)atkAR(xYI+wdINAptUL(F#zK4jGu%qpX?!>55XidN_B2$8jfgZ!kJq za6dc6dqF8=g|k6%`cJ`T0uNLaY(V;()r5%as+haP8Xuwv8|8X1d>)-*T#qsxKosTj zc$$4L2?pno!0OQ3IG1mN@DJeOO`K>SJHQ)q5~^H!G=fx=T|#l@iV!7U24URoEQCc*QqeEziTy6_#gc|Jnv7R&e#>?uJawna6wRq*;_Ct>e z8zlg!Afh{H*kavk%WSZ_`M!oJH@{^cK!q9kntvm^Ifn4@M1m>3Ar`3=V26Co%Cm$o z0SG=Br!X;sS0t>r-qme*PB;vW-K68t6w0Yy073K6%opn`<_=DUEz7)&(A|{tX+_Ga zoq{O&YJL%Gx+W|(WQn_EqfUa{+nAtXvV;DX7zMrNLhveCdQC~*@Dw{oW#`qwF}h;x zth5w)Vs+(4sR^BSwc7e;gnV0EyuDTya6ZP}HBIDoZ;u#&PcsiAlSYVnE*yN9jq!sT zCaH)0GR7$uH$k`Z+E@ptde532ZN3eVf#*lJ*29n@&Wf5`1-Fit3hZn9Bfxhs+sV;R zNpU*6(26k?po_N;JT;0KU(0bqf2X7!n8t-{CPdr=z*HL=w9IBz|KtYgrHK*mcHU2V z#OY9aI}fw#RNZ7bIP4_I(~Ti;;F)!kFro)~VTh#t8D1`5R5`nkUbre!>f+LnM`|hK zI4@|LZC{iDMQm(-Bp1SD&`dBP1ui{JaLbhmMPr#1h!o(b@6mKKmIdoYVw(_-LvW1E zJ-80do3J#3mrHWB1dbZDG&^~>J-IH92Yb1htbWvYM?sZ4u6P1$D2z>3s&v+`6qi?H zO0)54Y>+QT1pCir!=*&doSB%nViFr-xPvz2^VTC5!G=$Id#bV7MOd90T<98KV6{_6 z@Evi0wu>=jc-ogTa$c`-THE?Y`M5!hw91I_KxI{LiTt~aJr}pUL$$dtxxeabLmZ5S zmcOM>Q)3ZmeT@uYa8zlgeDic&RqG6=)?gk(aA2Z7DPt`+t^@D^8v3!DXm~>wsybDM z!0-0gvn7OB33>WY;>8Goj;dEC%{rQW&@+C93y}fTT2311wq9)`LtNPKM~~+jDu`O_ zHrB>1X{7^Q3eI z!*ojcIA`JS75nl{F?sKhK0AE%M4Ma6c^HSyfv`N_K`tZ1-&1)~mt+90k#kt4%k@~& zj7HD-CQvVzaxnLZrbv4UrFz&zW1AN-)<^?Ig&wX^&^igUo{ESS zpt5Axh1bNRVpysTszVLqEheF8K8TbZW!veVosf7Lcoj(q7R!Hq-);^#Ie5Ty2EAVZ z88fJ5cBK`epaBQk!bDcdPG}P`FlS&ZZ6&XjL1NEE!&8zRKO@_lRS15?_+WII9X~M^ zK?Lkn-V#;aNuFQnv2eTF28ehO<`SS>2k+L7gfKZ6WjUeJWLkpbqRhz} z6cG}(R48{D8`BN4)Sa$^cD=*viAIPd_Fiok))#Q~7Vf#oD8z{TARAmT6YQtwy3@;% zV&H_SXXzp-je&zv^0zNrI?=$Z^qqeXmzTeE3kyRDq(p^>1@37enn^k!vZ!G~DuVrc zP33LAJe;r!LBu{lg0X7|r+p3?ETLA@c4iqk>3zxEpKq99zrjOdQg=uW?fos04-|m_^G2ABjs-C zrZG~q4j0FZg8iOA`170&o(UDpkYz97$23&)0N4qeQ>YY--F`q@!i5cD?7iak=TK{_ zm?_vBqZI1sp<&S8r#ds&aLKQBgYz1<%G%UuJ0-^uZJTp}6~cQ>h)Emgj^Lvn;J%gA zVA#%T+=?gIs{v&ip%`C5i^s%R39IH*&2H7Dp!z4*_DyPyJt`NQ>(a`Ja>yT2%Y0AM_XJ+Szq&m^thX zw704(+n0E_HQ2W|-_S_hf*|6&$ol>SobFsit)|ml$=ag1eK^s|rMGWVPRv}=vlkvZ z*mma%p?C;LPXYaBP?ZrthcVJnq{SpOAz0Wo=77O_;tkWvC9~R*?@UL}_O!QdkXW-Y zuEuey9SdSpB*t2jWGuN*K5+Dwku2h&SQ4a~Olac3^oJ0JPl&35>T8!p{RM_N;e`#@ zwycJuI033WiI^#9`#qX))F^4DTql}y(tGXz+Xi$YyM>%1R0v?Mrah|$F(12IZKp_; zKj61x`~#5yv1?8HcvGhi-0@7{^2inTj`G6PA$n36TN zPpHel4v_pD&&LtL_i8%bxq;-aEJLT>)I>HG!+WsO-T65fk-&uG4$4LVlEB z=ooD*GPj8s;$OR$axK-laTYGp4_INGP^bqW?wS;3dcy1?iU~QFajcPn~ zr;X_0y9aa*4gQI{7WyRbx2ZS;0~YQtpO){Kdff|WG4G7fAWCv- zrD_2nKgopnB{2*@j_s^};MkWssF{vC8__?A`#jtlFCQo_$OdbJ}8by)IjDv~IM zT(=aOxUys!K9sKE0?eG|z{*-vV5{i5W-x9suV?CgUHyi>)fP9nceTuuiH!j7R03f} z72x)-zI&4%BE0FRX?AHe_e* z4gVX|_imodA!XJ<9eWi2Cn{hKu$nLgrQlMfBwgk)uR%|bE3ha@zZSJb{slxcZ;?tc zKXUqx*B-^mZtai0^6m}&L?;4JAe!H#$JOA@(28(mbk=49pGo>{m+Da=;$wKwdTIU^ z;2e~KC7Z7BR?T7csrjqd)*kPbWd0R~{L9wiStCNkQl}ujq5z@PuSJaTg&jqwV9Fry zeUyBvN`WUez`PofbgUOyVx{?M!$Xb;cz@ zPAvgvG~iw~IClZK-S;q`O@U<)E{fAPZMl@59gGX?J9PN$7qcna2a+L=cw;dHO2GgL zfSU9Id=9%YY_C@d#(@f|0PrVS(4{xOg+IealQmY}69v+!!Ilg34=&WucI}wTDav(~ znL9{YPWTvXNCh^NOXyk$dCmo?mxAgwxD%Ww5CLp-lAqZe(P836D(d&wq@tA=JKHC% zKkqh{4X?Kp_2Ib|ctLUpb#HMAYAl-Y**L?~2D^_zawd0Nm2GFw=pb!SO7F+i1~KhP z=WUORPCKtb|J52>?x`_@LA}gw6u{p)UBuBlYy^4EMC?{Jg&_!A&tZOe+J2bvf=ofu zed)TlAM2Sv`15<_R4y?a&>#wtF4BC4a0+F!cl)B$X$iHV8`#2}tds2c`1%PAtD#DM zqD92SkllI>`d+aY924 zD<{Hf28kep^tm>B>mFCVyY+m!9539j&b_0%07S1{+dE%Fx4~_qCfac@`>Y9?&+870 zEO=vpt&Z|VAV|ckJ@e@P7KJyfUn0T-iO1N2izVR4TZ9gd85(%#Zi929J+zZmp@@fN zKN?th6uVwxI)F%5eDXT^S!Bd(4HnX+VnF40LhDIjtCMP*6e=(`$IW23Qk}Nra2tiE zw1BcMswN+ZpGI@n4c@fxzj3j`d1W@r( z77$QtBw+jT3)tU7HVhH}y#G2=c2mJ-aB^t{%>AKKD@&}|av3#uu5TZ(UXXuC@`uhG zb{`MYmz_$@62XN!&2?ai&~()tH1lc?){NL9?r?fDzqS)&CkAScl$*HjEec*=w1m8> zsN4>qnKH;q0;-YiuGU#=&=3iP8qGRvLtvOXaGyxTM8|}$`KdCG04@F|G_jL|EfDsH zlm$$5f(#+mw+@oRHy3Z`%2*x*objM+UH$}Fo+VtSedT%hThehIB22Z! zzLADa{Ec{s2Jc(oKRrTV&E{49rZS%mq$?4(wzR4We-8q&_RfF;g9I^Rm6x!_iH|%> zK2@)aR#}3cR_H9bsVS{=thJLt7cPLkBw`u>fDGBQH`P#!3=87kZw$Mxs3sD_3%zcY zP@x&~ER~e2u8XjM-&8t8@>dsVa)r>r)Z<>R=H_UpazP;2sInP}GDc6FWX!qe;5%ui zRC16Il#L!j}PeaeR8oTeS^QA&#N z3{mK!q$tA8kS#`4Fzk$As=ka%v>XS|i(5CLEjDs$ps;1XWk0_FlcwnByw9q1^|sx) z)xjxtie`1iMNjXE0P}}y&OcpIn0V)Y4@7e;GY{Uq9a53!Hj>7|$l{KlC?4VKA2cyr zt)LvUk}>aG4=U7{p52<4y}$vm<<^<8l)>rKs|e+;{OEL#+ZbdO(6919R{^vvnls4W zIf7Yx06Nh4^TIL`Aa-pb z`hu8~HIJLXE5U)F0gwItBZH7up3KtSRDMfE@!W3;h2zj-1A1~DvE0eL=mMyK9n33V z4U3@!9p6)D&;o-?^(!LMFN55wfxNPF8+SF!ctLv}pTih>LylW(A-aqh}xcT>*6RJf?HL@tGdXRZcI*??%tP6?U9$Q9_k;Z9DtSH)RDy zAvrJF%KViAbOt7d>|%`fBKM-m+);sV{xAsHGL#zD87+SAS8pFnR&&d9%Wu_53o%o+ z7M|>`-wZz}=9K=-)O!ESlA_-f6_s>B@J&a=QYpLj8qHC-aaoKE&`roMca9g5o63^O z4MsL$rX22(uh$zP(v1zALN?-9@kxxL%nItTt2XKe>=QH2+4`E?Sp(@T>L;Gm%J;~s z-+r5d+q!9f1c_6u0##x)OS1`2uB$LP8U*eykJZ}?W=2j**!6}cKN2xSqnt0U;Dnb9 zEHk%AeN}Az`19{gIwS1S_}7dUT-e;fs~k_A6?34W6itSsaW8Vi=YXLv2}VL0Z`PWL zs1xuMC(B|YMmC^L>kOF2dx4NxUn;LmHWiGI!zNH?gLI*cdUP`7y?#p2=HQNCr?6nqsB^A~Ix#k$iVO#c}10>;?LvOtz=F^`@*u)ElgVp;I&!ijELl2DItIYetf`DDZj&&<+&NXT))z`WXVvWaRk6NYX24720F)I~tH?{m*ogD-*W8|KX} zkS+##9`d))7G#+dhGO9-8%VW60KskpR3#jhW*N#&`bq6F?L}aK)U`k|q}ED67$SpF zwyuL1yG0HZo?eDYXF2vgq#I4d1wjR~(@hyt1l7ZP3A2_@!EO}O72I05;nvdLv5Q>GgEGFE zpiVK1Gh+VnJlSo4JE$?s{RMN4&52Z1Jxe;js)++cv;(+9zz7-7#jG$Qzig^$c2`j5 za7-HMHw=-N+0Hz;ad&LaJ`X%S>$aK{5#2Onie2Js>Ih2{X)(2ki-NUJ5$0;+ z!~1W3#@Z*&4LeG*>QU=nZH}o&M(A?Td_w#)``CS1Nn#a=_^n@Ilv0Q!0VV_{-xR@A zf||kK17v)6&#U)(tQ!!;`H6o0Mk?Fc?ws=d$aO!LAEd;`A@;~0#w60za#r?=$WGg& zh^3a~_O0`l4E83PhO$fE(A7`ts<|h|WcsFd%bCuS*PZ(Sb%19ox>fp*xcH^@;{-M} z*Sq=2i@&eJpCYpXg=ucRIdRlTF_U}oNICu(`Rk1n$2*f+*MP<{P|q#ABuW5Ni9a64 z$+Y8YrqwBND>5cEYzvBZU$poT7Ou#a!dpL)QFam<pFnX z-kmcVR7h`njyR_1B1x!2Stp9Y-Cl3~+^aZHW*07AwDaERnUaV_mf}BCngH31<}By+ zh`LwDO}F&EhtEEy-#q;M>-F^Oe?I%;7%EeWSf4SZ@m!YclR2+;BV%mM^Q9BHnG16| zg#WwbA!qmH^=TIa_gtcr#qO&^U`ImR(T#L=WzN6^+&f)=fS>GX!I3jy!OYR`6U?}eR(9YtCM8U|Ol8N0X z#O$(>eO1#3Dn|~U8q54g(J+yDdggFt5AWy7)OftL+8=99b!P^H@D?&f=6#} zKV7>0pAx~-xA&gEdi3J$?DM5N|F8gWllSbIeN~g3z+!FP8W9y7 z5xg~O>$Z0ZyBA*nRlMgdE4beEU@6?MRNpI)Z0{uVE4SP>BAWAA67(E|mk}tR8sw4# zT{ZnAWoi-Wh}xfZ7?q&yKDt!;iq!P(_7Vfd!1{ow-RH!7>UR0IPFcfDwI|yf4Ay7NN^Kk#yt7vPN(q^F3>&=L^s>zP z>G5x7x9=YCq`Q0O9>20XLAT`aEB|%--;MFV>qjz64KnV2T4ZJUmRhn_j19`X8d%z) zxhqukA7`pP_Y7RXEq;2XbZ`Aa0o|aws+t-ks6F%eK-@a}quS?GVno|FX~(>}@^+Qw zai&48Ld2F|BU{}zBu`UK?!3%Bu*$1Cb1v}O!&7%Ww+fF2J6v10aSowj)A91l36rgj zGtaFPBJ22y4g+K;`3$!r#+dO-;BhSHU^n70^jO(j-BT(X%KhrKG@4c~Adb;h>&LQO zJ9an~t`AaOs^c{~)4jHx>!py0yWY~yCa?zPVlDRoY1%l;ffX??;eFkFj^D4FQ@YBPM%4;e2x^GxRk99Zn2T<)(>OQ zk%nSsli!P??bxEBM>2|%cjA(9ZDpL7HRR#}aGbW6uCz0UZv1_8oT)6UqEji0 zwX89h57VC|YT>SNUh3Xb1`qM}&YvS{^Qr@Rn(?G6KG7TQa8hC20%NO>a~0qY;R47* zC$yeThmJyfKY) z#8vPo^j{oCPnyH3A-HxC*_6Zb?cS&!6<|Y9t~&MS+>IL*%#<;gjQF=hNuBvNW8}&` zKd{>NY%v%Tq4rS4E;j|Koika$oX#!5F;Znq}i)=f(^j`VVIf#dY?tpM4t(ZK1^ zhSNZWDF+cp-GgGzgQfsaZ}$Q@#SDE-u~g7CxPUPCUDeqep7mk6&@iG(wbfKv7y5o2 zMPrr|eP3tWG=kf*$XV)#IGyVE#OTZRLZ+} zMuDv3e0J7;|4_KzMe$+71sZztPhOqOl*8UhgPa(!RRGuPS7g5T57ibz6<}QJJk7do zsvi*^x7Xj7r?8jAw|Zcsu+!B;!P^^O4noIhiX|01vC%!qcWI^h=%f} zW(kySd<~mNw-1`n-E7j=D4S2QMftr#=dI~UG8)7wI>2dejm{e;J;*-N`>aWi6@H&* z+|gNyi9(k6euwEG)_D7fMlAsw^F2a=BgnR?<%R?&!jxTONrP%Ea=#7gMG?V=9C@I4oA{0X9T}f25}$MFeM32# zB~i;0UwoBS9CHtxc9&UTNK;8_`vrWnDlRd}7pCa$9r%~7E=r`^-4KvL*!|N435U-97 zc05g|&}CMbwc&J;HiXG$79@0s;_eaB~>PC=NYE#z$Z*lln}lcv^1MsHxkcAc2m73>4zZ8myo zAq^mhV<+|;9($=q_J`Se)tQNAK1CJ4Dl8&fHUGZ+R*9YWAb0IN-fx_{If9c#{&0Z5 zYfqEwy}t@xWNMwVkPP1T)kT_GiYhnG%JkoruWfHTpg$$sx4V52;oHo`(U?+X`6F2D z36b0-mSVN>h<04H80nYO;lGn;$gt&bbrr|>JPPi`j{O%12#`l=`@pP+c30!~NCGty&kBjKDg^ms=)32bgE|v1Nts0){*`Oy@4f6H*LJ)2W zj6U50H~!G4q1|^J!~1%xfwyJaP&7!iY|q=gy2AK87P<|p)OMwLVz$!O>C5BZ3UcQO z5&&Sh!No!ZU+?9yzk&mm*+0?Oxif#Ad~FTuWQp?p<<=_uOnrIV=p(306B(aV+W$@+<;zwZy_GuOXoVTnR#YoVmftq%l0}8^#VIMsozyaSa+Hwi#LXMDhU^~ELlT~>wn@@guFd1NNliePCa+wqWz@L)TY z+Jh8H!0el{!{;~eVja5Sga2cO;=s{OxTI{c1EOSA#lMCVRdTk9PuyoCyvQ(BCP3o2 zTL_a9nT3Z<)S^j+UDN^}vHEGS2;=EuA%g-r#&(YG=A4pOQiKNsrbbQk8B3uNm>b3@ zb!FP|;?tMK+jN!;m`m`S5ofU@T4Q{RH?!=H6yeKGD7xnc<3m@Hh&t|S@R75Zn5j!M z0WBr|*G3>8;8>Of>BofZCg2wc+J{4xwlR)3u84)tUhXmQa>SSTBx+FR(j@HnLFudkkte`DpV8;J@m|0KHSCG>1Wf}atr^(g z`icHNXz09pGZ;&9!6i|*6QDKfW)NC^`_XXb6d#_Vi4CGbI4Y2#)lz@xd}$+WEv>vn zEFA7RBkasN!msov=Z2GYa+cx;Bk|nebe26x5QBB;t!!~zayQIheC!Mr=^?uy2cQ}z z+iq$3;TVwV56m%_HLfDvl_Vj8CffW*JpA2QR5lCJ43C_oZp)no-Zj*~8<0_C==oik zKc}TwfYcEJ4Tn0?-?i1X0NMh0Tos1;uHvhvB7y`T*d*K|K_rH^atu36G!ck+`tvY& z&;fMw)pf1;4X3CGGfszYf7_qQpq&&0Za)3$d`#tMSfYdCil+6|;GGka)L-3TJ_LEC zq1R>v#9gXAEkbAmEqb_1^!_#y2mW_5CPH>*9|VUXQJKTgqfp3GdN^;tHg>3CikAM- zA5@{itk7*dS;j^WW9ClGCQ0WHm#$ETG*P@&_Y0`$^X+01<58b)x3{vN-@}Ks5!JQ0CS7%B#*z@Ez4Quj@?x zV5@c>!Z$<~9C2UAb+5=31+)1@x<9zP26K9o`?0X&=0;mIRf0c! zrmTL_+(q4nzBHhA+3?LNop-91oNU&Oy#=6fdb5R_|5l~iG$FT;;Cz4U zSldRm8vJhR_5d}Qjuf;2An=*q9_H+?rsy zo{Y$oA*?mL>tkVWTk!yRW$3-;`%0UpeB}gcF>s}^l7Y}5_xpY5R3<}}Y@{dkrV)pk zM@AA_VakWY6>9OX#*9xxWSvsTSDCuQ7+wAo7F$1F0lt?OLH2;VRD# zFyL*8=<27Cr2teDIx#$Me} zm`y-dCBts+I?j*;9i6{&p%CvJ0Jjyohd)&vj!f4JF=n+)(uA=4F=G_~^f+edN$rSy z!l}*Zrkp~!NY@#QZu5arDjOV~zY@f38}CPWNhuD@9=XwC#LwJM;t?+n8Qp%XnhC>@ zCCNYA;Jf9>S;$8hm?d>4M=<=w&~gJB3TwW838;GcW#)%8(Mf8Z?2kP9plOgdaf%81 z+j6S@(8v#SKvRIQGr}YS2v%u=b#vIT87%a}70-exu||cX&>ih~xb_^)m)Don<-^j4 z`5wm@{~8C^4WS74Lswx~oZ1%#P!wTh`%2yeRld{TA%()9@L_u6mgIoOdfj01G}{3l zS&6Zb0GBNv{%L+HBoNc`W1S0dxu+N5L%7GdD!v=r;G%%D`$o0BR=On-T7j(!u8%jM z!Ea<@sAMqp^w=Y9U=?*wDH}lt4y9~BZ}%GTz2o40C3{31<;Bs`e6Y&y__1GUSJum- zV%?uq3!%=o?x53m>RSMPq42l_?nJwBy>;?*gw%l zq8ad^qEOYw08hfBzW1;LE6I=k`m0k-a;=Pw^j-zqd+VuxsUbRE$<$qszv;zwhT*$% z?zJ5|mvarLv>o(h4=QB{I-$Q9FA2ErX)gZlgbW!&z0C~Bb(Go2jdL5giU&7)hs{43 zV%Mn5s}&Eij^CP8V*)o9LAro>N-W=I1W~fiN1GpI_ybOoyfSgSEe#fPIe{%i{(NmS z5vaJE+B*M5&+-=T=YF`#9cORBz6_DR3X>88EnZ?+U3nJ)WaK}N zRMC4+OIgx(dwao~{+wT413XQ=zTj~fux7(63CRARX7?MM_xC3#I*5l<@Dct2b+By)1lRs{#rcU9t?H&k1dl&m<4J~sq z2}&z}xQp)->|s`n&4}md{u-ABMS#$CX3B}l5dYEYVZ(o#k;i_p&fQ4W3Lm7b7L(Ew z`~nU6z|_bMuY;b)jE8}EOMH|GK0n2S?v@cikkjC^LWe?HB%D1+MI z?ZLW4xbS7hw}RUCbXPFR9gfp&!0gu$9G|YE)p^db3d*L{e;S&7`})@paP_B!4K;y5c~#`4p_}UV1!q-R zEFOx|ws8N@(=PC~l0&)e1Eh+jM9kUv^lpKRcOJA!)ljqf2`S1j*fW&kLLc2*g@lRndu{xSvbrDR{3`EqPm%m~st?A#t%y ziPv^}VKO7Cs(ejcn%M=rb45gN6|d$C75MI@d*_3q_-J7?^=JJ_ym>j3ccyoD{a6{< z;Ur(JAsidwL&koClmjy<-Uho8XR>g{RkC4~{12aFF%3CXux7OdjvdAktix2*PY^B&I2Gt42s!d;Xk`;y`I=_6cA?U*VPbu^`1 z0#gc5HLKS8OO@-L{%%*| z$PvqXp)vZCea^gb?_Z^9n?^l}v&EDQ+7Q<9%R9um1WyWtoBTx{&8#7lMzeh#FDFYB z&w{h|Sz!8zN^tEURVUJE35K&Ap|T7xkEuf<{pQFj&GL9djqSLjR=m`+=PHq#BFG>a zW9yVMx@oicQw=lpabo%&54+d*LOYF@e&3jz7P8###R%@CBxUxVerYkl8BvXGd>^RY zuD_&Y3rk+{Q0=*Tf0U?swjP?4WRzq-6>rf$_&%@+EDjHx(A}x>&GW#{$o>`PX@g&* zpI%1-YG?OlC&UEnDaj<-Fg051-cR%jmm&QX-jvQ9et#-F{ESddK$zRMwYg?lG1S>4 ztX|7eN)L^@;{ zi*#YNl;3rb1DSUQ{-H`lT9GJd+rBP8A=To z!C*&hjyujhZf&Mx4D9DH_FW0*7L*a5If*5J83K-%aPYPDW ziCdA-?s!`&VD3j7{Tz|zICjn9V*wQ0Ks}_CzxJClMJmA}Mb(U7k{FxY`|$Sk8&6+hKV& zC*O|iJF%Lyls(=M6n2&=*PY#wO7gV%6;AfNikh}+du%HSK(pnNV19$`KIvtB@*oD+ zbdvO#92@yWg*s#Qf7pA^peEb)-8Y?tn$SA|LT{lL5fcbVm)-;nRaBISpolGm&{65q z)X9@1V%Ht_pki$!0n6MopWaG=&cEyJoe%fccJO(fpAJn z?6u0Sz+|RywG&K~+EF0Q=w+NKJal1<(=WWbsa57wy$Uw&whpWPnL$^H0h4HO(>^8A z{6|6(EpLK1sihyl?=CwUqg?T8v8K;qS41-z@#)|C5Bb;T%L|n2K|D__!{Jqe*Wg2O zeQFWcqO2+JEY&yITCJ4NwaK!aqGcR9{h^=A7mHu{e7w&~8M~ua{ZQ#>z6Yj!VN^-l z=WVza=|(Z5k8rpg**y5uJx`}-9~8zxNbbm+=lyP(?xdFHRzAA^b2GiT+|FF7SNN{qhF4na&(o5|>QI~Lj|KLXl5l!t zenO4CgUa0QGE5e~q7S}{a6Q@O)pd1pNiF+BN= z;+(!>u(-3FeQ_$v2kw6Hx2_E6Di4TIP`fOz(NsY*{EmF_0DgpF>7C(fmrFT+9Na`9y;4%3lJLTm@cso zTrUEI#shDlafABQliKQ?(EJaZ5t{noB!Fk6HBvI$&SXElnD^*P{dK84YT;Ab&DNBgJ+yy88iNUCJ?Q|X zQ8k;i2WgC7tL(_xBQ!b+|G_ivj_2&L88bJS3poIr(KJ{5V5zWawCv$X_2c2YkDgaN zoGp0_uo=(qw9VapHrn)Ty8hW5vvsMQ_2T~Dct#_DXY|dq^~^u&f7#lxe6R2I!~U&? ze+Z4yx2?kqoul)8W3K>6WAOPR5aBR6vb>kyF!>Lp0pvHV??DC^K!J1_o&oCbhrocYheGiK-JUo5&u8!$AW_bAe@pGiVkL%CblzC@gb?%Ne*&WQ95w0d~F2Az%Dyc zwoBf+P*Us|ETun#uZpgH#;L6SGLNOStoe#{cD7=Kl^$xsCO20z<*7}X<$!e|DScKi zQlP3U!$>BOn{&${U&T6OBd3i8u_K}~wHERwy1SJl2H z^GRq0u5XW%IK>Qeep`y1=t>sU9@6KLichE$z*%K92uZFS#4MVG<|CJ6ySSu+1F{ez zj(Yl&UZE9+{SwXN@FVAUWZk<$O}d=Sxir@e!7$03ZF7N;xT7iVUU4~Y0zNqVwQL7fbX6uY~-hH@l^I@6XU;I7v9JCQPQ=7ctw-oz@oQRDTOC*feR&^)Fz1r9^ zrA@)MvUI^6b__?hCT5du$#E)jHymOo_#K^O;lhlL9&%oaa6p$}C~~JqyxBOoy3}M0 zZE-hXXwy1PM_8NAk9u!%Fs-dEY3As$uzh`^u9AauY@a4iK_Mr@$a1lnH%w#K_1#6A70rf(1LxjOj+2eA_DD=^tyFtkLmZP$}G(s zG>vfpX}{*=X`ed7JfR+m!x&Fpq6<1cF!IM3Y;8l%&V}@z-jIGW1~^v)SuB|R=Qb$s zQ>}q@UJW{1flJT2el>e#Hqe_I=0iFVnIvg4yDsvP+1Np-1A5RDFbj`ZA9d>SaU=S!aq6r(vQj^eYr}XA#@3 zePS38v!PuFW}^Mb;6ep@YMmWKqBbwVHLOxSZ1wWU-~0hmiN} zJ>^hs9cSL#CPLYcu*^@h(RJ_5n!=ZZNS*Mt#|N%*8}( zk?=(}gqOfdEY_wS5m%TJz{85>#t{Kd&OoyaN1?TP`~+l@sbTshp6yvu?7 zY_G<$b@GkejBQ)XjFTF_mOvbij~X*_19{5iCb`bCbu8%ZsNEOWY<)bl6vm@2eBKU- z%mD2oB6tIN#>a`h)=sJ!LK}kTxsUORa!BYB+OItGMmcj%74C3P*1i*!w6^B-jQ2Zw zKoQ?=^{h5k6&Y~#FO^N~EOSr_YwLK%3o6RgnZ%`nD_5%B(?xp}b*Qp-90?$pEdkoz zAjflyaz2gpur=Se?p z_({aqkYg>QjC{*vd{}^sJkhz4t=;P^1ST@u)Bg$`gYc?@Akuw+>qa6~c;h3S$S%M> zr_!<8SjPGf#S6h!!aJ8=^Nb1&P4V{Ldpk=;sI!3(Y%)!L{kX8QkSbs4n8thaH9VZ{hOcn^B+clL(-vqx;zJ|6EFLqucoHlbp+0OLcRQan3Wy}`k z&B?8P<@^r4GT|yhzsozc!0B8!(awv`L8xcga*)DyG&(>DSN|xL>#@N6wRwmnYIoJ? zgpNzIVX9U_#OSTzIDy>lhQr)%4y8pAC5~c`pA-LL#IJH>pV1{L$=yscBHg4zh&Kx% z$7UZGdYO=QXf}=)sLiw5j+UK(H zFqiqoK|7vOZYM^&(^bkxH*ybLgbadF)mBemJu0^tz!CZYSt*APC?GqT=SMmv)JDbK z;Lm4q;dYr{V=S9D`&PN5{y-Fhm&(n7IFDQYxr*PZu-%Vf@x;SQDmHX34US%kF=|hI zAp>qFsw}%3t*6i>BB}}5zA|WMD2oLVV=KY6SlXu68;F2`mx}6 z;3{~kB$wpOA)H50)C5bTJe5h2f2_`t``Wqofxa8vWSlhb)5DRHzZ#Rigaq-ma<*B; zOP_O^Z~*0Ir4D?4VLT3(Vp1*qNfy%=ks{MKf(YSp{#>S?AIj$^@Ener=95fJ(N->j z@?t@t2haXMuvnO$ktwc~0p+i5g_%@~%C!n(WG#0kw*u$x3|*pYn(BOfre?k&AAnFG zFhC0;K#3w)$%%4f?80gTQc!1#k?m}Lgkk^!G|M_{M-&4r>4 zkAdNgOOP1a!Z|R3ii$*EdiKq(?5MlfE(ng%7VyRUy#cwM!oa;s6f_#OfuXJKifyd+tfFYbQX7BCY8!UF4Z zOc`~63v?tid-)-`!)1Yp!M|UJ`vn!X^K0(VNu0!7L_gjzEt#Eg_BTYR>R1d?ZQs~|V;Oaaa{ z^qlG3{1@cQMe>Q3qf=z2+jxbMzUhx zU?d%ZmWL>Ru+X)52D}MK8A_pNi-Px$WgTRbH0XTZ52Ua(zG6k09wlCG9apdm(x66L z?kHra3hvvBJe>hkn7w*jg~~~RWKrSfRH=j8QD>%L9~5vY0fKZ)@*5W7kDjNW4U#*M zB>ZL;Ahsx~Y)9rG-f1fW1hKU zngj?x(_5DTKMg{8Fd$jSvR;aUB-p2~kNG>o;KI;|WF41}r_~%NVYKS>KDQHes#sVj zh_j_I%?2)pPf;kyI$;BpPQXKIkXv8EHw^uH`C-}dM^}XdRx%K+r};ZVk)afdNHf)s zax;|-6U7$2%+G-VMFV4n*O-XX-2C6u;$kb>28=ioJDpYyH#!ZkPd+T(D64>l2C#3X zuwW|aq84S)%Y2X{_4ZXZyhH$M%7Tj*TIw>uQfSD$EKbaufoy~cbgLEYIzyyc-o7Aj z{#06h3T^xc$ca&s&Vn1E4b9l_Mwc7PYXOCxV^kmlCs>cXS2r+Q!w0@S(}c?<+c<3aAKHy1>1Dj9)w#v+ojaPtgV z)zuUdT2Txlw}n5;nT;PPM;;-=3>e;k1H*w_oH_>Il^X+{O3ry%eP^Kxd;pt8MHt2z za|8q5mMa7~?fv|5?7ir7+>KZ6bninmLHt;V83A5fh}6Y{kK5FM$RJ}v^i?L}02Nv# z2sc7<^nMJ_vmhAv^B$_yci+xPW+KKm?F5`E&9D_$sW5$f&AFe694xRit1K17ktS{^ zqbg_UszuZVoA=h)*z%-CM%?V-41j?El9*I*0@z8?f$Wtu1 z#2Jm!b@b;TSs{kJDO*S1jz=bh-&oDby%9n6FhMn2&3ar&ry?}j_ran!>%BoJGSm%( z3TDGj>v}-X=u#7*Moi0|Gm2lPcX=7^njx7;YN&=bGbC2j>0K<+oeJe;-}4j)%j4k= zCy>2MX3P45JSP;5D2is=&@V2z?#J+0kk(>_5P44~KMk>989Uq4>~2Z6QG zb(vUr+$zLsTVUO1UvsCFjk!Sk`A4sr2;MlDJ-zy>y zHivBF@*S&(&Jv*m2-KhEsH1Dzu`!*wV{k`2RD>n#7N!vtQlFxKU36Xi1iQ^(pHbfm zOxq9{3_Kr!Fu5$mZZK2>AI2ky8Y_kK)T_cyqbRH=(jYMUsHsUtv!Hijfh#vd~RwBFicQI27f#B zEZbz~IA<`ZUy%vMf0xK}Q7W@nDY5r66O=b-7x~V@CPgZ;_aU3*A`g~@*Q;|vAz|m6 zjiu)YcWK55xh0Q;Vn@MmMK{fHQp9~GROmN5@HzAc~kcG3n|&MhsLbOz26B3CSMBQlzy9O2F8(l zzaFUTIbgt2;9#06GN5iQ%9eQJ=Mcjm!wn0va91{5PG_*DTKN#6FljgA*2|j~Gl#`S zBi-6=6z1WMElG|%4T7Evg(~8~+zeAmwsyb-L=?CMgG}v23||miW#b7nC%D6Q*;)Cx zk1mVGB|%Yv{@PfGK0W^cRpx$!^c{37p! zdCOC+auoFw0UgvxjLf(8Hzh%)JpzipSs)JfVOW!q^awosRm{6A=&zH@js`~8MfiQN zRh;I*2e(aE&q`}R&_X5RIsvUVL{-p3St%W8N0fsKm-a#SBQwyO1Sf=7o`_)L{F6wx z<-mNqm3Ud~z0uP$t@!DGb(IE%v5hkKC+yBhPg|TE6odZjFUGpMeF9Au=1htfmYlK0VS~ zT1pw`U$fmeCV+F&KvFV9n`t6V*X(}=zq?%vqshX`2P*l3@m7K+p@FaCa!9U>_3Q0W zNdc%aI#tP4{1_YVi-$X9h!mTiosVug7YWS$_iMnQfl8{5@%#&1p+WUupgQMLb1l~ zTjiUX%Lra)L+Y)-4DDYSu(@2$R^VUAOL4)F}Csk@!iVc4LyoJ^%*5T zPhT+}m?PyB&f^ktt-{3A_D$OzK5-!}-(VFM`*~yIk@3$#8@lbvCl$-p#J9h>r8F)b z>**dunTF4&1eYIIZ?;Dm`klIb%?y>)uMq7wFn2yGm{eUqtCv4i)H~ zm~Tzdts1#$dg149lwS2%2`No{f2v;1M1_5k$t6zx+Nm11J3dcS_3u2t=ldk~52wN1 z+4|tY!u@Fm_vV|!Up&6VWmvcHDC+I}J)!>xP2qIi!N~izf4e?O(M|Sye$V?Jm+t$X zYjD2M=yCC>b6oQgKuU;j2ugSol=3Vz?Lh<}C0uW#O52yyIwUgJXy0WYKGi!&l z?{?p;8!4b0ARsfaRf2#(yd#b@S^XbYz zdO=gyo}Ke?@4};jS5G^Z>i%(b_H8i-m!1x7JRVzr*8jYH_*KVVI(H`6TmMRTUj91uA5;oJ|KUG?rU0Y_|7Tb} z|KBx*uiw7^`1$MipWVMeP|knXYkh1;R9i&L<+D)FppcqdH35^-J&=nJG?*7Z^TxJM z&XU3Mb)kn^tNOQ9rz`ZN3gr{ha5Z9$%40bHo~^Cm`ZN(OzaE^sZM9M^gK(oyJ@Sic zj?y8rS$*l5nu;{DD$@eF9ORhNuG?M07w_Oc^h5KjsVm~THvCN2#B2KdRP05Slj|YP zCk*>Cp|k>Pr(U zEC?C!U8d_gN#o7jZfCxRqcG2-VK%j4_M&RX|1=AG`ehtV7WJezce(df9F?%PoMJ*y zQaO0&30+cE{AK-$soNsA&i4p=mWqAvK7{YbWqG)fN^WBP39^7wbgIw7ZwS5=k0w&A z;qw0W7_8H4G38{T0O#F$Y^;;-lB}%f54IPYlsp5^x(e4WyKLuMZ=Lb1J=ii1K{H~+ zK1c{a+F2l%;`uCa0SSfiF+@vr%+8qnbtRSM?xRHSfKnkV(Q(F&B;VX1w683!Jow&p z^2_WbYM(H_jlFZJx3%zb<-jQE*-*Y~LQ9s_AyF$Bp+oE2kjqlZW9B@*=Q9&56Vls{ z^OF|baRGtV(UO75;#qLP{h!$ud=~0Uf__F{(FJ_QT~+N+;V5houeqrQ{g7YAoFC>X zF9u!^8t0W=Qh7=>S=4SwRONcK4FD2+Uu8t_D27qNmo=Iw9Vq>Eq!K2mULVGPc7G;3 zAShhct;BJcyi|vEhJm3dNdeQM6LoKxOMSSv_;{8Qa_a+97xzoCc+je9>mfZF1Gi5w zNa+)@DjsWx&(%`m`xM@8R|cg|Pv@g20`P#uFvaR@82IYcc}Z~ytrTFr+DsCBf7Xr8 zyF+BO-<8*Td(zj_G-UimU=AXX&n$>ae6IB@oQ9Oipmbgitv7MSROiKEgY{V%G>-XG zvnTH*Xz^PK>Wxr3xb@KOCxUeI3Fe$GldY5Pg%aTI>}(4wivc}r5fjICNAvEy#?#T= z9#ap{FS&-U)wp;So=`}3%h*6eqvfkvTPH>AbgX*rPGh^S*Z61B(LXuWzXbiZ!Sy)p zUZ3;uY29CU3JjAPbL#56Ib;^e=fbU%C?tN)-Xer%3tJAd5RIMABjyu1u+%u=ZK_KV zx&LWc?lYbA5~L9$BSBObwn*&a5}Z18eY;7P6F}N$G4SBembFU5rx5aFF}O_>@d;}U z2K1RfjKbnG?;R2hqI5is0>Mq3+mWUesi0VQ`kDQ(`2E&#NK*n-8bw4723#FqHssXi zChF*~6Zv6)=WIRM4KKzSQ$2&$`p)u^XMk^|0yWX;CoL?({FRWFdMv*HV>2`--OBC8 zdyTGieRLdh0-0Ujawzt&UV=z$SK$|hb%)7pTdxjz;jbzy=d((PT;yF=yfkMi@~f)( zmUUcC8Gk1%y0QD+!~zU_f-OHDCqI(h zCgl2V@f==`L~FC?#&Y?GFlZsWQ$lJ&0b?b+Zewx63mRBT${-;IsJL<)7h)}R zPR0phK{xDH;c}aGGLg}yOL!5$Fc8%jSV(eEK%B1oyFP{CX}q&JC3k$&GE(zBFBBuI z&BX>abEh?KZ*tvAtA_BZI#D0_oUP*qwcnSPMO?i}fD@}}vZo9g^}$gxp4%!;7auyi zETt4KK*B4`*wn%Kvvq<_G#u6|UJ>&3>{38l8mvQgxIW>4hnw)#&@w3Cvq!s8z(C#Y z;Z1)7kdVFHXnsGrhHz@gT4H{mHe*G(|#S_|7q~ zp5uXhJ30+yv~^L&;KE4;n^0CW5#EoW~FJ0`H*a zY>3u&yW4pJ7`d+iWRA6vH@OqfYY$2^M~`697TJT0d>M>H*@#YYys$5*{~)>RLd1)} zM-S#6sEwJ+myfmcc7ZbKeM2FfVi^L?JE$OOy6DLIj5tmQ6Ub(PZ*eaz7|y0wI)%$5y4yWuDiMCmfd;i?$7B`aBf8&xaNK(T%PVtmZOlfxFv1QoY``29j zubZlP0^qX2$=+!h5QOm6O^)3IEJS(>1ms#Hqg=ijS~IRgXhXvtJ1gSiSv0g8J|1_a z0NtT@_M*m}%|R>BTw1co)i6|nv_7hZu#ru;EQe!~52G8)GLXS!xUsD)loM+RB5wtA zg5of5xA=dwG?z031y}(;xRbfGpYYiepek5e6W?brLhx6+?ASfIE~bK1G5w-M*8qR% z2A^i|ag7skb!amN7)1p&B<2%gJ%0iX4~QbZx|2j>#_Vo-mD~+E1%_8KKT=_XRgh&! zcabWDvz!&SC=BB>$Af4hMIatDMD!;V&d&?BazvIQ?LkUUGP<$HYrY9G$P+q(UM44Q z+h4;tCrGI8GS<$#`x(!b5ho@h$2B|H&X<8;>NO98+Q3Tc3D-5vZT043A~Mz zi6^Orz=9qL=j@|mW?m2h<)uxVP;y3pIF1i-2CWI~&#B|T(-UpWB$d;4bQx5(%C%G}ZsVF;G;Rjv+H zBXBeuDN#F)u4H9^;8q&Rg&pWuUAeg5gd=9ui)=*#f*qab4&q@PNk=;!k3P#Q2!Et2 zVM-=(EeRahhVmQ2eOd5Ed4p$Ru7Pat2EdLaxL7y= zU>jHx@0@cK?XeBr6-oSArEbPJO=DjP^*oojtz^N7)tB2J*MoG)P=DJaO3{JRav%+c zG~R#Lp}y_Hh0rvCI9x=BmJAl6_&lOB$m(YU^u`)0soitU02Z7!>WBfE;v)x?t9P!G&`ZQw-RE2Gv+uOMamFE;49E)(C67*sUV@CzXG+8;L7CG+WjZ?gfg$>ED3KLlBm~z? zfsuej=F|IcW@ni=>F-CAB(Y#&CRmYj;HRkI(`C|E7d=%x1Wh%=hMWMqEBA!N2sp#7 zZ^$-$vy4hk(#zFX%9b_5>nn8n>NWW4MMC7+U>s%l=wI$a&KY7>EVYQE!cT%lB1(%rXel!G*+$)HEYXsK>fk<+PEMGp_D9x~=36n0i(3Sz3`ju%m_sGP2b!-Kj~UBR zzHt2Qy)lp zFli8g74P~)(wzwE=YUssiZvOE6KP%vxPwP1`yh3ypIKNIpgW8bK7>vi>VpO=D-g$U ziLwGdG$q+wwaOBq8_vphWcq5q+Ielb+-?EV%sn^#3(2R!u~8Ow+B(Y?0)JPMe?&go ziWU(B7jR|5U7L%4C0X8UlvO1_q}gDYtANHw{*-#@3!x_E#wAV+W38hRqT@1$@vzKL z$a2)t5F4q+4rLpvG%29s?YIL`)diy@d<7$7tQ^L`r7Q*3HE}pR=k%s|G4VC+uMS&_0o9(Vm_z&Zx7td#R{1b;pRH$Y^?=odz3#>J%FgWCo*Q>Y za_WW)n8UaB2*HW`hRK@`W^V&6P!A?cTc#`j^?pBn_n*Y3XF%ZCi@Nri#;%2?uIDZP zyx;e*oBNg?4!&y!vYIA$o(;ch-@^c3{@2&~lP>tPg9^@{D#>LC`8HM1xkxdBfF0{kG&KWzHU0k^77NX%ka7A zZS*&wD3FJArw?BzuG;!z|F?5XwPeMGevikV^1-D7C_l)OkLDS*9ry~?7Mz3$| zs9S#2xy5_wp{U|?Wa?*eo*1#YX&!&D>|LBCsOE@6j)`&^+K%3p$9JZJDu+oq{{_lt z*OJ=LZ_Qt<5QJZ6dOnugecJQdSGkE2kG2Xklu! zc=j8)gz=m+7H$YQdKx$75ww$`&TYJvlq_%{Y#VsHLgNV#O!e3oIm_P+D0fwC!iy^e zFF)tpD?e9+I8!$Xcsb2r0tl4j$qUH(E7i%gtw>5ozD(>_*Jq;d5?#HYT(S(VvO2f~ zqm|JVWrGdtz%*!}I?rc>W#sG=&w7v6w1;%tgqOe~U5cGls^8>BB)h({Hl(uf^= z8gh7hWrNN@?`r2Wlz5Vhw^^SWIanYxr+mYz-=)A00wu}tD~}ybF#(;A%+Y6w&^!qc z2xhbo(#l4quD_VjTf6<7@tsPPnVKtr1*_~T zflwLm(MKe5gH}K3v5&2UU-}hS9LBDA@PmaWImJO>=uQqQ0rPbn{3N(bQ95TQTWl%7 zv7tO(e!5?cl@1Z4lEG#!r?SCL)K~mV>i1WU8r_T)m(&k5VdN_s^>B0XQ7JHsF$Rnu zTlR(<6vu~aJdjw(XW$;Mb6pRNyl~#0i-J{>VWnlEd^$Ky@NpbQ1R&p&z%x*Q{Ekym zuP(83B0wG%satv6f5i6;_6TMIU*q_oP7-(^aGzGvL%dQbV))P^Uc@UEVM5>@x)>&S zAyda%m%@(;)60q$O5%_hyk-?2jk>tpYxFqMUhD8Tj1nseVcbWgP{nuS+36|OIY^qP z7xjkOGy@jn&10JbqIZ{*YYiD_e-LMi92=xBKP%2BEi5M7XQwEYKuqveq+74{2X|kf z+p;Q~1xX>=n$=t$hbHJPOpuN`yUNcts`ST2E0j#2xt(hK=x<~{Owy@c`AV7BM-hiu4sPD^nA13&1GKG_VqUVb>ddj}bUI+)D(?SEFly{(%Z zoSGWh(<#X+et?_R7_9pFRfr8*^Ny||@<8AMgJFFX9cP;(q%Dym@}&9er&?ae1I2z` zbuw618BF){y?=lG>x0UAwCnD~epkp`^j{nJ`HS(v!j{6h5mWuypOozpf029*`mU!w zEX!%+Ha0xmChlUZlKcKQN;P5G_9(e{^&^^7dG<$pdQH$#o|Js$W1(H4?mGcn8$Ho+ zj!mT^!|PW2evW5cYbsZA*swkPb0UAFsnT$G!|}q;Nd|9o^+AVCm!h9j)sD@zp2M3S zPkv4_uQlI2>hRX*#n0z0Bh7W^hTr=C`Z>emeZWj|*a}2R{F?1^JZlL7|KF#wgz$#_ zr_Aa+?dDAwxY*ZY8BA>8ElSap=`J)irt zch3&Ki+#ps#@K5XjjlJv4xf6mxZQHm@&1bs-&-$_e)#nlHST}PH1u9mQ|sq9zaM}7 z@Yz<=VJ-?#k*><&nWYI9BI=ytZgSg;W+EE)Ioo78QnIi*0a9EIlO+gXP3h~^4RS1D zTxQGfnZPb2THd@Ii|K&wqSAlv)+c)hD_RLiYr3^i+AVDPRGmeItfQ>0uF7YbyZe;T z61aq0efqX_7tLzj{pc+z0_u)MhxP~eQNYkdE=6%fPS|#>!y`Llev5Gj%;J_4V5dG7 zh_gwjx#p7#+mHEoib_>(x6IMtRXFia_muFKwmH!^g$?*AO3B(+Ogh!j^AkHCi5ZwsP-KQiXHM{_%p>Yo-8MX z)e9rE$7iOKL(&X(BS@};bK1&yV9*7_yHS~#^J&8#nEi?+!H@`Z$~G1B$I_@BMdHr) zL0*$Zj`?Qpeo-VsFjhdCpU_v>3pk%Q>5wJ2^J+WtHwhG&48k(N7)=J%B}6gv>vhz0 z2$O-9nLrXC5^l<3wjpo@seOckJU7>?sMGCGC=6W!67cvw6}bO+pOoXY`y)OCmn4=7 zg5xvHG5cP<0h@m#yLB9n%B2?M3L3Eq7c5JJC2szS$`SDsOCK9UYpVOWSt-ryWfM8C zGMyuh;MQmhYuVUIe}U6C){$bco}#lPYs7+|A`lmm+GBI}Xmr9{4#YvMhI1CKQjOin z{)B9zSw+nS-z~LU#)Y{WXduIxniUik*T?6v<{kqyW{#^?hu5?v@twtSPd{zTx>FV1 zK93od+QzHqD7lMxk(yNxhNKg-vO>;^zTpiCkQdF3aEAoBpRjc(gik$uQ4l;Q)hz4mz0-BWja3+noTIFXj_`Iep+d+%R;b5HyCK5hN8&juEs z4lX|J*}4myDue8&L+ocma~;F;ox}6pqc6KhU-bYEt?|V^;MHtuad2{JU~;8zYNdbr z4e%KRN_JS40<1R9@ccJeHU2#OOC zQ>K%2;yU9&P;wZyeg}y}s3qdoojzHIr$YF}vDN6ZwM+qF^Bnv@Q_Wp&T zw=kDFlLgfLhg#}i_h!i3-Likw@MbVy_rxn-#eahpP=Vhc;Ie@1reCiae8*Q-+%%uo z_^S06U*fWL-fBwa=D>sZT)jK?GheT+{T%tW%g4=`)K&U1*s@L1k?weBX6wN(p6i2apCA9ZHv0D4@3z1AM3s%Kz5b8njensX$Ihn| z)I92++xUSJS2eNqIUbu@So?TjeiMjlRonMB*->=o$>58(zqlmTP3?WdFQymYZ5>+J z+9NymJNTWvboJ)Fr^7Gb{o#?;G;{O^$c|feZ6mMV@AArM9XNC(;>z{g_n(a}e)x+I z&tS#DxWrA9@g*Gz+!7`i0kWejMNrMBHCel?hxe-FzS!SL9RTgXofrByOP3_zdJnHR zJK11%s`0?7`{pN^#0aKERK0!7W4o9~_7|GnFSa=W-(`HuksEE7fI#h(Zt{(xGr1ix zMeVfW9_sC(xQgEEHIvtBhBNPt-T;i3b;E^qlX=Y98_cod2Q#-D=L#QAmbc88JesV2 z{Ji?<%$?ThyH8)#Je|AqY_XQLc$YO(-?6~#dfCu9*9?pa-7g+?FFfdb@uY9@QUBuO zz89@s?1tW@heOM4LyPS|DE7!=$H*(-@6M5zUBJ=>c(_NF+DF(OW3M~Mm%Ark_f9PJ zO)m9MzV4q~9++AhoLU~7dei@Wd1QKJX!_02^EX2?Z-#-#eP(rJ_VwuO$|x{y%&v^> zJ^d@=b8p7yR>$X8$LCfifazm?bz**P@&)i&omzM^y|6mHur~d24fx^t!usUG`V=sp zyj*|&YUBB<^_f>2Gq2WWfn#HFeRgqUZgF#Vaebb>_JY0sg1zx#3HWTzFRd>uZ7eLU zzg*e?mOu-D{}WgREw8_Nz47Y5W3>4n+V=ea|M~B40O%9v_)qN<|Nr{98+z2ZHp;L_ zlXiIAv@u!jddGkGar4_5X3*d*hbIr-y=Xb}_SNu{haVPM@mw;Ftu62OM-64DOjce$ zofOORB?jVB1hh}x(#p}TL|zxwBJYkF>2zQFN)IR;@@fZLB=YGbX7rzVMaHTT9K&N6 z3?fXxFu2|75_}q*z=yTR6F@L^b{wZeIT1^YHZ8H>;00j;#WO6!oG!rIbx`m?GMNZL zNP>t+1E&%o+2(W!iA&xMXzmngp~j1xVJVM^`@x){oVXm8IiG#&$E54=AV`v+9Wt|% zm*f_gh_&Yx>=ipqF6kDbe9sIa#w^rxV1p`aRtv))Y^)YhdQ{emqn;mIyBV`uvv%v^ z*NwH?RD|j}gD!l0y(C$&cD*#+U~|1J!%B6dJjdhsMn!&T?M7ws+0BhAMxyFwb$QmXNa58&T-`;I{uIf(sH$wiQY4QA}^oJR_nqs4b8 z09Sg!URS{Et$+Ff0J}MG2m<)nKd(rG?6$GRUf^6CU+w|UCSY~EclxYP?S=Yp{5MP> zz^^y(?vww&{tz;VfB)gV);50Y$OkQrA1c38|ET`hS(qM#$RA0&q-39uEy*CI@GCho z)@S6{1Xa9$t5c?201AV(j6r{t#aSmSDRZ`dCzWvu@*T|hJysH$#4UE}?Dlp^`7Sa^ z$tA43*Tu%_8lNS#`WQGK&LvQ4dvjZFjRP%*eV^_5Ir)i@lubr(s_Z7Mk#po$G?U#< z=M+9p!(}#f57e1+TIKZTbi_9zAtFY2G9eBUhbfNU2UhA!KKrq!ujP6dvQYT9CfXE4 z1)fSS4u25%R1%-O?dK;KFg=`tf%~I?RfaBYgmGp~7*E!7=TeXrkXqM-4-HBkkIm?{(A-bUCEPH$VjJ*F?OnHis@3hbX z*+9}aI24Iqq~4PCkfz8LGdn2j!LXumQR{8#I6;2KEUb#yRcOqyn=%bX9L1nP34%LT zh4ASbwz&zsV(bV)C|nVnf&-i-zJL6B*+$(3cp8V0bu#Fx9uQ)4SPEC&!L=3~1wrXg zpJk%5ZYgK-XtN#{Q4Hk1!^j*Id$t}EFtgX>IquY$Q4%I2JE`1x_9gcH6!Cu<@GmuQ>U zh`A!saxkp=qn{X&L$(~)XPhkDCSKqYWUAg-@Qe`5VtHON?s;B5>;A4xKI`PexmGF-g$>)jQ8y!A$bx!X zb)9;Gzm##j?#=UGbGdw=qK>v%7F!Yd*TgShRxm&J-A2DU_G^T;9H^cJHNq1qvnj9V zQP(w<@G+3|!g5+VO@Ve>5KCtD^T}^hE7A%#E3XKKTQ#2Hz!P%qjk8_fB4tb%te*aP zFCs#&`q)UHLQF<`t9{a@TJ&MLyTexGP+vj;uG0QChivuRW&?by9t2sSja~2Ozyhw? z>j|xEBT`|j_+A4aR$QrlW!ZSP-XlYU-h);IzrxrPV2&+Hi>H!8n_GyhRa*5d&Q03`Am92qQ^ws4+MNg>RMxnXDUO88(Pp zazbqIA=S!EJCDr<)0a;XzTE?CM1DhiC7GotBWg2+eNE%vtU9l{ZGFW$tDQTqONpPJ z?ib#7E#0kL26Mjepfxtn@O-e^qwFF6<&sRH&j8&~kbHoyBd8J>tRs$+zYOXSl8YTj zhMJa%&-C>eJpOof%ut#1x4vGppC7MNxy!K}Hht#eI~mFL<#HnZ zeO4wrnHlNjI3=5YTc4e*{GoD1!~TB9*qv+!cZKpnn*o=?ot$d>3RTaPbnL$wpZ5xD z{!uIUu7?MEK`1eg_AZIN6qJWvdnqVwo^gO?*$ULt?A;c0)<3N@|H?ec>WcvSX!82@ zt_`4)rm*KyA<#$D8~1m@$=~pK?IhIy4b{)7yfcBZX(Z6qzzm-eo^bO!50g7f? z{;y#sK+()|K(qXN@Ah9Wm7%4!;a9+}4PcM|-nG5%`I|Z(omt-7vMsDnzgh)gft&pFvD zovFw9W8EU@nxtXiKrzbo;B{#;+fsY?a^#@2arkVta}a`CRQsChe(`w3c)lqmvb9AZ zXFz6u)B;mGzK2Uxts~FN83IqmgxXajCBCkwi|;xebh%f%QTzO%jc2h_9Iz7PqZ)^c zE|fsYEbKt3SNpP>uO!xCqPywi!69+IYqiQ4NLLb%m|k!nA+CcyS*esGeJ`LhsVm5v z6~i^xyU>4K`R9~vywxn`iecCo*@p&2^odD&Q5ZiWSNL&vPw~ig`IPG)=hLSB8t;)d zdQ5xwix`DK_3?>{Vi`|?nd8+H5muWq6gi>m8*^0-J|U5T8kdq64@nU7y3BL19olzq zM*1S!N;!c3PGgM7NM%YE83xII=g5BNZVjzCH=cI6O5F*yAAQh{!m6{n2;;YIk916 za6Ev-m1l<;sDQ4DI;KFlv=_DmuD=8?b$Z~7w`an*)ybiSR1vOrke_iaL1` zV_X=|jTbBc7u-cil!4$RJh)1&1w=+it=ew#s8i3cq#orwagWYHU@RsYe`Tp#T^~RL z%v>-ToHp%$M-x=1Ls3V1K$6ugNZXW7F7^My-FpT#9kAQJ|MU=ALhpo*NC`!{n$VjF zh)R`E#U6?@QIpV%8jucZKtw>q(2IzngCHHGsX>ZJQNV@`Pk7(`?!E85=X^MG@9eqz zAX1~QXLp7pF}{T7+o#{LI3-!uaqr^)rgspcKr1Slx&jy{tH<`8!oR(kYz7yjD^ zfC(h8bLoE>UN@PqcQ8Q+>9C%3DMM%*#C;X$u?9|2$4}hq6~hELM%f|g1;B6A1`}_s zi)rWN0CjR}8B1(|vbIy%kbEmTs72xmmlm%k1Gf!jH(`H#U}U7`4Vt+)T+OX7u%$`R zw!9JoMMSIVGU56TAf(DLv4iIvr;ZAbwdwgbkoS<}=2h`T+$_&wtlvW}Et-4vs}SK< z^_1#LTnG0F@kI!))?z<JzAKg4bm0Kw%dXm@7dpd}NO-hMoJ?&0@!0476sxcqh( z02y-1dk`t0toN<#RyaJJuvX8v@qNTPdkt86aX;zlZKx`(4Y8ZYt}e$DzF=c|CFu=U zzpZL%_`66#o*!*gO(cH?t*0CzzxMUl(>NR+MR}<;Ty#!h$ZbtL3!+H8v!41%`kN1h zBWtqu_tt=?vHIB-7i;{-eFJ%!SEg z0M(3wTFkJBs;Gkh7{x>Q90t#M+tGaIJ&b;gbc!+YUVPY6%tqNk2%B=P(FnT#d&EH` zl?7SdUuy8A5wu_JY>Is`0cnM&XeE6~e6#-pSLkr#brDd!juipvY&K-;IPL=-7TO6I zj>-FJDyJ!*g7p94WQQSxj^!WWh1TwxKc+2N#rjSheP2)JIFE(m7;U^iU2n;LVZnJ~ z6ttCUCw@Ou$&`rk#D8f7AJW45Uw9yL2*F{~1YSfK;a&)Tni+UGBW0!M?n?&!C1hXtoV{&ZfWv9=4O2^B2IxB|ru%KMA8R3Js!J=GiE}TwK z+e++R^$Q!ZP{woWV=`QyW=8cIo;*G@h@dqxJxg$4jfeHMN&Tu=qTRkQ+`VKq@@joCW&bVFikxP|ZKScg`-4F?c zzX=c9q3)=4D(RB~QQeQ^ch?8iXhMk_To$9~ns-b+tbQfr;z?H_S0d!+z)h0qsDqf* zDyS-y^x~AiGMdSP8LW83#n4#BaY=*>?vh_x#5-=(I;JS-bq>VIV19QV7A#ozL!N$Vmqrm(6%=NAiUOc7)TgJCpz{dFQ8VDe7Og9=s zekpQIDT`uw+U5M^FbQ^l-l^rym;w-DBxO0z4K-;Z-u>s+jM#h;t=UIKPE`Djsw}zv zsj#i8(rNHh@s}Cjo>3X#UfN3c5ehYf__l%wmD?O3UGuMm<^9%CZXmx1=MJvdhvCok zMSw^45%#w-zxO-*%I6cw^&=YfxH1NT<-XY8th01*Txz{ zu}=(Z-G#D5Llunli5}>z!B8s)d2gfANNSSSqG&C1EidKQ>{G3bo?^)b{~>62_s7Q- z6<6Gq-DQ#;3S^5fCrC2hXGOjdF3gveU;hyP+?rSRZ$#a`Yg=ioo95s_)&9TYpXt2M zRxFSH9L?YTQhM~+>dB#>lTUZQGHyLvKYjGq%( z@xMF0M_aeEhkh>`{rxd~tM$vnqkmTK%l}W@ntzPJ|6bZyXTwGUvUz|}^-j@G|1}0b zV~@dZ{~CkO#xgw;nCx;!e_GeYf6l;}y`lf?WMr>S{?h;)|A0LJ58iw@oKiY`^WgxE z9n<@_0r($llz$GubyN51#|zofyymHY()|AO09?~EyJtN2uo~EY^IrarU8?xc8TcK$ zOL6Z?@84(Ox65og-!$vL+YHPey4Yi|#eek}TxGuf#{9e454@S-A^cxM^3Lb9TfGOP zzUBzZzw1c2DWw-Ymt(bMaU;nR#QO!@RcVq5hC+brcX9vM5N zx0bY)?H??es%~phO&8>GLI!)^Bkw@RrnM_O3aYvdCPvE9j}$Z{|K4dEd;g+PA?q4; zYd$8SM#_-1Nv!XfuHN;vreRUXmOG_RR<--A$o2F+QE9)a{7Ba{o>N!_Yi~T?7RQl- z5g#P!nmILVuCHRj(84#)vQ1IkjnS?m}IC>AeJ)g_Qm0WrunCniy0L znFz+)vs_pl83dLJe3t}=qnQ8#%fdtXtY~fUm0V^!CvKh5aaizdwIJ_-@rHTV!LD91 zcs6r4@m;zdj|dq+-~d9Zb`*)qvA=~qof)r>`6`$r+aNsJfjRB2i6bTCM1}IH#e6$B zkqkyTSi2$>S%Dqw-onrR@;<9{KF)oii3Av*J{bUmOH1VoXm?iv0X3)GSq_sQv9Ipk zI)B-TbAJKOB#lp*M$S(wK|M@HjPGMllm#TP9UB30M%MH<1H$w50j?cBbPz3DUM}=& z`8JZN-v$>i{_cLVLBRR z11Xf*+dLr)W;T1vPz*9;F%mFAX(Ej!qD>_R+Bu|747)v(e_x;iQ9ez&XCv}`mZj0Ex!wdd9OYquam7D=B4pk z_qNinHBkRa-!2F*u90yW#wEY`?d`?;jR0gf9{;@rd*u89 z|1&P$liExo6)9#+V}ihT7n_qD`R@{(axa{?m80J|y9MQ;U2AS-m7lHlUHS8kw!F5O z=W$HjgGC0X=k0vi_@RZSc$<0pp^c3*r@djkiON5=2O#LLkX;dx-TdZH%v~zSwBpQ# z@9T2$CP2cTUs%-y_3GiDP! zN|WYg5PTUT!Wsgrco2mpT>xb_qPkAO8~yt927Y6EFa(S55bI@k8#6(|I{+$x2r)?Z zwW}T@L+p!C6F>nIPM`K^GjD^l8<7+%{G134?V&W_TmD~de8Qwlawgs?yGzF>OEb$W_ zAP$~P;9%=m93)~1zFiBEW{tVERx=@7bc;JzKi>gmVoCyW{TBn{;Pqed>e4d@Z>HPX z^I=aS!-+2gk@E=u_M(;OA45VYqOKHps)A?*J!!T=j!?>b|F( z=R+QPeGU|c(aFd_EL4pF;*DM1&KTOjK(^NwvSCoYoE0c2De1;Sls(jXZv9*IFH2Me z0Mk*uprxMY#*m7;J&BxLo}LXpOb3*Xin z^P3w->vZq&+-riMT}1J#xV4E~K!o*%@DbZO)tkxvWf}Apq~3n8fB`imfiZmRVkn-? zg~ktzo9ZJ>1@+=+&9m$ewEa^k+~W%DjL(*o>3;G01&A1VLE`y^b^)}X#F9JY*##ol zOnv(;-ni-GHGH$4{?>uud^g@XmltXmWOH&e?o6MG?8`LYc;9;7Z~2T;aouAAPyH6; zz-?^y)z=TwwiL)dKWE7W!_K)C_X3z{570c zSGOF6Lya)Z$*|~2Dm7T{wy3}f)1!K4EQQvRL|4ct3-^;3HlZ<+?C%%Sq=&;36ex(h z4HYo_Aa8dYdrHb}F(!Lz^@P8gjINT!wO=TIzstqap-H_ zv*Y~6r^#J-Kc$o*%{n^Nov@GH!qw^r{O4dS;yy=&u9!&u(<#%2>1ZoGL( zk4$cW9J&d59j)K#E&r09wTaLnfquHomh8La5e_5QwEhymiQB-#m7@n#F27+U_Grzs z7+9XG$O-a#PA4VacvHXj`NkQQlN0hr zo0JCMYd7=5f_+ETBei}_gQLG27_Qps3?IaUBC~#P&xmw1Sv{dX9W92-lD`dqu3nPF z9W**${&VK_Rljaa$9s|;;XdDgNw^c#Ih^|X>dn25<7xp^mi@6Xm#ydl!%J(9-w*L7 z9zeL9?s>hc%&rwY{|8#lgMBmX52cA|*>98P6!o0~fnhJE?7hkSc!0m>0UG&f)`nv?R zmUeFutg7S=2?U&9(gZ7Qf~%d+VP%YgY=Q`2&~Hj!?be_xxTrZmj9B4O1T_P+fD)ac z+;BP*ZayCZUepQWj4;iQ*Hv)=Y<7IC8&vJBOr4O@%i7up#>BoqxLCd|KR6b1*y?=4 zaT%R(h*^l@QMi`DlnZkBg3vIieG=R`5$|OZ zNzAfTIiQz%L`#y-R8$G)@@pBQ)sqr~71IV(V&)|(+7xZaEwXYzyS`}(=aplJr&4^< zAu5hK?TO0C)pi@clCOnKdHL`<(D?ZrjwjR+->j-ZDY)Z0bo zFbg6=#qC5W|4ann_~av_k}=xiiETn5g?#)~$)Bxm8O`%+;FWb2WNu+3(|aATlcz6q zYI6q*Rmhptfp3a8A-&rLzj#aU6pAO97(Gq{0&*m+m9JjamEbsI7nd8Y)+XGWrxmSH+Y?;VoChz99NI-*xaIpKx; z%j4+XANMAb?mo}G*FxeCHp_$N(NWEGt{FPdPdZwxkk7DCz^zays!$}aP^`I7Vx~~) zXCYRsNY=1O-mOS6sz^DnNTs<*b*4xiy2|;#h>`u9CBruDL;o+X%zu)jd#;RI{Ifk* zCgu6rxII^f_%Dvk#eZVxb9%z}jG4ah>@GHm{z~4z=~Bv`vELu}4_$ie;c)7nz0cOA zY-486-p^;VWA>o)|1xHpCjNsm|NPZnl8ni|hMukM{=bXTe;G4-qIB;9dTM3Q`TtMe z%+#L$|KGuzVQW#F|Myz7$hxzqquaXQ+G=pn+{$EVsK57B{rDgO|N6Dz8^gnI@pE{S zu`#Qu^@l?i1dGFmjSUTTb-(YhfigdS7)C)cD+6v%V{!}HIJI~YJkbXNt)gYB%u|Gg zv;&GqsBm+!17}$^r=R5O_#%%Tnh}ac@FwgSw=$=|<}dm6EmtIDsHcx&lpI)QX+HPO zX!2JIOnn?495b8~zM^^X)WJe+DDsJ~j5GQ-ofN}?K^-P-(%WJU-2xacSl@Xym)VxCz(K*6@IKaQDbg4u0KzV4Wl_9fq7` zJg`;e+s&0~V(NU6`^vXZAP5u?0q8A}0BA5@m?>p^X}Vn|=U`e~h_RTvH%H&{8ZF`=l;X3DQV6GA)7eM8Zu{^c#znd$O4aI% zQex9JK0!2Z7mbRNj$o9Ql}Vj@(AYP)j|t*7BT;JPJYsoy@ldzNikmy+7%q)cd^zHh z6#8NlP~!$P^RKv4pXzrSX(&GZNQ~i9qy41h-`p*?xyTe5>s|LI!pt!=6Lk*`Jzj4e z6Qr2S@CpFUczCuOm!FS^h`e}VQi}~&sg`S)S;Kferr0w3H7z58M!>&yPax%Y8p~RY zG^o&nyp|GF1cxGvHDVrqaK5^la=@haN9U}^cmi$3flIAmfW6E`Z+x8#o&1J}NyHNQ z58(wUy0XWNxVAVXNjL&TWAt&vos7|zHl%{Xm-ji>_ZQZ4YZPNmkiurJ%y;y$NcEQz zp^OIZt0&bHjg2CT!6$`v$iS7tSJxD3M7}NRj2n44vYMTBKZ!Bb9D{_T8v&_NO2O=>C6Fh?#Fr8VdGmAPAfJ51Y3b zf(2NAj1}-#-l`qRoeCC2Qc%iTJa;xMrSuaioKuS>&Y7F>T1Df~?Es9#BH2w=r5zni zj7f|nLT-r3@MOD4&3WUYe!nR2J2B8-U3j<>JNc+eKBS-(l$6n)kMuytK;lad8!-vX zCwx_`{_vVy`YrniJxt~dWkI()2))Zr(DN^uF_qr<#+yQx2Hoo(;l5&=6kIm559cUA zB7;-|dTnO*c^XHz)fViI-jiT4VahuIBE7NkZ{1Kv$bLL{QM+DxpQ^%DF7$0(fC3d5 zN^gXcZ}3@zg-|jI$LAGBB(Kg)>HF;?qDL;1 z-oS{DXbRjG^0)O1_#6dp%tu&ZA>vk5l4DgA&U!v;gFD*!)$`t5VVid6nP|Bp`7DD^ zkq6&6&>=!C1fCMB)Mge7j#*&B&RY+MpqKzZTSc-d9}-;i$X@ISH$$1qY0Lx~%qH>E zh?-2WU4pbSg)?xN+s`HFu2c>g0%eUR&r|}dKbfckjw4eDPW4x3*8Xzx6J&4Oj+FXernoxT59o$2 zs6QINVz(JU_bh$g<+zl4m@|>lB)CxyQKYv^o0|&H`(5CcN%W$&A1Kl21qEHg5O*&g zCxSk(%eVN^AnsTuOnV1}>79*P%OQL9XW|IlOyG3d2qJYLF4u4BF}hkfRO6eQpBkMa z$Ryuu&be9NA_#hHf$I(yP=o0ZsY1ZMItFu{^91WLjAq#h6?_cUB2opXmBGzJ zfR(ja;)7tP#X9KKk3JH7WPVQ*Z}mUZwa!tC$ZX>E0G_?c61WG!k^8CvE9X0~rp#uF z&xG~N+6^uDSx*W-lL$YQ*r19|0rQfoM*Zx+b3^ceKpyM$A(8L^N1E2f1>q@C--cZ2 zySG&PuOR4l)8_MvM6@C4v+VGU+>6fG^-x`N}seYp~DGy)Qd8WGG3b#YLF z2{b$zx_<3$<$cQ)Gd;tsb0fhHVc6yKdVaZ%7r#hM?NSXjp8x8#UHLY|!(7(OF;a{0 z53hTq^C>CbNZ_^Wx04P%EjKk37Q2kyT9vNN8DWPbo33rup$y7Zt)iDa37cnU0><+j z?v&5{`QgSz$oW#QSC;$8(}#B&s&}(-qwe(@_ZR(dV~3cu3tYv=|FR6*V(M~w;-XJr zSitS7Egq+e_4m)|?uF`qd?8FSm&BEOrXr!d!JE`Y#j4E?N_JE`rxrr= z`qMSh-KohuL#uaNJa+Vtu;HQ;z{dckX+yvwoMxocibN0(@u)oF`YOoddI|B-ca&w9 znfcSyqa_tfON#V`m%$hZ7M+ zUjbnUu=97*%K@Axik&4GEiA@{m9xQA0FvZZzc6c7$R@3YTm z!=T40C(uO7bfc%33;6FcNM zn+GIy5)W&Uk6rP<`E^QVO~li52{L|}Oa5K5Vy3=0hx>Pz>mz5`9@9SZNE1}^Ipy2~o9=J1sYot7>*^5`%Gm=+$?R_nEJzG{EN+6wM4kft zh*A1+fe#P5p5<-ccgviG(>QsAhvemYMgi(@;rKVXU%fnS@;6nSj%q#hWG-hoh=OMj zaT~aFEvCGTl_Tx@$pbx^O6Xk(@G2|R@zmmdm!hyNEfb%6f&ThG1oR$USNw1?=Yv*| zB1j7B{Hi2-A3>QfM~mk}&bpkR*+VdK+djlm*fv{MoN*GLbg<_(z(oR?O|mZ{Z%+}; zwTNH^L0VsDs&a2;-3o;MLqPTbESycr?2Pdf>fXo zT_*LjmgGo>aOGBkk3R6iGE@m~@!R>XJw{St41Ca)@>ewHQXM(mFSKhXQ^SmRqysF= zyjxRKn4LwQ6FJ7WD@F>0@a_zQ_c6pcf&rCsQu!#rN3>MIIinPd%-(Ua0qhEfV7>_v zgVhUbR-lI^V82+%p-rz$enEv}_vfZXY*#`lae6AH`7-5(F=#^L6SS{W2gf-)?+nPlcqy*(UmQ*MoF(P;?{shESkMGwvn+fJ6{j_b0$+hu4&- zz!`u51LWv>hr_f`wr2nLbPcO!kXv(c$@dc&ysvuH1z&}dlwrQ(g!@-edT)}vI5rpsGGM2#!CB*29MJASSdoq`brRgSWSjewfpEx&0 z(^=>x?_wRYV7|5xYFjoVHeoe@ZFyCN6`MGq0>%2PIOeN(=P{}dV7dLGuIYfSwcP5& zarkD2doE}x1iXJ!p%MzUBtF#YM>hXtzw=5g8LRM1mY%Frz9_;^0*yQ{QN>$aqx#^- zYx7uKmaa96F9aWh^b&pRk~^e!WyPr@)%YqCqU-}a{;uCSHNRE#NJse(m0eL3RiA~? z<}nn%)mHbQMo=iW>ac7*^l8I>jG%dP{mC}|M{Sa5X8nbJsk^pv#uLX`LE=o1Xx2Mb z8KQ)c3`B>8UZ6Lm+oEOxXoL)Z;45LzHc4Ip#BC&wBm=uzxOUs-#w~FaSTs^gDDrl* z-U9f=ys2VaZPg==W))rsBg}!V3Z>7&-c{;%Zaa>OwI<0tj-#~XKWg!$2wkaemVBr5 z#MWT!3aTFq-NXq#48jbzgN+I$PqBaA@IrroJ@*}X&UOw03;BnAFfS;)cs}_N?6WOS z)JwD=n|c&@PH-Pdd$muPy$_Q#1`j0*9t_54kFq{F}=}g3GQD z?c~7&mf`sfbU8$4EI9BStKfNitZSs0JFuYJhNK%X*M0GKH%X!=*tjRuqbDr7C!(My zs--7-uIJji#Q$s!l)%2s{byHU$UnOZYxhDNq5rr|2y6OBU16mYn=BMv=^oB-yxMZ? zYPH+7MwjbPh}W6N_aYv(|3D7c_$EFLh_61ARC^(%<=oA>keiLcX)Txc3JhDLb6T&H znJ3vDhKXHX2~3~lPQM$yr*C$iyY=D>t>;48i}QQ8y)Q!dXvA$%`2$hxCc`_USLox{ z@>*iG>^){;(O_&*X9|0xbbmCaWGb$7I-z7Vsciga*-Uat`|Yx>%!lk& z!u&Ok;fRg`*dnZ|yN;2i&hhn* zy)%mUgReGvr#}u%Y_?Br_snkh&n%43t&Y83oPM)8%0?b7ti68sWpe5B|G$t&?9++= zQy<7(0Q0{Nw#lKuo!wm7YPMPO*44f}w{Dw}RU_MDIkWX6!5lBFYD!+_>uZ2te8wPo zgp_T}BFIbt1cu#IITFPzjX_{+=%gySB;f;O@Y38~jyFDHKy`Wq+yS`{jFx*o$^vE^ zY&b*`$wgi1s-&H0c8*u0%Qz^5g~!a3XB!e3p{hIlSp9(IHGNC&NdiW-X2od~z{vj)lYiXVyD-mpkzv`8dFrNqq zr9+XtVWmaUP%PdoQNFu0jt5l{=u5Vd#I*^W?TnBSwRB*r~p~A(mvrs%|uBLKg4qocow?z;<-6b{(cQTiAz$$s_76l zZ}!Ho&lN4c^NwYY3crHf$Lt-tv#NG!Z7)j7R2j9{Xv~_7r!fxbzcLf8{jxC$WmV=? zVEbh>h>v9UlsZYF-UV0AY-ZTq4x{i=w`E{2N?g?nr;0gV-@CG1-FAM-`l%EJ=XNB1aGf>G`JeP zf`}h&zs_m2Wa)9`6c1lx)7eeFybI)B%P^oTGB}kHzRjx1#G?v%dwK-=YizD=pVK=u zCoCPSaoEQUe?)?-{lvlR&m>puJiZrnxIGf7Y5kK64_(f0|2i7LT%9jBHLUI+jgpPy zT~nhti$y`jbj_E*JeZqH2Ect6Ba{Mcq@p`0{PrV30zEv}z)Un+u^p~RhGIUWq)Kql z1)DE|cf&~1UQ7Ti`(xPPLyCB=eok&r=HvM0r-WtP7#NOqyne}`s9dU1i%SQj9m>E1 z>`YeMk0taeBx|&`@i`;|uYYAehWqDbb1l9j>ZuEyFwiR*-O6<@YgIl$Hc&+|ka^Rg z6SVP7Hs<#Sby~*LyvGi#!%uS1ak_4W(ij6VIFqs8`?r)*lU41NtLE|f>BRshx6K>F zgj%lIU`rgxnxm=5Xtily%fA=CyA0zs5m8{XVqs6#H6!!6-U`G<@T=9@=g7)aKi3yQ zd++f0opAH2G7gVoui|h+Ce6^MWw-k7*Q!^7W9a%sptD{mp6WB z&xk+^VGA-QVqEe0ezKLN+Y=5NO6fWvWhA;{*!=Q~0bgeywwNa1R6R~Lv+=awA;#vP z(mp>WPzV|zA`5cXAO5<{DVi6>Z|uNzrJ?wJ50V6Epl>Rkh*KFpUngtqG@FKj7DE?RKelwD*Ee*@3lH*K^>3TN4u$vO>D+ov7nSe*|5<{_H;J1>+<`jBxe5 z+M17eKBkC=R#N$Nf65~KRbl$z<23N&=Wb!~1;x&_Ae-~t9Gm3qYvZVcH+CzEgI!0B z7mLxJ4)@Q_*Uo5Sp=*pbf8Z1US_ z4Ie{te5JBXRQI1xH%u74k8{plN7d(`-wX@l=J4j2ZgoCnU*;h$nP*{=5dRBW{Sc%` z=gU5Zn=%gZM8bq?^6TSdf-1l#|7!n4*OL%?W4A5T$8JwdCp4mE2#1M0YU!cj6+vck z7U`==CW5_chZmLjKlBck5n`VCcx!n#>1bP2-_RWpW)sBiR5G1+b0#W)k|L#sPjy=E ztrCiu@ivW#8`=WTTLL~|vGCj`0<>cC^z+G-)?5Qdfp9l#fK*6L+ON~hh3g#{;Hyg+ zJOUDMaC^y==@xzc7`4FfiS<=PA0PPApiUZkC13cW{96VB^;-<9e?$M!_4a5pY;+9XBb!nB*_Ow3PxOU`8IiH zBBO$?XobJ=DQjq5JtN`CSNDoC@$Zqr5!h#$)mNW0hK<(6Theq$O556fF z9C)R32#%-L!;T}h?SOZZ*ZV=vBqz&1*hSN$PxCK2^f`T?pb%)ooS1sqY?){Flt$24 zM{5>$ZJx(j<8L@uJY1k_ zvQ_c@+(Y*Yw{IQM%X)vuT0Ma;<%f|Xp|oumaTdz`)>XnPBhI65Fm9&jZTC`vr3_9zbNtcQwmJK#l|($50Pokai>p5pjqg4?WgN z)hm>Gdm1m@9#(idMi7I%ya_Qt9tx&F9EW2LC1ME37==LU$1NFs8q6vu_RUvn*NH1S zA;1>`)RjSY&f%xfVJ2u$eH-Nx2E>ntz4;QC*9LROfnw?@@IV*R3fLX%ao$QIk_a~< zLA(;wRStmo84x>?Xk>&G%{vjQjs=PK3jKZH#7Bdi1mL95M2>XCX%^Isk?4}>Jy$5# z>IiisCT6Y3<@B=Y!jM$u#A~5()D>|nCal;c`6f8ljSMrVC97c*F%BXP6oFsDsa^>{ zpfX5}1TkkpPch-Hgp?dhB!!%$9t1l{hFUp5ry3zsiBLNd%!LW_qah-PQwLpcT8sQo zuEqadnpuQY+WmXJKD1`yYR;xKUr4PDzS$H^s}E0W4$EkW&Utp7@(*3c=9RETS!%EU&Cav8`u; zrtWF9vDlKS*gcIll3X@^qhjVpNk@8VSJuNm+M|KYM_u`qFY+1vcPqwjvo%`PY!*A9 z+4$yO?R-|#yZ@xl`q>rqj~gc0yx9l!Q}pK9;-{mJTIb4J+0tzB{&Q9t^K~V2sGcp& z*jRwhv8JBsr+u@}m@6gi3l&}Os(Y8}`&aAP>TGcJ>FCy;G#i@k8-Bf~%O+nB4=uEh zE_RQtbxbVwPpCrpdp4B))x?E3+ zkcu_T!NP%WN&h^2b8Rf~vL05_{Yhx47mu^lS3?v`oFwevtb zOww*(v2VcbJ=WNTMx*1J>oEeE-kP1Yt#e?1B$mHB83WRQBYeFHZ*Gd9$*u%>;Vb;!Lrx@H!fC zTlLRKC&JQj@<9f%a>7KwrKH#b1CJKHpLd~ZpPakIp*D+L`5*Hz4xYxoyLVCTjZz?< z0>Ba*N*(V(i;{nc+)J)+5`hy0R!4Hryjgyq&zWUK2HCKb_gTa-HL14_Yt1N!^A-~= zW$w8xb|QA!Bce(?w3crEh<_;v1{EL7Bc@efv}8j4(aDcYso2%EYN0n_bMQ2&eg{cs z=Vry4hrzw(p`)^2EV(euTo1;p>hKS#fb;YQ;j*&#<0p$Zg`QCJPgM0ZL;h4jGN#%m zF2xH2lqWKm?a~6Cn9YQJEOHv$znF?XKdXi{bzyBj=UzjU)kd$od0!AVO7@_M{N-p9 z>Ap7830LqH*9w-7c2Sm)MGkM@(@O}$a|AJLlti?3eg;>x@4Ci5bosXBH)z+dPv9aG zb1elw>E8J~d`XlAleVk$s7=y+BCH$k`^j?KSG-r1C?S{eSYonHt)jH!B77B*cu}M( zYd4VOe&k7ZG(V&B8CYeu!Tt2FmpX7ixJUvLqP%;5PShw%Uh4Bi;rDqi+ucuYP`|c~ zh!-k3jqlTM5ATGYe|n>N(S?&_B0aX`sP_KJeWM1DNAcW@uw>wr*3$i^O3AJMcXZu= z>kKCT|}{;Cnxn*cX6wq zd)mJi&V2{IX2XL2JkcNH-Q9kr2xGRLzScMU1{qQFy~$r~36je1(#=F&R0<$Rf}X32 z=-FBi0^ra63$nrr2rben1QxVW{|>QVf*C9EC0{r?n_q7nAd|1SaQ*d%e*WM`-8GsU z1pZ{zKW?Fe2%(}i@@SJg!`{#zxq@7#zR!QdRL&agixsxd?vT%VQb`!KSZp_rDAFc!>iHlo5L zw$pBCvKQ3>?` zK)!L-nnmmj_!?rM6+CN@%}+Hb=!`mUR4T(s2K0@;pfH|tH7{H(p#}3I-bOU!}O^U67XFLJ=nG7quyrkF)n zG6c&iL*hYUgZrEVru*fa`~ut*@t{g4CRAgS2|b(FiOlMZSM+(%u8ai>1_ChUVG25) z$qr{TX%@W;uJ2bG(km~4#R5UR5iE#&tdg#LQx50Hv)hyLNZSai z#5xwOz!bej5oyVVE7=yj-~D$2oZ`P-*a4^ zkbm)5u^x>B3Djb1#ON=#1`a%u@|l32^%OGKq=RKP@j&VgjN>`q6X|}L_kI;$@j}#={@{$(uIhCaf znbGMJRt{XoMq%^zS$CY_e66g1xEo$~&^k&pNz*l;XXKhG7-w6AP$4g0N)0%XdVJgZ z)wKTj97mg|3m*byC)y^f9(u#0I{k1dJ-<{6Tk?KQ2vIDmWURdC=ctyapcfC;8kQ?e zdUlXkl~>^`opA3twBguE1~Tmghp2cXF+gt_(0^GZq9xYp>3#t$eOZ=+n8-*MH8M3j zlAh-pY<5ZbiNBCl{fVqImxh8^)BAI43G=zQKg*wxQ~pWPm7DDz?=OOVS2XRH(X;Bw z0YkKmGa8S73v;)Ad>ucaN8DvF)~Vm~T@&B~l%s>S5Y@sC4@#i2`Lt3%QGVpUhy(qX zAluzLQExovzYqTE0x2^BxXp92M6caD2BFwJLs7sJGnPiZOfkxK-5;a&<8! z{%cs2Jsypn(Tgsn)*Zb|)?~IE2qC?{HYv4s-2e+axqF14?}5=!+8>YQ04@ahkGP(* z$f-Zq*l6Ym>&n9xfI{!Dh;JWvq|cBy7lJyRY(?^9;MZ;^-x`*%BCnWOm=he2!R98R%yR%4GlIi`iuWhlbu+oI3Va2{9Xo%AETyaBM|}4(0hH zfc|jE=2gSl`7VOwM%AtY8BMoyd%*v+T|W_I9=68geE-l?a>YHU$NWa)sPKU^{sCOb z`L)O8rhJE_I}XcYIrAsgt}`K@ElEc@uHQ%l5wOt^Q}jv#&^Q)KG`Yf0gKfSd_oagl zKDbtTA7nGM$(ihRfYjzAb|=4A(U8hYAbpIH1LR03|ArC z0)J6&N`rrRpYaa*I*#3Au5jJbuWz2hGxm_oQU-lwAB zAO{0#)e(o0K_10Hx?UZH4TCLC$Fo&l$R?N%?=OOd7$Fk`tK^(}Rdusslu8ps93^EP z0&c|uyRt;s1#F@u2yQ_K{HKvK~nxygxTi{yP)KXL_Q)}%3mn<#ulK+fSw_xs8+!}7+^kTN{S;O3`o6` zN!6E$Gu;H?Cv`&R!KMHLyp-xTf_U%EhLi_YHxip1!AH^Xs{nN-kw1b6x1&R3H-URX zihOwRAtscBGyE{cE{TSj(jhgVn=eM3h4ElxCe)9JIGS^7k%A!6VKyXz8W3nRP+~XO zH)!5DlmH&A6DOfPQAr91(-0&)+!ZYp`W39s6tGGY(7?OcZ9-k~(r^-%Upk4Z?#)jo z-&UvGJTQIx(2v`A(F_xV3^z8VO6CXjA0xQx-t!#L3jBvq41Qw!PoWsH2V(n|P;9af zd+ZohdE#27S9pzMRNb+w?6`4_`}Jm*>y`hq@#;L;_#N^S@7Rhn|2X&dkFN=2n|Y}% z=Tqx~ZZ@+;V_4eLu#Bfya$5F8BfC&!&&*@%#*Tl(x~0Fkz_#(&a`E5e$#=)13MZ~- zH&AlwVsoFy6g*90%f&lgF>I}PuPu?@lTg&YClpHuZ`~h@DH%;J8@o|4oBE(Vy|gpy z-%iC}=2pGDQ!#S;$z0l=jrVF#C9;v(4fFZUi}%PlEo`*M8 z*gW%~W#Z8uICHR;Efk+GlG?p=(brF7!`+crm^Ha$>7v zYP)+6z`fT)%C0S8$D*g+Y>%)$PO|pOOXlW3kF$1$*=F9#kN-}vp#L&~_y5%&Vhcsl z|4pITSN)(r8|V9?!1^B^UdZZP-{%Dx!j*5mX=4^QbMFUivZf)(;ljHP_Z5wyD?B2q zHqo6CRVH!lpmZyh`$}6!vXEvpvaQ{G@a{vWg~?*K09&-wDH&yDJV4%K@%~kF06?*v zD#V?sYPf?;6YZFjV2rsXCkJ8&^=6<+o7|2z?ra3Z(M7$bhu?54EWlzRcYXUmo^OQR z!d-A$tBmNi7n0j2_2tfymPQsrG1|Bg65jARHo6yzDFo`bUUodWqE4cl)3mPK-A$2B zJl)U94Xb_R#p?p$RBh^6JEg7A1sj^4Ui=O6brHg zcVIhYU122`gz64s!mI$KjQxf2)ATT*fSh>{pIuvbg3boUf~43TC=1?qJ`Itg0h3MO zlsKp) z9LMCrvJxuP0UsysM>R{}#2Eir%KIRyS1j?ct7(K^XRfJ)ehzE_aMCy3SSTG);00`XJE()puY8ISsddo z-}%6{S4p^%qL5)!5RGRok1CPe*#yU|pHdAz9jlmQD&~jcGlg{eub=Fd^UW@VsB;DT zVNWQtsvqJmO@4m*N)%@>PA>DCWz1 z4k}{y5D#y8b1R~};WL!b`~4H(ByJb{YW2wDZ$xy)NY!r0xi9$dZ;yUt6onARId<{_ zZ;SXswe^J&dDUn7Dqka<4!Lx!VH`|EUG8V~OrDWGrMv_s-*Mx&Op&TvrNlh~HKk2^ zSM_EMWi_VaLb%Dx^L=q4;JO<1mh;DUWQ4_Zxt{!<>rC4`>*0$Kjcyy`6{m0ojd+9S z`VWf+e?_4jC=!lajf5VxcLZs%TL%jX9Y2d6z0F1PeiJzOr(pW|>SbQ0)X{Ys z)otquQGxRwM^yIh5CztyT~ll$A0sYyTAtUe7rmo=`6*=eA>z_-l8_1G9x{p+snrY! zgz`bT3O3`O=5xOc1}B1d)j&d}WS$Tg$}_a0({3!`f3WwSZA~qDzxA9mJrolXdQ0da zVCY5EfJhfZ?;5H!HFS_-LI)8;?-&pi1Ti2YB5G)gUU~h|cf_vZR+~<1s zyXU;T{RVPTX2u-<@#C%ASbRR~wId)lTB0@$fRAEupfsO}y;cdGN~gm7m1g}1&@%8c zw5MjgKQzv@XcUHGwI-E`vjb2cBND*~2F1g8dDb6E$fSIh$}V9p!5b)K=|Xd{1BHrR zm@EX1iZBEmHxE^;rwCZ`C4ut%k_p2zt4Ass&7BXD070;lDb$9 zeGSg0aM6ykavsM2Dr!>ApozMs% zDfMj<`=^hoBxcMS2fsiY(Exl^fYKubS1Z?_1?~Eul%*4{YQ8vY~jxT6FdvxvB zCDO;N9ep<`<{N13cIp)7_%jDux7F4X^W+xw&>XEv+z!$bxCw`7Ftt4uJ0rIXlT?4{ z4M8l7GNHUo^Di1DW7h9ct+(0c)*zQcOZg=(YDj^E!3vb!;_B|Gys*WddE3snp?aBe z0;qw@1bctA;Utnk|DRNhpTKTQo?3+*Aj=502E<}}r0zKr83ndXh{y>MYX%Iiw7j7$ zQ#*^PWY}Y`TYx)lXI=DPBg{|jsb8dI29;QtAlz1udbJ9R1wl}oS^4*6pvsa8T>PHv zStjlUs_Y~oDD`9bR$QT3^qmv<6_})C7hsayry0(}#eO^LWH4l0={B4z$H+h(che9@ z=~LzO>nrQum?sUqeyi4B4@poh(N_(&Mg_Tr6i%`zMze%AEDdq0PXiY{njjwOeP_Kp zzMQ+gkACX)o#KTy0CWf}VGAN^zPF*NChn_3tl*Jl>y)|D`{<|@I=U3FEB?LS4juII zoW`>vK#FQB7AS=5j%(fs7Q9y0gU|_*u4gUflw2QkLm81>?W|N=@nmj{vVF>N?Kgc&O;aCKm{WPKN0%E&0S*)b>t3454xa-pn z_-@8k1!5*id*}wBz+mA!8lw&CH{SK9z+mc$m!ZL=403UrE1$a0NPQXjvDr?>_hF&2 zC5Z930Bu1@R+wvqZusrh=DI3(!x~be!;I*V><4Di#%Z#c+)Yb)%T*kuxipcd;*0Vf z7UC8&H@JQFi?>X;l!zB1GU0=$w~K=Kl57xWj_Z825d+{Sy9Rjb^s5a$FJ@epaqSB1ky) zy@pCJBHFE^(-3?=aKTT<20$5(p`v}=p<7z5Q3nun`vdUKQ9?P1HdGQj2lm}`1_nbf zO65=xLtz{4+BqjslX9sjKL$Ln5MhzXO5z}#c`ySSX&y3j6teVLXkQw$&H=RM!Eye$ zToN(}$hK#15oe*2mvycLicqMEL#M^1K1SOr(QoCae7nZFD;2XCE zp~>h#2E0ANr;xinh=~|m264Fkm(>E-9o?x<+fA9X(}5e^?1GNAMH^}rM&MuyB&2E- zu0xJl^%+v((`P>chX@3BARtv+{YN1@fU`e^eGta-x1mCR`QeJ#h4Rb!n+4E%1_)m^ z4&JTSS>TuQD*Y`P)EC0^P%4?667-VV1_0*8V)>1&!UI>JuNCt5{dAIK2`BHE&DjBx zOlax0OqvjtU5wj7hdDD2!xGRGdE|CsJ_YA;8*e2#qJL1!bRq#;WYtlkZ^X2{kzAxJ z{xEV*e}6G0Y$?HFRNT$w6(7#4$N2+cSsc>+4%5VFh2My?$6I zarE=6vx~w#rlei_Q=Ai1iAh`{Qm?U$Qb8zT*+n^5!LxUIfa`?yH1&A%1cxWk=HA;b z$)?V=8m)A8Koo`eq8ml};sx(N6h%XZ3i5@RZ216E+ir{bAF?4Sga~R`>i7}5QFOG~ z-nz-7>r;vP$BF9J9R<`1x`1;EmA&a@JHHRFPK?oH@&l2np!ew;X&?(bsL-xsYGll0G9n%+}^8I}Wm$%KIu>2JY1W_BT z$Qx&eTWq}Ku-t7n$H1tiC>6Sl-$Hnp2e?!(|3=SDo5Qh52z;v!JWLQ3Q=F_jwkdS4 zRw&K(?rfIj%Z%)@0E+YUsKN=L}>h`hQy*P61ohOG(b z!1>+Xu3I)oTZ8SJhPvq%{^z}X?X>x&s$r&6uA@jrb!EX>FxSL-Vput1Sbntv^VippHvAZ*P3Wx?K(DT0Z=?Q?hL6r03Mx`GSpTc8um$u9$ z4p!SiHpg}Rhc~rkuBX7k2+9WTJp51^_0F$7Z;T8d4A|pSs(#v#1FA?UfDpM*lS%8e&Z&kpY~Mr?4J;z{Yu9PKN9IwjtQ zPQt+oVPgZo>~K6NNiY(Tg^Pl$Ce(&GzoLl@-2`#GUnOu}%yJdQh6Ql1NP%cO667E* z=V?5ZKZ-jxt2^=WN=v_X)8aItAGMPQ#biy!y}Qtwr7THP4~f4joq*b{c4_}xK#Oyw zqZc1WMQAZ+HcXO~=Vw&fkX{1QU9QIRw`$JB&ys9a8%HAP|+PPYO#a}fK;H#YPuoLo`peyiF0 zLV0-XhUr{dEg9S}QlllSV8jg2h`sr(xjBdfw_?j~2;2mx0~RNsANJQl1HR1)DwCdn z`6uM{Tw4F&HXRP6CxnU$1JbxRq&BIzb))P&$VB>mWEwwgyT?35`IhmfTc#nm%(HJ< zw%oG5aLYzwJ@_96>WZRHnZ=y4-p#d$=34CLTCNqj`?fOr91~Cen;HIlyg^jw{^R|p zobXKV@yj?Kl-U!MHbBc9^3EFZI&eBz6zk4D9=fKO^zT|@hR36Fd!ty#qYJzD<_(7Z zNf$G>~$5G~w{+^or5ssxw(N=d)O2e~tkrMaKYZ{IL9L)S>aX zHSa_eIs9`BP(Lf8i0Nzl5VM(0^Qo=#nYE|$8bUYDYCNa*wu2pk_v@J z`Lj5KCnWXmouoyHDMh2fOHiqn$ z6c1+5Q7#{!YaP;@di!+hDz<2+IqwO6v!TJIk>V?eYf+)AUaB|uTQ7ldg=r^Z?0K5K z8P4C3v@Z z#(-@yyW2Zn*v8UD9Xbl^7~ThZanw6kPcLp&Y+05nmd|;^7eh0@#YV-J=xOIjQp0-e zSX>gbZ=dzZTlyu1bDgL#@l3v^42ilkyZ^?y-l0=>j7kS#e z>x`y^X<*nnUPype18a^v!+k0R=r$+1+>bv8gL6T-p{Ov{=u!>h)r6O5rMBiCGVRLQ z4EK){{jHDBzny%56o4uv<@EPwK3~KR#Y3`Ayn^ z%dzLI`;^|$J6nIYlg+}Kp75XJV?SJ%>r>)MH&J!^=+bFQx;Jzc_tcJ|Va4kkXib`5 zj+~sTHGI$>%XpA@w0=%^G5x?bh1G6@h!#a9WyU+RnZ2*FU!KB!=LVnYo&R=bAfj~7 z_jEBEyGES|eskE}(U(p!OI4CXL#LrZ>eXnbtJRM;N47e?L6&a0Ja#pIE2^od^6>Sa z>CN=4+d8}9?60HyVRf0!JPA_%6F-cx;Y#^#^WQ^JDu2a;ilkB>NpUCDp^7_a_iCX0 zL)v-#r`!MeK6n0^5>x4y%ohwkO|dKIw!PQ&fvBUirFJ*Bu_jQ{FD`tM#wEUz+V$(R z7l55C*D(X`Lys(4gdQko!|0nd!wNvj`AyE}%Bng2VGFBZtPV#90ueO;&Ycl!?F9m? zk45X`x?_50DpMpUCT=*1?_RYQXToQYL=}6cHRoyYM6h2iGMWdsqS{HNb76{QbPy$M zo3Tmbc#ctZq)FsB>WdAM(@bo_a=wq`c!@nd6eWSahFv;FwZ**EPS#;J1f#9uPm1<_ z>zlT!!9)s#YgxK_jdcB40! z2;NlxGa`-%;}w`Et5qppg<&~YXaAat0&}mG{AjEha<*GhhJI2mEAaYk5YpadXppo<*E2Q`jNKZO7CYkv1yL!7Yq;*yjQ5clUn zl5{2}on5$j^s|OJN7?RMDiifMA0_o!E>4G(t58Nl%JG1lu|i# z1#BYka=#&C`g#+9vgU)5(Ue>TQOM7q{>sI83}~E5Vu>*Wwp)(@ogenDyC5 z^*<_`{!S-UBvx4?(|IYkxP_L}Z4&zgkSvE0sM9spb7&f#=#_}M!1tgWjq5uter!|Y zG6=WcLjfX533I`(k$G$<_0Q8NgMwfGm@(;N5(i(Ak@e!E;gEjw4^{p&p6bUB7$b6 z<;2iRUbL+;9b^_>eHVL0AH@(L%qXDb*O0tVm_l$Jhb6&az}M5;BodwA-Ckj6m3+G2 z`@$RG;MOW^^13_W-c*D>k0n>egDVL&IIGshAe~?{u&21Rf5&`@q1+M}(MmGf?YVf# z6D8R4clV`5WRqi#kw0t7M!-1O18Z2@0o3cJE>eOMrXoue!f*$;9QnUb~vb zU1+}8Ff{vIDsV@D*lpvqk%M%2$`nZWs*iF~x}ed*hRG(br@ zF?g;~Td;28#;K(g<=ttFGjJMv4}A_`7s3pDQL;Xw%aO5-NcQcj9G;&c*%V3B9&DV%q!E z(^D>=wqNBg0fxX{vzH;pg)k*Lh!p_pq>Nw&>V1b)9YaJXS+2Bg>KyQ=h01R~-#S5o z0UmbF(-En$soIIrp2CR6AzbL&V&{MjqFZbnDv8R{2rWt?p?nr$27rvjFc9RVDT&*+ zp~5>jnWR91*#HQ}u?$}xj9naq#lcK*h!6%k&tIyJhfd`nqiKPOFS6vQVEr9C?Jq_$ zbb`F5>rEXwcld!bD0Bi3>Bfee;hD_B_vEe2fgkx+(D4_VOjLS7*-j{)?{H0Q_J@VgZ$}% zzoQ^ETnY6BaN%i&P^{@FCsI3uIVDim_Q3NS;6R2cN7(q z)#)%*jLBgJI*x%T{{pSptE!P|vUyVVbd2HZ4|+gAlgVrU(h}I7XjtlQDAfXT^Ha*2 z1L3{|uUi%0niK0F)F$YPgcxtE_1Js_1Go-`)h3GCFsX$v!83UEb zs2_|$cyl;nBOGTYOe;(a;L^-1&>+)kUyKdyGqRkHs}NR33;eSJR2!qpco6aN!|r-1l=e<|OESy{9-6j36nj zZ5V04z1nr~;;NZ!;FCujSwxIP9Q+_76^~IfMc zo{K7G(c~-^XvIJqSWE5XL()tJUmYZ(24*2wm_E3=ETvv|&Rhz9~kJ#bKGCF==l!8=1&Q8Ce(X`!#f! zdQx%@y&DI6=xc@*95kz_xSh1vy+5R z&o+EY)(Y`M){uzxbo6%4Ifrps)fa@LG!(i98ox)Vqj$~66!S&zNBrogt;r?d6K#l8 z*oI6(8V_m1&rr>`@0ulSCV{MjF5|O=dItJf444_G`Y=o;RgIX*410fYOQQ$$vysq# z59zn|_o8CxsC=}Mz1>pa#b2TAVZa8``6%m)u1wg&Cf?NvldWxNtISJRGWr*c5LI-7 z3_4vb`a(&gO(L&r^HSO0V!C=YeMSkGQZDlD^pUK|_3P-w4Ej#1XZ_FWfEZxVpaN4% zYCnc>4MQu}y@or0SbGw)5T*!YfCX=RnsiXd0$@tau1NXIUwe4cvBXkp?E+#fd?9WR zeNx+_CzZ*vqQT7W>g5>$!X)Xw5pNg?YABIfHON3cdEu|bWAPPCWlN-=N=?K(EX`X2 zqS+nl3v z3p4o|?%rstSn0EOISW%ylSW=Yp8XSjh=I-l!sY7WJ`tiPSKy7hIhK9HzruP}YBPrB zlkO8NWm(`(p3glI^8NPV($}k5VdTrFf&pp%^}|M3<1^mZlwdYIA3N<(siDq}7bD(- zN8)W8=;1fNk1AzA&4B{;Za-*BkHNjJ)5Zc+UIU*RA_jgF3u(f$MM$U3;qieap85 zoxRs@YLCk*{njMpx-kAe-~I`Zd#_T?gO+}uy8LQ-Pk{-H4{B8Dw9vqO&wCArOg=Zu zG!^I_yk_0G$I@@~eAfV4g4wI~(2;+1>~zTCexv>KBD0w{9npV3^}>1>1?)30sH1`6 z6Sq$sl~+PM+^?*B{JkNxx`NUd@<=w8`wl${$|k*)=gn`&9elJ%S69Nwl+XX&dM5kc zR;|Ue>u1cO}9+^VZnv*&+XBlPm0WT;A)5oQQk@}5t;Pp$r1$TKfihZ z;@P)1#_J_tDub%xeBGc{wP^C#&c2sw z6`03l%l;`@ajr@e!S$6A3n3HtXk*jeXqNJYcdtkwI)c%AV9dHB?6wQ%c<~3RV=RTh ze4B!&^7z>kRee&a6|gSs5swe&rAe?DzFbQyA(bV&KU6vD?PL~9CAuFd9h2)eB-Zhy zaS}2Q($pn*AVnbK8FlXLW?5%jP6?mrPL^hK9Hv&^@m1c>Z+^e9^ZlKi_lvFX?_YfX z@bUY{tM3J?xc>;Jcb~F|IkoXW!0Fz9!|6Y>!fU&cqO->}GJWFTWLjjiim>#W&3evX zgryIh3}uQYbcRGWYoLfsvw9=fu=G%9;o1ywWMO~I!J)keFUI~0OP8PjgQYM08%v8a zHGjx-Q1O2w)8!L!qRnCvmad*m{?|F=TIP64M5ePuWV&T;Kj(J#A2^-ca=!Tg;?tL! zn%C|kSx0!KBG*-vLT;a0b6q>{<^F-wC0+A}y6+bso2WWIE#lLaJ(G=nvrYXsT13?v zk?Y!jw~qUudQEqI)b#&>)9u_VoHN%uMSS|~^)3;j9=df@G?Bb^9l3Dg;{Bcr*Z%P7 z=SRmx*O52Yt|QkF^_`J_E&T9a92X(#@n`=HQHuoFXCg#>diLr08*3e#3;&x^&wn{D z0@bts0@e4Y*M>14&E9#;|HG=s=brsHR{eHbq{J?)jEPwF!!NT>eqCF`)uL0%KXDt; zUeJFL>pN@2S~TeX`Su@T{osFywdlD(1gHJ}AH(TRr<4;K&J`r*bPb<3-X|93dMvlx z_Bd_tSSBGsB;tZZBh9D7q;(d#wkS!nMC(K2F5fyjtexERl>yEM=4mEOZ1YCuU%LQt zJ3+L1mk3VR3Kjv|#dm`KI+I<7!K4XsGp5SH!sTcThF5FW z6yyXCN6!8=8)jueue|bg*+4hv^y;SiUcrmTe{vXhGv9rjEKLC?Wx4%H*Kaheq9oT1 z{{_h(q6NsliAF*n>Mmr;?og%tfB?xsZg_0=4#y27pyD!38c8~U`2C}(O5JGG zk;8ftnffH@^U4%mPx6Mni^MwdMTG(sgmlNcwD~~_7M?t)__UteHscrkdNpPtW zoWWr!MZMzbW|qYbe^o$MlG1WmJ0{G27eOI|UU5-^JFenZ-hoCSodVQqzIa%vD*YY# z8ZU|Sj&7^lmV2+6Ef-tJ6yMa?Jx8LZTPAv4w?a*n3++88M!ibwfpfVTzv71No(AdD?fZ1OC5PLs+uQ4$0c39n z4fj`ZcB`vu$+t&=Y8SCOcDh-`GjB9#k8JL>Xv2?)gqJc~$ZbQ#+tA z3<1J%POX!3kK|1Hd;WgeTvJTZEr7#+_nuDg`KbS~1T`%n6PHJ~ zj@_T$Z|@$`Cc08O5;Y_veLPt;Wy>@YRWs5^oJ6)>M!hsDZ0q z7zdE1Ofc4JHk3YXy7VO>qS}eG;~g;0%($wLrHRWdGK#vK?4%A2=P8ZQ5DH8IjrLS& z;OX?0F>xL?>_LfcKH#tr;1qM9jViHBDk-XdDjCaRA*ZLu^M2f{Mw*V1v!u}LOc@1{ zZlLT5uZkVXEQHwf^Sc`9lRO)G=q6S!d}r|_0c45#gp))$VV%AVyWxV7>q6E5IP!O8 z5z5#V+xn%#xtiRd8Xv_X0+uaVPiYRT)kn0~Q^zZC?dZE+HAA%%R}(=jYhy-U8P-|_ z7~~MNmnN_`y6wUZ5_ZVmz6KOix|{3O&_7J)fn$7+YWpRKcxc_$TV}Z-FDG$N6!z zD9SUR6xUu{6VScRa%p1S(|{vj{Zf~yGwdB-e*R^I+om0VQ@80RlX;JK9Nnt(+AY7! zveSTxvRQ#EQF*}S@-xP|>8oMe?N;*I^gdYlS_kZSPC;NlzuvuZPpxWvE~amT2qW_!&Qf6xlHb1c2B146?bY4}VmG+$)KFVVNrtz+*|6Q&^`BZg0kljy=tBFtK--UbBiZ#jVzSL_G`V_c~u~fsfF5 zPD1vEP*u9o%|r`2OjOm7h^4VMdGNF-#d<^6Dw#5aOH#@G`D%;&0xg{}qy~K!F08-Y zufr)PPE%LWVN{sHG96>)bSp^)cv2tF?0fR=Iuyo0>EA7oDrMv;4Dj=nmpRwTXj`N) z?TYn@7jvN{gUYu?mvQkVxGC3G^6|rb{RQAA;04&n7=yHRLJL9{sM7vQ&c(D{GEoS% ziCxcCdM<#QIwiN?8;={(utwHjK65OMo2O~oh7DQHRWK&C@#IM0#dZwLyVg@F5Kob2 zOZ2GT!ng=*D`VLy#71tuCNA@qC7*Tj?jcwZ;rzqxmS1HmPa-Wua32fAv!rmC#_BLI zd1Fnc-yS7TDpZ*USRC$W7Z`YxAL9;x8$R4pP#SJ4Ay=2Dq@Y`@2Qcjwno5FKzl3;* z8>PbrR!*n5c$B!L|9ZeJbXBB$K$JaDGGxr9D@&CZIoPyI<))&a;Cwh*O{;k$I0XI&TrEQQ2o{+`FFs1S2dj0&@)Ap&Uo(r}m-!0+QX^j0mF zr#4~QE0Ea_x>K@Y9@rKVCZ2+b1tAj-%!!(-rGq)=mwlX$c+n0>pa~QnFf^rajzb=y z?LNXok$eC#Uf5ole9dKKDGB4%mB|$S2-N_|z62vuWc8VSPB>IGC%1K(!59f8746HKGEjWK+{hl|(?pesn()l^J{0A7WrS9gVNt{4436ZVi$ zrJTgnN^fx)RZlNMI9;^RK>KwWZ~_p~0%Y*+9NKMV%4t9XfQ)ztTV5hlNZI*PXe!-8 zp`hT`HiANaXxB4fe-|QIu> zn6fYtmKqow%#vFo{i@uF3EyY2!!6AfxFYj+di;x5XedVM2+4QaOl~of&`1l?ysIov zf(@CATuK<3v3mG=QWUPx@nai65YcGCVHz!`QdrTB$L{0Om%ITrO7LkP_zoQwmJbRpvw>(jV_~h6FP*Lb>wngXE_~GkXf6z=}SOH^oD>^ zC(j2o>cZ-V!3H@emLTgTbkpK%k*#U zVMIVw>WwiKy|gIYakCAO0buWkkrl#ROBQMm2VH*~R|dc|cC+C)a|;lQVgQ8CTL9m! zFRBdcyBit`;g0+UML}I=ScyCpX2pz8qq59BP*DuT0RUf1LrP~*zM&%9SD$V8W>>y4 zmQ19Bycn1hZr}AZXevNMj4gMn4spt|R%Z^gSA>4~@Re7%1TLf=qi<3r`p((>B>&*4 zGo>=5RwGVKQ+@pNT9_#{Z1jf`h8^{O5m~{rUcZDXWg{E~dC52zi4}|!4P?ow8gK}q z{D@jI=j=AM-UP?{#T*(lA)bR=IR-NqKr*zln7Tto!m?-~ss<=hW#u6YVI+P{6a^!N z$1><3=vOT!@U{fKF4>dM>9XpapjCeaV<{z(gAAe~-XmdFfm^k-RTt4TL5VeD!BqEYi6|TmbFwLdN4#YlN{Teu&Ku z$M`Q=Mq)~2m@zjOkq4-lZ&z`xR7?sVNn^lwwb2nYJqdP)v@Mp#fF5V)!#J*(&Z841 zzD@%&ru>-R2x(V5hQZ8nrJo?t>r%seQmT4?4YkS$p!BYobtN!IW=894hi@zsF+Rk= zVP!n9r6ia*&(cfKWES>=#M(x78Katg%+kA*(%QjqyjMB zDUc^SqbIlO0+9HyE@yl$10l(4Z}dQIT7vMy=HhJ78bI_$;6y6(UJk;C9%nfM4C{vM zm?%5tBjq1(!2BITiG&Wb(1Dnc(m7Y5SRGAPj6AGDNYvpMPQf^rru7!tT0K9z{B##?}uNF;bI_i0r= zlpy6qO@Ob%6%Q|OxR53!vG4f?WtD)E^tfF9D5TFZMu}MX5phSF(MXaZl-EUXl zK_@oR5$3^uTAo>`S&Z!pDvEn4%cLjXnOH*|DD2q=?*yE2=*=G3a!y-lMQEMTxFhJZ zFEhAXZKID2rhFse02^sWaeeI_nGAYa=AGerfu0-!M>yq(lUY4mBhM<8uIy}=81gY1 z-RDb3Ti9ZQLeEU!_tJPFXGkwDobh?nbmr%+eWt87db3{hmu^3g36n%a$xNBwri70f z2ov5Vc<#>fHf#i!c3jN}4#53CO7Y&nb%Dm>hvo$}ZK;|A8A286rqO0-@#>W1s>72eV@Qul9@+E#Ve*F|>v=6Pdc<;{N-_4dj(nS~8ZM^4ve zO_Vfmcn{sHxbFY;-G;ZG*+(c~Ty~GZepqF2WQK*3luN$-^={4kdky+FpFHGlJY~Yj z>z8M?UYmZxBGnLRC(^tPvU5i*2PjLyJHjg>{)u0$XivCi8}fEne0mA zb*&A(XDx~RHkZfvG73zLJ`v}04^gh*bBE-$if^Hx`N#SZTxs%IQ_C(DDMME|sr2UC zCodKxaKAOZB(W4T$m_IQVntV~}FkK;Dg_?X_p&5j1IOwTguQY5i$xN6k zec5iO<^dznh=V*dwroMh9Bzd&`)$pGnnihQ_xpFY8`dsE3d>;Qdd@dRPqeV~r$?=K!^Xyt9 zz2<7tS|fexUuJYx^R2X&xh&4@tTq08rm$`}xA8(=%V^2JDfIdOvZN>ST4z~nX+Du9 z{U^=WbyHMa$p1HpzEyH!p*l`%m!s>b-Z@M56S)&sWy?^XF?K{w#vek4066=l358`GQ{}SNdP%`H=`azx*Rg z|MSm3BJ}z{|Ni$^Kt!Qk{~uH6HoKV0=hGhT)O4k7mDQiSe43lzb$R5fPZpxYq(rfV zp?DAxZ4u9@*eapC{Yc-;rXO9BQu1OlL;#>u!Ansvv6mZpr*d&-58;io>ERugrc@0Q z^&Ax%t2fz=q^9PHnH^L-m@_?%DZ5%TyYtSq#&@x|Sz@x^>FOR2=Y}!ZaZfS`K-{2R zIgdsxUxA{B)48fl(M1qKPn+~%#PV(b9n{TK=)^f62XoWa>0^84O}@UX@2)z$i8*%A z{^+P!h(;bnKmGRB?u)&$*{h!-BHB9S6BgUUuVlzu=tlNF+T93dA{Tqn-{H zi=lsO%H@AYXg@8E1kvsEMUN;dBAs2i_Le@4BFywsx>^aT)juM&Is|a2*7it5>@u&s`=qEh#JN363+o_{ z%V%17s!7W+J96%wJocg@5~MwkyM<>{735}KixTnaa{iU81&f@3lk%>nB1)v21mm)(Q4jxqFT;>-#AV&inZ1hZoS zJ>8Bw9Yh}(-zijR`T#(8@7c}K8X3-ZiUuXHXXL0!$Sn^ zhmE}fu?{?VsAX`emIPY=!&H{!*(0q_0-OJu=3)029enr!zj6|1T-rW!{7z8+Ww<@R zf1nMn-<_}?78`M3<&NS8ZnV2ah}wDI`Mk+Hwg+2o$lP=_+K)ngA5-ex?`nLbZU27t z*67$fUuNRtzEacZsh)+L@VlD^5BVQGnYKE%2UR>yraKtf#zs7=Kbt}Blh}K&QJMYj zaEaxGv*QtO#h)&{IEf0)S&*O?vQRR15ToF@()xSsV;4T{+Pr%)cY0z*b;y!ZZ@pJhV!l78Q<)OMA`D=oxT0^d<+Fd!PPeT`z|$s7 zOQlZ2HlZs~cd@J4<7T|d!lPlLUoBVX+u=p~ALZ z>$tIkqz7}O`cb7lXSQKBadez)sBe;y6UZULL7? zi;92XrGW|&dC^mz<9UaCC%nfNZtJee7Z>OAKlWgD{9EKhViEa7j9 z{d$f-%&E#1L%6}rNiZ$Om_#x+&*?oCWfslC7^A_!6W-Qj!_Q%2ivXI)1MoC&ZTET} z+w!hk-qNQ!T${bxAOnt2Vjf~d-0w2>Vu>OZ$hsA(N;(7~nTZWQT$$JboWj8@HT=f! zRHlp8Z>e1-XELBpz1DtYzW(YR zaX|xZ>uQON3$7(b;$Z8ow(i}FVFiZ6;5s%1w%Z2h*IX>g!7%drJll&jb$Gx(&CORM z>g_Y6bdMPdPRcx_7dhFFOYIi8!6!KcBR9?&w&^V3PPtv@21zK=d0JMp#|LwH2n&%d zJ@gCdXw$y&=&)TVi34j{WI`%>af*l%raV8NP}~Kgb4_d?%(#NmT#@#L3p9uxGe}R* z*Gl)pdcemvp#52*B~;dJ7vq#8=S#GT16f?RZ-+m-QUm??xgr@AjEo@zTfpLKqs1P%cQRN#HMs8=8z8c54r{C30 zm+Mx3ibGX=9h<-MwNC@Wfuqq`w0@E_j(>n-9Jt zl3edapkCFe6@-bWl<+`b7;bob7#G;((-gJbo_1GO4Xd8j1)0Z;O}$#Y2Z<^YaR-Vu zv*=$R-Hu=#9U4M?Wq&Ic&xN-)mXAcMMSp&|8}Ob^U6NNrkr9_glY_tARB(|a;SM*d z_7%%W-A-`iYY>T+db6wbfLPb2T7 zA}7y37yS!d%{zPK*m}GGTN}N_Zk3tKgKgPtjK?-RhOoEEM6nP2+>HyPXPovUtmBhe zC}&iC8sizRIMKKSh^5SJ%8v-CH)4gn3c-P}B$RujHbKeX99s*7FqwA8F=>Fc#2DKA ztg1LC-h`aik!QopMX-UCbULyOz^5^davTX?mXdB&0^Zc^rbTFPzHL z@=CR;0#L^xPRVMD=+~+&kc&%T{RmHUbR-zQN=QkSm*c>yI`uti5S|MojA1mU6>y?A zKx8wQVpV3lO0FGfL@jLih!la0d}Dkvq^9pjaQ0tTcC zXh5nU2Bd=$dKE)20*2lp6zO270wRW{D5#-Iu>?Vys6i3zf>WKg$vk1s|61#L&e`W~ z-|ci2 zNYAWZ4;B}tk~WhDn*m`8)PECpd^=Q&nSdmNRtye)-wk)bqLl)Lia00~E{et=0at7Z zUbhP@GROhO%N2z&Pa@~aaL4v1t7D?J<8j?BWykvfHw>~G!F878&U&qlWB~jm z@W!=J16GX(9kC`PRI^K~QneQ^bn^%>;oLRKBu3Cy6mY^mUw;nmNOiP3*ic2q)YD8R zBZK~~0FbmG?^rJ_5_IdDR|qLA6@wlU6R2Upuex6RB&Y1kJSN$QQrU8sCwc0dTpaaI zL`NX=%8&c>0Ah&=IVn3)2d~mj-@nO~GbR@g!_(vpg{m#`*WH0YLbf z!0seO@{dfhlwKGWFJOm<9B&r49K>1CPb&2RXD~<$XG|>y8At?E2Q#O`1)_44F^cg?f z^K;VsNk~3bflprn{0k8bCF%DxxjG4yBM9Z#)K~O@e9xP;~$zO7hKE z&3u2%JH_!7bFS1D$Wk0Z+ff@fv;b#(y73OcG6naO0!De~>-YT5x7Bw)IGU(G4% z4{uv^xHB=_aQl)Ln<2zZ_;j-T>4qX#jWcKJ@GQ$|KNjW6vI;7zHC;dU)g_sGI*8n8 zK)wc9iGjWmrkib|(1FOaGz7b?*NO<`T7me^0@(cqt(|RiVttluSon6QhNj2L+#wSg zz0n$j%r-0C$;{UR^_|tOr?wG2);{u?7@RNg-GF0V9Nl;D?{PDRv z1z4^e;_yVOPm`tyhiydED@09l{Bszcx z7;y1W!CTe`(?IY@l+b3*Y3U#-Ar?d}Ot6-M)L>TZKoVp_h16oZ{CjjY$ASF}crsD& z45@||ZBl^EE#B}?>Ia0W@cf^+-DWC^z|P)^iffY5s}_=psXTqg4NzZ!MXcdG0oc1Q zBTzQi@!I4{ zyps6s^aMuIn6!&FeuM6;vC}M z?SMWiN_8Yq^^$JatJ#pcBPk;t4`}W~qNwb*| zi!i3c`y|>fj$fpGTE6vpu&C0+WBH#rPPD#Kb0+X$rl2 z$hG}=O&0ahbY!aLu&yVyvw2)l8<32JI=^D}BFc@|DZyfsWnBh9nF zBz@|-`)Sv64R;XOM`ZoH4#lt^tzC+FX1o~On~k=@mlSr&rq5QEyot^l1Ja%KYrC@ZlUWrY6m7tj(x7Kx@4Ag_sVHr-CBeO zM)Q$R-FUjvJ^8x_*+!AMxR00uTI5{VVNhdrLhBMg1^M~sIxpDB!)z^mY8!QE|KBIU zSZ15rM@$|D`fYCN=JAQGCe15>$o&m31?Et?6fh&o`P}{0!DbyOJ+I)*hF~N7cE{?c zq17ZPu^faL(jGa6V^eAHM|rOf)DVoG!uljP_w}G`S&srzmX8;Tr+^S08jAd2Q`%l6 zNFY`$+1`ZDRE(Jl9-tv^w{IQbTsLS?1!C{qx=7ZHLhxS_ueBh$bkUsCGjroY+_~M{ zKO5$rK*AakQS_1O!-9^hf_FDjtF>E~cHc6j-}N4T*MIumwUl>*4exH=emDH=-EF=U z@P8rW$og*+$Ny+J{);h34O(!*&i^_%;=4F>c~8Kx7jqsudA@hgzQIAuDV=2M9cK<* z&gnkOF>d@T+9>KyDCmvi5arT=e^~NAdz=6IH8?5efBhOIGofW;(R(17BkG+=9$OV7y6 z%FfBn%P%M_DyEf`mX%+qsI024sjaJTxJYkoYHn$5yVTy%dAaLK_f`9Tc+kk_NXSbF8_kWwtLQqp z#>Ot}TnckHRC)Fi1UFuwU#{=Ylt`fLj&iGoZm6umEc3b0$S;M4#2(3seBp`U;i;0B zOtf5EhMU#rxdv?`3myyx@HH<+Lw^3MuxH*YV23$NR(VfU8!4mof&Fb`j@rvU4 zg6;Blbyw?@wVf7{2teHLlPt7kWob1*i$RmPi1aZkKYn%f1F9X-W*uzOE>=-;t_1&xT{p58{Br2H+#ra zC@!p(b$=#>?=N8IW&g)I0<&`4Z1Uk<_pWK@OAk`Q)@v^wKNuA}D2UCVK&73FkwMmQ zp|k$xOOloi@Ss}9p&J{L0pGC!Y1)5v^qO=1szTC;i^c=eN!sv*lAHriVYrwlDgii8 zM|(jg%*ZjGONunENOD8(>fk*JoRsJZJLnu|+pwofo*pk3cA1$4&2&wZlS`UeWQ+8# zC#x=;&qUz@Kb}FgMp5Qm7VVHEZ^^Q{eikudGb!HR1FALntWH+Eea`XhZKRja@CWVr z<1YmXkj$Wf(FyKz*l(}05#5$eStJ$l;37WV_`nvI)cNuT^(-6}<|&kj7I#Q&_rCbq zUZ?&{QA)g9opniqs^$I_QKd>j>xi~?+7}j)Di$leugJ+g_RZzSkw35jPyTY@DCugf97yUvg@(esVfz z%USHz4erg!1L>C6ZZ;n2GvCe{&MN?qQn_}^#I9%WVy!yP)pY79Hi$-ude{c%&VOJi z*umCdCkRP7;us7=Jy7I1l}!)$DCur(-L2d9fK6*Qh1q8AfSH@-vyZ z6mSo+7DmI5ZuMMbzX-t5Se*(*!Z~Gfj>__f748O?{MK7HHt_%)RxeeOol?qc@Evp1*y{CEz+qo(F7tsNA)@mc(S zn{3tX`c~;6yE*CQPgSE=mt%c`ok}t+`9!BoER4QiNUqSU--2ZuPWOq}ZVUE&0SGCx zv(h>GPD6qbm*p1To)FiN75%wW?D0wBqQ{g|r=Hl=jK7b{+z3?`uIOD`Fn zGUB~;#rJaOye%WhSp4S$ll*yG2^?$UDBUFaE)C)}jy&2%EIxmRyScW;$GlinGl@-W zdRlbJY!gjHL=iHi*65iTlD^!61h?!hG?jN8Rrl@sSTW~U)nua^Q$d})ATI))P_78He+Eq{^H zc;$Mu@_ldQ3sbHVahC^$zdxkk?57jqKl}Agj{}CU)1|Hv;1cCjP>f)K;9-cJZRiW# z9ecPG>v;V}NkmSbE&rEt9Twn5iuWBc70sYS1#Ia6PT4{@O?m7dyR^2~g!>pyRkC2G zOVJGX(&i6^KBc#tikPGaZ?(5~p;E7j1}HM1nUdq6s`~Z(QW@{WuGxs%#I(ol9ky`mbX*^>%Uk_V4DD{{C||EM>u|V$?mDpG!c-QwEK(2Becqvc>Mb zPrYIkfDm~%{i9^sa(dn>TxRMa41K~6K)MhHtmH3@7ce_ zkC706m_45l7Yy~at?$V5Ey7_X-W&vlP>o!{ua8Pd$5I1#U%+_Vg#w4(x!tbNJa6q5 z9F|lw^`6Tmv?D4wSPX#dO1uWR&tS|XJV|`NzK!zwfDd>Qst?GQZZmw$*LD_5jo43Z z`hE-fJ2`i>dcVm6Rf0^g3>t!KVgxQ|GIn73t|Gt2Jhg`*iq9}_0us??0O(_D}SFwMwYLpzf$Vjl9Th+RKEG;s7an><+6JU!rnxb zWC6y|)fW>TpUN4Z%9ql{pBmY?9R3VtyzlBCY9U8YMRcO$}i?>2dD;*RlyInn~E&c zv&|M_B`em<&v-zL2KbilcyraTOl?h5HD?N+n(W_aka1_f{hKH2i)j*Xn{teZCi?=} z&;z5S)Cl~86y;}nRkk;AT|Dw?adJyqN5YO>C+@HB`^LvCqi5=}*B`)yTF6itXV%PFTmuwfR4k55nn7UNiq`yrjxT*+eO5x!^dGS?cDu!w!xbMf9b zJ2e8EHmBC@gvsDmhzU;|-chD&J?o&O2}*GaIPMrD_C>k2dg3MKtS~JV%b+988KdIM z_-_^)yC4dSUekEbj=g{T+>nj@NmvLiBgpjyZz#)zmq@W0Oy*xX`cU^zT_F_&bpz%+ zkk;10og0ean6;-&_39VB#d@Vvq|&MAejxkAGRSSpDHZBY#PUhRzVpI2?*o#mRGjwi)FlsL1sL#2V3O$j+2YQpQkda{|_#rw(fdb;_0N~BX zrUM^EKmh{e9ocCp3+}azh;KzF5MVD^fJzy+9gFe^tFhH{K<|a$-ChCQE(5xz$IT&f zU*ce9bSNiK%C`tTM1fh7;4Z}TUaZhqQu;+q43Z3})42@+kUK^;vtR!fQs~zl_aYtX zS(TB@%~Y@HrRVf^Cio%x#d4L~M&+`yAFZuiD`t z1pum%uTk@sSkD0NAcFQu8O77{ImuCgEG8|z3Kh-SkHrE;(cF$iCGidA_>+3!3V=Rm zZ0$8F8V~)6!LkCm5qCx8n@O+c^&#wx*6%32HuaZm5b4MrP4t!-i+G&n$w-54JLVTq zd_h1;06<)0Au{CR6k_*zX&L^G1?0#D#dzdxQS7b|C9R)oo!d&%wBMhH!$=bl%db(s zZ15#r{i+|gHRaR?UHsO34rx8~O%=+Mo&SmjoN(p7{eq~_>)Gj;c7#@3L_XCW4=9qk zLwW@uH%zooY6$h@p{7x;B#$=*XWY%(Z~9+ zMD%u%(lp8v0KegICq%ddPz41+!Z~nx2$`rejWQ;H4-rCtE^#?+l}V3<{M0$4=2D)| z4)pQIw*1NUB2GzlT%tD9uM7@xoJOfKBqbwqdKgG9D&Up5PhE!(L)3kPN~4h==PS&D z#JEF$*q?~&2(22$tdu z06}I!YrL`$xq(JR5(#E6XyL&>>e@LLSq0JEZE#3GC!AqFDTcAc^H=v{Gv~>C*398fY0U zXuYojpZhMW(J~6AIt?hjMQN!z3I$bNC08cHiEl2|4m(so-v;`%(frj1aP;PGCgfJG zRc0(UVS4`ynM@?>Vi^PZ_^9|#Z*DZK2gL26sn*$Y68`wMw%LkTK&vK`q~I zQ$OUaoeVPYJG{XtDqt6X&QwwZT;*5KBTkj zU8$39%64>Zj>Ib>2z>?Qjpr$ehR3UcnHH$M;r|q30*1A*{kjfgXqoK>-SEo`o<0nmXdK>h^r*td0gU@_4YH z6cI5*hyU0(zF!64B16K-JvTXq<83g16#J77w!Ga%yJHIdxM4x(xMK+^LywOSmjEPs z|7`}sfdJuQ@F%^-0)TzXc1OlQr2hA0C47i_n&>k)ABlFcg)P54djZ2RA7&u6 z*?CGChh<1fI085?Gwkfdw4lSR=&&K@j4zhw-N_kYl#C!IA_(Bc2O&k0(r1{6Fm|#l z1x_MERWXo|E#sGw!nLVT>~1U<0vTx71BSojKE?E4W564m>AFma*MhnT01=~s;&hN> z0XpPzLWKs=VesiN#`V|6^@lmXWrEX?QX(aZVL&WC)$f;zn&6SJ5s zgb+#kp*NsJ$~d-+JV!?u0gUr9PTD6^8h#JmaR~`s*H?E4uG!==o9p`6Bj78?b7fiI zM<~aLiP+V-Sv>gN`}!Y}HIm2bgziNpk;F-OtHBStyVND)@hK8SF^WH1FzcX3#T2Epna!xWh^?C&;k2(M4PlUl!u5fbJ zbRJfm@nCctfp+5KXZ3MBM~*-fvl+kupvd+jr5?nC0uz;~6D~=n_o5Vt5Earc#C{m6 zM~9j+Z{b!8sFt=ObHihF$Q_3WG#TQWjKXC?$1)Fpa)BJqfx;y-Oq5~A=r9+|DsNcE zv)K{Rq?==y%=KO=bqRiNCb(4M4-8{2pbvSb z5g-6)gXec--o=$bEJ^3X2_vT%aC183gzV8`+sE&y(77wY;4O?b6|}OKZ_>XqPm0mk z1eMq;Co!w$_yh@|>t9OdxB!8ar;tN*m{;ZFyOaf_jdKR}*$C#8D3VW(4$);n4arb> z(&!92;&nFOb$Id+1^!$@@JN31SksO1Q*vovr^MnxG5Q2_*EvK-gbW2hEQLceVXl~! z1ww7yA=!6WKnqyh0U*J0aidB7s<6lIm4w|Ss8|ZmVdA3`jz(zG@;uer&$D~U$ZTJe z*GS`WGzFB!!0f22%x#1{4M?0)4O?F~ooj!^l^^2mKJ#)~QxjAt!Y>tY#}dU-P*eyB z`udcB0HJ%(G05$uHRaXp6&vwtLr{eQUFhPrrh`^OXI?P?*kRtQg~C6}EiSw@*&MT; zdATTZc0~HCrbUXA}3c?V;Do8{I#=2yVBKV<> zqdKDRbUtkcK73imubcYXhz|E;zba%PPP3rWGyq1J_Z>A&mdR;~L>i0v-$9?uk)M0Y zXLLuB2*u*?1c(wPj_ArXCPP)|AP=+K*M^?Dn24k?g0%FDpB-pvGafDTQNLnytnhQ_ zUDbz)5dskrm@+}jjl}6&YdmFxFt)0qQ-}G2SFP>)^DPT^)~8oroIPjtHn{*7`phvm z_{e3|1Kz}Eo=1Xqq|aui?0(5B`STUhIN+1SlC7bX)?E_^4eK_qtjWIgb_5Tho9$#8 zzU8D9_g=mJe#qB%5HpSQ-uk#3J{wVn#2JD&@p7cVJo>~zJKk@b*S9+tKS&?Y2>k*^26^j9WHe zGrHbv6Ez3={4 zBg9V#MbwBsNje|KdyCW6H<46Rc*V< zhWxJ6^c4mWRb^)R;$QnGjsjqR%N4^djTdI#uS0le2YTI%eRnig%E}+k$$|nYlE(QJ z8%1ba54#YqS(lrGV_82U^@LnptZP0Cy_^ww)N9UTyKJ4WA8{SW%Q6sJdi}|zV!U7_ z(t!BvgkRC(u2ATc1+g?txM1z!TQj_9=(^F>cePG343B~)yU+POS1hImfuw#qd|-RM zZ7qjD#hpI*;HTP5NOno@N3v)W&qujN$O%vQ&_tOceB z_kQge<$O~T8A6Qv|0y=B!8PfR>~}!Rp6>(W~B%mi#OwC4O(K;me)~L9bB)i42Q~uFJKXTyf?omCyWsqp z{n$~lX0C5e!S*-{B604wl|o*4&|DfUYjALd%*8iYlD|$RjtY7^<_27FS*1bpMQ(Q# zoU`-iV){b_`pM=JC)=h2YtAi?z=d@e2%|6_zj&hlfF{8Nq4b^t7e4!bC9t(3uQXet z=30-%rEsPDp7`{u`)(5tt1xx!RZ zf&axOBd1FccvYVxwF&CcJJWagKd$wEk34riI zXFBb<*8BFl1beRaEBI7MB^SPIwst5&C)K9 z?MZDI(-*HSlwW;H<6MXKq&AQ023BhapEq1(7wD!a8f7_F;&;B#)_;6)<&t=1@6YRNc79Oxi z=Qbu5K8*fzO?t35@Az?M@yp2axAE1V6Kh{)pZ)yDzRqbBaBfN*m(6ERqu>Gi!@u_R zwe_zHFMlp@L^l6@U;6Jz{r|B)aJmF1{TDhFQ&xao2aayliOkyJX3QL?d9!q1Uc@fiT2tUd{(i8b*H& zRXQ6l_f%XKg<`+E-s?Y`jt--ZD3V@2#E7ZO$QW$Dnr}bw$5X1@31t?8n`_2&1n{2q zwcpYmdO``g1ryh9#7RU~3bvm7_2IrpoY$rwI&@p6bI{3BUmFH={SJ$J#rkXaqd(ra zrxT+@8ca5T>4Qhv=cAd>d5=QH*Q$vEC~D4JO$A5QJOUa7FjNd z3u92wLD{QBj_0T3+2IuEvqskSwku4LCBJQ0JR(YY$qy3y{X_)OhVvAk|#%X$`-r z6b&`QXB}PJ)kBF=`Tly5gT43wf;BR_Es2Hx;h+prQb za0HKqHQACFBRZ2dR|h}a1?@y_%9MBW%eGTcVI{!&hv5tM5-%qImLXQmrsk3nrip&w z7)16rD1l-%)qOs{laR27feeXn?D!%e zi*wAC(x(!IVJDNm!C;Apb0QYEA#VoU^aZ|53K7DHi@Tt)b`}Z}#s48-&6RuCkL};H z(=K~r85rf|!{e2F)1%)-O+J1wr1~QHfBIEU+XD>2*`Tlf zr{x-$I0HujBAjfCP4#XVZ?(uzJ+YtClNmbvYLb^kgz&}3kE*+sdMaeYmAr})-knXK zO7KFFXyYP9b&uWS5J@j0pSd$WKLu{TyV$rXp%4Q{YQX=kqQ4} z8x))mNX=rneN|EP=bW?YG9h^Z& zd(mL^f|2PQbtKZXIvs91uLHaJSxsB}g`&atTQGe*(qRg!Ala)6y+>5mB0rIVqWhg^ zN?q9rULnJ=RpV-#G9Ebqr`98=B+L$iRe6Lj3)+;Q;YpF8r+SF5(B26#L81y=!T#vI ziU`(;j4mEHnG**r`Ye;O`<)4hV~j5Hynwd!w)E2%9&C)9IgO*H;)a!_HHEb|t9 z-QMuW*7PQ#?`!}r>1xaKCS^vdLeL0b`Jj^JBBOGD7fGo!@&PH`T@ZrN`T8fIrqt{HH}*m^7iN)+ca!qJXE-XoQ@%pAz5!P z2VXn70@o))Wu`_1*0!^(!@kPr;q$rFdT@BzgZbHA7*G^Qe~{!SSVl9$e_7-cg;(l(kVEBvt)_&zPu5ae0MvNW z+)#~_eKDq4&(Ba?F^4Wm$bvqZR>a8mduYDpP5Fvx4c_XY9n){FK*(kb{Ns=$qOe~}6-PM!K-3R=t9VBZNM!5S7?l9y z!6#{ke`!ezFsNq?Td>^Q;#slJqR;<*7kK?Ua^i#=)?A(r5V)C({*jZ#OU3UUVl$vz z7~QSZquno@zgW;I`a&40|jxglnDE8ou)<>VKC+;6~kAuNfM ziAp2$v7rTmqkjG-RPfthr6Md>Ur|zGwPX(nef^3p`eqF6x|<86EW(yOzRZG2Yx~2| zlNIkOawHF7@C=;c+Nb{4&tjQf9bO0BLhnrp9wKoXR8xxAu7z}&0y~TQPizCbHsZ^5Se_19;nw)F%PB=J+T%M1^(E{gPlKruO3o%+uhD&Wb zqBS-|TNCxVStlhh?O5-5eUUK!L2N!N%5Nu*nw5le0K41dFHm3sGNOZzv729YrX#(z z8|`%3Yy+^MWtD6JUBRD2ahI@V3kJr~xa>GJUJI&z)xN+{_dl?(l1o^Hc>_~snsy^9 zsM4S{HWe+4R3gL&*aKd#u}Sn30Wv^QByP8fYJuwolFRnl`p6&ujwMk-Yb$XQzX9W5-8P1LI#oooI~?O2KZ@$S}1`Sni4lLR1dVz+z_c#5~(La`#y`HDG|~oXmbocO(sJx z^`yA46(A^5Pk|~1$SV8994F&)56HR4G7Uq11N}Qbd*0%7T9j%EHO}F0!z0BWT+l4#g5m zNEd0fcl{ivtwu$DpA(Q?J})OM_*T2LI$lhk02j!@IIg1`@aR$^I+5mimIu#cGeAMAh(>d5h`())B^XZgJz#H;nOR~M5nOK2*r5sPuwcJ)_af?lqoH^bC`5JO zWpPfYqKH+8y53xM43dWnr^5(J8G(qH<#axZIiI7=%K&^peG~KI=bWboV|>sa3H=Uy zb{1?U!gH$6t;=Ew+1p#m7sbIL_-hm5S5yw1@Hq=mLL)&Itvh> z37Cd92I7{|KAv(wkOeWI!oo4AbvIlq9Z{(Xm=S4~Chc?fpgp4wmRj3z(-y@5!oEUo zy@j9MMhyuH9%h0o^S}dlK_L+u3=eV3!RXR175&NaMj1(LLv$(7<9K-3HX;{OZEV6d zo+yT-v=qn??I6luuVE4{m>3gL5{&w;_^m8 zc}w}6MmXdU&=<0x(cQfVe~hYr9VHd1jb=dztjq39_*yG6jnd0lhqnLp0Ew`r0IAFA zK(2Uo8Uvw*k^b-&5Zt~dh-u;spz6|~$La9!?S_$`xM(`0;To`h%-|_RA4-QoZ7|zT zwRe`AQI{D$KQAkD3#JlbVL4*r3^jDAe?UHfqd+N-(G5&=DIFR3vtuXq?EETFI|ozX z?m3`&V>(qWuT0i~awxL|(A$RjxqF>50a;kncM0O(7lGQxUY-&-G6V9*oD_mpY}kYj z+z!()<=Eh%+Pg%E1QYnsf2%HXNRSNGXCmAclJ{Y`5@=FobGLls70NCo`Dm&^21+Jo z+^?BIjY(H)8P^4|T!k$7ezrxRvpgTu^_Z3eZBb%p|D7vePF{YT{ORZ5*sGhc5p)6N zq8F(9reMFl37VO#wBdk8EQ#Y3h$>(BHHp3nU)pE-iK(=h|VCS8xvXB5yHJ!hT^0GoNU z$n}9z$>9pgD;I*Tc>Hc|l-7(FVDi`+cYn`*>~C94607P(Oo`uz+M~sT!cYbGm((Ur z1f>&uAldKkqh*lFj9HH|W|Qp!asPG``G@cr`Ksv$yge{+(*5b-5zZ^D;LQw>2^fq% z#K>^OnljvNcPA1736>_86qdVJy7a9BDa{&M3MMcsg`}`~%zcj~kK!ScVq_NbspKPJ zbtn(%hF9EpmI8oafH6d-S~7Nd=b?gB3UVN$^AOaaZeD5*uFM$bSJyBf4O%c+kSjsD z(ZE0E=8=85$C*gGLV-epcxmcgx+Dcg2d|{gyK&k96sS01UwOoIGUy6rh=mar{QnZ5 z(UHye{UN;bRamL?5$W-KXe_BSs-Ck*j|^u)_hTU9>5cNIk(}|9|}`dq6XAZ$EO6 zX`a1owKpO8U)gmI){O4|AFLVMc{2X8bK)gW&VJ+`*1YME!bz~-+!J-Dbb3>-dvKU0 zN72mznmOI!=>y)GH+^!419JL9@`v{n-NoGr9H3b=MEQ3-vb66UhiOtrod4UBk~i*K zIPL#m;r25eOLqn9Y}r^;#Y{9O-(EeQT*twhk2qL!Z$h$pC56K@D+g0+hBNA}r_MZ0|O!rqYN zY|WL&W!A;h4SSt^dkV_9i4BH4QGd-dt-L zdep_yqWs6t%|V%4ts@TyM;{N2ul3zs8Jb?bHS)f7bmQ_K!Q8$){kePMMIR>yKf5us z=R|qE=S1N^OpcR#Pssgb?BUAP-2Xt#$Nzzt@5c8a=BtN`Z>Lv2+dGnSY(!Pv3DSB>&0Ae`T?MKlm>*%G!&6I3`DqviW1>|Dw$QFS_M0&HvpKk{7K` z^|rKk%v)AyN!8aJoUhZii5?zglTFfKFcc5Qh8+q)iV)YfQxSHKos<)*k$q-}bSM;o znv%E{_WTZcZ1X;+WA7%WzxXA0HvXlYp1xX=l;q%9f2Q}HfWw7dEx;(rA-N$rCX^dyr0i1}1yFjibxr<*RCF~hGT4>dXS>T8S= zIr52vMu6kb4PnGI4?r;+jHz z)n6lWwEZ2RFokPv#4Pfu*cXuTh(L0Za)2%sR2PKE+1i-_&ywJ})s30r-zHwho*Y%& z`x+4Ecg(wL`(okrU!tu=j;1RwvyhvwtKp}@5(MO32ya^IqGxi~@)F)Kvuove9ZbL& zcVTj-gHKRu}{ytUd&W%q)>)a5FeyWtjN;xF;8I7kbSbF{d8jtLfS zqsPEjgqlRPN~F?(dLfOsR0ZA+lW~{eg2;`1s_oefW@UE{{+h_2Isn2)E!x`8$G)U1 zrP2|gj6A-!>BRJtHVSK88K_m15!eUIl{g^E5aCLr=5XFoJ|>3Kb3*p3O&)}*v_G=v zBaeunMn*CMAg-9ugv$3Gs#o8fK2$rrI(@IRxK%^k6A~?2J}t0Ml4vwy`x|jK( ze)m~N&5GW<2tq^GHNl+tl~~jtkqXKg%~3(bHmN~Lb*V#-VKo%X7`k;cNq0Ell@d$h zm?WDM5841m(&o$|W^>)A_&kLcet^ANo0!qchkHUn|b-zI%w!TF> z5$DGOzLi}UnHrUFes4G`2-ztyIo+gpZCW(zgYk!t8$qz4R**tyGs3M`r_k67_M3I_qkz_~xNbx!@8L&p$(vbU4~zD4$JrU# zaW67a8DEqlDG8iETuv)Jp~N*{e2w?XR=rkl&>5vF)6Xa^I82lZr?`1CM=Q(>O{a?& zjtcPv3%9@|+3?`_4AW<{)T=yN%2@3JZ@Yyljiyfyw(@dpOdC{HqlI4{WhWPDA!t|h zS?iH%E8t{yl-HssQL?~9Drpe&`;|X$zhs^)dT>Vk+JRt|&U*03QawzKiVmSzDI-bn zU9gq+z=mAev6b0FF^JT8v)Y(ZpHu}&i0qju8;qifps>4I>D=z9;MEkNTbN0f?eDr4 zI)XwKZf`8aaGp*r4613H4!)45J`0z>;&dt~3S!*6Rh2Mlc$LgKikYT$SvBFz(sEKcCn=fgE!aZ^8Or6y@n9_K(JPzz4o%5d5tQv}CeJ3(HjmAu zm2z`QY7s4yxSY%-j$g8$)jpYVr4ZgUGKG^RQH4?F2rMgPGw-KC;ak3J4FN?E@1aWy_8xTtMuysh3GP5v%#J{)N6{=-kuiY@E;rsc8{WU&P66lgov z3n+w{^az1w=(OgXi`$Kvk};2tO^6vQ2lUr$-rFsJ#%`|^JNlp!B93as^ukbGZFN

    k)ha`P{Bw6BPV0J;N);O)RM*dL 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 diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/black-and-white.gif b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/black-and-white.gif deleted file mode 100644 index 745fd253848183ad3254283f69fb57fe23c5eebb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44 pcmZ?wbhEHbWMp7rXkY+=|Ns9h{$v3&bwDIYhJlHhMTnKb8UV%q2Gsxn diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/colors.gif b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/colors.gif deleted file mode 100644 index d6e00226bfbbc3263be88290c29607022974faeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95 zcmZ?wbhEHb6kuRv*v!BX8u}jyRxzv!{SRU?tXdTs8p^-` - - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/diagnostics/analyzer/nounique/consumer.xml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/diagnostics/analyzer/nounique/consumer.xml deleted file mode 100644 index cf74f72245c..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/diagnostics/analyzer/nounique/consumer.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/diagnostics/analyzer/nounique/producer.xml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/diagnostics/analyzer/nounique/producer.xml deleted file mode 100644 index f1f3de4abb6..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/diagnostics/analyzer/nounique/producer.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/anchors.yml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/anchors.yml deleted file mode 100644 index 302131220c7..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/anchors.yml +++ /dev/null @@ -1,6 +0,0 @@ -some: - path: &anchor - config: - key: value - anotherpath: - <<: *anchor diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/existing-non-multi-document.properties b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/existing-non-multi-document.properties deleted file mode 100644 index faab368e372..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/existing-non-multi-document.properties +++ /dev/null @@ -1,32 +0,0 @@ -#--- -# Test -#--- - -spring=boot - -#--- -# Test - -boot=bar - - -# Test -#--- - -bar=ok - -!--- -! Test -!--- - -ok=well - -!--- -! Test - -well=hello - -! Test -!--- - -hello=world diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/multi-document-properties-2.properties b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/multi-document-properties-2.properties deleted file mode 100644 index 5f49e461d1c..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/multi-document-properties-2.properties +++ /dev/null @@ -1,10 +0,0 @@ -#--- -#test -blah=hello world -bar=baz -hello=world -#--- -foo=bar -bling=biz -#comment1 -#comment2 \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/multi-document-properties-empty.properties b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/multi-document-properties-empty.properties deleted file mode 100644 index 4605cdfbe6c..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/multi-document-properties-empty.properties +++ /dev/null @@ -1,12 +0,0 @@ - -#--- -#test -blah=hello world -bar=baz -hello=world -#--- -#--- -foo=bar -bling=biz -#comment1 -#comment2 \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/multi-document-properties.properties b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/multi-document-properties.properties deleted file mode 100644 index 9f2d4f84ee0..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/multi-document-properties.properties +++ /dev/null @@ -1,10 +0,0 @@ -#test -blah=hello world -bar=baz -hello=world -#--- -foo=bar -bling=biz -#comment1 -#comment2 -#--- \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/recursive.yml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/recursive.yml deleted file mode 100644 index 3d4ca7d1826..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/recursive.yml +++ /dev/null @@ -1,7 +0,0 @@ -&def1 -*def1: a -test: - a: - spring: 'a' - b: - boot: 'b' diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-empty-yaml.yml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-empty-yaml.yml deleted file mode 100644 index 783019e7618..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-empty-yaml.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- ---- - ---- ---- \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-properties-malformed-unicode.properties b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-properties-malformed-unicode.properties deleted file mode 100644 index 8a9e5922993..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-properties-malformed-unicode.properties +++ /dev/null @@ -1 +0,0 @@ -test-malformed-unicode=properties\u(026test diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-xml.xml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-xml.xml deleted file mode 100644 index 5d3350e81fb..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-xml.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - xml - diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-yaml.yml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-yaml.yml deleted file mode 100644 index 61c902e2bec..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-yaml.yml +++ /dev/null @@ -1,38 +0,0 @@ -# https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html - -name: Martin D'vloper -job: Developer -skill: Elite -employed: True -foods: - - Apple - - Orange - - Strawberry - - Mango -languages: - perl: Elite - python: Elite - pascal: Lame -education: | - 4 GCSEs - 3 A-Levels - BSc in the Internet of Things -example: - foo: - - name: springboot - url: https://springboot.example.com/ - bar: - - bar1: baz - - bar2: bling -empty: "" -null-value: null -emptylist: [] -emptymap: {} ---- - -spring: - profiles: development -name: Test Name - ---- - diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/foobar.txt b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/foobar.txt deleted file mode 100644 index 67d8e4dbe09..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/foobar.txt +++ /dev/null @@ -1 +0,0 @@ -Foo Bar \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/gradient.gif b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/gradient.gif deleted file mode 100644 index 607269f21f9bf8b6a183eaf414956c60594e0e47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 817 zcmV-11J3+MNk%w1VF~~N0QUd@000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= v{r&#_{{R2~A^8LV00000EC2ui015yB000OM00GQsVg^vAS) rx%s+}KiTxN$8YuZH`{*m_Md+KW!K-n^RK`E+4rAcLZc##fx#L8a|1|T diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/log4j2/multi-profile-names.xml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/log4j2/multi-profile-names.xml deleted file mode 100644 index 535f4a7ae24..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/log4j2/multi-profile-names.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/log4j2/production-profile.xml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/log4j2/production-profile.xml deleted file mode 100644 index f0c3309f875..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/log4j2/production-profile.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/log4j2/profile-expression.xml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/log4j2/profile-expression.xml deleted file mode 100644 index 25d07059818..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/log4j2/profile-expression.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/include-with-profile.xml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/include-with-profile.xml deleted file mode 100644 index 231de8f580a..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/include-with-profile.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/include-with-property.xml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/include-with-property.xml deleted file mode 100644 index 74f08edcb49..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/include-with-property.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/multi-profile-names.xml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/multi-profile-names.xml deleted file mode 100644 index 4f785c163a0..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/multi-profile-names.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/nested.xml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/nested.xml deleted file mode 100644 index 247229cc005..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/nested.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/production-profile.xml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/production-profile.xml deleted file mode 100644 index bb3c8aae3cb..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/production-profile.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/profile-expression.xml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/profile-expression.xml deleted file mode 100644 index c11d7f9f659..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/profile-expression.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/profile-in-include.xml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/profile-in-include.xml deleted file mode 100644 index a03c5d92688..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/profile-in-include.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/property-default-value.xml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/property-default-value.xml deleted file mode 100644 index 5fcf44025c4..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/property-default-value.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/property-in-if.xml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/property-in-if.xml deleted file mode 100644 index 92bb19cd9e7..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/property-in-if.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/property-in-include.xml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/property-in-include.xml deleted file mode 100644 index f367385c99e..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/property-in-include.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/property.xml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/property.xml deleted file mode 100644 index a574d13df7b..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/logging/logback/property.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/test-cert.pem b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/rsocket/netty/test-cert.pem similarity index 100% rename from spring-boot-project/spring-boot/src/test/resources/test-cert.pem rename to spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/rsocket/netty/test-cert.pem diff --git a/spring-boot-project/spring-boot/src/test/resources/test-key.pem b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/rsocket/netty/test-key.pem similarity index 100% rename from spring-boot-project/spring-boot/src/test/resources/test-key.pem rename to spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/rsocket/netty/test-key.pem diff --git a/spring-boot-project/spring-boot/src/test/resources/test.jks b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/rsocket/netty/test.jks similarity index 100% rename from spring-boot-project/spring-boot/src/test/resources/test.jks rename to spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/rsocket/netty/test.jks diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/sample-beans.groovy b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/sample-beans.groovy deleted file mode 100644 index c867cc14b30..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/sample-beans.groovy +++ /dev/null @@ -1,5 +0,0 @@ -import org.springframework.boot.sampleconfig.MyComponent; - -beans { - myGroovyComponent(MyComponent) {} -} \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/sample-beans.xml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/sample-beans.xml deleted file mode 100644 index f66853848fe..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/sample-beans.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/sample-namespace.groovy b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/sample-namespace.groovy deleted file mode 100644 index 5404d2f80ca..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/sample-namespace.groovy +++ /dev/null @@ -1,7 +0,0 @@ -import org.springframework.boot.sampleconfig.MyComponent; - -beans { - xmlns([ctx:'http://www.springframework.org/schema/context']) - ctx.'component-scan'('base-package':'nonexistent') - myGroovyComponent(MyComponent) {} -} \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/jks/test.jks b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/jks/test.jks new file mode 100644 index 0000000000000000000000000000000000000000..74279d80fbac881c51e7a0fadebd9832e904240d GIT binary patch literal 6536 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 literal 0 HcmV?d00001 diff --git a/spring-boot-project/spring-boot/src/test/resources/test.p12 b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/jks/test.p12 similarity index 100% rename from spring-boot-project/spring-boot/src/test/resources/test.p12 rename to spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/jks/test.p12 diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/dsa.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/dsa.key new file mode 100644 index 00000000000..93a9ee56e4f --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/dsa.key @@ -0,0 +1,21 @@ +-----BEGIN PRIVATE KEY----- +MIIDXQIBADCCAzYGByqGSM44BAEwggMpAoIBgQC1d6MOqEDLxjfjz1v7Vg44bBBX +VOoNdWhvJPl9NL2Js57UmYGrTqFit2VCLxbS5FVLyOZ25S0myQRsEtKyi4V9+ELI +0q3oQplm+l3tZqKjtO69ZlbzYSl9IG1254/FCwBnBTuN7Vl6A2vryIhY7cL4E053 +Yy0xqfP7swPgMYNBqjc9c53hNHKiseQJ8Q2wFKZqm13xgqnBqmWbm7yNmzKJbjMW +Zt3/WpJdjqfRnjSljFOkYPPBkGRUIKHcZ9fw4odVov2vblGzXwR+sFeE3lcF50WN +uppjszMXlqR4y937CUSFbCabatRHEcPTq/FxioERCrCdx3AKOfwAquahtvWb9V7A +47FlibDDeybh5jCH0j9HSjhjSiDZdadSgGKFynPNlVAlOETZKGqkeqAZZ+dsPkVO +n8tx+VXZJF00YSe1HLKJUWXaT1tEGF6vw/dXhhQVir4j63fN2tZdhTOW1ao/J/iT +VYEQQjYeMKKuZQveBKRBlpAjhmjOztbE8VL4O/cCHQCxPXlCpORbfOMEEGU0hbEE +HsxFHMXHCnURCJxVAoIBgQCBqsk+z57UndC1Ut6u19wILXs7UBgLo0ivId2QHtm5 +kY77P9/lNOyCIQkBnULbJ36lHm6yxLZ8imyC5Lc7wlFJpJ6PpiTJ3nPi3fzhbftB +2KCJVSwB3XfkjvyyS8bfwwqyrmce9el+AIFJuWPrFSkjNthq7U5vU5a+uNT9XZrs +EaDbjkjVJXRX1oDS3IfWXWpb9i/LOE9HU+NfDKfydasWASvwNX1F5BKXD0AH9adj +9Q7b0p4DVTh+UPWLBk9/e6gsA5HaRI1urAMNxs5Xnmd8UYF1I+AmjQ9Mi63Pa0YW +QjpdH2hoOQGLemQ/72woFVzLaHWBcTuSwjREilaAA5M8CWq4rpuA79MrcHgzSp2C +W1gtZa2/3SymcJ7Py2PHbncod8gR9dxHWVO07ccOXUG0iL9m4MzQ27uVvTh8Nrma +M+JET778E2FaAkAIT34eNMC6Yk2IDrxU9L66FFx3+3n0cOeWaJxIWrIQ6uWk+uIH +VzPsZAQU/V0/QBABlHuSj1cEHgIcYTbB5VrbIgust0jVvQCnlF4b1V0qz2iDJt6o +sA== +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/file.txt b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/file.txt new file mode 100644 index 00000000000..cd13893fe1e --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/file.txt @@ -0,0 +1 @@ +Text file to test parsing failures with invalid input diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs1/dsa.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs1/dsa.key new file mode 100644 index 00000000000..a30fec06f82 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs1/dsa.key @@ -0,0 +1,12 @@ +-----BEGIN DSA PRIVATE KEY----- +MIIBuwIBAAKBgQCDX+Ux7y7dkfCnQgRIXzAlFrG8uPxwFdC8J4FJNrAurnjL//PV +8LEHBDVbyPjHaoNbH8Pfc2pJnOzndWZVf0nqBd4Q/Tz9w/pJ9g6E8HOh+rzU3eK5 +mF0rezcMbJsot2Vdx6XrTztDKi2GY0etKNV399DYtepIYA6v5ovuYAOjLwIVAPyb +9zR+UjyCkBwESDm9dpzKsGp1AoGAS2vtTiO7/MT8cJwo4mxYtiJnV5R2mk1JJOTe +4AFPgmnce/YbBzU2JwL9J9HGewDkmxudW0zoxZVeNw4dRua6oB5STV8XciW8vSo6 +mdDBJFoBW9/DUscRP4j2aRfkXGlYuiEF6ZT8g6pPHZG7pLviihMAWNRVLmBt38wa +8FA9aZECgYADbfwh7OhSE1J0WRaEk/4Usos5Oi6fhUyqr2u34Ereug9Gt4tkhePa +b3y31i2PQfsatpR+4VpBC6zpPgHQYpuqlqDRWJCd+Cxo9751nOiA3xYVxNoiwIn/ +WxoUkC8Jv8kYFAJRceXkF/auVh77MUoruAmoT2lGE6zP6ngP2q6jFwIVAJMF5kZ+ +AUZbUBUpZaPuZ15RL8GF +-----END DSA PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs1/rsa-aes-256-cbc.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs1/rsa-aes-256-cbc.key new file mode 100644 index 00000000000..4053ed5f6e9 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs1/rsa-aes-256-cbc.key @@ -0,0 +1,30 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-256-CBC,2036BA8802B364C6BE415A48E1AC9966 + +0euP/daGIbl798XGc2Tc6u6NmnCl8C6hE0a2grO+wbvFEa13IT4hNVNTzqahfLb8 +STF9LXdvPbz9HybyWnG8KNm5sqsSY1omsHQI38khhwuhpHuWfjb62TqWobwrAmAU +qh2+kjc7upzW48axJLRQ69vfE4zKczZ4Sqv8qImPz9SiXPeaXinHf/wKfgXZZOvr +6A8nCykLglVrFbrZWydqKrTM9w/LTXsn0gNpDmrfZERDgWnabKnjYidHkXdgAoFy +ulsBjKvj2hJFtnJHTkCPXj6XAj18cwUWsN7inFJR5wqjIWXuLqfv/fNbK9lPzjAk +vMTEVWwynekvXFsSvnHAyEJfmRCNF6DOE+5VwjEROCFq8xceK4fz4T3BHC7XSgis +2ofBZwjCAJ0pP6SdRpbbZ0wlXH09wqDDTZ2vWD6bEG7hO9VuP/aO76MIWydLa78z +bDb2R6MnYKmYEInPzwfU4H66Z3/cz8orfYLlnF55DRd4rO+fJm6Y/XY14ac3x0S+ +P67s5e0WbdImagUsOxGNBjgOr84lwmtk/LoVd5nKho8JyQw3V7tiyrsKsM1lAXdS +TaJXKRnN6LbgC8d+Tgfjc/qMUdVqLlN8zATIa6E4sc861DDiJsneXuFm43pHc/ja +0sxSifBKgLGenj8xY5ANEfrYnXKrzaQemUnMzd+zan6OS02I+e8WTQevESt1j0D8 +7mgLJ9W2SfNNfiEd5OKar21lLNOc3POaFn7M73zL/gyhTROipPR3fpV+08k27UKl +nzGhFtRwQieXl34QjM0JrHokKKfv8FsAJsbrGnz2/wcm6jJGmrj5VVsogMKc90v4 +ZTM44NAKymM0UTuIp/rKb/UUVYDpl9VWDegWh2+XKX8io31ENrDMcvQTJ/mzNCuZ +SINrAeMbVD6W5L0i7THEt32YsDmbFsBaEJBlNXlUNBa/NCK0pjwAn5AYOFUvEqBC +oZUEleUMU6Q3TKI287o37euw3No6jo5VdPULlrwHsZAjmq9EUvRCgMoIEPdxv5XG +a4PljE7DQLlk6G9d+gjRzClLFfkadSTbtH9o2011RtWUKP4dcRuSOcBm64xVIO6J +rhe38sE3yzHvLUM/mvLsEM8B0AHl85nrEstlbBzftXMo2CAJ2Gs9c61PYfft+xiT +pRdHx4HB1P+kfHa96ayvAytOexHih2iVKVG5CchOr5tbWmkhXVE5cZAKzvczDYFd +YvniHNiqt6LO8EbJOzz+Yxessmd0zBXj/rjxTMdGwaRjiFI0BIguYpvmGoMS8+bp +spRj2DMtqjNZz68BEEfgKQwDHPCTblYSR+3Uw4sja608sflqQ8rTmOwbfta3SNS8 +Kq/zzWfYzarQ8hAk5n/H1Jm6AQdvcptyMjuF8FAiMnvt8xDCBRMD3xY2BHb/tcs9 +dBWBxhb76CKIrV3pzm9gGhhZ32Ndq9KmmE+bWCYyvrLxvPJxODfM7X5XamPmG5SH +wEKSbp0wPF0b6vyxt5M72OYnU8UnxYWu6PlbVvczfWEu9fIw/oIN/kDT/QUojTyt +wBgzVSTSNFaDtVXJw10IWQgsgWdNY5XueHKH060P5g+14woxU8i3TboNd+tC3hRl +-----END RSA PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs1/rsa.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs1/rsa.key new file mode 100644 index 00000000000..cf847bcbac6 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs1/rsa.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP256r1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP256r1.key new file mode 100644 index 00000000000..d17b664d739 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP256r1.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGIAgEAMBQGByqGSM49AgEGCSskAwMCCAEBBwRtMGsCAQEEIBfCkWEWyc2tHIvS +Ao6hhcj09dnh8NOmtZeqGmcXHnIqoUQDQgAElux3elmSzb/WqEZXb1vdXx/tcIpC +Yq2vewG8H1SikMoACeFVRcjuy31gJ4Q8M7UQmrR4+WXSptV/UQ6Gkt3XuQ== +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP256t1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP256t1.key new file mode 100644 index 00000000000..25bca43c321 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP256t1.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGIAgEAMBQGByqGSM49AgEGCSskAwMCCAEBCARtMGsCAQEEIILhgc3joEZDWMDm +9TYgrENN7gbqtMpMw1e2MTLwlJhCoUQDQgAEiDN20JP8O9zSK46tP6MkXJPNAfyN +IQ0hOgcQ//Fw5V0yiSU+BPGeDoIDsW8LnElS1hIZWq0JVQNZge5ei2bshQ== +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP320r1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP320r1.key new file mode 100644 index 00000000000..e1bd06c2793 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP320r1.key @@ -0,0 +1,6 @@ +-----BEGIN PRIVATE KEY----- +MIGiAgEAMBQGByqGSM49AgEGCSskAwMCCAEBCQSBhjCBgwIBAQQoNifTnb4a5dOR +yr8QFVM7Zkw/f/AMm5T5PQ6iVTCzrnw/kZ8glwl+JKFUA1IABHSnWUC/tKXpNHGE +P89QVKEgvetwCQWFoOENAgXORniLiaLdAdsR80ouTsZiFgHG9su0l5ESEnFWQr5x +UMj/vPwwhSYm+YP5ucx5NezuBM4d +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP320t1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP320t1.key new file mode 100644 index 00000000000..5d89229f12f --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP320t1.key @@ -0,0 +1,6 @@ +-----BEGIN PRIVATE KEY----- +MIGiAgEAMBQGByqGSM49AgEGCSskAwMCCAEBCgSBhjCBgwIBAQQotGnirBX69ezE +7a9yIBQcqeCMm7hc5YAG8D4396ytBa/2/O/lonDlOqFUA1IABDQHDepa3l/S8Gt9 +WrNCNpCPZNBXvmkGPnVXZchZI5BtUySwYxHX1tpatGs3jY7drVYm+NyxZE81pecY +TvXR8bu7e3BIp2SwZmXEDxdYp1fw +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP384r1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP384r1.key new file mode 100644 index 00000000000..c248a0f0d44 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP384r1.key @@ -0,0 +1,6 @@ +-----BEGIN PRIVATE KEY----- +MIG6AgEAMBQGByqGSM49AgEGCSskAwMCCAEBCwSBnjCBmwIBAQQwK6y6NydLMTNm +LhDNPyTDKEemTWTUuMGfBQxEz+lQKAqz/So4uA+fQzor/t8to+uioWQDYgAEaK8X +3KCyRDMpbACw2xG4UUe9OxyuGWFaGKPxhKJDyW5Z56gT5P1Q2y4CblL/X9VcDIMX +dcQqRNBkPQfy1+fJXwKO0ClfD6MIE3bv6PTZ55J6H2H1dpg38a2soRchz0FN +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP384t1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP384t1.key new file mode 100644 index 00000000000..13a4e0c7b03 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP384t1.key @@ -0,0 +1,6 @@ +-----BEGIN PRIVATE KEY----- +MIG6AgEAMBQGByqGSM49AgEGCSskAwMCCAEBDASBnjCBmwIBAQQwBGUaEvTtnxm8 +fOWj2c2cX4991rvGmfGviuWWQRblSii/v9FG4nQ4Q2IrgBy+hgK9oWQDYgAEQL0d +QoOTArIx70V/XxipoxxBeKT7zmIe7id5pQiw4O4nA2S2BFxQF9eW9ipnm6DaN6ja +X/+2k+cC4qIfqzeLcLUFXxz0qdec8lNNtr9QmwoQlv11beeHmQu9C1GwHmvG +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP512r1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP512r1.key new file mode 100644 index 00000000000..790b619c365 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP512r1.key @@ -0,0 +1,7 @@ +-----BEGIN PRIVATE KEY----- +MIHsAgEAMBQGByqGSM49AgEGCSskAwMCCAEBDQSB0DCBzQIBAQRAmEQNFMGIDLoj +Ktdg8V71WdSs7FiBkE6Bft25+yY8ohugk/u8aKeIKNVtSirMgQhGFJy/BIBkvM6V +1JfnrglkjqGBhQOBggAEYbjTnA0x42NdM7jVv7jAoZq0iOYopbwejlOEsx8/MqRa +Yt4Ef83holIsgOHWSeW+kw1oMDmieoCrhnkM/3KgGzV+BxCeieAWGxABsj9YhAmb +ATorRJ4q/pMxRq8gIUv05/dGuUttl1gdbKKnGQjxDBM4v5H+/4z00nzzj4Gbfx8= +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP512t1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP512t1.key new file mode 100644 index 00000000000..e4343646b3f --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/brainpoolP512t1.key @@ -0,0 +1,7 @@ +-----BEGIN PRIVATE KEY----- +MIHsAgEAMBQGByqGSM49AgEGCSskAwMCCAEBDgSB0DCBzQIBAQRATamyZ088BsIP +Scslwa0I1xfC0/6udycncr+i/QIFOXNr4OQiVb4KC/CS/2FPotVMFSHZfCS2bgi6 +Yvg3Mta5SKGBhQOBggAEm/uIqsytMZypsqCuL0jwZh8xCRVEkUd02YPXcOBhMzS9 +bhAao4CLAuXhWzplr5qk/7ttvczl7qFDOvBzNAIieZHwbFrouZ6Pew8pQXRcMDB+ +FnXwNgpljTNmz/f1ePjVKU1ZgbQ+xVf8Qt8OI9S0Pla8siTgbVweGMLtq0A8Wuo= +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/dsa-aes-128-cbc.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/dsa-aes-128-cbc.key new file mode 100644 index 00000000000..5ab8a9217ef --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/dsa-aes-128-cbc.key @@ -0,0 +1,23 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIDzTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIJ2oQD0S0aMcCAggA +MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAECBBCNXluHkzV+EEdxlhmcIAWBBIID +cAWJ20CCQlOCxxCddujc5gPPotUyKTbXA7xI3J9DdjrqBaHrNY/Yii4Zxk9lpzPL +3x3M3O4C8nJjk4OEA0fiyBYOV1d+KZfa7UZojIe/e+7BuTH9WAvgVzORYYEFX6x7 +DTTmYH6VSej/RBdNTV1KeWA4+20Zn+vqCwcBG6R78cQDP3xGOmT6jOAQR/0kkqEv +GN22UGpuMlHb7SDiYeDRqQPdRMkpu1RZS37MWEZ//yuwqEyaowK0JgTVGKyibf3E +qXYV7TqEumdfrpZxPXkmJwswUSoFwE1wM0XU5WMg+lnNiroaVQjzqLEEqENpJ03c +Y27l0m83GRVvISvwLGOKY0Sbcb2d6NnqBjbVjbJopjBrww3iiTUqGiQZTFjiJ3CD +VNKdG3HPWEdjZG5xoF9BLF3ZVz/jrfLkK2RcZBs0U6SyENd3H1gOk3yv4Uw2VjXi +h/PA27oFJ2I5DN9bcHhbKVMFykc9JZbisDO0TNx6gbVxZUdNEER0nsP4/sZCwXp+ +K7rGvrUk17vBesp0K/tTfdBM2xVkV6oCMKPeQpsdekwCSAdNamSpxZn5LqUaX+Gw +bMf1FxTlIL0ujLiN6/U3VWxLuJuoJauFyM5wYlpqgBOQIszVREQqMOs/Zp1WT5uS +VUA7tdcIpSE7aA3q2rg1BkaiLMSEBMY/XWAI6SCj7iQyRD6GDse/ayJrQ4rUPvD4 +iRLQN9B1BYwAplGX3Cmi++Yos7tOq8D2HfTDsI0bHAi+oSDTRUAsiezx5QRLgrp1 +pO2dyBlJ5HOlK4SA8h5CMlk2fVgCLGCZ61VcqF1DHu5NKuCnCR73QrwuZAPlo19L +Jt1YAgcXBfFoSbjAvE+AXcxu2uw+t2kj6cjGRSRpBNSHCn3bJ2zu0qrPL3lOMhtt +DYp0QNWJkW/6/fpmXXAYQQv6bFY0Bia8Ima9LATcCwpYcRox1pL2rvU1EWLDVy6N +PdFdlzLM7UcrY9Vy40gEj1qz9epAXqzfPkmbyP3i41BjKlZfmmzpJEI6hIJMtT6T +xWU1Kgg+mAED6STAJ6nem2bIEzMfsNM00VrHXoLU4IWPCe8NMYOaVox1xBWs1mer +lu9dgGBAy4/gn6v55XzjQ4R16wyiiJn3ZQGrUD0AE6N2E/tfWiphVG1tYDjjWCLv +bXG/U6P6DjClkBocb4DgKBc= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/dsa.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/dsa.key new file mode 100644 index 00000000000..93a9ee56e4f --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/dsa.key @@ -0,0 +1,21 @@ +-----BEGIN PRIVATE KEY----- +MIIDXQIBADCCAzYGByqGSM44BAEwggMpAoIBgQC1d6MOqEDLxjfjz1v7Vg44bBBX +VOoNdWhvJPl9NL2Js57UmYGrTqFit2VCLxbS5FVLyOZ25S0myQRsEtKyi4V9+ELI +0q3oQplm+l3tZqKjtO69ZlbzYSl9IG1254/FCwBnBTuN7Vl6A2vryIhY7cL4E053 +Yy0xqfP7swPgMYNBqjc9c53hNHKiseQJ8Q2wFKZqm13xgqnBqmWbm7yNmzKJbjMW +Zt3/WpJdjqfRnjSljFOkYPPBkGRUIKHcZ9fw4odVov2vblGzXwR+sFeE3lcF50WN +uppjszMXlqR4y937CUSFbCabatRHEcPTq/FxioERCrCdx3AKOfwAquahtvWb9V7A +47FlibDDeybh5jCH0j9HSjhjSiDZdadSgGKFynPNlVAlOETZKGqkeqAZZ+dsPkVO +n8tx+VXZJF00YSe1HLKJUWXaT1tEGF6vw/dXhhQVir4j63fN2tZdhTOW1ao/J/iT +VYEQQjYeMKKuZQveBKRBlpAjhmjOztbE8VL4O/cCHQCxPXlCpORbfOMEEGU0hbEE +HsxFHMXHCnURCJxVAoIBgQCBqsk+z57UndC1Ut6u19wILXs7UBgLo0ivId2QHtm5 +kY77P9/lNOyCIQkBnULbJ36lHm6yxLZ8imyC5Lc7wlFJpJ6PpiTJ3nPi3fzhbftB +2KCJVSwB3XfkjvyyS8bfwwqyrmce9el+AIFJuWPrFSkjNthq7U5vU5a+uNT9XZrs +EaDbjkjVJXRX1oDS3IfWXWpb9i/LOE9HU+NfDKfydasWASvwNX1F5BKXD0AH9adj +9Q7b0p4DVTh+UPWLBk9/e6gsA5HaRI1urAMNxs5Xnmd8UYF1I+AmjQ9Mi63Pa0YW +QjpdH2hoOQGLemQ/72woFVzLaHWBcTuSwjREilaAA5M8CWq4rpuA79MrcHgzSp2C +W1gtZa2/3SymcJ7Py2PHbncod8gR9dxHWVO07ccOXUG0iL9m4MzQ27uVvTh8Nrma +M+JET778E2FaAkAIT34eNMC6Yk2IDrxU9L66FFx3+3n0cOeWaJxIWrIQ6uWk+uIH +VzPsZAQU/V0/QBABlHuSj1cEHgIcYTbB5VrbIgust0jVvQCnlF4b1V0qz2iDJt6o +sA== +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/ed25519-aes-256-cbc.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/ed25519-aes-256-cbc.key new file mode 100644 index 00000000000..138b58e56f6 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/ed25519-aes-256-cbc.key @@ -0,0 +1,6 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIGbMFcGCSqGSIb3DQEFDTBKMCkGCSqGSIb3DQEFDDAcBAi1t9NlcmE8TwICCAAw +DAYIKoZIhvcNAgkFADAdBglghkgBZQMEASoEEJacGnDl5HIWWbv604Vp0CUEQDEx +jZKBJnhmLTPMJbE1TgVe+9N8ZG1CVpSFz0xo9xCk15G4E9jgxXw/a8Sqy7NiDqRb +FLJrSStMU+ygP7wXIFo= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/ed25519.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/ed25519.key new file mode 100644 index 00000000000..a9bf1bfb8f9 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/ed25519.key @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIJ55hBE+FwS4M3k/c45ZJKPHtsklKrb6qJlER0cMJ2rn +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/ed448.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/ed448.key new file mode 100644 index 00000000000..934617d4c1c --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/ed448.key @@ -0,0 +1,4 @@ +-----BEGIN PRIVATE KEY----- +MEcCAQAwBQYDK2VxBDsEOSSF8O0uKk5pRrjUNV+QgonwO+WeDRb/i1U7vM+TLzh7 +jAV58E6oglA53konKxGv+GC38dCb72gSeQ== +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/ssl/pkcs8/key-rsa-encrypted.pem b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/key-rsa-encrypted.pem similarity index 100% rename from spring-boot-project/spring-boot/src/test/resources/ssl/pkcs8/key-rsa-encrypted.pem rename to spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/key-rsa-encrypted.pem diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/prime256v1-aes-256-cbc.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/prime256v1-aes-256-cbc.key new file mode 100644 index 00000000000..ec364223094 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/prime256v1-aes-256-cbc.key @@ -0,0 +1,7 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIHsMFcGCSqGSIb3DQEFDTBKMCkGCSqGSIb3DQEFDDAcBAjZ2eXtLFXLdgICCAAw +DAYIKoZIhvcNAgkFADAdBglghkgBZQMEASoEEIlOTfeoLwq9Bs9TFtw7VSMEgZAU +RO9W+K3vvzRG4sACrcFaB7PMhv3+HUOcPFf09QHa7aSJMWsb8EXGFBK4xlFhkK0/ +N0C8sRtH2N1JdYj9hiwS7I8WyybaR2W0ZALNR57iLz3WsOGQ7nVECFprElboqnSW +BtjkKTD9pz3xX/6cMkDV/2WqbS6Y/dzWJTH8yTTqjzTjbs4vguEK1Io6dlIRVqA= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/prime256v1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/prime256v1.key new file mode 100644 index 00000000000..775a7a0fcac --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/prime256v1.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQguc9upTMQn8b+loAx +6c8q20dHYBf3V9374I3kJIDmC1ShRANCAARnLuOxL7n7Gq12zd9vq2neAv6PYc1h +W6M2gJKSbfFYGhte382jOJ2TgwaTQL/J5IPSfuJKkmAPBIl8CdJKWlwA +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa-aes-256-cbc.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa-aes-256-cbc.key new file mode 100644 index 00000000000..638f6fd3fd4 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa-aes-256-cbc.key @@ -0,0 +1,54 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIJrTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIX1pl8K5MBZoCAggA +MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDAZbI9gwQvuQp1MWqsGkJeBIIJ +UIsFUQY5CFVcTqF2wNDdyA/5X4YvQ1wKPwYdSIHhGAe4UjljSqUBG5StfZmdA4aT +DdrzdApbZxP8BUlIjrjfR1tsbgnvevEkWUTftA2jzOmKBmYQ44WmQV2JGz6rWcH1 +ZUc0ArKq1Jz2OU+JnE3Olrbf4QupcYCQ+qgB5Afkp78hMUWiGPXaW12Ankjk0qVU +6zKiLP7cpignOlDTth+pYe/ltFQr1cLSgTsas/9X565usS333s8P7RQQsPRa5+De +hsgZIGeJTX6RGG0ipxZjd97jle54T6UPnYQWmHHZuX0LNqThTeUHZxPaMLJ7jnFY +NtqNvlXydkWRqdVmP2L2uk4mECrQrKqcqLIdlEL+sB00t+hjNtyCh6dIaQ5rbYDS +1k7fNDx1m2k1u3ydtUUeN6/7OJ7X1Is8k3WDTxHguFDz1mmeCw0lgH9tWZ4peG0/ +hIP2p02icaoSx24K7b6yHShJ/+B6lp17tYe/FgVBzO75tB7ljH5bZjYcZ9iIGy9h +T9Jq53M/lAnsAADLt1fiYRTWq9G5w/wzl0vqNTVpnpE7nXTs7d6Di812k8uyf2G+ +RU8Bsv50SJEZzW4liXhGxJXaI2TKKa8o27vPm/hK6cL2uoS6d22+/dUL1yP0ZXl7 +LOgqnNS3e6wT5xfdbXXclGUER8jP1QRPTm3evI13BRWHswLTeHWmdivZFrCHHw6o +7f3LARYLkefwO/FsC9IJzpdgN3B4V/K0BIcVYwXYgrqUIei91b+3EHgqvB3cXLdG +r91IBTvV15V9Hz8FUmTo+0uRdP7nrQ9+4451p6RP8FUuaAV03/a47YWemkZtqmzd +zuWB/Eo1fzmxrbHyXZoN9D04ubOB9S/6jUy9N2IwQykeKy+go/FHltQr8l0JhkKs +ipbaRc719n2Fj/hBkaIzLl/nxK2KWR2kCAiVXo8WHJOzzRlgEMUCbgoNbvf7X+ek +7O2VXOR2ZrqDSXs0WsZsq2LeAXlN2rIS3TKVru1T+0YKe/z/qZFvdygkTGB0qX7n +G+v03iRVSGingsl3UiW/S0wLDxdxnBgERggD+YSwQ/pFQTPn4AOe7xStW/2/d95W +S6rA23ijN+U3O1yN1jCJjMZUFK4DDwKbIUyqcF+m8jvYLrvYxNuVh3pwwDbGARGF +q3rzm4K0UUeCZa3sBlV9EkVhIxdibO9fPFP/9o+pGHacZ9/B0QtCXLfb3RnRX3AW +uM5L3gMd14TeIaeTMyHz4H9epUNwph022TKV98au8diLNGtB8eNZuu4wAYTfwYfi +kUcS+Yp/EqwO8/evdCvWSe5xJ1QuLcl+Fr6XGEs+QmcGNDSq9VaqNu5QndZSBR26 +Zv5vGpukqwxGXdHmETvLavam4io4Q/2XUQgZLdCTKxs4Sf3BiAyrW0DWEFQ0vLXt +FFNQ6AXuVe7jvaGDox86RZ3bHDwWJePBAkQtOza/lFkvLd2h9bcjppeHxznr36Ha +AnVfIJ57sjBlQA0bpUmTGDkcC1FmRnM5ADQdCENu6ZCkgkVwpFeYfJX/Vk3wMH41 +DQwSF7gP75DDLBnwyb8WooMWEkULBzBEa6N6koZejmgEaULv0aWN0BhE8G1XxVq+ ++hOwgNMVm0d9UrceOUsyj4G7UpJbMO0jtLSt3PWE9xfCqDm7vVPf9sA3/Qa6YtXX +EkNCfItqqbYBWsNKzNpZXDpiS26DFhpww9JrwEL2KBRp247ANxZxG7dhk5H12+Zv +2c49np0/zAHAhREzuebnPZiWbEMPOM0y9WxIhbCN+u1E16nxZWDeNagDsOCkiNrR +c02C3U+MZd6S5oYT2h9kc5qq9NyCkJQTFO4012sBYn9LZ0aFUXIPPCilrr2dRMJG +CUMGrtMfbauEQ7iZYSCdg1PDNmtrv3sirJWZueMNQhEppdtYiV5gfCPVl0sa3fvP +4yLiPiMMrTjspyXq66jTR116Sm0ZdffDZHGDFUSFowEJZ5JbigUsQDvRwcGjoZ// +IKT3PPQ55tukuD2WmI2FT4j9SYr3YSBWcraY0povPanxwAIewZZW9BxrOgEDthkY +7VPeShzcJ4z8O60ioJTtR7gZYhcy9NoTHM8sbXhHS8QloWa22cwXACtPtuh7ErQZ +jPHIhb+KLFa7P7O6ceTYwZlqUnA+HFI9VHarrutxqRaUWa37JAEhd1bplmxBXDZo +/8S4pNVlxT9xQmuYpN5JvWCeUadV5SwHCGVHcIDVsDVAWF6zLYwb6zWF1i3uRYTP +FNwZx4DiskQhQu34QAnvvajZ1wZf3xJ6LS+exOoAZ8Z/qyxWmDwffSvf6Nx/Tw1r +wLFmKTcMGxBUzGMJ4txp0tiJIHYE8IQMYWNOBeB/GjRWxTEBl5doFpXpDdFz+mfP +k/wRUTkbuRg1KxXV2GPGB94m9elePD+Rf+m0Hl9rWPGsPR2JE6lr6k/kUYAWXuSh +o/3w85skoGcAe51EVvtrtqbPTTcd/ndigKI7U4shQnZCm8nUISYlIukor2vNlIuw +1MC94zP2sfWBreka5VAC3IsP67lkdJx6DLvv80GJ50O7u1oKjQCroEKGC22puTb9 +NZn0h8BepBrgY6eWA9eZyrJ+v0HfMKN0O4lBBhtcedHTGZmBhKffjS0KTqvztFyo +vnx86mIoiskANpfTn1QWSHxVJm5fNlRNK3DdCDzsQ8OcweIGc/omcg1MYp3Qav17 +E6HoYWVrYUhVbzrOPiW3SorE5c0Xk1tTZQXH212mt3RhMTPmrqc6+PVIwFfU/lzi +SABjj1Jws9QLbb74J8O5eP4+ZxAvkZtKaLTBibJhYOGtGIrsWzfmcsEzCH+YUPYz +3vMT6E6wB/KazfI3TWc2g0eHklu7mx1HDlR1V6BOfJ3tOMOqqOOpvAp8A3J+TULB +ZlQIOlMYH+fnQfRg2FcVHGCik32h7HdjeoZha/Qsogrg5j4LL0NkJf3k5E8I/c4L +o7yY0rPMKt6qmmZe4msO9wFGomWCms5LBV9K3H4bEtNdPs5rdP8wO8C9NaGRuUgZ +3pPm1AYRdxJNW3TGR+D7nTuDrRIKrxMkWyKOkwQteWAqI4OAiMezhpv8X0+pq5K8 +8rPROuQkq/znG8wktQ0V6P+JjL1oBayhrpadgYY/tc1+S8U/zeeCPnFtUXLLdk/K +stzs8gsvZCWWn6M5mlSrsyLaB1sgbxbuOlaH4FlUAYZC +-----END ENCRYPTED PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa-des-ede3-cbc.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa-des-ede3-cbc.key new file mode 100644 index 00000000000..a2144172fdd --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa-des-ede3-cbc.key @@ -0,0 +1,54 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIJnDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQInDrn6GvZlw8CAggA +MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECNwtOc3eKItmBIIJSNZzJs9X5vLX +1PNFSOjg2bDJFXWJ4X8vtnA8g0JsK0+kGmRxg+FlWXTqAGJbm0imoE4YSQ0NXkfj +6eFtgebm2zdRRfbABJX/drZMSIDYl5Le7B/zqIeI9cO16GDEbyDam+MXD+mRt3Bk +J4JyJPCin22nAtKb+D0zHs2F/9Iwi+3IYL1awvHspfOQVwARoj9Jc0K98qtGSa9M +KikC+0LGr4zw0fOSMzrhijg5mqi8wTsYn/9u5+TkQ8cwg6cBKCGCjNOi7ml6uyC5 +LE4dYAcSkFbbRRNOuM/RYiKxFpGAFrfxUVfHI3dLjDe6DUAN18ZmLitij2WI5TcU +azfFRYMnkmI12Tu6JeKrFrhQOt4gUq1W2h5KwvKvZAikRvc1pE+X8h08S/kAwsUb +PuxgAN54myeHIGoaxG/C1ImaRoSPquKVoayJoIwDQ2kKJJ5EdXFJ56SyA1kYk4y4 +Ohv+kvk47ZAwFZnNz+Lt+22uFOnrMZobv/jKsTRfJsz0QhwmTIaB9C5QehkAeZJD +6M/JVjRWoLALcNu/S7imzbzNBS4r1ctYLv2dkakzBhR4o5Yfn4sg48p1x5EBTTre +6X3/qWH9z1vtpJsjC7vA4ACkLaz0Vb9Tb9No+Sjjp2xi6arJphMwjuZ0LPf0EuVd +wzbkRHXzpYMACuaypNaTQrNCgpR19eV98SThrf8QkyyKD0qwtzwoTmGX45FnGFWy +H8HL+lZzfpA9zzRCjqLGeTkgQJLIMP0orD9kkVYCHtUorUQPr8MIu/o45PKCZtNd +++kaTm8x+wjXYNK+cyOnyda5rj3XsMYqPnMtdg42cHu4oODEV1JH2fl8sXpuGB4A +7qsSBORrZJiPEdayT9Gsve0A6Vi7gGK+9a5WRxqS2Hlbgr6lgqUr8zX1YYi6Ace3 +d2GhEqNvyAX+6Cp9FYH7JauKtrMf40LxCNTpTmhhrhwS61nd+ka/5e8v6G05eSTA +ESbBKo+QiE2Ek1xfrfKlsc8IcBXxmPF5QQ7Gb9eGI69myPRNTv/XN4mnvA8bZF8k +KqLp3lO6Y5jGKHToooViTDX0WRApJF94oaefuUbDJpW9foaOfZpBz4yhLnY7syTd +n8LNRYbMHbFbbe5eoGhb6goHD1R24/SeKumDpzyj1HewcoYGP00toDFxijY/AA96 ++4HlKJX7JJEDvORgVEZ+tOGo1xplagrndpKnX+WsFzvuPJ3RNFifbkp7iRP1W6HJ +Gq+oZ0ewj3z4MKi0s58BgTwQENRmLEdp0G1nyYY1nuRmaq+t1IlvR0bMYhTARqcY +GAdHdwJN6MXQWFyqTQ8L9N0OuCpENposKBvdUcrSFAIALafX+vJrB0aS0ZVM5w37 +yiskAa1KMqo20XTiH9z3awnKAVZqjY0oE2BTehdK/NWgaLH82AsxFIMFmN7GCyY9 +QOIlzceqRlltJ7PsTmvDN+pRaO6KdcbtO/7hsvUgZWOs6x21JRQHUShDNB765dlE +usuEl3T72TBlTdxQ1tj4fA0RUCAF1T6B/9aW/rBsPTQIBLyJEr/78m7lBKmgQ+2i +REjuQC8NYkzLLa+fOiIO9LTjPqdSpzMCqMIbjiR1eYMJHFoP+8E2gAqKZBDOaNoI +V5tfZk+/Uz5AIYQocd1aUEQCgyf2WJLp2B5boO2lS1qXBb4YML/D2L7Udz4JU3Qk +fkSlDC4zx01XdmmbGedBCGG3npf/pCerrHcaPJUWOjMk+M1tR3Mpmmm+/yJm4Xyu +bPcvV4pEqlfBsIjLCt6xyF18vuF458yB7djtZJ3wkx9lLbpLAh/z7ywoCF7B35nQ ++kUjFBsboV+1J+9sK4bULrtYOhjxAU1P7Mpq4BbWbRWBWK9/Kz8maeCrLEW/tpnk +EureG7aZtwQz6vHyeDDQTpFVdeSFO4qFy7Pouf/VVzX/eph/6y3ZDsjYfxFiUD6z +TV9aPs8WDDcWhd+voSQlBlBB4ttspQgZhefCScu6hhW5PNVFyNm/TSHleOEBXiEf +0Ab4FeFkQ+c1GwhtvsmGLBP/2VzkkDSunO2QDbpNYGzR2Lsn56JQjeKwiTHblzRy +AwSJ4DU/V7S2K4wu9QmP2SefrBJTlbLd8VFbwAGAHDeM5Xi/TnleaQvUPGz56F5l +moaYsXbDQGlyA+PYs+CCa9rSfvppX4EwDIftDqxAzEAIbQJir4VEiPpE/CrJtUc0 +JMI6ug1Cpp1p2U38y+POyv42Awk8M3KOPUvXxQkfU7leSClLh2zCAkC1CeUGLrZU +G/Fuob5ZjjJ6I6/+3jF91Y6bDvh9e71jys6eTnYNfXs23f7uwqv7G0VqhY3AjXKs +9YS81sdBNbZIObMeXA9w2kG+RLWB5C4hpkqgoRJHDyE06Vzy7zzWLBS6AY6/f2lX +lNVUETpf7j3PU2bGry865V5eGS43lTUnsMUDVQL1OuiWLg30JUH2AP8cqQqgN+O/ +mK44RfZIrGz7o3currsobXBMNaqFqVlCRtdqEVsiRprWiGlHtLEnAh/UNVp3h4ca +s9nGo0wA9bpHqAYzyJoDKRgjj4V7vk6rDNdJeRow9v4byVOpEXBY2WX+oRWYruyR ++ArU/zAeK/6oUb4yegc25SGTZxEHlZvZs9U8Ft3SmzGDtuiS8tgMgfLe23fN8mUv +pRwRqkRmPYRZpH23MTWVBGSAos9nlP5MxA7IgclRywpINOJpNsbPbihhcjd5oBhK +ZK6eqdpYUdSWHpUdSUi3DhirYXWQA3bGjhJ/IuvGpqdXm2P9rpUArEjwuG7De7QS +t65n15oECLzVg/3vZviKSC0RkW5p+pQEbVifxu3Azs8SrUlXsilcHMTnTVGK2wG2 +Fi4ReqftHwy1JIAsMEeAQAvuR86TFaHKasw2p+/IenHo/cTAyqEJjgGeTJWjUtCK +dUavMKA5ZYIP1E5/F0/QBNVToghoDgMVV870p7QWjgLVtPVCDPx3I7JKh9GBmNR5 +0dd3JMpO9Gkk8cBGwurrr/Ak8ynRLv0MRdB/8HDp66XiHR6tBl8ZoZ4ZsnME56Bc +F2+OmOuxVThpOxPlECU8XtI37ZlSxbG0X/s5eBy2mmrVDzGQDYXC3VuEp3lrk8QV +k1KU6zxzFLXnKEhZraP78TIKhvV7tiggyTBmx1emLigMqmd7AnVseY1LRlFQgUB1 +wloOOrNW1gpIoUUMVuRjFA== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa-pss.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa-pss.key new file mode 100644 index 00000000000..a0ecda8b2c1 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa-pss.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvAIBADALBgkqhkiG9w0BAQoEggSoMIIEpAIBAAKCAQEApfv1BYcLTl09aBmW +OnwUEKxByqBZeCXLp6Ck6/plp3GgC9gtFMfSk7mImkIt8BAFWK27A0/vOFDf7SDX +tFYtlL6ZukxSgaltyEjMVMX/oqB3vMsqzDX96So4UauDlQexWORT0LcUp3IcjA8L +JrrZS6j278y3ah/Xkex56IRpfFbdqPj/p4rJMw0WFtqvINV6C2xGxeoC1/LcHM/H +WQLpeRD5PgnIwUw/dqMYtV7nfUDU5wCJLe6I0ogdgmCGrAeogldFilakPs47yU03 +/b6qWFHaj7OwGZRV51R/GChS1HdVN42nsXHiIz26KPIf8BS6O/iAZlUaS8xhw5XB +je0uIQIDAQABAoIBAAh8WZn3Pfo7JRUJ3dbOmh4CGHj5+qj8Ua2XtmbEDediFTsV +ybQ6xQa9YQD16jBQOV2/wARa1VGNPO18FNsI3tqwZd6S4VL0rQKkyiF5X+jaCFUU +E/ONvRXrDScLvDXlx0jSn4BXo8wttszoRfssaUiHclxvHF9mEljI/LCI+HWdTAys ++3l/Yn1ewwA2iFFU+ZcwgvZHXjLjRLfImTfr7oQLeolpP9sxfwb2RdQ24ifgIh9N +Yv9KzFfFJNl+2o3q6XBKqvjXYWmTam/hwXhGnFNb3LgrOwkSUIVpUJl52F/fu+BD +AdJu0ELPUNIu2Ll0fBp3Efj80vcSZqtDSJ3Bl/sCgYEA6DZQm1L1Y2tPMcX+JLtV +BKC19YRTJLI+CQsU5YnD4DN6O3a8PITfRf+SHWI9slGGs4QU0rv6NLMj4c0Vxsbk +74LQArprdw768+hLH8z3r/fAZ0QrTJZSKMuGvs4To4dHvNSdc2lYDtadDysPxkKZ +23aL3ApmCqZpHvIUndOGKV8CgYEAtvzWJd6faGWUEbQI2qI4/H2w/t4oxIgVDOeu +qCjIfw3jj9QUQrzC/ckHEJrb9ILYuzxfe92qPf9qmqHyE3aKMCN4MFIz+PdfwM7F +P3/QSriS+PdCnS0ysmHrUdJRXOsl6SYDVnCfyhU6HtL4GFO5expMesogpw2xXkYk +gYOaWH8CgYAP0SNMcSoly3lpeoMFHX19AzVhs9G1/i4bj5WszOV6sAbzZfMMbECJ +FA9v0PFC5Cq4r5Z7hDJWxJz9FGsXTxTo+5APn4MSaQLO+lOjpuJ4KfgBELOiU9rk +zHgxJvhPezd3tUPESLimyheIoPZCGuc/+6MrKcopj4w5f2PIHFBXIQKBgQCN7qTn +8LpyTj/AT4WCl8tdxNxRg93ZOrghL18gnamOKyaz+8rPTPxtvsyVC5jKGeejqxtg +xzlyJzf3wt8yS4K5/fkOeeRIGxARTBBgxXG5U1rkc10e7tzg0eSlrV1glh/srIhw +NqEqLLbNC9RVgjNfEbH6l+clzBAkUIGmV36TXwKBgQCI9r8ZYR7xGYYDTpMSbGdL +XpWuNWwgZQsvBAH+pXaE3A/36tXdggA5nZH3SA+yIoJHGiXHeM8K9LOMAbAzHhsJ +ia/yFcH7lat92/28mrxoAkHHk5oUdIcP6pcPny3cE874sh/UPG7BNKrS+h2ll21e +OFsE0r+qLh68/S0HZM1/eA== +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa-scrypt.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa-scrypt.key new file mode 100644 index 00000000000..775fc9dc662 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa-scrypt.key @@ -0,0 +1,54 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +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 +oDEneepILtLCVoJewFPvdkpnL1xcdjveuw== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa.key new file mode 100644 index 00000000000..fc4a4c7b839 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/rsa.key @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +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 +JSRSgO3qryi1B/PjFld2fmtKpkffCw== +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp224r1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp224r1.key new file mode 100644 index 00000000000..8c74cd9783d --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp224r1.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBByDAgBh6UOQqYJSPoiNWrK0 +rA0rTMLw8JdCEveBoTwDOgAEABwjlgBV9PPpMfo8fo6yWRdT+sb1cUdEhobd+V/D +/i58cWpDqd4CApevJWtkGbwhU4J9mN0aYrk= +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp256k1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp256k1.key new file mode 100644 index 00000000000..05ab7d4dd06 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp256k1.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgAjoYh3zy6gJciB7F/pHi +fU+IfPBeEhgQBFT3zNvox5ihRANCAATTIv3AIcnOXMvnURBseRspHsowmPAxPgsx +LH5+aU2mW06f2PsIe9F8gG/Nf2UOOuO+aqwEStIkfSBR+Fwpl2UR +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp256r1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp256r1.key new file mode 100644 index 00000000000..2ff386caba1 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp256r1.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgSFp08cP6os9Fxmky +o5VFi6woYEqvbhVNYTp9NvwzBCChRANCAAQo6UQaiHkZr7lxrKDZyL9Qinr4Vy0Q +W3K2EPFYbVIupvzW0RH8vBy+0/yoaNyUsw/IsmBO+A60mhBB4rTjmq6R +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp384r1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp384r1.key new file mode 100644 index 00000000000..f662e85f76c --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp384r1.key @@ -0,0 +1,6 @@ +-----BEGIN PRIVATE KEY----- +MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCqdZTmuPvhbOVI/Vkk +yjowWmBb1+81m+ay2QF15TZns1iX4HQlaOZ1GzaqhJRS0R2hZANiAASYw9dep7R9 +IoC8Dzt6T0NYOOJE/TPdOXOH+M6uJvKAtmXGalFeLQX6HKlUDNPnBDTKp9p6Nu/o +2k/p2C9m0DaX70sNuyfOmh738Bw2Hlz3If+903Jj+hKSR4kWDkKYb/s= +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp521r1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp521r1.key new file mode 100644 index 00000000000..e987b65b0e0 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/secp521r1.key @@ -0,0 +1,8 @@ +-----BEGIN PRIVATE KEY----- +MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAdO/4HyMRu7/QcjYn +f8vynFJRVOKHVVmRFrAzZwkdusoqf9gkicCxcxhOpOGLezzTH4XBynbcmmMn4PNS +ZriTYO6hgYkDgYYABAAp8YOO/QeQoVEdzsOwZt1ta0/b5r0ESM/QNkBVgrRdCsJ+ +y3p/xis4wFlhv7lsrtuDoeuMimnvl+fAfptCzMKHugGBvSE0SjLgydEmUjh/y/a4 +O3cGqwUXnnxiLKJ98NFaooGYY+AwH4h77oCbQR1lf8jhe1qsJkR9mXpYuGnkaJ7l +qg== +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/x25519.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/x25519.key new file mode 100644 index 00000000000..affde0dce11 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/x25519.key @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VuBCIEINAdGSXck38nDXMgbRKqKiBPVuxDirhOs9VDE+NaokZz +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/x448-aes-256-cbc.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/x448-aes-256-cbc.key new file mode 100644 index 00000000000..bb6e86a68f5 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/x448-aes-256-cbc.key @@ -0,0 +1,6 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIGrMFcGCSqGSIb3DQEFDTBKMCkGCSqGSIb3DQEFDDAcBAjrmjUn6y1PFwICCAAw +DAYIKoZIhvcNAgkFADAdBglghkgBZQMEASoEEJuU2Lvx741TqKFa9X8bRGkEUPYI +SNtLGe+fIcgz7rF8YaTnA0oeMsRp4RxBw/fsaEGrHUTM1ddjuyRzdKKNnghZIs0w +zy/O8QNXDzrss5bnxZyHZA2XEvftHTH1Mw9jCtwA +-----END ENCRYPTED PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/x448.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/x448.key new file mode 100644 index 00000000000..04b53654134 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/pkcs8/x448.key @@ -0,0 +1,4 @@ +-----BEGIN PRIVATE KEY----- +MEYCAQAwBQYDK2VvBDoEOFRfvQhj134qZjH0wDbmPc90BADiqrpGZSae/sd8GG84 +au0ISBY6I7BJJZdiLLED+0abd0hLYAyl +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP256r1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP256r1.key new file mode 100644 index 00000000000..d17b664d739 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP256r1.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGIAgEAMBQGByqGSM49AgEGCSskAwMCCAEBBwRtMGsCAQEEIBfCkWEWyc2tHIvS +Ao6hhcj09dnh8NOmtZeqGmcXHnIqoUQDQgAElux3elmSzb/WqEZXb1vdXx/tcIpC +Yq2vewG8H1SikMoACeFVRcjuy31gJ4Q8M7UQmrR4+WXSptV/UQ6Gkt3XuQ== +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP256t1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP256t1.key new file mode 100644 index 00000000000..2ef7cc4194e --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP256t1.key @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHgCAQEEIILhgc3joEZDWMDm9TYgrENN7gbqtMpMw1e2MTLwlJhCoAsGCSskAwMC +CAEBCKFEA0IABIgzdtCT/Dvc0iuOrT+jJFyTzQH8jSENIToHEP/xcOVdMoklPgTx +ng6CA7FvC5xJUtYSGVqtCVUDWYHuXotm7IU= +-----END EC PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP320r1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP320r1.key new file mode 100644 index 00000000000..e1bd06c2793 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP320r1.key @@ -0,0 +1,6 @@ +-----BEGIN PRIVATE KEY----- +MIGiAgEAMBQGByqGSM49AgEGCSskAwMCCAEBCQSBhjCBgwIBAQQoNifTnb4a5dOR +yr8QFVM7Zkw/f/AMm5T5PQ6iVTCzrnw/kZ8glwl+JKFUA1IABHSnWUC/tKXpNHGE +P89QVKEgvetwCQWFoOENAgXORniLiaLdAdsR80ouTsZiFgHG9su0l5ESEnFWQr5x +UMj/vPwwhSYm+YP5ucx5NezuBM4d +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP320t1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP320t1.key new file mode 100644 index 00000000000..17e60c9549c --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP320t1.key @@ -0,0 +1,6 @@ +-----BEGIN EC PRIVATE KEY----- +MIGQAgEBBCi0aeKsFfr17MTtr3IgFByp4IybuFzlgAbwPjf3rK0Fr/b87+WicOU6 +oAsGCSskAwMCCAEBCqFUA1IABDQHDepa3l/S8Gt9WrNCNpCPZNBXvmkGPnVXZchZ +I5BtUySwYxHX1tpatGs3jY7drVYm+NyxZE81pecYTvXR8bu7e3BIp2SwZmXEDxdY +p1fw +-----END EC PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP384r1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP384r1.key new file mode 100644 index 00000000000..c248a0f0d44 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP384r1.key @@ -0,0 +1,6 @@ +-----BEGIN PRIVATE KEY----- +MIG6AgEAMBQGByqGSM49AgEGCSskAwMCCAEBCwSBnjCBmwIBAQQwK6y6NydLMTNm +LhDNPyTDKEemTWTUuMGfBQxEz+lQKAqz/So4uA+fQzor/t8to+uioWQDYgAEaK8X +3KCyRDMpbACw2xG4UUe9OxyuGWFaGKPxhKJDyW5Z56gT5P1Q2y4CblL/X9VcDIMX +dcQqRNBkPQfy1+fJXwKO0ClfD6MIE3bv6PTZ55J6H2H1dpg38a2soRchz0FN +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP384t1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP384t1.key new file mode 100644 index 00000000000..39a94e293b3 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP384t1.key @@ -0,0 +1,6 @@ +-----BEGIN EC PRIVATE KEY----- +MIGoAgEBBDAEZRoS9O2fGbx85aPZzZxfj33Wu8aZ8a+K5ZZBFuVKKL+/0UbidDhD +YiuAHL6GAr2gCwYJKyQDAwIIAQEMoWQDYgAEQL0dQoOTArIx70V/XxipoxxBeKT7 +zmIe7id5pQiw4O4nA2S2BFxQF9eW9ipnm6DaN6jaX/+2k+cC4qIfqzeLcLUFXxz0 +qdec8lNNtr9QmwoQlv11beeHmQu9C1GwHmvG +-----END EC PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP512r1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP512r1.key new file mode 100644 index 00000000000..790b619c365 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP512r1.key @@ -0,0 +1,7 @@ +-----BEGIN PRIVATE KEY----- +MIHsAgEAMBQGByqGSM49AgEGCSskAwMCCAEBDQSB0DCBzQIBAQRAmEQNFMGIDLoj +Ktdg8V71WdSs7FiBkE6Bft25+yY8ohugk/u8aKeIKNVtSirMgQhGFJy/BIBkvM6V +1JfnrglkjqGBhQOBggAEYbjTnA0x42NdM7jVv7jAoZq0iOYopbwejlOEsx8/MqRa +Yt4Ef83holIsgOHWSeW+kw1oMDmieoCrhnkM/3KgGzV+BxCeieAWGxABsj9YhAmb +ATorRJ4q/pMxRq8gIUv05/dGuUttl1gdbKKnGQjxDBM4v5H+/4z00nzzj4Gbfx8= +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP512t1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP512t1.key new file mode 100644 index 00000000000..eedbcdb4b81 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/brainpoolP512t1.key @@ -0,0 +1,7 @@ +-----BEGIN EC PRIVATE KEY----- +MIHaAgEBBEBNqbJnTzwGwg9JyyXBrQjXF8LT/q53Jydyv6L9AgU5c2vg5CJVvgoL +8JL/YU+i1UwVIdl8JLZuCLpi+Dcy1rlIoAsGCSskAwMCCAEBDqGBhQOBggAEm/uI +qsytMZypsqCuL0jwZh8xCRVEkUd02YPXcOBhMzS9bhAao4CLAuXhWzplr5qk/7tt +vczl7qFDOvBzNAIieZHwbFrouZ6Pew8pQXRcMDB+FnXwNgpljTNmz/f1ePjVKU1Z +gbQ+xVf8Qt8OI9S0Pla8siTgbVweGMLtq0A8Wuo= +-----END EC PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/prime256v1-aes-128-cbc.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/prime256v1-aes-128-cbc.key new file mode 100644 index 00000000000..ccecc24707e --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/prime256v1-aes-128-cbc.key @@ -0,0 +1,8 @@ +-----BEGIN EC PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-128-CBC,3F26BBC4C7A6F3B5B3A5C03C7CC59B33 + +rp4qC+n+qIG+WKJp4BHQHk5z0oraaaLZvoVK5glESGx5IcR3mCsN7tdg2aZ7yEk+ +HnT4nQuM3R5pv248cmK0xDUje8N7FLe8lixVnEyQx3JdZfGdauowt9yaxL3AJypX +idWxNrxz1xff5RSMI6+PFv2SQpG0l794EpOjZxOUABM= +-----END EC PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/prime256v1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/prime256v1.key new file mode 100644 index 00000000000..775a7a0fcac --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/prime256v1.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQguc9upTMQn8b+loAx +6c8q20dHYBf3V9374I3kJIDmC1ShRANCAARnLuOxL7n7Gq12zd9vq2neAv6PYc1h +W6M2gJKSbfFYGhte382jOJ2TgwaTQL/J5IPSfuJKkmAPBIl8CdJKWlwA +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp224r1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp224r1.key new file mode 100644 index 00000000000..8c74cd9783d --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp224r1.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBByDAgBh6UOQqYJSPoiNWrK0 +rA0rTMLw8JdCEveBoTwDOgAEABwjlgBV9PPpMfo8fo6yWRdT+sb1cUdEhobd+V/D +/i58cWpDqd4CApevJWtkGbwhU4J9mN0aYrk= +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp256k1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp256k1.key new file mode 100644 index 00000000000..05ab7d4dd06 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp256k1.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgAjoYh3zy6gJciB7F/pHi +fU+IfPBeEhgQBFT3zNvox5ihRANCAATTIv3AIcnOXMvnURBseRspHsowmPAxPgsx +LH5+aU2mW06f2PsIe9F8gG/Nf2UOOuO+aqwEStIkfSBR+Fwpl2UR +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp256r1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp256r1.key new file mode 100644 index 00000000000..2ff386caba1 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp256r1.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgSFp08cP6os9Fxmky +o5VFi6woYEqvbhVNYTp9NvwzBCChRANCAAQo6UQaiHkZr7lxrKDZyL9Qinr4Vy0Q +W3K2EPFYbVIupvzW0RH8vBy+0/yoaNyUsw/IsmBO+A60mhBB4rTjmq6R +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp384r1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp384r1.key new file mode 100644 index 00000000000..f662e85f76c --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp384r1.key @@ -0,0 +1,6 @@ +-----BEGIN PRIVATE KEY----- +MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCqdZTmuPvhbOVI/Vkk +yjowWmBb1+81m+ay2QF15TZns1iX4HQlaOZ1GzaqhJRS0R2hZANiAASYw9dep7R9 +IoC8Dzt6T0NYOOJE/TPdOXOH+M6uJvKAtmXGalFeLQX6HKlUDNPnBDTKp9p6Nu/o +2k/p2C9m0DaX70sNuyfOmh738Bw2Hlz3If+903Jj+hKSR4kWDkKYb/s= +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp521r1.key b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp521r1.key new file mode 100644 index 00000000000..e987b65b0e0 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/sec1/secp521r1.key @@ -0,0 +1,8 @@ +-----BEGIN PRIVATE KEY----- +MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAdO/4HyMRu7/QcjYn +f8vynFJRVOKHVVmRFrAzZwkdusoqf9gkicCxcxhOpOGLezzTH4XBynbcmmMn4PNS +ZriTYO6hgYkDgYYABAAp8YOO/QeQoVEdzsOwZt1ta0/b5r0ESM/QNkBVgrRdCsJ+ +y3p/xis4wFlhv7lsrtuDoeuMimnvl+fAfptCzMKHugGBvSE0SjLgydEmUjh/y/a4 +O3cGqwUXnnxiLKJ98NFaooGYY+AwH4h77oCbQR1lf8jhe1qsJkR9mXpYuGnkaJ7l +qg== +-----END PRIVATE KEY----- diff --git a/spring-boot-project/spring-boot/src/test/resources/test-cert-chain.pem b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/test-cert-chain.pem similarity index 100% rename from spring-boot-project/spring-boot/src/test/resources/test-cert-chain.pem rename to spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/test-cert-chain.pem diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/test-cert.pem b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/test-cert.pem new file mode 100644 index 00000000000..245cf8f8f86 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/test-cert.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDqzCCApOgAwIBAgIIFMqbpqvipw0wDQYJKoZIhvcNAQELBQAwbDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEP +MA0GA1UEChMGVk13YXJlMQ8wDQYDVQQLEwZTcHJpbmcxEjAQBgNVBAMTCWxvY2Fs +aG9zdDAgFw0yMzA1MDUxMTI2NThaGA8yMTIzMDQxMTExMjY1OFowbDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEP +MA0GA1UEChMGVk13YXJlMQ8wDQYDVQQLEwZTcHJpbmcxEjAQBgNVBAMTCWxvY2Fs +aG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPwHWxoE3xjRmNdD ++m+e/aFlr5wEGQUdWSDD613OB1w7kqO/audEp3c6HxDB3GPcEL0amJwXgY6CQMYu +sythuZX/EZSc2HdilTBu/5T+mbdWe5JkKThpiA0RYeucQfKuB7zv4ypioa4wiR4D +nPsZXjg95OF8pCzYEssv8wT49v+M3ohWUgfF0FPlMFCSo0YVTuzB1mhDlWKq/jhQ +11WpTmk/dQX+l6ts6bYIcJt4uItG+a68a4FutuSjZdTAE0f5SOYRBpGH96mjLwEP +fW8ZjzvKb9g4R2kiuoPxvCDs1Y/8V2yvKqLyn5Tx9x/DjFmOi0DRK/TgELvNceCb +UDJmhXMCAwEAAaNPME0wHQYDVR0OBBYEFMBIGU1nwix5RS3O5hGLLoMdR1+NMCwG +A1UdEQQlMCOCCWxvY2FsaG9zdIcQAAAAAAAAAAAAAAAAAAAAAYcEfwAAATANBgkq +hkiG9w0BAQsFAAOCAQEAhepfJgTFvqSccsT97XdAZfvB0noQx5NSynRV8NWmeOld +hHP6Fzj6xCxHSYvlUfmX8fVP9EOAuChgcbbuTIVJBu60rnDT21oOOnp8FvNonCV6 +gJ89sCL7wZ77dw2RKIeUFjXXEV3QJhx2wCOVmLxnJspDoKFIEVjfLyiPXKxqe/6b +dG8zzWDZ6z+M2JNCtVoOGpljpHqMPCmbDktncv6H3dDTZ83bmLj1nbpOU587gAJ8 +fl1PiUDyPRIl2cnOJd+wCHKsyym/FL7yzk0OSEZ81I92LpGd/0b2Ld3m/bpe+C4Z +ILzLXTnC6AhrLcDc9QN/EO+BiCL52n7EplNLtSn1LQ== +-----END CERTIFICATE----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/test-key.pem b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/test-key.pem new file mode 100644 index 00000000000..ebdcf202f31 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/ssl/pem/test-key.pem @@ -0,0 +1,59 @@ +Bag Attributes + friendlyName: test-alias + localKeyID: 54 69 6D 65 20 31 36 38 33 32 38 36 31 31 34 30 37 31 +Key Attributes: +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD8B1saBN8Y0ZjX +Q/pvnv2hZa+cBBkFHVkgw+tdzgdcO5Kjv2rnRKd3Oh8Qwdxj3BC9GpicF4GOgkDG +LrMrYbmV/xGUnNh3YpUwbv+U/pm3VnuSZCk4aYgNEWHrnEHyrge87+MqYqGuMIke +A5z7GV44PeThfKQs2BLLL/ME+Pb/jN6IVlIHxdBT5TBQkqNGFU7swdZoQ5Viqv44 +UNdVqU5pP3UF/perbOm2CHCbeLiLRvmuvGuBbrbko2XUwBNH+UjmEQaRh/epoy8B +D31vGY87ym/YOEdpIrqD8bwg7NWP/Fdsryqi8p+U8fcfw4xZjotA0Sv04BC7zXHg +m1AyZoVzAgMBAAECggEAfEqiZqANaF+BqXQIb4Dw42ZTJzWsIyYYnPySOGZRoe5t +QJ03uwtULYv34xtANe1DQgd6SMyc46ugBzzjtprQ3ET5Jhn99U6kdcjf+dpf85dO +hOEppP0CkDNI39nleinSfh6uIOqYgt/D143/nqQhn8oCdSOzkbwT9KnWh1bC9T7I +vFjGfElvt1/xl88qYgrWgYLgXaencNGgiv/4/M0FNhiHEGsVC7SCu6kapC/WIQpE +5IdV+HR+tiLoGZhXlhqorY7QC4xKC4wwafVSiFxqDOQAuK+SMD4TCEv0Aop+c+SE +YBigVTmgVeJkjK7IkTEhKkAEFmRF5/5w+bZD9FhTNQKBgQD+4fNG1ChSU8RdizZT +5dPlDyAxpETSCEXFFVGtPPh2j93HDWn7XugNyjn5FylTH507QlabC+5wZqltdIjK +GRB5MIinQ9/nR2fuwGc9s+0BiSEwNOUB1MWm7wWL/JUIiKq6sTi6sJIfsYg79zco +qxl5WE94aoINx9Utq1cdWhwJTQKBgQD9IjPksd4Jprz8zMrGLzR8k1gqHyhv24qY +EJ7jiHKKAP6xllTUYwh1IBSL6w2j5lfZPpIkb4Jlk2KUoX6fN81pWkBC/fTBUSIB +EHM9bL51+yKEYUbGIy/gANuRbHXsWg3sjUsFTNPN4hGTFk3w2xChCyl/f5us8Lo8 +Z633SNdpvwKBgQCGyDU9XzNzVZihXtx7wS0sE7OSjKtX5cf/UCbA1V0OVUWR3SYO +J0HPCQFfF0BjFHSwwYPKuaR9C8zMdLNhK5/qdh/NU7czNi9fsZ7moh7SkRFbzJzN +OxbKD9t/CzJEMQEXeF/nWTfsSpUgILqqZtAxuuFLbAcaAnJYlCKdAumQgQKBgQCK +mqjJh68pn7gJwGUjoYNe1xtGbSsqHI9F9ovZ0MPO1v6e5M7sQJHH+Fnnxzv/y8e8 +d6tz8e73iX1IHymDKv35uuZHCGF1XOR+qrA/KQUc+vcKf21OXsP/JtkTRs1HLoRD +S5aRf2DWcfvniyYARSNU2xTM8GWgi2ueWbMDHUp+ZwKBgA/swC+K+Jg5DEWm6Sau +e6y+eC6S+SoXEKkI3wf7m9aKoZo0y+jh8Gas6gratlc181pSM8O3vZG0n19b493I +apCFomMLE56zEzvyzfpsNhFhk5MBMCn0LPyzX6MiynRlGyWIj0c99fbHI3pOMufP +WgmVLTZ8uDcSW1MbdUCwFSk5 +-----END PRIVATE KEY----- +Bag Attributes + friendlyName: test-alias + localKeyID: 54 69 6D 65 20 31 36 38 33 32 38 36 31 31 34 30 37 31 +subject=C = US, ST = California, L = Palo Alto, O = VMware, OU = Spring, CN = localhost +issuer=C = US, ST = California, L = Palo Alto, O = VMware, OU = Spring, CN = localhost +-----BEGIN CERTIFICATE----- +MIIDqzCCApOgAwIBAgIIFMqbpqvipw0wDQYJKoZIhvcNAQELBQAwbDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEP +MA0GA1UEChMGVk13YXJlMQ8wDQYDVQQLEwZTcHJpbmcxEjAQBgNVBAMTCWxvY2Fs +aG9zdDAgFw0yMzA1MDUxMTI2NThaGA8yMTIzMDQxMTExMjY1OFowbDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEP +MA0GA1UEChMGVk13YXJlMQ8wDQYDVQQLEwZTcHJpbmcxEjAQBgNVBAMTCWxvY2Fs +aG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPwHWxoE3xjRmNdD ++m+e/aFlr5wEGQUdWSDD613OB1w7kqO/audEp3c6HxDB3GPcEL0amJwXgY6CQMYu +sythuZX/EZSc2HdilTBu/5T+mbdWe5JkKThpiA0RYeucQfKuB7zv4ypioa4wiR4D +nPsZXjg95OF8pCzYEssv8wT49v+M3ohWUgfF0FPlMFCSo0YVTuzB1mhDlWKq/jhQ +11WpTmk/dQX+l6ts6bYIcJt4uItG+a68a4FutuSjZdTAE0f5SOYRBpGH96mjLwEP +fW8ZjzvKb9g4R2kiuoPxvCDs1Y/8V2yvKqLyn5Tx9x/DjFmOi0DRK/TgELvNceCb +UDJmhXMCAwEAAaNPME0wHQYDVR0OBBYEFMBIGU1nwix5RS3O5hGLLoMdR1+NMCwG +A1UdEQQlMCOCCWxvY2FsaG9zdIcQAAAAAAAAAAAAAAAAAAAAAYcEfwAAATANBgkq +hkiG9w0BAQsFAAOCAQEAhepfJgTFvqSccsT97XdAZfvB0noQx5NSynRV8NWmeOld +hHP6Fzj6xCxHSYvlUfmX8fVP9EOAuChgcbbuTIVJBu60rnDT21oOOnp8FvNonCV6 +gJ89sCL7wZ77dw2RKIeUFjXXEV3QJhx2wCOVmLxnJspDoKFIEVjfLyiPXKxqe/6b +dG8zzWDZ6z+M2JNCtVoOGpljpHqMPCmbDktncv6H3dDTZ83bmLj1nbpOU587gAJ8 +fl1PiUDyPRIl2cnOJd+wCHKsyym/FL7yzk0OSEZ81I92LpGd/0b2Ld3m/bpe+C4Z +ILzLXTnC6AhrLcDc9QN/EO+BiCL52n7EplNLtSn1LQ== +-----END CERTIFICATE----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/client/test.jks b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/client/test.jks new file mode 100644 index 0000000000000000000000000000000000000000..74279d80fbac881c51e7a0fadebd9832e904240d GIT binary patch literal 6536 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 literal 0 HcmV?d00001 diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/embedded/jetty/test.jks b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/embedded/jetty/test.jks new file mode 100644 index 0000000000000000000000000000000000000000..74279d80fbac881c51e7a0fadebd9832e904240d GIT binary patch literal 6536 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 literal 0 HcmV?d00001 diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/embedded/netty/test.jks b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/embedded/netty/test.jks new file mode 100644 index 0000000000000000000000000000000000000000..74279d80fbac881c51e7a0fadebd9832e904240d GIT binary patch literal 6536 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 literal 0 HcmV?d00001 diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/embedded/tomcat/test.jks b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/embedded/tomcat/test.jks new file mode 100644 index 0000000000000000000000000000000000000000..74279d80fbac881c51e7a0fadebd9832e904240d GIT binary patch literal 6536 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 literal 0 HcmV?d00001 diff --git a/spring-boot-project/spring-boot/src/test/resources/restricted.jks b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/embedded/undertow/restricted.jks similarity index 100% rename from spring-boot-project/spring-boot/src/test/resources/restricted.jks rename to spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/embedded/undertow/restricted.jks diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/reactive/result/view/template.html b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/reactive/result/view/template.html deleted file mode 100644 index fa22264e235..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/reactive/result/view/template.html +++ /dev/null @@ -1 +0,0 @@ -Hello {{World}} diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/reactive/server/test-cert.pem b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/reactive/server/test-cert.pem new file mode 100644 index 00000000000..245cf8f8f86 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/reactive/server/test-cert.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDqzCCApOgAwIBAgIIFMqbpqvipw0wDQYJKoZIhvcNAQELBQAwbDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEP +MA0GA1UEChMGVk13YXJlMQ8wDQYDVQQLEwZTcHJpbmcxEjAQBgNVBAMTCWxvY2Fs +aG9zdDAgFw0yMzA1MDUxMTI2NThaGA8yMTIzMDQxMTExMjY1OFowbDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEP +MA0GA1UEChMGVk13YXJlMQ8wDQYDVQQLEwZTcHJpbmcxEjAQBgNVBAMTCWxvY2Fs +aG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPwHWxoE3xjRmNdD ++m+e/aFlr5wEGQUdWSDD613OB1w7kqO/audEp3c6HxDB3GPcEL0amJwXgY6CQMYu +sythuZX/EZSc2HdilTBu/5T+mbdWe5JkKThpiA0RYeucQfKuB7zv4ypioa4wiR4D +nPsZXjg95OF8pCzYEssv8wT49v+M3ohWUgfF0FPlMFCSo0YVTuzB1mhDlWKq/jhQ +11WpTmk/dQX+l6ts6bYIcJt4uItG+a68a4FutuSjZdTAE0f5SOYRBpGH96mjLwEP +fW8ZjzvKb9g4R2kiuoPxvCDs1Y/8V2yvKqLyn5Tx9x/DjFmOi0DRK/TgELvNceCb +UDJmhXMCAwEAAaNPME0wHQYDVR0OBBYEFMBIGU1nwix5RS3O5hGLLoMdR1+NMCwG +A1UdEQQlMCOCCWxvY2FsaG9zdIcQAAAAAAAAAAAAAAAAAAAAAYcEfwAAATANBgkq +hkiG9w0BAQsFAAOCAQEAhepfJgTFvqSccsT97XdAZfvB0noQx5NSynRV8NWmeOld +hHP6Fzj6xCxHSYvlUfmX8fVP9EOAuChgcbbuTIVJBu60rnDT21oOOnp8FvNonCV6 +gJ89sCL7wZ77dw2RKIeUFjXXEV3QJhx2wCOVmLxnJspDoKFIEVjfLyiPXKxqe/6b +dG8zzWDZ6z+M2JNCtVoOGpljpHqMPCmbDktncv6H3dDTZ83bmLj1nbpOU587gAJ8 +fl1PiUDyPRIl2cnOJd+wCHKsyym/FL7yzk0OSEZ81I92LpGd/0b2Ld3m/bpe+C4Z +ILzLXTnC6AhrLcDc9QN/EO+BiCL52n7EplNLtSn1LQ== +-----END CERTIFICATE----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/reactive/server/test-key.pem b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/reactive/server/test-key.pem new file mode 100644 index 00000000000..ebdcf202f31 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/reactive/server/test-key.pem @@ -0,0 +1,59 @@ +Bag Attributes + friendlyName: test-alias + localKeyID: 54 69 6D 65 20 31 36 38 33 32 38 36 31 31 34 30 37 31 +Key Attributes: +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD8B1saBN8Y0ZjX +Q/pvnv2hZa+cBBkFHVkgw+tdzgdcO5Kjv2rnRKd3Oh8Qwdxj3BC9GpicF4GOgkDG +LrMrYbmV/xGUnNh3YpUwbv+U/pm3VnuSZCk4aYgNEWHrnEHyrge87+MqYqGuMIke +A5z7GV44PeThfKQs2BLLL/ME+Pb/jN6IVlIHxdBT5TBQkqNGFU7swdZoQ5Viqv44 +UNdVqU5pP3UF/perbOm2CHCbeLiLRvmuvGuBbrbko2XUwBNH+UjmEQaRh/epoy8B +D31vGY87ym/YOEdpIrqD8bwg7NWP/Fdsryqi8p+U8fcfw4xZjotA0Sv04BC7zXHg +m1AyZoVzAgMBAAECggEAfEqiZqANaF+BqXQIb4Dw42ZTJzWsIyYYnPySOGZRoe5t +QJ03uwtULYv34xtANe1DQgd6SMyc46ugBzzjtprQ3ET5Jhn99U6kdcjf+dpf85dO +hOEppP0CkDNI39nleinSfh6uIOqYgt/D143/nqQhn8oCdSOzkbwT9KnWh1bC9T7I +vFjGfElvt1/xl88qYgrWgYLgXaencNGgiv/4/M0FNhiHEGsVC7SCu6kapC/WIQpE +5IdV+HR+tiLoGZhXlhqorY7QC4xKC4wwafVSiFxqDOQAuK+SMD4TCEv0Aop+c+SE +YBigVTmgVeJkjK7IkTEhKkAEFmRF5/5w+bZD9FhTNQKBgQD+4fNG1ChSU8RdizZT +5dPlDyAxpETSCEXFFVGtPPh2j93HDWn7XugNyjn5FylTH507QlabC+5wZqltdIjK +GRB5MIinQ9/nR2fuwGc9s+0BiSEwNOUB1MWm7wWL/JUIiKq6sTi6sJIfsYg79zco +qxl5WE94aoINx9Utq1cdWhwJTQKBgQD9IjPksd4Jprz8zMrGLzR8k1gqHyhv24qY +EJ7jiHKKAP6xllTUYwh1IBSL6w2j5lfZPpIkb4Jlk2KUoX6fN81pWkBC/fTBUSIB +EHM9bL51+yKEYUbGIy/gANuRbHXsWg3sjUsFTNPN4hGTFk3w2xChCyl/f5us8Lo8 +Z633SNdpvwKBgQCGyDU9XzNzVZihXtx7wS0sE7OSjKtX5cf/UCbA1V0OVUWR3SYO +J0HPCQFfF0BjFHSwwYPKuaR9C8zMdLNhK5/qdh/NU7czNi9fsZ7moh7SkRFbzJzN +OxbKD9t/CzJEMQEXeF/nWTfsSpUgILqqZtAxuuFLbAcaAnJYlCKdAumQgQKBgQCK +mqjJh68pn7gJwGUjoYNe1xtGbSsqHI9F9ovZ0MPO1v6e5M7sQJHH+Fnnxzv/y8e8 +d6tz8e73iX1IHymDKv35uuZHCGF1XOR+qrA/KQUc+vcKf21OXsP/JtkTRs1HLoRD +S5aRf2DWcfvniyYARSNU2xTM8GWgi2ueWbMDHUp+ZwKBgA/swC+K+Jg5DEWm6Sau +e6y+eC6S+SoXEKkI3wf7m9aKoZo0y+jh8Gas6gratlc181pSM8O3vZG0n19b493I +apCFomMLE56zEzvyzfpsNhFhk5MBMCn0LPyzX6MiynRlGyWIj0c99fbHI3pOMufP +WgmVLTZ8uDcSW1MbdUCwFSk5 +-----END PRIVATE KEY----- +Bag Attributes + friendlyName: test-alias + localKeyID: 54 69 6D 65 20 31 36 38 33 32 38 36 31 31 34 30 37 31 +subject=C = US, ST = California, L = Palo Alto, O = VMware, OU = Spring, CN = localhost +issuer=C = US, ST = California, L = Palo Alto, O = VMware, OU = Spring, CN = localhost +-----BEGIN CERTIFICATE----- +MIIDqzCCApOgAwIBAgIIFMqbpqvipw0wDQYJKoZIhvcNAQELBQAwbDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEP +MA0GA1UEChMGVk13YXJlMQ8wDQYDVQQLEwZTcHJpbmcxEjAQBgNVBAMTCWxvY2Fs +aG9zdDAgFw0yMzA1MDUxMTI2NThaGA8yMTIzMDQxMTExMjY1OFowbDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEP +MA0GA1UEChMGVk13YXJlMQ8wDQYDVQQLEwZTcHJpbmcxEjAQBgNVBAMTCWxvY2Fs +aG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPwHWxoE3xjRmNdD ++m+e/aFlr5wEGQUdWSDD613OB1w7kqO/audEp3c6HxDB3GPcEL0amJwXgY6CQMYu +sythuZX/EZSc2HdilTBu/5T+mbdWe5JkKThpiA0RYeucQfKuB7zv4ypioa4wiR4D +nPsZXjg95OF8pCzYEssv8wT49v+M3ohWUgfF0FPlMFCSo0YVTuzB1mhDlWKq/jhQ +11WpTmk/dQX+l6ts6bYIcJt4uItG+a68a4FutuSjZdTAE0f5SOYRBpGH96mjLwEP +fW8ZjzvKb9g4R2kiuoPxvCDs1Y/8V2yvKqLyn5Tx9x/DjFmOi0DRK/TgELvNceCb +UDJmhXMCAwEAAaNPME0wHQYDVR0OBBYEFMBIGU1nwix5RS3O5hGLLoMdR1+NMCwG +A1UdEQQlMCOCCWxvY2FsaG9zdIcQAAAAAAAAAAAAAAAAAAAAAYcEfwAAATANBgkq +hkiG9w0BAQsFAAOCAQEAhepfJgTFvqSccsT97XdAZfvB0noQx5NSynRV8NWmeOld +hHP6Fzj6xCxHSYvlUfmX8fVP9EOAuChgcbbuTIVJBu60rnDT21oOOnp8FvNonCV6 +gJ89sCL7wZ77dw2RKIeUFjXXEV3QJhx2wCOVmLxnJspDoKFIEVjfLyiPXKxqe/6b +dG8zzWDZ6z+M2JNCtVoOGpljpHqMPCmbDktncv6H3dDTZ83bmLj1nbpOU587gAJ8 +fl1PiUDyPRIl2cnOJd+wCHKsyym/FL7yzk0OSEZ81I92LpGd/0b2Ld3m/bpe+C4Z +ILzLXTnC6AhrLcDc9QN/EO+BiCL52n7EplNLtSn1LQ== +-----END CERTIFICATE----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/reactive/server/test.jks b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/reactive/server/test.jks new file mode 100644 index 0000000000000000000000000000000000000000..74279d80fbac881c51e7a0fadebd9832e904240d GIT binary patch literal 6536 zcmeI0c`(~++sBhg1SKS>wY8N}TkN5SB3f&Rs-^bOG?ZFmS7NK3T3aeDe?O zAP7VcpyJpH%awavkxaDo=c06?wwZvy6A%E>Rptbeo|eWGOv?%~HIZRO!hidqV`V_& zT%E7G6WyF~G6*EgZ$T(4Jr?Kc&adI>?JmQ7ywGusftA(_S{~0*JN^A0acK`f~ zhLzsc-4W;N0YU&Y z;Xq~pG91VN3I_rK^%hFNu#-#uchOu0C81Yb1T$PF^G9e`u9?bJUu$OJQlq5tPF`o{ zC3MUU2pEf8zgeJuRSUD9YS`S)+l=JqiT0y?MvJPeTH!L9x9PNINX*lr6)fObjirmd zd20m0)h4Qz*qk{G=v32|qDC&WOEAyiaRA;`y6=M~8k3eqA7)Or`i(wOJzbF}=bgRI zSou~_x|~%4tmb~b?MY3tZSY9NMb%(tRMQYE?kk5?vW<2$j~?2>GqVDJCf+{Bu3AvA z=3V?q32>@J$gZc%y73(BD^q|rBX?(;j2_V~hd7hrHM^@0KOGoHpWLBoEQt8({;~@j z4UA8Gg$@@<0?_~gz&s-)26^guw@<;qC&6rH87)h$y*5_LS%c_Xn}OJSYu1mE62DEu z!NN$P@ISXZn&r4%|2lxt;E>~9{cFjOd+@mAKmdcblT_+MejJ`A$v0+V|&vU(Knyb-_UPUUok+VWdi<6$iGN~_!v|7168uQZBsX`dnWFp zDj6`y6FoFx6I>ToAswf;V_Y~?Nq6bB3`_6XfGjljNyaHeIK8`YGhG83nLX}{Hb2Yd zz#djXZKPex6<#SGMt^6f?v4>hF`wzw^Y+-Gk*|jex{Y$m*)Qh1_5JF#AbIPF+*luV zF>x~Ol6MD>RPur6^;*ajzgCec+%b+ayO<2mYN-0sv-6DHI`;0dT!{+@CeSiZVZ`7( zGP5=W52Sw`!}$5L%#=z}woIm>NHA0>)2rF{Z?`YYSPsvr6k4f4fQCT&8K-G#$sG3%A< zxpZ^Yx|?;wAs(V;g8f$U@@KBSnH6bmF_*Tu?6=#l^O?Z1?15TkytxuZeyi2nY8n5w zcK|K*kU!CUj)PZ-&~XhnPuS!sJqsSkExz4~5pcG3W9p`12!IH88KK5M7R zF_|OSdqiqM&A+{6K5$-t6?x?KAsQR)$WXZ$IcvxJnW&0=#9A;N*A(#wf z`aCKNX^n1;2%8WdTH{SiQ2+d`6kINwK<`kjAAPX6EukBSw;q@`iH1A*49{4ZY@UB{ znLS`>`G>$>K@Hl3)G5#cU7U=mHLPl#8`L}3A#g{rb}%?4p&aujNXtvt^F_5Y=i+T2 zRg&wtg_!|amO4}fi+Ad(@n&#Jw*R(FDP3z;(%iBaV3r8uW;`ObW;^+E3w{<_fK8;f za9AoE&u~~a&MRm=y(zM4%5pf-T+yr7@Bs1pMuC*xOp)k1HaR2lG)+5|tG6@&ubI0= z=IDHHS5kuIyAXfv&`y%C*dKQfNtCBOD|@fvJI%tAJ-kD0i=PIp=jLWi=Ld@QRFmXQ zd=k*Dhc!B=n>}o^gEi(deUV*Jr=}8h{LEb?%BYxAl$%u58C6dyover7MTgJugn4qO zreCn}PMMxNm6vG<$a=lgAqG#%=Xow)46?7qZ(6-rkTYl}+{XOf* zPMOGrjG6*Pu*yC$H%)x7+6E?8*#8RQMT+rBn&UCAT;wqW0HJCbZhGS%zuKnr3bZiL zo-fq&0&P?0-h6ne{7i(R)4J`{E)xn24~JjyKXA(T$nA$&VaaM`J>;y!qL-OZHL~V} zI`h-c5Tjxr_+%?Gan{@u?Xtoq)n(GJE$9Wm+_s79qJO7x>t^iPV)q&v^GU7d6rFX< z0>-Jf?Xt@QZtZ=FjA_{^g1X_F*uJs+hbrVZ=j99O0!w<_UecBBZ|X0;3eWYhq8S>3 z^BHZQLkf6Mo*;$-qY4Cx%Hu8w2r;6aK|7^J4n1UZ0)g4T$I@<+v~?f;ia$%WE4gc1 z;xeN)U-a8}S;>y0p`eO^Mv{Dcs%diRw;Rv5`za|?yQ!ZW@iH!$Y{w3}AvE(d=#l2w zNs_W=jq8AGK&xH!pb5))IX0AVdtU_(!dNa|+tF!_CD*WEr`zV5vO;gO*-JFfpZEOQhQ_B)J5b;G_cLN~qJ~W{ zVQfCGbc`&bpJ~nh;Ol|TvsB8L6}I0G$DeHTe`BqmZ1aM2yxXONbAWjG6@b!2Y9M=ic3T z(e|(f{lgSy2xToEQGKSp(Ro`XnicT+MtEonb_rDG#v#th?#DKyWu?mFj$&aLtI&qilAXJh4 zuiN!PTt~1+vr?EaHvaHWMpzVn5TuH?ea07uYZB62Yd}+|)Ga0Zxr%TizZMLs>N4s?`SRLbcj$qZ$azx?@TyaOz{m6YG+$W(m3nbt-UO` zv2FJ(#p2Mw-xImTIoFE{Olp2w;K%XE|GdN4w=U1a&$a4zcK1HK-wXMu!UNBbD7=UB%q=V}k|yh_hPdd>h}8UtEb`*lZ>e_0e{53g**(170 z;~+?qu(tCd`<5DBT$`j_h7dl?QYe__Elw+5c}LZ2UE}1VGQ32s=lD&xe6n7R_NmS8 z>b+sZKN>Na`quY=9$}cyWM-N8&}Tfj?Md%G4)lWu+7`5v%>Fj4gyGFBQLgijIrO_9 zRQeJV#Oc~>al9Ag>EL`$2cIm64vMAtlnz7|uIkg9(z|UO>0KLzg(_!b1Mg-|vi6_X zW)J;>Z?~70qJs)dNm(UepaSgj0gt3u1n3;K5og6O%JuSoExD0FdjX&q%s8)q5E z!;e>9jpt10hO}Iz491smj>PPoT{%@IRgmVLM7C^pEhMgFJ*xC@3liCzVy=Kgui=6z z6*XhwACVbnLfI=V7RMqh;;KT6<+2CA&^ZanLTljZ*(f{TVT_~S^M2A``^4Zyr7gPW zax~2LY7 z5fib}DfM!gQGex}df8B98E$Z*Sa?5?V`b^ju_-0tpT zXEQU0vilJoai-~%hXTa0wr1Q@W4zDY=6gUgKU?GY8H+Rlz*_hKH0lj5Bc=+nj0~{5 z9M|mNUGFZceZku6iutV7vcH~^zClzzC1LS!kFn*JhWW{~J;f_F1~S+nQM{YR-Ecf) zPlZv_N`5$sdcC9d!^2YkyDbWl1`YmvS9KvNr6Sdjrj{d09Y1my(;nf;*>^%BRav@y zIFf@@7`$HRfg-x675REhw%yJ+8yAGv?DD04FiJ|iaAIM?GW7mZmIuEk{i}*{sOG3?Da^m|K!^=>u_NREfN72C40WWtZhP%jCV8EHjTccLtlv6d)6!) zMC#HmKQH$f7_)?_1O}blaH0qYhCWh#D!Bjp;l3YJifDBDNrfS}O`iy_Z?n+d%m#wU zdvtb=4&36Cv}lrb*^OI=WN&x5Zu=4Hg@oZW&1y>+_kG9wz=U7K$S{2Z@i2O#Z-CG} zmic1y!AnDvN9RL9K_nZaSoL*Pgz(6_9^p?<>4;^WVohv~>pd8l&ZVFaNxo7k4~{Nv zNltt@cxk&M#l_#yX`|dSPv;`pJibX2!m<(;Be*+CYAZC+uNK>sJXS9V!2BoM{KbzI uQvcJB{VD4|{Nn%F9{wropR)e%kaZfqSV?_q|IPq@Qf~@?+SM7H@c9QQ6MxeH literal 0 HcmV?d00001 diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/reactive/server/test.p12 b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/reactive/server/test.p12 new file mode 100644 index 0000000000000000000000000000000000000000..e1255f26f6659a9694a412c77aea76ebeb571985 GIT binary patch literal 7441 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 Z4NE5WCo01)iigeN*5<0D^8Z*S{{=9b#?k-) literal 0 HcmV?d00001 diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/server/test-cert-chain.pem b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/server/test-cert-chain.pem new file mode 100644 index 00000000000..df103772cfe --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/server/test-cert-chain.pem @@ -0,0 +1,32 @@ +-----BEGIN TRUSTED CERTIFICATE----- +MIIClzCCAgACCQCPbjkRoMVEQDANBgkqhkiG9w0BAQUFADCBjzELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28x +DTALBgNVBAoMBFRlc3QxDTALBgNVBAsMBFRlc3QxFDASBgNVBAMMC2V4YW1wbGUu +Y29tMR8wHQYJKoZIhvcNAQkBFhB0ZXN0QGV4YW1wbGUuY29tMB4XDTIwMDMyNzIx +NTgwNFoXDTIxMDMyNzIxNTgwNFowgY8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApD +YWxpZm9ybmlhMRYwFAYDVQQHDA1TYW4gRnJhbmNpc2NvMQ0wCwYDVQQKDARUZXN0 +MQ0wCwYDVQQLDARUZXN0MRQwEgYDVQQDDAtleGFtcGxlLmNvbTEfMB0GCSqGSIb3 +DQEJARYQdGVzdEBleGFtcGxlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC +gYEA1YzixWEoyzrd20C2R1gjyPCoPfFLlG6UYTyT0tueNy6yjv6qbJ8lcZg7616O +3I9LuOHhZh9U+fCDCgPfiDdyJfDEW/P+dsOMFyMUXPrJPze2yPpOnvV8iJ5DM93u +fEVhCCyzLdYu0P2P3hU2W+T3/Im9DA7FOPA2vF1SrIJ2qtUCAwEAATANBgkqhkiG +9w0BAQUFAAOBgQBdShkwUv78vkn1jAdtfbB+7mpV9tufVdo29j7pmotTCz3ny5fc +zLEfeu6JPugAR71JYbc2CqGrMneSk1zT91EH6ohIz8OR5VNvzB7N7q65Ci7OFMPl +ly6k3rHpMCBtHoyNFhNVfPLxGJ9VlWFKLgIAbCmL4OIQm1l6Fr1MSM38Zw== +-----END TRUSTED CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICjzCCAfgCAQEwDQYJKoZIhvcNAQEFBQAwgY8xCzAJBgNVBAYTAlVTMRMwEQYD +VQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1TYW4gRnJhbmNpc2NvMQ0wCwYDVQQK +DARUZXN0MQ0wCwYDVQQLDARUZXN0MRQwEgYDVQQDDAtleGFtcGxlLmNvbTEfMB0G +CSqGSIb3DQEJARYQdGVzdEBleGFtcGxlLmNvbTAeFw0yMDAzMjcyMjAxNDZaFw0y +MTAzMjcyMjAxNDZaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5p +YTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwEVGVzdDENMAsGA1UE +CwwEVGVzdDEUMBIGA1UEAwwLZXhhbXBsZS5jb20xHzAdBgkqhkiG9w0BCQEWEHRl +c3RAZXhhbXBsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM7kd2cj +F49wm1+OQ7Q5GE96cXueWNPr/Nwei71tf6G4BmE0B+suXHEvnLpHTj9pdX/ZzBIK +8jIZ/x8RnSduK/Ky+zm1QMYUWZtWCAgCW8WzgB69Cn/hQG8KSX3S9bqODuQAvP54 +GQJD7+4kVuNBGjFb4DaD4nvMmPtALSZf8ZCZAgMBAAEwDQYJKoZIhvcNAQEFBQAD +gYEAOn6X8+0VVlDjF+TvTgI0KIasA6nDm+KXe7LVtfvqWqQZH4qyd2uiwcDM3Aux +a/OsPdOw0j+NqFDBd3mSMhSVgfvXdK6j9WaxY1VGXyaidLARgvn63wfzgr857sQW +c8eSxbwEQxwlMvVxW6Os4VhCfUQr8VrBrvPa2zs+6IlK+Ug= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/server/test-cert.pem b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/server/test-cert.pem new file mode 100644 index 00000000000..245cf8f8f86 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/server/test-cert.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDqzCCApOgAwIBAgIIFMqbpqvipw0wDQYJKoZIhvcNAQELBQAwbDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEP +MA0GA1UEChMGVk13YXJlMQ8wDQYDVQQLEwZTcHJpbmcxEjAQBgNVBAMTCWxvY2Fs +aG9zdDAgFw0yMzA1MDUxMTI2NThaGA8yMTIzMDQxMTExMjY1OFowbDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEP +MA0GA1UEChMGVk13YXJlMQ8wDQYDVQQLEwZTcHJpbmcxEjAQBgNVBAMTCWxvY2Fs +aG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPwHWxoE3xjRmNdD ++m+e/aFlr5wEGQUdWSDD613OB1w7kqO/audEp3c6HxDB3GPcEL0amJwXgY6CQMYu +sythuZX/EZSc2HdilTBu/5T+mbdWe5JkKThpiA0RYeucQfKuB7zv4ypioa4wiR4D +nPsZXjg95OF8pCzYEssv8wT49v+M3ohWUgfF0FPlMFCSo0YVTuzB1mhDlWKq/jhQ +11WpTmk/dQX+l6ts6bYIcJt4uItG+a68a4FutuSjZdTAE0f5SOYRBpGH96mjLwEP +fW8ZjzvKb9g4R2kiuoPxvCDs1Y/8V2yvKqLyn5Tx9x/DjFmOi0DRK/TgELvNceCb +UDJmhXMCAwEAAaNPME0wHQYDVR0OBBYEFMBIGU1nwix5RS3O5hGLLoMdR1+NMCwG +A1UdEQQlMCOCCWxvY2FsaG9zdIcQAAAAAAAAAAAAAAAAAAAAAYcEfwAAATANBgkq +hkiG9w0BAQsFAAOCAQEAhepfJgTFvqSccsT97XdAZfvB0noQx5NSynRV8NWmeOld +hHP6Fzj6xCxHSYvlUfmX8fVP9EOAuChgcbbuTIVJBu60rnDT21oOOnp8FvNonCV6 +gJ89sCL7wZ77dw2RKIeUFjXXEV3QJhx2wCOVmLxnJspDoKFIEVjfLyiPXKxqe/6b +dG8zzWDZ6z+M2JNCtVoOGpljpHqMPCmbDktncv6H3dDTZ83bmLj1nbpOU587gAJ8 +fl1PiUDyPRIl2cnOJd+wCHKsyym/FL7yzk0OSEZ81I92LpGd/0b2Ld3m/bpe+C4Z +ILzLXTnC6AhrLcDc9QN/EO+BiCL52n7EplNLtSn1LQ== +-----END CERTIFICATE----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/server/test-key.pem b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/server/test-key.pem new file mode 100644 index 00000000000..ebdcf202f31 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/server/test-key.pem @@ -0,0 +1,59 @@ +Bag Attributes + friendlyName: test-alias + localKeyID: 54 69 6D 65 20 31 36 38 33 32 38 36 31 31 34 30 37 31 +Key Attributes: +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD8B1saBN8Y0ZjX +Q/pvnv2hZa+cBBkFHVkgw+tdzgdcO5Kjv2rnRKd3Oh8Qwdxj3BC9GpicF4GOgkDG +LrMrYbmV/xGUnNh3YpUwbv+U/pm3VnuSZCk4aYgNEWHrnEHyrge87+MqYqGuMIke +A5z7GV44PeThfKQs2BLLL/ME+Pb/jN6IVlIHxdBT5TBQkqNGFU7swdZoQ5Viqv44 +UNdVqU5pP3UF/perbOm2CHCbeLiLRvmuvGuBbrbko2XUwBNH+UjmEQaRh/epoy8B +D31vGY87ym/YOEdpIrqD8bwg7NWP/Fdsryqi8p+U8fcfw4xZjotA0Sv04BC7zXHg +m1AyZoVzAgMBAAECggEAfEqiZqANaF+BqXQIb4Dw42ZTJzWsIyYYnPySOGZRoe5t +QJ03uwtULYv34xtANe1DQgd6SMyc46ugBzzjtprQ3ET5Jhn99U6kdcjf+dpf85dO +hOEppP0CkDNI39nleinSfh6uIOqYgt/D143/nqQhn8oCdSOzkbwT9KnWh1bC9T7I +vFjGfElvt1/xl88qYgrWgYLgXaencNGgiv/4/M0FNhiHEGsVC7SCu6kapC/WIQpE +5IdV+HR+tiLoGZhXlhqorY7QC4xKC4wwafVSiFxqDOQAuK+SMD4TCEv0Aop+c+SE +YBigVTmgVeJkjK7IkTEhKkAEFmRF5/5w+bZD9FhTNQKBgQD+4fNG1ChSU8RdizZT +5dPlDyAxpETSCEXFFVGtPPh2j93HDWn7XugNyjn5FylTH507QlabC+5wZqltdIjK +GRB5MIinQ9/nR2fuwGc9s+0BiSEwNOUB1MWm7wWL/JUIiKq6sTi6sJIfsYg79zco +qxl5WE94aoINx9Utq1cdWhwJTQKBgQD9IjPksd4Jprz8zMrGLzR8k1gqHyhv24qY +EJ7jiHKKAP6xllTUYwh1IBSL6w2j5lfZPpIkb4Jlk2KUoX6fN81pWkBC/fTBUSIB +EHM9bL51+yKEYUbGIy/gANuRbHXsWg3sjUsFTNPN4hGTFk3w2xChCyl/f5us8Lo8 +Z633SNdpvwKBgQCGyDU9XzNzVZihXtx7wS0sE7OSjKtX5cf/UCbA1V0OVUWR3SYO +J0HPCQFfF0BjFHSwwYPKuaR9C8zMdLNhK5/qdh/NU7czNi9fsZ7moh7SkRFbzJzN +OxbKD9t/CzJEMQEXeF/nWTfsSpUgILqqZtAxuuFLbAcaAnJYlCKdAumQgQKBgQCK +mqjJh68pn7gJwGUjoYNe1xtGbSsqHI9F9ovZ0MPO1v6e5M7sQJHH+Fnnxzv/y8e8 +d6tz8e73iX1IHymDKv35uuZHCGF1XOR+qrA/KQUc+vcKf21OXsP/JtkTRs1HLoRD +S5aRf2DWcfvniyYARSNU2xTM8GWgi2ueWbMDHUp+ZwKBgA/swC+K+Jg5DEWm6Sau +e6y+eC6S+SoXEKkI3wf7m9aKoZo0y+jh8Gas6gratlc181pSM8O3vZG0n19b493I +apCFomMLE56zEzvyzfpsNhFhk5MBMCn0LPyzX6MiynRlGyWIj0c99fbHI3pOMufP +WgmVLTZ8uDcSW1MbdUCwFSk5 +-----END PRIVATE KEY----- +Bag Attributes + friendlyName: test-alias + localKeyID: 54 69 6D 65 20 31 36 38 33 32 38 36 31 31 34 30 37 31 +subject=C = US, ST = California, L = Palo Alto, O = VMware, OU = Spring, CN = localhost +issuer=C = US, ST = California, L = Palo Alto, O = VMware, OU = Spring, CN = localhost +-----BEGIN CERTIFICATE----- +MIIDqzCCApOgAwIBAgIIFMqbpqvipw0wDQYJKoZIhvcNAQELBQAwbDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEP +MA0GA1UEChMGVk13YXJlMQ8wDQYDVQQLEwZTcHJpbmcxEjAQBgNVBAMTCWxvY2Fs +aG9zdDAgFw0yMzA1MDUxMTI2NThaGA8yMTIzMDQxMTExMjY1OFowbDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEP +MA0GA1UEChMGVk13YXJlMQ8wDQYDVQQLEwZTcHJpbmcxEjAQBgNVBAMTCWxvY2Fs +aG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPwHWxoE3xjRmNdD ++m+e/aFlr5wEGQUdWSDD613OB1w7kqO/audEp3c6HxDB3GPcEL0amJwXgY6CQMYu +sythuZX/EZSc2HdilTBu/5T+mbdWe5JkKThpiA0RYeucQfKuB7zv4ypioa4wiR4D +nPsZXjg95OF8pCzYEssv8wT49v+M3ohWUgfF0FPlMFCSo0YVTuzB1mhDlWKq/jhQ +11WpTmk/dQX+l6ts6bYIcJt4uItG+a68a4FutuSjZdTAE0f5SOYRBpGH96mjLwEP +fW8ZjzvKb9g4R2kiuoPxvCDs1Y/8V2yvKqLyn5Tx9x/DjFmOi0DRK/TgELvNceCb +UDJmhXMCAwEAAaNPME0wHQYDVR0OBBYEFMBIGU1nwix5RS3O5hGLLoMdR1+NMCwG +A1UdEQQlMCOCCWxvY2FsaG9zdIcQAAAAAAAAAAAAAAAAAAAAAYcEfwAAATANBgkq +hkiG9w0BAQsFAAOCAQEAhepfJgTFvqSccsT97XdAZfvB0noQx5NSynRV8NWmeOld +hHP6Fzj6xCxHSYvlUfmX8fVP9EOAuChgcbbuTIVJBu60rnDT21oOOnp8FvNonCV6 +gJ89sCL7wZ77dw2RKIeUFjXXEV3QJhx2wCOVmLxnJspDoKFIEVjfLyiPXKxqe/6b +dG8zzWDZ6z+M2JNCtVoOGpljpHqMPCmbDktncv6H3dDTZ83bmLj1nbpOU587gAJ8 +fl1PiUDyPRIl2cnOJd+wCHKsyym/FL7yzk0OSEZ81I92LpGd/0b2Ld3m/bpe+C4Z +ILzLXTnC6AhrLcDc9QN/EO+BiCL52n7EplNLtSn1LQ== +-----END CERTIFICATE----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/server/test.jks b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/server/test.jks new file mode 100644 index 0000000000000000000000000000000000000000..74279d80fbac881c51e7a0fadebd9832e904240d GIT binary patch literal 6536 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 literal 0 HcmV?d00001 diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/server/test.p12 b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/server/test.p12 new file mode 100644 index 0000000000000000000000000000000000000000..e1255f26f6659a9694a412c77aea76ebeb571985 GIT binary patch literal 7441 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 Z4NE5WCo01)iigeN*5<0D^8Z*S{{=9b#?k-) literal 0 HcmV?d00001 diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/context/conf.properties b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/context/conf.properties deleted file mode 100644 index 0eb014d0ff2..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/context/conf.properties +++ /dev/null @@ -1 +0,0 @@ -context=/example diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/server/test-cert.pem b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/server/test-cert.pem new file mode 100644 index 00000000000..245cf8f8f86 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/server/test-cert.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDqzCCApOgAwIBAgIIFMqbpqvipw0wDQYJKoZIhvcNAQELBQAwbDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEP +MA0GA1UEChMGVk13YXJlMQ8wDQYDVQQLEwZTcHJpbmcxEjAQBgNVBAMTCWxvY2Fs +aG9zdDAgFw0yMzA1MDUxMTI2NThaGA8yMTIzMDQxMTExMjY1OFowbDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEP +MA0GA1UEChMGVk13YXJlMQ8wDQYDVQQLEwZTcHJpbmcxEjAQBgNVBAMTCWxvY2Fs +aG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPwHWxoE3xjRmNdD ++m+e/aFlr5wEGQUdWSDD613OB1w7kqO/audEp3c6HxDB3GPcEL0amJwXgY6CQMYu +sythuZX/EZSc2HdilTBu/5T+mbdWe5JkKThpiA0RYeucQfKuB7zv4ypioa4wiR4D +nPsZXjg95OF8pCzYEssv8wT49v+M3ohWUgfF0FPlMFCSo0YVTuzB1mhDlWKq/jhQ +11WpTmk/dQX+l6ts6bYIcJt4uItG+a68a4FutuSjZdTAE0f5SOYRBpGH96mjLwEP +fW8ZjzvKb9g4R2kiuoPxvCDs1Y/8V2yvKqLyn5Tx9x/DjFmOi0DRK/TgELvNceCb +UDJmhXMCAwEAAaNPME0wHQYDVR0OBBYEFMBIGU1nwix5RS3O5hGLLoMdR1+NMCwG +A1UdEQQlMCOCCWxvY2FsaG9zdIcQAAAAAAAAAAAAAAAAAAAAAYcEfwAAATANBgkq +hkiG9w0BAQsFAAOCAQEAhepfJgTFvqSccsT97XdAZfvB0noQx5NSynRV8NWmeOld +hHP6Fzj6xCxHSYvlUfmX8fVP9EOAuChgcbbuTIVJBu60rnDT21oOOnp8FvNonCV6 +gJ89sCL7wZ77dw2RKIeUFjXXEV3QJhx2wCOVmLxnJspDoKFIEVjfLyiPXKxqe/6b +dG8zzWDZ6z+M2JNCtVoOGpljpHqMPCmbDktncv6H3dDTZ83bmLj1nbpOU587gAJ8 +fl1PiUDyPRIl2cnOJd+wCHKsyym/FL7yzk0OSEZ81I92LpGd/0b2Ld3m/bpe+C4Z +ILzLXTnC6AhrLcDc9QN/EO+BiCL52n7EplNLtSn1LQ== +-----END CERTIFICATE----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/server/test-key.pem b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/server/test-key.pem new file mode 100644 index 00000000000..ebdcf202f31 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/server/test-key.pem @@ -0,0 +1,59 @@ +Bag Attributes + friendlyName: test-alias + localKeyID: 54 69 6D 65 20 31 36 38 33 32 38 36 31 31 34 30 37 31 +Key Attributes: +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD8B1saBN8Y0ZjX +Q/pvnv2hZa+cBBkFHVkgw+tdzgdcO5Kjv2rnRKd3Oh8Qwdxj3BC9GpicF4GOgkDG +LrMrYbmV/xGUnNh3YpUwbv+U/pm3VnuSZCk4aYgNEWHrnEHyrge87+MqYqGuMIke +A5z7GV44PeThfKQs2BLLL/ME+Pb/jN6IVlIHxdBT5TBQkqNGFU7swdZoQ5Viqv44 +UNdVqU5pP3UF/perbOm2CHCbeLiLRvmuvGuBbrbko2XUwBNH+UjmEQaRh/epoy8B +D31vGY87ym/YOEdpIrqD8bwg7NWP/Fdsryqi8p+U8fcfw4xZjotA0Sv04BC7zXHg +m1AyZoVzAgMBAAECggEAfEqiZqANaF+BqXQIb4Dw42ZTJzWsIyYYnPySOGZRoe5t +QJ03uwtULYv34xtANe1DQgd6SMyc46ugBzzjtprQ3ET5Jhn99U6kdcjf+dpf85dO +hOEppP0CkDNI39nleinSfh6uIOqYgt/D143/nqQhn8oCdSOzkbwT9KnWh1bC9T7I +vFjGfElvt1/xl88qYgrWgYLgXaencNGgiv/4/M0FNhiHEGsVC7SCu6kapC/WIQpE +5IdV+HR+tiLoGZhXlhqorY7QC4xKC4wwafVSiFxqDOQAuK+SMD4TCEv0Aop+c+SE +YBigVTmgVeJkjK7IkTEhKkAEFmRF5/5w+bZD9FhTNQKBgQD+4fNG1ChSU8RdizZT +5dPlDyAxpETSCEXFFVGtPPh2j93HDWn7XugNyjn5FylTH507QlabC+5wZqltdIjK +GRB5MIinQ9/nR2fuwGc9s+0BiSEwNOUB1MWm7wWL/JUIiKq6sTi6sJIfsYg79zco +qxl5WE94aoINx9Utq1cdWhwJTQKBgQD9IjPksd4Jprz8zMrGLzR8k1gqHyhv24qY +EJ7jiHKKAP6xllTUYwh1IBSL6w2j5lfZPpIkb4Jlk2KUoX6fN81pWkBC/fTBUSIB +EHM9bL51+yKEYUbGIy/gANuRbHXsWg3sjUsFTNPN4hGTFk3w2xChCyl/f5us8Lo8 +Z633SNdpvwKBgQCGyDU9XzNzVZihXtx7wS0sE7OSjKtX5cf/UCbA1V0OVUWR3SYO +J0HPCQFfF0BjFHSwwYPKuaR9C8zMdLNhK5/qdh/NU7czNi9fsZ7moh7SkRFbzJzN +OxbKD9t/CzJEMQEXeF/nWTfsSpUgILqqZtAxuuFLbAcaAnJYlCKdAumQgQKBgQCK +mqjJh68pn7gJwGUjoYNe1xtGbSsqHI9F9ovZ0MPO1v6e5M7sQJHH+Fnnxzv/y8e8 +d6tz8e73iX1IHymDKv35uuZHCGF1XOR+qrA/KQUc+vcKf21OXsP/JtkTRs1HLoRD +S5aRf2DWcfvniyYARSNU2xTM8GWgi2ueWbMDHUp+ZwKBgA/swC+K+Jg5DEWm6Sau +e6y+eC6S+SoXEKkI3wf7m9aKoZo0y+jh8Gas6gratlc181pSM8O3vZG0n19b493I +apCFomMLE56zEzvyzfpsNhFhk5MBMCn0LPyzX6MiynRlGyWIj0c99fbHI3pOMufP +WgmVLTZ8uDcSW1MbdUCwFSk5 +-----END PRIVATE KEY----- +Bag Attributes + friendlyName: test-alias + localKeyID: 54 69 6D 65 20 31 36 38 33 32 38 36 31 31 34 30 37 31 +subject=C = US, ST = California, L = Palo Alto, O = VMware, OU = Spring, CN = localhost +issuer=C = US, ST = California, L = Palo Alto, O = VMware, OU = Spring, CN = localhost +-----BEGIN CERTIFICATE----- +MIIDqzCCApOgAwIBAgIIFMqbpqvipw0wDQYJKoZIhvcNAQELBQAwbDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEP +MA0GA1UEChMGVk13YXJlMQ8wDQYDVQQLEwZTcHJpbmcxEjAQBgNVBAMTCWxvY2Fs +aG9zdDAgFw0yMzA1MDUxMTI2NThaGA8yMTIzMDQxMTExMjY1OFowbDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEP +MA0GA1UEChMGVk13YXJlMQ8wDQYDVQQLEwZTcHJpbmcxEjAQBgNVBAMTCWxvY2Fs +aG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPwHWxoE3xjRmNdD ++m+e/aFlr5wEGQUdWSDD613OB1w7kqO/audEp3c6HxDB3GPcEL0amJwXgY6CQMYu +sythuZX/EZSc2HdilTBu/5T+mbdWe5JkKThpiA0RYeucQfKuB7zv4ypioa4wiR4D +nPsZXjg95OF8pCzYEssv8wT49v+M3ohWUgfF0FPlMFCSo0YVTuzB1mhDlWKq/jhQ +11WpTmk/dQX+l6ts6bYIcJt4uItG+a68a4FutuSjZdTAE0f5SOYRBpGH96mjLwEP +fW8ZjzvKb9g4R2kiuoPxvCDs1Y/8V2yvKqLyn5Tx9x/DjFmOi0DRK/TgELvNceCb +UDJmhXMCAwEAAaNPME0wHQYDVR0OBBYEFMBIGU1nwix5RS3O5hGLLoMdR1+NMCwG +A1UdEQQlMCOCCWxvY2FsaG9zdIcQAAAAAAAAAAAAAAAAAAAAAYcEfwAAATANBgkq +hkiG9w0BAQsFAAOCAQEAhepfJgTFvqSccsT97XdAZfvB0noQx5NSynRV8NWmeOld +hHP6Fzj6xCxHSYvlUfmX8fVP9EOAuChgcbbuTIVJBu60rnDT21oOOnp8FvNonCV6 +gJ89sCL7wZ77dw2RKIeUFjXXEV3QJhx2wCOVmLxnJspDoKFIEVjfLyiPXKxqe/6b +dG8zzWDZ6z+M2JNCtVoOGpljpHqMPCmbDktncv6H3dDTZ83bmLj1nbpOU587gAJ8 +fl1PiUDyPRIl2cnOJd+wCHKsyym/FL7yzk0OSEZ81I92LpGd/0b2Ld3m/bpe+C4Z +ILzLXTnC6AhrLcDc9QN/EO+BiCL52n7EplNLtSn1LQ== +-----END CERTIFICATE----- diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/server/test.jks b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/server/test.jks new file mode 100644 index 0000000000000000000000000000000000000000..74279d80fbac881c51e7a0fadebd9832e904240d GIT binary patch literal 6536 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 literal 0 HcmV?d00001 diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/server/test.p12 b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/server/test.p12 new file mode 100644 index 0000000000000000000000000000000000000000..e1255f26f6659a9694a412c77aea76ebeb571985 GIT binary patch literal 7441 zcmbW6RZtw=` zt$DgrQ|IB-UR&xseYI;HSRffD0uT`vNctTal_^vv^ac|M24)A67J~vw^Z&}(ut0Rp z|CK_Q0R^H<{FOyufk;`%=>OA&fd)j#4n+D#6o8rks{;uWrVZo$cZdOF2I2qEisKJ8 z<)tToiPPmNGqo*FrCCQnV8BKIQo=BhQT}@(0xA*!Muv=P6e@dD7CaqZibuIelVZ2Np4Wy7W^a zQkT@y5T1wk=9|LKIi}_)yOAPE#+}y<>3PBac^m^aNMWqiyLVw~M!e|NokBGY9+-g%sKyHh85r}avHUn1Lf$#%6?NI^<)gpBkm+Zgz$h3YMt zn7Alr6J*ur@W_kZVE2YG<7?C74#mjjHWR$s;Wt5!DG~ zn6T{sWHY0mkAYF_i|2eN7kpZ1l`3g7LWwzx+=!DeB_)%WZiX#x=SPGtRN0m&G<2ydEqUMcW zsB$2%gdgdm;HV=9`PHyU5wLmfMV|9zO|aan9TgS`n24pp$z3ykIPdE~THH$R$BQXq zxN9c;sMeCPlG<-@hy(dGoGWt=G3LzLVyx0|{mkxY70-T5H-7V2e5t0C0Je1c`*nopzWq|&a>%*8;aADA9j2o=NR;eO z(~rpwI;Wt~L&?wRCR&qWr|z~+ZMXVyThyR%YGLm`F`hxcfbIHlhR6}48vlr5@m!<> zUp^w?`@09Y#KZ>Mr;R!C)y()AP+*e!!>DPx#>P~9&Za)GR4rB|pc;sBcLxoZ(=+Ox zFB+A&a2EtAr;fJyusBw8l7)@dza==RILN2!KoC_yk?0aduYg5ZF&uN@V@sbtP$3he zx~9@@cPsd!&@AB>hmGd&#?ekejme0MpBYQzt1S|>Rq-nl6W)+Fc-m%)q)%jRX!{9c zqO#JA>i2r}bdQx|c1tDb$1ce|Jep%&Wi+;pc9=PAWMoa)q99h!FmT#i`3<4_5%u89 z7;=Zn?t`H1hYa%p$zJKG`}~UeYf*12HX*z570^djy|TcmseCJTNUhF2P~+Yph!2by z&jqAV)S$=LyHV;hB2?(5BI4Z#pfU*CjdAD8~{!LD}Wuq0>BC|0oeaNE-06h(toRz>ql2(uYjYLU%A^i`a zNh?P1z`1T}rkRs_WYfJIU3hN6Nx|w0ncr#QwYVyUIDCcWSGz zdU2f(9pq79DHoyTQagX~*|SOV?m0JLYyS>BrTJCv(%QQp9R+Kja_rt)yjzXw2r|YVV{~jBx^k%`hHS~wpN6Xtc6A@KGaN+km z5lD5Gc;B}(ATx4Uh(!}fdyJ(vBuz}y(hgLOL(#-nRpY6Dnwakzw#scVMHE?i`h7ZP zZG4c7q+LBJ8yz9*+`e{m9+0yZ^xrYQzxUi{J`dyedz>20U|AqIX1f>O{+@yGW0WyZ z5=HAHt5lG|a^MqC;}B?uv~ZZY(!?Ee`EFZ?Px2M`)Xd zqEQfo#Aj)9;-dI?Ae&?ag#ptP8zJ#=5&_4%X<-Q?+iiI)hf^?T3(@sJYFB6ih&g~bsFk6Gl zu``&Ff32|C#jd2dsj8u&MFmck;;)_~eszU9@Fko41}TxB5=0(KQHXh5@Y#PkQq)1_ z02h~LoD~3eb1LQP$+hOB`}(=ZruevKuGq`v<5r3~)5dUg29ly_sH^LV9u~adZpl6& zMKytIWQ{I~kQm=)EB*97tQcCA&BzAwh+}o`v7o^#i#o?OdexYr2Ws9ObDYy z@7N*!%^xF~Iph;F*(`lM@z*Bl@pNVC3vToPQ)X1R&t=#qjS8@IUR-=sSl*{})_0s=zQnU4Y8T6_a#W=<6>3KyPx$lX{E^YKJz}HoA+mJCa??VEFE5qld{#islJ_V4)nso={SH66@Y@liIVF=AxP!Q zfwcM8bhZD8PLH$#%0Vs@Mrd-~(a z1}?>ss&2(#(&i9CWS`lYCGFCd@Hou9jY9fJ<|o@Zg?guNJLSr|d;^)MMCfZ3o&$KB6YM0zgsx=)Wa&A;IA_(z z3oCt2{Rm&a4s3;9^uL!W&aiKNmv|5LyYna9fmcX(tPMKO~Z9XI!uLzyqU-?&yl#? zY8Ew|yGTW$I5cra|L(^q2})_QS@_`Vtgs?c5})+od zXCv8`sRn}wOcb9bQ;hL`B=BhHII9kLg$Z4Os#t*?Rj%pKzJ5Kluf-|$B!NnEHeVdS z;FQ|j)=s3J?bkODcZ!cY3IeP{>vM;U?i-#kjhr)c=6KhdhyNhs3>#Z-FD7h&`P+JM z%Awbd@F-`~_zDCyj9e2l2Gs-5e8m97e9ke7IwP1nv?4!ph;_4BSu`y;VX-jc)A-0M zWFz8SVXi(L@0aA}lTAUL{yNMP%iS)i53@0(CMGW*7EuZ~j!4`3hd0(PlJJl_#DlQ9 z`jx@wcadhujX+NjZKIsO&2&8YEDVWu!#G_PPgprD?Zb@ILpDstWM3hSwz~50D0(hU z$Hpoyq~TO!nN^w9xD#8DY8}?boHvm_SxF3F5iXehM$}{8(y;ZKUPW$5clf#2a@4k| z5O3gWl;1lTsB*p;PR+`nrx0*>a`%gP!0b>@Np)c^blRce;D=+pqzucL-e*hVev`O0 zo>AMm(J7=fzy8rue>IDz%4>^>iZp|xi`ZaPc5S1ikTZ20Qo{)ouyd08fiDRN$2`9| zTaOA`9*bM_ry-;9e%AHVht;178Yz^6;JsKnQ(pmVN-f);&xNQ@2p0B&Uh$cApUO~^ zAp)0|I(341T=$IIij6i!!LK9anS^$86s%?}2JM8*#U$;db8z{yl(y7)s9Y6~6xIPY z)4crpHaopcC(o+FMdLo@UQ)If3b%63k&JYhdJOo=1DF0h1uJT2*Pk??8Mw|!5Bxws z8O4>#Y`n{^h?l@QkbLcH@}|mGFnRHg;ljjkr>;87BQRtdbSMT`v;+n0_Dfj z>H#SHJ)Kw|3)?9aoMUfn)nGf9-aQ8q_!;N7pBU@UaTL>f3#oE^4t~pq_qlv=RV&&z zcC3wrynNZgR8060hv`2*aiE1S+<0#fU&R~wtX`U`VyzIBL9MyEh3BppXpZ;NF6Kd7 z(2q*!Q3>dzBo$KK&iESFjH%yQTX@zf-U{%3UEYQNJ-0f6mz~H^k?HVI$V=a}hBM;W zx~?vbR^0D8WF!-5VsX*yju$vQNX~-lC?%&s)0xL@rj9T3smI}E!xFV}>WZQF1h?@` zh0Arxwgqf@MQks1LU!7iLZxcCTeQcH)Kc1-B+=bihbM*ttpB!z?%v~o8h-Z7TeBjC zAy+xf6qkEHE_yc2AKMjAgn8BCxqLoFF8Ma8w-=aL zcF4UECC?{;UXz-{7B`>HTJUMB#5MF)^Ar5DnrEHNb;>eB)0cx4xft%$!(po}2AkF_ zsr9@VPaIKMygGN;(3__oO3Ew3OszBXG8KpUu2R6mvD4q#&ud04LiIvk zH$vD8ts(ZLf%CJE98WuyJ{+h`?l2R{V-skJi^i9vOwo-Zz)jQza(>5a?uSVgaGIO_jny8|?70 zi2>KiU{$F`@4X6X3F|DJ32}0vI*MUW(5W-}h54_A$tP}xtdlwg@z%wT192HOVtjcD zWb&NwBCmEmd7Sr+yI{s9qtrsdRuz@-=JNAF7whuR6c)w50!Z~4uATgkSSgG$0~Cn( zCPVq7>WK5*a@y5v^+i6I;B>Ggq~{v}DWSAxi=fvc-4>?YKlYyxR$2^+TO`Uw1+T!S z60H_T$*%})Ljw{F3?JG*(QY=0sEw5~YmN0?L*ahCWWRQ3UnJmBVE=Gqq_$h77zcq~ zgLe$`4bgd5T?TxFlcBPL7LHgziUDf0NNAB+gvM$^=Bsq05+Teb+kl13Q89c4h#97f z?TiOs3lEpALYUa?7^KqPW5D~fea^>O?N_m$BqaF9yMNv!oe}xhyKvjlPTusvOWUnW zteoqXw$-VF0RWt?f~zl?ZG9UN6rT$H$Y{7bgsii{AC_4RVi%}tg!}b;_kv>D0TaLU zBrrEQr!Kc|T)M?JopnLk$_WZ@BGs)uY*})uZ z1SJB|y&B}Qp1l_u6G`=UV z`xv6bt+X)oZH#twLPtw5&4md3=jWrrfkR)0Y~_pYR|9B2Q)t(#DyB!u*2Mj90F!9C zAA!L=hulyGg37`a%xH#OY{hskH5APv;z9Gl6pfLv)g?c|gz&=?N zX6&rbrHw@x%_=f`Fi#MHq*j>|QYWo2odCf7;}Vmf3OVglPQtuHb-AlNM-BDi_y%Us z*7G5;zn{<=O408X?$Bt-H<+WJ4axiw0;AD72y<)5GBV!A0RVe@A5m&(J}poXXnnafeCQFrU$Dr$up)N|bGlsSsk2!~z46LM+~nnRD# zB(N!1m|e6ik!fHiU=&8t95{6_+d_(W4ZA6gL5wEHm*A6u4*d`2md&3s$fRGXq=S0va$1ZJ|5+S zIpxLg(FWtyk#@aXA;^gahzMy}Mi}=_P;%97j5!i)l& zdU?;FiuImDp;VuH_VkK2uclleAof7pt>%wW#n?VFqqxsK9xzdB9rcQrK7Q+)->Xcc z+eZYu>yNC17&K`m6m#&Q<58jpB7y1aD5~g#R8LO6JDV&a&$8#lf@Jt2Ud=9-D9`yl z+X7IG?e0x4(mNq~#I(%4F**O7oR7q3>yHSlRzmdptZv>dr3LPpwc#7O?~39-m&zN$ zb}S$ry=c!G@%x*n`06H}ZYDlon3BDZqzxR8S>U-x%peri3bgfyVm4@@ril%qQyZJ0 zHhcb{0KCfiu4i?U?cJ2d;F^&^2l}XVCG6l6adZ-|FK)zzU!e01U(qTFcF8-v=K1es z#qL3<5q|VZH-<(LtA{Cu6%qSf*i{L?c1fIW;4^)lKLDm)lEgKfmhp5Qv@Z=G zn5=v=9BrOx`H)gsn;S6dcj4?Wr_<{&RF`e%daR$~nj&hcw{LUcN^D+Bb(BPEAu>Wp zd+W!0)g*NLbRM(>m<68N4Yz;vK3M+U@Rwd0en4ct6CLX}63w^Y@j@i@!K%9qxn-b? zexRStD9;&27UjUZU7u>@nTXTsi`~j)E4aIU_Nc|4mN_7tS1%WBGa?#k9!i|zq6^dN zSakW^mWHN>sWbVwRF969kz)MU?!$nT9JVkbN%Us>pVLZo{xqU!t|z3jb`qf8Lx^Mh zdQm2*Yadq-)^$sWdHHbB{^5;a>O6^w+_L7C(Q|HoAD8hK|E5rhx z@mlinc72nNC*3n|I-L&|7$^)?32?;DsRtf=N-E zfip1PoUypEO0c+??(zKUXtOmbj;QXw;`%gfdO-ly)UX#4?yAWEH8QOFo?t~d+I`iL zGB>1U4FROqey+4Vw>j5GwC&q($9;!Fmqk1)!$*eUVwWhO-v=4uqHH^10(R5RzTd{4cP Z4NE5WCo01)iigeN*5<0D^8Z*S{{=9b#?k-) literal 0 HcmV?d00001 diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/view/template.html b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/view/template.html deleted file mode 100644 index fa22264e235..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/web/servlet/view/template.html +++ /dev/null @@ -1 +0,0 @@ -Hello {{World}} diff --git a/spring-boot-project/spring-boot/src/test/resources/other.yml b/spring-boot-project/spring-boot/src/test/resources/other.yml deleted file mode 100644 index b5bbd790764..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/other.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -name: other diff --git a/spring-boot-project/spring-boot/src/test/resources/override.properties b/spring-boot-project/spring-boot/src/test/resources/override.properties deleted file mode 100644 index 6e30e3fc4db..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/override.properties +++ /dev/null @@ -1,4 +0,0 @@ -foo=bar -bar=override -SPAM=BUCKET -THE_NAME=NAME diff --git a/spring-boot-project/spring-boot/src/test/resources/schema.sql b/spring-boot-project/spring-boot/src/test/resources/schema.sql deleted file mode 100644 index 556b5e372a9..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/schema.sql +++ /dev/null @@ -1,4 +0,0 @@ -CREATE TABLE EXAMPLE ( - id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, - name VARCHAR(30) -); \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/some.properties b/spring-boot-project/spring-boot/src/test/resources/some.properties deleted file mode 100644 index a1e02b44809..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/some.properties +++ /dev/null @@ -1,4 +0,0 @@ -foo=spam -bar=some -spam=bucket -the-name=name diff --git a/spring-boot-project/spring-boot/src/test/resources/specific.properties b/spring-boot-project/spring-boot/src/test/resources/specific.properties deleted file mode 100644 index 81ea9488004..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/specific.properties +++ /dev/null @@ -1 +0,0 @@ -my.property=root diff --git a/spring-boot-project/spring-boot/src/test/resources/specificlocation.properties b/spring-boot-project/spring-boot/src/test/resources/specificlocation.properties deleted file mode 100644 index 25638d8453c..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/specificlocation.properties +++ /dev/null @@ -1,2 +0,0 @@ -my.property=fromspecificlocation -the.property=fromspecificlocation diff --git a/spring-boot-project/spring-boot/src/test/resources/spring-application-config-property-source.properties b/spring-boot-project/spring-boot/src/test/resources/spring-application-config-property-source.properties deleted file mode 100644 index c1b09576e25..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/spring-application-config-property-source.properties +++ /dev/null @@ -1 +0,0 @@ -test.name=spring-application-config-property-source \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/test-banner-with-placeholder.txt b/spring-boot-project/spring-boot/src/test/resources/test-banner-with-placeholder.txt deleted file mode 100644 index 96a027ca9fc..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/test-banner-with-placeholder.txt +++ /dev/null @@ -1,3 +0,0 @@ -Running a Test! - -${test.property} \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/test-banner.txt b/spring-boot-project/spring-boot/src/test/resources/test-banner.txt deleted file mode 100644 index d60fc28bdea..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/test-banner.txt +++ /dev/null @@ -1 +0,0 @@ -Running a Test! \ No newline at end of file diff --git a/spring-boot-project/spring-boot/src/test/resources/testactiveprofiles.properties b/spring-boot-project/spring-boot/src/test/resources/testactiveprofiles.properties deleted file mode 100644 index 11cdae3b77e..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/testactiveprofiles.properties +++ /dev/null @@ -1 +0,0 @@ -spring.profiles.active=${activeProfile:propertiesfile} diff --git a/spring-boot-project/spring-boot/src/test/resources/testprofiles-default.properties b/spring-boot-project/spring-boot/src/test/resources/testprofiles-default.properties deleted file mode 100644 index 841423aee6c..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/testprofiles-default.properties +++ /dev/null @@ -1 +0,0 @@ -my.property=fromdefaultpropertiesfile diff --git a/spring-boot-project/spring-boot/src/test/resources/testprofiles-thedefault.properties b/spring-boot-project/spring-boot/src/test/resources/testprofiles-thedefault.properties deleted file mode 100644 index bc81eb60a66..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/testprofiles-thedefault.properties +++ /dev/null @@ -1,2 +0,0 @@ -my.property=fromdefaultpropertiesfile -the.property=fromdefaultpropertiesfile diff --git a/spring-boot-project/spring-boot/src/test/resources/testprofiles.yml b/spring-boot-project/spring-boot/src/test/resources/testprofiles.yml deleted file mode 100644 index dbe7c5f2720..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/testprofiles.yml +++ /dev/null @@ -1,12 +0,0 @@ ---- -my: - property: fromyamlfile - other: notempty ---- -spring.config.activate.on-profile: dev -my: - property: fromdevprofile ---- -spring.config.activate.on-profile: other -my: - property: fromotherprofile diff --git a/spring-boot-project/spring-boot/src/test/resources/testproperties.properties b/spring-boot-project/spring-boot/src/test/resources/testproperties.properties deleted file mode 100644 index c523d590587..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/testproperties.properties +++ /dev/null @@ -1,2 +0,0 @@ -my.property=frompropertiesfile -the.property=frompropertiesfile diff --git a/spring-boot-project/spring-boot/src/test/resources/testsetmultiprofiles.yml b/spring-boot-project/spring-boot/src/test/resources/testsetmultiprofiles.yml deleted file mode 100644 index 348c27211cd..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/testsetmultiprofiles.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -spring: - profiles: - active: dev,healthcheck diff --git a/spring-boot-project/spring-boot/src/test/resources/testsetmultiprofileslist.yml b/spring-boot-project/spring-boot/src/test/resources/testsetmultiprofileslist.yml deleted file mode 100644 index f5373631604..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/testsetmultiprofileslist.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -spring: - profiles: - active: - - dev - - healthcheck diff --git a/spring-boot-project/spring-boot/src/test/resources/testsetmultiprofileswhitespace.yml b/spring-boot-project/spring-boot/src/test/resources/testsetmultiprofileswhitespace.yml deleted file mode 100644 index cbce97c5104..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/testsetmultiprofileswhitespace.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -spring: - profiles: - active: dev, healthcheck diff --git a/spring-boot-project/spring-boot/src/test/resources/testyaml.yml b/spring-boot-project/spring-boot/src/test/resources/testyaml.yml deleted file mode 100644 index ffce1bd3092..00000000000 --- a/spring-boot-project/spring-boot/src/test/resources/testyaml.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -my: - property: fromyamlfile - array: [1,2,3]